@salt-ds/lab 1.0.0-alpha.43 → 1.0.0-alpha.45

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.
Files changed (107) hide show
  1. package/css/salt-lab.css +46 -87
  2. package/dist-cjs/calendar/Calendar.js +7 -0
  3. package/dist-cjs/calendar/Calendar.js.map +1 -1
  4. package/dist-cjs/calendar/internal/CalendarCarousel.js +1 -1
  5. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  6. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  7. package/dist-cjs/calendar/internal/CalendarDay.js +5 -1
  8. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  9. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  10. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +1 -1
  11. package/dist-cjs/calendar/internal/CalendarNavigation.js +2 -6
  12. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +1 -1
  13. package/dist-cjs/calendar/internal/useFocusManagement.js +3 -0
  14. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  15. package/dist-cjs/calendar/useCalendar.js +30 -2
  16. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  17. package/dist-cjs/calendar/useSelection.js +5 -0
  18. package/dist-cjs/calendar/useSelection.js.map +1 -1
  19. package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
  20. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  21. package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
  22. package/dist-cjs/date-input/DateInput.css.js +1 -1
  23. package/dist-cjs/date-input/DateInput.js +196 -49
  24. package/dist-cjs/date-input/DateInput.js.map +1 -1
  25. package/dist-cjs/date-picker/DatePicker.js +164 -0
  26. package/dist-cjs/date-picker/DatePicker.js.map +1 -0
  27. package/dist-cjs/date-picker/DatePickerContext.js +36 -0
  28. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -0
  29. package/dist-cjs/date-picker/DatePickerPanel.css.js +6 -0
  30. package/dist-cjs/date-picker/DatePickerPanel.css.js.map +1 -0
  31. package/dist-cjs/date-picker/DatePickerPanel.js +139 -0
  32. package/dist-cjs/date-picker/DatePickerPanel.js.map +1 -0
  33. package/dist-cjs/index.js +4 -0
  34. package/dist-cjs/index.js.map +1 -1
  35. package/dist-cjs/stepped-tracker/StepLabel/StepLabel.js.map +1 -1
  36. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  37. package/dist-cjs/stepper-input/StepperInput.css.js +1 -1
  38. package/dist-cjs/stepper-input/StepperInput.js +25 -74
  39. package/dist-cjs/stepper-input/StepperInput.js.map +1 -1
  40. package/dist-cjs/stepper-input/useStepperInput.js +19 -63
  41. package/dist-cjs/stepper-input/useStepperInput.js.map +1 -1
  42. package/dist-es/calendar/Calendar.js +7 -0
  43. package/dist-es/calendar/Calendar.js.map +1 -1
  44. package/dist-es/calendar/internal/CalendarCarousel.js +1 -1
  45. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  46. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  47. package/dist-es/calendar/internal/CalendarDay.js +5 -1
  48. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  49. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  50. package/dist-es/calendar/internal/CalendarNavigation.css.js +1 -1
  51. package/dist-es/calendar/internal/CalendarNavigation.js +3 -7
  52. package/dist-es/calendar/internal/CalendarNavigation.js.map +1 -1
  53. package/dist-es/calendar/internal/useFocusManagement.js +3 -0
  54. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  55. package/dist-es/calendar/useCalendar.js +32 -4
  56. package/dist-es/calendar/useCalendar.js.map +1 -1
  57. package/dist-es/calendar/useSelection.js +4 -1
  58. package/dist-es/calendar/useSelection.js.map +1 -1
  59. package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
  60. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  61. package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
  62. package/dist-es/date-input/DateInput.css.js +1 -1
  63. package/dist-es/date-input/DateInput.js +200 -53
  64. package/dist-es/date-input/DateInput.js.map +1 -1
  65. package/dist-es/date-picker/DatePicker.js +160 -0
  66. package/dist-es/date-picker/DatePicker.js.map +1 -0
  67. package/dist-es/date-picker/DatePickerContext.js +31 -0
  68. package/dist-es/date-picker/DatePickerContext.js.map +1 -0
  69. package/dist-es/date-picker/DatePickerPanel.css.js +4 -0
  70. package/dist-es/date-picker/DatePickerPanel.css.js.map +1 -0
  71. package/dist-es/date-picker/DatePickerPanel.js +135 -0
  72. package/dist-es/date-picker/DatePickerPanel.js.map +1 -0
  73. package/dist-es/index.js +2 -1
  74. package/dist-es/index.js.map +1 -1
  75. package/dist-es/stepped-tracker/StepLabel/StepLabel.js.map +1 -1
  76. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  77. package/dist-es/stepper-input/StepperInput.css.js +1 -1
  78. package/dist-es/stepper-input/StepperInput.js +27 -76
  79. package/dist-es/stepper-input/StepperInput.js.map +1 -1
  80. package/dist-es/stepper-input/useStepperInput.js +19 -63
  81. package/dist-es/stepper-input/useStepperInput.js.map +1 -1
  82. package/dist-types/calendar/internal/CalendarMonth.d.ts +0 -1
  83. package/dist-types/calendar/useSelection.d.ts +3 -0
  84. package/dist-types/contact-details/ContactPrimaryInfo.d.ts +1 -1
  85. package/dist-types/contact-details/ContactSecondaryInfo.d.ts +1 -1
  86. package/dist-types/contact-details/ContactTertiaryInfo.d.ts +1 -1
  87. package/dist-types/contact-details/types.d.ts +1 -1
  88. package/dist-types/date-input/DateInput.d.ts +21 -7
  89. package/dist-types/date-picker/DatePicker.d.ts +55 -0
  90. package/dist-types/date-picker/DatePickerContext.d.ts +23 -0
  91. package/dist-types/date-picker/DatePickerPanel.d.ts +8 -0
  92. package/dist-types/date-picker/index.d.ts +1 -0
  93. package/dist-types/index.d.ts +1 -0
  94. package/dist-types/stepped-tracker/StepLabel/StepLabel.d.ts +4 -3
  95. package/dist-types/stepper-input/StepperInput.d.ts +43 -12
  96. package/dist-types/stepper-input/useStepperInput.d.ts +7 -288
  97. package/package.json +2 -2
  98. package/dist-cjs/stepper-input/internal/useActivationIndicatorPosition.js +0 -38
  99. package/dist-cjs/stepper-input/internal/useActivationIndicatorPosition.js.map +0 -1
  100. package/dist-cjs/stepper-input/internal/useDynamicAriaLabel.js +0 -76
  101. package/dist-cjs/stepper-input/internal/useDynamicAriaLabel.js.map +0 -1
  102. package/dist-es/stepper-input/internal/useActivationIndicatorPosition.js +0 -34
  103. package/dist-es/stepper-input/internal/useActivationIndicatorPosition.js.map +0 -1
  104. package/dist-es/stepper-input/internal/useDynamicAriaLabel.js +0 -72
  105. package/dist-es/stepper-input/internal/useDynamicAriaLabel.js.map +0 -1
  106. package/dist-types/stepper-input/internal/useActivationIndicatorPosition.d.ts +0 -2
  107. package/dist-types/stepper-input/internal/useDynamicAriaLabel.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.js","sources":["../src/date-input/DateInput.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n ComponentPropsWithoutRef,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n Ref,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dateInputCss from \"./DateInput.css\";\nimport { makePrefixer, useControlled, useFormFieldProps } from \"@salt-ds/core\";\nimport { DateFormatter } from \"@internationalized/date\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\nconst isInvalidDate = (value: string) =>\n // @ts-ignore evaluating validity of date\n value && isNaN(new Date(value));\n\nconst defaultDateFormatter = (input: string): string => {\n const date = new Date(input);\n\n return isInvalidDate(input)\n ? input\n : new DateFormatter(\"EN-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n }).format(date);\n};\nexport interface DateInputProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\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 * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes) applied to the `input` elements.\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Optional ref for the dateInput component\n */\n inputRef?: Ref<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 dateFormatter?: (input: string) => string;\n}\n\nexport const DateInput = forwardRef<HTMLDivElement, DateInputProps>(\n function DateInput(\n {\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-expanded\": ariaExpanded,\n \"aria-owns\": ariaOwns,\n className,\n disabled,\n emptyReadOnlyMarker = \"—\",\n inputProps = {},\n inputRef,\n readOnly: readOnlyProp,\n role,\n value: valueProp,\n defaultValue: defaultStartDateProp = valueProp === undefined\n ? \"\"\n : undefined,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n dateFormatter = defaultDateFormatter,\n placeholder = \"dd mmm yyyy\",\n ...rest\n },\n ref\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dateInput\",\n css: dateInputCss,\n window: targetWindow,\n });\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 restA11yProps = {\n \"aria-activedescendant\": ariaActiveDescendant,\n \"aria-expanded\": ariaExpanded,\n \"aria-owns\": ariaOwns,\n };\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isEmptyReadOnly = isReadOnly && !defaultStartDateProp && !valueProp;\n const defaultValue = isEmptyReadOnly\n ? emptyReadOnlyMarker\n : defaultStartDateProp;\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInput\",\n state: \"value\",\n });\n\n const getDateValidationStatus = (value: string) =>\n isInvalidDate(value) ? \"error\" : undefined;\n\n const [dateStatus, setDateStatus] = useState<\"error\" | undefined>(\n getDateValidationStatus(value as string)\n );\n\n const isDisabled = disabled || formFieldDisabled;\n const validationStatus =\n dateStatus ?? formFieldValidationStatus ?? validationStatusProp;\n\n const [focused, setFocused] = useState(false);\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur,\n onChange,\n onFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const format = (date: string) => {\n const formattedDate = dateFormatter(date);\n setValue(formattedDate);\n };\n const handleStartDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value);\n onChange?.(event);\n };\n\n const handleStartDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n const stringDate = value as string;\n value && format(stringDate);\n onBlur?.(event);\n setDateStatus(getDateValidationStatus(stringDate));\n setFocused(false);\n };\n\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setFocused(true);\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 },\n className\n )}\n ref={ref}\n {...rest}\n >\n <input\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(formFieldLabelledBy, dateInputLabelledBy)}\n className={clsx(withBaseName(\"input\"), inputProps?.className)}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={inputRef}\n role={role}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleStartDateBlur}\n onChange={handleStartDateChange}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n value={value}\n {...restA11yProps}\n {...restDateInputProps}\n required={isRequired}\n />\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n }\n);\n"],"names":["makePrefixer","date","DateFormatter","forwardRef","DateInput","useWindow","useComponentCssInjection","dateInputCss","useFormFieldProps","useControlled","value","useState","jsxs","clsx","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.js","sources":["../src/date-input/DateInput.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n ComponentPropsWithoutRef,\n FocusEvent,\n forwardRef,\n InputHTMLAttributes,\n KeyboardEvent,\n ReactNode,\n RefObject,\n SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dateInputCss from \"./DateInput.css\";\nimport {\n makePrefixer,\n StatusAdornment,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport {\n CalendarDate,\n DateFormatter,\n DateValue,\n getLocalTimeZone,\n parseAbsoluteToLocal,\n} from \"@internationalized/date\";\nimport { useDatePickerContext } from \"../date-picker/DatePickerContext\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\nconst isInvalidDate = (value: string) =>\n // @ts-ignore evaluating validity of date\n value && isNaN(new Date(value));\nconst createDate = (date: string): Date | null => {\n if (!date || isInvalidDate(date)) {\n return null;\n }\n return new Date(date);\n};\n\nconst getIsoDate = (date: Date) => {\n try {\n return parseAbsoluteToLocal(date?.toISOString());\n } catch (err) {\n return undefined;\n }\n};\n\nfunction getCalendarDate(inputDate: string) {\n const date = createDate(inputDate);\n if (!date) return undefined;\n const isoDate = getIsoDate(date);\n return isoDate && new CalendarDate(isoDate.year, isoDate.month, isoDate.day);\n}\n\nconst getDateValidationStatus = (value: string | undefined) =>\n value && isInvalidDate(value) ? \"error\" : undefined;\n\nconst defaultDateFormatter = (date: DateValue | undefined): string => {\n return date\n ? new DateFormatter(\"EN-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n }).format(date.toDate(getLocalTimeZone()))\n : \"\";\n};\n\nexport interface DateInputProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<ComponentPropsWithoutRef<\"input\">, \"disabled\" | \"placeholder\"> {\n ariaLabel?: string;\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](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes) applied to the `input` elements.\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 dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Reference for the startInput;\n */\n startInputRef?: RefObject<HTMLInputElement>;\n /**\n * Reference for the endInput;\n */\n endInputRef?: RefObject<HTMLInputElement>;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n}\n\nexport const DateInput = forwardRef<HTMLDivElement, DateInputProps>(\n function DateInput(\n {\n className,\n ariaLabel,\n disabled,\n selectionVariant: selectionVariantProp,\n emptyReadOnlyMarker = \"—\",\n inputProps = {},\n endAdornment,\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n dateFormatter = defaultDateFormatter,\n placeholder = \"dd mmm yyyy\",\n startInputRef,\n endInputRef,\n ...rest\n },\n ref\n ) {\n const wrapperRef = useRef(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const inputStringFormatter = (input: string): string => {\n const date = getCalendarDate(input);\n return !input || !date ? input : dateFormatter(date);\n };\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dateInput\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const {\n startDate,\n endDate,\n setStartDate,\n setEndDate,\n selectionVariant: pickerSelectionVariant,\n openState,\n setOpen,\n validationStatusState,\n setValidationStatus,\n } = useDatePickerContext();\n\n const selectionVariant = selectionVariantProp ?? pickerSelectionVariant;\n\n const endDateInputID = useId();\n const startDateInputID = useId();\n\n const [focused, setFocused] = useState(false);\n const [startDateStringValue, setStartDateStringValue] = useState<string>(\n dateFormatter(startDate)\n );\n const [endDateStringValue, setEndDateStringValue] = useState<string>(\n dateFormatter(endDate)\n );\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 =\n validationStatusState ??\n formFieldValidationStatus ??\n validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur,\n onChange,\n onFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const validateRange = useCallback(() => {\n if (startDate && endDate) {\n setValidationStatus(\n startDate?.compare(endDate) >= 1 ? \"error\" : undefined\n );\n }\n }, [endDate, startDate, setValidationStatus]);\n\n // Effects. Update date strings when dates change\n useEffect(() => {\n setStartDateStringValue(dateFormatter(startDate));\n validateRange();\n }, [startDate, dateFormatter, validateRange]);\n\n useEffect(() => {\n setEndDateStringValue(dateFormatter(endDate));\n validateRange();\n }, [endDate, dateFormatter, validateRange]);\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n const updateStartDate = (dateString: string) => {\n if (!dateString) setStartDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n const emptyDateStatus = !calendarDate && inputDate ? \"error\" : undefined;\n setValidationStatus(\n getDateValidationStatus(dateString) ??\n getDateValidationStatus(endDateStringValue) ??\n emptyDateStatus\n );\n if (calendarDate) {\n setStartDate(calendarDate);\n }\n };\n\n const updateEndDate = (dateString: string) => {\n if (!dateString) setEndDate(undefined);\n const inputDate = inputStringFormatter(dateString);\n const calendarDate = getCalendarDate(inputDate);\n const emptyDateStatus = !calendarDate && inputDate ? \"error\" : undefined;\n setValidationStatus(\n getDateValidationStatus(dateString) ??\n getDateValidationStatus(startDateStringValue) ??\n emptyDateStatus\n );\n if (calendarDate) {\n setEndDate(calendarDate);\n }\n };\n\n // Handlers\n const handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n onFocus?.(event);\n setFocused(true);\n };\n const handleStartDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateStartDate(event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n\n const handleStartDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setStartDateStringValue(event.target.value);\n onChange?.(event);\n };\n\n const handleStartDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateStartDate(startDateStringValue);\n setOpen(false);\n }\n if (event.key === \"Tab\" && event.shiftKey && openState) {\n setOpen(false);\n }\n };\n\n const handleEndDateBlur = (event: FocusEvent<HTMLInputElement>) => {\n updateEndDate(event.target.value);\n setFocused(false);\n onBlur?.(event);\n };\n const handleEndDateChange = (event: ChangeEvent<HTMLInputElement>) => {\n setEndDateStringValue(event.target.value);\n onChange?.(event);\n };\n const handleEndDateKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n updateEndDate(endDateStringValue);\n setOpen(false);\n }\n };\n\n const handleInputClick = (event: SyntheticEvent<HTMLDivElement>) => {\n if (event.target === wrapperRef.current) {\n startInputRef?.current?.focus();\n }\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 },\n className\n )}\n onClick={(event) => handleInputClick(event)}\n ref={inputRef}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n startDateInputID\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={startInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleStartDateBlur}\n onChange={handleStartDateChange}\n onKeyDown={handleStartDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !startDateStringValue\n ? emptyReadOnlyMarker\n : startDateStringValue\n }\n {...restDateInputProps}\n required={isRequired}\n />\n {selectionVariant === \"range\" && (\n <>\n <span>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n dateInputDescribedBy\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n endDateInputID\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endDateInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={endInputRef}\n tabIndex={isDisabled ? -1 : 0}\n onBlur={handleEndDateBlur}\n onChange={handleEndDateChange}\n onKeyDown={handleEndDateKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !endDateStringValue\n ? emptyReadOnlyMarker\n : endDateStringValue\n }\n required={isRequired}\n {...restDateInputProps}\n />\n </>\n )}\n {\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n }\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n }\n);\n"],"names":["makePrefixer","date","parseAbsoluteToLocal","CalendarDate","DateFormatter","getLocalTimeZone","forwardRef","DateInput","useRef","useForkRef","useWindow","useComponentCssInjection","dateInputCss","useDatePickerContext","useId","useState","useFormFieldProps","useCallback","useEffect","_a","jsxs","clsx","jsx","Fragment","StatusAdornment"],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var clsx = require('clsx');
7
+ var React = require('react');
8
+ var core = require('@salt-ds/core');
9
+ var DatePickerContext = require('./DatePickerContext.js');
10
+ var DatePickerPanel = require('./DatePickerPanel.js');
11
+ var react = require('@floating-ui/react');
12
+ var DateInput = require('../date-input/DateInput.js');
13
+ var date = require('@internationalized/date');
14
+ var icons = require('@salt-ds/icons');
15
+ require('../calendar/Calendar.js');
16
+ require('../calendar/internal/CalendarContext.js');
17
+ require('../calendar/internal/utils.js');
18
+ var useSelection = require('../calendar/useSelection.js');
19
+
20
+ const withBaseName = core.makePrefixer("saltDatePicker");
21
+ const DatePicker = React.forwardRef(
22
+ function DatePicker2({
23
+ selectionVariant = "default",
24
+ disabled = false,
25
+ placeholder = "dd mmm yyyy",
26
+ selectedDate: selectedDateProp,
27
+ defaultSelectedDate,
28
+ dateFormatter,
29
+ CalendarProps: CalendarProps2,
30
+ className,
31
+ open: openProp,
32
+ onOpenChange: onOpenChangeProp,
33
+ helperText,
34
+ readOnly: readOnlyProp,
35
+ inputAriaLabel,
36
+ ...rest
37
+ }, ref) {
38
+ var _a;
39
+ const [open, setOpen] = core.useControlled({
40
+ controlled: openProp,
41
+ default: false,
42
+ name: "openPanel",
43
+ state: "openPanel"
44
+ });
45
+ const [startDate, setStartDate] = core.useControlled({
46
+ controlled: useSelection.isRangeOrOffsetSelectionWithStartDate(selectedDateProp) ? selectedDateProp.startDate : selectedDateProp,
47
+ default: useSelection.isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate) ? defaultSelectedDate.startDate : defaultSelectedDate,
48
+ name: "StartDate",
49
+ state: "startDate"
50
+ });
51
+ const [endDate, setEndDate] = core.useControlled({
52
+ controlled: useSelection.isRangeOrOffsetSelectionWithStartDate(selectedDateProp) ? selectedDateProp.endDate : selectedDateProp,
53
+ default: useSelection.isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate) ? defaultSelectedDate.endDate : void 0,
54
+ name: "EndDate",
55
+ state: "endDate"
56
+ });
57
+ const [validationStatusState, setValidationStatus] = React.useState(void 0);
58
+ const [startVisibleMonth, setStartVisibleMonth] = React.useState(startDate != null ? startDate : date.today(date.getLocalTimeZone()));
59
+ const [endVisibleMonth, setEndVisibleMonth] = React.useState(
60
+ (_a = endDate != null ? endDate : startDate == null ? void 0 : startDate.add({ months: 1 })) != null ? _a : date.today(date.getLocalTimeZone()).add({ months: 1 })
61
+ );
62
+ const onOpenChange = (newState) => {
63
+ var _a2;
64
+ setOpen(newState);
65
+ (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
66
+ onOpenChangeProp == null ? void 0 : onOpenChangeProp(newState);
67
+ };
68
+ const { x, y, strategy, elements, floating, reference, context } = core.useFloatingUI({
69
+ open,
70
+ onOpenChange,
71
+ placement: "bottom-start",
72
+ middleware: [react.flip({ fallbackStrategy: "initialPlacement" })]
73
+ });
74
+ const { getReferenceProps, getFloatingProps } = react.useInteractions([
75
+ react.useDismiss(context)
76
+ ]);
77
+ const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } = core.useFormFieldProps();
78
+ const isReadOnly = readOnlyProp || formFieldReadOnly;
79
+ const getPanelPosition = () => {
80
+ var _a2, _b;
81
+ return {
82
+ top: y != null ? y : 0,
83
+ left: x != null ? x : 0,
84
+ position: strategy,
85
+ width: (_a2 = elements.floating) == null ? void 0 : _a2.offsetWidth,
86
+ height: (_b = elements.floating) == null ? void 0 : _b.offsetHeight
87
+ };
88
+ };
89
+ const panelRef = React.useRef(null);
90
+ const startInputRef = React.useRef(null);
91
+ const endInputRef = React.useRef(null);
92
+ const inputRef = core.useForkRef(ref, reference);
93
+ const floatingRef = core.useForkRef(panelRef, floating);
94
+ const handleSelect = () => {
95
+ var _a2;
96
+ if (selectionVariant === "default" && startDate) {
97
+ (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
98
+ }
99
+ };
100
+ const handleCalendarButton = () => {
101
+ var _a2;
102
+ (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
103
+ setOpen(!open);
104
+ };
105
+ const datePickerContextValue = {
106
+ openState: open,
107
+ setOpen,
108
+ disabled,
109
+ endDate,
110
+ setEndDate,
111
+ defaultEndDate: useSelection.isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate) ? defaultSelectedDate.endDate : defaultSelectedDate,
112
+ startDate,
113
+ setStartDate,
114
+ startVisibleMonth,
115
+ setStartVisibleMonth,
116
+ endVisibleMonth,
117
+ setEndVisibleMonth,
118
+ defaultStartDate: useSelection.isRangeOrOffsetSelectionWithStartDate(
119
+ defaultSelectedDate
120
+ ) ? defaultSelectedDate.startDate : defaultSelectedDate,
121
+ selectionVariant,
122
+ context,
123
+ getPanelPosition,
124
+ validationStatusState,
125
+ setValidationStatus
126
+ };
127
+ return /* @__PURE__ */ jsxRuntime.jsxs(DatePickerContext.DatePickerContext.Provider, {
128
+ value: datePickerContextValue,
129
+ children: [
130
+ /* @__PURE__ */ jsxRuntime.jsx(DateInput.DateInput, {
131
+ className: clsx.clsx(withBaseName(), className),
132
+ ref: inputRef,
133
+ ...getReferenceProps(),
134
+ startInputRef,
135
+ endInputRef,
136
+ placeholder,
137
+ dateFormatter,
138
+ readOnly: isReadOnly,
139
+ ariaLabel: inputAriaLabel,
140
+ endAdornment: /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
141
+ variant: "secondary",
142
+ onClick: handleCalendarButton,
143
+ disabled: disabled || isReadOnly || formFieldDisabled,
144
+ "aria-label": "Open Calendar",
145
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.CalendarIcon, {
146
+ "aria-hidden": true
147
+ })
148
+ }),
149
+ ...rest
150
+ }),
151
+ /* @__PURE__ */ jsxRuntime.jsx(DatePickerPanel.DatePickerPanel, {
152
+ ref: floatingRef,
153
+ ...getFloatingProps(),
154
+ onSelect: handleSelect,
155
+ CalendarProps: CalendarProps2,
156
+ helperText
157
+ })
158
+ ]
159
+ });
160
+ }
161
+ );
162
+
163
+ exports.DatePicker = DatePicker;
164
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { ComponentPropsWithoutRef, forwardRef, useRef, useState } from \"react\";\n\nimport {\n Button,\n makePrefixer,\n useControlled,\n useFloatingUI,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { DatePickerContext } from \"./DatePickerContext\";\nimport { DatePickerPanel } from \"./DatePickerPanel\";\nimport { flip, useDismiss, useInteractions } from \"@floating-ui/react\";\nimport { DateInput } from \"../date-input\";\nimport { DateValue, getLocalTimeZone, today } from \"@internationalized/date\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport {\n CalendarProps,\n isRangeOrOffsetSelectionWithStartDate,\n} from \"../calendar\";\n\nconst withBaseName = makePrefixer(\"saltDatePicker\");\n\nexport interface DatePickerProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n inputAriaLabel?: string;\n /**\n * Selection variant. Defaults to single select.\n */\n selectionVariant?: \"default\" | \"range\";\n /**\n * If `true`, the component will be disabled.\n */\n disabled?: boolean;\n /**\n * The selected date value. Use when the component is controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n selectedDate?: DateValue | { startDate: DateValue; endDate: DateValue };\n /**\n * The default date value. Use when the component is not controlled.\n * Can be a single date or an object with start and end dates for range selection.\n */\n defaultSelectedDate?:\n | DateValue\n | { startDate: DateValue; endDate: DateValue };\n /**\n * Props to be passed to the Calendar component.\n */\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n /**\n * Function to format the input value.\n */\n dateFormatter?: (input: DateValue | undefined) => string;\n /**\n * Callback function triggered when open state changes.\n */\n onOpenChange?: (newOpen: boolean) => void;\n /**\n * Display or hide the component.\n */\n open?: boolean;\n /**\n * Helper text to display in the panel\n */\n helperText?: string;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(\n {\n selectionVariant = \"default\",\n disabled = false,\n placeholder = \"dd mmm yyyy\",\n selectedDate: selectedDateProp,\n defaultSelectedDate,\n dateFormatter,\n CalendarProps,\n className,\n open: openProp,\n onOpenChange: onOpenChangeProp,\n helperText,\n readOnly: readOnlyProp,\n inputAriaLabel,\n ...rest\n },\n ref\n ) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: false,\n name: \"openPanel\",\n state: \"openPanel\",\n });\n\n const [startDate, setStartDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.startDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n name: \"StartDate\",\n state: \"startDate\",\n });\n const [endDate, setEndDate] = useControlled({\n controlled: isRangeOrOffsetSelectionWithStartDate(selectedDateProp)\n ? selectedDateProp.endDate\n : selectedDateProp,\n default: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : undefined,\n name: \"EndDate\",\n state: \"endDate\",\n });\n const [validationStatusState, setValidationStatus] = useState<\n \"error\" | undefined\n >(undefined);\n const [startVisibleMonth, setStartVisibleMonth] = useState<\n DateValue | undefined\n >(startDate ?? today(getLocalTimeZone()));\n const [endVisibleMonth, setEndVisibleMonth] = useState<\n DateValue | undefined\n >(\n endDate ??\n startDate?.add({ months: 1 }) ??\n today(getLocalTimeZone()).add({ months: 1 })\n );\n\n const onOpenChange = (newState: boolean) => {\n setOpen(newState);\n startInputRef?.current?.focus();\n onOpenChangeProp?.(newState);\n };\n\n const { x, y, strategy, elements, floating, reference, context } =\n useFloatingUI({\n open: open,\n onOpenChange: onOpenChange,\n placement: \"bottom-start\",\n middleware: [flip({ fallbackStrategy: \"initialPlacement\" })],\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useDismiss(context),\n ]);\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n\n const getPanelPosition = () => ({\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n });\n\n const panelRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n const inputRef = useForkRef<HTMLDivElement>(ref, reference);\n const floatingRef = useForkRef<HTMLDivElement>(panelRef, floating);\n\n // Handlers\n const handleSelect = () => {\n if (selectionVariant === \"default\" && startDate) {\n startInputRef?.current?.focus();\n }\n };\n const handleCalendarButton = () => {\n startInputRef?.current?.focus();\n setOpen(!open);\n };\n\n // Context\n const datePickerContextValue = {\n openState: open,\n setOpen,\n disabled,\n endDate,\n setEndDate,\n defaultEndDate: isRangeOrOffsetSelectionWithStartDate(defaultSelectedDate)\n ? defaultSelectedDate.endDate\n : defaultSelectedDate,\n startDate,\n setStartDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n defaultStartDate: isRangeOrOffsetSelectionWithStartDate(\n defaultSelectedDate\n )\n ? defaultSelectedDate.startDate\n : defaultSelectedDate,\n selectionVariant,\n context,\n getPanelPosition,\n validationStatusState,\n setValidationStatus,\n };\n\n return (\n <DatePickerContext.Provider value={datePickerContextValue}>\n <DateInput\n className={clsx(withBaseName(), className)}\n ref={inputRef}\n {...getReferenceProps()}\n startInputRef={startInputRef}\n endInputRef={endInputRef}\n placeholder={placeholder}\n dateFormatter={dateFormatter}\n readOnly={isReadOnly}\n ariaLabel={inputAriaLabel}\n endAdornment={\n <Button\n variant=\"secondary\"\n onClick={handleCalendarButton}\n disabled={disabled || isReadOnly || formFieldDisabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon aria-hidden />\n </Button>\n }\n {...rest}\n />\n <DatePickerPanel\n ref={floatingRef}\n {...getFloatingProps()}\n onSelect={handleSelect}\n CalendarProps={CalendarProps}\n helperText={helperText}\n />\n </DatePickerContext.Provider>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","DatePicker","CalendarProps","useControlled","isRangeOrOffsetSelectionWithStartDate","useState","today","getLocalTimeZone","_a","useFloatingUI","flip","useInteractions","useDismiss","useFormFieldProps","useRef","useForkRef","jsxs","DatePickerContext","jsx","DateInput","clsx","Button","CalendarIcon","DatePickerPanel"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var core = require('@salt-ds/core');
6
+ var React = require('react');
7
+
8
+ const DatePickerContext = core.createContext(
9
+ "DatePickerContext",
10
+ {
11
+ openState: false,
12
+ setOpen: () => void 0,
13
+ disabled: false,
14
+ startDate: void 0,
15
+ defaultStartDate: void 0,
16
+ setStartDate: () => void 0,
17
+ startVisibleMonth: void 0,
18
+ setStartVisibleMonth: () => void 0,
19
+ endDate: void 0,
20
+ defaultEndDate: void 0,
21
+ setEndDate: () => void 0,
22
+ validationStatusState: void 0,
23
+ setValidationStatus: () => void 0,
24
+ endVisibleMonth: void 0,
25
+ setEndVisibleMonth: () => void 0,
26
+ selectionVariant: "default",
27
+ getPanelPosition: () => ({})
28
+ }
29
+ );
30
+ function useDatePickerContext() {
31
+ return React.useContext(DatePickerContext);
32
+ }
33
+
34
+ exports.DatePickerContext = DatePickerContext;
35
+ exports.useDatePickerContext = useDatePickerContext;
36
+ //# sourceMappingURL=DatePickerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerContext.js","sources":["../src/date-picker/DatePickerContext.ts"],"sourcesContent":["import { createContext, UseFloatingUIReturn } from \"@salt-ds/core\";\nimport { useContext } from \"react\";\nimport { DateValue } from \"@internationalized/date\";\n\nexport interface DatePickerContextValue\n extends Partial<Pick<UseFloatingUIReturn, \"context\">> {\n openState: boolean;\n setOpen: (newOpen: boolean) => void;\n disabled: boolean;\n //start date values\n startDate: DateValue | undefined;\n defaultStartDate: DateValue | undefined;\n setStartDate: (newStartDate: DateValue | undefined) => void;\n startVisibleMonth: DateValue | undefined;\n setStartVisibleMonth: (newStartDate: DateValue | undefined) => void;\n // end date values for range picker\n endDate: DateValue | undefined;\n endVisibleMonth: DateValue | undefined;\n setEndVisibleMonth: (newStartDate: DateValue | undefined) => void;\n defaultEndDate: DateValue | undefined;\n setEndDate: (newEndDate: DateValue | undefined) => void;\n validationStatusState: \"error\" | undefined;\n setValidationStatus: (newStatus: \"error\" | undefined) => void;\n selectionVariant: \"default\" | \"range\";\n getPanelPosition: () => Record<string, unknown>;\n}\n\nexport const DatePickerContext = createContext<DatePickerContextValue>(\n \"DatePickerContext\",\n {\n openState: false,\n setOpen: () => undefined,\n disabled: false,\n startDate: undefined,\n defaultStartDate: undefined,\n setStartDate: () => undefined,\n startVisibleMonth: undefined,\n setStartVisibleMonth: () => undefined,\n endDate: undefined,\n defaultEndDate: undefined,\n setEndDate: () => undefined,\n validationStatusState: undefined,\n setValidationStatus: () => undefined,\n endVisibleMonth: undefined,\n setEndVisibleMonth: () => undefined,\n selectionVariant: \"default\",\n getPanelPosition: () => ({}),\n }\n);\n\nexport function useDatePickerContext() {\n return useContext(DatePickerContext);\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;;;AA2BO,MAAM,iBAAoB,GAAAA,kBAAA;AAAA,EAC/B,mBAAA;AAAA,EACA;AAAA,IACE,SAAW,EAAA,KAAA;AAAA,IACX,SAAS,MAAM,KAAA,CAAA;AAAA,IACf,QAAU,EAAA,KAAA;AAAA,IACV,SAAW,EAAA,KAAA,CAAA;AAAA,IACX,gBAAkB,EAAA,KAAA,CAAA;AAAA,IAClB,cAAc,MAAM,KAAA,CAAA;AAAA,IACpB,iBAAmB,EAAA,KAAA,CAAA;AAAA,IACnB,sBAAsB,MAAM,KAAA,CAAA;AAAA,IAC5B,OAAS,EAAA,KAAA,CAAA;AAAA,IACT,cAAgB,EAAA,KAAA,CAAA;AAAA,IAChB,YAAY,MAAM,KAAA,CAAA;AAAA,IAClB,qBAAuB,EAAA,KAAA,CAAA;AAAA,IACvB,qBAAqB,MAAM,KAAA,CAAA;AAAA,IAC3B,eAAiB,EAAA,KAAA,CAAA;AAAA,IACjB,oBAAoB,MAAM,KAAA,CAAA;AAAA,IAC1B,gBAAkB,EAAA,SAAA;AAAA,IAClB,gBAAA,EAAkB,OAAO,EAAC,CAAA;AAAA,GAC5B;AACF,EAAA;AAEO,SAAS,oBAAuB,GAAA;AACrC,EAAA,OAAOC,iBAAW,iBAAiB,CAAA,CAAA;AACrC;;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var css_248z = ".saltDatePickerPanel {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-border) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-popout);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
4
+
5
+ module.exports = css_248z;
6
+ //# sourceMappingURL=DatePickerPanel.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerPanel.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
7
+ var core = require('@salt-ds/core');
8
+ var clsx = require('clsx');
9
+ var DatePickerContext = require('./DatePickerContext.js');
10
+ var DatePickerPanel$1 = require('./DatePickerPanel.css.js');
11
+ var window = require('@salt-ds/window');
12
+ var styles = require('@salt-ds/styles');
13
+ var Calendar = require('../calendar/Calendar.js');
14
+ var date = require('@internationalized/date');
15
+ require('../calendar/internal/CalendarContext.js');
16
+ require('../calendar/internal/utils.js');
17
+ require('../calendar/useSelection.js');
18
+
19
+ const withBaseName = core.makePrefixer("saltDatePickerPanel");
20
+ const DatePickerPanel = React.forwardRef(
21
+ function DatePickerPanel2(props, ref) {
22
+ var _a;
23
+ const { className, onSelect, helperText, CalendarProps: CalendarProps2, ...rest } = props;
24
+ const targetWindow = window.useWindow();
25
+ styles.useComponentCssInjection({
26
+ testId: "salt-date-picker-panel",
27
+ css: DatePickerPanel$1,
28
+ window: targetWindow
29
+ });
30
+ const { Component: FloatingComponent } = core.useFloatingComponent();
31
+ const [hoveredDate, setHoveredDate] = React.useState(null);
32
+ const {
33
+ openState,
34
+ startDate,
35
+ setStartDate,
36
+ startVisibleMonth,
37
+ setStartVisibleMonth,
38
+ endDate,
39
+ setEndDate,
40
+ endVisibleMonth,
41
+ setEndVisibleMonth,
42
+ setOpen,
43
+ selectionVariant,
44
+ context,
45
+ getPanelPosition,
46
+ setValidationStatus
47
+ } = DatePickerContext.useDatePickerContext();
48
+ const { a11yProps } = core.useFormFieldProps();
49
+ const setRangeDate = (_, newDate) => {
50
+ setStartDate(newDate.startDate);
51
+ setEndDate(newDate.endDate);
52
+ setValidationStatus(void 0);
53
+ if (newDate.startDate && newDate.endDate) {
54
+ setOpen(false);
55
+ }
56
+ onSelect == null ? void 0 : onSelect();
57
+ };
58
+ const setSingleDate = (_, newDate) => {
59
+ setStartDate(newDate);
60
+ setValidationStatus(void 0);
61
+ onSelect == null ? void 0 : onSelect();
62
+ setOpen(false);
63
+ };
64
+ const handleHoveredDateChange = (_, newHoveredDate) => {
65
+ setHoveredDate(newHoveredDate);
66
+ };
67
+ React.useEffect(() => {
68
+ if (startDate) {
69
+ setStartVisibleMonth(startDate);
70
+ setEndVisibleMonth(startDate.add({ months: 1 }));
71
+ }
72
+ }, [startDate]);
73
+ const isRangePicker = selectionVariant === "range";
74
+ const firstCalendarProps = isRangePicker ? {
75
+ selectionVariant: "range",
76
+ hoveredDate: startDate && hoveredDate && hoveredDate.compare(date.endOfMonth(startDate)) > 0 ? date.endOfMonth(startDate) : hoveredDate,
77
+ onHoveredDateChange: handleHoveredDateChange,
78
+ selectedDate: { startDate, endDate },
79
+ onSelectedDateChange: setRangeDate,
80
+ maxDate: startDate && date.endOfMonth(startDate),
81
+ hideOutOfRangeDates: true
82
+ } : {
83
+ selectionVariant: "default",
84
+ selectedDate: startDate,
85
+ onSelectedDateChange: setSingleDate
86
+ };
87
+ return /* @__PURE__ */ jsxRuntime.jsx(FloatingComponent, {
88
+ open: openState,
89
+ className: clsx.clsx(withBaseName(), className),
90
+ "aria-modal": "true",
91
+ ref,
92
+ focusManagerProps: context ? {
93
+ context,
94
+ initialFocus: 4
95
+ } : void 0,
96
+ ...getPanelPosition(),
97
+ ...a11yProps,
98
+ ...rest,
99
+ children: /* @__PURE__ */ jsxRuntime.jsxs(core.StackLayout, {
100
+ separators: true,
101
+ gap: 0,
102
+ className: withBaseName("container"),
103
+ children: [
104
+ helperText && /* @__PURE__ */ jsxRuntime.jsx(core.FlexItem, {
105
+ className: withBaseName("header"),
106
+ children: /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldHelperText, {
107
+ children: helperText
108
+ })
109
+ }),
110
+ /* @__PURE__ */ jsxRuntime.jsxs(core.FlexLayout, {
111
+ children: [
112
+ /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
113
+ visibleMonth: startVisibleMonth,
114
+ onVisibleMonthChange: (_, month) => setStartVisibleMonth(month),
115
+ ...firstCalendarProps,
116
+ ...CalendarProps2
117
+ }),
118
+ isRangePicker && /* @__PURE__ */ jsxRuntime.jsx(Calendar.Calendar, {
119
+ selectionVariant: "range",
120
+ hoveredDate,
121
+ onHoveredDateChange: handleHoveredDateChange,
122
+ selectedDate: { startDate, endDate },
123
+ onSelectedDateChange: setRangeDate,
124
+ visibleMonth: endVisibleMonth,
125
+ onVisibleMonthChange: (_, month) => setEndVisibleMonth(month),
126
+ hideOutOfRangeDates: true,
127
+ minDate: startDate ? (_a = date.startOfMonth(startDate)) == null ? void 0 : _a.add({ months: 1 }) : void 0,
128
+ ...CalendarProps2
129
+ })
130
+ ]
131
+ })
132
+ ]
133
+ })
134
+ });
135
+ }
136
+ );
137
+
138
+ exports.DatePickerPanel = DatePickerPanel;
139
+ //# sourceMappingURL=DatePickerPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerPanel.js","sources":["../src/date-picker/DatePickerPanel.tsx"],"sourcesContent":["import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useState,\n} from \"react\";\nimport {\n FlexItem,\n FlexLayout,\n FormFieldHelperText,\n makePrefixer,\n StackLayout,\n useFloatingComponent,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport dateInputPanelCss from \"./DatePickerPanel.css\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport {\n Calendar,\n CalendarProps,\n UseRangeSelectionCalendarProps,\n UseSingleSelectionCalendarProps,\n} from \"../calendar\";\nimport { DateValue, endOfMonth, startOfMonth } from \"@internationalized/date\";\n\nexport interface DatePickerPanelProps extends ComponentPropsWithoutRef<\"div\"> {\n onSelect?: () => void;\n helperText?: string;\n CalendarProps?: Partial<\n Omit<\n CalendarProps,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectedDateChange\"\n >\n >;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerPanel = forwardRef<HTMLDivElement, DatePickerPanelProps>(\n function DatePickerPanel(props, ref) {\n const { className, onSelect, helperText, CalendarProps, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-panel\",\n css: dateInputPanelCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n const [hoveredDate, setHoveredDate] = useState<DateValue | null>(null);\n\n const {\n openState,\n startDate,\n setStartDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endDate,\n setEndDate,\n endVisibleMonth,\n setEndVisibleMonth,\n setOpen,\n selectionVariant,\n context,\n getPanelPosition,\n setValidationStatus,\n } = useDatePickerContext();\n\n const { a11yProps } = useFormFieldProps();\n\n const setRangeDate: UseRangeSelectionCalendarProps[\"onSelectedDateChange\"] =\n (_, newDate) => {\n setStartDate(newDate.startDate);\n setEndDate(newDate.endDate);\n setValidationStatus(undefined);\n if (newDate.startDate && newDate.endDate) {\n setOpen(false);\n }\n onSelect?.();\n };\n const setSingleDate: UseSingleSelectionCalendarProps[\"onSelectedDateChange\"] =\n (_, newDate) => {\n setStartDate(newDate);\n setValidationStatus(undefined);\n onSelect?.();\n setOpen(false);\n };\n const handleHoveredDateChange: CalendarProps[\"onHoveredDateChange\"] = (\n _,\n newHoveredDate\n ) => {\n setHoveredDate(newHoveredDate);\n };\n useEffect(() => {\n if (startDate) {\n setStartVisibleMonth(startDate);\n setEndVisibleMonth(startDate.add({ months: 1 }));\n }\n }, [startDate]);\n\n const isRangePicker = selectionVariant === \"range\";\n const firstCalendarProps: CalendarProps = isRangePicker\n ? {\n selectionVariant: \"range\",\n hoveredDate:\n startDate &&\n hoveredDate &&\n hoveredDate.compare(endOfMonth(startDate)) > 0\n ? endOfMonth(startDate)\n : hoveredDate,\n onHoveredDateChange: handleHoveredDateChange,\n selectedDate: { startDate, endDate },\n onSelectedDateChange: setRangeDate,\n maxDate: startDate && endOfMonth(startDate),\n hideOutOfRangeDates: true,\n }\n : {\n selectionVariant: \"default\",\n selectedDate: startDate,\n onSelectedDateChange: setSingleDate,\n };\n return (\n <FloatingComponent\n open={openState}\n className={clsx(withBaseName(), className)}\n aria-modal=\"true\"\n ref={ref}\n focusManagerProps={\n context\n ? {\n context: context,\n initialFocus: 4,\n }\n : undefined\n }\n {...getPanelPosition()}\n {...a11yProps}\n {...rest}\n >\n <StackLayout separators gap={0} className={withBaseName(\"container\")}>\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout>\n <Calendar\n visibleMonth={startVisibleMonth}\n onVisibleMonthChange={(_, month) => setStartVisibleMonth(month)}\n {...firstCalendarProps}\n {...CalendarProps}\n />\n {isRangePicker && (\n <Calendar\n selectionVariant=\"range\"\n hoveredDate={hoveredDate}\n onHoveredDateChange={handleHoveredDateChange}\n selectedDate={{ startDate, endDate }}\n onSelectedDateChange={setRangeDate}\n visibleMonth={endVisibleMonth}\n onVisibleMonthChange={(_, month) => setEndVisibleMonth(month)}\n hideOutOfRangeDates\n minDate={\n startDate\n ? startOfMonth(startDate)?.add({ months: 1 })\n : undefined\n }\n {...CalendarProps}\n />\n )}\n </FlexLayout>\n </StackLayout>\n </FloatingComponent>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","DatePickerPanel","CalendarProps","useWindow","useComponentCssInjection","dateInputPanelCss","useFloatingComponent","useState","useDatePickerContext","useFormFieldProps","useEffect","endOfMonth","jsx","clsx","jsxs","StackLayout","FlexItem","FormFieldHelperText","FlexLayout","Calendar","startOfMonth"],"mappings":"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"}
package/dist-cjs/index.js CHANGED
@@ -59,6 +59,7 @@ var ContactFavoriteToggle = require('./contact-details/ContactFavoriteToggle.js'
59
59
  var MailLinkComponent = require('./contact-details/MailLinkComponent.js');
60
60
  var ContentStatus = require('./content-status/ContentStatus.js');
61
61
  var DateInput = require('./date-input/DateInput.js');
62
+ var DatePicker = require('./date-picker/DatePicker.js');
62
63
  var DeckItem = require('./deck-item/DeckItem.js');
63
64
  var DeckLayout = require('./deck-layout/DeckLayout.js');
64
65
  var DropdownBase = require('./dropdown/DropdownBase.js');
@@ -159,6 +160,8 @@ exports.OrderedButton = OrderedButton.OrderedButton;
159
160
  exports.Calendar = Calendar.Calendar;
160
161
  exports.useCalendarDay = useCalendarDay.useCalendarDay;
161
162
  exports.useCalendar = useCalendar.useCalendar;
163
+ exports.isRangeOrOffsetSelectionValue = useSelection.isRangeOrOffsetSelectionValue;
164
+ exports.isRangeOrOffsetSelectionWithStartDate = useSelection.isRangeOrOffsetSelectionWithStartDate;
162
165
  exports.useSelectionCalendar = useSelection.useSelectionCalendar;
163
166
  exports.useSelectionDay = useSelection.useSelectionDay;
164
167
  exports.Carousel = Carousel.Carousel;
@@ -195,6 +198,7 @@ exports.ContactFavoriteToggle = ContactFavoriteToggle.ContactFavoriteToggle;
195
198
  exports.MailLinkComponent = MailLinkComponent.MailLinkComponent;
196
199
  exports.ContentStatus = ContentStatus.ContentStatus;
197
200
  exports.DateInput = DateInput.DateInput;
201
+ exports.DatePicker = DatePicker.DatePicker;
198
202
  exports.DeckItem = DeckItem.DeckItem;
199
203
  exports.DeckLayout = DeckLayout.DeckLayout;
200
204
  exports.DropdownBase = DropdownBase.DropdownBase;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StepLabel.js","sources":["../src/stepped-tracker/StepLabel/StepLabel.tsx"],"sourcesContent":["import { forwardRef, ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer, Label } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport stepLabelCss from \"./StepLabel.css\";\n\nconst withBaseName = makePrefixer(\"saltStepLabel\");\n\nexport interface StepLabelProps extends ComponentPropsWithoutRef<\"label\"> {\n /**\n * The content of Step Label\n */\n children?: ReactNode;\n}\n\nexport const StepLabel = forwardRef<HTMLLabelElement, StepLabelProps>(\n function StepLabel({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-step-label\",\n css: stepLabelCss,\n window: targetWindow,\n });\n\n return (\n <Label className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n <strong>{children}</strong>\n </Label>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","StepLabel","useWindow","useComponentCssInjection","stepLabelCss","jsx","Label","clsx"],"mappings":";;;;;;;;;;;;AAQA,MAAM,YAAA,GAAeA,kBAAa,eAAe,CAAA,CAAA;AAS1C,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,UAAU,CAAA,EAAE,UAAU,SAAc,EAAA,GAAA,IAAA,IAAQ,GAAK,EAAA;AACxD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,iBAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAAC,UAAA,EAAA;AAAA,MAAM,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAAG,GAAA;AAAA,MAAW,GAAG,IAAA;AAAA,MAC/D,QAAC,kBAAAF,cAAA,CAAA,QAAA,EAAA;AAAA,QAAQ,QAAA;AAAA,OAAS,CAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"StepLabel.js","sources":["../src/stepped-tracker/StepLabel/StepLabel.tsx"],"sourcesContent":["import { forwardRef, ReactNode } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer, Label, TextProps } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport stepLabelCss from \"./StepLabel.css\";\n\nconst withBaseName = makePrefixer(\"saltStepLabel\");\n\nexport interface StepLabelProps extends TextProps<\"label\"> {\n /**\n * The content of Step Label\n */\n children?: ReactNode;\n}\n\nexport const StepLabel = forwardRef<HTMLLabelElement, StepLabelProps>(\n function StepLabel({ children, className, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-step-label\",\n css: stepLabelCss,\n window: targetWindow,\n });\n\n return (\n <Label className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n <strong>{children}</strong>\n </Label>\n );\n }\n);\n"],"names":["makePrefixer","forwardRef","StepLabel","useWindow","useComponentCssInjection","stepLabelCss","jsx","Label","clsx"],"mappings":";;;;;;;;;;;;AAQA,MAAM,YAAA,GAAeA,kBAAa,eAAe,CAAA,CAAA;AAS1C,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,UAAU,CAAA,EAAE,UAAU,SAAc,EAAA,GAAA,IAAA,IAAQ,GAAK,EAAA;AACxD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,iBAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,uBACGC,cAAA,CAAAC,UAAA,EAAA;AAAA,MAAM,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MAAG,GAAA;AAAA,MAAW,GAAG,IAAA;AAAA,MAC/D,QAAC,kBAAAF,cAAA,CAAA,QAAA,EAAA;AAAA,QAAQ,QAAA;AAAA,OAAS,CAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltTrackerStep {\n --trackerStep-icon-color-active: var(--saltTrackerStep-icon-color-active, var(--salt-status-info-foreground));\n --trackerStep-icon-color-completed: var(--saltTrackerStep-icon-color-completed, var(--salt-status-success-foreground));\n\n --trackerStep-icon-color: var(--saltTrackerStep-icon-color, var(--salt-status-static-foreground));\n\n --saltIcon-color: var(--trackerStep-icon-color);\n /* We redefine Icon Size so we can use it in calc functions in the trackerConnector */\n --saltIcon-size: var(--saltTrackerStep-icon-size, max(var(--salt-size-icon), 12px));\n}\n\n.saltTrackerStep {\n margin: 0;\n text-indent: 0;\n list-style-type: none;\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n width: var(--saltTrackerStep-width, 100%);\n gap: var(--salt-spacing-50);\n color: var(--salt-content-primary-foreground);\n font-size: var(--salt-text-label-fontSize);\n line-height: var(--salt-text-label-lineHeight);\n}\n\n.saltSteppedTracker.saltSteppedTracker-horizontal .saltTrackerStep {\n flex-direction: column;\n padding: 0 var(--salt-spacing-25);\n}\n\n.saltSteppedTracker.saltSteppedTracker-vertical .saltTrackerStep {\n flex-direction: row;\n min-height: calc(var(--salt-size-base) * 2);\n width: 100%;\n}\n\n/* Pseudo-class applied to the root element on focus */\n.saltTrackerStep:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-color: var(--salt-focused-outlineColor);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n.saltTrackerStep .saltTrackerStep-body {\n width: 100%;\n display: flex;\n align-items: center;\n flex-direction: column;\n}\n\n.saltTrackerStep.saltTrackerStep-active {\n --trackerStep-icon-color: var(--trackerStep-icon-color-active);\n}\n\n.saltTrackerStep.saltTrackerStep-completed {\n --trackerStep-icon-color: var(--trackerStep-icon-color-completed);\n}\n";
