{"version":3,"file":"UnfoldMore-a173b0a3.mjs","sources":["../../../common/resources/client/ui/layout/dashboard-layout-context.ts","../../../common/resources/client/utils/hooks/use-block-body-overflow.ts","../../../common/resources/client/ui/layout/dashboard-layout.tsx","../../../common/resources/client/ui/layout/dashboard-content.tsx","../../../common/resources/client/ui/layout/dashboard-sidenav.tsx","../../../common/resources/client/icons/material/MenuOpen.tsx","../../../common/resources/client/ui/layout/dashboard-navbar.tsx","../../../common/resources/client/datatable/filters/backend-filter.ts","../../../common/resources/client/utils/date/start-of-day.ts","../../../common/resources/client/utils/date/end-of-day.ts","../../../common/resources/client/i18n/get-user-timezone.ts","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/dialog/date-range-presets.ts","../../../common/resources/client/icons/material/DateRange.tsx","../../../common/resources/client/ui/forms/input-field/input.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/date-picker-field.tsx","../../../common/resources/client/ui/forms/input-field/date/utils.ts","../../../common/resources/client/ui/forms/input-field/date/use-base-date-picker-state.ts","../../../common/resources/client/i18n/use-current-date-time.ts","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/use-date-range-picker-state.ts","../../../common/resources/client/icons/material/ArrowRightAlt.tsx","../../../common/resources/client/ui/forms/input-field/date/segments/utils/adjust-segment.ts","../../../common/resources/client/ui/forms/input-field/date/segments/utils/set-segment.ts","../../../common/resources/client/ui/forms/input-field/date/segments/utils/page-step.ts","../../../common/resources/client/ui/forms/input-field/date/segments/editable-date-segment.tsx","../../../common/resources/client/ui/forms/input-field/date/segments/literal-segment.tsx","../../../common/resources/client/ui/forms/input-field/date/segments/utils/get-segment-limits.ts","../../../common/resources/client/ui/forms/input-field/date/segments/date-segment-list.tsx","../../../common/resources/client/icons/material/KeyboardArrowLeft.tsx","../../../common/resources/client/icons/material/KeyboardArrowRight.tsx","../../../common/resources/client/ui/forms/input-field/date/calendar/calendar-cell.tsx","../../../common/resources/client/ui/forms/input-field/date/calendar/calendar-month.tsx","../../../common/resources/client/ui/forms/input-field/date/calendar/calendar.tsx","../../../common/resources/client/i18n/formatted-date-time-range.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/dialog/date-range-preset-list.tsx","../../../common/resources/client/utils/hooks/is-tablet-media-query.ts","../../../common/resources/client/ui/forms/toggle/switch.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/dialog/date-range-compare-presets.ts","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/dialog/date-range-compare-preset-list.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/dialog/date-range-dialog.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/date-range-picker.tsx","../../../common/resources/client/ui/forms/input-field/date/date-range-picker/form-date-range-picker.tsx","../../../common/resources/client/datatable/filters/timestamp-filters.ts","../../../common/resources/client/ui/images/avatar.tsx","../../../common/resources/client/datatable/filters/backend-filters-url-key.ts","../../../common/resources/client/datatable/filters/utils/decode-backend-filters.ts","../../../common/resources/client/datatable/filters/utils/encode-backend-filters.ts","../../../common/resources/client/datatable/filters/backend-filter-url-params.ts","../../../common/resources/client/utils/keybinds/is-ctrl-key-pressed.ts","../../../common/resources/client/ui/tables/navigate-grid.ts","../../../common/resources/client/ui/tables/table-context.ts","../../../common/resources/client/ui/tables/style/use-table-cell-style.ts","../../../common/resources/client/ui/tables/table-cell.tsx","../../../common/resources/client/ui/interactions/use-pointer-events.ts","../../../common/resources/client/utils/keybinds/is-ctrl-or-shift-pressed.ts","../../../common/resources/client/ui/tables/style/use-table-row-style.ts","../../../common/resources/client/ui/tables/table-row.tsx","../../../common/resources/client/ui/tables/checkbox-column-config.tsx","../../../common/resources/client/icons/material/ArrowDownward.tsx","../../../common/resources/client/ui/tables/header-cell.tsx","../../../common/resources/client/ui/tables/table-header-row.tsx","../../../common/resources/client/ui/tables/table.tsx","../../../common/resources/client/datatable/filters/panels/select-filter-panel.tsx","../../../common/resources/client/datatable/filters/panels/date-range-filter-panel.tsx","../../../common/resources/client/users/queries/use-normalized-models.ts","../../../common/resources/client/users/queries/use-normalized-model.ts","../../../common/resources/client/ui/forms/normalized-model-field.tsx","../../../common/resources/client/datatable/filters/panels/normalized-model-filter-panel.tsx","../../../common/resources/client/datatable/filters/filter-operator-names.ts","../../../common/resources/client/datatable/filters/panels/input-filter-panel.tsx","../../../common/resources/client/ui/forms/input-field/chip-field/chip-list.tsx","../../../common/resources/client/ui/forms/input-field/chip-field/string-to-chip-value.ts","../../../common/resources/client/ui/forms/input-field/chip-field/chip-field.tsx","../../../common/resources/client/ui/forms/input-field/chip-field/form-chip-field.tsx","../../../common/resources/client/datatable/filters/panels/chip-field-filter-panel.tsx","../../../common/resources/client/datatable/filters/filter-list/filter-list-trigger-button.tsx","../../../common/resources/client/datatable/filters/filter-list/filter-list-item-dialog-trigger.tsx","../../../common/resources/client/i18n/formatted-number.tsx","../../../common/resources/client/datatable/filters/filter-list/filter-list-control.tsx","../../../common/resources/client/datatable/filters/filter-list/filter-list.tsx","../../../common/resources/client/icons/material/Add.tsx","../../../common/resources/client/icons/material/FileDownload.tsx","../../../common/resources/client/uploads/utils/download-file-from-url.ts","../../../common/resources/client/ui/forms/input-field/date/date-picker/use-date-picker-state.ts","../../../common/resources/client/ui/forms/input-field/date/date-picker/date-picker.tsx","../../../common/resources/client/icons/material/Delete.tsx","../../../common/resources/client/ui/interactions/dnd/drag-state.ts","../../../common/resources/client/ui/interactions/interactable-event.ts","../../../common/resources/client/ui/interactions/active-interaction.ts","../../../common/resources/client/ui/interactions/utils/dom-rect-to-obj.ts","../../../common/resources/client/ui/interactions/dnd/update-rects.ts","../../../common/resources/client/ui/interactions/dnd/use-draggable.ts","../../../common/resources/client/ui/interactions/dnd/read-files-from-data-transfer.ts","../../../common/resources/client/utils/array/async-iterable-to-array.ts","../../../common/resources/client/ui/interactions/dnd/use-droppable.ts","../../../common/resources/client/auth/user.ts","../../../common/resources/client/icons/material/Link.tsx","../../../common/resources/client/icons/material/MoreVert.tsx","../../../common/resources/client/uploads/hooks/file-entry-urls.ts","../../../common/resources/client/uploads/preview/file-preview-context.ts","../../../common/resources/client/uploads/preview/file-preview/default-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/image-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/text-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/video-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/audio-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/pdf-file-preview.tsx","../../../common/resources/client/uploads/preview/file-preview/word-document-file-preview.tsx","../../../common/resources/client/uploads/preview/available-previews.ts","../../../common/resources/client/icons/material/ChevronLeft.tsx","../../../common/resources/client/uploads/file-type-icon/file-thumbnail.tsx","../../../common/resources/client/uploads/preview/file-preview-container.tsx","../../../common/resources/client/uploads/preview/file-preview-dialog.tsx","../../../common/resources/client/admin/file-entry/file-entry-index-filters.ts","../../../common/resources/client/icons/material/ArrowBack.tsx","../../../common/resources/client/icons/material/UnfoldMore.tsx"],"sourcesContent":["import {createContext} from 'react';\n\nexport type DashboardSidenavStatus = 'open' | 'closed' | 'compact';\n\nexport interface DashboardContextValue {\n leftSidenavStatus: DashboardSidenavStatus;\n setLeftSidenavStatus: (status: DashboardSidenavStatus) => void;\n rightSidenavStatus: DashboardSidenavStatus;\n setRightSidenavStatus: (status: DashboardSidenavStatus) => void;\n isMobileMode: boolean | null;\n leftSidenavCanBeCompact?: boolean;\n name: string;\n}\n\nexport const DashboardLayoutContext = createContext(\n null!\n);\n","import {useEffect} from 'react';\n\nexport function useBlockBodyOverflow(disable: boolean = false) {\n useEffect(() => {\n if (disable) {\n document.documentElement.classList.remove('no-page-overflow');\n } else {\n document.documentElement.classList.add('no-page-overflow');\n }\n return () => {\n document.documentElement.classList.remove('no-page-overflow');\n };\n }, [disable]);\n}\n","import {ComponentPropsWithoutRef, useCallback, useMemo} from 'react';\nimport {\n DashboardLayoutContext,\n DashboardSidenavStatus,\n} from './dashboard-layout-context';\nimport {Underlay} from '../overlays/underlay';\nimport {AnimatePresence} from 'framer-motion';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMediaQuery} from '../../utils/hooks/use-media-query';\nimport {\n getFromLocalStorage,\n setInLocalStorage,\n} from '../../utils/hooks/local-storage';\nimport {useBlockBodyOverflow} from '../../utils/hooks/use-block-body-overflow';\nimport clsx from 'clsx';\n\ninterface DashboardLayoutProps extends ComponentPropsWithoutRef<'div'> {\n name: string;\n leftSidenavCanBeCompact?: boolean;\n leftSidenavStatus?: DashboardSidenavStatus;\n onLeftSidenavChange?: (status: DashboardSidenavStatus) => void;\n rightSidenavStatus?: DashboardSidenavStatus;\n initialRightSidenavStatus?: DashboardSidenavStatus;\n onRightSidenavChange?: (status: DashboardSidenavStatus) => void;\n height?: string;\n gridClassName?: string;\n blockBodyOverflow?: boolean;\n}\nexport function DashboardLayout({\n children,\n leftSidenavStatus: leftSidenav,\n onLeftSidenavChange,\n rightSidenavStatus: rightSidenav,\n initialRightSidenavStatus,\n onRightSidenavChange,\n name,\n leftSidenavCanBeCompact,\n height = 'h-screen',\n className,\n gridClassName = 'dashboard-grid',\n blockBodyOverflow = true,\n ...domProps\n}: DashboardLayoutProps) {\n useBlockBodyOverflow(!blockBodyOverflow);\n const isMobile = useMediaQuery('(max-width: 1024px)');\n\n const isCompactModeInitially = useMemo(() => {\n return !name ? false : getFromLocalStorage(`${name}.sidenav.compact`);\n }, [name]);\n const defaultLeftSidenavStatus = isCompactModeInitially ? 'compact' : 'open';\n const [leftSidenavStatus, setLeftSidenavStatus] = useControlledState(\n leftSidenav,\n isMobile ? 'closed' : defaultLeftSidenavStatus,\n onLeftSidenavChange\n );\n\n const rightSidenavStatusDefault = useMemo(() => {\n if (isMobile) {\n return 'closed';\n }\n if (initialRightSidenavStatus != null) {\n return initialRightSidenavStatus;\n }\n const userSelected = getFromLocalStorage(\n `${name}.sidenav.right.position`,\n 'open'\n );\n if (userSelected != null) {\n return userSelected;\n }\n return initialRightSidenavStatus || 'closed';\n }, [isMobile, name, initialRightSidenavStatus]);\n const [rightSidenavStatus, _setRightSidenavStatus] = useControlledState(\n rightSidenav,\n rightSidenavStatusDefault,\n onRightSidenavChange\n );\n const setRightSidenavStatus = useCallback(\n (status: DashboardSidenavStatus) => {\n _setRightSidenavStatus(status);\n setInLocalStorage(`${name}.sidenav.right.position`, status);\n },\n [_setRightSidenavStatus, name]\n );\n\n const shouldShowUnderlay =\n isMobile && (leftSidenavStatus === 'open' || rightSidenavStatus === 'open');\n\n return (\n \n \n {children}\n \n {shouldShowUnderlay && (\n {\n setLeftSidenavStatus('closed');\n setRightSidenavStatus('closed');\n }}\n />\n )}\n \n \n \n );\n}\n","import {cloneElement, ReactElement} from 'react';\nimport clsx from 'clsx';\n\ninterface DashboardContentProps {\n children: ReactElement<{className: string}>;\n isScrollable?: boolean;\n}\nexport function DashboardContent({\n children,\n isScrollable = true,\n}: DashboardContentProps) {\n return cloneElement(children, {\n className: clsx(\n children.props.className,\n isScrollable && 'overflow-y-auto stable-scrollbar',\n 'dashboard-grid-content'\n ),\n });\n}\n","import clsx from 'clsx';\nimport {m} from 'framer-motion';\nimport {cloneElement, ReactElement, useContext} from 'react';\nimport {DashboardLayoutContext} from './dashboard-layout-context';\n\nexport interface DashboardSidenavChildrenProps {\n className?: string;\n isCompactMode?: boolean;\n}\n\nexport interface SidenavProps {\n className?: string;\n children: ReactElement;\n position?: 'left' | 'right';\n size?: 'sm' | 'md' | 'lg' | string;\n mode?: 'overlay';\n // absolute will place sidenav between navbar/footer, fixed will overlay it over nav/footer.\n overlayPosition?: 'absolute' | 'fixed';\n display?: 'flex' | 'block';\n overflow?: string;\n forceClosed?: boolean;\n}\nexport function DashboardSidenav({\n className,\n position,\n children,\n size = 'md',\n mode,\n overlayPosition = 'fixed',\n display = 'flex',\n overflow = 'overflow-hidden',\n forceClosed = false,\n}: SidenavProps) {\n const {\n isMobileMode,\n leftSidenavStatus,\n setLeftSidenavStatus,\n rightSidenavStatus,\n setRightSidenavStatus,\n } = useContext(DashboardLayoutContext);\n const status = position === 'left' ? leftSidenavStatus : rightSidenavStatus;\n const isOverlayMode = isMobileMode || mode === 'overlay';\n\n const variants = {\n open: {display, width: null as any},\n compact: {\n display,\n width: null as any,\n },\n closed: {\n width: 0,\n transitionEnd: {\n display: 'none',\n },\n },\n };\n\n const sizeClassName = getSize(status === 'compact' ? 'compact' : size);\n\n return (\n {\n // close sidenav when user clicks a link or button on mobile\n const target = e.target as HTMLElement;\n if (isMobileMode && (target.closest('button') || target.closest('a'))) {\n setLeftSidenavStatus('closed');\n setRightSidenavStatus('closed');\n }\n }}\n className={clsx(\n className,\n position === 'left'\n ? 'dashboard-grid-sidenav-left'\n : 'dashboard-grid-sidenav-right',\n 'will-change-[width]',\n overflow,\n sizeClassName,\n isOverlayMode && `${overlayPosition} bottom-0 top-0 z-20 shadow-2xl`,\n isOverlayMode && position === 'left' && 'left-0',\n isOverlayMode && position === 'right' && 'right-0',\n )}\n >\n {cloneElement(children, {\n className: clsx(\n children.props.className,\n 'w-full h-full',\n status === 'compact' && 'compact-scrollbar',\n ),\n isCompactMode: status === 'compact',\n })}\n \n );\n}\n\nfunction getSize(size: SidenavProps['size'] | 'compact'): string {\n switch (size) {\n case 'compact':\n return 'w-80';\n case 'sm':\n return 'w-224';\n case 'md':\n return 'w-240';\n case 'lg':\n return 'w-288';\n default:\n return size || '';\n }\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const MenuOpenIcon = createSvgIcon(\n \n, 'MenuOpenOutlined');\n","import {Navbar, NavbarProps} from '../navigation/navbar/navbar';\nimport {IconButton} from '../buttons/icon-button';\nimport React, {useContext} from 'react';\nimport clsx from 'clsx';\nimport {DashboardLayoutContext} from './dashboard-layout-context';\nimport {setInLocalStorage} from '../../utils/hooks/local-storage';\nimport {MenuOpenIcon} from '@common/icons/material/MenuOpen';\n\nexport interface DashboardNavbarProps\n extends Omit {\n hideToggleButton?: boolean;\n}\nexport function DashboardNavbar({\n children,\n className,\n hideToggleButton,\n ...props\n}: DashboardNavbarProps) {\n const {\n isMobileMode,\n leftSidenavStatus,\n setLeftSidenavStatus,\n name,\n leftSidenavCanBeCompact,\n } = useContext(DashboardLayoutContext);\n\n const shouldToggleCompactMode = leftSidenavCanBeCompact && !isMobileMode;\n const shouldShowToggle =\n !hideToggleButton && (isMobileMode || leftSidenavCanBeCompact);\n\n const handleToggle = () => {\n setLeftSidenavStatus(leftSidenavStatus === 'open' ? 'closed' : 'open');\n };\n\n const handleCompactModeToggle = () => {\n const newStatus = leftSidenavStatus === 'compact' ? 'open' : 'compact';\n setInLocalStorage(`${name}.sidenav.compact`, newStatus === 'compact');\n setLeftSidenavStatus(newStatus);\n };\n\n return (\n {\n if (shouldToggleCompactMode) {\n handleCompactModeToggle();\n } else {\n handleToggle();\n }\n }}\n >\n \n \n ) : undefined\n }\n {...props}\n >\n {children}\n \n );\n}\n","import {ComponentType} from 'react';\nimport {MessageDescriptor} from '../../i18n/message-descriptor';\nimport {NormalizedModel} from '@common/datatable/filters/normalized-model';\nimport {ChipValue} from '@common/ui/forms/input-field/chip-field/chip-field';\nimport {AbsoluteDateRange} from '@common/ui/forms/input-field/date/date-range-picker/form-date-range-picker';\nimport {DateValue} from '@internationalized/date';\nimport {FilterListControlProps} from '@common/datatable/filters/filter-list/filter-list-control';\n\nexport interface FilterSelectControl {\n type: FilterControlType.Select;\n options: {label: MessageDescriptor; key: string | number; value: any}[];\n defaultValue?: string | number | boolean;\n placeholder?: MessageDescriptor;\n searchPlaceholder?: MessageDescriptor;\n showSearchField?: boolean;\n}\n\nexport interface FilterNumberInputControl {\n type: FilterControlType.Input;\n placeholder?: MessageDescriptor;\n inputType: 'number';\n minValue?: number;\n maxValue?: number;\n defaultValue: number;\n}\n\nexport interface FilterTextInputControl {\n type: FilterControlType.Input;\n placeholder?: MessageDescriptor;\n inputType: 'string';\n minLength?: number;\n maxLength?: number;\n defaultValue: string;\n}\n\nexport interface FilterSelectModelControl {\n type: FilterControlType.SelectModel;\n model: string;\n defaultValue?: NormalizedModel;\n}\n\nexport interface FilterChipFieldControl {\n type: FilterControlType.ChipField;\n options: FilterSelectControl['options'];\n placeholder?: MessageDescriptor;\n defaultValue: ChipValue[];\n}\n\nexport interface FilterBooleanToggleControl {\n type: FilterControlType.BooleanToggle;\n // value can be something other than boolean, toggling will either send that value or nothing\n defaultValue: string | number | boolean | null;\n}\n\nexport interface DatePickerFilterControl {\n type: FilterControlType.DateRangePicker;\n defaultValue: AbsoluteDateRange;\n min?: DateValue;\n max?: DateValue;\n}\n\nexport interface CustomFilterControl {\n type: FilterControlType.Custom;\n panel: ComponentType<{filter: BackendFilter}>;\n listItem: ComponentType>;\n defaultValue?: any;\n}\n\nexport type FilterControl =\n | FilterSelectControl\n | FilterNumberInputControl\n | FilterTextInputControl\n | FilterSelectModelControl\n | FilterChipFieldControl\n | DatePickerFilterControl\n | FilterBooleanToggleControl\n | CustomFilterControl;\n\nexport interface BackendFilter {\n key: string;\n label: MessageDescriptor;\n description?: MessageDescriptor;\n control: T;\n defaultOperator: FilterOperator;\n operators?: FilterOperator[];\n extraFilters?: {key: string; operator: FilterOperator; value: any}[];\n}\n\nexport enum FilterControlType {\n Select = 'select',\n DateRangePicker = 'dateRangePicker',\n SelectModel = 'selectModel',\n Input = 'input',\n BooleanToggle = 'booleanToggle',\n ChipField = 'chipField',\n Custom = 'custom',\n}\n\nexport enum FilterOperator {\n eq = '=',\n ne = '!=',\n gt = '>',\n gte = '>=',\n lt = '<',\n lte = '<=',\n has = 'has',\n hasAll = 'hasAll',\n doesntHave = 'doesntHave',\n between = 'between',\n}\n\nexport const ALL_PRIMITIVE_OPERATORS = [\n FilterOperator.eq,\n FilterOperator.ne,\n FilterOperator.gt,\n FilterOperator.gte,\n FilterOperator.lt,\n FilterOperator.lte,\n];\n","import {ZonedDateTime} from '@internationalized/date';\n\nexport function startOfDay(date: ZonedDateTime): ZonedDateTime {\n return date.set({hour: 0, minute: 0, second: 0, millisecond: 0});\n}\n","import {ZonedDateTime} from '@internationalized/date';\n\nexport function endOfDay(date: ZonedDateTime): ZonedDateTime {\n return date.set({\n hour: 24 - 1,\n minute: 60 - 1,\n second: 60 - 1,\n millisecond: 1000 - 1,\n });\n}\n","import {getBootstrapData} from '../core/bootstrap-data/use-backend-bootstrap-data';\nimport {getLocalTimeZone} from '@internationalized/date';\n\nexport function getUserTimezone(): string {\n const defaultTimezone = getBootstrapData()?.settings.dates.default_timezone;\n const preferredTimezone =\n getBootstrapData()?.user?.timezone || defaultTimezone || 'auto';\n\n if (!preferredTimezone || preferredTimezone === 'auto') {\n return getLocalTimeZone();\n }\n return preferredTimezone;\n}\n","import {DateRangeValue} from '../date-range-value';\nimport {message} from '@common/i18n/message';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\nimport {\n endOfMonth,\n endOfWeek,\n endOfYear,\n now,\n startOfMonth,\n startOfWeek,\n startOfYear,\n} from '@internationalized/date';\nimport {startOfDay} from '@common/utils/date/start-of-day';\nimport {endOfDay} from '@common/utils/date/end-of-day';\nimport {getBootstrapData} from '@common/core/bootstrap-data/use-backend-bootstrap-data';\nimport {getUserTimezone} from '@common/i18n/get-user-timezone';\n\nconst Now = startOfDay(now(getUserTimezone()));\nconst locale = getBootstrapData()?.i18n?.language || 'en';\n\nexport interface DateRangePreset {\n key: number;\n label: MessageDescriptor;\n getRangeValue: () => DateRangeValue;\n}\n\nexport const DateRangePresets: DateRangePreset[] = [\n {\n key: 0,\n label: message('Today'),\n getRangeValue: () => ({\n preset: 0,\n start: Now,\n end: endOfDay(Now),\n }),\n },\n {\n key: 1,\n label: message('Yesterday'),\n getRangeValue: () => ({\n preset: 1,\n start: Now.subtract({days: 1}),\n end: endOfDay(Now).subtract({days: 1}),\n }),\n },\n {\n key: 2,\n label: message('This week'),\n getRangeValue: () => ({\n preset: 2,\n start: startOfWeek(Now, locale),\n end: endOfWeek(endOfDay(Now), locale),\n }),\n },\n {\n key: 3,\n label: message('Last week'),\n getRangeValue: () => {\n const start = startOfWeek(Now, locale).subtract({days: 7});\n return {\n preset: 3,\n start,\n end: start.add({days: 6}),\n };\n },\n },\n {\n key: 4,\n label: message('Last 7 days'),\n getRangeValue: () => ({\n preset: 4,\n start: Now.subtract({days: 7}),\n end: endOfDay(Now),\n }),\n },\n {\n key: 6,\n label: message('Last 30 days'),\n getRangeValue: () => ({\n preset: 6,\n start: Now.subtract({days: 30}),\n end: endOfDay(Now),\n }),\n },\n {\n key: 7,\n label: message('Last 3 months'),\n getRangeValue: () => ({\n preset: 7,\n start: Now.subtract({months: 3}),\n end: endOfDay(Now),\n }),\n },\n {\n key: 8,\n label: message('Last 12 months'),\n getRangeValue: () => ({\n preset: 8,\n start: Now.subtract({months: 12}),\n end: endOfDay(Now),\n }),\n },\n {\n key: 9,\n label: message('This month'),\n getRangeValue: () => ({\n preset: 9,\n start: startOfMonth(Now),\n end: endOfMonth(endOfDay(Now)),\n }),\n },\n {\n key: 10,\n label: message('This year'),\n getRangeValue: () => ({\n preset: 10,\n start: startOfYear(Now),\n end: endOfYear(endOfDay(Now)),\n }),\n },\n {\n key: 11,\n label: message('Last year'),\n getRangeValue: () => ({\n preset: 11,\n start: startOfYear(Now).subtract({years: 1}),\n end: endOfYear(endOfDay(Now)).subtract({years: 1}),\n }),\n },\n];\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const DateRangeIcon = createSvgIcon(\n \n, 'DateRangeOutlined');\n","import {FocusScope} from '@react-aria/focus';\nimport React, {ComponentPropsWithoutRef, CSSProperties, ReactNode} from 'react';\nimport clsx from 'clsx';\n\ninterface InputProps {\n className?: string;\n children: ReactNode;\n autoFocus?: boolean;\n disabled?: boolean;\n style?: CSSProperties;\n inputProps?: ComponentPropsWithoutRef<'div'>;\n wrapperProps?: ComponentPropsWithoutRef<'div'>;\n onClick?: React.MouseEventHandler;\n}\n\nexport const Input = React.forwardRef(\n (props, ref) => {\n const {\n children,\n inputProps,\n wrapperProps,\n className,\n autoFocus,\n style,\n onClick,\n } = props;\n\n return (\n
\n \n {children}\n
\n \n );\n }\n);\n","import React, {ComponentPropsWithoutRef, FocusEventHandler, Ref} from 'react';\nimport clsx from 'clsx';\nimport {createFocusManager} from '@react-aria/focus';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {getInputFieldClassNames} from '../../get-input-field-class-names';\nimport {Field, FieldProps} from '../../field';\nimport {Input} from '../../input';\nimport {useField} from '../../use-field';\n\nexport interface DatePickerFieldProps\n extends Omit {\n inputRef?: Ref;\n onBlur?: FocusEventHandler;\n showCalendarFooter?: boolean;\n}\nexport const DatePickerField = React.forwardRef<\n HTMLDivElement,\n DatePickerFieldProps\n>(({inputRef, wrapperProps, children, onBlur, ...other}, ref) => {\n const fieldClassNames = getInputFieldClassNames(other);\n const objRef = useObjectRef(ref);\n\n const {fieldProps, inputProps} = useField({\n ...other,\n focusRef: objRef,\n labelElementType: 'span',\n });\n\n fieldClassNames.wrapper = clsx(\n fieldClassNames.wrapper,\n other.disabled && 'pointer-events-none',\n );\n\n return (\n []>(\n wrapperProps!,\n {\n onBlur: e => {\n if (!objRef.current.contains(e.relatedTarget)) {\n onBlur?.(e);\n }\n },\n onClick: () => {\n // focus first segment when clicking on label or somewhere else in the field, but no directly on segment\n const focusManager = createFocusManager(objRef);\n focusManager?.focusFirst();\n },\n },\n )}\n fieldClassNames={fieldClassNames}\n ref={objRef}\n {...fieldProps}\n >\n \n {children}\n \n \n );\n});\n","import {CalendarDate, DateValue} from '@internationalized/date';\n\nexport function getDefaultGranularity(date: DateValue) {\n if (date instanceof CalendarDate) {\n return 'day';\n }\n return 'minute';\n}\n\nexport function dateIsInvalid(\n date: CalendarDate,\n min?: DateValue,\n max?: DateValue\n) {\n return (\n (min != null && date.compare(min) < 0) ||\n (max != null && date.compare(max) > 0)\n );\n}\n","import {useState} from 'react';\nimport {DateValue, toZoned, ZonedDateTime} from '@internationalized/date';\nimport {getDefaultGranularity} from './utils';\nimport type {DatePickerValueProps} from './date-picker/use-date-picker-state';\nimport {DateRangeValue} from './date-range-picker/date-range-value';\nimport {useUserTimezone} from '@common/i18n/use-user-timezone';\n\nexport function useBaseDatePickerState(\n selectedDate: DateValue,\n props:\n | DatePickerValueProps\n | DatePickerValueProps, DateRangeValue>\n) {\n const timezone = useUserTimezone();\n const [calendarIsOpen, setCalendarIsOpen] = useState(false);\n const closeDialogOnSelection = props.closeDialogOnSelection ?? true;\n\n const granularity = props.granularity || getDefaultGranularity(selectedDate);\n const min = props.min ? toZoned(props.min, timezone) : undefined;\n const max = props.max ? toZoned(props.max, timezone) : undefined;\n\n return {\n timezone,\n granularity,\n min,\n max,\n calendarIsOpen,\n setCalendarIsOpen,\n closeDialogOnSelection,\n };\n}\n","import {useMemo} from 'react';\nimport {now} from '@internationalized/date';\nimport {useUserTimezone} from './use-user-timezone';\n\nexport function useCurrentDateTime() {\n const timezone = useUserTimezone();\n return useMemo(() => {\n return now(timezone);\n }, [timezone]);\n}\n","import {useControlledState} from '@react-stately/utils';\nimport {HTMLAttributes, useCallback, useState} from 'react';\nimport {\n CalendarDate,\n DateValue,\n endOfMonth,\n isSameDay,\n isSameMonth,\n maxDate,\n minDate,\n startOfMonth,\n toCalendarDate,\n toZoned,\n ZonedDateTime,\n} from '@internationalized/date';\nimport {\n BaseDatePickerState,\n DatePickerValueProps,\n} from '../date-picker/use-date-picker-state';\nimport {DateRangeValue} from './date-range-value';\nimport {useBaseDatePickerState} from '../use-base-date-picker-state';\nimport {startOfDay} from '@common/utils/date/start-of-day';\nimport {endOfDay} from '@common/utils/date/end-of-day';\nimport {useCurrentDateTime} from '@common/i18n/use-current-date-time';\n\nexport interface IsPlaceholderValue {\n start: boolean;\n end: boolean;\n}\n\nexport type DateRangePickerState = BaseDatePickerState<\n DateRangeValue,\n IsPlaceholderValue\n>;\n\nexport function useDateRangePickerState(\n props: DatePickerValueProps, DateRangeValue>,\n): DateRangePickerState {\n const now = useCurrentDateTime();\n const [isPlaceholder, setIsPlaceholder] = useState({\n start: (!props.value || !props.value.start) && !props.defaultValue?.start,\n end: (!props.value || !props.value.end) && !props.defaultValue?.end,\n });\n\n // if user clears the date, we will want to still keep an\n // instance internally, but return null via \"onChange\" callback\n const setStateValue = props.onChange;\n const [internalValue, setInternalValue] = useControlledState(\n props.value ? completeRange(props.value, now) : undefined,\n !props.value ? completeRange(props.defaultValue, now) : undefined,\n value => {\n setIsPlaceholder({start: false, end: false});\n setStateValue?.(value);\n },\n );\n\n const {\n min,\n max,\n granularity,\n timezone,\n calendarIsOpen,\n setCalendarIsOpen,\n closeDialogOnSelection,\n } = useBaseDatePickerState(internalValue.start, props);\n\n const clear = useCallback(() => {\n setIsPlaceholder({start: true, end: true});\n setInternalValue(completeRange(null, now));\n setStateValue?.(null);\n setCalendarIsOpen(false);\n }, [now, setInternalValue, setStateValue, setCalendarIsOpen]);\n\n const [anchorDate, setAnchorDate] = useState(null);\n const [isHighlighting, setIsHighlighting] = useState(false);\n const [highlightedRange, setHighlightedRange] =\n useState(internalValue);\n const [calendarDates, setCalendarDates] = useState(() => {\n return rangeToCalendarDates(internalValue, max);\n });\n\n const constrainRange = useCallback(\n (range: DateRangeValue): DateRangeValue => {\n let start = range.start;\n let end = range.end;\n\n // make sure start date is after min date and before max date/range end\n if (min) {\n start = maxDate(start, min);\n }\n const startMax = max ? minDate(max, end) : end;\n start = minDate(start, startMax);\n\n // make sure end date is after min date/range start and before max date\n const endMin = min ? maxDate(min, start) : start;\n end = maxDate(end, endMin);\n\n if (max) {\n end = minDate(end, max);\n }\n\n return {start: toZoned(start, timezone), end: toZoned(end, timezone)};\n },\n [min, max, timezone],\n );\n\n const setSelectedValue = useCallback(\n (newRange: DateRangeValue) => {\n const value = {\n ...constrainRange(newRange),\n preset: newRange.preset,\n };\n setInternalValue(value);\n setHighlightedRange(value);\n setCalendarDates(rangeToCalendarDates(value, max));\n setIsPlaceholder({start: false, end: false});\n },\n [setInternalValue, constrainRange, max],\n );\n\n const dayIsActive = useCallback(\n (day: CalendarDate) => {\n return (\n (!isPlaceholder.start && isSameDay(day, highlightedRange.start)) ||\n (!isPlaceholder.end && isSameDay(day, highlightedRange.end))\n );\n },\n [highlightedRange, isPlaceholder],\n );\n\n const dayIsHighlighted = useCallback(\n (day: CalendarDate) => {\n return (\n (isHighlighting || (!isPlaceholder.start && !isPlaceholder.end)) &&\n day.compare(highlightedRange.start) >= 0 &&\n day.compare(highlightedRange.end) <= 0\n );\n },\n [highlightedRange, isPlaceholder, isHighlighting],\n );\n\n const dayIsRangeStart = useCallback(\n (day: CalendarDate) => isSameDay(day, highlightedRange.start),\n [highlightedRange],\n );\n\n const dayIsRangeEnd = useCallback(\n (day: CalendarDate) => isSameDay(day, highlightedRange.end),\n [highlightedRange],\n );\n\n const getCellProps = useCallback(\n (date: CalendarDate, isSameMonth: boolean): HTMLAttributes => {\n return {\n onPointerEnter: () => {\n if (isHighlighting && isSameMonth) {\n setHighlightedRange(\n makeRange({start: anchorDate!, end: date, timezone}),\n );\n }\n },\n onClick: () => {\n if (!isHighlighting) {\n setIsHighlighting(true);\n setAnchorDate(date);\n setHighlightedRange(makeRange({start: date, end: date, timezone}));\n } else {\n const finalRange = makeRange({\n start: anchorDate!,\n end: date,\n timezone,\n });\n // cast to start and end of day after making range, because \"makeRange\"\n // will flip start and end dates, if they are out of order\n finalRange.start = startOfDay(finalRange.start);\n finalRange.end = endOfDay(finalRange.end);\n setIsHighlighting(false);\n setAnchorDate(null);\n setSelectedValue?.(finalRange);\n if (closeDialogOnSelection) {\n setCalendarIsOpen?.(false);\n }\n }\n },\n };\n },\n [\n anchorDate,\n isHighlighting,\n setSelectedValue,\n setCalendarIsOpen,\n closeDialogOnSelection,\n timezone,\n ],\n );\n\n return {\n selectedValue: internalValue,\n setSelectedValue,\n calendarIsOpen,\n setCalendarIsOpen,\n dayIsActive,\n dayIsHighlighted,\n dayIsRangeStart,\n dayIsRangeEnd,\n getCellProps,\n calendarDates,\n setIsPlaceholder,\n isPlaceholder,\n clear,\n setCalendarDates,\n min,\n max,\n granularity,\n timezone,\n closeDialogOnSelection,\n };\n}\n\nfunction rangeToCalendarDates(\n range: DateRangeValue,\n max?: DateValue,\n): CalendarDate[] {\n let start = toCalendarDate(startOfMonth(range.start));\n let end = toCalendarDate(endOfMonth(range.end));\n\n // make sure we don't show the same month twice\n if (isSameMonth(start, end)) {\n end = endOfMonth(end.add({months: 1}));\n }\n\n // if next month is disabled, show previous instead\n if (max && end.compare(max) > 0) {\n end = start;\n start = startOfMonth(start.subtract({months: 1}));\n }\n return [start, end];\n}\n\ninterface MakeRangeProps {\n start: DateValue;\n end: DateValue;\n timezone: string;\n}\nfunction makeRange(props: MakeRangeProps): DateRangeValue {\n const start = toZoned(props.start, props.timezone);\n const end = toZoned(props.end, props.timezone);\n if (start.compare(end) > 0) {\n return {start: end, end: start};\n }\n return {start, end};\n}\n\nfunction completeRange(\n range: Partial | null | undefined,\n now: ZonedDateTime,\n): DateRangeValue {\n if (range?.start && range?.end) {\n return range as DateRangeValue;\n } else if (!range?.start && range?.end) {\n range.start = range.end.subtract({months: 1});\n return range as DateRangeValue;\n } else if (!range?.end && range?.start) {\n range.end = range.start.add({months: 1});\n return range as DateRangeValue;\n }\n return {start: now, end: now.add({months: 1})};\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ArrowRightAltIcon = createSvgIcon(\n \n, 'ArrowRightAltOutlined');\n","import {ZonedDateTime} from '@internationalized/date';\n\nexport function adjustSegment(\n value: ZonedDateTime,\n part: string,\n amount: number,\n options: Intl.ResolvedDateTimeFormatOptions\n) {\n switch (part) {\n case 'era':\n case 'year':\n case 'month':\n case 'day':\n return value.cycle(part, amount, {round: part === 'year'});\n }\n\n if ('hour' in value) {\n switch (part) {\n case 'dayPeriod': {\n const hours = value.hour;\n const isPM = hours >= 12;\n return value.set({hour: isPM ? hours - 12 : hours + 12});\n }\n case 'hour':\n case 'minute':\n case 'second':\n return value.cycle(part, amount, {\n round: part !== 'hour',\n hourCycle: options.hour12 ? 12 : 24,\n });\n }\n }\n\n return value;\n}\n","import {ZonedDateTime} from '@internationalized/date';\n\nexport function setSegment(\n value: ZonedDateTime,\n part: string,\n segmentValue: number,\n options: Intl.ResolvedDateTimeFormatOptions\n) {\n switch (part) {\n case 'day':\n case 'month':\n case 'year':\n return value.set({[part]: segmentValue});\n }\n\n if ('hour' in value) {\n switch (part) {\n case 'dayPeriod': {\n const hours = value.hour;\n const wasPM = hours >= 12;\n const isPM = segmentValue >= 12;\n if (isPM === wasPM) {\n return value;\n }\n return value.set({hour: wasPM ? hours - 12 : hours + 12});\n }\n case 'hour':\n // In 12 hour time, ensure that AM/PM does not change\n if (options.hour12) {\n const hours = value.hour;\n const wasPM = hours >= 12;\n if (!wasPM && segmentValue === 12) {\n segmentValue = 0;\n }\n if (wasPM && segmentValue < 12) {\n segmentValue += 12;\n }\n }\n // fallthrough\n case 'minute':\n case 'second':\n return value.set({[part]: segmentValue});\n }\n }\n\n return value;\n}\n","export const PAGE_STEP = {\n year: 5,\n month: 2,\n day: 7,\n hour: 2,\n minute: 15,\n second: 15,\n dayPeriod: 1,\n};\n","import {useFocusManager} from '@react-aria/focus';\nimport React, {\n ComponentPropsWithoutRef,\n HTMLAttributes,\n KeyboardEventHandler,\n useMemo,\n useRef,\n} from 'react';\nimport {NumberParser} from '@internationalized/number';\nimport {mergeProps} from '@react-aria/utils';\nimport {today, ZonedDateTime} from '@internationalized/date';\nimport {useSelectedLocale} from '@common/i18n/selected-locale';\nimport {useDateFormatter} from '@common/i18n/use-date-formatter';\nimport {DatePickerState} from '../date-picker/use-date-picker-state';\nimport {adjustSegment} from './utils/adjust-segment';\nimport {setSegment} from './utils/set-segment';\nimport {PAGE_STEP} from './utils/page-step';\nimport {DateRangePickerState} from '../date-range-picker/use-date-range-picker-state';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\n\nexport interface EditableSegment {\n type: 'day' | 'dayPeriod' | 'hour' | 'minute' | 'month' | 'second' | 'year';\n text: string;\n value: number;\n minValue: number;\n maxValue: number;\n minLength: number;\n}\n\ninterface DatePickerSegmentProps {\n segment: EditableSegment;\n domProps?: ComponentPropsWithoutRef<'div'>;\n state: DatePickerState | DateRangePickerState;\n value: ZonedDateTime;\n onChange: (newValue: ZonedDateTime) => void;\n isPlaceholder?: boolean;\n}\nexport function EditableDateSegment({\n segment,\n domProps,\n value,\n onChange,\n isPlaceholder,\n state: {timezone, calendarIsOpen, setCalendarIsOpen},\n}: DatePickerSegmentProps) {\n const isMobile = useIsMobileMediaQuery();\n const enteredKeys = useRef('');\n const {localeCode} = useSelectedLocale();\n const focusManager = useFocusManager();\n const formatter = useDateFormatter({timeZone: timezone});\n const parser = useMemo(\n () => new NumberParser(localeCode, {maximumFractionDigits: 0}),\n [localeCode],\n );\n\n const setSegmentValue = (newValue: number) => {\n onChange(\n setSegment(value, segment.type, newValue, formatter.resolvedOptions()),\n );\n };\n\n const adjustSegmentValue = (amount: number) => {\n onChange(\n adjustSegment(value, segment.type, amount, formatter.resolvedOptions()),\n );\n };\n\n const backspace = () => {\n if (parser.isValidPartialNumber(segment.text)) {\n const newValue = segment.text.slice(0, -1);\n const parsed = parser.parse(newValue);\n if (newValue.length === 0 || parsed === 0) {\n const now = today(timezone);\n if (segment.type in now) {\n // @ts-ignore\n setSegmentValue(now[segment.type]);\n }\n } else {\n setSegmentValue(parsed);\n }\n enteredKeys.current = newValue;\n } else if (segment.type === 'dayPeriod') {\n adjustSegmentValue(-1);\n }\n };\n\n const onKeyDown: KeyboardEventHandler = e => {\n if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {\n return;\n }\n\n // Navigation between date segments and deletion\n switch (e.key) {\n case 'ArrowLeft':\n e.preventDefault();\n e.stopPropagation();\n focusManager?.focusPrevious();\n break;\n case 'ArrowRight':\n e.preventDefault();\n e.stopPropagation();\n focusManager?.focusNext();\n break;\n case 'Enter':\n (e.target as HTMLElement).closest('form')?.requestSubmit();\n setCalendarIsOpen(!calendarIsOpen);\n break;\n case 'Tab':\n break;\n case 'Backspace':\n case 'Delete': {\n e.preventDefault();\n e.stopPropagation();\n backspace();\n break;\n }\n\n // Spinbutton incrementing/decrementing\n case 'ArrowUp':\n e.preventDefault();\n enteredKeys.current = '';\n adjustSegmentValue(1);\n break;\n case 'ArrowDown':\n e.preventDefault();\n enteredKeys.current = '';\n adjustSegmentValue(-1);\n break;\n case 'PageUp':\n e.preventDefault();\n enteredKeys.current = '';\n adjustSegmentValue(PAGE_STEP[segment.type] || 1);\n break;\n case 'PageDown':\n e.preventDefault();\n enteredKeys.current = '';\n adjustSegmentValue(-(PAGE_STEP[segment.type] || 1));\n break;\n case 'Home':\n e.preventDefault();\n enteredKeys.current = '';\n setSegmentValue(segment.maxValue);\n break;\n case 'End':\n e.preventDefault();\n enteredKeys.current = '';\n setSegmentValue(segment.minValue);\n break;\n }\n\n onInput(e.key);\n };\n\n const amPmFormatter = useDateFormatter({hour: 'numeric', hour12: true});\n const am = useMemo(() => {\n const amDate = new Date();\n amDate.setHours(0);\n return amPmFormatter\n .formatToParts(amDate)\n .find(part => part.type === 'dayPeriod')!.value;\n }, [amPmFormatter]);\n const pm = useMemo(() => {\n const pmDate = new Date();\n pmDate.setHours(12);\n return amPmFormatter\n .formatToParts(pmDate)\n .find(part => part.type === 'dayPeriod')!.value;\n }, [amPmFormatter]);\n\n // Update date values on user keyboard input\n const onInput = (key: string) => {\n const newValue = enteredKeys.current + key;\n\n switch (segment.type) {\n case 'dayPeriod':\n if (am.toLowerCase().startsWith(key)) {\n setSegmentValue(0);\n } else if (pm.toLowerCase().startsWith(key)) {\n setSegmentValue(12);\n } else {\n break;\n }\n focusManager?.focusNext();\n break;\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n case 'month':\n case 'year': {\n if (!parser.isValidPartialNumber(newValue)) {\n return;\n }\n\n let numberValue = parser.parse(newValue);\n let segmentValue = numberValue;\n let allowsZero = segment.minValue === 0;\n if (segment.type === 'hour' && formatter.resolvedOptions().hour12) {\n switch (formatter.resolvedOptions().hourCycle) {\n case 'h11':\n if (numberValue > 11) {\n segmentValue = parser.parse(key);\n }\n break;\n case 'h12':\n allowsZero = false;\n if (numberValue > 12) {\n segmentValue = parser.parse(key);\n }\n break;\n }\n\n if (segment.value >= 12 && numberValue > 1) {\n numberValue += 12;\n }\n } else if (numberValue > segment.maxValue) {\n segmentValue = parser.parse(key);\n }\n\n if (Number.isNaN(numberValue)) {\n return;\n }\n\n const shouldSetValue = segmentValue !== 0 || allowsZero;\n if (shouldSetValue) {\n setSegmentValue(segmentValue);\n }\n\n if (\n Number(`${numberValue}0`) > segment.maxValue ||\n newValue.length >= String(segment.maxValue).length\n ) {\n enteredKeys.current = '';\n if (shouldSetValue) {\n focusManager?.focusNext();\n }\n } else {\n enteredKeys.current = newValue;\n }\n break;\n }\n }\n };\n\n const spinButtonProps: HTMLAttributes = isMobile\n ? {}\n : {\n 'aria-label': segment.type,\n 'aria-valuetext': isPlaceholder ? undefined : `${segment.value}`,\n 'aria-valuemin': segment.minValue,\n 'aria-valuemax': segment.maxValue,\n 'aria-valuenow': isPlaceholder ? undefined : segment.value,\n tabIndex: 0,\n onKeyDown,\n };\n\n return (\n {\n enteredKeys.current = '';\n e.target.scrollIntoView({block: 'nearest'});\n },\n onClick: e => {\n e.preventDefault();\n e.stopPropagation();\n },\n } as HTMLAttributes)}\n className=\"box-content cursor-default select-none whitespace-nowrap rounded p-2 text-center tabular-nums caret-transparent outline-none focus:bg-primary focus:text-on-primary\"\n >\n {segment.text.padStart(segment.minLength, '0')}\n \n );\n}\n","import {useFocusManager} from '@react-aria/focus';\nimport {ComponentPropsWithoutRef} from 'react';\n\nexport interface LiteralSegment {\n type: 'literal';\n minLength: 1;\n text: string;\n}\n\ninterface LiteralSegmentProps extends ComponentPropsWithoutRef<'div'> {\n segment: LiteralSegment;\n domProps?: ComponentPropsWithoutRef<'div'>;\n}\nexport function LiteralDateSegment({segment, domProps}: LiteralSegmentProps) {\n const focusManager = useFocusManager();\n return (\n {\n if (e.pointerType === 'mouse') {\n e.preventDefault();\n const res = focusManager?.focusNext({from: e.target as HTMLElement});\n if (!res) {\n focusManager?.focusPrevious({from: e.target as HTMLElement});\n }\n }\n }}\n aria-hidden\n className=\"min-w-4 cursor-default select-none\"\n >\n {segment.text}\n \n );\n}\n","import {\n DateValue,\n getMinimumDayInMonth,\n getMinimumMonthInYear,\n} from '@internationalized/date';\n\nexport function getSegmentLimits(\n date: DateValue,\n type: string,\n options: Intl.ResolvedDateTimeFormatOptions\n) {\n switch (type) {\n case 'year':\n return {\n value: date.year,\n placeholder: 'yyyy',\n minValue: 1,\n maxValue: date.calendar.getYearsInEra(date),\n };\n case 'month':\n return {\n value: date.month,\n placeholder: 'mm',\n minValue: getMinimumMonthInYear(date),\n maxValue: date.calendar.getMonthsInYear(date),\n };\n case 'day':\n return {\n value: date.day,\n minValue: getMinimumDayInMonth(date),\n maxValue: date.calendar.getDaysInMonth(date),\n placeholder: 'dd',\n };\n }\n\n if ('hour' in date) {\n switch (type) {\n case 'dayPeriod':\n return {\n value: date.hour >= 12 ? 12 : 0,\n minValue: 0,\n maxValue: 12,\n placeholder: '--',\n };\n case 'hour':\n if (options.hour12) {\n const isPM = date.hour >= 12;\n return {\n value: date.hour,\n minValue: isPM ? 12 : 0,\n maxValue: isPM ? 23 : 11,\n placeholder: '--',\n };\n }\n\n return {\n value: date.hour,\n minValue: 0,\n maxValue: 23,\n placeholder: '--',\n };\n case 'minute':\n return {\n value: date.minute,\n minValue: 0,\n maxValue: 59,\n placeholder: '--',\n };\n }\n }\n\n return {};\n}\n","import React, {ComponentPropsWithoutRef, useMemo} from 'react';\nimport {ZonedDateTime} from '@internationalized/date';\nimport {EditableDateSegment, EditableSegment} from './editable-date-segment';\nimport {LiteralDateSegment, LiteralSegment} from './literal-segment';\nimport {useDateFormatter} from '@common/i18n/use-date-formatter';\nimport {DatePickerState} from '../date-picker/use-date-picker-state';\nimport {getSegmentLimits} from './utils/get-segment-limits';\nimport {DateRangePickerState} from '../date-range-picker/use-date-range-picker-state';\n\ninterface DateSegmentListProps {\n segmentProps?: ComponentPropsWithoutRef<'div'>;\n state: DatePickerState | DateRangePickerState;\n value: ZonedDateTime;\n onChange: (newValue: ZonedDateTime) => void;\n isPlaceholder?: boolean;\n}\nexport function DateSegmentList({\n segmentProps,\n state,\n value,\n onChange,\n isPlaceholder,\n}: DateSegmentListProps) {\n const {granularity} = state;\n const options = useMemo(() => {\n const memoOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n };\n if (granularity === 'minute') {\n memoOptions.hour = 'numeric';\n memoOptions.minute = 'numeric';\n }\n return memoOptions;\n }, [granularity]);\n\n const formatter = useDateFormatter(options);\n\n const dateValue = useMemo(() => value.toDate(), [value]);\n const segments = useMemo(() => {\n return formatter.formatToParts(dateValue).map(segment => {\n const limits = getSegmentLimits(\n value,\n segment.type,\n formatter.resolvedOptions(),\n );\n const textValue =\n isPlaceholder && segment.type !== 'literal'\n ? limits.placeholder\n : segment.value;\n return {\n type: segment.type,\n text: segment.value === ', ' ? ' ' : textValue,\n ...limits,\n minLength:\n segment.type !== 'literal' ? String(limits.maxValue).length : 1,\n } as LiteralSegment | EditableSegment;\n });\n }, [dateValue, formatter, isPlaceholder, value]);\n\n return (\n
\n {segments.map((segment, index) => {\n if (segment.type === 'literal') {\n return (\n \n );\n }\n return (\n \n );\n })}\n
\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const KeyboardArrowLeftIcon = createSvgIcon(\n \n, 'KeyboardArrowLeftOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const KeyboardArrowRightIcon = createSvgIcon(\n \n, 'KeyboardArrowRightOutlined');\n","import React from 'react';\nimport clsx from 'clsx';\nimport {\n CalendarDate,\n DateValue,\n getDayOfWeek,\n isSameMonth,\n isToday,\n} from '@internationalized/date';\nimport {useSelectedLocale} from '../../../../../i18n/selected-locale';\nimport {DatePickerState} from '../date-picker/use-date-picker-state';\nimport {dateIsInvalid} from '../utils';\nimport {DateRangePickerState} from '../date-range-picker/use-date-range-picker-state';\n\ninterface CalendarCellProps {\n date: CalendarDate;\n currentMonth: DateValue;\n state: DatePickerState | DateRangePickerState;\n}\nexport function CalendarCell({\n date,\n currentMonth,\n state: {\n dayIsActive,\n dayIsHighlighted,\n dayIsRangeStart,\n dayIsRangeEnd,\n getCellProps,\n timezone,\n min,\n max,\n },\n}: CalendarCellProps) {\n const {localeCode} = useSelectedLocale();\n const dayOfWeek = getDayOfWeek(date, localeCode);\n const isActive = dayIsActive(date);\n const isHighlighted = dayIsHighlighted(date);\n const isRangeStart = dayIsRangeStart(date);\n const isRangeEnd = dayIsRangeEnd(date);\n const dayIsToday = isToday(date, timezone);\n const sameMonth = isSameMonth(date, currentMonth);\n const isDisabled = dateIsInvalid(date, min, max);\n\n return (\n \n \n {date.day}\n \n {isHighlighted && sameMonth && (\n \n )}\n \n );\n}\n","import React from 'react';\nimport clsx from 'clsx';\nimport {m} from 'framer-motion';\nimport {\n CalendarDate,\n endOfMonth,\n getWeeksInMonth,\n startOfMonth,\n startOfWeek,\n} from '@internationalized/date';\nimport {KeyboardArrowLeftIcon} from '../../../../../icons/material/KeyboardArrowLeft';\nimport {IconButton} from '../../../../buttons/icon-button';\nimport {KeyboardArrowRightIcon} from '../../../../../icons/material/KeyboardArrowRight';\nimport {CalendarCell} from './calendar-cell';\nimport {DatePickerState} from '../date-picker/use-date-picker-state';\nimport {useDateFormatter} from '../../../../../i18n/use-date-formatter';\nimport {useSelectedLocale} from '../../../../../i18n/selected-locale';\nimport {dateIsInvalid} from '../utils';\nimport {DateRangePickerState} from '../date-range-picker/use-date-range-picker-state';\n\nexport interface CalendarMonthProps {\n state: DatePickerState | DateRangePickerState;\n startDate: CalendarDate;\n isFirst: boolean;\n isLast: boolean;\n}\nexport function CalendarMonth({\n startDate,\n state,\n isFirst,\n isLast,\n}: CalendarMonthProps) {\n const {localeCode} = useSelectedLocale();\n const weeksInMonth = getWeeksInMonth(startDate, localeCode);\n const monthStart = startOfWeek(startDate, localeCode);\n\n return (\n
\n \n
\n \n {[...new Array(weeksInMonth).keys()].map(weekIndex => (\n \n {[...new Array(7).keys()].map(dayIndex => (\n \n ))}\n \n ))}\n
\n
\n );\n}\n\ninterface CalendarMonthHeaderProps {\n state: DatePickerState | DateRangePickerState;\n currentMonth: CalendarDate;\n isFirst: boolean;\n isLast: boolean;\n}\nfunction CalendarMonthHeader({\n currentMonth,\n isFirst,\n isLast,\n state: {calendarDates, setCalendarDates, timezone, min, max},\n}: CalendarMonthHeaderProps) {\n const shiftCalendars = (direction: 'forward' | 'backward') => {\n const count = calendarDates.length;\n let newDates: CalendarDate[];\n if (direction === 'forward') {\n newDates = calendarDates.map(date =>\n endOfMonth(date.add({months: count}))\n );\n } else {\n newDates = calendarDates.map(date =>\n endOfMonth(date.subtract({months: count}))\n );\n }\n setCalendarDates(newDates);\n };\n\n const monthFormatter = useDateFormatter({\n month: 'long',\n year: 'numeric',\n era: currentMonth.calendar.identifier !== 'gregory' ? 'long' : undefined,\n calendar: currentMonth.calendar.identifier,\n });\n\n const isBackwardDisabled = dateIsInvalid(\n currentMonth.subtract({days: 1}),\n min,\n max\n );\n const isForwardDisabled = dateIsInvalid(\n startOfMonth(currentMonth.add({months: 1})),\n min,\n max\n );\n\n return (\n
\n {\n shiftCalendars('backward');\n }}\n >\n \n \n
\n {monthFormatter.format(currentMonth.toDate(timezone))}\n
\n {\n shiftCalendars('forward');\n }}\n >\n \n \n
\n );\n}\n\ninterface WeekdayHeaderProps {\n state: DatePickerState | DateRangePickerState;\n startDate: CalendarDate;\n}\nfunction WeekdayHeader({state: {timezone}, startDate}: WeekdayHeaderProps) {\n const {localeCode} = useSelectedLocale();\n const dayFormatter = useDateFormatter({weekday: 'short'});\n\n const monthStart = startOfWeek(startDate, localeCode);\n\n return (\n
\n {[...new Array(7).keys()].map(index => {\n const date = monthStart.add({days: index});\n const dateDay = date.toDate(timezone);\n const weekday = dayFormatter.format(dateDay);\n return (\n \n
\n {weekday}\n
\n
\n );\n })}\n \n );\n}\n","import React, {Fragment} from 'react';\nimport {startOfMonth, toCalendarDate} from '@internationalized/date';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {CalendarMonth} from './calendar-month';\nimport {DatePickerState} from '../date-picker/use-date-picker-state';\nimport {DateRangePickerState} from '../date-range-picker/use-date-range-picker-state';\n\ninterface CalendarProps {\n state: DatePickerState | DateRangePickerState;\n visibleMonths?: 1 | 2;\n}\nexport function Calendar({state, visibleMonths = 1}: CalendarProps) {\n const isMobile = useIsMobileMediaQuery();\n\n if (isMobile) {\n visibleMonths = 1;\n }\n\n return (\n \n {[...new Array(visibleMonths).keys()].map(index => {\n const startDate = toCalendarDate(\n startOfMonth(state.calendarDates[index])\n );\n const isFirst = index === 0;\n const isLast = index === visibleMonths - 1;\n return (\n \n );\n })}\n \n );\n}\n","import {DateValue, parseAbsolute} from '@internationalized/date';\nimport {Fragment, memo} from 'react';\nimport {useDateFormatter} from './use-date-formatter';\nimport {useSettings} from '../core/settings/use-settings';\nimport {shallowEqual} from '../utils/shallow-equal';\nimport {useUserTimezone} from './use-user-timezone';\nimport {DateFormatPresets} from '@common/i18n/formatted-date';\n\ninterface FormattedDateTimeRangeProps {\n start?: string | DateValue | Date;\n end?: string | DateValue | Date;\n options?: Intl.DateTimeFormatOptions;\n preset?: keyof typeof DateFormatPresets;\n}\nexport const FormattedDateTimeRange = memo(\n ({start, end, options, preset}: FormattedDateTimeRangeProps) => {\n const {dates} = useSettings();\n const timezone = useUserTimezone();\n const formatter = useDateFormatter(\n options ||\n (DateFormatPresets as Record)[\n preset || dates?.format\n ]\n );\n\n if (!start || !end) {\n return null;\n }\n\n let value: string;\n\n try {\n value = formatter.formatRange(\n castToDate(start, timezone),\n castToDate(end, timezone)\n );\n } catch (e) {\n value = '';\n }\n\n return {value};\n },\n shallowEqual\n);\n\nfunction castToDate(date: string | DateValue | Date, timezone: string): Date {\n if (typeof date === 'string') {\n return parseAbsolute(date, timezone).toDate();\n }\n if ('toDate' in date) {\n return date.toDate(timezone);\n }\n return date;\n}\n","import {List, ListItem} from '@common/ui/list/list';\nimport {DateRangePresets} from '@common/ui/forms/input-field/date/date-range-picker/dialog/date-range-presets';\nimport {Trans} from '@common/i18n/trans';\nimport {DateRangeValue} from '@common/ui/forms/input-field/date/date-range-picker/date-range-value';\n\ninterface DateRangePresetList {\n onPresetSelected: (value: DateRangeValue) => void;\n selectedValue?: DateRangeValue | null;\n}\nexport function DatePresetList({\n onPresetSelected,\n selectedValue,\n}: DateRangePresetList) {\n return (\n \n {DateRangePresets.map(preset => (\n {\n const newValue = preset.getRangeValue();\n onPresetSelected(newValue);\n }}\n >\n \n \n ))}\n \n );\n}\n","import {useMediaQuery, UseMediaQueryOptions} from './use-media-query';\n\nexport function useIsTabletMediaQuery(options?: UseMediaQueryOptions) {\n return useMediaQuery('(max-width: 1024px)', options);\n}\n","import React, {ComponentPropsWithoutRef, ReactNode, useId} from 'react';\nimport clsx from 'clsx';\nimport {useController} from 'react-hook-form';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {InputSize} from '../input-field/input-size';\nimport {getInputFieldClassNames} from '../input-field/get-input-field-class-names';\nimport {AutoFocusProps, useAutoFocus} from '../../focus/use-auto-focus';\n\ninterface SwitchProps\n extends AutoFocusProps,\n Omit, 'size'> {\n size?: InputSize;\n className?: string;\n description?: ReactNode;\n invalid?: boolean;\n errorMessage?: string;\n}\nexport const Switch = React.forwardRef(\n (props, ref) => {\n const {\n children,\n size = 'sm',\n description,\n className,\n invalid,\n autoFocus,\n errorMessage,\n ...domProps\n } = props;\n\n const inputRef = useObjectRef(ref);\n useAutoFocus({autoFocus}, inputRef);\n\n const style = getSizeClassName(size);\n const fieldClassNames = getInputFieldClassNames(props);\n\n const descriptionId = useId();\n\n return (\n
\n \n {description && !errorMessage && (\n
\n {description}\n
\n )}\n {errorMessage && (\n
\n {errorMessage}\n
\n )}\n
\n );\n }\n);\n\ninterface FormSwitchProps extends SwitchProps {\n name: string;\n}\nexport function FormSwitch(props: FormSwitchProps) {\n const {\n field: {onChange, onBlur, value = false, ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n });\n\n const formProps: Partial = {\n onChange: e => {\n if (e.target.value && e.target.value !== 'on') {\n onChange(e.target.checked ? e.target.value : false);\n } else {\n onChange(e);\n }\n },\n onBlur,\n checked: !!value,\n invalid,\n errorMessage: error?.message,\n name: props.name,\n };\n\n return ;\n}\n\nfunction getSizeClassName(size: InputSize): string {\n switch (size) {\n case 'xl':\n return 'w-68 h-36 before:w-28 before:h-28 checked:before:translate-x-36';\n case 'lg':\n return 'w-56 h-30 before:w-22 before:h-22 checked:before:translate-x-30';\n case 'md':\n return 'w-46 h-24 before:w-18 before:h-18 checked:before:translate-x-24';\n case 'xs':\n return 'w-30 h-16 before:w-12 before:h-12 checked:before:translate-x-16';\n default:\n return 'w-38 h-20 before:w-14 before:h-14 checked:before:translate-x-20';\n }\n}\n","import {message} from '@common/i18n/message';\nimport {DateRangeValue} from '@common/ui/forms/input-field/date/date-range-picker/date-range-value';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\n\nexport interface DateRangeComparePreset {\n key: number;\n label: MessageDescriptor;\n getRangeValue: (range: DateRangeValue) => DateRangeValue;\n}\n\nexport const DateRangeComparePresets: DateRangeComparePreset[] = [\n {\n key: 0,\n label: message('Preceding period'),\n getRangeValue: (range: DateRangeValue) => {\n const startDate = range.start;\n const endDate = range.end;\n\n const diffInMilliseconds =\n endDate.toDate().getTime() - startDate.toDate().getTime();\n const diffInMinutes = diffInMilliseconds / (1000 * 60);\n const newStart = startDate.subtract({minutes: diffInMinutes});\n return {\n preset: 0,\n start: newStart,\n end: startDate,\n };\n },\n },\n {\n key: 1,\n label: message('Same period last year'),\n getRangeValue: (range: DateRangeValue) => {\n return {\n start: range.start.subtract({years: 1}),\n end: range.end.subtract({years: 1}),\n preset: 1,\n };\n },\n },\n {\n key: 2,\n label: message('Custom'),\n getRangeValue: (range: DateRangeValue) => {\n return {\n start: range.start.subtract({weeks: 1}),\n end: range.end.subtract({weeks: 1}),\n preset: 2,\n };\n },\n },\n];\n","import {List, ListItem} from '@common/ui/list/list';\nimport {Trans} from '@common/i18n/trans';\nimport {DateRangeValue} from '@common/ui/forms/input-field/date/date-range-picker/date-range-value';\nimport {DateRangeComparePresets} from '@common/ui/forms/input-field/date/date-range-picker/dialog/date-range-compare-presets';\n\ninterface DateRangePresetList {\n originalRangeValue: DateRangeValue;\n onPresetSelected: (value: DateRangeValue) => void;\n selectedValue?: DateRangeValue | null;\n}\nexport function DateRangeComparePresetList({\n originalRangeValue,\n onPresetSelected,\n selectedValue,\n}: DateRangePresetList) {\n return (\n \n {DateRangeComparePresets.map(preset => (\n {\n const newValue = preset.getRangeValue(originalRangeValue);\n onPresetSelected(newValue);\n }}\n >\n \n \n ))}\n \n );\n}\n","import React, {Fragment, ReactNode, useRef, useState} from 'react';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {DatePickerField} from '../date-picker-field';\nimport {DateRangePickerState} from '../use-date-range-picker-state';\nimport {Calendar} from '../../calendar/calendar';\nimport {DialogFooter} from '@common/ui/overlays/dialog/dialog-footer';\nimport {Button} from '@common/ui/buttons/button';\nimport {useDialogContext} from '@common/ui/overlays/dialog/dialog-context';\nimport {Dialog} from '@common/ui/overlays/dialog/dialog';\nimport {DialogBody} from '@common/ui/overlays/dialog/dialog-body';\nimport {ArrowRightAltIcon} from '@common/icons/material/ArrowRightAlt';\nimport {DateSegmentList} from '../../segments/date-segment-list';\nimport {Trans} from '@common/i18n/trans';\nimport {FormattedDateTimeRange} from '@common/i18n/formatted-date-time-range';\nimport {DatePresetList} from './date-range-preset-list';\nimport {useIsTabletMediaQuery} from '@common/utils/hooks/is-tablet-media-query';\nimport {Switch} from '@common/ui/forms/toggle/switch';\nimport {DateRangeComparePresetList} from '@common/ui/forms/input-field/date/date-range-picker/dialog/date-range-compare-preset-list';\n\ninterface DateRangeDialogProps {\n state: DateRangePickerState;\n compareState?: DateRangePickerState;\n compareVisibleDefault?: boolean;\n showInlineDatePickerField?: boolean;\n}\nexport function DateRangeDialog({\n state,\n compareState,\n showInlineDatePickerField = false,\n compareVisibleDefault = false,\n}: DateRangeDialogProps) {\n const isTablet = useIsTabletMediaQuery();\n const {close} = useDialogContext();\n const initialStateRef = useRef(state);\n const hasPlaceholder = state.isPlaceholder.start || state.isPlaceholder.end;\n const [compareVisible, setCompareVisible] = useState(compareVisibleDefault);\n\n const footer = (\n \n \n \n ) : undefined\n }\n >\n {\n state.setSelectedValue(initialStateRef.current.selectedValue);\n state.setIsPlaceholder(initialStateRef.current.isPlaceholder);\n close();\n }}\n >\n \n \n {\n const value = state.selectedValue;\n if (compareState && compareVisible) {\n value.compareStart = compareState.selectedValue.start;\n value.compareEnd = compareState.selectedValue.end;\n }\n close(value);\n }}\n >\n \n \n \n );\n\n return (\n \n \n {!isTablet && (\n
\n {\n state.setSelectedValue(preset);\n if (state.closeDialogOnSelection) {\n close(preset);\n }\n }}\n />\n {!!compareState && (\n \n setCompareVisible(e.target.checked)}\n >\n \n \n {compareVisible && (\n {\n compareState.setSelectedValue(preset);\n }}\n />\n )}\n \n )}\n
\n )}\n \n \n \n
\n {!state.closeDialogOnSelection && footer}\n
\n );\n}\n\ninterface CustomRangePanelProps {\n state: DateRangePickerState;\n compareState?: DateRangePickerState;\n showInlineDatePickerField?: boolean;\n compareVisible: boolean;\n}\nfunction Calendars({\n state,\n compareState,\n showInlineDatePickerField,\n compareVisible,\n}: CustomRangePanelProps) {\n return (\n \n {showInlineDatePickerField && (\n
\n \n {!!compareState && compareVisible && (\n }\n />\n )}\n
\n )}\n
\n \n
\n \n );\n}\n\ninterface InlineDatePickerFieldProps {\n state: DateRangePickerState;\n label?: ReactNode;\n}\nfunction InlineDatePickerField({state, label}: InlineDatePickerFieldProps) {\n const {selectedValue, setSelectedValue} = state;\n return (\n \n {\n setSelectedValue({...selectedValue, start: newValue});\n }}\n />\n \n {\n setSelectedValue({...selectedValue, end: newValue});\n }}\n />\n \n );\n}\n","import React, {\n ComponentPropsWithoutRef,\n Fragment,\n MouseEvent,\n useRef,\n} from 'react';\nimport {DateRangeIcon} from '../../../../../icons/material/DateRange';\nimport {DialogTrigger} from '../../../../overlays/dialog/dialog-trigger';\nimport {DatePickerField, DatePickerFieldProps} from './date-picker-field';\nimport {useDateRangePickerState} from './use-date-range-picker-state';\nimport {ArrowRightAltIcon} from '../../../../../icons/material/ArrowRightAlt';\nimport {DatePickerValueProps} from '../date-picker/use-date-picker-state';\nimport {DateRangeValue} from './date-range-value';\nimport {DateSegmentList} from '../segments/date-segment-list';\nimport {DateRangeDialog} from './dialog/date-range-dialog';\nimport {useIsMobileMediaQuery} from '../../../../../utils/hooks/is-mobile-media-query';\n\nexport interface DateRangePickerProps\n extends DatePickerValueProps>,\n Omit {}\nexport function DateRangePicker(props: DateRangePickerProps) {\n const {granularity, closeDialogOnSelection, ...fieldProps} = props;\n const state = useDateRangePickerState(props);\n const inputRef = useRef(null);\n const isMobile = useIsMobileMediaQuery();\n const hideCalendarIcon = isMobile && granularity !== 'day';\n\n const dialog = (\n \n \n \n );\n\n const openOnClick: ComponentPropsWithoutRef<'div'> = {\n onClick: e => {\n e.stopPropagation();\n e.preventDefault();\n if (!isHourSegment(e)) {\n state.setCalendarIsOpen(true);\n } else {\n state.setCalendarIsOpen(false);\n }\n },\n };\n\n const value = state.selectedValue;\n const onChange = state.setSelectedValue;\n\n return (\n \n : undefined}\n {...fieldProps}\n >\n {\n onChange({start: newValue, end: value.end});\n }}\n />\n \n {\n onChange({start: value.start, end: newValue});\n }}\n />\n \n {dialog}\n \n );\n}\n\nfunction isHourSegment(e: MouseEvent): boolean {\n return ['hour', 'minute', 'dayPeriod'].includes(\n (e.currentTarget as HTMLElement).ariaLabel || ''\n );\n}\n","import {parseAbsoluteToLocal, ZonedDateTime} from '@internationalized/date';\nimport {DateRangeValue} from './date-range-value';\nimport {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\nimport React from 'react';\nimport {DateRangePicker, DateRangePickerProps} from './date-range-picker';\n\nexport interface AbsoluteDateRange {\n start?: string;\n end?: string;\n preset?: number;\n}\n\ninterface FormDateRange {\n start?: string | ZonedDateTime;\n end?: string | ZonedDateTime;\n preset?: number;\n}\n\nexport interface FormDateRangePickerProps extends DateRangePickerProps {\n name: string;\n}\nexport function FormDateRangePicker(props: FormDateRangePickerProps) {\n const {\n field: {onChange, onBlur, value, ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n });\n\n const formProps: Partial = {\n onChange: e => {\n onChange(e ? dateRangeToAbsoluteRange(e) : null);\n },\n onBlur,\n value: absoluteRangeToDateRange(value),\n invalid,\n errorMessage: error?.message,\n inputRef: ref,\n };\n\n return ;\n}\n\nexport function absoluteRangeToDateRange(props: FormDateRange | null) {\n const {start, end, preset} = props || {};\n const dateRange: Partial = {preset};\n try {\n if (start) {\n dateRange.start =\n typeof start === 'string' ? parseAbsoluteToLocal(start) : start;\n }\n if (end) {\n dateRange.end = typeof end === 'string' ? parseAbsoluteToLocal(end) : end;\n }\n } catch (e) {\n // ignore\n }\n return dateRange;\n}\n\nexport function dateRangeToAbsoluteRange({\n start,\n end,\n preset,\n}: Partial = {}): AbsoluteDateRange {\n const absoluteRange: AbsoluteDateRange = {\n preset,\n };\n if (start) {\n absoluteRange.start = start.toAbsoluteString();\n }\n if (end) {\n absoluteRange.end = end.toAbsoluteString();\n }\n return absoluteRange;\n}\n","import {\n BackendFilter,\n DatePickerFilterControl,\n FilterControlType,\n FilterOperator,\n} from './backend-filter';\nimport {\n DateRangePreset,\n DateRangePresets,\n} from '../../ui/forms/input-field/date/date-range-picker/dialog/date-range-presets';\nimport {message} from '../../i18n/message';\nimport {dateRangeToAbsoluteRange} from '../../ui/forms/input-field/date/date-range-picker/form-date-range-picker';\nimport {PartialWithRequired} from '@common/utils/ts/partial-with-required';\n\nexport function timestampFilter(\n options: PartialWithRequired<\n BackendFilter,\n 'key' | 'label'\n >\n): BackendFilter {\n return {\n ...options,\n defaultOperator: FilterOperator.between,\n control: {\n type: FilterControlType.DateRangePicker,\n defaultValue:\n options.control?.defaultValue ||\n dateRangeToAbsoluteRange(\n (DateRangePresets[3] as Required).getRangeValue()\n ),\n },\n };\n}\n\nexport function createdAtFilter(\n options: Partial>\n): BackendFilter {\n return timestampFilter({\n key: 'created_at',\n label: message('Date created'),\n ...options,\n });\n}\n\nexport function updatedAtFilter(\n options: Partial>\n): BackendFilter {\n return timestampFilter({\n key: 'updated_at',\n label: message('Last updated'),\n ...options,\n });\n}\n","import clsx from 'clsx';\nimport React, {\n ComponentProps,\n ComponentPropsWithoutRef,\n forwardRef,\n} from 'react';\nimport {Link} from 'react-router-dom';\nimport {Tooltip} from '@common/ui/tooltip/tooltip';\nimport {AvatarPlaceholderIcon} from '@common/auth/ui/account-settings/avatar/avatar-placeholder-icon';\n\ntype Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | string;\n\nexport interface AvatarProps extends ComponentPropsWithoutRef {\n className?: string;\n src?: string;\n label?: string;\n circle?: boolean;\n size?: Size;\n link?: string;\n fallback?: 'initials' | 'generic';\n lazy?: boolean;\n}\nexport const Avatar = forwardRef(\n (\n {\n className,\n circle,\n size = 'md',\n src,\n link,\n label,\n fallback = 'generic',\n lazy = true,\n ...domProps\n },\n ref,\n ) => {\n let renderedAvatar = src ? (\n \n ) : (\n
\n \n
\n );\n\n if (label) {\n renderedAvatar = {renderedAvatar};\n }\n\n const wrapperProps: ComponentProps = {\n ...domProps,\n className: clsx(\n className,\n 'relative block overflow-hidden select-none flex-shrink-0',\n getSizeClassName(size),\n circle ? 'rounded-full' : 'rounded',\n ),\n };\n\n return link ? (\n \n {renderedAvatar}\n \n ) : (\n
{renderedAvatar}
\n );\n },\n);\n\nfunction getSizeClassName(size: Size) {\n switch (size) {\n case 'xs':\n return 'w-18 h-18';\n case 'sm':\n return 'w-24 h-24';\n case 'md':\n return 'w-32 h-32';\n case 'lg':\n return 'w-40 h-40';\n case 'xl':\n return 'w-60 h-60';\n // allow overriding with custom classNames\n default:\n return size;\n }\n}\n","export const BackendFiltersUrlKey = 'filters';\n","import {FilterListValue} from './encode-backend-filters';\n\nexport function decodeBackendFilters(\n encodedFilters: string | null\n): FilterListValue[] {\n if (!encodedFilters) return [];\n let filtersFromQuery: FilterListValue[] = [];\n try {\n filtersFromQuery = JSON.parse(atob(decodeURIComponent(encodedFilters)));\n filtersFromQuery.map(filterValue => {\n // set value key as value so selects work properly\n if (filterValue.valueKey != null) {\n filterValue.value = filterValue.valueKey;\n }\n return filterValue;\n });\n } catch (e) {\n //\n }\n return filtersFromQuery;\n}\n","import {Key} from 'react';\nimport {BackendFilter} from '../backend-filter';\n\nexport interface FilterListValue {\n key: Key;\n value: BackendFilter['control']['defaultValue'];\n operator?: BackendFilter['defaultOperator'];\n valueKey?: Key;\n isInactive?: boolean;\n extraFilters?: {key: string; operator: string; value: any}[];\n}\n\nexport function encodeBackendFilters(\n filterValues: FilterListValue[] | null,\n filters?: BackendFilter[]\n): string {\n if (!filterValues) return '';\n\n // prepare values for backend\n filterValues = !filters\n ? filterValues\n : filterValues\n .filter(item => item.value !== '')\n .map(item => transformValue(item, filters));\n\n // remove all placeholder filters\n filterValues = filterValues.filter(fm => !fm.isInactive);\n\n if (!filterValues.length) {\n return '';\n }\n\n return encodeURIComponent(btoa(JSON.stringify(filterValues)));\n}\n\nfunction transformValue(\n filterValue: FilterListValue,\n filters: BackendFilter[]\n) {\n const filterConfig = filters.find(f => f.key === filterValue.key);\n // select components will use a key always, because we can't use objects as\n // value. Map over select options and replace key with actual value\n if (filterConfig?.control.type === 'select') {\n const option = (filterConfig.control.options || []).find(\n o => o.key === filterValue.value\n );\n // if it's language or country select, there might not be an option\n if (option) {\n return {...filterValue, value: option.value, valueKey: option.key};\n }\n }\n\n if (filterConfig?.extraFilters?.length) {\n filterValue['extraFilters'] = filterConfig.extraFilters;\n }\n\n return filterValue;\n}\n","import {useNavigate, useSearchParams} from 'react-router-dom';\nimport {Key, useCallback, useMemo} from 'react';\nimport {BackendFilter} from './backend-filter';\nimport {BackendFiltersUrlKey} from './backend-filters-url-key';\nimport {decodeBackendFilters} from './utils/decode-backend-filters';\nimport {\n encodeBackendFilters,\n FilterListValue,\n} from './utils/encode-backend-filters';\n\nexport function useBackendFilterUrlParams(\n filters?: BackendFilter[],\n pinnedFilters?: string[]\n) {\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n\n const encodedFilters = searchParams.get(BackendFiltersUrlKey);\n\n const decodedFilters: FilterListValue[] = useMemo(() => {\n if (!filters) return [];\n const decoded = decodeBackendFilters(encodedFilters);\n\n // if filter is pinned, and it is not applied yet, add a placeholder\n (pinnedFilters || []).forEach(key => {\n if (!decoded.find(f => f.key === key)) {\n const config = filters.find(f => f.key === key)!;\n decoded.push({\n key,\n value: config.control.defaultValue,\n operator: config.defaultOperator,\n isInactive: true,\n });\n }\n });\n\n // preserve original filter order from configuration\n decoded.sort(\n (a, b) =>\n filters.findIndex(f => f.key === a.key) -\n filters.findIndex(f => f.key === b.key)\n );\n\n return decoded;\n }, [encodedFilters, pinnedFilters, filters]);\n\n const getDecodedWithoutKeys = useCallback(\n (values: (FilterListValue | Key)[]) => {\n const newFilters = [...decodedFilters];\n values.forEach(value => {\n const key = typeof value === 'object' ? value.key : value;\n const index = newFilters.findIndex(f => f.key === key);\n if (index > -1) {\n newFilters.splice(index, 1);\n }\n });\n return newFilters;\n },\n [decodedFilters]\n );\n\n const replaceAll = useCallback(\n (filterValues: FilterListValue[]) => {\n const encodedFilters = encodeBackendFilters(filterValues, filters);\n if (encodedFilters) {\n searchParams.set(BackendFiltersUrlKey, encodedFilters);\n } else {\n searchParams.delete(BackendFiltersUrlKey);\n }\n navigate({search: `?${searchParams}`}, {replace: true});\n },\n [filters, navigate, searchParams]\n );\n\n const add = useCallback(\n (filterValues: FilterListValue[]) => {\n const existing = getDecodedWithoutKeys(filterValues);\n const decodedFilters = [...existing, ...filterValues];\n replaceAll(decodedFilters);\n },\n [getDecodedWithoutKeys, replaceAll]\n );\n\n const remove = useCallback(\n (key: Key) => replaceAll(getDecodedWithoutKeys([key])),\n [getDecodedWithoutKeys, replaceAll]\n );\n\n return {\n add,\n remove,\n replaceAll,\n decodedFilters,\n encodedFilters,\n };\n}\n","import {isMac} from '@react-aria/utils';\n\ninterface Event {\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n}\n\nexport function isCtrlKeyPressed(e: Event) {\n if (isMac()) {\n return e.metaKey;\n }\n\n return e.ctrlKey;\n}\n","import React, {KeyboardEventHandler} from 'react';\nimport {getFocusableTreeWalker} from '@react-aria/focus';\nimport {focusWithoutScrolling} from '@react-aria/utils';\nimport {isCtrlKeyPressed} from '../../utils/keybinds/is-ctrl-key-pressed';\n\ninterface Props {\n cellCount: number;\n rowCount: number;\n}\nexport function useGridNavigation(props: Props) {\n const {cellCount, rowCount} = props;\n const onKeyDown: KeyboardEventHandler = e => {\n switch (e.key) {\n case 'ArrowLeft':\n focusSiblingCell(e, {cell: {op: 'decrement'}}, props);\n break;\n case 'ArrowRight':\n focusSiblingCell(e, {cell: {op: 'increment'}}, props);\n break;\n case 'ArrowUp':\n focusSiblingCell(e, {row: {op: 'decrement'}}, props);\n break;\n case 'ArrowDown':\n focusSiblingCell(e, {row: {op: 'increment'}}, props);\n break;\n case 'PageUp':\n focusSiblingCell(e, {row: {op: 'decrement', count: 5}}, props);\n break;\n case 'PageDown':\n focusSiblingCell(e, {row: {op: 'increment', count: 5}}, props);\n break;\n case 'Tab':\n focusFirstElementAfterGrid(e);\n break;\n case 'Home':\n if (isCtrlKeyPressed(e)) {\n // move to first cell in first row\n focusSiblingCell(\n e,\n {\n row: {op: 'decrement', count: rowCount},\n cell: {op: 'decrement', count: cellCount},\n },\n props\n );\n } else {\n // move to first cell in current row\n focusSiblingCell(\n e,\n {cell: {op: 'decrement', count: cellCount}},\n props\n );\n }\n break;\n case 'End':\n if (isCtrlKeyPressed(e)) {\n // move to last cell in last row\n focusSiblingCell(\n e,\n {\n row: {op: 'increment', count: rowCount},\n cell: {op: 'increment', count: cellCount},\n },\n props\n );\n } else {\n // move to last cell in current row\n focusSiblingCell(\n e,\n {cell: {op: 'increment', count: cellCount}},\n props\n );\n }\n break;\n }\n };\n\n return {onKeyDown};\n}\n\ninterface Operations {\n cell?: {\n op: 'increment' | 'decrement';\n count?: number;\n };\n row?: {\n op: 'increment' | 'decrement';\n count?: number;\n };\n}\nfunction focusSiblingCell(\n e: React.KeyboardEvent,\n operations: Operations,\n {cellCount, rowCount}: Props\n) {\n if (document.activeElement?.tagName === 'input') return;\n e.preventDefault();\n const grid = e.currentTarget as HTMLElement;\n\n // focused element might be inside the cell and not the cell itself\n const currentCell = (e.target as HTMLElement).closest('[aria-colindex]');\n if (!currentCell || !grid) return;\n\n const row = currentCell.closest('[aria-rowindex]');\n if (!row) return;\n\n // grab row and cell index from aria attributes\n let rowIndex = parseInt(row.getAttribute('aria-rowindex') as string);\n let cellIndex = parseInt(currentCell.getAttribute('aria-colindex') as string);\n if (Number.isNaN(rowIndex) || Number.isNaN(cellIndex)) return;\n\n // adjust row index for next cell selector\n const rowOpCount = operations.row?.count ?? 1;\n if (operations.row?.op === 'increment') {\n rowIndex = Math.min(rowCount, rowIndex + rowOpCount);\n } else if (operations.row?.op === 'decrement') {\n rowIndex = Math.max(1, rowIndex - rowOpCount);\n }\n\n // adjust cell index for next cell selector\n const cellOpCount = operations.cell?.count ?? 1;\n if (operations.cell?.op === 'increment') {\n cellIndex = Math.min(cellCount, cellIndex + cellOpCount);\n } else if (operations.cell?.op === 'decrement') {\n cellIndex = Math.max(1, cellIndex - cellOpCount);\n }\n\n // find the next cell that should be focused\n const nextCell = grid.querySelector(\n `[aria-rowindex=\"${rowIndex}\"] [aria-colindex=\"${cellIndex}\"]`\n ) as HTMLElement | undefined;\n if (!nextCell) return;\n\n // find any focusable elements inside the cell\n const walker = getFocusableTreeWalker(nextCell);\n const nextFocusableElement = (walker.nextNode() || nextCell) as HTMLElement;\n\n // adjust tab index on current and next cells and focus either next cell or first focusable element inside that cell\n currentCell.setAttribute('tabindex', '-1');\n nextFocusableElement.setAttribute('tabindex', '0');\n nextFocusableElement.focus();\n}\n\n// grid is treated as a single tab stop, focus first element after grid, instead of moving focus withing grid on tab press\nfunction focusFirstElementAfterGrid(e: React.KeyboardEvent) {\n const grid = e.currentTarget as HTMLElement;\n if (e.shiftKey) {\n grid.focus();\n } else {\n const walker = getFocusableTreeWalker(grid, {tabbable: true});\n let next: HTMLElement;\n let last: HTMLElement;\n do {\n last = walker.lastChild() as HTMLElement;\n if (last) {\n next = last;\n }\n } while (last);\n\n // @ts-ignore\n if (next && !next.contains(document.activeElement)) {\n focusWithoutScrolling(next);\n }\n }\n}\n","import {createContext} from 'react';\nimport type {SortDescriptor} from './types/sort-descriptor';\nimport type {TableProps} from './table';\nimport type {ColumnConfig} from '../../datatable/column-config';\nimport type {TableDataItem} from './types/table-data-item';\n\nexport type TableSelectionStyle = 'checkbox' | 'highlight';\n\nexport interface TableContextValue {\n isCollapsedMode: boolean;\n selectedRows: (string | number)[];\n onSelectionChange: (keys: (string | number)[]) => void;\n sortDescriptor?: SortDescriptor;\n onSortChange?: (descriptor: SortDescriptor) => any;\n enableSelection?: boolean;\n enableSorting?: boolean;\n selectionStyle: TableSelectionStyle;\n data: T[];\n meta?: any;\n columns: ColumnConfig[];\n toggleRow: (item: T) => void;\n selectRow: (item: T | null, merge?: boolean) => void;\n hideBorder: boolean;\n hideHeaderRow: boolean;\n collapseOnMobile: boolean;\n onAction: TableProps['onAction'];\n selectRowOnContextMenu: TableProps['selectRowOnContextMenu'];\n cellHeight: string | undefined;\n headerCellHeight: string | undefined;\n}\nexport const TableContext = createContext(null!);\n","import clsx from 'clsx';\nimport {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\n\ninterface Props {\n index: number;\n isHeader: boolean;\n}\nexport function useTableCellStyle({index, isHeader}: Props) {\n const {\n columns,\n cellHeight = 'h-46',\n headerCellHeight = 'h-46',\n } = useContext(TableContext);\n const column = columns[index];\n\n const userPadding = column?.padding;\n\n let justify = 'justify-start';\n if (column?.align === 'center') {\n justify = 'justify-center';\n } else if (column?.align === 'end') {\n justify = 'justify-end';\n }\n\n return clsx(\n 'flex items-center overflow-hidden whitespace-nowrap overflow-ellipsis outline-none focus-visible:outline focus-visible:outline-offset-2',\n isHeader ? headerCellHeight : cellHeight,\n column?.width ?? 'flex-1',\n column?.maxWidth,\n column?.minWidth,\n justify,\n userPadding,\n column?.className\n );\n}\n","import {useContext, useMemo} from 'react';\nimport {TableContext} from './table-context';\nimport {TableDataItem} from './types/table-data-item';\nimport {RowContext} from '@common/datatable/column-config';\nimport {useTableCellStyle} from '@common/ui/tables/style/use-table-cell-style';\n\ninterface TableCellProps {\n rowIsHovered: boolean;\n rowIndex: number;\n index: number;\n item: TableDataItem;\n id?: string;\n}\nexport function TableCell({\n rowIndex,\n rowIsHovered,\n index,\n item,\n id,\n}: TableCellProps) {\n const {columns} = useContext(TableContext);\n const column = columns[index];\n\n const rowContext: RowContext = useMemo(() => {\n return {\n index: rowIndex,\n isHovered: rowIsHovered,\n isPlaceholder: item.isPlaceholder,\n };\n }, [rowIndex, rowIsHovered, item.isPlaceholder]);\n\n const style = useTableCellStyle({\n index: index,\n isHeader: false,\n });\n\n return (\n \n
\n {column.body(item, rowContext)}\n
\n \n );\n}\n","import React, {HTMLAttributes, useRef} from 'react';\nimport {createEventHandler} from '../../utils/dom/create-event-handler';\nimport {useGlobalListeners} from '@react-aria/utils';\n\ninterface PointerState {\n lastPosition: {x: number; y: number};\n id?: number;\n started: boolean;\n el?: HTMLElement;\n originalTouchAction?: string;\n originalUserSelect?: string;\n longPressTimer?: any;\n longPressTriggered?: boolean;\n}\n\ninterface UsePointerEventsReturn {\n domProps: HTMLAttributes;\n}\n\nexport interface UsePointerEventsProps {\n onMoveStart?: (e: PointerEvent, el: HTMLElement) => false | void;\n onMove?: (e: PointerEvent, deltaX: number, deltaY: number) => void;\n onMoveEnd?: (e: PointerEvent) => void;\n onPointerDown?: (e: React.PointerEvent) => void | false;\n onPointerUp?: (e: PointerEvent, el: HTMLElement) => void;\n onPress?: (e: PointerEvent, el: HTMLElement) => void;\n onLongPress?: (e: PointerEvent | React.PointerEvent, el: HTMLElement) => void;\n preventDefault?: boolean;\n stopPropagation?: boolean;\n minimumMovement?: number;\n}\nexport function usePointerEvents({\n onMoveStart,\n onMove,\n onMoveEnd,\n minimumMovement = 0,\n preventDefault,\n stopPropagation = true,\n onPress,\n onLongPress,\n ...props\n}: UsePointerEventsProps): UsePointerEventsReturn {\n const stateRef = useRef({\n lastPosition: {x: 0, y: 0},\n started: false,\n longPressTriggered: false,\n });\n const state = stateRef.current;\n\n const {addGlobalListener, removeGlobalListener} = useGlobalListeners();\n\n const start = (e: PointerEvent) => {\n if (!state.el) return;\n const result = onMoveStart?.(e, state.el);\n\n // allow user to cancel interaction\n if (result === false) return;\n\n state.originalTouchAction = state.el.style.touchAction;\n state.el.style.touchAction = 'none';\n state.originalUserSelect = document.documentElement.style.userSelect;\n document.documentElement.style.userSelect = 'none';\n state.started = true;\n };\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (e.button === 0 && state.id == null) {\n state.started = false;\n\n const result = props.onPointerDown?.(e);\n if (result === false) return;\n\n if (stopPropagation) {\n e.stopPropagation();\n }\n if (preventDefault) {\n e.preventDefault();\n }\n state.id = e.pointerId;\n state.el = e.currentTarget as HTMLElement;\n state.lastPosition = {x: e.clientX, y: e.clientY};\n\n // use global listeners, so we don't have to capture pointer,\n // which would prevent click events on child nodes\n\n if (onLongPress) {\n state.longPressTimer = setTimeout(() => {\n onLongPress(e, state.el!);\n state.longPressTriggered = true;\n }, 400);\n }\n\n if (onMoveStart || onMove) {\n addGlobalListener(window, 'pointermove', onPointerMove, false);\n }\n addGlobalListener(window, 'pointerup', onPointerUp, false);\n addGlobalListener(window, 'pointercancel', onPointerUp, false);\n }\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (e.pointerId === state.id) {\n const deltaX = e.clientX - state.lastPosition.x;\n const deltaY = e.clientY - state.lastPosition.y;\n\n if (\n (Math.abs(deltaX) >= minimumMovement ||\n Math.abs(deltaY) >= minimumMovement) &&\n !state.started\n ) {\n start(e);\n }\n\n if (state.started) {\n onMove?.(e, deltaX, deltaY);\n state.lastPosition = {x: e.clientX, y: e.clientY};\n }\n }\n };\n\n const onPointerUp = (e: PointerEvent) => {\n if (e.pointerId === state.id) {\n // cancel long press timer, if exists\n if (state.longPressTimer) {\n clearTimeout(state.longPressTimer);\n }\n\n const longPressTriggered = state.longPressTriggered;\n state.longPressTriggered = false;\n\n // only call onMoveEnd if we actually started moving\n if (state.started) {\n onMoveEnd?.(e);\n }\n\n if (state.el) {\n // handle press only if event was not cancelled (via touch scroll on mobile for example)\n if (e.type !== 'pointercancel') {\n props.onPointerUp?.(e, state.el);\n\n // only call onPress if pointer did not leave onPointerDown element\n if (e.target && state.el.contains(e.target as HTMLElement)) {\n // trigger either onPress or onLongPress\n if (longPressTriggered) {\n onLongPress?.(e, state.el);\n } else {\n onPress?.(e, state.el);\n }\n }\n }\n\n document.documentElement.style.userSelect =\n state.originalUserSelect || '';\n state.el.style.touchAction = state.originalTouchAction || '';\n }\n state.id = undefined;\n state.started = false;\n removeGlobalListener(window, 'pointermove', onPointerMove, false);\n removeGlobalListener(window, 'pointerup', onPointerUp, false);\n removeGlobalListener(window, 'pointercancel', onPointerUp, false);\n }\n };\n\n return {\n domProps: {\n onPointerDown: createEventHandler(onPointerDown),\n },\n };\n}\n","import {isCtrlKeyPressed} from './is-ctrl-key-pressed';\n\ninterface Event {\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport function isCtrlOrShiftPressed(e: Event) {\n return e.shiftKey || isCtrlKeyPressed(e);\n}\n","import clsx from 'clsx';\nimport {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\nimport {useIsDarkMode} from '@common/ui/themes/use-is-dark-mode';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\n\ninterface Props {\n index: number;\n isSelected: boolean;\n isHeader?: boolean;\n}\nexport function useTableRowStyle({index, isSelected, isHeader}: Props) {\n const isDarkMode = useIsDarkMode();\n const isMobile = useIsMobileMediaQuery();\n const {hideBorder, enableSelection, collapseOnMobile, onAction} =\n useContext(TableContext);\n const isFirst = index === 0;\n return clsx(\n 'flex gap-x-16 break-inside-avoid outline-none border border-transparent',\n onAction && 'cursor-pointer',\n isMobile && collapseOnMobile && hideBorder\n ? 'mb-8 pl-8 pr-0 rounded'\n : 'px-16',\n !hideBorder && 'border-b-divider',\n !hideBorder && isFirst && 'border-t-divider',\n isSelected &&\n !isDarkMode &&\n 'bg-primary/selected hover:bg-primary/focus focus-visible:bg-primary/focus',\n isSelected &&\n isDarkMode &&\n 'bg-selected hover:bg-focus focus-visible:bg-focus',\n !isSelected &&\n !isHeader &&\n (enableSelection || onAction) &&\n 'focus-visible:bg-focus hover:bg-hover'\n );\n}\n","import React, {\n ComponentPropsWithoutRef,\n JSXElementConstructor,\n KeyboardEventHandler,\n MouseEventHandler,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport {TableContext} from './table-context';\nimport {TableCell} from './table-cell';\nimport {TableDataItem} from './types/table-data-item';\nimport {createEventHandler} from '../../utils/dom/create-event-handler';\nimport {usePointerEvents} from '../interactions/use-pointer-events';\nimport {isCtrlOrShiftPressed} from '../../utils/keybinds/is-ctrl-or-shift-pressed';\nimport {useTableRowStyle} from '@common/ui/tables/style/use-table-row-style';\nimport clsx from 'clsx';\n\nconst interactableElements = ['button', 'a', 'input', 'select', 'textarea'];\n\nexport interface RowElementProps\n extends ComponentPropsWithoutRef<'tr'> {\n item: T & {isPlaceholder?: boolean};\n}\n\ninterface TableRowProps {\n item: TableDataItem;\n index: number;\n renderAs?: JSXElementConstructor;\n className?: string;\n style?: React.CSSProperties;\n}\nexport function TableRow({\n item,\n index,\n renderAs,\n className,\n style,\n}: TableRowProps) {\n const {\n selectedRows,\n columns,\n toggleRow,\n selectRow,\n onAction,\n selectRowOnContextMenu,\n enableSelection,\n selectionStyle,\n hideHeaderRow,\n } = useContext(TableContext);\n\n const isTouchDevice = useRef(false);\n const isSelected = selectedRows.includes(item.id);\n const [isHovered, setIsHovered] = useState(false);\n\n const clickedOnInteractable = (e: React.MouseEvent | PointerEvent) => {\n return (e.target as HTMLElement).closest(interactableElements.join(','));\n };\n\n const doubleClickHandler: MouseEventHandler = e => {\n if (\n selectionStyle === 'highlight' &&\n onAction &&\n !isTouchDevice.current &&\n !clickedOnInteractable(e)\n ) {\n e.preventDefault();\n e.stopPropagation();\n onAction(item, index);\n }\n };\n\n const anyRowsSelected = !!selectedRows.length;\n\n const handleRowTap = (e: PointerEvent) => {\n if (clickedOnInteractable(e)) return;\n if (selectionStyle === 'checkbox') {\n if (enableSelection && (anyRowsSelected || !onAction)) {\n toggleRow(item);\n } else if (onAction) {\n onAction(item, index);\n }\n } else if (selectionStyle === 'highlight') {\n if (isTouchDevice.current) {\n if (enableSelection && anyRowsSelected) {\n toggleRow(item);\n } else {\n onAction?.(item, index);\n }\n } else if (enableSelection) {\n selectRow(item, isCtrlOrShiftPressed(e));\n }\n }\n };\n\n const {domProps} = usePointerEvents({\n onPointerDown: e => {\n isTouchDevice.current = e.pointerType === 'touch';\n },\n onPress: handleRowTap,\n onLongPress: enableSelection\n ? () => {\n if (isTouchDevice.current) {\n toggleRow(item);\n }\n }\n : undefined,\n });\n\n const keyboardHandler: KeyboardEventHandler = e => {\n if (enableSelection && e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n if (selectionStyle === 'checkbox') {\n toggleRow(item);\n } else {\n selectRow(item);\n }\n } else if (e.key === 'Enter' && !selectedRows.length && onAction) {\n e.preventDefault();\n e.stopPropagation();\n onAction(item, index);\n }\n };\n\n const contextMenuHandler: MouseEventHandler = e => {\n if (selectRowOnContextMenu && enableSelection) {\n if (!selectedRows.includes(item.id)) {\n selectRow(item);\n }\n }\n // prevent context menu on mobile\n if (isTouchDevice.current) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n const styleClassName = useTableRowStyle({index, isSelected});\n\n const RowElement = renderAs || 'div';\n return (\n setIsHovered(true))}\n onPointerLeave={createEventHandler(() => setIsHovered(false))}\n style={style}\n {...domProps}\n >\n {columns.map((column, cellIndex) => (\n \n ))}\n \n );\n}\n","import {ColumnConfig} from '@common/datatable/column-config';\nimport {TableDataItem} from '@common/ui/tables/types/table-data-item';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\nimport React, {useContext} from 'react';\nimport {Checkbox} from '@common/ui/forms/toggle/checkbox';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {TableContext} from '@common/ui/tables/table-context';\n\nexport const CheckboxColumnConfig: ColumnConfig = {\n key: 'checkbox',\n header: () => ,\n align: 'center',\n width: 'w-24 flex-shrink-0',\n body: (item, row) => {\n if (row.isPlaceholder) {\n return ;\n }\n return ;\n },\n};\n\ninterface SelectRowCheckboxProps {\n item: TableDataItem;\n}\nfunction SelectRowCheckbox({item}: SelectRowCheckboxProps) {\n const {selectedRows, toggleRow} = useContext(TableContext);\n return (\n toggleRow(item)}\n />\n );\n}\n\nfunction SelectAllCheckbox() {\n const {trans} = useTrans();\n\n const {data, selectedRows, onSelectionChange} = useContext(TableContext);\n const allRowsSelected = !!data.length && data.length === selectedRows.length;\n const someRowsSelected = !allRowsSelected && !!selectedRows.length;\n\n return (\n {\n if (allRowsSelected) {\n onSelectionChange([]);\n } else {\n onSelectionChange(data.map(d => d.id));\n }\n }}\n />\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ArrowDownwardIcon = createSvgIcon(\n \n, 'ArrowDownwardOutlined');\n","import {useContext, useState} from 'react';\nimport clsx from 'clsx';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {TableContext} from './table-context';\nimport {SortDescriptor} from './types/sort-descriptor';\nimport {ArrowDownwardIcon} from '../../icons/material/ArrowDownward';\nimport {useTableCellStyle} from '@common/ui/tables/style/use-table-cell-style';\n\ninterface HeaderCellProps {\n index: number;\n}\nexport function HeaderCell({index}: HeaderCellProps) {\n const {columns, sortDescriptor, onSortChange, enableSorting} =\n useContext(TableContext);\n const column = columns[index];\n\n const style = useTableCellStyle({\n index: index,\n isHeader: true,\n });\n\n const [isHovered, setIsHovered] = useState(false);\n\n const sortingKey = column.sortingKey || column.key;\n const allowSorting = column.allowsSorting && enableSorting;\n const {orderBy, orderDir} = sortDescriptor || {};\n\n const sortActive = allowSorting && orderBy === sortingKey;\n\n let ariaSort: 'ascending' | 'descending' | 'none' | undefined;\n if (sortActive && orderDir === 'asc') {\n ariaSort = 'ascending';\n } else if (sortActive && orderDir === 'desc') {\n ariaSort = 'descending';\n } else if (allowSorting) {\n ariaSort = 'none';\n }\n\n const toggleSorting = () => {\n if (!allowSorting) return;\n\n let newSort: SortDescriptor;\n\n // if this col was sorted desc, go to asc\n if (sortActive && orderDir === 'desc') {\n newSort = {orderDir: 'asc', orderBy: sortingKey};\n\n // if this col was sorted asc, clear sort\n } else if (sortActive && orderDir === 'asc') {\n newSort = {orderBy: undefined, orderDir: undefined};\n\n // if sort was on another col, or no sort was applied yet, start from desc\n } else {\n newSort = {orderDir: 'desc', orderBy: sortingKey};\n }\n\n onSortChange?.(newSort);\n };\n\n const sortVisible = sortActive || isHovered;\n const sortVariants = {\n visible: {opacity: 1, y: 0},\n hidden: {opacity: 0, y: '-25%'},\n };\n\n return (\n {\n setIsHovered(true);\n }}\n onMouseLeave={() => {\n setIsHovered(false);\n }}\n onKeyDown={e => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n toggleSorting();\n }\n }}\n onClick={toggleSorting}\n >\n {column.hideHeader ? (\n
{column.header()}
\n ) : (\n column.header()\n )}\n \n {allowSorting && (\n \n \n \n )}\n \n \n );\n}\n","import {HeaderCell} from '@common/ui/tables/header-cell';\nimport React, {useContext} from 'react';\nimport {TableContext} from '@common/ui/tables/table-context';\n\nexport function TableHeaderRow() {\n const {columns} = useContext(TableContext);\n return (\n \n {columns.map((column, columnIndex) => (\n \n ))}\n \n );\n}\n","import React, {\n cloneElement,\n ComponentPropsWithoutRef,\n Fragment,\n JSXElementConstructor,\n MutableRefObject,\n ReactElement,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport {useControlledState} from '@react-stately/utils';\nimport {SortDescriptor} from './types/sort-descriptor';\nimport {useGridNavigation} from './navigate-grid';\nimport {RowElementProps, TableRow} from './table-row';\nimport {\n TableContext,\n TableContextValue,\n TableSelectionStyle,\n} from './table-context';\nimport {ColumnConfig} from '../../datatable/column-config';\nimport {TableDataItem} from './types/table-data-item';\nimport clsx from 'clsx';\nimport {useInteractOutside} from '@react-aria/interactions';\nimport {mergeProps, useObjectRef} from '@react-aria/utils';\nimport {isCtrlKeyPressed} from '@common/utils/keybinds/is-ctrl-key-pressed';\nimport {useIsMobileMediaQuery} from '@common/utils/hooks/is-mobile-media-query';\nimport {CheckboxColumnConfig} from '@common/ui/tables/checkbox-column-config';\nimport {TableHeaderRow} from '@common/ui/tables/table-header-row';\n\nexport interface TableProps\n extends ComponentPropsWithoutRef<'table'> {\n className?: string;\n columns: ColumnConfig[];\n hideHeaderRow?: boolean;\n data: T[];\n meta?: any;\n tableRef?: MutableRefObject;\n selectedRows?: (number | string)[];\n defaultSelectedRows?: (number | string)[];\n onSelectionChange?: (keys: (number | string)[]) => void;\n sortDescriptor?: SortDescriptor;\n onSortChange?: (descriptor: SortDescriptor) => any;\n enableSorting?: boolean;\n onDelete?: (items: T[]) => void;\n enableSelection?: boolean;\n selectionStyle?: TableSelectionStyle;\n ariaLabelledBy?: string;\n onAction?: (item: T, index: number) => void;\n selectRowOnContextMenu?: boolean;\n renderRowAs?: JSXElementConstructor>;\n tableBody?: ReactElement;\n hideBorder?: boolean;\n closeOnInteractOutside?: boolean;\n collapseOnMobile?: boolean;\n cellHeight?: string;\n headerCellHeight?: string;\n}\nexport function Table({\n className,\n columns: userColumns,\n collapseOnMobile = true,\n hideHeaderRow = false,\n hideBorder = false,\n data,\n selectedRows: propsSelectedRows,\n defaultSelectedRows: propsDefaultSelectedRows,\n onSelectionChange: propsOnSelectionChange,\n sortDescriptor: propsSortDescriptor,\n onSortChange: propsOnSortChange,\n enableSorting = true,\n onDelete,\n enableSelection = true,\n selectionStyle = 'checkbox',\n ariaLabelledBy,\n selectRowOnContextMenu,\n onAction,\n renderRowAs,\n tableBody,\n meta,\n tableRef: propsTableRef,\n closeOnInteractOutside = false,\n cellHeight,\n headerCellHeight,\n ...domProps\n}: TableProps) {\n const isMobile = useIsMobileMediaQuery();\n const isCollapsedMode = !!isMobile && collapseOnMobile;\n if (isCollapsedMode) {\n hideHeaderRow = true;\n hideBorder = true;\n }\n\n const [selectedRows, onSelectionChange] = useControlledState(\n propsSelectedRows,\n propsDefaultSelectedRows || [],\n propsOnSelectionChange,\n );\n\n const [sortDescriptor, onSortChange] = useControlledState(\n propsSortDescriptor,\n undefined,\n propsOnSortChange,\n );\n\n const toggleRow = useCallback(\n (item: TableDataItem) => {\n const newValues = [...selectedRows];\n if (!newValues.includes(item.id)) {\n newValues.push(item.id);\n } else {\n const index = newValues.indexOf(item.id);\n newValues.splice(index, 1);\n }\n onSelectionChange(newValues);\n },\n [selectedRows, onSelectionChange],\n );\n\n const selectRow = useCallback(\n // allow deselecting all rows by passing in null\n (item: TableDataItem | null, merge?: boolean) => {\n let newValues: (string | number)[] = [];\n if (item) {\n newValues = merge\n ? [...selectedRows?.filter(id => id !== item.id), item.id]\n : [item.id];\n }\n onSelectionChange(newValues);\n },\n [selectedRows, onSelectionChange],\n );\n\n // add checkbox columns to config, if selection is enabled\n const columns = useMemo(() => {\n const filteredColumns = userColumns.filter(c => {\n const visibleInMode = c.visibleInMode || 'regular';\n if (visibleInMode === 'all') {\n return true;\n }\n if (visibleInMode === 'compact' && isCollapsedMode) {\n return true;\n }\n if (visibleInMode === 'regular' && !isCollapsedMode) {\n return true;\n }\n });\n const showCheckboxCell =\n enableSelection && selectionStyle !== 'highlight' && !isMobile;\n if (showCheckboxCell) {\n filteredColumns.unshift(CheckboxColumnConfig);\n }\n return filteredColumns;\n }, [isMobile, userColumns, enableSelection, selectionStyle, isCollapsedMode]);\n\n const contextValue: TableContextValue = {\n isCollapsedMode,\n cellHeight,\n headerCellHeight,\n hideBorder,\n hideHeaderRow,\n selectedRows,\n onSelectionChange,\n enableSorting,\n enableSelection,\n selectionStyle,\n data,\n columns,\n sortDescriptor,\n onSortChange,\n toggleRow,\n selectRow,\n onAction,\n selectRowOnContextMenu,\n meta,\n collapseOnMobile,\n };\n\n const navProps = useGridNavigation({\n cellCount: enableSelection ? columns.length + 1 : columns.length,\n rowCount: data.length + 1,\n });\n\n const tableBodyProps: TableBodyProps = {\n renderRowAs: renderRowAs as any,\n };\n\n if (!tableBody) {\n tableBody = ;\n } else {\n tableBody = cloneElement(tableBody, tableBodyProps);\n }\n\n // deselect rows when clicking outside the table\n const tableRef = useObjectRef(propsTableRef);\n useInteractOutside({\n ref: tableRef,\n onInteractOutside: e => {\n if (\n closeOnInteractOutside &&\n enableSelection &&\n selectedRows?.length &&\n // don't deselect if clicking on a dialog (for example is table row has a context menu)\n !(e.target as HTMLElement).closest('[role=\"dialog\"]')\n ) {\n onSelectionChange([]);\n }\n },\n });\n\n return (\n \n {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n if (selectedRows?.length) {\n onSelectionChange([]);\n }\n } else if (e.key === 'Delete') {\n e.preventDefault();\n e.stopPropagation();\n if (selectedRows?.length) {\n onDelete?.(\n data.filter(item => selectedRows?.includes(item.id)),\n );\n }\n } else if (isCtrlKeyPressed(e) && e.key === 'a') {\n e.preventDefault();\n e.stopPropagation();\n if (enableSelection) {\n onSelectionChange(data.map(item => item.id));\n }\n }\n },\n })}\n role=\"grid\"\n tabIndex={0}\n aria-rowcount={data.length + 1}\n aria-colcount={columns.length + 1}\n ref={tableRef}\n aria-multiselectable={enableSelection ? true : undefined}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n className,\n 'isolate select-none text-sm outline-none focus-visible:ring-2',\n )}\n >\n {!hideHeaderRow && }\n {tableBody}\n \n \n );\n}\n\nexport interface TableBodyProps {\n renderRowAs?: TableProps['renderRowAs'];\n}\nfunction BasicTableBody({renderRowAs}: TableBodyProps) {\n const {data} = useContext(TableContext);\n return (\n \n {data.map((item, rowIndex) => (\n \n ))}\n \n );\n}\n","import {FormSelect} from '@common/ui/forms/select/select';\nimport {Item} from '@common/ui/forms/listbox/item';\nimport {Trans} from '@common/i18n/trans';\nimport {FilterPanelProps} from '@common/datatable/filters/panels/filter-panel-props';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {FilterSelectControl} from '@common/datatable/filters/backend-filter';\n\nexport function SelectFilterPanel({\n filter,\n}: FilterPanelProps) {\n const {trans} = useTrans();\n\n return (\n \n {filter.control.options.map(option => (\n \n \n \n ))}\n \n );\n}\n","import {FormDateRangePicker} from '@common/ui/forms/input-field/date/date-range-picker/form-date-range-picker';\nimport {FilterPanelProps} from '@common/datatable/filters/panels/filter-panel-props';\nimport {DatePickerFilterControl} from '@common/datatable/filters/backend-filter';\n\nexport function DateRangeFilterPanel({\n filter,\n}: FilterPanelProps) {\n return (\n \n );\n}\n","import {\n keepPreviousData,\n useQuery,\n UseQueryOptions,\n} from '@tanstack/react-query';\nimport {NormalizedModel} from '../../datatable/filters/normalized-model';\nimport {apiClient} from '../../http/query-client';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\n\ninterface Response extends BackendResponse {\n results: NormalizedModel[];\n}\n\ninterface Params {\n query?: string;\n perPage?: number;\n with?: string;\n}\n\nexport function useNormalizedModels(\n endpoint: string,\n queryParams: Params,\n queryOptions?: Omit<\n UseQueryOptions,\n 'queryKey' | 'queryFn'\n > | null,\n) {\n return useQuery({\n queryKey: [endpoint, queryParams],\n queryFn: () => fetchModels(endpoint, queryParams),\n placeholderData: keepPreviousData,\n ...queryOptions,\n });\n}\n\nasync function fetchModels(endpoint: string, params: Params) {\n return apiClient.get(endpoint, {params}).then(r => r.data);\n}\n","import {useQuery} from '@tanstack/react-query';\nimport {NormalizedModel} from '../../datatable/filters/normalized-model';\nimport {apiClient} from '../../http/query-client';\nimport {BackendResponse} from '../../http/backend-response/backend-response';\n\ninterface Response extends BackendResponse {\n model: NormalizedModel;\n}\n\nexport function useNormalizedModel(\n endpoint: string,\n queryParams?: Record,\n queryOptions?: {enabled?: boolean},\n) {\n return useQuery({\n queryKey: [endpoint, queryParams],\n queryFn: () => fetchModel(endpoint, queryParams),\n ...queryOptions,\n });\n}\n\nasync function fetchModel(\n endpoint: string,\n params?: Record,\n): Promise {\n return apiClient.get(endpoint, {params}).then(r => r.data);\n}\n","import React, {ReactNode, useRef, useState} from 'react';\nimport {useTrans} from '../../i18n/use-trans';\nimport {Trans} from '../../i18n/trans';\nimport {Avatar} from '../images/avatar';\nimport {Tooltip} from '../tooltip/tooltip';\nimport {IconButton} from '../buttons/icon-button';\nimport {EditIcon} from '../../icons/material/Edit';\nimport {message} from '../../i18n/message';\nimport {Item} from './listbox/item';\nimport {useController} from 'react-hook-form';\nimport {useControlledState} from '@react-stately/utils';\nimport {getInputFieldClassNames} from './input-field/get-input-field-class-names';\nimport clsx from 'clsx';\nimport {Skeleton} from '../skeleton/skeleton';\nimport {useNormalizedModels} from '../../users/queries/use-normalized-models';\nimport {useNormalizedModel} from '../../users/queries/use-normalized-model';\nimport {AnimatePresence, m} from 'framer-motion';\nimport {opacityAnimation} from '../animation/opacity-animation';\nimport {Select} from '@common/ui/forms/select/select';\nimport {MessageDescriptor} from '@common/i18n/message-descriptor';\nimport {BaseFieldProps} from '@common/ui/forms/input-field/base-field-props';\n\ninterface NormalizedModelFieldProps {\n label?: ReactNode;\n className?: string;\n background?: BaseFieldProps['background'];\n value?: string | number;\n placeholder?: MessageDescriptor;\n searchPlaceholder?: MessageDescriptor;\n defaultValue?: string | number;\n onChange?: (value: string | number) => void;\n invalid?: boolean;\n errorMessage?: string;\n description?: ReactNode;\n autoFocus?: boolean;\n queryParams?: Record;\n endpoint: string;\n disabled?: boolean;\n}\nexport function NormalizedModelField({\n label,\n className,\n background,\n value,\n defaultValue = '',\n placeholder = message('Select item...'),\n searchPlaceholder = message('Find an item...'),\n onChange,\n description,\n errorMessage,\n invalid,\n autoFocus,\n queryParams,\n endpoint,\n disabled,\n}: NormalizedModelFieldProps) {\n const inputRef = useRef(null);\n const [inputValue, setInputValue] = useState('');\n const [selectedValue, setSelectedValue] = useControlledState(\n value,\n defaultValue,\n onChange,\n );\n const query = useNormalizedModels(endpoint, {\n query: inputValue,\n ...queryParams,\n });\n const {trans} = useTrans();\n\n const fieldClassNames = getInputFieldClassNames({size: 'md'});\n\n if (selectedValue) {\n return (\n
\n
{label}
\n \n \n {\n setSelectedValue('');\n setInputValue('');\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n inputRef.current?.click();\n });\n }}\n />\n \n
\n {description && !errorMessage && (\n
{description}
\n )}\n {errorMessage && (\n
{errorMessage}
\n )}\n \n );\n }\n\n return (\n \n {model => (\n }\n >\n {model.name}\n \n )}\n \n );\n}\n\ninterface SelectedModelPreviewProps {\n modelId: string | number;\n selectedValue?: number | string;\n onEditClick?: () => void;\n endpoint?: string;\n disabled?: boolean;\n queryParams?: NormalizedModelFieldProps['queryParams'];\n}\nfunction SelectedModelPreview({\n modelId,\n onEditClick,\n endpoint,\n disabled,\n queryParams,\n}: SelectedModelPreviewProps) {\n const {data, isLoading} = useNormalizedModel(\n `${endpoint}/${modelId}`,\n queryParams,\n );\n\n if (isLoading || !data?.model) {\n return ;\n }\n\n return (\n \n {data.model.image && }\n
\n
{data.model.name}
\n
{data.model.description}
\n
\n }>\n \n \n \n \n \n );\n}\n\nfunction LoadingSkeleton() {\n return (\n \n \n
\n \n \n
\n \n
\n );\n}\n\ninterface FormNormalizedModelFieldProps extends NormalizedModelFieldProps {\n name: string;\n}\nexport function FormNormalizedModelField({\n name,\n ...fieldProps\n}: FormNormalizedModelFieldProps) {\n const {\n field: {onChange, value = ''},\n fieldState: {invalid, error},\n } = useController({\n name,\n });\n\n return (\n \n );\n}\n","import {FilterPanelProps} from './filter-panel-props';\nimport {FormNormalizedModelField} from '@common/ui/forms/normalized-model-field';\nimport {FilterSelectModelControl} from '@common/datatable/filters/backend-filter';\n\nexport function NormalizedModelFilterPanel({\n filter,\n}: FilterPanelProps) {\n return (\n \n );\n}\n","import {FilterOperator} from './backend-filter';\nimport {message} from '../../i18n/message';\nimport {MessageDescriptor} from '../../i18n/message-descriptor';\n\nexport const FilterOperatorNames: {[op in FilterOperator]: MessageDescriptor} =\n {\n '=': message('is'),\n '!=': message('is not'),\n '>': message('is greater than'),\n '>=': message('is greater than or equal to'),\n '<': message('is less than'),\n '<=': message('is less than or equal to'),\n has: message('Include'),\n doesntHave: message('Do not include'),\n between: message('Is between'),\n hasAll: message('Include all'),\n };\n","import {FormTextField} from '@common/ui/forms/input-field/text-field/text-field';\nimport {Trans} from '@common/i18n/trans';\nimport {FormSelect} from '@common/ui/forms/select/select';\nimport {Item} from '@common/ui/forms/listbox/item';\nimport {FilterOperatorNames} from '@common/datatable/filters/filter-operator-names';\nimport {Fragment} from 'react';\nimport {FilterPanelProps} from '@common/datatable/filters/panels/filter-panel-props';\nimport {\n FilterNumberInputControl,\n FilterTextInputControl,\n} from '@common/datatable/filters/backend-filter';\n\nexport function InputFilterPanel({\n filter,\n}: FilterPanelProps) {\n const control = filter.control;\n return (\n \n \n {filter.operators?.map(operator => (\n \n {}\n \n ))}\n \n \n \n );\n}\n","import React, {\n Children,\n cloneElement,\n isValidElement,\n ReactElement,\n} from 'react';\nimport clsx from 'clsx';\nimport type {ChipProps} from './chip';\n\nexport interface ChipListProps {\n className?: string;\n children?: ReactElement | ReactElement[];\n size?: ChipProps['size'];\n radius?: ChipProps['radius'];\n color?: ChipProps['color'];\n selectable?: ChipProps['selectable'];\n}\nexport function ChipList({\n className,\n children,\n size,\n color,\n radius,\n selectable,\n}: ChipListProps) {\n return (\n
\n {Children.map(children, chip => {\n if (isValidElement(chip)) {\n return cloneElement(chip, {\n size,\n color,\n selectable,\n radius,\n });\n }\n })}\n
\n );\n}\n","import {ChipValue} from './chip-field';\n\nexport function stringToChipValue(value: string | number): ChipValue {\n // add both name and description so \"validateWith\" works properly in chip field, if it depends on description\n return {id: value, name: `${value}`, description: `${value}`};\n}\n","import React, {\n HTMLAttributes,\n Key,\n ReactElement,\n ReactNode,\n Ref,\n RefObject,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {useFocusManager} from '@react-aria/focus';\nimport clsx from 'clsx';\nimport {mergeProps, useLayoutEffect, useObjectRef} from '@react-aria/utils';\nimport {useControlledState} from '@react-stately/utils';\nimport {ChipList} from './chip-list';\nimport {Field} from '../field';\nimport {Input} from '../input';\nimport {Chip, ChipProps} from './chip';\nimport {NormalizedModel} from '@common/datatable/filters/normalized-model';\nimport {getInputFieldClassNames} from '../get-input-field-class-names';\nimport {ProgressCircle} from '../../../progress/progress-circle';\nimport {useField} from '../use-field';\nimport {Avatar} from '../../../images/avatar';\nimport {Listbox} from '../../listbox/listbox';\nimport {useListbox} from '../../listbox/use-listbox';\nimport {BaseFieldPropsWithDom} from '../base-field-props';\nimport {useListboxKeyboardNavigation} from '../../listbox/use-listbox-keyboard-navigation';\nimport {createEventHandler} from '@common/utils/dom/create-event-handler';\nimport {ListBoxChildren, ListboxProps} from '../../listbox/types';\nimport {stringToChipValue} from './string-to-chip-value';\nimport {Popover} from '../../../overlays/popover';\nimport {KeyboardArrowDownIcon} from '@common/icons/material/KeyboardArrowDown';\n\nexport interface ChipValue extends Omit {\n invalid?: boolean;\n errorMessage?: string;\n}\n\nexport type ChipFieldProps = Omit<\n ListboxProps,\n 'selectionMode' | 'displayWith'\n> &\n Omit<\n BaseFieldPropsWithDom,\n 'value' | 'onChange' | 'defaultValue'\n > & {\n value?: (ChipValue | string)[];\n defaultValue?: (ChipValue | string)[];\n displayWith?: (value: ChipValue) => ReactNode;\n validateWith?: (value: ChipValue) => ChipValue;\n allowCustomValue?: boolean;\n showDropdownArrow?: boolean;\n onChange?: (value: ChipValue[]) => void;\n suggestions?: T[];\n children?: ListBoxChildren['children'];\n placeholder?: string;\n chipSize?: ChipProps['size'];\n openMenuOnFocus?: boolean;\n valueKey?: 'id' | 'name';\n onChipClick?: (value: ChipValue) => void;\n };\n\nfunction ChipFieldInner(\n props: ChipFieldProps,\n ref: Ref,\n) {\n const fieldRef = useRef(null);\n const inputRef = useObjectRef(ref);\n const {\n displayWith = v => v.name,\n validateWith,\n children,\n suggestions,\n isLoading,\n inputValue,\n onInputValueChange,\n onItemSelected,\n placeholder,\n onOpenChange,\n chipSize = 'md',\n openMenuOnFocus = true,\n showEmptyMessage,\n value: propsValue,\n defaultValue,\n onChange: propsOnChange,\n valueKey,\n isAsync,\n allowCustomValue = true,\n showDropdownArrow,\n onChipClick,\n ...inputFieldProps\n } = props;\n const fieldClassNames = getInputFieldClassNames({\n ...props,\n flexibleHeight: true,\n });\n\n const [value, onChange] = useChipFieldValueState(props);\n\n const [listboxIsOpen, setListboxIsOpen] = useState(false);\n\n const loadingIndicator = (\n \n );\n\n const dropdownArrow = showDropdownArrow ? : null;\n\n const {fieldProps, inputProps} = useField({\n ...inputFieldProps,\n focusRef: inputRef,\n endAdornment: isLoading && listboxIsOpen ? loadingIndicator : dropdownArrow,\n });\n\n return (\n \n {\n // refocus input when clicking outside it, but while still inside chip field\n inputRef.current?.focus();\n }}\n >\n \n \n {children}\n \n \n \n );\n}\n\ninterface ListWrapperProps {\n items: ChipValue[];\n setItems: (items: ChipValue[]) => void;\n displayChipUsing: (value: ChipValue) => ReactNode;\n chipSize?: ChipProps['size'];\n onChipClick?: (value: ChipValue) => void;\n}\nfunction ListWrapper({\n items,\n setItems,\n displayChipUsing,\n chipSize,\n onChipClick,\n}: ListWrapperProps) {\n const manager = useFocusManager();\n const removeItem = useCallback(\n (key: Key) => {\n const i = items.findIndex(cr => cr.id === key);\n const newItems = [...items];\n if (i > -1) {\n newItems.splice(i, 1);\n setItems(newItems);\n }\n return newItems;\n },\n [items, setItems],\n );\n\n return (\n \n {items.map(item => (\n : null}\n onClick={() => onChipClick?.(item)}\n onRemove={() => {\n const newItems = removeItem(item.id);\n if (newItems.length) {\n // focus previous chip\n manager?.focusPrevious({tabbable: true});\n } else {\n // focus input\n manager?.focusLast();\n }\n }}\n >\n {displayChipUsing(item)}\n \n ))}\n \n );\n}\n\ninterface ChipInputProps {\n showEmptyMessage?: boolean;\n inputProps: ReturnType['inputProps'];\n inputValue?: string;\n onInputValueChange?: (value: string) => void;\n fieldRef: RefObject;\n inputRef: RefObject;\n chips: ChipValue[];\n setChips: (items: ChipValue[]) => void;\n validateWith?: (value: ChipValue) => ChipValue;\n isLoading?: boolean;\n suggestions?: T[];\n placeholder?: string;\n openMenuOnFocus?: boolean;\n listboxIsOpen: boolean;\n setListboxIsOpen: (value: boolean) => void;\n allowCustomValue: boolean;\n children: ListBoxChildren['children'];\n}\nfunction ChipInput(props: ChipInputProps) {\n const {\n inputRef,\n fieldRef,\n validateWith,\n setChips,\n chips,\n suggestions,\n inputProps,\n placeholder,\n openMenuOnFocus,\n listboxIsOpen,\n setListboxIsOpen,\n allowCustomValue,\n isLoading,\n } = props;\n const inputClassName = 'outline-none text-sm mx-8 my-4 h-30 flex-auto';\n const manager = useFocusManager();\n\n const addItems = useCallback(\n (items?: ChipValue[]) => {\n items = (items || []).filter(item => {\n const invalid = !item || !item.id || !item.name;\n const alreadyExists = chips.findIndex(cr => cr.id === item?.id) > -1;\n return !alreadyExists && !invalid;\n });\n if (!items.length) return;\n\n if (validateWith) {\n items = items.map(item => validateWith(item));\n }\n setChips([...chips, ...items]);\n },\n [chips, setChips, validateWith],\n );\n\n const listbox = useListbox({\n ...props,\n clearInputOnItemSelection: true,\n isOpen: listboxIsOpen,\n onOpenChange: setListboxIsOpen,\n items: suggestions,\n selectionMode: 'none',\n role: 'listbox',\n virtualFocus: true,\n onItemSelected: value => {\n handleItemSelection(value as string);\n },\n });\n\n const {\n state: {\n activeIndex,\n setActiveIndex,\n isOpen,\n setIsOpen,\n inputValue,\n setInputValue,\n },\n refs,\n listboxId,\n collection,\n onInputChange,\n } = listbox;\n\n const handleItemSelection = (textValue: string) => {\n const option =\n collection.size && activeIndex != null\n ? [...collection.values()][activeIndex]\n : null;\n if (option?.item) {\n addItems([option.item]);\n } else if (allowCustomValue) {\n addItems([stringToChipValue(option ? option.value : textValue)]);\n }\n\n setInputValue('');\n setActiveIndex(null);\n setIsOpen(false);\n };\n\n // position dropdown relative to whole chip field, not the input\n useLayoutEffect(() => {\n if (fieldRef.current && refs.reference.current !== fieldRef.current) {\n listbox.reference(fieldRef.current);\n }\n }, [fieldRef, listbox, refs]);\n\n const {handleTriggerKeyDown, handleListboxKeyboardNavigation} =\n useListboxKeyboardNavigation(listbox);\n\n const handleFocusAndClick = createEventHandler(() => {\n if (openMenuOnFocus && !isOpen) {\n setIsOpen(true);\n }\n });\n\n return (\n {\n // prevent focus from leaving input when scrolling listbox via mouse\n e.preventDefault();\n }}\n >\n {\n const paste = e.clipboardData.getData('text');\n const emails = paste.match(\n /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi,\n );\n if (emails) {\n e.preventDefault();\n const selection = window.getSelection();\n if (selection?.rangeCount) {\n selection.deleteFromDocument();\n addItems(emails.map(email => stringToChipValue(email)));\n }\n }\n },\n 'aria-autocomplete': 'list',\n 'aria-controls': isOpen ? listboxId : undefined,\n autoComplete: 'off',\n autoCorrect: 'off',\n spellCheck: 'false',\n onKeyDown: e => {\n const input = e.target as HTMLInputElement;\n\n if (e.key === 'Enter') {\n // prevent form submitting\n e.preventDefault();\n // add chip from selected listbox option or current input text value\n handleItemSelection(input.value);\n return;\n }\n\n // on escape, clear input and close dropdown\n if (e.key === 'Escape' && isOpen) {\n setIsOpen(false);\n setInputValue('');\n }\n\n // move focus to input when focus is on first item and prevent arrow up from cycling listbox\n if (\n e.key === 'ArrowUp' &&\n isOpen &&\n (activeIndex === 0 || activeIndex == null)\n ) {\n setActiveIndex(null);\n return;\n }\n\n // block left and right arrows from navigating in input, if focus is on listbox\n if (\n activeIndex != null &&\n (e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n e.preventDefault();\n return;\n }\n\n // move focus on the last chip, if focus is at the start of input\n if (\n (e.key === 'ArrowLeft' ||\n e.key === 'Backspace' ||\n e.key === 'Delete') &&\n input.selectionStart === 0 &&\n activeIndex == null &&\n chips.length\n ) {\n manager?.focusPrevious({tabbable: true});\n return;\n }\n\n // fallthrough to listbox navigation handlers for arrow keys\n const handled = handleTriggerKeyDown(e);\n if (!handled) {\n handleListboxKeyboardNavigation(e);\n }\n },\n onFocus: handleFocusAndClick,\n onClick: handleFocusAndClick,\n } as HTMLAttributes)}\n />\n \n );\n}\n\nfunction useChipFieldValueState({\n onChange,\n value,\n defaultValue,\n valueKey,\n}: ChipFieldProps) {\n // convert value from string[] to ChipValue[], if needed\n const propsValue = useMemo(() => {\n return mixedValueToChipValue(value);\n }, [value]);\n\n // convert defaultValue from string[] to ChipValue[], if needed\n const propsDefaultValue = useMemo(() => {\n return mixedValueToChipValue(defaultValue);\n }, [defaultValue]);\n\n // emit string[] or ChipValue[] on change, based on \"valueKey\" prop\n const handleChange = useCallback(\n (value: ChipValue[]) => {\n const newValue = valueKey ? value.map(v => v[valueKey]) : value;\n onChange?.(newValue as any);\n },\n [onChange, valueKey],\n );\n\n return useControlledState(\n !propsValue ? undefined : propsValue,\n propsDefaultValue || [],\n handleChange,\n );\n}\n\nfunction mixedValueToChipValue(\n value?: (string | number | ChipValue)[] | null,\n): ChipValue[] | undefined {\n if (value == null) {\n return undefined;\n }\n\n return value.map(v => {\n return typeof v !== 'object' ? stringToChipValue(v as string) : v;\n });\n}\n\nexport const ChipField = React.forwardRef(ChipFieldInner) as (\n props: ChipFieldProps & {ref?: Ref},\n) => ReactElement;\n","import {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\nimport React from 'react';\nimport {ChipField, ChipFieldProps} from './chip-field';\n\nexport type FormChipFieldProps = ChipFieldProps & {\n name: string;\n};\n\nexport function FormChipField({children, ...props}: FormChipFieldProps) {\n const {\n field: {onChange, onBlur, value = [], ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n });\n\n const formProps: Partial> = {\n onChange,\n onBlur,\n value,\n invalid,\n errorMessage: error?.message,\n };\n\n return (\n \n {children}\n \n );\n}\n","import {Item} from '@common/ui/forms/listbox/item';\nimport {FilterPanelProps} from '@common/datatable/filters/panels/filter-panel-props';\nimport {FormChipField} from '@common/ui/forms/input-field/chip-field/form-chip-field';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {FilterChipFieldControl} from '@common/datatable/filters/backend-filter';\nimport {Trans} from '@common/i18n/trans';\n\nexport function ChipFieldFilterPanel({\n filter,\n}: FilterPanelProps) {\n const {trans} = useTrans();\n return (\n \n filter.control.options.find(o => o.key === chip.id)?.label.message\n }\n suggestions={filter.control.options.map(o => ({\n id: o.key,\n name: o.label.message,\n }))}\n >\n {chip => (\n \n {}\n \n )}\n \n );\n}\n","import {BackendFilter, FilterControlType} from '../backend-filter';\nimport {ComponentPropsWithRef, forwardRef, ReactNode} from 'react';\nimport {Button} from '@common/ui/buttons/button';\nimport {KeyboardArrowDownIcon} from '@common/icons/material/KeyboardArrowDown';\nimport {Trans} from '@common/i18n/trans';\nimport clsx from 'clsx';\n\ninterface TriggerButtonProps\n extends Omit, 'color'> {\n isInactive?: boolean;\n filter: BackendFilter;\n children?: ReactNode;\n}\nexport const FilterListTriggerButton = forwardRef<\n HTMLButtonElement,\n TriggerButtonProps\n>((props, ref) => {\n // pass through all props from menu trigger and dialog trigger to button\n const {isInactive, filter, ...domProps} = props;\n\n if (isInactive) {\n return ;\n }\n\n return ;\n});\n\ninterface InactiveFilterButtonProps\n extends Omit, 'color'> {\n filter: BackendFilter;\n}\nexport const InactiveFilterButton = forwardRef<\n HTMLButtonElement,\n InactiveFilterButtonProps\n>(({filter, ...domProps}, ref) => {\n return (\n }\n {...domProps}\n >\n \n \n );\n});\n\nexport const ActiveFilterButton = forwardRef<\n HTMLButtonElement,\n InactiveFilterButtonProps\n>(({filter, children, ...domProps}, ref) => {\n const isBoolean = filter.control.type === FilterControlType.BooleanToggle;\n return (\n }\n ref={ref}\n {...domProps}\n >\n \n \n \n {children}\n \n );\n});\n","import {DialogTrigger} from '../../../ui/overlays/dialog/dialog-trigger';\nimport {FilterListTriggerButton} from './filter-list-trigger-button';\nimport {ReactNode} from 'react';\nimport {useForm} from 'react-hook-form';\nimport {FilterItemFormValue} from '../add-filter-dialog';\nimport {useDialogContext} from '../../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../../ui/overlays/dialog/dialog';\nimport {DialogHeader} from '../../../ui/overlays/dialog/dialog-header';\nimport {Trans} from '../../../i18n/trans';\nimport {DialogBody} from '../../../ui/overlays/dialog/dialog-body';\nimport {Form} from '../../../ui/forms/form';\nimport {DialogFooter} from '../../../ui/overlays/dialog/dialog-footer';\nimport {Button} from '../../../ui/buttons/button';\nimport {FilterListControlProps} from './filter-list-control';\n\ninterface FilterListItemDialogTriggerProps extends FilterListControlProps {\n label: ReactNode;\n panel: ReactNode;\n}\nexport function FilterListItemDialogTrigger(\n props: FilterListItemDialogTriggerProps\n) {\n const {onValueChange, isInactive, filter, label} = props;\n return (\n {\n if (value !== undefined) {\n onValueChange(value);\n }\n }}\n >\n \n {label}\n \n \n \n );\n}\n\nexport function FilterListControlDialog({\n filter,\n panel,\n value,\n operator,\n}: FilterListItemDialogTriggerProps) {\n const form = useForm>({\n defaultValues: {\n [filter.key]: {value, operator},\n },\n });\n const {close, formId} = useDialogContext();\n return (\n \n \n \n \n \n {\n close(formValue[filter.key]);\n }}\n >\n {filter.description && (\n
\n \n
\n )}\n {panel}\n \n
\n \n \n \n \n \n
\n );\n}\n","import {Fragment, memo} from 'react';\nimport {useNumberFormatter} from './use-number-formatter';\nimport {NumberFormatOptions} from '@internationalized/number';\nimport {shallowEqual} from '../utils/shallow-equal';\n\ninterface FormattedNumberProps extends NumberFormatOptions {\n value: number;\n}\nexport const FormattedNumber = memo(\n ({value, ...options}: FormattedNumberProps) => {\n const formatter = useNumberFormatter(options);\n\n if (isNaN(value)) {\n value = 0;\n }\n\n return {formatter.format(value)};\n },\n shallowEqual\n);\n","import {\n BackendFilter,\n CustomFilterControl,\n DatePickerFilterControl,\n FilterBooleanToggleControl,\n FilterChipFieldControl,\n FilterControl,\n FilterControlType,\n FilterNumberInputControl,\n FilterOperator,\n FilterSelectControl,\n FilterSelectModelControl,\n FilterTextInputControl,\n} from '../backend-filter';\nimport {FilterListTriggerButton} from './filter-list-trigger-button';\nimport {Trans} from '@common/i18n/trans';\nimport {SelectFilterPanel} from '../panels/select-filter-panel';\nimport {FilterListItemDialogTrigger} from './filter-list-item-dialog-trigger';\nimport {Avatar} from '@common/ui/images/avatar';\nimport {NormalizedModelFilterPanel} from '../panels/normalized-model-filter-panel';\nimport {DateRangeFilterPanel} from '../panels/date-range-filter-panel';\nimport {Fragment, Key, ReactNode} from 'react';\nimport {DateRangePresets} from '@common/ui/forms/input-field/date/date-range-picker/dialog/date-range-presets';\nimport {FormattedDateTimeRange} from '@common/i18n/formatted-date-time-range';\nimport {AbsoluteDateRange} from '@common/ui/forms/input-field/date/date-range-picker/form-date-range-picker';\nimport {InputFilterPanel} from '../panels/input-filter-panel';\nimport {FilterOperatorNames} from '../filter-operator-names';\nimport {FilterItemFormValue} from '../add-filter-dialog';\nimport {useNormalizedModel} from '@common/users/queries/use-normalized-model';\nimport {Skeleton} from '@common/ui/skeleton/skeleton';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {ChipFieldFilterPanel} from '@common/datatable/filters/panels/chip-field-filter-panel';\nimport {FormattedNumber} from '@common/i18n/formatted-number';\n\nexport interface FilterListControlProps {\n filter: BackendFilter;\n onValueChange: (value: FilterItemFormValue) => void;\n value: T;\n operator?: FilterOperator;\n isInactive?: boolean;\n}\nexport function FilterListControl(props: FilterListControlProps) {\n switch (props.filter.control.type) {\n case FilterControlType.DateRangePicker:\n return ;\n case FilterControlType.BooleanToggle:\n return ;\n case FilterControlType.Select:\n return ;\n case FilterControlType.ChipField:\n return ;\n case FilterControlType.Input:\n return ;\n case FilterControlType.SelectModel:\n return ;\n case FilterControlType.Custom:\n const Control = (props.filter.control as CustomFilterControl).listItem;\n return ;\n default:\n return null;\n }\n}\n\nfunction DatePickerControl(\n props: FilterListControlProps<\n Required,\n DatePickerFilterControl\n >,\n) {\n const {value, filter} = props;\n\n let valueLabel: ReactNode;\n if (value.preset !== undefined) {\n valueLabel = ;\n } else {\n valueLabel = (\n \n );\n }\n\n return (\n }\n />\n );\n}\n\nfunction BooleanToggleControl({\n filter,\n isInactive,\n onValueChange,\n}: FilterListControlProps<\n FilterBooleanToggleControl['defaultValue'],\n FilterBooleanToggleControl\n>) {\n // todo: toggle control on or off here\n return (\n {\n onValueChange({value: filter.control.defaultValue});\n }}\n filter={filter}\n isInactive={isInactive}\n />\n );\n}\n\nfunction SelectControl(\n props: FilterListControlProps,\n) {\n const {filter, value} = props;\n const option = filter.control.options.find(o => o.key === value);\n return (\n : null}\n panel={}\n />\n );\n}\n\nfunction ChipFieldControl(\n props: FilterListControlProps,\n) {\n return (\n }\n panel={}\n />\n );\n}\n\nfunction MultipleValues(\n props: FilterListControlProps,\n) {\n const {trans} = useTrans();\n const {filter, value} = props;\n const options = value.map(v => filter.control.options.find(o => o.key === v));\n const maxShownCount = 3;\n const notShownCount = value.length - maxShownCount;\n\n // translate names, add commas and limit to 3\n const names = (\n \n {options\n .filter(Boolean)\n .slice(0, maxShownCount)\n .map((o, i) => {\n let name = '';\n if (i !== 0) {\n name += ', ';\n }\n name += trans(o!.label);\n return name;\n })}\n \n );\n\n // indicate that there are some names not shown\n return notShownCount > 0 ? (\n \n ) : (\n names\n );\n}\n\nfunction InputControl(\n props: FilterListControlProps<\n string,\n FilterTextInputControl | FilterNumberInputControl\n >,\n) {\n const {filter, value, operator} = props;\n\n const operatorLabel = operator ? (\n \n ) : null;\n\n const formattedValue =\n filter.control.inputType === 'number' ? (\n \n ) : (\n value\n );\n\n return (\n \n {operatorLabel} {formattedValue}\n \n }\n panel={}\n />\n );\n}\n\nfunction SelectModelControl(\n props: FilterListControlProps,\n) {\n const {value, filter} = props;\n const {isLoading, data} = useNormalizedModel(\n `normalized-models/${filter.control.model}/${value}`,\n undefined,\n {enabled: !!value},\n );\n\n const skeleton = (\n \n \n \n \n );\n const modelPreview = (\n \n \n {data?.model.name}\n \n );\n\n const label = isLoading || !data ? skeleton : modelPreview;\n\n return (\n }\n />\n );\n}\n","import clsx from 'clsx';\nimport {BackendFilter} from '../backend-filter';\nimport {useBackendFilterUrlParams} from '../backend-filter-url-params';\nimport {IconButton} from '@common/ui/buttons/icon-button';\nimport {CloseIcon} from '@common/icons/material/Close';\nimport {FilterListControl} from './filter-list-control';\nimport {FilterItemFormValue} from '../add-filter-dialog';\n\ninterface FilterListProps {\n filters: BackendFilter[];\n // these filters will always be shown, even if value is not yet selected for filter\n pinnedFilters?: string[];\n className?: string;\n}\nexport function FilterList({\n filters,\n pinnedFilters,\n className,\n}: FilterListProps) {\n const {decodedFilters, remove, replaceAll} = useBackendFilterUrlParams(\n filters,\n pinnedFilters\n );\n\n if (!decodedFilters.length) return null;\n\n return (\n
\n {decodedFilters.map((field, index) => {\n const filter = filters.find(f => f.key === field.key);\n\n if (!filter) return null;\n\n const handleValueChange = (payload: FilterItemFormValue) => {\n const newFilters = [...decodedFilters];\n newFilters.splice(index, 1, {\n key: filter.key,\n value: payload.value,\n isInactive: false,\n operator: payload.operator || filter.defaultOperator,\n });\n replaceAll(newFilters);\n };\n\n return (\n
\n {!field.isInactive && (\n {\n remove(field.key);\n }}\n >\n \n \n )}\n \n
\n );\n })}\n
\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const AddIcon = createSvgIcon(\n \n, 'AddOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const FileDownloadIcon = createSvgIcon(\n \n, 'FileDownloadOutlined');\n","export function downloadFileFromUrl(url: string, name?: string) {\n const link = document.createElement('a');\n link.href = url;\n if (name) link.download = name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n","import {useControlledState} from '@react-stately/utils';\nimport {HTMLAttributes, useCallback, useState} from 'react';\nimport {\n CalendarDate,\n DateValue,\n isSameDay,\n toCalendarDate,\n toZoned,\n ZonedDateTime,\n} from '@internationalized/date';\nimport {useBaseDatePickerState} from '../use-base-date-picker-state';\nimport {useCurrentDateTime} from '@common/i18n/use-current-date-time';\n\nexport type Granularity = 'day' | 'minute';\n\nexport type DatePickerState = BaseDatePickerState;\n\nexport interface BaseDatePickerState {\n timezone: string;\n granularity: Granularity;\n selectedValue: T;\n setSelectedValue: (value: T) => void;\n calendarIsOpen: boolean;\n setCalendarIsOpen: (isOpen: boolean) => void;\n calendarDates: CalendarDate[];\n setCalendarDates: (dates: CalendarDate[]) => void;\n dayIsActive: (day: CalendarDate) => boolean;\n dayIsHighlighted: (day: CalendarDate) => boolean;\n dayIsRangeStart: (day: CalendarDate) => boolean;\n dayIsRangeEnd: (day: CalendarDate) => boolean;\n isPlaceholder: P;\n setIsPlaceholder: (value: P) => void;\n clear: () => void;\n min?: ZonedDateTime;\n max?: ZonedDateTime;\n closeDialogOnSelection: boolean;\n getCellProps: (\n date: CalendarDate,\n isSameMonth: boolean,\n ) => HTMLAttributes;\n}\n\nexport interface DatePickerValueProps {\n value?: V | null | '';\n defaultValue?: V | null;\n onChange?: (value: CV | null) => void;\n min?: DateValue;\n max?: DateValue;\n granularity?: Granularity;\n closeDialogOnSelection?: boolean;\n}\nexport function useDatePickerState(\n props: DatePickerValueProps,\n): BaseDatePickerState {\n const now = useCurrentDateTime();\n const [isPlaceholder, setIsPlaceholder] = useState(\n !props.value && !props.defaultValue,\n );\n\n // if user clears the date, we will want to still keep an\n // instance internally, but return null via \"onChange\" callback\n const setStateValue = props.onChange;\n const [internalValue, setInternalValue] = useControlledState(\n props.value || now,\n props.defaultValue || now,\n value => {\n setIsPlaceholder(false);\n setStateValue?.(value);\n },\n );\n\n const {\n min,\n max,\n granularity,\n timezone,\n calendarIsOpen,\n setCalendarIsOpen,\n closeDialogOnSelection,\n } = useBaseDatePickerState(internalValue, props);\n\n const clear = useCallback(() => {\n setIsPlaceholder(true);\n setInternalValue(now);\n setStateValue?.(null);\n setCalendarIsOpen(false);\n }, [now, setInternalValue, setStateValue, setCalendarIsOpen]);\n\n const [calendarDates, setCalendarDates] = useState(() => {\n return [toCalendarDate(internalValue)];\n });\n\n const setSelectedValue = useCallback(\n (newValue: DateValue) => {\n if (min && newValue.compare(min) < 0) {\n newValue = min;\n } else if (max && newValue.compare(max) > 0) {\n newValue = max;\n }\n\n // preserve time\n const value = internalValue\n ? internalValue.set(newValue)\n : toZoned(newValue, timezone);\n setInternalValue(value);\n setCalendarDates([toCalendarDate(value)]);\n setIsPlaceholder(false);\n },\n [setInternalValue, min, max, internalValue, timezone],\n );\n\n const dayIsActive = useCallback(\n (day: DateValue) => !isPlaceholder && isSameDay(internalValue, day),\n [internalValue, isPlaceholder],\n );\n\n const getCellProps = useCallback(\n (date: DateValue): HTMLAttributes => {\n return {\n onClick: () => {\n setSelectedValue?.(date);\n if (closeDialogOnSelection) {\n setCalendarIsOpen?.(false);\n }\n },\n };\n },\n [setSelectedValue, setCalendarIsOpen, closeDialogOnSelection],\n );\n\n return {\n selectedValue: internalValue,\n setSelectedValue: setInternalValue,\n calendarIsOpen,\n setCalendarIsOpen,\n dayIsActive,\n dayIsHighlighted: () => false,\n dayIsRangeStart: () => false,\n dayIsRangeEnd: () => false,\n getCellProps,\n calendarDates,\n setCalendarDates,\n isPlaceholder,\n clear,\n setIsPlaceholder,\n min,\n max,\n granularity,\n timezone,\n closeDialogOnSelection,\n };\n}\n","import React, {\n ComponentPropsWithoutRef,\n Fragment,\n MouseEvent,\n useRef,\n} from 'react';\nimport {parseAbsoluteToLocal, ZonedDateTime} from '@internationalized/date';\nimport {useController} from 'react-hook-form';\nimport {mergeProps} from '@react-aria/utils';\nimport {\n DatePickerValueProps,\n useDatePickerState,\n} from './use-date-picker-state';\nimport {DialogTrigger} from '@common/ui/overlays/dialog/dialog-trigger';\nimport {DateRangeIcon} from '@common/icons/material/DateRange';\nimport {Dialog} from '@common/ui/overlays/dialog/dialog';\nimport {DialogBody} from '@common/ui/overlays/dialog/dialog-body';\nimport {Calendar} from '../calendar/calendar';\nimport {\n DatePickerField,\n DatePickerFieldProps,\n} from '../date-range-picker/date-picker-field';\nimport {DateSegmentList} from '../segments/date-segment-list';\nimport {useDateFormatter} from '@common/i18n/use-date-formatter';\nimport {useTrans} from '@common/i18n/use-trans';\nimport clsx from 'clsx';\nimport {DialogFooter} from '@common/ui/overlays/dialog/dialog-footer';\nimport {Button} from '@common/ui/buttons/button';\nimport {Trans} from '@common/i18n/trans';\nimport {useCurrentDateTime} from '@common/i18n/use-current-date-time';\n\nexport interface DatePickerProps\n extends Omit,\n DatePickerValueProps {}\nexport function DatePicker({showCalendarFooter, ...props}: DatePickerProps) {\n const state = useDatePickerState(props);\n const inputRef = useRef(null);\n const now = useCurrentDateTime();\n\n const footer = showCalendarFooter && (\n {\n state.clear();\n }}\n >\n \n \n }\n >\n {\n state.setSelectedValue(now);\n state.setCalendarIsOpen(false);\n }}\n >\n \n \n \n );\n\n const dialog = (\n \n \n \n \n \n {footer}\n \n \n );\n\n const openOnClick: ComponentPropsWithoutRef<'div'> = {\n onClick: e => {\n e.stopPropagation();\n e.preventDefault();\n if (!isHourSegment(e)) {\n state.setCalendarIsOpen(true);\n } else {\n state.setCalendarIsOpen(false);\n }\n },\n };\n\n return (\n \n \n }\n {...props}\n >\n \n \n {dialog}\n \n );\n}\n\ninterface FormDatePickerProps extends DatePickerProps {\n name: string;\n}\nexport function FormDatePicker(props: FormDatePickerProps) {\n const {min, max} = props;\n const {trans} = useTrans();\n const {format} = useDateFormatter();\n const {\n field: {onChange, onBlur, value = null, ref},\n fieldState: {invalid, error},\n } = useController({\n name: props.name,\n rules: {\n validate: v => {\n if (!v) return;\n const date = parseAbsoluteToLocal(v);\n if (min && date.compare(min) < 0) {\n return trans({\n message: 'Enter a date after :date',\n values: {date: format(v)},\n });\n }\n if (max && date.compare(max) > 0) {\n return trans({\n message: 'Enter a date before :date',\n values: {date: format(v)},\n });\n }\n },\n },\n });\n\n const parsedValue: null | ZonedDateTime = value\n ? parseAbsoluteToLocal(value)\n : null;\n\n const formProps: Partial = {\n onChange: e => {\n onChange(e ? e.toAbsoluteString() : e);\n },\n onBlur,\n value: parsedValue,\n invalid,\n errorMessage: error?.message,\n inputRef: ref,\n };\n\n return ;\n}\n\nfunction isHourSegment(e: MouseEvent): boolean {\n return ['hour', 'minute', 'dayPeriod'].includes(\n (e.currentTarget as HTMLElement).ariaLabel || ''\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const DeleteIcon = createSvgIcon(\n \n, 'DeleteOutlined');\n","import {DragMonitor} from './use-drag-monitor';\nimport {ConnectedDraggable, DraggableId} from './use-draggable';\nimport {ConnectedDroppable} from './use-droppable';\n\nexport type DragSessionStatus =\n | 'dropSuccess'\n | 'dropFail'\n | 'dragging'\n | 'inactive';\n\nexport interface DragSession {\n dragTargetId?: DraggableId;\n status: DragSessionStatus;\n}\n\nexport const draggables = new Map();\nexport const droppables = new Map();\nexport const dragMonitors = new Map();\nexport const dragSession: DragSession = {\n status: 'inactive',\n};\n","import React from 'react';\n\ntype NativeEvent =\n | React.PointerEvent\n | PointerEvent\n | React.DragEvent\n | DragEvent;\n\nexport interface InteractableEvent {\n x: number;\n y: number;\n deltaX: number;\n deltaY: number;\n rect: InteractableRect;\n nativeEvent: NativeEvent;\n}\n\nexport interface InteractableRect {\n left: number;\n top: number;\n width: number;\n height: number;\n angle?: number;\n}\n\nexport function interactableEvent({\n e,\n rect,\n deltaX,\n deltaY,\n}: {\n e: NativeEvent;\n rect: InteractableRect;\n deltaX?: number;\n deltaY?: number;\n}): InteractableEvent {\n return {\n rect,\n x: e.clientX,\n y: e.clientY,\n deltaX: deltaX ?? 0,\n deltaY: deltaY ?? 0,\n nativeEvent: e,\n };\n}\n","type InteractionName = null | 'resize' | 'rotate' | 'drag' | 'move';\n\nexport let activeInteraction: InteractionName = null;\n\nexport function setActiveInteraction(name: InteractionName) {\n activeInteraction = name;\n}\n","import {InteractableRect} from '../interactable-event';\n\nexport function domRectToObj(rect: DOMRect): InteractableRect {\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n","// use intersection observer instead of getBoundingClientRect for better performance as this will be called in onPointerMove event\nimport {InteractableRect} from '../interactable-event';\nimport {ConnectedMouseSelectable} from './mouse-selection/use-mouse-selectable';\nimport {DraggableId} from './use-draggable';\nimport {ConnectedDroppable} from './use-droppable';\n\nexport function updateRects(\n targets: Map\n) {\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n const {width, height, left, top} = entry.boundingClientRect;\n const [id, target] =\n [...targets].find(\n ([, target]) => target.ref.current === entry.target\n ) || [];\n if (id == null || target == null) return;\n\n const rect: InteractableRect = {\n width,\n height,\n left,\n top,\n };\n targets.set(id, {...target, rect});\n });\n observer.disconnect();\n });\n\n [...targets.values()].forEach(target => {\n if (target.ref.current) {\n observer.observe(target.ref.current);\n }\n });\n}\n","import React, {RefObject, useLayoutEffect, useRef} from 'react';\nimport {draggables, dragMonitors, dragSession, droppables} from './drag-state';\nimport {\n InteractableEvent,\n interactableEvent,\n InteractableRect,\n} from '../interactable-event';\nimport {activeInteraction, setActiveInteraction} from '../active-interaction';\nimport {domRectToObj} from '../utils/dom-rect-to-obj';\nimport {updateRects} from './update-rects';\nimport {useGlobalListeners} from '@react-aria/utils';\nimport {DragMonitor} from './use-drag-monitor';\nimport {NativeFileDraggable} from './use-droppable';\n\ninterface DragState {\n currentRect?: InteractableRect;\n lastPosition: {x: number; y: number};\n clickedEl?: HTMLElement;\n}\n\nexport type DragPreviewRenderer = (\n draggable: ConnectedDraggable,\n callback: (node: HTMLElement) => void\n) => void;\n\nexport type DraggableId = string | number | object;\n\nexport interface ConnectedDraggable {\n type: string;\n id: DraggableId;\n getData: () => T;\n ref: RefObject;\n}\n\n// Either draggable from within the app, or file dragged in from the desktop\nexport type MixedDraggable = ConnectedDraggable | NativeFileDraggable;\n\ninterface UseDragProps extends ConnectedDraggable {\n disabled?: boolean;\n onDragStart?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n onDragMove?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n onDragEnd?: (e: InteractableEvent, target: ConnectedDraggable) => void;\n preview?: RefObject;\n hidePreview?: boolean;\n}\nexport function useDraggable({\n id,\n disabled,\n ref,\n preview,\n hidePreview,\n ...options\n}: UseDragProps) {\n const dragHandleRef = useRef(null);\n const {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n const state = useRef({\n lastPosition: {x: 0, y: 0},\n }).current;\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => {\n if (!disabled) {\n draggables.set(id, {\n ...draggables.get(id),\n id,\n ref,\n type: optionsRef.current.type,\n getData: optionsRef.current.getData,\n });\n } else {\n draggables.delete(id);\n }\n return () => {\n draggables.delete(id);\n };\n }, [id, disabled, optionsRef, ref]);\n\n // notify monitors connected to the same drag type as this draggable\n const notifyMonitors = (callback: (m: DragMonitor) => void) => {\n dragMonitors.forEach(monitor => {\n if (monitor.type === draggables.get(id)?.type) {\n callback(monitor);\n }\n });\n };\n\n const onDragStart = (e: React.DragEvent) => {\n const draggable = draggables.get(id);\n const el = ref.current;\n const clickedOnHandle =\n !dragHandleRef.current ||\n !state.clickedEl ||\n dragHandleRef.current.contains(state.clickedEl);\n\n // if another interaction is in progress (rotate, resize, drag etc.), bail\n if (activeInteraction || !el || !draggable || !clickedOnHandle) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n updateRects(droppables);\n setActiveInteraction('drag');\n\n // hide default browser ghost image\n if (hidePreview) {\n hideNativeGhostImage(e);\n }\n // this will hide default browser cursor icon, if \"dropEffect\" is not set in dragOver/dragEnter\n e.dataTransfer.effectAllowed = 'move';\n\n state.lastPosition = {x: e.clientX, y: e.clientY};\n state.currentRect = domRectToObj(el.getBoundingClientRect());\n const ie = interactableEvent({rect: state.currentRect!, e});\n\n // If there is a preview option, use it to render a custom preview image that will\n // appear under the pointer while dragging. If not, the element itself is dragged by the browser.\n if (preview?.current) {\n preview.current(draggable, node => {\n e.dataTransfer.setDragImage(node, 0, 0);\n });\n }\n\n dragSession.status = 'dragging';\n dragSession.dragTargetId = id;\n if (ref.current) {\n ref.current.dataset.dragging = 'true';\n }\n\n optionsRef.current.onDragStart?.(ie, draggable);\n\n // wait until next frame so changes made in \"onDragStart\" are reflected in drag monitors\n requestAnimationFrame(() => {\n notifyMonitors(m => m.onDragStart?.(ie, draggable));\n });\n\n // firefox does not provide clientX/clientY in \"onDrag\", need to listen for dragOver on window instead\n addGlobalListener(window, 'dragover', onDragOver, true);\n };\n\n const onDragOver = (e: React.DragEvent | DragEvent) => {\n e.preventDefault();\n\n if (!state.currentRect) return;\n\n const deltaX = e.clientX - state.lastPosition.x;\n const deltaY = e.clientY - state.lastPosition.y;\n\n const newRect = {\n ...state.currentRect,\n left: state.currentRect.left + deltaX,\n top: state.currentRect.top + deltaY,\n };\n\n const ie = interactableEvent({rect: newRect, e, deltaX, deltaY});\n\n const target = draggables.get(id);\n if (target) {\n optionsRef.current.onDragMove?.(ie, target);\n notifyMonitors(m => m.onDragMove?.(ie, target));\n }\n\n state.lastPosition = {x: e.clientX, y: e.clientY};\n state.currentRect = newRect;\n };\n\n const onDragEnd = (e: React.DragEvent) => {\n removeAllGlobalListeners();\n if (!state.currentRect) return;\n\n setActiveInteraction(null);\n if (emptyImage) {\n emptyImage.remove();\n }\n\n const ie = interactableEvent({rect: state.currentRect, e});\n\n const draggable = draggables.get(id);\n if (draggable) {\n optionsRef.current.onDragEnd?.(ie, draggable);\n notifyMonitors(m => m.onDragEnd?.(ie, draggable, dragSession!.status));\n }\n\n // wait a frame before clearing so monitors have a chance to use drag session status\n requestAnimationFrame(() => {\n dragSession.dragTargetId = undefined;\n dragSession.status = 'inactive';\n if (ref.current) {\n delete ref.current.dataset.dragging;\n }\n });\n };\n\n const draggableProps = {\n draggable: !disabled,\n onDragStart,\n onDragEnd,\n onPointerDown: (e: React.PointerEvent) => {\n state.clickedEl = e.target as HTMLElement;\n },\n };\n\n return {draggableProps, dragHandleRef};\n}\n\nlet emptyImage: HTMLImageElement | undefined;\nfunction hideNativeGhostImage(e: React.DragEvent) {\n if (!emptyImage) {\n emptyImage = new Image();\n // image needs to be in the dom to prevent \"globe\" icon in chrome\n document.body.append(emptyImage);\n emptyImage.src =\n 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n }\n\n e.dataTransfer.setDragImage(emptyImage, 0, 0);\n}\n","import {UploadedFile} from '@common/uploads/uploaded-file';\n\nexport async function* readFilesFromDataTransfer(dataTransfer: DataTransfer) {\n const entries: FileSystemEntry[] = [];\n\n // Pull out all entries before reading them, otherwise\n // some entries will be lost due to recursion with promises\n for (const item of dataTransfer.items) {\n if (item.kind === 'file') {\n const entry = item.webkitGetAsEntry();\n if (entry) {\n entries.push(entry);\n }\n }\n }\n\n for (const entry of entries) {\n if (entry.isFile) {\n if (entry.name === '.DS_Store') continue;\n const file = await getEntryFile(entry as FileSystemFileEntry);\n yield new UploadedFile(file, entry.fullPath);\n } else if (entry.isDirectory) {\n yield* getEntriesFromDirectory(entry as FileSystemDirectoryEntry);\n }\n }\n}\n\nasync function* getEntriesFromDirectory(\n item: FileSystemDirectoryEntry\n): AsyncIterable {\n const reader = item.createReader();\n\n // We must call readEntries repeatedly because there may be a limit to the\n // number of entries that are returned at once.\n let entries: FileSystemEntry[];\n do {\n entries = await new Promise((resolve, reject) => {\n reader.readEntries(resolve, reject);\n });\n\n for (const entry of entries) {\n if (entry.isFile) {\n if (entry.name === '.DS_Store') continue;\n const file = await getEntryFile(entry as FileSystemFileEntry);\n yield new UploadedFile(file, entry.fullPath);\n } else if (entry.isDirectory) {\n yield* getEntriesFromDirectory(entry as FileSystemDirectoryEntry);\n }\n }\n } while (entries.length > 0);\n}\n\nfunction getEntryFile(entry: FileSystemFileEntry): Promise {\n return new Promise((resolve, reject) => entry.file(resolve, reject));\n}\n","export async function asyncIterableToArray(\n iterator: AsyncIterable\n): Promise {\n const items: T[] = [];\n for await (const item of iterator) {\n items.push(item);\n }\n return items;\n}\n","import React, {RefObject, useLayoutEffect, useRef} from 'react';\nimport {draggables, dragSession, droppables} from './drag-state';\nimport {readFilesFromDataTransfer} from './read-files-from-data-transfer';\nimport {asyncIterableToArray} from '@common/utils/array/async-iterable-to-array';\nimport {InteractableRect} from '../interactable-event';\nimport {DraggableId, MixedDraggable} from './use-draggable';\nimport {UploadedFile} from '@common/uploads/uploaded-file';\n\nexport interface ConnectedDroppable {\n id: DraggableId;\n rect?: InteractableRect;\n disabled?: boolean;\n ref: RefObject;\n}\n\n// File dragged in from desktop\nexport interface NativeFileDraggable {\n type: 'nativeFile';\n el: null;\n ref: null;\n getData: () => Promise;\n}\n\ninterface UseDroppableProps {\n id: DraggableId;\n disabled?: boolean;\n types: ('nativeFile' | string)[];\n ref: RefObject;\n // this will fire dragEnter/dragLeave/dragOver events when same element is both draggable and drop target and dragging target over itself. Used for showing line previews before/after element during sort.\n allowDragEventsFromItself?: boolean;\n onDragEnter?: (target: MixedDraggable) => void;\n onDragLeave?: (target: MixedDraggable) => void;\n onDragOver?: (\n target: MixedDraggable,\n e: React.DragEvent\n ) => void;\n // Handler that is called after draggable is held over droppable for a period of time.\n // This typically opens the item so that the user can drop within it.\n onDropActivate?: (e: MixedDraggable) => void;\n onDrop?: (target: MixedDraggable) => void | Promise | false;\n acceptsDrop?: (target: MixedDraggable) => boolean;\n}\n\ninterface DroppableState {\n dragOverElements: Set;\n dropActivateTimer: ReturnType | undefined;\n}\n\nconst DROP_ACTIVATE_TIMEOUT = 400;\n\nexport function useDroppable({\n id,\n disabled,\n ref,\n ...options\n}: UseDroppableProps) {\n const state = useRef({\n dragOverElements: new Set(),\n dropActivateTimer: undefined,\n }).current;\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n useLayoutEffect(() => {\n droppables.set(id, {\n ...droppables.get(id),\n disabled,\n id,\n ref,\n });\n return () => {\n droppables.delete(id);\n };\n }, [id, optionsRef, disabled, ref]);\n\n // check if drop target accepts drag target\n const canDrop = (draggable: MixedDraggable): boolean => {\n const options = optionsRef.current;\n\n const allowEventsOnSelf =\n options.allowDragEventsFromItself ||\n ref.current !== draggable.ref?.current;\n\n return !!(\n draggable?.type &&\n allowEventsOnSelf &&\n options.types.includes(draggable.type) &&\n (!options.acceptsDrop || options.acceptsDrop(draggable))\n );\n };\n\n const fireDragLeave = (e: React.DragEvent) => {\n const draggable = getDraggable(e);\n if (draggable) {\n optionsRef.current.onDragLeave?.(draggable);\n }\n };\n\n const onDragEnter = (e: React.DragEvent) => {\n e.stopPropagation();\n\n state.dragOverElements.add(e.target as Element);\n if (state.dragOverElements.size > 1) {\n return;\n }\n\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n optionsRef.current.onDragEnter?.(draggable);\n\n clearTimeout(state.dropActivateTimer);\n if (typeof optionsRef.current.onDropActivate === 'function') {\n state.dropActivateTimer = setTimeout(() => {\n if (draggable) {\n optionsRef.current.onDropActivate?.(draggable);\n }\n }, DROP_ACTIVATE_TIMEOUT);\n }\n }\n };\n\n const onDragLeave = (e: React.DragEvent) => {\n e.stopPropagation();\n\n // Track all the targets of dragenter events in a set, and remove them\n // in dragleave. When the set becomes empty, we've left the drop target completely.\n // We must also remove any elements that are no longer in the DOM, because dragleave\n // events will never be fired for these. This can happen, for example, with drop\n // indicators between items, which disappear when the drop target changes.\n state.dragOverElements.delete(e.target as Element);\n for (const element of state.dragOverElements) {\n if (!e.currentTarget.contains(element)) {\n state.dragOverElements.delete(element);\n }\n }\n\n if (state.dragOverElements.size > 0) {\n return;\n }\n\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n fireDragLeave(e);\n clearTimeout(state.dropActivateTimer);\n }\n };\n\n const onDrop = async (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n state.dragOverElements.clear();\n\n fireDragLeave(e);\n clearTimeout(state.dropActivateTimer);\n\n const draggable = getDraggable(e);\n if (draggable) {\n optionsRef.current.onDragLeave?.(draggable);\n\n // drop target does not accept this type of droppable\n if (!canDrop(draggable)) {\n if (dragSession.status !== 'inactive') {\n dragSession.status = 'dropFail';\n }\n // drop target accepts this type, but it might still reject the drop in callback\n } else {\n // allow callback to mark drop as failed\n const dropResult = optionsRef.current.onDrop?.(draggable);\n\n // drag session will only be active for draggables within the app, never for files dragged in from desktop\n if (dragSession.status !== 'inactive') {\n dragSession.status =\n dropResult === false ? 'dropFail' : 'dropSuccess';\n }\n }\n }\n };\n\n const droppableProps = {\n onDragOver: (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const draggable = getDraggable(e);\n if (draggable && canDrop(draggable)) {\n optionsRef.current.onDragOver?.(draggable, e);\n }\n },\n onDragEnter,\n onDragLeave,\n onDrop,\n };\n\n return {\n droppableProps: disabled ? {} : droppableProps,\n };\n}\n\nfunction getDraggable(\n e: React.DragEvent\n): MixedDraggable | undefined {\n if (dragSession.dragTargetId != null) {\n return draggables.get(dragSession.dragTargetId);\n } else if (e.dataTransfer.types.includes('Files')) {\n return {\n type: 'nativeFile',\n el: null,\n ref: null,\n getData: () => {\n return asyncIterableToArray(readFilesFromDataTransfer(e.dataTransfer));\n },\n };\n }\n}\n","import {Permission} from './permission';\nimport {Subscription} from '../billing/subscription';\nimport {Role} from './role';\nimport {SocialProfile} from './social-profile';\nimport {AccessToken} from './access-token';\nimport type {ActiveSession} from '@common/auth/ui/account-settings/sessions-panel/requests/use-user-sessions';\n\nexport const USER_MODEL = 'user';\n\nexport interface User {\n id: number;\n display_name: string;\n username?: string;\n first_name?: string;\n last_name?: string;\n avatar?: string;\n email_verified_at: string;\n permissions?: Permission[];\n email: string;\n password: string;\n language: string;\n timezone: string;\n country: string;\n created_at: string;\n updated_at: string;\n subscriptions?: Omit[];\n roles: Role[];\n social_profiles: SocialProfile[];\n tokens?: AccessToken[];\n has_password: boolean;\n available_space: number | null;\n unread_notifications_count?: number;\n card_last_four?: number;\n card_brand?: string;\n card_expires?: string;\n model_type: typeof USER_MODEL;\n banned_at?: string;\n followed_users?: Omit[];\n followers_count?: number;\n followed_users_count?: number;\n followers?: Omit[];\n last_login?: ActiveSession;\n bans?: {\n id: number;\n comment: string;\n expired_at?: string;\n }[];\n two_factor_confirmed_at?: string;\n two_factor_recovery_codes?: string[];\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const LinkIcon = createSvgIcon(\n \n, 'LinkOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const MoreVertIcon = createSvgIcon(\n \n, 'MoreVertOutlined');\n","import React, {useContext, useMemo} from 'react';\nimport {FileEntry} from '../file-entry';\nimport {useSettings} from '../../core/settings/use-settings';\nimport {isAbsoluteUrl} from '@common/utils/urls/is-absolute-url';\n\nexport const FileEntryUrlsContext = React.createContext<\n Record\n>(null!);\n\nexport function useFileEntryUrls(\n entry?: FileEntry,\n options?: {thumbnail?: boolean; downloadHashes?: string[]}\n): {previewUrl?: string; downloadUrl?: string} {\n const {base_url} = useSettings();\n const urlSearchParams = useContext(FileEntryUrlsContext);\n\n return useMemo(() => {\n if (!entry) {\n return {};\n }\n\n let previewUrl: string | undefined;\n if (entry.url) {\n previewUrl = isAbsoluteUrl(entry.url)\n ? entry.url\n : `${base_url}/${entry.url}`;\n }\n\n const urls = {\n previewUrl,\n downloadUrl: `${base_url}/api/v1/file-entries/download/${\n options?.downloadHashes || entry.hash\n }`,\n };\n\n if (urlSearchParams) {\n // preview url\n if (urls.previewUrl) {\n urls.previewUrl = addParams(\n urls.previewUrl,\n {...urlSearchParams, thumbnail: options?.thumbnail ? 'true' : ''},\n base_url\n );\n }\n\n // download url\n urls.downloadUrl = addParams(urls.downloadUrl, urlSearchParams, base_url);\n }\n\n return urls;\n }, [\n base_url,\n entry,\n options?.downloadHashes,\n options?.thumbnail,\n urlSearchParams,\n ]);\n}\n\nfunction addParams(urlString: string, params: object, baseUrl: string): string {\n const url = new URL(urlString, baseUrl);\n Object.entries(params).forEach(([key, value]) => {\n url.searchParams.append(key, value as string);\n });\n return url.toString();\n}\n","import React from 'react';\nimport {FileEntry} from '../file-entry';\n\nexport interface FilePreviewContextValue {\n entries: FileEntry[];\n activeIndex: number;\n}\n\nexport const FilePreviewContext = React.createContext(\n null!\n);\n","import {ReactNode, useContext} from 'react';\nimport clsx from 'clsx';\nimport {Button} from '../../../ui/buttons/button';\nimport {downloadFileFromUrl} from '../../utils/download-file-from-url';\nimport {FilePreviewContext} from '../file-preview-context';\nimport {Trans} from '../../../i18n/trans';\nimport {FilePreviewProps} from './file-preview-props';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\n\ninterface Props extends FilePreviewProps {\n message?: ReactNode;\n}\nexport function DefaultFilePreview({message, className, allowDownload}: Props) {\n const {entries, activeIndex} = useContext(FilePreviewContext);\n const activeEntry = entries[activeIndex];\n const content = message || ;\n const {downloadUrl} = useFileEntryUrls(activeEntry);\n return (\n \n
{content}
\n {allowDownload && (\n
\n {\n if (downloadUrl) {\n downloadFileFromUrl(downloadUrl);\n }\n }}\n >\n \n \n
\n )}\n \n );\n}\n","import clsx from 'clsx';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {FilePreviewProps} from './file-preview-props';\nimport {DefaultFilePreview} from './default-file-preview';\n\nexport function ImageFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {trans} = useTrans();\n const {previewUrl} = useFileEntryUrls(entry);\n\n if (!previewUrl) {\n return ;\n }\n\n return (\n \n );\n}\n","import {useEffect, useState} from 'react';\nimport clsx from 'clsx';\nimport {FilePreviewProps} from './file-preview-props';\nimport {DefaultFilePreview} from './default-file-preview';\nimport {ProgressCircle} from '@common/ui/progress/progress-circle';\nimport {useFileEntryUrls} from '@common/uploads/hooks/file-entry-urls';\nimport {useTrans} from '@common/i18n/use-trans';\nimport {Trans} from '@common/i18n/trans';\nimport {apiClient} from '@common/http/query-client';\n\nconst FIVE_MB = 5242880;\n\nexport function TextFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {trans} = useTrans();\n const [tooLarge, setTooLarge] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [isFailed, setIsFailed] = useState(false);\n const [contents, setContents] = useState(null);\n const {previewUrl} = useFileEntryUrls(entry);\n\n useEffect(() => {\n if (!entry) return;\n if (!previewUrl) {\n setIsFailed(true);\n } else if (entry.file_size! >= FIVE_MB) {\n setTooLarge(true);\n setIsLoading(false);\n } else {\n getFileContents(previewUrl)\n .then(response => {\n setContents(response.data);\n })\n .catch(() => {\n setIsFailed(true);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }\n }, [entry, previewUrl]);\n\n if (isLoading) {\n return (\n \n );\n }\n\n if (tooLarge) {\n return (\n }\n />\n );\n }\n\n if (isFailed) {\n return (\n }\n />\n );\n }\n\n return (\n \n
{`${contents}`}
\n \n );\n}\n\nfunction getFileContents(src: string) {\n return apiClient.get(src, {\n responseType: 'text',\n // required for s3 presigned url to work\n withCredentials: false,\n headers: {\n Accept: 'text/plain',\n },\n });\n}\n","import {useEffect, useRef, useState} from 'react';\nimport {FilePreviewProps} from './file-preview-props';\nimport {DefaultFilePreview} from './default-file-preview';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\n\nexport function VideoFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {previewUrl} = useFileEntryUrls(entry);\n const ref = useRef(null);\n const [mediaInvalid, setMediaInvalid] = useState(false);\n\n useEffect(() => {\n setMediaInvalid(!ref.current?.canPlayType(entry.mime));\n }, [entry]);\n\n if (mediaInvalid || !previewUrl) {\n return ;\n }\n\n return (\n \n {\n setMediaInvalid(true);\n }}\n />\n \n );\n}\n","import {FilePreviewProps} from './file-preview-props';\nimport {DefaultFilePreview} from './default-file-preview';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\nimport {useEffect, useRef, useState} from 'react';\n\nexport function AudioFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {previewUrl} = useFileEntryUrls(entry);\n const ref = useRef(null);\n const [mediaInvalid, setMediaInvalid] = useState(false);\n\n useEffect(() => {\n setMediaInvalid(!ref.current?.canPlayType(entry.mime));\n }, [entry]);\n\n if (mediaInvalid || !previewUrl) {\n return ;\n }\n\n return (\n \n {\n setMediaInvalid(true);\n }}\n />\n \n );\n}\n","import clsx from 'clsx';\nimport {FilePreviewProps} from './file-preview-props';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {DefaultFilePreview} from './default-file-preview';\n\nexport function PdfFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {trans} = useTrans();\n const {previewUrl} = useFileEntryUrls(entry);\n\n if (!previewUrl) {\n return ;\n }\n\n return (\n \n );\n}\n","import clsx from 'clsx';\nimport {useEffect, useRef, useState} from 'react';\nimport {FilePreviewProps} from './file-preview-props';\nimport {DefaultFilePreview} from './default-file-preview';\nimport {ProgressCircle} from '../../../ui/progress/progress-circle';\nimport {FileEntry} from '../../file-entry';\nimport {useFileEntryUrls} from '../../hooks/file-entry-urls';\nimport {useTrans} from '../../../i18n/use-trans';\nimport {apiClient} from '../../../http/query-client';\n\nexport function WordDocumentFilePreview(props: FilePreviewProps) {\n const {entry, className} = props;\n const {trans} = useTrans();\n const ref = useRef(null);\n const [showDefault, setShowDefault] = useState(false);\n const timeoutId = useRef();\n const [isLoading, setIsLoading] = useState(false);\n const {previewUrl} = useFileEntryUrls(entry);\n\n useEffect(() => {\n // Google Docs viewer only supports files up to 25MB\n if (!previewUrl) {\n setShowDefault(true);\n } else if (entry.file_size && entry.file_size > 25000000) {\n setShowDefault(true);\n } else if (ref.current) {\n ref.current.onload = () => {\n clearTimeout(timeoutId.current);\n setIsLoading(false);\n };\n\n buildPreviewUrl(previewUrl, entry).then(url => {\n if (ref.current) {\n ref.current.src = url;\n }\n });\n\n // if preview iframe is not loaded\n // after 5 seconds, bail and show default preview\n timeoutId.current = setTimeout(() => {\n setShowDefault(true);\n }, 5000);\n }\n }, [entry, previewUrl]);\n\n if (showDefault) {\n return ;\n }\n\n return (\n
\n {isLoading && }\n \n
\n );\n}\n\nasync function buildPreviewUrl(\n urlString: string,\n entry: FileEntry\n): Promise {\n const url = new URL(urlString);\n // if we're not trying to preview shareable link we will need to generate\n // preview token, otherwise it won't be publicly accessible\n if (!url.searchParams.has('shareable_link')) {\n const {data} = await apiClient.post(\n `file-entries/${entry.id}/add-preview-token`\n );\n url.searchParams.append('preview_token', data.preview_token);\n }\n\n return buildOfficeLivePreviewUrl(url);\n}\n\nfunction buildOfficeLivePreviewUrl(url: URL) {\n // https://docs.google.com/gview?embedded=true&url=\n return `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(\n url.toString()\n )}`;\n}\n","import {ImageFilePreview} from './file-preview/image-file-preview';\nimport {FileEntry} from '../file-entry';\nimport {DefaultFilePreview} from './file-preview/default-file-preview';\nimport {TextFilePreview} from './file-preview/text-file-preview';\nimport {VideoFilePreview} from './file-preview/video-file-preview';\nimport {AudioFilePreview} from './file-preview/audio-file-preview';\nimport {PdfFilePreview} from './file-preview/pdf-file-preview';\nimport {WordDocumentFilePreview} from './file-preview/word-document-file-preview';\n\nexport const AvailablePreviews = {\n text: TextFilePreview,\n video: VideoFilePreview,\n audio: AudioFilePreview,\n image: ImageFilePreview,\n pdf: PdfFilePreview,\n spreadsheet: WordDocumentFilePreview,\n powerPoint: WordDocumentFilePreview,\n word: WordDocumentFilePreview,\n 'text/rtf': DefaultFilePreview,\n} as const;\n\nexport function getPreviewForEntry(entry: FileEntry) {\n const mime = entry?.mime as keyof typeof AvailablePreviews;\n const type = entry?.type as keyof typeof AvailablePreviews;\n return (\n AvailablePreviews[mime] || AvailablePreviews[type] || DefaultFilePreview\n );\n}\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ChevronLeftIcon = createSvgIcon(\n \n, 'ChevronLeftOutlined');\n","import clsx from 'clsx';\nimport {FileTypeIcon} from './file-type-icon';\nimport {useFileEntryUrls} from '../hooks/file-entry-urls';\nimport {useTrans} from '../../i18n/use-trans';\nimport {FileEntry} from '../file-entry';\n\nconst TwoMB = 2 * 1024 * 1024;\n\ninterface Props {\n file: FileEntry;\n className?: string;\n iconClassName?: string;\n showImage?: boolean;\n}\nexport function FileThumbnail({\n file,\n className,\n iconClassName,\n showImage = true,\n}: Props) {\n const {trans} = useTrans();\n const {previewUrl} = useFileEntryUrls(file, {thumbnail: true});\n\n // don't show images for files larger than 2MB, if thumbnail was not generated to avoid ui lag\n if (file.file_size && file.file_size > TwoMB && !file.thumbnail) {\n showImage = false;\n }\n\n if (showImage && file.type === 'image' && previewUrl) {\n const alt = trans({\n message: ':fileName thumbnail',\n values: {fileName: file.name},\n });\n return (\n \n );\n }\n return ;\n}\n","import {AnimatePresence, m} from 'framer-motion';\nimport {Fragment, ReactNode, useContext, useMemo} from 'react';\nimport clsx from 'clsx';\nimport {getPreviewForEntry} from './available-previews';\nimport {FileEntry} from '../file-entry';\nimport {FilePreviewContext} from './file-preview-context';\nimport {IconButton} from '../../ui/buttons/icon-button';\nimport {ChevronLeftIcon} from '../../icons/material/ChevronLeft';\nimport {ChevronRightIcon} from '../../icons/material/ChevronRight';\nimport {FileDownloadIcon} from '../../icons/material/FileDownload';\nimport {downloadFileFromUrl} from '../utils/download-file-from-url';\nimport {useFileEntryUrls} from '../hooks/file-entry-urls';\nimport {Trans} from '../../i18n/trans';\nimport {Button} from '../../ui/buttons/button';\nimport {CloseIcon} from '../../icons/material/Close';\nimport {FileThumbnail} from '../file-type-icon/file-thumbnail';\nimport {useMediaQuery} from '../../utils/hooks/use-media-query';\nimport {KeyboardArrowLeftIcon} from '../../icons/material/KeyboardArrowLeft';\nimport {KeyboardArrowRightIcon} from '../../icons/material/KeyboardArrowRight';\nimport {useControlledState} from '@react-stately/utils';\nimport {opacityAnimation} from '../../ui/animation/opacity-animation';\n\nexport interface FilePreviewContainerProps {\n entries: FileEntry[];\n activeIndex?: number;\n defaultActiveIndex?: number;\n onActiveIndexChange?: (index: number) => void;\n onClose?: () => void;\n showHeader?: boolean;\n headerActionsLeft?: ReactNode;\n className?: string;\n allowDownload?: boolean;\n}\nexport function FilePreviewContainer({\n entries,\n onClose,\n showHeader = true,\n className,\n headerActionsLeft,\n allowDownload = true,\n ...props\n}: FilePreviewContainerProps) {\n const isMobile = useMediaQuery('(max-width: 1024px)');\n\n const [activeIndex, setActiveIndex] = useControlledState(\n props.activeIndex,\n props.defaultActiveIndex || 0,\n props.onActiveIndexChange\n );\n\n const activeEntry = entries[activeIndex];\n const contextValue = useMemo(() => {\n return {entries, activeIndex};\n }, [entries, activeIndex]);\n const Preview = getPreviewForEntry(activeEntry);\n\n if (!activeEntry) {\n onClose?.();\n return null;\n }\n\n const canOpenNext = entries.length - 1 > activeIndex;\n const openNext = () => {\n setActiveIndex(activeIndex + 1);\n };\n const canOpenPrevious = activeIndex > 0;\n const openPrevious = () => {\n setActiveIndex(activeIndex - 1);\n };\n\n return (\n \n {showHeader && (\n \n )}\n
\n {isMobile && (\n \n \n \n )}\n \n \n \n \n \n {isMobile && (\n \n \n \n )}\n
\n
\n );\n}\n\ninterface HeaderProps {\n onNext?: () => void;\n onPrevious?: () => void;\n onClose?: () => void;\n isMobile: boolean | null;\n actionsLeft?: ReactNode;\n allowDownload?: boolean;\n}\nfunction Header({\n onNext,\n onPrevious,\n onClose,\n isMobile,\n actionsLeft,\n allowDownload,\n}: HeaderProps) {\n const {entries, activeIndex} = useContext(FilePreviewContext);\n const activeEntry = entries[activeIndex];\n const {downloadUrl} = useFileEntryUrls(activeEntry);\n\n const desktopDownloadButton = (\n }\n variant=\"text\"\n onClick={() => {\n if (downloadUrl) {\n downloadFileFromUrl(downloadUrl);\n }\n }}\n >\n \n \n );\n\n const mobileDownloadButton = (\n {\n if (downloadUrl) {\n downloadFileFromUrl(downloadUrl);\n }\n }}\n >\n \n \n );\n\n const downloadButton = isMobile\n ? mobileDownloadButton\n : desktopDownloadButton;\n\n return (\n
\n
\n {actionsLeft}\n {allowDownload ? downloadButton : undefined}\n
\n
\n \n
\n {activeEntry.name}\n
\n
\n
\n {!isMobile && (\n \n \n \n \n
{activeIndex + 1}
\n
/
\n
{entries.length}
\n \n \n \n
\n \n )}\n \n \n \n
\n
\n );\n}\n","import {\n FilePreviewContainer,\n FilePreviewContainerProps,\n} from './file-preview-container';\nimport {useDialogContext} from '../../ui/overlays/dialog/dialog-context';\nimport {Dialog} from '../../ui/overlays/dialog/dialog';\n\ninterface Props extends Omit {}\nexport function FilePreviewDialog(props: Props) {\n return (\n \n \n \n );\n}\n\nfunction Content(props: Props) {\n const {close} = useDialogContext();\n return ;\n}\n","import {\n BackendFilter,\n FilterControlType,\n FilterOperator,\n FilterSelectControl,\n} from '../../datatable/filters/backend-filter';\nimport {message} from '../../i18n/message';\nimport {USER_MODEL} from '../../auth/user';\nimport {\n createdAtFilter,\n updatedAtFilter,\n} from '@common/datatable/filters/timestamp-filters';\n\nexport const FILE_ENTRY_TYPE_FILTER: BackendFilter = {\n key: 'type',\n label: message('Type'),\n description: message('Type of the file'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.Select,\n defaultValue: '05',\n options: [\n {key: '02', label: message('Text'), value: 'text'},\n {\n key: '03',\n label: message('Audio'),\n value: 'audio',\n },\n {\n key: '04',\n label: message('Video'),\n value: 'video',\n },\n {\n key: '05',\n label: message('Image'),\n value: 'image',\n },\n {key: '06', label: message('PDF'), value: 'pdf'},\n {\n key: '07',\n label: message('Spreadsheet'),\n value: 'spreadsheet',\n },\n {\n key: '08',\n label: message('Word Document'),\n value: 'word',\n },\n {\n key: '09',\n label: message('Photoshop'),\n value: 'photoshop',\n },\n {\n key: '10',\n label: message('Archive'),\n value: 'archive',\n },\n {\n key: '11',\n label: message('Folder'),\n value: 'folder',\n },\n ],\n },\n};\n\nexport const FILE_ENTRY_INDEX_FILTERS: BackendFilter[] = [\n FILE_ENTRY_TYPE_FILTER,\n {\n key: 'public',\n label: message('Visibility'),\n description: message('Whether file is publicly accessible'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.Select,\n defaultValue: '01',\n options: [\n {key: '01', label: message('Private'), value: false},\n {key: '02', label: message('Public'), value: true},\n ],\n },\n },\n createdAtFilter({\n description: message('Date file was uploaded'),\n }),\n updatedAtFilter({\n description: message('Date file was last changed'),\n }),\n {\n key: 'owner_id',\n label: message('Uploader'),\n description: message('User that this file was uploaded by'),\n defaultOperator: FilterOperator.eq,\n control: {\n type: FilterControlType.SelectModel,\n model: USER_MODEL,\n },\n },\n];\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const ArrowBackIcon = createSvgIcon(\n \n, 'ArrowBackOutlined');\n","import {createSvgIcon} from '../create-svg-icon';\n\nexport const UnfoldMoreIcon = createSvgIcon(\n \n, 'UnfoldMoreOutlined');\n"],"names":["FilterControlType","FilterOperator","_a","_b","now","isSameMonth","getSizeClassName","isHourSegment","encodedFilters","decodedFilters","Select","value","target","useLayoutEffect","m","options","message"],"mappings":"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"}