@salt-ds/lab 1.0.0-alpha.80 → 1.0.0-alpha.82

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 (46) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/css/salt-lab.css +2 -229
  3. package/dist-cjs/calendar/internal/CalendarDay.js +1 -1
  4. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  5. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +1 -1
  6. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  7. package/dist-cjs/date-picker/DatePickerRangePanel.js +1 -1
  8. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  9. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +1 -1
  10. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  11. package/dist-cjs/index.js +0 -3
  12. package/dist-cjs/index.js.map +1 -1
  13. package/dist-cjs/list-deprecated/ListItem.css.js +1 -1
  14. package/dist-es/calendar/internal/CalendarDay.js +3 -3
  15. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  16. package/dist-es/date-picker/DatePickerRangeGridPanel.js +3 -3
  17. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  18. package/dist-es/date-picker/DatePickerRangePanel.js +3 -3
  19. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  20. package/dist-es/date-picker/DatePickerSingleGridPanel.js +3 -3
  21. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  22. package/dist-es/index.js +0 -1
  23. package/dist-es/index.js.map +1 -1
  24. package/dist-es/list-deprecated/ListItem.css.js +1 -1
  25. package/dist-types/index.d.ts +0 -1
  26. package/package.json +2 -2
  27. package/dist-cjs/number-input/NumberInput.css.js +0 -6
  28. package/dist-cjs/number-input/NumberInput.css.js.map +0 -1
  29. package/dist-cjs/number-input/NumberInput.js +0 -411
  30. package/dist-cjs/number-input/NumberInput.js.map +0 -1
  31. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js +0 -50
  32. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
  33. package/dist-cjs/number-input/internal/useInterval.js +0 -25
  34. package/dist-cjs/number-input/internal/useInterval.js.map +0 -1
  35. package/dist-es/number-input/NumberInput.css.js +0 -4
  36. package/dist-es/number-input/NumberInput.css.js.map +0 -1
  37. package/dist-es/number-input/NumberInput.js +0 -408
  38. package/dist-es/number-input/NumberInput.js.map +0 -1
  39. package/dist-es/number-input/internal/useActivateWhileMouseDown.js +0 -48
  40. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
  41. package/dist-es/number-input/internal/useInterval.js +0 -23
  42. package/dist-es/number-input/internal/useInterval.js.map +0 -1
  43. package/dist-types/number-input/NumberInput.d.ts +0 -150
  44. package/dist-types/number-input/index.d.ts +0 -1
  45. package/dist-types/number-input/internal/useActivateWhileMouseDown.d.ts +0 -5
  46. package/dist-types/number-input/internal/useInterval.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerSingleGridPanel.js","sources":["../src/date-picker/DatePickerSingleGridPanel.tsx"],"sourcesContent":["import {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n makePrefixer,\n type ResponsiveProp,\n resolveResponsiveValue,\n StackLayout,\n useBreakpoint,\n useControlled,\n} from \"@salt-ds/core\";\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type SyntheticEvent,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarGrid,\n type CalendarGridProps,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarSingleProps,\n type DateRangeSelection,\n type SingleDateSelection,\n} from \"../calendar\";\nimport { generateDatesForMonth } from \"../calendar/internal/utils\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Base props for the DatePickerPanel grid components.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerPanelBaseProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n /**\n * The visible month for the first visible calendar\n */\n visibleMonth?: TDate;\n /**\n * Number of columns.\n */\n columns?: ResponsiveProp<number | string>;\n /**\n * Number of visible months, maximum 12, defaults to 1\n */\n numberOfVisibleMonths?: ResponsiveProp<\n 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n >;\n /**\n * The default visible month.\n */\n defaultVisibleMonth?: TDate;\n /**\n * Callback fired when the visible month changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month.\n */\n onVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\n /**\n * Callback fired when the focused date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param focusedDate - The new hovered date.\n */\n onFocusedDateChange?: (\n event: SyntheticEvent | null,\n focusedDate?: TDate | null,\n ) => void;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate?: TDate | null,\n ) => void;\n /**\n * Props to be passed to the CalendarNavigation component.\n */\n CalendarNavigationProps?: Partial<CalendarNavigationProps<TDate>>;\n /**\n * Props to be passed to the CalendarGrid component.\n */\n CalendarGridProps?: Partial<CalendarGridProps<TDate>>;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport type DatePickerSingleGridPanelProps<TDate extends DateFrameworkType> =\n DatePickerPanelBaseProps<TDate> &\n SingleDateSelection<TDate> & {\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: TDate | null,\n ) => void;\n CalendarProps?: Partial<\n Omit<\n CalendarSingleProps<TDate>,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n };\n\nexport const DatePickerSingleGridPanel = forwardRef(\n function DatePickerSingleGridPanel<TDate extends DateFrameworkType>(\n props: DatePickerSingleGridPanelProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) {\n const { dateAdapter } = useLocalization<TDate>();\n\n const {\n CalendarProps,\n CalendarNavigationProps,\n CalendarGridProps,\n className,\n defaultVisibleMonth,\n visibleMonth: visibleMonthProp,\n onVisibleMonthChange,\n helperText,\n onFocusedDateChange,\n onHoveredDateChange,\n onSelectionChange,\n numberOfVisibleMonths = 1,\n columns = numberOfVisibleMonths,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-single-grid-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const stateAndHelpers: SingleDatePickerState<TDate> = useDatePickerContext({\n selectionVariant: \"single\",\n });\n\n const {\n state: {\n timezone,\n selectedDate = null,\n minDate = dateAdapter.startOf(dateAdapter.today(timezone), \"month\"),\n maxDate = dateAdapter.add(minDate, { months: 1 }),\n },\n helpers: { select, isDayHighlighted, isDayUnselectable },\n } = stateAndHelpers;\n\n const { matchedBreakpoints } = useBreakpoint();\n\n const responsiveColumns =\n resolveResponsiveValue(columns, matchedBreakpoints) ?? 1;\n const responsiveNumberOfVisibleMonths =\n resolveResponsiveValue(numberOfVisibleMonths, matchedBreakpoints) ?? 1;\n\n const {\n state: { focused, initialFocusRef },\n } = useDatePickerOverlay();\n\n const [hoveredDate, setHoveredDate] = useState<TDate | null>(null);\n\n const [uncontrolledDefaultVisibleMonth] = useState(() => {\n const validDate = dateAdapter.isValid(selectedDate)\n ? selectedDate\n : dateAdapter.today(timezone);\n return defaultVisibleMonth || dateAdapter.startOf(validDate, \"month\");\n });\n const [visibleMonth, setVisibleMonth] = useControlled({\n controlled: visibleMonthProp,\n default: uncontrolledDefaultVisibleMonth,\n name: \"DatePickerSingleGridPanel\",\n state: \"visibleMonth\",\n });\n\n const [focusedDate, setFocusedDate] = useState<TDate | null>(null);\n const calendarGridFocused = useRef(false);\n\n const handleSelectionChange = useCallback(\n (\n event: SyntheticEvent,\n newDate: TDate | DateRangeSelection<TDate> | null,\n ) => {\n const singleDate = newDate as TDate | null;\n select(event, singleDate);\n onSelectionChange?.(event, singleDate);\n },\n [onSelectionChange, select],\n );\n\n const handleHoveredDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: TDate | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setVisibleMonth(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange],\n );\n\n const handleFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: TDate) => {\n setFocusedDate(newFocusedDate);\n if (!newFocusedDate) {\n onFocusedDateChange?.(event, newFocusedDate);\n return;\n }\n\n const startOfFocusedMonth = dateAdapter.startOf(\n newFocusedDate,\n \"month\",\n );\n const lastVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n\n const isBeforeVisibleMonth =\n dateAdapter.compare(startOfFocusedMonth, visibleMonth) < 0;\n const isAfterLastVisibleMonth =\n dateAdapter.compare(startOfFocusedMonth, lastVisibleMonth) > 0;\n\n if (isBeforeVisibleMonth) {\n handleVisibleMonthChange(event, startOfFocusedMonth);\n } else if (isAfterLastVisibleMonth) {\n const newLastVisibleMonth = dateAdapter.subtract(\n startOfFocusedMonth,\n {\n months: responsiveNumberOfVisibleMonths - 1,\n },\n );\n handleVisibleMonthChange(event, newLastVisibleMonth);\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n handleVisibleMonthChange,\n onFocusedDateChange,\n responsiveNumberOfVisibleMonths,\n visibleMonth,\n ],\n );\n\n const getNextFocusedDate = useCallback(() => {\n const isOutsideAllowedDates = (date: TDate) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n };\n const isDaySelectable = (date: TDate) =>\n !(date && (isDayUnselectable?.(date) || isOutsideAllowedDates(date)));\n\n const startVisibleMonth = dateAdapter.startOf(visibleMonth, \"month\");\n const endVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n const selectedDateStartOfMonth = selectedDate\n ? dateAdapter.startOf(selectedDate, \"month\")\n : null;\n\n const getVisibleSelectedDate = () => {\n if (\n selectedDateStartOfMonth &&\n dateAdapter.compare(selectedDateStartOfMonth, startVisibleMonth) >=\n 0 &&\n dateAdapter.compare(selectedDateStartOfMonth, endVisibleMonth) <= 0\n ) {\n return selectedDate;\n }\n return null;\n };\n\n const focusSelectedDate = getVisibleSelectedDate();\n if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {\n return focusSelectedDate;\n }\n\n // Today\n const today = dateAdapter.today(timezone);\n const todayStartOfMonth = dateAdapter.startOf(today, \"month\");\n if (\n dateAdapter.compare(todayStartOfMonth, startVisibleMonth) >= 0 &&\n dateAdapter.compare(todayStartOfMonth, endVisibleMonth) <= 0 &&\n isDaySelectable(today)\n ) {\n return today;\n }\n\n // First selectable date across visible months\n const getFirstSelectableDate = (\n startMonth: TDate,\n numberOfMonths: number,\n ) => {\n for (let i = 0; i < numberOfMonths; i++) {\n const currentMonth = dateAdapter.add(startMonth, { months: i });\n const firstSelectableDate = generateDatesForMonth(\n dateAdapter,\n currentMonth,\n ).find((visibleDay) => isDaySelectable(visibleDay));\n\n if (firstSelectableDate) {\n return firstSelectableDate;\n }\n }\n\n return null;\n };\n\n return getFirstSelectableDate(\n startVisibleMonth,\n responsiveNumberOfVisibleMonths,\n );\n }, [\n dateAdapter,\n isDayUnselectable,\n minDate,\n maxDate,\n responsiveNumberOfVisibleMonths,\n selectedDate,\n visibleMonth,\n timezone,\n ]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: only run when focus/min/max date changes\n useLayoutEffect(() => {\n // Called when the overlay opens or the focus shifts between trigger and overlay\n if (focused && !calendarGridFocused.current) {\n setFocusedDate((prevFocusedDate) => {\n if (!prevFocusedDate) {\n return getNextFocusedDate();\n }\n return prevFocusedDate;\n });\n }\n calendarGridFocused.current = focused;\n }, [focused]);\n\n const calendarProps = {\n visibleMonth,\n focusedDateRef: initialFocusRef,\n focusedDate: calendarGridFocused?.current ? focusedDate : null,\n hoveredDate,\n isDayHighlighted,\n isDayUnselectable,\n hideOutOfRangeDates: true,\n selectedDate,\n minDate,\n maxDate,\n numberOfVisibleMonths: responsiveNumberOfVisibleMonths,\n onFocusedDateChange: handleFocusedDateChange,\n onHoveredDateChange: handleHoveredDateChange,\n onSelectionChange: handleSelectionChange,\n onVisibleMonthChange: handleVisibleMonthChange,\n timezone,\n ...CalendarProps,\n };\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={ref}\n {...rest}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar\n selectionVariant={\"single\"}\n {...(calendarProps as Partial<CalendarSingleProps<TDate>>)}\n >\n <CalendarNavigation {...CalendarNavigationProps} />\n <CalendarGrid\n columns={responsiveColumns}\n {...CalendarGridProps}\n />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n },\n);\n"],"names":["DatePickerSingleGridPanel","datePickerPanelCss"],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerSingleGridPanel.js","sources":["../src/date-picker/DatePickerSingleGridPanel.tsx"],"sourcesContent":["import {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n makePrefixer,\n type ResponsiveProp,\n resolveResponsiveValue,\n StackLayout,\n useBreakpoint,\n useControlled,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarGrid,\n type CalendarGridProps,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarSingleProps,\n type DateRangeSelection,\n type SingleDateSelection,\n} from \"../calendar\";\nimport { generateDatesForMonth } from \"../calendar/internal/utils\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Base props for the DatePickerPanel grid components.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerPanelBaseProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n /**\n * The visible month for the first visible calendar\n */\n visibleMonth?: TDate;\n /**\n * Number of columns.\n */\n columns?: ResponsiveProp<number | string>;\n /**\n * Number of visible months, maximum 12, defaults to 1\n */\n numberOfVisibleMonths?: ResponsiveProp<\n 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n >;\n /**\n * The default visible month.\n */\n defaultVisibleMonth?: TDate;\n /**\n * Callback fired when the visible month changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month.\n */\n onVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\n /**\n * Callback fired when the focused date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param focusedDate - The new hovered date.\n */\n onFocusedDateChange?: (\n event: SyntheticEvent | null,\n focusedDate?: TDate | null,\n ) => void;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate?: TDate | null,\n ) => void;\n /**\n * Props to be passed to the CalendarNavigation component.\n */\n CalendarNavigationProps?: Partial<CalendarNavigationProps<TDate>>;\n /**\n * Props to be passed to the CalendarGrid component.\n */\n CalendarGridProps?: Partial<CalendarGridProps<TDate>>;\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport type DatePickerSingleGridPanelProps<TDate extends DateFrameworkType> =\n DatePickerPanelBaseProps<TDate> &\n SingleDateSelection<TDate> & {\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: TDate | null,\n ) => void;\n CalendarProps?: Partial<\n Omit<\n CalendarSingleProps<TDate>,\n | \"selectionVariant\"\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n };\n\nexport const DatePickerSingleGridPanel = forwardRef(\n function DatePickerSingleGridPanel<TDate extends DateFrameworkType>(\n props: DatePickerSingleGridPanelProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) {\n const { dateAdapter } = useLocalization<TDate>();\n\n const {\n CalendarProps,\n CalendarNavigationProps,\n CalendarGridProps,\n className,\n defaultVisibleMonth,\n visibleMonth: visibleMonthProp,\n onVisibleMonthChange,\n helperText,\n onFocusedDateChange,\n onHoveredDateChange,\n onSelectionChange,\n numberOfVisibleMonths = 1,\n columns = numberOfVisibleMonths,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-single-grid-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const stateAndHelpers: SingleDatePickerState<TDate> = useDatePickerContext({\n selectionVariant: \"single\",\n });\n\n const {\n state: {\n timezone,\n selectedDate = null,\n minDate = dateAdapter.startOf(dateAdapter.today(timezone), \"month\"),\n maxDate = dateAdapter.add(minDate, { months: 1 }),\n },\n helpers: { select, isDayHighlighted, isDayUnselectable },\n } = stateAndHelpers;\n\n const { matchedBreakpoints } = useBreakpoint();\n\n const responsiveColumns =\n resolveResponsiveValue(columns, matchedBreakpoints) ?? 1;\n const responsiveNumberOfVisibleMonths =\n resolveResponsiveValue(numberOfVisibleMonths, matchedBreakpoints) ?? 1;\n\n const {\n state: { focused, initialFocusRef },\n } = useDatePickerOverlay();\n\n const [hoveredDate, setHoveredDate] = useState<TDate | null>(null);\n\n const [uncontrolledDefaultVisibleMonth] = useState(() => {\n const validDate = dateAdapter.isValid(selectedDate)\n ? selectedDate\n : dateAdapter.today(timezone);\n return defaultVisibleMonth || dateAdapter.startOf(validDate, \"month\");\n });\n const [visibleMonth, setVisibleMonth] = useControlled({\n controlled: visibleMonthProp,\n default: uncontrolledDefaultVisibleMonth,\n name: \"DatePickerSingleGridPanel\",\n state: \"visibleMonth\",\n });\n\n const [focusedDate, setFocusedDate] = useState<TDate | null>(null);\n const calendarGridFocused = useRef(false);\n\n const handleSelectionChange = useCallback(\n (\n event: SyntheticEvent,\n newDate: TDate | DateRangeSelection<TDate> | null,\n ) => {\n const singleDate = newDate as TDate | null;\n select(event, singleDate);\n onSelectionChange?.(event, singleDate);\n },\n [onSelectionChange, select],\n );\n\n const handleHoveredDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: TDate | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setVisibleMonth(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange],\n );\n\n const handleFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: TDate) => {\n setFocusedDate(newFocusedDate);\n if (!newFocusedDate) {\n onFocusedDateChange?.(event, newFocusedDate);\n return;\n }\n\n const startOfFocusedMonth = dateAdapter.startOf(\n newFocusedDate,\n \"month\",\n );\n const lastVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n\n const isBeforeVisibleMonth =\n dateAdapter.compare(startOfFocusedMonth, visibleMonth) < 0;\n const isAfterLastVisibleMonth =\n dateAdapter.compare(startOfFocusedMonth, lastVisibleMonth) > 0;\n\n if (isBeforeVisibleMonth) {\n handleVisibleMonthChange(event, startOfFocusedMonth);\n } else if (isAfterLastVisibleMonth) {\n const newLastVisibleMonth = dateAdapter.subtract(\n startOfFocusedMonth,\n {\n months: responsiveNumberOfVisibleMonths - 1,\n },\n );\n handleVisibleMonthChange(event, newLastVisibleMonth);\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n handleVisibleMonthChange,\n onFocusedDateChange,\n responsiveNumberOfVisibleMonths,\n visibleMonth,\n ],\n );\n\n const getNextFocusedDate = useCallback(() => {\n const isOutsideAllowedDates = (date: TDate) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n };\n const isDaySelectable = (date: TDate) =>\n !(date && (isDayUnselectable?.(date) || isOutsideAllowedDates(date)));\n\n const startVisibleMonth = dateAdapter.startOf(visibleMonth, \"month\");\n const endVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n const selectedDateStartOfMonth = selectedDate\n ? dateAdapter.startOf(selectedDate, \"month\")\n : null;\n\n const getVisibleSelectedDate = () => {\n if (\n selectedDateStartOfMonth &&\n dateAdapter.compare(selectedDateStartOfMonth, startVisibleMonth) >=\n 0 &&\n dateAdapter.compare(selectedDateStartOfMonth, endVisibleMonth) <= 0\n ) {\n return selectedDate;\n }\n return null;\n };\n\n const focusSelectedDate = getVisibleSelectedDate();\n if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {\n return focusSelectedDate;\n }\n\n // Today\n const today = dateAdapter.today(timezone);\n const todayStartOfMonth = dateAdapter.startOf(today, \"month\");\n if (\n dateAdapter.compare(todayStartOfMonth, startVisibleMonth) >= 0 &&\n dateAdapter.compare(todayStartOfMonth, endVisibleMonth) <= 0 &&\n isDaySelectable(today)\n ) {\n return today;\n }\n\n // First selectable date across visible months\n const getFirstSelectableDate = (\n startMonth: TDate,\n numberOfMonths: number,\n ) => {\n for (let i = 0; i < numberOfMonths; i++) {\n const currentMonth = dateAdapter.add(startMonth, { months: i });\n const firstSelectableDate = generateDatesForMonth(\n dateAdapter,\n currentMonth,\n ).find((visibleDay) => isDaySelectable(visibleDay));\n\n if (firstSelectableDate) {\n return firstSelectableDate;\n }\n }\n\n return null;\n };\n\n return getFirstSelectableDate(\n startVisibleMonth,\n responsiveNumberOfVisibleMonths,\n );\n }, [\n dateAdapter,\n isDayUnselectable,\n minDate,\n maxDate,\n responsiveNumberOfVisibleMonths,\n selectedDate,\n visibleMonth,\n timezone,\n ]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: only run when focus/min/max date changes\n useIsomorphicLayoutEffect(() => {\n // Called when the overlay opens or the focus shifts between trigger and overlay\n if (focused && !calendarGridFocused.current) {\n setFocusedDate((prevFocusedDate) => {\n if (!prevFocusedDate) {\n return getNextFocusedDate();\n }\n return prevFocusedDate;\n });\n }\n calendarGridFocused.current = focused;\n }, [focused]);\n\n const calendarProps = {\n visibleMonth,\n focusedDateRef: initialFocusRef,\n focusedDate: calendarGridFocused?.current ? focusedDate : null,\n hoveredDate,\n isDayHighlighted,\n isDayUnselectable,\n hideOutOfRangeDates: true,\n selectedDate,\n minDate,\n maxDate,\n numberOfVisibleMonths: responsiveNumberOfVisibleMonths,\n onFocusedDateChange: handleFocusedDateChange,\n onHoveredDateChange: handleHoveredDateChange,\n onSelectionChange: handleSelectionChange,\n onVisibleMonthChange: handleVisibleMonthChange,\n timezone,\n ...CalendarProps,\n };\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={ref}\n {...rest}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar\n selectionVariant={\"single\"}\n {...(calendarProps as Partial<CalendarSingleProps<TDate>>)}\n >\n <CalendarNavigation {...CalendarNavigationProps} />\n <CalendarGrid\n columns={responsiveColumns}\n {...CalendarGridProps}\n />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n },\n);\n"],"names":["DatePickerSingleGridPanel","datePickerPanelCss"],"mappings":"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"}
