@servicetitan/anvil2 1.45.1 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/dist/{Calendar-Dq_of5A3.js → Calendar-BQ5F2ENO.js} +1173 -166
- package/dist/Calendar-BQ5F2ENO.js.map +1 -0
- package/dist/Calendar.css +83 -47
- package/dist/Calendar.js +1 -1
- package/dist/{Checkbox-3y2d9mBd.js → Checkbox-DDrmVC-u.js} +2 -2
- package/dist/{Checkbox-3y2d9mBd.js.map → Checkbox-DDrmVC-u.js.map} +1 -1
- package/dist/{Checkbox-BiOzGpgJ.js → Checkbox-Dl4KTwEJ.js} +3 -3
- package/dist/{Checkbox-BiOzGpgJ.js.map → Checkbox-Dl4KTwEJ.js.map} +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/{useInfiniteCombobox-BN2uGhBh.js → Combobox-B9nesJuc.js} +19 -186
- package/dist/Combobox-B9nesJuc.js.map +1 -0
- package/dist/Combobox.js +2 -1
- package/dist/Combobox.js.map +1 -1
- package/dist/{DateField-B2mnasH5.js → DateField-DXxPsRtf.js} +4 -4
- package/dist/{DateField-B2mnasH5.js.map → DateField-DXxPsRtf.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-DPbyzuHb.js → DateFieldRange-Xauviu1w.js} +34 -28
- package/dist/DateFieldRange-Xauviu1w.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CfAJDcx9.js → DateFieldSingle-yLnwpVzd.js} +27 -27
- package/dist/DateFieldSingle-yLnwpVzd.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-ydxcsmRV.js → DateFieldYearless-Ba7HiTiI.js} +2 -2
- package/dist/{DateFieldYearless-ydxcsmRV.js.map → DateFieldYearless-Ba7HiTiI.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DaysOfTheWeek-BYvE9QK5.js → DaysOfTheWeek-BYSYZySH.js} +2 -2
- package/dist/{DaysOfTheWeek-BYvE9QK5.js.map → DaysOfTheWeek-BYSYZySH.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-DpH2Qvbd.js → Dialog-CgkrvrQu.js} +2 -2
- package/dist/{Dialog-DpH2Qvbd.js.map → Dialog-CgkrvrQu.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndSort.js +1 -1
- package/dist/{Drawer-DI_k6W2k.js → Drawer-CM4ZbAro.js} +2 -2
- package/dist/{Drawer-DI_k6W2k.js.map → Drawer-CM4ZbAro.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/{FieldLabel-BfnCXung.js → FieldLabel-BsbTTyom.js} +3 -14
- package/dist/FieldLabel-BsbTTyom.js.map +1 -0
- package/dist/FieldLabel.js +1 -1
- package/dist/{InputMask-O_qi1p_3.js → InputMask-_F139qFu.js} +2 -2
- package/dist/{InputMask-O_qi1p_3.js.map → InputMask-_F139qFu.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-jR2ZkBB7.js → ListView-pb3rIcze.js} +2 -2
- package/dist/{ListView-jR2ZkBB7.js.map → ListView-pb3rIcze.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{NumberField-1_gRsWT4.js → NumberField-CkZZrkYC.js} +5 -5
- package/dist/{NumberField-1_gRsWT4.js.map → NumberField-CkZZrkYC.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-CY6QRlvb.js → Page-cKXkjMmd.js} +2 -2
- package/dist/{Page-CY6QRlvb.js.map → Page-cKXkjMmd.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{ProgressBar-BnXuQ6Bx.js → ProgressBar-DXcXZEJ2.js} +2 -2
- package/dist/{ProgressBar-BnXuQ6Bx.js.map → ProgressBar-DXcXZEJ2.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-CwmRUIzo.js → Radio-C89VCMXd.js} +2 -2
- package/dist/{Radio-CwmRUIzo.js.map → Radio-C89VCMXd.js.map} +1 -1
- package/dist/Radio.js +2 -2
- package/dist/{RadioGroup-BNCWIHOG.js → RadioGroup-C_4buUtG.js} +2 -2
- package/dist/{RadioGroup-BNCWIHOG.js.map → RadioGroup-C_4buUtG.js.map} +1 -1
- package/dist/{SearchField-BKXkoWPs.js → SearchField-Bb0uObwG.js} +2 -2
- package/dist/{SearchField-BKXkoWPs.js.map → SearchField-Bb0uObwG.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SelectCard-DOGCG0zr.js → SelectCard-BTYZg9TG.js} +3 -3
- package/dist/{SelectCard-DOGCG0zr.js.map → SelectCard-BTYZg9TG.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectTrigger-BMo0e-F7.js → SelectTrigger-f1hvRrSC.js} +2 -2
- package/dist/{SelectTrigger-BMo0e-F7.js.map → SelectTrigger-f1hvRrSC.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-BMMxnXrw.js → SelectTriggerBase-DP9fmRSo.js} +2 -2
- package/dist/{SelectTriggerBase-BMMxnXrw.js.map → SelectTriggerBase-DP9fmRSo.js.map} +1 -1
- package/dist/{TextField-CwgE_JJU.js → TextField-BiHxlzE3.js} +2 -2
- package/dist/{TextField-CwgE_JJU.js.map → TextField-BiHxlzE3.js.map} +1 -1
- package/dist/{TextField-DlsZEkS0.js → TextField-D8fow9j7.js} +2 -2
- package/dist/{TextField-DlsZEkS0.js.map → TextField-D8fow9j7.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-DU-SpoDL.js → Textarea-BdVJJlbP.js} +2 -2
- package/dist/{Textarea-DU-SpoDL.js.map → Textarea-BdVJJlbP.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-CfhyRfX9.js → TimeField-CmbErrsZ.js} +2 -2
- package/dist/{TimeField-CfhyRfX9.js.map → TimeField-CmbErrsZ.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BgjT0p8b.js → Toaster-9cpG_tWR.js} +2 -2
- package/dist/{Toaster-BgjT0p8b.js.map → Toaster-9cpG_tWR.js.map} +1 -1
- package/dist/{Toaster-CfC9wod0.js → Toaster-B7zUwJOt.js} +2 -2
- package/dist/{Toaster-CfC9wod0.js.map → Toaster-B7zUwJOt.js.map} +1 -1
- package/dist/Toolbar-D4zuUFhb.js +2077 -0
- package/dist/Toolbar-D4zuUFhb.js.map +1 -0
- package/dist/Toolbar.css +139 -28
- package/dist/Toolbar.d.ts +3 -3
- package/dist/Toolbar.js +1 -1
- package/dist/beta/components/Toolbar/Filters/FilterButton.d.ts +30 -0
- package/dist/beta/components/Toolbar/Filters/FilterDateRange.d.ts +37 -0
- package/dist/beta/components/Toolbar/Filters/FilterDateSingle.d.ts +30 -0
- package/dist/beta/components/Toolbar/Filters/FilterDrawer.d.ts +15 -0
- package/dist/beta/components/Toolbar/Filters/FilterGroup.d.ts +25 -0
- package/dist/beta/components/Toolbar/Filters/FilterItemWrapper.d.ts +24 -0
- package/dist/beta/components/Toolbar/Filters/FilterSelect.d.ts +29 -0
- package/dist/beta/components/Toolbar/Filters/FilterToggleButton.d.ts +24 -0
- package/dist/beta/components/Toolbar/Filters/internal/FilterGroupContext.d.ts +40 -0
- package/dist/beta/components/Toolbar/Filters/internal/types.d.ts +130 -0
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +40 -0
- package/dist/beta/components/Toolbar/Filters/internal/utils/test.d.ts +57 -0
- package/dist/beta/components/Toolbar/Toolbar.d.ts +302 -0
- package/dist/beta/components/Toolbar/ToolbarButton.d.ts +41 -0
- package/dist/beta/components/Toolbar/ToolbarButtonLink.d.ts +43 -0
- package/dist/beta/components/Toolbar/ToolbarButtonToggle.d.ts +42 -0
- package/dist/beta/components/Toolbar/ToolbarControlGroup.d.ts +20 -0
- package/dist/beta/components/Toolbar/ToolbarSearchField.d.ts +20 -0
- package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +108 -0
- package/dist/beta/components/Toolbar/index.d.ts +9 -0
- package/dist/beta/components/Toolbar/internal/ToolbarItemOverflowContext.d.ts +19 -0
- package/dist/beta/components/Toolbar/internal/ToolbarItemWrapper.d.ts +40 -0
- package/dist/beta/components/Toolbar/internal/ToolbarOverflowContext.d.ts +35 -0
- package/dist/beta/components/Toolbar/internal/ToolbarOverflowMenu.d.ts +29 -0
- package/dist/beta/components/Toolbar/internal/utils/accessibility.d.ts +26 -0
- package/dist/beta/components/Toolbar/internal/utils/test.d.ts +29 -0
- package/dist/beta/components/Toolbar/types.d.ts +50 -0
- package/dist/beta/components/index.d.ts +1 -0
- package/dist/beta/index.d.ts +1 -0
- package/dist/beta.d.ts +2 -0
- package/dist/beta.js +2 -0
- package/dist/beta.js.map +1 -0
- package/dist/components/Combobox/ComboboxTypes.d.ts +8 -0
- package/dist/components/DateFieldRange/DateFieldRange.d.ts +2 -2
- package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +1 -1
- package/dist/components/DateFieldRange/internal/useDateFieldRangeState.d.ts +2 -7
- package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +2 -2
- package/dist/components/DateFieldSingle/internal/useDateFieldSingleState.d.ts +2 -7
- package/dist/components/Dialog/index.d.ts +1 -1
- package/dist/components/NumberField/NumberField.d.ts +4 -4
- package/dist/{indeterminate_check_box-Bg24oeHy.js → indeterminate_check_box-RY9zr3xS.js} +17 -17
- package/dist/{indeterminate_check_box-Bg24oeHy.js.map → indeterminate_check_box-RY9zr3xS.js.map} +1 -1
- package/dist/indeterminate_check_box.css +72 -66
- package/dist/{index-CqdP5W00.js → index-V5Ez2gq_.js} +2 -2
- package/dist/{index-CqdP5W00.js.map → index-V5Ez2gq_.js.map} +1 -1
- package/dist/index.css +125 -26
- package/dist/index.js +773 -41
- package/dist/index.js.map +1 -1
- package/dist/index2.css +88 -105
- package/dist/internal/components/YearSelector/YearSelector.d.ts +67 -0
- package/dist/internal/components/YearSelector/index.d.ts +1 -0
- package/dist/internal/components/YearSelector/internal/YearItem.d.ts +10 -0
- package/dist/internal/components/YearSelector/internal/useYearSelectorKeys.d.ts +19 -0
- package/dist/internal/hooks/index.d.ts +1 -0
- package/dist/internal/hooks/useContainerQuery/index.d.ts +1 -0
- package/dist/internal/hooks/useContainerQuery/useContainerQuery.d.ts +46 -0
- package/dist/internal/hooks/useFocusWithin/useFocusWithin.d.ts +11 -16
- package/dist/types/PassThroughProps.d.ts +4 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/{useDateFieldOrchestration-Cqa7dxtr.js → useDateFieldOrchestration-BNJCsRkS.js} +2 -2
- package/dist/{useDateFieldOrchestration-Cqa7dxtr.js.map → useDateFieldOrchestration-BNJCsRkS.js.map} +1 -1
- package/dist/useFocusWithin-BhhgRXdZ.js +32 -0
- package/dist/useFocusWithin-BhhgRXdZ.js.map +1 -0
- package/dist/useInfiniteCombobox-WcRgC9p6.js +179 -0
- package/dist/useInfiniteCombobox-WcRgC9p6.js.map +1 -0
- package/dist/useIntersectionObserver-BEmMDO3P.js +70 -0
- package/dist/useIntersectionObserver-BEmMDO3P.js.map +1 -0
- package/package.json +3 -1
- package/dist/Calendar-Dq_of5A3.js.map +0 -1
- package/dist/DateFieldRange-DPbyzuHb.js.map +0 -1
- package/dist/DateFieldSingle-CfAJDcx9.js.map +0 -1
- package/dist/FieldLabel-BfnCXung.js.map +0 -1
- package/dist/Toolbar-DK7tXy_W.js +0 -807
- package/dist/Toolbar-DK7tXy_W.js.map +0 -1
- package/dist/components/Calendar/internal/CalendarYearSelection.d.ts +0 -25
- package/dist/useFocusWithin-BhU7hoAD.js +0 -56
- package/dist/useFocusWithin-BhU7hoAD.js.map +0 -1
- package/dist/useInfiniteCombobox-BN2uGhBh.js.map +0 -1
- /package/dist/{useInfiniteCombobox.css → Combobox.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateFieldRange-Xauviu1w.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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"}
|
package/dist/DateFieldRange.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DateFieldRange } from './DateFieldRange-
|
|
1
|
+
export { D as DateFieldRange } from './DateFieldRange-Xauviu1w.js';
|
|
2
2
|
//# sourceMappingURL=DateFieldRange.js.map
|
|
@@ -2,18 +2,18 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { P as Popover } from './Popover-r26xMIfm.js';
|
|
3
3
|
import { forwardRef, useState, useRef, useEffect, useMemo, useImperativeHandle, useCallback } from 'react';
|
|
4
4
|
import { m as maskitoDateOptionsGenerator, a as maskitoWithPlaceholder, u as useMaskito, b as maskitoParseDate } from './index.esm-D889iexm.js';
|
|
5
|
-
import { T as TextField } from './TextField-
|
|
5
|
+
import { T as TextField } from './TextField-D8fow9j7.js';
|
|
6
6
|
import { u as useMergeRefs } from './DrawerContext-DboTgTmo.js';
|
|
7
|
-
import { D as DateTime, C as Calendar } from './Calendar-
|
|
7
|
+
import { D as DateTime, C as Calendar } from './Calendar-BQ5F2ENO.js';
|
|
8
8
|
import { m as makeZeroShortcutPreprocessor } from './makeZeroShortcutPreprocessor-CxsiGTRW.js';
|
|
9
9
|
import { I as Icon } from './Icon-D8SPKeO4.js';
|
|
10
10
|
import { S as SvgEvent } from './event-BEJFimi3.js';
|
|
11
|
-
import { D as DateModeToPlaceholderMap, a as DateModeToFormatMap, c as convertStringToDate, u as useDateFieldOrchestration, v as validateDate } from './useDateFieldOrchestration-
|
|
11
|
+
import { D as DateModeToPlaceholderMap, a as DateModeToFormatMap, c as convertStringToDate, u as useDateFieldOrchestration, v as validateDate } from './useDateFieldOrchestration-BNJCsRkS.js';
|
|
12
12
|
import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
|
|
13
13
|
import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
|
|
14
14
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
15
15
|
import { useTrackingId } from './useTrackingId.js';
|
|
16
|
-
import { u as useFocusWithin } from './useFocusWithin-
|
|
16
|
+
import { u as useFocusWithin } from './useFocusWithin-BhhgRXdZ.js';
|
|
17
17
|
import { u as useMergeRefs$1 } from './useMergeRefs-Bde85AWI.js';
|
|
18
18
|
import { u as usePopoverSupport } from './usePopoverSupport-DIjjfodl.js';
|
|
19
19
|
import { u as usePopoverCloseDelayWorkaround } from './usePopoverCloseDelayWorkaround-BZcjPkvT.js';
|
|
@@ -92,7 +92,7 @@ const MaskedDateInput = forwardRef(
|
|
|
92
92
|
);
|
|
93
93
|
const isValueDifferent = isInputValid !== currentParsedData.isInputValid || // The input has changed validity
|
|
94
94
|
isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness
|
|
95
|
-
date === null !== (
|
|
95
|
+
date === null !== (currentParsedData.date === null) || // The input has changed from empty to non-empty or vice versa
|
|
96
96
|
date !== null && lastValidDate !== null && !date.equals(lastValidDate);
|
|
97
97
|
if (!isValueDifferent) return;
|
|
98
98
|
onChange?.({
|
|
@@ -217,17 +217,12 @@ function useDateFieldSingleConversion({
|
|
|
217
217
|
function useDateFieldSingleState({
|
|
218
218
|
valueProp,
|
|
219
219
|
defaultValueProp,
|
|
220
|
-
inputRef,
|
|
221
220
|
onChange
|
|
222
221
|
}) {
|
|
223
222
|
const [value, setValue] = useOptionallyControlledState({
|
|
224
223
|
controlledValue: valueProp,
|
|
225
224
|
defaultValue: defaultValueProp
|
|
226
225
|
});
|
|
227
|
-
const setSharedValue = (date) => {
|
|
228
|
-
inputRef.current?.setDate(date);
|
|
229
|
-
setValue(date);
|
|
230
|
-
};
|
|
231
226
|
const handleInputChange = (change) => {
|
|
232
227
|
const date = change.isInputEmpty ? null : change.date?.startOf("day") ?? null;
|
|
233
228
|
onChange?.({
|
|
@@ -236,18 +231,18 @@ function useDateFieldSingleState({
|
|
|
236
231
|
isInputEmpty: change.isInputEmpty
|
|
237
232
|
});
|
|
238
233
|
if (change.isInputValid) {
|
|
239
|
-
|
|
234
|
+
setValue(change.isInputEmpty ? null : change.date);
|
|
240
235
|
}
|
|
241
236
|
if (change.isInputEmpty) {
|
|
242
|
-
|
|
237
|
+
setValue(null);
|
|
243
238
|
return;
|
|
244
239
|
}
|
|
245
240
|
if (change.date) {
|
|
246
|
-
|
|
241
|
+
setValue(change.date);
|
|
247
242
|
}
|
|
248
243
|
};
|
|
249
244
|
const handleCalendarSelection = (date) => {
|
|
250
|
-
|
|
245
|
+
setValue(date);
|
|
251
246
|
onChange?.({
|
|
252
247
|
date,
|
|
253
248
|
isInputValid: true,
|
|
@@ -256,7 +251,7 @@ function useDateFieldSingleState({
|
|
|
256
251
|
};
|
|
257
252
|
return {
|
|
258
253
|
value,
|
|
259
|
-
setValue
|
|
254
|
+
setValue,
|
|
260
255
|
handleInputChange,
|
|
261
256
|
handleCalendarSelection
|
|
262
257
|
};
|
|
@@ -356,11 +351,13 @@ const DateFieldSingle = (props) => {
|
|
|
356
351
|
const { value, handleInputChange, handleCalendarSelection } = useDateFieldSingleState({
|
|
357
352
|
valueProp: normalizedValue,
|
|
358
353
|
defaultValueProp: normalizedDefaultValue,
|
|
359
|
-
inputRef,
|
|
360
354
|
onChange: handleChange
|
|
361
355
|
});
|
|
362
|
-
const {
|
|
363
|
-
onBlur
|
|
356
|
+
const { props: wrapperProps } = useFocusWithin({
|
|
357
|
+
onBlur: (e) => {
|
|
358
|
+
onBlur?.(e);
|
|
359
|
+
setCalendarOpen(false);
|
|
360
|
+
},
|
|
364
361
|
onFocus
|
|
365
362
|
});
|
|
366
363
|
const [popoverTriggerRef, setPopoverTriggerRef] = useState();
|
|
@@ -404,16 +401,15 @@ const DateFieldSingle = (props) => {
|
|
|
404
401
|
required,
|
|
405
402
|
autoComplete: "off",
|
|
406
403
|
"data-date-valid": currentValidity,
|
|
407
|
-
"data-tracking-id": trackingId
|
|
404
|
+
"data-tracking-id": trackingId,
|
|
405
|
+
onFocus: !disableCalendar && !popoverSupported ? onFocus : void 0,
|
|
406
|
+
onBlur: !disableCalendar && !popoverSupported ? onBlur : void 0
|
|
408
407
|
}
|
|
409
408
|
);
|
|
410
|
-
if (disableCalendar) {
|
|
411
|
-
return justTheField;
|
|
412
|
-
}
|
|
413
|
-
if (!popoverSupported) {
|
|
409
|
+
if (disableCalendar || !popoverSupported) {
|
|
414
410
|
return justTheField;
|
|
415
411
|
}
|
|
416
|
-
return /* @__PURE__ */ jsx("div", {
|
|
412
|
+
return /* @__PURE__ */ jsx("div", { ...wrapperProps, children: /* @__PURE__ */ jsxs(
|
|
417
413
|
Popover,
|
|
418
414
|
{
|
|
419
415
|
open: calendarOpen,
|
|
@@ -434,7 +430,11 @@ const DateFieldSingle = (props) => {
|
|
|
434
430
|
{
|
|
435
431
|
onKeyDown: handleCalendarKeyDown,
|
|
436
432
|
value,
|
|
437
|
-
onSelection:
|
|
433
|
+
onSelection: (v) => {
|
|
434
|
+
inputRef.current?.focus();
|
|
435
|
+
handleCalendarSelection(v);
|
|
436
|
+
setCalendarOpen(false);
|
|
437
|
+
},
|
|
438
438
|
minDate,
|
|
439
439
|
maxDate,
|
|
440
440
|
unavailable
|
|
@@ -446,5 +446,5 @@ const DateFieldSingle = (props) => {
|
|
|
446
446
|
};
|
|
447
447
|
DateFieldSingle.displayName = "DateFieldSingle";
|
|
448
448
|
|
|
449
|
-
export { DateFieldSingle as D };
|
|
450
|
-
//# sourceMappingURL=DateFieldSingle-
|
|
449
|
+
export { DateFieldSingle as D, MaskedDateInput as M, useDateFieldSingleState as a, DateFieldSingleCalendar as b, useDateFieldSingleConversion as u };
|
|
450
|
+
//# sourceMappingURL=DateFieldSingle-yLnwpVzd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateFieldSingle-yLnwpVzd.js","sources":["../src/components/DateFieldSingle/internal/maskito/datePlaceholderMask.ts","../src/components/DateFieldSingle/internal/MaskedDateInput.tsx","../src/components/DateFieldSingle/internal/useDateFieldSingleConversion.ts","../src/components/DateFieldSingle/internal/useDateFieldSingleState.ts","../src/components/DateFieldSingle/internal/DateFieldSingleCalendar.tsx","../src/components/DateFieldSingle/DateFieldSingle.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\nimport { makeZeroShortcutPreprocessor } from \"./makeZeroShortcutPreprocessor\";\nimport { DateMode } from \"../../types\";\n\nconst datePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n}: {\n mode: DateMode;\n separator?: string;\n placeholder: string;\n}) => {\n const dateOptions = maskitoDateOptionsGenerator({\n mode,\n separator,\n });\n\n const { plugins, removePlaceholder, ...placeholderOptions } =\n maskitoWithPlaceholder(placeholder);\n\n const datePlaceholderMask = {\n ...dateOptions,\n plugins: plugins.concat(dateOptions.plugins || []),\n preprocessors: [\n ...placeholderOptions.preprocessors,\n ...dateOptions.preprocessors,\n makeZeroShortcutPreprocessor(mode, separator),\n ],\n postprocessors: [\n ...dateOptions.postprocessors,\n ...placeholderOptions.postprocessors,\n ],\n } satisfies Required<MaskitoOptions>;\n\n return { options: datePlaceholderMask, removePlaceholder };\n};\n\nexport default datePlaceholderMask;\n","import { maskitoParseDate } from \"@maskito/kit\";\nimport { useMaskito } from \"@maskito/react\";\nimport { TextField, TextFieldProps } from \"../../TextField/internal/TextField\";\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { DateTime } from \"luxon\";\nimport datePlaceholderMask from \"./maskito/datePlaceholderMask\";\nimport { Icon } from \"../../Icon\";\nimport Event from \"@servicetitan/hammer-icon/mdi/round/event.svg\";\nimport { DateModeToFormatMap, DateModeToPlaceholderMap } from \"./constants\";\nimport { DateMode } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\n\nexport type MaskedDateInputChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedDateInputChangeHandler = (\n change: MaskedDateInputChange,\n) => void;\n\nexport type MaskedDateInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\" | \"prefix\"\n> & {\n onChange: MaskedDateInputChangeHandler;\n mode?: DateMode;\n lastValidDate: DateTime | null;\n disableHint?: boolean;\n};\n\nexport type MaskedDateInputRef = HTMLInputElement & {\n setDate: (date: DateTime | null) => void;\n};\n\n/**\n * A masked date input component that allows for the input of a date in a specific format.\n *\n * Provides a `setDate` method that can be used to set the date from outside the component (e.g from a calendar).\n *\n * @internal This component is not intended to be used directly in consumer code.\n *\n * @param props - The props for the MaskedDateInput component.\n * @param props.onChange - The function to call when the date changes.\n * @param props.mode - The mode of the date input.\n */\nexport const MaskedDateInput = forwardRef<\n MaskedDateInputRef,\n MaskedDateInputProps\n>(\n (\n {\n onChange,\n mode = \"mm/dd/yyyy\",\n lastValidDate,\n disableHint = false,\n ...props\n },\n ref,\n ) => {\n const placeholder = DateModeToPlaceholderMap[mode];\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder } = datePlaceholderMask({\n mode,\n placeholder,\n });\n const maskedInputRef = useMaskito({ options });\n const inputRef = useRef<HTMLInputElement>(null);\n const combinedRef = useMergeRefs([maskedInputRef, inputRef, ref]);\n const previousDateRef = useRef<DateTime | null>(null);\n const previousMode = usePrevious(mode);\n\n // Update the input value when the mode changes.\n useEffect(() => {\n if (mode !== previousMode) {\n setInputValue((oldInputValue) =>\n swapMode(oldInputValue, previousMode ?? mode, mode),\n );\n }\n }, [mode, previousMode]);\n\n // Update the input value when the parent's date changes.\n useEffect(() => {\n if (lastValidDate === undefined) return;\n if (lastValidDate === previousDateRef.current) return; // Note: Reference equality is intentional here\n if (!lastValidDate?.equals(previousDateRef.current ?? DateTime.now())) {\n setInputValue(\n lastValidDate?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n previousDateRef.current = lastValidDate;\n }\n }, [lastValidDate, mode, placeholder]);\n\n const currentParsedData = useMemo(() => {\n return parseInputValue(inputValue, mode, removePlaceholder);\n }, [inputValue, mode, removePlaceholder]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n const { date, isInputValid, isInputEmpty } = parseInputValue(\n event.target.value,\n mode,\n removePlaceholder,\n );\n\n // We only want to call onChange for substantive changes.\n // This is to avoid unnecessary re-renders of upstream components.\n const isValueDifferent =\n isInputValid !== currentParsedData.isInputValid || // The input has changed validity\n isInputEmpty !== currentParsedData.isInputEmpty || // The input has changed emptiness\n (date === null) !== (currentParsedData.date === null) || // The input has changed from empty to non-empty or vice versa\n (date !== null &&\n lastValidDate !== null &&\n !date.equals(lastValidDate)); // The date has changed\n\n // If the value has not changed, we do not need to call onChange.\n if (!isValueDifferent) return;\n onChange?.({\n date: date ?? lastValidDate ?? null,\n isInputValid,\n isInputEmpty,\n });\n };\n\n // Extend the input ref with additional methods.\n // This provides a way to set the input value from outside the component.\n useImperativeHandle(ref, () => {\n const input = inputRef.current;\n if (!input) return null as unknown as MaskedDateInputRef;\n return Object.assign(input, {\n setDate: (date: DateTime | null) => {\n setInputValue(\n date?.toFormat(DateModeToFormatMap[mode]) ?? placeholder,\n );\n },\n });\n }, [mode, placeholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-date={lastValidDate?.toISODate() ?? \"\"}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n {...props}\n showCounter={false}\n value={inputValue}\n onChange={handleChange}\n prefix={<Icon svg={Event} />}\n hint={disableHint ? undefined : `Format: ${mode}`}\n />\n );\n },\n);\n\nMaskedDateInput.displayName = \"MaskedDateInput\";\n\nfunction parseInputValue(\n value: string,\n mode: DateMode,\n removePlaceholder: (value: string) => string,\n) {\n const valueMinusPlaceholder = removePlaceholder(value);\n const jsDate = maskitoParseDate(valueMinusPlaceholder, { mode });\n const luxonDate = jsDate\n ? DateTime.fromJSDate(jsDate, { zone: \"utc\" })\n : null;\n return {\n date: luxonDate,\n isInputValid: !!luxonDate,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\nfunction swapMode(inputString: string, previousMode: DateMode, mode: DateMode) {\n const { day, month, year } = divideSegments(inputString, previousMode);\n return orderSegmentsByMode(day, month, year, mode);\n}\n\nfunction divideSegments(\n value: string,\n mode: DateMode,\n): {\n day: string;\n month: string;\n year: string;\n} {\n const [segment1, segment2, segment3] = value.split(\"/\");\n if (mode === \"dd/mm/yyyy\") {\n return { day: segment1, month: segment2, year: segment3 };\n } else if (mode === \"mm/dd/yyyy\") {\n return { day: segment2, month: segment1, year: segment3 };\n } else if (mode === \"yyyy/mm/dd\") {\n return { day: segment3, month: segment2, year: segment1 };\n }\n return { day: \"__\", month: \"__\", year: \"____\" };\n}\n\nfunction orderSegmentsByMode(\n day: string,\n month: string,\n year: string,\n mode: DateMode,\n) {\n if (mode === \"dd/mm/yyyy\") {\n return `${day}/${month}/${year}`;\n } else if (mode === \"mm/dd/yyyy\") {\n return `${month}/${day}/${year}`;\n } else if (mode === \"yyyy/mm/dd\") {\n return `${year}/${month}/${day}`;\n } else {\n return \"\";\n }\n}\n","import { useCallback, useMemo } from \"react\";\nimport { convertStringToDate } from \"./utils\";\nimport {\n DateFieldSingleChange,\n DateFieldSingleProps,\n} from \"../DateFieldSingle\";\nimport { DateTime, WeekdayNumbers } from \"luxon\";\n\nexport type DateFieldSingleConversion = {\n /**\n * The current value of the date field.\n */\n value?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValue?: DateTime | null;\n /**\n * The minimum date of the date field.\n */\n minDate?: DateTime | null;\n /**\n * The maximum date of the date field.\n */\n maxDate?: DateTime | null;\n /**\n * The unavailable dates of the date field.\n */\n unavailable: {\n /**\n * The unavailable dates of the date field.\n */\n dates?: DateTime[];\n /**\n * The unavailable days of the week of the date field.\n */\n daysOfWeek?: WeekdayNumbers[];\n };\n /**\n * The callback for when the date changes.\n */\n onChange: (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => void;\n};\n\n/**\n * Converts the props of the DateFieldSingle component to Luxon DateTime objects for easier internal use.\n * @param props - The props of the DateFieldSingle component using ISO 8601 strings.\n * @returns The converted props using Luxon DateTime objects.\n */\nexport function useDateFieldSingleConversion({\n value,\n defaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n}: DateFieldSingleProps): DateFieldSingleConversion {\n const normalizedValue = useMemo(() => convertStringToDate(value), [value]);\n const normalizedDefaultValue = useMemo(\n () => convertStringToDate(defaultValue),\n [defaultValue],\n );\n const normalizedMinDate = useMemo(\n () => convertStringToDate(minDate),\n [minDate],\n );\n const normalizedMaxDate = useMemo(\n () => convertStringToDate(maxDate),\n [maxDate],\n );\n const normalizedUnavailableDates = useMemo(\n () =>\n unavailable?.dates\n ?.map((d) => convertStringToDate(d))\n .filter((d) => d !== null && d !== undefined),\n [unavailable?.dates],\n );\n\n const handleChange = useCallback(\n (\n change: Omit<DateFieldSingleChange, \"date\"> & { date: DateTime | null },\n ) => {\n onChange?.({\n ...change,\n date: change.date?.toISODate() ?? null,\n });\n },\n [onChange],\n );\n\n return {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate: normalizedMinDate,\n maxDate: normalizedMaxDate,\n unavailable: {\n dates: normalizedUnavailableDates,\n daysOfWeek: unavailable?.daysOfWeek,\n },\n onChange: handleChange,\n };\n}\n","import { DateTime } from \"luxon\";\nimport { useOptionallyControlledState } from \"../../../internal/hooks\";\nimport { MaskedDateInputChange } from \"./MaskedDateInput\";\n\nexport type DateFieldSingleStateChange = {\n date: DateTime | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type DateFieldSingleStateChangeHandler = (\n change: DateFieldSingleStateChange,\n) => void;\n\nexport type DateFieldSingleStateParam = {\n /**\n * The controlled value of the date field.\n */\n valueProp?: DateTime | null;\n /**\n * The default (uncontrolled) value of the date field.\n */\n defaultValueProp?: DateTime | null;\n /**\n * Callback for when the date changes.\n */\n onChange: DateFieldSingleStateChangeHandler;\n};\n\nexport type DateFieldSingleState = {\n /**\n * The current value (DateTime) of the date field.\n */\n value: DateTime | null;\n /**\n * Sets the value of the date field.\n */\n setValue: (value: DateTime | null) => void;\n /**\n * Handles the change of the input field.\n */\n handleInputChange: (change: MaskedDateInputChange) => void;\n /**\n * Handles the selection of a date in the calendar.\n */\n handleCalendarSelection: (date: DateTime) => void;\n};\n\n/**\n * This is a hook for keeping state in sync between a date input and calendar.\n */\nexport function useDateFieldSingleState({\n valueProp,\n defaultValueProp,\n onChange,\n}: DateFieldSingleStateParam): DateFieldSingleState {\n const [value, setValue] = useOptionallyControlledState<DateTime | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const handleInputChange = (change: MaskedDateInputChange) => {\n const date = change.isInputEmpty\n ? null\n : (change.date?.startOf(\"day\") ?? null);\n onChange?.({\n date,\n isInputValid: change.isInputValid,\n isInputEmpty: change.isInputEmpty,\n });\n if (change.isInputValid) {\n setValue(change.isInputEmpty ? null : change.date);\n }\n if (change.isInputEmpty) {\n setValue(null);\n return;\n }\n if (change.date) {\n setValue(change.date);\n }\n };\n\n const handleCalendarSelection = (date: DateTime) => {\n setValue(date);\n onChange?.({\n date,\n isInputValid: true,\n isInputEmpty: false,\n });\n };\n\n return {\n value,\n setValue,\n handleInputChange,\n handleCalendarSelection,\n };\n}\n","import { DateTime, WeekdayNumbers } from \"luxon\";\nimport { Calendar, CalendarProps, CalendarValue } from \"../../Calendar\";\n\ntype DateFieldSingleCalendarProps = Omit<\n CalendarProps,\n | \"onSelection\"\n | \"value\"\n | \"onKeyDown\"\n | \"defaultFocusedDate\"\n | \"range\"\n | \"defaultTimeZone\"\n | \"unavailable\"\n | \"minDate\"\n | \"maxDate\"\n | \"defaultValue\"\n | \"_disableAutofocus\"\n> & {\n onKeyDown?: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n value: DateTime | null;\n onSelection: (date: DateTime) => void;\n minDate?: DateTime | null;\n maxDate?: DateTime | null;\n unavailable?: { dates?: DateTime[]; daysOfWeek?: WeekdayNumbers[] };\n};\n\nexport function DateFieldSingleCalendar({\n onKeyDown,\n value,\n onSelection,\n minDate,\n maxDate,\n unavailable,\n ...rest\n}: DateFieldSingleCalendarProps) {\n const handleCalendarSelection = (data: { value: CalendarValue }) => {\n if (data.value) {\n const date = DateTime.fromISO(data.value, { zone: \"utc\" });\n onSelection(date);\n }\n };\n\n return (\n <Calendar\n {...rest}\n range={false}\n onKeyDown={onKeyDown}\n defaultFocusedDate={value?.toISODate() || DateTime.now().toISODate()}\n value={value?.toISODate() || undefined}\n onSelection={handleCalendarSelection}\n defaultTimeZone=\"UTC\"\n minDate={minDate?.toISODate() ?? undefined}\n maxDate={maxDate?.toISODate() ?? undefined}\n unavailable={\n unavailable\n ? {\n dates: unavailable.dates?.map((d) => d.toISODate() ?? \"\"),\n daysOfWeek: unavailable.daysOfWeek,\n }\n : undefined\n }\n _disableAutofocus\n />\n );\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId, useMergeRefs } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport Popover from \"../Popover\";\nimport { RefObject, useMemo, useRef, useState } from \"react\";\nimport {\n MaskedDateInput,\n MaskedDateInputProps,\n MaskedDateInputRef,\n} from \"./internal/MaskedDateInput\";\nimport { DateMode } from \"./types\";\nimport { useDateFieldSingleConversion } from \"./internal/useDateFieldSingleConversion\";\nimport {\n DateFieldSingleStateChangeHandler,\n useDateFieldSingleState,\n} from \"./internal/useDateFieldSingleState\";\nimport { validateDate } from \"./internal/utils\";\nimport {\n useFocusWithin,\n usePopoverCloseDelayWorkaround,\n usePopoverSupport,\n} from \"../../internal/hooks\";\nimport { useDateFieldOrchestration } from \"./internal/useDateFieldOrchestration\";\nimport { DateFieldSingleCalendar } from \"./internal/DateFieldSingleCalendar\";\n\nexport type DateFieldSingleProps = Omit<\n MaskedDateInputProps,\n | \"onChange\"\n | \"value\"\n | \"autoComplete\"\n | \"onClick\"\n | \"onKeyDown\"\n | \"ref\"\n | \"lastValidDate\"\n | \"setLastValidDate\"\n | \"required\"\n | \"onFocus\"\n | \"onBlur\"\n> & {\n value?: string | null;\n defaultValue?: string | null;\n onChange?: DateFieldSingleChangeHandler;\n onFocus?: (event: React.FocusEvent) => void;\n onBlur?: (event: React.FocusEvent) => void;\n mode?: Extract<DateMode, \"mm/dd/yyyy\" | \"dd/mm/yyyy\">;\n disableHint?: boolean;\n disableCalendar?: boolean;\n unavailable?: {\n /**\n * The specific dates that are unavailable. ISO 8601 format.\n * @example [\"2025-07-02\"]\n */\n dates?: string[];\n /**\n * The days of the week that are unavailable.\n * (1-7, where 1 is Monday and 7 is Sunday)\n */\n daysOfWeek?: (1 | 2 | 3 | 4 | 5 | 6 | 7)[];\n };\n minDate?: string;\n maxDate?: string;\n required?: boolean;\n} & DataTrackingId;\n\nexport type DateFieldSingleChange = {\n /**\n * The date in ISO 8601 format.\n * @example \"2025-07-02\"\n */\n date: string | null;\n /**\n * Whether the input is valid. That is, it matches the format and is not empty.\n * This does not mean that the date is valid according to the constraints.\n */\n isInputValid: boolean;\n /**\n * Whether the input is empty.\n */\n isInputEmpty: boolean;\n /**\n * Whether the date is valid according to the constraints.\n * Constraints include:\n * - Required\n * - Unavailable dates\n * - Unavailable days of the week\n * - Min date\n * - Max date\n */\n isDateValid: boolean;\n};\n\nexport type DateFieldSingleChangeHandler = (\n change: DateFieldSingleChange,\n) => void;\n\nexport const DateFieldSingle = (props: DateFieldSingleProps) => {\n const data = {\n label: childrenToString(props.label),\n labelProps: props.labelProps,\n description: childrenToString(props.description),\n };\n\n const trackingId = useTrackingId({\n name: \"DateFieldSingle\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const {\n onFocus,\n onBlur,\n disableCalendar,\n required,\n mode,\n value: valueProp,\n defaultValue: defaultValueProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n onChange: onChangeProp,\n ...rest\n } = props;\n\n const inputRef = useRef<MaskedDateInputRef>(null);\n // We convert any props that deal in ISO 8601 strings to Luxon DateTime objects for easier internal use.\n const {\n value: normalizedValue,\n defaultValue: normalizedDefaultValue,\n minDate,\n maxDate,\n unavailable,\n onChange,\n } = useDateFieldSingleConversion({\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange: onChangeProp,\n minDate: minDateProp,\n maxDate: maxDateProp,\n unavailable: unavailableProp,\n });\n\n const handleChange: DateFieldSingleStateChangeHandler = (change) => {\n onChange?.({\n ...change,\n isDateValid: validateDate({\n date: change.date,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n });\n };\n\n // We use a hook to keep the value of input and the calendar in sync.\n const { value, handleInputChange, handleCalendarSelection } =\n useDateFieldSingleState({\n valueProp: normalizedValue,\n defaultValueProp: normalizedDefaultValue,\n onChange: handleChange,\n });\n\n const { props: wrapperProps } = useFocusWithin({\n onBlur: (e) => {\n onBlur?.(e);\n setCalendarOpen(false);\n },\n onFocus,\n });\n\n const [popoverTriggerRef, setPopoverTriggerRef] =\n useState<RefObject<HTMLInputElement>>();\n const popoverContentRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([popoverTriggerRef, inputRef]);\n const {\n calendarOpen,\n setCalendarOpen,\n handleCalendarKeyDown,\n handleInputKeyDown,\n } = useDateFieldOrchestration({\n inputRef,\n calendarDefaultOpen: false,\n popoverContentRef,\n disableCalendar,\n });\n\n const popoverSupported = usePopoverSupport();\n\n const shouldShowCalendar = usePopoverCloseDelayWorkaround(calendarOpen);\n\n const currentValidity = useMemo(\n () =>\n validateDate({\n date: value,\n constraints: {\n required,\n unavailable,\n minDate: minDate ?? undefined,\n maxDate: maxDate ?? undefined,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const justTheField = (\n <MaskedDateInput\n {...rest}\n mode={mode}\n ref={combinedRef}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n onClick={() => setCalendarOpen(true)}\n lastValidDate={value}\n required={required}\n autoComplete=\"off\"\n data-date-valid={currentValidity}\n data-tracking-id={trackingId}\n onFocus={!disableCalendar && !popoverSupported ? onFocus : undefined}\n onBlur={!disableCalendar && !popoverSupported ? onBlur : undefined}\n />\n );\n\n if (disableCalendar || !popoverSupported) {\n return justTheField;\n }\n\n return (\n <div {...wrapperProps}>\n <Popover\n open={calendarOpen}\n modal\n placement=\"bottom-start\"\n disableFlipFallback\n disableTriggerFocus\n onClose={() => setCalendarOpen(false)}\n disableAutoUpdate\n onClickOutside={() => setCalendarOpen(false)}\n >\n <Popover.Trigger>\n {({ ref: iRef }) => {\n setPopoverTriggerRef(iRef as RefObject<HTMLInputElement>);\n return justTheField;\n }}\n </Popover.Trigger>\n <Popover.Content ref={popoverContentRef} data-testid=\"calendar-popover\">\n {shouldShowCalendar && (\n <DateFieldSingleCalendar\n onKeyDown={handleCalendarKeyDown}\n value={value}\n onSelection={(v) => {\n inputRef.current?.focus();\n handleCalendarSelection(v);\n setCalendarOpen(false);\n }}\n minDate={minDate}\n maxDate={maxDate}\n unavailable={unavailable}\n />\n )}\n </Popover.Content>\n </Popover>\n </div>\n );\n};\n\nDateFieldSingle.displayName = \"DateFieldSingle\";\n"],"names":["datePlaceholderMask","Event","useMergeRefs"],"mappings":"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"}
|
package/dist/DateFieldSingle.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DateFieldSingle } from './DateFieldSingle-
|
|
1
|
+
export { D as DateFieldSingle } from './DateFieldSingle-yLnwpVzd.js';
|
|
2
2
|
//# sourceMappingURL=DateFieldSingle.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { m as maskitoDateOptionsGenerator, a as maskitoWithPlaceholder, u as useMaskito } from './index.esm-D889iexm.js';
|
|
3
|
-
import { T as TextField } from './TextField-
|
|
3
|
+
import { T as TextField } from './TextField-BiHxlzE3.js';
|
|
4
4
|
import { forwardRef, useState, useRef, useEffect, useMemo, useImperativeHandle } from 'react';
|
|
5
5
|
import { u as useMergeRefs } from './DrawerContext-DboTgTmo.js';
|
|
6
6
|
import { m as makeZeroShortcutPreprocessor } from './makeZeroShortcutPreprocessor-CxsiGTRW.js';
|
|
@@ -263,4 +263,4 @@ const DateFieldYearless = (props) => {
|
|
|
263
263
|
DateFieldYearless.displayName = "DateFieldYearless";
|
|
264
264
|
|
|
265
265
|
export { DateFieldYearless as D };
|
|
266
|
-
//# sourceMappingURL=DateFieldYearless-
|
|
266
|
+
//# sourceMappingURL=DateFieldYearless-Ba7HiTiI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateFieldYearless-ydxcsmRV.js","sources":["../src/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.ts","../src/components/DateFieldYearless/internal/MaskedYearlessDateInput.tsx","../src/components/DateFieldYearless/internal/utils.ts","../src/components/DateFieldYearless/DateFieldYearless.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { makeZeroShortcutPreprocessor } from \"../../../DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor\";\n\nconst yearlessDatePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n}: {\n mode: YearlessDateMode;\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 yearlessDatePlaceholderMask;\n","import { useMaskito } from \"@maskito/react\";\nimport { TextField, TextFieldProps } from \"../../TextField\";\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\nimport yearlessDatePlaceholderMask from \"./maskito/yearlessDatePlaceholderMask\";\n\nexport type MaskedYearlessDateInputChange = {\n event: React.ChangeEvent<HTMLInputElement>;\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedYearlessDateInputChangeHandler = (\n change: MaskedYearlessDateInputChange,\n) => void;\n\nexport type MaskedYearlessDateInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\"\n> & {\n onChange: MaskedYearlessDateInputChangeHandler;\n mode?: YearlessDateMode;\n value?: YearlessDate | null;\n disableHint?: boolean;\n};\n\nexport type MaskedYearlessDateInput = HTMLInputElement & {\n setValue: (value: YearlessDate | 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 MaskedYearlessDateInput = forwardRef<\n MaskedYearlessDateInput,\n MaskedYearlessDateInputProps\n>(({ onChange, mode = \"mm/dd\", value, disableHint = false, ...props }, ref) => {\n const placeholder = \"__/__\";\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder } = yearlessDatePlaceholderMask({\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 previousValue = usePrevious(value);\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 value changes.\n useEffect(() => {\n if (\n previousValue?.day !== value?.day ||\n previousValue?.month !== value?.month\n ) {\n if (value?.day && value?.month) {\n setInputValue(stringifyYearlessDate(value.day, value.month, mode));\n } else if (\n previousValue !== null &&\n previousValue !== undefined &&\n (value === null || (value?.day === null && value?.month === null))\n ) {\n setInputValue(placeholder);\n } else {\n return;\n }\n }\n }, [value, mode, previousValue]);\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 {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(event.target.value, mode, removePlaceholder);\n\n const isDateDifferent =\n (v === null) !== (currentParsedData.value === null) ||\n v?.day !== currentParsedData.value?.day ||\n v?.month !== currentParsedData.value?.month;\n\n if (!isDateDifferent) {\n return;\n }\n\n onChange?.({\n event,\n value: v ?? currentParsedData.value ?? 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 MaskedYearlessDateInput;\n return Object.assign(input, {\n setValue: (value: YearlessDate | null) => {\n if (!value) {\n setInputValue(placeholder);\n return;\n }\n setInputValue(\n stringifyYearlessDate(value.day ?? 1, value.month ?? 1, mode),\n );\n },\n });\n }, [mode, placeholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-month-value={value?.month}\n data-day-value={value?.day}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n {...props}\n showCounter={false}\n value={inputValue}\n onChange={handleChange}\n hint={disableHint ? undefined : `Format: ${mode}`}\n />\n );\n});\n\nMaskedYearlessDateInput.displayName = \"MaskedYearlessDateInput\";\n\nfunction parseInputValue(\n value: string,\n mode: YearlessDateMode,\n removePlaceholder: (value: string) => string,\n): {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n} {\n const valueMinusPlaceholder = removePlaceholder(value);\n const [segment1, segment2] = valueMinusPlaceholder.split(\"/\");\n const incompleteFirstSegment = segment1?.length !== 2;\n const incompleteSecondSegment = segment2?.length !== 2;\n if (mode === \"dd/mm\") {\n return {\n value: {\n day: incompleteFirstSegment ? null : parseInt(segment1),\n month: incompleteSecondSegment ? null : parseInt(segment2),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n }\n return {\n value: {\n day: incompleteSecondSegment ? null : parseInt(segment2),\n month: incompleteFirstSegment ? null : parseInt(segment1),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\nfunction swapMode(\n inputString: string,\n previousMode: YearlessDateMode,\n mode: YearlessDateMode,\n) {\n const { day, month } = divideSegments(inputString, previousMode);\n return stringifyYearlessDate(day, month, mode);\n}\n\nfunction divideSegments(\n value: string,\n mode: YearlessDateMode,\n): {\n day: string;\n month: string;\n} {\n const [segment1, segment2] = value.split(\"/\");\n if (mode === \"dd/mm\") {\n return { day: segment1, month: segment2 };\n }\n return { day: segment2, month: segment1 };\n}\n\nfunction stringifyYearlessDate(\n day: number | string,\n month: number | string,\n mode: YearlessDateMode,\n) {\n const dd = day.toString().padStart(2, \"0\");\n const mm = month.toString().padStart(2, \"0\");\n if (mode === \"dd/mm\") {\n return `${dd}/${mm}`;\n }\n return `${mm}/${dd}`;\n}\n","import { YearlessDate } from \"../types\";\n\nexport function validateYearlessDate({\n value,\n constraints,\n}: {\n value: YearlessDate | null;\n constraints: {\n required?: boolean;\n unavailable?: {\n dates?: YearlessDate[];\n };\n minDate?: YearlessDate | null;\n maxDate?: YearlessDate | null;\n };\n}): boolean {\n const { required, unavailable, minDate, maxDate } = constraints;\n if (!value || (!value?.day && !value?.month)) {\n return required ? false : true;\n }\n if (value.day === null || value.month === null) {\n return false;\n }\n if (\n unavailable?.dates?.some(\n (d) => d.day === value.day && d.month === value.month,\n )\n ) {\n return false;\n }\n const minDateMonth = minDate?.month ?? 1;\n const minDateDay = minDate?.day ?? 1;\n const maxDateMonth = maxDate?.month ?? 12;\n const maxDateDay = maxDate?.day ?? 31;\n if (\n value.month < minDateMonth || // Earlier month\n (value.month === minDateMonth && value.day < minDateDay) // Same month, earlier day\n ) {\n return false;\n }\n if (\n value.month > maxDateMonth || // Later month\n (value.month === maxDateMonth && value.day > maxDateDay) // Same month, later day\n ) {\n return false;\n }\n return true;\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { YearlessDate, YearlessDateMode } from \"./types\";\nimport {\n MaskedYearlessDateInput,\n MaskedYearlessDateInputChange,\n MaskedYearlessDateInputProps,\n} from \"./internal/MaskedYearlessDateInput\";\nimport { validateYearlessDate } from \"./internal/utils\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\nimport { useMemo } from \"react\";\n\nexport type DateFieldYearlessProps = Omit<\n MaskedYearlessDateInputProps,\n \"onChange\" | \"value\" | \"defaultValue\" | \"ref\" | \"required\" | \"autoComplete\"\n> & {\n /**\n * The controlled value of the date field\n */\n value?: YearlessDate | null;\n /**\n * The default value for uncontrolled usage\n */\n defaultValue?: YearlessDate | null;\n /**\n * The function to call when the date value changes\n */\n onChange?: DateFieldYearlessChangeHandler;\n /**\n * The date format mode (mm/dd or dd/mm)\n */\n mode?: YearlessDateMode;\n /**\n * Whether the field is required\n */\n required?: boolean;\n /**\n * The minimum allowed date\n */\n minDate?: YearlessDate | null;\n /**\n * The maximum allowed date\n */\n maxDate?: YearlessDate | null;\n /**\n * Configuration for unavailable dates\n */\n unavailable?: {\n /**\n * Array of dates that are not selectable\n */\n dates?: YearlessDate[];\n };\n} & DataTrackingId;\n\n/**\n * Represents a change event for the DateFieldYearless component\n */\nexport type DateFieldYearlessChange = {\n /**\n * The current date value\n */\n value: YearlessDate | null;\n /**\n * Whether the input is valid\n */\n isInputValid: boolean;\n /**\n * Whether the input is empty\n */\n isInputEmpty: boolean;\n /**\n * Whether the overall value is valid\n */\n isValid: boolean;\n};\n\n/**\n * Handler function for DateFieldYearless change events\n */\nexport type DateFieldYearlessChangeHandler = (\n change: DateFieldYearlessChange,\n) => void;\n\n/**\n * DateFieldYearless component for inputting dates without year information.\n *\n * Features:\n * - Supports both controlled and uncontrolled usage\n * - Supports different date formats (mm/dd or dd/mm)\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <DateFieldYearless\n * label=\"Birthday\"\n * mode=\"mm/dd\"\n * required\n * onChange={(change) => console.log('Date changed:', change.value)}\n * />\n */\nexport const DateFieldYearless = (props: DateFieldYearlessProps) => {\n const {\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange,\n minDate,\n maxDate,\n unavailable,\n required,\n ...restProps\n } = props;\n\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: \"DateFieldYearless\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [value, setValue] = useOptionallyControlledState<YearlessDate | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const currentValidity = useMemo(\n () =>\n validateYearlessDate({\n value: value ?? null,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const handleInputChange = (change: MaskedYearlessDateInputChange) => {\n const { event, value, ...restChange } = change;\n setValue(value);\n return onChange?.({\n ...restChange,\n value,\n isValid: validateYearlessDate({\n value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n };\n\n return (\n <MaskedYearlessDateInput\n required={required}\n data-tracking-id={trackingId}\n {...restProps}\n autoComplete=\"off\"\n onChange={handleInputChange}\n value={value}\n data-valid={currentValidity}\n />\n );\n};\n\nDateFieldYearless.displayName = \"DateFieldYearless\";\n"],"names":["value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateFieldYearless-Ba7HiTiI.js","sources":["../src/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.ts","../src/components/DateFieldYearless/internal/MaskedYearlessDateInput.tsx","../src/components/DateFieldYearless/internal/utils.ts","../src/components/DateFieldYearless/DateFieldYearless.tsx"],"sourcesContent":["import type { MaskitoOptions } from \"@maskito/core\";\nimport {\n maskitoDateOptionsGenerator,\n maskitoWithPlaceholder,\n} from \"@maskito/kit\";\n\nimport { YearlessDateMode } from \"../../types\";\nimport { makeZeroShortcutPreprocessor } from \"../../../DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor\";\n\nconst yearlessDatePlaceholderMask = ({\n mode,\n separator = \"/\",\n placeholder,\n}: {\n mode: YearlessDateMode;\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 yearlessDatePlaceholderMask;\n","import { useMaskito } from \"@maskito/react\";\nimport { TextField, TextFieldProps } from \"../../TextField\";\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMergeRefs } from \"@floating-ui/react\";\nimport { YearlessDateMode, YearlessDate } from \"../types\";\nimport { usePrevious } from \"../../../internal/hooks\";\nimport yearlessDatePlaceholderMask from \"./maskito/yearlessDatePlaceholderMask\";\n\nexport type MaskedYearlessDateInputChange = {\n event: React.ChangeEvent<HTMLInputElement>;\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n};\n\nexport type MaskedYearlessDateInputChangeHandler = (\n change: MaskedYearlessDateInputChange,\n) => void;\n\nexport type MaskedYearlessDateInputProps = Omit<\n TextFieldProps,\n \"onChange\" | \"value\" | \"ref\" | \"showCounter\" | \"hint\"\n> & {\n onChange: MaskedYearlessDateInputChangeHandler;\n mode?: YearlessDateMode;\n value?: YearlessDate | null;\n disableHint?: boolean;\n};\n\nexport type MaskedYearlessDateInput = HTMLInputElement & {\n setValue: (value: YearlessDate | 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 MaskedYearlessDateInput = forwardRef<\n MaskedYearlessDateInput,\n MaskedYearlessDateInputProps\n>(({ onChange, mode = \"mm/dd\", value, disableHint = false, ...props }, ref) => {\n const placeholder = \"__/__\";\n const [inputValue, setInputValue] = useState(placeholder);\n const { options, removePlaceholder } = yearlessDatePlaceholderMask({\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 previousValue = usePrevious(value);\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 value changes.\n useEffect(() => {\n if (\n previousValue?.day !== value?.day ||\n previousValue?.month !== value?.month\n ) {\n if (value?.day && value?.month) {\n setInputValue(stringifyYearlessDate(value.day, value.month, mode));\n } else if (\n previousValue !== null &&\n previousValue !== undefined &&\n (value === null || (value?.day === null && value?.month === null))\n ) {\n setInputValue(placeholder);\n } else {\n return;\n }\n }\n }, [value, mode, previousValue]);\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 {\n value: v,\n isInputValid,\n isInputEmpty,\n } = parseInputValue(event.target.value, mode, removePlaceholder);\n\n const isDateDifferent =\n (v === null) !== (currentParsedData.value === null) ||\n v?.day !== currentParsedData.value?.day ||\n v?.month !== currentParsedData.value?.month;\n\n if (!isDateDifferent) {\n return;\n }\n\n onChange?.({\n event,\n value: v ?? currentParsedData.value ?? 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 MaskedYearlessDateInput;\n return Object.assign(input, {\n setValue: (value: YearlessDate | null) => {\n if (!value) {\n setInputValue(placeholder);\n return;\n }\n setInputValue(\n stringifyYearlessDate(value.day ?? 1, value.month ?? 1, mode),\n );\n },\n });\n }, [mode, placeholder]);\n\n return (\n <TextField\n ref={combinedRef}\n data-month-value={value?.month}\n data-day-value={value?.day}\n data-input-valid={currentParsedData.isInputValid}\n data-input-empty={currentParsedData.isInputEmpty}\n {...props}\n showCounter={false}\n value={inputValue}\n onChange={handleChange}\n hint={disableHint ? undefined : `Format: ${mode}`}\n />\n );\n});\n\nMaskedYearlessDateInput.displayName = \"MaskedYearlessDateInput\";\n\nfunction parseInputValue(\n value: string,\n mode: YearlessDateMode,\n removePlaceholder: (value: string) => string,\n): {\n value: YearlessDate | null;\n isInputValid: boolean;\n isInputEmpty: boolean;\n} {\n const valueMinusPlaceholder = removePlaceholder(value);\n const [segment1, segment2] = valueMinusPlaceholder.split(\"/\");\n const incompleteFirstSegment = segment1?.length !== 2;\n const incompleteSecondSegment = segment2?.length !== 2;\n if (mode === \"dd/mm\") {\n return {\n value: {\n day: incompleteFirstSegment ? null : parseInt(segment1),\n month: incompleteSecondSegment ? null : parseInt(segment2),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n }\n return {\n value: {\n day: incompleteSecondSegment ? null : parseInt(segment2),\n month: incompleteFirstSegment ? null : parseInt(segment1),\n },\n isInputValid: !incompleteFirstSegment && !incompleteSecondSegment,\n isInputEmpty: valueMinusPlaceholder === \"\",\n };\n}\n\nfunction swapMode(\n inputString: string,\n previousMode: YearlessDateMode,\n mode: YearlessDateMode,\n) {\n const { day, month } = divideSegments(inputString, previousMode);\n return stringifyYearlessDate(day, month, mode);\n}\n\nfunction divideSegments(\n value: string,\n mode: YearlessDateMode,\n): {\n day: string;\n month: string;\n} {\n const [segment1, segment2] = value.split(\"/\");\n if (mode === \"dd/mm\") {\n return { day: segment1, month: segment2 };\n }\n return { day: segment2, month: segment1 };\n}\n\nfunction stringifyYearlessDate(\n day: number | string,\n month: number | string,\n mode: YearlessDateMode,\n) {\n const dd = day.toString().padStart(2, \"0\");\n const mm = month.toString().padStart(2, \"0\");\n if (mode === \"dd/mm\") {\n return `${dd}/${mm}`;\n }\n return `${mm}/${dd}`;\n}\n","import { YearlessDate } from \"../types\";\n\nexport function validateYearlessDate({\n value,\n constraints,\n}: {\n value: YearlessDate | null;\n constraints: {\n required?: boolean;\n unavailable?: {\n dates?: YearlessDate[];\n };\n minDate?: YearlessDate | null;\n maxDate?: YearlessDate | null;\n };\n}): boolean {\n const { required, unavailable, minDate, maxDate } = constraints;\n if (!value || (!value?.day && !value?.month)) {\n return required ? false : true;\n }\n if (value.day === null || value.month === null) {\n return false;\n }\n if (\n unavailable?.dates?.some(\n (d) => d.day === value.day && d.month === value.month,\n )\n ) {\n return false;\n }\n const minDateMonth = minDate?.month ?? 1;\n const minDateDay = minDate?.day ?? 1;\n const maxDateMonth = maxDate?.month ?? 12;\n const maxDateDay = maxDate?.day ?? 31;\n if (\n value.month < minDateMonth || // Earlier month\n (value.month === minDateMonth && value.day < minDateDay) // Same month, earlier day\n ) {\n return false;\n }\n if (\n value.month > maxDateMonth || // Later month\n (value.month === maxDateMonth && value.day > maxDateDay) // Same month, later day\n ) {\n return false;\n }\n return true;\n}\n","import { childrenToString } from \"../../internal/functions\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { YearlessDate, YearlessDateMode } from \"./types\";\nimport {\n MaskedYearlessDateInput,\n MaskedYearlessDateInputChange,\n MaskedYearlessDateInputProps,\n} from \"./internal/MaskedYearlessDateInput\";\nimport { validateYearlessDate } from \"./internal/utils\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\nimport { useMemo } from \"react\";\n\nexport type DateFieldYearlessProps = Omit<\n MaskedYearlessDateInputProps,\n \"onChange\" | \"value\" | \"defaultValue\" | \"ref\" | \"required\" | \"autoComplete\"\n> & {\n /**\n * The controlled value of the date field\n */\n value?: YearlessDate | null;\n /**\n * The default value for uncontrolled usage\n */\n defaultValue?: YearlessDate | null;\n /**\n * The function to call when the date value changes\n */\n onChange?: DateFieldYearlessChangeHandler;\n /**\n * The date format mode (mm/dd or dd/mm)\n */\n mode?: YearlessDateMode;\n /**\n * Whether the field is required\n */\n required?: boolean;\n /**\n * The minimum allowed date\n */\n minDate?: YearlessDate | null;\n /**\n * The maximum allowed date\n */\n maxDate?: YearlessDate | null;\n /**\n * Configuration for unavailable dates\n */\n unavailable?: {\n /**\n * Array of dates that are not selectable\n */\n dates?: YearlessDate[];\n };\n} & DataTrackingId;\n\n/**\n * Represents a change event for the DateFieldYearless component\n */\nexport type DateFieldYearlessChange = {\n /**\n * The current date value\n */\n value: YearlessDate | null;\n /**\n * Whether the input is valid\n */\n isInputValid: boolean;\n /**\n * Whether the input is empty\n */\n isInputEmpty: boolean;\n /**\n * Whether the overall value is valid\n */\n isValid: boolean;\n};\n\n/**\n * Handler function for DateFieldYearless change events\n */\nexport type DateFieldYearlessChangeHandler = (\n change: DateFieldYearlessChange,\n) => void;\n\n/**\n * DateFieldYearless component for inputting dates without year information.\n *\n * Features:\n * - Supports both controlled and uncontrolled usage\n * - Supports different date formats (mm/dd or dd/mm)\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <DateFieldYearless\n * label=\"Birthday\"\n * mode=\"mm/dd\"\n * required\n * onChange={(change) => console.log('Date changed:', change.value)}\n * />\n */\nexport const DateFieldYearless = (props: DateFieldYearlessProps) => {\n const {\n value: valueProp,\n defaultValue: defaultValueProp,\n onChange,\n minDate,\n maxDate,\n unavailable,\n required,\n ...restProps\n } = props;\n\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: \"DateFieldYearless\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [value, setValue] = useOptionallyControlledState<YearlessDate | null>({\n controlledValue: valueProp,\n defaultValue: defaultValueProp,\n });\n\n const currentValidity = useMemo(\n () =>\n validateYearlessDate({\n value: value ?? null,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n [value, required, unavailable, minDate, maxDate],\n );\n\n const handleInputChange = (change: MaskedYearlessDateInputChange) => {\n const { event, value, ...restChange } = change;\n setValue(value);\n return onChange?.({\n ...restChange,\n value,\n isValid: validateYearlessDate({\n value,\n constraints: {\n required: required,\n unavailable: unavailable,\n minDate: minDate,\n maxDate: maxDate,\n },\n }),\n });\n };\n\n return (\n <MaskedYearlessDateInput\n required={required}\n data-tracking-id={trackingId}\n {...restProps}\n autoComplete=\"off\"\n onChange={handleInputChange}\n value={value}\n data-valid={currentValidity}\n />\n );\n};\n\nDateFieldYearless.displayName = \"DateFieldYearless\";\n"],"names":["value"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DateFieldYearless } from './DateFieldYearless-
|
|
1
|
+
export { D as DateFieldYearless } from './DateFieldYearless-Ba7HiTiI.js';
|
|
2
2
|
//# sourceMappingURL=DateFieldYearless.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef, useId, useMemo } from 'react';
|
|
3
|
-
import { F as FieldLabel } from './FieldLabel-
|
|
3
|
+
import { F as FieldLabel } from './FieldLabel-BsbTTyom.js';
|
|
4
4
|
import { B as ButtonToggle } from './ButtonToggle-pSwg7NvT.js';
|
|
5
5
|
import { T as Tooltip } from './Tooltip-BI3Xs75X.js';
|
|
6
6
|
import { F as Flex } from './Flex-BdQMekvA.js';
|
|
@@ -107,4 +107,4 @@ const DaysOfTheWeek = forwardRef(
|
|
|
107
107
|
DaysOfTheWeek.displayName = "DaysOfTheWeek";
|
|
108
108
|
|
|
109
109
|
export { DaysOfTheWeek as D };
|
|
110
|
-
//# sourceMappingURL=DaysOfTheWeek-
|
|
110
|
+
//# sourceMappingURL=DaysOfTheWeek-BYSYZySH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DaysOfTheWeek-
|
|
1
|
+
{"version":3,"file":"DaysOfTheWeek-BYSYZySH.js","sources":["../src/components/DaysOfTheWeek/DaysOfTheWeek.tsx"],"sourcesContent":["import {\n AriaAttributes,\n ReactElement,\n Ref,\n forwardRef,\n useId,\n useMemo,\n} from \"react\";\nimport { DataTrackingId } from \"../../types\";\nimport styles from \"./DaysOfTheWeek.module.scss\";\nimport { FieldLabel, FieldLabelProps } from \"../FieldLabel\";\n\nimport ButtonToggle from \"../ButtonToggle\";\nimport Tooltip from \"../Tooltip\";\nimport { Helper } from \"../../internal/components\";\nimport Flex from \"../Flex\";\n\n/**\n * Props for the DaysOfTheWeek component\n */\nexport type DaysOfTheWeekProps = {\n /**\n * The selected days (1-7, where 1 is Monday and 7 is Sunday)\n */\n selectedDays?: number[];\n /**\n * Callback fired when the selection changes\n */\n onChange?: (selectedDays: number[]) => void;\n /**\n * Whether the component is disabled\n * Can be a boolean to disable all days, or an array of day numbers (1-7) to disable specific days\n */\n disabled?: boolean | number[];\n /**\n * The first day of the week (1-7, where 1 is Monday and 7 is Sunday)\n * @default 1\n */\n firstDay?: number;\n /**\n * Hint text or element to display above the component\n */\n hint?: ReactElement | string;\n /**\n * ID for the component\n */\n id?: string;\n /**\n * Description text or element to display below the component\n */\n description?: ReactElement | string;\n /**\n * Error message to display when there is an error\n */\n errorMessage?: ReactElement | string;\n /**\n * aria-live for the error message\n * @default assertive\n */\n errorAriaLive?: AriaAttributes[\"aria-live\"];\n /**\n * Label text or element\n */\n label?: FieldLabelProps[\"children\"];\n /**\n * Whether the field is required\n */\n required?: boolean;\n /**\n * Additional info to display in a tooltip next to the label\n */\n moreInfo?: FieldLabelProps[\"moreInfo\"];\n /**\n * Additional props to pass to the Label component\n */\n labelProps?: FieldLabelProps;\n} & DataTrackingId;\n\ninterface DayInfo {\n short: string;\n full: string;\n}\n\n// Days in order from Monday to Sunday\nconst DAYS: DayInfo[] = [\n { short: \"Mo\", full: \"Monday\" },\n { short: \"Tu\", full: \"Tuesday\" },\n { short: \"We\", full: \"Wednesday\" },\n { short: \"Th\", full: \"Thursday\" },\n { short: \"Fr\", full: \"Friday\" },\n { short: \"Sa\", full: \"Saturday\" },\n { short: \"Su\", full: \"Sunday\" },\n];\n\n/**\n * DaysOfTheWeek component for selecting multiple days of the week.\n *\n * Features:\n * - Displays days of the week as toggleable buttons\n * - Supports custom first day of the week (Monday-Sunday)\n * - Individual day selection and deselection\n * - Optional label, hint, description, and error messaging\n * - Full accessibility support with ARIA attributes\n * - Tooltips showing full day names on hover\n * - Responsive design with flexible layout\n * - Support for disabling specific days or the entire component\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <DaysOfTheWeek\n * selectedDays={[2, 4, 6]}\n * onChange={(days) => console.log('Selected days:', days)}\n * label=\"Working Days\"\n * firstDay={1}\n * />\n */\nexport const DaysOfTheWeek = forwardRef(\n (props: DaysOfTheWeekProps, ref: Ref<HTMLDivElement>) => {\n const {\n selectedDays = [],\n onChange,\n disabled,\n firstDay = 7,\n hint,\n id: idProp,\n description,\n errorMessage,\n errorAriaLive,\n label,\n required,\n moreInfo,\n labelProps,\n } = props;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const labelUid = useId();\n const helperUid = useId();\n\n const orderedDays = useMemo(() => {\n const firstDayIndex = firstDay - 1;\n return [...DAYS.slice(firstDayIndex), ...DAYS.slice(0, firstDayIndex)];\n }, [firstDay]);\n\n const handleDayToggle = (index: number) => {\n // Convert from 0-based array index to 1-based day number, accounting for firstDay\n const dayNumber = ((index + firstDay - 1) % 7) + 1;\n const newSelectedDays = selectedDays.includes(dayNumber)\n ? selectedDays.filter((d) => d !== dayNumber)\n : [...selectedDays, dayNumber];\n\n onChange?.(newSelectedDays);\n };\n\n const isDayDisabled = (dayNumber: number) => {\n if (typeof disabled === \"boolean\") {\n return disabled;\n }\n if (Array.isArray(disabled)) {\n return disabled.includes(dayNumber);\n }\n return false;\n };\n\n return (\n <div className={styles[\"days-of-the-week-container\"]}>\n {label ? (\n <FieldLabel\n moreInfo={moreInfo}\n required={required}\n id={labelUid}\n htmlFor={id}\n {...labelProps}\n >\n {label}\n </FieldLabel>\n ) : null}\n <Flex ref={ref} gap={2} className={styles[\"days-of-the-week\"]} id={id}>\n {orderedDays.map((day, index) => {\n // Convert from 0-based array index to 1-based day number, accounting for firstDay\n const dayNumber = ((index + firstDay - 1) % 7) + 1;\n return (\n <Tooltip key={day.short} placement=\"top\">\n <Tooltip.Trigger className={styles[\"button-toggle-wrapper\"]}>\n <ButtonToggle\n checked={selectedDays.includes(dayNumber)}\n onClick={() => handleDayToggle(index)}\n disabled={isDayDisabled(dayNumber)}\n className={styles[\"button-toggle\"]}\n id={label ? labelUid : undefined}\n aria-describedby={helperUid}\n >\n {day.short}\n </ButtonToggle>\n </Tooltip.Trigger>\n <Tooltip.Content>{day.full}</Tooltip.Content>\n </Tooltip>\n );\n })}\n </Flex>\n <Helper\n id={helperUid}\n hint={hint}\n description={description}\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n />\n </div>\n );\n },\n);\nDaysOfTheWeek.displayName = \"DaysOfTheWeek\";\n"],"names":[],"mappings":"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"}
|
package/dist/DaysOfTheWeek.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { D as DaysOfTheWeek, D as default } from './DaysOfTheWeek-
|
|
1
|
+
export { D as DaysOfTheWeek, D as default } from './DaysOfTheWeek-BYSYZySH.js';
|
|
2
2
|
//# sourceMappingURL=DaysOfTheWeek.js.map
|
|
@@ -7,7 +7,7 @@ import { B as Button } from './Button-BxFXQ0-n.js';
|
|
|
7
7
|
import { D as DialogContext } from './DrawerContext-DboTgTmo.js';
|
|
8
8
|
import { useTrackingId } from './useTrackingId.js';
|
|
9
9
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
10
|
-
import { a as ToastProvider, b as ToasterPopover, c as ToasterContent } from './Toaster-
|
|
10
|
+
import { a as ToastProvider, b as ToasterPopover, c as ToasterContent } from './Toaster-9cpG_tWR.js';
|
|
11
11
|
import { u as useDialogTransitionStates, a as useDialogScrollLock } from './useDialogTransitionStates-2NaE_noq.js';
|
|
12
12
|
import { a as useKeyboardFocusables, b as useOnClickOutside } from './useOnClickOutside-BHEWMLa9.js';
|
|
13
13
|
import { g as getActiveElement } from './getActiveElement-BcSyVE7S.js';
|
|
@@ -378,4 +378,4 @@ const Dialog = Object.assign(DialogElement, {
|
|
|
378
378
|
});
|
|
379
379
|
|
|
380
380
|
export { Dialog as D, DialogCancelButton as a, DialogContent as b, DialogFooter as c, DialogHeader as d };
|
|
381
|
-
//# sourceMappingURL=Dialog-
|
|
381
|
+
//# sourceMappingURL=Dialog-CgkrvrQu.js.map
|