@salt-ds/lab 1.0.0-alpha.52 → 1.0.0-alpha.54
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/css/salt-lab.css +280 -38
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -2
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-cjs/calendar/Calendar.js +55 -26
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarDateGrid.css.js +6 -0
- package/dist-cjs/calendar/CalendarDateGrid.css.js.map +1 -0
- package/dist-cjs/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +37 -14
- package/dist-cjs/calendar/CalendarDateGrid.js.map +1 -0
- package/dist-cjs/calendar/CalendarNavigation.js +7 -5
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +4 -3
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +2 -4
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +16 -43
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/carousel/Carousel.js +5 -5
- package/dist-cjs/carousel/Carousel.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuItem.js +2 -2
- package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-cjs/contact-details/ContactMetadata.js +2 -2
- package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
- package/dist-cjs/date-input/DateInputRange.js +2 -0
- package/dist-cjs/date-input/DateInputRange.js.map +1 -1
- package/dist-cjs/date-input/DateInputSingle.js +2 -0
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +40 -5
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js +7 -3
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +5 -4
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +33 -9
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js +5 -4
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSinglePanel.js +19 -5
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-cjs/date-picker/useDatePicker.js +91 -63
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
- package/dist-cjs/dropdown/DropdownButton.js +4 -2
- package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
- package/dist-cjs/index.js +10 -0
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/menu-button/MenuButtonTrigger.js +2 -2
- package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryListItem.js +2 -2
- package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-cjs/query-input/internal/ValueList.js +2 -2
- package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
- package/dist-cjs/search-input/SearchInput.js +2 -1
- package/dist-cjs/search-input/SearchInput.js.map +1 -1
- package/dist-cjs/static-list/StaticList.css.js +6 -0
- package/dist-cjs/static-list/StaticList.css.js.map +1 -0
- package/dist-cjs/static-list/StaticList.js +32 -0
- package/dist-cjs/static-list/StaticList.js.map +1 -0
- package/dist-cjs/static-list/StaticListItem.css.js +6 -0
- package/dist-cjs/static-list/StaticListItem.css.js.map +1 -0
- package/dist-cjs/static-list/StaticListItem.js +33 -0
- package/dist-cjs/static-list/StaticListItem.js.map +1 -0
- package/dist-cjs/static-list/StaticListItemContent.css.js +6 -0
- package/dist-cjs/static-list/StaticListItemContent.css.js.map +1 -0
- package/dist-cjs/static-list/StaticListItemContent.js +30 -0
- package/dist-cjs/static-list/StaticListItemContent.js.map +1 -0
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +8 -8
- package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
- package/dist-cjs/stepper-input/StepperInput.css.js +1 -1
- package/dist-cjs/stepper-input/StepperInput.js +214 -29
- package/dist-cjs/stepper-input/StepperInput.js.map +1 -1
- package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js +54 -0
- package/dist-cjs/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
- package/dist-cjs/stepper-input/internal/utils.js +43 -0
- package/dist-cjs/stepper-input/internal/utils.js.map +1 -0
- package/dist-cjs/stepper-input/useStepperInput.js +88 -172
- package/dist-cjs/stepper-input/useStepperInput.js.map +1 -1
- package/dist-cjs/tabs/Tab.js +14 -12
- package/dist-cjs/tabs/Tab.js.map +1 -1
- package/dist-cjs/tabs/Tabstrip.js +2 -1
- package/dist-cjs/tabs/Tabstrip.js.map +1 -1
- package/dist-cjs/tabs-next/OverflowMenu.js +2 -2
- package/dist-cjs/tabs-next/OverflowMenu.js.map +1 -1
- package/dist-cjs/tokenized-input/TokenizedInputBase.js +3 -3
- package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputPill.js +2 -2
- package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +3 -3
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/InputPill.js +2 -2
- package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +2 -2
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -2
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-es/calendar/Calendar.js +57 -28
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarDateGrid.css.js +4 -0
- package/dist-es/calendar/CalendarDateGrid.css.js.map +1 -0
- package/dist-es/calendar/{internal/CalendarCarousel.js → CalendarDateGrid.js} +37 -14
- package/dist-es/calendar/CalendarDateGrid.js.map +1 -0
- package/dist-es/calendar/CalendarNavigation.js +8 -6
- package/dist-es/calendar/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/{internal/CalendarWeekHeader.js → CalendarWeekHeader.js} +4 -3
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -0
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +2 -4
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +16 -43
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/carousel/Carousel.js +6 -6
- package/dist-es/carousel/Carousel.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuItem.js +3 -3
- package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-es/contact-details/ContactMetadata.js +3 -3
- package/dist-es/contact-details/ContactMetadata.js.map +1 -1
- package/dist-es/date-input/DateInputRange.js +2 -0
- package/dist-es/date-input/DateInputRange.js.map +1 -1
- package/dist-es/date-input/DateInputSingle.js +2 -0
- package/dist-es/date-input/DateInputSingle.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +40 -5
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js +7 -3
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +5 -4
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +33 -9
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js +5 -4
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerSinglePanel.js +19 -5
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-es/date-picker/useDatePicker.js +92 -64
- package/dist-es/date-picker/useDatePicker.js.map +1 -1
- package/dist-es/dropdown/DropdownButton.js +6 -4
- package/dist-es/dropdown/DropdownButton.js.map +1 -1
- package/dist-es/index.js +5 -0
- package/dist-es/index.js.map +1 -1
- package/dist-es/menu-button/MenuButtonTrigger.js +3 -3
- package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-es/query-input/internal/CategoryListItem.js +3 -3
- package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-es/query-input/internal/ValueList.js +3 -3
- package/dist-es/query-input/internal/ValueList.js.map +1 -1
- package/dist-es/search-input/SearchInput.js +3 -2
- package/dist-es/search-input/SearchInput.js.map +1 -1
- package/dist-es/static-list/StaticList.css.js +4 -0
- package/dist-es/static-list/StaticList.css.js.map +1 -0
- package/dist-es/static-list/StaticList.js +28 -0
- package/dist-es/static-list/StaticList.js.map +1 -0
- package/dist-es/static-list/StaticListItem.css.js +4 -0
- package/dist-es/static-list/StaticListItem.css.js.map +1 -0
- package/dist-es/static-list/StaticListItem.js +29 -0
- package/dist-es/static-list/StaticListItem.js.map +1 -0
- package/dist-es/static-list/StaticListItemContent.css.js +4 -0
- package/dist-es/static-list/StaticListItemContent.css.js.map +1 -0
- package/dist-es/static-list/StaticListItemContent.js +26 -0
- package/dist-es/static-list/StaticListItemContent.js.map +1 -0
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +9 -9
- package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
- package/dist-es/stepper-input/StepperInput.css.js +1 -1
- package/dist-es/stepper-input/StepperInput.js +216 -31
- package/dist-es/stepper-input/StepperInput.js.map +1 -1
- package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js +50 -0
- package/dist-es/stepper-input/internal/useActivateWhileMouseDown.js.map +1 -0
- package/dist-es/stepper-input/internal/utils.js +32 -0
- package/dist-es/stepper-input/internal/utils.js.map +1 -0
- package/dist-es/stepper-input/useStepperInput.js +88 -172
- package/dist-es/stepper-input/useStepperInput.js.map +1 -1
- package/dist-es/tabs/Tab.js +15 -13
- package/dist-es/tabs/Tab.js.map +1 -1
- package/dist-es/tabs/Tabstrip.js +4 -3
- package/dist-es/tabs/Tabstrip.js.map +1 -1
- package/dist-es/tabs-next/OverflowMenu.js +3 -3
- package/dist-es/tabs-next/OverflowMenu.js.map +1 -1
- package/dist-es/tokenized-input/TokenizedInputBase.js +3 -3
- package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputPill.js +2 -2
- package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.js +3 -3
- package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/InputPill.js +2 -2
- package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js +3 -3
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-types/calendar/Calendar.d.ts +2 -15
- package/dist-types/calendar/CalendarDateGrid.d.ts +10 -0
- package/dist-types/calendar/{internal/CalendarWeekHeader.d.ts → CalendarWeekHeader.d.ts} +1 -1
- package/dist-types/calendar/index.d.ts +2 -0
- package/dist-types/calendar/internal/CalendarMonth.d.ts +9 -1
- package/dist-types/calendar/useCalendarSelection.d.ts +0 -7
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +17 -1
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +9 -1
- package/dist-types/index.d.ts +1 -0
- package/dist-types/static-list/StaticList.d.ts +8 -0
- package/dist-types/static-list/StaticListItem.d.ts +4 -0
- package/dist-types/static-list/StaticListItemContent.d.ts +8 -0
- package/dist-types/static-list/index.d.ts +3 -0
- package/dist-types/stepper-input/StepperInput.d.ts +66 -19
- package/dist-types/stepper-input/internal/useActivateWhileMouseDown.d.ts +5 -0
- package/dist-types/stepper-input/internal/utils.d.ts +8 -0
- package/dist-types/stepper-input/useStepperInput.d.ts +21 -8
- package/package.json +2 -2
- package/dist-cjs/calendar/internal/CalendarCarousel.css.js +0 -6
- package/dist-cjs/calendar/internal/CalendarCarousel.css.js.map +0 -1
- package/dist-cjs/calendar/internal/CalendarCarousel.js.map +0 -1
- package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +0 -1
- package/dist-cjs/stepper-input/internal/useSpinner.js +0 -33
- package/dist-cjs/stepper-input/internal/useSpinner.js.map +0 -1
- package/dist-es/calendar/internal/CalendarCarousel.css.js +0 -4
- package/dist-es/calendar/internal/CalendarCarousel.css.js.map +0 -1
- package/dist-es/calendar/internal/CalendarCarousel.js.map +0 -1
- package/dist-es/calendar/internal/CalendarWeekHeader.js.map +0 -1
- package/dist-es/stepper-input/internal/useSpinner.js +0 -29
- package/dist-es/stepper-input/internal/useSpinner.js.map +0 -1
- package/dist-types/calendar/internal/CalendarCarousel.d.ts +0 -3
- package/dist-types/stepper-input/internal/useSpinner.d.ts +0 -5
- /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
- /package/dist-cjs/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
- /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js → CalendarWeekHeader.css.js} +0 -0
- /package/dist-es/calendar/{internal/CalendarWeekHeader.css.js.map → CalendarWeekHeader.css.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n type DateValue,\n type TimeFields,\n getLocalTimeZone,\n} from \"@internationalized/date\";\nimport {\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type RefObject,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n type SingleDateSelection,\n formatDate as defaultFormatDate,\n getCurrentLocale,\n} from \"../calendar\";\nimport dateInputCss from \"./DateInput.css\";\nimport { extractTimeFieldsFromDate, parseCalendarDate } from \"./utils\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleParserError = string | false;\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleError = DateInputSingleParserError;\n\n/**\n * Return value of DateInputSingle parser.\n * @template T\n */\nexport interface DateInputSingleParserResult<T = DateValue | null> {\n /**\n * The parsed date value.\n */\n date: T;\n /**\n * The error encountered during parsing, if any.\n */\n error: DateInputSingleParserError;\n}\n\n/**\n * Props for the DateInputSingle component.\n * @template T\n */\nexport interface DateInputSingleProps<T = SingleDateSelection>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n format?: (date: DateValue | null) => string;\n /**\n * Reference for the input.\n */\n inputRef?: RefObject<HTMLInputElement>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: T | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: T | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The new date value.\n * @param error - The date input single error.\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: T | null,\n error: DateInputSingleError,\n ) => void;\n /**\n * Function to parse date string to valid `DateValue` or null, if invalid or empty.\n * @param inputDate - The input date string.\n * @returns The result of the date input single parser.\n */\n parse?: (inputDate: string) => DateInputSingleParserResult;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param newValue - The new date input value.\n * @param isFormatted - Whether the value is formatted.\n */\n onDateValueChange?: (newValue: string, isFormatted: boolean) => void;\n /**\n * Locale of the entered date.\n */\n locale?: string;\n /**\n * Timezone of the entered date.\n */\n timeZone?: string;\n}\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n function DateInput(props, ref) {\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n onClick,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n format: formatProp,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse = parseCalendarDate,\n placeholder = \"dd mmm yyyy\",\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n locale = getCurrentLocale(),\n timeZone = getLocalTimeZone(),\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const lastError = useRef<string | false>(false);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate,\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const preservedTime = useRef<TimeFields | undefined>(\n extractTimeFieldsFromDate(date || null),\n );\n\n const format = useCallback(\n (date: DateValue | null) => {\n return formatProp\n ? formatProp(date)\n : defaultFormatDate(date, locale, { timeZone });\n },\n [formatProp, locale, timeZone],\n );\n\n // Update date string value when selected date changes\n useEffect(() => {\n const formattedDate = format(date || null);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }, [date, format, locale, timeZone]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: parsedDate, error } = parse(dateValue ?? \"\");\n let newDate = parsedDate;\n if (newDate) {\n const formattedDate = format(newDate);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }\n const hasDateChanged =\n newDate && date ? newDate.compare(date) !== 0 : newDate !== date;\n if (hasDateChanged) {\n setDate(newDate);\n if (newDate && preservedTime.current) {\n newDate = newDate.set(preservedTime.current);\n }\n }\n if (hasDateChanged || lastError.current !== error) {\n onDateChange?.(event, newDate, error);\n }\n lastError.current = error;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(newDateValue, false);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n innerInputRef?.current?.focus();\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n inputId,\n )}\n aria-label={clsx(\"Selected date\", ariaLabel)}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n size={placeholder.length}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DateInput","parseCalendarDate","getCurrentLocale","getLocalTimeZone","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","date","useControlled","extractTimeFieldsFromDate","useCallback","defaultFormatDate","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n type DateValue,\n type TimeFields,\n getLocalTimeZone,\n} from \"@internationalized/date\";\nimport {\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type RefObject,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n type SingleDateSelection,\n formatDate as defaultFormatDate,\n getCurrentLocale,\n} from \"../calendar\";\nimport dateInputCss from \"./DateInput.css\";\nimport { extractTimeFieldsFromDate, parseCalendarDate } from \"./utils\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleParserError = string | false;\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleError = DateInputSingleParserError;\n\n/**\n * Return value of DateInputSingle parser.\n * @template T\n */\nexport interface DateInputSingleParserResult<T = DateValue | null> {\n /**\n * The parsed date value.\n */\n date: T;\n /**\n * The error encountered during parsing, if any.\n */\n error: DateInputSingleParserError;\n}\n\n/**\n * Props for the DateInputSingle component.\n * @template T\n */\nexport interface DateInputSingleProps<T = SingleDateSelection>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n format?: (date: DateValue | null) => string;\n /**\n * Reference for the input.\n */\n inputRef?: RefObject<HTMLInputElement>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: T | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: T | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The new date value.\n * @param error - The date input single error.\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: T | null,\n error: DateInputSingleError,\n ) => void;\n /**\n * Function to parse date string to valid `DateValue` or null, if invalid or empty.\n * @param inputDate - The input date string.\n * @returns The result of the date input single parser.\n */\n parse?: (inputDate: string) => DateInputSingleParserResult;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param newValue - The new date input value.\n * @param isFormatted - Whether the value is formatted.\n */\n onDateValueChange?: (newValue: string, isFormatted: boolean) => void;\n /**\n * Locale of the entered date.\n */\n locale?: string;\n /**\n * Timezone of the entered date.\n */\n timeZone?: string;\n}\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n function DateInput(props, ref) {\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n onClick,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n format: formatProp,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse = parseCalendarDate,\n placeholder = \"dd mmm yyyy\",\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n locale = getCurrentLocale(),\n timeZone = getLocalTimeZone(),\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const lastError = useRef<string | false>(false);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate,\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const preservedTime = useRef<TimeFields | undefined>(\n extractTimeFieldsFromDate(date || null),\n );\n\n const format = useCallback(\n (date: DateValue | null) => {\n return formatProp\n ? formatProp(date)\n : defaultFormatDate(date, locale, { timeZone });\n },\n [formatProp, locale, timeZone],\n );\n\n // Update date string value when selected date changes\n useEffect(() => {\n const formattedDate = format(date || null);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }, [date, format, locale, timeZone]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: parsedDate, error } = parse(dateValue ?? \"\");\n let newDate = parsedDate;\n if (newDate) {\n const formattedDate = format(newDate);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }\n const hasDateChanged =\n newDate && date ? newDate.compare(date) !== 0 : newDate !== date;\n if (hasDateChanged) {\n setDate(newDate);\n if (newDate && preservedTime.current) {\n newDate = newDate.set(preservedTime.current);\n }\n }\n if (hasDateChanged || lastError.current !== error) {\n onDateChange?.(event, newDate, error);\n }\n lastError.current = error;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(newDateValue, false);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n innerInputRef?.current?.focus();\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n inputId,\n )}\n aria-label={clsx(\"Selected date\", ariaLabel)}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n size={placeholder.length}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","DateInput","parseCalendarDate","getCurrentLocale","getLocalTimeZone","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","date","useControlled","extractTimeFieldsFromDate","useCallback","defaultFormatDate","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
|
|
@@ -11,24 +11,59 @@ var useDatePicker = require('./useDatePicker.js');
|
|
|
11
11
|
const DatePickerMain = react.forwardRef(
|
|
12
12
|
function DatePickerMain2(props, ref) {
|
|
13
13
|
var _a, _b;
|
|
14
|
-
const {
|
|
14
|
+
const {
|
|
15
|
+
children,
|
|
16
|
+
readOnly,
|
|
17
|
+
disabled,
|
|
18
|
+
selectionVariant,
|
|
19
|
+
defaultSelectedDate,
|
|
20
|
+
selectedDate,
|
|
21
|
+
onSelectedDateChange,
|
|
22
|
+
onApply,
|
|
23
|
+
minDate,
|
|
24
|
+
maxDate,
|
|
25
|
+
timeZone,
|
|
26
|
+
locale,
|
|
27
|
+
onCancel,
|
|
28
|
+
...rest
|
|
29
|
+
} = props;
|
|
30
|
+
const useDatePickerProps = {
|
|
31
|
+
readOnly,
|
|
32
|
+
disabled,
|
|
33
|
+
selectionVariant,
|
|
34
|
+
defaultSelectedDate,
|
|
35
|
+
selectedDate,
|
|
36
|
+
onSelectedDateChange,
|
|
37
|
+
onApply,
|
|
38
|
+
minDate,
|
|
39
|
+
maxDate,
|
|
40
|
+
timeZone,
|
|
41
|
+
locale,
|
|
42
|
+
onCancel
|
|
43
|
+
};
|
|
15
44
|
if (props.selectionVariant === "range") {
|
|
16
|
-
const stateAndHelpers2 = useDatePicker.useDatePicker(
|
|
45
|
+
const stateAndHelpers2 = useDatePicker.useDatePicker(
|
|
46
|
+
useDatePickerProps,
|
|
47
|
+
ref
|
|
48
|
+
);
|
|
17
49
|
return /* @__PURE__ */ jsxRuntime.jsx(DatePickerContext.DateRangeSelectionContext.Provider, {
|
|
18
50
|
value: stateAndHelpers2,
|
|
19
51
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
20
|
-
className,
|
|
21
52
|
ref: (_a = stateAndHelpers2 == null ? void 0 : stateAndHelpers2.state) == null ? void 0 : _a.containerRef,
|
|
53
|
+
...rest,
|
|
22
54
|
children
|
|
23
55
|
})
|
|
24
56
|
});
|
|
25
57
|
}
|
|
26
|
-
const stateAndHelpers = useDatePicker.useDatePicker(
|
|
58
|
+
const stateAndHelpers = useDatePicker.useDatePicker(
|
|
59
|
+
useDatePickerProps,
|
|
60
|
+
ref
|
|
61
|
+
);
|
|
27
62
|
return /* @__PURE__ */ jsxRuntime.jsx(DatePickerContext.SingleDateSelectionContext.Provider, {
|
|
28
63
|
value: stateAndHelpers,
|
|
29
64
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
30
|
-
className,
|
|
31
65
|
ref: (_b = stateAndHelpers == null ? void 0 : stateAndHelpers.state) == null ? void 0 : _b.containerRef,
|
|
66
|
+
...rest,
|
|
32
67
|
children
|
|
33
68
|
})
|
|
34
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { type ReactNode, forwardRef } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport { DatePickerOverlayProvider } from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\n}\n\nexport interface DatePickerSingleProps\n extends DatePickerBaseProps,\n UseDatePickerSingleProps {\n selectionVariant: \"single\";\n}\n\nexport interface DatePickerRangeProps\n extends DatePickerBaseProps,\n UseDatePickerRangeProps {\n selectionVariant: \"range\";\n}\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nexport const DatePickerMain = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePickerMain(props, ref) {\n const {
|
|
1
|
+
{"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { type ReactNode, forwardRef } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport { DatePickerOverlayProvider } from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\n}\n\nexport interface DatePickerSingleProps\n extends DatePickerBaseProps,\n UseDatePickerSingleProps {\n selectionVariant: \"single\";\n}\n\nexport interface DatePickerRangeProps\n extends DatePickerBaseProps,\n UseDatePickerRangeProps {\n selectionVariant: \"range\";\n}\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nexport const DatePickerMain = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePickerMain(props, ref) {\n const {\n children,\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectedDateChange,\n onApply,\n minDate,\n maxDate,\n timeZone,\n locale,\n onCancel,\n ...rest\n } = props;\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useDatePickerProps: any = {\n readOnly,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectedDateChange,\n onApply,\n minDate,\n maxDate,\n timeZone,\n locale,\n onCancel,\n };\n if (props.selectionVariant === \"range\") {\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as RangeDatePickerState;\n return (\n <DateRangeSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </DateRangeSelectionContext.Provider>\n );\n }\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as SingleDatePickerState;\n return (\n <SingleDateSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </SingleDateSelectionContext.Provider>\n );\n },\n);\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(props, ref) {\n const { open, defaultOpen, ...rest } = props;\n\n return (\n <DatePickerOverlayProvider open={open} defaultOpen={defaultOpen}>\n <DatePickerMain {...rest} ref={ref} />\n </DatePickerOverlayProvider>\n );\n },\n);\n"],"names":["forwardRef","DatePickerMain","stateAndHelpers","useDatePicker","jsx","DateRangeSelectionContext","SingleDateSelectionContext","DatePicker","DatePickerOverlayProvider"],"mappings":";;;;;;;;;;AA0CO,MAAM,cAAiB,GAAAA,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AA3CtC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4CI,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACG,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AAEJ,IAAA,MAAM,kBAA0B,GAAA;AAAA,MAC9B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,KACF,CAAA;AACA,IAAI,IAAA,KAAA,CAAM,qBAAqB,OAAS,EAAA;AACtC,MAAA,MAAMC,gBAAkB,GAAAC,2BAAA;AAAA,QACtB,kBAAA;AAAA,QACA,GAAA;AAAA,OACF,CAAA;AACA,MACE,uBAAAC,cAAA,CAACC,4CAA0B,QAA1B,EAAA;AAAA,QAAmC,KAAOH,EAAAA,gBAAAA;AAAA,QACzC,QAAC,kBAAAE,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,MAAK,EAAAF,GAAAA,gBAAAA,IAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAiB,UAAjB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA;AAAA,UAAe,GAAG,IAAA;AAAA,UACjD,QAAA;AAAA,SACH,CAAA;AAAA,OACF,CAAA,CAAA;AAAA,KAEJ;AACA,IAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,MACtB,kBAAA;AAAA,MACA,GAAA;AAAA,KACF,CAAA;AACA,IACE,uBAAAC,cAAA,CAACE,6CAA2B,QAA3B,EAAA;AAAA,MAAoC,KAAO,EAAA,eAAA;AAAA,MAC1C,QAAC,kBAAAF,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,GAAA,EAAA,CAAK,EAAiB,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,KAAA,KAAjB,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,YAAA;AAAA,QAAe,GAAG,IAAA;AAAA,QACjD,QAAA;AAAA,OACH,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEO,MAAM,UAAa,GAAAJ,gBAAA;AAAA,EACxB,SAASO,WAAW,CAAA,KAAA,EAAO,GAAK,EAAA;AAC9B,IAAA,MAAM,EAAE,IAAA,EAAM,WAAgB,EAAA,GAAA,IAAA,EAAS,GAAA,KAAA,CAAA;AAEvC,IAAA,uBACGH,cAAA,CAAAI,mDAAA,EAAA;AAAA,MAA0B,IAAA;AAAA,MAAY,WAAA;AAAA,MACrC,QAAC,kBAAAJ,cAAA,CAAA,cAAA,EAAA;AAAA,QAAgB,GAAG,IAAA;AAAA,QAAM,GAAA;AAAA,OAAU,CAAA;AAAA,KACtC,CAAA,CAAA;AAAA,GAEJ;AACF;;;;;"}
|
|
@@ -28,7 +28,8 @@ const DatePickerActions = react.forwardRef(function DatePickerActions2(props, re
|
|
|
28
28
|
CancelButtonProps,
|
|
29
29
|
onApply,
|
|
30
30
|
onCancel,
|
|
31
|
-
selectionVariant
|
|
31
|
+
selectionVariant,
|
|
32
|
+
...rest
|
|
32
33
|
} = props;
|
|
33
34
|
const targetWindow = window.useWindow();
|
|
34
35
|
styles.useComponentCssInjection({
|
|
@@ -73,13 +74,15 @@ const DatePickerActions = react.forwardRef(function DatePickerActions2(props, re
|
|
|
73
74
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
74
75
|
className: clsx.clsx(className, withBaseName()),
|
|
75
76
|
ref,
|
|
77
|
+
...rest,
|
|
76
78
|
children: [
|
|
77
79
|
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
78
80
|
className: withBaseName("body"),
|
|
79
81
|
children
|
|
80
82
|
}),
|
|
81
83
|
/* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
82
|
-
|
|
84
|
+
appearance: "transparent",
|
|
85
|
+
sentiment: "neutral",
|
|
83
86
|
ref: cancelButtonRef,
|
|
84
87
|
...CancelButtonProps,
|
|
85
88
|
onClick: handleCancel,
|
|
@@ -87,7 +90,8 @@ const DatePickerActions = react.forwardRef(function DatePickerActions2(props, re
|
|
|
87
90
|
children: "Cancel"
|
|
88
91
|
}),
|
|
89
92
|
/* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
90
|
-
|
|
93
|
+
appearance: "solid",
|
|
94
|
+
sentiment: "accented",
|
|
91
95
|
ref: applyButtonRef,
|
|
92
96
|
...ApplyButtonProps,
|
|
93
97
|
onClick: handleApply,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport React, {\n type ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n type SyntheticEvent,\n type MouseEventHandler,\n type Ref,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./index\";\nimport \"./DatePickerActions.css\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport datePickerActions from \"./DatePickerActions.css\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef<\n HTMLDivElement,\n DatePickerActionsProps<\"single\" | \"range\">\n>(function DatePickerActions(props, ref) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: state and helpers coerced based on selectionVariant\n let stateAndHelpers: any;\n if (selectionVariant === \"range\") {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"range\",\n }) as RangeDatePickerState;\n } else {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState;\n }\n\n const {\n state: { selectedDate },\n helpers: { cancel, apply, setEnableApply },\n } = stateAndHelpers;\n\n useEffect(() => {\n setEnableApply(true);\n }, [setEnableApply]);\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel();\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"single\") {\n apply(selectedDate, false);\n onApply?.(event, selectedDate);\n } else {\n apply(selectedDate, { startDate: false, endDate: false });\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n
|
|
1
|
+
{"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport React, {\n type ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n type SyntheticEvent,\n type MouseEventHandler,\n type Ref,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./index\";\nimport \"./DatePickerActions.css\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport datePickerActions from \"./DatePickerActions.css\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef<\n HTMLDivElement,\n DatePickerActionsProps<\"single\" | \"range\">\n>(function DatePickerActions(props, ref) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: state and helpers coerced based on selectionVariant\n let stateAndHelpers: any;\n if (selectionVariant === \"range\") {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"range\",\n }) as RangeDatePickerState;\n } else {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState;\n }\n\n const {\n state: { selectedDate },\n helpers: { cancel, apply, setEnableApply },\n } = stateAndHelpers;\n\n useEffect(() => {\n setEnableApply(true);\n }, [setEnableApply]);\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel();\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n if (selectionVariant === \"single\") {\n apply(selectedDate, false);\n onApply?.(event, selectedDate);\n } else {\n apply(selectedDate, { startDate: false, endDate: false });\n onApply?.(event, selectedDate);\n }\n ApplyButtonProps?.onClick?.(event);\n };\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerActions","useWindow","useComponentCssInjection","datePickerActions","useDatePickerContext","useEffect","jsxs","clsx","jsx","Button"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var core = require('@salt-ds/core');
|
|
7
|
-
var icons = require('@salt-ds/icons');
|
|
8
7
|
var clsx = require('clsx');
|
|
9
8
|
var react = require('react');
|
|
10
9
|
require('../date-input/DateInputSingle.js');
|
|
@@ -26,6 +25,7 @@ const DatePickerRangeInput = react.forwardRef(function DatePickerRangeInput2(pro
|
|
|
26
25
|
onDateValueChange,
|
|
27
26
|
...rest
|
|
28
27
|
} = props;
|
|
28
|
+
const { CalendarIcon } = core.useIcon();
|
|
29
29
|
const {
|
|
30
30
|
state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },
|
|
31
31
|
helpers: { setSelectedDate }
|
|
@@ -69,7 +69,7 @@ const DatePickerRangeInput = react.forwardRef(function DatePickerRangeInput2(pro
|
|
|
69
69
|
endDate: false
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
|
-
}, [cancelled
|
|
72
|
+
}, [cancelled]);
|
|
73
73
|
const startInputProps = {
|
|
74
74
|
onKeyDown: (event) => {
|
|
75
75
|
var _a;
|
|
@@ -104,11 +104,12 @@ const DatePickerRangeInput = react.forwardRef(function DatePickerRangeInput2(pro
|
|
|
104
104
|
onDateValueChange: handleDateValueChange,
|
|
105
105
|
onChange,
|
|
106
106
|
endAdornment: /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
107
|
-
|
|
107
|
+
appearance: "transparent",
|
|
108
|
+
sentiment: "neutral",
|
|
108
109
|
onClick: handleCalendarButton,
|
|
109
110
|
disabled,
|
|
110
111
|
"aria-label": "Open Calendar",
|
|
111
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CalendarIcon, {})
|
|
112
113
|
}),
|
|
113
114
|
...rest
|
|
114
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerRangeInput.js","sources":["../src/date-picker/DatePickerRangeInput.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"DatePickerRangeInput.js","sources":["../src/date-picker/DatePickerRangeInput.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useForkRef,\n useIcon,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEvent,\n type KeyboardEventHandler,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport {\n DateInputRange,\n type DateInputRangeError,\n type DateInputRangeProps,\n type DateInputRangeValue,\n} from \"../date-input\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerRangeInput\");\n\n/**\n * Props for the DatePickerRangeInput component.\n */\nexport interface DatePickerRangeInputProps extends DateInputRangeProps {}\n\nexport const DatePickerRangeInput = forwardRef<\n HTMLDivElement,\n DatePickerRangeInputProps\n>(function DatePickerRangeInput(props, ref) {\n const {\n className,\n endInputProps: endInputPropsProp,\n startInputProps: startInputPropsProp,\n onKeyDown,\n defaultValue,\n value: valueProp,\n onChange,\n onDateValueChange,\n ...rest\n } = props;\n\n const { CalendarIcon } = useIcon();\n\n const {\n state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"range\" });\n const {\n state: { open, floatingUIResult },\n helpers: { getReferenceProps, setOpen },\n } = useDatePickerOverlay();\n\n const inputRef = useForkRef<HTMLDivElement>(ref, floatingUIResult?.reference);\n const prevState = useRef<\n { date: typeof selectedDate; value: typeof valueProp } | undefined\n >();\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerRangeInput\",\n state: \"dateValue\",\n });\n\n const handleCalendarButton = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const handleDateChange = useCallback(\n (\n _event: SyntheticEvent,\n newDate: DateRangeSelection | null,\n error: DateInputRangeError,\n ) => {\n setSelectedDate(newDate, error);\n },\n [setSelectedDate],\n );\n\n const handleDateValueChange = (\n newDateValue: DateInputRangeValue,\n isFormatted: boolean,\n ) => {\n setValue(newDateValue);\n onDateValueChange?.(newDateValue, isFormatted);\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n prevState.current = { date: selectedDate, value };\n }\n }, [open]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: avoid excessive re-rendering\n useEffect(() => {\n if (cancelled) {\n setValue(prevState?.current?.value);\n setSelectedDate(prevState?.current?.date || null, {\n startDate: false,\n endDate: false,\n });\n }\n }, [cancelled]);\n\n const startInputProps: {\n onKeyDown: KeyboardEventHandler<HTMLInputElement>;\n } = {\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n setOpen(true);\n }\n startInputPropsProp?.onKeyDown?.(event);\n },\n ...startInputPropsProp,\n };\n const endInputProps: {\n onKeyDown: KeyboardEventHandler<HTMLInputElement>;\n } = {\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n setOpen(true);\n }\n endInputPropsProp?.onKeyDown?.(event);\n },\n ...endInputPropsProp,\n };\n\n return (\n <DateInputRange\n value={value || { startDate: \"\", endDate: \"\" }}\n locale={locale}\n timeZone={timeZone}\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n date={selectedDate}\n startInputProps={getReferenceProps(startInputProps)}\n endInputProps={getReferenceProps(endInputProps)}\n readOnly={readOnly}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n onChange={onChange}\n endAdornment={\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon />\n </Button>\n }\n {...rest}\n />\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerRangeInput","useIcon","useDatePickerContext","useDatePickerOverlay","useForkRef","useRef","useControlled","useCallback","useEffect","jsx","DateInputRange","clsx","Button"],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ var clsx = require('clsx');
|
|
|
11
11
|
var react = require('react');
|
|
12
12
|
var Calendar = require('../calendar/Calendar.js');
|
|
13
13
|
var CalendarNavigation = require('../calendar/CalendarNavigation.js');
|
|
14
|
+
var CalendarWeekHeader = require('../calendar/CalendarWeekHeader.js');
|
|
15
|
+
var CalendarDateGrid = require('../calendar/CalendarDateGrid.js');
|
|
14
16
|
require('../calendar/internal/CalendarContext.js');
|
|
15
17
|
var formatDate = require('../calendar/formatDate.js');
|
|
16
18
|
require('../calendar/useCalendarSelection.js');
|
|
@@ -50,8 +52,13 @@ const DatePickerRangePanel = react.forwardRef(function DatePickerRangePanel2(pro
|
|
|
50
52
|
onSelect,
|
|
51
53
|
StartCalendarProps: StartCalendarPropsProp,
|
|
52
54
|
StartCalendarNavigationProps,
|
|
55
|
+
StartCalendarWeekHeaderProps,
|
|
56
|
+
StartCalendarDataGridProps,
|
|
53
57
|
EndCalendarProps: EndCalendarPropsProp,
|
|
54
|
-
EndCalendarNavigationProps
|
|
58
|
+
EndCalendarNavigationProps,
|
|
59
|
+
EndCalendarWeekHeaderProps,
|
|
60
|
+
EndCalendarDataGridProps,
|
|
61
|
+
...rest
|
|
55
62
|
} = props;
|
|
56
63
|
const targetWindow = window.useWindow();
|
|
57
64
|
styles.useComponentCssInjection({
|
|
@@ -169,6 +176,7 @@ const DatePickerRangePanel = react.forwardRef(function DatePickerRangePanel2(pro
|
|
|
169
176
|
gap: 0,
|
|
170
177
|
className: clsx__default["default"](className, withBaseName("container")),
|
|
171
178
|
ref,
|
|
179
|
+
...rest,
|
|
172
180
|
children: [
|
|
173
181
|
helperText && /* @__PURE__ */ jsxRuntime.jsx(core.FlexItem, {
|
|
174
182
|
className: withBaseName("header"),
|
|
@@ -181,19 +189,35 @@ const DatePickerRangePanel = react.forwardRef(function DatePickerRangePanel2(pro
|
|
|
181
189
|
children: /* @__PURE__ */ jsxRuntime.jsxs(core.FormFieldContext.Provider, {
|
|
182
190
|
value: {},
|
|
183
191
|
children: [
|
|
184
|
-
/* @__PURE__ */ jsxRuntime.
|
|
192
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Calendar.Calendar, {
|
|
185
193
|
selectionVariant: "range",
|
|
186
194
|
...StartCalendarProps,
|
|
187
|
-
children:
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
children: [
|
|
196
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarNavigation.CalendarNavigation, {
|
|
197
|
+
...StartCalendarNavigationProps
|
|
198
|
+
}),
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarWeekHeader.CalendarWeekHeader, {
|
|
200
|
+
...StartCalendarWeekHeaderProps
|
|
201
|
+
}),
|
|
202
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarDateGrid.CalendarDateGrid, {
|
|
203
|
+
...StartCalendarDataGridProps
|
|
204
|
+
})
|
|
205
|
+
]
|
|
190
206
|
}),
|
|
191
|
-
/* @__PURE__ */ jsxRuntime.
|
|
207
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Calendar.Calendar, {
|
|
192
208
|
selectionVariant: "range",
|
|
193
209
|
...EndCalendarProps,
|
|
194
|
-
children:
|
|
195
|
-
|
|
196
|
-
|
|
210
|
+
children: [
|
|
211
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarNavigation.CalendarNavigation, {
|
|
212
|
+
...EndCalendarNavigationProps
|
|
213
|
+
}),
|
|
214
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarWeekHeader.CalendarWeekHeader, {
|
|
215
|
+
...EndCalendarWeekHeaderProps
|
|
216
|
+
}),
|
|
217
|
+
/* @__PURE__ */ jsxRuntime.jsx(CalendarDateGrid.CalendarDateGrid, {
|
|
218
|
+
...EndCalendarDataGridProps
|
|
219
|
+
})
|
|
220
|
+
]
|
|
197
221
|
})
|
|
198
222
|
]
|
|
199
223
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerRangePanel.js","sources":["../src/date-picker/DatePickerRangePanel.tsx"],"sourcesContent":["import {\n type DateValue,\n endOfMonth,\n getLocalTimeZone,\n isSameMonth,\n startOfMonth,\n today,\n} from \"@internationalized/date\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n StackLayout,\n makePrefixer,\n useControlled,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport clsx from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarOffsetProps,\n type CalendarProps,\n type CalendarRangeProps,\n type DateRangeSelection,\n type UseCalendarSelectionRangeProps,\n getCurrentLocale,\n} from \"../calendar\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Props for the DatePickerRangePanel component.\n * @template T - The type of the selected date range.\n */\nexport interface DatePickerRangePanelProps<T>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when a date range is selected.\n * @param event - The synthetic event.\n * @param selectedDate - The selected date range or null.\n */\n onSelect?: (event: SyntheticEvent, selectedDate?: T | null) => void;\n\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n\n /**\n * The currently visible month for the start date.\n */\n startVisibleMonth?: DateValue;\n\n /**\n * The default visible month for the start date.\n */\n defaultStartVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the start date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the start date.\n */\n onStartVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * The currently visible month for the end date.\n */\n endVisibleMonth?: DateValue;\n\n /**\n * The default visible month for the end date.\n */\n defaultEndVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the end date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the end date.\n */\n onEndVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * Props to be passed to the start date CalendarNavigation component.\n */\n StartCalendarNavigationProps?: CalendarNavigationProps;\n\n /**\n * Props to be passed to the start date calendar component.\n */\n StartCalendarProps?: Partial<\n Omit<\n CalendarRangeProps | CalendarOffsetProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarProps?: Partial<\n Omit<\n CalendarRangeProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarNavigationProps?: CalendarNavigationProps;\n}\n\nfunction getFallbackVisibleMonths(\n selectedDate: DateRangeSelection | null,\n timeZone: string,\n) {\n const createConsecutiveRange = (date: DateValue) => [\n startOfMonth(date),\n startOfMonth(date).add({ months: 1 }),\n ];\n\n if (selectedDate?.startDate) {\n const { startDate, endDate } = selectedDate;\n if (endDate) {\n return isSameMonth(startDate, endDate)\n ? createConsecutiveRange(startDate)\n : [startOfMonth(startDate), startOfMonth(endDate)];\n }\n return createConsecutiveRange(startDate);\n }\n\n const currentMonth = startOfMonth(today(timeZone));\n return [currentMonth, currentMonth.add({ months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerRangePanel = forwardRef<\n HTMLDivElement,\n DatePickerRangePanelProps<DateRangeSelection>\n>(function DatePickerRangePanel(props, ref) {\n const {\n className,\n defaultStartVisibleMonth: defaultStartVisibleMonthProp,\n startVisibleMonth: startVisibleMonthProp,\n onStartVisibleMonthChange,\n defaultEndVisibleMonth: defaultEndVisibleMonthProp,\n endVisibleMonth: endVisibleMonthProp,\n onEndVisibleMonthChange,\n helperText,\n onSelect,\n StartCalendarProps: StartCalendarPropsProp,\n StartCalendarNavigationProps,\n EndCalendarProps: EndCalendarPropsProp,\n EndCalendarNavigationProps,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-range-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const {\n state: {\n selectedDate,\n timeZone = getLocalTimeZone(),\n minDate = startOfMonth(today(timeZone)),\n maxDate = minDate.add({ months: 1 }),\n locale = getCurrentLocale(),\n },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"range\" });\n\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(() =>\n getFallbackVisibleMonths(selectedDate, timeZone),\n );\n\n const [startVisibleMonth, setStartVisibleMonth] = useControlled({\n controlled: startVisibleMonthProp,\n default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"startVisibleMonth\",\n });\n\n const [endVisibleMonth, setEndVisibleMonth] = useControlled({\n controlled: endVisibleMonthProp,\n default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"endVisibleMonth\",\n });\n\n const handleSelectedDateChange = useCallback(\n (event: SyntheticEvent, newDate: DateRangeSelection | null) => {\n setSelectedDate(newDate, { startDate: false, endDate: false });\n onSelect?.(event, newDate);\n },\n [onSelect, setSelectedDate],\n );\n\n const handleHoveredStartDateChange: CalendarProps[\"onHoveredDateChange\"] =\n useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && StartCalendarPropsProp?.onHoveredDateChange) {\n StartCalendarPropsProp.onHoveredDateChange?.(event, newHoveredDate);\n }\n },\n [StartCalendarPropsProp?.onHoveredDateChange],\n );\n const handleHoveredEndDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && EndCalendarPropsProp?.onHoveredDateChange) {\n EndCalendarPropsProp.onHoveredDateChange(event, newHoveredDate);\n }\n },\n [EndCalendarPropsProp?.onHoveredDateChange],\n );\n\n const handleStartVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setStartVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(endVisibleMonth) >= 0) {\n setEndVisibleMonth(newVisibleMonth.add({ months: 1 }));\n }\n onStartVisibleMonthChange?.(event, newVisibleMonth);\n },\n [endVisibleMonth, onStartVisibleMonthChange],\n );\n\n const handleEndVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setEndVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(startVisibleMonth) <= 0) {\n setStartVisibleMonth(\n startOfMonth(newVisibleMonth.subtract({ months: 1 })),\n );\n }\n onEndVisibleMonthChange?.(event, newVisibleMonth);\n },\n [startVisibleMonth, onEndVisibleMonthChange],\n );\n\n function getHoveredDate(\n date?: DateValue | null,\n hoveredDate?: DateValue | null,\n ) {\n return date && hoveredDate && hoveredDate?.compare(endOfMonth(date)) > 0\n ? endOfMonth(date)\n : hoveredDate;\n }\n\n const StartCalendarProps = {\n visibleMonth: startVisibleMonth,\n hoveredDate: getHoveredDate(selectedDate?.startDate, hoveredDate),\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredStartDateChange,\n onVisibleMonthChange: handleStartVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...StartCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n const EndCalendarProps = {\n visibleMonth: endVisibleMonth,\n hoveredDate,\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredEndDateChange,\n onVisibleMonthChange: handleEndVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...EndCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={ref}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar selectionVariant={\"range\"} {...StartCalendarProps}>\n <CalendarNavigation {...StartCalendarNavigationProps} />\n </Calendar>\n <Calendar selectionVariant={\"range\"} {...EndCalendarProps}>\n <CalendarNavigation {...EndCalendarNavigationProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["date","startOfMonth","isSameMonth","today","makePrefixer","forwardRef","DatePickerRangePanel","useWindow","useComponentCssInjection","datePickerPanelCss","getLocalTimeZone","getCurrentLocale","useDatePickerContext","useState","useControlled","useCallback","hoveredDate","endOfMonth","jsxs","StackLayout","clsx","jsx","FlexItem","FormFieldHelperText","FlexLayout","FormFieldContext","Calendar","CalendarNavigation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePickerRangePanel.js","sources":["../src/date-picker/DatePickerRangePanel.tsx"],"sourcesContent":["import {\n type DateValue,\n endOfMonth,\n getLocalTimeZone,\n isSameMonth,\n startOfMonth,\n today,\n} from \"@internationalized/date\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n StackLayout,\n makePrefixer,\n useControlled,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport clsx from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarDateGrid,\n type CalendarDateGridProps,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarOffsetProps,\n type CalendarProps,\n type CalendarRangeProps,\n CalendarWeekHeader,\n type CalendarWeekHeaderProps,\n type DateRangeSelection,\n type UseCalendarSelectionRangeProps,\n getCurrentLocale,\n} from \"../calendar\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Props for the DatePickerRangePanel component.\n * @template T - The type of the selected date range.\n */\nexport interface DatePickerRangePanelProps<T>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when a date range is selected.\n * @param event - The synthetic event.\n * @param selectedDate - The selected date range or null.\n */\n onSelect?: (event: SyntheticEvent, selectedDate?: T | null) => void;\n\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n\n /**\n * The currently visible month for the start date.\n */\n startVisibleMonth?: DateValue;\n\n /**\n * The default visible month for the start date.\n */\n defaultStartVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the start date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the start date.\n */\n onStartVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * The currently visible month for the end date.\n */\n endVisibleMonth?: DateValue;\n\n /**\n * The default visible month for the end date.\n */\n defaultEndVisibleMonth?: DateValue;\n\n /**\n * Callback fired when the visible month for the end date changes.\n * @param event - The synthetic event.\n * @param visibleMonth - The new visible month for the end date.\n */\n onEndVisibleMonthChange?: (\n event: SyntheticEvent,\n visibleMonth: DateValue,\n ) => void;\n\n /**\n * Props to be passed to the start date CalendarNavigation component.\n */\n StartCalendarNavigationProps?: CalendarNavigationProps;\n\n /**\n * Props to be passed to the start date calendar component.\n */\n StartCalendarProps?: Partial<\n Omit<\n CalendarRangeProps | CalendarOffsetProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n /**\n * Props to be passed to the start date CalendarWeekHeader component.\n */\n StartCalendarWeekHeaderProps?: CalendarWeekHeaderProps;\n /**\n * Props to be passed to the start date CalendarDataGrid component.\n */\n StartCalendarDataGridProps?: CalendarDateGridProps;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarProps?: Partial<\n Omit<\n CalendarRangeProps,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarNavigationProps?: CalendarNavigationProps;\n /**\n * Props to be passed to the end date CalendarWeekHeader component.\n */\n EndCalendarWeekHeaderProps?: CalendarWeekHeaderProps;\n /**\n * Props to be passed to the end date CalendarDataGrid component.\n */\n EndCalendarDataGridProps?: CalendarDateGridProps;\n}\n\nfunction getFallbackVisibleMonths(\n selectedDate: DateRangeSelection | null,\n timeZone: string,\n) {\n const createConsecutiveRange = (date: DateValue) => [\n startOfMonth(date),\n startOfMonth(date).add({ months: 1 }),\n ];\n\n if (selectedDate?.startDate) {\n const { startDate, endDate } = selectedDate;\n if (endDate) {\n return isSameMonth(startDate, endDate)\n ? createConsecutiveRange(startDate)\n : [startOfMonth(startDate), startOfMonth(endDate)];\n }\n return createConsecutiveRange(startDate);\n }\n\n const currentMonth = startOfMonth(today(timeZone));\n return [currentMonth, currentMonth.add({ months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerRangePanel = forwardRef<\n HTMLDivElement,\n DatePickerRangePanelProps<DateRangeSelection>\n>(function DatePickerRangePanel(props, ref) {\n const {\n className,\n defaultStartVisibleMonth: defaultStartVisibleMonthProp,\n startVisibleMonth: startVisibleMonthProp,\n onStartVisibleMonthChange,\n defaultEndVisibleMonth: defaultEndVisibleMonthProp,\n endVisibleMonth: endVisibleMonthProp,\n onEndVisibleMonthChange,\n helperText,\n onSelect,\n StartCalendarProps: StartCalendarPropsProp,\n StartCalendarNavigationProps,\n StartCalendarWeekHeaderProps,\n StartCalendarDataGridProps,\n EndCalendarProps: EndCalendarPropsProp,\n EndCalendarNavigationProps,\n EndCalendarWeekHeaderProps,\n EndCalendarDataGridProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-range-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const {\n state: {\n selectedDate,\n timeZone = getLocalTimeZone(),\n minDate = startOfMonth(today(timeZone)),\n maxDate = minDate.add({ months: 1 }),\n locale = getCurrentLocale(),\n },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"range\" });\n\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(() =>\n getFallbackVisibleMonths(selectedDate, timeZone),\n );\n\n const [startVisibleMonth, setStartVisibleMonth] = useControlled({\n controlled: startVisibleMonthProp,\n default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"startVisibleMonth\",\n });\n\n const [endVisibleMonth, setEndVisibleMonth] = useControlled({\n controlled: endVisibleMonthProp,\n default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"endVisibleMonth\",\n });\n\n const handleSelectedDateChange = useCallback(\n (event: SyntheticEvent, newDate: DateRangeSelection | null) => {\n setSelectedDate(newDate, { startDate: false, endDate: false });\n onSelect?.(event, newDate);\n },\n [onSelect, setSelectedDate],\n );\n\n const handleHoveredStartDateChange: CalendarProps[\"onHoveredDateChange\"] =\n useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && StartCalendarPropsProp?.onHoveredDateChange) {\n StartCalendarPropsProp.onHoveredDateChange?.(event, newHoveredDate);\n }\n },\n [StartCalendarPropsProp?.onHoveredDateChange],\n );\n const handleHoveredEndDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: DateValue | null) => {\n setHoveredDate(newHoveredDate);\n if (newHoveredDate && EndCalendarPropsProp?.onHoveredDateChange) {\n EndCalendarPropsProp.onHoveredDateChange(event, newHoveredDate);\n }\n },\n [EndCalendarPropsProp?.onHoveredDateChange],\n );\n\n const handleStartVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setStartVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(endVisibleMonth) >= 0) {\n setEndVisibleMonth(newVisibleMonth.add({ months: 1 }));\n }\n onStartVisibleMonthChange?.(event, newVisibleMonth);\n },\n [endVisibleMonth, onStartVisibleMonthChange],\n );\n\n const handleEndVisibleMonthChange = useCallback(\n (event: SyntheticEvent, newVisibleMonth: DateValue) => {\n setEndVisibleMonth(newVisibleMonth);\n if (newVisibleMonth.compare(startVisibleMonth) <= 0) {\n setStartVisibleMonth(\n startOfMonth(newVisibleMonth.subtract({ months: 1 })),\n );\n }\n onEndVisibleMonthChange?.(event, newVisibleMonth);\n },\n [startVisibleMonth, onEndVisibleMonthChange],\n );\n\n function getHoveredDate(\n date?: DateValue | null,\n hoveredDate?: DateValue | null,\n ) {\n return date && hoveredDate && hoveredDate?.compare(endOfMonth(date)) > 0\n ? endOfMonth(date)\n : hoveredDate;\n }\n\n const StartCalendarProps = {\n visibleMonth: startVisibleMonth,\n hoveredDate: getHoveredDate(selectedDate?.startDate, hoveredDate),\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredStartDateChange,\n onVisibleMonthChange: handleStartVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...StartCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n const EndCalendarProps = {\n visibleMonth: endVisibleMonth,\n hoveredDate,\n selectedDate: selectedDate as DateRangeSelection,\n onHoveredDateChange: handleHoveredEndDateChange,\n onVisibleMonthChange: handleEndVisibleMonthChange,\n onSelectedDateChange: handleSelectedDateChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n locale,\n timeZone,\n ...EndCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps>;\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={ref}\n {...rest}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar selectionVariant={\"range\"} {...StartCalendarProps}>\n <CalendarNavigation {...StartCalendarNavigationProps} />\n <CalendarWeekHeader {...StartCalendarWeekHeaderProps} />\n <CalendarDateGrid {...StartCalendarDataGridProps} />\n </Calendar>\n <Calendar selectionVariant={\"range\"} {...EndCalendarProps}>\n <CalendarNavigation {...EndCalendarNavigationProps} />\n <CalendarWeekHeader {...EndCalendarWeekHeaderProps} />\n <CalendarDateGrid {...EndCalendarDataGridProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["date","startOfMonth","isSameMonth","today","makePrefixer","forwardRef","DatePickerRangePanel","useWindow","useComponentCssInjection","datePickerPanelCss","getLocalTimeZone","getCurrentLocale","useDatePickerContext","useState","useControlled","useCallback","hoveredDate","endOfMonth","jsxs","StackLayout","clsx","jsx","FlexItem","FormFieldHelperText","FlexLayout","FormFieldContext","Calendar","CalendarNavigation","CalendarWeekHeader","CalendarDateGrid"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var core = require('@salt-ds/core');
|
|
7
|
-
var icons = require('@salt-ds/icons');
|
|
8
7
|
var clsx = require('clsx');
|
|
9
8
|
var react = require('react');
|
|
10
9
|
var DateInputSingle = require('../date-input/DateInputSingle.js');
|
|
@@ -24,6 +23,7 @@ const DatePickerSingleInput = react.forwardRef(function DatePickerSingleInput2(p
|
|
|
24
23
|
onDateValueChange,
|
|
25
24
|
...rest
|
|
26
25
|
} = props;
|
|
26
|
+
const { CalendarIcon } = core.useIcon();
|
|
27
27
|
const {
|
|
28
28
|
state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },
|
|
29
29
|
helpers: { setSelectedDate }
|
|
@@ -64,7 +64,7 @@ const DatePickerSingleInput = react.forwardRef(function DatePickerSingleInput2(p
|
|
|
64
64
|
setValue((_a = prevState == null ? void 0 : prevState.current) == null ? void 0 : _a.value);
|
|
65
65
|
setSelectedDate(((_b = prevState == null ? void 0 : prevState.current) == null ? void 0 : _b.date) || null, false);
|
|
66
66
|
}
|
|
67
|
-
}, [cancelled
|
|
67
|
+
}, [cancelled]);
|
|
68
68
|
return /* @__PURE__ */ jsxRuntime.jsx(DateInputSingle.DateInputSingle, {
|
|
69
69
|
value: value || "",
|
|
70
70
|
locale,
|
|
@@ -76,11 +76,12 @@ const DatePickerSingleInput = react.forwardRef(function DatePickerSingleInput2(p
|
|
|
76
76
|
onDateChange: handleDateChange,
|
|
77
77
|
onDateValueChange: handleDateValueChange,
|
|
78
78
|
endAdornment: /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
79
|
-
|
|
79
|
+
appearance: "transparent",
|
|
80
|
+
sentiment: "neutral",
|
|
80
81
|
onClick: handleCalendarButton,
|
|
81
82
|
disabled,
|
|
82
83
|
"aria-label": "Open Calendar",
|
|
83
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
84
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(CalendarIcon, {})
|
|
84
85
|
}),
|
|
85
86
|
...getReferenceProps({
|
|
86
87
|
...rest,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerSingleInput.js","sources":["../src/date-picker/DatePickerSingleInput.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"DatePickerSingleInput.js","sources":["../src/date-picker/DatePickerSingleInput.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useForkRef,\n useIcon,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type KeyboardEvent,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport {\n DateInputSingle,\n type DateInputSingleError,\n type DateInputSingleProps,\n} from \"../date-input\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerSingleInput\");\n\n/**\n * Props for the DatePickerSingleInput component.\n */\nexport interface DatePickerSingleInputProps extends DateInputSingleProps {}\n\nexport const DatePickerSingleInput = forwardRef<\n HTMLDivElement,\n DatePickerSingleInputProps\n>(function DatePickerSingleInput(props, ref) {\n const {\n className,\n onFocus,\n onBlur,\n value: valueProp,\n defaultValue,\n onDateValueChange,\n ...rest\n } = props;\n\n const { CalendarIcon } = useIcon();\n\n const {\n state: { selectedDate, disabled, readOnly, cancelled, locale, timeZone },\n helpers: { setSelectedDate },\n } = useDatePickerContext({ selectionVariant: \"single\" });\n const {\n state: { open, floatingUIResult },\n helpers: { getReferenceProps, setOpen },\n } = useDatePickerOverlay();\n\n const inputRef = useForkRef<HTMLDivElement>(ref, floatingUIResult?.reference);\n const prevState = useRef<\n { date: typeof selectedDate; value: typeof valueProp } | undefined\n >();\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerSingleInput\",\n state: \"value\",\n });\n\n const handleCalendarButton = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const handleDateChange = useCallback(\n (\n _event: SyntheticEvent,\n newDate: SingleDateSelection | null,\n error: DateInputSingleError,\n ) => {\n setSelectedDate(newDate, error);\n },\n [setSelectedDate],\n );\n\n const handleDateValueChange = (\n newDateValue: string,\n isFormatted: boolean,\n ) => {\n setValue(newDateValue);\n onDateValueChange?.(newDateValue, isFormatted);\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n prevState.current = { date: selectedDate, value };\n }\n }, [open]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: avoid excessive re-rendering\n useEffect(() => {\n if (cancelled) {\n setValue(prevState?.current?.value);\n setSelectedDate(prevState?.current?.date || null, false);\n }\n }, [cancelled]);\n\n return (\n <DateInputSingle\n value={value || \"\"}\n locale={locale}\n timeZone={timeZone}\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n date={selectedDate || null}\n readOnly={readOnly}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n endAdornment={\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon />\n </Button>\n }\n {...getReferenceProps({\n ...rest,\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") {\n setOpen(true);\n }\n },\n })}\n />\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerSingleInput","useIcon","useDatePickerContext","useDatePickerOverlay","useForkRef","useRef","useControlled","useCallback","useEffect","jsx","DateInputSingle","clsx","Button"],"mappings":"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"}
|