@salt-ds/lab 1.0.0-alpha.50 → 1.0.0-alpha.51

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 (44) hide show
  1. package/css/salt-lab.css +38 -14
  2. package/dist-cjs/calendar/Calendar.js +2 -0
  3. package/dist-cjs/calendar/Calendar.js.map +1 -1
  4. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  5. package/dist-cjs/calendar/internal/CalendarNavigation.js +3 -0
  6. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +1 -1
  7. package/dist-cjs/date-input/DateInput.css.js +1 -1
  8. package/dist-cjs/date-input/DateInput.js +3 -1
  9. package/dist-cjs/date-input/DateInput.js.map +1 -1
  10. package/dist-cjs/date-picker/DatePicker.js +4 -2
  11. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  12. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  13. package/dist-cjs/dropdown/Dropdown.css.js +1 -1
  14. package/dist-cjs/dropdown/DropdownBase.js +1 -1
  15. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  16. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  17. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +29 -25
  18. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  19. package/dist-cjs/tabs/Tabstrip.css.js +1 -1
  20. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  21. package/dist-es/calendar/Calendar.js +2 -0
  22. package/dist-es/calendar/Calendar.js.map +1 -1
  23. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  24. package/dist-es/calendar/internal/CalendarNavigation.js +3 -0
  25. package/dist-es/calendar/internal/CalendarNavigation.js.map +1 -1
  26. package/dist-es/date-input/DateInput.css.js +1 -1
  27. package/dist-es/date-input/DateInput.js +3 -1
  28. package/dist-es/date-input/DateInput.js.map +1 -1
  29. package/dist-es/date-picker/DatePicker.js +5 -3
  30. package/dist-es/date-picker/DatePicker.js.map +1 -1
  31. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  32. package/dist-es/dropdown/Dropdown.css.js +1 -1
  33. package/dist-es/dropdown/DropdownBase.js +1 -1
  34. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  35. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  36. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +30 -26
  37. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  38. package/dist-es/tabs/Tabstrip.css.js +1 -1
  39. package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  40. package/dist-types/calendar/Calendar.d.ts +1 -0
  41. package/dist-types/calendar/internal/CalendarNavigation.d.ts +1 -0
  42. package/dist-types/date-input/DateInput.d.ts +4 -0
  43. package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +11 -3
  44. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { clsx } from 'clsx';
3
3
  import { forwardRef, useState, useRef } from 'react';
4
- import { flip, useInteractions, useDismiss } from '@floating-ui/react';
4
+ import { offset, flip, useInteractions, useDismiss } from '@floating-ui/react';
5
5
  import { today, getLocalTimeZone } from '@internationalized/date';
6
6
  import { makePrefixer, useControlled, useFloatingUI, useFormFieldProps, useForkRef, Button } from '@salt-ds/core';
7
7
  import { CalendarIcon } from '@salt-ds/icons';
