@servicetitan/anvil2 1.45.2 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/{Calendar-BK861SAW.js → Calendar-BQ5F2ENO.js} +2 -2
- package/dist/{Calendar-BK861SAW.js.map → Calendar-BQ5F2ENO.js.map} +1 -1
- package/dist/Calendar.js +1 -1
- package/dist/{Checkbox-ZphVb1l0.js → Checkbox-DDrmVC-u.js} +2 -2
- package/dist/{Checkbox-ZphVb1l0.js.map → Checkbox-DDrmVC-u.js.map} +1 -1
- package/dist/{Checkbox-CYNjFdtO.js → Checkbox-Dl4KTwEJ.js} +2 -2
- package/dist/{Checkbox-CYNjFdtO.js.map → Checkbox-Dl4KTwEJ.js.map} +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/{useInfiniteCombobox-BaYWUxjg.js → Combobox-B9nesJuc.js} +18 -185
- package/dist/Combobox-B9nesJuc.js.map +1 -0
- package/dist/Combobox.js +2 -1
- package/dist/Combobox.js.map +1 -1
- package/dist/{DateField-DnasO2rB.js → DateField-DXxPsRtf.js} +2 -2
- package/dist/{DateField-DnasO2rB.js.map → DateField-DXxPsRtf.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-Ba-8T-Nz.js → DateFieldRange-Xauviu1w.js} +6 -6
- package/dist/DateFieldRange-Xauviu1w.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-BBu5Hi9c.js → DateFieldSingle-yLnwpVzd.js} +4 -4
- package/dist/{DateFieldSingle-BBu5Hi9c.js.map → DateFieldSingle-yLnwpVzd.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndSort.js +1 -1
- package/dist/{ListView-DEAMQopB.js → ListView-pb3rIcze.js} +2 -2
- package/dist/{ListView-DEAMQopB.js.map → ListView-pb3rIcze.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{SearchField-BKXkoWPs.js → SearchField-Bb0uObwG.js} +2 -2
- package/dist/{SearchField-BKXkoWPs.js.map → SearchField-Bb0uObwG.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SelectCard-BWh8Yp7T.js → SelectCard-BTYZg9TG.js} +2 -2
- package/dist/{SelectCard-BWh8Yp7T.js.map → SelectCard-BTYZg9TG.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/Toolbar-D4zuUFhb.js +2077 -0
- package/dist/Toolbar-D4zuUFhb.js.map +1 -0
- package/dist/Toolbar.css +139 -28
- package/dist/Toolbar.d.ts +3 -3
- package/dist/Toolbar.js +1 -1
- package/dist/beta/components/Toolbar/Filters/FilterButton.d.ts +30 -0
- package/dist/beta/components/Toolbar/Filters/FilterDateRange.d.ts +37 -0
- package/dist/beta/components/Toolbar/Filters/FilterDateSingle.d.ts +30 -0
- package/dist/beta/components/Toolbar/Filters/FilterDrawer.d.ts +15 -0
- package/dist/beta/components/Toolbar/Filters/FilterGroup.d.ts +25 -0
- package/dist/beta/components/Toolbar/Filters/FilterItemWrapper.d.ts +24 -0
- package/dist/beta/components/Toolbar/Filters/FilterSelect.d.ts +29 -0
- package/dist/beta/components/Toolbar/Filters/FilterToggleButton.d.ts +24 -0
- package/dist/beta/components/Toolbar/Filters/internal/FilterGroupContext.d.ts +40 -0
- package/dist/beta/components/Toolbar/Filters/internal/types.d.ts +130 -0
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +40 -0
- package/dist/beta/components/Toolbar/Filters/internal/utils/test.d.ts +57 -0
- package/dist/beta/components/Toolbar/Toolbar.d.ts +302 -0
- package/dist/beta/components/Toolbar/ToolbarButton.d.ts +41 -0
- package/dist/beta/components/Toolbar/ToolbarButtonLink.d.ts +43 -0
- package/dist/beta/components/Toolbar/ToolbarButtonToggle.d.ts +42 -0
- package/dist/beta/components/Toolbar/ToolbarControlGroup.d.ts +20 -0
- package/dist/beta/components/Toolbar/ToolbarSearchField.d.ts +20 -0
- package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +108 -0
- package/dist/beta/components/Toolbar/index.d.ts +9 -0
- package/dist/beta/components/Toolbar/internal/ToolbarItemOverflowContext.d.ts +19 -0
- package/dist/beta/components/Toolbar/internal/ToolbarItemWrapper.d.ts +40 -0
- package/dist/beta/components/Toolbar/internal/ToolbarOverflowContext.d.ts +35 -0
- package/dist/beta/components/Toolbar/internal/ToolbarOverflowMenu.d.ts +29 -0
- package/dist/beta/components/Toolbar/internal/utils/accessibility.d.ts +26 -0
- package/dist/beta/components/Toolbar/internal/utils/test.d.ts +29 -0
- package/dist/beta/components/Toolbar/types.d.ts +50 -0
- package/dist/beta/components/index.d.ts +1 -0
- package/dist/beta/index.d.ts +1 -0
- package/dist/beta.d.ts +2 -0
- package/dist/beta.js +2 -0
- package/dist/beta.js.map +1 -0
- package/dist/components/Combobox/ComboboxTypes.d.ts +8 -0
- package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +1 -1
- package/dist/components/Dialog/index.d.ts +1 -1
- package/dist/{indeterminate_check_box-Bg24oeHy.js → indeterminate_check_box-RY9zr3xS.js} +17 -17
- package/dist/{indeterminate_check_box-Bg24oeHy.js.map → indeterminate_check_box-RY9zr3xS.js.map} +1 -1
- package/dist/indeterminate_check_box.css +72 -66
- package/dist/{index-CqdP5W00.js → index-V5Ez2gq_.js} +2 -2
- package/dist/{index-CqdP5W00.js.map → index-V5Ez2gq_.js.map} +1 -1
- package/dist/index.css +125 -26
- package/dist/index.js +756 -24
- package/dist/index.js.map +1 -1
- package/dist/index2.css +88 -105
- package/dist/internal/hooks/index.d.ts +1 -0
- package/dist/internal/hooks/useContainerQuery/index.d.ts +1 -0
- package/dist/internal/hooks/useContainerQuery/useContainerQuery.d.ts +46 -0
- package/dist/{useDateFieldOrchestration-DPLftOxu.js → useDateFieldOrchestration-BNJCsRkS.js} +2 -2
- package/dist/{useDateFieldOrchestration-DPLftOxu.js.map → useDateFieldOrchestration-BNJCsRkS.js.map} +1 -1
- package/dist/useInfiniteCombobox-WcRgC9p6.js +179 -0
- package/dist/useInfiniteCombobox-WcRgC9p6.js.map +1 -0
- package/dist/useIntersectionObserver-BEmMDO3P.js +70 -0
- package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -0
- package/package.json +2 -1
- package/dist/DateFieldRange-Ba-8T-Nz.js.map +0 -1
- package/dist/Toolbar-DK7tXy_W.js +0 -807
- package/dist/Toolbar-DK7tXy_W.js.map +0 -1
- package/dist/useInfiniteCombobox-BaYWUxjg.js.map +0 -1
- /package/dist/{useInfiniteCombobox.css → Combobox.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateFieldSingle-BBu5Hi9c.js","sources":["../src/components/DateFieldSingle/internal/maskito/datePlaceholderMask.ts","../src/components/DateFieldSingle/internal/MaskedDateInput.tsx","../src/components/DateFieldSingle/internal/useDateFieldSingleConversion.ts","../src/components/DateFieldSingle/internal/useDateFieldSingleState.ts","../src/components/DateFieldSingle/internal/DateFieldSingleCalendar.tsx","../src/components/DateFieldSingle/DateFieldSingle.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\nimport { makeZeroShortcutPreprocessor } from \"./makeZeroShortcutPreprocessor\";\nimport { DateMode } from \"../../types\";\n\nconst datePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n}: {\n mode: DateMode;\n separator?: string;\n placeholder: string;\n}) => {\n const dateOptions = maskitoDateOptionsGenerator({\n mode,\n separator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateOptions,\n plugins: plugins.concat(dateOptions.plugins || []),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateOptions.preprocessors,\n makeZeroShortcutPreprocessor(mode, separator),\n ],\n postprocessors: [\n ...dateOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n return { options: datePlaceholderMask, removePlaceholder };\n};\n\nexport default datePlaceholderMask;\n","import { maskitoParseDate } from \"@maskito/kit\";\nimport { useMaskito } from \"@maskito/react\";\nimport { TextField, TextFieldProps } from \"../../TextField/internal/TextField\";\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { DateTime } from \"luxon\";\nimport datePlaceholderMask from \"./maskito/datePlaceholderMask\";\nimport { Icon } from \"../../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateModeToFormatMap, DateModeToPlaceholderMap } from \"./constants\";\nimport { DateMode } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\n\nexport type MaskedDateInputChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedDateInputChangeHandler = (\n change: MaskedDateInputChange,\n) => void;\n\nexport type MaskedDateInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\" | \"prefix\"\n> & {\n onChange: MaskedDateInputChangeHandler;\n mode?: DateMode;\n lastValidDate: DateTime | null;\n disableHint?: boolean;\n};\n\nexport type MaskedDateInputRef = HTMLInputElement & {\n setDate: (date: DateTime | null) => void;\n};\n\n/**\n * A masked date input component that allows for the input of a date in a specific format.\n *\n * Provides a `setDate` method that can be used to set the date from outside the component (e.g from a calendar).\n *\n * @internal This component is not intended to be used directly in consumer code.\n *\n * @param props - The props for the MaskedDateInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n */\nexport const MaskedDateInput = forwardRef<\n MaskedDateInputRef,\n MaskedDateInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd/yyyy\",\n lastValidDate,\n disableHint = false,\n ...props\n },\n ref,\n ) => {\n const placeholder = DateModeToPlaceholderMap[mode];\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder } = datePlaceholderMask({\n mode,\n placeholder,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousDateRef = useRef<DateTime | null>(null);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((oldInputValue) =>\n swapMode(oldInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, previousMode]);\n\n // Update the input value when the parent's date changes.\n useEffect(() => {\n if (lastValidDate === undefined) return;\n if (lastValidDate === previousDateRef.current) return; // Note: Reference equality is intentional here\n if (!lastValidDate?.equals(previousDateRef.current ?? DateTime.now())) {\n setInputValue(\n lastValidDate?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n previousDateRef.current = lastValidDate;\n }\n }, [lastValidDate, mode, placeholder]);\n\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const { date, isInputValid, isInputEmpty } = parseInputValue(\n event.target.value,\n mode,\n removePlaceholder,\n );\n\n // We only want to call onChange for substantive changes.\n // This is to avoid unnecessary re-renders of upstream components.\n const isValueDifferent =\n isInputValid !== currentParsedData.isInputValid || // The input has changed validity\n isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness\n (date === null) !== (currentParsedData.date === null) || // The input has changed from empty to non-empty or vice versa\n (date !== null &&\n lastValidDate !== null &&\n !date.equals(lastValidDate)); // The date has changed\n\n // If the value has not changed, we do not need to call onChange.\n if (!isValueDifferent) return;\n onChange?.({\n date: date ?? lastValidDate ?? null,\n isInputValid,\n isInputEmpty,\n });\n };\n\n // Extend the input ref with additional methods.\n // This provides a way to set the input value from outside the component.\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input) return null as unknown as MaskedDateInputRef;\n return Object.assign(input, {\n setDate: (date: DateTime | null) => {\n setInputValue(\n date?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n },\n });\n }, [mode, placeholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-date={lastValidDate?.toISODate() ?? \"\"}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n {...props}\n showCounter={false}\n value={inputValue}\n onChange={handleChange}\n prefix={<Icon svg={Event} />}\n hint={disableHint ? undefined : `Format: ${mode}`}\n />\n );\n },\n);\n\nMaskedDateInput.displayName = \"MaskedDateInput\";\n\nfunction parseInputValue(\n value: string,\n mode: DateMode,\n removePlaceholder: (value: string) => string,\n) {\n const valueMinusPlaceholder = removePlaceholder(value);\n const jsDate = maskitoParseDate(valueMinusPlaceholder, { mode });\n const luxonDate = jsDate\n ? DateTime.fromJSDate(jsDate, { zone: \"utc\" })\n : null;\n return {\n date: luxonDate,\n isInputValid: !!luxonDate,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\nfunction swapMode(inputString: string, previousMode: DateMode, mode: DateMode) {\n const { day, month, year } = divideSegments(inputString, previousMode);\n return orderSegmentsByMode(day, month, year, mode);\n}\n\nfunction divideSegments(\n value: string,\n mode: DateMode,\n): {\n day: string;\n month: string;\n year: string;\n} {\n const [segment1, segment2, segment3] = value.split(\"/\");\n if (mode === \"dd/mm/yyyy\") {\n return { day: segment1, month: segment2, year: segment3 };\n } else if (mode === \"mm/dd/yyyy\") {\n return { day: segment2, month: segment1, year: segment3 };\n } else if (mode === \"yyyy/mm/dd\") {\n return { day: segment3, month: segment2, year: segment1 };\n }\n return { day: \"__\", month: \"__\", year: \"____\" };\n}\n\nfunction orderSegmentsByMode(\n day: string,\n month: string,\n year: string,\n mode: DateMode,\n) {\n if (mode === \"dd/mm/yyyy\") {\n return `${day}/${month}/${year}`;\n } else if (mode === \"mm/dd/yyyy\") {\n return `${month}/${day}/${year}`;\n } else if (mode === \"yyyy/mm/dd\") {\n return `${year}/${month}/${day}`;\n } else {\n return \"\";\n }\n}\n","import { useCallback, useMemo } from \"react\";\nimport { convertStringToDate } from \"./utils\";\nimport {\n DateFieldSingleChange,\n DateFieldSingleProps,\n} from \"../DateFieldSingle\";\nimport { DateTime, WeekdayNumbers } from \"luxon\";\n\nexport type DateFieldSingleConversion = {\n /**\n * The current value of the date field.\n */\n value?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValue?: DateTime | null;\n /**\n * The minimum date of the date field.\n */\n minDate?: DateTime | null;\n /**\n * The maximum date of the date field.\n */\n maxDate?: DateTime | null;\n /**\n * The unavailable dates of the date field.\n */\n unavailable: {\n /**\n * The unavailable dates of the date field.\n */\n dates?: DateTime[];\n /**\n * The unavailable days of the week of the date field.\n */\n daysOfWeek?: WeekdayNumbers[];\n };\n /**\n * The callback for when the date changes.\n */\n onChange: (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => void;\n};\n\n/**\n * Converts the props of the DateFieldSingle component to Luxon DateTime objects for easier internal use.\n * @param props - The props of the DateFieldSingle component using ISO 8601 strings.\n * @returns The converted props using Luxon DateTime objects.\n */\nexport function useDateFieldSingleConversion({\n value,\n defaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n}: DateFieldSingleProps): DateFieldSingleConversion {\n const normalizedValue = useMemo(() => convertStringToDate(value), [value]);\n const normalizedDefaultValue = useMemo(\n () => convertStringToDate(defaultValue),\n [defaultValue],\n );\n const normalizedMinDate = useMemo(\n () => convertStringToDate(minDate),\n [minDate],\n );\n const normalizedMaxDate = useMemo(\n () => convertStringToDate(maxDate),\n [maxDate],\n );\n const normalizedUnavailableDates = useMemo(\n () =>\n unavailable?.dates\n ?.map((d) => convertStringToDate(d))\n .filter((d) => d !== null && d !== undefined),\n [unavailable?.dates],\n );\n\n const handleChange = useCallback(\n (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => {\n onChange?.({\n ...change,\n date: change.date?.toISODate() ?? null,\n });\n },\n [onChange],\n );\n\n return {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate: normalizedMinDate,\n maxDate: normalizedMaxDate,\n unavailable: {\n dates: normalizedUnavailableDates,\n daysOfWeek: unavailable?.daysOfWeek,\n },\n onChange: handleChange,\n };\n}\n","import { DateTime } from \"luxon\";\nimport { useOptionallyControlledState } from \"../../../internal/hooks\";\nimport { MaskedDateInputChange } from \"./MaskedDateInput\";\n\nexport type DateFieldSingleStateChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type DateFieldSingleStateChangeHandler = (\n change: DateFieldSingleStateChange,\n) => void;\n\nexport type DateFieldSingleStateParam = {\n /**\n * The controlled value of the date field.\n */\n valueProp?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValueProp?: DateTime | null;\n /**\n * Callback for when the date changes.\n */\n onChange: DateFieldSingleStateChangeHandler;\n};\n\nexport type DateFieldSingleState = {\n /**\n * The current value (DateTime) of the date field.\n */\n value: DateTime | null;\n /**\n * Sets the value of the date field.\n */\n setValue: (value: DateTime | null) => void;\n /**\n * Handles the change of the input field.\n */\n handleInputChange: (change: MaskedDateInputChange) => void;\n /**\n * Handles the selection of a date in the calendar.\n */\n handleCalendarSelection: (date: DateTime) => void;\n};\n\n/**\n * This is a hook for keeping state in sync between a date input and calendar.\n */\nexport function useDateFieldSingleState({\n valueProp,\n defaultValueProp,\n onChange,\n}: DateFieldSingleStateParam): DateFieldSingleState {\n const [value, setValue] = useOptionallyControlledState<DateTime | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const handleInputChange = (change: MaskedDateInputChange) => {\n const date = change.isInputEmpty\n ? null\n : (change.date?.startOf(\"day\") ?? null);\n onChange?.({\n date,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n });\n if (change.isInputValid) {\n setValue(change.isInputEmpty ? null : change.date);\n }\n if (change.isInputEmpty) {\n setValue(null);\n return;\n }\n if (change.date) {\n setValue(change.date);\n }\n };\n\n const handleCalendarSelection = (date: DateTime) => {\n setValue(date);\n onChange?.({\n date,\n isInputValid: true,\n isInputEmpty: false,\n });\n };\n\n return {\n value,\n setValue,\n handleInputChange,\n handleCalendarSelection,\n };\n}\n","import { DateTime, WeekdayNumbers } from \"luxon\";\nimport { Calendar, CalendarProps, CalendarValue } from \"../../Calendar\";\n\ntype DateFieldSingleCalendarProps = Omit<\n CalendarProps,\n | \"onSelection\"\n | \"value\"\n | \"onKeyDown\"\n | \"defaultFocusedDate\"\n | \"range\"\n | \"defaultTimeZone\"\n | \"unavailable\"\n | \"minDate\"\n | \"maxDate\"\n | \"defaultValue\"\n | \"_disableAutofocus\"\n> & {\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n value: DateTime | null;\n onSelection: (date: DateTime) => void;\n minDate?: DateTime | null;\n maxDate?: DateTime | null;\n unavailable?: { dates?: DateTime[]; daysOfWeek?: WeekdayNumbers[] };\n};\n\nexport function DateFieldSingleCalendar({\n onKeyDown,\n value,\n onSelection,\n minDate,\n maxDate,\n unavailable,\n ...rest\n}: DateFieldSingleCalendarProps) {\n const handleCalendarSelection = (data: { value: CalendarValue }) => {\n if (data.value) {\n const date = DateTime.fromISO(data.value, { zone: \"utc\" });\n onSelection(date);\n }\n };\n\n return (\n <Calendar\n {...rest}\n range={false}\n onKeyDown={onKeyDown}\n defaultFocusedDate={value?.toISODate() || DateTime.now().toISODate()}\n value={value?.toISODate() || undefined}\n onSelection={handleCalendarSelection}\n defaultTimeZone=\"UTC\"\n minDate={minDate?.toISODate() ?? undefined}\n maxDate={maxDate?.toISODate() ?? undefined}\n unavailable={\n unavailable\n ? {\n dates: unavailable.dates?.map((d) => d.toISODate() ?? \"\"),\n daysOfWeek: unavailable.daysOfWeek,\n }\n : undefined\n }\n _disableAutofocus\n />\n );\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport Popover from \"../Popover\";\nimport { RefObject, useMemo, useRef, useState } from \"react\";\nimport {\n MaskedDateInput,\n MaskedDateInputProps,\n MaskedDateInputRef,\n} from \"./internal/MaskedDateInput\";\nimport { DateMode } from \"./types\";\nimport { useDateFieldSingleConversion } from \"./internal/useDateFieldSingleConversion\";\nimport {\n DateFieldSingleStateChangeHandler,\n useDateFieldSingleState,\n} from \"./internal/useDateFieldSingleState\";\nimport { validateDate } from \"./internal/utils\";\nimport {\n useFocusWithin,\n usePopoverCloseDelayWorkaround,\n usePopoverSupport,\n} from \"../../internal/hooks\";\nimport { useDateFieldOrchestration } from \"./internal/useDateFieldOrchestration\";\nimport { DateFieldSingleCalendar } from \"./internal/DateFieldSingleCalendar\";\n\nexport type DateFieldSingleProps = Omit<\n MaskedDateInputProps,\n | \"onChange\"\n | \"value\"\n | \"autoComplete\"\n | \"onClick\"\n | \"onKeyDown\"\n | \"ref\"\n | \"lastValidDate\"\n | \"setLastValidDate\"\n | \"required\"\n | \"onFocus\"\n | \"onBlur\"\n> & {\n value?: string | null;\n defaultValue?: string | null;\n onChange?: DateFieldSingleChangeHandler;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n mode?: Extract<DateMode, \"mm/dd/yyyy\" | \"dd/mm/yyyy\">;\n disableHint?: boolean;\n disableCalendar?: boolean;\n unavailable?: {\n /**\n * The specific dates that are unavailable. ISO 8601 format.\n * @example [\"2025-07-02\"]\n */\n dates?: string[];\n /**\n * The days of the week that are unavailable.\n * (1-7, where 1 is Monday and 7 is Sunday)\n */\n daysOfWeek?: (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n };\n minDate?: string;\n maxDate?: string;\n required?: boolean;\n} & DataTrackingId;\n\nexport type DateFieldSingleChange = {\n /**\n * The date in ISO 8601 format.\n * @example \"2025-07-02\"\n */\n date: string | null;\n /**\n * Whether the input is valid. That is, it matches the format and is not empty.\n * This does not mean that the date is valid according to the constraints.\n */\n isInputValid: boolean;\n /**\n * Whether the input is empty.\n */\n isInputEmpty: boolean;\n /**\n * Whether the date is valid according to the constraints.\n * Constraints include:\n * - Required\n * - Unavailable dates\n * - Unavailable days of the week\n * - Min date\n * - Max date\n */\n isDateValid: boolean;\n};\n\nexport type DateFieldSingleChangeHandler = (\n change: DateFieldSingleChange,\n) => void;\n\nexport const DateFieldSingle = (props: DateFieldSingleProps) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n description: childrenToString(props.description),\n };\n\n const trackingId = useTrackingId({\n name: \"DateFieldSingle\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n onFocus,\n onBlur,\n disableCalendar,\n required,\n mode,\n value: valueProp,\n defaultValue: defaultValueProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n onChange: onChangeProp,\n ...rest\n } = props;\n\n const inputRef = useRef<MaskedDateInputRef>(null);\n // We convert any props that deal in ISO 8601 strings to Luxon DateTime objects for easier internal use.\n const {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n } = useDateFieldSingleConversion({\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n });\n\n const handleChange: DateFieldSingleStateChangeHandler = (change) => {\n onChange?.({\n ...change,\n isDateValid: validateDate({\n date: change.date,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n });\n };\n\n // We use a hook to keep the value of input and the calendar in sync.\n const { value, handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: normalizedValue,\n defaultValueProp: normalizedDefaultValue,\n onChange: handleChange,\n });\n\n const { props: wrapperProps } = useFocusWithin({\n onBlur: (e) => {\n onBlur?.(e);\n setCalendarOpen(false);\n },\n onFocus,\n });\n\n const [popoverTriggerRef, setPopoverTriggerRef] =\n useState<RefObject<HTMLInputElement>>();\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);\n const {\n calendarOpen,\n setCalendarOpen,\n handleCalendarKeyDown,\n handleInputKeyDown,\n } = useDateFieldOrchestration({\n inputRef,\n calendarDefaultOpen: false,\n popoverContentRef,\n disableCalendar,\n });\n\n const popoverSupported = usePopoverSupport();\n\n const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);\n\n const currentValidity = useMemo(\n () =>\n validateDate({\n date: value,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const justTheField = (\n <MaskedDateInput\n {...rest}\n mode={mode}\n ref={combinedRef}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n onClick={() => setCalendarOpen(true)}\n lastValidDate={value}\n required={required}\n autoComplete=\"off\"\n data-date-valid={currentValidity}\n data-tracking-id={trackingId}\n onFocus={!disableCalendar && !popoverSupported ? onFocus : undefined}\n onBlur={!disableCalendar && !popoverSupported ? onBlur : undefined}\n />\n );\n\n if (disableCalendar || !popoverSupported) {\n return justTheField;\n }\n\n return (\n <div {...wrapperProps}>\n <Popover\n open={calendarOpen}\n modal\n placement=\"bottom-start\"\n disableFlipFallback\n disableTriggerFocus\n onClose={() => setCalendarOpen(false)}\n disableAutoUpdate\n onClickOutside={() => setCalendarOpen(false)}\n >\n <Popover.Trigger>\n {({ ref: iRef }) => {\n setPopoverTriggerRef(iRef as RefObject<HTMLInputElement>);\n return justTheField;\n }}\n </Popover.Trigger>\n <Popover.Content ref={popoverContentRef} data-testid=\"calendar-popover\">\n {shouldShowCalendar && (\n <DateFieldSingleCalendar\n onKeyDown={handleCalendarKeyDown}\n value={value}\n onSelection={(v) => {\n inputRef.current?.focus();\n handleCalendarSelection(v);\n setCalendarOpen(false);\n }}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n )}\n </Popover.Content>\n </Popover>\n </div>\n );\n};\n\nDateFieldSingle.displayName = \"DateFieldSingle\";\n"],"names":["datePlaceholderMask","Event","useMergeRefs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateFieldSingle-yLnwpVzd.js","sources":["../src/components/DateFieldSingle/internal/maskito/datePlaceholderMask.ts","../src/components/DateFieldSingle/internal/MaskedDateInput.tsx","../src/components/DateFieldSingle/internal/useDateFieldSingleConversion.ts","../src/components/DateFieldSingle/internal/useDateFieldSingleState.ts","../src/components/DateFieldSingle/internal/DateFieldSingleCalendar.tsx","../src/components/DateFieldSingle/DateFieldSingle.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\nimport { makeZeroShortcutPreprocessor } from \"./makeZeroShortcutPreprocessor\";\nimport { DateMode } from \"../../types\";\n\nconst datePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n}: {\n mode: DateMode;\n separator?: string;\n placeholder: string;\n}) => {\n const dateOptions = maskitoDateOptionsGenerator({\n mode,\n separator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateOptions,\n plugins: plugins.concat(dateOptions.plugins || []),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateOptions.preprocessors,\n makeZeroShortcutPreprocessor(mode, separator),\n ],\n postprocessors: [\n ...dateOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n return { options: datePlaceholderMask, removePlaceholder };\n};\n\nexport default datePlaceholderMask;\n","import { maskitoParseDate } from \"@maskito/kit\";\nimport { useMaskito } from \"@maskito/react\";\nimport { TextField, TextFieldProps } from \"../../TextField/internal/TextField\";\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { DateTime } from \"luxon\";\nimport datePlaceholderMask from \"./maskito/datePlaceholderMask\";\nimport { Icon } from \"../../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateModeToFormatMap, DateModeToPlaceholderMap } from \"./constants\";\nimport { DateMode } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\n\nexport type MaskedDateInputChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedDateInputChangeHandler = (\n change: MaskedDateInputChange,\n) => void;\n\nexport type MaskedDateInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\" | \"prefix\"\n> & {\n onChange: MaskedDateInputChangeHandler;\n mode?: DateMode;\n lastValidDate: DateTime | null;\n disableHint?: boolean;\n};\n\nexport type MaskedDateInputRef = HTMLInputElement & {\n setDate: (date: DateTime | null) => void;\n};\n\n/**\n * A masked date input component that allows for the input of a date in a specific format.\n *\n * Provides a `setDate` method that can be used to set the date from outside the component (e.g from a calendar).\n *\n * @internal This component is not intended to be used directly in consumer code.\n *\n * @param props - The props for the MaskedDateInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n */\nexport const MaskedDateInput = forwardRef<\n MaskedDateInputRef,\n MaskedDateInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd/yyyy\",\n lastValidDate,\n disableHint = false,\n ...props\n },\n ref,\n ) => {\n const placeholder = DateModeToPlaceholderMap[mode];\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder } = datePlaceholderMask({\n mode,\n placeholder,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousDateRef = useRef<DateTime | null>(null);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((oldInputValue) =>\n swapMode(oldInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, previousMode]);\n\n // Update the input value when the parent's date changes.\n useEffect(() => {\n if (lastValidDate === undefined) return;\n if (lastValidDate === previousDateRef.current) return; // Note: Reference equality is intentional here\n if (!lastValidDate?.equals(previousDateRef.current ?? DateTime.now())) {\n setInputValue(\n lastValidDate?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n previousDateRef.current = lastValidDate;\n }\n }, [lastValidDate, mode, placeholder]);\n\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const { date, isInputValid, isInputEmpty } = parseInputValue(\n event.target.value,\n mode,\n removePlaceholder,\n );\n\n // We only want to call onChange for substantive changes.\n // This is to avoid unnecessary re-renders of upstream components.\n const isValueDifferent =\n isInputValid !== currentParsedData.isInputValid || // The input has changed validity\n isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness\n (date === null) !== (currentParsedData.date === null) || // The input has changed from empty to non-empty or vice versa\n (date !== null &&\n lastValidDate !== null &&\n !date.equals(lastValidDate)); // The date has changed\n\n // If the value has not changed, we do not need to call onChange.\n if (!isValueDifferent) return;\n onChange?.({\n date: date ?? lastValidDate ?? null,\n isInputValid,\n isInputEmpty,\n });\n };\n\n // Extend the input ref with additional methods.\n // This provides a way to set the input value from outside the component.\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input) return null as unknown as MaskedDateInputRef;\n return Object.assign(input, {\n setDate: (date: DateTime | null) => {\n setInputValue(\n date?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n },\n });\n }, [mode, placeholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-date={lastValidDate?.toISODate() ?? \"\"}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n {...props}\n showCounter={false}\n value={inputValue}\n onChange={handleChange}\n prefix={<Icon svg={Event} />}\n hint={disableHint ? undefined : `Format: ${mode}`}\n />\n );\n },\n);\n\nMaskedDateInput.displayName = \"MaskedDateInput\";\n\nfunction parseInputValue(\n value: string,\n mode: DateMode,\n removePlaceholder: (value: string) => string,\n) {\n const valueMinusPlaceholder = removePlaceholder(value);\n const jsDate = maskitoParseDate(valueMinusPlaceholder, { mode });\n const luxonDate = jsDate\n ? DateTime.fromJSDate(jsDate, { zone: \"utc\" })\n : null;\n return {\n date: luxonDate,\n isInputValid: !!luxonDate,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\nfunction swapMode(inputString: string, previousMode: DateMode, mode: DateMode) {\n const { day, month, year } = divideSegments(inputString, previousMode);\n return orderSegmentsByMode(day, month, year, mode);\n}\n\nfunction divideSegments(\n value: string,\n mode: DateMode,\n): {\n day: string;\n month: string;\n year: string;\n} {\n const [segment1, segment2, segment3] = value.split(\"/\");\n if (mode === \"dd/mm/yyyy\") {\n return { day: segment1, month: segment2, year: segment3 };\n } else if (mode === \"mm/dd/yyyy\") {\n return { day: segment2, month: segment1, year: segment3 };\n } else if (mode === \"yyyy/mm/dd\") {\n return { day: segment3, month: segment2, year: segment1 };\n }\n return { day: \"__\", month: \"__\", year: \"____\" };\n}\n\nfunction orderSegmentsByMode(\n day: string,\n month: string,\n year: string,\n mode: DateMode,\n) {\n if (mode === \"dd/mm/yyyy\") {\n return `${day}/${month}/${year}`;\n } else if (mode === \"mm/dd/yyyy\") {\n return `${month}/${day}/${year}`;\n } else if (mode === \"yyyy/mm/dd\") {\n return `${year}/${month}/${day}`;\n } else {\n return \"\";\n }\n}\n","import { useCallback, useMemo } from \"react\";\nimport { convertStringToDate } from \"./utils\";\nimport {\n DateFieldSingleChange,\n DateFieldSingleProps,\n} from \"../DateFieldSingle\";\nimport { DateTime, WeekdayNumbers } from \"luxon\";\n\nexport type DateFieldSingleConversion = {\n /**\n * The current value of the date field.\n */\n value?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValue?: DateTime | null;\n /**\n * The minimum date of the date field.\n */\n minDate?: DateTime | null;\n /**\n * The maximum date of the date field.\n */\n maxDate?: DateTime | null;\n /**\n * The unavailable dates of the date field.\n */\n unavailable: {\n /**\n * The unavailable dates of the date field.\n */\n dates?: DateTime[];\n /**\n * The unavailable days of the week of the date field.\n */\n daysOfWeek?: WeekdayNumbers[];\n };\n /**\n * The callback for when the date changes.\n */\n onChange: (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => void;\n};\n\n/**\n * Converts the props of the DateFieldSingle component to Luxon DateTime objects for easier internal use.\n * @param props - The props of the DateFieldSingle component using ISO 8601 strings.\n * @returns The converted props using Luxon DateTime objects.\n */\nexport function useDateFieldSingleConversion({\n value,\n defaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n}: DateFieldSingleProps): DateFieldSingleConversion {\n const normalizedValue = useMemo(() => convertStringToDate(value), [value]);\n const normalizedDefaultValue = useMemo(\n () => convertStringToDate(defaultValue),\n [defaultValue],\n );\n const normalizedMinDate = useMemo(\n () => convertStringToDate(minDate),\n [minDate],\n );\n const normalizedMaxDate = useMemo(\n () => convertStringToDate(maxDate),\n [maxDate],\n );\n const normalizedUnavailableDates = useMemo(\n () =>\n unavailable?.dates\n ?.map((d) => convertStringToDate(d))\n .filter((d) => d !== null && d !== undefined),\n [unavailable?.dates],\n );\n\n const handleChange = useCallback(\n (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => {\n onChange?.({\n ...change,\n date: change.date?.toISODate() ?? null,\n });\n },\n [onChange],\n );\n\n return {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate: normalizedMinDate,\n maxDate: normalizedMaxDate,\n unavailable: {\n dates: normalizedUnavailableDates,\n daysOfWeek: unavailable?.daysOfWeek,\n },\n onChange: handleChange,\n };\n}\n","import { DateTime } from \"luxon\";\nimport { useOptionallyControlledState } from \"../../../internal/hooks\";\nimport { MaskedDateInputChange } from \"./MaskedDateInput\";\n\nexport type DateFieldSingleStateChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type DateFieldSingleStateChangeHandler = (\n change: DateFieldSingleStateChange,\n) => void;\n\nexport type DateFieldSingleStateParam = {\n /**\n * The controlled value of the date field.\n */\n valueProp?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValueProp?: DateTime | null;\n /**\n * Callback for when the date changes.\n */\n onChange: DateFieldSingleStateChangeHandler;\n};\n\nexport type DateFieldSingleState = {\n /**\n * The current value (DateTime) of the date field.\n */\n value: DateTime | null;\n /**\n * Sets the value of the date field.\n */\n setValue: (value: DateTime | null) => void;\n /**\n * Handles the change of the input field.\n */\n handleInputChange: (change: MaskedDateInputChange) => void;\n /**\n * Handles the selection of a date in the calendar.\n */\n handleCalendarSelection: (date: DateTime) => void;\n};\n\n/**\n * This is a hook for keeping state in sync between a date input and calendar.\n */\nexport function useDateFieldSingleState({\n valueProp,\n defaultValueProp,\n onChange,\n}: DateFieldSingleStateParam): DateFieldSingleState {\n const [value, setValue] = useOptionallyControlledState<DateTime | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const handleInputChange = (change: MaskedDateInputChange) => {\n const date = change.isInputEmpty\n ? null\n : (change.date?.startOf(\"day\") ?? null);\n onChange?.({\n date,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n });\n if (change.isInputValid) {\n setValue(change.isInputEmpty ? null : change.date);\n }\n if (change.isInputEmpty) {\n setValue(null);\n return;\n }\n if (change.date) {\n setValue(change.date);\n }\n };\n\n const handleCalendarSelection = (date: DateTime) => {\n setValue(date);\n onChange?.({\n date,\n isInputValid: true,\n isInputEmpty: false,\n });\n };\n\n return {\n value,\n setValue,\n handleInputChange,\n handleCalendarSelection,\n };\n}\n","import { DateTime, WeekdayNumbers } from \"luxon\";\nimport { Calendar, CalendarProps, CalendarValue } from \"../../Calendar\";\n\ntype DateFieldSingleCalendarProps = Omit<\n CalendarProps,\n | \"onSelection\"\n | \"value\"\n | \"onKeyDown\"\n | \"defaultFocusedDate\"\n | \"range\"\n | \"defaultTimeZone\"\n | \"unavailable\"\n | \"minDate\"\n | \"maxDate\"\n | \"defaultValue\"\n | \"_disableAutofocus\"\n> & {\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n value: DateTime | null;\n onSelection: (date: DateTime) => void;\n minDate?: DateTime | null;\n maxDate?: DateTime | null;\n unavailable?: { dates?: DateTime[]; daysOfWeek?: WeekdayNumbers[] };\n};\n\nexport function DateFieldSingleCalendar({\n onKeyDown,\n value,\n onSelection,\n minDate,\n maxDate,\n unavailable,\n ...rest\n}: DateFieldSingleCalendarProps) {\n const handleCalendarSelection = (data: { value: CalendarValue }) => {\n if (data.value) {\n const date = DateTime.fromISO(data.value, { zone: \"utc\" });\n onSelection(date);\n }\n };\n\n return (\n <Calendar\n {...rest}\n range={false}\n onKeyDown={onKeyDown}\n defaultFocusedDate={value?.toISODate() || DateTime.now().toISODate()}\n value={value?.toISODate() || undefined}\n onSelection={handleCalendarSelection}\n defaultTimeZone=\"UTC\"\n minDate={minDate?.toISODate() ?? undefined}\n maxDate={maxDate?.toISODate() ?? undefined}\n unavailable={\n unavailable\n ? {\n dates: unavailable.dates?.map((d) => d.toISODate() ?? \"\"),\n daysOfWeek: unavailable.daysOfWeek,\n }\n : undefined\n }\n _disableAutofocus\n />\n );\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport Popover from \"../Popover\";\nimport { RefObject, useMemo, useRef, useState } from \"react\";\nimport {\n MaskedDateInput,\n MaskedDateInputProps,\n MaskedDateInputRef,\n} from \"./internal/MaskedDateInput\";\nimport { DateMode } from \"./types\";\nimport { useDateFieldSingleConversion } from \"./internal/useDateFieldSingleConversion\";\nimport {\n DateFieldSingleStateChangeHandler,\n useDateFieldSingleState,\n} from \"./internal/useDateFieldSingleState\";\nimport { validateDate } from \"./internal/utils\";\nimport {\n useFocusWithin,\n usePopoverCloseDelayWorkaround,\n usePopoverSupport,\n} from \"../../internal/hooks\";\nimport { useDateFieldOrchestration } from \"./internal/useDateFieldOrchestration\";\nimport { DateFieldSingleCalendar } from \"./internal/DateFieldSingleCalendar\";\n\nexport type DateFieldSingleProps = Omit<\n MaskedDateInputProps,\n | \"onChange\"\n | \"value\"\n | \"autoComplete\"\n | \"onClick\"\n | \"onKeyDown\"\n | \"ref\"\n | \"lastValidDate\"\n | \"setLastValidDate\"\n | \"required\"\n | \"onFocus\"\n | \"onBlur\"\n> & {\n value?: string | null;\n defaultValue?: string | null;\n onChange?: DateFieldSingleChangeHandler;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n mode?: Extract<DateMode, \"mm/dd/yyyy\" | \"dd/mm/yyyy\">;\n disableHint?: boolean;\n disableCalendar?: boolean;\n unavailable?: {\n /**\n * The specific dates that are unavailable. ISO 8601 format.\n * @example [\"2025-07-02\"]\n */\n dates?: string[];\n /**\n * The days of the week that are unavailable.\n * (1-7, where 1 is Monday and 7 is Sunday)\n */\n daysOfWeek?: (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n };\n minDate?: string;\n maxDate?: string;\n required?: boolean;\n} & DataTrackingId;\n\nexport type DateFieldSingleChange = {\n /**\n * The date in ISO 8601 format.\n * @example \"2025-07-02\"\n */\n date: string | null;\n /**\n * Whether the input is valid. That is, it matches the format and is not empty.\n * This does not mean that the date is valid according to the constraints.\n */\n isInputValid: boolean;\n /**\n * Whether the input is empty.\n */\n isInputEmpty: boolean;\n /**\n * Whether the date is valid according to the constraints.\n * Constraints include:\n * - Required\n * - Unavailable dates\n * - Unavailable days of the week\n * - Min date\n * - Max date\n */\n isDateValid: boolean;\n};\n\nexport type DateFieldSingleChangeHandler = (\n change: DateFieldSingleChange,\n) => void;\n\nexport const DateFieldSingle = (props: DateFieldSingleProps) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n description: childrenToString(props.description),\n };\n\n const trackingId = useTrackingId({\n name: \"DateFieldSingle\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n onFocus,\n onBlur,\n disableCalendar,\n required,\n mode,\n value: valueProp,\n defaultValue: defaultValueProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n onChange: onChangeProp,\n ...rest\n } = props;\n\n const inputRef = useRef<MaskedDateInputRef>(null);\n // We convert any props that deal in ISO 8601 strings to Luxon DateTime objects for easier internal use.\n const {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n } = useDateFieldSingleConversion({\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n });\n\n const handleChange: DateFieldSingleStateChangeHandler = (change) => {\n onChange?.({\n ...change,\n isDateValid: validateDate({\n date: change.date,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n });\n };\n\n // We use a hook to keep the value of input and the calendar in sync.\n const { value, handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: normalizedValue,\n defaultValueProp: normalizedDefaultValue,\n onChange: handleChange,\n });\n\n const { props: wrapperProps } = useFocusWithin({\n onBlur: (e) => {\n onBlur?.(e);\n setCalendarOpen(false);\n },\n onFocus,\n });\n\n const [popoverTriggerRef, setPopoverTriggerRef] =\n useState<RefObject<HTMLInputElement>>();\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);\n const {\n calendarOpen,\n setCalendarOpen,\n handleCalendarKeyDown,\n handleInputKeyDown,\n } = useDateFieldOrchestration({\n inputRef,\n calendarDefaultOpen: false,\n popoverContentRef,\n disableCalendar,\n });\n\n const popoverSupported = usePopoverSupport();\n\n const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);\n\n const currentValidity = useMemo(\n () =>\n validateDate({\n date: value,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const justTheField = (\n <MaskedDateInput\n {...rest}\n mode={mode}\n ref={combinedRef}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n onClick={() => setCalendarOpen(true)}\n lastValidDate={value}\n required={required}\n autoComplete=\"off\"\n data-date-valid={currentValidity}\n data-tracking-id={trackingId}\n onFocus={!disableCalendar && !popoverSupported ? onFocus : undefined}\n onBlur={!disableCalendar && !popoverSupported ? onBlur : undefined}\n />\n );\n\n if (disableCalendar || !popoverSupported) {\n return justTheField;\n }\n\n return (\n <div {...wrapperProps}>\n <Popover\n open={calendarOpen}\n modal\n placement=\"bottom-start\"\n disableFlipFallback\n disableTriggerFocus\n onClose={() => setCalendarOpen(false)}\n disableAutoUpdate\n onClickOutside={() => setCalendarOpen(false)}\n >\n <Popover.Trigger>\n {({ ref: iRef }) => {\n setPopoverTriggerRef(iRef as RefObject<HTMLInputElement>);\n return justTheField;\n }}\n </Popover.Trigger>\n <Popover.Content ref={popoverContentRef} data-testid=\"calendar-popover\">\n {shouldShowCalendar && (\n <DateFieldSingleCalendar\n onKeyDown={handleCalendarKeyDown}\n value={value}\n onSelection={(v) => {\n inputRef.current?.focus();\n handleCalendarSelection(v);\n setCalendarOpen(false);\n }}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n )}\n </Popover.Content>\n </Popover>\n </div>\n );\n};\n\nDateFieldSingle.displayName = \"DateFieldSingle\";\n"],"names":["datePlaceholderMask","Event","useMergeRefs"],"mappings":"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"}
|
package/dist/DateFieldSingle.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DateFieldSingle } from './DateFieldSingle-
|
|
1
|
+
export { D as DateFieldSingle } from './DateFieldSingle-yLnwpVzd.js';
|
|
2
2
|
//# sourceMappingURL=DateFieldSingle.js.map
|
package/dist/Dnd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as Dnd } from './index-
|
|
1
|
+
export { D as Dnd } from './index-V5Ez2gq_.js';
|
|
2
2
|
//# sourceMappingURL=Dnd.js.map
|
package/dist/DndSort.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import React__default, { useLayoutEffect, useEffect, useRef, useMemo, useCallback, useState, memo, useReducer, createContext, useContext, forwardRef, cloneElement } from 'react';
|
|
3
3
|
import { unstable_batchedUpdates, createPortal } from 'react-dom';
|
|
4
|
-
import { s as styles, a as DndSortLine, b as DndHandleButton, c as DndHandle, D as Dnd } from './index-
|
|
4
|
+
import { s as styles, a as DndSortLine, b as DndHandleButton, c as DndHandle, D as Dnd } from './index-V5Ez2gq_.js';
|
|
5
5
|
import { c as cx } from './index-tZvMCc77.js';
|
|
6
6
|
import { B as ButtonCompound } from './ButtonCompound-BF2Q6gGX.js';
|
|
7
7
|
import { C as Card } from './Card-vTYeSkxt.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { createContext, useContext, forwardRef, useRef, useId, useEffect, useMemo, useState } from 'react';
|
|
3
|
-
import { C as Checkbox } from './Checkbox-
|
|
3
|
+
import { C as Checkbox } from './Checkbox-DDrmVC-u.js';
|
|
4
4
|
import { c as cx } from './index-tZvMCc77.js';
|
|
5
5
|
import { s as styles } from './ListView.module-MVsNF0X0.js';
|
|
6
6
|
import { u as useMergeRefs } from './useMergeRefs-Bde85AWI.js';
|
|
@@ -529,4 +529,4 @@ const ListView = Object.assign(
|
|
|
529
529
|
);
|
|
530
530
|
|
|
531
531
|
export { ListView as L, ListViewOption as a, ListViewOptionCell as b };
|
|
532
|
-
//# sourceMappingURL=ListView-
|
|
532
|
+
//# sourceMappingURL=ListView-pb3rIcze.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView-DEAMQopB.js","sources":["../src/internal/functions/mapOrder.ts","../src/components/ListView/internal/ListViewContext.ts","../src/components/ListView/ListViewOption.tsx","../src/components/ListView/ListViewOptionCell.tsx","../src/components/ListView/internal/utils.ts","../src/components/ListView/ListView.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapOrder(array: any[], order: any[], key: string) {\n array.sort(function (a, b) {\n const A = a[key],\n B = b[key];\n\n if (order.indexOf(A) > order.indexOf(B)) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return array;\n}\n","import { Dispatch, SetStateAction, createContext, useContext } from \"react\";\nimport { Option } from \"./types\";\n\n/**\n * Context properties for the ListView component\n */\nexport type ListViewContextProps = {\n /** Array of option objects for focus management */\n options?: Option[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items */\n selectedItems: unknown[];\n /** Currently indeterminate items */\n indeterminateItems: unknown[];\n /** Array of items if using items prop */\n items?: unknown[];\n /** Function to set the selected items */\n setSelectedItems: Dispatch<\n SetStateAction<ListViewContextProps[\"selectedItems\"]>\n >;\n /** Whether the component is controlled */\n controlled?: boolean;\n};\n\nexport const ListViewContext = createContext<ListViewContextProps | null>(null);\n\n/**\n * Hook to access the listview context\n * @returns The listview context\n * @throws Error if used outside of a ListView component\n */\nexport function useListView() {\n const context = useContext(ListViewContext);\n\n if (context == null) {\n throw new Error(\"useListView must be wrapped in <ListView />\");\n }\n\n return context;\n}\n","import {\n ChangeEvent,\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\nimport { CheckboxState } from \"../Checkbox/types\";\nimport { useListView } from \"./internal/ListViewContext\";\nimport { DataTrackingId } from \"../../types\";\n\ntype ItemType = {\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\n/**\n * Props for the ListViewOption component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type ListViewOptionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\"\n> & {\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Callback when the option changes */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: CheckboxState) => void;\n} & (\n | {\n /** The item object when using items prop */\n item: ItemType;\n }\n | {\n /** The display label for the option */\n label: string;\n }\n ) &\n DataTrackingId;\n\n/**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\nexport const ListViewOption = forwardRef<HTMLDivElement, ListViewOptionProps>(\n (props, ref) => {\n const {\n className,\n children,\n onChange,\n style,\n disabled: disabledProp,\n ...remainingProps\n } = props;\n\n const optionRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([ref, optionRef]);\n\n const cellRef = useRef<HTMLDivElement>(null);\n const rowId = useId();\n const {\n selectedItems,\n setSelectedItems,\n indeterminateItems,\n controlled,\n onSelectionChange,\n } = useListView();\n const disabled =\n \"item\" in remainingProps\n ? disabledProp || remainingProps.item.disabled\n : disabledProp;\n\n useEffect(() => {\n const focusables = optionRef.current?.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n focusables?.forEach((item, i) => {\n item.setAttribute(\"tabindex\", \"-1\");\n if (item.hasAttribute(\"id\")) return;\n item.setAttribute(\"id\", `${rowId}-${i}`);\n });\n }, [rowId]);\n\n const label =\n \"item\" in remainingProps\n ? remainingProps.item.label\n : remainingProps.label;\n\n const isSelected = useMemo(\n () => matchInArray(label, selectedItems),\n [selectedItems, label],\n );\n\n const isIndeterminate = useMemo(\n () => matchInArray(label, indeterminateItems),\n [indeterminateItems, label],\n );\n\n const onChangeHandler: CheckboxProps[\"onChange\"] = (e) => {\n onChange?.(e, { checked: isSelected });\n };\n\n const onClickHandler: CheckboxProps[\"onClick\"] = () => {\n updateSelectedItems();\n };\n\n const removeItemFromSelectedItems = (itemLabelToRemove: string) => {\n return (selectedItems as (ItemType | string)[]).filter(\n (potentialRemove) => {\n if (typeof potentialRemove === \"string\") {\n return potentialRemove !== itemLabelToRemove;\n }\n return potentialRemove.label !== itemLabelToRemove;\n },\n );\n };\n\n const addItemFromSelectedItems = (itemToAdd: ItemType | string) => {\n return [...selectedItems, itemToAdd];\n };\n\n function updateSelectedItems() {\n const isPartOfSelectedItems = matchInArray(label, selectedItems);\n const callback = controlled ? onSelectionChange : setSelectedItems;\n if (isPartOfSelectedItems) {\n callback?.(removeItemFromSelectedItems(label));\n } else {\n callback?.(\n addItemFromSelectedItems(\n \"item\" in remainingProps\n ? remainingProps.item\n : remainingProps.label,\n ),\n );\n }\n }\n\n const data = {\n label: \"item\" in props ? props.item?.label : props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"ListViewOption\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n item: _item,\n label: _label,\n ...forwardedProps\n } = remainingProps as {\n // This is to satisfy the type checker and allow us to destructure the item and label props which \"could\" exist.\n // We're destructuring them because we don't want to forward them to the div element.\n item: ItemType;\n label: string;\n };\n\n return (\n <div\n data-tracking-id={trackingId}\n className={cx([styles[\"listview-option\"]], className)}\n data-anv=\"listview-option\"\n style={style}\n ref={mergedRef}\n aria-disabled={disabled}\n aria-selected={isSelected}\n aria-label={label ?? \"Select\"}\n role=\"row\"\n {...forwardedProps}\n >\n <div className={styles[\"cell\"]} ref={cellRef} role=\"gridcell\">\n <Checkbox\n disabled={disabled}\n checked={isIndeterminate ? undefined : isSelected}\n indeterminate={isIndeterminate}\n aria-label={label ?? \"Select\"}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n />\n </div>\n {children}\n </div>\n );\n },\n);\n\nListViewOption.displayName = \"ListViewOption\";\n\n/**\n * Helper function to check if a list view option item is in an array (e.g. selected items or indeterminate items)\n * @param itemLabel - The label of the item to check if it is in the array\n * @param array - The array to check if the item is in\n * @returns True if the item is in the array, false otherwise\n */\nfunction matchInArray(\n itemLabel: string,\n array: (ItemType | unknown)[],\n): boolean {\n return array.some(\n (i) => itemLabel === i || itemLabel === (i as ItemType).label,\n );\n}\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\n\n/**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\nexport const ListViewOptionCell = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\">\n>((props, ref) => {\n const { ...rest } = props;\n return (\n <div role=\"gridcell\" data-anv=\"listview-option-cell\" {...rest} ref={ref} />\n );\n});\n\nListViewOptionCell.displayName = \"ListViewOptionCell\";\n","import { Dispatch, KeyboardEvent, SetStateAction } from \"react\";\nimport { FocusedItem, Option } from \"./types\";\nimport { getActiveElement } from \"../../../internal/functions\";\n\nexport const listViewKeyboardNavigation = (\n e: KeyboardEvent<HTMLDivElement>,\n options: Option[],\n focusedItem: FocusedItem,\n setFocusedItem: Dispatch<SetStateAction<FocusedItem>>,\n parent: HTMLDivElement | null,\n currentFocusId: (id: string) => void,\n) => {\n if (!options) return;\n let activeElement: HTMLElement | null;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n (\n options[focusedItem.row].focusables[focusedItem.col] as HTMLElement\n ).click();\n activeElement = getActiveElement(document);\n if (!activeElement) break;\n activeElement.click();\n e.preventDefault();\n break;\n case \"ArrowDown\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === options.length - 1) {\n options[0].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[0].focusables[focusedItem.col].id);\n setFocusedItem((prev) => {\n return { ...prev, row: 0 };\n });\n break;\n }\n\n options[focusedItem.row + 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row + 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row + 1 };\n });\n break;\n case \"ArrowUp\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === 0) {\n options[options.length - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[options.length - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: options.length - 1 };\n });\n break;\n }\n\n options[focusedItem.row - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row - 1 };\n });\n break;\n case \"ArrowRight\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === options[focusedItem.row].focusables.length - 1) {\n options[focusedItem.row].focusables[0].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[focusedItem.row].focusables[0].id);\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: 0,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col + 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col + 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col + 1 };\n });\n break;\n case \"ArrowLeft\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === 0) {\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].setAttribute(\"data-interactive\", \"focus-visible\");\n currentFocusId(\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].id,\n );\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: options[focusedItem.row].focusables.length - 1,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col - 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col - 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col - 1 };\n });\n break;\n\n default:\n break;\n }\n};\n\nexport const getFocusables = (el: Element) => {\n return el.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n};\n","import {\n KeyboardEvent,\n MouseEvent,\n Ref,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport {\n FocusedItem,\n ItemType,\n ListViewWithItems,\n ListViewWithOutItems,\n Option,\n} from \"./internal/types\";\nimport { ListViewOption } from \"./ListViewOption\";\nimport { ListViewOptionCell } from \"./ListViewOptionCell\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { getFocusables, listViewKeyboardNavigation } from \"./internal/utils\";\nimport { mapOrder } from \"../../internal/functions\";\nimport { ListViewContext } from \"./internal/ListViewContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\n\n/**\n * Props for the ListView component\n * @template T - The type of additional properties for items\n * @extends LayoutUtilProps\n */\nexport type ListViewProps<T> = LayoutUtilProps & {\n /** Currently indeterminate items (controlled) */\n indeterminate?: unknown[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items (controlled) */\n selected?: ItemType<T>[];\n} & (ListViewWithItems<T> | ListViewWithOutItems);\n\nconst ListViewElement = function <T>(\n props: ListViewProps<T>,\n ref: Ref<HTMLDivElement>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onSelectionChange,\n className,\n selected,\n defaultSelected,\n style,\n onKeyDown,\n ...remainingProps\n } = componentProps;\n\n const ListViewRef = useRef<HTMLDivElement>(null);\n const isFocusVisible = useRef(true);\n const combinedRef = useMergeRefs([ref, ListViewRef]);\n const [options, setOptions] = useState<Option[]>();\n const [currentActive, setCurrentActive] = useState<string>();\n const [selectedItems, setSelectedItems] = useState<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n const [focusedItem, setFocusedItem] = useState<FocusedItem>({\n row: 0,\n col: 0,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const onFocusHandler = () => {\n if (!isFocusVisible.current) return;\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n return;\n };\n const onBlurHandler = () => {\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n return;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (!options) return;\n isFocusVisible.current = true;\n listViewKeyboardNavigation(\n e,\n options,\n focusedItem,\n setFocusedItem,\n ListViewRef.current,\n (id) => setCurrentActive(id),\n );\n };\n\n const onMouseDownHandler = (e: MouseEvent<HTMLDivElement>) => {\n isFocusVisible.current = false;\n if (options && ListViewRef.current) {\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n\n const closestFocusable = (e.target as HTMLElement).closest(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [data-anv='checkbox']\",\n );\n\n const optionRow = (e.target as HTMLElement).closest(\n '[data-anv=\"listview-option\"]',\n );\n if (!optionRow || optionRow.ariaDisabled) return;\n const row = options.findIndex((option) => option.node === optionRow);\n if (!closestFocusable) {\n (options[row].focusables[0] as HTMLElement).click();\n return;\n }\n const col = Array.prototype.indexOf.call(\n options[row].focusables,\n closestFocusable?.getAttribute(\"data-anv\") === \"checkbox\"\n ? closestFocusable.children[0]\n : closestFocusable,\n );\n setFocusedItem({ row, col });\n }\n };\n\n useEffect(() => {\n if (!ListViewRef.current) return;\n const optionArr = ListViewRef.current.querySelectorAll<HTMLDivElement>(\n \"div[data-anv='listview-option']:not([aria-disabled='true'])\",\n );\n const makeTree = Array.from(optionArr).map((option) => {\n const childFocusables = getFocusables(option);\n return {\n node: option,\n focusables: childFocusables,\n };\n });\n setOptions(makeTree);\n }, [props.children]);\n\n const prevSelectedItems = useRef<unknown[]>();\n useEffect(() => {\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelectedItems = mapOrder(selectedItems, compareArr, \"label\");\n if (\n JSON.stringify(prevSelectedItems.current) ===\n JSON.stringify(orderedSelectedItems)\n )\n return;\n\n onSelectionChange?.(orderedSelectedItems);\n prevSelectedItems.current = orderedSelectedItems;\n }, [onSelectionChange, options, selectedItems]);\n\n useEffect(() => {\n if (!selected) return;\n const filterDuplicates = selected.reduce(\n (acc: ListViewWithItems<T>[\"items\"], current) => {\n const isDup = acc.find((item) => item.label === current.label);\n if (!isDup) {\n return acc.concat([current]);\n } else {\n return acc;\n }\n },\n [],\n );\n\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelected = mapOrder(filterDuplicates, compareArr, \"label\");\n if (\n JSON.stringify(prevSelectedItems.current) ===\n JSON.stringify(orderedSelected)\n )\n return;\n setSelectedItems(orderedSelected);\n prevSelectedItems.current = orderedSelected;\n }, [onSelectionChange, options, selected]);\n\n const ListViewClassNames = cx([styles[\"listview\"]], className);\n\n if (\"items\" in remainingProps) {\n const { children, items, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange,\n indeterminateItems: indeterminate ?? [],\n selectedItems,\n setSelectedItems,\n items,\n controlled: !!selected,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n aria-multiselectable=\"true\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children?.({\n items: items.map((item: ItemType<T>) => {\n return item;\n }),\n })}\n </div>\n </ListViewContext.Provider>\n );\n }\n\n const { children, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange,\n selectedItems,\n indeterminateItems: indeterminate ?? [],\n setSelectedItems,\n controlled: !!selected || !!indeterminate,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children}\n </div>\n </ListViewContext.Provider>\n );\n};\n\nListViewElement.displayName = \"ListView\";\n\n/**\n * ListView component for displaying a list of selectable items in a grid layout.\n *\n * Features:\n * - Supports single and multiple selection modes\n * - Keyboard navigation with arrow keys\n * - Customizable item rendering\n * - Controlled and uncontrolled modes\n * - Accessible with proper ARIA attributes\n * - Focus management for interactive elements\n * - Layout utilities for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView items={[{ label: \"Item 1\" }, { label: \"Item 2\" }]} onSelectionChange={handleSelection}>\n * {({ items }) => items.map(item => (\n * <ListView.Option key={item.label} item={item} />\n * ))}\n * </ListView>\n */\nexport const ListView = Object.assign(\n forwardRef(ListViewElement) as <T>(\n props: ListViewProps<T> & { ref?: React.ForwardedRef<HTMLUListElement> },\n ) => ReturnType<typeof ListViewElement>,\n {\n /**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\n Option: ListViewOption,\n /**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\n OptionCell: ListViewOptionCell,\n },\n);\n"],"names":["children","rest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListView-pb3rIcze.js","sources":["../src/internal/functions/mapOrder.ts","../src/components/ListView/internal/ListViewContext.ts","../src/components/ListView/ListViewOption.tsx","../src/components/ListView/ListViewOptionCell.tsx","../src/components/ListView/internal/utils.ts","../src/components/ListView/ListView.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mapOrder(array: any[], order: any[], key: string) {\n array.sort(function (a, b) {\n const A = a[key],\n B = b[key];\n\n if (order.indexOf(A) > order.indexOf(B)) {\n return 1;\n } else {\n return -1;\n }\n });\n\n return array;\n}\n","import { Dispatch, SetStateAction, createContext, useContext } from \"react\";\nimport { Option } from \"./types\";\n\n/**\n * Context properties for the ListView component\n */\nexport type ListViewContextProps = {\n /** Array of option objects for focus management */\n options?: Option[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items */\n selectedItems: unknown[];\n /** Currently indeterminate items */\n indeterminateItems: unknown[];\n /** Array of items if using items prop */\n items?: unknown[];\n /** Function to set the selected items */\n setSelectedItems: Dispatch<\n SetStateAction<ListViewContextProps[\"selectedItems\"]>\n >;\n /** Whether the component is controlled */\n controlled?: boolean;\n};\n\nexport const ListViewContext = createContext<ListViewContextProps | null>(null);\n\n/**\n * Hook to access the listview context\n * @returns The listview context\n * @throws Error if used outside of a ListView component\n */\nexport function useListView() {\n const context = useContext(ListViewContext);\n\n if (context == null) {\n throw new Error(\"useListView must be wrapped in <ListView />\");\n }\n\n return context;\n}\n","import {\n ChangeEvent,\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n} from \"react\";\nimport { Checkbox, CheckboxProps } from \"../Checkbox\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\nimport { CheckboxState } from \"../Checkbox/types\";\nimport { useListView } from \"./internal/ListViewContext\";\nimport { DataTrackingId } from \"../../types\";\n\ntype ItemType = {\n label: string;\n disabled?: boolean;\n [key: string]: unknown;\n};\n\n/**\n * Props for the ListViewOption component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type ListViewOptionProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onChange\"\n> & {\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Callback when the option changes */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: CheckboxState) => void;\n} & (\n | {\n /** The item object when using items prop */\n item: ItemType;\n }\n | {\n /** The display label for the option */\n label: string;\n }\n ) &\n DataTrackingId;\n\n/**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\nexport const ListViewOption = forwardRef<HTMLDivElement, ListViewOptionProps>(\n (props, ref) => {\n const {\n className,\n children,\n onChange,\n style,\n disabled: disabledProp,\n ...remainingProps\n } = props;\n\n const optionRef = useRef<HTMLDivElement>(null);\n const mergedRef = useMergeRefs([ref, optionRef]);\n\n const cellRef = useRef<HTMLDivElement>(null);\n const rowId = useId();\n const {\n selectedItems,\n setSelectedItems,\n indeterminateItems,\n controlled,\n onSelectionChange,\n } = useListView();\n const disabled =\n \"item\" in remainingProps\n ? disabledProp || remainingProps.item.disabled\n : disabledProp;\n\n useEffect(() => {\n const focusables = optionRef.current?.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n focusables?.forEach((item, i) => {\n item.setAttribute(\"tabindex\", \"-1\");\n if (item.hasAttribute(\"id\")) return;\n item.setAttribute(\"id\", `${rowId}-${i}`);\n });\n }, [rowId]);\n\n const label =\n \"item\" in remainingProps\n ? remainingProps.item.label\n : remainingProps.label;\n\n const isSelected = useMemo(\n () => matchInArray(label, selectedItems),\n [selectedItems, label],\n );\n\n const isIndeterminate = useMemo(\n () => matchInArray(label, indeterminateItems),\n [indeterminateItems, label],\n );\n\n const onChangeHandler: CheckboxProps[\"onChange\"] = (e) => {\n onChange?.(e, { checked: isSelected });\n };\n\n const onClickHandler: CheckboxProps[\"onClick\"] = () => {\n updateSelectedItems();\n };\n\n const removeItemFromSelectedItems = (itemLabelToRemove: string) => {\n return (selectedItems as (ItemType | string)[]).filter(\n (potentialRemove) => {\n if (typeof potentialRemove === \"string\") {\n return potentialRemove !== itemLabelToRemove;\n }\n return potentialRemove.label !== itemLabelToRemove;\n },\n );\n };\n\n const addItemFromSelectedItems = (itemToAdd: ItemType | string) => {\n return [...selectedItems, itemToAdd];\n };\n\n function updateSelectedItems() {\n const isPartOfSelectedItems = matchInArray(label, selectedItems);\n const callback = controlled ? onSelectionChange : setSelectedItems;\n if (isPartOfSelectedItems) {\n callback?.(removeItemFromSelectedItems(label));\n } else {\n callback?.(\n addItemFromSelectedItems(\n \"item\" in remainingProps\n ? remainingProps.item\n : remainingProps.label,\n ),\n );\n }\n }\n\n const data = {\n label: \"item\" in props ? props.item?.label : props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"ListViewOption\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n item: _item,\n label: _label,\n ...forwardedProps\n } = remainingProps as {\n // This is to satisfy the type checker and allow us to destructure the item and label props which \"could\" exist.\n // We're destructuring them because we don't want to forward them to the div element.\n item: ItemType;\n label: string;\n };\n\n return (\n <div\n data-tracking-id={trackingId}\n className={cx([styles[\"listview-option\"]], className)}\n data-anv=\"listview-option\"\n style={style}\n ref={mergedRef}\n aria-disabled={disabled}\n aria-selected={isSelected}\n aria-label={label ?? \"Select\"}\n role=\"row\"\n {...forwardedProps}\n >\n <div className={styles[\"cell\"]} ref={cellRef} role=\"gridcell\">\n <Checkbox\n disabled={disabled}\n checked={isIndeterminate ? undefined : isSelected}\n indeterminate={isIndeterminate}\n aria-label={label ?? \"Select\"}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n />\n </div>\n {children}\n </div>\n );\n },\n);\n\nListViewOption.displayName = \"ListViewOption\";\n\n/**\n * Helper function to check if a list view option item is in an array (e.g. selected items or indeterminate items)\n * @param itemLabel - The label of the item to check if it is in the array\n * @param array - The array to check if the item is in\n * @returns True if the item is in the array, false otherwise\n */\nfunction matchInArray(\n itemLabel: string,\n array: (ItemType | unknown)[],\n): boolean {\n return array.some(\n (i) => itemLabel === i || itemLabel === (i as ItemType).label,\n );\n}\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\n\n/**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\nexport const ListViewOptionCell = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\">\n>((props, ref) => {\n const { ...rest } = props;\n return (\n <div role=\"gridcell\" data-anv=\"listview-option-cell\" {...rest} ref={ref} />\n );\n});\n\nListViewOptionCell.displayName = \"ListViewOptionCell\";\n","import { Dispatch, KeyboardEvent, SetStateAction } from \"react\";\nimport { FocusedItem, Option } from \"./types\";\nimport { getActiveElement } from \"../../../internal/functions\";\n\nexport const listViewKeyboardNavigation = (\n e: KeyboardEvent<HTMLDivElement>,\n options: Option[],\n focusedItem: FocusedItem,\n setFocusedItem: Dispatch<SetStateAction<FocusedItem>>,\n parent: HTMLDivElement | null,\n currentFocusId: (id: string) => void,\n) => {\n if (!options) return;\n let activeElement: HTMLElement | null;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n (\n options[focusedItem.row].focusables[focusedItem.col] as HTMLElement\n ).click();\n activeElement = getActiveElement(document);\n if (!activeElement) break;\n activeElement.click();\n e.preventDefault();\n break;\n case \"ArrowDown\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === options.length - 1) {\n options[0].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[0].focusables[focusedItem.col].id);\n setFocusedItem((prev) => {\n return { ...prev, row: 0 };\n });\n break;\n }\n\n options[focusedItem.row + 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row + 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row + 1 };\n });\n break;\n case \"ArrowUp\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.row === 0) {\n options[options.length - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[options.length - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: options.length - 1 };\n });\n break;\n }\n\n options[focusedItem.row - 1].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row - 1].focusables[focusedItem.col].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, row: focusedItem.row - 1 };\n });\n break;\n case \"ArrowRight\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === options[focusedItem.row].focusables.length - 1) {\n options[focusedItem.row].focusables[0].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(options[focusedItem.row].focusables[0].id);\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: 0,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col + 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col + 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col + 1 };\n });\n break;\n case \"ArrowLeft\":\n parent?.focus();\n options[focusedItem.row].focusables[focusedItem.col].removeAttribute(\n \"data-interactive\",\n );\n if (focusedItem.col === 0) {\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].setAttribute(\"data-interactive\", \"focus-visible\");\n currentFocusId(\n options[focusedItem.row].focusables[\n options[focusedItem.row].focusables.length - 1\n ].id,\n );\n setFocusedItem((prev) => {\n return {\n ...prev,\n col: options[focusedItem.row].focusables.length - 1,\n };\n });\n break;\n }\n\n options[focusedItem.row].focusables[focusedItem.col - 1].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n currentFocusId(\n options[focusedItem.row].focusables[focusedItem.col - 1].id,\n );\n setFocusedItem((prev) => {\n return { ...prev, col: focusedItem.col - 1 };\n });\n break;\n\n default:\n break;\n }\n};\n\nexport const getFocusables = (el: Element) => {\n return el.querySelectorAll(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [tabindex='0']:not(:disabled):not([aria-disabled='true'])\",\n );\n};\n","import {\n KeyboardEvent,\n MouseEvent,\n Ref,\n forwardRef,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { LayoutUtilProps } from \"../../types\";\nimport {\n FocusedItem,\n ItemType,\n ListViewWithItems,\n ListViewWithOutItems,\n Option,\n} from \"./internal/types\";\nimport { ListViewOption } from \"./ListViewOption\";\nimport { ListViewOptionCell } from \"./ListViewOptionCell\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { getFocusables, listViewKeyboardNavigation } from \"./internal/utils\";\nimport { mapOrder } from \"../../internal/functions\";\nimport { ListViewContext } from \"./internal/ListViewContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./ListView.module.scss\";\n\n/**\n * Props for the ListView component\n * @template T - The type of additional properties for items\n * @extends LayoutUtilProps\n */\nexport type ListViewProps<T> = LayoutUtilProps & {\n /** Currently indeterminate items (controlled) */\n indeterminate?: unknown[];\n /** Callback when selection changes */\n onSelectionChange?: (value: unknown[]) => void;\n /** Currently selected items (controlled) */\n selected?: ItemType<T>[];\n} & (ListViewWithItems<T> | ListViewWithOutItems);\n\nconst ListViewElement = function <T>(\n props: ListViewProps<T>,\n ref: Ref<HTMLDivElement>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onSelectionChange,\n className,\n selected,\n defaultSelected,\n style,\n onKeyDown,\n ...remainingProps\n } = componentProps;\n\n const ListViewRef = useRef<HTMLDivElement>(null);\n const isFocusVisible = useRef(true);\n const combinedRef = useMergeRefs([ref, ListViewRef]);\n const [options, setOptions] = useState<Option[]>();\n const [currentActive, setCurrentActive] = useState<string>();\n const [selectedItems, setSelectedItems] = useState<unknown[]>(\n selected ?? defaultSelected ?? [],\n );\n const [focusedItem, setFocusedItem] = useState<FocusedItem>({\n row: 0,\n col: 0,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const onFocusHandler = () => {\n if (!isFocusVisible.current) return;\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col].setAttribute(\n \"data-interactive\",\n \"focus-visible\",\n );\n return;\n };\n const onBlurHandler = () => {\n if (!options) return;\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n return;\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (!options) return;\n isFocusVisible.current = true;\n listViewKeyboardNavigation(\n e,\n options,\n focusedItem,\n setFocusedItem,\n ListViewRef.current,\n (id) => setCurrentActive(id),\n );\n };\n\n const onMouseDownHandler = (e: MouseEvent<HTMLDivElement>) => {\n isFocusVisible.current = false;\n if (options && ListViewRef.current) {\n options[focusedItem.row].focusables[focusedItem.col]?.removeAttribute(\n \"data-interactive\",\n );\n\n const closestFocusable = (e.target as HTMLElement).closest(\n \"button:not(:disabled):not([aria-disabled='true']), input:not(:disabled):not([aria-disabled='true']), [data-anv='checkbox']\",\n );\n\n const optionRow = (e.target as HTMLElement).closest(\n '[data-anv=\"listview-option\"]',\n );\n if (!optionRow || optionRow.ariaDisabled) return;\n const row = options.findIndex((option) => option.node === optionRow);\n if (!closestFocusable) {\n (options[row].focusables[0] as HTMLElement).click();\n return;\n }\n const col = Array.prototype.indexOf.call(\n options[row].focusables,\n closestFocusable?.getAttribute(\"data-anv\") === \"checkbox\"\n ? closestFocusable.children[0]\n : closestFocusable,\n );\n setFocusedItem({ row, col });\n }\n };\n\n useEffect(() => {\n if (!ListViewRef.current) return;\n const optionArr = ListViewRef.current.querySelectorAll<HTMLDivElement>(\n \"div[data-anv='listview-option']:not([aria-disabled='true'])\",\n );\n const makeTree = Array.from(optionArr).map((option) => {\n const childFocusables = getFocusables(option);\n return {\n node: option,\n focusables: childFocusables,\n };\n });\n setOptions(makeTree);\n }, [props.children]);\n\n const prevSelectedItems = useRef<unknown[]>();\n useEffect(() => {\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelectedItems = mapOrder(selectedItems, compareArr, \"label\");\n if (\n JSON.stringify(prevSelectedItems.current) ===\n JSON.stringify(orderedSelectedItems)\n )\n return;\n\n onSelectionChange?.(orderedSelectedItems);\n prevSelectedItems.current = orderedSelectedItems;\n }, [onSelectionChange, options, selectedItems]);\n\n useEffect(() => {\n if (!selected) return;\n const filterDuplicates = selected.reduce(\n (acc: ListViewWithItems<T>[\"items\"], current) => {\n const isDup = acc.find((item) => item.label === current.label);\n if (!isDup) {\n return acc.concat([current]);\n } else {\n return acc;\n }\n },\n [],\n );\n\n if (!options) return;\n const compareArr = options.map((option) => option.node.ariaLabel);\n const orderedSelected = mapOrder(filterDuplicates, compareArr, \"label\");\n if (\n JSON.stringify(prevSelectedItems.current) ===\n JSON.stringify(orderedSelected)\n )\n return;\n setSelectedItems(orderedSelected);\n prevSelectedItems.current = orderedSelected;\n }, [onSelectionChange, options, selected]);\n\n const ListViewClassNames = cx([styles[\"listview\"]], className);\n\n if (\"items\" in remainingProps) {\n const { children, items, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange,\n indeterminateItems: indeterminate ?? [],\n selectedItems,\n setSelectedItems,\n items,\n controlled: !!selected,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n aria-multiselectable=\"true\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children?.({\n items: items.map((item: ItemType<T>) => {\n return item;\n }),\n })}\n </div>\n </ListViewContext.Provider>\n );\n }\n\n const { children, ...rest } = remainingProps;\n return (\n <ListViewContext.Provider\n value={{\n options,\n onSelectionChange,\n selectedItems,\n indeterminateItems: indeterminate ?? [],\n setSelectedItems,\n controlled: !!selected || !!indeterminate,\n }}\n >\n <div\n ref={combinedRef}\n className={ListViewClassNames}\n style={styleCombined}\n data-anv=\"listview\"\n role=\"grid\"\n onFocus={onFocusHandler}\n onBlur={onBlurHandler}\n onKeyDown={onKeyDownHandler}\n onMouseDown={onMouseDownHandler}\n aria-activedescendant={currentActive}\n tabIndex={0}\n {...rest}\n >\n {children}\n </div>\n </ListViewContext.Provider>\n );\n};\n\nListViewElement.displayName = \"ListView\";\n\n/**\n * ListView component for displaying a list of selectable items in a grid layout.\n *\n * Features:\n * - Supports single and multiple selection modes\n * - Keyboard navigation with arrow keys\n * - Customizable item rendering\n * - Controlled and uncontrolled modes\n * - Accessible with proper ARIA attributes\n * - Focus management for interactive elements\n * - Layout utilities for positioning and spacing\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView items={[{ label: \"Item 1\" }, { label: \"Item 2\" }]} onSelectionChange={handleSelection}>\n * {({ items }) => items.map(item => (\n * <ListView.Option key={item.label} item={item} />\n * ))}\n * </ListView>\n */\nexport const ListView = Object.assign(\n forwardRef(ListViewElement) as <T>(\n props: ListViewProps<T> & { ref?: React.ForwardedRef<HTMLUListElement> },\n ) => ReturnType<typeof ListViewElement>,\n {\n /**\n * ListViewOption component for individual selectable items within a listview.\n *\n * Features:\n * - Displays selectable options with proper ARIA attributes\n * - Supports disabled state for non-selectable options\n * - Keyboard navigation support\n * - Accessible with screen reader support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <ListView.Option item={{ label: \"Option 1\" }} />\n */\n Option: ListViewOption,\n /**\n * ListViewOptionCell component for rendering a cell within a listview option.\n *\n * Features:\n * - Renders a grid cell for option content\n * - Supports custom content and layout\n * - Accessible with proper ARIA attributes\n *\n * @example\n * <ListView.OptionCell>Custom cell content</ListView.OptionCell>\n */\n OptionCell: ListViewOptionCell,\n },\n);\n"],"names":["children","rest"],"mappings":";;;;;;;;;;AACgB,SAAA,QAAA,CAAS,KAAc,EAAA,KAAA,EAAc,GAAa,EAAA;AAChE,EAAM,KAAA,CAAA,IAAA,CAAK,SAAU,CAAA,EAAG,CAAG,EAAA;AACzB,IAAA,MAAM,IAAI,CAAE,CAAA,GAAG,CACb,EAAA,CAAA,GAAI,EAAE,GAAG,CAAA;AAEX,IAAA,IAAI,MAAM,OAAQ,CAAA,CAAC,IAAI,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAG,EAAA;AACvC,MAAO,OAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,EAAA;AAAA;AACT,GACD,CAAA;AAED,EAAO,OAAA,KAAA;AACT;;ACWa,MAAA,eAAA,GAAkB,cAA2C,IAAI,CAAA;AAOvE,SAAS,WAAc,GAAA;AAC5B,EAAM,MAAA,OAAA,GAAU,WAAW,eAAe,CAAA;AAE1C,EAAA,IAAI,WAAW,IAAM,EAAA;AACnB,IAAM,MAAA,IAAI,MAAM,6CAA6C,CAAA;AAAA;AAG/D,EAAO,OAAA,OAAA;AACT;;ACoBO,MAAM,cAAiB,GAAA,UAAA;AAAA,EAC5B,CAAC,OAAO,GAAQ,KAAA;AACd,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAU,EAAA,YAAA;AAAA,MACV,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAM,MAAA,SAAA,GAAY,OAAuB,IAAI,CAAA;AAC7C,IAAA,MAAM,SAAY,GAAA,YAAA,CAAa,CAAC,GAAA,EAAK,SAAS,CAAC,CAAA;AAE/C,IAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA;AAC3C,IAAA,MAAM,QAAQ,KAAM,EAAA;AACpB,IAAM,MAAA;AAAA,MACJ,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,QACE,WAAY,EAAA;AAChB,IAAA,MAAM,WACJ,MAAU,IAAA,cAAA,GACN,YAAgB,IAAA,cAAA,CAAe,KAAK,QACpC,GAAA,YAAA;AAEN,IAAA,SAAA,CAAU,MAAM;AACd,MAAM,MAAA,UAAA,GAAa,UAAU,OAAS,EAAA,gBAAA;AAAA,QACpC;AAAA,OACF;AACA,MAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,IAAA,EAAM,CAAM,KAAA;AAC/B,QAAK,IAAA,CAAA,YAAA,CAAa,YAAY,IAAI,CAAA;AAClC,QAAI,IAAA,IAAA,CAAK,YAAa,CAAA,IAAI,CAAG,EAAA;AAC7B,QAAA,IAAA,CAAK,aAAa,IAAM,EAAA,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,CAAC,CAAE,CAAA,CAAA;AAAA,OACxC,CAAA;AAAA,KACH,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,QACJ,MAAU,IAAA,cAAA,GACN,cAAe,CAAA,IAAA,CAAK,QACpB,cAAe,CAAA,KAAA;AAErB,IAAA,MAAM,UAAa,GAAA,OAAA;AAAA,MACjB,MAAM,YAAa,CAAA,KAAA,EAAO,aAAa,CAAA;AAAA,MACvC,CAAC,eAAe,KAAK;AAAA,KACvB;AAEA,IAAA,MAAM,eAAkB,GAAA,OAAA;AAAA,MACtB,MAAM,YAAa,CAAA,KAAA,EAAO,kBAAkB,CAAA;AAAA,MAC5C,CAAC,oBAAoB,KAAK;AAAA,KAC5B;AAEA,IAAM,MAAA,eAAA,GAA6C,CAAC,CAAM,KAAA;AACxD,MAAA,QAAA,GAAW,CAAG,EAAA,EAAE,OAAS,EAAA,UAAA,EAAY,CAAA;AAAA,KACvC;AAEA,IAAA,MAAM,iBAA2C,MAAM;AACrD,MAAoB,mBAAA,EAAA;AAAA,KACtB;AAEA,IAAM,MAAA,2BAAA,GAA8B,CAAC,iBAA8B,KAAA;AACjE,MAAA,OAAQ,aAAwC,CAAA,MAAA;AAAA,QAC9C,CAAC,eAAoB,KAAA;AACnB,UAAI,IAAA,OAAO,oBAAoB,QAAU,EAAA;AACvC,YAAA,OAAO,eAAoB,KAAA,iBAAA;AAAA;AAE7B,UAAA,OAAO,gBAAgB,KAAU,KAAA,iBAAA;AAAA;AACnC,OACF;AAAA,KACF;AAEA,IAAM,MAAA,wBAAA,GAA2B,CAAC,SAAiC,KAAA;AACjE,MAAO,OAAA,CAAC,GAAG,aAAA,EAAe,SAAS,CAAA;AAAA,KACrC;AAEA,IAAA,SAAS,mBAAsB,GAAA;AAC7B,MAAM,MAAA,qBAAA,GAAwB,YAAa,CAAA,KAAA,EAAO,aAAa,CAAA;AAC/D,MAAM,MAAA,QAAA,GAAW,aAAa,iBAAoB,GAAA,gBAAA;AAClD,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAW,QAAA,GAAA,2BAAA,CAA4B,KAAK,CAAC,CAAA;AAAA,OACxC,MAAA;AACL,QAAA,QAAA;AAAA,UACE,wBAAA;AAAA,YACE,MAAU,IAAA,cAAA,GACN,cAAe,CAAA,IAAA,GACf,cAAe,CAAA;AAAA;AACrB,SACF;AAAA;AACF;AAGF,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,OAAO,MAAU,IAAA,KAAA,GAAQ,KAAM,CAAA,IAAA,EAAM,QAAQ,KAAM,CAAA;AAAA,KACrD;AAEA,IAAA,MAAM,aAAa,aAAc,CAAA;AAAA,MAC/B,IAAM,EAAA,gBAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAa,EAAA,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,KACxC,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,IAAM,EAAA,KAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,GAAG;AAAA,KACD,GAAA,cAAA;AAOJ,IACE,uBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,kBAAkB,EAAA,UAAA;AAAA,QAClB,WAAW,EAAG,CAAA,CAAC,OAAO,iBAAiB,CAAC,GAAG,SAAS,CAAA;AAAA,QACpD,UAAS,EAAA,iBAAA;AAAA,QACT,KAAA;AAAA,QACA,GAAK,EAAA,SAAA;AAAA,QACL,eAAe,EAAA,QAAA;AAAA,QACf,eAAe,EAAA,UAAA;AAAA,QACf,cAAY,KAAS,IAAA,QAAA;AAAA,QACrB,IAAK,EAAA,KAAA;AAAA,QACJ,GAAG,cAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAC,GAAA,CAAA,KAAA,EAAA,EAAI,WAAW,MAAO,CAAA,MAAM,GAAG,GAAK,EAAA,OAAA,EAAS,MAAK,UACjD,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,QAAA;AAAA,cACA,OAAA,EAAS,kBAAkB,MAAY,GAAA,UAAA;AAAA,cACvC,aAAe,EAAA,eAAA;AAAA,cACf,cAAY,KAAS,IAAA,QAAA;AAAA,cACrB,QAAU,EAAA,eAAA;AAAA,cACV,OAAS,EAAA;AAAA;AAAA,WAEb,EAAA,CAAA;AAAA,UACC;AAAA;AAAA;AAAA,KACH;AAAA;AAGN;AAEA,cAAA,CAAe,WAAc,GAAA,gBAAA;AAQ7B,SAAS,YAAA,CACP,WACA,KACS,EAAA;AACT,EAAA,OAAO,KAAM,CAAA,IAAA;AAAA,IACX,CAAC,CAAA,KAAM,SAAc,KAAA,CAAA,IAAK,cAAe,CAAe,CAAA;AAAA,GAC1D;AACF;;AC7MO,MAAM,kBAAqB,GAAA,UAAA,CAGhC,CAAC,KAAA,EAAO,GAAQ,KAAA;AAChB,EAAM,MAAA,EAAE,GAAG,IAAA,EAAS,GAAA,KAAA;AACpB,EACE,uBAAA,GAAA,CAAC,SAAI,IAAK,EAAA,UAAA,EAAW,YAAS,sBAAwB,EAAA,GAAG,MAAM,GAAU,EAAA,CAAA;AAE7E,CAAC;AAED,kBAAA,CAAmB,WAAc,GAAA,oBAAA;;ACnB1B,MAAM,6BAA6B,CACxC,CAAA,EACA,SACA,WACA,EAAA,cAAA,EACA,QACA,cACG,KAAA;AACH,EAAA,IAAI,CAAC,OAAS,EAAA;AACd,EAAI,IAAA,aAAA;AACJ,EAAA,QAAQ,EAAE,IAAM;AAAA,IACd,KAAK,OAAA;AAAA,IACL,KAAK,OAAA;AACH,MACE,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,WAAW,WAAY,CAAA,GAAG,EACnD,KAAM,EAAA;AACR,MAAA,aAAA,GAAgB,iBAAiB,QAAQ,CAAA;AACzC,MAAA,IAAI,CAAC,aAAe,EAAA;AACpB,MAAA,aAAA,CAAc,KAAM,EAAA;AACpB,MAAA,CAAA,CAAE,cAAe,EAAA;AACjB,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,EAAQ,KAAM,EAAA;AACd,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,eAAA;AAAA,QACnD;AAAA,OACF;AACA,MAAA,IAAI,WAAY,CAAA,GAAA,KAAQ,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1C,QAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,YAAA;AAAA,UACrC,kBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,cAAA,CAAe,QAAQ,CAAC,CAAA,CAAE,WAAW,WAAY,CAAA,GAAG,EAAE,EAAE,CAAA;AACxD,QAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,UAAA,OAAO,EAAE,GAAG,IAAM,EAAA,GAAA,EAAK,CAAE,EAAA;AAAA,SAC1B,CAAA;AACD,QAAA;AAAA;AAGF,MAAA,OAAA,CAAQ,YAAY,GAAM,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,YAAA;AAAA,QACvD,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,cAAA;AAAA,QACE,OAAA,CAAQ,YAAY,GAAM,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA;AAAA,OAC3D;AACA,MAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAK,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,OAC5C,CAAA;AACD,MAAA;AAAA,IACF,KAAK,SAAA;AACH,MAAA,MAAA,EAAQ,KAAM,EAAA;AACd,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,eAAA;AAAA,QACnD;AAAA,OACF;AACA,MAAI,IAAA,WAAA,CAAY,QAAQ,CAAG,EAAA;AACzB,QAAA,OAAA,CAAQ,QAAQ,MAAS,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,YAAA;AAAA,UACtD,kBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,cAAA;AAAA,UACE,OAAA,CAAQ,QAAQ,MAAS,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA;AAAA,SAC1D;AACA,QAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,UAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAK,EAAA,OAAA,CAAQ,SAAS,CAAE,EAAA;AAAA,SAC3C,CAAA;AACD,QAAA;AAAA;AAGF,MAAA,OAAA,CAAQ,YAAY,GAAM,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,YAAA;AAAA,QACvD,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,cAAA;AAAA,QACE,OAAA,CAAQ,YAAY,GAAM,GAAA,CAAC,EAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA;AAAA,OAC3D;AACA,MAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAK,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,OAC5C,CAAA;AACD,MAAA;AAAA,IACF,KAAK,YAAA;AACH,MAAA,MAAA,EAAQ,KAAM,EAAA;AACd,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,eAAA;AAAA,QACnD;AAAA,OACF;AACA,MAAI,IAAA,WAAA,CAAY,QAAQ,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACtE,QAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,UAAA,CAAW,CAAC,CAAE,CAAA,YAAA;AAAA,UACrC,kBAAA;AAAA,UACA;AAAA,SACF;AACA,QAAA,cAAA,CAAe,QAAQ,WAAY,CAAA,GAAG,EAAE,UAAW,CAAA,CAAC,EAAE,EAAE,CAAA;AACxD,QAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,UAAO,OAAA;AAAA,YACL,GAAG,IAAA;AAAA,YACH,GAAK,EAAA;AAAA,WACP;AAAA,SACD,CAAA;AACD,QAAA;AAAA;AAGF,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,WAAW,WAAY,CAAA,GAAA,GAAM,CAAC,CAAE,CAAA,YAAA;AAAA,QACvD,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,cAAA;AAAA,QACE,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,WAAW,WAAY,CAAA,GAAA,GAAM,CAAC,CAAE,CAAA;AAAA,OAC3D;AACA,MAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAK,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,OAC5C,CAAA;AACD,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,MAAA,EAAQ,KAAM,EAAA;AACd,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,eAAA;AAAA,QACnD;AAAA,OACF;AACA,MAAI,IAAA,WAAA,CAAY,QAAQ,CAAG,EAAA;AACzB,QAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,UAAA,CACvB,QAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,UAAA,CAAW,MAAS,GAAA,CAC/C,CAAE,CAAA,YAAA,CAAa,oBAAoB,eAAe,CAAA;AAClD,QAAA,cAAA;AAAA,UACE,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAA,CAAE,UACvB,CAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAE,CAAA,UAAA,CAAW,MAAS,GAAA,CAC/C,CAAE,CAAA;AAAA,SACJ;AACA,QAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,UAAO,OAAA;AAAA,YACL,GAAG,IAAA;AAAA,YACH,KAAK,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAA,CAAE,WAAW,MAAS,GAAA;AAAA,WACpD;AAAA,SACD,CAAA;AACD,QAAA;AAAA;AAGF,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,WAAW,WAAY,CAAA,GAAA,GAAM,CAAC,CAAE,CAAA,YAAA;AAAA,QACvD,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,cAAA;AAAA,QACE,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,WAAW,WAAY,CAAA,GAAA,GAAM,CAAC,CAAE,CAAA;AAAA,OAC3D;AACA,MAAA,cAAA,CAAe,CAAC,IAAS,KAAA;AACvB,QAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAK,EAAA,WAAA,CAAY,MAAM,CAAE,EAAA;AAAA,OAC5C,CAAA;AACD,MAAA;AAGA;AAEN,CAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,EAAgB,KAAA;AAC5C,EAAA,OAAO,EAAG,CAAA,gBAAA;AAAA,IACR;AAAA,GACF;AACF,CAAA;;ACpHA,MAAM,eAAA,GAAkB,SACtB,KAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,EAAE,YAAA,EAAc,cAAe,EAAA,GAAI,mBAAmB,KAAK,CAAA;AACjE,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAA,cAAA;AAEJ,EAAM,MAAA,WAAA,GAAc,OAAuB,IAAI,CAAA;AAC/C,EAAM,MAAA,cAAA,GAAiB,OAAO,IAAI,CAAA;AAClC,EAAA,MAAM,WAAc,GAAA,YAAA,CAAa,CAAC,GAAA,EAAK,WAAW,CAAC,CAAA;AACnD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,QAAmB,EAAA;AACjD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAiB,EAAA;AAC3D,EAAM,MAAA,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA;AAAA,IACxC,QAAA,IAAY,mBAAmB;AAAC,GAClC;AACA,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,QAAsB,CAAA;AAAA,IAC1D,GAAK,EAAA,CAAA;AAAA,IACL,GAAK,EAAA;AAAA,GACN,CAAA;AAED,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,GAAG,KAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAI,IAAA,CAAC,eAAe,OAAS,EAAA;AAC7B,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAE,CAAA,YAAA;AAAA,MACnD,kBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA;AAAA,GACF;AACA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAG,EAAA,eAAA;AAAA,MACpD;AAAA,KACF;AACA,IAAA;AAAA,GACF;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,CAAqC,KAAA;AAC7D,IAAA,SAAA,GAAY,CAAC,CAAA;AACb,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,cAAA,CAAe,OAAU,GAAA,IAAA;AACzB,IAAA,0BAAA;AAAA,MACE,CAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAY,CAAA,OAAA;AAAA,MACZ,CAAC,EAAO,KAAA,gBAAA,CAAiB,EAAE;AAAA,KAC7B;AAAA,GACF;AAEA,EAAM,MAAA,kBAAA,GAAqB,CAAC,CAAkC,KAAA;AAC5D,IAAA,cAAA,CAAe,OAAU,GAAA,KAAA;AACzB,IAAI,IAAA,OAAA,IAAW,YAAY,OAAS,EAAA;AAClC,MAAA,OAAA,CAAQ,YAAY,GAAG,CAAA,CAAE,UAAW,CAAA,WAAA,CAAY,GAAG,CAAG,EAAA,eAAA;AAAA,QACpD;AAAA,OACF;AAEA,MAAM,MAAA,gBAAA,GAAoB,EAAE,MAAuB,CAAA,OAAA;AAAA,QACjD;AAAA,OACF;AAEA,MAAM,MAAA,SAAA,GAAa,EAAE,MAAuB,CAAA,OAAA;AAAA,QAC1C;AAAA,OACF;AACA,MAAI,IAAA,CAAC,SAAa,IAAA,SAAA,CAAU,YAAc,EAAA;AAC1C,MAAA,MAAM,MAAM,OAAQ,CAAA,SAAA,CAAU,CAAC,MAAW,KAAA,MAAA,CAAO,SAAS,SAAS,CAAA;AACnE,MAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,QAAC,QAAQ,GAAG,CAAA,CAAE,UAAW,CAAA,CAAC,EAAkB,KAAM,EAAA;AAClD,QAAA;AAAA;AAEF,MAAM,MAAA,GAAA,GAAM,KAAM,CAAA,SAAA,CAAU,OAAQ,CAAA,IAAA;AAAA,QAClC,OAAA,CAAQ,GAAG,CAAE,CAAA,UAAA;AAAA,QACb,gBAAA,EAAkB,aAAa,UAAU,CAAA,KAAM,aAC3C,gBAAiB,CAAA,QAAA,CAAS,CAAC,CAC3B,GAAA;AAAA,OACN;AACA,MAAe,cAAA,CAAA,EAAE,GAAK,EAAA,GAAA,EAAK,CAAA;AAAA;AAC7B,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,YAAY,OAAS,EAAA;AAC1B,IAAM,MAAA,SAAA,GAAY,YAAY,OAAQ,CAAA,gBAAA;AAAA,MACpC;AAAA,KACF;AACA,IAAA,MAAM,WAAW,KAAM,CAAA,IAAA,CAAK,SAAS,CAAE,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACrD,MAAM,MAAA,eAAA,GAAkB,cAAc,MAAM,CAAA;AAC5C,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,MAAA;AAAA,QACN,UAAY,EAAA;AAAA,OACd;AAAA,KACD,CAAA;AACD,IAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,GAClB,EAAA,CAAC,KAAM,CAAA,QAAQ,CAAC,CAAA;AAEnB,EAAA,MAAM,oBAAoB,MAAkB,EAAA;AAC5C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,MAAM,aAAa,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAChE,IAAA,MAAM,oBAAuB,GAAA,QAAA,CAAS,aAAe,EAAA,UAAA,EAAY,OAAO,CAAA;AACxE,IAAA,IACE,KAAK,SAAU,CAAA,iBAAA,CAAkB,OAAO,CACxC,KAAA,IAAA,CAAK,UAAU,oBAAoB,CAAA;AAEnC,MAAA;AAEF,IAAA,iBAAA,GAAoB,oBAAoB,CAAA;AACxC,IAAA,iBAAA,CAAkB,OAAU,GAAA,oBAAA;AAAA,GAC3B,EAAA,CAAC,iBAAmB,EAAA,OAAA,EAAS,aAAa,CAAC,CAAA;AAE9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAU,EAAA;AACf,IAAA,MAAM,mBAAmB,QAAS,CAAA,MAAA;AAAA,MAChC,CAAC,KAAoC,OAAY,KAAA;AAC/C,QAAM,MAAA,KAAA,GAAQ,IAAI,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,KAAA,KAAU,QAAQ,KAAK,CAAA;AAC7D,QAAA,IAAI,CAAC,KAAO,EAAA;AACV,UAAA,OAAO,GAAI,CAAA,MAAA,CAAO,CAAC,OAAO,CAAC,CAAA;AAAA,SACtB,MAAA;AACL,UAAO,OAAA,GAAA;AAAA;AACT,OACF;AAAA,MACA;AAAC,KACH;AAEA,IAAA,IAAI,CAAC,OAAS,EAAA;AACd,IAAA,MAAM,aAAa,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA,MAAA,CAAO,KAAK,SAAS,CAAA;AAChE,IAAA,MAAM,eAAkB,GAAA,QAAA,CAAS,gBAAkB,EAAA,UAAA,EAAY,OAAO,CAAA;AACtE,IAAA,IACE,KAAK,SAAU,CAAA,iBAAA,CAAkB,OAAO,CACxC,KAAA,IAAA,CAAK,UAAU,eAAe,CAAA;AAE9B,MAAA;AACF,IAAA,gBAAA,CAAiB,eAAe,CAAA;AAChC,IAAA,iBAAA,CAAkB,OAAU,GAAA,eAAA;AAAA,GAC3B,EAAA,CAAC,iBAAmB,EAAA,OAAA,EAAS,QAAQ,CAAC,CAAA;AAEzC,EAAA,MAAM,qBAAqB,EAAG,CAAA,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CAAA;AAE7D,EAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,IAAA,MAAM,EAAE,QAAAA,EAAAA,SAAAA,EAAU,KAAO,EAAA,GAAGC,OAAS,GAAA,cAAA;AACrC,IACE,uBAAA,GAAA;AAAA,MAAC,eAAgB,CAAA,QAAA;AAAA,MAAhB;AAAA,QACC,KAAO,EAAA;AAAA,UACL,OAAA;AAAA,UACA,iBAAA;AAAA,UACA,kBAAA,EAAoB,iBAAiB,EAAC;AAAA,UACtC,aAAA;AAAA,UACA,gBAAA;AAAA,UACA,KAAA;AAAA,UACA,UAAA,EAAY,CAAC,CAAC;AAAA,SAChB;AAAA,QAEA,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAK,EAAA,WAAA;AAAA,YACL,SAAW,EAAA,kBAAA;AAAA,YACX,KAAO,EAAA,aAAA;AAAA,YACP,UAAS,EAAA,UAAA;AAAA,YACT,IAAK,EAAA,MAAA;AAAA,YACL,sBAAqB,EAAA,MAAA;AAAA,YACrB,OAAS,EAAA,cAAA;AAAA,YACT,MAAQ,EAAA,aAAA;AAAA,YACR,SAAW,EAAA,gBAAA;AAAA,YACX,WAAa,EAAA,kBAAA;AAAA,YACb,uBAAuB,EAAA,aAAA;AAAA,YACvB,QAAU,EAAA,CAAA;AAAA,YACT,GAAGA,KAAAA;AAAA,YAEH,UAAAD,SAAW,GAAA;AAAA,cACV,KAAO,EAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAsB,KAAA;AACtC,gBAAO,OAAA,IAAA;AAAA,eACR;AAAA,aACF;AAAA;AAAA;AACH;AAAA,KACF;AAAA;AAIJ,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAS,GAAA,cAAA;AAC9B,EACE,uBAAA,GAAA;AAAA,IAAC,eAAgB,CAAA,QAAA;AAAA,IAAhB;AAAA,MACC,KAAO,EAAA;AAAA,QACL,OAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA;AAAA,QACA,kBAAA,EAAoB,iBAAiB,EAAC;AAAA,QACtC,gBAAA;AAAA,QACA,UAAY,EAAA,CAAC,CAAC,QAAA,IAAY,CAAC,CAAC;AAAA,OAC9B;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAK,EAAA,WAAA;AAAA,UACL,SAAW,EAAA,kBAAA;AAAA,UACX,KAAO,EAAA,aAAA;AAAA,UACP,UAAS,EAAA,UAAA;AAAA,UACT,IAAK,EAAA,MAAA;AAAA,UACL,OAAS,EAAA,cAAA;AAAA,UACT,MAAQ,EAAA,aAAA;AAAA,UACR,SAAW,EAAA,gBAAA;AAAA,UACX,WAAa,EAAA,kBAAA;AAAA,UACb,uBAAuB,EAAA,aAAA;AAAA,UACvB,QAAU,EAAA,CAAA;AAAA,UACT,GAAG,IAAA;AAAA,UAEH;AAAA;AAAA;AACH;AAAA,GACF;AAEJ,CAAA;AAEA,eAAA,CAAgB,WAAc,GAAA,UAAA;AAsBvB,MAAM,WAAW,MAAO,CAAA,MAAA;AAAA,EAC7B,WAAW,eAAe,CAAA;AAAA,EAG1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcE,MAAQ,EAAA,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYR,UAAY,EAAA;AAAA;AAEhB;;;;"}
|
package/dist/ListView.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { L as ListView, a as ListViewOption, b as ListViewOptionCell, L as default } from './ListView-
|
|
1
|
+
export { L as ListView, a as ListViewOption, b as ListViewOptionCell, L as default } from './ListView-pb3rIcze.js';
|
|
2
2
|
//# sourceMappingURL=ListView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchField-BKXkoWPs.js","sources":["../../hammer-icon/mdi/round/search.svg","../src/components/SearchField/SearchField.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" }));\nexport default SvgSearch;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n useId,\n useRef,\n ChangeEvent,\n useState,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport textfieldStyles from \"../TextField/TextField.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Search from \"@servicetitan/hammer-icon/mdi/round/search.svg\";\nimport styles from \"./SearchField.module.scss\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { Icon } from \"../Icon\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId, LayoutUtilProps, Size } from \"../../types\";\n\n/**\n * Props for the SearchField component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\" | \"prefix\" | \"required\" | \"children\">\n * @extends LayoutUtilProps\n */\nexport type SearchFieldProps = Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"size\" | \"prefix\" | \"required\" | \"children\"\n> &\n LayoutUtilProps & {\n /**\n * Size of the search field\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n /**\n * Whether the search field is disabled\n * @default false\n */\n disabled?: boolean;\n /**\n * Callback when the clear button is clicked\n */\n onClear?: () => void;\n } & DataTrackingId;\n\n/**\n * SearchField component for text input with search functionality.\n *\n * Features:\n * - Search icon prefix for visual clarity\n * - Clear button that appears when input has value\n * - Multiple size variants (small, medium, large)\n * - Controlled and uncontrolled modes\n * - Disabled and read-only states\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Automatic value detection for clear button visibility\n * - Search-specific input type and autocomplete settings\n * - Screen reader support with placeholder announcements\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <SearchField\n * placeholder=\"Search users...\"\n * onChange={(e) => setSearchTerm(e.target.value)}\n * onClear={() => setSearchTerm(\"\")}\n * />\n *\n * @example\n * <SearchField\n * size=\"large\"\n * value={searchValue}\n * onChange={(e) => setSearchValue(e.target.value)}\n * disabled={isLoading}\n * />\n */\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n function SearchField(props, ref) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n size,\n onChange,\n onClear,\n id: idProp,\n disabled,\n style,\n value,\n placeholder = \"Search...\",\n autoComplete = \"off\",\n ...rest\n } = componentProps;\n\n const [hasValue, setHasValue] = useState(\n rest.defaultValue || value ? true : false,\n );\n const placeholderUid = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const styleCombined = { ...style, ...layoutStyles };\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.value) {\n setHasValue(true);\n } else {\n setHasValue(false);\n }\n onChange?.(e);\n };\n\n useEffect(() => {\n if (typeof value === \"undefined\") return;\n if (value === \"\" || !value) {\n setHasValue(false);\n } else {\n setHasValue(true);\n }\n }, [value]);\n\n const handleClear = () => {\n if (!inputRef.current) return;\n if (disabled || rest.readOnly) return;\n onClear?.();\n if (value) {\n return;\n }\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, \"\");\n inputRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\n setHasValue(false);\n };\n\n const data = {\n value: props.value,\n defaultValue: props.defaultValue,\n disabled: props.disabled,\n readOnly: props.readOnly,\n size: props.size,\n };\n\n const trackingId = useTrackingId({\n name: \"SearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <div\n className={cx(\n textfieldStyles[\"textfield\"],\n styles[\"searchfield\"],\n className,\n )}\n data-anv=\"SearchField\"\n style={styleCombined}\n >\n <div\n className={cx(\n textfieldStyles[\"input-wrapper\"],\n styles[\"input-wrapper\"],\n {\n [textfieldStyles[\"small\"]]: size === \"small\",\n [textfieldStyles[\"large\"]]: size === \"large\",\n },\n )}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n <div aria-hidden className={textfieldStyles[\"prefix\"]}>\n <Icon aria-label=\"search\" svg={Search} />\n </div>\n <input\n className={cx(textfieldStyles[\"input\"])}\n ref={useMergeRefs([ref, inputRef])}\n onChange={handleOnChange}\n placeholder={placeholder}\n value={value}\n type=\"search\"\n autoComplete={autoComplete}\n disabled={disabled}\n aria-labelledby={placeholderUid}\n data-tracking-id={trackingId}\n {...rest}\n />\n <Icon\n aria-label=\"cancel\"\n svg={Close}\n role=\"button\"\n onClick={handleClear}\n className={styles[\"clear\"]}\n aria-disabled={disabled}\n style={{\n visibility: hasValue ? \"visible\" : \"hidden\",\n }}\n />\n </div>\n <SrOnly id={placeholderUid}>{placeholder}</SrOnly>\n </div>\n );\n },\n);\n"],"names":["SearchField","Search","Close"],"mappings":";;;;;;;;;;;;AACA,MAAM,SAAS,GAAG,CAAC,KAAK,qBAAqB,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,kBAAkB,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,8SAA8S,EAAE,CAAC,CAAC;;;;;;;;;AC6E1gB,MAAM,WAAc,GAAA,UAAA;AAAA,EACzB,SAASA,YAAY,CAAA,KAAA,EAAO,GAAK,EAAA;AAC/B,IAAA,MAAM,EAAE,YAAA,EAAc,cAAe,EAAA,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,EAAI,EAAA,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAc,GAAA,WAAA;AAAA,MACd,YAAe,GAAA,KAAA;AAAA,MACf,GAAG;AAAA,KACD,GAAA,cAAA;AAEJ,IAAM,MAAA,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA;AAAA,MAC9B,IAAA,CAAK,YAAgB,IAAA,KAAA,GAAQ,IAAO,GAAA;AAAA,KACtC;AACA,IAAA,MAAM,iBAAiB,KAAM,EAAA;AAE7B,IAAM,MAAA,QAAA,GAAW,OAAyB,IAAI,CAAA;AAE9C,IAAA,MAAM,aAAgB,GAAA,EAAE,GAAG,KAAA,EAAO,GAAG,YAAa,EAAA;AAElD,IAAM,MAAA,cAAA,GAAiB,CAAC,CAAqC,KAAA;AAC3D,MAAI,IAAA,CAAA,CAAE,OAAO,KAAO,EAAA;AAClB,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,OACX,MAAA;AACL,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA;AAEnB,MAAA,QAAA,GAAW,CAAC,CAAA;AAAA,KACd;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAI,IAAA,OAAO,UAAU,WAAa,EAAA;AAClC,MAAI,IAAA,KAAA,KAAU,EAAM,IAAA,CAAC,KAAO,EAAA;AAC1B,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,OACZ,MAAA;AACL,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA;AAClB,KACF,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,cAAc,MAAM;AACxB,MAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACvB,MAAI,IAAA,QAAA,IAAY,KAAK,QAAU,EAAA;AAC/B,MAAU,OAAA,IAAA;AACV,MAAA,IAAI,KAAO,EAAA;AACT,QAAA;AAAA;AAEF,MAAA,MAAM,yBAAyB,MAAO,CAAA,wBAAA;AAAA,QACpC,OAAO,gBAAiB,CAAA,SAAA;AAAA,QACxB;AAAA,OACC,EAAA,GAAA;AACH,MAAwB,sBAAA,EAAA,IAAA,CAAK,QAAS,CAAA,OAAA,EAAS,EAAE,CAAA;AACjD,MAAS,QAAA,CAAA,OAAA,CAAQ,cAAc,IAAI,KAAA,CAAM,SAAS,EAAE,OAAA,EAAS,IAAK,EAAC,CAAC,CAAA;AACpE,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,KACnB;AAEA,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,cAAc,KAAM,CAAA,YAAA;AAAA,MACpB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,MAAM,KAAM,CAAA;AAAA,KACd;AAEA,IAAA,MAAM,aAAa,aAAc,CAAA;AAAA,MAC/B,IAAM,EAAA,aAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAa,EAAA,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,KACxC,CAAA;AAED,IACE,uBAAA,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAA,EAAA;AAAA,UACT,gBAAgB,WAAW,CAAA;AAAA,UAC3B,OAAO,aAAa,CAAA;AAAA,UACpB;AAAA,SACF;AAAA,QACA,UAAS,EAAA,aAAA;AAAA,QACT,KAAO,EAAA,aAAA;AAAA,QAEP,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAW,EAAA,EAAA;AAAA,gBACT,gBAAgB,eAAe,CAAA;AAAA,gBAC/B,OAAO,eAAe,CAAA;AAAA,gBACtB;AAAA,kBACE,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAS,KAAA,OAAA;AAAA,kBACrC,CAAC,eAAA,CAAgB,OAAO,CAAC,GAAG,IAAS,KAAA;AAAA;AACvC,eACF;AAAA,cACA,IAAK,EAAA,cAAA;AAAA,cACL,OAAS,EAAA,MAAM,QAAS,CAAA,OAAA,EAAS,KAAM,EAAA;AAAA,cAEvC,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,KAAI,EAAA,EAAA,aAAA,EAAW,IAAC,EAAA,SAAA,EAAW,eAAgB,CAAA,QAAQ,CAClD,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,YAAA,EAAW,QAAS,EAAA,GAAA,EAAKC,WAAQ,CACzC,EAAA,CAAA;AAAA,gCACA,GAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,SAAW,EAAA,EAAA,CAAG,eAAgB,CAAA,OAAO,CAAC,CAAA;AAAA,oBACtC,GAAK,EAAA,YAAA,CAAa,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,oBACjC,QAAU,EAAA,cAAA;AAAA,oBACV,WAAA;AAAA,oBACA,KAAA;AAAA,oBACA,IAAK,EAAA,QAAA;AAAA,oBACL,YAAA;AAAA,oBACA,QAAA;AAAA,oBACA,iBAAiB,EAAA,cAAA;AAAA,oBACjB,kBAAkB,EAAA,UAAA;AAAA,oBACjB,GAAG;AAAA;AAAA,iBACN;AAAA,gCACA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,YAAW,EAAA,QAAA;AAAA,oBACX,GAAK,EAAAC,QAAA;AAAA,oBACL,IAAK,EAAA,QAAA;AAAA,oBACL,OAAS,EAAA,WAAA;AAAA,oBACT,SAAA,EAAW,OAAO,OAAO,CAAA;AAAA,oBACzB,eAAe,EAAA,QAAA;AAAA,oBACf,KAAO,EAAA;AAAA,sBACL,UAAA,EAAY,WAAW,SAAY,GAAA;AAAA;AACrC;AAAA;AACF;AAAA;AAAA,WACF;AAAA,0BACC,GAAA,CAAA,MAAA,EAAA,EAAO,EAAI,EAAA,cAAA,EAAiB,QAAY,EAAA,WAAA,EAAA;AAAA;AAAA;AAAA,KAC3C;AAAA;AAGN;;;;"}
|
|
1
|
+
{"version":3,"file":"SearchField-Bb0uObwG.js","sources":["../../hammer-icon/mdi/round/search.svg","../src/components/SearchField/SearchField.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" }));\nexport default SvgSearch;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n useId,\n useRef,\n ChangeEvent,\n useState,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport textfieldStyles from \"../TextField/TextField.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Search from \"@servicetitan/hammer-icon/mdi/round/search.svg\";\nimport styles from \"./SearchField.module.scss\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { Icon } from \"../Icon\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId, LayoutUtilProps, Size } from \"../../types\";\n\n/**\n * Props for the SearchField component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"size\" | \"prefix\" | \"required\" | \"children\">\n * @extends LayoutUtilProps\n */\nexport type SearchFieldProps = Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"size\" | \"prefix\" | \"required\" | \"children\"\n> &\n LayoutUtilProps & {\n /**\n * Size of the search field\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n /**\n * Whether the search field is disabled\n * @default false\n */\n disabled?: boolean;\n /**\n * Callback when the clear button is clicked\n */\n onClear?: () => void;\n } & DataTrackingId;\n\n/**\n * SearchField component for text input with search functionality.\n *\n * Features:\n * - Search icon prefix for visual clarity\n * - Clear button that appears when input has value\n * - Multiple size variants (small, medium, large)\n * - Controlled and uncontrolled modes\n * - Disabled and read-only states\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Automatic value detection for clear button visibility\n * - Search-specific input type and autocomplete settings\n * - Screen reader support with placeholder announcements\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <SearchField\n * placeholder=\"Search users...\"\n * onChange={(e) => setSearchTerm(e.target.value)}\n * onClear={() => setSearchTerm(\"\")}\n * />\n *\n * @example\n * <SearchField\n * size=\"large\"\n * value={searchValue}\n * onChange={(e) => setSearchValue(e.target.value)}\n * disabled={isLoading}\n * />\n */\nexport const SearchField = forwardRef<HTMLInputElement, SearchFieldProps>(\n function SearchField(props, ref) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n size,\n onChange,\n onClear,\n id: idProp,\n disabled,\n style,\n value,\n placeholder = \"Search...\",\n autoComplete = \"off\",\n ...rest\n } = componentProps;\n\n const [hasValue, setHasValue] = useState(\n rest.defaultValue || value ? true : false,\n );\n const placeholderUid = useId();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const styleCombined = { ...style, ...layoutStyles };\n\n const handleOnChange = (e: ChangeEvent<HTMLInputElement>) => {\n if (e.target.value) {\n setHasValue(true);\n } else {\n setHasValue(false);\n }\n onChange?.(e);\n };\n\n useEffect(() => {\n if (typeof value === \"undefined\") return;\n if (value === \"\" || !value) {\n setHasValue(false);\n } else {\n setHasValue(true);\n }\n }, [value]);\n\n const handleClear = () => {\n if (!inputRef.current) return;\n if (disabled || rest.readOnly) return;\n onClear?.();\n if (value) {\n return;\n }\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(inputRef.current, \"\");\n inputRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\n setHasValue(false);\n };\n\n const data = {\n value: props.value,\n defaultValue: props.defaultValue,\n disabled: props.disabled,\n readOnly: props.readOnly,\n size: props.size,\n };\n\n const trackingId = useTrackingId({\n name: \"SearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <div\n className={cx(\n textfieldStyles[\"textfield\"],\n styles[\"searchfield\"],\n className,\n )}\n data-anv=\"SearchField\"\n style={styleCombined}\n >\n <div\n className={cx(\n textfieldStyles[\"input-wrapper\"],\n styles[\"input-wrapper\"],\n {\n [textfieldStyles[\"small\"]]: size === \"small\",\n [textfieldStyles[\"large\"]]: size === \"large\",\n },\n )}\n role=\"presentation\"\n onClick={() => inputRef.current?.focus()}\n >\n <div aria-hidden className={textfieldStyles[\"prefix\"]}>\n <Icon aria-label=\"search\" svg={Search} />\n </div>\n <input\n className={cx(textfieldStyles[\"input\"])}\n ref={useMergeRefs([ref, inputRef])}\n onChange={handleOnChange}\n placeholder={placeholder}\n value={value}\n type=\"search\"\n autoComplete={autoComplete}\n disabled={disabled}\n aria-labelledby={placeholderUid}\n data-tracking-id={trackingId}\n {...rest}\n />\n <Icon\n aria-label=\"cancel\"\n svg={Close}\n role=\"button\"\n onClick={handleClear}\n className={styles[\"clear\"]}\n aria-disabled={disabled}\n style={{\n visibility: hasValue ? \"visible\" : \"hidden\",\n }}\n />\n </div>\n <SrOnly id={placeholderUid}>{placeholder}</SrOnly>\n </div>\n );\n },\n);\n"],"names":["SearchField","Search","Close"],"mappings":"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"}
|
package/dist/SearchField.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as SearchField } from './SearchField-
|
|
1
|
+
export { S as SearchField } from './SearchField-Bb0uObwG.js';
|
|
2
2
|
//# sourceMappingURL=SearchField.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useContext, createContext, useState, useId, forwardRef, useLayoutEffect } from 'react';
|
|
3
3
|
import { c as cx } from './index-tZvMCc77.js';
|
|
4
|
-
import { C as CheckboxGroup, a as Checkbox } from './Checkbox-
|
|
4
|
+
import { C as CheckboxGroup, a as Checkbox } from './Checkbox-Dl4KTwEJ.js';
|
|
5
5
|
import { R as RadioGroup, a as Radio } from './RadioGroup-C_4buUtG.js';
|
|
6
6
|
import { C as Card } from './Card-vTYeSkxt.js';
|
|
7
7
|
import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
|
|
@@ -221,4 +221,4 @@ const SelectCard = Object.assign(SelectCardElement, {
|
|
|
221
221
|
});
|
|
222
222
|
|
|
223
223
|
export { SelectCard as S, SelectCardElement as a, SelectCardGroup as b };
|
|
224
|
-
//# sourceMappingURL=SelectCard-
|
|
224
|
+
//# sourceMappingURL=SelectCard-BTYZg9TG.js.map
|