@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.
- package/CHANGELOG.md +28 -0
- package/css/salt-lab.css +2 -229
- package/dist-cjs/calendar/internal/CalendarDay.js +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +1 -1
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-cjs/index.js +0 -3
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItem.css.js +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +3 -3
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +3 -3
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +3 -3
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +3 -3
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-es/index.js +0 -1
- package/dist-es/index.js.map +1 -1
- package/dist-es/list-deprecated/ListItem.css.js +1 -1
- package/dist-types/index.d.ts +0 -1
- package/package.json +2 -2
- package/dist-cjs/number-input/NumberInput.css.js +0 -6
- package/dist-cjs/number-input/NumberInput.css.js.map +0 -1
- package/dist-cjs/number-input/NumberInput.js +0 -411
- package/dist-cjs/number-input/NumberInput.js.map +0 -1
- package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js +0 -50
- package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
- package/dist-cjs/number-input/internal/useInterval.js +0 -25
- package/dist-cjs/number-input/internal/useInterval.js.map +0 -1
- package/dist-es/number-input/NumberInput.css.js +0 -4
- package/dist-es/number-input/NumberInput.css.js.map +0 -1
- package/dist-es/number-input/NumberInput.js +0 -408
- package/dist-es/number-input/NumberInput.js.map +0 -1
- package/dist-es/number-input/internal/useActivateWhileMouseDown.js +0 -48
- package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +0 -1
- package/dist-es/number-input/internal/useInterval.js +0 -23
- package/dist-es/number-input/internal/useInterval.js.map +0 -1
- package/dist-types/number-input/NumberInput.d.ts +0 -150
- package/dist-types/number-input/index.d.ts +0 -1
- package/dist-types/number-input/internal/useActivateWhileMouseDown.d.ts +0 -5
- 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';
|
package/dist-es/index.js.map
CHANGED
|
@@ -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-
|
|
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
|
package/dist-types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salt-ds/lab",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
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.
|
|
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
|