@salt-ds/lab 1.0.0-alpha.76 → 1.0.0-alpha.78
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 +52 -0
- package/css/salt-lab.css +274 -79
- package/dist-cjs/app-header/AppHeader.js.map +1 -1
- package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
- package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
- package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
- package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
- package/dist-cjs/button-bar/internal/ButtonBarContext.js.map +1 -1
- package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
- package/dist-cjs/button-bar/internal/useDescendant.js.map +1 -1
- package/dist-cjs/button-bar/internal/useDescendants.js.map +1 -1
- package/dist-cjs/calendar/Calendar.css.js +1 -1
- package/dist-cjs/calendar/Calendar.js +11 -2
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarGrid.js +38 -36
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
- package/dist-cjs/calendar/CalendarMonthHeader.js +1 -1
- package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
- package/dist-cjs/calendar/CalendarNavigation.css.js +1 -1
- package/dist-cjs/calendar/CalendarNavigation.js +20 -13
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.js +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.js +26 -36
- package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-cjs/calendar/internal/CalendarMonth.js +30 -9
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-cjs/calendar/internal/utils.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +7 -9
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarDay.js +7 -11
- package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +144 -76
- package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/keydownHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/menuPositioning.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/stateUtils.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMountedRef.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useRefsManager.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useStateReducer.js.map +1 -1
- package/dist-cjs/cascading-menu/stateChangeTypes.js.map +1 -1
- package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
- package/dist-cjs/color-chooser/Color.js.map +1 -1
- package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
- package/dist-cjs/color-chooser/ColorHelpers.js.map +1 -1
- package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
- package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
- package/dist-cjs/color-chooser/GetColorPalettes.js.map +1 -1
- package/dist-cjs/color-chooser/HexInput.js.map +1 -1
- package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
- package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
- package/dist-cjs/color-chooser/Swatch.js.map +1 -1
- package/dist-cjs/color-chooser/Swatches.js.map +1 -1
- package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-cjs/color-chooser/color-utils.js.map +1 -1
- package/dist-cjs/color-chooser/colorMap.js.map +1 -1
- package/dist-cjs/color-chooser/createTabsMapping.js.map +1 -1
- package/dist-cjs/combo-box/ComboBox.js.map +1 -1
- package/dist-cjs/combo-box/useCombobox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/filterHelpers.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
- package/dist-cjs/common-hooks/calcPreferredHeight.js.map +1 -1
- package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
- package/dist-cjs/common-hooks/itemToString.js.map +1 -1
- package/dist-cjs/common-hooks/keyUtils.js.map +1 -1
- package/dist-cjs/common-hooks/list-dom-utils.js.map +1 -1
- package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
- package/dist-cjs/common-hooks/useAutoSizer.js.map +1 -1
- package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
- package/dist-cjs/common-hooks/useSelection.js.map +1 -1
- package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
- package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-cjs/common-hooks/utils/filter-utils.js.map +1 -1
- package/dist-cjs/common-hooks/utils/isSelected.js.map +1 -1
- package/dist-cjs/contact-details/ContactAction.js.map +1 -1
- package/dist-cjs/contact-details/ContactActions.js.map +1 -1
- package/dist-cjs/contact-details/ContactAvatar.js.map +1 -1
- package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
- package/dist-cjs/contact-details/ContactFavoriteToggle.js.map +1 -1
- package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
- package/dist-cjs/contact-details/ContactMetadataItem.js.map +1 -1
- package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/MailLinkComponent.js.map +1 -1
- package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
- package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
- package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
- package/dist-cjs/contact-details/internal/StarIcon.js.map +1 -1
- package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
- package/dist-cjs/contact-details/internal/useComponentSize.js.map +1 -1
- package/dist-cjs/content-status/ContentStatus.js.map +1 -1
- package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-cjs/date-input/DateInputRange.js +3 -2
- package/dist-cjs/date-input/DateInputRange.js.map +1 -1
- package/dist-cjs/date-input/DateInputSingle.js +5 -2
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js +0 -2
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +2 -3
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +22 -8
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +2 -4
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +2 -4
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js +12 -7
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-cjs/date-picker/useDatePicker.js +0 -17
- package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
- package/dist-cjs/date-picker/useFocusOut.js.map +1 -1
- package/dist-cjs/date-picker/useKeyboard.js.map +1 -1
- package/dist-cjs/deck-item/DeckItem.js.map +1 -1
- package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
- package/dist-cjs/dropdown/Dropdown.js.map +1 -1
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
- package/dist-cjs/dropdown/useClickAway.js.map +1 -1
- package/dist-cjs/dropdown/useDropdown.js.map +1 -1
- package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
- package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
- package/dist-cjs/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
- package/dist-cjs/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormHelperText.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-cjs/form-field-legacy/NecessityIndicator.js.map +1 -1
- package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-cjs/form-field-legacy/constant.js.map +1 -1
- package/dist-cjs/form-group/FormGroup.js.map +1 -1
- package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
- package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
- package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
- package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
- package/dist-cjs/input-legacy/useCursorOnFocus.js.map +1 -1
- package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
- package/dist-cjs/list/Highlighter.js.map +1 -1
- package/dist-cjs/list/List.js.map +1 -1
- package/dist-cjs/list/ListItem.js.map +1 -1
- package/dist-cjs/list/ListItemGroup.js.map +1 -1
- package/dist-cjs/list/ListItemHeader.js.map +1 -1
- package/dist-cjs/list/VirtualizedList.js.map +1 -1
- package/dist-cjs/list/keyset.js.map +1 -1
- package/dist-cjs/list/useList.js.map +1 -1
- package/dist-cjs/list/useListHeight.js.map +1 -1
- package/dist-cjs/list/useVirtualization.js.map +1 -1
- package/dist-cjs/list-deprecated/List.js.map +1 -1
- package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItemContext.js.map +1 -1
- package/dist-cjs/list-deprecated/ListStateContext.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/helpers.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/scrollIntoView.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/useListAutoSizer.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/useWidth.js.map +1 -1
- package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
- package/dist-cjs/list-deprecated/useList.js.map +1 -1
- package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
- package/dist-cjs/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-cjs/list-next/ListItemNext.js.map +1 -1
- package/dist-cjs/list-next/ListNext.js.map +1 -1
- package/dist-cjs/list-next/ListNextContext.js.map +1 -1
- package/dist-cjs/list-next/useList.js.map +1 -1
- package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -1
- package/dist-cjs/logo/Logo.js.map +1 -1
- package/dist-cjs/logo/LogoImage.js.map +1 -1
- package/dist-cjs/logo/LogoSeparator.js.map +1 -1
- package/dist-cjs/menu-button/MenuButton.js.map +1 -1
- package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-cjs/metric/Metric.js.map +1 -1
- package/dist-cjs/metric/MetricContent.js.map +1 -1
- package/dist-cjs/metric/MetricHeader.js.map +1 -1
- package/dist-cjs/metric/internal/MetricContext.js.map +1 -1
- package/dist-cjs/number-input/NumberInput.js.map +1 -1
- package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
- package/dist-cjs/number-input/internal/useCaret.js.map +1 -1
- package/dist-cjs/number-input/internal/useInterval.js.map +1 -1
- package/dist-cjs/number-input/internal/utils.js.map +1 -1
- package/dist-cjs/number-input/useNumberInput.js.map +1 -1
- package/dist-cjs/portal/Portal.js.map +1 -1
- package/dist-cjs/query-input/QueryInput.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryList.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryListContext.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
- package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
- package/dist-cjs/query-input/internal/ValueSelector.js.map +1 -1
- package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
- package/dist-cjs/query-input/useQueryInput.js.map +1 -1
- package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
- package/dist-cjs/responsive/overflowUtils.js.map +1 -1
- package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
- package/dist-cjs/responsive/useInstantCollapse.js.map +1 -1
- package/dist-cjs/responsive/useOverflow.js.map +1 -1
- package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
- package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
- package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
- package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
- package/dist-cjs/responsive/useWidth.js.map +1 -1
- package/dist-cjs/responsive/utils.js.map +1 -1
- package/dist-cjs/search-input/SearchInput.js.map +1 -1
- package/dist-cjs/static-list/StaticList.js.map +1 -1
- package/dist-cjs/static-list/StaticListItem.js.map +1 -1
- package/dist-cjs/static-list/StaticListItemContent.js.map +1 -1
- package/dist-cjs/system-status/SystemStatus.js.map +1 -1
- package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
- package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
- package/dist-cjs/table/TBody.js.map +1 -1
- package/dist-cjs/table/TD.js +6 -2
- package/dist-cjs/table/TD.js.map +1 -1
- package/dist-cjs/table/TFoot.js.map +1 -1
- package/dist-cjs/table/TH.js +6 -2
- package/dist-cjs/table/TH.js.map +1 -1
- package/dist-cjs/table/THead.js.map +1 -1
- package/dist-cjs/table/TR.js.map +1 -1
- package/dist-cjs/table/Table.css.js +1 -1
- package/dist-cjs/table/Table.js +2 -2
- package/dist-cjs/table/Table.js.map +1 -1
- package/dist-cjs/tabs/Tab.js.map +1 -1
- package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
- package/dist-cjs/tabs/TabPanel.js.map +1 -1
- package/dist-cjs/tabs/Tabs.js.map +1 -1
- package/dist-cjs/tabs/Tabstrip.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/drag-utils.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/dragDropTypes.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragDrop.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
- package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
- package/dist-cjs/tabs/useEditableItem.js.map +1 -1
- package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
- package/dist-cjs/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-cjs/tabs/useSelection.js.map +1 -1
- package/dist-cjs/tabs/useTabs.js.map +1 -1
- package/dist-cjs/tabs/useTabstrip.js.map +1 -1
- package/dist-cjs/tabs-next/TabBar.js.map +1 -1
- package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextAction.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextPanel.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextTrigger.css.js +1 -1
- package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useFocusOutside.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
- package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
- package/dist-cjs/toast-group/ToastGroup.js.map +1 -1
- package/dist-cjs/tokenized-input/TokenizedInput.js.map +1 -1
- package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputRuler.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/getCursorPosition.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/isPlainObject.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/useResizeObserver.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/useWidth.js.map +1 -1
- package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
- package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -1
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
- package/dist-cjs/toolbar/Toolbar.js.map +1 -1
- package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
- package/dist-cjs/toolbar/Tooltray.js.map +1 -1
- package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
- package/dist-cjs/toolbar/toolbar-field/ToolbarField.js.map +1 -1
- package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-cjs/tree/TreeNode.js.map +1 -1
- package/dist-cjs/tree/use-tree-keyboard-navigation.js.map +1 -1
- package/dist-cjs/tree/useTree.js.map +1 -1
- package/dist-cjs/utils/escapeRegExp.js.map +1 -1
- package/dist-cjs/utils/forwardCallbackProps.js.map +1 -1
- package/dist-cjs/utils/isEmail.js.map +1 -1
- package/dist-cjs/utils/isPlainObject.js.map +1 -1
- package/dist-cjs/utils/partition.js.map +1 -1
- package/dist-cjs/utils/useClickOutside.js.map +1 -1
- package/dist-cjs/utils/useEventCallback.js.map +1 -1
- package/dist-cjs/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
- package/dist-cjs/utils/useLayoutEffectOnce.js.map +1 -1
- package/dist-cjs/utils/useLayoutEffectSkipFirst.js.map +1 -1
- package/dist-cjs/utils/useOverflowDetection.js.map +1 -1
- package/dist-cjs/utils/useSlideSelection.js.map +1 -1
- package/dist-cjs/window/ElectronWindow.js.map +1 -1
- package/dist-cjs/window/WindowContext.js.map +1 -1
- package/dist-cjs/window/desktop-utils.js.map +1 -1
- package/dist-es/app-header/AppHeader.js.map +1 -1
- package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
- package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
- package/dist-es/button-bar/ButtonBar.js.map +1 -1
- package/dist-es/button-bar/OrderedButton.js.map +1 -1
- package/dist-es/button-bar/internal/ButtonBarContext.js.map +1 -1
- package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
- package/dist-es/button-bar/internal/useDescendant.js.map +1 -1
- package/dist-es/button-bar/internal/useDescendants.js.map +1 -1
- package/dist-es/calendar/Calendar.css.js +1 -1
- package/dist-es/calendar/Calendar.js +12 -3
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarGrid.js +39 -37
- package/dist-es/calendar/CalendarGrid.js.map +1 -1
- package/dist-es/calendar/CalendarMonthHeader.js +1 -1
- package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
- package/dist-es/calendar/CalendarNavigation.css.js +1 -1
- package/dist-es/calendar/CalendarNavigation.js +21 -14
- package/dist-es/calendar/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
- package/dist-es/calendar/CalendarWeekHeader.js +2 -2
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- package/dist-es/calendar/internal/CalendarDay.js +27 -37
- package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
- package/dist-es/calendar/internal/CalendarMonth.js +31 -10
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-es/calendar/internal/utils.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +7 -9
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarDay.js +7 -11
- package/dist-es/calendar/useCalendarDay.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +144 -76
- package/dist-es/calendar/useCalendarSelection.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-es/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
- package/dist-es/cascading-menu/internal/keydownHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/menuPositioning.js.map +1 -1
- package/dist-es/cascading-menu/internal/stateUtils.js.map +1 -1
- package/dist-es/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMountedRef.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
- package/dist-es/cascading-menu/internal/useRefsManager.js.map +1 -1
- package/dist-es/cascading-menu/internal/useStateReducer.js.map +1 -1
- package/dist-es/cascading-menu/stateChangeTypes.js.map +1 -1
- package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
- package/dist-es/color-chooser/Color.js.map +1 -1
- package/dist-es/color-chooser/ColorChooser.js.map +1 -1
- package/dist-es/color-chooser/ColorHelpers.js.map +1 -1
- package/dist-es/color-chooser/ColorPicker.js.map +1 -1
- package/dist-es/color-chooser/DictTabs.js.map +1 -1
- package/dist-es/color-chooser/GetColorPalettes.js.map +1 -1
- package/dist-es/color-chooser/HexInput.js.map +1 -1
- package/dist-es/color-chooser/RGBAInput.js.map +1 -1
- package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
- package/dist-es/color-chooser/Swatch.js.map +1 -1
- package/dist-es/color-chooser/Swatches.js.map +1 -1
- package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-es/color-chooser/color-utils.js.map +1 -1
- package/dist-es/color-chooser/colorMap.js.map +1 -1
- package/dist-es/color-chooser/createTabsMapping.js.map +1 -1
- package/dist-es/combo-box/ComboBox.js.map +1 -1
- package/dist-es/combo-box/useCombobox.js.map +1 -1
- package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
- package/dist-es/combo-box-deprecated/filterHelpers.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
- package/dist-es/common-hooks/calcPreferredHeight.js.map +1 -1
- package/dist-es/common-hooks/collectionProvider.js.map +1 -1
- package/dist-es/common-hooks/itemToString.js.map +1 -1
- package/dist-es/common-hooks/keyUtils.js.map +1 -1
- package/dist-es/common-hooks/list-dom-utils.js.map +1 -1
- package/dist-es/common-hooks/selectionTypes.js.map +1 -1
- package/dist-es/common-hooks/useAutoSizer.js.map +1 -1
- package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
- package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
- package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
- package/dist-es/common-hooks/useSelection.js.map +1 -1
- package/dist-es/common-hooks/useTypeahead.js.map +1 -1
- package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-es/common-hooks/utils/filter-utils.js.map +1 -1
- package/dist-es/common-hooks/utils/isSelected.js.map +1 -1
- package/dist-es/contact-details/ContactAction.js.map +1 -1
- package/dist-es/contact-details/ContactActions.js.map +1 -1
- package/dist-es/contact-details/ContactAvatar.js.map +1 -1
- package/dist-es/contact-details/ContactDetails.js.map +1 -1
- package/dist-es/contact-details/ContactFavoriteToggle.js.map +1 -1
- package/dist-es/contact-details/ContactMetadata.js.map +1 -1
- package/dist-es/contact-details/ContactMetadataItem.js.map +1 -1
- package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-es/contact-details/MailLinkComponent.js.map +1 -1
- package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
- package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
- package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
- package/dist-es/contact-details/internal/StarIcon.js.map +1 -1
- package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
- package/dist-es/contact-details/internal/useComponentSize.js.map +1 -1
- package/dist-es/content-status/ContentStatus.js.map +1 -1
- package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-es/date-input/DateInputRange.js +3 -2
- package/dist-es/date-input/DateInputRange.js.map +1 -1
- package/dist-es/date-input/DateInputSingle.js +5 -2
- package/dist-es/date-input/DateInputSingle.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js +0 -2
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js +1 -1
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- package/dist-es/date-picker/DatePickerHelperText.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +2 -3
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +22 -8
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +2 -4
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +2 -4
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js +12 -7
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-es/date-picker/useDatePicker.js +0 -17
- package/dist-es/date-picker/useDatePicker.js.map +1 -1
- package/dist-es/date-picker/useFocusOut.js.map +1 -1
- package/dist-es/date-picker/useKeyboard.js.map +1 -1
- package/dist-es/deck-item/DeckItem.js.map +1 -1
- package/dist-es/deck-layout/DeckLayout.js.map +1 -1
- package/dist-es/dropdown/Dropdown.js.map +1 -1
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown/DropdownButton.js.map +1 -1
- package/dist-es/dropdown/useClickAway.js.map +1 -1
- package/dist-es/dropdown/useDropdown.js.map +1 -1
- package/dist-es/dropdown/useDropdownBase.js.map +1 -1
- package/dist-es/editable-label/EditableLabel.js.map +1 -1
- package/dist-es/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
- package/dist-es/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
- package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
- package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
- package/dist-es/form-field-legacy/FormHelperText.js.map +1 -1
- package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-es/form-field-legacy/NecessityIndicator.js.map +1 -1
- package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-es/form-field-legacy/constant.js.map +1 -1
- package/dist-es/form-group/FormGroup.js.map +1 -1
- package/dist-es/formatted-input/FormattedInput.js.map +1 -1
- package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
- package/dist-es/input-legacy/InputLegacy.js.map +1 -1
- package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
- package/dist-es/input-legacy/useCursorOnFocus.js.map +1 -1
- package/dist-es/layer-layout/LayerLayout.js.map +1 -1
- package/dist-es/list/Highlighter.js.map +1 -1
- package/dist-es/list/List.js.map +1 -1
- package/dist-es/list/ListItem.js.map +1 -1
- package/dist-es/list/ListItemGroup.js.map +1 -1
- package/dist-es/list/ListItemHeader.js.map +1 -1
- package/dist-es/list/VirtualizedList.js.map +1 -1
- package/dist-es/list/keyset.js.map +1 -1
- package/dist-es/list/useList.js.map +1 -1
- package/dist-es/list/useListHeight.js.map +1 -1
- package/dist-es/list/useVirtualization.js.map +1 -1
- package/dist-es/list-deprecated/List.js.map +1 -1
- package/dist-es/list-deprecated/ListBase.js.map +1 -1
- package/dist-es/list-deprecated/ListItem.js.map +1 -1
- package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-es/list-deprecated/ListItemContext.js.map +1 -1
- package/dist-es/list-deprecated/ListStateContext.js.map +1 -1
- package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-es/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
- package/dist-es/list-deprecated/internal/helpers.js.map +1 -1
- package/dist-es/list-deprecated/internal/scrollIntoView.js.map +1 -1
- package/dist-es/list-deprecated/internal/useListAutoSizer.js.map +1 -1
- package/dist-es/list-deprecated/internal/useWidth.js.map +1 -1
- package/dist-es/list-deprecated/itemToString.js.map +1 -1
- package/dist-es/list-deprecated/useList.js.map +1 -1
- package/dist-es/list-deprecated/useListItem.js.map +1 -1
- package/dist-es/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-es/list-next/ListItemNext.js.map +1 -1
- package/dist-es/list-next/ListNext.js.map +1 -1
- package/dist-es/list-next/ListNextContext.js.map +1 -1
- package/dist-es/list-next/useList.js.map +1 -1
- package/dist-es/localization-provider/LocalizationProvider.js.map +1 -1
- package/dist-es/logo/Logo.js.map +1 -1
- package/dist-es/logo/LogoImage.js.map +1 -1
- package/dist-es/logo/LogoSeparator.js.map +1 -1
- package/dist-es/menu-button/MenuButton.js.map +1 -1
- package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-es/metric/Metric.js.map +1 -1
- package/dist-es/metric/MetricContent.js.map +1 -1
- package/dist-es/metric/MetricHeader.js.map +1 -1
- package/dist-es/metric/internal/MetricContext.js.map +1 -1
- package/dist-es/number-input/NumberInput.js.map +1 -1
- package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
- package/dist-es/number-input/internal/useCaret.js.map +1 -1
- package/dist-es/number-input/internal/useInterval.js.map +1 -1
- package/dist-es/number-input/internal/utils.js.map +1 -1
- package/dist-es/number-input/useNumberInput.js.map +1 -1
- package/dist-es/portal/Portal.js.map +1 -1
- package/dist-es/query-input/QueryInput.js.map +1 -1
- package/dist-es/query-input/internal/CategoryList.js.map +1 -1
- package/dist-es/query-input/internal/CategoryListContext.js.map +1 -1
- package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-es/query-input/internal/SearchList.js.map +1 -1
- package/dist-es/query-input/internal/ValueList.js.map +1 -1
- package/dist-es/query-input/internal/ValueSelector.js.map +1 -1
- package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
- package/dist-es/query-input/useQueryInput.js.map +1 -1
- package/dist-es/responsive/OverflowReducer.js.map +1 -1
- package/dist-es/responsive/overflowUtils.js.map +1 -1
- package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
- package/dist-es/responsive/useInstantCollapse.js.map +1 -1
- package/dist-es/responsive/useOverflow.js.map +1 -1
- package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
- package/dist-es/responsive/useOverflowLayout.js.map +1 -1
- package/dist-es/responsive/useReclaimSpace.js.map +1 -1
- package/dist-es/responsive/useResizeObserver.js.map +1 -1
- package/dist-es/responsive/useWidth.js.map +1 -1
- package/dist-es/responsive/utils.js.map +1 -1
- package/dist-es/search-input/SearchInput.js.map +1 -1
- package/dist-es/static-list/StaticList.js.map +1 -1
- package/dist-es/static-list/StaticListItem.js.map +1 -1
- package/dist-es/static-list/StaticListItemContent.js.map +1 -1
- package/dist-es/system-status/SystemStatus.js.map +1 -1
- package/dist-es/system-status/SystemStatusActions.js.map +1 -1
- package/dist-es/system-status/SystemStatusContent.js.map +1 -1
- package/dist-es/table/TBody.js.map +1 -1
- package/dist-es/table/TD.js +6 -2
- package/dist-es/table/TD.js.map +1 -1
- package/dist-es/table/TFoot.js.map +1 -1
- package/dist-es/table/TH.js +6 -2
- package/dist-es/table/TH.js.map +1 -1
- package/dist-es/table/THead.js.map +1 -1
- package/dist-es/table/TR.js.map +1 -1
- package/dist-es/table/Table.css.js +1 -1
- package/dist-es/table/Table.js +2 -2
- package/dist-es/table/Table.js.map +1 -1
- package/dist-es/tabs/Tab.js.map +1 -1
- package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
- package/dist-es/tabs/TabPanel.js.map +1 -1
- package/dist-es/tabs/Tabs.js.map +1 -1
- package/dist-es/tabs/Tabstrip.js.map +1 -1
- package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
- package/dist-es/tabs/drag-drop/drag-utils.js.map +1 -1
- package/dist-es/tabs/drag-drop/dragDropTypes.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragDrop.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
- package/dist-es/tabs/useActivationIndicator.js.map +1 -1
- package/dist-es/tabs/useEditableItem.js.map +1 -1
- package/dist-es/tabs/useItemsWithIds.js.map +1 -1
- package/dist-es/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-es/tabs/useSelection.js.map +1 -1
- package/dist-es/tabs/useTabs.js.map +1 -1
- package/dist-es/tabs/useTabstrip.js.map +1 -1
- package/dist-es/tabs-next/TabBar.js.map +1 -1
- package/dist-es/tabs-next/TabListNext.js.map +1 -1
- package/dist-es/tabs-next/TabNext.js.map +1 -1
- package/dist-es/tabs-next/TabNextAction.js.map +1 -1
- package/dist-es/tabs-next/TabNextContext.js.map +1 -1
- package/dist-es/tabs-next/TabNextPanel.js.map +1 -1
- package/dist-es/tabs-next/TabNextTrigger.css.js +1 -1
- package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-es/tabs-next/TabsNext.js.map +1 -1
- package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
- package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
- package/dist-es/tabs-next/hooks/useFocusOutside.js.map +1 -1
- package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
- package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
- package/dist-es/toast-group/ToastGroup.js.map +1 -1
- package/dist-es/tokenized-input/TokenizedInput.js.map +1 -1
- package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputRuler.js.map +1 -1
- package/dist-es/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
- package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
- package/dist-es/tokenized-input/internal/getCursorPosition.js.map +1 -1
- package/dist-es/tokenized-input/internal/isPlainObject.js.map +1 -1
- package/dist-es/tokenized-input/internal/useResizeObserver.js.map +1 -1
- package/dist-es/tokenized-input/internal/useWidth.js.map +1 -1
- package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
- package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -1
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
- package/dist-es/toolbar/Toolbar.js.map +1 -1
- package/dist-es/toolbar/ToolbarButton.js.map +1 -1
- package/dist-es/toolbar/Tooltray.js.map +1 -1
- package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
- package/dist-es/toolbar/toolbar-field/ToolbarField.js.map +1 -1
- package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-es/tree/TreeNode.js.map +1 -1
- package/dist-es/tree/use-tree-keyboard-navigation.js.map +1 -1
- package/dist-es/tree/useTree.js.map +1 -1
- package/dist-es/utils/escapeRegExp.js.map +1 -1
- package/dist-es/utils/forwardCallbackProps.js.map +1 -1
- package/dist-es/utils/isEmail.js.map +1 -1
- package/dist-es/utils/isPlainObject.js.map +1 -1
- package/dist-es/utils/partition.js.map +1 -1
- package/dist-es/utils/useClickOutside.js.map +1 -1
- package/dist-es/utils/useEventCallback.js.map +1 -1
- package/dist-es/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
- package/dist-es/utils/useLayoutEffectOnce.js.map +1 -1
- package/dist-es/utils/useLayoutEffectSkipFirst.js.map +1 -1
- package/dist-es/utils/useOverflowDetection.js.map +1 -1
- package/dist-es/utils/useSlideSelection.js.map +1 -1
- package/dist-es/window/ElectronWindow.js.map +1 -1
- package/dist-es/window/WindowContext.js.map +1 -1
- package/dist-es/window/desktop-utils.js.map +1 -1
- package/dist-types/calendar/useCalendar.d.ts +26 -25
- package/dist-types/calendar/useCalendarDay.d.ts +1 -5
- package/dist-types/calendar/useCalendarSelection.d.ts +14 -11
- package/dist-types/date-picker/DatePickerContext.d.ts +0 -6
- package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +2 -2
- package/dist-types/date-picker/DatePickerRangePanel.d.ts +4 -4
- package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +2 -2
- package/dist-types/date-picker/useDatePicker.d.ts +0 -6
- package/dist-types/table/TD.d.ts +6 -0
- package/dist-types/table/TH.d.ts +6 -0
- package/dist-types/table/Table.d.ts +3 -3
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListBase.js","sources":["../src/list-deprecated/ListBase.tsx"],"sourcesContent":["import {\n makePrefixer,\n useForkRef,\n useId,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentProps,\n createContext,\n type ForwardedRef,\n forwardRef,\n type HTMLAttributes,\n memo,\n type ReactElement,\n type Ref,\n type UIEvent,\n useCallback,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from \"react\";\nimport { areEqual, FixedSizeList, VariableSizeList } from \"react-window\";\nimport { calcPreferredListHeight } from \"./internal/calcPreferredListHeight\";\nimport { scrollIntoView } from \"./internal/scrollIntoView\";\nimport { useListAutoSizer } from \"./internal/useListAutoSizer\";\nimport { itemToString as defaultItemToString } from \"./itemToString\";\nimport listCss from \"./List.css\";\nimport { ListItemBase } from \"./ListItemBase\";\nimport { ListItemContext } from \"./ListItemContext\";\nimport type { ListBaseProps } from \"./ListProps\";\nimport { useListStateContext } from \"./ListStateContext\";\nimport { useListItem, useVirtualizedListItem } from \"./useListItem\";\n\nconst withBaseName = makePrefixer(\"saltListDeprecated\");\n\nexport interface ListboxContextProps<Item>\n extends Pick<\n ComponentProps<\"div\">,\n \"style\" | \"className\" | \"onScroll\" | \"id\"\n > {\n borderless?: boolean;\n disabled?: boolean;\n disableFocus?: boolean;\n getItemId?: (index: number) => string;\n getItemHeight?: (index?: number) => number;\n itemToString?: (item: Item) => string;\n listRef?: Ref<HTMLDivElement>;\n}\n\nconst ListboxContext = createContext<ListboxContextProps<any>>({});\nconst DefaultItem = memo(function DefaultItem(props: any) {\n const { item, itemToString, itemProps } = useListItem(props);\n return <ListItemBase {...itemProps}>{itemToString(item)}</ListItemBase>;\n}, areEqual);\n\nconst DefaultVirtualizedItem = memo(function DefaultVirtualizedItem(\n props: any,\n) {\n const { item, itemToString, itemProps } = useVirtualizedListItem(props);\n return <ListItemBase {...itemProps}>{itemToString(item)}</ListItemBase>;\n}, areEqual);\n\nexport interface ListboxProps extends HTMLAttributes<HTMLDivElement> {\n onScroll?: (evt: UIEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Listbox is the container for all list items. It is used as `outerElement` for\n * `react-window`.\n *\n * forwardRef gives `react-window` a way to attach a ref to listen to \"scroll\" events.\n * And `onScroll` is added by `react-window` so we pass it on.\n */\nconst Listbox = forwardRef<HTMLDivElement, ListboxProps>(\n function Listbox(props, ref) {\n const { style, onScroll, children } = props;\n\n const {\n className,\n borderless: _borderless,\n disabled,\n disableFocus,\n listRef,\n style: styleProp,\n onScroll: onScrollProp,\n ...restListProps\n } = useContext<ListboxContextProps<any>>(ListboxContext);\n\n const setListRef = useForkRef(ref, listRef);\n\n const handleScroll = (event: UIEvent<HTMLDivElement>) => {\n if (onScroll) {\n onScroll(event);\n }\n\n if (onScrollProp) {\n onScrollProp(event);\n }\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n onScroll={handleScroll}\n ref={setListRef}\n style={{ ...style, ...styleProp }}\n tabIndex={disabled || disableFocus ? undefined : 0}\n {...restListProps}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface ListScrollHandles<Item> {\n scrollToIndex: (itemIndex: number) => void;\n scrollToItem: (item: Item) => void;\n scrollTo: (scrollOffset: number) => void;\n}\n\nconst noScrolling: ListScrollHandles<unknown> = {\n scrollToIndex: () => undefined,\n scrollToItem: () => undefined,\n scrollTo: () => undefined,\n};\n\nexport const ListBase = forwardRef(function ListBase<Item>(\n props: ListBaseProps<Item>,\n ref: ForwardedRef<ListScrollHandles<Item>>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-deprecated\",\n css: listCss,\n window: targetWindow,\n });\n\n const { state } = useListStateContext();\n\n // Getting list id in the following order:\n // 1. Use the id prop if it's defined, otherwise...\n // 2. Use the id from list context if it's defined, or finally...\n // 3. Generate a random id.\n const generatedId = useId(props.id);\n const defaultId = state.id ?? generatedId;\n\n // Removed useCharacteristic here\n const sizeStackable = \"36px\";\n const defaultItemHeight =\n sizeStackable === null ? 36 : Number.parseInt(sizeStackable, 10);\n\n const hasIndexer = typeof props.getItemAtIndex === \"function\";\n const hasVariableHeight = typeof props.getItemHeight === \"function\";\n\n const {\n id = defaultId,\n source = [],\n borderless,\n children,\n disableMouseDown,\n itemTextHighlightPattern,\n itemCount = source.length,\n itemToString = defaultItemToString,\n // TODO: Read from css variable\n itemGapSize = 1,\n itemHeight = defaultItemHeight,\n getItemHeight = () => itemHeight,\n getItemId = (index) => `${id}-item-${index}`,\n getItemIndex = (item) => source.indexOf(item),\n getItemAtIndex,\n overscanCount = 10,\n displayedItemCount = 10,\n virtualized,\n width,\n height,\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n ListPlaceholder,\n ListItem = virtualized ? DefaultVirtualizedItem : DefaultItem,\n listRef: listRefProp,\n ...restProps\n } = props;\n\n const { highlightedIndex } = state;\n\n const preferredHeight =\n height ??\n calcPreferredListHeight({\n borderless,\n displayedItemCount,\n itemCount,\n itemHeight,\n getItemHeight,\n itemGapSize,\n });\n\n const [containerRef, autoSize] = useListAutoSizer<HTMLDivElement>({\n responsive: width === undefined || height === undefined,\n height: preferredHeight,\n width,\n });\n\n /**\n * This is used to access `react-window` API\n * @see https://react-window.now.sh/#/api/FixedSizeList (under `Methods`)\n */\n const virtualizedListRef = useRef<{\n scrollTo: (scrollOffset: number) => void;\n scrollToItem: (index: number) => void;\n } | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n\n const setListRef = useForkRef(listRef, listRefProp);\n\n const scrollToIndex = useCallback((itemIndex: number) => {\n scrollIntoView(\n listRef.current?.querySelector(`[data-option-index=\"${itemIndex}\"]`),\n listRef,\n );\n }, []);\n\n const scrollHandles: ListScrollHandles<Item> = useMemo(\n () => ({\n scrollToIndex,\n scrollToItem: (item: Item) => {\n scrollToIndex(getItemIndex(item));\n },\n scrollTo: (scrollOffset: number) => {\n if (listRef.current) {\n listRef.current.scrollTop = scrollOffset;\n }\n },\n }),\n [getItemIndex, scrollToIndex],\n );\n\n const virtualizedScrollHandles: ListScrollHandles<Item> = useMemo(\n () => ({\n scrollToIndex: (itemIndex: number) => {\n virtualizedListRef.current?.scrollToItem(itemIndex);\n },\n scrollToItem: (item: Item) => {\n virtualizedListRef.current?.scrollToItem(getItemIndex(item));\n },\n scrollTo: (scrollOffset: number) => {\n virtualizedListRef.current?.scrollTo(scrollOffset);\n },\n }),\n [getItemIndex],\n );\n\n useImperativeHandle(ref, () => {\n if (virtualized && virtualizedListRef.current) {\n return virtualizedScrollHandles;\n }\n if (listRef.current) {\n return scrollHandles;\n }\n return noScrolling;\n }, [virtualized, scrollHandles, virtualizedScrollHandles]);\n\n useIsomorphicLayoutEffect(() => {\n if (highlightedIndex == null) {\n return;\n }\n\n if (virtualized && virtualizedListRef.current) {\n virtualizedListRef.current.scrollToItem(highlightedIndex);\n } else if (listRef.current) {\n scrollToIndex(highlightedIndex);\n }\n }, [highlightedIndex, virtualized, scrollToIndex]);\n\n const renderList = () => {\n if (Children.count(children)) {\n return (\n <Listbox style={autoSize}>\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n getItemHeight,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n {children}\n </ListItemContext.Provider>\n </Listbox>\n );\n }\n\n if (virtualized) {\n const VirtualizedList: any = hasVariableHeight\n ? VariableSizeList\n : FixedSizeList;\n\n return (\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n <VirtualizedList\n height={autoSize.height}\n itemCount={itemCount}\n itemData={source}\n itemSize={hasVariableHeight ? getItemHeight : itemHeight}\n outerElementType={Listbox}\n overscanCount={overscanCount}\n ref={virtualizedListRef}\n width={autoSize.width}\n >\n {ListItem}\n </VirtualizedList>\n </ListItemContext.Provider>\n );\n }\n\n return (\n <Listbox style={autoSize}>\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n getItemHeight,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n {(hasIndexer ? Array.from({ length: itemCount }) : source).map(\n (item, index) => (\n <ListItem\n index={index}\n // No, getItemAtIndex can NOT be undefined, because hasIndexer is confirming that already. stupid stupid typescript !!!\n item={(hasIndexer ? getItemAtIndex?.(index) : item) as Item}\n key={getItemId(index)}\n />\n ),\n )}\n </ListItemContext.Provider>\n </Listbox>\n );\n };\n\n // TODO It's weird that List itself isn't the root element, ListWrapper is\n // THat means if client passes style, with margin, for example, it will break;\n return (\n <div\n className={clsx(withBaseName(\"wrapper\"), {\n [withBaseName(\"borderless\")]: borderless,\n })}\n ref={containerRef}\n style={{\n minWidth,\n minHeight,\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n maxWidth: maxWidth ?? width,\n maxHeight: maxHeight ?? preferredHeight,\n }}\n >\n {itemCount === 0 && ListPlaceholder !== undefined ? (\n <ListPlaceholder style={autoSize} />\n ) : (\n <ListboxContext.Provider\n value={{\n ...restProps,\n listRef: setListRef,\n id,\n borderless,\n }}\n >\n {renderList()}\n </ListboxContext.Provider>\n )}\n </div>\n );\n}) as <Item>(\n p: ListBaseProps<Item> & { ref?: ForwardedRef<ListScrollHandles<Item>> },\n) => ReactElement<ListBaseProps<Item>>;\n"],"names":["DefaultItem","DefaultVirtualizedItem","Listbox","ListBase","listCss","itemToString","defaultItemToString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListBase.js","sources":["../src/list-deprecated/ListBase.tsx"],"sourcesContent":["import {\n makePrefixer,\n useForkRef,\n useId,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n Children,\n type ComponentProps,\n createContext,\n type ForwardedRef,\n forwardRef,\n type HTMLAttributes,\n memo,\n type ReactElement,\n type Ref,\n type UIEvent,\n useCallback,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from \"react\";\nimport { areEqual, FixedSizeList, VariableSizeList } from \"react-window\";\nimport { calcPreferredListHeight } from \"./internal/calcPreferredListHeight\";\nimport { scrollIntoView } from \"./internal/scrollIntoView\";\nimport { useListAutoSizer } from \"./internal/useListAutoSizer\";\nimport { itemToString as defaultItemToString } from \"./itemToString\";\nimport listCss from \"./List.css\";\nimport { ListItemBase } from \"./ListItemBase\";\nimport { ListItemContext } from \"./ListItemContext\";\nimport type { ListBaseProps } from \"./ListProps\";\nimport { useListStateContext } from \"./ListStateContext\";\nimport { useListItem, useVirtualizedListItem } from \"./useListItem\";\n\nconst withBaseName = makePrefixer(\"saltListDeprecated\");\n\nexport interface ListboxContextProps<Item>\n extends Pick<\n ComponentProps<\"div\">,\n \"style\" | \"className\" | \"onScroll\" | \"id\"\n > {\n borderless?: boolean;\n disabled?: boolean;\n disableFocus?: boolean;\n getItemId?: (index: number) => string;\n getItemHeight?: (index?: number) => number;\n itemToString?: (item: Item) => string;\n listRef?: Ref<HTMLDivElement>;\n}\n\nconst ListboxContext = createContext<ListboxContextProps<any>>({});\nconst DefaultItem = memo(function DefaultItem(props: any) {\n const { item, itemToString, itemProps } = useListItem(props);\n return <ListItemBase {...itemProps}>{itemToString(item)}</ListItemBase>;\n}, areEqual);\n\nconst DefaultVirtualizedItem = memo(function DefaultVirtualizedItem(\n props: any,\n) {\n const { item, itemToString, itemProps } = useVirtualizedListItem(props);\n return <ListItemBase {...itemProps}>{itemToString(item)}</ListItemBase>;\n}, areEqual);\n\nexport interface ListboxProps extends HTMLAttributes<HTMLDivElement> {\n onScroll?: (evt: UIEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Listbox is the container for all list items. It is used as `outerElement` for\n * `react-window`.\n *\n * forwardRef gives `react-window` a way to attach a ref to listen to \"scroll\" events.\n * And `onScroll` is added by `react-window` so we pass it on.\n */\nconst Listbox = forwardRef<HTMLDivElement, ListboxProps>(\n function Listbox(props, ref) {\n const { style, onScroll, children } = props;\n\n const {\n className,\n borderless: _borderless,\n disabled,\n disableFocus,\n listRef,\n style: styleProp,\n onScroll: onScrollProp,\n ...restListProps\n } = useContext<ListboxContextProps<any>>(ListboxContext);\n\n const setListRef = useForkRef(ref, listRef);\n\n const handleScroll = (event: UIEvent<HTMLDivElement>) => {\n if (onScroll) {\n onScroll(event);\n }\n\n if (onScrollProp) {\n onScrollProp(event);\n }\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n onScroll={handleScroll}\n ref={setListRef}\n style={{ ...style, ...styleProp }}\n tabIndex={disabled || disableFocus ? undefined : 0}\n {...restListProps}\n >\n {children}\n </div>\n );\n },\n);\n\nexport interface ListScrollHandles<Item> {\n scrollToIndex: (itemIndex: number) => void;\n scrollToItem: (item: Item) => void;\n scrollTo: (scrollOffset: number) => void;\n}\n\nconst noScrolling: ListScrollHandles<unknown> = {\n scrollToIndex: () => undefined,\n scrollToItem: () => undefined,\n scrollTo: () => undefined,\n};\n\nexport const ListBase = forwardRef(function ListBase<Item>(\n props: ListBaseProps<Item>,\n ref: ForwardedRef<ListScrollHandles<Item>>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-deprecated\",\n css: listCss,\n window: targetWindow,\n });\n\n const { state } = useListStateContext();\n\n // Getting list id in the following order:\n // 1. Use the id prop if it's defined, otherwise...\n // 2. Use the id from list context if it's defined, or finally...\n // 3. Generate a random id.\n const generatedId = useId(props.id);\n const defaultId = state.id ?? generatedId;\n\n // Removed useCharacteristic here\n const sizeStackable = \"36px\";\n const defaultItemHeight =\n sizeStackable === null ? 36 : Number.parseInt(sizeStackable, 10);\n\n const hasIndexer = typeof props.getItemAtIndex === \"function\";\n const hasVariableHeight = typeof props.getItemHeight === \"function\";\n\n const {\n id = defaultId,\n source = [],\n borderless,\n children,\n disableMouseDown,\n itemTextHighlightPattern,\n itemCount = source.length,\n itemToString = defaultItemToString,\n // TODO: Read from css variable\n itemGapSize = 1,\n itemHeight = defaultItemHeight,\n getItemHeight = () => itemHeight,\n getItemId = (index) => `${id}-item-${index}`,\n getItemIndex = (item) => source.indexOf(item),\n getItemAtIndex,\n overscanCount = 10,\n displayedItemCount = 10,\n virtualized,\n width,\n height,\n maxWidth,\n maxHeight,\n minWidth,\n minHeight,\n ListPlaceholder,\n ListItem = virtualized ? DefaultVirtualizedItem : DefaultItem,\n listRef: listRefProp,\n ...restProps\n } = props;\n\n const { highlightedIndex } = state;\n\n const preferredHeight =\n height ??\n calcPreferredListHeight({\n borderless,\n displayedItemCount,\n itemCount,\n itemHeight,\n getItemHeight,\n itemGapSize,\n });\n\n const [containerRef, autoSize] = useListAutoSizer<HTMLDivElement>({\n responsive: width === undefined || height === undefined,\n height: preferredHeight,\n width,\n });\n\n /**\n * This is used to access `react-window` API\n * @see https://react-window.now.sh/#/api/FixedSizeList (under `Methods`)\n */\n const virtualizedListRef = useRef<{\n scrollTo: (scrollOffset: number) => void;\n scrollToItem: (index: number) => void;\n } | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n\n const setListRef = useForkRef(listRef, listRefProp);\n\n const scrollToIndex = useCallback((itemIndex: number) => {\n scrollIntoView(\n listRef.current?.querySelector(`[data-option-index=\"${itemIndex}\"]`),\n listRef,\n );\n }, []);\n\n const scrollHandles: ListScrollHandles<Item> = useMemo(\n () => ({\n scrollToIndex,\n scrollToItem: (item: Item) => {\n scrollToIndex(getItemIndex(item));\n },\n scrollTo: (scrollOffset: number) => {\n if (listRef.current) {\n listRef.current.scrollTop = scrollOffset;\n }\n },\n }),\n [getItemIndex, scrollToIndex],\n );\n\n const virtualizedScrollHandles: ListScrollHandles<Item> = useMemo(\n () => ({\n scrollToIndex: (itemIndex: number) => {\n virtualizedListRef.current?.scrollToItem(itemIndex);\n },\n scrollToItem: (item: Item) => {\n virtualizedListRef.current?.scrollToItem(getItemIndex(item));\n },\n scrollTo: (scrollOffset: number) => {\n virtualizedListRef.current?.scrollTo(scrollOffset);\n },\n }),\n [getItemIndex],\n );\n\n useImperativeHandle(ref, () => {\n if (virtualized && virtualizedListRef.current) {\n return virtualizedScrollHandles;\n }\n if (listRef.current) {\n return scrollHandles;\n }\n return noScrolling;\n }, [virtualized, scrollHandles, virtualizedScrollHandles]);\n\n useIsomorphicLayoutEffect(() => {\n if (highlightedIndex == null) {\n return;\n }\n\n if (virtualized && virtualizedListRef.current) {\n virtualizedListRef.current.scrollToItem(highlightedIndex);\n } else if (listRef.current) {\n scrollToIndex(highlightedIndex);\n }\n }, [highlightedIndex, virtualized, scrollToIndex]);\n\n const renderList = () => {\n if (Children.count(children)) {\n return (\n <Listbox style={autoSize}>\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n getItemHeight,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n {children}\n </ListItemContext.Provider>\n </Listbox>\n );\n }\n\n if (virtualized) {\n const VirtualizedList: any = hasVariableHeight\n ? VariableSizeList\n : FixedSizeList;\n\n return (\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n <VirtualizedList\n height={autoSize.height}\n itemCount={itemCount}\n itemData={source}\n itemSize={hasVariableHeight ? getItemHeight : itemHeight}\n outerElementType={Listbox}\n overscanCount={overscanCount}\n ref={virtualizedListRef}\n width={autoSize.width}\n >\n {ListItem}\n </VirtualizedList>\n </ListItemContext.Provider>\n );\n }\n\n return (\n <Listbox style={autoSize}>\n <ListItemContext.Provider\n value={{\n disableMouseDown,\n getItemId,\n getItemHeight,\n //@ts-expect-error\n itemToString,\n itemTextHighlightPattern,\n }}\n >\n {(hasIndexer ? Array.from({ length: itemCount }) : source).map(\n (item, index) => (\n <ListItem\n index={index}\n // No, getItemAtIndex can NOT be undefined, because hasIndexer is confirming that already. stupid stupid typescript !!!\n item={(hasIndexer ? getItemAtIndex?.(index) : item) as Item}\n key={getItemId(index)}\n />\n ),\n )}\n </ListItemContext.Provider>\n </Listbox>\n );\n };\n\n // TODO It's weird that List itself isn't the root element, ListWrapper is\n // THat means if client passes style, with margin, for example, it will break;\n return (\n <div\n className={clsx(withBaseName(\"wrapper\"), {\n [withBaseName(\"borderless\")]: borderless,\n })}\n ref={containerRef}\n style={{\n minWidth,\n minHeight,\n width: width ?? \"100%\",\n height: height ?? \"100%\",\n maxWidth: maxWidth ?? width,\n maxHeight: maxHeight ?? preferredHeight,\n }}\n >\n {itemCount === 0 && ListPlaceholder !== undefined ? (\n <ListPlaceholder style={autoSize} />\n ) : (\n <ListboxContext.Provider\n value={{\n ...restProps,\n listRef: setListRef,\n id,\n borderless,\n }}\n >\n {renderList()}\n </ListboxContext.Provider>\n )}\n </div>\n );\n}) as <Item>(\n p: ListBaseProps<Item> & { ref?: ForwardedRef<ListScrollHandles<Item>> },\n) => ReactElement<ListBaseProps<Item>>;\n"],"names":["DefaultItem","DefaultVirtualizedItem","Listbox","ListBase","listCss","itemToString","defaultItemToString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItem.js","sources":["../src/list-deprecated/ListItem.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef, type ReactElement } from \"react\";\nimport { useDescendant } from \"./internal/DescendantContext\";\nimport { isPlainObject } from \"./internal/helpers\";\nimport { ListItemBase, type ListItemBaseProps } from \"./ListItemBase\";\nimport { useListItem } from \"./useListItem\";\n\nexport interface ListItemProps<Item = string>\n extends Omit<\n ListItemBaseProps,\n \"focusVisible\" | \"highlighted\" | \"selected\" | \"tooltipText\"\n > {\n item?: Item;\n itemToString?: (item: Item) => string;\n}\n\nfunction ListItem<Item = string>(\n props: ListItemProps<Item>,\n ref?: ForwardedRef<HTMLDivElement>,\n) {\n const {\n children,\n item = props.item === undefined && !isPlainObject(children)\n ? (children as unknown as Item)\n : props.item,\n ...restProps\n } = props;\n\n const { itemToString, itemProps } = useListItem({\n index: useDescendant(item),\n item,\n ...restProps,\n });\n\n const itemText = itemToString(item as Item);\n\n return (\n <ListItemBase tooltipText={itemText} {...itemProps} ref={ref}>\n {children !== undefined ? children : itemText}\n </ListItemBase>\n );\n}\n\n// `const` could not be generic, but we has to use `forwardRef` so that React would use the component correctly..?\n// So we have to override the type definition of forwardRef to be our own\ntype GenericListItem = <Item = string>(\n p: ListItemProps<Item> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement<ListItemProps<Item>>;\n\nconst _ListItem = forwardRef(ListItem) as GenericListItem;\n\nexport { _ListItem as ListItem };\n"],"names":[],"mappings":";;;;;;;AAeA,SAAS,QAAA,CACP,OACA,
|
|
1
|
+
{"version":3,"file":"ListItem.js","sources":["../src/list-deprecated/ListItem.tsx"],"sourcesContent":["import { type ForwardedRef, forwardRef, type ReactElement } from \"react\";\nimport { useDescendant } from \"./internal/DescendantContext\";\nimport { isPlainObject } from \"./internal/helpers\";\nimport { ListItemBase, type ListItemBaseProps } from \"./ListItemBase\";\nimport { useListItem } from \"./useListItem\";\n\nexport interface ListItemProps<Item = string>\n extends Omit<\n ListItemBaseProps,\n \"focusVisible\" | \"highlighted\" | \"selected\" | \"tooltipText\"\n > {\n item?: Item;\n itemToString?: (item: Item) => string;\n}\n\nfunction ListItem<Item = string>(\n props: ListItemProps<Item>,\n ref?: ForwardedRef<HTMLDivElement>,\n) {\n const {\n children,\n item = props.item === undefined && !isPlainObject(children)\n ? (children as unknown as Item)\n : props.item,\n ...restProps\n } = props;\n\n const { itemToString, itemProps } = useListItem({\n index: useDescendant(item),\n item,\n ...restProps,\n });\n\n const itemText = itemToString(item as Item);\n\n return (\n <ListItemBase tooltipText={itemText} {...itemProps} ref={ref}>\n {children !== undefined ? children : itemText}\n </ListItemBase>\n );\n}\n\n// `const` could not be generic, but we has to use `forwardRef` so that React would use the component correctly..?\n// So we have to override the type definition of forwardRef to be our own\ntype GenericListItem = <Item = string>(\n p: ListItemProps<Item> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement<ListItemProps<Item>>;\n\nconst _ListItem = forwardRef(ListItem) as GenericListItem;\n\nexport { _ListItem as ListItem };\n"],"names":[],"mappings":";;;;;;;AAeA,SAAS,QAAA,CACP,OACA,GAAA,EACA;AACA,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,IAAA,GAAO,MAAM,IAAA,KAAS,MAAA,IAAa,CAAC,aAAA,CAAc,QAAQ,CAAA,GACrD,QAAA,GACD,KAAA,CAAM,IAAA;AAAA,IACV,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAE,YAAA,EAAc,SAAA,EAAU,GAAI,WAAA,CAAY;AAAA,IAC9C,KAAA,EAAO,cAAc,IAAI,CAAA;AAAA,IACzB,IAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,aAAa,IAAY,CAAA;AAE1C,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EAAa,WAAA,EAAa,QAAA,EAAW,GAAG,WAAW,GAAA,EACjD,QAAA,EAAA,QAAA,KAAa,MAAA,GAAY,QAAA,GAAW,QAAA,EACvC,CAAA;AAEJ;AAQA,MAAM,SAAA,GAAY,WAAW,QAAQ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItemBase.js","sources":["../src/list-deprecated/ListItemBase.tsx"],"sourcesContent":["import { makePrefixer, Tooltip, useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n forwardRef,\n type HTMLAttributes,\n memo,\n useRef,\n} from \"react\";\nimport { useOverflowDetection } from \"../utils\";\nimport { Highlighter } from \"./internal/Highlighter\";\n\nimport listItemCss from \"./ListItem.css\";\n\n//TODO does this need to be generic <Item?\nexport interface ListItemBaseProps extends HTMLAttributes<HTMLDivElement> {\n disabled?: boolean;\n deselectable?: boolean;\n focusVisible?: boolean;\n highlighted?: boolean;\n itemTextHighlightPattern?: RegExp | string;\n selected?: boolean;\n tooltipText?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltListItemDeprecated\");\n\n// just to keep line number parity\n//\nexport const ListItemBase = memo(\n forwardRef(function ListItemBase(\n props: ListItemBaseProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) {\n const {\n className,\n deselectable,\n selected,\n highlighted = false,\n focusVisible,\n tooltipText,\n disabled,\n children,\n itemTextHighlightPattern,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-item-deprecated\",\n css: listItemCss,\n window: targetWindow,\n });\n\n const { current: detectTruncation } = useRef(typeof children === \"string\");\n\n const [overflowRef, isOverflowed] = useOverflowDetection<HTMLDivElement>();\n const setItemRef = useForkRef(overflowRef, ref);\n\n return (\n <Tooltip disabled={!isOverflowed} content={tooltipText}>\n <div\n aria-label={typeof children === \"string\" ? children : undefined}\n ref={detectTruncation ? ref : setItemRef}\n role=\"option\"\n {...restProps}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"deselectable\")]: deselectable,\n [withBaseName(\"highlighted\")]: highlighted,\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"focusVisible\")]: focusVisible,\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n >\n {detectTruncation ? (\n <span className={withBaseName(\"textWrapper\")} ref={overflowRef}>\n {itemTextHighlightPattern == null ? (\n children\n ) : (\n <Highlighter\n matchPattern={itemTextHighlightPattern}\n text={children}\n />\n )}\n </span>\n ) : (\n children\n )}\n </div>\n </Tooltip>\n );\n }),\n);\n"],"names":["ListItemBase","listItemCss"],"mappings":";;;;;;;;;;AA2BA,MAAM,YAAA,GAAe,aAAa,wBAAwB,CAAA;AAInD,MAAM,
|
|
1
|
+
{"version":3,"file":"ListItemBase.js","sources":["../src/list-deprecated/ListItemBase.tsx"],"sourcesContent":["import { makePrefixer, Tooltip, useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n forwardRef,\n type HTMLAttributes,\n memo,\n useRef,\n} from \"react\";\nimport { useOverflowDetection } from \"../utils\";\nimport { Highlighter } from \"./internal/Highlighter\";\n\nimport listItemCss from \"./ListItem.css\";\n\n//TODO does this need to be generic <Item?\nexport interface ListItemBaseProps extends HTMLAttributes<HTMLDivElement> {\n disabled?: boolean;\n deselectable?: boolean;\n focusVisible?: boolean;\n highlighted?: boolean;\n itemTextHighlightPattern?: RegExp | string;\n selected?: boolean;\n tooltipText?: string;\n}\n\nconst withBaseName = makePrefixer(\"saltListItemDeprecated\");\n\n// just to keep line number parity\n//\nexport const ListItemBase = memo(\n forwardRef(function ListItemBase(\n props: ListItemBaseProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) {\n const {\n className,\n deselectable,\n selected,\n highlighted = false,\n focusVisible,\n tooltipText,\n disabled,\n children,\n itemTextHighlightPattern,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-item-deprecated\",\n css: listItemCss,\n window: targetWindow,\n });\n\n const { current: detectTruncation } = useRef(typeof children === \"string\");\n\n const [overflowRef, isOverflowed] = useOverflowDetection<HTMLDivElement>();\n const setItemRef = useForkRef(overflowRef, ref);\n\n return (\n <Tooltip disabled={!isOverflowed} content={tooltipText}>\n <div\n aria-label={typeof children === \"string\" ? children : undefined}\n ref={detectTruncation ? ref : setItemRef}\n role=\"option\"\n {...restProps}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"deselectable\")]: deselectable,\n [withBaseName(\"highlighted\")]: highlighted,\n [withBaseName(\"selected\")]: selected,\n [withBaseName(\"focusVisible\")]: focusVisible,\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n >\n {detectTruncation ? (\n <span className={withBaseName(\"textWrapper\")} ref={overflowRef}>\n {itemTextHighlightPattern == null ? (\n children\n ) : (\n <Highlighter\n matchPattern={itemTextHighlightPattern}\n text={children}\n />\n )}\n </span>\n ) : (\n children\n )}\n </div>\n </Tooltip>\n );\n }),\n);\n"],"names":["ListItemBase","listItemCss"],"mappings":";;;;;;;;;;AA2BA,MAAM,YAAA,GAAe,aAAa,wBAAwB,CAAA;AAInD,MAAM,YAAA,GAAe,IAAA;AAAA,EAC1B,UAAA,CAAW,SAASA,aAAAA,CAClB,KAAA,EACA,GAAA,EACA;AACA,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA,GAAc,KAAA;AAAA,MACd,YAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,wBAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,2BAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,OAAA,EAAS,gBAAA,KAAqB,MAAA,CAAO,OAAO,aAAa,QAAQ,CAAA;AAEzE,IAAA,MAAM,CAAC,WAAA,EAAa,YAAY,CAAA,GAAI,oBAAA,EAAqC;AACzE,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,WAAA,EAAa,GAAG,CAAA;AAE9C,IAAA,2BACG,OAAA,EAAA,EAAQ,QAAA,EAAU,CAAC,YAAA,EAAc,SAAS,WAAA,EACzC,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AAAA,QACtD,GAAA,EAAK,mBAAmB,GAAA,GAAM,UAAA;AAAA,QAC9B,IAAA,EAAK,QAAA;AAAA,QACJ,GAAG,SAAA;AAAA,QACJ,SAAA,EAAW,IAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAA;AAAA,YAChC,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG,WAAA;AAAA,YAC/B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAA;AAAA,YAChC,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG;AAAA,WAC9B;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA,gBAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,aAAa,CAAA,EAAG,GAAA,EAAK,WAAA,EAChD,QAAA,EAAA,wBAAA,IAA4B,IAAA,GAC3B,QAAA,mBAEA,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAc,wBAAA;AAAA,YACd,IAAA,EAAM;AAAA;AAAA,WAGZ,CAAA,GAEA;AAAA;AAAA,KAEJ,EACF,CAAA;AAAA,EAEJ,CAAC;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItemContext.js","sources":["../src/list-deprecated/ListItemContext.tsx"],"sourcesContent":["import { type Context, createContext, useContext } from \"react\";\n\nexport interface ListItemContextProps<Item> {\n disableMouseDown?: boolean;\n getItemId: (index: number) => string;\n getItemHeight?: (index?: number) => number | string;\n itemToString: (item: Item) => string;\n itemTextHighlightPattern?: RegExp | string;\n}\n\nexport type ListItemContextType<Item> = Context<ListItemContextProps<Item>>;\n\nexport const ListItemContext = createContext<\n ListItemContextProps<unknown> | undefined\n>(undefined);\n\nexport const useListItemContext = <Item,>(): ListItemContextProps<Item> => {\n const contextValue = useContext(ListItemContext);\n\n if (contextValue === undefined) {\n throw new Error(\n \"useListItemContext must be used inside of a List or ListBase component.\",\n );\n }\n\n return contextValue;\n};\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ListItemContext.js","sources":["../src/list-deprecated/ListItemContext.tsx"],"sourcesContent":["import { type Context, createContext, useContext } from \"react\";\n\nexport interface ListItemContextProps<Item> {\n disableMouseDown?: boolean;\n getItemId: (index: number) => string;\n getItemHeight?: (index?: number) => number | string;\n itemToString: (item: Item) => string;\n itemTextHighlightPattern?: RegExp | string;\n}\n\nexport type ListItemContextType<Item> = Context<ListItemContextProps<Item>>;\n\nexport const ListItemContext = createContext<\n ListItemContextProps<unknown> | undefined\n>(undefined);\n\nexport const useListItemContext = <Item,>(): ListItemContextProps<Item> => {\n const contextValue = useContext(ListItemContext);\n\n if (contextValue === undefined) {\n throw new Error(\n \"useListItemContext must be used inside of a List or ListBase component.\",\n );\n }\n\n return contextValue;\n};\n"],"names":[],"mappings":";;AAYO,MAAM,eAAA,GAAkB,cAE7B,MAAS;AAEJ,MAAM,qBAAqB,MAAyC;AACzE,EAAA,MAAM,YAAA,GAAe,WAAW,eAAe,CAAA;AAE/C,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC9B,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,YAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListStateContext.js","sources":["../src/list-deprecated/ListStateContext.js"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport const ListStateContext = createContext();\n\nexport const useListStateContext = () => {\n const context = useContext(ListStateContext);\n\n if (!context) {\n throw new Error(\n \"useListStateContext must be used inside of a ListStateContext Provider.\",\n );\n }\n\n return context;\n};\n"],"names":[],"mappings":";;AAEO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ListStateContext.js","sources":["../src/list-deprecated/ListStateContext.js"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport const ListStateContext = createContext();\n\nexport const useListStateContext = () => {\n const context = useContext(ListStateContext);\n\n if (!context) {\n throw new Error(\n \"useListStateContext must be used inside of a ListStateContext Provider.\",\n );\n }\n\n return context;\n};\n"],"names":[],"mappings":";;AAEO,MAAM,mBAAmB,aAAA;AAEzB,MAAM,sBAAsB,MAAM;AACvC,EAAA,MAAM,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAE3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescendantContext.js","sources":["../src/list-deprecated/internal/DescendantContext.tsx"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n createContext,\n type MutableRefObject,\n type ReactNode,\n useContext,\n useRef,\n useState,\n} from \"react\";\n\n// //////////////////////////////////////////////////////////////////////////////\n// SUPER HACKS AHEAD: The React team will hate this enough to hopefully give us\n// a way to know the index of a descendant given a parent (will help generate\n// IDs for accessibility a long with the ability create maximally composable\n// component abstractions).\n//\n// This is all to avoid cloneElement. If we can avoid cloneElement then people\n// can have arbitrary markup around MenuItems. This basically takes advantage\n// of react's render lifecycles to let us \"register\" descendants to an\n// ancestor, so that we can track all the descendants and manage focus on them,\n// etc. The super hacks here are for the child to know it's index as well, so\n// that it can set attributes, match against state from above, etc.\ninterface DescendantProviderProps {\n children?: ReactNode;\n items?: MutableRefObject<unknown[]>;\n}\n\ninterface DescendantContextType {\n assigning?: MutableRefObject<boolean>;\n items?: DescendantProviderProps[\"items\"];\n}\n\nexport const DescendantContext = createContext<DescendantContextType>({});\n\nexport function DescendantProvider({\n items,\n ...props\n}: DescendantProviderProps) {\n // On the first render we say we're \"assigning\", and the children will push\n // into the array when they show up in their own useLayoutEffect.\n const assigning = useRef(true);\n\n // since children are pushed into the array in useLayoutEffect of the child,\n // children can't read their index on first render. So we need to cause a\n // second render so they can read their index.\n const [, forceUpdate] = useState<unknown>();\n\n // parent useLayoutEffect is always last\n useIsomorphicLayoutEffect(() => {\n if (assigning.current) {\n // At this point all of the children have pushed into the array so we set\n // assigning to false and force an update. Since we're in\n // useLayoutEffect, we won't get a flash of rendered content, it will all\n // happen synchronously. And now that this is false, children won't push\n // into the array on the forceUpdate\n assigning.current = false;\n forceUpdate({});\n } else {\n // After the forceUpdate completes, we end up here and set assigning back\n // to true for the next update from the app\n assigning.current = true;\n }\n return () => {\n // this cleanup function runs right before the next render, so it's the\n // right time to empty out the array to be reassigned with whatever shows\n // up next render.\n if (assigning.current && items) {\n // we only want to empty out the array before the next render cycle if\n // it was NOT the result of our forceUpdate, so being guarded behind\n // assigning.current works\n items.current = [];\n }\n };\n }, [items]);\n\n return <DescendantContext.Provider {...props} value={{ items, assigning }} />;\n}\n\nexport function useDescendant(descendant: unknown) {\n const { assigning, items } = useContext(DescendantContext);\n const index = useRef(-1);\n\n useIsomorphicLayoutEffect(() => {\n if (assigning?.current && items?.current) {\n index.current = items.current.push(descendant) - 1;\n }\n });\n\n // first render its wrong, after a forceUpdate in parent useLayoutEffect it's\n // right, and its all synchronous so we don't get any flashing\n return index.current;\n}\n"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"DescendantContext.js","sources":["../src/list-deprecated/internal/DescendantContext.tsx"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n createContext,\n type MutableRefObject,\n type ReactNode,\n useContext,\n useRef,\n useState,\n} from \"react\";\n\n// //////////////////////////////////////////////////////////////////////////////\n// SUPER HACKS AHEAD: The React team will hate this enough to hopefully give us\n// a way to know the index of a descendant given a parent (will help generate\n// IDs for accessibility a long with the ability create maximally composable\n// component abstractions).\n//\n// This is all to avoid cloneElement. If we can avoid cloneElement then people\n// can have arbitrary markup around MenuItems. This basically takes advantage\n// of react's render lifecycles to let us \"register\" descendants to an\n// ancestor, so that we can track all the descendants and manage focus on them,\n// etc. The super hacks here are for the child to know it's index as well, so\n// that it can set attributes, match against state from above, etc.\ninterface DescendantProviderProps {\n children?: ReactNode;\n items?: MutableRefObject<unknown[]>;\n}\n\ninterface DescendantContextType {\n assigning?: MutableRefObject<boolean>;\n items?: DescendantProviderProps[\"items\"];\n}\n\nexport const DescendantContext = createContext<DescendantContextType>({});\n\nexport function DescendantProvider({\n items,\n ...props\n}: DescendantProviderProps) {\n // On the first render we say we're \"assigning\", and the children will push\n // into the array when they show up in their own useLayoutEffect.\n const assigning = useRef(true);\n\n // since children are pushed into the array in useLayoutEffect of the child,\n // children can't read their index on first render. So we need to cause a\n // second render so they can read their index.\n const [, forceUpdate] = useState<unknown>();\n\n // parent useLayoutEffect is always last\n useIsomorphicLayoutEffect(() => {\n if (assigning.current) {\n // At this point all of the children have pushed into the array so we set\n // assigning to false and force an update. Since we're in\n // useLayoutEffect, we won't get a flash of rendered content, it will all\n // happen synchronously. And now that this is false, children won't push\n // into the array on the forceUpdate\n assigning.current = false;\n forceUpdate({});\n } else {\n // After the forceUpdate completes, we end up here and set assigning back\n // to true for the next update from the app\n assigning.current = true;\n }\n return () => {\n // this cleanup function runs right before the next render, so it's the\n // right time to empty out the array to be reassigned with whatever shows\n // up next render.\n if (assigning.current && items) {\n // we only want to empty out the array before the next render cycle if\n // it was NOT the result of our forceUpdate, so being guarded behind\n // assigning.current works\n items.current = [];\n }\n };\n }, [items]);\n\n return <DescendantContext.Provider {...props} value={{ items, assigning }} />;\n}\n\nexport function useDescendant(descendant: unknown) {\n const { assigning, items } = useContext(DescendantContext);\n const index = useRef(-1);\n\n useIsomorphicLayoutEffect(() => {\n if (assigning?.current && items?.current) {\n index.current = items.current.push(descendant) - 1;\n }\n });\n\n // first render its wrong, after a forceUpdate in parent useLayoutEffect it's\n // right, and its all synchronous so we don't get any flashing\n return index.current;\n}\n"],"names":[],"mappings":";;;;AAgCO,MAAM,iBAAA,GAAoB,aAAA,CAAqC,EAAE;AAEjE,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA4B;AAG1B,EAAA,MAAM,SAAA,GAAY,OAAO,IAAI,CAAA;AAK7B,EAAA,MAAM,GAAG,WAAW,CAAA,GAAI,QAAA,EAAkB;AAG1C,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,UAAU,OAAA,EAAS;AAMrB,MAAA,SAAA,CAAU,OAAA,GAAU,KAAA;AACpB,MAAA,WAAA,CAAY,EAAE,CAAA;AAAA,IAChB,CAAA,MAAO;AAGL,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB;AACA,IAAA,OAAO,MAAM;AAIX,MAAA,IAAI,SAAA,CAAU,WAAW,KAAA,EAAO;AAI9B,QAAA,KAAA,CAAM,UAAU,EAAC;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBAAO,GAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA4B,GAAG,OAAO,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAU,EAAG,CAAA;AAC7E;AAEO,SAAS,cAAc,UAAA,EAAqB;AACjD,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAM,GAAI,WAAW,iBAAiB,CAAA;AACzD,EAAA,MAAM,KAAA,GAAQ,OAAO,EAAE,CAAA;AAEvB,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,OAAA,MAAW,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,OAAA,CAAA,EAAS;AACxC,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,CAAA;AAAA,IACnD;AAAA,EACF,CAAC,CAAA;AAID,EAAA,OAAO,KAAA,CAAM,OAAA;AACf;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Highlighter.js","sources":["../src/list-deprecated/internal/Highlighter.jsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { escapeRegExp } from \"../../utils\";\nimport highlighterCss from \"./Highlighter.css\";\n\nconst baseName = \"saltHighlighter\";\n\nexport const Highlighter = (props) => {\n const { matchPattern, text = \"\" } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-highligher-deprecated\",\n css: highlighterCss,\n window: targetWindow,\n });\n const matchRegex =\n typeof matchPattern === \"string\"\n ? new RegExp(`(${escapeRegExp(matchPattern)})`, \"gi\")\n : matchPattern;\n return (\n <>\n {text.split(matchRegex).map((part, index) =>\n part.match(matchRegex) ? (\n <strong className={`${baseName}-highlight`} key={`${index}-${part}`}>\n {part}\n </strong>\n ) : (\n part\n ),\n )}\n </>\n );\n};\n"],"names":["highlighterCss"],"mappings":";;;;;;;;AAKA,MAAM,
|
|
1
|
+
{"version":3,"file":"Highlighter.js","sources":["../src/list-deprecated/internal/Highlighter.jsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { escapeRegExp } from \"../../utils\";\nimport highlighterCss from \"./Highlighter.css\";\n\nconst baseName = \"saltHighlighter\";\n\nexport const Highlighter = (props) => {\n const { matchPattern, text = \"\" } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-highligher-deprecated\",\n css: highlighterCss,\n window: targetWindow,\n });\n const matchRegex =\n typeof matchPattern === \"string\"\n ? new RegExp(`(${escapeRegExp(matchPattern)})`, \"gi\")\n : matchPattern;\n return (\n <>\n {text.split(matchRegex).map((part, index) =>\n part.match(matchRegex) ? (\n <strong className={`${baseName}-highlight`} key={`${index}-${part}`}>\n {part}\n </strong>\n ) : (\n part\n ),\n )}\n </>\n );\n};\n"],"names":["highlighterCss"],"mappings":";;;;;;;;AAKA,MAAM,QAAA,GAAW,iBAAA;AAEV,MAAM,WAAA,GAAc,CAAC,KAAA,KAAU;AACpC,EAAA,MAAM,EAAE,YAAA,EAAc,IAAA,GAAO,EAAA,EAAG,GAAI,KAAA;AACpC,EAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,EAAA,wBAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,4BAAA;AAAA,IACR,GAAA,EAAKA,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,MAAM,UAAA,GACJ,OAAO,YAAA,KAAiB,QAAA,GACpB,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,YAAA,CAAa,YAAY,CAAC,CAAA,CAAA,CAAA,EAAK,IAAI,CAAA,GAClD,YAAA;AACN,EAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA,IAAA,CAAK,KAAA,CAAM,UAAU,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,IAAA,EAAM,KAAA,KACjC,KAAK,KAAA,CAAM,UAAU,oBACnB,GAAA,CAAC,QAAA,EAAA,EAAO,WAAW,CAAA,EAAG,QAAQ,cAC3B,QAAA,EAAA,IAAA,EAAA,EAD8C,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,EAEjE,CAAA,GAEA;AAAA,GAEJ,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calcPreferredListHeight.js","sources":["../src/list-deprecated/internal/calcPreferredListHeight.js"],"sourcesContent":["export const calcPreferredListHeight = (props = {}) => {\n const {\n borderless,\n displayedItemCount = 0,\n itemCount = 0,\n itemHeight = 0,\n getItemHeight,\n gapSize = 1,\n } = props;\n\n let preferredHeight = borderless ? 0 : 2;\n\n // if there is no item we render with the preferred count\n const preferredItemCount =\n itemCount === 0\n ? displayedItemCount\n : Math.min(displayedItemCount, itemCount);\n\n if (typeof getItemHeight === \"function\") {\n preferredHeight +=\n Array.from({ length: preferredItemCount }).reduce(\n (total, _, index) => total + Number(getItemHeight(index)) + gapSize,\n 0,\n ) -\n // We don't want gap after the last item\n gapSize;\n } else {\n preferredHeight +=\n preferredItemCount * Number(itemHeight) +\n (preferredItemCount - 1) * gapSize;\n }\n\n // list height will be undefined if the item height can not be\n // converted to a number, for example rem or a percentage string\n return Number.isNaN(preferredHeight) ? undefined : preferredHeight;\n};\n"],"names":[],"mappings":"AAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"calcPreferredListHeight.js","sources":["../src/list-deprecated/internal/calcPreferredListHeight.js"],"sourcesContent":["export const calcPreferredListHeight = (props = {}) => {\n const {\n borderless,\n displayedItemCount = 0,\n itemCount = 0,\n itemHeight = 0,\n getItemHeight,\n gapSize = 1,\n } = props;\n\n let preferredHeight = borderless ? 0 : 2;\n\n // if there is no item we render with the preferred count\n const preferredItemCount =\n itemCount === 0\n ? displayedItemCount\n : Math.min(displayedItemCount, itemCount);\n\n if (typeof getItemHeight === \"function\") {\n preferredHeight +=\n Array.from({ length: preferredItemCount }).reduce(\n (total, _, index) => total + Number(getItemHeight(index)) + gapSize,\n 0,\n ) -\n // We don't want gap after the last item\n gapSize;\n } else {\n preferredHeight +=\n preferredItemCount * Number(itemHeight) +\n (preferredItemCount - 1) * gapSize;\n }\n\n // list height will be undefined if the item height can not be\n // converted to a number, for example rem or a percentage string\n return Number.isNaN(preferredHeight) ? undefined : preferredHeight;\n};\n"],"names":[],"mappings":"AAAO,MAAM,uBAAA,GAA0B,CAAC,KAAA,GAAQ,EAAC,KAAM;AACrD,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,kBAAA,GAAqB,CAAA;AAAA,IACrB,SAAA,GAAY,CAAA;AAAA,IACZ,UAAA,GAAa,CAAA;AAAA,IACb,aAAA;AAAA,IACA,OAAA,GAAU;AAAA,GACZ,GAAI,KAAA;AAEJ,EAAA,IAAI,eAAA,GAAkB,aAAa,CAAA,GAAI,CAAA;AAGvC,EAAA,MAAM,qBACJ,SAAA,KAAc,CAAA,GACV,qBACA,IAAA,CAAK,GAAA,CAAI,oBAAoB,SAAS,CAAA;AAE5C,EAAA,IAAI,OAAO,kBAAkB,UAAA,EAAY;AACvC,IAAA,eAAA,IACE,MAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,kBAAA,EAAoB,CAAA,CAAE,MAAA;AAAA,MACzC,CAAC,OAAO,CAAA,EAAG,KAAA,KAAU,QAAQ,MAAA,CAAO,aAAA,CAAc,KAAK,CAAC,CAAA,GAAI,OAAA;AAAA,MAC5D;AAAA,KACF;AAAA,IAEA,OAAA;AAAA,EACJ,CAAA,MAAO;AACL,IAAA,eAAA,IACE,kBAAA,GAAqB,MAAA,CAAO,UAAU,CAAA,GAAA,CACrC,qBAAqB,CAAA,IAAK,OAAA;AAAA,EAC/B;AAIA,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,eAAe,CAAA,GAAI,MAAA,GAAY,eAAA;AACrD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../src/list-deprecated/internal/helpers.ts"],"sourcesContent":["import type { ListBaseProps } from \"../ListProps\";\n\nexport const isPlainObject = (obj: unknown): obj is Record<string, unknown> =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport const calcPreferredListHeight = (props: Partial<ListBaseProps> = {}) => {\n const {\n borderless,\n displayedItemCount = 0,\n itemCount = 0,\n itemHeight = 0,\n getItemHeight,\n } = props;\n\n let preferredHeight = borderless ? 0 : 2;\n\n // if there is no item we render with the preferred count\n const preferredItemCount =\n itemCount === 0\n ? displayedItemCount\n : Math.min(displayedItemCount, itemCount);\n\n if (typeof getItemHeight === \"function\") {\n preferredHeight += Array.from({ length: preferredItemCount }).reduce(\n (total: number, _, index) => total + Number(getItemHeight(index)),\n 0,\n );\n } else {\n preferredHeight += preferredItemCount * Number(itemHeight);\n }\n\n // list height will be undefined if the item height can not be\n // converted to a number, for example rem or a percentage string\n return Number.isNaN(preferredHeight) ? undefined : preferredHeight;\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../src/list-deprecated/internal/helpers.ts"],"sourcesContent":["import type { ListBaseProps } from \"../ListProps\";\n\nexport const isPlainObject = (obj: unknown): obj is Record<string, unknown> =>\n Object.prototype.toString.call(obj) === \"[object Object]\";\n\nexport const calcPreferredListHeight = (props: Partial<ListBaseProps> = {}) => {\n const {\n borderless,\n displayedItemCount = 0,\n itemCount = 0,\n itemHeight = 0,\n getItemHeight,\n } = props;\n\n let preferredHeight = borderless ? 0 : 2;\n\n // if there is no item we render with the preferred count\n const preferredItemCount =\n itemCount === 0\n ? displayedItemCount\n : Math.min(displayedItemCount, itemCount);\n\n if (typeof getItemHeight === \"function\") {\n preferredHeight += Array.from({ length: preferredItemCount }).reduce(\n (total: number, _, index) => total + Number(getItemHeight(index)),\n 0,\n );\n } else {\n preferredHeight += preferredItemCount * Number(itemHeight);\n }\n\n // list height will be undefined if the item height can not be\n // converted to a number, for example rem or a percentage string\n return Number.isNaN(preferredHeight) ? undefined : preferredHeight;\n};\n"],"names":[],"mappings":"AAEO,MAAM,aAAA,GAAgB,CAAC,GAAA,KAC5B,MAAA,CAAO,UAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollIntoView.js","sources":["../src/list-deprecated/internal/scrollIntoView.js"],"sourcesContent":["import { compute } from \"compute-scroll-into-view\";\n\nexport function scrollIntoView(item, list) {\n if (!item) {\n return;\n }\n\n const actions = compute(item, {\n boundary: list,\n block: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, top, left } of actions) {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"scrollIntoView.js","sources":["../src/list-deprecated/internal/scrollIntoView.js"],"sourcesContent":["import { compute } from \"compute-scroll-into-view\";\n\nexport function scrollIntoView(item, list) {\n if (!item) {\n return;\n }\n\n const actions = compute(item, {\n boundary: list,\n block: \"nearest\",\n scrollMode: \"if-needed\",\n });\n\n for (const { el, top, left } of actions) {\n el.scrollTop = top;\n el.scrollLeft = left;\n }\n}\n"],"names":[],"mappings":";;AAEO,SAAS,cAAA,CAAe,MAAM,IAAA,EAAM;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAM;AAAA,IAC5B,QAAA,EAAU,IAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,KAAA,MAAW,EAAE,EAAA,EAAI,GAAA,EAAK,IAAA,MAAU,OAAA,EAAS;AACvC,IAAA,EAAA,CAAG,SAAA,GAAY,GAAA;AACf,IAAA,EAAA,CAAG,UAAA,GAAa,IAAA;AAAA,EAClB;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListAutoSizer.js","sources":["../src/list-deprecated/internal/useListAutoSizer.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type CSSProperties, useCallback, useRef, useState } from \"react\";\n\nexport interface ListAutosizerProps {\n responsive: boolean;\n height?: number | string;\n width?: number | string;\n}\n\nexport function useListAutoSizer<Element extends HTMLElement>(\n props: ListAutosizerProps,\n) {\n const { responsive, width, height } = props;\n const [size, setSize] = useState<CSSProperties>({ width, height });\n const ref = useRef<Element>(null);\n\n const handleResize = useCallback(function handleResize(contentRect: DOMRect) {\n if (contentRect.width > 0 && contentRect.height > 0) {\n setSize({\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n setSize({ width, height });\n }, [width, height]);\n\n useIsomorphicLayoutEffect(() => {\n if (responsive) {\n let observer: ResizeObserver;\n if (ref.current) {\n handleResize(ref.current.getBoundingClientRect());\n observer = new ResizeObserver(\n ([{ contentRect }]: ResizeObserverEntry[]) => {\n handleResize(contentRect);\n },\n );\n observer.observe(ref.current);\n }\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }\n }, [handleResize, responsive]);\n\n return [ref, size] as const;\n}\n"],"names":["handleResize"],"mappings":";;;AASO,SAAS,iBACd,
|
|
1
|
+
{"version":3,"file":"useListAutoSizer.js","sources":["../src/list-deprecated/internal/useListAutoSizer.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type CSSProperties, useCallback, useRef, useState } from \"react\";\n\nexport interface ListAutosizerProps {\n responsive: boolean;\n height?: number | string;\n width?: number | string;\n}\n\nexport function useListAutoSizer<Element extends HTMLElement>(\n props: ListAutosizerProps,\n) {\n const { responsive, width, height } = props;\n const [size, setSize] = useState<CSSProperties>({ width, height });\n const ref = useRef<Element>(null);\n\n const handleResize = useCallback(function handleResize(contentRect: DOMRect) {\n if (contentRect.width > 0 && contentRect.height > 0) {\n setSize({\n width: contentRect.width,\n height: contentRect.height,\n });\n }\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n setSize({ width, height });\n }, [width, height]);\n\n useIsomorphicLayoutEffect(() => {\n if (responsive) {\n let observer: ResizeObserver;\n if (ref.current) {\n handleResize(ref.current.getBoundingClientRect());\n observer = new ResizeObserver(\n ([{ contentRect }]: ResizeObserverEntry[]) => {\n handleResize(contentRect);\n },\n );\n observer.observe(ref.current);\n }\n return () => {\n if (observer) {\n observer.disconnect();\n }\n };\n }\n }, [handleResize, responsive]);\n\n return [ref, size] as const;\n}\n"],"names":["handleResize"],"mappings":";;;AASO,SAAS,iBACd,KAAA,EACA;AACA,EAAA,MAAM,EAAE,UAAA,EAAY,KAAA,EAAO,MAAA,EAAO,GAAI,KAAA;AACtC,EAAA,MAAM,CAAC,MAAM,OAAO,CAAA,GAAI,SAAwB,EAAE,KAAA,EAAO,QAAQ,CAAA;AACjE,EAAA,MAAM,GAAA,GAAM,OAAgB,IAAI,CAAA;AAEhC,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,SAASA,aAAAA,CAAa,WAAA,EAAsB;AAC3E,IAAA,IAAI,WAAA,CAAY,KAAA,GAAQ,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AACnD,MAAA,OAAA,CAAQ;AAAA,QACN,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,QAAQ,WAAA,CAAY;AAAA,OACrB,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,OAAA,CAAQ,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAElB,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,IAAI,OAAA,EAAS;AACf,QAAA,YAAA,CAAa,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,CAAA;AAChD,QAAA,QAAA,GAAW,IAAI,cAAA;AAAA,UACb,CAAC,CAAC,EAAE,WAAA,EAAa,CAAA,KAA6B;AAC5C,YAAA,YAAA,CAAa,WAAW,CAAA;AAAA,UAC1B;AAAA,SACF;AACA,QAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,MAC9B;AACA,MAAA,OAAO,MAAM;AACX,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,UAAA,EAAW;AAAA,QACtB;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAA,OAAO,CAAC,KAAK,IAAI,CAAA;AACnB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWidth.js","sources":["../src/list-deprecated/internal/useWidth.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef, useState } from \"react\";\n\nexport function useWidth<Element extends HTMLElement>(\n responsive: boolean,\n): [RefObject<Element>, number] {\n const [width, setWidth] = useState<number>();\n const ref = useRef<Element>();\n\n const handleResize = useCallback(function handleResize(contentRect: DOMRect) {\n setWidth(contentRect.width);\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n\n handleResize(ref.current.getBoundingClientRect());\n\n if (responsive) {\n const observer = new ResizeObserver(\n ([{ contentRect }]: ResizeObserverEntry[]) => {\n handleResize(contentRect);\n },\n );\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [handleResize, responsive]);\n\n return [ref, width] as [RefObject<Element>, number];\n}\n"],"names":["handleResize"],"mappings":";;;AAGO,SAAS,SACd,
|
|
1
|
+
{"version":3,"file":"useWidth.js","sources":["../src/list-deprecated/internal/useWidth.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef, useState } from \"react\";\n\nexport function useWidth<Element extends HTMLElement>(\n responsive: boolean,\n): [RefObject<Element>, number] {\n const [width, setWidth] = useState<number>();\n const ref = useRef<Element>();\n\n const handleResize = useCallback(function handleResize(contentRect: DOMRect) {\n setWidth(contentRect.width);\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n\n handleResize(ref.current.getBoundingClientRect());\n\n if (responsive) {\n const observer = new ResizeObserver(\n ([{ contentRect }]: ResizeObserverEntry[]) => {\n handleResize(contentRect);\n },\n );\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }\n }, [handleResize, responsive]);\n\n return [ref, width] as [RefObject<Element>, number];\n}\n"],"names":["handleResize"],"mappings":";;;AAGO,SAAS,SACd,UAAA,EAC8B;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,EAAiB;AAC3C,EAAA,MAAM,MAAM,MAAA,EAAgB;AAE5B,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,SAASA,aAAAA,CAAa,WAAA,EAAsB;AAC3E,IAAA,QAAA,CAAS,YAAY,KAAK,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAChB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,CAAA;AAEhD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,WAAW,IAAI,cAAA;AAAA,QACnB,CAAC,CAAC,EAAE,WAAA,EAAa,CAAA,KAA6B;AAC5C,UAAA,YAAA,CAAa,WAAW,CAAA;AAAA,QAC1B;AAAA,OACF;AACA,MAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,OAAO,CAAA;AAE5B,MAAA,OAAO,MAAM;AACX,QAAA,QAAA,CAAS,UAAA,EAAW;AAAA,MACtB,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAA,OAAO,CAAC,KAAK,KAAK,CAAA;AACpB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itemToString.js","sources":["../src/list-deprecated/itemToString.ts"],"sourcesContent":["import { isPlainObject } from \"./internal/helpers\";\n\nexport type ItemToStringFunction<Item = unknown> = (item: Item) => string;\n\nexport function itemToString<Item>(item: Item) {\n if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.hasOwn(item, \"label\")) {\n return String(item.label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\"),\n );\n\n return \"\";\n}\n"],"names":[],"mappings":";;AAIO,SAAS,aAAmB,
|
|
1
|
+
{"version":3,"file":"itemToString.js","sources":["../src/list-deprecated/itemToString.ts"],"sourcesContent":["import { isPlainObject } from \"./internal/helpers\";\n\nexport type ItemToStringFunction<Item = unknown> = (item: Item) => string;\n\nexport function itemToString<Item>(item: Item) {\n if (!isPlainObject(item)) {\n return String(item);\n }\n\n if (Object.hasOwn(item, \"label\")) {\n return String(item.label);\n }\n\n console.warn(\n [\n \"itemToString: you've likely forgotten to set the label prop on the item object.\",\n \"You can also provide your own `itemToString` implementation.\",\n ].join(\"\\n\"),\n );\n\n return \"\";\n}\n"],"names":[],"mappings":";;AAIO,SAAS,aAAmB,IAAA,EAAY;AAC7C,EAAA,IAAI,CAAC,aAAA,CAAc,IAAI,CAAA,EAAG;AACxB,IAAA,OAAO,OAAO,IAAI,CAAA;AAAA,EACpB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,OAAO,CAAA,EAAG;AAChC,IAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAA,CAAQ,IAAA;AAAA,IACN;AAAA,MACE,iFAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,IAAI;AAAA,GACb;AAEA,EAAA,OAAO,EAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useList.js","sources":["../src/list-deprecated/useList.ts"],"sourcesContent":["import {\n ownerDocument,\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n} from \"@salt-ds/core\";\n\nimport {\n type AriaAttributes,\n type Dispatch,\n type FocusEvent,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEvent,\n type Ref,\n type SetStateAction,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ListMultiSelectionVariant,\n ListProps,\n ListSelectionVariant,\n} from \"./ListProps\";\n\ntype keyHandler = (event: KeyboardEvent<HTMLInputElement>) => void;\n\ninterface listBoxAriaProps\n extends Pick<\n AriaAttributes,\n \"aria-activedescendant\" | \"aria-multiselectable\"\n > {\n role: string; // We will default it to be 'listbox', but users can override\n}\nexport interface ListState<\n Item = string,\n Variant extends ListSelectionVariant = \"default\",\n> {\n id?: string;\n focusVisible: boolean;\n selectedItem?: Variant extends ListMultiSelectionVariant ? Array<Item> : Item;\n highlightedIndex?: number;\n isDeselectable: boolean;\n isMultiSelect: boolean;\n isDisabled: boolean;\n}\n\nexport interface ListHelpers<\n Item = string,\n Variant extends ListSelectionVariant = \"default\",\n> {\n setFocusVisible: (visible: boolean) => void;\n setSelectedItem: Dispatch<\n SetStateAction<\n (Variant extends ListMultiSelectionVariant ? Item[] : Item) | undefined\n >\n >;\n setHighlightedIndex: (highlightedIndex?: number) => void;\n handleSelect: (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => void;\n keyDownHandlers: { [key: string]: KeyboardEventHandler };\n // TODO: Form Field\n}\n\nexport function useList<Item, Variant extends ListSelectionVariant>(\n props: ListProps<Item, Variant> = {},\n): {\n focusedRef: Ref<unknown>;\n listProps: Partial<ListProps<Item, Variant>> & listBoxAriaProps;\n state: ListState<Item, Variant>;\n helpers: ListHelpers<Item, Variant>;\n} {\n validateProps(props);\n\n const generatedId = useId(props.id);\n\n const {\n id = generatedId,\n source = [],\n itemCount = source.length,\n getItemId = (index) => `${id}-item-${index}`,\n getItemAtIndex: getItemAtIndexProp,\n getItemIndex: getItemIndexProp,\n displayedItemCount = 10,\n initialSelectedItem,\n selectionVariant,\n disabled = false,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onMouseDown,\n onMouseLeave,\n onSelect,\n disableMouseDown,\n restoreLastFocus,\n highlightedIndex: highlightedIndexProp,\n selectedItem: selectedItemProp,\n tabToSelect,\n ...restProps\n } = props;\n\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n\n const { current: isDeselectable } = useRef(\n selectionVariant === \"deselectable\",\n );\n const { current: isMultiSelect } = useRef(\n selectionVariant === \"multiple\" ||\n selectionVariant === \"extended\" ||\n Array.isArray(initialSelectedItem) ||\n Array.isArray(selectedItemProp),\n );\n\n const { current: isExtendedSelect } = useRef(selectionVariant === \"extended\");\n\n let getItemIndex = useCallback(\n (item: Item) => source.indexOf(item),\n [source],\n );\n let getItemAtIndex = useCallback((index: number) => source[index], [source]);\n\n const indexComparator = useCallback(\n (a: Item, b: Item) => getItemIndex(a) - getItemIndex(b),\n [getItemIndex],\n );\n\n // Only use getItemIndex and getItemAtIndex if both are defined; otherwise keep the defaults\n if (\n typeof getItemIndexProp === \"function\" &&\n typeof getItemAtIndexProp === \"function\"\n ) {\n getItemIndex = getItemIndexProp;\n getItemAtIndex = getItemAtIndexProp;\n }\n\n const rootRef = useRef<HTMLElement>(null);\n const [focusVisible, setFocusVisible] = useState(false);\n const [lastFocusedIndex, setLastFocusedIndex] = useState(-1);\n\n const [selectedItem, setSelectedItem] = useControlled<\n undefined | (Variant extends ListMultiSelectionVariant ? Item[] : Item)\n >({\n controlled: selectedItemProp,\n default:\n initialSelectedItem ??\n ((isMultiSelect\n ? []\n : null) as unknown as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item),\n name: \"useList\",\n state: \"selectedItem\",\n });\n\n const [highlightedIndex, setHighlightedIndex] = useControlled<\n number | undefined\n >({\n controlled: highlightedIndexProp,\n default: undefined,\n name: \"useList\",\n state: \"highlightedIndex\",\n });\n\n const handleSingleSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n const isSelected = item === selectedItem;\n let nextItem: Item | null;\n\n if (isSelected && !isDeselectable) {\n return;\n }\n\n if (!isSelected) {\n nextItem = item;\n setHighlightedIndex(index);\n } else {\n nextItem = null;\n }\n\n setSelectedItem(\n nextItem as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItem as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n }\n },\n [onChange, selectedItem],\n );\n\n const handleMultiSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n const isSelected = (selectedItem as Item[]).indexOf(item as Item) !== -1;\n let nextItems = selectedItem as Item[];\n\n if (!isSelected) {\n nextItems = nextItems.concat([item]).sort(indexComparator);\n setHighlightedIndex(index);\n } else {\n nextItems = nextItems.filter((selected) => selected !== item);\n }\n\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n },\n [indexComparator, onChange, selectedItem],\n );\n\n const handleRangeSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index?: number,\n ) => {\n const currentSelection =\n event.ctrlKey || event.metaKey ? selectedItem : ([] as Item[]);\n\n const lastSelectedItemIndex =\n (selectedItem as Item[]).length > 0\n ? getItemIndex(\n (selectedItem as Item[])[(selectedItem as Item[]).length - 1],\n )\n : 0;\n\n const startRegion = Math.min(\n index ?? lastSelectedItemIndex,\n lastSelectedItemIndex,\n );\n const endRegion = Math.max(\n index ?? lastSelectedItemIndex,\n lastSelectedItemIndex,\n );\n const rangeSelection = source.slice(startRegion, endRegion + 1);\n // concat the current selection with a new selection and remove duplicates for overlaps\n const nextItems = [\n ...new Set([...(currentSelection as Item[]), ...rangeSelection]),\n ];\n // remove text selection caused by shift clicking\n ownerDocument(event.currentTarget).getSelection()?.removeAllRanges();\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n },\n [getItemIndex, onChange, selectedItem, source],\n );\n\n const handleExtendedSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n let nextItems = selectedItem as Item[];\n if (event.shiftKey) {\n handleRangeSelect(event, index);\n } else if (\n (selectedItem as Item[]).length === 0 ||\n event.ctrlKey ||\n event.metaKey\n ) {\n console.log(\"handleMulti\");\n handleMultiSelect(event, index, item);\n } else {\n nextItems = [item] as Item[];\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n }\n },\n [handleMultiSelect, handleRangeSelect, onChange, selectedItem],\n );\n\n const handleSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item | null,\n ) => {\n if (item == null || (item as Record<string, unknown>).disabled) {\n return;\n }\n\n if (onSelect) {\n console.log(\"onSelect\");\n onSelect(event, item);\n }\n\n if (isExtendedSelect) {\n handleExtendedSelect(event, index, item);\n } else if (isMultiSelect) {\n handleMultiSelect(event, index, item);\n } else {\n handleSingleSelect(event, index, item);\n }\n },\n [handleExtendedSelect, handleMultiSelect, handleSingleSelect, onSelect],\n );\n\n const saveFocusedIndex = (index: number) => {\n setLastFocusedIndex(index);\n return index;\n };\n\n const keyDownHandlers: { [key: string]: keyHandler } = {\n ArrowUp: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(Math.max(0, (prevHighlightedIndex ?? itemCount) - 1)),\n );\n },\n ArrowDown: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.min(itemCount - 1, (prevHighlightedIndex ?? -1) + 1),\n ),\n );\n },\n PageUp: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.max(\n 0,\n (prevHighlightedIndex ?? displayedItemCount) - displayedItemCount,\n ),\n ),\n );\n },\n PageDown: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.min(\n itemCount - 1,\n (prevHighlightedIndex ?? 0) + displayedItemCount,\n ),\n ),\n );\n },\n Home: (event) => {\n event.preventDefault();\n setHighlightedIndex(saveFocusedIndex(0));\n },\n End: (event) => {\n event.preventDefault();\n setHighlightedIndex(saveFocusedIndex(itemCount - 1));\n },\n Enter: (event) => {\n event.preventDefault();\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n },\n \" \": (event) => {\n event.preventDefault();\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n },\n Tab: (event) => {\n if (tabToSelect) {\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n } else {\n setHighlightedIndex(undefined);\n }\n },\n };\n\n const handleKeyDown: keyHandler = (event) => {\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n const handler: keyHandler = keyDownHandlers[event.key];\n\n if (handler) {\n handler(event);\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLDivElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n // Work out the index to highlight\n if (highlightedIndex === undefined) {\n const firstSelectedItem = isMultiSelect\n ? (selectedItem as Item[])[0]\n : (selectedItem as Item | undefined);\n\n setHighlightedIndex(\n Math.max(\n restoreLastFocus\n ? lastFocusedIndex\n : firstSelectedItem\n ? getItemIndex(firstSelectedItem)\n : -1,\n 0,\n ),\n );\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n setHighlightedIndex(undefined);\n handleBlurVisible();\n if (!isFocusVisibleRef.current) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLDivElement>) => {\n if (disableMouseDown) {\n event.preventDefault();\n } else if (onMouseDown) {\n onMouseDown(event);\n }\n };\n\n const handleMouseLeave = (event: MouseEvent<HTMLDivElement>) => {\n if (focusVisible && id) {\n // Get the root node of the component if we have access to it otherwise default to current document\n const rootNode = (\n rootRef.current || ownerDocument(event.currentTarget)\n ).getRootNode();\n\n const listNode = (rootNode as Document).getElementById(id);\n\n // Safety check as `mouseleave` could have been accidentally triggered by an opening tooltip\n // when you use keyboard to navigate, hence the focusVisible check earlier\n if (listNode?.contains(event.target as Node)) {\n setHighlightedIndex(undefined);\n }\n } else {\n setHighlightedIndex(undefined);\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n };\n\n const eventHandlers = {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onMouseLeave: handleMouseLeave,\n };\n\n const ariaProps: listBoxAriaProps = {\n role: \"listbox\",\n \"aria-activedescendant\":\n highlightedIndex !== undefined && highlightedIndex >= 0\n ? getItemId(highlightedIndex)\n : undefined,\n };\n\n if (isMultiSelect) {\n ariaProps[\"aria-multiselectable\"] = true;\n }\n\n return {\n focusedRef: useForkRef(rootRef, focusVisibleRef),\n state: {\n id,\n focusVisible,\n selectedItem,\n highlightedIndex,\n isDeselectable,\n isMultiSelect,\n isDisabled: disabled,\n },\n helpers: {\n setFocusVisible,\n setSelectedItem,\n setHighlightedIndex,\n keyDownHandlers,\n handleSelect,\n },\n listProps: {\n id,\n source,\n itemCount,\n disableMouseDown,\n displayedItemCount,\n getItemAtIndex,\n getItemIndex,\n getItemId,\n disabled,\n ...ariaProps,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\nconst validateProps = <Item, Variant extends ListSelectionVariant>(\n props: ListProps<Item, Variant>,\n) => {\n if (process.env.NODE_ENV !== \"production\") {\n const { source, itemCount, getItemIndex, getItemAtIndex } = props;\n\n const hasIndexer =\n typeof getItemIndex === \"function\" &&\n typeof getItemAtIndex === \"function\";\n\n const hasNoIndexer =\n getItemIndex === undefined && getItemAtIndex === undefined;\n\n const sourceNotArray = !Array.isArray(source);\n\n // biome-ignore lint/correctness/useHookAtTopLevel: NODE_ENV is invariant at runtime.\n useEffect(() => {\n if (sourceNotArray) {\n console.error(\"`source` for useList must be an array.\");\n }\n }, [sourceNotArray]);\n\n // biome-ignore lint/correctness/useHookAtTopLevel: NODE_ENV is invariant at runtime.\n useEffect(() => {\n if (!hasNoIndexer && !hasIndexer) {\n console.error(\n \"useList needs to have both `getItemIndex` and `getItemAtIndex`.\",\n );\n }\n\n if (!hasNoIndexer && itemCount === undefined) {\n console.error(\n \"useList needs to have `itemCount` if an indexer is used.\",\n );\n }\n }, [hasIndexer, hasNoIndexer, itemCount]);\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useList.js","sources":["../src/list-deprecated/useList.ts"],"sourcesContent":["import {\n ownerDocument,\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n} from \"@salt-ds/core\";\n\nimport {\n type AriaAttributes,\n type Dispatch,\n type FocusEvent,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEvent,\n type Ref,\n type SetStateAction,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ListMultiSelectionVariant,\n ListProps,\n ListSelectionVariant,\n} from \"./ListProps\";\n\ntype keyHandler = (event: KeyboardEvent<HTMLInputElement>) => void;\n\ninterface listBoxAriaProps\n extends Pick<\n AriaAttributes,\n \"aria-activedescendant\" | \"aria-multiselectable\"\n > {\n role: string; // We will default it to be 'listbox', but users can override\n}\nexport interface ListState<\n Item = string,\n Variant extends ListSelectionVariant = \"default\",\n> {\n id?: string;\n focusVisible: boolean;\n selectedItem?: Variant extends ListMultiSelectionVariant ? Array<Item> : Item;\n highlightedIndex?: number;\n isDeselectable: boolean;\n isMultiSelect: boolean;\n isDisabled: boolean;\n}\n\nexport interface ListHelpers<\n Item = string,\n Variant extends ListSelectionVariant = \"default\",\n> {\n setFocusVisible: (visible: boolean) => void;\n setSelectedItem: Dispatch<\n SetStateAction<\n (Variant extends ListMultiSelectionVariant ? Item[] : Item) | undefined\n >\n >;\n setHighlightedIndex: (highlightedIndex?: number) => void;\n handleSelect: (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => void;\n keyDownHandlers: { [key: string]: KeyboardEventHandler };\n // TODO: Form Field\n}\n\nexport function useList<Item, Variant extends ListSelectionVariant>(\n props: ListProps<Item, Variant> = {},\n): {\n focusedRef: Ref<unknown>;\n listProps: Partial<ListProps<Item, Variant>> & listBoxAriaProps;\n state: ListState<Item, Variant>;\n helpers: ListHelpers<Item, Variant>;\n} {\n validateProps(props);\n\n const generatedId = useId(props.id);\n\n const {\n id = generatedId,\n source = [],\n itemCount = source.length,\n getItemId = (index) => `${id}-item-${index}`,\n getItemAtIndex: getItemAtIndexProp,\n getItemIndex: getItemIndexProp,\n displayedItemCount = 10,\n initialSelectedItem,\n selectionVariant,\n disabled = false,\n onBlur,\n onChange,\n onFocus,\n onKeyDown,\n onMouseDown,\n onMouseLeave,\n onSelect,\n disableMouseDown,\n restoreLastFocus,\n highlightedIndex: highlightedIndexProp,\n selectedItem: selectedItemProp,\n tabToSelect,\n ...restProps\n } = props;\n\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n\n const { current: isDeselectable } = useRef(\n selectionVariant === \"deselectable\",\n );\n const { current: isMultiSelect } = useRef(\n selectionVariant === \"multiple\" ||\n selectionVariant === \"extended\" ||\n Array.isArray(initialSelectedItem) ||\n Array.isArray(selectedItemProp),\n );\n\n const { current: isExtendedSelect } = useRef(selectionVariant === \"extended\");\n\n let getItemIndex = useCallback(\n (item: Item) => source.indexOf(item),\n [source],\n );\n let getItemAtIndex = useCallback((index: number) => source[index], [source]);\n\n const indexComparator = useCallback(\n (a: Item, b: Item) => getItemIndex(a) - getItemIndex(b),\n [getItemIndex],\n );\n\n // Only use getItemIndex and getItemAtIndex if both are defined; otherwise keep the defaults\n if (\n typeof getItemIndexProp === \"function\" &&\n typeof getItemAtIndexProp === \"function\"\n ) {\n getItemIndex = getItemIndexProp;\n getItemAtIndex = getItemAtIndexProp;\n }\n\n const rootRef = useRef<HTMLElement>(null);\n const [focusVisible, setFocusVisible] = useState(false);\n const [lastFocusedIndex, setLastFocusedIndex] = useState(-1);\n\n const [selectedItem, setSelectedItem] = useControlled<\n undefined | (Variant extends ListMultiSelectionVariant ? Item[] : Item)\n >({\n controlled: selectedItemProp,\n default:\n initialSelectedItem ??\n ((isMultiSelect\n ? []\n : null) as unknown as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item),\n name: \"useList\",\n state: \"selectedItem\",\n });\n\n const [highlightedIndex, setHighlightedIndex] = useControlled<\n number | undefined\n >({\n controlled: highlightedIndexProp,\n default: undefined,\n name: \"useList\",\n state: \"highlightedIndex\",\n });\n\n const handleSingleSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n const isSelected = item === selectedItem;\n let nextItem: Item | null;\n\n if (isSelected && !isDeselectable) {\n return;\n }\n\n if (!isSelected) {\n nextItem = item;\n setHighlightedIndex(index);\n } else {\n nextItem = null;\n }\n\n setSelectedItem(\n nextItem as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItem as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n }\n },\n [onChange, selectedItem],\n );\n\n const handleMultiSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n const isSelected = (selectedItem as Item[]).indexOf(item as Item) !== -1;\n let nextItems = selectedItem as Item[];\n\n if (!isSelected) {\n nextItems = nextItems.concat([item]).sort(indexComparator);\n setHighlightedIndex(index);\n } else {\n nextItems = nextItems.filter((selected) => selected !== item);\n }\n\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n },\n [indexComparator, onChange, selectedItem],\n );\n\n const handleRangeSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index?: number,\n ) => {\n const currentSelection =\n event.ctrlKey || event.metaKey ? selectedItem : ([] as Item[]);\n\n const lastSelectedItemIndex =\n (selectedItem as Item[]).length > 0\n ? getItemIndex(\n (selectedItem as Item[])[(selectedItem as Item[]).length - 1],\n )\n : 0;\n\n const startRegion = Math.min(\n index ?? lastSelectedItemIndex,\n lastSelectedItemIndex,\n );\n const endRegion = Math.max(\n index ?? lastSelectedItemIndex,\n lastSelectedItemIndex,\n );\n const rangeSelection = source.slice(startRegion, endRegion + 1);\n // concat the current selection with a new selection and remove duplicates for overlaps\n const nextItems = [\n ...new Set([...(currentSelection as Item[]), ...rangeSelection]),\n ];\n // remove text selection caused by shift clicking\n ownerDocument(event.currentTarget).getSelection()?.removeAllRanges();\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant ? Item[] : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n },\n [getItemIndex, onChange, selectedItem, source],\n );\n\n const handleExtendedSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item,\n ) => {\n let nextItems = selectedItem as Item[];\n if (event.shiftKey) {\n handleRangeSelect(event, index);\n } else if (\n (selectedItem as Item[]).length === 0 ||\n event.ctrlKey ||\n event.metaKey\n ) {\n console.log(\"handleMulti\");\n handleMultiSelect(event, index, item);\n } else {\n nextItems = [item] as Item[];\n setSelectedItem(\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n\n if (onChange) {\n onChange(\n event,\n nextItems as Variant extends ListMultiSelectionVariant\n ? Item[]\n : Item,\n );\n }\n }\n },\n [handleMultiSelect, handleRangeSelect, onChange, selectedItem],\n );\n\n const handleSelect = useCallback(\n (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n index: number | undefined,\n item: Item | null,\n ) => {\n if (item == null || (item as Record<string, unknown>).disabled) {\n return;\n }\n\n if (onSelect) {\n console.log(\"onSelect\");\n onSelect(event, item);\n }\n\n if (isExtendedSelect) {\n handleExtendedSelect(event, index, item);\n } else if (isMultiSelect) {\n handleMultiSelect(event, index, item);\n } else {\n handleSingleSelect(event, index, item);\n }\n },\n [handleExtendedSelect, handleMultiSelect, handleSingleSelect, onSelect],\n );\n\n const saveFocusedIndex = (index: number) => {\n setLastFocusedIndex(index);\n return index;\n };\n\n const keyDownHandlers: { [key: string]: keyHandler } = {\n ArrowUp: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(Math.max(0, (prevHighlightedIndex ?? itemCount) - 1)),\n );\n },\n ArrowDown: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.min(itemCount - 1, (prevHighlightedIndex ?? -1) + 1),\n ),\n );\n },\n PageUp: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.max(\n 0,\n (prevHighlightedIndex ?? displayedItemCount) - displayedItemCount,\n ),\n ),\n );\n },\n PageDown: (event) => {\n event.preventDefault();\n setHighlightedIndex((prevHighlightedIndex?: number) =>\n saveFocusedIndex(\n Math.min(\n itemCount - 1,\n (prevHighlightedIndex ?? 0) + displayedItemCount,\n ),\n ),\n );\n },\n Home: (event) => {\n event.preventDefault();\n setHighlightedIndex(saveFocusedIndex(0));\n },\n End: (event) => {\n event.preventDefault();\n setHighlightedIndex(saveFocusedIndex(itemCount - 1));\n },\n Enter: (event) => {\n event.preventDefault();\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n },\n \" \": (event) => {\n event.preventDefault();\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n },\n Tab: (event) => {\n if (tabToSelect) {\n handleSelect(\n event,\n highlightedIndex,\n highlightedIndex != null && highlightedIndex > -1\n ? getItemAtIndex(highlightedIndex)\n : null,\n );\n } else {\n setHighlightedIndex(undefined);\n }\n },\n };\n\n const handleKeyDown: keyHandler = (event) => {\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n const handler: keyHandler = keyDownHandlers[event.key];\n\n if (handler) {\n handler(event);\n }\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLDivElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n // Work out the index to highlight\n if (highlightedIndex === undefined) {\n const firstSelectedItem = isMultiSelect\n ? (selectedItem as Item[])[0]\n : (selectedItem as Item | undefined);\n\n setHighlightedIndex(\n Math.max(\n restoreLastFocus\n ? lastFocusedIndex\n : firstSelectedItem\n ? getItemIndex(firstSelectedItem)\n : -1,\n 0,\n ),\n );\n }\n\n if (onFocus) {\n onFocus(event);\n }\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n setHighlightedIndex(undefined);\n handleBlurVisible();\n if (!isFocusVisibleRef.current) {\n setFocusVisible(false);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLDivElement>) => {\n if (disableMouseDown) {\n event.preventDefault();\n } else if (onMouseDown) {\n onMouseDown(event);\n }\n };\n\n const handleMouseLeave = (event: MouseEvent<HTMLDivElement>) => {\n if (focusVisible && id) {\n // Get the root node of the component if we have access to it otherwise default to current document\n const rootNode = (\n rootRef.current || ownerDocument(event.currentTarget)\n ).getRootNode();\n\n const listNode = (rootNode as Document).getElementById(id);\n\n // Safety check as `mouseleave` could have been accidentally triggered by an opening tooltip\n // when you use keyboard to navigate, hence the focusVisible check earlier\n if (listNode?.contains(event.target as Node)) {\n setHighlightedIndex(undefined);\n }\n } else {\n setHighlightedIndex(undefined);\n }\n\n if (onMouseLeave) {\n onMouseLeave(event);\n }\n };\n\n const eventHandlers = {\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n onMouseDown: handleMouseDown,\n onMouseLeave: handleMouseLeave,\n };\n\n const ariaProps: listBoxAriaProps = {\n role: \"listbox\",\n \"aria-activedescendant\":\n highlightedIndex !== undefined && highlightedIndex >= 0\n ? getItemId(highlightedIndex)\n : undefined,\n };\n\n if (isMultiSelect) {\n ariaProps[\"aria-multiselectable\"] = true;\n }\n\n return {\n focusedRef: useForkRef(rootRef, focusVisibleRef),\n state: {\n id,\n focusVisible,\n selectedItem,\n highlightedIndex,\n isDeselectable,\n isMultiSelect,\n isDisabled: disabled,\n },\n helpers: {\n setFocusVisible,\n setSelectedItem,\n setHighlightedIndex,\n keyDownHandlers,\n handleSelect,\n },\n listProps: {\n id,\n source,\n itemCount,\n disableMouseDown,\n displayedItemCount,\n getItemAtIndex,\n getItemIndex,\n getItemId,\n disabled,\n ...ariaProps,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\nconst validateProps = <Item, Variant extends ListSelectionVariant>(\n props: ListProps<Item, Variant>,\n) => {\n if (process.env.NODE_ENV !== \"production\") {\n const { source, itemCount, getItemIndex, getItemAtIndex } = props;\n\n const hasIndexer =\n typeof getItemIndex === \"function\" &&\n typeof getItemAtIndex === \"function\";\n\n const hasNoIndexer =\n getItemIndex === undefined && getItemAtIndex === undefined;\n\n const sourceNotArray = !Array.isArray(source);\n\n // biome-ignore lint/correctness/useHookAtTopLevel: NODE_ENV is invariant at runtime.\n useEffect(() => {\n if (sourceNotArray) {\n console.error(\"`source` for useList must be an array.\");\n }\n }, [sourceNotArray]);\n\n // biome-ignore lint/correctness/useHookAtTopLevel: NODE_ENV is invariant at runtime.\n useEffect(() => {\n if (!hasNoIndexer && !hasIndexer) {\n console.error(\n \"useList needs to have both `getItemIndex` and `getItemAtIndex`.\",\n );\n }\n\n if (!hasNoIndexer && itemCount === undefined) {\n console.error(\n \"useList needs to have `itemCount` if an indexer is used.\",\n );\n }\n }, [hasIndexer, hasNoIndexer, itemCount]);\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListItem.js","sources":["../src/list-deprecated/useListItem.ts"],"sourcesContent":["import { type MouseEvent, useCallback, useEffect, useMemo } from \"react\";\nimport type { ListChildComponentProps } from \"react-window\";\n\nimport type { ListItemProps } from \"./ListItem\";\nimport type { ListItemBaseProps } from \"./ListItemBase\";\n\nimport { useListItemContext } from \"./ListItemContext\";\nimport { useListStateContext } from \"./ListStateContext\";\n\ntype UseItemHookReturnType<Item> = {\n /**\n * Item data\n */\n item: Item;\n /**\n * Utility function for converting item data to a string\n */\n itemToString: (item: Item) => string;\n /**\n * Properties applied to a basic list item component\n */\n itemProps: ListItemBaseProps;\n};\n\nexport interface IndexedListItemProps<Item> extends ListItemProps<Item> {\n ariaProps?: {\n role?: string;\n \"aria-disabled\"?: string;\n \"aria-checked\"?: string;\n \"aria-posinset\"?: number;\n \"aria-setsize\"?: number;\n };\n\n index: number;\n itemHeight?: number | string;\n}\n\nexport function useListItem<Item>(\n props: IndexedListItemProps<Item>,\n): UseItemHookReturnType<Item> {\n validateProps(props);\n\n const context = useListItemContext<Item>();\n const { state, helpers } = useListStateContext();\n const { setHighlightedIndex, setFocusVisible, handleSelect } = helpers;\n const {\n focusVisible,\n highlightedIndex,\n selectedItem,\n isDeselectable,\n isDisabled,\n isMultiSelect,\n } = state;\n const {\n index,\n item,\n onClick,\n onMouseDown,\n onMouseMove,\n id = context.getItemId(index),\n itemHeight = context.getItemHeight?.(index),\n itemToString = context.itemToString,\n itemTextHighlightPattern = context.itemTextHighlightPattern,\n // An item can be disabled by\n // 1. Setting disabled attribute on the item object, or\n // 2. Passing a disabled prop directly or\n // 3. Using the disabled state in list context\n //TODO Not sure where disabled needs to be defined\n disabled = (item as Record<string, unknown>).disabled || isDisabled,\n ariaProps: ariaPropsProp,\n style: styleProp,\n ...restProps\n } = props;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: JSON.stringify is used to compare objects\n const style = useMemo(\n () => ({\n height: itemHeight,\n ...styleProp,\n }),\n [itemHeight, JSON.stringify(styleProp)],\n );\n\n const highlighted = index === highlightedIndex;\n const selected = isMultiSelect\n ? selectedItem.indexOf(item) !== -1\n : item === selectedItem;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n handleSelect(event, index, item);\n\n if (onClick) {\n onClick(event);\n }\n },\n [handleSelect, index, item, onClick],\n );\n\n const handleMouseMove = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n setHighlightedIndex(index);\n setFocusVisible(false);\n\n if (onMouseMove) {\n onMouseMove(event);\n }\n },\n [index, setFocusVisible, setHighlightedIndex, onMouseMove],\n );\n\n const handleMouseDown = (\n event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>,\n ) => {\n if (context.disableMouseDown) {\n event.preventDefault();\n } else if (onMouseDown) {\n onMouseDown(event);\n }\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onMouseMove: handleMouseMove,\n onMouseDown: handleMouseDown,\n };\n\n const ariaProps = {\n role: \"option\",\n ...(disabled && { \"aria-disabled\": true }),\n ...ariaPropsProp,\n };\n\n if (selected) {\n ariaProps[`${isMultiSelect ? \"aria-selected\" : \"aria-checked\"}`] = true;\n }\n\n return {\n item: item as Item,\n itemToString,\n itemProps: {\n \"data-option-index\": index,\n id,\n style,\n deselectable: isDeselectable || isMultiSelect,\n disabled,\n selected,\n highlighted,\n itemTextHighlightPattern,\n focusVisible: focusVisible && highlighted,\n tooltipText: item ? itemToString(item) : undefined,\n ...ariaProps,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\ntype VirtualizedListItemProps = Pick<\n ListChildComponentProps,\n \"index\" | \"style\" | \"data\"\n>;\n\nexport const useVirtualizedListItem = (props: VirtualizedListItemProps) => {\n const { index, data, style = {} } = props;\n // Filter out inline width added by `react-window` so that it can only be defined using css.\n const { width: _unusedWidth, height: itemHeight, ...restStyle } = style;\n\n return useListItem({\n index,\n itemHeight,\n style: restStyle,\n item: data[index],\n ariaProps: {\n \"aria-posinset\": index + 1,\n \"aria-setsize\": data.length,\n },\n });\n};\n\nconst validateProps = <Item>(props: IndexedListItemProps<Item>) => {\n const { index, item } = props;\n\n /* eslint-disable react-hooks/rules-of-hooks */\n useEffect(() => {\n if (item === undefined) {\n console.warn(\"useListItem needs `item`.\");\n }\n if (index === undefined) {\n console.warn(\"useListItem needs to know item's index.\");\n }\n }, [index, item]);\n /* eslint-enable react-hooks/rules-of-hooks */\n};\n"],"names":[],"mappings":";;;;AAqCO,SAAS,YACd,
|
|
1
|
+
{"version":3,"file":"useListItem.js","sources":["../src/list-deprecated/useListItem.ts"],"sourcesContent":["import { type MouseEvent, useCallback, useEffect, useMemo } from \"react\";\nimport type { ListChildComponentProps } from \"react-window\";\n\nimport type { ListItemProps } from \"./ListItem\";\nimport type { ListItemBaseProps } from \"./ListItemBase\";\n\nimport { useListItemContext } from \"./ListItemContext\";\nimport { useListStateContext } from \"./ListStateContext\";\n\ntype UseItemHookReturnType<Item> = {\n /**\n * Item data\n */\n item: Item;\n /**\n * Utility function for converting item data to a string\n */\n itemToString: (item: Item) => string;\n /**\n * Properties applied to a basic list item component\n */\n itemProps: ListItemBaseProps;\n};\n\nexport interface IndexedListItemProps<Item> extends ListItemProps<Item> {\n ariaProps?: {\n role?: string;\n \"aria-disabled\"?: string;\n \"aria-checked\"?: string;\n \"aria-posinset\"?: number;\n \"aria-setsize\"?: number;\n };\n\n index: number;\n itemHeight?: number | string;\n}\n\nexport function useListItem<Item>(\n props: IndexedListItemProps<Item>,\n): UseItemHookReturnType<Item> {\n validateProps(props);\n\n const context = useListItemContext<Item>();\n const { state, helpers } = useListStateContext();\n const { setHighlightedIndex, setFocusVisible, handleSelect } = helpers;\n const {\n focusVisible,\n highlightedIndex,\n selectedItem,\n isDeselectable,\n isDisabled,\n isMultiSelect,\n } = state;\n const {\n index,\n item,\n onClick,\n onMouseDown,\n onMouseMove,\n id = context.getItemId(index),\n itemHeight = context.getItemHeight?.(index),\n itemToString = context.itemToString,\n itemTextHighlightPattern = context.itemTextHighlightPattern,\n // An item can be disabled by\n // 1. Setting disabled attribute on the item object, or\n // 2. Passing a disabled prop directly or\n // 3. Using the disabled state in list context\n //TODO Not sure where disabled needs to be defined\n disabled = (item as Record<string, unknown>).disabled || isDisabled,\n ariaProps: ariaPropsProp,\n style: styleProp,\n ...restProps\n } = props;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: JSON.stringify is used to compare objects\n const style = useMemo(\n () => ({\n height: itemHeight,\n ...styleProp,\n }),\n [itemHeight, JSON.stringify(styleProp)],\n );\n\n const highlighted = index === highlightedIndex;\n const selected = isMultiSelect\n ? selectedItem.indexOf(item) !== -1\n : item === selectedItem;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n handleSelect(event, index, item);\n\n if (onClick) {\n onClick(event);\n }\n },\n [handleSelect, index, item, onClick],\n );\n\n const handleMouseMove = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n setHighlightedIndex(index);\n setFocusVisible(false);\n\n if (onMouseMove) {\n onMouseMove(event);\n }\n },\n [index, setFocusVisible, setHighlightedIndex, onMouseMove],\n );\n\n const handleMouseDown = (\n event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>,\n ) => {\n if (context.disableMouseDown) {\n event.preventDefault();\n } else if (onMouseDown) {\n onMouseDown(event);\n }\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onMouseMove: handleMouseMove,\n onMouseDown: handleMouseDown,\n };\n\n const ariaProps = {\n role: \"option\",\n ...(disabled && { \"aria-disabled\": true }),\n ...ariaPropsProp,\n };\n\n if (selected) {\n ariaProps[`${isMultiSelect ? \"aria-selected\" : \"aria-checked\"}`] = true;\n }\n\n return {\n item: item as Item,\n itemToString,\n itemProps: {\n \"data-option-index\": index,\n id,\n style,\n deselectable: isDeselectable || isMultiSelect,\n disabled,\n selected,\n highlighted,\n itemTextHighlightPattern,\n focusVisible: focusVisible && highlighted,\n tooltipText: item ? itemToString(item) : undefined,\n ...ariaProps,\n ...restProps,\n ...(disabled ? {} : eventHandlers),\n },\n };\n}\n\ntype VirtualizedListItemProps = Pick<\n ListChildComponentProps,\n \"index\" | \"style\" | \"data\"\n>;\n\nexport const useVirtualizedListItem = (props: VirtualizedListItemProps) => {\n const { index, data, style = {} } = props;\n // Filter out inline width added by `react-window` so that it can only be defined using css.\n const { width: _unusedWidth, height: itemHeight, ...restStyle } = style;\n\n return useListItem({\n index,\n itemHeight,\n style: restStyle,\n item: data[index],\n ariaProps: {\n \"aria-posinset\": index + 1,\n \"aria-setsize\": data.length,\n },\n });\n};\n\nconst validateProps = <Item>(props: IndexedListItemProps<Item>) => {\n const { index, item } = props;\n\n /* eslint-disable react-hooks/rules-of-hooks */\n useEffect(() => {\n if (item === undefined) {\n console.warn(\"useListItem needs `item`.\");\n }\n if (index === undefined) {\n console.warn(\"useListItem needs to know item's index.\");\n }\n }, [index, item]);\n /* eslint-enable react-hooks/rules-of-hooks */\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTypeSelect.js","sources":["../src/list-deprecated/useTypeSelect.js"],"sourcesContent":["import { useCallback, useRef } from \"react\";\nimport { escapeRegExp } from \"../utils\";\n\nimport { itemToString as defaultItemToString } from \"./itemToString\";\n\nconst TYPE_SELECT_TIMEOUT = 1500;\n\nexport function useTypeSelect(options) {\n const {\n getItemAtIndex,\n highlightedIndex,\n itemCount,\n itemToString = defaultItemToString,\n onTypeSelect,\n setFocusVisible,\n setHighlightedIndex,\n } = options;\n\n const getItemIndexForSearch = useCallback(\n (searchTerm, fromIndex) => {\n if (itemCount === 0) {\n return null;\n }\n\n let index = fromIndex || 0;\n while (index < itemCount) {\n const item = getItemAtIndex(index);\n const textValue = itemToString ? itemToString(item) : item;\n if (textValue?.match(new RegExp(`^${escapeRegExp(searchTerm)}`, \"i\"))) {\n return index;\n }\n\n index = index + 1;\n }\n\n return null;\n },\n [itemCount, itemToString, getItemAtIndex],\n );\n\n const state = useRef({\n search: \"\",\n timeout: null,\n }).current;\n\n const onKeyDownCapture = (event) => {\n const character = getStringForKey(event.key);\n if (!character || event.ctrlKey || event.metaKey) {\n return;\n }\n\n // Do not propagate the Spacebar event if it's meant to be part of the search.\n // When we time out, the search term becomes empty, hence the check on length.\n // Trimming is to account for the case of pressing the Spacebar more than once,\n // which should cycle through the selection/deselection of the focused item.\n if (character !== \" \" || state.search.trim().length > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // When typing same character sebsequently and *quickly*, we treat it as cyling through items\n // starting with that char instead of seaching for double character, because in most cases\n // there won't be any option having same characters at the beginning. This should be only\n // impacting beginning of the words because length of `character` would be 1.\n if (character !== state.search) {\n state.search += character;\n }\n\n // Prioritize items after the currently focused item, falling back to searching the whole list.\n // We want to cycle through choices when keep typing the same first character, hence the +1\n // condition. All subsequent characters should stay at the current item otherwise it will\n // always jumping around.\n let index = getItemIndexForSearch(\n state.search,\n state.search.length > 1 ? highlightedIndex : highlightedIndex + 1,\n );\n\n // If no key found, search from the top.\n if (index == null) {\n index = getItemIndexForSearch(state.search);\n }\n\n if (index != null) {\n setFocusVisible(true);\n // TODO: Maybe we can repurpose this setHighlightedIndex so that the user controls it's meant to set\n // hightlighted index when expanded v.s. selected item when collapsed\n setHighlightedIndex(index);\n if (onTypeSelect) {\n onTypeSelect(index);\n }\n }\n\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPE_SELECT_TIMEOUT);\n };\n\n return {\n // Using a capturing listener to catch the keydown event before\n // other hooks in order to handle the Spacebar event.\n onKeyDownCapture,\n };\n}\n\nfunction getStringForKey(key) {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n\n return \"\";\n}\n"],"names":["itemToString","defaultItemToString"],"mappings":";;;;;AAKA,MAAM,
|
|
1
|
+
{"version":3,"file":"useTypeSelect.js","sources":["../src/list-deprecated/useTypeSelect.js"],"sourcesContent":["import { useCallback, useRef } from \"react\";\nimport { escapeRegExp } from \"../utils\";\n\nimport { itemToString as defaultItemToString } from \"./itemToString\";\n\nconst TYPE_SELECT_TIMEOUT = 1500;\n\nexport function useTypeSelect(options) {\n const {\n getItemAtIndex,\n highlightedIndex,\n itemCount,\n itemToString = defaultItemToString,\n onTypeSelect,\n setFocusVisible,\n setHighlightedIndex,\n } = options;\n\n const getItemIndexForSearch = useCallback(\n (searchTerm, fromIndex) => {\n if (itemCount === 0) {\n return null;\n }\n\n let index = fromIndex || 0;\n while (index < itemCount) {\n const item = getItemAtIndex(index);\n const textValue = itemToString ? itemToString(item) : item;\n if (textValue?.match(new RegExp(`^${escapeRegExp(searchTerm)}`, \"i\"))) {\n return index;\n }\n\n index = index + 1;\n }\n\n return null;\n },\n [itemCount, itemToString, getItemAtIndex],\n );\n\n const state = useRef({\n search: \"\",\n timeout: null,\n }).current;\n\n const onKeyDownCapture = (event) => {\n const character = getStringForKey(event.key);\n if (!character || event.ctrlKey || event.metaKey) {\n return;\n }\n\n // Do not propagate the Spacebar event if it's meant to be part of the search.\n // When we time out, the search term becomes empty, hence the check on length.\n // Trimming is to account for the case of pressing the Spacebar more than once,\n // which should cycle through the selection/deselection of the focused item.\n if (character !== \" \" || state.search.trim().length > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n // When typing same character sebsequently and *quickly*, we treat it as cyling through items\n // starting with that char instead of seaching for double character, because in most cases\n // there won't be any option having same characters at the beginning. This should be only\n // impacting beginning of the words because length of `character` would be 1.\n if (character !== state.search) {\n state.search += character;\n }\n\n // Prioritize items after the currently focused item, falling back to searching the whole list.\n // We want to cycle through choices when keep typing the same first character, hence the +1\n // condition. All subsequent characters should stay at the current item otherwise it will\n // always jumping around.\n let index = getItemIndexForSearch(\n state.search,\n state.search.length > 1 ? highlightedIndex : highlightedIndex + 1,\n );\n\n // If no key found, search from the top.\n if (index == null) {\n index = getItemIndexForSearch(state.search);\n }\n\n if (index != null) {\n setFocusVisible(true);\n // TODO: Maybe we can repurpose this setHighlightedIndex so that the user controls it's meant to set\n // hightlighted index when expanded v.s. selected item when collapsed\n setHighlightedIndex(index);\n if (onTypeSelect) {\n onTypeSelect(index);\n }\n }\n\n clearTimeout(state.timeout);\n state.timeout = setTimeout(() => {\n state.search = \"\";\n }, TYPE_SELECT_TIMEOUT);\n };\n\n return {\n // Using a capturing listener to catch the keydown event before\n // other hooks in order to handle the Spacebar event.\n onKeyDownCapture,\n };\n}\n\nfunction getStringForKey(key) {\n // If the key is of length 1, it is an ASCII value.\n // Otherwise, if there are no ASCII characters in the key name,\n // it is a Unicode character.\n // See https://www.w3.org/TR/uievents-key/\n if (key.length === 1 || !/^[A-Z]/i.test(key)) {\n return key;\n }\n\n return \"\";\n}\n"],"names":["itemToString","defaultItemToString"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListItemNext.js","sources":["../src/list-next/ListItemNext.tsx"],"sourcesContent":["import { makePrefixer, useIdMemo } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type MouseEvent } from \"react\";\nimport listItemNextCss from \"./ListItemNext.css\";\nimport { useListItem } from \"./ListNextContext\";\n\nconst withBaseName = makePrefixer(\"saltListItemNext\");\n\nexport interface ListItemNextProps extends HTMLAttributes<HTMLLIElement> {\n /**\n * If true, the particular list item in list will be disabled.\n */\n disabled?: boolean;\n /**\n * List item id.\n */\n id?: string;\n /**\n * List item value.\n */\n value: string;\n}\n\nexport const ListItemNext = forwardRef<HTMLLIElement, ListItemNextProps>(\n function ListItemNext(\n {\n children,\n className,\n disabled: disabledProp,\n id: idProp,\n value,\n onClick,\n ...props\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-item-next\",\n css: listItemNextCss,\n window: targetWindow,\n });\n const id = useIdMemo(idProp);\n\n const listContext = useListItem();\n if (!listContext) return null;\n\n const {\n id: contextId,\n disabled: contextDisabled,\n select,\n isSelected,\n isFocused,\n highlight,\n isHighlighted,\n } = listContext;\n\n const itemId = `${contextId || \"listNext\"}--${id}`;\n const disabled = disabledProp || contextDisabled;\n const selected = isSelected(value);\n const focused = isFocused(value);\n const highlighted = isHighlighted(value);\n\n const handleClick = (event: MouseEvent<HTMLLIElement>) => {\n if (!disabled) {\n select(event);\n onClick?.(event);\n }\n };\n\n const handleMouseMove = (event: MouseEvent<HTMLLIElement>) => {\n if (!highlighted) {\n highlight(event);\n }\n };\n\n return (\n <li\n ref={ref}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"highlighted\")]: highlighted,\n [withBaseName(\"focused\")]: focused,\n },\n className,\n )}\n role=\"option\"\n aria-disabled={disabled || undefined}\n aria-selected={selected || undefined}\n id={itemId}\n data-value={value}\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n {...props}\n >\n {children}\n </li>\n );\n },\n);\n"],"names":["ListItemNext","listItemNextCss"],"mappings":";;;;;;;;;AAQA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA;AAiB7C,MAAM,
|
|
1
|
+
{"version":3,"file":"ListItemNext.js","sources":["../src/list-next/ListItemNext.tsx"],"sourcesContent":["import { makePrefixer, useIdMemo } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes, type MouseEvent } from \"react\";\nimport listItemNextCss from \"./ListItemNext.css\";\nimport { useListItem } from \"./ListNextContext\";\n\nconst withBaseName = makePrefixer(\"saltListItemNext\");\n\nexport interface ListItemNextProps extends HTMLAttributes<HTMLLIElement> {\n /**\n * If true, the particular list item in list will be disabled.\n */\n disabled?: boolean;\n /**\n * List item id.\n */\n id?: string;\n /**\n * List item value.\n */\n value: string;\n}\n\nexport const ListItemNext = forwardRef<HTMLLIElement, ListItemNextProps>(\n function ListItemNext(\n {\n children,\n className,\n disabled: disabledProp,\n id: idProp,\n value,\n onClick,\n ...props\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-list-item-next\",\n css: listItemNextCss,\n window: targetWindow,\n });\n const id = useIdMemo(idProp);\n\n const listContext = useListItem();\n if (!listContext) return null;\n\n const {\n id: contextId,\n disabled: contextDisabled,\n select,\n isSelected,\n isFocused,\n highlight,\n isHighlighted,\n } = listContext;\n\n const itemId = `${contextId || \"listNext\"}--${id}`;\n const disabled = disabledProp || contextDisabled;\n const selected = isSelected(value);\n const focused = isFocused(value);\n const highlighted = isHighlighted(value);\n\n const handleClick = (event: MouseEvent<HTMLLIElement>) => {\n if (!disabled) {\n select(event);\n onClick?.(event);\n }\n };\n\n const handleMouseMove = (event: MouseEvent<HTMLLIElement>) => {\n if (!highlighted) {\n highlight(event);\n }\n };\n\n return (\n <li\n ref={ref}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"highlighted\")]: highlighted,\n [withBaseName(\"focused\")]: focused,\n },\n className,\n )}\n role=\"option\"\n aria-disabled={disabled || undefined}\n aria-selected={selected || undefined}\n id={itemId}\n data-value={value}\n onClick={handleClick}\n onMouseMove={handleMouseMove}\n {...props}\n >\n {children}\n </li>\n );\n },\n);\n"],"names":["ListItemNext","listItemNextCss"],"mappings":";;;;;;;;;AAQA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA;AAiB7C,MAAM,YAAA,GAAe,UAAA;AAAA,EAC1B,SAASA,aAAAA,CACP;AAAA,IACE,QAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,EAAA,EAAI,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,eAAe,SAAA,EAAU;AAC/B,IAAA,wBAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,qBAAA;AAAA,MACR,GAAA,EAAKC,QAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,EAAA,GAAK,UAAU,MAAM,CAAA;AAE3B,IAAA,MAAM,cAAc,WAAA,EAAY;AAChC,IAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,IAAA,MAAM;AAAA,MACJ,EAAA,EAAI,SAAA;AAAA,MACJ,QAAA,EAAU,eAAA;AAAA,MACV,MAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,WAAA;AAEJ,IAAA,MAAM,MAAA,GAAS,CAAA,EAAG,SAAA,IAAa,UAAU,KAAK,EAAE,CAAA,CAAA;AAChD,IAAA,MAAM,WAAW,YAAA,IAAgB,eAAA;AACjC,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,MAAM,OAAA,GAAU,UAAU,KAAK,CAAA;AAC/B,IAAA,MAAM,WAAA,GAAc,cAAc,KAAK,CAAA;AAEvC,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAqC;AACxD,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AAAA,MACZ;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAqC;AAC5D,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,IAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,QAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG,WAAA;AAAA,YAC/B,CAAC,YAAA,CAAa,SAAS,CAAC,GAAG;AAAA,WAC7B;AAAA,UACA;AAAA,SACF;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,iBAAe,QAAA,IAAY,MAAA;AAAA,QAC3B,EAAA,EAAI,MAAA;AAAA,QACJ,YAAA,EAAY,KAAA;AAAA,QACZ,OAAA,EAAS,WAAA;AAAA,QACT,WAAA,EAAa,eAAA;AAAA,QACZ,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;;;;"}
|