@servicetitan/anvil2 1.46.2 → 1.46.4
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 +34 -0
- package/dist/{Avatar-CyGjhToG.js → Avatar-3d5Kv2CF.js} +2 -2
- package/dist/{Avatar-CyGjhToG.js.map → Avatar-3d5Kv2CF.js.map} +1 -1
- package/dist/{Avatar-D07f9NH_.js → Avatar-DJ3oJNsv.js} +2 -2
- package/dist/{Avatar-D07f9NH_.js.map → Avatar-DJ3oJNsv.js.map} +1 -1
- package/dist/Avatar.js +2 -2
- package/dist/{Calendar-X9qUi6Vx.js → Calendar-BqOvsaby.js} +246 -195
- package/dist/Calendar-BqOvsaby.js.map +1 -0
- package/dist/Calendar.js +1 -1
- package/dist/{Checkbox-CcYtto5f.js → Checkbox-C5PX8wur.js} +2 -2
- package/dist/{Checkbox-CcYtto5f.js.map → Checkbox-C5PX8wur.js.map} +1 -1
- package/dist/{Checkbox-BDohwHXQ.js → Checkbox-DAODkzN3.js} +2 -2
- package/dist/{Checkbox-BDohwHXQ.js.map → Checkbox-DAODkzN3.js.map} +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/{Chip-Bz-vlQ4D.js → Chip-DLU13qe-.js} +2 -2
- package/dist/{Chip-Bz-vlQ4D.js.map → Chip-DLU13qe-.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-DQmW8Tyl.js → Combobox-DO8cIvRQ.js} +6 -6
- package/dist/{Combobox-DQmW8Tyl.js.map → Combobox-DO8cIvRQ.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DateField-C43nfkbx.js → DateField-DLqKbCcm.js} +35 -101
- package/dist/DateField-DLqKbCcm.js.map +1 -0
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-g7n5QYww.js → DateFieldRange-DI-iF-sd.js} +54 -55
- package/dist/DateFieldRange-DI-iF-sd.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-D3tneqeG.js → DateFieldSingle-BXakaSIE.js} +50 -52
- package/dist/DateFieldSingle-BXakaSIE.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-3JBVj3wn.js → DateFieldYearless-BmeKGaDc.js} +2 -2
- package/dist/{DateFieldYearless-3JBVj3wn.js.map → DateFieldYearless-BmeKGaDc.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DaysOfTheWeek-RcPgDoM3.js → DaysOfTheWeek-DPH13VCK.js} +3 -3
- package/dist/{DaysOfTheWeek-RcPgDoM3.js.map → DaysOfTheWeek-DPH13VCK.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-FNJ16gY6.js → Dialog-xsgqM6e1.js} +13 -20
- package/dist/Dialog-xsgqM6e1.js.map +1 -0
- package/dist/Dialog.js +1 -1
- package/dist/DndSort.js +46 -6
- package/dist/DndSort.js.map +1 -1
- package/dist/{Drawer-DT31CMRd.js → Drawer-DpN7wUNy.js} +14 -21
- package/dist/Drawer-DpN7wUNy.js.map +1 -0
- package/dist/Drawer.js +1 -1
- package/dist/{FieldLabel-BP8QK5UR.js → FieldLabel-Bgl3iu13.js} +2 -2
- package/dist/{FieldLabel-BP8QK5UR.js.map → FieldLabel-Bgl3iu13.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{InputMask-CPuYMcw9.js → InputMask-B13KumrK.js} +2 -2
- package/dist/{InputMask-CPuYMcw9.js.map → InputMask-B13KumrK.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-BJI8BQJ-.js → ListView-C-cVQZHp.js} +3 -3
- package/dist/{ListView-BJI8BQJ-.js.map → ListView-C-cVQZHp.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-CUhMbFm2.js → Listbox-DxGx630W.js} +2 -2
- package/dist/{Listbox-CUhMbFm2.js.map → Listbox-DxGx630W.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-t_11BIhU.js → Menu-DUZqzpwg.js} +6 -8
- package/dist/Menu-DUZqzpwg.js.map +1 -0
- package/dist/Menu.js +1 -1
- package/dist/{NumberField-Bjf9Tyvf.js → NumberField-DWPAy1eG.js} +7 -7
- package/dist/{NumberField-Bjf9Tyvf.js.map → NumberField-DWPAy1eG.js.map} +1 -1
- package/dist/NumberField.css +9 -6
- package/dist/NumberField.js +1 -1
- package/dist/{Page-BAyXnhz2.js → Page-CRuqAlNu.js} +7 -7
- package/dist/{Page-BAyXnhz2.js.map → Page-CRuqAlNu.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DCBic619.js → Pagination-B_G9QcHf.js} +3 -3
- package/dist/{Pagination-DCBic619.js.map → Pagination-B_G9QcHf.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-CrksxqKk.js → Popover-v8R920kj.js} +135 -200
- package/dist/Popover-v8R920kj.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-CgsAW2d8.js → ProgressBar-BWN2yv1s.js} +2 -2
- package/dist/{ProgressBar-CgsAW2d8.js.map → ProgressBar-BWN2yv1s.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-C_rvxw74.js → Radio-C5riI-do.js} +2 -2
- package/dist/{Radio-C_rvxw74.js.map → Radio-C5riI-do.js.map} +1 -1
- package/dist/Radio.js +2 -2
- package/dist/{RadioGroup-DxBblSrx.js → RadioGroup-B7O06pVu.js} +2 -2
- package/dist/{RadioGroup-DxBblSrx.js.map → RadioGroup-B7O06pVu.js.map} +1 -1
- package/dist/{SearchField-Bb0uObwG.js → SearchField-CbwGErC4.js} +2 -2
- package/dist/{SearchField-Bb0uObwG.js.map → SearchField-CbwGErC4.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SegmentedControl-DC4BpdH5.js → SegmentedControl-CLDdes8W.js} +2 -2
- package/dist/{SegmentedControl-DC4BpdH5.js.map → SegmentedControl-CLDdes8W.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-DunNE9R3.js → SelectCard-Ca07K1FW.js} +3 -3
- package/dist/{SelectCard-DunNE9R3.js.map → SelectCard-Ca07K1FW.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectTrigger-BYysLREL.js → SelectTrigger-CaXX1SHG.js} +3 -3
- package/dist/{SelectTrigger-BYysLREL.js.map → SelectTrigger-CaXX1SHG.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-DqUpJgzk.js → SelectTriggerBase-C7TLCna1.js} +3 -3
- package/dist/{SelectTriggerBase-DqUpJgzk.js.map → SelectTriggerBase-C7TLCna1.js.map} +1 -1
- package/dist/{SideNav-B9AWmF_H.js → SideNav-nqq5sAwz.js} +2 -2
- package/dist/{SideNav-B9AWmF_H.js.map → SideNav-nqq5sAwz.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/{Stepper-DHTrvfXw.js → Stepper-DQ_Hm-AI.js} +2 -2
- package/dist/{Stepper-DHTrvfXw.js.map → Stepper-DQ_Hm-AI.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Tab-0zx9hsw8.js → Tab-CzNx3IdF.js} +2 -2
- package/dist/{Tab-0zx9hsw8.js.map → Tab-CzNx3IdF.js.map} +1 -1
- package/dist/Tab.js +1 -1
- package/dist/{TextField-CFWs3lm9.js → TextField-D9gD-34Q.js} +3 -3
- package/dist/{TextField-CFWs3lm9.js.map → TextField-D9gD-34Q.js.map} +1 -1
- package/dist/{TextField-Cge6IRo5.js → TextField-uCHgwO5F.js} +2 -2
- package/dist/{TextField-Cge6IRo5.js.map → TextField-uCHgwO5F.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-CXd3NKkW.js → Textarea-B2-6m291.js} +3 -3
- package/dist/{Textarea-CXd3NKkW.js.map → Textarea-B2-6m291.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-4v5aCwiG.js → TimeField-B5Jgy-Zg.js} +21 -8
- package/dist/TimeField-B5Jgy-Zg.js.map +1 -0
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-bON5Xc1P.js → Toaster-CHyB-Mxs.js} +3 -3
- package/dist/{Toaster-bON5Xc1P.js.map → Toaster-CHyB-Mxs.js.map} +1 -1
- package/dist/{Toaster-D-rNSLTq.js → Toaster-CyiGDKMh.js} +3 -3
- package/dist/{Toaster-D-rNSLTq.js.map → Toaster-CyiGDKMh.js.map} +1 -1
- package/dist/{Toolbar-B2Jsuptz.js → Toolbar-DNErV9v8.js} +16 -15
- package/dist/Toolbar-DNErV9v8.js.map +1 -0
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-CtCLw_vx.js → Tooltip-DhtVlhah.js} +2 -2
- package/dist/{Tooltip-CtCLw_vx.js.map → Tooltip-DhtVlhah.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/beta.js +1 -1
- package/dist/components/Calendar/Calendar.d.ts +5 -0
- package/dist/components/Calendar/CalendarNowButton.d.ts +3 -1
- package/dist/components/Checkbox/Checkbox.d.ts +1 -1
- package/dist/components/Dialog/internal/useInitialFocus.d.ts +15 -0
- package/dist/components/DndSort/internal/DndSortOverlay.d.ts +1 -1
- package/dist/components/NumberField/NumberField.d.ts +2 -2
- package/dist/components/Popover/Popover.d.ts +136 -1
- package/dist/components/Popover/PopoverTrigger.d.ts +0 -1
- package/dist/components/Popover/internal/PopoverContext.d.ts +5 -3
- package/dist/components/Popover/internal/usePopoverContext.d.ts +6 -4
- package/dist/components/Radio/Radio.d.ts +1 -1
- package/dist/hooks/useMergeRefs/useMergeRefs.d.ts +11 -0
- package/dist/index.js +43 -43
- package/dist/internal/components/index.d.ts +1 -0
- package/dist/internal/hooks/index.d.ts +2 -2
- package/dist/internal/hooks/useFocusWithin/useFocusWithin.d.ts +2 -1
- package/dist/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.d.ts +0 -1
- package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +5 -1
- package/dist/internal/hooks/usePlatform/index.d.ts +1 -1
- package/dist/internal/index.d.ts +5 -0
- package/dist/internal/types/argTypes.d.ts +154 -0
- package/dist/internal/types/index.d.ts +1 -0
- package/dist/{useFocusWithin-BhhgRXdZ.js → useFocusWithin-hi77jsrB.js} +6 -3
- package/dist/useFocusWithin-hi77jsrB.js.map +1 -0
- package/dist/useInitialFocus-CAFMgbJG.js +130 -0
- package/dist/useInitialFocus-CAFMgbJG.js.map +1 -0
- package/dist/useMergeRefs-Dfmtq9cI.js +22 -0
- package/dist/useMergeRefs-Dfmtq9cI.js.map +1 -0
- package/dist/useMergeRefs.js +1 -1
- package/dist/{useOnClickOutside-B1ddwORK.js → useOnClickOutside-C5AZE_I6.js} +6 -65
- package/dist/useOnClickOutside-C5AZE_I6.js.map +1 -0
- package/dist/utils-Dh3aegV3.js +50 -0
- package/dist/utils-Dh3aegV3.js.map +1 -0
- package/package.json +1 -1
- package/dist/Calendar-X9qUi6Vx.js.map +0 -1
- package/dist/DateField-C43nfkbx.js.map +0 -1
- package/dist/DateFieldRange-g7n5QYww.js.map +0 -1
- package/dist/DateFieldSingle-D3tneqeG.js.map +0 -1
- package/dist/Dialog-FNJ16gY6.js.map +0 -1
- package/dist/Drawer-DT31CMRd.js.map +0 -1
- package/dist/Menu-t_11BIhU.js.map +0 -1
- package/dist/Popover-CrksxqKk.js.map +0 -1
- package/dist/TimeField-4v5aCwiG.js.map +0 -1
- package/dist/Toolbar-B2Jsuptz.js.map +0 -1
- package/dist/components/DateFieldSingle/internal/useDateFieldOrchestration.d.ts +0 -17
- package/dist/useDateFieldOrchestration-DyAc3gPJ.js +0 -138
- package/dist/useDateFieldOrchestration-DyAc3gPJ.js.map +0 -1
- package/dist/useDialogTransitionStates-C1TtiwA_.js +0 -64
- package/dist/useDialogTransitionStates-C1TtiwA_.js.map +0 -1
- package/dist/useFocusWithin-BhhgRXdZ.js.map +0 -1
- package/dist/useMergeRefs-Bde85AWI.js +0 -21
- package/dist/useMergeRefs-Bde85AWI.js.map +0 -1
- package/dist/useOnClickOutside-B1ddwORK.js.map +0 -1
- package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js +0 -18
- package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateField-C43nfkbx.js","sources":["../src/components/DateField/internal/isoToDateFormat.ts","../src/components/DateField/internal/DateFieldLegacy/DateFieldLegacy.tsx","../src/components/DateField/DateField.tsx"],"sourcesContent":["import { DateTime } from \"luxon\";\n\nexport const isoToDateFormat = (date: string, format: string) => {\n // Returns a string of the proper format for ISO strings and the input date string for non-ISO strings\n const luxonDate = DateTime.fromISO(date);\n if (luxonDate.isValid) {\n return luxonDate.toFormat(format);\n }\n return date;\n};\n","import {\n ChangeEvent,\n ChangeEventHandler,\n FocusEventHandler,\n KeyboardEventHandler,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { InputMask } from \"../../../InputMask\";\nimport {\n TextField,\n TextFieldProps,\n} from \"../../../TextField/internal/TextField\";\nimport { PopoverLegacy } from \"../../../Popover/internal/PopoverLegacy\";\nimport {\n CalendarProps,\n CalendarValue,\n CalendarRangeValue,\n} from \"../../../Calendar/Calendar\";\nimport { Calendar } from \"../../../Calendar\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { IanaZone, Locale } from \"../../../../types\";\nimport { Icon } from \"../../../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateTime } from \"luxon\";\nimport { isValidDate, toDateString } from \"../../../Calendar/internal/utils\";\n\nconst RANGE_DIVIDER = \" — \";\n\ninterface DateFieldLegacyCommonProps {\n format?: \"MM/dd/yyyy\" | \"dd/MM/yyyy\";\n locale?: Locale;\n defaultTimeZone?: IanaZone;\n openCalendar?: boolean;\n disableHint?: boolean;\n}\n\nexport interface LegacyDateSelect {\n value: string;\n date: string | null | undefined;\n isValid: boolean;\n}\n\nexport interface LegacyDateRangeSelect {\n start?: LegacyDateSelect;\n end?: LegacyDateSelect;\n value: string;\n}\n\ninterface DateFieldLegacySingleProps {\n onChange?: (\n event: ChangeEvent<HTMLInputElement>,\n data: LegacyDateSelect,\n ) => void;\n defaultValue?: string;\n range?: false;\n}\n\ninterface DateFieldLegacyRangeProps {\n onChange?: (\n event: ChangeEvent<HTMLInputElement>,\n data: LegacyDateRangeSelect,\n ) => void;\n defaultValue?: { start?: string; end?: string };\n range: true;\n}\n\nexport type DateFieldLegacyProps = Omit<CalendarProps, \"onChange\"> &\n Omit<\n TextFieldProps,\n \"prefix\" | \"suffix\" | \"hint\" | \"onChange\" | \"showCounter\"\n > &\n DateFieldLegacyCommonProps &\n (DateFieldLegacySingleProps | DateFieldLegacyRangeProps);\n\nexport const DateFieldLegacy = forwardRef<\n HTMLInputElement,\n DateFieldLegacyProps\n>(\n (\n {\n // DateFieldLegacy\n openCalendar,\n onFocus,\n onBlur,\n onChange,\n format = \"MM/dd/yyyy\",\n disableHint,\n\n // Calendar\n minDate,\n maxDate,\n unavailableDates,\n unavailable,\n startDay,\n defaultValue,\n value: inputValue,\n\n // Shared\n locale = Intl.DateTimeFormat().resolvedOptions().locale as Locale,\n defaultTimeZone = Intl.DateTimeFormat().resolvedOptions()\n .timeZone as IanaZone,\n range,\n\n // Input\n required,\n ...inputProps\n },\n ref,\n ) => {\n const [open, setOpen] = useState(openCalendar || false);\n const [internalValue, setInternalValue] = useState<\n LegacyDateSelect | LegacyDateRangeSelect | undefined\n >();\n const [disableFocusLock, setDisableFocusLock] = useState(true);\n const inputRef = useRef<HTMLInputElement>(null);\n const calRef = useRef<HTMLDivElement>(null);\n const iconRef = useRef<HTMLElement>(null);\n const docRef = useRef<Document | Node | null>(null);\n const floatRef = useRef<HTMLDivElement>(null);\n const isClickOutside = useRef(false);\n const formatMask = format.replace(/[^/]/g, \"_\");\n const hint = useMemo(\n () => (disableHint ? undefined : `Format: ${format.replace(/M/g, \"m\")}`),\n [format, disableHint],\n );\n\n useEffect(() => {\n if (!docRef.current) {\n if (document != null) {\n docRef.current = document;\n return;\n }\n const doc = inputRef.current?.closest(\"body\")?.ownerDocument;\n if (doc) {\n docRef.current = doc;\n }\n\n if (docRef.current == null && inputRef.current?.parentNode != null) {\n let node: Node = inputRef.current?.parentNode;\n while (node.parentNode != null) {\n node = node.parentNode;\n }\n docRef.current = node;\n }\n }\n const clickOutHandler = (ev: Event) => {\n // this is more accurate, especially in shadow doms\n const realTarget = ev.composedPath()[0] as Node;\n\n if (\n !floatRef.current?.contains(realTarget) &&\n !iconRef.current?.contains(realTarget) &&\n inputRef.current !== realTarget\n ) {\n setOpen(false);\n setDisableFocusLock(true);\n onBlur?.(ev as unknown as React.FocusEvent<HTMLInputElement>);\n }\n };\n\n if (open) {\n docRef.current?.addEventListener(\"click\", clickOutHandler);\n } else {\n docRef.current?.removeEventListener(\"click\", clickOutHandler);\n }\n\n return () => {\n docRef.current?.removeEventListener(\"click\", clickOutHandler);\n };\n }, [open, onBlur]);\n\n useEffect(() => {\n if (range) {\n let start;\n let end;\n if (typeof inputValue === \"string\") {\n const parts = inputValue.split(RANGE_DIVIDER);\n start = parts[0];\n end = parts[1];\n } else {\n start = inputValue?.start ?? \"\";\n end = inputValue?.end ?? \"\";\n }\n const startDate = DateTime.fromFormat(start ?? \"\", format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const endDate = DateTime.fromFormat(end ?? \"\", format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const newData: LegacyDateRangeSelect = {\n start: {\n value: start,\n date: toDateString(startDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n startDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n end: {\n value: end,\n date: toDateString(endDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n endDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n value: `${start || formatMask}${RANGE_DIVIDER}${end || formatMask}`,\n };\n setInternalValue(newData);\n } else {\n if (typeof inputValue !== \"string\") return;\n const inputDate = DateTime.fromFormat(inputValue, format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const newData: LegacyDateSelect = {\n value: inputValue,\n date: toDateString(inputDate),\n isValid:\n inputDate.isValid &&\n isValidDate(\n inputDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n };\n setInternalValue(newData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [inputValue]);\n\n const mask: string = useMemo(() => {\n const maskPart = format.replace(/[Mdy]/g, \"9\");\n if (range) {\n return maskPart + RANGE_DIVIDER + maskPart;\n } else {\n return maskPart;\n }\n }, [format, range]);\n\n useEffect(() => {\n // Set default only if uncontrolled and we have a defaultValue.\n if (typeof inputValue === \"string\") return;\n if (defaultValue) {\n if (range) {\n // Get input value\n const defValStart = defaultValue.start;\n const defValEnd = defaultValue.end;\n\n const initValStart =\n defValStart +\n (formatMask + RANGE_DIVIDER + formatMask).slice(\n defValStart?.length,\n );\n const initValEnd =\n defValEnd +\n (formatMask + RANGE_DIVIDER + formatMask).slice(defValEnd?.length);\n const newValue = initValStart + RANGE_DIVIDER + initValEnd;\n\n // Set calendar value\n const inputDateStart = DateTime.fromFormat(\n defValStart || \"\",\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const inputDateEnd = DateTime.fromFormat(defValEnd || \"\", format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n\n const isValidStart =\n inputDateStart.isValid &&\n isValidDate(\n inputDateStart,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n );\n\n const isValidEnd =\n inputDateEnd.isValid &&\n isValidDate(\n inputDateEnd,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n );\n const initCalendarValue: LegacyDateRangeSelect = {\n start: {\n value: initValStart,\n date: toDateString(inputDateStart),\n isValid: isValidStart,\n },\n end: {\n value: initValEnd,\n date: toDateString(inputDateEnd),\n isValid: isValidEnd,\n },\n value: newValue,\n };\n setInternalValue(initCalendarValue);\n } else {\n // Get input value\n const defVal = defaultValue as string;\n const initVal = defVal + formatMask.slice(defVal.length);\n\n // Set calendar value\n const inputDate = DateTime.fromFormat(defVal, format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const isValid =\n inputDate.isValid &&\n isValidDate(\n inputDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n );\n const initCalendarValue: LegacyDateSelect = {\n value: initVal,\n date: toDateString(inputDate),\n isValid,\n };\n setInternalValue(initCalendarValue);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const focusToCalendar = () => {\n if (calRef.current) {\n const currentFocusable =\n calRef.current.querySelectorAll('[tabindex = \"0\"]')[0];\n if (currentFocusable) {\n (currentFocusable as HTMLButtonElement).focus();\n }\n }\n };\n\n const handleInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (ev) => {\n switch (ev.key) {\n case \"Tab\":\n setOpen(false);\n break;\n case \"ArrowDown\":\n if (!open) {\n setOpen(true);\n setTimeout(focusToCalendar, 100);\n } else {\n focusToCalendar();\n }\n }\n };\n\n const handleInputChange: ChangeEventHandler<HTMLInputElement> = (ev) => {\n if (range) {\n const parts = ev.target.value.split(RANGE_DIVIDER);\n if (parts.length !== 2) return;\n const startDate = DateTime.fromFormat(parts[0], format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const endDate = DateTime.fromFormat(parts[1], format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const returnValue: LegacyDateRangeSelect = {\n start: {\n value: parts[0],\n date: toDateString(startDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n startDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n end: {\n value: parts[1],\n date: toDateString(endDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n endDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n value: ev.target.value,\n };\n if (!inputValue) {\n setInternalValue(returnValue);\n }\n onChange?.(ev, returnValue);\n } else {\n if (ev.target.value === (internalValue as LegacyDateSelect)?.date)\n return;\n // Check if the value is a real date.\n const inputDate = DateTime.fromFormat(ev.target.value, format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const returnValue: LegacyDateSelect = {\n value: ev.target.value,\n date: toDateString(inputDate),\n isValid:\n inputDate.isValid &&\n isValidDate(\n inputDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n };\n if (!inputValue) {\n setInternalValue(returnValue);\n }\n onChange?.(ev, returnValue);\n }\n };\n\n const handleInputBlur: React.FocusEventHandler<HTMLInputElement> = (ev) => {\n if (isClickOutside.current) {\n isClickOutside.current = false;\n return;\n }\n\n if (!calRef.current?.contains(ev.relatedTarget as Node)) {\n setOpen(false);\n onBlur?.(ev);\n }\n };\n\n const handleCalendarKeyDown: KeyboardEventHandler<HTMLDivElement> = (\n ev,\n ) => {\n switch (ev.key) {\n case \"Escape\":\n setDisableFocusLock(true);\n inputRef.current?.focus();\n break;\n }\n };\n\n const handleCalendarBlur: React.FocusEventHandler<HTMLDivElement> = (\n ev,\n ) => {\n if (\n !(\n inputRef.current === ev.currentTarget ||\n calRef.current === ev.currentTarget\n )\n ) {\n setOpen(false);\n onBlur?.(ev);\n }\n if (!(calRef.current === ev.currentTarget)) {\n setDisableFocusLock(true);\n }\n };\n\n const handleCalendarFocus: React.FocusEventHandler = (_event) => {\n if (disableFocusLock) {\n setDisableFocusLock(false);\n }\n };\n\n const handleCalendarSelection = (\n data: { value: CalendarValue } | { value: CalendarRangeValue },\n ) => {\n if (range) {\n const calSelectData = data as { value: CalendarRangeValue };\n const startVal = DateTime.fromISO(calSelectData?.value?.start || \"\", {\n zone: defaultTimeZone,\n });\n const endVal = DateTime.fromISO(calSelectData?.value?.end || \"\", {\n zone: defaultTimeZone,\n });\n let newValue = \"\";\n const newInternalValue: LegacyDateRangeSelect = { value: \"\" };\n if (startVal.isValid) {\n newInternalValue.start = {\n value: startVal.toFormat(format),\n date: calSelectData?.value?.start,\n isValid: true,\n };\n newValue += startVal.toFormat(format);\n } else {\n newValue += formatMask;\n }\n newValue += RANGE_DIVIDER;\n if (endVal.isValid) {\n newInternalValue.end = {\n value: endVal.toFormat(format),\n date: calSelectData?.value?.end,\n isValid: true,\n };\n newValue += endVal.toFormat(format);\n } else {\n newValue += formatMask;\n }\n if (typeof inputValue !== \"string\") {\n setInternalValue(newInternalValue);\n }\n newInternalValue.value = newValue;\n const event = {\n target: {\n value: newValue,\n },\n } as ChangeEvent<HTMLInputElement>;\n onChange?.(event, newInternalValue);\n } else {\n const calSelectData = data as { value: CalendarValue };\n const val = DateTime.fromISO(calSelectData.value || \"\", {\n zone: defaultTimeZone,\n });\n const newValue = val.toFormat(format);\n const newInternalValue: LegacyDateSelect = {\n value: newValue,\n date: calSelectData.value,\n isValid:\n val.isValid &&\n isValidDate(\n val,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n };\n if (typeof inputValue !== \"string\") {\n setInternalValue(newInternalValue);\n }\n const event = {\n target: {\n value: newValue,\n },\n } as ChangeEvent<HTMLInputElement>;\n onChange?.(event, newInternalValue);\n }\n };\n\n const handleInputFocus: FocusEventHandler<HTMLInputElement> = (ev) => {\n if (!open) {\n setOpen(true);\n onFocus?.(ev);\n }\n };\n\n return (\n <PopoverLegacy\n open={openCalendar || open}\n modal\n placement=\"bottom-start\"\n disableFlipFallback\n disableTriggerFocus\n disableFocusLock={disableFocusLock}\n >\n <PopoverLegacy.Trigger>\n {({ ref: popoverRef, ...props }) => (\n <>\n <InputMask\n mask={mask}\n inputProps={{\n onKeyDown: handleInputKeyDown,\n onBlur: handleInputBlur,\n onChange: handleInputChange,\n onFocus: handleInputFocus,\n }}\n value={internalValue?.value || \"\"}\n {...props}\n // eslint-disable-next-line react-hooks/rules-of-hooks\n ref={useMergeRefs([popoverRef, inputRef])}\n >\n <TextField\n hint={hint}\n ref={ref}\n prefix={<Icon svg={Event} ref={iconRef} />}\n {...inputProps}\n required={required}\n />\n </InputMask>\n </>\n )}\n </PopoverLegacy.Trigger>\n <PopoverLegacy.Content ref={floatRef}>\n {!range ? (\n <Calendar\n ref={calRef}\n onKeyDown={handleCalendarKeyDown}\n defaultFocusedDate={(internalValue as LegacyDateSelect)?.date}\n value={(internalValue as LegacyDateSelect)?.date || undefined}\n locale={locale}\n onBlur={handleCalendarBlur}\n onSelection={handleCalendarSelection}\n onFocus={handleCalendarFocus}\n minDate={minDate}\n maxDate={maxDate}\n unavailableDates={unavailableDates}\n unavailable={unavailable}\n defaultTimeZone={defaultTimeZone}\n startDay={startDay}\n />\n ) : (\n <Calendar\n ref={calRef}\n onKeyDown={handleCalendarKeyDown}\n defaultFocusedDate={\n (internalValue as LegacyDateRangeSelect)?.start?.date\n }\n value={\n internalValue\n ? {\n start:\n (internalValue as LegacyDateRangeSelect)?.start?.date ||\n undefined,\n end:\n (internalValue as LegacyDateRangeSelect)?.end?.date ||\n undefined,\n }\n : undefined\n }\n locale={locale}\n onBlur={handleCalendarBlur}\n onSelection={handleCalendarSelection}\n onFocus={handleCalendarFocus}\n minDate={minDate}\n maxDate={maxDate}\n unavailableDates={unavailableDates}\n unavailable={unavailable}\n defaultTimeZone={defaultTimeZone}\n startDay={startDay}\n range\n />\n )}\n </PopoverLegacy.Content>\n </PopoverLegacy>\n );\n },\n);\n\nDateFieldLegacy.displayName = \"DateFieldLegacy\";\n","import {\n ChangeEvent,\n ChangeEventHandler,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId, IanaZone } from \"../../types\";\nimport Calendar, {\n CalendarProps,\n CalendarRangeValue,\n CalendarValue,\n} from \"../Calendar\";\nimport { TextFieldProps } from \"../TextField\";\nimport {\n DateFieldCommonProps,\n DateFieldRangeProps,\n DateFieldSingleProps,\n} from \"./types\";\nimport { childrenToString, supportsPopover } from \"../../internal/functions\";\nimport InputMask from \"../InputMask\";\nimport Icon from \"../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateTime } from \"luxon\";\nimport {\n useKeyboardFocusables,\n usePopoverCloseDelayWorkaround,\n} from \"../../internal/hooks\";\nimport { isoToDateFormat } from \"./internal/isoToDateFormat\";\nimport { isValidDate, toDateString } from \"../Calendar/internal/utils\";\nimport Popover from \"../Popover\";\nimport {\n DateFieldLegacy,\n DateFieldLegacyProps,\n} from \"./internal/DateFieldLegacy\";\n\nconst RANGE_DIVIDER = \" – \";\n\n/**\n * Data structure for a single date selection\n */\nexport type DateSelect = {\n /** The formatted date string value */\n value: string;\n /** The ISO date string or null if invalid */\n date: string | null | undefined;\n /** Whether the date is valid according to constraints */\n isValid: boolean;\n};\n\n/**\n * Data structure for a date range selection\n */\nexport type DateRangeSelect = {\n /** The start date selection */\n start?: DateSelect;\n /** The end date selection */\n end?: DateSelect;\n /** The combined formatted range string */\n value: string;\n};\n\n/**\n * Props for the DateField component\n */\nexport type DateFieldProps = Omit<\n CalendarProps,\n \"onChange\" | \"value\" | \"defaultValue\"\n> &\n Omit<\n TextFieldProps,\n | \"prefix\"\n | \"suffix\"\n | \"hint\"\n | \"onChange\"\n | \"showCounter\"\n | \"value\"\n | \"defaultValue\"\n > &\n DataTrackingId &\n DateFieldCommonProps &\n (DateFieldSingleProps | DateFieldRangeProps);\n\n/**\n * DateField component for selecting dates with calendar popup and input validation\n * @deprecated Use DateFieldSingle or DateFieldRange instead\n */\nexport const DateField = forwardRef(\n (props: DateFieldProps, ref: Ref<HTMLInputElement>) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n description: childrenToString(props.description),\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"DateField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n // DateField\n openCalendar,\n onFocus,\n onBlur,\n onChange,\n onClick,\n format = \"MM/dd/yyyy\",\n disableHint,\n\n // Calendar\n minDate,\n maxDate,\n unavailableDates,\n unavailable,\n startDay,\n defaultValue,\n value: inputValue,\n\n // Shared\n // locale = Intl.DateTimeFormat().resolvedOptions().locale as Locale,\n defaultTimeZone = Intl.DateTimeFormat().resolvedOptions()\n .timeZone as IanaZone,\n range,\n\n // Input\n required,\n ...inputProps\n } = props;\n const [open, _setOpen] = useState(openCalendar || false);\n const setOpen = (val: boolean) => {\n if (open && !val) {\n inputRef.current?.focus();\n }\n _setOpen(val);\n };\n\n const [internalValue, setInternalValue] = useState<\n DateSelect | DateRangeSelect | undefined\n >();\n\n const inputRef = useRef<HTMLInputElement>(null);\n const popperRef = useRef<HTMLDivElement>(null);\n const documentRef = useRef<HTMLElement>(document.body);\n const hint = useMemo(\n () => (disableHint ? undefined : `Format: ${format.replace(/M/g, \"m\")}`),\n [format, disableHint],\n );\n\n const { focusables } = useKeyboardFocusables(documentRef, {\n observeChange: true,\n });\n\n const { focusables: popoverFocusables } = useKeyboardFocusables(popperRef, {\n observeChange: true,\n });\n\n const pageFocusables = focusables?.filter(\n (item) => !popoverFocusables?.includes(item),\n );\n\n const [popoverRef, setPopoverRef] = useState<RefObject<HTMLInputElement>>();\n const combinedRef = useMergeRefs([popoverRef, inputRef]);\n\n useEffect(() => {\n // Set internalValue from defaultValue\n if (!defaultValue) return;\n if (range) {\n const startDate = DateTime.fromFormat(\n isoToDateFormat(defaultValue.start ?? \"\", format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const endDate = DateTime.fromFormat(\n isoToDateFormat(defaultValue.end ?? \"\", format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const newValue: DateRangeSelect = {\n start: {\n value: isoToDateFormat(defaultValue.start ?? \"\", format),\n date: toDateString(startDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n startDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n end: {\n value: isoToDateFormat(defaultValue.end ?? \"\", format),\n date: toDateString(endDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n endDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n value:\n isoToDateFormat(defaultValue.start ?? \"\", format) +\n RANGE_DIVIDER +\n isoToDateFormat(defaultValue.end ?? \"\", format),\n };\n setInternalValue(newValue);\n return;\n }\n const date = DateTime.fromFormat(\n isoToDateFormat(defaultValue, format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const newValue = {\n value: isoToDateFormat(defaultValue, format),\n date: toDateString(date),\n isValid:\n date.isValid &&\n isValidDate(\n date,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n } as DateSelect;\n setInternalValue(newValue);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const getCurrentValue = () => {\n if (inputValue !== undefined) {\n if (range) {\n const startDate = DateTime.fromFormat(\n isoToDateFormat(inputValue.start ?? \"\", format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const endDate = DateTime.fromFormat(\n isoToDateFormat(inputValue.end ?? \"\", format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n const returnValue: DateRangeSelect = {\n start: {\n value: isoToDateFormat(inputValue.start ?? \"\", format),\n date: toDateString(startDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n startDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n end: {\n value: isoToDateFormat(inputValue.end ?? \"\", format),\n date: toDateString(endDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n endDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n value:\n isoToDateFormat(inputValue.start ?? \"\", format) +\n RANGE_DIVIDER +\n isoToDateFormat(inputValue.end ?? \"\", format),\n };\n return returnValue;\n }\n const date = DateTime.fromFormat(\n isoToDateFormat(inputValue, format),\n format,\n {\n zone: defaultTimeZone,\n },\n ).startOf(\"day\");\n return {\n value: isoToDateFormat(inputValue, format),\n date: toDateString(date),\n isValid:\n date.isValid &&\n isValidDate(\n date,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n } as DateSelect;\n }\n return internalValue;\n };\n\n const handleInputFocus: FocusEventHandler<HTMLInputElement> = (ev) => {\n // DO NOT OPEN THE CALENDAR ON KEYBOARD OR MANUAL FOCUS EVENT\n onFocus?.(ev);\n };\n\n const handleInputBlur: FocusEventHandler<HTMLInputElement> = (ev) => {\n if (!popperRef.current?.contains(ev.relatedTarget)) {\n setOpen(false);\n onBlur?.(ev);\n }\n };\n\n const handleInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (ev) => {\n let currentFocusIndex = 0;\n switch (ev.key) {\n case \"Escape\":\n setOpen(false);\n break;\n case \"Tab\":\n if (!open || !pageFocusables?.length) {\n break;\n }\n ev.preventDefault();\n currentFocusIndex = pageFocusables.indexOf(inputRef.current!) || 0;\n setOpen(false);\n if (ev.shiftKey) {\n if (currentFocusIndex === 0) {\n requestAnimationFrame(() =>\n pageFocusables[pageFocusables.length - 1].focus(),\n );\n } else {\n requestAnimationFrame(() =>\n pageFocusables[currentFocusIndex - 1].focus(),\n );\n }\n break;\n }\n if (pageFocusables.length > currentFocusIndex + 1) {\n requestAnimationFrame(() =>\n pageFocusables[currentFocusIndex + 1].focus(),\n );\n } else {\n requestAnimationFrame(() => pageFocusables[0].focus());\n }\n break;\n case \"ArrowDown\":\n if (!open) {\n setOpen(true);\n setTimeout(focusToCalendar, 200);\n } else {\n focusToCalendar();\n }\n }\n };\n\n const handleCalendarKeyDown: KeyboardEventHandler<HTMLDivElement> = (\n ev,\n ) => {\n switch (ev.key) {\n case \"Escape\":\n setOpen(false);\n inputRef.current?.focus();\n }\n };\n\n const handleInputClick: MouseEventHandler<HTMLInputElement> = (ev) => {\n setOpen(true);\n onClick?.(ev);\n };\n\n const handleInputChange: ChangeEventHandler<HTMLInputElement> = (ev) => {\n if (range) {\n const parts = ev.target.value.split(RANGE_DIVIDER);\n if (parts.length !== 2) return;\n const startDate = DateTime.fromFormat(parts[0], format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const endDate = DateTime.fromFormat(parts[1], format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const returnValue: DateRangeSelect = {\n start: {\n value: parts[0],\n date: toDateString(startDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n startDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n end: {\n value: parts[1],\n date: toDateString(endDate),\n isValid:\n startDate.isValid &&\n isValidDate(\n endDate,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n },\n value: ev.target.value,\n };\n setInternalValue(returnValue);\n onChange?.(ev, returnValue);\n return;\n }\n const date = DateTime.fromFormat(ev.target.value, format, {\n zone: defaultTimeZone,\n }).startOf(\"day\");\n const newDate: DateSelect = {\n value: ev.target.value,\n date: toDateString(date),\n isValid:\n date.isValid &&\n isValidDate(\n date,\n minDate,\n maxDate,\n new Set(unavailableDates || unavailable?.dates),\n {\n dates: new Set(unavailable?.dates),\n daysOfWeek: new Set(unavailable?.daysOfWeek),\n },\n defaultTimeZone,\n ),\n };\n setInternalValue(newDate);\n onChange?.(ev, newDate);\n };\n\n const handleCalendarSelection = (\n data: { value: CalendarValue } | { value: CalendarRangeValue },\n ) => {\n if (range) {\n const startDate = (data.value as CalendarRangeValue)?.start ?? \"\";\n const endDate = (data.value as CalendarRangeValue)?.end ?? \"\";\n\n const startVal = DateTime.fromISO(startDate, {\n zone: defaultTimeZone,\n });\n const startValue = startVal.toFormat(format);\n const endVal = DateTime.fromISO(endDate, {\n zone: defaultTimeZone,\n });\n const endValue = endVal.toFormat(format);\n\n const newDateRange: DateRangeSelect = {\n start: {\n value: startValue,\n date: startDate,\n isValid: true,\n },\n end: {\n value: endValue,\n date: endDate,\n isValid: true,\n },\n value: startValue + RANGE_DIVIDER + endValue,\n };\n setInternalValue(newDateRange);\n const event = {\n target: {\n value: startValue + RANGE_DIVIDER + endValue,\n },\n } as ChangeEvent<HTMLInputElement>;\n handleInputChange(event);\n return;\n }\n const date = data.value as CalendarValue;\n const val = DateTime.fromISO(date || \"\", {\n zone: defaultTimeZone,\n });\n\n const value = val.toFormat(format);\n const newDate: DateSelect = {\n value,\n date,\n isValid: true,\n };\n setInternalValue(newDate);\n const event = {\n target: {\n value,\n },\n } as ChangeEvent<HTMLInputElement>;\n handleInputChange(event);\n };\n\n const focusToCalendar = () => {\n if (popperRef.current) {\n const currentFocusable =\n popperRef.current.querySelectorAll('[tabindex = \"0\"]')[0];\n if (currentFocusable) {\n (currentFocusable as HTMLButtonElement).focus();\n }\n }\n };\n\n const handleClickOutside = () => {\n setOpen(false);\n };\n\n const currentValue = getCurrentValue();\n\n const popoverOpen = openCalendar ?? open;\n\n const shouldShowCalendar = usePopoverCloseDelayWorkaround(popoverOpen);\n\n const calendar = range ? (\n <Calendar\n range\n onKeyDown={handleCalendarKeyDown}\n defaultFocusedDate={(internalValue as DateRangeSelect)?.start?.date}\n value={{\n start: (currentValue as DateRangeSelect)?.start?.date || undefined,\n end: (currentValue as DateRangeSelect)?.end?.date || undefined,\n }}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailableDates={unavailableDates}\n unavailable={unavailable}\n defaultTimeZone={defaultTimeZone}\n startDay={startDay}\n />\n ) : (\n <Calendar\n onKeyDown={handleCalendarKeyDown}\n defaultFocusedDate={(internalValue as DateSelect)?.date}\n value={(currentValue as DateSelect)?.date || undefined}\n onSelection={handleCalendarSelection}\n minDate={minDate}\n maxDate={maxDate}\n unavailableDates={unavailableDates}\n unavailable={unavailable}\n defaultTimeZone={defaultTimeZone}\n startDay={startDay}\n />\n );\n\n if (!supportsPopover())\n return <DateFieldLegacy {...(props as DateFieldLegacyProps)} ref={ref} />;\n return (\n <Popover\n open={popoverOpen}\n modal\n placement=\"bottom-start\"\n disableFlipFallback\n disableTriggerFocus\n onOutsidePress={handleClickOutside}\n >\n <Popover.Trigger>\n {({ ref: iRef }) => {\n setPopoverRef(iRef as RefObject<HTMLInputElement>);\n return range ? (\n <InputMask\n mask={\"99/99/9999\" + RANGE_DIVIDER + \"99/99/9999\"}\n ref={combinedRef}\n onChange={handleInputChange}\n value={(currentValue as DateRangeSelect)?.value}\n inputProps={{\n onFocus: handleInputFocus,\n prefix: <Icon svg={Event} />,\n onBlur: handleInputBlur,\n onKeyDown: handleInputKeyDown,\n onClick: handleInputClick,\n hint,\n required,\n [\"data-tracking-id\"]: trackingId,\n ...inputProps,\n }}\n customMaskHandler={[\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 0,\n endPosition: 2,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 3,\n endPosition: 5,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 13,\n endPosition: 15,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 16,\n endPosition: 18,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n ]}\n />\n ) : (\n <InputMask\n mask={\"99/99/9999\"}\n ref={combinedRef}\n onChange={handleInputChange}\n value={(currentValue as DateSelect)?.value}\n inputProps={{\n onFocus: handleInputFocus,\n prefix: <Icon svg={Event} />,\n onBlur: handleInputBlur,\n onKeyDown: handleInputKeyDown,\n onClick: handleInputClick,\n hint,\n autoComplete: \"off\",\n required,\n [\"data-tracking-id\"]: trackingId,\n ...inputProps,\n }}\n customMaskHandler={[\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 0,\n endPosition: 2,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n {\n match: {\n matchPattern: new RegExp(/^(\\d)\\//),\n startPosition: 3,\n endPosition: 5,\n },\n apply: {\n applyPattern: \"0$1\",\n caretOffset: 2,\n },\n },\n ]}\n />\n );\n }}\n </Popover.Trigger>\n <Popover.Content ref={popperRef} data-calendar-popover>\n {shouldShowCalendar && calendar}\n </Popover.Content>\n </Popover>\n );\n },\n);\nDateField.displayName = \"DateField\";\n"],"names":["RANGE_DIVIDER","Event","useMergeRefs","newValue","data","event"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateFieldRange-g7n5QYww.js","sources":["../src/components/DateFieldRange/internal/maskito/dateRangePlaceholderMask.ts","../src/components/DateFieldRange/internal/MaskedDateRangeInput.tsx","../src/components/DateFieldRange/internal/DateFieldRangeCalendar.tsx","../src/components/DateFieldRange/internal/useDateFieldRangeConversion.ts","../src/components/DateFieldRange/internal/useDateFieldRangeState.ts","../src/components/DateFieldRange/internal/utils.ts","../src/components/DateFieldRange/DateFieldRange.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n MaskitoDateMode,\n maskitoDateRangeOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\nimport { makeZeroShortcutPreprocessor } from \"../../../DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor\";\n\nexport type DateMode = Extract<\n MaskitoDateMode,\n \"dd/mm/yyyy\" | \"mm/dd/yyyy\" | \"yyyy/mm/dd\"\n>;\n\nconst datePlaceholderMask = ({\n mode,\n dateSeparator = \"/\",\n rangeSeparator = \" - \",\n placeholder,\n}: {\n mode: DateMode;\n dateSeparator?: string;\n rangeSeparator?: string;\n placeholder: string;\n}) => {\n const dateRangeOptions = maskitoDateRangeOptionsGenerator({\n mode,\n dateSeparator,\n rangeSeparator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateRangeOptions,\n plugins: plugins.concat(dateRangeOptions.plugins || []),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateRangeOptions.preprocessors,\n makeZeroShortcutPreprocessor(placeholder, dateSeparator),\n ],\n postprocessors: [\n // NOTE this is super fragile. If Maskito maintainers change the order of the post-processors, this will break.\n // The last postprocessor is the date swap postprocessor, which we don't want to run.\n // A unit test is added to ensure this doesn't break on a dependency update.\n ...dateRangeOptions.postprocessors.slice(0, -1),\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 { Icon } from \"../../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport dateRangePlaceholderMask from \"./maskito/dateRangePlaceholderMask\";\nimport {\n DateModeToFormatMap,\n DateModeToPlaceholderMap,\n} from \"../../DateFieldSingle/internal/constants\";\nimport { DateMode } from \"../../DateFieldSingle/types\";\nimport { usePrevious } from \"../../../internal/hooks\";\n\nconst RANGE_SEPARATOR = \" - \";\n\nexport type MaskedDateRangeInputChange = {\n startDate: DateTime | null;\n endDate: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedDateRangeInputChangeHandler = (\n change: MaskedDateRangeInputChange,\n) => void;\n\nexport type MaskedDateRangeInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\" | \"prefix\"\n> & {\n onChange: MaskedDateRangeInputChangeHandler;\n mode?: DateMode;\n startDate: DateTime | null;\n endDate: DateTime | null;\n disableHint?: boolean;\n};\n\nexport type MaskedDateRangeInputRef = HTMLInputElement & {\n setDateRange: (startDate: DateTime | null, endDate: 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 `setDates` 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 MaskedDateRangeInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n * @param props.startDate - The start date.\n * @param props.endDate - The end date.\n * @param props.disableHint - Whether to disable the hint.\n */\nexport const MaskedDateRangeInput = forwardRef<\n MaskedDateRangeInputRef,\n MaskedDateRangeInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd/yyyy\",\n startDate,\n endDate,\n disableHint = false,\n ...props\n },\n ref,\n ) => {\n const halfPlaceholder = DateModeToPlaceholderMap[mode];\n const fullPlaceholder = `${halfPlaceholder}${RANGE_SEPARATOR}${halfPlaceholder}`;\n\n // Tracks the value of the input as it is being typed.\n const [inputValue, setInputValue] = useState(fullPlaceholder);\n\n const { options, removePlaceholder } = dateRangePlaceholderMask({\n mode,\n placeholder: fullPlaceholder,\n dateSeparator: \"/\",\n rangeSeparator: RANGE_SEPARATOR,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousStartDate = usePrevious(startDate);\n const previousEndDate = usePrevious(endDate);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((previousInputValue) =>\n swapMode(previousInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, fullPlaceholder, previousMode]);\n\n // Update the input value when the parent's start date or end date changes.\n useEffect(() => {\n if (startDate === undefined || endDate === undefined) return;\n // Return early if the values haven't actually changed.\n if (startDate === previousStartDate && endDate === previousEndDate)\n return;\n if (\n // plus one just represents a date that is guaranteed to be different.\n startDate?.equals(previousStartDate ?? startDate?.plus({ days: 1 })) &&\n (endDate?.equals(previousEndDate ?? endDate?.plus({ days: 1 })) ||\n endDate === previousEndDate)\n )\n return;\n const startDateString =\n startDate?.toFormat(DateModeToFormatMap[mode]) ?? halfPlaceholder;\n const endDateString =\n endDate?.toFormat(DateModeToFormatMap[mode]) ?? halfPlaceholder;\n const newInputValue = `${startDateString}${RANGE_SEPARATOR}${endDateString}`;\n setInputValue(newInputValue);\n }, [\n startDate,\n endDate,\n mode,\n halfPlaceholder,\n previousStartDate,\n previousEndDate,\n ]);\n\n const currentParsedData = useMemo(() => {\n return parseRangeInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const {\n startDate: newlyParsedStartDate,\n endDate: newlyParsedEndDate,\n isInputValid,\n isInputEmpty,\n isHalfEmpty,\n } = parseRangeInputValue(event.target.value, mode, removePlaceholder);\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 (newlyParsedStartDate === null) !==\n (currentParsedData.startDate === null) || // The start date has changed from empty to non-empty or vice versa\n (newlyParsedEndDate === null) !==\n (currentParsedData.endDate === null) || // The end date has changed from empty to non-empty or vice versa\n isHalfEmpty !== currentParsedData.isHalfEmpty || // The half has changed from empty to non-empty or vice versa\n (newlyParsedStartDate !== null &&\n currentParsedData.startDate !== null &&\n !newlyParsedStartDate.equals(currentParsedData.startDate)) || // The start date has changed\n (newlyParsedEndDate !== null &&\n currentParsedData.endDate !== null &&\n !newlyParsedEndDate.equals(currentParsedData.endDate)); // The end 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 startDate: isInputEmpty\n ? null\n : (newlyParsedStartDate ?? startDate ?? null),\n endDate:\n isInputEmpty || isHalfEmpty\n ? null\n : (newlyParsedEndDate ?? endDate ?? 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 MaskedDateRangeInputRef;\n return Object.assign(input, {\n setDateRange: (\n startDate: DateTime | null,\n endDate: DateTime | null,\n ) => {\n const startDateString = startDate?.toFormat(\n DateModeToFormatMap[mode],\n );\n const endDateString = endDate?.toFormat(DateModeToFormatMap[mode]);\n const newInputValue = `${startDateString ?? halfPlaceholder}${RANGE_SEPARATOR}${endDateString ?? halfPlaceholder}`;\n setInputValue(newInputValue);\n },\n });\n }, [mode, halfPlaceholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-start-date={startDate?.toISODate() ?? \"\"}\n data-end-date={endDate?.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\nMaskedDateRangeInput.displayName = \"MaskedDateRangeInput\";\n\nfunction parseRangeInputValue(\n value: string,\n mode: DateMode,\n removePlaceholder: (value: string) => string,\n) {\n const valueMinusPlaceholder = removePlaceholder(value);\n const [startDate, endDate] = valueMinusPlaceholder.split(RANGE_SEPARATOR);\n const startJsDate = maskitoParseDate(startDate, { mode });\n const endJsDate = endDate ? maskitoParseDate(endDate, { mode }) : null;\n const startLuxonDate = startJsDate\n ? DateTime.fromJSDate(startJsDate, { zone: \"utc\" })\n : null;\n const endLuxonDate = endJsDate\n ? DateTime.fromJSDate(endJsDate, { zone: \"utc\" })\n : null;\n return {\n startDate: startLuxonDate,\n endDate: endLuxonDate,\n isInputValid: !!(startLuxonDate && endLuxonDate), // input valid if both dates are filled\n isInputEmpty: valueMinusPlaceholder === \"\", // input empty if nothing is typed\n isHalfEmpty: endDate === undefined,\n };\n}\n\nfunction swapMode(inputString: string, previousMode: DateMode, mode: DateMode) {\n const halves = inputString.split(RANGE_SEPARATOR);\n const segments = halves.map((half) => half.split(\"/\"));\n\n let startDay, startMonth, startYear, endDay, endMonth, endYear;\n if (previousMode === \"mm/dd/yyyy\") {\n startDay = segments[0][1];\n startMonth = segments[0][0];\n startYear = segments[0][2];\n endDay = segments[1][1];\n endMonth = segments[1][0];\n endYear = segments[1][2];\n }\n if (previousMode === \"dd/mm/yyyy\") {\n startDay = segments[0][0];\n startMonth = segments[0][1];\n startYear = segments[0][2];\n endDay = segments[1][0];\n endMonth = segments[1][1];\n endYear = segments[1][2];\n }\n if (previousMode === \"yyyy/mm/dd\") {\n startDay = segments[0][2];\n startMonth = segments[0][1];\n startYear = segments[0][0];\n endDay = segments[1][2];\n endMonth = segments[1][1];\n endYear = segments[1][0];\n }\n\n if (mode === \"mm/dd/yyyy\") {\n return `${startMonth}/${startDay}/${startYear}${RANGE_SEPARATOR}${endMonth}/${endDay}/${endYear}`;\n }\n if (mode === \"dd/mm/yyyy\") {\n return `${startDay}/${startMonth}/${startYear}${RANGE_SEPARATOR}${endDay}/${endMonth}/${endYear}`;\n }\n if (mode === \"yyyy/mm/dd\") {\n return `${startYear}/${startMonth}/${startDay}${RANGE_SEPARATOR}${endYear}/${endMonth}/${endDay}`;\n }\n\n return inputString;\n}\n","import { DateTime, WeekdayNumbers } from \"luxon\";\nimport { Calendar, CalendarRangeValue } from \"../../Calendar/Calendar\";\nimport { useMemo } from \"react\";\nimport { usePrevious } from \"../../../internal/hooks\";\n\nexport type DateFieldRangeCalendarProps = {\n startDate: DateTime | null;\n endDate: DateTime | null;\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n onSelection: ({\n startDate,\n endDate,\n }: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n }) => void;\n minDate?: DateTime | null;\n maxDate?: DateTime | null;\n unavailable?: {\n dates?: DateTime[];\n daysOfWeek?: WeekdayNumbers[];\n };\n};\n\nexport const DateFieldRangeCalendar = ({\n startDate,\n endDate,\n onKeyDown,\n onSelection,\n minDate,\n maxDate,\n unavailable,\n}: DateFieldRangeCalendarProps) => {\n const previousStartDate = usePrevious(startDate);\n const previousEndDate = usePrevious(endDate);\n\n const handleCalendarSelection = (data: { value: CalendarRangeValue }) => {\n if (!data.value) return;\n const calStartDate = data.value.start\n ? DateTime.fromISO(data.value.start, { zone: \"utc\" })\n : null;\n const calEndDate = data.value.end\n ? DateTime.fromISO(data.value.end, { zone: \"utc\" })\n : null;\n onSelection({\n startDate: calStartDate,\n endDate: calEndDate,\n });\n };\n\n const defaultFocusedDate = useMemo(() => {\n // Nothing selected, focus today\n if (!startDate && !endDate) return DateTime.now().toISODate();\n if (!startDate) return endDate?.toISODate();\n if (!endDate) return startDate?.toISODate();\n if (endDate && !previousEndDate?.equals(endDate)) {\n return endDate.toISODate();\n } else if (startDate && !previousStartDate?.equals(startDate)) {\n return startDate.toISODate();\n }\n\n if (endDate) return endDate.toISODate();\n if (startDate) return startDate.toISODate();\n return DateTime.now().toISODate();\n }, [previousStartDate, previousEndDate, startDate, endDate]);\n\n return (\n <Calendar\n // Crappy hack because the Calendar does not update when the value changes.\n key={`${startDate?.toISODate()}-${endDate?.toISODate()}`}\n range={true}\n onKeyDown={onKeyDown}\n defaultFocusedDate={defaultFocusedDate}\n value={{\n start: startDate?.toISODate() || undefined,\n end: endDate?.toISODate() || undefined,\n }}\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 { useCallback, useMemo } from \"react\";\nimport { DateFieldRangeChange, DateFieldRangeProps } from \"../DateFieldRange\";\nimport { convertStringToDate } from \"../../DateFieldSingle/internal/utils\";\nimport { DateTime } from \"luxon\";\n\n/**\n * This hook is used to convert the string props of a DateFieldRange component to a DateTime format.\n *\n * @param props - The props of the DateFieldRange component.\n * @returns The normalized value, defaultValue, minDate, maxDate, and unavailable dates in DateTime format.\n * @internal This hook is not intended to be used directly in consumer code.\n */\nexport const useDateFieldRangeConversion = (props: DateFieldRangeProps) => {\n const { value, defaultValue, minDate, maxDate, unavailable, onChange } =\n props;\n\n const normalizedValue = useMemo(() => {\n if (value === null || value === undefined) return value;\n return {\n startDate: convertStringToDate(value.startDate) ?? null,\n endDate: convertStringToDate(value.endDate) ?? null,\n };\n }, [value]);\n\n const normalizedDefaultValue = useMemo(() => {\n if (defaultValue === null || defaultValue === undefined)\n return defaultValue;\n return {\n startDate: convertStringToDate(defaultValue.startDate) ?? null,\n endDate: convertStringToDate(defaultValue.endDate) ?? null,\n };\n }, [defaultValue]);\n\n const normalizedMinDate = useMemo(\n () => convertStringToDate(minDate),\n [minDate],\n );\n const normalizedMaxDate = useMemo(\n () => convertStringToDate(maxDate),\n [maxDate],\n );\n\n const normalizedUnavailableDates = useMemo(() => {\n return unavailable?.dates\n ?.map((date) => convertStringToDate(date))\n .filter((date) => date !== null && date !== undefined);\n }, [unavailable?.dates]);\n\n const handleChange = useCallback(\n (\n change: Omit<DateFieldRangeChange, \"startDate\" | \"endDate\"> & {\n startDate: DateTime | null;\n endDate: DateTime | null;\n },\n ) => {\n onChange?.({\n ...change,\n startDate: change.startDate?.toISODate() ?? null,\n endDate: change.endDate?.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 { MaskedDateRangeInputChange } from \"./MaskedDateRangeInput\";\n\nexport type DateFieldRangeStateChange = {\n startDate: DateTime | null;\n endDate: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type DateFieldRangeStateChangeHandler = (\n change: DateFieldRangeStateChange,\n) => void;\n\nexport type DateFieldRangeStateParam = {\n /**\n * The controlled value of the start date.\n */\n valueProp?: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n } | null;\n /**\n * The default value of the start date.\n */\n defaultValueProp?: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n } | null;\n /**\n * The function to call when the state changes.\n */\n onChange: DateFieldRangeStateChangeHandler;\n};\n\n/**\n * This hook is used to keep the state of a DateFieldRange component in sync with the input and calendar.\n */\nexport type DateFieldRangeState = {\n /**\n * The start date.\n */\n startDate: DateTime | null;\n /**\n * The end date.\n */\n endDate: DateTime | null;\n /**\n * The function to set the start date.\n */\n setStartDate: (date: DateTime | null) => void;\n /**\n * The function to set the end date.\n */\n setEndDate: (date: DateTime | null) => void;\n /**\n * The function to handle the input change.\n */\n handleInputChange: (change: MaskedDateRangeInputChange) => void;\n /**\n * The function to handle the calendar selection.\n */\n handleCalendarSelection: ({\n startDate,\n endDate,\n }: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n }) => void;\n};\n\n/**\n * This is a hook for keeping state in sync between a date input and calendar.\n */\nexport function useDateFieldRangeState({\n valueProp,\n defaultValueProp,\n onChange,\n}: DateFieldRangeStateParam): DateFieldRangeState {\n const [startDate, setStartDate] =\n useOptionallyControlledState<DateTime | null>({\n controlledValue:\n valueProp !== undefined ? valueProp?.startDate : undefined,\n defaultValue:\n defaultValueProp !== undefined\n ? defaultValueProp?.startDate\n : undefined,\n });\n const [endDate, setEndDate] = useOptionallyControlledState<DateTime | null>({\n controlledValue: valueProp !== undefined ? valueProp?.endDate : undefined,\n defaultValue:\n defaultValueProp !== undefined ? defaultValueProp?.endDate : undefined,\n });\n\n const setSharedValue = (value: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n }) => {\n setStartDate(value.startDate);\n setEndDate(value.endDate);\n };\n\n const handleInputChange = (change: MaskedDateRangeInputChange) => {\n const range = change.isInputEmpty\n ? null\n : {\n startDate: change.startDate?.startOf(\"day\") ?? null,\n endDate: change.endDate?.startOf(\"day\") ?? null,\n };\n\n onChange?.({\n startDate: range?.startDate ?? null,\n endDate: range?.endDate ?? null,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n });\n\n setStartDate(range?.startDate ?? null);\n setEndDate(range?.endDate ?? null);\n };\n\n const handleCalendarSelection = ({\n startDate,\n endDate,\n }: {\n startDate: DateTime | null;\n endDate: DateTime | null;\n }) => {\n setSharedValue({ startDate, endDate });\n onChange?.({\n startDate,\n endDate,\n isInputValid: true,\n isInputEmpty: false,\n });\n };\n\n return {\n startDate,\n endDate,\n setStartDate,\n setEndDate,\n handleInputChange,\n handleCalendarSelection,\n };\n}\n","import { DateTime } from \"luxon\";\nimport { validateDate } from \"../../DateFieldSingle/internal/utils\";\n\ntype DateConstraints = {\n unavailable?: {\n dates?: DateTime[];\n daysOfWeek?: number[];\n };\n minDate?: DateTime;\n maxDate?: DateTime;\n};\n\nexport function validateDateRange({\n required,\n startDate,\n endDate,\n startDateConstraints,\n endDateConstraints,\n}: {\n required?: boolean;\n startDate: DateTime | null;\n endDate: DateTime | null;\n startDateConstraints: DateConstraints;\n endDateConstraints: DateConstraints;\n}) {\n if (!required && !startDate && !endDate) return true;\n return (\n validateDate({\n date: startDate,\n constraints: { ...startDateConstraints, required: true },\n }) &&\n validateDate({\n date: endDate,\n constraints: { ...endDateConstraints, required: true },\n }) &&\n (!startDate || !endDate || startDate <= endDate)\n );\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport {\n MaskedDateRangeInput,\n MaskedDateRangeInputProps,\n MaskedDateRangeInputRef,\n} from \"./internal/MaskedDateRangeInput\";\nimport { DateMode } from \"../DateFieldSingle/types\";\nimport { DateFieldRangeCalendar } from \"./internal/DateFieldRangeCalendar\";\nimport { RefObject, useMemo, useRef, useState } from \"react\";\nimport { useDateFieldRangeConversion } from \"./internal/useDateFieldRangeConversion\";\nimport {\n DateFieldRangeStateChange,\n useDateFieldRangeState,\n} from \"./internal/useDateFieldRangeState\";\nimport {\n useFocusWithin,\n usePopoverCloseDelayWorkaround,\n usePopoverSupport,\n} from \"../../internal/hooks\";\nimport { validateDateRange } from \"./internal/utils\";\nimport { useDateFieldOrchestration } from \"../DateFieldSingle/internal/useDateFieldOrchestration\";\nimport Popover from \"../Popover\";\n\nexport type DateFieldRangeChange = {\n /**\n * The start date in ISO 8601 format.\n * @example \"2025-03-22\"\n */\n startDate: string | null;\n /**\n * The end date in ISO 8601 format.\n * @example \"2025-07-02\"\n */\n endDate: string | null;\n /**\n * Whether the input field contains two parsable dates.\n * This is not the same as the date range being valid.\n *\n */\n isInputValid: boolean;\n /**\n * Whether the input field is empty.\n */\n isInputEmpty: boolean;\n /**\n * Whether the start and end dates are 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 isDateRangeValid: boolean;\n};\n\nexport type DateFieldRangeChangeHandler = (\n change: DateFieldRangeChange,\n) => void;\n\nexport type DateFieldRangeValue = {\n startDate: string | null;\n endDate: string | null;\n} | null;\n\nexport type DateFieldRangeProps = Omit<\n MaskedDateRangeInputProps,\n | \"onChange\"\n | \"value\"\n | \"autoComplete\"\n | \"onClick\"\n | \"onKeyDown\"\n | \"ref\"\n | \"required\"\n | \"startDate\"\n | \"endDate\"\n | \"defaultValue\"\n | \"onFocus\"\n | \"onBlur\"\n> & {\n value?: DateFieldRangeValue;\n defaultValue?: DateFieldRangeValue;\n onChange?: DateFieldRangeChangeHandler;\n mode?: Extract<DateMode, \"mm/dd/yyyy\" | \"dd/mm/yyyy\">;\n disableHint?: boolean;\n disableCalendar?: boolean;\n unavailable?: {\n dates?: string[];\n daysOfWeek?: (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n };\n minDate?: string;\n maxDate?: string;\n required?: boolean;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n} & DataTrackingId;\n\nexport const DateFieldRange = (props: DateFieldRangeProps) => {\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: \"DateFieldRange\",\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 { props: wrapperProps } = useFocusWithin({\n onBlur: (e) => {\n onBlur?.(e);\n setCalendarOpen(false);\n },\n onFocus: onFocus,\n });\n\n const { value, defaultValue, minDate, maxDate, unavailable, onChange } =\n useDateFieldRangeConversion({\n value: valueProp,\n defaultValue: defaultValueProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n onChange: onChangeProp,\n });\n\n const inputRef = useRef<MaskedDateRangeInputRef>(null);\n const [popoverTriggerRef, setPopoverTriggerRef] =\n useState<RefObject<HTMLInputElement>>();\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);\n const popoverSupported = usePopoverSupport();\n\n const handleChange = (change: DateFieldRangeStateChange) => {\n const sharedConstraints = {\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n };\n\n onChange?.({\n startDate: change.startDate?.startOf(\"day\") ?? null,\n endDate: change.endDate?.startOf(\"day\") ?? null,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n isDateRangeValid: validateDateRange({\n required: required,\n startDate: change.startDate?.startOf(\"day\") ?? null,\n endDate: change.endDate?.startOf(\"day\") ?? null,\n startDateConstraints: sharedConstraints,\n endDateConstraints: sharedConstraints,\n }),\n });\n };\n\n const { startDate, endDate, handleInputChange, handleCalendarSelection } =\n useDateFieldRangeState({\n valueProp: value,\n defaultValueProp: defaultValue,\n onChange: handleChange,\n });\n\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 shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);\n\n const currentValidity = useMemo(() => {\n return validateDateRange({\n required,\n startDate,\n endDate,\n startDateConstraints: {\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n endDateConstraints: {\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n });\n }, [required, startDate, endDate, minDate, maxDate, unavailable]);\n\n const justTheField = (\n <MaskedDateRangeInput\n data-tracking-id={trackingId}\n {...rest}\n mode={mode}\n ref={combinedRef}\n startDate={startDate ?? null}\n endDate={endDate ?? null}\n onChange={handleInputChange}\n disableHint={rest.disableHint}\n onKeyDown={handleInputKeyDown}\n onClick={() => setCalendarOpen(true)}\n required={required}\n autoComplete=\"off\"\n data-date-range-valid={currentValidity}\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 onOutsidePress={() => 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 <DateFieldRangeCalendar\n startDate={startDate}\n endDate={endDate}\n onKeyDown={handleCalendarKeyDown}\n onSelection={(v) => {\n if (v.endDate) {\n inputRef.current?.focus();\n setCalendarOpen(false);\n }\n handleCalendarSelection(v);\n }}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n )}\n </Popover.Content>\n </Popover>\n </div>\n );\n};\n\nDateFieldRange.displayName = \"DateFieldRange\";\n"],"names":["datePlaceholderMask","dateRangePlaceholderMask","startDate","endDate","Event","useMergeRefs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DateFieldSingle-D3tneqeG.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog-FNJ16gY6.js","sources":["../src/components/Dialog/internal/useDialogContext.ts","../src/components/Dialog/DialogCancelButton.tsx","../src/components/Dialog/DialogHeader.tsx","../src/components/Dialog/DialogFooter.tsx","../src/components/Dialog/DialogContent.tsx","../src/components/Dialog/Dialog.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DialogContext } from \"./DialogContext\";\n\nexport function useDialogContext() {\n const context = useContext(DialogContext);\n if (!context) {\n throw new Error(\n \"useDialogContext must be used within a DialogContextProvider\",\n );\n }\n return context;\n}\n","import { MouseEvent, forwardRef } from \"react\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { useDialogContext } from \"./internal/useDialogContext\";\nimport { DataTrackingId } from \"../../types\";\nimport { useTrackingId } from \"../../hooks\";\n\n/**\n * Props for the DialogCancelButton component\n * @extends ButtonProps\n */\nexport type DialogCancelButtonProps = ButtonProps & DataTrackingId;\n\n/**\n * DialogCancelButton component for cancel/close actions in a Dialog.\n *\n * Features:\n * - Button that automatically closes the dialog when clicked\n * - Extends all Button component props and functionality\n * - Proper accessibility with close dialog semantics\n * - Automatic focus management\n * - Consistent styling with other dialog elements\n *\n * @example\n * <Dialog.CancelButton appearance=\"ghost\">Cancel</Dialog.CancelButton>\n */\nexport const DialogCancelButton = forwardRef<\n HTMLButtonElement,\n DialogCancelButtonProps\n>((props, ref) => {\n const { onClick, ...rest } = props;\n const { close } = useDialogContext();\n const data = {\n title: props.title,\n appearance: props.appearance,\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"DialogCancelButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n close();\n };\n return (\n <Button\n aria-label=\"Close dialog\"\n data-anv=\"dialog-cancel-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n ref={ref}\n {...rest}\n />\n );\n});\n\nDialogCancelButton.displayName = \"DialogCancelButton\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport cx from \"classnames\";\n\nimport { Text } from \"../Text\";\nimport { DialogCancelButton } from \"./DialogCancelButton\";\n\nimport styles from \"./Dialog.module.scss\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\n\n/**\n * Props for the DialogHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type DialogHeaderProps = ComponentPropsWithoutRef<\"header\"> &\n DataTrackingId;\n\n/**\n * DialogHeader component for the header section of a Dialog.\n *\n * Features:\n * - Displays dialog title with headline typography\n * - Includes close button with proper accessibility\n * - Sticky positioning for long content\n * - Consistent spacing and styling\n * - Automatic focus management\n *\n * @example\n * <Dialog.Header>Confirm Delete</Dialog.Header>\n */\nexport const DialogHeader = forwardRef<HTMLDivElement, DialogHeaderProps>(\n (props: DialogHeaderProps, ref) => {\n const { children, className, ...rest } = props;\n const data = {\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"Dialog\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const headerClassNames = cx(className, styles[\"header\"]);\n\n return (\n <header\n className={headerClassNames}\n data-anv=\"dialog-header\"\n data-tracking-id={trackingId}\n ref={ref}\n {...rest}\n >\n <Text variant=\"headline\" el=\"h1\">\n {children}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </span>\n </header>\n );\n },\n);\n\nDialogHeader.displayName = \"DialogHeader\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport styles from \"./Dialog.module.scss\";\n\n/**\n * Props for the DialogFooter component\n * @extends ComponentPropsWithoutRef<\"footer\">\n */\nexport type DialogFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /**\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * DialogFooter component for the footer section of a Dialog.\n *\n * Features:\n * - Container for dialog action buttons\n * - Optional sticky positioning for long content\n * - Consistent spacing and alignment\n * - Right-aligned button layout by default\n * - Flexible content area for custom layouts\n *\n * @example\n * <Dialog.Footer sticky>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Save</Button>\n * </Dialog.Footer>\n */\nexport const DialogFooter = forwardRef<HTMLElement, DialogFooterProps>(\n (props, ref) => {\n const { children, className, sticky = false, ...rest } = props;\n\n const footerClassNames = cx(styles[\"footer\"], className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={footerClassNames}\n data-anv=\"dialog-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nDialogFooter.displayName = \"DialogFooter\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport styles from \"./Dialog.module.scss\";\n\n/**\n * Props for the DialogContent component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type DialogContentProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * DialogContent component for the main content area of a Dialog.\n *\n * Features:\n * - Main content container for dialog body\n * - Flexible height with overflow handling\n * - Consistent padding and spacing\n * - Responsive design\n * - Proper content scrolling for long content\n *\n * @example\n * <Dialog.Content>\n * <p>This is the main content of the dialog.</p>\n * </Dialog.Content>\n */\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n (props, ref) => {\n const { children, className, ...rest } = props;\n\n const contentClassNames = cx(styles[\"content\"], className);\n\n return (\n <div\n className={contentClassNames}\n data-anv=\"dialog-content\"\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDialogContent.displayName = \"DialogContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n KeyboardEvent,\n} from \"react\";\nimport { DialogHeader } from \"./DialogHeader\";\nimport { DialogFooter } from \"./DialogFooter\";\nimport { DialogContent } from \"./DialogContent\";\nimport { DialogCancelButton } from \"./DialogCancelButton\";\nimport {\n OpenCloseTransitionStateEffects,\n useDialogScrollLock,\n useDialogTransitionStates,\n useKeyboardFocusables,\n useOnClickOutside,\n} from \"../../internal/hooks\";\nimport { DisableCloseOnEscapeOrClickProps, Size } from \"../../types\";\nimport { DialogContext, DialogContextProps } from \"./internal/DialogContext\";\nimport styles from \"./Dialog.module.scss\";\nimport { getActiveElement } from \"../../internal/functions\";\nimport { useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\n\nimport { ToastProvider } from \"../Toast/internal/ToastProvider\";\nimport { ToasterPopover } from \"../Toast/internal/ToasterPopover\";\nimport { ToasterContent } from \"../Toast/internal/Toaster\";\n\n/**\n * Props for the Dialog component\n * @extends ComponentPropsWithoutRef<\"dialog\">\n * @extends DialogTransitionStateEffects\n * @extends DisableCloseOnEscapeOrClickProps\n */\nexport type DialogProps = ComponentPropsWithoutRef<\"dialog\"> &\n OpenCloseTransitionStateEffects &\n DisableCloseOnEscapeOrClickProps & {\n /**\n * @default false\n */\n fullScreen?: boolean;\n /**\n * @default \"medium\"\n */\n size?: Extract<Size, \"medium\" | \"large\">;\n\n /**\n * @default false\n */\n open?: boolean;\n onClose?: () => void;\n /**\n * @deprecated - use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpen?: () => void;\n /**\n * @deprecated - use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Callback when clicking outside the dialog\n */\n onClickOutside?: (e: globalThis.MouseEvent) => void;\n /**\n * Enables scroll chaining\n * @link https://developer.mozilla.org/en-US/docs/Glossary/Scroll_chaining\n */\n enableScrollChaining?: boolean;\n };\n\nexport const DialogElement = forwardRef<HTMLDialogElement, DialogProps>(\n (props, ref) => {\n const {\n className,\n open = false,\n children,\n onOpen,\n onOpenChange,\n onClose,\n onKeyDown,\n fullScreen = false,\n disableCloseOnEscape = false,\n onClickOutside,\n disableCloseOnClickOutside = false,\n size,\n enableScrollChaining,\n onOpenAnimationStart,\n onOpenAnimationComplete,\n onCloseAnimationStart,\n onCloseAnimationComplete,\n ...rest\n } = props;\n\n const elRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const toasterRef = useRef<HTMLDivElement>(null);\n const [hasOpenPopover, setHasOpenPopover] =\n useState<DialogContextProps[\"hasOpenPopover\"]>(false);\n const id = useId();\n\n const { state, isOpenOrOpening } = useDialogTransitionStates(elRef, open, {\n onOpenAnimationStart: useCallback(() => {\n onOpenAnimationStart?.();\n }, [onOpenAnimationStart]),\n onOpenAnimationComplete: useCallback(() => {\n onOpenAnimationComplete?.();\n onOpen?.(); // DEPRECATED\n }, [onOpen, onOpenAnimationComplete]),\n onCloseAnimationStart: useCallback(() => {\n onCloseAnimationStart?.();\n }, [onCloseAnimationStart]),\n onCloseAnimationComplete: useCallback(() => {\n onCloseAnimationComplete?.();\n }, [onCloseAnimationComplete]),\n });\n\n // DEPRECATED\n const initial = useRef(true);\n useEffect(() => {\n if (initial.current) {\n initial.current = false;\n } else {\n onOpenChange?.(isOpenOrOpening);\n }\n }, [id, onOpenChange, isOpenOrOpening]);\n\n const classNames = cx([styles[\"dialog\"]], className, {\n [styles[\"closing\"]]: state === \"closing\",\n [styles[\"fullscreen\"]]: fullScreen,\n [styles[\"large\"]]: size === \"large\",\n });\n\n const { focusables } = useKeyboardFocusables(contentRef, {\n observeChange: true,\n });\n\n useDialogScrollLock({\n open: isOpenOrOpening,\n id,\n enableScrollChaining,\n elementRef: elRef,\n });\n\n useOnClickOutside({\n onOutsidePress: (e) => {\n if (!open) return;\n onClickOutside?.(e);\n },\n targets: [\n contentRef.current as HTMLElement,\n toasterRef.current as HTMLElement,\n ],\n onClose: () => {\n if (disableCloseOnClickOutside || !open) return;\n onClose?.();\n },\n });\n\n useEffect(() => {\n if (!isOpenOrOpening) return;\n if (!focusables) return;\n\n const activeElement = getActiveElement(document);\n if (!activeElement) return;\n\n if (\n activeElement.dataset.anv !== \"drawer-header-close-button\" &&\n (focusables.includes(activeElement) ||\n activeElement.tagName === \"DIALOG\")\n ) {\n return;\n }\n\n if (\n focusables[0]?.dataset.anv === \"dialog-header-close-button\" &&\n focusables[1]\n ) {\n focusables[1].focus();\n } else {\n focusables[0]?.focus();\n }\n }, [isOpenOrOpening, focusables]);\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(e);\n if (e.code === \"Escape\") {\n e.preventDefault();\n if (disableCloseOnEscape) return;\n if (hasOpenPopover) return;\n onClose?.();\n return;\n }\n\n if (e.code === \"Tab\") {\n if (e.shiftKey && e.target === focusables?.[0]) {\n e.preventDefault();\n (focusables[focusables.length - 1] as HTMLElement)?.focus();\n return;\n }\n if (e.target === focusables?.[focusables.length - 1] && !e.shiftKey) {\n e.preventDefault();\n focusables[0].focus();\n return;\n }\n }\n };\n\n return (\n // dialog element does seem to be interactive on MDN guideline\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <dialog\n className={classNames}\n data-anv=\"dialog\"\n data-anv-scroll-chaining={enableScrollChaining}\n data-anv-transition-state={state}\n ref={useMergeRefs([ref, elRef])}\n onKeyDown={onKeyDownHandler}\n {...rest}\n >\n <ToastProvider isDialogToaster={open}>\n <ToasterPopover>\n <ToasterContent id=\"dialog-toaster\" ref={toasterRef} />\n </ToasterPopover>\n </ToastProvider>\n <DialogContext.Provider\n value={{\n close: () => onClose?.(),\n ref: elRef,\n hasOpenPopover,\n setHasOpenPopover,\n }}\n >\n <section\n ref={contentRef}\n className={styles[\"container\"]}\n data-open={open}\n >\n {children}\n </section>\n </DialogContext.Provider>\n </dialog>\n );\n },\n);\n\nDialogElement.displayName = \"Dialog\";\n\n/**\n * Dialog component for creating modal dialogs and overlays.\n *\n * Features:\n * - Modal dialog with backdrop overlay\n * - Controlled and uncontrolled open state\n * - Smooth open/close animations\n * - Keyboard navigation and focus management\n * - Escape key and click outside to close\n * - Multiple size variants (medium, large, fullscreen)\n * - Scroll chaining support\n * - Toast integration for notifications\n * - Compound component pattern with Header, Footer, Content, and CancelButton sub-components\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog open={isOpen} onClose={() => setIsOpen(false)}>\n * <Dialog.Header>Confirm Action</Dialog.Header>\n * <Dialog.Content>Are you sure you want to proceed?</Dialog.Content>\n * <Dialog.Footer>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Confirm</Button>\n * </Dialog.Footer>\n * </Dialog>\n */\nexport const Dialog = Object.assign(DialogElement, {\n /**\n * DialogHeader component for the header section of a Dialog.\n *\n * Features:\n * - Displays dialog title with headline typography\n * - Includes close button with proper accessibility\n * - Sticky positioning for long content\n * - Consistent spacing and styling\n * - Automatic focus management\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog.Header>Confirm Delete</Dialog.Header>\n */\n Header: DialogHeader,\n /**\n * DialogFooter component for the footer section of a Dialog.\n *\n * Features:\n * - Container for dialog action buttons\n * - Optional sticky positioning for long content\n * - Consistent spacing and alignment\n * - Right-aligned button layout by default\n * - Flexible content area for custom layouts\n *\n * @example\n * <Dialog.Footer sticky>\n * <Dialog.CancelButton>Cancel</Dialog.CancelButton>\n * <Button appearance=\"primary\">Save</Button>\n * </Dialog.Footer>\n */\n Footer: DialogFooter,\n /**\n * DialogContent component for the main content area of a Dialog.\n *\n * Features:\n * - Main content container for dialog body\n * - Flexible height with overflow handling\n * - Consistent padding and spacing\n * - Responsive design\n * - Proper content scrolling for long content\n *\n * @example\n * <Dialog.Content>\n * <p>This is the main content of the dialog.</p>\n * </Dialog.Content>\n */\n Content: DialogContent,\n /**\n * DialogCancelButton component for cancel/close actions in a Dialog.\n *\n * Features:\n * - Button that automatically closes the dialog when clicked\n * - Extends all Button component props and functionality\n * - Proper accessibility with close dialog semantics\n * - Automatic focus management\n * - Consistent styling with other dialog elements\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Dialog.CancelButton appearance=\"ghost\">Cancel</Dialog.CancelButton>\n */\n CancelButton: DialogCancelButton,\n});\n"],"names":["Close"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer-DT31CMRd.js","sources":["../src/components/Drawer/internal/useDrawerContext.ts","../src/components/Drawer/DrawerCancelButton.tsx","../src/components/Drawer/DrawerHeader.tsx","../src/components/Drawer/DrawerFooter.tsx","../src/components/Drawer/DrawerContent.tsx","../src/components/Drawer/Drawer.tsx"],"sourcesContent":["import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\n/**\n * Hook to access the drawer context.\n *\n * @returns The drawer context containing close function and ref\n * @throws Error if used outside of a DrawerContextProvider\n */\nexport function useDrawerContext() {\n const context = useContext(DrawerContext);\n if (!context) {\n throw new Error(\n \"useDrawerContext must be used within a DrawerContextProvider\",\n );\n }\n return context;\n}\n","import { MouseEvent, forwardRef } from \"react\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { useDrawerContext } from \"./internal/useDrawerContext\";\n\n/**\n * Props for the DrawerCancelButton component\n * @extends ButtonProps\n */\nexport type DrawerCancelButtonProps = ButtonProps & DataTrackingId;\n\n/**\n * A button component that automatically closes the drawer when clicked.\n *\n * Features:\n * - Automatically closes the drawer when clicked\n * - Extends Button component functionality\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard button props\n * - Proper focus management\n * - Can be used anywhere within the drawer context\n *\n * @example\n * <DrawerCancelButton appearance=\"ghost\" size=\"small\">\n * Cancel\n * </DrawerCancelButton>\n */\nexport const DrawerCancelButton = forwardRef<\n HTMLButtonElement,\n DrawerCancelButtonProps\n>((props, ref) => {\n const { onClick, ...rest } = props;\n const { close } = useDrawerContext();\n const data = {\n children: childrenToString(props.children),\n appearance: props.appearance,\n size: props.size,\n type: props.type,\n };\n\n const trackingId = useTrackingId({\n name: \"DrawerCancelButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n close();\n };\n return (\n <Button\n aria-label=\"Close drawer\"\n data-anv=\"drawer-cancel-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n ref={ref}\n {...rest}\n />\n );\n});\n\nDrawerCancelButton.displayName = \"DrawerCancelButton\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport styles from \"./Drawer.module.scss\";\nimport { Text } from \"../Text\";\nimport { DrawerCancelButton } from \"./DrawerCancelButton\";\nimport cx from \"classnames\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\n\n/**\n * Props for the DrawerHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type DrawerHeaderProps = ComponentPropsWithoutRef<\"header\"> &\n DataTrackingId;\n\n/**\n * Header component for the drawer that displays a title and close button.\n *\n * Features:\n * - Displays the drawer title as a headline\n * - Includes an accessible close button\n * - Sticky positioning at the top of the drawer\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Automatic close functionality\n *\n * @example\n * <Drawer.Header>Settings</Drawer.Header>\n */\nexport const DrawerHeader = forwardRef<HTMLHeadElement, DrawerHeaderProps>(\n (props, ref) => {\n const { className, children } = props;\n const data = {\n children: childrenToString(props.children),\n };\n\n const trackingId = useTrackingId({\n name: \"DrawerHeader\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const drawerHeaderClasses = cx(styles.header, className);\n\n return (\n <header\n className={drawerHeaderClasses}\n data-anv=\"drawer-header\"\n data-tracking-id={trackingId}\n ref={ref}\n >\n <Text variant=\"headline\" el=\"h1\">\n {children}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DrawerCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close drawer\"\n data-anv=\"drawer-header-close-button\"\n icon={Close}\n />\n </span>\n </header>\n );\n },\n);\n\nDrawerHeader.displayName = \"DrawerHeader\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport styles from \"./Drawer.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the DrawerFooter component\n * @extends ComponentPropsWithoutRef<\"footer\">\n */\nexport type DrawerFooterProps = ComponentPropsWithoutRef<\"footer\"> & {\n /**\n * When true, the footer will stick to the bottom of the drawer.\n * @default false\n */\n sticky?: boolean;\n};\n\n/**\n * Footer component for the drawer that displays action buttons and controls.\n *\n * Features:\n * - Flexible layout for action buttons and controls\n * - Optional sticky positioning at the bottom\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard footer element props\n * - Responsive design that adapts to content\n *\n * @example\n * <Drawer.Footer sticky>\n * <Button onClick={handleSave}>Save</Button>\n * <Button onClick={handleCancel}>Cancel</Button>\n * </Drawer.Footer>\n */\nexport const DrawerFooter = forwardRef<HTMLElement, DrawerFooterProps>(\n (props, ref) => {\n const { className, children, sticky = false, ...rest } = props;\n const drawerFooterClasses = cx(styles.footer, className, {\n [styles[\"sticky\"]]: sticky,\n });\n\n return (\n <footer\n className={drawerFooterClasses}\n data-anv=\"drawer-footer\"\n ref={ref}\n {...rest}\n >\n {children}\n </footer>\n );\n },\n);\n\nDrawerFooter.displayName = \"DrawerFooter\";\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport styles from \"./Drawer.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the DrawerContent component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type DrawerContentProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Content container for the drawer that holds the main content area.\n *\n * Features:\n * - Flexible content area with proper spacing\n * - Scrollable content when needed\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard div element props\n * - Responsive design that adapts to content\n * - Proper focus management\n *\n * @example\n * <Drawer.Content>\n * <p>This is the main content of the drawer.</p>\n * <p>It can contain any type of content.</p>\n * </Drawer.Content>\n */\nexport const DrawerContent = forwardRef<HTMLDivElement, DrawerContentProps>(\n (props, ref) => {\n const { className, children, ...rest } = props;\n const drawerContentClasses = cx(styles.content, className);\n\n return (\n <div\n className={drawerContentClasses}\n data-anv=\"drawer-content\"\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDrawerContent.displayName = \"DrawerContent\";\n","import styles from \"./Drawer.module.scss\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n useRef,\n useId,\n useCallback,\n useEffect,\n SyntheticEvent,\n KeyboardEvent,\n useMemo,\n} from \"react\";\nimport { DrawerHeader } from \"./DrawerHeader\";\nimport { DrawerFooter } from \"./DrawerFooter\";\nimport { DrawerContent } from \"./DrawerContent\";\nimport { DrawerCancelButton } from \"./DrawerCancelButton\";\nimport {\n OpenCloseTransitionStateEffects,\n useDialogScrollLock,\n useDialogTransitionStates,\n useKeyboardFocusables,\n useOnClickOutside,\n} from \"../../internal/hooks\";\nimport { DisableCloseOnEscapeOrClickProps, Size } from \"../../types\";\nimport { useMergeRefs } from \"../../hooks\";\nimport cx from \"classnames\";\nimport { getActiveElement } from \"../../internal/functions\";\nimport { ToastProvider } from \"../Toast/internal/ToastProvider\";\nimport { ToasterPopover } from \"../Toast/internal/ToasterPopover\";\nimport { ToasterContent } from \"../Toast/internal/Toaster\";\nimport { DrawerContext } from \"./internal/DrawerContext\";\n\n/**\n * Props for the Drawer component\n * @extends ComponentPropsWithoutRef<\"dialog\">\n * @extends DialogTransitionStateEffects\n * @extends DisableCloseOnEscapeOrClickProps\n */\nexport type DrawerProps = ComponentPropsWithoutRef<\"dialog\"> &\n OpenCloseTransitionStateEffects &\n DisableCloseOnEscapeOrClickProps & {\n /**\n * The size of the drawer.\n * @default \"medium\"\n */\n size?: Extract<Size, \"medium\" | \"large\">;\n /**\n * Controls whether the drawer is open or closed.\n * @default false\n */\n open?: boolean;\n /**\n * Callback function called after the drawer is animated closed.\n */\n onClose?: () => void;\n /**\n * Callback function called when the drawer opens.\n * @deprecated Use onOpenAnimationStart or onOpenAnimationComplete instead\n */\n onOpen?: () => void;\n /**\n * Callback when clicking outside the drawer\n */\n onClickOutside?: (e: globalThis.MouseEvent) => void;\n /**\n * Enables scroll chaining behavior.\n * @link https://developer.mozilla.org/en-US/docs/Glossary/Scroll_chaining\n */\n enableScrollChaining?: boolean;\n };\n\nconst DrawerElement = forwardRef<HTMLDialogElement, DrawerProps>(\n (props, ref) => {\n const {\n className,\n open = false,\n children,\n onOpen,\n onClose,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars --\n onCancel is destructured so that it is not passed to the dialog in ...rest\n */\n onCancel,\n onKeyDown,\n disableCloseOnEscape = false,\n onClickOutside,\n disableCloseOnClickOutside = false,\n size = \"medium\",\n enableScrollChaining,\n onOpenAnimationStart,\n onOpenAnimationComplete,\n onCloseAnimationStart,\n onCloseAnimationComplete,\n ...rest\n } = props;\n\n const elRef = useRef<HTMLDialogElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const toasterRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n const id = useId();\n\n const { state, isOpenOrOpening } = useDialogTransitionStates(elRef, open, {\n onOpenAnimationStart: useCallback(() => {\n onOpenAnimationStart?.();\n }, [onOpenAnimationStart]),\n onOpenAnimationComplete: useCallback(() => {\n onOpenAnimationComplete?.();\n onOpen?.(); // DEPRECATED\n }, [onOpen, onOpenAnimationComplete]),\n onCloseAnimationStart: useCallback(() => {\n onCloseAnimationStart?.();\n }, [onCloseAnimationStart]),\n onCloseAnimationComplete: useCallback(() => {\n onCloseAnimationComplete?.();\n }, [onCloseAnimationComplete]),\n });\n\n const classNames = cx([styles.drawer], className, {\n [styles.remove]: state === \"closing\",\n [styles.large]: size === \"large\",\n });\n\n const { focusables } = useKeyboardFocusables(contentRef, {\n observeChange: false,\n });\n const firstFocusable = focusables?.[0];\n const lastFocusable = focusables?.[focusables.length - 1];\n\n useDialogScrollLock({\n open: isOpenOrOpening,\n id,\n enableScrollChaining,\n elementRef: elRef,\n });\n\n useEffect(() => {\n if (!isOpenOrOpening) return;\n if (!focusables) return;\n\n const activeElement = getActiveElement(document);\n if (!activeElement) return;\n\n if (\n activeElement.dataset.anv !== \"drawer-header-close-button\" &&\n (focusables.includes(activeElement) ||\n activeElement.tagName === \"DIALOG\")\n ) {\n return;\n }\n\n if (\n focusables[0]?.dataset.anv === \"drawer-header-close-button\" &&\n focusables[1]\n ) {\n focusables[1].focus();\n } else {\n focusables[0]?.focus();\n }\n }, [isOpenOrOpening, focusables]);\n\n const onCancelHandler = (e: SyntheticEvent<HTMLDialogElement>) => {\n e.preventDefault();\n\n if (disableCloseOnEscape) return;\n onClose?.();\n };\n\n useOnClickOutside({\n onOutsidePress: (e) => {\n if (!open) return;\n onClickOutside?.(e);\n },\n targets: [\n contentRef.current as HTMLElement,\n toasterRef.current as HTMLElement,\n ],\n onClose: () => {\n if (disableCloseOnClickOutside || !open) return;\n onClose?.();\n },\n });\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLDialogElement>) => {\n onKeyDown?.(e);\n if (e.code === \"Tab\") {\n if (e.shiftKey && e.target === firstFocusable) {\n e.preventDefault();\n (lastFocusable as HTMLElement)?.focus();\n return;\n }\n if (e.target === lastFocusable && !e.shiftKey) {\n e.preventDefault();\n (firstFocusable as HTMLElement)?.focus();\n return;\n }\n }\n };\n\n const contextValue = useMemo(() => {\n return { close: () => onClose?.() };\n }, [onClose]);\n\n return (\n // dialog element does seem to be interactive on MDN guideline\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions\n <dialog\n className={classNames}\n data-anv=\"drawer\"\n data-anv-scroll-chaining={enableScrollChaining}\n data-anv-transition-state={state}\n ref={combinedRef}\n onCancel={onCancelHandler}\n onKeyDown={onKeyDownHandler}\n {...rest}\n >\n <ToastProvider isDialogToaster={isOpenOrOpening}>\n <ToasterPopover>\n <ToasterContent id=\"drawer-toaster\" ref={toasterRef} />\n </ToasterPopover>\n </ToastProvider>\n <DrawerContext.Provider value={contextValue}>\n <section\n ref={contentRef}\n className={styles.container}\n data-open={isOpenOrOpening}\n >\n {children}\n </section>\n </DrawerContext.Provider>\n </dialog>\n );\n },\n);\nDrawerElement.displayName = \"Drawer\";\n\n/**\n * A slide-out drawer component that provides a modal-like experience from the side of the screen.\n *\n * Features:\n * - Slide-in animation from the side of the screen\n * - Keyboard navigation with focus trapping\n * - Escape key and click outside to close\n * - Configurable size variants (medium, large)\n * - Built-in toast support for notifications\n * - Automatic scroll locking when open\n * - Accessible with proper ARIA attributes\n * - Compound component structure with Header, Footer, Content, and CancelButton\n * - Transition state callbacks for animation control\n * - Optional scroll chaining support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer open={isOpen} onClose={handleClose} size=\"medium\">\n * <Drawer.Header>Settings</Drawer.Header>\n * <Drawer.Content>Drawer content goes here</Drawer.Content>\n * <Drawer.Footer>\n * <Button onClick={handleSave}>Save</Button>\n * <Drawer.CancelButton>Cancel</Drawer.CancelButton>\n * </Drawer.Footer>\n * </Drawer>\n */\nexport const Drawer = Object.assign(DrawerElement, {\n /**\n * Header component for the drawer that displays a title and close button.\n *\n * Features:\n * - Displays the drawer title as a headline\n * - Includes an accessible close button\n * - Sticky positioning at the top of the drawer\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Automatic close functionality\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer.Header>Settings</Drawer.Header>\n */\n Header: DrawerHeader,\n /**\n * Footer component for the drawer that displays action buttons and controls.\n *\n * Features:\n * - Flexible layout for action buttons and controls\n * - Optional sticky positioning at the bottom\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard footer element props\n * - Responsive design that adapts to content\n *\n * @example\n * <Drawer.Footer sticky>\n * <Button onClick={handleSave}>Save</Button>\n * <Drawer.CancelButton>Cancel</Drawer.CancelButton>\n * </Drawer.Footer>\n */\n Footer: DrawerFooter,\n /**\n * Content container for the drawer that holds the main content area.\n *\n * Features:\n * - Flexible content area with proper spacing\n * - Scrollable content when needed\n * - Proper semantic HTML structure\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard div element props\n * - Responsive design that adapts to content\n * - Proper focus management\n *\n * @example\n * <Drawer.Content>\n * <p>This is the main content of the drawer.</p>\n * <p>It can contain any type of content.</p>\n * </Drawer.Content>\n */\n Content: DrawerContent,\n /**\n * A button component that automatically closes the drawer when clicked.\n *\n * Features:\n * - Automatically closes the drawer when clicked\n * - Extends Button component functionality\n * - Accessible with proper ARIA attributes\n * - Consistent styling with the design system\n * - Supports all standard button props\n * - Proper focus management\n * - Can be used anywhere within the drawer context\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Drawer.CancelButton appearance=\"ghost\" size=\"small\">\n * Cancel\n * </Drawer.CancelButton>\n */\n CancelButton: DrawerCancelButton,\n});\n"],"names":["Close"],"mappings":"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"}
|