@salt-ds/lab 1.0.0-alpha.1 → 1.0.0-alpha.2
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/dist-cjs/packages/lab/src/accordion/AccordionSection.js +1 -0
- package/dist-cjs/packages/lab/src/accordion/AccordionSection.js.map +1 -1
- package/dist-cjs/packages/lab/src/app-header/AppHeader.js +1 -0
- package/dist-cjs/packages/lab/src/app-header/AppHeader.js.map +1 -1
- package/dist-cjs/packages/lab/src/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-cjs/packages/lab/src/button-bar/OrderedButton.js +1 -0
- package/dist-cjs/packages/lab/src/button-bar/OrderedButton.js.map +1 -1
- package/dist-cjs/packages/lab/src/calendar/internal/CalendarDay.js +33 -49
- package/dist-cjs/packages/lab/src/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-cjs/packages/lab/src/calendar/internal/CalendarNavigation.js +34 -64
- package/dist-cjs/packages/lab/src/calendar/internal/CalendarNavigation.js.map +1 -1
- package/dist-cjs/packages/lab/src/calendar/useSelection.js +1 -0
- package/dist-cjs/packages/lab/src/calendar/useSelection.js.map +1 -1
- package/dist-cjs/packages/lab/src/carousel/Carousel.js +1 -0
- package/dist-cjs/packages/lab/src/carousel/Carousel.js.map +1 -1
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenu.js +1 -0
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuItem.js +46 -60
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuList.js +3 -3
- package/dist-cjs/packages/lab/src/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-cjs/packages/lab/src/cascading-menu/internal/useClickAway.js +1 -0
- package/dist-cjs/packages/lab/src/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-cjs/packages/lab/src/cascading-menu/internal/useMenuTriggerHandlers.js +1 -0
- package/dist-cjs/packages/lab/src/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box/ComboBox.js +1 -0
- package/dist-cjs/packages/lab/src/combo-box/ComboBox.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box/useCombobox.js +1 -0
- package/dist-cjs/packages/lab/src/combo-box/useCombobox.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box-deprecated/filterHelpers.js +1 -0
- package/dist-cjs/packages/lab/src/combo-box-deprecated/filterHelpers.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js +21 -39
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js +28 -49
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/useComboBox.js +1 -0
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -0
- package/dist-cjs/packages/lab/src/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-cjs/packages/lab/src/common-hooks/useViewportTracking.js +1 -0
- package/dist-cjs/packages/lab/src/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-cjs/packages/lab/src/common-hooks/utils/filter-utils.js +1 -0
- package/dist-cjs/packages/lab/src/common-hooks/utils/filter-utils.js.map +1 -1
- package/dist-cjs/packages/lab/src/contact-details/ContactAction.js +8 -23
- package/dist-cjs/packages/lab/src/contact-details/ContactAction.js.map +1 -1
- package/dist-cjs/packages/lab/src/contact-details/ContactFavoriteToggle.js.map +1 -1
- package/dist-cjs/packages/lab/src/contact-details/MailLinkComponent.js +1 -0
- package/dist-cjs/packages/lab/src/contact-details/MailLinkComponent.js.map +1 -1
- package/dist-cjs/packages/lab/src/contact-details/internal/FavoriteToggleWithTooltip.js +8 -19
- package/dist-cjs/packages/lab/src/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
- package/dist-cjs/packages/lab/src/content-status/internal/StatusIndicator.js +1 -2
- package/dist-cjs/packages/lab/src/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-cjs/packages/lab/src/deck-layout/DeckLayout.js +1 -0
- package/dist-cjs/packages/lab/src/deck-layout/DeckLayout.js.map +1 -1
- package/dist-cjs/packages/lab/src/dropdown/Dropdown.js +1 -0
- package/dist-cjs/packages/lab/src/dropdown/Dropdown.js.map +1 -1
- package/dist-cjs/packages/lab/src/dropdown/DropdownBase.js +6 -6
- package/dist-cjs/packages/lab/src/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/packages/lab/src/dropdown/useDropdown.js +1 -0
- package/dist-cjs/packages/lab/src/dropdown/useDropdown.js.map +1 -1
- package/dist-cjs/packages/lab/src/dropdown/useDropdownBase.js +1 -0
- package/dist-cjs/packages/lab/src/dropdown/useDropdownBase.js.map +1 -1
- package/dist-cjs/packages/lab/src/form-field/FormField.js +60 -73
- package/dist-cjs/packages/lab/src/form-field/FormField.js.map +1 -1
- package/dist-cjs/packages/lab/src/form-field/StatusIndicator.js +17 -30
- package/dist-cjs/packages/lab/src/form-field/StatusIndicator.js.map +1 -1
- package/dist-cjs/packages/lab/src/index.js +3 -15
- package/dist-cjs/packages/lab/src/index.js.map +1 -1
- package/dist-cjs/packages/lab/src/layer-layout/LayerLayout.js +3 -2
- package/dist-cjs/packages/lab/src/layer-layout/LayerLayout.js.map +1 -1
- package/dist-cjs/packages/lab/src/list/Highlighter.js +1 -0
- package/dist-cjs/packages/lab/src/list/Highlighter.js.map +1 -1
- package/dist-cjs/packages/lab/src/list/List.js +1 -0
- package/dist-cjs/packages/lab/src/list/List.js.map +1 -1
- package/dist-cjs/packages/lab/src/list/VirtualizedList.js +1 -0
- package/dist-cjs/packages/lab/src/list/VirtualizedList.js.map +1 -1
- package/dist-cjs/packages/lab/src/list/useList.js +1 -0
- package/dist-cjs/packages/lab/src/list/useList.js.map +1 -1
- package/dist-cjs/packages/lab/src/list/useListHeight.js +1 -0
- package/dist-cjs/packages/lab/src/list/useListHeight.js.map +1 -1
- package/dist-cjs/packages/lab/src/list-deprecated/List.js +5 -26
- package/dist-cjs/packages/lab/src/list-deprecated/List.js.map +1 -1
- package/dist-cjs/packages/lab/src/list-deprecated/ListItemBase.js +28 -58
- package/dist-cjs/packages/lab/src/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-cjs/packages/lab/src/list-deprecated/internal/Highlighter.js +1 -0
- package/dist-cjs/packages/lab/src/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-cjs/packages/lab/src/list-deprecated/useTypeSelect.js +1 -0
- package/dist-cjs/packages/lab/src/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-cjs/packages/lab/src/overlay/Overlay.js +1 -1
- package/dist-cjs/packages/lab/src/overlay/Overlay.js.map +1 -1
- package/dist-cjs/packages/lab/src/overlay/useOverlay.js +11 -12
- package/dist-cjs/packages/lab/src/overlay/useOverlay.js.map +1 -1
- package/dist-cjs/packages/lab/src/parent-child-layout/ParentChildLayout.js +1 -0
- package/dist-cjs/packages/lab/src/parent-child-layout/ParentChildLayout.js.map +1 -1
- package/dist-cjs/packages/lab/src/pill/PillBase.js +39 -55
- package/dist-cjs/packages/lab/src/pill/PillBase.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/CategoryList.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/internal/CategoryList.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/CategoryListItem.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/QueryInputBody.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/SearchList.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/internal/SearchList.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/ValueList.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/internal/ValueList.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/internal/ValueSelector.js +2 -3
- package/dist-cjs/packages/lab/src/query-input/internal/ValueSelector.js.map +1 -1
- package/dist-cjs/packages/lab/src/query-input/useQueryInput.js +1 -0
- package/dist-cjs/packages/lab/src/query-input/useQueryInput.js.map +1 -1
- package/dist-cjs/packages/lab/src/responsive/useOverflow.js +1 -0
- package/dist-cjs/packages/lab/src/responsive/useOverflow.js.map +1 -1
- package/dist-cjs/packages/lab/src/slider/internal/SliderHandle.js +17 -26
- package/dist-cjs/packages/lab/src/slider/internal/SliderHandle.js.map +1 -1
- package/dist-cjs/packages/lab/src/tabs/Tabstrip.js +35 -45
- package/dist-cjs/packages/lab/src/tabs/Tabstrip.js.map +1 -1
- package/dist-cjs/packages/lab/src/tabs/useActivationIndicator.js +1 -0
- package/dist-cjs/packages/lab/src/tabs/useActivationIndicator.js.map +1 -1
- package/dist-cjs/packages/lab/src/tabs/useKeyboardNavigation.js +1 -0
- package/dist-cjs/packages/lab/src/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-cjs/packages/lab/src/toggle-button/ToggleButton.js +6 -26
- package/dist-cjs/packages/lab/src/toggle-button/ToggleButton.js.map +1 -1
- package/dist-cjs/packages/lab/src/tokenized-input/TokenizedInput.js.map +1 -1
- package/dist-cjs/packages/lab/src/tokenized-input/useTokenizedInput.js +1 -0
- package/dist-cjs/packages/lab/src/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-cjs/packages/lab/src/toolbar/Toolbar.js +1 -0
- package/dist-cjs/packages/lab/src/toolbar/Toolbar.js.map +1 -1
- package/dist-cjs/packages/lab/src/toolbar/internal/renderToolbarItems.js +1 -0
- package/dist-cjs/packages/lab/src/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-cjs/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js +1 -0
- package/dist-cjs/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/packages/lab/src/tree/Tree.js +1 -0
- package/dist-cjs/packages/lab/src/tree/Tree.js.map +1 -1
- package/dist-cjs/packages/lab/src/tree/useTree.js +1 -0
- package/dist-cjs/packages/lab/src/tree/useTree.js.map +1 -1
- package/dist-cjs/packages/lab/src/utils/useFloatingUI.js +38 -0
- package/dist-cjs/packages/lab/src/utils/useFloatingUI.js.map +1 -0
- package/dist-cjs/packages/lab/src/utils/useIsViewportLargerThanBreakpoint.js +1 -2
- package/dist-cjs/packages/lab/src/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
- package/dist-es/packages/lab/src/accordion/AccordionSection.js +1 -0
- package/dist-es/packages/lab/src/accordion/AccordionSection.js.map +1 -1
- package/dist-es/packages/lab/src/app-header/AppHeader.js +1 -0
- package/dist-es/packages/lab/src/app-header/AppHeader.js.map +1 -1
- package/dist-es/packages/lab/src/breadcrumbs/Breadcrumb.js.map +1 -1
- package/dist-es/packages/lab/src/button-bar/OrderedButton.js +1 -0
- package/dist-es/packages/lab/src/button-bar/OrderedButton.js.map +1 -1
- package/dist-es/packages/lab/src/calendar/internal/CalendarDay.js +35 -51
- package/dist-es/packages/lab/src/calendar/internal/CalendarDay.js.map +1 -1
- package/dist-es/packages/lab/src/calendar/internal/CalendarNavigation.js +35 -65
- package/dist-es/packages/lab/src/calendar/internal/CalendarNavigation.js.map +1 -1
- package/dist-es/packages/lab/src/calendar/useSelection.js +1 -0
- package/dist-es/packages/lab/src/calendar/useSelection.js.map +1 -1
- package/dist-es/packages/lab/src/carousel/Carousel.js +1 -0
- package/dist-es/packages/lab/src/carousel/Carousel.js.map +1 -1
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenu.js +1 -0
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenu.js.map +1 -1
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenuItem.js +48 -62
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenuItem.js.map +1 -1
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenuList.js +3 -3
- package/dist-es/packages/lab/src/cascading-menu/CascadingMenuList.js.map +1 -1
- package/dist-es/packages/lab/src/cascading-menu/internal/useClickAway.js +1 -0
- package/dist-es/packages/lab/src/cascading-menu/internal/useClickAway.js.map +1 -1
- package/dist-es/packages/lab/src/cascading-menu/internal/useMenuTriggerHandlers.js +1 -0
- package/dist-es/packages/lab/src/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box/ComboBox.js +1 -0
- package/dist-es/packages/lab/src/combo-box/ComboBox.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box/useCombobox.js +1 -0
- package/dist-es/packages/lab/src/combo-box/useCombobox.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box-deprecated/filterHelpers.js +1 -0
- package/dist-es/packages/lab/src/combo-box-deprecated/filterHelpers.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js +19 -37
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js +26 -47
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/useComboBox.js +1 -0
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/useComboBox.js.map +1 -1
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -0
- package/dist-es/packages/lab/src/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
- package/dist-es/packages/lab/src/common-hooks/useViewportTracking.js +1 -0
- package/dist-es/packages/lab/src/common-hooks/useViewportTracking.js.map +1 -1
- package/dist-es/packages/lab/src/common-hooks/utils/filter-utils.js +1 -0
- package/dist-es/packages/lab/src/common-hooks/utils/filter-utils.js.map +1 -1
- package/dist-es/packages/lab/src/contact-details/ContactAction.js +10 -25
- package/dist-es/packages/lab/src/contact-details/ContactAction.js.map +1 -1
- package/dist-es/packages/lab/src/contact-details/ContactFavoriteToggle.js.map +1 -1
- package/dist-es/packages/lab/src/contact-details/MailLinkComponent.js +1 -0
- package/dist-es/packages/lab/src/contact-details/MailLinkComponent.js.map +1 -1
- package/dist-es/packages/lab/src/contact-details/internal/FavoriteToggleWithTooltip.js +9 -20
- package/dist-es/packages/lab/src/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
- package/dist-es/packages/lab/src/content-status/internal/StatusIndicator.js +1 -2
- package/dist-es/packages/lab/src/content-status/internal/StatusIndicator.js.map +1 -1
- package/dist-es/packages/lab/src/deck-layout/DeckLayout.js +1 -0
- package/dist-es/packages/lab/src/deck-layout/DeckLayout.js.map +1 -1
- package/dist-es/packages/lab/src/dropdown/Dropdown.js +1 -0
- package/dist-es/packages/lab/src/dropdown/Dropdown.js.map +1 -1
- package/dist-es/packages/lab/src/dropdown/DropdownBase.js +3 -3
- package/dist-es/packages/lab/src/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/packages/lab/src/dropdown/useDropdown.js +1 -0
- package/dist-es/packages/lab/src/dropdown/useDropdown.js.map +1 -1
- package/dist-es/packages/lab/src/dropdown/useDropdownBase.js +1 -0
- package/dist-es/packages/lab/src/dropdown/useDropdownBase.js.map +1 -1
- package/dist-es/packages/lab/src/form-field/FormField.js +62 -75
- package/dist-es/packages/lab/src/form-field/FormField.js.map +1 -1
- package/dist-es/packages/lab/src/form-field/StatusIndicator.js +18 -31
- package/dist-es/packages/lab/src/form-field/StatusIndicator.js.map +1 -1
- package/dist-es/packages/lab/src/index.js +1 -6
- package/dist-es/packages/lab/src/index.js.map +1 -1
- package/dist-es/packages/lab/src/layer-layout/LayerLayout.js +3 -2
- package/dist-es/packages/lab/src/layer-layout/LayerLayout.js.map +1 -1
- package/dist-es/packages/lab/src/list/Highlighter.js +1 -0
- package/dist-es/packages/lab/src/list/Highlighter.js.map +1 -1
- package/dist-es/packages/lab/src/list/List.js +1 -0
- package/dist-es/packages/lab/src/list/List.js.map +1 -1
- package/dist-es/packages/lab/src/list/VirtualizedList.js +1 -0
- package/dist-es/packages/lab/src/list/VirtualizedList.js.map +1 -1
- package/dist-es/packages/lab/src/list/useList.js +1 -0
- package/dist-es/packages/lab/src/list/useList.js.map +1 -1
- package/dist-es/packages/lab/src/list/useListHeight.js +1 -0
- package/dist-es/packages/lab/src/list/useListHeight.js.map +1 -1
- package/dist-es/packages/lab/src/list-deprecated/List.js +5 -26
- package/dist-es/packages/lab/src/list-deprecated/List.js.map +1 -1
- package/dist-es/packages/lab/src/list-deprecated/ListItemBase.js +31 -61
- package/dist-es/packages/lab/src/list-deprecated/ListItemBase.js.map +1 -1
- package/dist-es/packages/lab/src/list-deprecated/internal/Highlighter.js +1 -0
- package/dist-es/packages/lab/src/list-deprecated/internal/Highlighter.js.map +1 -1
- package/dist-es/packages/lab/src/list-deprecated/useTypeSelect.js +1 -0
- package/dist-es/packages/lab/src/list-deprecated/useTypeSelect.js.map +1 -1
- package/dist-es/packages/lab/src/overlay/Overlay.js +1 -1
- package/dist-es/packages/lab/src/overlay/Overlay.js.map +1 -1
- package/dist-es/packages/lab/src/overlay/useOverlay.js +2 -3
- package/dist-es/packages/lab/src/overlay/useOverlay.js.map +1 -1
- package/dist-es/packages/lab/src/parent-child-layout/ParentChildLayout.js +1 -0
- package/dist-es/packages/lab/src/parent-child-layout/ParentChildLayout.js.map +1 -1
- package/dist-es/packages/lab/src/pill/PillBase.js +41 -57
- package/dist-es/packages/lab/src/pill/PillBase.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/CategoryList.js +1 -0
- package/dist-es/packages/lab/src/query-input/internal/CategoryList.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/CategoryListItem.js +1 -0
- package/dist-es/packages/lab/src/query-input/internal/CategoryListItem.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/QueryInputBody.js +1 -0
- package/dist-es/packages/lab/src/query-input/internal/QueryInputBody.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/SearchList.js +1 -0
- package/dist-es/packages/lab/src/query-input/internal/SearchList.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/ValueList.js +1 -0
- package/dist-es/packages/lab/src/query-input/internal/ValueList.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/internal/ValueSelector.js +2 -3
- package/dist-es/packages/lab/src/query-input/internal/ValueSelector.js.map +1 -1
- package/dist-es/packages/lab/src/query-input/useQueryInput.js +1 -0
- package/dist-es/packages/lab/src/query-input/useQueryInput.js.map +1 -1
- package/dist-es/packages/lab/src/responsive/useOverflow.js +1 -0
- package/dist-es/packages/lab/src/responsive/useOverflow.js.map +1 -1
- package/dist-es/packages/lab/src/slider/internal/SliderHandle.js +19 -28
- package/dist-es/packages/lab/src/slider/internal/SliderHandle.js.map +1 -1
- package/dist-es/packages/lab/src/tabs/Tabstrip.js +36 -46
- package/dist-es/packages/lab/src/tabs/Tabstrip.js.map +1 -1
- package/dist-es/packages/lab/src/tabs/useActivationIndicator.js +1 -0
- package/dist-es/packages/lab/src/tabs/useActivationIndicator.js.map +1 -1
- package/dist-es/packages/lab/src/tabs/useKeyboardNavigation.js +1 -0
- package/dist-es/packages/lab/src/tabs/useKeyboardNavigation.js.map +1 -1
- package/dist-es/packages/lab/src/toggle-button/ToggleButton.js +8 -28
- package/dist-es/packages/lab/src/toggle-button/ToggleButton.js.map +1 -1
- package/dist-es/packages/lab/src/tokenized-input/TokenizedInput.js.map +1 -1
- package/dist-es/packages/lab/src/tokenized-input/useTokenizedInput.js +1 -0
- package/dist-es/packages/lab/src/tokenized-input/useTokenizedInput.js.map +1 -1
- package/dist-es/packages/lab/src/toolbar/Toolbar.js +1 -0
- package/dist-es/packages/lab/src/toolbar/Toolbar.js.map +1 -1
- package/dist-es/packages/lab/src/toolbar/internal/renderToolbarItems.js +1 -0
- package/dist-es/packages/lab/src/toolbar/internal/renderToolbarItems.js.map +1 -1
- package/dist-es/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js +1 -0
- package/dist-es/packages/lab/src/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/packages/lab/src/tree/Tree.js +1 -0
- package/dist-es/packages/lab/src/tree/Tree.js.map +1 -1
- package/dist-es/packages/lab/src/tree/useTree.js +1 -0
- package/dist-es/packages/lab/src/tree/useTree.js.map +1 -1
- package/dist-es/packages/lab/src/{popper → utils}/useFloatingUI.js +10 -9
- package/dist-es/packages/lab/src/utils/useFloatingUI.js.map +1 -0
- package/dist-es/packages/lab/src/utils/useIsViewportLargerThanBreakpoint.js +1 -2
- package/dist-es/packages/lab/src/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
- package/dist-types/breadcrumbs/Breadcrumb.d.ts +1 -1
- package/dist-types/calendar/internal/CalendarCarousel.d.ts +1 -1
- package/dist-types/calendar/internal/CalendarDay.d.ts +2 -2
- package/dist-types/calendar/internal/CalendarMonth.d.ts +1 -1
- package/dist-types/calendar/internal/CalendarNavigation.d.ts +1 -1
- package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +2 -2
- package/dist-types/calendar/useCalendarDay.d.ts +1 -1
- package/dist-types/cascading-menu/CascadingMenuList.d.ts +1 -1
- package/dist-types/cascading-menu/CascadingMenuProps.d.ts +1 -1
- package/dist-types/combo-box-deprecated/internal/DefaultComboBox.d.ts +1 -3
- package/dist-types/combo-box-deprecated/internal/useComboBox.d.ts +3 -4
- package/dist-types/combo-box-deprecated/internal/useMultiSelectComboBox.d.ts +10 -5
- package/dist-types/contact-details/ContactAction.d.ts +1 -2
- package/dist-types/contact-details/ContactFavoriteToggle.d.ts +1 -1
- package/dist-types/contact-details/internal/FavoriteToggleWithTooltip.d.ts +1 -1
- package/dist-types/content-status/internal/StatusIndicator.d.ts +1 -2
- package/dist-types/form-field/StatusIndicator.d.ts +1 -1
- package/dist-types/index.d.ts +0 -4
- package/dist-types/layer-layout/LayerLayout.d.ts +1 -1
- package/dist-types/list-deprecated/ListProps.d.ts +0 -5
- package/dist-types/overlay/Overlay.d.ts +1 -1
- package/dist-types/overlay/useOverlay.d.ts +1 -1
- package/dist-types/pill/PillBase.d.ts +1 -1
- package/dist-types/skip-link/SkipLink.d.ts +1 -1
- package/dist-types/stepper-input/useStepperInput.d.ts +3 -0
- package/dist-types/tokenized-input/TokenizedInput.d.ts +1 -1
- package/dist-types/toolbar/ToolbarProps.d.ts +1 -1
- package/dist-types/utils/index.d.ts +1 -0
- package/dist-types/utils/useFloatingUI.d.ts +34 -0
- package/dist-types/window/ElectronWindow.d.ts +1 -1
- package/dist-types/window/WindowContext.d.ts +3 -3
- package/package.json +3 -3
- package/dist-cjs/packages/lab/src/popper/useFloatingUI.js +0 -37
- package/dist-cjs/packages/lab/src/popper/useFloatingUI.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/Spinner.css.js +0 -9
- package/dist-cjs/packages/lab/src/spinner/Spinner.css.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/Spinner.js +0 -76
- package/dist-cjs/packages/lab/src/spinner/Spinner.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerLarge.js +0 -71
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerLarge.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerMedium.js +0 -71
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerMedium.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerSmall.js +0 -71
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/SpinnerSmall.js.map +0 -1
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/index.js +0 -21
- package/dist-cjs/packages/lab/src/spinner/svgSpinners/index.js.map +0 -1
- package/dist-cjs/packages/lab/src/split-layout/SplitLayout.css.js +0 -9
- package/dist-cjs/packages/lab/src/split-layout/SplitLayout.css.js.map +0 -1
- package/dist-cjs/packages/lab/src/split-layout/SplitLayout.js +0 -40
- package/dist-cjs/packages/lab/src/split-layout/SplitLayout.js.map +0 -1
- package/dist-cjs/packages/lab/src/tooltip/Tooltip.css.js +0 -9
- package/dist-cjs/packages/lab/src/tooltip/Tooltip.css.js.map +0 -1
- package/dist-cjs/packages/lab/src/tooltip/Tooltip.js +0 -84
- package/dist-cjs/packages/lab/src/tooltip/Tooltip.js.map +0 -1
- package/dist-cjs/packages/lab/src/tooltip/TooltipContext.js +0 -26
- package/dist-cjs/packages/lab/src/tooltip/TooltipContext.js.map +0 -1
- package/dist-cjs/packages/lab/src/tooltip/useAriaAnnounce.js +0 -87
- package/dist-cjs/packages/lab/src/tooltip/useAriaAnnounce.js.map +0 -1
- package/dist-cjs/packages/lab/src/tooltip/useTooltip.js +0 -137
- package/dist-cjs/packages/lab/src/tooltip/useTooltip.js.map +0 -1
- package/dist-es/packages/lab/src/popper/useFloatingUI.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/Spinner.css.js +0 -7
- package/dist-es/packages/lab/src/spinner/Spinner.css.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/Spinner.js +0 -71
- package/dist-es/packages/lab/src/spinner/Spinner.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerLarge.js +0 -67
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerLarge.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerMedium.js +0 -67
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerMedium.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerSmall.js +0 -67
- package/dist-es/packages/lab/src/spinner/svgSpinners/SpinnerSmall.js.map +0 -1
- package/dist-es/packages/lab/src/spinner/svgSpinners/index.js +0 -17
- package/dist-es/packages/lab/src/spinner/svgSpinners/index.js.map +0 -1
- package/dist-es/packages/lab/src/split-layout/SplitLayout.css.js +0 -7
- package/dist-es/packages/lab/src/split-layout/SplitLayout.css.js.map +0 -1
- package/dist-es/packages/lab/src/split-layout/SplitLayout.js +0 -36
- package/dist-es/packages/lab/src/split-layout/SplitLayout.js.map +0 -1
- package/dist-es/packages/lab/src/tooltip/Tooltip.css.js +0 -7
- package/dist-es/packages/lab/src/tooltip/Tooltip.css.js.map +0 -1
- package/dist-es/packages/lab/src/tooltip/Tooltip.js +0 -80
- package/dist-es/packages/lab/src/tooltip/Tooltip.js.map +0 -1
- package/dist-es/packages/lab/src/tooltip/TooltipContext.js +0 -21
- package/dist-es/packages/lab/src/tooltip/TooltipContext.js.map +0 -1
- package/dist-es/packages/lab/src/tooltip/useAriaAnnounce.js +0 -83
- package/dist-es/packages/lab/src/tooltip/useAriaAnnounce.js.map +0 -1
- package/dist-es/packages/lab/src/tooltip/useTooltip.js +0 -133
- package/dist-es/packages/lab/src/tooltip/useTooltip.js.map +0 -1
- package/dist-types/popper/index.d.ts +0 -1
- package/dist-types/popper/useFloatingUI.d.ts +0 -5
- package/dist-types/spinner/Spinner.d.ts +0 -45
- package/dist-types/spinner/index.d.ts +0 -1
- package/dist-types/spinner/svgSpinners/SpinnerLarge.d.ts +0 -2
- package/dist-types/spinner/svgSpinners/SpinnerMedium.d.ts +0 -2
- package/dist-types/spinner/svgSpinners/SpinnerSmall.d.ts +0 -2
- package/dist-types/spinner/svgSpinners/index.d.ts +0 -2
- package/dist-types/split-layout/SplitLayout.d.ts +0 -32
- package/dist-types/split-layout/index.d.ts +0 -1
- package/dist-types/tooltip/Tooltip.d.ts +0 -37
- package/dist-types/tooltip/TooltipContext.d.ts +0 -22
- package/dist-types/tooltip/index.d.ts +0 -3
- package/dist-types/tooltip/useAriaAnnounce.d.ts +0 -9
- package/dist-types/tooltip/useTooltip.d.ts +0 -31
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { flip, shift, limitShift, size } from '@floating-ui/react
|
|
3
|
-
import { useAriaAnnouncer, useForkRef } from '@salt-ds/core';
|
|
4
|
-
import { useRef,
|
|
2
|
+
import { flip, shift, limitShift, size } from '@floating-ui/react';
|
|
3
|
+
import { useAriaAnnouncer, useForkRef, useFloatingUI } from '@salt-ds/core';
|
|
4
|
+
import { useRef, useEffect, useState } from 'react';
|
|
5
|
+
import { Portal } from '../../portal/Portal.js';
|
|
5
6
|
import '../../list-deprecated/List.js';
|
|
6
7
|
import { ListBase } from '../../list-deprecated/ListBase.js';
|
|
7
8
|
import '../../list-deprecated/ListItemBase.js';
|
|
8
9
|
import '../../list-deprecated/ListItem.js';
|
|
9
10
|
import '../../list-deprecated/ListItemContext.js';
|
|
10
11
|
import { ListStateContext } from '../../list-deprecated/ListStateContext.js';
|
|
12
|
+
import '../../utils/useFloatingUI.js';
|
|
11
13
|
import '../../tokenized-input/TokenizedInput.js';
|
|
12
14
|
import { TokenizedInputBase } from '../../tokenized-input/TokenizedInputBase.js';
|
|
13
15
|
import 'clipboard-copy';
|
|
@@ -16,19 +18,11 @@ import { getAnnouncement } from './getAnnouncement.js';
|
|
|
16
18
|
import { useMultiSelectComboBox } from './useMultiSelectComboBox.js';
|
|
17
19
|
import { isDesktop, useWindow } from '../../window/WindowContext.js';
|
|
18
20
|
import '../../window/ElectronWindow.js';
|
|
19
|
-
import { Portal } from '../../portal/Portal.js';
|
|
20
|
-
import { useFloatingUI } from '../../popper/useFloatingUI.js';
|
|
21
|
-
import '../../tooltip/Tooltip.js';
|
|
22
|
-
import { TooltipContext } from '../../tooltip/TooltipContext.js';
|
|
23
21
|
|
|
24
22
|
function MultiSelectComboBox(props) {
|
|
25
23
|
const {
|
|
26
24
|
ListItem,
|
|
27
|
-
Tooltip,
|
|
28
25
|
WindowProps,
|
|
29
|
-
tooltipEnterDelay,
|
|
30
|
-
tooltipLeaveDelay,
|
|
31
|
-
tooltipPlacement,
|
|
32
26
|
rootRef,
|
|
33
27
|
listRef: listRefProp,
|
|
34
28
|
rootWidth,
|
|
@@ -46,15 +40,6 @@ function MultiSelectComboBox(props) {
|
|
|
46
40
|
});
|
|
47
41
|
const { allowAnnouncement, disabled, value, ...restInputProps } = inputProps;
|
|
48
42
|
const { isListOpen, itemCount, itemToString, source, ...restListProps } = listProps;
|
|
49
|
-
const tooltipContext = useMemo(
|
|
50
|
-
() => ({
|
|
51
|
-
Tooltip,
|
|
52
|
-
enterDelay: tooltipEnterDelay,
|
|
53
|
-
leaveDelay: tooltipLeaveDelay,
|
|
54
|
-
placement: tooltipPlacement
|
|
55
|
-
}),
|
|
56
|
-
[Tooltip, tooltipEnterDelay, tooltipLeaveDelay, tooltipPlacement]
|
|
57
|
-
);
|
|
58
43
|
const firstItem = null;
|
|
59
44
|
const allowAnnouncementRef = useRef(allowAnnouncement);
|
|
60
45
|
useEffect(() => {
|
|
@@ -91,16 +76,13 @@ function MultiSelectComboBox(props) {
|
|
|
91
76
|
const Window = useWindow();
|
|
92
77
|
return /* @__PURE__ */ jsxs(Fragment, {
|
|
93
78
|
children: [
|
|
94
|
-
/* @__PURE__ */ jsx(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
helpers: inputHelpers,
|
|
102
|
-
...restInputProps
|
|
103
|
-
})
|
|
79
|
+
/* @__PURE__ */ jsx(TokenizedInputBase, {
|
|
80
|
+
disabled,
|
|
81
|
+
expandButtonRef,
|
|
82
|
+
inputRef: useForkRef(inputRef, inputRefProp),
|
|
83
|
+
value,
|
|
84
|
+
helpers: inputHelpers,
|
|
85
|
+
...restInputProps
|
|
104
86
|
}),
|
|
105
87
|
rootRef.current && isListOpen && /* @__PURE__ */ jsx(Portal, {
|
|
106
88
|
children: /* @__PURE__ */ jsx(Window, {
|
|
@@ -112,23 +94,20 @@ function MultiSelectComboBox(props) {
|
|
|
112
94
|
},
|
|
113
95
|
...WindowProps,
|
|
114
96
|
ref: floating,
|
|
115
|
-
children: /* @__PURE__ */ jsx(
|
|
116
|
-
value:
|
|
117
|
-
children: /* @__PURE__ */ jsx(
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
},
|
|
130
|
-
maxHeight: maxListHeight || listProps.maxHeight
|
|
131
|
-
})
|
|
97
|
+
children: /* @__PURE__ */ jsx(ListStateContext.Provider, {
|
|
98
|
+
value: listContext,
|
|
99
|
+
children: /* @__PURE__ */ jsx(ListBase, {
|
|
100
|
+
...{
|
|
101
|
+
ListItem,
|
|
102
|
+
disabled,
|
|
103
|
+
itemCount,
|
|
104
|
+
itemToString,
|
|
105
|
+
width: listWidth || rootWidth,
|
|
106
|
+
source,
|
|
107
|
+
...restListProps,
|
|
108
|
+
listRef: setListRef
|
|
109
|
+
},
|
|
110
|
+
maxHeight: maxListHeight || listProps.maxHeight
|
|
132
111
|
})
|
|
133
112
|
})
|
|
134
113
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectComboBox.js","sources":["../src/combo-box-deprecated/internal/MultiSelectComboBox.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"MultiSelectComboBox.js","sources":["../src/combo-box-deprecated/internal/MultiSelectComboBox.tsx"],"sourcesContent":["import { flip, limitShift, shift, size } from \"@floating-ui/react\";\nimport { useAriaAnnouncer, useFloatingUI, useForkRef } from \"@salt-ds/core\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { Portal } from \"../../portal\";\nimport { ListBase, ListStateContext } from \"../../list-deprecated\";\nimport { TokenizedInputBase, TokenizedInputProps } from \"../../tokenized-input\";\nimport { BaseComboBoxProps } from \"./DefaultComboBox\";\nimport { getAnnouncement } from \"./getAnnouncement\";\nimport { useMultiSelectComboBox } from \"./useMultiSelectComboBox\";\nimport { isDesktop, useWindow } from \"../../window\";\n\nexport type MultiSelectComboBoxProps<Item> = BaseComboBoxProps<\n Item,\n \"multiple\"\n> &\n Pick<\n TokenizedInputProps<Item>,\n | \"onFocus\"\n | \"onBlur\"\n | \"onInputFocus\"\n | \"onInputBlur\"\n | \"onInputChange\"\n | \"onInputSelect\"\n | \"stringToItem\"\n > & {\n InputProps?: Partial<TokenizedInputProps<Item>>;\n initialSelectedItem?: Item[];\n selectedItem?: Item[];\n multiSelect: true;\n delimiter?: string | string[];\n };\n\nexport function MultiSelectComboBox<Item>(\n props: MultiSelectComboBoxProps<Item>\n) {\n const {\n ListItem,\n WindowProps,\n rootRef,\n listRef: listRefProp,\n rootWidth,\n listWidth,\n inputRef: inputRefProp,\n ...restProps\n } = props;\n\n const { announce } = useAriaAnnouncer({ debounce: 1000 });\n\n const expandButtonRef = useRef(null);\n const listRef = useRef(null);\n // Use callback ref as listRef could be null when it's closed\n const setListRef = useForkRef(listRef, listRefProp);\n\n const { inputRef, listContext, inputProps, listProps, inputHelpers } =\n useMultiSelectComboBox({\n ...restProps,\n expandButtonRef,\n });\n\n const { allowAnnouncement, disabled, value, ...restInputProps } = inputProps;\n const { isListOpen, itemCount, itemToString, source, ...restListProps } =\n listProps;\n\n const firstItem = null;\n\n const allowAnnouncementRef = useRef(allowAnnouncement);\n useEffect(() => {\n allowAnnouncementRef.current = allowAnnouncement;\n }, [allowAnnouncement]);\n\n useEffect(() => {\n if (allowAnnouncementRef.current && value && firstItem) {\n announce(getAnnouncement(itemCount, firstItem));\n }\n }, [value, firstItem, itemCount, announce]);\n\n const [maxListHeight, setMaxListHeight] = useState<number | undefined>(\n undefined\n );\n const middleware = isDesktop\n ? []\n : [\n flip({\n fallbackPlacements: [\"bottom-start\", \"top-start\"],\n }),\n shift({ limiter: limitShift() }),\n size({\n apply({ availableHeight }) {\n setMaxListHeight(availableHeight);\n },\n }),\n ];\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement: \"bottom-start\",\n middleware,\n });\n\n useEffect(() => {\n if (rootRef.current) {\n reference(rootRef.current);\n }\n }, [rootRef, reference]);\n\n const Window = useWindow();\n\n return (\n <>\n <TokenizedInputBase\n disabled={disabled}\n expandButtonRef={expandButtonRef}\n inputRef={useForkRef(inputRef, inputRefProp)}\n value={value}\n helpers={inputHelpers}\n {...restInputProps}\n />\n {rootRef.current && isListOpen && (\n <Portal>\n <Window\n style={{\n top: y ?? \"\",\n left: x ?? \"\",\n position: strategy,\n maxHeight: maxListHeight ?? \"\",\n }}\n {...WindowProps}\n ref={floating}\n >\n <ListStateContext.Provider value={listContext}>\n <ListBase\n {...{\n ListItem,\n disabled,\n itemCount,\n itemToString,\n width: listWidth || rootWidth,\n source,\n ...restListProps,\n listRef: setListRef,\n }}\n maxHeight={maxListHeight || listProps.maxHeight}\n />\n </ListStateContext.Provider>\n </Window>\n </Portal>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import '../../list-deprecated/ListItem.js';
|
|
|
7
7
|
import '../../list-deprecated/ListItemContext.js';
|
|
8
8
|
import '../../list-deprecated/ListStateContext.js';
|
|
9
9
|
import { useList } from '../../list-deprecated/useList.js';
|
|
10
|
+
import '../../utils/useFloatingUI.js';
|
|
10
11
|
import { defaultItemToString } from '../../tokenized-input/internal/defaultItemToString.js';
|
|
11
12
|
import { getDefaultFilterRegex, getDefaultFilter } from '../filterHelpers.js';
|
|
12
13
|
import { usePopperStatus, isToggleList } from './usePopperStatus.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useComboBox.js","sources":["../src/combo-box-deprecated/internal/useComboBox.ts"],"sourcesContent":["import {\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n} from \"@salt-ds/core\";\nimport {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useList } from \"../../list-deprecated\";\nimport { defaultItemToString } from \"../../tokenized-input/internal/defaultItemToString\";\nimport { getDefaultFilter, getDefaultFilterRegex } from \"../filterHelpers\";\nimport { DefaultComboBoxProps } from \"./DefaultComboBox\";\nimport { isToggleList, usePopperStatus } from \"./usePopperStatus\";\nimport { InputProps } from \"../../input\";\n\nexport type UseComboBoxProps<Item> = Omit<\n DefaultComboBoxProps<Item>,\n | \"ListItem\"\n | \"Tooltip\"\n | \"tooltipEnterDelay\"\n | \"tooltipLeaveDelay\"\n | \"tooltipPlacement\"\n | \"rootRef\"\n | \"listRef\"\n | \"inputRef\"\n | \"rootWidth\"\n | \"listWidth\"\n>;\n\nexport const useComboBox = <Item>(props: UseComboBoxProps<Item>) => {\n // Deconstruct valid props for List, everything else will be passed to input using `restProps`\n const {\n initialOpen,\n initialSelectedItem,\n allowFreeText,\n displayedItemCount,\n virtualized,\n disabled,\n onBlur,\n onFocus,\n onChange,\n onSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n id: idProp,\n source: sourceProp = [],\n selectedItem: selectedItemProp,\n inputValue: inputValueProp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n getFilterRegex = getDefaultFilterRegex,\n itemToString = defaultItemToString,\n stringToItem: stringToItemProp = (value) => (value ? value.trim() : value),\n InputProps: inputProps = {\n onBlur: onBlur || onInputBlur,\n onFocus: onFocus || onInputFocus,\n onChange: onInputChange,\n onSelect: onInputSelect,\n },\n ListProps = {},\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const listId = `${id}-list`;\n\n const [inputValue, setInputValue] = useControlled({\n controlled: inputValueProp,\n default: \"\",\n name: \"ComboBox\",\n state: \"inputValue\",\n });\n\n const [selectionChanged, setSelectionChanged] = useState(false);\n const inputRef = useRef<HTMLElement>(null);\n\n const [allowAnnouncement, setAllowAnnouncement] = useState(false);\n\n const labels = useMemo(\n () => sourceProp.map(itemToString),\n [sourceProp, itemToString]\n );\n\n const source = useMemo(() => {\n if (inputValue && inputValue.trim().length) {\n const itemFilter = getDefaultFilter(inputValue, getFilterRegex);\n return sourceProp.filter((item) => itemFilter(itemToString(item)));\n }\n return sourceProp;\n }, [inputValue, sourceProp, getFilterRegex, itemToString]);\n\n const itemTextHighlightPattern = useMemo(\n () =>\n inputValue && inputValue.trim().length\n ? getFilterRegex(inputValue)\n : undefined,\n [inputValue, getFilterRegex]\n );\n\n const { focusedRef, state, helpers, listProps } = useList({\n ...ListProps,\n source,\n disabled,\n virtualized,\n itemToString,\n initialSelectedItem,\n selectedItem: selectedItemProp,\n displayedItemCount,\n onChange,\n onSelect,\n id: listId,\n tabToSelect: true,\n disableFocus: true,\n disableMouseDown: true,\n \"aria-labelledby\": ariaLabelledBy,\n });\n\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n\n const handleFocusVisibleRef = useForkRef(focusVisibleRef, focusedRef);\n const handleInputRef = useForkRef(inputRef, handleFocusVisibleRef);\n\n const { \"aria-activedescendant\": ariaActiveDescendant, ...restListProps } =\n listProps;\n\n const { selectedItem, highlightedIndex } = state;\n const [quickSelection, setQuickSelection] = useState(false);\n const { setFocusVisible, setSelectedItem, setHighlightedIndex } = helpers;\n\n const reconcileInput = useCallback(() => {\n setInputValue(selectedItem == null ? \"\" : itemToString(selectedItem));\n }, [selectedItem, itemToString, setInputValue]);\n\n const selectInputValue = (event: ChangeEvent) => {\n const nextIndex = inputValue ? labels.indexOf(inputValue.trim()) : -1;\n\n // Select the item if we can match its label; otherwise create a new one\n const nextItem = (\n nextIndex >= 0 ? sourceProp[nextIndex] : stringToItemProp(inputValue)\n ) as Item;\n\n if (onSelect) {\n onSelect(event, nextItem);\n }\n\n if (nextItem !== selectedItem) {\n setSelectedItem(nextItem);\n onChange && onChange(event, nextItem);\n }\n };\n\n const { isOpen: isListOpen, notifyPopper } = usePopperStatus({\n initialOpen,\n });\n\n // Reconcile input when the function is updated - most likely to be a selectItem change\n useEffect(reconcileInput, [reconcileInput]);\n\n // Reset highlight when list closes\n useEffect(() => {\n if (!isListOpen) {\n setHighlightedIndex(undefined);\n setQuickSelection(false);\n }\n }, [isListOpen, setHighlightedIndex, quickSelection]);\n\n const initHighlightedIndex = () => {\n setHighlightedIndex(selectedItem ? source.indexOf(selectedItem) : -1);\n };\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n if (highlightedIndex == null) {\n initHighlightedIndex();\n }\n\n if (inputProps.onFocus) {\n inputProps.onFocus(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n console.log(\"BLUR\");\n handleBlurVisible();\n setAllowAnnouncement(false);\n\n if (allowFreeText) {\n selectInputValue(event as ChangeEvent);\n } else {\n reconcileInput();\n }\n\n if (restListProps.onBlur) {\n restListProps.onBlur(event as FocusEvent<HTMLDivElement>);\n }\n\n if (inputProps.onBlur) {\n inputProps.onBlur(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n setInputValue(newValue);\n\n setHighlightedIndex(undefined);\n setQuickSelection(newValue.length > 0 && !allowFreeText);\n\n // Clear the selection when input is cleared\n if (newValue.length === 0) {\n setSelectedItem(undefined);\n onChange && onChange(event, null);\n }\n\n if (inputProps.onChange) {\n inputProps.onChange(event, \"\");\n }\n };\n\n const handleInputSelect = (event: SyntheticEvent<HTMLDivElement>) => {\n console.log(`handleInputSelect setSelectionChanged = true`);\n setSelectionChanged(true);\n if (inputProps.onSelect) {\n inputProps.onSelect(event);\n }\n };\n\n const handleInputKeyDown = (event: KeyboardEvent) => {\n if (\"Escape\" === event.key) {\n setHighlightedIndex(undefined);\n\n if (allowFreeText) {\n setInputValue(\"\");\n } else {\n reconcileInput();\n }\n }\n\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(event as KeyboardEvent<HTMLInputElement>);\n }\n };\n\n const handleFirstItemSelection = (event: KeyboardEvent | ChangeEvent) => {\n if (\n !allowFreeText &&\n (event as KeyboardEvent).key === \"Enter\" &&\n quickSelection\n ) {\n setSelectedItem(source[0]);\n onSelect && onSelect(event, source[0]);\n onChange && onChange(event as ChangeEvent, source[0]);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n // Don't handle Alt modification key - pass it to popper as it should just toggle the open/close\n if (isToggleList(event)) {\n notifyPopper(event);\n return;\n }\n\n if (\n [\"ArrowUp\", \"ArrowDown\"].indexOf(event.key) !== -1 &&\n highlightedIndex == null\n ) {\n initHighlightedIndex();\n }\n\n handleFirstItemSelection(event);\n\n // Space, Home and End keydown should stay on input - don't pass it to list\n if ([\" \", \"Home\", \"End\"].indexOf(event.key) === -1) {\n if (restListProps.onKeyDown) {\n restListProps.onKeyDown(event as KeyboardEvent<HTMLDivElement>);\n }\n console.log(`handleKeyDown ${event.key} setSelectionCHanged = false`);\n setSelectionChanged(false);\n }\n\n // Don't announce for deleting values\n setAllowAnnouncement(\"Backspace\" !== event.key);\n handleInputKeyDown(event);\n notifyPopper(event);\n };\n\n const handleListClick = (event: MouseEvent) => {\n console.log(\"handle list click\");\n const inputEl = inputRef.current;\n if (inputEl != null) {\n inputEl.focus();\n }\n\n if (restListProps.onClick) {\n restListProps.onClick(event as MouseEvent<HTMLDivElement>);\n }\n\n notifyPopper(event);\n };\n\n const mergedInputProps = {\n ...inputProps.inputProps,\n role: \"combobox\",\n \"aria-owns\": listId,\n \"aria-label\": ariaLabel,\n \"aria-expanded\": isListOpen,\n \"aria-activedescendant\":\n isListOpen && selectionChanged ? null : ariaActiveDescendant,\n };\n\n return {\n inputRef: handleInputRef,\n listContext: {\n state,\n helpers,\n },\n inputProps: {\n ...restProps,\n ...inputProps,\n disabled,\n allowAnnouncement,\n id: inputId,\n value: inputValue,\n onFocus: handleInputFocus,\n onBlur: handleInputBlur,\n onChange: handleInputChange,\n onKeyDown: handleKeyDown,\n onSelect: handleInputSelect,\n inputProps: mergedInputProps,\n } as Partial<InputProps> & { allowAnnouncement: boolean },\n listProps: {\n ...restListProps,\n source,\n itemToString,\n itemTextHighlightPattern,\n onClick: handleListClick,\n isListOpen: isListOpen && Boolean(source.length),\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useComboBox.js","sources":["../src/combo-box-deprecated/internal/useComboBox.ts"],"sourcesContent":["import {\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n} from \"@salt-ds/core\";\nimport {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useList } from \"../../list-deprecated\";\nimport { defaultItemToString } from \"../../tokenized-input/internal/defaultItemToString\";\nimport { getDefaultFilter, getDefaultFilterRegex } from \"../filterHelpers\";\nimport { DefaultComboBoxProps } from \"./DefaultComboBox\";\nimport { isToggleList, usePopperStatus } from \"./usePopperStatus\";\nimport { InputProps } from \"../../input\";\n\nexport type UseComboBoxProps<Item> = Omit<\n DefaultComboBoxProps<Item>,\n | \"ListItem\"\n | \"Tooltip\"\n | \"tooltipEnterDelay\"\n | \"tooltipLeaveDelay\"\n | \"tooltipPlacement\"\n | \"rootRef\"\n | \"listRef\"\n | \"inputRef\"\n | \"rootWidth\"\n | \"listWidth\"\n>;\n\nexport const useComboBox = <Item>(props: UseComboBoxProps<Item>) => {\n // Deconstruct valid props for List, everything else will be passed to input using `restProps`\n const {\n initialOpen,\n initialSelectedItem,\n allowFreeText,\n displayedItemCount,\n virtualized,\n disabled,\n onBlur,\n onFocus,\n onChange,\n onSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n id: idProp,\n source: sourceProp = [],\n selectedItem: selectedItemProp,\n inputValue: inputValueProp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n getFilterRegex = getDefaultFilterRegex,\n itemToString = defaultItemToString,\n stringToItem: stringToItemProp = (value) => (value ? value.trim() : value),\n InputProps: inputProps = {\n onBlur: onBlur || onInputBlur,\n onFocus: onFocus || onInputFocus,\n onChange: onInputChange,\n onSelect: onInputSelect,\n },\n ListProps = {},\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const listId = `${id}-list`;\n\n const [inputValue, setInputValue] = useControlled({\n controlled: inputValueProp,\n default: \"\",\n name: \"ComboBox\",\n state: \"inputValue\",\n });\n\n const [selectionChanged, setSelectionChanged] = useState(false);\n const inputRef = useRef<HTMLElement>(null);\n\n const [allowAnnouncement, setAllowAnnouncement] = useState(false);\n\n const labels = useMemo(\n () => sourceProp.map(itemToString),\n [sourceProp, itemToString]\n );\n\n const source = useMemo(() => {\n if (inputValue && inputValue.trim().length) {\n const itemFilter = getDefaultFilter(inputValue, getFilterRegex);\n return sourceProp.filter((item) => itemFilter(itemToString(item)));\n }\n return sourceProp;\n }, [inputValue, sourceProp, getFilterRegex, itemToString]);\n\n const itemTextHighlightPattern = useMemo(\n () =>\n inputValue && inputValue.trim().length\n ? getFilterRegex(inputValue)\n : undefined,\n [inputValue, getFilterRegex]\n );\n\n const { focusedRef, state, helpers, listProps } = useList({\n ...ListProps,\n source,\n disabled,\n virtualized,\n itemToString,\n initialSelectedItem,\n selectedItem: selectedItemProp,\n displayedItemCount,\n onChange,\n onSelect,\n id: listId,\n tabToSelect: true,\n disableFocus: true,\n disableMouseDown: true,\n \"aria-labelledby\": ariaLabelledBy,\n });\n\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n\n const handleFocusVisibleRef = useForkRef(focusVisibleRef, focusedRef);\n const handleInputRef = useForkRef(inputRef, handleFocusVisibleRef);\n\n const { \"aria-activedescendant\": ariaActiveDescendant, ...restListProps } =\n listProps;\n\n const { selectedItem, highlightedIndex } = state;\n const [quickSelection, setQuickSelection] = useState(false);\n const { setFocusVisible, setSelectedItem, setHighlightedIndex } = helpers;\n\n const reconcileInput = useCallback(() => {\n setInputValue(selectedItem == null ? \"\" : itemToString(selectedItem));\n }, [selectedItem, itemToString, setInputValue]);\n\n const selectInputValue = (event: ChangeEvent) => {\n const nextIndex = inputValue ? labels.indexOf(inputValue.trim()) : -1;\n\n // Select the item if we can match its label; otherwise create a new one\n const nextItem = (\n nextIndex >= 0 ? sourceProp[nextIndex] : stringToItemProp(inputValue)\n ) as Item;\n\n if (onSelect) {\n onSelect(event, nextItem);\n }\n\n if (nextItem !== selectedItem) {\n setSelectedItem(nextItem);\n onChange && onChange(event, nextItem);\n }\n };\n\n const { isOpen: isListOpen, notifyPopper } = usePopperStatus({\n initialOpen,\n });\n\n // Reconcile input when the function is updated - most likely to be a selectItem change\n useEffect(reconcileInput, [reconcileInput]);\n\n // Reset highlight when list closes\n useEffect(() => {\n if (!isListOpen) {\n setHighlightedIndex(undefined);\n setQuickSelection(false);\n }\n }, [isListOpen, setHighlightedIndex, quickSelection]);\n\n const initHighlightedIndex = () => {\n setHighlightedIndex(selectedItem ? source.indexOf(selectedItem) : -1);\n };\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n setFocusVisible(true);\n }\n\n if (highlightedIndex == null) {\n initHighlightedIndex();\n }\n\n if (inputProps.onFocus) {\n inputProps.onFocus(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputBlur = (event: FocusEvent<HTMLInputElement>) => {\n console.log(\"BLUR\");\n handleBlurVisible();\n setAllowAnnouncement(false);\n\n if (allowFreeText) {\n selectInputValue(event as ChangeEvent);\n } else {\n reconcileInput();\n }\n\n if (restListProps.onBlur) {\n restListProps.onBlur(event as FocusEvent<HTMLDivElement>);\n }\n\n if (inputProps.onBlur) {\n inputProps.onBlur(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newValue = event.target.value;\n setInputValue(newValue);\n\n setHighlightedIndex(undefined);\n setQuickSelection(newValue.length > 0 && !allowFreeText);\n\n // Clear the selection when input is cleared\n if (newValue.length === 0) {\n setSelectedItem(undefined);\n onChange && onChange(event, null);\n }\n\n if (inputProps.onChange) {\n inputProps.onChange(event, \"\");\n }\n };\n\n const handleInputSelect = (event: SyntheticEvent<HTMLDivElement>) => {\n console.log(`handleInputSelect setSelectionChanged = true`);\n setSelectionChanged(true);\n if (inputProps.onSelect) {\n inputProps.onSelect(event);\n }\n };\n\n const handleInputKeyDown = (event: KeyboardEvent) => {\n if (\"Escape\" === event.key) {\n setHighlightedIndex(undefined);\n\n if (allowFreeText) {\n setInputValue(\"\");\n } else {\n reconcileInput();\n }\n }\n\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(event as KeyboardEvent<HTMLInputElement>);\n }\n };\n\n const handleFirstItemSelection = (event: KeyboardEvent | ChangeEvent) => {\n if (\n !allowFreeText &&\n (event as KeyboardEvent).key === \"Enter\" &&\n quickSelection\n ) {\n setSelectedItem(source[0]);\n onSelect && onSelect(event, source[0]);\n onChange && onChange(event as ChangeEvent, source[0]);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n // Don't handle Alt modification key - pass it to popper as it should just toggle the open/close\n if (isToggleList(event)) {\n notifyPopper(event);\n return;\n }\n\n if (\n [\"ArrowUp\", \"ArrowDown\"].indexOf(event.key) !== -1 &&\n highlightedIndex == null\n ) {\n initHighlightedIndex();\n }\n\n handleFirstItemSelection(event);\n\n // Space, Home and End keydown should stay on input - don't pass it to list\n if ([\" \", \"Home\", \"End\"].indexOf(event.key) === -1) {\n if (restListProps.onKeyDown) {\n restListProps.onKeyDown(event as KeyboardEvent<HTMLDivElement>);\n }\n console.log(`handleKeyDown ${event.key} setSelectionCHanged = false`);\n setSelectionChanged(false);\n }\n\n // Don't announce for deleting values\n setAllowAnnouncement(\"Backspace\" !== event.key);\n handleInputKeyDown(event);\n notifyPopper(event);\n };\n\n const handleListClick = (event: MouseEvent) => {\n console.log(\"handle list click\");\n const inputEl = inputRef.current;\n if (inputEl != null) {\n inputEl.focus();\n }\n\n if (restListProps.onClick) {\n restListProps.onClick(event as MouseEvent<HTMLDivElement>);\n }\n\n notifyPopper(event);\n };\n\n const mergedInputProps = {\n ...inputProps.inputProps,\n role: \"combobox\",\n \"aria-owns\": listId,\n \"aria-label\": ariaLabel,\n \"aria-expanded\": isListOpen,\n \"aria-activedescendant\":\n isListOpen && selectionChanged ? null : ariaActiveDescendant,\n };\n\n return {\n inputRef: handleInputRef,\n listContext: {\n state,\n helpers,\n },\n inputProps: {\n ...restProps,\n ...inputProps,\n disabled,\n allowAnnouncement,\n id: inputId,\n value: inputValue,\n onFocus: handleInputFocus,\n onBlur: handleInputBlur,\n onChange: handleInputChange,\n onKeyDown: handleKeyDown,\n onSelect: handleInputSelect,\n inputProps: mergedInputProps,\n } as Partial<InputProps> & { allowAnnouncement: boolean },\n listProps: {\n ...restListProps,\n source,\n itemToString,\n itemTextHighlightPattern,\n onClick: handleListClick,\n isListOpen: isListOpen && Boolean(source.length),\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import '../../list-deprecated/ListItem.js';
|
|
|
7
7
|
import '../../list-deprecated/ListItemContext.js';
|
|
8
8
|
import '../../list-deprecated/ListStateContext.js';
|
|
9
9
|
import { useList } from '../../list-deprecated/useList.js';
|
|
10
|
+
import '../../utils/useFloatingUI.js';
|
|
10
11
|
import '../../tokenized-input/TokenizedInput.js';
|
|
11
12
|
import '../../tokenized-input/TokenizedInputBase.js';
|
|
12
13
|
import { useTokenizedInput } from '../../tokenized-input/useTokenizedInput.js';
|
package/dist-es/packages/lab/src/combo-box-deprecated/internal/useMultiSelectComboBox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMultiSelectComboBox.js","sources":["../src/combo-box-deprecated/internal/useMultiSelectComboBox.ts"],"sourcesContent":["import {\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEvent,\n RefObject,\n SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useList } from \"../../list-deprecated\";\nimport { ExpandButtonProps, useTokenizedInput } from \"../../tokenized-input\";\nimport { defaultItemToString } from \"../../tokenized-input/internal/defaultItemToString\";\nimport { usePrevious } from \"@salt-ds/core\";\nimport { getDefaultFilter, getDefaultFilterRegex } from \"../filterHelpers\";\nimport { MultiSelectComboBoxProps } from \"./MultiSelectComboBox\";\nimport { isToggleList, usePopperStatus } from \"./usePopperStatus\";\n\nconst REQUIRE_PREV_HIGHLIGHT = [\"ArrowUp\", \"ArrowDown\", \"PageUp\", \"PageDown\"];\n\nexport type UseMultiSelectComboBoxProps<Item> = Omit<\n MultiSelectComboBoxProps<Item>,\n \"inputRef\" | \"listContext\" | \"inputHelpers\" | \"inputProps\" | \"listProps\"\n> & { expandButtonRef: RefObject<HTMLElement> };\n\nexport const useMultiSelectComboBox = <Item>(\n props: Omit<UseMultiSelectComboBoxProps<Item>, \"rootRef\" | \"classes\">\n) => {\n // Deconstruct valid props for List, everything else will be passed to `useTokenizedInput` using `restProps`\n const {\n allowFreeText,\n displayedItemCount,\n virtualized,\n disabled,\n expandButtonRef,\n onBlur,\n onFocus,\n onChange,\n onSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n id: idProp,\n source: sourceProp,\n selectedItem: selectedItemProp,\n inputValue: inputValueProp,\n initialOpen,\n initialSelectedItem: initialSelectedItems,\n \"aria-labelledby\": ariaLabelledBy,\n getFilterRegex = getDefaultFilterRegex,\n itemToString = defaultItemToString,\n stringToItem: stringToItemProp = (_: any, value: string) => value.trim(),\n InputProps = {\n onBlur,\n onFocus,\n onInputBlur,\n onInputFocus,\n onInputChange,\n onInputSelect,\n },\n ListProps = {},\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const listId = `${id}-list`;\n\n const [inputValue, setInputValue] = useControlled({\n controlled: inputValueProp,\n default: \"\",\n name: \"MultiSelectComboBox\",\n state: \"inputValue\",\n });\n\n const { isOpen: isListOpen, notifyPopper } = usePopperStatus({\n initialOpen,\n isMultiSelect: true,\n });\n\n const [selectionChanged, setSelectionChanged] = useState(false);\n const inputBlurTimeout = useRef<number>(null);\n\n const [allowAnnouncement, setAllowAnnouncement] = useState(false);\n\n const labels = useMemo(\n () => sourceProp.map(itemToString),\n [sourceProp, itemToString]\n );\n\n const source = useMemo(() => {\n if (inputValue && inputValue.trim().length) {\n const itemFilter = getDefaultFilter(inputValue, getFilterRegex);\n return sourceProp.filter((item: Item) => itemFilter(itemToString(item)));\n }\n return sourceProp;\n }, [inputValue, sourceProp, getFilterRegex, itemToString]);\n\n const itemTextHighlightPattern = useMemo(\n () =>\n inputValue && inputValue.trim().length\n ? getFilterRegex(inputValue)\n : undefined,\n [inputValue, getFilterRegex]\n );\n\n const {\n focusedRef,\n listProps,\n state: listState,\n helpers: listHelpers,\n } = useList<Item, \"multiple\">({\n ...ListProps,\n source,\n disabled,\n virtualized,\n itemToString,\n displayedItemCount,\n onChange,\n onSelect,\n id: listId,\n disableFocus: true,\n disableMouseDown: true,\n selectionVariant: \"multiple\",\n initialSelectedItem: initialSelectedItems,\n selectedItem: selectedItemProp,\n \"aria-labelledby\": ariaLabelledBy,\n });\n\n const { \"aria-activedescendant\": ariaActiveDescendant, ...restListProps } =\n listProps;\n const { selectedItem } = listState;\n const [quickSelection, setQuickSelection] = useState(false);\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n const selectedItems = selectedItem as Item[];\n const {\n setSelectedItem: setSelectedItems,\n setHighlightedIndex: setHighlightedListIndex,\n } = listHelpers;\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n listHelpers.setFocusVisible(true);\n }\n\n if (InputProps.onInputFocus) {\n InputProps.onInputFocus(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputBlur = (\n event: FocusEvent<HTMLDivElement | HTMLInputElement>\n ) => {\n handleBlurVisible();\n setAllowAnnouncement(false);\n setInputValue(\"\");\n\n if (restListProps.onBlur) {\n restListProps.onBlur(event);\n }\n\n if (InputProps.onInputBlur) {\n InputProps.onInputBlur(event as FocusEvent<HTMLInputElement>);\n }\n\n notifyPopper(event);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n\n setQuickSelection(event.target.value.length > 0 && !allowFreeText);\n\n if (InputProps.onInputChange) {\n InputProps.onInputChange(event);\n }\n };\n\n const handleItemsChange = (newItems: Item[] | undefined) => {\n const uniqueItems = Array.from(new Set(newItems));\n setSelectedItems(uniqueItems);\n onChange && onChange(null as unknown as ChangeEvent, uniqueItems);\n };\n\n const handleInputSelect = (event: SyntheticEvent<HTMLInputElement>) => {\n event.persist();\n setSelectionChanged(true);\n\n if (InputProps.onInputSelect) {\n InputProps.onInputSelect(event);\n }\n };\n\n const handleClear = () => {\n setSelectedItems([]);\n };\n\n const stringToItem = (selected: Item[], value: string): Item | null => {\n const trimmed = value.trim();\n const item = stringToItemProp(selected, trimmed);\n const isSelected = selected.map(itemToString).indexOf(trimmed) !== -1;\n\n // Either allow free text item OR the item has to be in the source list\n return !isSelected && (allowFreeText || labels.indexOf(trimmed) !== -1)\n ? (item as Item)\n : null;\n };\n\n // Reuse selectItem from list state for a controlled version of tokenized input\n const {\n inputRef,\n inputProps,\n state: inputState,\n helpers: inputHelpers,\n } = useTokenizedInput({\n ...restProps,\n ...InputProps,\n disabled,\n itemToString,\n stringToItem,\n selectedItems,\n initialSelectedItems,\n onInputFocus: handleInputFocus,\n onInputBlur: handleInputBlur,\n onInputChange: handleInputChange,\n onInputSelect: handleInputSelect,\n onChange: handleItemsChange,\n onClear: handleClear,\n onKeyDown: InputProps.onKeyDown as KeyboardEventHandler<\n HTMLInputElement | HTMLButtonElement\n >,\n });\n\n const handleFocusVisibleRef = useForkRef(focusVisibleRef, focusedRef);\n const handleInputRef = useForkRef(inputRef, handleFocusVisibleRef);\n\n const { setHighlightedIndex: setHighlightedPillIndex } = inputHelpers;\n\n // Reset highlight when list closes\n useEffect(() => {\n if (!isListOpen) {\n setHighlightedListIndex(undefined);\n setQuickSelection(false);\n }\n }, [isListOpen, setHighlightedListIndex, setQuickSelection]);\n\n const previousSelectedItems = usePrevious(selectedItems);\n\n // Reset list highlight when selectItems change\n useIsomorphicLayoutEffect(() => {\n if (\n selectedItems.some(\n (item) => !(previousSelectedItems || []).includes(item)\n )\n ) {\n setInputValue(\"\");\n }\n\n if (!selectedItems.length) {\n setHighlightedListIndex(undefined);\n }\n }, [\n selectedItems,\n previousSelectedItems,\n setInputValue,\n setHighlightedListIndex,\n ]);\n\n // Remove highlight from list if a pill is highlighted\n useEffect(() => {\n if (\n inputState.highlightedIndex != null &&\n inputState.highlightedIndex >= 0\n ) {\n setHighlightedListIndex(undefined);\n setQuickSelection(false);\n }\n }, [inputState.highlightedIndex, setHighlightedListIndex, setQuickSelection]);\n\n const highlightedIndex = listState && listState.highlightedIndex;\n\n // Remove highlight from pills if a list item is highlighted\n useEffect(() => {\n if (highlightedIndex != null && highlightedIndex >= 0) {\n setHighlightedPillIndex(undefined);\n }\n }, [highlightedIndex, setHighlightedPillIndex]);\n\n // Keep highlighted index in sync with the filtered source\n useEffect(() => {\n setHighlightedListIndex(undefined);\n }, [source, setHighlightedListIndex]);\n\n const handleFirstItemSelection = (event: KeyboardEvent | ChangeEvent) => {\n if (\n !allowFreeText &&\n (event as KeyboardEvent).key === \"Enter\" &&\n quickSelection\n ) {\n const newItem = source[0];\n const newSelectedItems =\n selectedItems.indexOf(newItem) === -1\n ? selectedItems.concat(source.slice(0, 1))\n : selectedItems.filter((item) => item !== newItem);\n setSelectedItems(newSelectedItems);\n onSelect && onSelect(event, newItem);\n onChange && onChange(event as ChangeEvent, newSelectedItems);\n }\n };\n\n const handleListOpenKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (\"Escape\" === event.key && inputProps.expanded) {\n setTimeout(() => {\n if (expandButtonRef.current) {\n expandButtonRef.current.focus();\n }\n }, 250);\n }\n\n handleFirstItemSelection(event);\n\n if (\n \"Home\" !== event.key &&\n \"End\" !== event.key &&\n !(\" \" === event.key && !event.ctrlKey)\n ) {\n if (restListProps.onKeyDown) {\n restListProps.onKeyDown(event);\n }\n setSelectionChanged(false);\n }\n };\n\n const handleInputKeyDown = (\n event: KeyboardEvent<HTMLInputElement | HTMLButtonElement | HTMLDivElement>\n ) => {\n if (\"Escape\" === event.key) {\n setInputValue(\"\");\n setHighlightedListIndex(undefined);\n }\n\n // Space key clashes with the remove action of TokenizedInput\n // For combo box, pressing a space key should just add a space\n if (\" \" === event.key && !event.ctrlKey) {\n setHighlightedPillIndex(undefined);\n } else {\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(\n event as KeyboardEvent<HTMLInputElement | HTMLButtonElement>\n );\n }\n }\n\n if (\n !isToggleList(event) &&\n listState.highlightedIndex == null &&\n REQUIRE_PREV_HIGHLIGHT.indexOf(event.key) !== -1\n ) {\n event.preventDefault();\n // Initialize list highlight if there's no previous value\n setHighlightedListIndex(\n Math.min(quickSelection ? 1 : 0, source.length - 1)\n );\n setQuickSelection(false);\n setSelectionChanged(false);\n } else if (isListOpen) {\n handleListOpenKeyDown(event as KeyboardEvent<HTMLDivElement>);\n }\n\n // Don't announce for deleting values\n setAllowAnnouncement(\"Backspace\" !== event.key);\n notifyPopper(event);\n };\n\n const handleListClick = (event: MouseEvent<HTMLDivElement>) => {\n clearTimeout(\n inputBlurTimeout.current == null ? undefined : inputBlurTimeout.current\n );\n const inputEl = inputRef && (inputRef as RefObject<HTMLElement>).current;\n if (inputEl) {\n inputEl.focus();\n }\n\n if (restListProps.onClick) {\n restListProps.onClick(event);\n }\n };\n\n const mergedInputProps = {\n ...inputProps.InputProps,\n inputProps: {\n ...(inputProps.InputProps || {}).inputProps,\n role: \"textbox\",\n \"aria-roledescription\": \"MultiSelect Combobox\",\n },\n };\n\n if (ariaActiveDescendant && !selectionChanged) {\n // either null or undefined will prevent tokenized-input from\n // setting active-descendant based on pill selection.\n mergedInputProps.inputProps[\"aria-activedescendant\"] = ariaActiveDescendant;\n }\n\n const expandButtonProps = {\n accessibleText: undefined,\n role: \"button\",\n \"aria-roledescription\": \"Expand combobox button\",\n \"aria-labelledby\": [ariaLabelledBy, `${inputId}-input`]\n .filter(Boolean)\n .join(\" \"),\n } as ExpandButtonProps;\n\n return {\n inputHelpers,\n inputRef: handleInputRef,\n listContext: {\n state: listState,\n helpers: listHelpers,\n },\n inputProps: {\n ...inputProps,\n selectedItems,\n allowAnnouncement,\n id: inputId,\n value: inputValue,\n ExpandButtonProps: expandButtonProps,\n InputProps: mergedInputProps,\n onKeyDown: handleInputKeyDown,\n },\n listProps: {\n ...restListProps,\n source,\n itemToString,\n itemTextHighlightPattern,\n onClick: handleListClick,\n isListOpen: isListOpen && Boolean(source.length),\n },\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4BA,MAAM,sBAAyB,GAAA,CAAC,SAAW,EAAA,WAAA,EAAa,UAAU,UAAU,CAAA,CAAA;AAO/D,MAAA,sBAAA,GAAyB,CACpC,KACG,KAAA;AAEH,EAAM,MAAA;AAAA,IACJ,aAAA;AAAA,IACA,kBAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,EAAI,EAAA,MAAA;AAAA,IACJ,MAAQ,EAAA,UAAA;AAAA,IACR,YAAc,EAAA,gBAAA;AAAA,IACd,UAAY,EAAA,cAAA;AAAA,IACZ,WAAA;AAAA,IACA,mBAAqB,EAAA,oBAAA;AAAA,IACrB,iBAAmB,EAAA,cAAA;AAAA,IACnB,cAAiB,GAAA,qBAAA;AAAA,IACjB,YAAe,GAAA,mBAAA;AAAA,IACf,cAAc,gBAAmB,GAAA,CAAC,CAAQ,EAAA,KAAA,KAAkB,MAAM,IAAK,EAAA;AAAA,IACvE,UAAa,GAAA;AAAA,MACX,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,KACF;AAAA,IACA,YAAY,EAAC;AAAA,IACV,GAAA,SAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,EAAA,GAAK,MAAM,MAAM,CAAA,CAAA;AACvB,EAAA,MAAM,UAAU,CAAG,EAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AACnB,EAAA,MAAM,SAAS,CAAG,EAAA,EAAA,CAAA,KAAA,CAAA,CAAA;AAElB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,aAAc,CAAA;AAAA,IAChD,UAAY,EAAA,cAAA;AAAA,IACZ,OAAS,EAAA,EAAA;AAAA,IACT,IAAM,EAAA,qBAAA;AAAA,IACN,KAAO,EAAA,YAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,MAAA,EAAQ,UAAY,EAAA,YAAA,KAAiB,eAAgB,CAAA;AAAA,IAC3D,WAAA;AAAA,IACA,aAAe,EAAA,IAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC9D,EAAM,MAAA,gBAAA,GAAmB,OAAe,IAAI,CAAA,CAAA;AAE5C,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAEhE,EAAA,MAAM,MAAS,GAAA,OAAA;AAAA,IACb,MAAM,UAAW,CAAA,GAAA,CAAI,YAAY,CAAA;AAAA,IACjC,CAAC,YAAY,YAAY,CAAA;AAAA,GAC3B,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,QAAQ,MAAM;AAC3B,IAAA,IAAI,UAAc,IAAA,UAAA,CAAW,IAAK,EAAA,CAAE,MAAQ,EAAA;AAC1C,MAAM,MAAA,UAAA,GAAa,gBAAiB,CAAA,UAAA,EAAY,cAAc,CAAA,CAAA;AAC9D,MAAO,OAAA,UAAA,CAAW,OAAO,CAAC,IAAA,KAAe,WAAW,YAAa,CAAA,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,KACzE;AACA,IAAO,OAAA,UAAA,CAAA;AAAA,KACN,CAAC,UAAA,EAAY,UAAY,EAAA,cAAA,EAAgB,YAAY,CAAC,CAAA,CAAA;AAEzD,EAAA,MAAM,wBAA2B,GAAA,OAAA;AAAA,IAC/B,MACE,cAAc,UAAW,CAAA,IAAA,GAAO,MAC5B,GAAA,cAAA,CAAe,UAAU,CACzB,GAAA,KAAA,CAAA;AAAA,IACN,CAAC,YAAY,cAAc,CAAA;AAAA,GAC7B,CAAA;AAEA,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAO,EAAA,SAAA;AAAA,IACP,OAAS,EAAA,WAAA;AAAA,MACP,OAA0B,CAAA;AAAA,IAC5B,GAAG,SAAA;AAAA,IACH,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,EAAI,EAAA,MAAA;AAAA,IACJ,YAAc,EAAA,IAAA;AAAA,IACd,gBAAkB,EAAA,IAAA;AAAA,IAClB,gBAAkB,EAAA,UAAA;AAAA,IAClB,mBAAqB,EAAA,oBAAA;AAAA,IACrB,YAAc,EAAA,gBAAA;AAAA,IACd,iBAAmB,EAAA,cAAA;AAAA,GACpB,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,uBAAA,EAAyB,oBAAyB,EAAA,GAAA,aAAA,EACxD,GAAA,SAAA,CAAA;AACF,EAAM,MAAA,EAAE,cAAiB,GAAA,SAAA,CAAA;AACzB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC1D,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,OAAS,EAAA,kBAAA;AAAA,IACT,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,eAAA;AAAA,MACH,iBAAkB,EAAA,CAAA;AACtB,EAAA,MAAM,aAAgB,GAAA,YAAA,CAAA;AACtB,EAAM,MAAA;AAAA,IACJ,eAAiB,EAAA,gBAAA;AAAA,IACjB,mBAAqB,EAAA,uBAAA;AAAA,GACnB,GAAA,WAAA,CAAA;AAEJ,EAAM,MAAA,gBAAA,GAAmB,CAAC,KAAwC,KAAA;AAChE,IAAA,kBAAA,CAAmB,KAAK,CAAA,CAAA;AACxB,IAAA,IAAI,kBAAkB,OAAS,EAAA;AAC7B,MAAA,WAAA,CAAY,gBAAgB,IAAI,CAAA,CAAA;AAAA,KAClC;AAEA,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,UAAA,CAAW,aAAa,KAAK,CAAA,CAAA;AAAA,KAC/B;AAEA,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,CACtB,KACG,KAAA;AACH,IAAkB,iBAAA,EAAA,CAAA;AAClB,IAAA,oBAAA,CAAqB,KAAK,CAAA,CAAA;AAC1B,IAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAEhB,IAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,MAAA,aAAA,CAAc,OAAO,KAAK,CAAA,CAAA;AAAA,KAC5B;AAEA,IAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,MAAA,UAAA,CAAW,YAAY,KAAqC,CAAA,CAAA;AAAA,KAC9D;AAEA,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,KAAyC,KAAA;AAClE,IAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAEhC,IAAA,iBAAA,CAAkB,MAAM,MAAO,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,IAAK,CAAC,aAAa,CAAA,CAAA;AAEjE,IAAA,IAAI,WAAW,aAAe,EAAA;AAC5B,MAAA,UAAA,CAAW,cAAc,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,QAAiC,KAAA;AAC1D,IAAA,MAAM,cAAc,KAAM,CAAA,IAAA,CAAK,IAAI,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAA;AAChD,IAAA,gBAAA,CAAiB,WAAW,CAAA,CAAA;AAC5B,IAAY,QAAA,IAAA,QAAA,CAAS,MAAgC,WAAW,CAAA,CAAA;AAAA,GAClE,CAAA;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,KAA4C,KAAA;AACrE,IAAA,KAAA,CAAM,OAAQ,EAAA,CAAA;AACd,IAAA,mBAAA,CAAoB,IAAI,CAAA,CAAA;AAExB,IAAA,IAAI,WAAW,aAAe,EAAA;AAC5B,MAAA,UAAA,CAAW,cAAc,KAAK,CAAA,CAAA;AAAA,KAChC;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,gBAAA,CAAiB,EAAE,CAAA,CAAA;AAAA,GACrB,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,QAAA,EAAkB,KAA+B,KAAA;AACrE,IAAM,MAAA,OAAA,GAAU,MAAM,IAAK,EAAA,CAAA;AAC3B,IAAM,MAAA,IAAA,GAAO,gBAAiB,CAAA,QAAA,EAAU,OAAO,CAAA,CAAA;AAC/C,IAAA,MAAM,aAAa,QAAS,CAAA,GAAA,CAAI,YAAY,CAAE,CAAA,OAAA,CAAQ,OAAO,CAAM,KAAA,CAAA,CAAA,CAAA;AAGnE,IAAO,OAAA,CAAC,eAAe,aAAiB,IAAA,MAAA,CAAO,QAAQ,OAAO,CAAA,KAAM,MAC/D,IACD,GAAA,IAAA,CAAA;AAAA,GACN,CAAA;AAGA,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAO,EAAA,UAAA;AAAA,IACP,OAAS,EAAA,YAAA;AAAA,MACP,iBAAkB,CAAA;AAAA,IACpB,GAAG,SAAA;AAAA,IACH,GAAG,UAAA;AAAA,IACH,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAc,EAAA,gBAAA;AAAA,IACd,WAAa,EAAA,eAAA;AAAA,IACb,aAAe,EAAA,iBAAA;AAAA,IACf,aAAe,EAAA,iBAAA;AAAA,IACf,QAAU,EAAA,iBAAA;AAAA,IACV,OAAS,EAAA,WAAA;AAAA,IACT,WAAW,UAAW,CAAA,SAAA;AAAA,GAGvB,CAAA,CAAA;AAED,EAAM,MAAA,qBAAA,GAAwB,UAAW,CAAA,eAAA,EAAiB,UAAU,CAAA,CAAA;AACpE,EAAM,MAAA,cAAA,GAAiB,UAAW,CAAA,QAAA,EAAU,qBAAqB,CAAA,CAAA;AAEjE,EAAM,MAAA,EAAE,mBAAqB,EAAA,uBAAA,EAA4B,GAAA,YAAA,CAAA;AAGzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AACjC,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAC,UAAY,EAAA,uBAAA,EAAyB,iBAAiB,CAAC,CAAA,CAAA;AAE3D,EAAM,MAAA,qBAAA,GAAwB,YAAY,aAAa,CAAA,CAAA;AAGvD,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IACE,aAAc,CAAA,IAAA;AAAA,MACZ,CAAC,IAAS,KAAA,CAAA,CAAE,yBAAyB,EAAC,EAAG,SAAS,IAAI,CAAA;AAAA,KAExD,EAAA;AACA,MAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAAA,KAClB;AAEA,IAAI,IAAA,CAAC,cAAc,MAAQ,EAAA;AACzB,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AAAA,KACnC;AAAA,GACC,EAAA;AAAA,IACD,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,aAAA;AAAA,IACA,uBAAA;AAAA,GACD,CAAA,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IACE,UAAW,CAAA,gBAAA,IAAoB,IAC/B,IAAA,UAAA,CAAW,oBAAoB,CAC/B,EAAA;AACA,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AACjC,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AAAA,KACzB;AAAA,KACC,CAAC,UAAA,CAAW,gBAAkB,EAAA,uBAAA,EAAyB,iBAAiB,CAAC,CAAA,CAAA;AAE5E,EAAM,MAAA,gBAAA,GAAmB,aAAa,SAAU,CAAA,gBAAA,CAAA;AAGhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,gBAAA,IAAoB,IAAQ,IAAA,gBAAA,IAAoB,CAAG,EAAA;AACrD,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AAAA,KACnC;AAAA,GACC,EAAA,CAAC,gBAAkB,EAAA,uBAAuB,CAAC,CAAA,CAAA;AAG9C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AAAA,GAChC,EAAA,CAAC,MAAQ,EAAA,uBAAuB,CAAC,CAAA,CAAA;AAEpC,EAAM,MAAA,wBAAA,GAA2B,CAAC,KAAuC,KAAA;AACvE,IAAA,IACE,CAAC,aAAA,IACA,KAAwB,CAAA,GAAA,KAAQ,WACjC,cACA,EAAA;AACA,MAAA,MAAM,UAAU,MAAO,CAAA,CAAA,CAAA,CAAA;AACvB,MAAA,MAAM,mBACJ,aAAc,CAAA,OAAA,CAAQ,OAAO,CAAM,KAAA,CAAA,CAAA,GAC/B,cAAc,MAAO,CAAA,MAAA,CAAO,MAAM,CAAG,EAAA,CAAC,CAAC,CACvC,GAAA,aAAA,CAAc,OAAO,CAAC,IAAA,KAAS,SAAS,OAAO,CAAA,CAAA;AACrD,MAAA,gBAAA,CAAiB,gBAAgB,CAAA,CAAA;AACjC,MAAY,QAAA,IAAA,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AACnC,MAAY,QAAA,IAAA,QAAA,CAAS,OAAsB,gBAAgB,CAAA,CAAA;AAAA,KAC7D;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAAC,KAAyC,KAAA;AACtE,IAAA,IAAI,QAAa,KAAA,KAAA,CAAM,GAAO,IAAA,UAAA,CAAW,QAAU,EAAA;AACjD,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,IAAI,gBAAgB,OAAS,EAAA;AAC3B,UAAA,eAAA,CAAgB,QAAQ,KAAM,EAAA,CAAA;AAAA,SAChC;AAAA,SACC,GAAG,CAAA,CAAA;AAAA,KACR;AAEA,IAAA,wBAAA,CAAyB,KAAK,CAAA,CAAA;AAE9B,IAAA,IACE,MAAW,KAAA,KAAA,CAAM,GACjB,IAAA,KAAA,KAAU,KAAM,CAAA,GAAA,IAChB,EAAE,GAAA,KAAQ,KAAM,CAAA,GAAA,IAAO,CAAC,KAAA,CAAM,OAC9B,CAAA,EAAA;AACA,MAAA,IAAI,cAAc,SAAW,EAAA;AAC3B,QAAA,aAAA,CAAc,UAAU,KAAK,CAAA,CAAA;AAAA,OAC/B;AACA,MAAA,mBAAA,CAAoB,KAAK,CAAA,CAAA;AAAA,KAC3B;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,CACzB,KACG,KAAA;AACH,IAAI,IAAA,QAAA,KAAa,MAAM,GAAK,EAAA;AAC1B,MAAA,aAAA,CAAc,EAAE,CAAA,CAAA;AAChB,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AAAA,KACnC;AAIA,IAAA,IAAI,GAAQ,KAAA,KAAA,CAAM,GAAO,IAAA,CAAC,MAAM,OAAS,EAAA;AACvC,MAAA,uBAAA,CAAwB,KAAS,CAAA,CAAA,CAAA;AAAA,KAC5B,MAAA;AACL,MAAA,IAAI,WAAW,SAAW,EAAA;AACxB,QAAW,UAAA,CAAA,SAAA;AAAA,UACT,KAAA;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAA,IACE,CAAC,YAAA,CAAa,KAAK,CAAA,IACnB,SAAU,CAAA,gBAAA,IAAoB,IAC9B,IAAA,sBAAA,CAAuB,OAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,KAAM,CAC9C,CAAA,EAAA;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AAErB,MAAA,uBAAA;AAAA,QACE,KAAK,GAAI,CAAA,cAAA,GAAiB,IAAI,CAAG,EAAA,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,OACpD,CAAA;AACA,MAAA,iBAAA,CAAkB,KAAK,CAAA,CAAA;AACvB,MAAA,mBAAA,CAAoB,KAAK,CAAA,CAAA;AAAA,eAChB,UAAY,EAAA;AACrB,MAAA,qBAAA,CAAsB,KAAsC,CAAA,CAAA;AAAA,KAC9D;AAGA,IAAqB,oBAAA,CAAA,WAAA,KAAgB,MAAM,GAAG,CAAA,CAAA;AAC9C,IAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,CAAC,KAAsC,KAAA;AAC7D,IAAA,YAAA;AAAA,MACE,gBAAiB,CAAA,OAAA,IAAW,IAAO,GAAA,KAAA,CAAA,GAAY,gBAAiB,CAAA,OAAA;AAAA,KAClE,CAAA;AACA,IAAM,MAAA,OAAA,GAAU,YAAa,QAAoC,CAAA,OAAA,CAAA;AACjE,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,OAAA,CAAQ,KAAM,EAAA,CAAA;AAAA,KAChB;AAEA,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAA,aAAA,CAAc,QAAQ,KAAK,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,GAAG,UAAW,CAAA,UAAA;AAAA,IACd,UAAY,EAAA;AAAA,MACV,GAAI,CAAA,UAAA,CAAW,UAAc,IAAA,EAAI,EAAA,UAAA;AAAA,MACjC,IAAM,EAAA,SAAA;AAAA,MACN,sBAAwB,EAAA,sBAAA;AAAA,KAC1B;AAAA,GACF,CAAA;AAEA,EAAI,IAAA,oBAAA,IAAwB,CAAC,gBAAkB,EAAA;AAG7C,IAAA,gBAAA,CAAiB,WAAW,uBAA2B,CAAA,GAAA,oBAAA,CAAA;AAAA,GACzD;AAEA,EAAA,MAAM,iBAAoB,GAAA;AAAA,IACxB,cAAgB,EAAA,KAAA,CAAA;AAAA,IAChB,IAAM,EAAA,QAAA;AAAA,IACN,sBAAwB,EAAA,wBAAA;AAAA,IACxB,iBAAA,EAAmB,CAAC,cAAA,EAAgB,CAAG,EAAA,OAAA,CAAA,MAAA,CAAe,EACnD,MAAO,CAAA,OAAO,CACd,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,GACb,CAAA;AAEA,EAAO,OAAA;AAAA,IACL,YAAA;AAAA,IACA,QAAU,EAAA,cAAA;AAAA,IACV,WAAa,EAAA;AAAA,MACX,KAAO,EAAA,SAAA;AAAA,MACP,OAAS,EAAA,WAAA;AAAA,KACX;AAAA,IACA,UAAY,EAAA;AAAA,MACV,GAAG,UAAA;AAAA,MACH,aAAA;AAAA,MACA,iBAAA;AAAA,MACA,EAAI,EAAA,OAAA;AAAA,MACJ,KAAO,EAAA,UAAA;AAAA,MACP,iBAAmB,EAAA,iBAAA;AAAA,MACnB,UAAY,EAAA,gBAAA;AAAA,MACZ,SAAW,EAAA,kBAAA;AAAA,KACb;AAAA,IACA,SAAW,EAAA;AAAA,MACT,GAAG,aAAA;AAAA,MACH,MAAA;AAAA,MACA,YAAA;AAAA,MACA,wBAAA;AAAA,MACA,OAAS,EAAA,eAAA;AAAA,MACT,UAAY,EAAA,UAAA,IAAc,OAAQ,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,KACjD;AAAA,GACF,CAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"useMultiSelectComboBox.js","sources":["../src/combo-box-deprecated/internal/useMultiSelectComboBox.ts"],"sourcesContent":["import {\n useControlled,\n useForkRef,\n useId,\n useIsFocusVisible,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEvent,\n RefObject,\n SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useList } from \"../../list-deprecated\";\nimport { ExpandButtonProps, useTokenizedInput } from \"../../tokenized-input\";\nimport { defaultItemToString } from \"../../tokenized-input/internal/defaultItemToString\";\nimport { usePrevious } from \"@salt-ds/core\";\nimport { getDefaultFilter, getDefaultFilterRegex } from \"../filterHelpers\";\nimport { MultiSelectComboBoxProps } from \"./MultiSelectComboBox\";\nimport { isToggleList, usePopperStatus } from \"./usePopperStatus\";\n\nconst REQUIRE_PREV_HIGHLIGHT = [\"ArrowUp\", \"ArrowDown\", \"PageUp\", \"PageDown\"];\n\nexport type UseMultiSelectComboBoxProps<Item> = Omit<\n MultiSelectComboBoxProps<Item>,\n \"inputRef\" | \"listContext\" | \"inputHelpers\" | \"inputProps\" | \"listProps\"\n> & { expandButtonRef: RefObject<HTMLElement> };\n\nexport const useMultiSelectComboBox = <Item>(\n props: Omit<UseMultiSelectComboBoxProps<Item>, \"rootRef\" | \"classes\">\n) => {\n // Deconstruct valid props for List, everything else will be passed to `useTokenizedInput` using `restProps`\n const {\n allowFreeText,\n displayedItemCount,\n virtualized,\n disabled,\n expandButtonRef,\n onBlur,\n onFocus,\n onChange,\n onSelect,\n onInputChange,\n onInputFocus,\n onInputBlur,\n onInputSelect,\n id: idProp,\n source: sourceProp,\n selectedItem: selectedItemProp,\n inputValue: inputValueProp,\n initialOpen,\n initialSelectedItem: initialSelectedItems,\n \"aria-labelledby\": ariaLabelledBy,\n getFilterRegex = getDefaultFilterRegex,\n itemToString = defaultItemToString,\n stringToItem: stringToItemProp = (_: any, value: string) => value.trim(),\n InputProps = {\n onBlur,\n onFocus,\n onInputBlur,\n onInputFocus,\n onInputChange,\n onInputSelect,\n },\n ListProps = {},\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const listId = `${id}-list`;\n\n const [inputValue, setInputValue] = useControlled({\n controlled: inputValueProp,\n default: \"\",\n name: \"MultiSelectComboBox\",\n state: \"inputValue\",\n });\n\n const { isOpen: isListOpen, notifyPopper } = usePopperStatus({\n initialOpen,\n isMultiSelect: true,\n });\n\n const [selectionChanged, setSelectionChanged] = useState(false);\n const inputBlurTimeout = useRef<number>(null);\n\n const [allowAnnouncement, setAllowAnnouncement] = useState(false);\n\n const labels = useMemo(\n () => sourceProp.map(itemToString),\n [sourceProp, itemToString]\n );\n\n const source = useMemo(() => {\n if (inputValue && inputValue.trim().length) {\n const itemFilter = getDefaultFilter(inputValue, getFilterRegex);\n return sourceProp.filter((item: Item) => itemFilter(itemToString(item)));\n }\n return sourceProp;\n }, [inputValue, sourceProp, getFilterRegex, itemToString]);\n\n const itemTextHighlightPattern = useMemo(\n () =>\n inputValue && inputValue.trim().length\n ? getFilterRegex(inputValue)\n : undefined,\n [inputValue, getFilterRegex]\n );\n\n const {\n focusedRef,\n listProps,\n state: listState,\n helpers: listHelpers,\n } = useList<Item, \"multiple\">({\n ...ListProps,\n source,\n disabled,\n virtualized,\n itemToString,\n displayedItemCount,\n onChange,\n onSelect,\n id: listId,\n disableFocus: true,\n disableMouseDown: true,\n selectionVariant: \"multiple\",\n initialSelectedItem: initialSelectedItems,\n selectedItem: selectedItemProp,\n \"aria-labelledby\": ariaLabelledBy,\n });\n\n const { \"aria-activedescendant\": ariaActiveDescendant, ...restListProps } =\n listProps;\n const { selectedItem } = listState;\n const [quickSelection, setQuickSelection] = useState(false);\n const {\n isFocusVisibleRef,\n onFocus: handleFocusVisible,\n onBlur: handleBlurVisible,\n ref: focusVisibleRef,\n } = useIsFocusVisible();\n const selectedItems = selectedItem as Item[];\n const {\n setSelectedItem: setSelectedItems,\n setHighlightedIndex: setHighlightedListIndex,\n } = listHelpers;\n\n const handleInputFocus = (event: FocusEvent<HTMLInputElement>) => {\n handleFocusVisible(event);\n if (isFocusVisibleRef.current) {\n listHelpers.setFocusVisible(true);\n }\n\n if (InputProps.onInputFocus) {\n InputProps.onInputFocus(event);\n }\n\n notifyPopper(event);\n };\n\n const handleInputBlur = (\n event: FocusEvent<HTMLDivElement | HTMLInputElement>\n ) => {\n handleBlurVisible();\n setAllowAnnouncement(false);\n setInputValue(\"\");\n\n if (restListProps.onBlur) {\n restListProps.onBlur(event);\n }\n\n if (InputProps.onInputBlur) {\n InputProps.onInputBlur(event as FocusEvent<HTMLInputElement>);\n }\n\n notifyPopper(event);\n };\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n setInputValue(event.target.value);\n\n setQuickSelection(event.target.value.length > 0 && !allowFreeText);\n\n if (InputProps.onInputChange) {\n InputProps.onInputChange(event);\n }\n };\n\n const handleItemsChange = (newItems: Item[] | undefined) => {\n const uniqueItems = Array.from(new Set(newItems));\n setSelectedItems(uniqueItems);\n onChange && onChange(null as unknown as ChangeEvent, uniqueItems);\n };\n\n const handleInputSelect = (event: SyntheticEvent<HTMLInputElement>) => {\n event.persist();\n setSelectionChanged(true);\n\n if (InputProps.onInputSelect) {\n InputProps.onInputSelect(event);\n }\n };\n\n const handleClear = () => {\n setSelectedItems([]);\n };\n\n const stringToItem = (selected: Item[], value: string): Item | null => {\n const trimmed = value.trim();\n const item = stringToItemProp(selected, trimmed);\n const isSelected = selected.map(itemToString).indexOf(trimmed) !== -1;\n\n // Either allow free text item OR the item has to be in the source list\n return !isSelected && (allowFreeText || labels.indexOf(trimmed) !== -1)\n ? (item as Item)\n : null;\n };\n\n // Reuse selectItem from list state for a controlled version of tokenized input\n const {\n inputRef,\n inputProps,\n state: inputState,\n helpers: inputHelpers,\n } = useTokenizedInput({\n ...restProps,\n ...InputProps,\n disabled,\n itemToString,\n stringToItem,\n selectedItems,\n initialSelectedItems,\n onInputFocus: handleInputFocus,\n onInputBlur: handleInputBlur,\n onInputChange: handleInputChange,\n onInputSelect: handleInputSelect,\n onChange: handleItemsChange,\n onClear: handleClear,\n onKeyDown: InputProps.onKeyDown as KeyboardEventHandler<\n HTMLInputElement | HTMLButtonElement\n >,\n });\n\n const handleFocusVisibleRef = useForkRef(focusVisibleRef, focusedRef);\n const handleInputRef = useForkRef(inputRef, handleFocusVisibleRef);\n\n const { setHighlightedIndex: setHighlightedPillIndex } = inputHelpers;\n\n // Reset highlight when list closes\n useEffect(() => {\n if (!isListOpen) {\n setHighlightedListIndex(undefined);\n setQuickSelection(false);\n }\n }, [isListOpen, setHighlightedListIndex, setQuickSelection]);\n\n const previousSelectedItems = usePrevious(selectedItems);\n\n // Reset list highlight when selectItems change\n useIsomorphicLayoutEffect(() => {\n if (\n selectedItems.some(\n (item) => !(previousSelectedItems || []).includes(item)\n )\n ) {\n setInputValue(\"\");\n }\n\n if (!selectedItems.length) {\n setHighlightedListIndex(undefined);\n }\n }, [\n selectedItems,\n previousSelectedItems,\n setInputValue,\n setHighlightedListIndex,\n ]);\n\n // Remove highlight from list if a pill is highlighted\n useEffect(() => {\n if (\n inputState.highlightedIndex != null &&\n inputState.highlightedIndex >= 0\n ) {\n setHighlightedListIndex(undefined);\n setQuickSelection(false);\n }\n }, [inputState.highlightedIndex, setHighlightedListIndex, setQuickSelection]);\n\n const highlightedIndex = listState && listState.highlightedIndex;\n\n // Remove highlight from pills if a list item is highlighted\n useEffect(() => {\n if (highlightedIndex != null && highlightedIndex >= 0) {\n setHighlightedPillIndex(undefined);\n }\n }, [highlightedIndex, setHighlightedPillIndex]);\n\n // Keep highlighted index in sync with the filtered source\n useEffect(() => {\n setHighlightedListIndex(undefined);\n }, [source, setHighlightedListIndex]);\n\n const handleFirstItemSelection = (event: KeyboardEvent | ChangeEvent) => {\n if (\n !allowFreeText &&\n (event as KeyboardEvent).key === \"Enter\" &&\n quickSelection\n ) {\n const newItem = source[0];\n const newSelectedItems =\n selectedItems.indexOf(newItem) === -1\n ? selectedItems.concat(source.slice(0, 1))\n : selectedItems.filter((item) => item !== newItem);\n setSelectedItems(newSelectedItems);\n onSelect && onSelect(event, newItem);\n onChange && onChange(event as ChangeEvent, newSelectedItems);\n }\n };\n\n const handleListOpenKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (\"Escape\" === event.key && inputProps.expanded) {\n setTimeout(() => {\n if (expandButtonRef.current) {\n expandButtonRef.current.focus();\n }\n }, 250);\n }\n\n handleFirstItemSelection(event);\n\n if (\n \"Home\" !== event.key &&\n \"End\" !== event.key &&\n !(\" \" === event.key && !event.ctrlKey)\n ) {\n if (restListProps.onKeyDown) {\n restListProps.onKeyDown(event);\n }\n setSelectionChanged(false);\n }\n };\n\n const handleInputKeyDown = (\n event: KeyboardEvent<HTMLInputElement | HTMLButtonElement | HTMLDivElement>\n ) => {\n if (\"Escape\" === event.key) {\n setInputValue(\"\");\n setHighlightedListIndex(undefined);\n }\n\n // Space key clashes with the remove action of TokenizedInput\n // For combo box, pressing a space key should just add a space\n if (\" \" === event.key && !event.ctrlKey) {\n setHighlightedPillIndex(undefined);\n } else {\n if (inputProps.onKeyDown) {\n inputProps.onKeyDown(\n event as KeyboardEvent<HTMLInputElement | HTMLButtonElement>\n );\n }\n }\n\n if (\n !isToggleList(event) &&\n listState.highlightedIndex == null &&\n REQUIRE_PREV_HIGHLIGHT.indexOf(event.key) !== -1\n ) {\n event.preventDefault();\n // Initialize list highlight if there's no previous value\n setHighlightedListIndex(\n Math.min(quickSelection ? 1 : 0, source.length - 1)\n );\n setQuickSelection(false);\n setSelectionChanged(false);\n } else if (isListOpen) {\n handleListOpenKeyDown(event as KeyboardEvent<HTMLDivElement>);\n }\n\n // Don't announce for deleting values\n setAllowAnnouncement(\"Backspace\" !== event.key);\n notifyPopper(event);\n };\n\n const handleListClick = (event: MouseEvent<HTMLDivElement>) => {\n clearTimeout(\n inputBlurTimeout.current == null ? undefined : inputBlurTimeout.current\n );\n const inputEl = inputRef && (inputRef as RefObject<HTMLElement>).current;\n if (inputEl) {\n inputEl.focus();\n }\n\n if (restListProps.onClick) {\n restListProps.onClick(event);\n }\n };\n\n const mergedInputProps = {\n ...inputProps.InputProps,\n inputProps: {\n ...(inputProps.InputProps || {}).inputProps,\n role: \"textbox\",\n \"aria-roledescription\": \"MultiSelect Combobox\",\n },\n };\n\n if (ariaActiveDescendant && !selectionChanged) {\n // either null or undefined will prevent tokenized-input from\n // setting active-descendant based on pill selection.\n mergedInputProps.inputProps[\"aria-activedescendant\"] = ariaActiveDescendant;\n }\n\n const expandButtonProps = {\n accessibleText: undefined,\n role: \"button\",\n \"aria-roledescription\": \"Expand combobox button\",\n \"aria-labelledby\": [ariaLabelledBy, `${inputId}-input`]\n .filter(Boolean)\n .join(\" \"),\n } as ExpandButtonProps;\n\n return {\n inputHelpers,\n inputRef: handleInputRef,\n listContext: {\n state: listState,\n helpers: listHelpers,\n },\n inputProps: {\n ...inputProps,\n selectedItems,\n allowAnnouncement,\n id: inputId,\n value: inputValue,\n ExpandButtonProps: expandButtonProps,\n InputProps: mergedInputProps,\n onKeyDown: handleInputKeyDown,\n },\n listProps: {\n ...restListProps,\n source,\n itemToString,\n itemTextHighlightPattern,\n onClick: handleListClick,\n isListOpen: isListOpen && Boolean(source.length),\n },\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { useRef, useCallback } from 'react';
|
|
|
2
2
|
import { useIsomorphicLayoutEffect } from '@salt-ds/core';
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
import { useResizeObserver } from '../responsive/useResizeObserver.js';
|
|
5
|
+
import '../utils/useFloatingUI.js';
|
|
5
6
|
|
|
6
7
|
const HeightOnly = ["height"];
|
|
7
8
|
const HeightWithScroll = ["height", "scrollHeight"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewportTracking.js","sources":["../src/common-hooks/useViewportTracking.ts"],"sourcesContent":["import { MutableRefObject, RefObject, useCallback, useRef } from \"react\";\nimport { CollectionItem } from \"./collectionTypes\";\nimport { ResizeHandler, useResizeObserver } from \"../responsive\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nconst HeightOnly = [\"height\"];\nconst HeightWithScroll = [\"height\", \"scrollHeight\"];\nconst EMPTY_ARRAY: any[] = [];\n\nconst ObservedDimensions = {\n containerOnly: [HeightWithScroll, EMPTY_ARRAY],\n withContent: [HeightOnly, HeightOnly],\n};\nconst getObservedDimensions = (containerOnly: boolean) =>\n containerOnly\n ? ObservedDimensions.containerOnly\n : ObservedDimensions.withContent;\n\nconst NULL_REF = { current: null };\n\nconst getItemTop = (\n element: HTMLElement,\n offsetContainer: HTMLElement | null\n) => {\n const { transform = \"none\" } = getComputedStyle(element);\n if (transform.startsWith(\"matrix\")) {\n const pos = transform.lastIndexOf(\",\");\n return parseInt(transform.slice(pos + 1));\n } else {\n let offsetParent = element.offsetParent as HTMLElement;\n if (offsetParent === offsetContainer || offsetContainer === null) {\n return element.offsetTop;\n } else {\n let top = element.offsetTop;\n while (offsetParent !== null && offsetParent !== offsetContainer) {\n top += offsetParent.offsetTop;\n offsetParent = offsetParent.offsetParent as HTMLElement;\n }\n return top;\n }\n }\n};\n\nexport interface ViewportTrackingProps<Item> {\n containerRef: RefObject<HTMLElement>;\n contentRef?: RefObject<HTMLElement>;\n highlightedIdx?: number;\n indexPositions: CollectionItem<Item>[];\n stickyHeaders?: boolean;\n}\n\nexport interface ViewportTrackingResult<Item> {\n isScrolling: MutableRefObject<boolean>;\n scrollIntoView: (item: CollectionItem<Item>) => void;\n}\n\nexport const useViewportTracking = <Item>({\n containerRef,\n contentRef = NULL_REF,\n highlightedIdx = -1,\n indexPositions,\n stickyHeaders = false,\n}: ViewportTrackingProps<Item>): ViewportTrackingResult<Item> => {\n const scrolling = useRef<boolean>(false);\n const viewport = useRef({\n height: 0,\n contentHeight: 0,\n });\n\n const scrollTo = useCallback((scrollPos: number) => {\n scrolling.current = true;\n if (containerRef.current) {\n containerRef.current.scrollTop = scrollPos;\n }\n setTimeout(() => {\n scrolling.current = false;\n });\n }, []);\n\n const scrollToStart = useCallback(() => scrollTo(0), [scrollTo]);\n\n const scrollToEnd = useCallback(() => {\n scrollTo(viewport.current.contentHeight - viewport.current.height);\n }, [scrollTo]);\n\n const scrollIntoViewIfNeeded = useCallback(\n (item: CollectionItem<Item>) => {\n const offsetContainer = contentRef.current || containerRef.current;\n if (item.id) {\n const el = document.getElementById(item.id);\n if (el && containerRef.current) {\n const { height: viewportHeight } = viewport.current;\n const targetEl =\n el.ariaExpanded && el.firstChild\n ? (el.firstChild as HTMLElement)\n : el;\n const headerHeight = stickyHeaders ? 36 : 0;\n const itemTop = getItemTop(targetEl, offsetContainer);\n const itemHeight = targetEl.offsetHeight;\n const { scrollTop } = containerRef.current;\n const viewportStart = scrollTop + headerHeight;\n const viewportEnd = viewportStart + viewportHeight - headerHeight;\n\n if (itemTop + itemHeight > viewportEnd || itemTop < viewportStart) {\n const newScrollTop =\n itemTop + itemHeight > viewportEnd\n ? scrollTop + (itemTop + itemHeight) - viewportEnd\n : itemTop - headerHeight;\n\n scrollTo(newScrollTop);\n }\n }\n }\n },\n [containerRef, contentRef, scrollTo, stickyHeaders]\n );\n\n useIsomorphicLayoutEffect(() => {\n const { height, contentHeight } = viewport.current;\n const item = indexPositions[highlightedIdx];\n if (contentHeight > height && item) {\n const [firstItem] = indexPositions;\n const [lastItem] = indexPositions.slice(-1);\n if (item === firstItem) {\n scrollToStart();\n } else if (item === lastItem) {\n scrollToEnd();\n } else {\n scrollIntoViewIfNeeded(indexPositions[highlightedIdx]);\n }\n }\n }, [\n highlightedIdx,\n indexPositions,\n scrollIntoViewIfNeeded,\n scrollToEnd,\n scrollToStart,\n ]);\n\n const onContainerResize: ResizeHandler = useCallback(\n ({ height, scrollHeight }) => {\n if (typeof height === \"number\") {\n viewport.current.height = height;\n }\n if (typeof scrollHeight === \"number\") {\n viewport.current.contentHeight = scrollHeight;\n }\n },\n []\n );\n\n const onContentResize: ResizeHandler = useCallback(({ height }) => {\n if (typeof height === \"number\") {\n viewport.current.contentHeight = height;\n }\n }, []);\n\n // If we only have a container, then we will observe its height and scrollHeight,\n // contentRef will be null, so second call to observer will observe nothing.\n // If we have both container and content, then we observe the height of each.\n const [containerDimensions, contentDimensions] = getObservedDimensions(\n contentRef === NULL_REF\n );\n useResizeObserver(containerRef, containerDimensions, onContainerResize, true);\n useResizeObserver(contentRef, contentDimensions, onContentResize, true);\n\n return {\n isScrolling: scrolling,\n scrollIntoView: scrollIntoViewIfNeeded,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useViewportTracking.js","sources":["../src/common-hooks/useViewportTracking.ts"],"sourcesContent":["import { MutableRefObject, RefObject, useCallback, useRef } from \"react\";\nimport { CollectionItem } from \"./collectionTypes\";\nimport { ResizeHandler, useResizeObserver } from \"../responsive\";\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nconst HeightOnly = [\"height\"];\nconst HeightWithScroll = [\"height\", \"scrollHeight\"];\nconst EMPTY_ARRAY: any[] = [];\n\nconst ObservedDimensions = {\n containerOnly: [HeightWithScroll, EMPTY_ARRAY],\n withContent: [HeightOnly, HeightOnly],\n};\nconst getObservedDimensions = (containerOnly: boolean) =>\n containerOnly\n ? ObservedDimensions.containerOnly\n : ObservedDimensions.withContent;\n\nconst NULL_REF = { current: null };\n\nconst getItemTop = (\n element: HTMLElement,\n offsetContainer: HTMLElement | null\n) => {\n const { transform = \"none\" } = getComputedStyle(element);\n if (transform.startsWith(\"matrix\")) {\n const pos = transform.lastIndexOf(\",\");\n return parseInt(transform.slice(pos + 1));\n } else {\n let offsetParent = element.offsetParent as HTMLElement;\n if (offsetParent === offsetContainer || offsetContainer === null) {\n return element.offsetTop;\n } else {\n let top = element.offsetTop;\n while (offsetParent !== null && offsetParent !== offsetContainer) {\n top += offsetParent.offsetTop;\n offsetParent = offsetParent.offsetParent as HTMLElement;\n }\n return top;\n }\n }\n};\n\nexport interface ViewportTrackingProps<Item> {\n containerRef: RefObject<HTMLElement>;\n contentRef?: RefObject<HTMLElement>;\n highlightedIdx?: number;\n indexPositions: CollectionItem<Item>[];\n stickyHeaders?: boolean;\n}\n\nexport interface ViewportTrackingResult<Item> {\n isScrolling: MutableRefObject<boolean>;\n scrollIntoView: (item: CollectionItem<Item>) => void;\n}\n\nexport const useViewportTracking = <Item>({\n containerRef,\n contentRef = NULL_REF,\n highlightedIdx = -1,\n indexPositions,\n stickyHeaders = false,\n}: ViewportTrackingProps<Item>): ViewportTrackingResult<Item> => {\n const scrolling = useRef<boolean>(false);\n const viewport = useRef({\n height: 0,\n contentHeight: 0,\n });\n\n const scrollTo = useCallback((scrollPos: number) => {\n scrolling.current = true;\n if (containerRef.current) {\n containerRef.current.scrollTop = scrollPos;\n }\n setTimeout(() => {\n scrolling.current = false;\n });\n }, []);\n\n const scrollToStart = useCallback(() => scrollTo(0), [scrollTo]);\n\n const scrollToEnd = useCallback(() => {\n scrollTo(viewport.current.contentHeight - viewport.current.height);\n }, [scrollTo]);\n\n const scrollIntoViewIfNeeded = useCallback(\n (item: CollectionItem<Item>) => {\n const offsetContainer = contentRef.current || containerRef.current;\n if (item.id) {\n const el = document.getElementById(item.id);\n if (el && containerRef.current) {\n const { height: viewportHeight } = viewport.current;\n const targetEl =\n el.ariaExpanded && el.firstChild\n ? (el.firstChild as HTMLElement)\n : el;\n const headerHeight = stickyHeaders ? 36 : 0;\n const itemTop = getItemTop(targetEl, offsetContainer);\n const itemHeight = targetEl.offsetHeight;\n const { scrollTop } = containerRef.current;\n const viewportStart = scrollTop + headerHeight;\n const viewportEnd = viewportStart + viewportHeight - headerHeight;\n\n if (itemTop + itemHeight > viewportEnd || itemTop < viewportStart) {\n const newScrollTop =\n itemTop + itemHeight > viewportEnd\n ? scrollTop + (itemTop + itemHeight) - viewportEnd\n : itemTop - headerHeight;\n\n scrollTo(newScrollTop);\n }\n }\n }\n },\n [containerRef, contentRef, scrollTo, stickyHeaders]\n );\n\n useIsomorphicLayoutEffect(() => {\n const { height, contentHeight } = viewport.current;\n const item = indexPositions[highlightedIdx];\n if (contentHeight > height && item) {\n const [firstItem] = indexPositions;\n const [lastItem] = indexPositions.slice(-1);\n if (item === firstItem) {\n scrollToStart();\n } else if (item === lastItem) {\n scrollToEnd();\n } else {\n scrollIntoViewIfNeeded(indexPositions[highlightedIdx]);\n }\n }\n }, [\n highlightedIdx,\n indexPositions,\n scrollIntoViewIfNeeded,\n scrollToEnd,\n scrollToStart,\n ]);\n\n const onContainerResize: ResizeHandler = useCallback(\n ({ height, scrollHeight }) => {\n if (typeof height === \"number\") {\n viewport.current.height = height;\n }\n if (typeof scrollHeight === \"number\") {\n viewport.current.contentHeight = scrollHeight;\n }\n },\n []\n );\n\n const onContentResize: ResizeHandler = useCallback(({ height }) => {\n if (typeof height === \"number\") {\n viewport.current.contentHeight = height;\n }\n }, []);\n\n // If we only have a container, then we will observe its height and scrollHeight,\n // contentRef will be null, so second call to observer will observe nothing.\n // If we have both container and content, then we observe the height of each.\n const [containerDimensions, contentDimensions] = getObservedDimensions(\n contentRef === NULL_REF\n );\n useResizeObserver(containerRef, containerDimensions, onContainerResize, true);\n useResizeObserver(contentRef, contentDimensions, onContentResize, true);\n\n return {\n isScrolling: scrolling,\n scrollIntoView: scrollIntoViewIfNeeded,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { escapeRegExp } from '../../utils/escapeRegExp.js';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '@salt-ds/core';
|
|
4
|
+
import '../../utils/useFloatingUI.js';
|
|
4
5
|
|
|
5
6
|
const leftTrim = (value) => value ? value.replace(/^\s+/g, "") : value;
|
|
6
7
|
const getDefaultFilterRegex = (value) => new RegExp(`(${escapeRegExp(leftTrim(value))})`, "gi");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-utils.js","sources":["../src/common-hooks/utils/filter-utils.ts"],"sourcesContent":["import { escapeRegExp } from \"../../utils\";\n\nexport type GetFilterRegex = (inputValue: string) => RegExp;\n\nexport type FilterPredicate = (item: string) => boolean;\n\nconst leftTrim = (value: string) =>\n value ? value.replace(/^\\s+/g, \"\") : value;\n\nexport const getDefaultFilterRegex: GetFilterRegex = (value) =>\n new RegExp(`(${escapeRegExp(leftTrim(value))})`, \"gi\");\n\nexport const getDefaultFilter =\n (inputValue = \"\", getFilterRegex: GetFilterRegex = getDefaultFilterRegex) =>\n (itemValue = \"\"): boolean =>\n Boolean(itemValue.length) &&\n Boolean(inputValue.length) &&\n itemValue.match(getFilterRegex(inputValue)) !== null;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter-utils.js","sources":["../src/common-hooks/utils/filter-utils.ts"],"sourcesContent":["import { escapeRegExp } from \"../../utils\";\n\nexport type GetFilterRegex = (inputValue: string) => RegExp;\n\nexport type FilterPredicate = (item: string) => boolean;\n\nconst leftTrim = (value: string) =>\n value ? value.replace(/^\\s+/g, \"\") : value;\n\nexport const getDefaultFilterRegex: GetFilterRegex = (value) =>\n new RegExp(`(${escapeRegExp(leftTrim(value))})`, \"gi\");\n\nexport const getDefaultFilter =\n (inputValue = \"\", getFilterRegex: GetFilterRegex = getDefaultFilterRegex) =>\n (itemValue = \"\"): boolean =>\n Boolean(itemValue.length) &&\n Boolean(inputValue.length) &&\n itemValue.match(getFilterRegex(inputValue)) !== null;\n"],"names":[],"mappings":";;;;;AAMA,MAAM,QAAA,GAAW,CAAC,KAChB,KAAA,KAAA,GAAQ,MAAM,OAAQ,CAAA,OAAA,EAAS,EAAE,CAAI,GAAA,KAAA,CAAA;AAE1B,MAAA,qBAAA,GAAwC,CAAC,KAAA,KACpD,IAAI,MAAA,CAAO,CAAI,CAAA,EAAA,YAAA,CAAa,QAAS,CAAA,KAAK,CAAC,CAAA,CAAA,CAAA,CAAA,EAAM,IAAI,EAAA;AAE1C,MAAA,gBAAA,GACX,CAAC,UAAa,GAAA,EAAA,EAAI,iBAAiC,qBACnD,KAAA,CAAC,SAAY,GAAA,EAAA,KACX,OAAQ,CAAA,SAAA,CAAU,MAAM,CACxB,IAAA,OAAA,CAAQ,WAAW,MAAM,CAAA,IACzB,UAAU,KAAM,CAAA,cAAA,CAAe,UAAU,CAAC,CAAM,KAAA;;;;"}
|
|
@@ -1,36 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Tooltip, Button } from '@salt-ds/core';
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
|
-
import { Tooltip } from '../tooltip/Tooltip.js';
|
|
5
|
-
import '../tooltip/TooltipContext.js';
|
|
6
|
-
import { useTooltip } from '../tooltip/useTooltip.js';
|
|
7
4
|
|
|
8
5
|
const ContactAction = forwardRef(
|
|
9
6
|
function ContactAction2(props, ref) {
|
|
10
7
|
const { label, icon, accessibleText, tooltipProps, ...restProps } = props;
|
|
11
8
|
const Icon = icon;
|
|
12
|
-
|
|
9
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
13
10
|
placement: "top",
|
|
14
|
-
disabled: !accessibleText
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{
|
|
11
|
+
disabled: !accessibleText,
|
|
12
|
+
content: accessibleText,
|
|
13
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
18
14
|
variant: "secondary",
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return /* @__PURE__ */ jsxs(Fragment, {
|
|
24
|
-
children: [
|
|
25
|
-
/* @__PURE__ */ jsx(Button, {
|
|
26
|
-
...triggerProps,
|
|
27
|
-
ref: handleRef,
|
|
28
|
-
children: label ? label : /* @__PURE__ */ jsx(Icon, {})
|
|
29
|
-
}),
|
|
30
|
-
/* @__PURE__ */ jsx(Tooltip, {
|
|
31
|
-
...getTooltipProps({ title: accessibleText, ...tooltipProps })
|
|
32
|
-
})
|
|
33
|
-
]
|
|
15
|
+
ref,
|
|
16
|
+
...restProps,
|
|
17
|
+
children: label ? label : /* @__PURE__ */ jsx(Icon, {})
|
|
18
|
+
})
|
|
34
19
|
});
|
|
35
20
|
}
|
|
36
21
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactAction.js","sources":["../src/contact-details/ContactAction.tsx"],"sourcesContent":["import { Button, ButtonProps,
|
|
1
|
+
{"version":3,"file":"ContactAction.js","sources":["../src/contact-details/ContactAction.tsx"],"sourcesContent":["import { Button, ButtonProps, Tooltip, TooltipProps } from \"@salt-ds/core\";\nimport { IconProps } from \"@salt-ds/icons\";\nimport { ComponentType, forwardRef } from \"react\";\n\nexport type ContactActionProps = ButtonProps & {\n accessibleText?: string;\n tooltipProps?: TooltipProps;\n} & (\n | {\n label: string;\n icon?: ComponentType<IconProps>;\n }\n | {\n label?: string;\n icon: ComponentType<IconProps>;\n }\n );\n\nexport const ContactAction = forwardRef<HTMLButtonElement, ContactActionProps>(\n function ContactAction(props, ref) {\n const { label, icon, accessibleText, tooltipProps, ...restProps } = props;\n\n const Icon = icon!;\n\n return (\n <Tooltip\n placement=\"top\"\n disabled={!accessibleText}\n content={accessibleText}\n >\n <Button variant=\"secondary\" ref={ref} {...restProps}>\n {label ? label : <Icon />}\n </Button>\n </Tooltip>\n );\n }\n);\n"],"names":["ContactAction"],"mappings":";;;;AAkBO,MAAM,aAAgB,GAAA,UAAA;AAAA,EAC3B,SAASA,cAAc,CAAA,KAAA,EAAO,GAAK,EAAA;AACjC,IAAA,MAAM,EAAE,KAAO,EAAA,IAAA,EAAM,cAAgB,EAAA,YAAA,EAAA,GAAiB,WAAc,GAAA,KAAA,CAAA;AAEpE,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAA,uBACG,GAAA,CAAA,OAAA,EAAA;AAAA,MACC,SAAU,EAAA,KAAA;AAAA,MACV,UAAU,CAAC,cAAA;AAAA,MACX,OAAS,EAAA,cAAA;AAAA,MAET,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,QAAO,OAAQ,EAAA,WAAA;AAAA,QAAY,GAAA;AAAA,QAAW,GAAG,SAAA;AAAA,QACvC,QAAA,EAAA,KAAA,GAAQ,KAAQ,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,CAAA;AAAA,OACzB,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactFavoriteToggle.js","sources":["../src/contact-details/ContactFavoriteToggle.tsx"],"sourcesContent":["import { useControlled, useId } from \"@salt-ds/core\";\nimport { forwardRef } from \"react\";\nimport {\n FavoriteToggleWithTooltip,\n FavoriteToggleWithTooltipProps,\n} from \"./internal\";\
|
|
1
|
+
{"version":3,"file":"ContactFavoriteToggle.js","sources":["../src/contact-details/ContactFavoriteToggle.tsx"],"sourcesContent":["import { TooltipProps, useControlled, useId } from \"@salt-ds/core\";\nimport { forwardRef } from \"react\";\nimport {\n FavoriteToggleWithTooltip,\n FavoriteToggleWithTooltipProps,\n} from \"./internal\";\n\nexport interface ContactFavoriteToggleProps\n extends FavoriteToggleWithTooltipProps {\n isFavorite?: boolean;\n defaultIsFavorite?: boolean;\n onChange?: (isFavorite: boolean) => void;\n tooltipProps?: TooltipProps;\n}\n\nexport const ContactFavoriteToggle = forwardRef<\n HTMLSpanElement,\n ContactFavoriteToggleProps\n>(function ContactFavoriteToggle(props, ref) {\n const {\n id: idProp,\n isFavorite: isFavoriteProp,\n defaultIsFavorite = false,\n onChange: onChangeProp,\n tooltipProps,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n\n const [isFavorite, setIsFavorite] = useControlled({\n controlled: isFavoriteProp,\n default: defaultIsFavorite,\n name: \"ContactDetails\",\n state: \"isFavorite\",\n });\n\n const onChange = (isSelected: boolean) => {\n setIsFavorite(isSelected);\n if (onChangeProp) {\n onChangeProp(isSelected);\n }\n };\n\n const tooltipTitle = `${isFavorite ? \"Remove\" : \"Mark\"} as favorite`;\n\n return (\n <FavoriteToggleWithTooltip\n {...restProps}\n id={id}\n ref={ref}\n tooltipProps={tooltipProps}\n aria-label=\"Favorite\"\n isSelected={isFavorite}\n onChange={onChange}\n tooltipTitle={tooltipTitle}\n />\n );\n});\n"],"names":["ContactFavoriteToggle"],"mappings":";;;;;;AAeO,MAAM,qBAAwB,GAAA,UAAA,CAGnC,SAASA,sBAAAA,CAAsB,OAAO,GAAK,EAAA;AAC3C,EAAM,MAAA;AAAA,IACJ,EAAI,EAAA,MAAA;AAAA,IACJ,UAAY,EAAA,cAAA;AAAA,IACZ,iBAAoB,GAAA,KAAA;AAAA,IACpB,QAAU,EAAA,YAAA;AAAA,IACV,YAAA;AAAA,IACG,GAAA,SAAA;AAAA,GACD,GAAA,KAAA,CAAA;AAEJ,EAAM,MAAA,EAAA,GAAK,MAAM,MAAM,CAAA,CAAA;AAEvB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,aAAc,CAAA;AAAA,IAChD,UAAY,EAAA,cAAA;AAAA,IACZ,OAAS,EAAA,iBAAA;AAAA,IACT,IAAM,EAAA,gBAAA;AAAA,IACN,KAAO,EAAA,YAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,CAAC,UAAwB,KAAA;AACxC,IAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AACxB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,YAAA,CAAa,UAAU,CAAA,CAAA;AAAA,KACzB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAG,EAAA,UAAA,GAAa,QAAW,GAAA,MAAA,CAAA,YAAA,CAAA,CAAA;AAEhD,EAAA,uBACG,GAAA,CAAA,yBAAA,EAAA;AAAA,IACE,GAAG,SAAA;AAAA,IACJ,EAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAW,EAAA,UAAA;AAAA,IACX,UAAY,EAAA,UAAA;AAAA,IACZ,QAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -2,6 +2,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Link, Text } from '@salt-ds/core';
|
|
3
3
|
import { isEmail } from '../utils/isEmail.js';
|
|
4
4
|
import 'react';
|
|
5
|
+
import '../utils/useFloatingUI.js';
|
|
5
6
|
|
|
6
7
|
const MailLinkComponent = (props) => {
|
|
7
8
|
const { value, ...restProps } = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MailLinkComponent.js","sources":["../src/contact-details/MailLinkComponent.tsx"],"sourcesContent":["import { Link, Text } from \"@salt-ds/core\";\n\nimport { isEmail } from \"../utils\";\nimport { ValueComponentProps } from \"./types\";\n\nexport const MailLinkComponent = (props: ValueComponentProps) => {\n const { value, ...restProps } = props;\n\n return isEmail(value) ? (\n <Link href={`mailto:${value}`} tabIndex={0} maxRows={1} {...restProps}>\n {value}\n </Link>\n ) : (\n <Text maxRows={1}>{value}</Text>\n );\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MailLinkComponent.js","sources":["../src/contact-details/MailLinkComponent.tsx"],"sourcesContent":["import { Link, Text } from \"@salt-ds/core\";\n\nimport { isEmail } from \"../utils\";\nimport { ValueComponentProps } from \"./types\";\n\nexport const MailLinkComponent = (props: ValueComponentProps) => {\n const { value, ...restProps } = props;\n\n return isEmail(value) ? (\n <Link href={`mailto:${value}`} tabIndex={0} maxRows={1} {...restProps}>\n {value}\n </Link>\n ) : (\n <Text maxRows={1}>{value}</Text>\n );\n};\n"],"names":[],"mappings":";;;;;;AAKa,MAAA,iBAAA,GAAoB,CAAC,KAA+B,KAAA;AAC/D,EAAM,MAAA,EAAE,KAAU,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAEhC,EAAO,OAAA,OAAA,CAAQ,KAAK,CAAA,mBACjB,GAAA,CAAA,IAAA,EAAA;AAAA,IAAK,MAAM,CAAU,OAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IAAS,QAAU,EAAA,CAAA;AAAA,IAAG,OAAS,EAAA,CAAA;AAAA,IAAI,GAAG,SAAA;AAAA,IACzD,QAAA,EAAA,KAAA;AAAA,GACH,oBAEC,GAAA,CAAA,IAAA,EAAA;AAAA,IAAK,OAAS,EAAA,CAAA;AAAA,IAAI,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AAE7B;;;;"}
|