@salt-ds/lab 1.0.0-alpha.70 → 1.0.0-alpha.72
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 +154 -0
- package/css/salt-lab.css +239 -346
- package/dist-cjs/app-header/AppHeader.css.js +1 -1
- package/dist-cjs/app-header/AppHeader.js +5 -5
- package/dist-cjs/app-header/AppHeader.js.map +1 -1
- package/dist-cjs/breadcrumbs/Breadcrumb.js +3 -3
- package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-cjs/breadcrumbs/Breadcrumbs.js +3 -3
- package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-cjs/button-bar/ButtonBar.js +4 -4
- package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
- package/dist-cjs/button-bar/OrderedButton.js +3 -3
- package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
- package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
- package/dist-cjs/calendar/Calendar.js +35 -10
- package/dist-cjs/calendar/Calendar.js.map +1 -1
- package/dist-cjs/calendar/CalendarGrid.js +2 -2
- package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
- package/dist-cjs/calendar/CalendarMonthHeader.js +2 -2
- package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
- package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
- package/dist-cjs/calendar/CalendarWeekHeader.js +3 -3
- package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
- 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 +3 -3
- package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js +1 -1
- package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-cjs/calendar/useCalendar.js +6 -0
- package/dist-cjs/calendar/useCalendar.js.map +1 -1
- package/dist-cjs/calendar/useCalendarSelection.js +185 -103
- 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.css.js +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuItem.js +3 -3
- package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-cjs/cascading-menu/CascadingMenuList.js +5 -5
- package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-cjs/color-chooser/AlphaInputField.js +2 -2
- package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
- package/dist-cjs/color-chooser/ColorChooser.css.js +1 -1
- package/dist-cjs/color-chooser/ColorChooser.js +38 -40
- package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
- package/dist-cjs/color-chooser/ColorPicker.css.js +1 -1
- package/dist-cjs/color-chooser/ColorPicker.js +3 -3
- package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
- package/dist-cjs/color-chooser/DictTabs.js +2 -2
- package/dist-cjs/color-chooser/HexInput.css.js +1 -1
- package/dist-cjs/color-chooser/HexInput.js +2 -2
- package/dist-cjs/color-chooser/HexInput.js.map +1 -1
- package/dist-cjs/color-chooser/RGBAInput.css.js +1 -1
- package/dist-cjs/color-chooser/RGBAInput.js +3 -3
- package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
- package/dist-cjs/color-chooser/RGBAInputField.js +2 -2
- package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
- package/dist-cjs/color-chooser/Swatch.css.js +1 -1
- package/dist-cjs/color-chooser/Swatches.js +3 -3
- package/dist-cjs/color-chooser/Swatches.js.map +1 -1
- package/dist-cjs/color-chooser/SwatchesPicker.js +3 -3
- package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-cjs/combo-box/ComboBox.js +6 -6
- package/dist-cjs/combo-box/ComboBox.js.map +1 -1
- package/dist-cjs/combo-box/useCombobox.js +1 -1
- package/dist-cjs/combo-box/useCombobox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js +3 -3
- package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
- package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js +2 -2
- package/dist-cjs/combo-box-deprecated/internal/useComboBox.js +1 -1
- package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -1
- package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
- package/dist-cjs/common-hooks/itemToString.js +1 -1
- package/dist-cjs/common-hooks/itemToString.js.map +1 -1
- package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
- package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-cjs/common-hooks/useCollectionItems.js +1 -1
- package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-cjs/common-hooks/useImperativeScrollingAPI.js +6 -10
- 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/useTypeahead.js.map +1 -1
- package/dist-cjs/common-hooks/utils/collection-item-utils.js +2 -2
- package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-cjs/contact-details/ContactActions.js +1 -1
- package/dist-cjs/contact-details/ContactActions.js.map +1 -1
- package/dist-cjs/contact-details/ContactAvatar.js +1 -1
- package/dist-cjs/contact-details/ContactDetails.js +4 -4
- package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
- package/dist-cjs/contact-details/ContactFavoriteToggle.js +1 -1
- package/dist-cjs/contact-details/ContactMetadata.js +2 -2
- 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 +1 -1
- package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactSecondaryInfo.js +1 -1
- package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/ContactTertiaryInfo.js +1 -1
- package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
- package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
- package/dist-cjs/content-status/ContentStatus.js +3 -3
- 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/DateInput.css.js +1 -1
- package/dist-cjs/date-input/DateInputRange.js.map +1 -1
- package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
- package/dist-cjs/date-picker/DatePicker.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerContext.js +10 -10
- package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlay.css.js +1 -1
- package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js +4 -0
- package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +3 -3
- package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js +1 -1
- package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerRangePanel.js +3 -3
- package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +3 -3
- package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js +1 -1
- package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-cjs/deck-item/DeckItem.js +2 -2
- package/dist-cjs/deck-item/DeckItem.js.map +1 -1
- package/dist-cjs/deck-layout/DeckLayout.js +3 -3
- package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
- package/dist-cjs/dropdown/Dropdown.js +1 -1
- package/dist-cjs/dropdown/Dropdown.js.map +1 -1
- package/dist-cjs/dropdown/DropdownBase.js +3 -3
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown/DropdownButton.js +2 -2
- package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
- package/dist-cjs/dropdown/useDropdown.js +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 +2 -2
- package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
- package/dist-cjs/form-field-legacy/FormFieldLegacy.css.js +1 -1
- package/dist-cjs/form-field-legacy/FormFieldLegacy.js +4 -4
- 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.css.js +1 -1
- package/dist-cjs/form-field-legacy/FormLabel.js +3 -3
- package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-cjs/form-group/FormGroup.js +2 -2
- package/dist-cjs/form-group/FormGroup.js.map +1 -1
- package/dist-cjs/formatted-input/FormattedInput.js +3 -3
- package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
- package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
- package/dist-cjs/index.js +105 -115
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/input-legacy/InputLegacy.css.js +1 -1
- package/dist-cjs/input-legacy/InputLegacy.js +3 -3
- package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
- package/dist-cjs/input-legacy/StaticInputAdornment.js +2 -2
- package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
- package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
- package/dist-cjs/list/Highlighter.js +2 -2
- package/dist-cjs/list/Highlighter.js.map +1 -1
- package/dist-cjs/list/List.css.js +1 -1
- package/dist-cjs/list/List.js +3 -3
- package/dist-cjs/list/List.js.map +1 -1
- package/dist-cjs/list/ListItem.css.js +1 -1
- package/dist-cjs/list/ListItem.js +2 -2
- package/dist-cjs/list/ListItem.js.map +1 -1
- package/dist-cjs/list/VirtualizedList.js +4 -4
- package/dist-cjs/list/VirtualizedList.js.map +1 -1
- package/dist-cjs/list/useList.js +2 -2
- package/dist-cjs/list/useList.js.map +1 -1
- package/dist-cjs/list/useListHeight.js +1 -1
- package/dist-cjs/list-deprecated/List.css.js +1 -1
- package/dist-cjs/list-deprecated/List.js +2 -2
- package/dist-cjs/list-deprecated/List.js.map +1 -1
- package/dist-cjs/list-deprecated/ListBase.js +15 -19
- package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItem.css.js +1 -1
- package/dist-cjs/list-deprecated/ListItem.js +1 -1
- package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
- package/dist-cjs/list-deprecated/ListItemBase.js +2 -2
- package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/DescendantContext.js +7 -4
- package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-cjs/list-deprecated/internal/Highlighter.js +2 -2
- package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-cjs/list-deprecated/itemToString.js +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-next/ListItemNext.css.js +1 -1
- package/dist-cjs/list-next/ListItemNext.js +2 -2
- package/dist-cjs/list-next/ListItemNext.js.map +1 -1
- package/dist-cjs/list-next/ListNext.css.js +1 -1
- package/dist-cjs/list-next/ListNext.js.map +1 -1
- package/dist-cjs/logo/Logo.js +2 -2
- package/dist-cjs/logo/Logo.js.map +1 -1
- package/dist-cjs/logo/LogoSeparator.css.js +1 -1
- package/dist-cjs/logo/LogoSeparator.js +2 -2
- package/dist-cjs/logo/LogoSeparator.js.map +1 -1
- package/dist-cjs/menu-button/MenuButton.js +1 -1
- package/dist-cjs/menu-button/MenuButton.js.map +1 -1
- package/dist-cjs/menu-button/MenuButtonTrigger.js +2 -2
- package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-cjs/metric/Metric.js +2 -2
- package/dist-cjs/metric/Metric.js.map +1 -1
- package/dist-cjs/metric/MetricContent.css.js +1 -1
- package/dist-cjs/metric/MetricContent.js +2 -2
- package/dist-cjs/metric/MetricContent.js.map +1 -1
- package/dist-cjs/metric/MetricHeader.js +2 -2
- package/dist-cjs/metric/MetricHeader.js.map +1 -1
- package/dist-cjs/number-input/NumberInput.css.js +1 -1
- package/dist-cjs/number-input/NumberInput.js +146 -79
- package/dist-cjs/number-input/NumberInput.js.map +1 -1
- package/dist-cjs/number-input/internal/useCaret.js +34 -0
- package/dist-cjs/number-input/internal/useCaret.js.map +1 -0
- package/dist-cjs/number-input/internal/utils.js +56 -14
- package/dist-cjs/number-input/internal/utils.js.map +1 -1
- package/dist-cjs/number-input/useNumberInput.js +34 -26
- 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.css.js +1 -1
- package/dist-cjs/query-input/QueryInput.js +3 -3
- package/dist-cjs/query-input/QueryInput.js.map +1 -1
- package/dist-cjs/query-input/internal/CategoryList.js +1 -1
- package/dist-cjs/query-input/internal/CategoryListItem.js +1 -1
- package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-cjs/query-input/internal/SearchList.js +3 -3
- package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
- package/dist-cjs/query-input/internal/ValueList.js +1 -1
- package/dist-cjs/query-input/internal/ValueSelector.js +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/useOverflowCollectionItems.js.map +1 -1
- package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
- package/dist-cjs/responsive/useWidth.js.map +1 -1
- package/dist-cjs/search-input/SearchInput.js +2 -2
- 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/StaticListItemContent.js.map +1 -1
- package/dist-cjs/system-status/SystemStatus.css.js +1 -1
- package/dist-cjs/system-status/SystemStatus.js +2 -2
- package/dist-cjs/system-status/SystemStatus.js.map +1 -1
- package/dist-cjs/system-status/SystemStatusActions.js +2 -2
- package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
- package/dist-cjs/system-status/SystemStatusContent.js +2 -2
- package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
- package/dist-cjs/tabs/Tab.css.js +1 -1
- package/dist-cjs/tabs/Tab.js.map +1 -1
- package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-cjs/tabs/TabActivationIndicator.js +2 -2
- package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
- package/dist-cjs/tabs/TabPanel.js.map +1 -1
- package/dist-cjs/tabs/Tabs.js +3 -3
- package/dist-cjs/tabs/Tabs.js.map +1 -1
- package/dist-cjs/tabs/Tabstrip.css.js +1 -1
- package/dist-cjs/tabs/Tabstrip.js +5 -5
- package/dist-cjs/tabs/Tabstrip.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/Draggable.css.js +1 -1
- package/dist-cjs/tabs/drag-drop/Draggable.js +2 -2
- package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
- package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js +2 -2
- package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-cjs/tabs/useActivationIndicator.js +1 -1
- package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
- package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
- package/dist-cjs/tabs/useTabstrip.js +1 -1
- package/dist-cjs/tabs/useTabstrip.js.map +1 -1
- package/dist-cjs/tabs-next/TabBar.css.js +1 -1
- package/dist-cjs/tabs-next/TabBar.js +2 -2
- package/dist-cjs/tabs-next/TabBar.js.map +1 -1
- package/dist-cjs/tabs-next/TabListNext.js +2 -2
- package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNext.css.js +1 -1
- package/dist-cjs/tabs-next/TabNext.js.map +1 -1
- package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-cjs/tabs-next/TabOverflowList.css.js +1 -1
- package/dist-cjs/tabs-next/TabOverflowList.js +1 -1
- package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-cjs/tabs-next/TabsNext.js +2 -2
- package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
- package/dist-cjs/tokenized-input/TokenizedInput.css.js +1 -1
- package/dist-cjs/tokenized-input/TokenizedInputBase.js +2 -2
- 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 +1 -1
- package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
- package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +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/useTokenizedInputNext.js.map +1 -1
- package/dist-cjs/toolbar/Toolbar.css.js +1 -1
- package/dist-cjs/toolbar/Toolbar.js +6 -6
- package/dist-cjs/toolbar/Toolbar.js.map +1 -1
- package/dist-cjs/toolbar/ToolbarButton.js +1 -1
- package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
- package/dist-cjs/toolbar/Tooltray.js +3 -3
- package/dist-cjs/toolbar/Tooltray.js.map +1 -1
- package/dist-cjs/toolbar/internal/renderToolbarItems.js +3 -3
- 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.css.js +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +5 -5
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.css.js +1 -1
- package/dist-cjs/toolbar/toolbar-field/ToolbarField.js +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 +4 -4
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-cjs/tree/TreeNode.js +2 -2
- package/dist-cjs/tree/TreeNode.js.map +1 -1
- package/dist-cjs/tree/useTree.js +2 -2
- package/dist-cjs/tree/useTree.js.map +1 -1
- package/dist-cjs/utils/useEventCallback.js +1 -1
- package/dist-cjs/utils/useEventCallback.js.map +1 -1
- package/dist-cjs/window/ElectronWindow.js +4 -4
- package/dist-cjs/window/ElectronWindow.js.map +1 -1
- package/dist-es/app-header/AppHeader.css.js +1 -1
- package/dist-es/app-header/AppHeader.js +5 -5
- package/dist-es/app-header/AppHeader.js.map +1 -1
- package/dist-es/breadcrumbs/Breadcrumb.js +3 -3
- package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-es/breadcrumbs/Breadcrumbs.js +3 -3
- package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
- package/dist-es/button-bar/ButtonBar.js +4 -4
- package/dist-es/button-bar/ButtonBar.js.map +1 -1
- package/dist-es/button-bar/OrderedButton.js +3 -3
- package/dist-es/button-bar/OrderedButton.js.map +1 -1
- package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
- package/dist-es/calendar/Calendar.js +35 -10
- package/dist-es/calendar/Calendar.js.map +1 -1
- package/dist-es/calendar/CalendarGrid.js +2 -2
- package/dist-es/calendar/CalendarGrid.js.map +1 -1
- package/dist-es/calendar/CalendarMonthHeader.js +2 -2
- package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
- package/dist-es/calendar/CalendarNavigation.js.map +1 -1
- package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
- package/dist-es/calendar/CalendarWeekHeader.js +3 -3
- package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
- package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
- 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 +3 -3
- package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js +1 -1
- package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
- package/dist-es/calendar/useCalendar.js +6 -0
- package/dist-es/calendar/useCalendar.js.map +1 -1
- package/dist-es/calendar/useCalendarSelection.js +186 -102
- 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.css.js +1 -1
- package/dist-es/cascading-menu/CascadingMenuItem.js +3 -3
- package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-es/cascading-menu/CascadingMenuList.js +5 -5
- package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-es/color-chooser/AlphaInputField.js +2 -2
- package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
- package/dist-es/color-chooser/ColorChooser.css.js +1 -1
- package/dist-es/color-chooser/ColorChooser.js +39 -41
- package/dist-es/color-chooser/ColorChooser.js.map +1 -1
- package/dist-es/color-chooser/ColorPicker.css.js +1 -1
- package/dist-es/color-chooser/ColorPicker.js +3 -3
- package/dist-es/color-chooser/ColorPicker.js.map +1 -1
- package/dist-es/color-chooser/DictTabs.js +2 -2
- package/dist-es/color-chooser/HexInput.css.js +1 -1
- package/dist-es/color-chooser/HexInput.js +2 -2
- package/dist-es/color-chooser/HexInput.js.map +1 -1
- package/dist-es/color-chooser/RGBAInput.css.js +1 -1
- package/dist-es/color-chooser/RGBAInput.js +3 -3
- package/dist-es/color-chooser/RGBAInput.js.map +1 -1
- package/dist-es/color-chooser/RGBAInputField.js +2 -2
- package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
- package/dist-es/color-chooser/Swatch.css.js +1 -1
- package/dist-es/color-chooser/Swatches.js +3 -3
- package/dist-es/color-chooser/Swatches.js.map +1 -1
- package/dist-es/color-chooser/SwatchesPicker.js +3 -3
- package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
- package/dist-es/combo-box/ComboBox.js +6 -6
- package/dist-es/combo-box/ComboBox.js.map +1 -1
- package/dist-es/combo-box/useCombobox.js +1 -1
- package/dist-es/combo-box/useCombobox.js.map +1 -1
- package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js +3 -3
- package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
- package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js +2 -2
- package/dist-es/combo-box-deprecated/internal/useComboBox.js +1 -1
- package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -1
- package/dist-es/common-hooks/collectionProvider.js.map +1 -1
- package/dist-es/common-hooks/itemToString.js +1 -1
- package/dist-es/common-hooks/itemToString.js.map +1 -1
- package/dist-es/common-hooks/selectionTypes.js.map +1 -1
- package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
- package/dist-es/common-hooks/useCollectionItems.js +1 -1
- package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
- package/dist-es/common-hooks/useImperativeScrollingAPI.js +6 -10
- 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/useTypeahead.js.map +1 -1
- package/dist-es/common-hooks/utils/collection-item-utils.js +2 -2
- package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
- package/dist-es/contact-details/ContactActions.js +1 -1
- package/dist-es/contact-details/ContactActions.js.map +1 -1
- package/dist-es/contact-details/ContactAvatar.js +1 -1
- package/dist-es/contact-details/ContactDetails.js +4 -4
- package/dist-es/contact-details/ContactDetails.js.map +1 -1
- package/dist-es/contact-details/ContactFavoriteToggle.js +1 -1
- package/dist-es/contact-details/ContactMetadata.js +2 -2
- 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 +1 -1
- package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactSecondaryInfo.js +1 -1
- package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
- package/dist-es/contact-details/ContactTertiaryInfo.js +1 -1
- package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
- package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
- package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
- package/dist-es/content-status/ContentStatus.js +3 -3
- 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/DateInput.css.js +1 -1
- package/dist-es/date-input/DateInputRange.js.map +1 -1
- package/dist-es/date-input/DateInputSingle.js.map +1 -1
- package/dist-es/date-picker/DatePicker.js.map +1 -1
- package/dist-es/date-picker/DatePickerActions.js.map +1 -1
- package/dist-es/date-picker/DatePickerContext.js +10 -10
- package/dist-es/date-picker/DatePickerContext.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlay.css.js +1 -1
- package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
- package/dist-es/date-picker/DatePickerOverlayProvider.js +4 -0
- package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
- package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
- package/dist-es/date-picker/DatePickerRangeGridPanel.js +3 -3
- package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js +1 -1
- package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerRangePanel.js +3 -3
- package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleGridPanel.js +3 -3
- package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js +1 -1
- package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
- package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
- package/dist-es/deck-item/DeckItem.js +2 -2
- package/dist-es/deck-item/DeckItem.js.map +1 -1
- package/dist-es/deck-layout/DeckLayout.js +3 -3
- package/dist-es/deck-layout/DeckLayout.js.map +1 -1
- package/dist-es/dropdown/Dropdown.js +1 -1
- package/dist-es/dropdown/Dropdown.js.map +1 -1
- package/dist-es/dropdown/DropdownBase.js +3 -3
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown/DropdownButton.js +2 -2
- package/dist-es/dropdown/DropdownButton.js.map +1 -1
- package/dist-es/dropdown/useDropdown.js +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 +2 -2
- package/dist-es/editable-label/EditableLabel.js.map +1 -1
- package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
- package/dist-es/form-field-legacy/FormFieldLegacy.css.js +1 -1
- package/dist-es/form-field-legacy/FormFieldLegacy.js +4 -4
- 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.css.js +1 -1
- package/dist-es/form-field-legacy/FormLabel.js +3 -3
- package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
- package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
- package/dist-es/form-group/FormGroup.js +2 -2
- package/dist-es/form-group/FormGroup.js.map +1 -1
- package/dist-es/formatted-input/FormattedInput.js +3 -3
- package/dist-es/formatted-input/FormattedInput.js.map +1 -1
- package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
- package/dist-es/index.js +52 -56
- package/dist-es/index.js.map +1 -1
- package/dist-es/input-legacy/InputLegacy.css.js +1 -1
- package/dist-es/input-legacy/InputLegacy.js +3 -3
- package/dist-es/input-legacy/InputLegacy.js.map +1 -1
- package/dist-es/input-legacy/StaticInputAdornment.js +2 -2
- package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
- package/dist-es/layer-layout/LayerLayout.js.map +1 -1
- package/dist-es/list/Highlighter.js +2 -2
- package/dist-es/list/Highlighter.js.map +1 -1
- package/dist-es/list/List.css.js +1 -1
- package/dist-es/list/List.js +3 -3
- package/dist-es/list/List.js.map +1 -1
- package/dist-es/list/ListItem.css.js +1 -1
- package/dist-es/list/ListItem.js +2 -2
- package/dist-es/list/ListItem.js.map +1 -1
- package/dist-es/list/VirtualizedList.js +4 -4
- package/dist-es/list/VirtualizedList.js.map +1 -1
- package/dist-es/list/useList.js +2 -2
- package/dist-es/list/useList.js.map +1 -1
- package/dist-es/list/useListHeight.js +1 -1
- package/dist-es/list-deprecated/List.css.js +1 -1
- package/dist-es/list-deprecated/List.js +2 -2
- package/dist-es/list-deprecated/List.js.map +1 -1
- package/dist-es/list-deprecated/ListBase.js +15 -19
- package/dist-es/list-deprecated/ListBase.js.map +1 -1
- package/dist-es/list-deprecated/ListItem.css.js +1 -1
- package/dist-es/list-deprecated/ListItem.js +1 -1
- package/dist-es/list-deprecated/ListItem.js.map +1 -1
- package/dist-es/list-deprecated/ListItemBase.js +2 -2
- package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-es/list-deprecated/internal/DescendantContext.js +7 -4
- package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
- package/dist-es/list-deprecated/internal/Highlighter.js +2 -2
- package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-es/list-deprecated/itemToString.js +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-next/ListItemNext.css.js +1 -1
- package/dist-es/list-next/ListItemNext.js +2 -2
- package/dist-es/list-next/ListItemNext.js.map +1 -1
- package/dist-es/list-next/ListNext.css.js +1 -1
- package/dist-es/list-next/ListNext.js.map +1 -1
- package/dist-es/logo/Logo.js +2 -2
- package/dist-es/logo/Logo.js.map +1 -1
- package/dist-es/logo/LogoSeparator.css.js +1 -1
- package/dist-es/logo/LogoSeparator.js +2 -2
- package/dist-es/logo/LogoSeparator.js.map +1 -1
- package/dist-es/menu-button/MenuButton.js +1 -1
- package/dist-es/menu-button/MenuButton.js.map +1 -1
- package/dist-es/menu-button/MenuButtonTrigger.js +2 -2
- package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
- package/dist-es/metric/Metric.js +2 -2
- package/dist-es/metric/Metric.js.map +1 -1
- package/dist-es/metric/MetricContent.css.js +1 -1
- package/dist-es/metric/MetricContent.js +2 -2
- package/dist-es/metric/MetricContent.js.map +1 -1
- package/dist-es/metric/MetricHeader.js +2 -2
- package/dist-es/metric/MetricHeader.js.map +1 -1
- package/dist-es/number-input/NumberInput.css.js +1 -1
- package/dist-es/number-input/NumberInput.js +149 -82
- package/dist-es/number-input/NumberInput.js.map +1 -1
- package/dist-es/number-input/internal/useCaret.js +32 -0
- package/dist-es/number-input/internal/useCaret.js.map +1 -0
- package/dist-es/number-input/internal/utils.js +52 -10
- package/dist-es/number-input/internal/utils.js.map +1 -1
- package/dist-es/number-input/useNumberInput.js +35 -27
- 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.css.js +1 -1
- package/dist-es/query-input/QueryInput.js +3 -3
- package/dist-es/query-input/QueryInput.js.map +1 -1
- package/dist-es/query-input/internal/CategoryList.js +1 -1
- package/dist-es/query-input/internal/CategoryListItem.js +1 -1
- package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-es/query-input/internal/SearchList.js +3 -3
- package/dist-es/query-input/internal/SearchList.js.map +1 -1
- package/dist-es/query-input/internal/ValueList.js +1 -1
- package/dist-es/query-input/internal/ValueSelector.js +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/useOverflowCollectionItems.js.map +1 -1
- package/dist-es/responsive/useOverflowLayout.js.map +1 -1
- package/dist-es/responsive/useWidth.js.map +1 -1
- package/dist-es/search-input/SearchInput.js +2 -2
- 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/StaticListItemContent.js.map +1 -1
- package/dist-es/system-status/SystemStatus.css.js +1 -1
- package/dist-es/system-status/SystemStatus.js +2 -2
- package/dist-es/system-status/SystemStatus.js.map +1 -1
- package/dist-es/system-status/SystemStatusActions.js +2 -2
- package/dist-es/system-status/SystemStatusActions.js.map +1 -1
- package/dist-es/system-status/SystemStatusContent.js +2 -2
- package/dist-es/system-status/SystemStatusContent.js.map +1 -1
- package/dist-es/tabs/Tab.css.js +1 -1
- package/dist-es/tabs/Tab.js.map +1 -1
- package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
- package/dist-es/tabs/TabActivationIndicator.js +2 -2
- package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
- package/dist-es/tabs/TabPanel.js.map +1 -1
- package/dist-es/tabs/Tabs.js +3 -3
- package/dist-es/tabs/Tabs.js.map +1 -1
- package/dist-es/tabs/Tabstrip.css.js +1 -1
- package/dist-es/tabs/Tabstrip.js +5 -5
- package/dist-es/tabs/Tabstrip.js.map +1 -1
- package/dist-es/tabs/drag-drop/Draggable.css.js +1 -1
- package/dist-es/tabs/drag-drop/Draggable.js +2 -2
- package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
- package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js +2 -2
- package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
- package/dist-es/tabs/useActivationIndicator.js +1 -1
- package/dist-es/tabs/useActivationIndicator.js.map +1 -1
- package/dist-es/tabs/useItemsWithIds.js.map +1 -1
- package/dist-es/tabs/useTabstrip.js +1 -1
- package/dist-es/tabs/useTabstrip.js.map +1 -1
- package/dist-es/tabs-next/TabBar.css.js +1 -1
- package/dist-es/tabs-next/TabBar.js +2 -2
- package/dist-es/tabs-next/TabBar.js.map +1 -1
- package/dist-es/tabs-next/TabListNext.js +2 -2
- package/dist-es/tabs-next/TabListNext.js.map +1 -1
- package/dist-es/tabs-next/TabNext.css.js +1 -1
- package/dist-es/tabs-next/TabNext.js.map +1 -1
- package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
- package/dist-es/tabs-next/TabOverflowList.css.js +1 -1
- package/dist-es/tabs-next/TabOverflowList.js +1 -1
- package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
- package/dist-es/tabs-next/TabsNext.js +2 -2
- package/dist-es/tabs-next/TabsNext.js.map +1 -1
- package/dist-es/tokenized-input/TokenizedInput.css.js +1 -1
- package/dist-es/tokenized-input/TokenizedInputBase.js +2 -2
- 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 +1 -1
- package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
- package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.js +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/useTokenizedInputNext.js.map +1 -1
- package/dist-es/toolbar/Toolbar.css.js +1 -1
- package/dist-es/toolbar/Toolbar.js +6 -6
- package/dist-es/toolbar/Toolbar.js.map +1 -1
- package/dist-es/toolbar/ToolbarButton.js +1 -1
- package/dist-es/toolbar/ToolbarButton.js.map +1 -1
- package/dist-es/toolbar/Tooltray.js +3 -3
- package/dist-es/toolbar/Tooltray.js.map +1 -1
- package/dist-es/toolbar/internal/renderToolbarItems.js +3 -3
- 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.css.js +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js +5 -5
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowSeparator.css.js +1 -1
- package/dist-es/toolbar/toolbar-field/ToolbarField.js +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 +4 -4
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-es/tree/TreeNode.js +2 -2
- package/dist-es/tree/TreeNode.js.map +1 -1
- package/dist-es/tree/useTree.js +2 -2
- package/dist-es/tree/useTree.js.map +1 -1
- package/dist-es/utils/useEventCallback.js +1 -1
- package/dist-es/utils/useEventCallback.js.map +1 -1
- package/dist-es/window/ElectronWindow.js +4 -4
- package/dist-es/window/ElectronWindow.js.map +1 -1
- package/dist-types/app-header/AppHeader.d.ts +1 -1
- package/dist-types/button-bar/ButtonBar.d.ts +4 -4
- package/dist-types/calendar/Calendar.d.ts +43 -7
- package/dist-types/calendar/CalendarGrid.d.ts +2 -2
- package/dist-types/calendar/CalendarMonthHeader.d.ts +1 -1
- package/dist-types/calendar/CalendarWeekHeader.d.ts +1 -1
- package/dist-types/calendar/index.d.ts +3 -3
- package/dist-types/calendar/useCalendar.d.ts +23 -24
- package/dist-types/calendar/useCalendarDay.d.ts +2 -1
- package/dist-types/calendar/useCalendarSelection.d.ts +154 -60
- package/dist-types/cascading-menu/internal/CascadingMenuAction.d.ts +2 -2
- package/dist-types/cascading-menu/internal/menuPositioning.d.ts +1 -1
- package/dist-types/cascading-menu/internal/stateUtils.d.ts +2 -2
- package/dist-types/cascading-menu/internal/useClickAway.d.ts +1 -1
- package/dist-types/cascading-menu/internal/useRefsManager.d.ts +1 -1
- package/dist-types/cascading-menu/internal/useStateReducer.d.ts +2 -2
- package/dist-types/cascading-menu/stateChangeTypes.d.ts +1 -1
- package/dist-types/color-chooser/Color.d.ts +1 -1
- package/dist-types/color-chooser/DictTabs.d.ts +1 -1
- package/dist-types/color-chooser/color-utils.d.ts +1 -1
- package/dist-types/color-chooser/index.d.ts +4 -4
- package/dist-types/combo-box/ComboBox.d.ts +4 -4
- package/dist-types/combo-box/useCombobox.d.ts +1 -1
- package/dist-types/combo-box-deprecated/ComboBoxDeprecated.d.ts +3 -3
- package/dist-types/combo-box-deprecated/filterHelpers.d.ts +1 -1
- package/dist-types/combo-box-deprecated/internal/DefaultComboBox.d.ts +1 -1
- package/dist-types/combo-box-deprecated/internal/MultiSelectComboBox.d.ts +1 -1
- package/dist-types/combo-box-deprecated/internal/useComboBox.d.ts +98 -97
- package/dist-types/combo-box-deprecated/internal/useMultiSelectComboBox.d.ts +214 -212
- package/dist-types/combo-box-deprecated/internal/usePopperStatus.d.ts +3 -3
- package/dist-types/common-hooks/collectionTypes.d.ts +3 -3
- package/dist-types/common-hooks/index.d.ts +2 -2
- package/dist-types/common-hooks/itemToString.d.ts +1 -1
- package/dist-types/common-hooks/navigationTypes.d.ts +4 -4
- package/dist-types/common-hooks/selectionTypes.d.ts +10 -10
- package/dist-types/common-hooks/useKeyboardNavigation.d.ts +1 -1
- package/dist-types/common-hooks/useSelection.d.ts +2 -2
- package/dist-types/common-hooks/utils/collection-item-utils.d.ts +2 -2
- package/dist-types/common-hooks/utils/filter-utils.d.ts +2 -2
- package/dist-types/contact-details/ContactAction.d.ts +1 -1
- package/dist-types/contact-details/ContactAvatar.d.ts +1 -1
- package/dist-types/contact-details/ContactDetails.d.ts +1 -1
- package/dist-types/contact-details/index.d.ts +1 -1
- package/dist-types/contact-details/internal/index.d.ts +1 -1
- package/dist-types/content-status/internal/StatusIndicator.d.ts +1 -2
- package/dist-types/date-input/DateInputRange.d.ts +2 -2
- package/dist-types/date-input/DateInputSingle.d.ts +1 -1
- package/dist-types/date-input/index.d.ts +1 -1
- package/dist-types/date-picker/DatePicker.d.ts +1 -1
- package/dist-types/date-picker/DatePickerActions.d.ts +1 -1
- package/dist-types/date-picker/DatePickerContext.d.ts +1 -1
- package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +1 -1
- package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +3 -4
- package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +2 -3
- package/dist-types/date-picker/DatePickerSinglePanel.d.ts +1 -1
- package/dist-types/date-picker/index.d.ts +3 -3
- package/dist-types/date-picker/useDatePicker.d.ts +1 -1
- package/dist-types/deck-layout/DeckLayout.d.ts +3 -3
- package/dist-types/dropdown/Dropdown.d.ts +3 -3
- package/dist-types/dropdown/DropdownBase.d.ts +1 -1
- package/dist-types/dropdown/dropdownTypes.d.ts +1 -1
- package/dist-types/dropdown/index.d.ts +1 -1
- package/dist-types/dropdown/useClickAway.d.ts +1 -1
- package/dist-types/dropdown/useDropdown.d.ts +1 -1
- package/dist-types/focus-manager/internal/findAllTabbableElements.d.ts +1 -1
- package/dist-types/form-field-legacy/FormFieldLegacy.d.ts +5 -5
- package/dist-types/form-field-legacy/NecessityIndicator.d.ts +1 -1
- package/dist-types/form-field-legacy/StatusIndicator.d.ts +1 -1
- package/dist-types/formatted-input/FormattedInput.d.ts +1 -1
- package/dist-types/index.d.ts +5 -6
- package/dist-types/input-legacy/StaticInputAdornment.d.ts +1 -1
- package/dist-types/layer-layout/LayerLayout.d.ts +1 -1
- package/dist-types/list/List.d.ts +3 -3
- package/dist-types/list/ListItem.d.ts +1 -1
- package/dist-types/list/VirtualizedList.d.ts +3 -3
- package/dist-types/list/index.d.ts +3 -3
- package/dist-types/list/listTypes.d.ts +2 -2
- package/dist-types/list/useList.d.ts +1 -1
- package/dist-types/list/useVirtualization.d.ts +1 -1
- package/dist-types/list-deprecated/List.d.ts +2 -2
- package/dist-types/list-deprecated/ListBase.d.ts +2 -2
- package/dist-types/list-deprecated/ListItem.d.ts +1 -1
- package/dist-types/list-deprecated/ListItemContext.d.ts +1 -1
- package/dist-types/list-deprecated/ListProps.d.ts +5 -5
- package/dist-types/list-deprecated/index.d.ts +3 -3
- package/dist-types/list-deprecated/internal/DescendantContext.d.ts +13 -6
- package/dist-types/list-deprecated/itemToString.d.ts +1 -1
- package/dist-types/list-deprecated/useListItem.d.ts +2 -2
- package/dist-types/list-next/index.d.ts +1 -1
- package/dist-types/localization-provider/LocalizationProvider.d.ts +3 -3
- package/dist-types/logo/Logo.d.ts +1 -1
- package/dist-types/logo/LogoSeparator.d.ts +1 -1
- package/dist-types/metric/index.d.ts +1 -1
- package/dist-types/metric/internal/index.d.ts +1 -1
- package/dist-types/number-input/NumberInput.d.ts +49 -27
- package/dist-types/number-input/index.d.ts +1 -1
- package/dist-types/number-input/internal/useCaret.d.ts +5 -0
- package/dist-types/number-input/internal/useInterval.d.ts +1 -1
- package/dist-types/number-input/internal/utils.d.ts +5 -5
- package/dist-types/number-input/useNumberInput.d.ts +11 -6
- package/dist-types/query-input/index.d.ts +1 -1
- package/dist-types/query-input/useQueryInput.d.ts +2 -2
- package/dist-types/responsive/OverflowReducer.d.ts +4 -4
- package/dist-types/responsive/index.d.ts +5 -5
- package/dist-types/responsive/overflowTypes.d.ts +20 -20
- package/dist-types/responsive/overflowUtils.d.ts +3 -3
- package/dist-types/responsive/useOverflowCollectionItems.d.ts +1 -1
- package/dist-types/responsive/useOverflowLayout.d.ts +1 -1
- package/dist-types/responsive/useResizeObserver.d.ts +2 -2
- package/dist-types/responsive/utils.d.ts +3 -3
- package/dist-types/system-status/index.d.ts +1 -1
- package/dist-types/tabs/Tab.d.ts +20 -19
- package/dist-types/tabs/Tabs.d.ts +1 -1
- package/dist-types/tabs/TabsTypes.d.ts +7 -7
- package/dist-types/tabs/drag-drop/Draggable.d.ts +2 -2
- package/dist-types/tabs/drag-drop/DropIndicator.d.ts +1 -1
- package/dist-types/tabs/drag-drop/drag-utils.d.ts +26 -22
- package/dist-types/tabs/drag-drop/dragDropTypes.d.ts +5 -5
- package/dist-types/tabs/drag-drop/useDragSpacers.d.ts +1 -1
- package/dist-types/tabs/index.d.ts +2 -2
- package/dist-types/tabs/useActivationIndicator.d.ts +1 -1
- package/dist-types/tabs/useEditableItem.d.ts +1 -1
- package/dist-types/tabs/useKeyboardNavigation.d.ts +1 -1
- package/dist-types/tabs/useSelection.d.ts +3 -3
- package/dist-types/tabs/useTabstrip.d.ts +1 -1
- package/dist-types/tabs-next/hooks/useCollection.d.ts +1 -1
- package/dist-types/tabs-next/index.d.ts +4 -4
- package/dist-types/tokenized-input/TokenizedInput.d.ts +2 -2
- package/dist-types/tokenized-input/TokenizedInputBase.d.ts +5 -5
- package/dist-types/tokenized-input/internal/InputPill.d.ts +1 -1
- package/dist-types/tokenized-input/internal/isPlainObject.d.ts +1 -1
- package/dist-types/tokenized-input/useTokenizedInput.d.ts +1 -1
- package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +2 -2
- package/dist-types/tokenized-input-next/internal/InputPill.d.ts +1 -1
- package/dist-types/toolbar/ToolbarButton.d.ts +3 -3
- package/dist-types/toolbar/ToolbarProps.d.ts +1 -1
- package/dist-types/toolbar/TooltrayProps.d.ts +2 -2
- package/dist-types/toolbar/index.d.ts +1 -1
- package/dist-types/toolbar/internal/ToolbarButtonRefsContext.d.ts +1 -1
- package/dist-types/toolbar/internal/renderTrayTools.d.ts +1 -1
- package/dist-types/tree/useTree.d.ts +1 -1
- package/dist-types/utils/forwardCallbackProps.d.ts +1 -1
- package/dist-types/utils/index.d.ts +1 -1
- package/dist-types/utils/isEmail.d.ts +1 -1
- package/dist-types/utils/useClickOutside.d.ts +1 -1
- package/dist-types/utils/useSlideSelection.d.ts +1 -1
- package/dist-types/window/ElectronWindow.d.ts +1 -1
- package/dist-types/window/WindowContext.d.ts +4 -4
- package/dist-types/window/index.d.ts +1 -1
- package/package.json +7 -6
- package/dist-cjs/carousel/Carousel.css.js +0 -6
- package/dist-cjs/carousel/Carousel.css.js.map +0 -1
- package/dist-cjs/carousel/Carousel.js +0 -62
- package/dist-cjs/carousel/Carousel.js.map +0 -1
- package/dist-cjs/carousel/CarouselContext.js +0 -62
- package/dist-cjs/carousel/CarouselContext.js.map +0 -1
- package/dist-cjs/carousel/CarouselControls.css.js +0 -6
- package/dist-cjs/carousel/CarouselControls.css.js.map +0 -1
- package/dist-cjs/carousel/CarouselControls.js +0 -122
- package/dist-cjs/carousel/CarouselControls.js.map +0 -1
- package/dist-cjs/carousel/CarouselReducer.js +0 -77
- package/dist-cjs/carousel/CarouselReducer.js.map +0 -1
- package/dist-cjs/carousel/CarouselSlide.css.js +0 -6
- package/dist-cjs/carousel/CarouselSlide.css.js.map +0 -1
- package/dist-cjs/carousel/CarouselSlide.js +0 -110
- package/dist-cjs/carousel/CarouselSlide.js.map +0 -1
- package/dist-cjs/carousel/CarouselSlider.css.js +0 -6
- package/dist-cjs/carousel/CarouselSlider.css.js.map +0 -1
- package/dist-cjs/carousel/CarouselSlider.js +0 -93
- package/dist-cjs/carousel/CarouselSlider.js.map +0 -1
- package/dist-es/carousel/Carousel.css.js +0 -4
- package/dist-es/carousel/Carousel.css.js.map +0 -1
- package/dist-es/carousel/Carousel.js +0 -60
- package/dist-es/carousel/Carousel.js.map +0 -1
- package/dist-es/carousel/CarouselContext.js +0 -58
- package/dist-es/carousel/CarouselContext.js.map +0 -1
- package/dist-es/carousel/CarouselControls.css.js +0 -4
- package/dist-es/carousel/CarouselControls.css.js.map +0 -1
- package/dist-es/carousel/CarouselControls.js +0 -120
- package/dist-es/carousel/CarouselControls.js.map +0 -1
- package/dist-es/carousel/CarouselReducer.js +0 -75
- package/dist-es/carousel/CarouselReducer.js.map +0 -1
- package/dist-es/carousel/CarouselSlide.css.js +0 -4
- package/dist-es/carousel/CarouselSlide.css.js.map +0 -1
- package/dist-es/carousel/CarouselSlide.js +0 -108
- package/dist-es/carousel/CarouselSlide.js.map +0 -1
- package/dist-es/carousel/CarouselSlider.css.js +0 -4
- package/dist-es/carousel/CarouselSlider.css.js.map +0 -1
- package/dist-es/carousel/CarouselSlider.js +0 -91
- package/dist-es/carousel/CarouselSlider.js.map +0 -1
- package/dist-types/carousel/Carousel.d.ts +0 -23
- package/dist-types/carousel/CarouselContext.d.ts +0 -11
- package/dist-types/carousel/CarouselControls.d.ts +0 -26
- package/dist-types/carousel/CarouselReducer.d.ts +0 -30
- package/dist-types/carousel/CarouselSlide.d.ts +0 -32
- package/dist-types/carousel/CarouselSlider.d.ts +0 -13
- package/dist-types/carousel/index.d.ts +0 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var react = require('react');
|
|
4
|
-
var Tab = require('./Tab.js');
|
|
5
4
|
var useDragDrop = require('./drag-drop/useDragDrop.js');
|
|
5
|
+
var Tab = require('./Tab.js');
|
|
6
6
|
var useEditableItem = require('./useEditableItem.js');
|
|
7
7
|
var useKeyboardNavigation = require('./useKeyboardNavigation.js');
|
|
8
8
|
var useSelection = require('./useSelection.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTabstrip.js","sources":["../src/tabs/useTabstrip.ts"],"sourcesContent":["import {\n type KeyboardEvent,\n type MouseEvent,\n type RefObject,\n createElement,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { OverflowCollectionHookResult } from \"../responsive\";\nimport { Tab } from \"./Tab\";\nimport {\n type DragHookResult,\n type dragStrategy,\n useDragDrop,\n} from \"./drag-drop\";\nimport {\n type EditableItemHookResult,\n type ExitEditModeHandler,\n useEditableItem,\n} from \"./useEditableItem\";\nimport {\n type ContainerNavigationProps,\n useKeyboardNavigation,\n} from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\n\nimport type {\n TabDescriptor,\n TabElement,\n composableTabProps,\n exitEditHandler,\n navigationProps,\n} from \"./TabsTypes\";\n\ninterface tabstripHookProps {\n activeTabIndex?: number | null;\n allowDragDrop?: boolean | dragStrategy;\n collectionHook: OverflowCollectionHookResult;\n defaultActiveTabIndex?: number;\n defaultTabs?: TabDescriptor[];\n editing?: boolean;\n enableAddTab: boolean;\n idRoot: string;\n innerContainerRef: RefObject<HTMLDivElement>;\n keyBoardActivation?: \"manual\" | \"automatic\";\n onActiveChange?: (tabIndex: number) => void;\n onCloseTab?: (indexPosition: number) => void;\n onEnterEditMode?: () => void;\n onExitEditMode?: ExitEditModeHandler;\n onMoveTab?: (fromIndex: number, toIndex: number) => void;\n orientation: \"horizontal\" | \"vertical\";\n promptForNewTabName?: boolean;\n tabs?: TabDescriptor[] | TabElement[];\n}\n\ninterface tabstripHookResult\n extends DragHookResult,\n Pick<EditableItemHookResult, \"editing\"> {\n activateTab: (tabIndex: number) => void;\n activeTabIndex: number | null;\n addTab: (indexPosition?: number) => void;\n closeTab: (indexPosition: number) => void;\n containerProps: ContainerNavigationProps;\n controlledSelection: boolean;\n highlightedIdx: number;\n focusVisible: number;\n focusIsWithinComponent: boolean;\n focusTab: (tabIndex: number, immediateFocus?: boolean) => void;\n navigationProps: navigationProps;\n tabProps: composableTabProps;\n}\n\nexport const useTabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop = false,\n collectionHook,\n defaultActiveTabIndex,\n editing: editingProp,\n idRoot,\n innerContainerRef,\n keyBoardActivation,\n onActiveChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMoveTab,\n orientation,\n promptForNewTabName,\n}: tabstripHookProps): tabstripHookResult & DragHookResult => {\n const lastSelection = useRef(\n activeTabIndexProp === null\n ? null\n : activeTabIndexProp || defaultActiveTabIndex || 0,\n );\n const pendingNewTab = useRef<string | null>(null);\n\n const overflowedItems = collectionHook.data.filter((item) => item.overflowed);\n\n const keyboardHook = useKeyboardNavigation({\n indexPositions: collectionHook.data,\n keyBoardActivation,\n orientation,\n selectedIndex: lastSelection.current,\n });\n\n const selectionHook = useSelection({\n defaultSelected: defaultActiveTabIndex,\n highlightedIdx: keyboardHook.highlightedIdx,\n onSelectionChange: onActiveChange,\n selected: activeTabIndexProp,\n });\n\n // We need this on reEntry for navigation hook to handle focus\n lastSelection.current = selectionHook.selected;\n\n const handleDrop = useCallback(\n (fromIndex: number, toIndex: number) => {\n onMoveTab?.(fromIndex, toIndex);\n if (toIndex === -1) {\n // nothing to do\n } else {\n if (selectionHook.selected === null) {\n // do thing\n } else if (selectionHook.selected === fromIndex) {\n selectionHook.activateTab(toIndex);\n } else if (\n fromIndex > selectionHook.selected &&\n toIndex <= selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected + 1);\n } else if (\n fromIndex < selectionHook.selected &&\n toIndex >= selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected - 1);\n }\n }\n },\n [onMoveTab, selectionHook],\n );\n\n const dragDropHook = useDragDrop({\n allowDragDrop,\n containerRef: innerContainerRef,\n extendedDropZone: overflowedItems.length > 0,\n onDrop: handleDrop,\n orientation: \"horizontal\",\n itemQuery: \".saltTab\",\n });\n\n const editableHook = useEditableItem({\n editing: editingProp,\n highlightedIdx: keyboardHook.highlightedIdx,\n indexPositions: collectionHook.data,\n onEnterEditMode,\n onExitEditMode,\n });\n\n const handleExitEditMode = useCallback<exitEditHandler>(\n (originalValue, editedValue, allowDeactivation, tabIndex) => {\n editableHook.onExitEditMode(\n originalValue,\n editedValue,\n allowDeactivation,\n tabIndex,\n );\n if (!allowDeactivation) {\n // this indicates that Enter or Esc key has been pressed, hence we\n // want to make sure keyboardHook treats this as a keyboard event\n // (and applies focusVisible). The last parameter here does that.\n keyboardHook.focusTab(tabIndex, false, true);\n }\n },\n [editableHook, keyboardHook],\n );\n\n const handleClick = useCallback(\n (evt: MouseEvent, tabIndex: number) => {\n // releasing the mouse at end of drag will trigger a click, ignore those\n if (!dragDropHook.isDragging) {\n keyboardHook.onClick(evt, tabIndex);\n selectionHook.onClick(evt, tabIndex);\n }\n },\n [dragDropHook.isDragging, keyboardHook, selectionHook],\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n keyboardHook.onKeyDown(evt);\n if (!evt.defaultPrevented) {\n selectionHook.onKeyDown(evt);\n }\n if (!evt.defaultPrevented) {\n editableHook.onKeyDown(evt);\n }\n },\n [keyboardHook, selectionHook, editableHook],\n );\n\n const navigationProps = {\n onFocus: keyboardHook.onFocus,\n onKeyDown: handleKeyDown,\n };\n\n const tabProps: composableTabProps = {\n onClick: handleClick,\n onEnterEditMode: editableHook.onEnterEditMode,\n onExitEditMode: handleExitEditMode,\n };\n\n const addTab = useCallback(\n // The -1 is to account for the AddTab button - we shouldn't assume this\n (indexPosition: number = collectionHook.data.length - 1) => {\n const tabId = `${idRoot}-${collectionHook.data.length}`;\n pendingNewTab.current = tabId;\n\n const overflowIndicator = collectionHook.data.find(\n (i) => i.isOverflowIndicator,\n );\n const newTabs = collectionHook.data.filter((item) =>\n item.label?.startsWith(\"New Tab\"),\n );\n const count = newTabs.length + 1;\n collectionHook.dispatch({\n type: \"add-child-item\",\n idRoot,\n element: createElement(Tab, {\n editable: true,\n label: `New Tab ${count}`,\n id: tabId,\n }),\n indexPosition: overflowIndicator ? indexPosition - 1 : indexPosition,\n });\n },\n [collectionHook, idRoot],\n );\n\n const selectNewTab = useCallback(\n (tabId: string) => {\n const tab = collectionHook.data.find((item) => item.id === tabId);\n if (tab) {\n selectionHook.activateTab(tab.index);\n if (promptForNewTabName) {\n // this will take care of focus, which will be set to the editable input\n editableHook.setEditing(true);\n } else {\n keyboardHook.focusTab(tab.index);\n }\n }\n },\n [\n collectionHook.data,\n editableHook,\n keyboardHook,\n promptForNewTabName,\n selectionHook,\n ],\n );\n\n const closeTab = useCallback(\n (indexPosition: number) => {\n if (!collectionHook.isControlled) {\n collectionHook.dispatch({\n type: \"remove-item\",\n indexPosition,\n });\n if (collectionHook.data.length > 1) {\n if (\n indexPosition === selectionHook.selected &&\n //TODO need to exclude overflow indicator, addButton\n indexPosition === collectionHook.data.length - 1\n ) {\n selectionHook.activateTab(indexPosition - 1);\n }\n // does this have to be here ?\n onCloseTab?.(indexPosition);\n if (\n selectionHook.selected !== null &&\n indexPosition < selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected - 1);\n }\n }\n } else {\n onCloseTab?.(indexPosition);\n }\n },\n [collectionHook, onCloseTab, selectionHook],\n );\n\n useEffect(() => {\n if (pendingNewTab.current) {\n const { current: tabId } = pendingNewTab;\n pendingNewTab.current = null;\n selectNewTab(tabId);\n }\n }, [collectionHook.data, promptForNewTabName, selectNewTab]);\n\n return {\n activateTab: selectionHook.activateTab,\n addTab,\n closeTab,\n containerProps: keyboardHook.containerProps,\n controlledSelection: selectionHook.isControlled,\n editing: editableHook.editing,\n focusTab: keyboardHook.focusTab,\n focusIsWithinComponent: keyboardHook.focusIsWithinComponent,\n focusVisible: keyboardHook.focusVisible,\n highlightedIdx: keyboardHook.highlightedIdx,\n activeTabIndex: selectionHook.selected,\n navigationProps,\n tabProps,\n ...dragDropHook,\n };\n};\n"],"names":["useRef","useKeyboardNavigation","useSelection","useCallback","useDragDrop","useEditableItem","createElement","Tab","useEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useTabstrip.js","sources":["../src/tabs/useTabstrip.ts"],"sourcesContent":["import {\n createElement,\n type KeyboardEvent,\n type MouseEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { OverflowCollectionHookResult } from \"../responsive\";\nimport {\n type DragHookResult,\n type dragStrategy,\n useDragDrop,\n} from \"./drag-drop\";\nimport { Tab } from \"./Tab\";\nimport type {\n composableTabProps,\n exitEditHandler,\n navigationProps,\n TabDescriptor,\n TabElement,\n} from \"./TabsTypes\";\nimport {\n type EditableItemHookResult,\n type ExitEditModeHandler,\n useEditableItem,\n} from \"./useEditableItem\";\nimport {\n type ContainerNavigationProps,\n useKeyboardNavigation,\n} from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\n\ninterface tabstripHookProps {\n activeTabIndex?: number | null;\n allowDragDrop?: boolean | dragStrategy;\n collectionHook: OverflowCollectionHookResult;\n defaultActiveTabIndex?: number;\n defaultTabs?: TabDescriptor[];\n editing?: boolean;\n enableAddTab: boolean;\n idRoot: string;\n innerContainerRef: RefObject<HTMLDivElement>;\n keyBoardActivation?: \"manual\" | \"automatic\";\n onActiveChange?: (tabIndex: number) => void;\n onCloseTab?: (indexPosition: number) => void;\n onEnterEditMode?: () => void;\n onExitEditMode?: ExitEditModeHandler;\n onMoveTab?: (fromIndex: number, toIndex: number) => void;\n orientation: \"horizontal\" | \"vertical\";\n promptForNewTabName?: boolean;\n tabs?: TabDescriptor[] | TabElement[];\n}\n\ninterface tabstripHookResult\n extends DragHookResult,\n Pick<EditableItemHookResult, \"editing\"> {\n activateTab: (tabIndex: number) => void;\n activeTabIndex: number | null;\n addTab: (indexPosition?: number) => void;\n closeTab: (indexPosition: number) => void;\n containerProps: ContainerNavigationProps;\n controlledSelection: boolean;\n highlightedIdx: number;\n focusVisible: number;\n focusIsWithinComponent: boolean;\n focusTab: (tabIndex: number, immediateFocus?: boolean) => void;\n navigationProps: navigationProps;\n tabProps: composableTabProps;\n}\n\nexport const useTabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop = false,\n collectionHook,\n defaultActiveTabIndex,\n editing: editingProp,\n idRoot,\n innerContainerRef,\n keyBoardActivation,\n onActiveChange,\n onCloseTab,\n onEnterEditMode,\n onExitEditMode,\n onMoveTab,\n orientation,\n promptForNewTabName,\n}: tabstripHookProps): tabstripHookResult & DragHookResult => {\n const lastSelection = useRef(\n activeTabIndexProp === null\n ? null\n : activeTabIndexProp || defaultActiveTabIndex || 0,\n );\n const pendingNewTab = useRef<string | null>(null);\n\n const overflowedItems = collectionHook.data.filter((item) => item.overflowed);\n\n const keyboardHook = useKeyboardNavigation({\n indexPositions: collectionHook.data,\n keyBoardActivation,\n orientation,\n selectedIndex: lastSelection.current,\n });\n\n const selectionHook = useSelection({\n defaultSelected: defaultActiveTabIndex,\n highlightedIdx: keyboardHook.highlightedIdx,\n onSelectionChange: onActiveChange,\n selected: activeTabIndexProp,\n });\n\n // We need this on reEntry for navigation hook to handle focus\n lastSelection.current = selectionHook.selected;\n\n const handleDrop = useCallback(\n (fromIndex: number, toIndex: number) => {\n onMoveTab?.(fromIndex, toIndex);\n if (toIndex === -1) {\n // nothing to do\n } else {\n if (selectionHook.selected === null) {\n // do thing\n } else if (selectionHook.selected === fromIndex) {\n selectionHook.activateTab(toIndex);\n } else if (\n fromIndex > selectionHook.selected &&\n toIndex <= selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected + 1);\n } else if (\n fromIndex < selectionHook.selected &&\n toIndex >= selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected - 1);\n }\n }\n },\n [onMoveTab, selectionHook],\n );\n\n const dragDropHook = useDragDrop({\n allowDragDrop,\n containerRef: innerContainerRef,\n extendedDropZone: overflowedItems.length > 0,\n onDrop: handleDrop,\n orientation: \"horizontal\",\n itemQuery: \".saltTab\",\n });\n\n const editableHook = useEditableItem({\n editing: editingProp,\n highlightedIdx: keyboardHook.highlightedIdx,\n indexPositions: collectionHook.data,\n onEnterEditMode,\n onExitEditMode,\n });\n\n const handleExitEditMode = useCallback<exitEditHandler>(\n (originalValue, editedValue, allowDeactivation, tabIndex) => {\n editableHook.onExitEditMode(\n originalValue,\n editedValue,\n allowDeactivation,\n tabIndex,\n );\n if (!allowDeactivation) {\n // this indicates that Enter or Esc key has been pressed, hence we\n // want to make sure keyboardHook treats this as a keyboard event\n // (and applies focusVisible). The last parameter here does that.\n keyboardHook.focusTab(tabIndex, false, true);\n }\n },\n [editableHook, keyboardHook],\n );\n\n const handleClick = useCallback(\n (evt: MouseEvent, tabIndex: number) => {\n // releasing the mouse at end of drag will trigger a click, ignore those\n if (!dragDropHook.isDragging) {\n keyboardHook.onClick(evt, tabIndex);\n selectionHook.onClick(evt, tabIndex);\n }\n },\n [dragDropHook.isDragging, keyboardHook, selectionHook],\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n keyboardHook.onKeyDown(evt);\n if (!evt.defaultPrevented) {\n selectionHook.onKeyDown(evt);\n }\n if (!evt.defaultPrevented) {\n editableHook.onKeyDown(evt);\n }\n },\n [keyboardHook, selectionHook, editableHook],\n );\n\n const navigationProps = {\n onFocus: keyboardHook.onFocus,\n onKeyDown: handleKeyDown,\n };\n\n const tabProps: composableTabProps = {\n onClick: handleClick,\n onEnterEditMode: editableHook.onEnterEditMode,\n onExitEditMode: handleExitEditMode,\n };\n\n const addTab = useCallback(\n // The -1 is to account for the AddTab button - we shouldn't assume this\n (indexPosition: number = collectionHook.data.length - 1) => {\n const tabId = `${idRoot}-${collectionHook.data.length}`;\n pendingNewTab.current = tabId;\n\n const overflowIndicator = collectionHook.data.find(\n (i) => i.isOverflowIndicator,\n );\n const newTabs = collectionHook.data.filter((item) =>\n item.label?.startsWith(\"New Tab\"),\n );\n const count = newTabs.length + 1;\n collectionHook.dispatch({\n type: \"add-child-item\",\n idRoot,\n element: createElement(Tab, {\n editable: true,\n label: `New Tab ${count}`,\n id: tabId,\n }),\n indexPosition: overflowIndicator ? indexPosition - 1 : indexPosition,\n });\n },\n [collectionHook, idRoot],\n );\n\n const selectNewTab = useCallback(\n (tabId: string) => {\n const tab = collectionHook.data.find((item) => item.id === tabId);\n if (tab) {\n selectionHook.activateTab(tab.index);\n if (promptForNewTabName) {\n // this will take care of focus, which will be set to the editable input\n editableHook.setEditing(true);\n } else {\n keyboardHook.focusTab(tab.index);\n }\n }\n },\n [\n collectionHook.data,\n editableHook,\n keyboardHook,\n promptForNewTabName,\n selectionHook,\n ],\n );\n\n const closeTab = useCallback(\n (indexPosition: number) => {\n if (!collectionHook.isControlled) {\n collectionHook.dispatch({\n type: \"remove-item\",\n indexPosition,\n });\n if (collectionHook.data.length > 1) {\n if (\n indexPosition === selectionHook.selected &&\n //TODO need to exclude overflow indicator, addButton\n indexPosition === collectionHook.data.length - 1\n ) {\n selectionHook.activateTab(indexPosition - 1);\n }\n // does this have to be here ?\n onCloseTab?.(indexPosition);\n if (\n selectionHook.selected !== null &&\n indexPosition < selectionHook.selected\n ) {\n selectionHook.activateTab(selectionHook.selected - 1);\n }\n }\n } else {\n onCloseTab?.(indexPosition);\n }\n },\n [collectionHook, onCloseTab, selectionHook],\n );\n\n useEffect(() => {\n if (pendingNewTab.current) {\n const { current: tabId } = pendingNewTab;\n pendingNewTab.current = null;\n selectNewTab(tabId);\n }\n }, [collectionHook.data, promptForNewTabName, selectNewTab]);\n\n return {\n activateTab: selectionHook.activateTab,\n addTab,\n closeTab,\n containerProps: keyboardHook.containerProps,\n controlledSelection: selectionHook.isControlled,\n editing: editableHook.editing,\n focusTab: keyboardHook.focusTab,\n focusIsWithinComponent: keyboardHook.focusIsWithinComponent,\n focusVisible: keyboardHook.focusVisible,\n highlightedIdx: keyboardHook.highlightedIdx,\n activeTabIndex: selectionHook.selected,\n navigationProps,\n tabProps,\n ...dragDropHook,\n };\n};\n"],"names":["useRef","useKeyboardNavigation","useSelection","useCallback","useDragDrop","useEditableItem","createElement","Tab","useEffect"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".saltTabBar {\n display: flex;\n align-items: center;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n position: relative;\n box-sizing: border-box;\n}\n\n.saltTabBar-divider::before {\n content: \"\";\n position: absolute;\n inset: auto 0 0 0;\n height: var(--salt-size-
|
|
3
|
+
var css_248z = ".saltTabBar {\n display: flex;\n align-items: center;\n flex-direction: row;\n gap: var(--salt-spacing-100);\n position: relative;\n box-sizing: border-box;\n}\n\n.saltTabBar-divider::before {\n content: \"\";\n position: absolute;\n inset: auto 0 0 0;\n height: var(--salt-size-fixed-100);\n border-bottom: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);\n}\n\n.saltTabBar-inset {\n padding-left: var(--salt-spacing-300);\n padding-right: var(--salt-spacing-300);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=TabBar.css.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var core = require('@salt-ds/core');
|
|
4
5
|
var styles = require('@salt-ds/styles');
|
|
5
6
|
var window = require('@salt-ds/window');
|
|
6
|
-
var react = require('react');
|
|
7
|
-
var core = require('@salt-ds/core');
|
|
8
7
|
var clsx = require('clsx');
|
|
8
|
+
var react = require('react');
|
|
9
9
|
var TabBar$1 = require('./TabBar.css.js');
|
|
10
10
|
|
|
11
11
|
const withBaseName = core.makePrefixer("saltTabBar");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabBar.js","sources":["../src/tabs-next/TabBar.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"TabBar.js","sources":["../src/tabs-next/TabBar.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type ComponentPropsWithRef, forwardRef } from \"react\";\nimport tabBarCss from \"./TabBar.css\";\n\nexport interface TabBarProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Styling variant with a bottom separator. Defaults to false\n */\n divider?: boolean;\n /**\n * Styling variant with left and right padding. Defaults to false\n */\n inset?: boolean;\n}\n\nconst withBaseName = makePrefixer(\"saltTabBar\");\n\nexport const TabBar = forwardRef<HTMLDivElement, TabBarProps>(\n function TabBar(props, ref) {\n const { className, children, divider, inset, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tab-bar\",\n css: tabBarCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"divider\")]: divider,\n [withBaseName(\"inset\")]: inset,\n },\n className,\n )}\n {...rest}\n ref={ref}\n >\n {children}\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","TabBar","useWindow","useComponentCssInjection","tabBarCss","jsx","clsx"],"mappings":";;;;;;;;;;AAkBA,MAAM,YAAA,GAAeA,kBAAa,YAAY,CAAA;AAEvC,MAAM,MAAS,GAAAC,gBAAA;AAAA,EACpB,SAASC,OAAO,CAAA,KAAA,EAAO,GAAK,EAAA;AAC1B,IAAA,MAAM,EAAE,SAAW,EAAA,QAAA,EAAU,SAAS,KAAO,EAAA,GAAG,MAAS,GAAA,KAAA;AAEzD,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,cAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IACE,uBAAAC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,SAAS,CAAC,GAAG,OAAA;AAAA,YAC3B,CAAC,YAAA,CAAa,OAAO,CAAC,GAAG;AAAA,WAC3B;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,IAAA;AAAA,QACJ,GAAA;AAAA,QAEC;AAAA;AAAA,KACH;AAAA;AAGN;;;;"}
|
|
@@ -6,11 +6,11 @@ var styles = require('@salt-ds/styles');
|
|
|
6
6
|
var window = require('@salt-ds/window');
|
|
7
7
|
var clsx = require('clsx');
|
|
8
8
|
var react = require('react');
|
|
9
|
+
var useOverflow = require('./hooks/useOverflow.js');
|
|
10
|
+
var useRestoreActiveTab = require('./hooks/useRestoreActiveTab.js');
|
|
9
11
|
var TabListNext$1 = require('./TabListNext.css.js');
|
|
10
12
|
var TabOverflowList = require('./TabOverflowList.js');
|
|
11
13
|
var TabsNextContext = require('./TabsNextContext.js');
|
|
12
|
-
var useOverflow = require('./hooks/useOverflow.js');
|
|
13
|
-
var useRestoreActiveTab = require('./hooks/useRestoreActiveTab.js');
|
|
14
14
|
|
|
15
15
|
const withBaseName = core.makePrefixer("saltTabListNext");
|
|
16
16
|
const TabListNext = react.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabListNext.js","sources":["../src/tabs-next/TabListNext.tsx"],"sourcesContent":["import { capitalize, makePrefixer, useForkRef, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n
|
|
1
|
+
{"version":3,"file":"TabListNext.js","sources":["../src/tabs-next/TabListNext.tsx"],"sourcesContent":["import { capitalize, makePrefixer, useForkRef, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n useRef,\n} from \"react\";\nimport { useOverflow } from \"./hooks/useOverflow\";\nimport { useRestoreActiveTab } from \"./hooks/useRestoreActiveTab\";\nimport tablistNextCss from \"./TabListNext.css\";\nimport { TabOverflowList } from \"./TabOverflowList\";\nimport { useTabsNext } from \"./TabsNextContext\";\n\nconst withBaseName = makePrefixer(\"saltTabListNext\");\n\nexport interface TabListNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * Styling active color variant. Defaults to \"primary\".\n */\n activeColor?: \"primary\" | \"secondary\" | \"tertiary\";\n /**\n * The appearance of the tabs. Defaults to \"bordered\".\n */\n appearance?: \"bordered\" | \"transparent\";\n}\n\nexport const TabListNext = forwardRef<HTMLDivElement, TabListNextProps>(\n function TabstripNext(props, ref) {\n const {\n appearance = \"bordered\",\n activeColor = \"primary\",\n \"aria-describedby\": ariaDescribedBy,\n children,\n className,\n onKeyDown,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tablist-next\",\n css: tablistNextCss,\n window: targetWindow,\n });\n\n const {\n selected,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n activeTab,\n menuOpen,\n setMenuOpen,\n removedActiveTabRef,\n } = useTabsNext();\n\n const tabstripRef = useRef<HTMLDivElement>(null);\n const handleRef = useForkRef(tabstripRef, ref);\n const overflowButtonRef = useRef<HTMLButtonElement>(null);\n\n const [visible, hidden, isMeasuring, realSelectedIndexRef] = useOverflow({\n container: tabstripRef,\n tabs: items,\n children,\n selected,\n overflowButton: overflowButtonRef,\n });\n\n useRestoreActiveTab({\n container: tabstripRef,\n tabs: items,\n realSelectedIndex: realSelectedIndexRef,\n removedActiveTabRef,\n });\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n const actionMap = {\n ArrowRight: getNext,\n ArrowLeft: getPrevious,\n Home: getFirst,\n End: getLast,\n ArrowUp: menuOpen ? getPrevious : undefined,\n ArrowDown: menuOpen ? getNext : undefined,\n };\n\n const action = actionMap[event.key as keyof typeof actionMap];\n\n if (action) {\n event.preventDefault();\n const activeTabId = activeTab.current?.id;\n if (!activeTabId) return;\n const nextItem = action(activeTabId);\n if (nextItem) {\n nextItem.element?.scrollIntoView({\n block: \"nearest\",\n inline: \"nearest\",\n });\n nextItem.element?.focus({ preventScroll: true });\n }\n }\n };\n\n const warningId = useId();\n\n return (\n <div\n role=\"tablist\"\n className={clsx(\n withBaseName(),\n withBaseName(appearance),\n withBaseName(\"horizontal\"),\n withBaseName(`activeColor${capitalize(activeColor)}`),\n className,\n )}\n data-ismeasuring={isMeasuring ? true : undefined}\n ref={handleRef}\n onKeyDown={handleKeyDown}\n aria-describedby={clsx(ariaDescribedBy, warningId)}\n {...rest}\n >\n {!isMeasuring && hidden.length > 0 && (\n <span id={warningId} className={withBaseName(\"overflowWarning\")}>\n Note: This tab list includes overflow; tab positions may be\n inaccurate or change when a tab is selected\n </span>\n )}\n {visible}\n <TabOverflowList\n isMeasuring={isMeasuring}\n buttonRef={overflowButtonRef}\n tabstripRef={tabstripRef}\n open={menuOpen}\n setOpen={setMenuOpen}\n >\n {hidden}\n </TabOverflowList>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","tablistNextCss","useTabsNext","useRef","useForkRef","useOverflow","useRestoreActiveTab","useId","jsxs","clsx","capitalize","jsx","TabOverflowList"],"mappings":";;;;;;;;;;;;;;AAgBA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAc5C,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,SAAS,YAAa,CAAA,KAAA,EAAO,GAAK,EAAA;AAChC,IAAM,MAAA;AAAA,MACJ,UAAa,GAAA,UAAA;AAAA,MACb,WAAc,GAAA,SAAA;AAAA,MACd,kBAAoB,EAAA,eAAA;AAAA,MACpB,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AACJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,aAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,QACEC,2BAAY,EAAA;AAEhB,IAAM,MAAA,WAAA,GAAcC,aAAuB,IAAI,CAAA;AAC/C,IAAM,MAAA,SAAA,GAAYC,eAAW,CAAA,WAAA,EAAa,GAAG,CAAA;AAC7C,IAAM,MAAA,iBAAA,GAAoBD,aAA0B,IAAI,CAAA;AAExD,IAAA,MAAM,CAAC,OAAS,EAAA,MAAA,EAAQ,WAAa,EAAA,oBAAoB,IAAIE,uBAAY,CAAA;AAAA,MACvE,SAAW,EAAA,WAAA;AAAA,MACX,IAAM,EAAA,KAAA;AAAA,MACN,QAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAgB,EAAA;AAAA,KACjB,CAAA;AAED,IAAoBC,uCAAA,CAAA;AAAA,MAClB,SAAW,EAAA,WAAA;AAAA,MACX,IAAM,EAAA,KAAA;AAAA,MACN,iBAAmB,EAAA,oBAAA;AAAA,MACnB;AAAA,KACD,CAAA;AAED,IAAM,MAAA,aAAA,GAAgB,CAAC,KAAyC,KAAA;AAhFpE,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAiFM,MAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA;AAEZ,MAAA,MAAM,SAAY,GAAA;AAAA,QAChB,UAAY,EAAA,OAAA;AAAA,QACZ,SAAW,EAAA,WAAA;AAAA,QACX,IAAM,EAAA,QAAA;AAAA,QACN,GAAK,EAAA,OAAA;AAAA,QACL,OAAA,EAAS,WAAW,WAAc,GAAA,MAAA;AAAA,QAClC,SAAA,EAAW,WAAW,OAAU,GAAA;AAAA,OAClC;AAEA,MAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,CAAM,GAA6B,CAAA;AAE5D,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAM,MAAA,WAAA,GAAA,CAAc,EAAU,GAAA,SAAA,CAAA,OAAA,KAAV,IAAmB,GAAA,MAAA,GAAA,EAAA,CAAA,EAAA;AACvC,QAAA,IAAI,CAAC,WAAa,EAAA;AAClB,QAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,QAAA,IAAI,QAAU,EAAA;AACZ,UAAS,CAAA,EAAA,GAAA,QAAA,CAAA,OAAA,KAAT,mBAAkB,cAAe,CAAA;AAAA,YAC/B,KAAO,EAAA,SAAA;AAAA,YACP,MAAQ,EAAA;AAAA,WACV,CAAA;AACA,UAAA,CAAA,EAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAM,CAAA,EAAE,eAAe,IAAK,EAAA,CAAA;AAAA;AAChD;AACF,KACF;AAEA,IAAA,MAAM,YAAYC,UAAM,EAAA;AAExB,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,SAAA;AAAA,QACL,SAAW,EAAAC,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,aAAa,UAAU,CAAA;AAAA,UACvB,aAAa,YAAY,CAAA;AAAA,UACzB,YAAa,CAAA,CAAA,WAAA,EAAcC,eAAW,CAAA,WAAW,CAAC,CAAE,CAAA,CAAA;AAAA,UACpD;AAAA,SACF;AAAA,QACA,kBAAA,EAAkB,cAAc,IAAO,GAAA,MAAA;AAAA,QACvC,GAAK,EAAA,SAAA;AAAA,QACL,SAAW,EAAA,aAAA;AAAA,QACX,kBAAA,EAAkBD,SAAK,CAAA,eAAA,EAAiB,SAAS,CAAA;AAAA,QAChD,GAAG,IAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,CAAC,WAAe,IAAA,MAAA,CAAO,MAAS,GAAA,CAAA,oBAC9BE,cAAA,CAAA,MAAA,EAAA,EAAK,EAAI,EAAA,SAAA,EAAW,SAAW,EAAA,YAAA,CAAa,iBAAiB,CAAA,EAAG,QAGjE,EAAA,yGAAA,EAAA,CAAA;AAAA,UAED,OAAA;AAAA,0BACDA,cAAA;AAAA,YAACC,+BAAA;AAAA,YAAA;AAAA,cACC,WAAA;AAAA,cACA,SAAW,EAAA,iBAAA;AAAA,cACX,WAAA;AAAA,cACA,IAAM,EAAA,QAAA;AAAA,cACN,OAAS,EAAA,WAAA;AAAA,cAER,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA;AAGN;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Class applied to root Tab element */\n.saltTabNext {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n -webkit-appearance: none;\n gap: var(--salt-spacing-100);\n border: none;\n border-left: var(--salt-size-
|
|
3
|
+
var css_248z = "/* Class applied to root Tab element */\n.saltTabNext {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n -webkit-appearance: none;\n gap: var(--salt-spacing-100);\n border: none;\n border-left: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) transparent;\n white-space: pre;\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n min-width: 4em;\n padding: var(--salt-spacing-50) var(--salt-spacing-100);\n position: relative;\n flex-shrink: 0;\n box-sizing: border-box;\n --tabNext-radius: var(--salt-palette-corner-weak, 0);\n border-radius: var(--tab-radius) var(--tab-radius) 0 0;\n overflow: hidden;\n\n cursor: var(--salt-cursor-hover);\n color: var(--salt-content-primary-foreground);\n font-weight: var(--salt-text-fontWeight);\n font-family: var(--salt-text-fontFamily);\n text-align: var(--salt-text-textAlign);\n letter-spacing: var(--salt-text-letterSpacing);\n line-height: var(--salt-text-lineHeight);\n font-size: var(--salt-text-fontSize);\n}\n\n.saltTabNext::after {\n content: \"\";\n position: absolute;\n left: calc(var(--salt-size-fixed-100) * -1);\n right: calc(var(--salt-size-fixed-100) * -1);\n height: var(--salt-size-indicator);\n}\n\n.saltTabListNext-bordered .saltTabNext::after {\n top: 0;\n}\n\n.saltTabListNext-transparent .saltTabNext::after {\n bottom: 0;\n}\n\n.saltTabNext:hover::after,\n.saltTabNext-focusVisible::after {\n background: var(--salt-navigable-indicator-hover);\n}\n\n.saltTabNext-disabled:hover::after,\n.saltTabNext-disabled.saltTabNext-focusVisible::after {\n background: none;\n}\n\n.saltTabNext-focusVisible {\n outline: var(--salt-focused-outline);\n}\n\n.saltTabListNext-bordered .saltTabNext.saltTabNext-selected {\n background: var(--saltTabListNext-activeColor);\n border-left: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);\n border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-secondary-borderColor);\n}\n\n.saltTabNext.saltTabNext-selected::after {\n background: var(--salt-navigable-accent-indicator-active);\n}\n\n.saltTabNext.saltTabNext-disabled {\n cursor: var(--salt-cursor-disabled);\n color: var(--salt-content-primary-foreground-disabled);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=TabNext.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabNext.js","sources":["../src/tabs-next/TabNext.tsx"],"sourcesContent":["import { makePrefixer, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEvent,\n type MouseEvent,\n type ReactElement,\n
|
|
1
|
+
{"version":3,"file":"TabNext.js","sources":["../src/tabs-next/TabNext.tsx"],"sourcesContent":["import { makePrefixer, useId } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type FocusEvent,\n forwardRef,\n type MouseEvent,\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport tabCss from \"./TabNext.css\";\nimport { TabNextContext } from \"./TabNextContext\";\nimport { useTabsNext } from \"./TabsNextContext\";\n\nconst withBaseName = makePrefixer(\"saltTabNext\");\n\nexport interface TabNextProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * If `true`, the tab will be disabled.\n */\n disabled?: boolean;\n /**\n * The value of the tab.\n */\n value: string;\n}\n\nexport const TabNext = forwardRef<HTMLDivElement, TabNextProps>(\n function Tab(props, ref): ReactElement<TabNextProps> {\n const {\n \"aria-labelledby\": ariaLabelledBy,\n children,\n className,\n disabled: disabledProp,\n onBlur,\n onMouseDown,\n onFocus,\n onFocusCapture,\n value,\n id: idProp,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tab-next\",\n css: tabCss,\n window: targetWindow,\n });\n\n const { selected, activeTab } = useTabsNext();\n\n const disabled = !!disabledProp;\n\n const id = useId(idProp);\n\n const wasMouseDown = useRef(false);\n const [focusVisible, setFocusVisible] = useState(false);\n const [focused, setFocused] = useState(false);\n\n const handleFocusCapture = (event: FocusEvent<HTMLDivElement>) => {\n onFocusCapture?.(event);\n if (value && id) {\n activeTab.current = { value, id };\n }\n };\n\n const handleFocus = (event: FocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n setFocused(true);\n\n if (\n !wasMouseDown.current &&\n event.target.getAttribute(\"role\") === \"tab\"\n ) {\n setFocusVisible(true);\n }\n\n wasMouseDown.current = false;\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n setFocused(false);\n setFocusVisible(false);\n };\n\n const handleMouseDown = (event: MouseEvent<HTMLDivElement>) => {\n onMouseDown?.(event);\n wasMouseDown.current = true;\n };\n\n const [actions, setActions] = useState<string[]>([]);\n\n const registerAction = useCallback((id: string) => {\n setActions((old) => old.concat(id));\n\n return () => {\n setActions((old) => old.filter((action) => action !== id));\n };\n }, []);\n\n const context = useMemo(\n () => ({\n tabId: id,\n selected: selected === value,\n focused,\n value,\n disabled,\n actions,\n registerAction,\n }),\n [id, selected, value, focused, disabled, actions, registerAction],\n );\n\n return (\n <TabNextContext.Provider value={context}>\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"selected\")]: selected === value,\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"focusVisible\")]: focusVisible,\n },\n className,\n )}\n data-overflowitem=\"true\"\n ref={ref}\n onMouseDown={handleMouseDown}\n onFocusCapture={handleFocusCapture}\n onFocus={handleFocus}\n onBlur={handleBlur}\n role=\"presentation\"\n {...rest}\n >\n {children}\n </div>\n </TabNextContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","tabCss","useTabsNext","useId","useRef","useState","useCallback","id","useMemo","jsx","TabNextContext","clsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabNextTrigger.js","sources":["../src/tabs-next/TabNextTrigger.tsx"],"sourcesContent":["import {\n makePrefixer,\n useForkRef,\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 type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type MouseEvent,\n
|
|
1
|
+
{"version":3,"file":"TabNextTrigger.js","sources":["../src/tabs-next/TabNextTrigger.tsx"],"sourcesContent":["import {\n makePrefixer,\n useForkRef,\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 type ComponentPropsWithoutRef,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n useRef,\n} from \"react\";\nimport { useTabNext } from \"./TabNextContext\";\nimport tabTriggerCss from \"./TabNextTrigger.css\";\nimport { useTabsNext } from \"./TabsNextContext\";\n\nexport interface TabNextTriggerProps\n extends ComponentPropsWithoutRef<\"button\"> {}\n\nconst withBaseName = makePrefixer(\"saltTabNextTrigger\");\n\nfunction getAriaDescription(count: number) {\n if (count < 1) {\n return undefined;\n }\n\n if (count === 1) {\n return \"1 action available\";\n }\n\n return `${count} actions available`;\n}\n\nexport const TabNextTrigger = forwardRef<\n HTMLButtonElement,\n TabNextTriggerProps\n>(function TabNextTrigger(props, ref) {\n const { children, id: idProp, onClick, onKeyDown, ...rest } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tab-next-trigger\",\n css: tabTriggerCss,\n window: targetWindow,\n });\n\n const { setSelected, registerTab, getPanelId } = useTabsNext();\n const { selected, value, focused, disabled, tabId, actions } = useTabNext();\n\n const tabRef = useRef<HTMLButtonElement>(null);\n\n const id = tabId;\n\n useIsomorphicLayoutEffect(() => {\n if (value && id && tabRef.current) {\n return registerTab({ id, value, element: tabRef.current });\n }\n }, [value, id, registerTab]);\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n setSelected(event, value);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n\n if (event.key === \"Enter\" || event.key === \" \") {\n setSelected(event, value);\n }\n };\n\n const handleRef = useForkRef<HTMLButtonElement>(tabRef, ref);\n const panelId = getPanelId(value);\n\n return (\n // biome-ignore lint/a11y/useValidAriaProps: aria-actions is a draft spec https://pr-preview.s3.amazonaws.com/w3c/aria/pull/1805.html#aria-actions\n <button\n aria-selected={selected}\n aria-disabled={disabled}\n aria-controls={panelId}\n aria-actions={clsx(actions) || undefined}\n aria-description={getAriaDescription(actions.length)}\n tabIndex={focused || selected ? undefined : -1}\n role=\"tab\"\n type=\"button\"\n onClick={!disabled ? handleClick : undefined}\n onKeyDown={!disabled ? handleKeyDown : undefined}\n className={withBaseName()}\n id={id}\n ref={handleRef}\n {...rest}\n >\n {children}\n </button>\n );\n});\n"],"names":["makePrefixer","forwardRef","TabNextTrigger","useWindow","useComponentCssInjection","tabTriggerCss","useTabsNext","useTabNext","useRef","useIsomorphicLayoutEffect","useForkRef","jsx","clsx"],"mappings":";;;;;;;;;;;;AAsBA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAEtD,SAAS,mBAAmB,KAAe,EAAA;AACzC,EAAA,IAAI,QAAQ,CAAG,EAAA;AACb,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,IAAI,UAAU,CAAG,EAAA;AACf,IAAO,OAAA,oBAAA;AAAA;AAGT,EAAA,OAAO,GAAG,KAAK,CAAA,kBAAA,CAAA;AACjB;AAEO,MAAM,cAAiB,GAAAC,gBAAA,CAG5B,SAASC,eAAAA,CAAe,OAAO,GAAK,EAAA;AACpC,EAAM,MAAA,EAAE,UAAU,EAAI,EAAA,MAAA,EAAQ,SAAS,SAAW,EAAA,GAAG,MAAS,GAAA,KAAA;AAE9D,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAAC,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,WAAA,EAAa,WAAa,EAAA,UAAA,KAAeC,2BAAY,EAAA;AAC7D,EAAM,MAAA,EAAE,UAAU,KAAO,EAAA,OAAA,EAAS,UAAU,KAAO,EAAA,OAAA,KAAYC,yBAAW,EAAA;AAE1E,EAAM,MAAA,MAAA,GAASC,aAA0B,IAAI,CAAA;AAE7C,EAAA,MAAM,EAAK,GAAA,KAAA;AAEX,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAI,IAAA,KAAA,IAAS,EAAM,IAAA,MAAA,CAAO,OAAS,EAAA;AACjC,MAAA,OAAO,YAAY,EAAE,EAAA,EAAI,OAAO,OAAS,EAAA,MAAA,CAAO,SAAS,CAAA;AAAA;AAC3D,GACC,EAAA,CAAC,KAAO,EAAA,EAAA,EAAI,WAAW,CAAC,CAAA;AAE3B,EAAM,MAAA,WAAA,GAAc,CAAC,KAAyC,KAAA;AAC5D,IAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,GAC1B;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,KAA4C,KAAA;AACjE,IAAY,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,KAAA,CAAA;AAEZ,IAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,OAAW,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AAC9C,MAAA,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA;AAC1B,GACF;AAEA,EAAM,MAAA,SAAA,GAAYC,eAA8B,CAAA,MAAA,EAAQ,GAAG,CAAA;AAC3D,EAAM,MAAA,OAAA,GAAU,WAAW,KAAK,CAAA;AAEhC,EAAA;AAAA;AAAA,oBAEEC,cAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,eAAe,EAAA,QAAA;AAAA,QACf,eAAe,EAAA,QAAA;AAAA,QACf,eAAe,EAAA,OAAA;AAAA,QACf,cAAA,EAAcC,SAAK,CAAA,OAAO,CAAK,IAAA,MAAA;AAAA,QAC/B,kBAAA,EAAkB,kBAAmB,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,QACnD,QAAA,EAAU,OAAW,IAAA,QAAA,GAAW,MAAY,GAAA,EAAA;AAAA,QAC5C,IAAK,EAAA,KAAA;AAAA,QACL,IAAK,EAAA,QAAA;AAAA,QACL,OAAA,EAAS,CAAC,QAAA,GAAW,WAAc,GAAA,MAAA;AAAA,QACnC,SAAA,EAAW,CAAC,QAAA,GAAW,aAAgB,GAAA,MAAA;AAAA,QACvC,WAAW,YAAa,EAAA;AAAA,QACxB,EAAA;AAAA,QACA,GAAK,EAAA,SAAA;AAAA,QACJ,GAAG,IAAA;AAAA,QAEH;AAAA;AAAA;AACH;AAEJ,CAAC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = ".saltTabOverflow {\n position: relative;\n}\n\n.saltTabOverflow-list {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-
|
|
3
|
+
var css_248z = ".saltTabOverflow {\n position: relative;\n}\n\n.saltTabOverflow-list {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: absolute;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n border-radius: var(--salt-palette-corner, 0);\n}\n\n.saltTabOverflow-listContainer {\n display: flex;\n flex-direction: column;\n gap: var(--salt-spacing-fixed-100);\n max-height: inherit;\n min-height: inherit;\n}\n\n.saltTabOverflow-list[data-hidden=\"true\"] {\n opacity: 0;\n pointer-events: none;\n /* Avoid causing page to overflow with the hidden elements */\n width: 1px;\n height: 1px;\n}\n\n.saltTabOverflow-list .saltTabNext {\n color: var(--salt-content-primary-foreground);\n background: var(--salt-selectable-background);\n font-size: var(--salt-text-fontSize);\n font-weight: var(--salt-text-fontWeight);\n min-height: calc(var(--salt-size-base) + var(--salt-spacing-100));\n padding-left: var(--salt-spacing-100);\n padding-right: var(--salt-spacing-100);\n display: flex;\n gap: var(--salt-spacing-100);\n position: relative;\n align-items: center;\n cursor: var(--salt-cursor-hover);\n box-sizing: border-box;\n flex-shrink: 0;\n justify-content: flex-start;\n}\n\n.saltTabOverflow-list .saltTabNext .saltTabNextTrigger {\n justify-content: start;\n}\n\n.saltTabOverflow-list .saltTabNext::after {\n display: none;\n}\n\n.saltTabOverflow-list .saltTabNext[aria-disabled=\"true\"] {\n color: var(--salt-content-primary-foreground-disabled);\n cursor: var(--salt-cursor-disabled);\n}\n\n.saltTabOverflow-list .saltTabNext-focusVisible {\n outline: var(--salt-focused-outline);\n outline-offset: calc(var(--salt-size-fixed-100) * -2);\n}\n\n.saltTabOverflow-list .saltTabNext:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltTabOverflow-list .saltTabNext:active {\n background: var(--salt-selectable-background-selected);\n box-shadow:\n 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected),\n 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=TabOverflowList.css.js.map
|
|
@@ -6,8 +6,8 @@ var core = require('@salt-ds/core');
|
|
|
6
6
|
var styles = require('@salt-ds/styles');
|
|
7
7
|
var window = require('@salt-ds/window');
|
|
8
8
|
var react = require('react');
|
|
9
|
-
var TabOverflowList$1 = require('./TabOverflowList.css.js');
|
|
10
9
|
var useFocusOutside = require('./hooks/useFocusOutside.js');
|
|
10
|
+
var TabOverflowList$1 = require('./TabOverflowList.css.js');
|
|
11
11
|
|
|
12
12
|
const withBaseName = core.makePrefixer("saltTabOverflow");
|
|
13
13
|
const TabOverflowList = react.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabOverflowList.js","sources":["../src/tabs-next/TabOverflowList.tsx"],"sourcesContent":["import {\n FloatingTree,\n flip,\n offset,\n size,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n Button,\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIcon,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n Children,\n type ComponentPropsWithoutRef,\n type Dispatch,\n type ReactNode,\n type Ref,\n type RefObject,\n type SetStateAction,\n
|
|
1
|
+
{"version":3,"file":"TabOverflowList.js","sources":["../src/tabs-next/TabOverflowList.tsx"],"sourcesContent":["import {\n FloatingTree,\n flip,\n offset,\n size,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport {\n Button,\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIcon,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n Children,\n type ComponentPropsWithoutRef,\n type Dispatch,\n forwardRef,\n type ReactNode,\n type Ref,\n type RefObject,\n type SetStateAction,\n useCallback,\n useRef,\n} from \"react\";\nimport { useFocusOutside } from \"./hooks/useFocusOutside\";\nimport tabOverflowListCss from \"./TabOverflowList.css\";\n\ninterface TabOverflowListProps extends ComponentPropsWithoutRef<\"button\"> {\n buttonRef?: Ref<HTMLButtonElement>;\n tabstripRef: RefObject<HTMLDivElement>;\n children?: ReactNode;\n isMeasuring?: boolean;\n open: boolean;\n setOpen: Dispatch<SetStateAction<boolean>>;\n}\n\nconst withBaseName = makePrefixer(\"saltTabOverflow\");\n\nexport const TabOverflowList = forwardRef<HTMLDivElement, TabOverflowListProps>(\n function TabOverflowList(props, ref) {\n const {\n buttonRef,\n tabstripRef,\n children,\n isMeasuring,\n open,\n setOpen,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tabs-next-overflow-list\",\n css: tabOverflowListCss,\n window: targetWindow,\n });\n\n const { OverflowIcon } = useIcon();\n\n const { refs, x, y, strategy, context } = useFloatingUI({\n open: open,\n onOpenChange(open, _, reason) {\n if (reason === \"escape-key\") {\n queueMicrotask(() => {\n const allTabs =\n tabstripRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"tab\"]:not([aria-hidden])',\n ) ?? [];\n const numberOfTabsInOverflow =\n listRef.current?.querySelectorAll<HTMLElement>('[role=\"tab\"]')\n .length ?? 0;\n\n allTabs[allTabs.length - numberOfTabsInOverflow - 1]?.focus({\n preventScroll: true,\n });\n });\n }\n\n setOpen(open);\n },\n placement: \"bottom-start\",\n middleware: [\n offset(1),\n size({\n apply({ elements, availableHeight }) {\n Object.assign(elements.floating.style, {\n maxHeight: `max(calc((var(--salt-size-base) + var(--salt-spacing-100)) * 5), calc(${availableHeight}px - var(--salt-spacing-100)))`,\n });\n },\n }),\n flip(),\n ],\n });\n\n const { getFloatingProps } = useInteractions([useDismiss(context)]);\n\n const rootRef = useRef<HTMLDivElement>(null);\n const handleRootRef = useForkRef(rootRef, ref);\n const listRef = useRef<HTMLDivElement>(null);\n const handleListRef = useForkRef<HTMLDivElement>(listRef, refs.setFloating);\n\n const handleFocusOutside = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n useFocusOutside(\n rootRef,\n handleFocusOutside,\n open,\n \"[data-floating-ui-portal]\",\n );\n\n const handleClick = () => {\n if (!open) {\n listRef.current\n ?.querySelectorAll<HTMLElement>('[role=\"tab\"]')[0]\n ?.focus({ preventScroll: true });\n } else {\n setOpen(false);\n }\n };\n\n const handleFocus = () => {\n setOpen(true);\n };\n\n const handleButtonRef = useForkRef<HTMLButtonElement>(\n buttonRef,\n refs.setReference,\n );\n\n const listId = useId();\n\n const childCount = Children.count(children);\n if (childCount === 0 && !isMeasuring) return null;\n\n return (\n <div className={withBaseName()} ref={handleRootRef} data-overflow>\n <Button\n data-overflowbutton\n tabIndex={-1}\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleClick}\n ref={handleButtonRef}\n aria-label={`Overflow menu. ${childCount} tabs hidden`}\n aria-expanded={open}\n aria-controls={listId}\n aria-hidden=\"true\"\n role=\"tab\"\n aria-haspopup\n {...rest}\n >\n <OverflowIcon aria-hidden />\n </Button>\n <FloatingTree>\n <div\n ref={handleListRef}\n {...getFloatingProps({\n onFocus: handleFocus,\n role: \"presentation\",\n })}\n className={withBaseName(\"list\")}\n data-hidden={!open}\n style={\n open\n ? { left: x ?? 0, top: y ?? 0, position: strategy }\n : undefined\n }\n id={listId}\n >\n <div className={withBaseName(\"listContainer\")}>{children}</div>\n </div>\n </FloatingTree>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","TabOverflowList","useWindow","useComponentCssInjection","tabOverflowListCss","useIcon","useFloatingUI","open","offset","size","flip","useInteractions","useDismiss","useRef","useForkRef","useCallback","useFocusOutside","useId","Children","jsxs","jsx","Button","FloatingTree"],"mappings":";;;;;;;;;;;AA0CA,MAAM,YAAA,GAAeA,kBAAa,iBAAiB,CAAA;AAE5C,MAAM,eAAkB,GAAAC,gBAAA;AAAA,EAC7B,SAASC,gBAAgB,CAAA,KAAA,EAAO,GAAK,EAAA;AACnC,IAAM,MAAA;AAAA,MACJ,SAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,8BAAA;AAAA,MACR,GAAK,EAAAC,iBAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA,EAAE,YAAa,EAAA,GAAIC,YAAQ,EAAA;AAEjC,IAAA,MAAM,EAAE,IAAM,EAAA,CAAA,EAAG,GAAG,QAAU,EAAA,OAAA,KAAYC,kBAAc,CAAA;AAAA,MACtD,IAAA;AAAA,MACA,YAAA,CAAaC,KAAM,EAAA,CAAA,EAAG,MAAQ,EAAA;AAC5B,QAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,UAAA,cAAA,CAAe,MAAM;AArE/B,YAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsEY,YAAM,MAAA,OAAA,GAAA,CAAA,CACJ,EAAY,GAAA,WAAA,CAAA,OAAA,KAAZ,IAAqB,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAA;AAAA,cACnB;AAAA,aAAA,KACG,EAAC;AACR,YAAA,MAAM,2BACJ,EAAQ,GAAA,OAAA,CAAA,OAAA,KAAR,IAAiB,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAA,CAA8B,gBAC5C,MAAU,KAAA,CAAA;AAEf,YAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,QAAQ,MAAS,GAAA,sBAAA,GAAyB,CAAC,CAAA,KAAnD,mBAAsD,KAAM,CAAA;AAAA,cAC1D,aAAe,EAAA;AAAA,aACjB,CAAA;AAAA,WACD,CAAA;AAAA;AAGH,QAAA,OAAA,CAAQA,KAAI,CAAA;AAAA,OACd;AAAA,MACA,SAAW,EAAA,cAAA;AAAA,MACX,UAAY,EAAA;AAAA,QACVC,eAAO,CAAC,CAAA;AAAA,QACRC,YAAK,CAAA;AAAA,UACH,KAAM,CAAA,EAAE,QAAU,EAAA,eAAA,EAAmB,EAAA;AACnC,YAAO,MAAA,CAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,KAAO,EAAA;AAAA,cACrC,SAAA,EAAW,yEAAyE,eAAe,CAAA,8BAAA;AAAA,aACpG,CAAA;AAAA;AACH,SACD,CAAA;AAAA,QACDC,YAAK;AAAA;AACP,KACD,CAAA;AAED,IAAM,MAAA,EAAE,kBAAqB,GAAAC,uBAAA,CAAgB,CAACC,kBAAW,CAAA,OAAO,CAAC,CAAC,CAAA;AAElE,IAAM,MAAA,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAC3C,IAAM,MAAA,aAAA,GAAgBC,eAAW,CAAA,OAAA,EAAS,GAAG,CAAA;AAC7C,IAAM,MAAA,OAAA,GAAUD,aAAuB,IAAI,CAAA;AAC3C,IAAA,MAAM,aAAgB,GAAAC,eAAA,CAA2B,OAAS,EAAA,IAAA,CAAK,WAAW,CAAA;AAE1E,IAAM,MAAA,kBAAA,GAAqBC,kBAAY,MAAM;AAC3C,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACf,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,IAAAC,+BAAA;AAAA,MACE,OAAA;AAAA,MACA,kBAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,cAAc,MAAM;AAtH9B,MAAA,IAAA,EAAA,EAAA,EAAA;AAuHM,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAQ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,OAAA,KAAR,mBACI,gBAA8B,CAAA,cAAA,CAAA,CAAgB,OADlD,IAEI,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA,CAAM,EAAE,aAAA,EAAe,IAAK,EAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACf,KACF;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,KACd;AAEA,IAAA,MAAM,eAAkB,GAAAF,eAAA;AAAA,MACtB,SAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAEA,IAAA,MAAM,SAASG,UAAM,EAAA;AAErB,IAAM,MAAA,UAAA,GAAaC,cAAS,CAAA,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,IAAI,UAAe,KAAA,CAAA,IAAK,CAAC,WAAA,EAAoB,OAAA,IAAA;AAE7C,IACE,uBAAAC,eAAA,CAAC,SAAI,SAAW,EAAA,YAAA,IAAgB,GAAK,EAAA,aAAA,EAAe,iBAAa,IAC/D,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA;AAAA,QAACC,WAAA;AAAA,QAAA;AAAA,UACC,qBAAmB,EAAA,IAAA;AAAA,UACnB,QAAU,EAAA,EAAA;AAAA,UACV,UAAW,EAAA,aAAA;AAAA,UACX,SAAU,EAAA,SAAA;AAAA,UACV,OAAS,EAAA,WAAA;AAAA,UACT,GAAK,EAAA,eAAA;AAAA,UACL,YAAA,EAAY,kBAAkB,UAAU,CAAA,YAAA,CAAA;AAAA,UACxC,eAAe,EAAA,IAAA;AAAA,UACf,eAAe,EAAA,MAAA;AAAA,UACf,aAAY,EAAA,MAAA;AAAA,UACZ,IAAK,EAAA,KAAA;AAAA,UACL,eAAa,EAAA,IAAA;AAAA,UACZ,GAAG,IAAA;AAAA,UAEJ,QAAA,kBAAAD,cAAA,CAAC,YAAa,EAAA,EAAA,aAAA,EAAW,IAAC,EAAA;AAAA;AAAA,OAC5B;AAAA,qCACCE,oBACC,EAAA,EAAA,QAAA,kBAAAF,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAK,EAAA,aAAA;AAAA,UACJ,GAAG,gBAAiB,CAAA;AAAA,YACnB,OAAS,EAAA,WAAA;AAAA,YACT,IAAM,EAAA;AAAA,WACP,CAAA;AAAA,UACD,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,UAC9B,eAAa,CAAC,IAAA;AAAA,UACd,KAAA,EACE,IACI,GAAA,EAAE,IAAM,EAAA,CAAA,IAAK,CAAG,EAAA,GAAA,EAAK,CAAK,IAAA,CAAA,EAAG,QAAU,EAAA,QAAA,EACvC,GAAA,MAAA;AAAA,UAEN,EAAI,EAAA,MAAA;AAAA,UAEJ,yCAAC,KAAI,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,eAAe,GAAI,QAAS,EAAA;AAAA;AAAA,OAE7D,EAAA;AAAA,KACF,EAAA,CAAA;AAAA;AAGN;;;;"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var react = require('react');
|
|
5
4
|
var core = require('@salt-ds/core');
|
|
6
5
|
var clsx = require('clsx');
|
|
7
|
-
var
|
|
6
|
+
var react = require('react');
|
|
8
7
|
var useCollection = require('./hooks/useCollection.js');
|
|
8
|
+
var TabsNextContext = require('./TabsNextContext.js');
|
|
9
9
|
|
|
10
10
|
const withBaseName = core.makePrefixer("saltTabsNext");
|
|
11
11
|
const TabsNext = react.forwardRef(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsNext.js","sources":["../src/tabs-next/TabsNext.tsx"],"sourcesContent":["import {\n type ComponentPropsWithoutRef,\n type ReactNode,\n type SyntheticEvent,\n
|
|
1
|
+
{"version":3,"file":"TabsNext.js","sources":["../src/tabs-next/TabsNext.tsx"],"sourcesContent":["import { makePrefixer, useControlled, useEventCallback } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n type SyntheticEvent,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useCollection } from \"./hooks/useCollection\";\nimport { type Item, TabsNextContext } from \"./TabsNextContext\";\n\nexport interface TabsNextProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n children?: ReactNode;\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: string;\n /**\n * The value. Use when the component is controlled.\n */\n value?: string;\n /**\n * Callback fired when the selection changes. The event will be null when selection is moved automatically.\n */\n onChange?: (event: SyntheticEvent | null, value: string) => void;\n}\n\nconst withBaseName = makePrefixer(\"saltTabsNext\");\n\nexport const TabsNext = forwardRef<HTMLDivElement, TabsNextProps>(\n function TabsNext(props, ref) {\n const { className, children, value, defaultValue, onChange, ...rest } =\n props;\n\n const [valueToTabIdMap, setValueToIdMap] = useState({\n map: new Map<string, string>(),\n });\n const [valueToPanelIdMap, setValueToPanelIdMap] = useState({\n map: new Map<string, string>(),\n });\n\n const {\n registerItem,\n item,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n } = useCollection({ wrap: true });\n\n const activeTab = useRef<Pick<Item, \"id\" | \"value\">>();\n const removedActiveTabRef = useRef<string | undefined>(undefined);\n\n const [menuOpen, setMenuOpen] = useState(false);\n\n const [selected, setSelectedState] = useControlled({\n controlled: value,\n default: defaultValue,\n name: \"TabListNext\",\n state: \"selected\",\n });\n\n const setSelected = useCallback(\n (event: SyntheticEvent | null, value: string) => {\n setMenuOpen(false);\n setSelectedState(value);\n onChange?.(event, value);\n },\n [onChange],\n );\n\n const registerTab = useEventCallback((item: Item) => {\n const cleanup = registerItem(item);\n setValueToIdMap(({ map }) => {\n map.set(item.value, item.id);\n return { map };\n });\n\n return () => {\n cleanup();\n setValueToIdMap(({ map }) => {\n map.delete(item.value);\n return { map };\n });\n\n if (activeTab.current?.value !== item.value) {\n return;\n }\n\n removedActiveTabRef.current = item.value;\n };\n });\n\n const registerPanel = useCallback((id: string, value: string) => {\n setValueToPanelIdMap(({ map }) => {\n map.set(value, id);\n return { map };\n });\n return () => {\n setValueToIdMap(({ map }) => {\n map.delete(value);\n return { map };\n });\n };\n }, []);\n\n const getPanelId = useCallback(\n (value: string) => {\n return valueToPanelIdMap.map.get(value);\n },\n [valueToPanelIdMap],\n );\n\n const getTabId = useCallback(\n (value: string) => {\n return valueToTabIdMap.map.get(value);\n },\n [valueToTabIdMap],\n );\n\n const context = useMemo(\n () => ({\n registerTab,\n registerPanel,\n getPanelId,\n getTabId,\n selected,\n setSelected,\n item,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n activeTab,\n menuOpen,\n setMenuOpen,\n removedActiveTabRef,\n }),\n [\n registerPanel,\n registerTab,\n getPanelId,\n getTabId,\n selected,\n setSelected,\n item,\n getNext,\n getPrevious,\n getFirst,\n getLast,\n items,\n menuOpen,\n ],\n );\n\n return (\n <TabsNextContext.Provider value={context}>\n <div className={clsx(withBaseName(), className)} ref={ref} {...rest}>\n {children}\n </div>\n </TabsNextContext.Provider>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","TabsNext","useState","useCollection","useRef","useControlled","useCallback","value","useEventCallback","item","useMemo","TabsNextContext","clsx"],"mappings":";;;;;;;;;AAgCA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAEzC,MAAM,QAAW,GAAAC,gBAAA;AAAA,EACtB,SAASC,SAAS,CAAA,KAAA,EAAO,GAAK,EAAA;AAC5B,IAAM,MAAA,EAAE,WAAW,QAAU,EAAA,KAAA,EAAO,cAAc,QAAU,EAAA,GAAG,MAC7D,GAAA,KAAA;AAEF,IAAA,MAAM,CAAC,eAAA,EAAiB,eAAe,CAAA,GAAIC,cAAS,CAAA;AAAA,MAClD,GAAA,sBAAS,GAAoB;AAAA,KAC9B,CAAA;AACD,IAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,cAAS,CAAA;AAAA,MACzD,GAAA,sBAAS,GAAoB;AAAA,KAC9B,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,YAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACE,GAAAC,2BAAA,CAAc,EAAE,IAAA,EAAM,MAAM,CAAA;AAEhC,IAAA,MAAM,YAAYC,YAAmC,EAAA;AACrD,IAAM,MAAA,mBAAA,GAAsBA,aAA2B,MAAS,CAAA;AAEhE,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,eAAS,KAAK,CAAA;AAE9C,IAAA,MAAM,CAAC,QAAA,EAAU,gBAAgB,CAAA,GAAIG,kBAAc,CAAA;AAAA,MACjD,UAAY,EAAA,KAAA;AAAA,MACZ,OAAS,EAAA,YAAA;AAAA,MACT,IAAM,EAAA,aAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACR,CAAA;AAED,IAAA,MAAM,WAAc,GAAAC,iBAAA;AAAA,MAClB,CAAC,OAA8BC,MAAkB,KAAA;AAC/C,QAAA,WAAA,CAAY,KAAK,CAAA;AACjB,QAAA,gBAAA,CAAiBA,MAAK,CAAA;AACtB,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAOA,EAAAA,MAAAA,CAAAA;AAAA,OACpB;AAAA,MACA,CAAC,QAAQ;AAAA,KACX;AAEA,IAAM,MAAA,WAAA,GAAcC,qBAAiB,CAAA,CAACC,KAAe,KAAA;AACnD,MAAM,MAAA,OAAA,GAAU,aAAaA,KAAI,CAAA;AACjC,MAAgB,eAAA,CAAA,CAAC,EAAE,GAAA,EAAU,KAAA;AAC3B,QAAA,GAAA,CAAI,GAAIA,CAAAA,KAAAA,CAAK,KAAOA,EAAAA,KAAAA,CAAK,EAAE,CAAA;AAC3B,QAAA,OAAO,EAAE,GAAI,EAAA;AAAA,OACd,CAAA;AAED,MAAA,OAAO,MAAM;AApFnB,QAAA,IAAA,EAAA;AAqFQ,QAAQ,OAAA,EAAA;AACR,QAAgB,eAAA,CAAA,CAAC,EAAE,GAAA,EAAU,KAAA;AAC3B,UAAI,GAAA,CAAA,MAAA,CAAOA,MAAK,KAAK,CAAA;AACrB,UAAA,OAAO,EAAE,GAAI,EAAA;AAAA,SACd,CAAA;AAED,QAAA,IAAA,CAAA,CAAI,EAAU,GAAA,SAAA,CAAA,OAAA,KAAV,IAAmB,GAAA,MAAA,GAAA,EAAA,CAAA,KAAA,MAAUA,MAAK,KAAO,EAAA;AAC3C,UAAA;AAAA;AAGF,QAAA,mBAAA,CAAoB,UAAUA,KAAK,CAAA,KAAA;AAAA,OACrC;AAAA,KACD,CAAA;AAED,IAAA,MAAM,aAAgB,GAAAH,iBAAA,CAAY,CAAC,EAAA,EAAYC,MAAkB,KAAA;AAC/D,MAAqB,oBAAA,CAAA,CAAC,EAAE,GAAA,EAAU,KAAA;AAChC,QAAI,GAAA,CAAA,GAAA,CAAIA,QAAO,EAAE,CAAA;AACjB,QAAA,OAAO,EAAE,GAAI,EAAA;AAAA,OACd,CAAA;AACD,MAAA,OAAO,MAAM;AACX,QAAgB,eAAA,CAAA,CAAC,EAAE,GAAA,EAAU,KAAA;AAC3B,UAAA,GAAA,CAAI,OAAOA,MAAK,CAAA;AAChB,UAAA,OAAO,EAAE,GAAI,EAAA;AAAA,SACd,CAAA;AAAA,OACH;AAAA,KACF,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,UAAa,GAAAD,iBAAA;AAAA,MACjB,CAACC,MAAkB,KAAA;AACjB,QAAO,OAAA,iBAAA,CAAkB,GAAI,CAAA,GAAA,CAAIA,MAAK,CAAA;AAAA,OACxC;AAAA,MACA,CAAC,iBAAiB;AAAA,KACpB;AAEA,IAAA,MAAM,QAAW,GAAAD,iBAAA;AAAA,MACf,CAACC,MAAkB,KAAA;AACjB,QAAO,OAAA,eAAA,CAAgB,GAAI,CAAA,GAAA,CAAIA,MAAK,CAAA;AAAA,OACtC;AAAA,MACA,CAAC,eAAe;AAAA,KAClB;AAEA,IAAA,MAAM,OAAU,GAAAG,aAAA;AAAA,MACd,OAAO;AAAA,QACL,WAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF,CAAA;AAAA,MACA;AAAA,QACE,aAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,WAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA;AAAA,QACA;AAAA;AACF,KACF;AAEA,IAAA,sCACGC,+BAAgB,CAAA,QAAA,EAAhB,EAAyB,KAAO,EAAA,OAAA,EAC/B,yCAAC,KAAI,EAAA,EAAA,SAAA,EAAWC,SAAK,CAAA,YAAA,IAAgB,SAAS,CAAA,EAAG,KAAW,GAAG,IAAA,EAC5D,UACH,CACF,EAAA,CAAA;AAAA;AAGN;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var css_248z = "/* Styles applied to root component (TokenizedInput) */\n.salt-density-medium {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n.salt-density-touch {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 2px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-low {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-high {\n --tokenizedInput-gutter-size: calc(var(--salt-size-basis-unit) - 1px);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n\n.saltTokenizedInput {\n --tokenizedInput-spacing: var(--salt-size-unit);\n --tokenizedInput-height: var(--salt-size-base);\n}\n\n.saltTokenizedInput {\n display: inline-flex;\n justify-content: space-between;\n min-width: 8em; /* same min-width as Input component */\n width: 100%;\n}\n\n/* Styles applied to root component on hover state */\n.saltTokenizedInput:hover {\n cursor: var(--salt-
|
|
3
|
+
var css_248z = "/* Styles applied to root component (TokenizedInput) */\n.salt-density-medium {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n.salt-density-touch {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 2px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-low {\n --tokenizedInput-gutter-size: var(--salt-size-basis-unit);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: calc(var(--salt-size-unit) / 2);\n}\n\n.salt-density-high {\n --tokenizedInput-gutter-size: calc(var(--salt-size-basis-unit) - 1px);\n --tokenizedInput-pill-group-y-padding: calc(var(--salt-size-unit) / 2 + 1px);\n --tokenizedInput-last-pill-margin: var(--salt-size-unit);\n}\n\n.saltTokenizedInput {\n --tokenizedInput-spacing: var(--salt-size-unit);\n --tokenizedInput-height: var(--salt-size-base);\n}\n\n.saltTokenizedInput {\n display: inline-flex;\n justify-content: space-between;\n min-width: 8em; /* same min-width as Input component */\n width: 100%;\n}\n\n/* Styles applied to root component on hover state */\n.saltTokenizedInput:hover {\n cursor: var(--salt-cursor-text);\n}\n\n/* Styles applied to root component on hover state if `disabled={true}` */\n.saltTokenizedInput.saltTokenizedInput-disabled:hover {\n cursor: var(--salt-cursor-disabled);\n}\n\n/* Styles applied to container of pills */\n.saltTokenizedInput-pillGroup {\n align-content: flex-start;\n display: flex;\n flex: 1;\n flex-wrap: wrap;\n min-height: var(--tokenizedInput-height);\n padding: var(--tokenizedInput-pill-group-y-padding) var(--tokenizedInput-spacing);\n box-sizing: border-box;\n}\n\n/* Styles applied to root component if `disabled={true}` */\n.saltTokenizedInput-disabled {\n cursor: var(--salt-cursor-disabled);\n opacity: var(--saltTokenizedInput-disabled-opacity, var(--salt-palette-opacity-disabled));\n}\n\n/* Styles applied to root component if `focused={true}` */\n.saltTokenizedInput-focused {\n outline: var(--saltTokenizedInput-focused-outline, var(--salt-focused-outline));\n}\n\n/* Styles applied to root component if `expanded={true}` */\n.saltTokenizedInput-expanded {\n height: auto;\n\n /* Pill CSS API */\n --saltPill-maxWidth: calc(100px - var(--salt-size-unit));\n}\n\n/* Styles applied to Input and Clear Button if `expanded={false}` */\n.saltTokenizedInput-hidden,\n.saltTokenizedInput-input.saltTokenizedInput-hidden,\n.saltButton.saltTokenizedInput-hidden {\n display: none;\n}\n\n/**\n Styles applied to inner Input component\n Used to be .inputRoot\n**/\n.saltInputLegacy.saltTokenizedInput-input {\n align-items: flex-start;\n cursor: var(--salt-cursor-text);\n flex-grow: 1;\n padding: 0;\n outline: none;\n width: auto;\n height: auto;\n min-width: 0;\n min-height: 0;\n}\n\n/* Styles applied to Clear Button */\n.saltTokenizedInput-clearButton {\n flex: none;\n align-self: flex-end;\n}\n\n/* Styles applied to Expand Button */\n.saltTokenizedInput-expandButton.saltButton {\n padding: 0 calc(var(--tokenizedInput-spacing) / 4);\n --saltButton-height: calc(var(--tokenizedInput-height) - var(--tokenizedInput-spacing) * 1.5);\n --saltButton-margin: calc(var(--tokenizedInput-gutter-size) / 2) 0;\n}\n\n/* Styles applied to root component and pill container if `expanded={true}` */\n.saltTokenizedInput-expanded,\n.saltTokenizedInput-expanded .saltTokenizedInput-pillGroup {\n height: auto;\n}\n\n/* TODO: Adjust specificity of .InputPill depending on styling solution.\n This is an example of internal sub-component naming convension. */\n.saltTokenizedInput .saltInputPill,\n.saltInputLegacy.saltTokenizedInput-input,\n.saltTokenizedInput-inputField.saltTokenizedInput-inputMultiline .saltTokenizedInput-input {\n margin: calc(var(--tokenizedInput-gutter-size) / 2) 0;\n height: calc(var(--tokenizedInput-height) - var(--tokenizedInput-spacing) * 1.5);\n}\n\n/* Styles applied to inner Pills */\n.saltTokenizedInput .saltInputPill {\n min-width: 0;\n margin-right: var(--tokenizedInput-gutter-size);\n --saltPill-maxWidth: 100px;\n}\n\n.saltTokenizedInput .saltInputPill > * {\n min-width: 0;\n}\n\n/* Styles applied to a Pill if `expanded={false} && index >= firstHiddenIndex` */\n.saltTokenizedInput .saltInputPill.saltInputPill-hidden {\n display: none;\n}\n\n/* Styles applied to the last visible Pill when all visible */\n.saltTokenizedInput .saltInputPill-pillLastVisible {\n margin-right: var(--saltTokenizedInput-pill-last-visible-marginRight, var(--tokenizedInput-last-pill-margin));\n}\n\n/* Styles applied to a Pill when active */\n.saltTokenizedInput .saltInputPill-pillActive {\n background: var(--saltTokenizedInput-pill-background-active, var(--salt-selectable-background-hover));\n}\n\n/* Styles applied to a Pills delete icon */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteIcon {\n color: var(--saltTokenizedInput-pill-delete-icon-color, var(--salt-actionable-cta-foreground-hover));\n}\n\n/* Styles applied to a Pills delete button */\n.saltTokenizedInput .saltInputPill-pillActive .saltPill-deleteButton {\n color: var(--saltTokenizedInput-pill-delete-button-color-active, var(--salt-actionable-cta-foreground-hover));\n background: var(--saltTokenizedInput-pill-delete-button-background-active, var(--salt-actionable-cta-background-hover));\n}\n";
|
|
4
4
|
|
|
5
5
|
module.exports = css_248z;
|
|
6
6
|
//# sourceMappingURL=TokenizedInput.css.js.map
|
|
@@ -9,10 +9,10 @@ var deepmerge = require('deepmerge');
|
|
|
9
9
|
var react = require('react');
|
|
10
10
|
var InputLegacy = require('../input-legacy/InputLegacy.js');
|
|
11
11
|
require('../input-legacy/StaticInputAdornment.js');
|
|
12
|
-
var InputPill = require('./internal/InputPill.js');
|
|
13
|
-
var InputRuler = require('./internal/InputRuler.js');
|
|
14
12
|
var calcFirstHiddenIndex = require('./internal/calcFirstHiddenIndex.js');
|
|
15
13
|
var defaultItemToString = require('./internal/defaultItemToString.js');
|
|
14
|
+
var InputPill = require('./internal/InputPill.js');
|
|
15
|
+
var InputRuler = require('./internal/InputRuler.js');
|
|
16
16
|
var useResizeObserver = require('./internal/useResizeObserver.js');
|
|
17
17
|
var useWidth = require('./internal/useWidth.js');
|
|
18
18
|
var TokenizedInput = require('./TokenizedInput.css.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenizedInputBase.js","sources":["../src/tokenized-input/TokenizedInputBase.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n makePrefixer,\n useDensity,\n useForkRef,\n useIcon,\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 deepmerge from \"deepmerge\";\nimport {\n type ChangeEventHandler,\n type FocusEvent,\n type FocusEventHandler,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type ReactElement,\n type ReactEventHandler,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n} from \"../input-legacy\";\nimport { InputPill } from \"./internal/InputPill\";\nimport { InputRuler } from \"./internal/InputRuler\";\nimport { calcFirstHiddenIndex } from \"./internal/calcFirstHiddenIndex\";\nimport { defaultItemToString } from \"./internal/defaultItemToString\";\nimport { useResizeObserver } from \"./internal/useResizeObserver\";\nimport { useWidth } from \"./internal/useWidth\";\nimport type {\n TokenizedInputHelpers,\n TokenizedInputState,\n} from \"./useTokenizedInput\";\n\nimport tokenizedInputCss from \"./TokenizedInput.css\";\n\nexport type RemoveItemHandler = (itemIndex: number) => void;\nexport type ItemToString<Item> = (item: Item) => string;\nexport type ExpandButtonProps = Pick<\n ButtonProps,\n \"role\" | \"aria-roledescription\" | \"aria-describedby\"\n> & { accessibleText?: string };\n\nexport interface TokenizedInputBaseProps<Item>\n extends Partial<TokenizedInputState<Item>>,\n Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onFocus\" | \"onBlur\" | \"onChange\" | \"onKeyUp\" | \"onKeyDown\"\n > {\n ExpandButtonProps?: ExpandButtonProps;\n InputProps?: Pick<InputProps, \"aria-describedby\" | \"inputProps\">;\n disabled?: boolean;\n expandButtonRef?: Ref<HTMLButtonElement>;\n helpers: TokenizedInputHelpers<Item>;\n inputRef?: Ref<HTMLInputElement>;\n itemToString?: ItemToString<Item>;\n onFocus?: FocusEventHandler<HTMLInputElement | HTMLButtonElement>;\n onBlur?: FocusEventHandler<HTMLInputElement | HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLInputElement>;\n // Can key down on either input or expand button\n onKeyDown?: KeyboardEventHandler<HTMLInputElement | HTMLButtonElement>;\n onRemoveItem?: RemoveItemHandler;\n onInputBlur?: FocusEventHandler<HTMLInputElement>;\n onInputFocus?: FocusEventHandler<HTMLInputElement>;\n onInputChange?: ChangeEventHandler<HTMLInputElement>;\n onInputSelect?: ReactEventHandler<HTMLInputElement>;\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onClear?: ReactEventHandler;\n}\n\nconst INITIAL_INPUT_WIDTH = 5;\nconst withBaseName = makePrefixer(\"saltTokenizedInput\");\n\nconst getItemsAriaLabel = (itemCount: number) =>\n itemCount === 0\n ? \"no item selected\"\n : `${itemCount} ${itemCount > 1 ? \"items\" : \"item\"}`;\n\nfunction hasHelpers<Item>(helpers: TokenizedInputHelpers<Item>) {\n if (process.env.NODE_ENV !== \"production\") {\n if (helpers == null) {\n console.warn(\n 'TokenizedInputBase is used without helpers. You should pass in \"helpers\" from \"useTokenizedInput\".',\n );\n }\n }\n return helpers != null;\n}\n\nexport const TokenizedInputBase = forwardRef(function TokenizedInputBase<Item>(\n props: TokenizedInputBaseProps<Item>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n InputProps = {},\n ExpandButtonProps = {},\n className,\n activeIndices = [],\n selectedItems = [],\n highlightedIndex,\n value,\n focused,\n expanded,\n disabled,\n helpers,\n onFocus,\n onBlur,\n onKeyUp,\n onKeyDown,\n onRemoveItem,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n onClear,\n onClick,\n inputRef,\n itemToString = defaultItemToString,\n id: idProp,\n expandButtonRef: expandButtonRefProp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tokenized-input\",\n css: tokenizedInputCss,\n window: targetWindow,\n });\n\n const density = useDensity();\n const { OverflowIcon, CloseIcon } = useIcon();\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const expandButtonId = `${id}-expand-button`;\n const clearButtonId = `${id}-clear-button`;\n\n // TODO: Use proper machanism to get variable values from theme in React. Something like below\n // getComputedStyle(document.documentElement)\n // .getPropertyValue('--my-variable-name'); // #999999\n const pillGroupPadding = 16;\n const lastVisiblePillMargin = 4;\n\n const pillsRef = useRef<{ [index: number]: number | undefined }>({});\n const inputRulerRef = useRef<HTMLSpanElement | null>(null);\n const keydownExpandButton = useRef(false);\n\n const [expandButtonRef, expandButtonWidth] = useWidth(density);\n const [clearButtonRef, clearButtonWidth] = useWidth(density);\n const [inputWidth, setInputWidth] = useState(INITIAL_INPUT_WIDTH);\n const [pillGroupWidth, setPillGroupWidth] = useState<number | null>(null);\n const [firstHiddenIndex, setFirstHiddenIndex] = useState<number | null>(null);\n\n const showExpandButton = !expanded && firstHiddenIndex != null;\n\n const widthOffset =\n pillGroupPadding +\n INITIAL_INPUT_WIDTH +\n (expanded ? clearButtonWidth : expandButtonWidth);\n\n const containerRef = useResizeObserver<HTMLDivElement>(\n useCallback(\n ([{ contentRect }]) => {\n setPillGroupWidth(contentRect.width - widthOffset);\n },\n [widthOffset],\n ),\n );\n\n useIsomorphicLayoutEffect(\n () => () => {\n // When density changes, set hidden index to null so that pills are in their\n // readonly state before they are measured.\n setFirstHiddenIndex(null);\n },\n [density],\n );\n\n // useLayoutEffect because of potential layout change\n // We want to do that before paint to avoid layout jumps\n useIsomorphicLayoutEffect(\n () => {\n if (expanded) {\n setFirstHiddenIndex(null);\n } else if (pillGroupWidth != null) {\n setFirstHiddenIndex(\n calcFirstHiddenIndex({\n containerWidth: pillGroupWidth,\n pillWidths: Object.values(pillsRef.current).filter(\n Boolean,\n ) as number[],\n }),\n );\n }\n },\n // Additional dependency on selectedItems is for the controlled version\n [expanded, pillGroupWidth, selectedItems],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (expanded && inputRulerRef.current) {\n const newInputWidth = inputRulerRef.current.scrollWidth;\n setInputWidth(Math.min(newInputWidth, pillGroupWidth || 0));\n }\n }, [expanded, pillGroupWidth, value]);\n\n const handleExpandButtonKeyDown = (\n event: KeyboardEvent<HTMLButtonElement>,\n ) => {\n const singleChar = event.key.length === 1;\n const triggerExpand =\n [\n \"CONTROL\",\n \"META\",\n \"ENTER\",\n \"BACKSPACE\",\n \"ARROWDOWN\",\n \"ARROWLEFT\",\n \"ARROWRIGHT\",\n ].indexOf(event.key.toUpperCase()) !== -1;\n\n if ((singleChar || triggerExpand) && hasHelpers(helpers)) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.stopPropagation();\n }\n helpers.updateExpanded(true);\n keydownExpandButton.current = true;\n }\n };\n\n const handleInputKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n // Call keydown again if the initail event has been used to expand the input\n if (keydownExpandButton.current && \"Enter\" !== event.key) {\n keydownExpandButton.current = false;\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n }\n\n if (onKeyUp) {\n onKeyUp(event);\n }\n };\n\n const handleExpand = (event: SyntheticEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n if (hasHelpers(helpers)) {\n helpers.updateExpanded(true);\n }\n };\n\n const handleClearButtonFocus = (event: FocusEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n if (hasHelpers(helpers)) {\n helpers.setFocused(false);\n helpers.cancelBlur();\n }\n };\n\n const selectedItemIds = selectedItems.map(\n (_, index) => `${id}-pill-${index}`,\n );\n\n const inputAriaLabelledBy = disabled\n ? [ariaLabelledBy, inputId, ...selectedItemIds]\n : [ariaLabelledBy, inputId];\n\n const mergedInputProps = deepmerge(\n {\n inputProps: {\n style: {\n width: inputWidth,\n minWidth: inputWidth,\n },\n \"aria-label\": [ariaLabel, getItemsAriaLabel(selectedItems.length)]\n .filter(Boolean)\n .join(\" \"),\n \"aria-labelledby\": inputAriaLabelledBy.filter(Boolean).join(\" \"),\n \"aria-activedescendant\":\n highlightedIndex && highlightedIndex >= 0\n ? `${id}-pill-${highlightedIndex}`\n : undefined,\n },\n },\n InputProps,\n );\n\n const {\n accessibleText: expandButtonAccessibleText,\n ...restExpandButtonProps\n } = ExpandButtonProps;\n\n return (\n <div\n {...restProps}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"focused\")]: focused,\n [withBaseName(\"expanded\")]: expanded,\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n id={id}\n onClick={onClick}\n ref={useForkRef(ref, containerRef)}\n >\n <span\n aria-owns={selectedItemIds.join(\" \")}\n className={withBaseName(\"hidden\")}\n role=\"listbox\"\n />\n <div className={withBaseName(\"pillGroup\")}>\n {selectedItems.map((item, index) => {\n const label = itemToString(item);\n\n return (\n <InputPill\n active={activeIndices.indexOf(index) !== -1}\n disabled={disabled}\n hidden={showExpandButton && index >= firstHiddenIndex}\n highlighted={index === highlightedIndex}\n id={`${id}-pill-${index}`}\n index={index}\n key={`${index}-${label}`}\n label={label}\n lastVisible={\n !showExpandButton && index === selectedItems.length - 1\n }\n onDelete={expanded ? onRemoveItem : undefined}\n pillsRef={pillsRef}\n />\n );\n })}\n <Button\n aria-labelledby={[ariaLabelledBy, inputId, expandButtonId]\n .filter(Boolean)\n .join(\" \")}\n className={clsx(withBaseName(\"expandButton\"), {\n [withBaseName(\"hidden\")]: !showExpandButton,\n })}\n disabled={disabled}\n id={expandButtonId}\n onBlur={onBlur}\n onClick={handleExpand}\n onFocus={onFocus}\n onKeyDown={handleExpandButtonKeyDown}\n ref={useForkRef(expandButtonRef, expandButtonRefProp)}\n variant=\"secondary\"\n {...restExpandButtonProps}\n >\n <OverflowIcon\n aria-label={\n expandButtonAccessibleText === undefined\n ? \"expand edit\"\n : expandButtonAccessibleText\n }\n />\n </Button>\n <Input\n {...mergedInputProps}\n className={clsx(withBaseName(\"input\"), withBaseName(\"inputField\"), {\n [withBaseName(\"hidden\")]: showExpandButton,\n })}\n disabled={disabled}\n id={inputId}\n // TODO: Use multi line input when available\n // multiline\n onBlur={onInputBlur}\n onChange={onInputChange}\n onFocus={onInputFocus}\n onKeyDown={onKeyDown}\n onKeyUp={handleInputKeyUp}\n onSelect={onInputSelect}\n renderSuffix={() => <InputRuler ref={inputRulerRef} value={value} />}\n value={value}\n ref={inputRef}\n />\n </div>\n <Button\n className={clsx(withBaseName(\"clearButton\"), {\n [withBaseName(\"hidden\")]: !expanded || selectedItems.length === 0,\n })}\n disabled={disabled}\n id={clearButtonId}\n onBlur={onBlur}\n onClick={onClear}\n onFocus={handleClearButtonFocus}\n ref={clearButtonRef}\n variant=\"secondary\"\n data-testid=\"clear-button\"\n >\n <CloseIcon aria-label=\"clear input\" />\n </Button>\n </div>\n );\n}) as <Item>(\n p: TokenizedInputBaseProps<Item> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement<TokenizedInputBaseProps<Item>>;\n"],"names":["makePrefixer","forwardRef","TokenizedInputBase","defaultItemToString","useWindow","useComponentCssInjection","tokenizedInputCss","useDensity","useIcon","useId","useRef","useWidth","useState","useResizeObserver","useCallback","useIsomorphicLayoutEffect","calcFirstHiddenIndex","jsxs","clsx","useForkRef","jsx","InputPill","Button","Input","InputRuler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TokenizedInputBase.js","sources":["../src/tokenized-input/TokenizedInputBase.tsx"],"sourcesContent":["import {\n Button,\n type ButtonProps,\n makePrefixer,\n useDensity,\n useForkRef,\n useIcon,\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 deepmerge from \"deepmerge\";\nimport {\n type ChangeEventHandler,\n type FocusEvent,\n type FocusEventHandler,\n type ForwardedRef,\n forwardRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type ReactElement,\n type ReactEventHandler,\n type Ref,\n type SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n} from \"../input-legacy\";\nimport { calcFirstHiddenIndex } from \"./internal/calcFirstHiddenIndex\";\nimport { defaultItemToString } from \"./internal/defaultItemToString\";\nimport { InputPill } from \"./internal/InputPill\";\nimport { InputRuler } from \"./internal/InputRuler\";\nimport { useResizeObserver } from \"./internal/useResizeObserver\";\nimport { useWidth } from \"./internal/useWidth\";\nimport tokenizedInputCss from \"./TokenizedInput.css\";\nimport type {\n TokenizedInputHelpers,\n TokenizedInputState,\n} from \"./useTokenizedInput\";\n\nexport type RemoveItemHandler = (itemIndex: number) => void;\nexport type ItemToString<Item> = (item: Item) => string;\nexport type ExpandButtonProps = Pick<\n ButtonProps,\n \"role\" | \"aria-roledescription\" | \"aria-describedby\"\n> & { accessibleText?: string };\n\nexport interface TokenizedInputBaseProps<Item>\n extends Partial<TokenizedInputState<Item>>,\n Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onFocus\" | \"onBlur\" | \"onChange\" | \"onKeyUp\" | \"onKeyDown\"\n > {\n ExpandButtonProps?: ExpandButtonProps;\n InputProps?: Pick<InputProps, \"aria-describedby\" | \"inputProps\">;\n disabled?: boolean;\n expandButtonRef?: Ref<HTMLButtonElement>;\n helpers: TokenizedInputHelpers<Item>;\n inputRef?: Ref<HTMLInputElement>;\n itemToString?: ItemToString<Item>;\n onFocus?: FocusEventHandler<HTMLInputElement | HTMLButtonElement>;\n onBlur?: FocusEventHandler<HTMLInputElement | HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLInputElement>;\n // Can key down on either input or expand button\n onKeyDown?: KeyboardEventHandler<HTMLInputElement | HTMLButtonElement>;\n onRemoveItem?: RemoveItemHandler;\n onInputBlur?: FocusEventHandler<HTMLInputElement>;\n onInputFocus?: FocusEventHandler<HTMLInputElement>;\n onInputChange?: ChangeEventHandler<HTMLInputElement>;\n onInputSelect?: ReactEventHandler<HTMLInputElement>;\n onClick?: (event: SyntheticEvent<HTMLElement>) => void;\n onClear?: ReactEventHandler;\n}\n\nconst INITIAL_INPUT_WIDTH = 5;\nconst withBaseName = makePrefixer(\"saltTokenizedInput\");\n\nconst getItemsAriaLabel = (itemCount: number) =>\n itemCount === 0\n ? \"no item selected\"\n : `${itemCount} ${itemCount > 1 ? \"items\" : \"item\"}`;\n\nfunction hasHelpers<Item>(helpers: TokenizedInputHelpers<Item>) {\n if (process.env.NODE_ENV !== \"production\") {\n if (helpers == null) {\n console.warn(\n 'TokenizedInputBase is used without helpers. You should pass in \"helpers\" from \"useTokenizedInput\".',\n );\n }\n }\n return helpers != null;\n}\n\nexport const TokenizedInputBase = forwardRef(function TokenizedInputBase<Item>(\n props: TokenizedInputBaseProps<Item>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const {\n InputProps = {},\n ExpandButtonProps = {},\n className,\n activeIndices = [],\n selectedItems = [],\n highlightedIndex,\n value,\n focused,\n expanded,\n disabled,\n helpers,\n onFocus,\n onBlur,\n onKeyUp,\n onKeyDown,\n onRemoveItem,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n onClear,\n onClick,\n inputRef,\n itemToString = defaultItemToString,\n id: idProp,\n expandButtonRef: expandButtonRefProp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tokenized-input\",\n css: tokenizedInputCss,\n window: targetWindow,\n });\n\n const density = useDensity();\n const { OverflowIcon, CloseIcon } = useIcon();\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const expandButtonId = `${id}-expand-button`;\n const clearButtonId = `${id}-clear-button`;\n\n // TODO: Use proper machanism to get variable values from theme in React. Something like below\n // getComputedStyle(document.documentElement)\n // .getPropertyValue('--my-variable-name'); // #999999\n const pillGroupPadding = 16;\n const lastVisiblePillMargin = 4;\n\n const pillsRef = useRef<{ [index: number]: number | undefined }>({});\n const inputRulerRef = useRef<HTMLSpanElement | null>(null);\n const keydownExpandButton = useRef(false);\n\n const [expandButtonRef, expandButtonWidth] = useWidth(density);\n const [clearButtonRef, clearButtonWidth] = useWidth(density);\n const [inputWidth, setInputWidth] = useState(INITIAL_INPUT_WIDTH);\n const [pillGroupWidth, setPillGroupWidth] = useState<number | null>(null);\n const [firstHiddenIndex, setFirstHiddenIndex] = useState<number | null>(null);\n\n const showExpandButton = !expanded && firstHiddenIndex != null;\n\n const widthOffset =\n pillGroupPadding +\n INITIAL_INPUT_WIDTH +\n (expanded ? clearButtonWidth : expandButtonWidth);\n\n const containerRef = useResizeObserver<HTMLDivElement>(\n useCallback(\n ([{ contentRect }]) => {\n setPillGroupWidth(contentRect.width - widthOffset);\n },\n [widthOffset],\n ),\n );\n\n useIsomorphicLayoutEffect(\n () => () => {\n // When density changes, set hidden index to null so that pills are in their\n // readonly state before they are measured.\n setFirstHiddenIndex(null);\n },\n [density],\n );\n\n // useLayoutEffect because of potential layout change\n // We want to do that before paint to avoid layout jumps\n useIsomorphicLayoutEffect(\n () => {\n if (expanded) {\n setFirstHiddenIndex(null);\n } else if (pillGroupWidth != null) {\n setFirstHiddenIndex(\n calcFirstHiddenIndex({\n containerWidth: pillGroupWidth,\n pillWidths: Object.values(pillsRef.current).filter(\n Boolean,\n ) as number[],\n }),\n );\n }\n },\n // Additional dependency on selectedItems is for the controlled version\n [expanded, pillGroupWidth, selectedItems],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (expanded && inputRulerRef.current) {\n const newInputWidth = inputRulerRef.current.scrollWidth;\n setInputWidth(Math.min(newInputWidth, pillGroupWidth || 0));\n }\n }, [expanded, pillGroupWidth, value]);\n\n const handleExpandButtonKeyDown = (\n event: KeyboardEvent<HTMLButtonElement>,\n ) => {\n const singleChar = event.key.length === 1;\n const triggerExpand =\n [\n \"CONTROL\",\n \"META\",\n \"ENTER\",\n \"BACKSPACE\",\n \"ARROWDOWN\",\n \"ARROWLEFT\",\n \"ARROWRIGHT\",\n ].indexOf(event.key.toUpperCase()) !== -1;\n\n if ((singleChar || triggerExpand) && hasHelpers(helpers)) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.stopPropagation();\n }\n helpers.updateExpanded(true);\n keydownExpandButton.current = true;\n }\n };\n\n const handleInputKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n // Call keydown again if the initail event has been used to expand the input\n if (keydownExpandButton.current && \"Enter\" !== event.key) {\n keydownExpandButton.current = false;\n\n if (onKeyDown) {\n onKeyDown(event);\n }\n }\n\n if (onKeyUp) {\n onKeyUp(event);\n }\n };\n\n const handleExpand = (event: SyntheticEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n if (hasHelpers(helpers)) {\n helpers.updateExpanded(true);\n }\n };\n\n const handleClearButtonFocus = (event: FocusEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n if (hasHelpers(helpers)) {\n helpers.setFocused(false);\n helpers.cancelBlur();\n }\n };\n\n const selectedItemIds = selectedItems.map(\n (_, index) => `${id}-pill-${index}`,\n );\n\n const inputAriaLabelledBy = disabled\n ? [ariaLabelledBy, inputId, ...selectedItemIds]\n : [ariaLabelledBy, inputId];\n\n const mergedInputProps = deepmerge(\n {\n inputProps: {\n style: {\n width: inputWidth,\n minWidth: inputWidth,\n },\n \"aria-label\": [ariaLabel, getItemsAriaLabel(selectedItems.length)]\n .filter(Boolean)\n .join(\" \"),\n \"aria-labelledby\": inputAriaLabelledBy.filter(Boolean).join(\" \"),\n \"aria-activedescendant\":\n highlightedIndex && highlightedIndex >= 0\n ? `${id}-pill-${highlightedIndex}`\n : undefined,\n },\n },\n InputProps,\n );\n\n const {\n accessibleText: expandButtonAccessibleText,\n ...restExpandButtonProps\n } = ExpandButtonProps;\n\n return (\n <div\n {...restProps}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"focused\")]: focused,\n [withBaseName(\"expanded\")]: expanded,\n [withBaseName(\"disabled\")]: disabled,\n },\n className,\n )}\n id={id}\n onClick={onClick}\n ref={useForkRef(ref, containerRef)}\n >\n <span\n aria-owns={selectedItemIds.join(\" \")}\n className={withBaseName(\"hidden\")}\n role=\"listbox\"\n />\n <div className={withBaseName(\"pillGroup\")}>\n {selectedItems.map((item, index) => {\n const label = itemToString(item);\n\n return (\n <InputPill\n active={activeIndices.indexOf(index) !== -1}\n disabled={disabled}\n hidden={showExpandButton && index >= firstHiddenIndex}\n highlighted={index === highlightedIndex}\n id={`${id}-pill-${index}`}\n index={index}\n key={`${index}-${label}`}\n label={label}\n lastVisible={\n !showExpandButton && index === selectedItems.length - 1\n }\n onDelete={expanded ? onRemoveItem : undefined}\n pillsRef={pillsRef}\n />\n );\n })}\n <Button\n aria-labelledby={[ariaLabelledBy, inputId, expandButtonId]\n .filter(Boolean)\n .join(\" \")}\n className={clsx(withBaseName(\"expandButton\"), {\n [withBaseName(\"hidden\")]: !showExpandButton,\n })}\n disabled={disabled}\n id={expandButtonId}\n onBlur={onBlur}\n onClick={handleExpand}\n onFocus={onFocus}\n onKeyDown={handleExpandButtonKeyDown}\n ref={useForkRef(expandButtonRef, expandButtonRefProp)}\n variant=\"secondary\"\n {...restExpandButtonProps}\n >\n <OverflowIcon\n aria-label={\n expandButtonAccessibleText === undefined\n ? \"expand edit\"\n : expandButtonAccessibleText\n }\n />\n </Button>\n <Input\n {...mergedInputProps}\n className={clsx(withBaseName(\"input\"), withBaseName(\"inputField\"), {\n [withBaseName(\"hidden\")]: showExpandButton,\n })}\n disabled={disabled}\n id={inputId}\n // TODO: Use multi line input when available\n // multiline\n onBlur={onInputBlur}\n onChange={onInputChange}\n onFocus={onInputFocus}\n onKeyDown={onKeyDown}\n onKeyUp={handleInputKeyUp}\n onSelect={onInputSelect}\n renderSuffix={() => <InputRuler ref={inputRulerRef} value={value} />}\n value={value}\n ref={inputRef}\n />\n </div>\n <Button\n className={clsx(withBaseName(\"clearButton\"), {\n [withBaseName(\"hidden\")]: !expanded || selectedItems.length === 0,\n })}\n disabled={disabled}\n id={clearButtonId}\n onBlur={onBlur}\n onClick={onClear}\n onFocus={handleClearButtonFocus}\n ref={clearButtonRef}\n variant=\"secondary\"\n data-testid=\"clear-button\"\n >\n <CloseIcon aria-label=\"clear input\" />\n </Button>\n </div>\n );\n}) as <Item>(\n p: TokenizedInputBaseProps<Item> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement<TokenizedInputBaseProps<Item>>;\n"],"names":["makePrefixer","forwardRef","TokenizedInputBase","defaultItemToString","useWindow","useComponentCssInjection","tokenizedInputCss","useDensity","useIcon","useId","useRef","useWidth","useState","useResizeObserver","useCallback","useIsomorphicLayoutEffect","calcFirstHiddenIndex","jsxs","clsx","useForkRef","jsx","InputPill","Button","Input","InputRuler"],"mappings":"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"}
|