package/dist-es/index.js CHANGED
@@ -103,7 +103,6 @@ export { MenuButton } from './menu-button/MenuButton.js';
103
103
  export { Metric } from './metric/Metric.js';
104
104
  export { MetricContent } from './metric/MetricContent.js';
105
105
  export { MetricHeader } from './metric/MetricHeader.js';
106
- export { NumberInput, isOutOfRange } from './number-input/NumberInput.js';
107
106
  export { Portal } from './portal/Portal.js';
108
107
  export { QueryInput } from './query-input/QueryInput.js';
109
108
  export { useQueryInput } from './query-input/useQueryInput.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltListItemDeprecated {\n /* Color */\n --list-item-text-color: var(--salt-selectable-foreground);\n --list-item-background: var(--salt-selectable-background);\n --list-item-background-hover: var(--salt-selectable-background-hover);\n --list-item-selected-focus-outlineColor: var(--salt-accent-foreground); /* TODO: Check token with design */\n\n --list-item-text-color-active: var(--salt-selectable-foreground-selected);\n --list-item-background-active: var(--salt-selectable-background-selected);\n\n /* Text, Font */\n --list-item-textAlign: var(--salt-text-textAlign);\n --list-item-fontSize: var(--salt-text-fontSize);\n --list-item-lineHeight: var(--salt-text-lineHeight);\n\n /* Spacing */\n --list-item-padding: 0 var(--salt-size-unit);\n\n /* Misc. */\n --list-item-gap: 0px;\n --list-item-alignItems: center;\n --list-item-selectable-cursor: pointer;\n --list-item-cursor: default;\n\n --list-item-disabled-cursor: var(--salt-cursor-disabled);\n --list-item-disabled-regular-opacity: var(--salt-palette-opacity-disabled);\n}\n\n.saltListItemDeprecated {\n color: var(--list-item-text-color);\n background: var(--list-item-background);\n text-align: var(--list-item-textAlign);\n line-height: var(--list-item-lineHeight);\n font-size: var(--list-item-fontSize);\n padding: var(--list-item-padding);\n left: 0;\n right: 0;\n display: flex;\n position: relative;\n align-items: var(--list-item-alignItems);\n white-space: nowrap;\n}\n\n.saltListItemDeprecated {\n /* Replaced border-bottom with margin. In design spec, the height of the items should not include gap */\n margin-bottom: var(--list-item-gap);\n cursor: var(--list-item-selectable-cursor);\n}\n\n.saltListItemDeprecated:last-child {\n margin-bottom: 0px;\n}\n\n.saltListItemDeprecated.saltListItemDeprecated-highlighted:not(.saltListItemDeprecated-selected) {\n background: var(--list-item-background-hover);\n}\n\n.saltListItemDeprecated.saltListItemDeprecated-deselectable {\n cursor: var(--list-item-selectable-cursor);\n}\n\n.saltListItemDeprecated-textWrapper {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.saltListItemDeprecated-selected {\n color: var(--list-item-text-color-active);\n background: var(--list-item-background-active);\n cursor: var(--list-item-cursor);\n}\n\n.saltListItemDeprecated-disabled {\n cursor: var(--list-item-disabled-cursor);\n opacity: var(--list-item-disabled-regular-opacity);\n}\n\n.saltListItemDeprecated-focusVisible:after {\n top: 2px;\n left: 2px;\n right: 2px;\n bottom: 2px;\n content: \"\";\n position: absolute;\n\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.saltListItemDeprecated-focusVisible.saltListItemDeprecated-selected:after {\n outline-color: var(--list-item-selected-focus-outlineColor);\n}\n";