3
+ var css_248z = ".saltTrackerStep {\n --trackerStep-icon-color-active: var(--saltTrackerStep-icon-color-active, var(--salt-status-info-foreground-decorative));\n --trackerStep-icon-color-completed: var(--saltTrackerStep-icon-color-completed, var(--salt-status-success-foreground-decorative));\n\n --trackerStep-icon-color: var(--saltTrackerStep-icon-color, var(--salt-status-static-foreground));\n\n --saltIcon-color: var(--trackerStep-icon-color);\n /* We redefine Icon Size so we can use it in calc functions in the trackerConnector */\n --saltIcon-size: var(--saltTrackerStep-icon-size, max(var(--salt-size-icon), 12px));\n}\n\n.saltTrackerStep {\n margin: 0;\n text-indent: 0;\n list-style-type: none;\n flex: 1;\n position: relative;\n display: flex;\n align-items: center;\n width: var(--saltTrackerStep-width, 100%);\n gap: var(--salt-spacing-50);\n color: var(--salt-content-primary-foreground);\n font-size: var(--salt-text-label-fontSize);\n line-height: var(--salt-text-label-lineHeight);\n}\n\n.saltSteppedTracker.saltSteppedTracker-horizontal .saltTrackerStep {\n flex-direction: column;\n padding: 0 var(--salt-spacing-25);\n}\n\n.saltSteppedTracker.saltSteppedTracker-vertical .saltTrackerStep {\n flex-direction: row;\n min-height: calc(var(--salt-size-base) * 2);\n width: 100%;\n}\n\n/* Pseudo-class applied to the root element on focus */\n.saltTrackerStep:focus-visible {\n outline-style: var(--salt-focused-outlineStyle);\n outline-width: var(--salt-focused-outlineWidth);\n outline-color: var(--salt-focused-outlineColor);\n outline-offset: var(--salt-focused-outlineOffset);\n}\n\n.saltTrackerStep .saltTrackerStep-body {\n width: 100%;\n display: flex;\n align-items: center;\n flex-direction: column;\n}\n\n.saltTrackerStep.saltTrackerStep-active {\n --trackerStep-icon-color: var(--trackerStep-icon-color-active);\n}\n\n.saltTrackerStep.saltTrackerStep-completed {\n --trackerStep-icon-color: var(--trackerStep-icon-color-completed);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=TrackerStep.css.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".salt-density-medium {\n --stepperInput-adornment-container-top: -2px;\n --stepperInput-button-height: 12px;\n --stepperInput-button-margin: 2px;\n --stepperInput-button-width: 24px;\n --stepperInput-input-maxHeight: 28px;\n --stepperInput-secondary-button-height: 26px;\n --stepperInput-secondary-button-width: 26px;\n --stepperInput-secondary-button-marginRight: 2px;\n}\n\n.salt-density-touch {\n --stepperInput-adornment-container-top: 0;\n --stepperInput-button-height: 16px;\n --stepperInput-button-margin: 4px;\n --stepperInput-button-width: 36px;\n --stepperInput-secondary-button-height: 36px;\n --stepperInput-secondary-button-width: 36px;\n --stepperInput-secondary-button-marginRight: 4px;\n}\n\n.salt-density-low {\n --stepperInput-adornment-container-top: 0;\n --stepperInput-button-height: 12px;\n --stepperInput-button-margin: 4px;\n --stepperInput-button-width: 28px;\n --stepperInput-secondary-button-height: 28px;\n --stepperInput-secondary-button-width: 28px;\n --stepperInput-secondary-button-marginRight: 4px;\n}\n\n.salt-density-high {\n --stepperInput-adornment-container-top: -2px;\n --stepperInput-button-height: 8px;\n --stepperInput-button-margin: 2px;\n --stepperInput-button-width: 16px;\n --stepperInput-input-maxHeight: 20px;\n --stepperInput-secondary-button-height: 18px;\n --stepperInput-secondary-button-width: 18px;\n --stepperInput-secondary-button-marginRight: 2px;\n}\n\n/* Styles applied to adornment container */\n.saltStepperInput-adornmentContainer {\n display: flex;\n position: relative;\n top: var(--saltStepperInput-adornment-container-top, var(--stepperInput-adornment-container-top));\n}\n\n/* Styles applied to refresh button */\n.saltStepperInput-secondaryButton {\n --saltButton-height: var(--stepperInput-secondary-button-height);\n --saltButton-margin: var(--stepperInput-button-margin) var(--stepperInput-secondary-button-marginRight) var(--stepperInput-button-margin) var(--stepperInput-button-margin);\n --saltButton-width: var(--stepperInput-secondary-button-width);\n}\n\n.saltStepperInput-hideSecondaryButton {\n visibility: hidden;\n}\n\n/* Styles applied to stepper buttons container */\n.saltStepperInput-buttonContainer {\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n/* Styles applied to stepper buttons */\n.saltStepperInput-stepperButton {\n --saltButton-height: var(--stepperInput-button-height);\n --saltButton-margin: var(--stepperInput-button-margin);\n --saltButton-width: var(--stepperInput-button-width);\n}\n\n/* Styles applied to increment button */\n.saltStepperInput-increment {\n}\n\n/* Styles applied to decrement button */\n.saltStepperInput-decrement {\n --saltButton-margin: 0 var(--stepperInput-button-margin) var(--stepperInput-button-margin) var(--stepperInput-button-margin);\n}\n\n/* Styles applied to stepper button icon */\n.saltStepperInput-stepperButtonIcon {\n}\n\n/* Styles applied to input component */\n.saltStepperInput-input {\n max-height: var(--saltStepperInput-maxHeight, unset);\n}\n";
3
+ var css_248z = "/* Styles applied to stepper container */\n.saltStepperInput {\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: var(--salt-spacing-50);\n}\n\n/* Styles applied to stepper buttons container */\n.saltStepperInput-buttonContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-50);\n}\n\n/* Styles applied to stepper buttons */\n.saltStepperInput-stepperButton {\n --saltButton-height: calc((var(--salt-size-base) - var(--salt-spacing-50)) * 0.5);\n --saltButton-width: var(--salt-size-base);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=StepperInput.css.js.map