@@ -32,6 +32,7 @@ const DatePicker = forwardRef(function DatePicker2({
32
32
  onSelectionChange,
33
33
  onChange,
34
34
  visibleMonths = 2,
35
+ bordered,
35
36
  ...rest
36
37
  }, ref) {
37
38
  var _a, _b, _c;
@@ -63,7 +64,7 @@ const DatePicker = forwardRef(function DatePicker2({
63
64
  open,
64
65
  onOpenChange,
65
66
  placement: "bottom-start",
66
- middleware: [flip({ fallbackStrategy: "initialPlacement" })]
67
+ middleware: [offset(1), flip({ fallbackStrategy: "initialPlacement" })]
67
68
  });
68
69
  const { getReferenceProps, getFloatingProps } = useInteractions([
69
70
  useDismiss(context)
@@ -120,6 +121,7 @@ const DatePicker = forwardRef(function DatePicker2({
120
121
  children: [
121
122
  /* @__PURE__ */ jsx(DateInput, {
122
123
  validationStatus,
124
+ bordered,
123
125
  className: clsx(withBaseName(), className),
124
126
  ref: inputRef,
125
127
  ...getReferenceProps(),
@@ -145,7 +147,7 @@ const DatePicker = forwardRef(function DatePicker2({
145
147
  ref: floatingRef,
146
148
  ...getFloatingProps(),
147
149
  onSelect: handleSelect,
148
- CalendarProps,
150
+ CalendarProps: { ...CalendarProps, borderedDropdown: bordered },
149
151
  helperText,
150
152
  visibleMonths
151
153
  })
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type SyntheticEvent,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\n\nimport { flip, useDismiss, useInteractions } from \"@floating-ui/react\";\nimport {\n type DateValue,\n getLocalTimeZone,\n today,\n} from \"@internationalized/date\";\nimport {\n Button,\n makePrefixer,\n useControlled,\n useFloatingUI,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport {\n type CalendarProps,\n type RangeSelectionValueType,\n type SingleSelectionValueType,\n isRangeOrOffsetSelectionWithStartDate,\n} from \"../calendar\";\nimport { DateInput, type DateInputProps } from \"../date-input\";\nimport { DatePickerContext } from \"./DatePickerContext\";\nimport { DatePickerPanel } from \"./DatePickerPanel\";\n\nconst withBaseName = makePrefixer(\"saltDatePicker\");\n\nexport interface DatePickerProps<SelectionVariantType>\n extends DateInputProps<SelectionVariantType> {\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?: SelectionVariantType;\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?: SelectionVariantType;\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 * The default open value. Use when the component is not controlled.\n */\n defaultOpen?: boolean;\n /**\n * Helper text to display in the panel\n */\n helperText?: string;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Callback fired when the selected date change.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: SelectionVariantType,\n ) => void;\n /**\n * Callback fired when the input value change.\n */\n onChange?: SelectionVariantType extends SingleSelectionValueType\n ? (\n event: ChangeEvent<HTMLInputElement>,\n selectedDateInputValue?: string,\n ) => void\n : (\n event: ChangeEvent<HTMLInputElement>,\n startDateInputValue?: string,\n endDateInputValue?: string,\n ) => void;\n /**\n * Number of Calendars to be shown if selectionVariant is range.\n * 2 is the default value.\n */\n visibleMonths?: 1 | 2;\n}\n\nexport const DatePicker = forwardRef<\n HTMLDivElement,\n DatePickerProps<SingleSelectionValueType | RangeSelectionValueType>\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 defaultOpen,\n onOpenChange: onOpenChangeProp,\n helperText,\n readOnly: readOnlyProp,\n validationStatus,\n onSelectionChange,\n onChange,\n visibleMonths = 2,\n ...rest\n },\n ref,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: Boolean(defaultOpen),\n name: \"openPanel\",\n state: \"openPanel\",\n });\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const [startVisibleMonth, setStartVisibleMonth] = useState<\n DateValue | undefined\n >(\n (isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ? selectedDate?.startDate\n : selectedDate) ?? today(getLocalTimeZone()),\n );\n\n const [endVisibleMonth, setEndVisibleMonth] = useState<DateValue | undefined>(\n (isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ? selectedDate.startDate?.add({ months: 1 })\n : selectedDate) ?? 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 event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue },\n ) => {\n if (selectionVariant === \"default\" && selectedDate) {\n startInputRef?.current?.focus();\n }\n\n if (\n isRangeOrOffsetSelectionWithStartDate(selectedDate) &&\n selectedDate.endDate\n ) {\n endInputRef?.current?.focus();\n }\n onSelectionChange?.(event, selectedDate);\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 selectedDate,\n setSelectedDate,\n defaultSelectedDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n selectionVariant,\n context,\n getPanelPosition,\n };\n\n return (\n <DatePickerContext.Provider value={datePickerContextValue}>\n <DateInput\n validationStatus={validationStatus}\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 onSelectionChange={onSelectionChange}\n onChange={onChange}\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 visibleMonths={visibleMonths}\n />\n </DatePickerContext.Provider>\n );\n});\n"],"names":["DatePicker","_a","_b","selectedDate"],"mappings":"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"}
1
+ {"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type SyntheticEvent,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\n\nimport { flip, offset, useDismiss, useInteractions } from \"@floating-ui/react\";\nimport {\n type DateValue,\n getLocalTimeZone,\n today,\n} from \"@internationalized/date\";\nimport {\n Button,\n makePrefixer,\n useControlled,\n useFloatingUI,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { CalendarIcon } from \"@salt-ds/icons\";\nimport {\n type CalendarProps,\n type RangeSelectionValueType,\n type SingleSelectionValueType,\n isRangeOrOffsetSelectionWithStartDate,\n} from \"../calendar\";\nimport { DateInput, type DateInputProps } from \"../date-input\";\nimport { DatePickerContext } from \"./DatePickerContext\";\nimport { DatePickerPanel } from \"./DatePickerPanel\";\n\nconst withBaseName = makePrefixer(\"saltDatePicker\");\n\nexport interface DatePickerProps<SelectionVariantType>\n extends DateInputProps<SelectionVariantType> {\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?: SelectionVariantType;\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?: SelectionVariantType;\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 * The default open value. Use when the component is not controlled.\n */\n defaultOpen?: boolean;\n /**\n * Helper text to display in the panel\n */\n helperText?: string;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Callback fired when the selected date change.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: SelectionVariantType,\n ) => void;\n /**\n * Callback fired when the input value change.\n */\n onChange?: SelectionVariantType extends SingleSelectionValueType\n ? (\n event: ChangeEvent<HTMLInputElement>,\n selectedDateInputValue?: string,\n ) => void\n : (\n event: ChangeEvent<HTMLInputElement>,\n startDateInputValue?: string,\n endDateInputValue?: string,\n ) => void;\n /**\n * Number of Calendars to be shown if selectionVariant is range.\n * 2 is the default value.\n */\n visibleMonths?: 1 | 2;\n}\n\nexport const DatePicker = forwardRef<\n HTMLDivElement,\n DatePickerProps<SingleSelectionValueType | RangeSelectionValueType>\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 defaultOpen,\n onOpenChange: onOpenChangeProp,\n helperText,\n readOnly: readOnlyProp,\n validationStatus,\n onSelectionChange,\n onChange,\n visibleMonths = 2,\n bordered,\n ...rest\n },\n ref,\n) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: Boolean(defaultOpen),\n name: \"openPanel\",\n state: \"openPanel\",\n });\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"Calendar\",\n state: \"selectedDate\",\n });\n\n const [startVisibleMonth, setStartVisibleMonth] = useState<\n DateValue | undefined\n >(\n (isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ? selectedDate?.startDate\n : selectedDate) ?? today(getLocalTimeZone()),\n );\n\n const [endVisibleMonth, setEndVisibleMonth] = useState<DateValue | undefined>(\n (isRangeOrOffsetSelectionWithStartDate(selectedDate)\n ? selectedDate.startDate?.add({ months: 1 })\n : selectedDate) ?? 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: [offset(1), 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 event: SyntheticEvent,\n selectedDate?: DateValue | { startDate?: DateValue; endDate?: DateValue },\n ) => {\n if (selectionVariant === \"default\" && selectedDate) {\n startInputRef?.current?.focus();\n }\n\n if (\n isRangeOrOffsetSelectionWithStartDate(selectedDate) &&\n selectedDate.endDate\n ) {\n endInputRef?.current?.focus();\n }\n onSelectionChange?.(event, selectedDate);\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 selectedDate,\n setSelectedDate,\n defaultSelectedDate,\n startVisibleMonth,\n setStartVisibleMonth,\n endVisibleMonth,\n setEndVisibleMonth,\n selectionVariant,\n context,\n getPanelPosition,\n };\n\n return (\n <DatePickerContext.Provider value={datePickerContextValue}>\n <DateInput\n validationStatus={validationStatus}\n bordered={bordered}\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 onSelectionChange={onSelectionChange}\n onChange={onChange}\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, borderedDropdown: bordered }}\n helperText={helperText}\n visibleMonths={visibleMonths}\n />\n </DatePickerContext.Provider>\n );\n});\n"],"names":["DatePicker","_a","_b","selectedDate"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- 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-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n border-radius: var(--salt-palette-corner, 0);\n}\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
1
+ 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-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=DatePickerPanel.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltDropdown {\n --saltIcon-margin: 2px 0 0 8px;\n display: inline-block;\n line-height: 0;\n position: relative;\n}\n\n.saltDropdown-fullWidth {\n width: 100%;\n}\n\n.saltDropdown-popup {\n background: var(--salt-container-primary-background);\n z-index: calc(var(--salt-zIndex-flyover) - 1);\n}\n";
1
+ var css_248z = ".saltDropdownBase {\n --saltIcon-margin: 2px 0 0 8px;\n display: inline-block;\n line-height: 0;\n position: relative;\n}\n\n.saltDropdownBase-fullWidth {\n width: 100%;\n}\n\n.saltDropdownBase-popup {\n background: var(--salt-container-primary-background);\n z-index: calc(var(--salt-zIndex-flyover) - 1);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Dropdown.css.js.map
@@ -12,7 +12,7 @@ import { useDropdownBase } from './useDropdownBase.js';
12
12
  import { useWindow } from '@salt-ds/window';
13
13
  import css_248z from './Dropdown.css.js';
14
14
 
15
- const withBaseName = makePrefixer("saltDropdown");
15
+ const withBaseName = makePrefixer("saltDropdownBase");
16
16
  const DropdownBase = forwardRef(
17
17
  function Dropdown({
18
18
  "aria-labelledby": ariaLabelledByProp,
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { Portal } from \"../portal\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport type { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdown\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children,\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n },\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined,\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef,\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n }),\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n },\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownBase.js","sources":["../src/dropdown/DropdownBase.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { clsx } from \"clsx\";\nimport { Children, cloneElement, forwardRef, useRef, useState } from \"react\";\nimport { Portal } from \"../portal\";\nimport { forwardCallbackProps } from \"../utils\";\nimport { isDesktop, useWindow as usePortalWindow } from \"../window\";\nimport type { DropdownBaseProps } from \"./dropdownTypes\";\nimport { useDropdownBase } from \"./useDropdownBase\";\n\nimport { useWindow } from \"@salt-ds/window\";\n\nimport dropdownCss from \"./Dropdown.css\";\n// Any component may be passed as our trigger or popup component.\n// Define the common props that we will act on, if present,\n// so we can type them.\nexport type MaybeChildProps = {\n className?: string;\n id?: string;\n role?: string;\n width: number | string;\n};\n\nconst withBaseName = makePrefixer(\"saltDropdownBase\");\n\nexport const DropdownBase = forwardRef<HTMLDivElement, DropdownBaseProps>(\n function Dropdown(\n {\n \"aria-labelledby\": ariaLabelledByProp,\n children,\n className: classNameProp,\n container,\n defaultIsOpen,\n disabled,\n disablePortal,\n fullWidth,\n id: idProp,\n isOpen: isOpenProp,\n onKeyDown,\n onOpenChange,\n openOnFocus,\n placement = \"bottom-start\",\n popupWidth,\n width,\n ...htmlAttributes\n },\n forwardedRef,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown\",\n css: dropdownCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const className = clsx(withBaseName(), classNameProp, {\n [withBaseName(\"fullWidth\")]: fullWidth,\n [withBaseName(\"disabled\")]: disabled,\n });\n const [trigger, popupComponent] = Children.toArray(\n children,\n ) as JSX.Element[];\n const id = useId(idProp);\n const Window = usePortalWindow();\n\n const { componentProps, popperRef, isOpen, triggerProps } = useDropdownBase(\n {\n ariaLabelledBy: ariaLabelledByProp,\n defaultIsOpen,\n disabled,\n fullWidth,\n id,\n isOpen: isOpenProp,\n onOpenChange,\n onKeyDown,\n openOnFocus,\n popupComponent,\n popupWidth,\n rootRef,\n width,\n },\n );\n const [maxPopupHeight, setMaxPopupHeight] = useState<number | undefined>(\n undefined,\n );\n\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxPopupHeight(availableHeight);\n },\n }),\n ];\n\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement,\n middleware,\n });\n\n const handlePopperListAdapterRef = useForkRef<HTMLDivElement>(\n reference,\n forwardedRef,\n );\n const handleRootRef = useForkRef(rootRef, handlePopperListAdapterRef);\n const handleFloatingRef = useForkRef<HTMLDivElement>(floating, popperRef);\n // TODO maybe we should pass style, with maxHeight, to the popupComponent\n\n const getTriggerComponent = () => {\n const {\n id: defaultId,\n role: defaultRole,\n ...restTriggerProps\n } = triggerProps;\n\n const {\n id = defaultId,\n role = defaultRole,\n ...ownProps\n } = trigger.props as MaybeChildProps;\n\n return cloneElement(\n trigger,\n forwardCallbackProps(ownProps, {\n ...restTriggerProps,\n id,\n role,\n }),\n );\n };\n\n const getPopupComponent = () => {\n const { id: defaultId, width, ...restComponentProps } = componentProps;\n const {\n className,\n id = defaultId,\n width: ownWidth,\n ...ownProps\n } = popupComponent.props as MaybeChildProps;\n return cloneElement(popupComponent, {\n ...ownProps,\n ...restComponentProps,\n className: clsx(className, withBaseName(\"popup-component\")),\n id,\n width: ownWidth ?? width,\n });\n };\n\n return (\n <div\n {...htmlAttributes}\n className={className}\n data-testid=\"dropdown\"\n id={idProp}\n ref={handleRootRef}\n >\n {getTriggerComponent()}\n {isOpen && (\n <Portal disablePortal={disablePortal} container={container}>\n <Window\n className={clsx(withBaseName(\"popup\"), classNameProp)}\n id={`${id}-popup`}\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n maxHeight: maxPopupHeight,\n }}\n ref={handleFloatingRef}\n >\n {getPopupComponent()}\n </Window>\n </Portal>\n )}\n </div>\n );\n },\n);\n"],"names":["dropdownCss","useId","usePortalWindow","id","width","className"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- 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";
1
+ 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 --trackerStep-icon-color-warning: var(--saltTrackerStep-icon-color-warning, var(--salt-status-warning-foreground-decorative));\n --trackerStep-icon-color-error: var(--saltTrackerStep-icon-color-error, var(--salt-status-error-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-status-warning {\n --trackerStep-icon-color: var(--trackerStep-icon-color-warning);\n}\n\n.saltTrackerStep.saltTrackerStep-status-error {\n --trackerStep-icon-color: var(--trackerStep-icon-color-error);\n}\n\n.saltTrackerStep.saltTrackerStep-active {\n --trackerStep-icon-color: var(--trackerStep-icon-color-active);\n}\n\n.saltTrackerStep.saltTrackerStep-stage-completed {\n --trackerStep-icon-color: var(--trackerStep-icon-color-completed);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=TrackerStep.css.js.map
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { makePrefixer } from '@salt-ds/core';
3
- import { StepActiveIcon, StepDefaultIcon, StepSuccessIcon } from '@salt-ds/icons';
3
+ import { StepDefaultIcon, StepActiveIcon, StepSuccessIcon, WarningSolidIcon, ErrorSolidIcon } from '@salt-ds/icons';
4
4
  import { useComponentCssInjection } from '@salt-ds/styles';
5
5
  import { useWindow } from '@salt-ds/window';
6
6
  import { clsx } from 'clsx';
@@ -11,26 +11,11 @@ import css_248z from './TrackerStep.css.js';
11
11
 
12
12
  const withBaseName = makePrefixer("saltTrackerStep");
13
13
  const iconMap = {
14
- default: StepDefaultIcon,
15
- completed: StepSuccessIcon
16
- };
17
- const getStateIcon = ({
18
- isActive,
19
- state
20
- }) => {
21
- if (state === "default" && isActive) {
22
- return StepActiveIcon;
23
- }
24
- return iconMap[state];
25
- };
26
- const getState = ({
27
- isActive,
28
- state
29
- }) => {
30
- if (state === "default" && isActive) {
31
- return "active";
32
- }
33
- return state;
14
+ pending: StepDefaultIcon,
15
+ active: StepActiveIcon,
16
+ completed: StepSuccessIcon,
17
+ warning: WarningSolidIcon,
18
+ error: ErrorSolidIcon
34
19
  };
35
20
  const useCheckWithinSteppedTracker = (isWithinSteppedTracker) => {
36
21
  useEffect(() => {
@@ -43,10 +28,24 @@ const useCheckWithinSteppedTracker = (isWithinSteppedTracker) => {
43
28
  }
44
29
  }, [isWithinSteppedTracker]);
45
30
  };
31
+ const parseIconName = ({
32
+ stage,
33
+ status,
34
+ active
35
+ }) => {
36
+ if (stage === "completed")
37
+ return "completed";
38
+ if (active)
39
+ return "active";
40
+ if (status)
41
+ return status;
42
+ return stage;
43
+ };
46
44
  const TrackerStep = forwardRef(
47
45
  function TrackerStep2(props, ref) {
48
46
  const {
49
- state = "default",
47
+ stage = "pending",
48
+ status,
50
49
  style,
51
50
  className,
52
51
  children,
@@ -62,8 +61,8 @@ const TrackerStep = forwardRef(
62
61
  const stepNumber = useTrackerStepContext();
63
62
  useCheckWithinSteppedTracker(isWithinSteppedTracker);
64
63
  const isActive = activeStep === stepNumber;
65
- const Icon = getStateIcon({ isActive, state });
66
- const resolvedState = getState({ isActive, state });
64
+ const iconName = parseIconName({ stage, status, active: isActive });
65
+ const Icon = iconMap[iconName];
67
66
  const connectorState = activeStep > stepNumber ? "active" : "default";
68
67
  const hasConnector = stepNumber < totalSteps - 1;
69
68
  const innerStyle = {
@@ -71,10 +70,15 @@ const TrackerStep = forwardRef(
71
70
  "--saltTrackerStep-width": `${100 / totalSteps}%`
72
71
  };
73
72
  return /* @__PURE__ */ jsxs("li", {
74
- className: clsx(withBaseName(), withBaseName(resolvedState), className),
73
+ className: clsx(
74
+ withBaseName(),
75
+ withBaseName(`stage-${stage}`),
76
+ withBaseName(`status-${status}`),
77
+ { [withBaseName("active")]: isActive },
78
+ className
79
+ ),
75
80
  style: innerStyle,
76
81
  "aria-current": isActive ? "step" : void 0,
77
- "data-state": state,
78
82
  ref,
79
83
  ...restProps,
80
84
  children: [
@@ -1 +1 @@
1
- {"version":3,"file":"TrackerStep.js","sources":["../src/stepped-tracker/TrackerStep/TrackerStep.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport {\n StepActiveIcon,\n StepDefaultIcon,\n StepSuccessIcon,\n} from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef, useEffect } from \"react\";\nimport { TrackerConnector } from \"../TrackerConnector\";\n\nimport {\n useSteppedTrackerContext,\n useTrackerStepContext,\n} from \"../SteppedTrackerContext\";\n\nimport trackerStepCss from \"./TrackerStep.css\";\n\nconst withBaseName = makePrefixer(\"saltTrackerStep\");\n\ntype State = \"default\" | \"completed\";\n\ntype StateWithActive = State | \"active\";\n\nexport interface TrackerStepProps extends ComponentPropsWithoutRef<\"li\"> {\n /**\n * The state of the TrackerStep\n */\n state?: State;\n}\n\nconst iconMap = {\n default: StepDefaultIcon,\n completed: StepSuccessIcon,\n};\n\nconst getStateIcon = ({\n isActive,\n state,\n}: {\n isActive: boolean;\n state: State;\n}) => {\n if (state === \"default\" && isActive) {\n return StepActiveIcon;\n }\n return iconMap[state];\n};\n\nconst getState = ({\n isActive,\n state,\n}: {\n isActive: boolean;\n state: State;\n}): StateWithActive => {\n if (state === \"default\" && isActive) {\n return \"active\";\n }\n return state;\n};\n\nconst useCheckWithinSteppedTracker = (isWithinSteppedTracker: boolean) => {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!isWithinSteppedTracker) {\n console.error(\n \"The TrackerStep component must be placed within a SteppedTracker component\",\n );\n }\n }\n }, [isWithinSteppedTracker]);\n};\n\nexport const TrackerStep = forwardRef<HTMLLIElement, TrackerStepProps>(\n function TrackerStep(props, ref) {\n const {\n state = \"default\",\n style,\n className,\n children,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tracker-step\",\n css: trackerStepCss,\n window: targetWindow,\n });\n\n const { activeStep, totalSteps, isWithinSteppedTracker } =\n useSteppedTrackerContext();\n const stepNumber = useTrackerStepContext();\n\n useCheckWithinSteppedTracker(isWithinSteppedTracker);\n\n const isActive = activeStep === stepNumber;\n const Icon = getStateIcon({ isActive, state });\n const resolvedState = getState({ isActive, state });\n const connectorState = activeStep > stepNumber ? \"active\" : \"default\";\n const hasConnector = stepNumber < totalSteps - 1;\n\n const innerStyle = {\n ...style,\n \"--saltTrackerStep-width\": `${100 / totalSteps}%`,\n };\n\n return (\n <li\n className={clsx(withBaseName(), withBaseName(resolvedState), className)}\n style={innerStyle}\n aria-current={isActive ? \"step\" : undefined}\n data-state={state}\n ref={ref}\n {...restProps}\n >\n <Icon />\n {hasConnector && <TrackerConnector state={connectorState} />}\n <div className={withBaseName(\"body\")}>{children}</div>\n </li>\n );\n },\n);\n"],"names":["TrackerStep","trackerStepCss"],"mappings":"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"}
1
+ {"version":3,"file":"TrackerStep.js","sources":["../src/stepped-tracker/TrackerStep/TrackerStep.tsx"],"sourcesContent":["import { type ValidationStatus, makePrefixer } from \"@salt-ds/core\";\nimport {\n ErrorSolidIcon,\n StepActiveIcon,\n StepDefaultIcon,\n StepSuccessIcon,\n WarningSolidIcon,\n} from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithoutRef, forwardRef, useEffect } from \"react\";\nimport { TrackerConnector } from \"../TrackerConnector\";\n\nimport {\n useSteppedTrackerContext,\n useTrackerStepContext,\n} from \"../SteppedTrackerContext\";\n\nimport trackerStepCss from \"./TrackerStep.css\";\n\nconst withBaseName = makePrefixer(\"saltTrackerStep\");\n\ntype StageOptions = \"pending\" | \"completed\";\ntype StatusOptions = Extract<ValidationStatus, \"warning\" | \"error\">;\n\nexport interface TrackerStepProps extends ComponentPropsWithoutRef<\"li\"> {\n /**\n * The stage of the step: \"pending\" or \"completed\" (note, \"active\" is derived from \"activeStep\" in parent SteppedTracker component)\n */\n stage?: StageOptions;\n /**\n * The status of the step: warning or error\n *\n * If the stage is completed or active, the status prop will be ignored\n */\n status?: StatusOptions;\n}\n\nconst iconMap = {\n pending: StepDefaultIcon,\n active: StepActiveIcon,\n completed: StepSuccessIcon,\n warning: WarningSolidIcon,\n error: ErrorSolidIcon,\n};\n\nconst useCheckWithinSteppedTracker = (isWithinSteppedTracker: boolean) => {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!isWithinSteppedTracker) {\n console.error(\n \"The TrackerStep component must be placed within a SteppedTracker component\",\n );\n }\n }\n }, [isWithinSteppedTracker]);\n};\n\nconst parseIconName = ({\n stage,\n status,\n active,\n}: {\n stage: StageOptions;\n status?: StatusOptions;\n active: boolean;\n}) => {\n if (stage === \"completed\") return \"completed\";\n if (active) return \"active\";\n if (status) return status;\n return stage;\n};\n\nexport const TrackerStep = forwardRef<HTMLLIElement, TrackerStepProps>(\n function TrackerStep(props, ref) {\n const {\n stage = \"pending\",\n status,\n style,\n className,\n children,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tracker-step\",\n css: trackerStepCss,\n window: targetWindow,\n });\n\n const { activeStep, totalSteps, isWithinSteppedTracker } =\n useSteppedTrackerContext();\n const stepNumber = useTrackerStepContext();\n\n useCheckWithinSteppedTracker(isWithinSteppedTracker);\n\n const isActive = activeStep === stepNumber;\n const iconName = parseIconName({ stage, status, active: isActive });\n\n const Icon = iconMap[iconName];\n const connectorState = activeStep > stepNumber ? \"active\" : \"default\";\n const hasConnector = stepNumber < totalSteps - 1;\n\n const innerStyle = {\n ...style,\n \"--saltTrackerStep-width\": `${100 / totalSteps}%`,\n };\n\n return (\n <li\n className={clsx(\n withBaseName(),\n withBaseName(`stage-${stage}`),\n withBaseName(`status-${status}`),\n { [withBaseName(\"active\")]: isActive },\n className,\n )}\n style={innerStyle}\n aria-current={isActive ? \"step\" : undefined}\n ref={ref}\n {...restProps}\n >\n <Icon />\n {hasConnector && <TrackerConnector state={connectorState} />}\n <div className={withBaseName(\"body\")}>{children}</div>\n </li>\n );\n },\n);\n"],"names":["TrackerStep","trackerStepCss"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- var css_248z = "/* Component class applied to the root element */\n.saltTabstrip {\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-tabstrip-dragging-display: none;\n --tabs-tabstrip-display: inline-flex;\n --tabs-tabstrip-background: transparent;\n\n align-items: flex-start;\n align-self: var(--saltTabs-tabstrip-alignSelf, stretch);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n position: relative;\n overflow: hidden;\n display: flex;\n min-width: 28px;\n width: 100%;\n}\n\n/* Tabstrip orientation is horizontal */\n.saltTabstrip-horizontal {\n --saltTabs-activationIndicator-height: 1px;\n --saltTabs-activationIndicator-thumb-inset: -1px 0 0 0;\n\n --tabs-activationIndicator-borderStyle: none none solid none;\n --tabs-activationIndicator-inset: auto 0px 0px 0px;\n --tabs-activationIndicator-transitionProperty: left;\n --tabs-activationIndicator-thumb-height: 2px;\n}\n\n/* Tabstrip orientation is vertical */\n.saltTabstrip-vertical {\n --saltTabs-activationIndicator-thumb-inset: 0 0 0 -1px;\n\n --tabs-activationIndicator-transition: top 0.3s ease;\n --tabs-activationIndicator-borderStyle: none solid none none;\n --tabs-activationIndicator-inset: 0px 0px 0px auto;\n --tabs-activationIndicator-transitionProperty: top;\n --tabs-activationIndicator-width: 1px;\n --tabs-activationIndicator-thumb-width: 2px;\n\n align-self: flex-start;\n display: inline-flex;\n}\n\n.saltTabstrip-draggingTab {\n --saltTabs-activationIndicator-transition: none;\n}\n\n.saltTabstrip-draggingTab .saltTab {\n pointer-events: none;\n}\n\n/* Tabstrip orientation is horizontal */\n.saltTabstrip-horizontal {\n height: var(--tabs-tabstrip-height);\n}\n\n.saltTabstrip-addButton,\n.saltDropdown.saltTabstrip-overflowMenu {\n margin-left: var(--salt-size-unit);\n}\n\n.saltTabstrip-overflowMenu.saltDropdown {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.saltTabstrip-overflowMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-text-color: var(--salt-actionable-secondary-text-color-active);\n}\n\n.saltTabstrip-overflowMenu-open .saltButton {\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.saltTabstrip-inner {\n width: 100%;\n align-items: center;\n display: flex;\n flex-basis: auto;\n flex-grow: 0;\n flex-shrink: 1;\n flex-wrap: wrap;\n justify-content: flex-start;\n line-height: var(--tabs-tabstrip-height);\n}\n\n.saltTabstrip-vertical .saltTabstrip-inner {\n flex-direction: column;\n height: auto;\n}\n\n.saltTabstrip-centered .saltTabstrip-inner {\n justify-content: center;\n}\n\n/* Styling applied to Draggable wrapper when used to drag a Tab */\n.saltDraggable[class*=\"tabstrip\"] {\n --tabs-tabstrip-display: flex;\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-tabstrip-dragging-display: block;\n\n --tabs-tab-background: var(--salt-navigable-background-hover);\n --tabs-tab-before-content: \"\";\n --tabs-tab-before-background: var(--salt-navigable-indicator-hover);\n --tabs-tab-before-height: var(--tabs-activationIndicator-thumb-height);\n --tabs-tab-before-inset: var(--tabs-activationIndicator-inset);\n --tabs-tab-before-width: var(--tabs-activationIndicator-thumb-width);\n --tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);\n --tabs-tab-position: static;\n\n font-size: 12px;\n}\n\n.saltDraggable-tabstrip-horizontal {\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-activationIndicator-thumb-height: 2px;\n --tabs-activationIndicator-inset: auto 0px 0px 0px;\n\n line-height: var(--tabs-tabstrip-height);\n}\n.saltDraggable-tabstrip-vertical {\n --tabs-activationIndicator-inset: 0px 0px 0px auto;\n --tabs-activationIndicator-thumb-width: 2px;\n}\n\n.saltDraggable[class*=\"tabstrip\"] .saltTab[aria-selected=\"true\"]:before {\n --tabs-tab-before-background: var(--salt-navigable-indicator-active);\n}\n\n.saltDraggable[class*=\"tabstrip\"] .saltTab {\n box-shadow: var(--salt-overlayable-shadow-drag);\n}\n\n[data-overflowed] {\n order: 99;\n visibility: hidden;\n}\n\n.saltTabstrip-overflowMenu-dropTarget:after {\n background: var(--salt-selectable-background-selected);\n content: \"\";\n position: absolute;\n height: 2px;\n left: 0;\n right: 0;\n bottom: 0;\n}\n";
1
+ var css_248z = "/* Component class applied to the root element */\n.saltTabstrip {\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-tabstrip-dragging-display: none;\n --tabs-tabstrip-display: inline-flex;\n --tabs-tabstrip-background: transparent;\n\n align-items: flex-start;\n align-self: var(--saltTabs-tabstrip-alignSelf, stretch);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n position: relative;\n overflow: hidden;\n display: flex;\n min-width: 28px;\n width: 100%;\n}\n\n/* Tabstrip orientation is horizontal */\n.saltTabstrip-horizontal {\n --saltTabs-activationIndicator-height: 1px;\n --saltTabs-activationIndicator-thumb-inset: -1px 0 0 0;\n\n --tabs-activationIndicator-borderStyle: none none solid none;\n --tabs-activationIndicator-inset: auto 0px 0px 0px;\n --tabs-activationIndicator-transitionProperty: left;\n --tabs-activationIndicator-thumb-height: 2px;\n}\n\n/* Tabstrip orientation is vertical */\n.saltTabstrip-vertical {\n --saltTabs-activationIndicator-thumb-inset: 0 0 0 -1px;\n\n --tabs-activationIndicator-transition: top 0.3s ease;\n --tabs-activationIndicator-borderStyle: none solid none none;\n --tabs-activationIndicator-inset: 0px 0px 0px auto;\n --tabs-activationIndicator-transitionProperty: top;\n --tabs-activationIndicator-width: 1px;\n --tabs-activationIndicator-thumb-width: 2px;\n\n align-self: flex-start;\n display: inline-flex;\n}\n\n.saltTabstrip-draggingTab {\n --saltTabs-activationIndicator-transition: none;\n}\n\n.saltTabstrip-draggingTab .saltTab {\n pointer-events: none;\n}\n\n/* Tabstrip orientation is horizontal */\n.saltTabstrip-horizontal {\n height: var(--tabs-tabstrip-height);\n}\n\n.saltTabstrip-addButton,\n.saltDropdownBase.saltTabstrip-overflowMenu {\n margin-left: var(--salt-size-unit);\n}\n\n.saltTabstrip-overflowMenu.saltDropdownBase {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.saltTabstrip-overflowMenu-open {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-text-color: var(--salt-actionable-secondary-text-color-active);\n}\n\n.saltTabstrip-overflowMenu-open .saltButton {\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.saltTabstrip-inner {\n width: 100%;\n align-items: center;\n display: flex;\n flex-basis: auto;\n flex-grow: 0;\n flex-shrink: 1;\n flex-wrap: wrap;\n justify-content: flex-start;\n line-height: var(--tabs-tabstrip-height);\n}\n\n.saltTabstrip-vertical .saltTabstrip-inner {\n flex-direction: column;\n height: auto;\n}\n\n.saltTabstrip-centered .saltTabstrip-inner {\n justify-content: center;\n}\n\n/* Styling applied to Draggable wrapper when used to drag a Tab */\n.saltDraggable[class*=\"tabstrip\"] {\n --tabs-tabstrip-display: flex;\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-tabstrip-dragging-display: block;\n\n --tabs-tab-background: var(--salt-navigable-background-hover);\n --tabs-tab-before-content: \"\";\n --tabs-tab-before-background: var(--salt-navigable-indicator-hover);\n --tabs-tab-before-height: var(--tabs-activationIndicator-thumb-height);\n --tabs-tab-before-inset: var(--tabs-activationIndicator-inset);\n --tabs-tab-before-width: var(--tabs-activationIndicator-thumb-width);\n --tabs-tab-cursor: var(--salt-draggable-grab-cursor-active);\n --tabs-tab-position: static;\n\n font-size: 12px;\n}\n\n.saltDraggable-tabstrip-horizontal {\n --tabs-tabstrip-height: var(--saltTabs-tabstrip-height, var(--salt-size-stackable));\n --tabs-activationIndicator-thumb-height: 2px;\n --tabs-activationIndicator-inset: auto 0px 0px 0px;\n\n line-height: var(--tabs-tabstrip-height);\n}\n.saltDraggable-tabstrip-vertical {\n --tabs-activationIndicator-inset: 0px 0px 0px auto;\n --tabs-activationIndicator-thumb-width: 2px;\n}\n\n.saltDraggable[class*=\"tabstrip\"] .saltTab[aria-selected=\"true\"]:before {\n --tabs-tab-before-background: var(--salt-navigable-indicator-active);\n}\n\n.saltDraggable[class*=\"tabstrip\"] .saltTab {\n box-shadow: var(--salt-overlayable-shadow-drag);\n}\n\n[data-overflowed] {\n order: 99;\n visibility: hidden;\n}\n\n.saltTabstrip-overflowMenu-dropTarget:after {\n background: var(--salt-selectable-background-selected);\n content: \"\";\n position: absolute;\n height: 2px;\n left: 0;\n right: 0;\n bottom: 0;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=Tabstrip.css.js.map
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltOverflowPanel.saltDropdown-popup {\n background: var(--salt-container-primary-background);\n border: solid 1px var(--salt-selectable-borderColor-hover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n}\n\n.saltOverflowPanel-content {\n --saltButton-justifyContent: flex-start;\n --saltDropdown-popup-maxHeight: auto;\n align-items: stretch;\n color: var(--salt-content-primary-foreground);\n border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);\n display: flex;\n flex-direction: column;\n padding: calc(var(--salt-size-unit) * 1.5) 0;\n outline: none;\n}\n\n.saltOverflowPanel [aria-expanded=\"true\"] {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-background-hover: var(--salt-actionable-secondary-background-active);\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.saltOverflowPanel.saltDropdown {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.saltOverflowPanel.saltDropdown-popup .saltFormFieldLegacy:not(.saltFormFieldLegacy-toolbarButton) {\n --saltFormFieldLegacy-margin: 0 12px 8px 12px;\n}\n";
1
+ var css_248z = ".saltOverflowPanel.saltDropdownBase-popup {\n background: var(--salt-container-primary-background);\n border: solid 1px var(--salt-selectable-borderColor-hover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n}\n\n.saltOverflowPanel-content {\n --saltButton-justifyContent: flex-start;\n align-items: stretch;\n color: var(--salt-content-primary-foreground);\n border: var(--salt-size-border) var(--salt-container-borderStyle) var(--salt-container-primary-borderColor);\n display: flex;\n flex-direction: column;\n padding: calc(var(--salt-size-unit) * 1.5) 0;\n outline: none;\n}\n\n.saltOverflowPanel [aria-expanded=\"true\"] {\n --saltButton-background: var(--salt-actionable-secondary-background-active);\n --saltButton-background-hover: var(--salt-actionable-secondary-background-active);\n --saltIcon-color: var(--salt-actionable-secondary-foreground-active);\n}\n\n.saltOverflowPanel.saltDropdownBase {\n --saltIcon-margin: 2px 0 0 0px;\n}\n\n.saltOverflowPanel.saltDropdownBase-popup .saltFormFieldLegacy:not(.saltFormFieldLegacy-toolbarButton) {\n --saltFormFieldLegacy-margin: 0 12px 8px 12px;\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=OverflowPanel.css.js.map
@@ -5,6 +5,7 @@ export declare type CalendarProps = useCalendarProps & {
5
5
  className?: string;
6
6
  renderDayContents?: CalendarCarouselProps["renderDayContents"];
7
7
  hideYearDropdown?: CalendarNavigationProps["hideYearDropdown"];
8
+ borderedDropdown?: CalendarNavigationProps["borderedDropdown"];
8
9
  TooltipProps?: CalendarCarouselProps["TooltipProps"];
9
10
  hideOutOfRangeDates?: CalendarCarouselProps["hideOutOfRangeDates"];
10
11
  };
@@ -7,6 +7,7 @@ export interface CalendarNavigationProps extends ComponentPropsWithRef<"div"> {
7
7
  YearDropdownProps?: dateDropdownProps;
8
8
  onMonthSelect?: dateDropdownProps["onChange"];
9
9
  onYearSelect?: dateDropdownProps["onChange"];
10
+ borderedDropdown?: dateDropdownProps["bordered"];
10
11
  onNavigateNext?: ButtonProps["onClick"];
11
12
  onNavigatePrevious?: ButtonProps["onClick"];
12
13
  hideYearDropdown?: boolean;
@@ -28,6 +28,10 @@ export interface DateInputProps<SelectionVariantType> extends Omit<ComponentProp
28
28
  * Styling variant. Defaults to "primary".
29
29
  */
30
30
  variant?: "primary" | "secondary";
31
+ /**
32
+ * Styling variant with full border. Defaults to false
33
+ */
34
+ bordered?: boolean;
31
35
  /**
32
36
  * Function to format the input value.
33
37
  */
@@ -1,10 +1,18 @@
1
+ import { type ValidationStatus } from "@salt-ds/core";
1
2
  import { type ComponentPropsWithoutRef } from "react";
2
- declare type State = "default" | "completed";
3
+ declare type StageOptions = "pending" | "completed";
4
+ declare type StatusOptions = Extract<ValidationStatus, "warning" | "error">;
3
5
  export interface TrackerStepProps extends ComponentPropsWithoutRef<"li"> {
4
6
  /**
5
- * The state of the TrackerStep
7
+ * The stage of the step: "pending" or "completed" (note, "active" is derived from "activeStep" in parent SteppedTracker component)
6
8
  */
7
- state?: State;
9
+ stage?: StageOptions;
10
+ /**
11
+ * The status of the step: warning or error
12
+ *
13
+ * If the stage is completed or active, the status prop will be ignored
14
+ */
15
+ status?: StatusOptions;
8
16
  }
9
17
  export declare const TrackerStep: import("react").ForwardRefExoticComponent<TrackerStepProps & import("react").RefAttributes<HTMLLIElement>>;
10
18
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.50",
3
+ "version": "1.0.0-alpha.51",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,7 +26,7 @@
26
26
  "react-window": "^1.8.6",
27
27
  "rifm": "^0.12.0",
28
28
  "tinycolor2": "^1.4.2",
29
- "@salt-ds/core": "^1.33.0",
29
+ "@salt-ds/core": "^1.34.0",
30
30
  "@salt-ds/styles": "^0.2.1",
31
31
  "@salt-ds/window": "^0.1.1",
32
32
  "@salt-ds/icons": "^1.12.1"