1
+ var css_248z = ".saltListItemDeprecated {\n /* Color */\n --list-item-text-color: var(--salt-selectable-foreground);\n --list-item-background: var(--salt-selectable-background);\n --list-item-background-hover: var(--salt-selectable-background-hover);\n --list-item-selected-focus-outlineColor: var(--salt-content-bold-foreground);\n\n --list-item-text-color-active: var(--salt-selectable-foreground-selected);\n --list-item-background-active: var(--salt-selectable-background-selected);\n\n /* Text, Font */\n --list-item-textAlign: var(--salt-text-textAlign);\n --list-item-fontSize: var(--salt-text-fontSize);\n --list-item-lineHeight: var(--salt-text-lineHeight);\n\n /* Spacing */\n --list-item-padding: 0 var(--salt-size-unit);\n\n /* Misc. */\n --list-item-gap: 0px;\n --list-item-alignItems: center;\n --list-item-selectable-cursor: pointer;\n --list-item-cursor: default;\n\n --list-item-disabled-cursor: var(--salt-cursor-disabled);\n --list-item-disabled-regular-opacity: var(--salt-palette-opacity-disabled);\n}\n\n.saltListItemDeprecated {\n color: var(--list-item-text-color);\n background: var(--list-item-background);\n text-align: var(--list-item-textAlign);\n line-height: var(--list-item-lineHeight);\n font-size: var(--list-item-fontSize);\n padding: var(--list-item-padding);\n left: 0;\n right: 0;\n display: flex;\n position: relative;\n align-items: var(--list-item-alignItems);\n white-space: nowrap;\n}\n\n.saltListItemDeprecated {\n /* Replaced border-bottom with margin. In design spec, the height of the items should not include gap */\n margin-bottom: var(--list-item-gap);\n cursor: var(--list-item-selectable-cursor);\n}\n\n.saltListItemDeprecated:last-child {\n margin-bottom: 0px;\n}\n\n.saltListItemDeprecated.saltListItemDeprecated-highlighted:not(.saltListItemDeprecated-selected) {\n background: var(--list-item-background-hover);\n}\n\n.saltListItemDeprecated.saltListItemDeprecated-deselectable {\n cursor: var(--list-item-selectable-cursor);\n}\n\n.saltListItemDeprecated-textWrapper {\n flex: 1;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.saltListItemDeprecated-selected {\n color: var(--list-item-text-color-active);\n background: var(--list-item-background-active);\n cursor: var(--list-item-cursor);\n}\n\n.saltListItemDeprecated-disabled {\n cursor: var(--list-item-disabled-cursor);\n opacity: var(--list-item-disabled-regular-opacity);\n}\n\n.saltListItemDeprecated-focusVisible:after {\n top: 2px;\n left: 2px;\n right: 2px;\n bottom: 2px;\n content: \"\";\n position: absolute;\n\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.saltListItemDeprecated-focusVisible.saltListItemDeprecated-selected:after {\n outline-color: var(--list-item-selected-focus-outlineColor);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=ListItem.css.js.map
@@ -29,7 +29,6 @@ export * from "./localization-provider";
29
29
  export * from "./logo";
30
30
  export * from "./menu-button";
31
31
  export * from "./metric";
32
- export * from "./number-input";
33
32
  export * from "./portal";
34
33
  export * from "./query-input";
35
34
  export * from "./responsive";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salt-ds/lab",
3
- "version": "1.0.0-alpha.80",
3
+ "version": "1.0.0-alpha.82",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -21,7 +21,7 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "@floating-ui/react": "^0.26.28",
24
- "@salt-ds/core": "^1.52.1",
24
+ "@salt-ds/core": "^1.54.0",
25
25
  "@salt-ds/date-adapters": "0.1.0-alpha.6",
26
26
  "@salt-ds/icons": "^1.15.0",
27
27
  "@salt-ds/styles": "0.2.1",
@@ -1,6 +0,0 @@
1
- 'use strict';
2
-
3
- var css_248z = "/* Styles applied to number container */\n.saltNumberInput {\n --numberInput-border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--numberInput-borderColor);\n --numberInput-borderColor: var(--salt-editable-borderColor);\n --numberInput-borderStyle: var(--salt-borderStyle-solid);\n --numberInput-outlineColor: var(--salt-focused-outlineColor);\n --numberInput-borderWidth: var(--salt-size-fixed-100);\n --numberInput-outline: none;\n\n align-items: center;\n background: var(--numberInput-background);\n border-radius: var(--salt-palette-corner-weak, 0);\n box-sizing: border-box;\n color: var(--salt-content-primary-foreground);\n display: inline-flex;\n font-family: var(--salt-text-fontFamily);\n font-size: var(--salt-text-fontSize);\n gap: var(--salt-spacing-50);\n height: var(--salt-size-base);\n min-height: var(--salt-size-base);\n min-width: 4em;\n overflow: hidden;\n outline: var(--numberInput-outline);\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-50);\n padding-top: var(--salt-spacing-50);\n padding-bottom: var(--salt-spacing-50);\n position: relative;\n width: 100%;\n}\n\n.saltNumberInput:hover {\n --numberInput-borderStyle: var(--salt-borderStyle-solid);\n --numberInput-borderColor: var(--salt-editable-borderColor-hover);\n\n background: var(--numberInput-background-hover);\n cursor: var(--salt-cursor-text);\n}\n\n.saltNumberInput:active {\n --numberInput-borderColor: var(--salt-editable-borderColor-active);\n --numberInput-borderStyle: var(--salt-borderStyle-solid);\n --numberInput-borderWidth: var(--salt-size-fixed-200);\n\n background: var(--numberInput-background-active);\n}\n\n/* Class applied if `variant=\"primary\"` */\n.saltNumberInput-primary {\n --numberInput-background: var(--salt-editable-primary-background);\n --numberInput-background-active: var(--salt-editable-primary-background-active);\n --numberInput-background-hover: var(--salt-editable-primary-background-hover);\n --numberInput-background-disabled: var(--salt-editable-primary-background-disabled);\n --numberInput-background-readonly: var(--salt-editable-primary-background-readonly);\n}\n\n/* Class applied if `variant=\"secondary\"` */\n.saltNumberInput-secondary {\n --numberInput-background: var(--salt-editable-secondary-background);\n --numberInput-background-active: var(--salt-editable-secondary-background-active);\n --numberInput-background-hover: var(--salt-editable-secondary-background-active);\n --numberInput-background-disabled: var(--salt-editable-secondary-background-disabled);\n --numberInput-background-readonly: var(--salt-editable-secondary-background-readonly);\n}\n\n/* Style applied to input if `validationState=\"error\"` */\n.saltNumberInput-error,\n.saltNumberInput-error:hover {\n --numberInput-background: var(--salt-status-error-background);\n --numberInput-background-active: var(--salt-status-error-background);\n --numberInput-background-hover: var(--salt-status-error-background);\n --numberInput-borderColor: var(--salt-status-error-borderColor);\n --numberInput-outlineColor: var(--salt-status-error-borderColor);\n --numberInput-background-readonly: var(--salt-status-error-background);\n}\n\n/* Style applied to input if `validationState=\"warning\"` */\n.saltNumberInput-warning,\n.saltNumberInput-warning:hover {\n --numberInput-background: var(--salt-status-warning-background);\n --numberInput-background-active: var(--salt-status-warning-background);\n --numberInput-background-hover: var(--salt-status-warning-background);\n --numberInput-borderColor: var(--salt-status-warning-borderColor);\n --numberInput-outlineColor: var(--salt-status-warning-borderColor);\n --numberInput-background-readonly: var(--salt-status-warning-background);\n}\n\n/* Style applied to input if `validationState=\"success\"` */\n.saltNumberInput-success,\n.saltNumberInput-success:hover {\n --numberInput-background: var(--salt-status-success-background);\n --numberInput-background-active: var(--salt-status-success-background);\n --numberInput-background-hover: var(--salt-status-success-background);\n --numberInput-borderColor: var(--salt-status-success-borderColor);\n --numberInput-outlineColor: var(--salt-status-success-borderColor);\n --numberInput-background-readonly: var(--salt-status-success-background);\n}\n\n/* Style applied to inner input component */\n.saltNumberInput-input {\n background: none;\n border: none;\n box-sizing: content-box;\n color: inherit;\n cursor: inherit;\n display: block;\n flex: 1;\n font: inherit;\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-lineHeight);\n margin: 0;\n min-width: 0;\n padding: 0;\n text-align: var(--numberInput-textAlign);\n width: 100%;\n}\n\n.saltNumberInput-input:focus {\n outline: none;\n}\n\n/* Style applied to placeholder text */\n.saltNumberInput-input::placeholder {\n color: var(--salt-content-secondary-foreground);\n font-weight: var(--salt-text-fontWeight-small);\n}\n\n/* Styling when focused */\n.saltNumberInput-focused {\n --numberInput-borderColor: var(--numberInput-outlineColor);\n --numberInput-borderWidth: var(--salt-size-fixed-200);\n\n outline: var(--saltNumberInput-outline, var(--salt-focused-outlineWidth) var(--salt-focused-outlineStyle) var(--numberInput-outlineColor));\n}\n\n/* Style applied if `bordered={true}` */\n.saltNumberInput-bordered {\n --numberInput-border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--numberInput-borderColor);\n --numberInput-borderWidth: 0;\n\n border: var(--numberInput-border);\n}\n\n/* Style applied if focused or active when `bordered={true}` */\n.saltNumberInput-bordered.saltNumberInput-focused,\n.saltNumberInput-bordered:active {\n --numberInput-borderWidth: var(--salt-size-fixed-200);\n}\n\n/* Styling when focused if `disabled={true}` or `readOnly={true}` when `bordered={true}` */\n.saltNumberInput-bordered.saltNumberInput-readOnly,\n.saltNumberInput-bordered.saltNumberInput-disabled:hover {\n --numberInput-borderWidth: 0;\n}\n\n/* Styling when focused and hovered when `bordered={true}` */\n.saltNumberInput-bordered.saltNumberInput-focused:hover {\n --numberInput-borderColor: var(--salt-editable-borderColor-active);\n}\n\n/* Style applied if `readOnly={true}` */\n.saltNumberInput-readOnly,\n.saltNumberInput-bordered.saltNumberInput-readOnly {\n --numberInput-borderColor: var(--salt-editable-borderColor-readonly);\n --numberInput-borderStyle: var(--salt-borderStyle-solid);\n --numberInput-borderWidth: var(--salt-size-fixed-100);\n\n background: var(--numberInput-background-readonly);\n cursor: var(--salt-cursor-readonly);\n}\n\n/* Styling when focused if `disabled={true}` */\n.saltNumberInput-focused.saltNumberInput-disabled {\n --numberInput-borderWidth: var(--salt-size-fixed-100);\n outline: none;\n}\n\n/* Styling when focused if `readOnly={true}` */\n.saltNumberInput-focused.saltNumberInput-readOnly {\n --numberInput-borderWidth: var(--salt-size-fixed-100);\n}\n\n.saltNumberInput:hover.saltNumberInput-readOnly {\n --numberInput-borderColor: var(--salt-editable-borderColor-readonly);\n}\n\n/* Style applied to selected input if `disabled={true}` */\n.saltNumberInput-disabled .saltNumberInput-input::selection {\n background: none;\n}\n\n/* Style applied to input if `disabled={true}` */\n.saltNumberInput-disabled,\n.saltNumberInput-disabled:hover,\n.saltNumberInput-disabled:active {\n --numberInput-borderColor: var(--salt-editable-borderColor-disabled);\n --numberInput-borderStyle: var(--salt-borderStyle-solid);\n --numberInput-borderWidth: var(--salt-size-fixed-100);\n\n background: var(--numberInput-background-disabled);\n cursor: var(--salt-cursor-disabled);\n color: var(--saltNumberInput-color-disabled, var(--salt-content-primary-foreground-disabled));\n}\n\n/* Style applied to start adornments */\n.saltNumberInput-startAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-right: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n/* Style applied to end adornments */\n.saltNumberInput-endAdornmentContainer {\n align-items: center;\n display: inline-flex;\n padding-left: var(--salt-spacing-100);\n column-gap: var(--salt-spacing-100);\n}\n\n.saltNumberInput-startAdornmentContainer {\n margin-left: calc(var(--salt-spacing-50) * -1);\n}\n\n.saltNumberInput-startAdornmentContainer > .saltButton,\n.saltNumberInput-endAdornmentContainer > .saltButton {\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n --saltButton-height: calc(var(--salt-size-base) - var(--salt-spacing-100));\n --saltButton-borderRadius: var(--salt-palette-corner-weaker);\n}\n\n.saltNumberInput-inputTextAlignLeft {\n --numberInput-textAlign: left;\n}\n\n.saltNumberInput-inputTextAlignCenter {\n --numberInput-textAlign: center;\n}\n\n.saltNumberInput-inputTextAlignRight {\n --numberInput-textAlign: right;\n}\n\n/* --- Buttons --- */\n\n/* Styles applied to number buttons container */\n.saltNumberInput-buttonContainer {\n --numberInput-buttonGap: var(--salt-spacing-fixed-200);\n display: flex;\n flex-direction: column;\n gap: var(--numberInput-buttonGap);\n justify-content: center;\n}\n\n.saltNumberInput-hiddenButtons .saltNumberInput-buttonContainer {\n display: none;\n}\n\n.saltNumberInput-activationIndicator {\n left: 0;\n bottom: 0;\n width: 100%;\n position: absolute;\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--numberInput-borderColor);\n}\n\n.saltNumberInput-focused .saltNumberInput-activationIndicator {\n border-bottom: var(--salt-size-fixed-200) var(--salt-borderStyle-solid) var(--salt-editable-borderColor-active);\n}\n\n.saltNumberInput-bordered.saltNumberInput-focused .saltNumberInput-activationIndicator {\n /* Activation indicator width minus the border from the number input. */\n border-bottom-width: var(--salt-size-fixed-100);\n}\n\n.saltNumberInput-bordered .saltNumberInput-activationIndicator,\n.saltNumberInput-readOnly.saltNumberInput-focused .saltNumberInput-activationIndicator {\n border-bottom-width: 0;\n}\n\n.saltNumberInput-increment {\n --saltButton-borderRadius: var(--salt-palette-corner-weaker, 0) var(--salt-palette-corner-weaker, 0) 0 0;\n}\n\n.saltNumberInput-decrement {\n --saltButton-borderRadius: 0 0 var(--salt-palette-corner-weaker, 0) var(--salt-palette-corner-weaker, 0);\n}\n\n/* Styles applied to number buttons */\n.saltNumberInput-increment,\n.saltNumberInput-decrement {\n --saltButton-height: calc((var(--salt-size-base) - (var(--salt-spacing-50) * 2) - var(--salt-size-fixed-200)) / 2);\n --saltButton-padding: calc(var(--salt-spacing-50) - var(--button-borderWidth));\n}\n";
4
-
5
- module.exports = css_248z;
6
- //# sourceMappingURL=NumberInput.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NumberInput.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,411 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var styles = require('@salt-ds/styles');
6
- var window = require('@salt-ds/window');
7
- var clsx = require('clsx');
8
- var react = require('react');
9
- var useActivateWhileMouseDown = require('./internal/useActivateWhileMouseDown.js');
10
- var NumberInput$1 = require('./NumberInput.css.js');
11
-
12
- const withBaseName = core.makePrefixer("saltNumberInput");
13
- const isOutOfRange = (value, min, max) => {
14
- if (typeof value === "string" && !value.length) {
15
- return true;
16
- }
17
- const floatValue = typeof value === "string" ? Number.parseFloat(value) : value;
18
- return Number.isNaN(floatValue) || floatValue > max || floatValue < min;
19
- };
20
- function getNumberPrecision(num) {
21
- const numStr = String(num);
22
- if (numStr.includes("e") || numStr.includes("E")) {
23
- const [base, exponent] = numStr.split(/[eE]/);
24
- const decimalPart = base.split(".")[1] || "";
25
- const precision = decimalPart.length - Number.parseInt(exponent, 10);
26
- return Math.max(0, precision);
27
- }
28
- if (numStr.includes(".")) {
29
- return numStr.split(".")[1].length;
30
- }
31
- return 0;
32
- }
33
- const defaultPattern = (inputValue) => /^[+-]?(\d+(\.\d*)?|\.\d*)?$/.test(inputValue);
34
- const defaultDecrement = (value, step, stepMultiplier, parse) => {
35
- const parsedValue = parse(value) ?? 0;
36
- const decrementStep = step * stepMultiplier;
37
- return String(parsedValue - decrementStep);
38
- };
39
- const defaultIncrement = (value, step, stepMultiplier, parse) => {
40
- const parsedValue = parse(value) ?? 0;
41
- const incrementStep = step * stepMultiplier;
42
- return String(parsedValue + incrementStep);
43
- };
44
- const defaultFormat = (value, decimalScale) => {
45
- const sanitized = value.trim();
46
- if (!sanitized.length) {
47
- return "";
48
- }
49
- const floatValue = Number.parseFloat(sanitized);
50
- const updatedValue = Number.isNaN(floatValue) ? sanitized : floatValue.toFixed(decimalScale);
51
- return String(updatedValue);
52
- };
53
- const defaultParse = (value, decimalScale) => {
54
- const sanitizedValue = value.trim();
55
- if (!sanitizedValue.length) {
56
- return null;
57
- }
58
- if (sanitizedValue === "." || sanitizedValue === "+" || sanitizedValue === "-") {
59
- return 0;
60
- }
61
- const floatString = Number.parseFloat(value).toFixed(decimalScale);
62
- return Number.parseFloat(floatString);
63
- };
64
- const NumberInput = react.forwardRef(
65
- function NumberInput2({
66
- "aria-valuetext": ariaValueTextProp,
67
- bordered,
68
- className,
69
- clamp,
70
- step = 1,
71
- stepMultiplier = 2,
72
- value: valueProp,
73
- defaultValue,
74
- decimalScale = Math.max(
75
- getNumberPrecision(valueProp ?? defaultValue ?? 0),
76
- getNumberPrecision(step)
77
- ),
78
- disabled,
79
- emptyReadOnlyMarker = "\u2014",
80
- endAdornment,
81
- format = (v) => defaultFormat(v, decimalScale),
82
- hideButtons,
83
- id,
84
- pattern = defaultPattern,
85
- inputProps = {},
86
- inputRef: inputRefProp,
87
- max = Number.MAX_SAFE_INTEGER,
88
- min = Number.MIN_SAFE_INTEGER,
89
- onBlur,
90
- onChange,
91
- onMouseUp,
92
- onNumberChange,
93
- parse = (v) => defaultParse(v, decimalScale),
94
- placeholder,
95
- readOnly,
96
- startAdornment,
97
- decrement = (v, s, m) => defaultDecrement(v, s, m, parse),
98
- increment = (v, s, m) => defaultIncrement(v, s, m, parse),
99
- textAlign = "left",
100
- validationStatus: validationStatusProp,
101
- variant = "primary",
102
- ...restProps
103
- }, ref) {
104
- const targetWindow = window.useWindow();
105
- styles.useComponentCssInjection({
106
- testId: "salt-number-input",
107
- css: NumberInput$1,
108
- window: targetWindow
109
- });
110
- const {
111
- a11yProps: {
112
- "aria-describedby": formFieldDescribedBy,
113
- "aria-labelledby": formFieldLabelledBy
114
- } = {},
115
- disabled: formFieldDisabled,
116
- readOnly: formFieldReadOnly,
117
- necessity: formFieldRequired,
118
- validationStatus: formFieldValidationStatus
119
- } = core.useFormFieldProps();
120
- const isDisabled = disabled || formFieldDisabled;
121
- const isReadOnly = readOnly || formFieldReadOnly;
122
- const validationStatus = formFieldValidationStatus ?? validationStatusProp;
123
- const validationStatusId = core.useId(id);
124
- const inputRef = react.useRef(null);
125
- const handleInputRef = core.useForkRef(inputRefProp, inputRef);
126
- const {
127
- "aria-describedby": inputDescribedBy,
128
- "aria-labelledby": inputLabelledBy,
129
- className: inputClassName,
130
- onBlur: inputOnBlur,
131
- onFocus: inputOnFocus,
132
- required: inputRequired,
133
- onKeyDown: inputOnKeyDown,
134
- ...restInputProps
135
- } = inputProps;
136
- const isRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : inputRequired;
137
- const [isFocused, setIsFocused] = react.useState(false);
138
- const [isEditing, setIsEditing] = react.useState(false);
139
- const { DecreaseIcon, IncreaseIcon } = core.useIcon();
140
- const [value, setValue] = core.useControlled({
141
- controlled: valueProp !== void 0 ? String(valueProp) : void 0,
142
- default: String(defaultValue ?? ""),
143
- name: "NumberInput",
144
- state: "value"
145
- });
146
- const lastCommitValue = react.useRef(value);
147
- const commit = (event, newNumber, newInputValue) => {
148
- let safeNumber = newNumber;
149
- if (safeNumber !== null && !Number.isNaN(safeNumber)) {
150
- safeNumber = Math.max(
151
- Number.MIN_SAFE_INTEGER,
152
- Math.min(Number.MAX_SAFE_INTEGER, safeNumber)
153
- );
154
- if (clamp) {
155
- safeNumber = Math.max(min, Math.min(max, safeNumber));
156
- }
157
- } else {
158
- safeNumber = null;
159
- }
160
- const commitValue = safeNumber !== null ? format(String(safeNumber)) : newInputValue;
161
- if (commitValue !== value) {
162
- setValue(commitValue);
163
- onChange == null ? void 0 : onChange(event, commitValue);
164
- }
165
- if (lastCommitValue.current !== commitValue) {
166
- onNumberChange == null ? void 0 : onNumberChange(event, safeNumber);
167
- lastCommitValue.current = commitValue;
168
- }
169
- };
170
- const handleBlur = (event) => {
171
- setIsFocused(false);
172
- onBlur == null ? void 0 : onBlur(event);
173
- };
174
- const handleInputBlur = (event) => {
175
- setIsEditing(false);
176
- inputOnBlur == null ? void 0 : inputOnBlur(event);
177
- const parsedValue = parse(value);
178
- commit(event, parsedValue, value);
179
- };
180
- const handleInputFocus = (event) => {
181
- setIsEditing(false);
182
- inputOnFocus == null ? void 0 : inputOnFocus(event);
183
- };
184
- const handleInputChange = (event) => {
185
- const inputValue = event.currentTarget.value;
186
- if (!inputValue.length) {
187
- setValue("");
188
- onChange == null ? void 0 : onChange(event, "");
189
- return;
190
- }
191
- const validValue = pattern ? pattern(inputValue) : true;
192
- if (validValue) {
193
- setIsEditing(true);
194
- onChange == null ? void 0 : onChange(event, event.target.value);
195
- setValue(inputValue);
196
- } else {
197
- event.preventDefault();
198
- }
199
- };
200
- let floatValue = parse(value) ?? 0;
201
- floatValue = Math.max(
202
- Number.MIN_SAFE_INTEGER,
203
- Math.min(Number.MAX_SAFE_INTEGER, floatValue)
204
- );
205
- if (clamp) {
206
- floatValue = Math.max(min, Math.min(max, floatValue));
207
- }
208
- const decrementValue = (event, block) => {
209
- const validValue = parse(value) ?? 0;
210
- if (Number.isNaN(validValue)) {
211
- return;
212
- }
213
- const newValue = decrement(
214
- String(validValue),
215
- step,
216
- block ? stepMultiplier : 1
217
- );
218
- const parsedValue = parse(newValue);
219
- commit(event ?? null, parsedValue, newValue);
220
- };
221
- const { activate: activateDecrement } = useActivateWhileMouseDown.useActivateWhileMouseDown(
222
- decrementValue,
223
- floatValue <= min
224
- );
225
- const incrementValue = (event, block) => {
226
- const validValue = parse(value) ?? 0;
227
- if (Number.isNaN(validValue)) {
228
- return;
229
- }
230
- const newValue = increment(
231
- String(validValue),
232
- step,
233
- block ? stepMultiplier : 1
234
- );
235
- const parsedValue = parse(newValue);
236
- commit(event ?? null, parsedValue, newValue);
237
- };
238
- const { activate: activateIncrement } = useActivateWhileMouseDown.useActivateWhileMouseDown(
239
- incrementValue,
240
- floatValue >= max
241
- );
242
- react.useEffect(() => {
243
- var _a;
244
- if (isFocused) {
245
- (_a = inputRef.current) == null ? void 0 : _a.focus();
246
- }
247
- }, [isFocused]);
248
- const handleInputKeyDown = (event) => {
249
- switch (event.key) {
250
- case "ArrowUp": {
251
- event.preventDefault();
252
- const block = event.shiftKey;
253
- incrementValue(event, block);
254
- break;
255
- }
256
- case "ArrowDown": {
257
- event.preventDefault();
258
- const block = event.shiftKey;
259
- decrementValue(event, block);
260
- break;
261
- }
262
- case "Home": {
263
- event.preventDefault();
264
- const newValue = String(min);
265
- commit(event, min, newValue);
266
- break;
267
- }
268
- case "End": {
269
- event.preventDefault();
270
- const newValue = String(max);
271
- commit(event, max, newValue);
272
- break;
273
- }
274
- case "PageUp": {
275
- event.preventDefault();
276
- incrementValue(event, true);
277
- break;
278
- }
279
- case "PageDown": {
280
- event.preventDefault();
281
- decrementValue(event, true);
282
- break;
283
- }
284
- }
285
- inputOnKeyDown == null ? void 0 : inputOnKeyDown(event);
286
- };
287
- const handleIncrementMouseDown = (event, disableIncrement2) => {
288
- event.preventDefault();
289
- if (!disableIncrement2) {
290
- setIsEditing(false);
291
- activateIncrement(event);
292
- } else if (inputRef.current) {
293
- inputRef.current.select();
294
- }
295
- };
296
- const handleDecrementMouseDown = (event, disableDecrement2) => {
297
- event.preventDefault();
298
- if (!disableDecrement2) {
299
- setIsEditing(false);
300
- activateDecrement(event);
301
- } else if (inputRef.current) {
302
- inputRef.current.select();
303
- }
304
- };
305
- const handleContainerMouseUp = (event) => {
306
- setIsFocused(true);
307
- onMouseUp == null ? void 0 : onMouseUp(event);
308
- };
309
- let renderedValue;
310
- if (isEditing) {
311
- renderedValue = value;
312
- } else if (!(value == null ? void 0 : value.length)) {
313
- renderedValue = "";
314
- } else {
315
- renderedValue = format(
316
- Number.isNaN(floatValue) ? value : String(floatValue)
317
- );
318
- }
319
- const disableDecrement = disabled || floatValue - step < min;
320
- const disableIncrement = disabled || floatValue + step > max;
321
- return /* @__PURE__ */ jsxRuntime.jsxs(
322
- "div",
323
- {
324
- className: clsx.clsx(
325
- withBaseName(),
326
- withBaseName(variant),
327
- {
328
- [withBaseName("focused")]: isFocused,
329
- [withBaseName("disabled")]: isDisabled,
330
- [withBaseName("readOnly")]: isReadOnly,
331
- [withBaseName("hiddenButtons")]: hideButtons,
332
- [withBaseName(validationStatus || "")]: validationStatus,
333
- [withBaseName("bordered")]: bordered
334
- },
335
- className
336
- ),
337
- onBlur: handleBlur,
338
- onMouseUp: handleContainerMouseUp,
339
- ...restProps,
340
- ref,
341
- children: [
342
- startAdornment && /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("startAdornmentContainer"), children: startAdornment }),
343
- /* @__PURE__ */ jsxRuntime.jsx(
344
- "input",
345
- {
346
- "aria-describedby": clsx.clsx(formFieldDescribedBy, inputDescribedBy) || void 0,
347
- "aria-labelledby": clsx.clsx(formFieldLabelledBy, inputLabelledBy) || void 0,
348
- "aria-invalid": !isReadOnly && renderedValue.length ? isOutOfRange(floatValue, min, max) || validationStatus === "error" : void 0,
349
- className: clsx.clsx(
350
- withBaseName("input"),
351
- withBaseName(`inputTextAlign${core.capitalize(textAlign)}`),
352
- inputClassName
353
- ),
354
- disabled: isDisabled,
355
- onBlur: handleInputBlur,
356
- onChange: handleInputChange,
357
- onFocus: handleInputFocus,
358
- onKeyDown: isReadOnly ? void 0 : handleInputKeyDown,
359
- placeholder,
360
- readOnly: isReadOnly,
361
- "aria-readonly": isReadOnly ? "true" : void 0,
362
- ref: handleInputRef,
363
- required: isRequired,
364
- "aria-valuemax": !isReadOnly && renderedValue.length ? max : void 0,
365
- "aria-valuemin": !isReadOnly && renderedValue.length ? min : void 0,
366
- "aria-valuenow": !isReadOnly ? floatValue : void 0,
367
- "aria-valuetext": !isReadOnly ? renderedValue.length ? ariaValueTextProp ?? renderedValue : "Empty" : void 0,
368
- role: isReadOnly ? "textbox" : "spinbutton",
369
- tabIndex: isDisabled ? -1 : 0,
370
- value: isReadOnly && renderedValue.length === 0 ? emptyReadOnlyMarker : renderedValue,
371
- ...restInputProps
372
- }
373
- ),
374
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("activationIndicator") }),
375
- !isDisabled && validationStatus && /* @__PURE__ */ jsxRuntime.jsx(core.StatusAdornment, { status: validationStatus, id: validationStatusId }),
376
- endAdornment && /* @__PURE__ */ jsxRuntime.jsx("div", { className: withBaseName("endAdornmentContainer"), children: endAdornment }),
377
- !isReadOnly && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: clsx.clsx(withBaseName("buttonContainer")), children: [
378
- /* @__PURE__ */ jsxRuntime.jsx(
379
- core.Button,
380
- {
381
- "aria-hidden": true,
382
- appearance: "transparent",
383
- tabIndex: -1,
384
- disabled: disableIncrement,
385
- className: withBaseName("increment"),
386
- onMouseDown: (event) => handleIncrementMouseDown(event, disableIncrement),
387
- children: /* @__PURE__ */ jsxRuntime.jsx(IncreaseIcon, { "aria-hidden": true })
388
- }
389
- ),
390
- /* @__PURE__ */ jsxRuntime.jsx(
391
- core.Button,
392
- {
393
- "aria-hidden": true,
394
- appearance: "transparent",
395
- tabIndex: -1,
396
- disabled: disableDecrement,
397
- className: withBaseName("decrement"),
398
- onMouseDown: (event) => handleDecrementMouseDown(event, disableDecrement),
399
- children: /* @__PURE__ */ jsxRuntime.jsx(DecreaseIcon, { "aria-hidden": true })
400
- }
401
- )
402
- ] })
403
- ]
404
- }
405
- );
406
- }
407
- );
408
-
409
- exports.NumberInput = NumberInput;
410
- exports.isOutOfRange = isOutOfRange;
411
- //# sourceMappingURL=NumberInput.js.map