@salt-ds/lab 1.0.0-alpha.25 → 1.0.0-alpha.27
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/css/salt-lab.css +452 -522
- package/dist-cjs/combo-box-next/ComboBoxNext.js +303 -166
- package/dist-cjs/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-cjs/combo-box-next/useComboBoxNext.js +55 -0
- package/dist-cjs/combo-box-next/useComboBoxNext.js.map +1 -0
- package/dist-cjs/dropdown/DropdownBase.js +1 -1
- package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
- package/dist-cjs/dropdown-next/DropdownNext.css.js +1 -1
- package/dist-cjs/dropdown-next/DropdownNext.js +333 -170
- package/dist-cjs/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-cjs/editable-label/EditableLabel.js +1 -1
- package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
- package/dist-cjs/index.js +12 -10
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/layer-layout/LayerLayout.js +0 -1
- package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
- package/dist-cjs/list-control/ListControlContext.js +36 -0
- package/dist-cjs/list-control/ListControlContext.js.map +1 -0
- package/dist-cjs/list-control/ListControlState.js +193 -0
- package/dist-cjs/list-control/ListControlState.js.map +1 -0
- package/dist-cjs/navigation-item/ConditionalWrapper.js +2 -4
- package/dist-cjs/navigation-item/ConditionalWrapper.js.map +1 -1
- package/dist-cjs/navigation-item/ExpansionIcon.js +2 -4
- package/dist-cjs/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-cjs/navigation-item/NavigationItem.css.js +1 -1
- package/dist-cjs/navigation-item/NavigationItem.js +4 -7
- package/dist-cjs/navigation-item/NavigationItem.js.map +1 -1
- package/dist-cjs/option/Option.css.js +6 -0
- package/dist-cjs/option/Option.css.js.map +1 -0
- package/dist-cjs/option/Option.js +113 -0
- package/dist-cjs/option/Option.js.map +1 -0
- package/dist-cjs/option/OptionGroup.css.js +6 -0
- package/dist-cjs/option/OptionGroup.css.js.map +1 -0
- package/dist-cjs/option/OptionGroup.js +44 -0
- package/dist-cjs/option/OptionGroup.js.map +1 -0
- package/dist-cjs/option/OptionList.css.js +6 -0
- package/dist-cjs/option/OptionList.css.js.map +1 -0
- package/dist-cjs/option/OptionList.js +40 -0
- package/dist-cjs/option/OptionList.js.map +1 -0
- package/dist-cjs/pagination/CompactInput.css.js +6 -0
- package/dist-cjs/pagination/CompactInput.css.js.map +1 -0
- package/dist-cjs/pagination/CompactInput.js +31 -35
- package/dist-cjs/pagination/CompactInput.js.map +1 -1
- package/dist-cjs/pagination/CompactPaginator.css.js +6 -0
- package/dist-cjs/pagination/CompactPaginator.css.js.map +1 -0
- package/dist-cjs/pagination/CompactPaginator.js +76 -0
- package/dist-cjs/pagination/CompactPaginator.js.map +1 -0
- package/dist-cjs/pagination/GoToInput.css.js +6 -0
- package/dist-cjs/pagination/GoToInput.css.js.map +1 -0
- package/dist-cjs/pagination/GoToInput.js +37 -59
- package/dist-cjs/pagination/GoToInput.js.map +1 -1
- package/dist-cjs/pagination/PageButton.css.js +6 -0
- package/dist-cjs/pagination/PageButton.css.js.map +1 -0
- package/dist-cjs/pagination/PageButton.js +34 -33
- package/dist-cjs/pagination/PageButton.js.map +1 -1
- package/dist-cjs/pagination/PageRanges.css.js +6 -0
- package/dist-cjs/pagination/PageRanges.css.js.map +1 -0
- package/dist-cjs/pagination/PageRanges.js +73 -0
- package/dist-cjs/pagination/PageRanges.js.map +1 -0
- package/dist-cjs/pagination/Pagination.css.js +1 -1
- package/dist-cjs/pagination/Pagination.js +21 -38
- package/dist-cjs/pagination/Pagination.js.map +1 -1
- package/dist-cjs/pagination/PaginationContext.js +1 -6
- package/dist-cjs/pagination/PaginationContext.js.map +1 -1
- package/dist-cjs/pagination/Paginator.css.js +6 -0
- package/dist-cjs/pagination/Paginator.css.js.map +1 -0
- package/dist-cjs/pagination/Paginator.js +33 -43
- package/dist-cjs/pagination/Paginator.js.map +1 -1
- package/dist-cjs/pagination/usePaginationContext.js +1 -1
- package/dist-cjs/pagination/usePaginationContext.js.map +1 -1
- package/dist-cjs/scrim/Scrim.css.js +1 -1
- package/dist-cjs/scrim/Scrim.js +10 -140
- package/dist-cjs/scrim/Scrim.js.map +1 -1
- package/dist-cjs/tokenized-input/internal/InputPill.js +13 -9
- package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +6 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +244 -0
- package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.css.js +6 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.css.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.js +83 -0
- package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js +22 -0
- package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js +37 -0
- package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
- package/dist-cjs/tokenized-input-next/internal/useWidth.js +48 -0
- package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -0
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js +479 -0
- package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +1 -1
- package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-cjs/tree/Tree.js +1 -2
- package/dist-cjs/tree/Tree.js.map +1 -1
- package/dist-es/combo-box-next/ComboBoxNext.js +306 -169
- package/dist-es/combo-box-next/ComboBoxNext.js.map +1 -1
- package/dist-es/combo-box-next/useComboBoxNext.js +51 -0
- package/dist-es/combo-box-next/useComboBoxNext.js.map +1 -0
- package/dist-es/dropdown/DropdownBase.js +1 -1
- package/dist-es/dropdown/DropdownBase.js.map +1 -1
- package/dist-es/dropdown-next/DropdownNext.css.js +1 -1
- package/dist-es/dropdown-next/DropdownNext.js +332 -169
- package/dist-es/dropdown-next/DropdownNext.js.map +1 -1
- package/dist-es/editable-label/EditableLabel.js +1 -1
- package/dist-es/editable-label/EditableLabel.js.map +1 -1
- package/dist-es/index.js +6 -5
- package/dist-es/index.js.map +1 -1
- package/dist-es/layer-layout/LayerLayout.js +0 -1
- package/dist-es/layer-layout/LayerLayout.js.map +1 -1
- package/dist-es/list-control/ListControlContext.js +31 -0
- package/dist-es/list-control/ListControlContext.js.map +1 -0
- package/dist-es/list-control/ListControlState.js +189 -0
- package/dist-es/list-control/ListControlState.js.map +1 -0
- package/dist-es/navigation-item/ConditionalWrapper.js +2 -4
- package/dist-es/navigation-item/ConditionalWrapper.js.map +1 -1
- package/dist-es/navigation-item/ExpansionIcon.js +2 -4
- package/dist-es/navigation-item/ExpansionIcon.js.map +1 -1
- package/dist-es/navigation-item/NavigationItem.css.js +1 -1
- package/dist-es/navigation-item/NavigationItem.js +4 -7
- package/dist-es/navigation-item/NavigationItem.js.map +1 -1
- package/dist-es/option/Option.css.js +4 -0
- package/dist-es/option/Option.css.js.map +1 -0
- package/dist-es/option/Option.js +109 -0
- package/dist-es/option/Option.js.map +1 -0
- package/dist-es/option/OptionGroup.css.js +4 -0
- package/dist-es/option/OptionGroup.css.js.map +1 -0
- package/dist-es/option/OptionGroup.js +40 -0
- package/dist-es/option/OptionGroup.js.map +1 -0
- package/dist-es/option/OptionList.css.js +4 -0
- package/dist-es/option/OptionList.css.js.map +1 -0
- package/dist-es/option/OptionList.js +36 -0
- package/dist-es/option/OptionList.js.map +1 -0
- package/dist-es/pagination/CompactInput.css.js +4 -0
- package/dist-es/pagination/CompactInput.css.js.map +1 -0
- package/dist-es/pagination/CompactInput.js +32 -36
- package/dist-es/pagination/CompactInput.js.map +1 -1
- package/dist-es/pagination/CompactPaginator.css.js +4 -0
- package/dist-es/pagination/CompactPaginator.css.js.map +1 -0
- package/dist-es/pagination/CompactPaginator.js +72 -0
- package/dist-es/pagination/CompactPaginator.js.map +1 -0
- package/dist-es/pagination/GoToInput.css.js +4 -0
- package/dist-es/pagination/GoToInput.css.js.map +1 -0
- package/dist-es/pagination/GoToInput.js +40 -62
- package/dist-es/pagination/GoToInput.js.map +1 -1
- package/dist-es/pagination/PageButton.css.js +4 -0
- package/dist-es/pagination/PageButton.css.js.map +1 -0
- package/dist-es/pagination/PageButton.js +34 -33
- package/dist-es/pagination/PageButton.js.map +1 -1
- package/dist-es/pagination/PageRanges.css.js +4 -0
- package/dist-es/pagination/PageRanges.css.js.map +1 -0
- package/dist-es/pagination/PageRanges.js +69 -0
- package/dist-es/pagination/PageRanges.js.map +1 -0
- package/dist-es/pagination/Pagination.css.js +1 -1
- package/dist-es/pagination/Pagination.js +20 -37
- package/dist-es/pagination/Pagination.js.map +1 -1
- package/dist-es/pagination/PaginationContext.js +1 -6
- package/dist-es/pagination/PaginationContext.js.map +1 -1
- package/dist-es/pagination/Paginator.css.js +4 -0
- package/dist-es/pagination/Paginator.css.js.map +1 -0
- package/dist-es/pagination/Paginator.js +32 -42
- package/dist-es/pagination/Paginator.js.map +1 -1
- package/dist-es/pagination/usePaginationContext.js +1 -1
- package/dist-es/pagination/usePaginationContext.js.map +1 -1
- package/dist-es/scrim/Scrim.css.js +1 -1
- package/dist-es/scrim/Scrim.js +12 -138
- package/dist-es/scrim/Scrim.js.map +1 -1
- package/dist-es/tokenized-input/internal/InputPill.js +15 -11
- package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
- package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +4 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.css.js.map +1 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.js +240 -0
- package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/InputPill.css.js +4 -0
- package/dist-es/tokenized-input-next/internal/InputPill.css.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/InputPill.js +79 -0
- package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js +18 -0
- package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js +33 -0
- package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -0
- package/dist-es/tokenized-input-next/internal/useWidth.js +42 -0
- package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -0
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js +471 -0
- package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -0
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js +1 -1
- package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
- package/dist-es/tree/Tree.js +1 -2
- package/dist-es/tree/Tree.js.map +1 -1
- package/dist-types/combo-box-next/ComboBoxNext.d.ts +7 -80
- package/dist-types/combo-box-next/useComboBoxNext.d.ts +31 -0
- package/dist-types/dialog/useDialog.d.ts +6 -7
- package/dist-types/drawer/useDrawer.d.ts +6 -7
- package/dist-types/dropdown-next/DropdownNext.d.ts +25 -27
- package/dist-types/index.d.ts +2 -2
- package/dist-types/list-control/ListControlContext.d.ts +20 -0
- package/dist-types/list-control/ListControlState.d.ts +68 -0
- package/dist-types/navigation-item/ConditionalWrapper.d.ts +1 -1
- package/dist-types/navigation-item/ExpansionIcon.d.ts +1 -1
- package/dist-types/option/Option.d.ts +20 -0
- package/dist-types/option/OptionGroup.d.ts +12 -0
- package/dist-types/option/OptionList.d.ts +5 -0
- package/dist-types/option/index.d.ts +2 -0
- package/dist-types/pagination/CompactInput.d.ts +2 -8
- package/dist-types/pagination/CompactPaginator.d.ts +1 -0
- package/dist-types/pagination/GoToInput.d.ts +13 -4
- package/dist-types/pagination/PageButton.d.ts +2 -3
- package/dist-types/pagination/PageRanges.d.ts +5 -0
- package/dist-types/pagination/Pagination.d.ts +15 -4
- package/dist-types/pagination/PaginationContext.d.ts +2 -4
- package/dist-types/pagination/Paginator.d.ts +6 -3
- package/dist-types/pagination/index.d.ts +2 -0
- package/dist-types/scrim/Scrim.d.ts +6 -61
- package/dist-types/scrim/index.d.ts +0 -1
- package/dist-types/tabs/drag-drop/drag-utils.d.ts +6 -6
- package/dist-types/tokenized-input/internal/InputPill.d.ts +7 -5
- package/dist-types/tokenized-input-next/TokenizedInputNext.d.ts +51 -0
- package/dist-types/tokenized-input-next/index.d.ts +2 -0
- package/dist-types/tokenized-input-next/internal/InputPill.d.ts +29 -0
- package/dist-types/tokenized-input-next/internal/calcFirstHiddenIndex.d.ts +4 -0
- package/dist-types/tokenized-input-next/internal/useResizeObserver.d.ts +6 -0
- package/dist-types/tokenized-input-next/internal/useWidth.d.ts +7 -0
- package/dist-types/tokenized-input-next/useTokenizedInputNext.d.ts +47 -0
- package/package.json +3 -3
- package/dist-cjs/combo-box-next/ComboBoxNext.css.js +0 -6
- package/dist-cjs/combo-box-next/ComboBoxNext.css.js.map +0 -1
- package/dist-cjs/combo-box-next/useComboBox.js +0 -147
- package/dist-cjs/combo-box-next/useComboBox.js.map +0 -1
- package/dist-cjs/combo-box-next/useComboboxPortal.js +0 -75
- package/dist-cjs/combo-box-next/useComboboxPortal.js.map +0 -1
- package/dist-cjs/combo-box-next/utils.js +0 -36
- package/dist-cjs/combo-box-next/utils.js.map +0 -1
- package/dist-cjs/dropdown-next/useDropdownNext.js +0 -188
- package/dist-cjs/dropdown-next/useDropdownNext.js.map +0 -1
- package/dist-cjs/focus-manager/FocusManager.js +0 -158
- package/dist-cjs/focus-manager/FocusManager.js.map +0 -1
- package/dist-cjs/focus-manager/internal/findAllTabbableElements.js +0 -45
- package/dist-cjs/focus-manager/internal/findAllTabbableElements.js.map +0 -1
- package/dist-cjs/focus-manager/internal/useReturnFocus.js +0 -59
- package/dist-cjs/focus-manager/internal/useReturnFocus.js.map +0 -1
- package/dist-cjs/pagination/ArrowButton.js +0 -64
- package/dist-cjs/pagination/ArrowButton.js.map +0 -1
- package/dist-cjs/pagination/CompactControls.js +0 -38
- package/dist-cjs/pagination/CompactControls.js.map +0 -1
- package/dist-cjs/pagination/RegularControls.js +0 -58
- package/dist-cjs/pagination/RegularControls.js.map +0 -1
- package/dist-cjs/pagination/utils.js +0 -10
- package/dist-cjs/pagination/utils.js.map +0 -1
- package/dist-cjs/pill/ClosablePill.js +0 -61
- package/dist-cjs/pill/ClosablePill.js.map +0 -1
- package/dist-cjs/pill/Pill.css.js +0 -6
- package/dist-cjs/pill/Pill.css.js.map +0 -1
- package/dist-cjs/pill/Pill.js +0 -49
- package/dist-cjs/pill/Pill.js.map +0 -1
- package/dist-cjs/pill/PillBase.js +0 -133
- package/dist-cjs/pill/PillBase.js.map +0 -1
- package/dist-cjs/pill/SelectablePill.js +0 -55
- package/dist-cjs/pill/SelectablePill.js.map +0 -1
- package/dist-cjs/pill/constants.js +0 -8
- package/dist-cjs/pill/constants.js.map +0 -1
- package/dist-cjs/pill/internal/DeleteButton.js +0 -37
- package/dist-cjs/pill/internal/DeleteButton.js.map +0 -1
- package/dist-cjs/pill/internal/DivButton.js +0 -68
- package/dist-cjs/pill/internal/DivButton.js.map +0 -1
- package/dist-cjs/pill/internal/PillCheckbox.css.js +0 -6
- package/dist-cjs/pill/internal/PillCheckbox.css.js.map +0 -1
- package/dist-cjs/pill/internal/PillCheckbox.js +0 -27
- package/dist-cjs/pill/internal/PillCheckbox.js.map +0 -1
- package/dist-cjs/pill-next/PillNext.css.js +0 -6
- package/dist-cjs/pill-next/PillNext.css.js.map +0 -1
- package/dist-cjs/pill-next/PillNext.js +0 -65
- package/dist-cjs/pill-next/PillNext.js.map +0 -1
- package/dist-cjs/scrim/ScrimContext.js +0 -13
- package/dist-cjs/scrim/ScrimContext.js.map +0 -1
- package/dist-cjs/scrim/internal/PreventFocus.js +0 -39
- package/dist-cjs/scrim/internal/PreventFocus.js.map +0 -1
- package/dist-es/combo-box-next/ComboBoxNext.css.js +0 -4
- package/dist-es/combo-box-next/ComboBoxNext.css.js.map +0 -1
- package/dist-es/combo-box-next/useComboBox.js +0 -143
- package/dist-es/combo-box-next/useComboBox.js.map +0 -1
- package/dist-es/combo-box-next/useComboboxPortal.js +0 -71
- package/dist-es/combo-box-next/useComboboxPortal.js.map +0 -1
- package/dist-es/combo-box-next/utils.js +0 -31
- package/dist-es/combo-box-next/utils.js.map +0 -1
- package/dist-es/dropdown-next/useDropdownNext.js +0 -184
- package/dist-es/dropdown-next/useDropdownNext.js.map +0 -1
- package/dist-es/focus-manager/FocusManager.js +0 -154
- package/dist-es/focus-manager/FocusManager.js.map +0 -1
- package/dist-es/focus-manager/internal/findAllTabbableElements.js +0 -41
- package/dist-es/focus-manager/internal/findAllTabbableElements.js.map +0 -1
- package/dist-es/focus-manager/internal/useReturnFocus.js +0 -55
- package/dist-es/focus-manager/internal/useReturnFocus.js.map +0 -1
- package/dist-es/pagination/ArrowButton.js +0 -60
- package/dist-es/pagination/ArrowButton.js.map +0 -1
- package/dist-es/pagination/CompactControls.js +0 -34
- package/dist-es/pagination/CompactControls.js.map +0 -1
- package/dist-es/pagination/RegularControls.js +0 -54
- package/dist-es/pagination/RegularControls.js.map +0 -1
- package/dist-es/pagination/utils.js +0 -6
- package/dist-es/pagination/utils.js.map +0 -1
- package/dist-es/pill/ClosablePill.js +0 -57
- package/dist-es/pill/ClosablePill.js.map +0 -1
- package/dist-es/pill/Pill.css.js +0 -4
- package/dist-es/pill/Pill.css.js.map +0 -1
- package/dist-es/pill/Pill.js +0 -45
- package/dist-es/pill/Pill.js.map +0 -1
- package/dist-es/pill/PillBase.js +0 -129
- package/dist-es/pill/PillBase.js.map +0 -1
- package/dist-es/pill/SelectablePill.js +0 -51
- package/dist-es/pill/SelectablePill.js.map +0 -1
- package/dist-es/pill/constants.js +0 -4
- package/dist-es/pill/constants.js.map +0 -1
- package/dist-es/pill/internal/DeleteButton.js +0 -33
- package/dist-es/pill/internal/DeleteButton.js.map +0 -1
- package/dist-es/pill/internal/DivButton.js +0 -64
- package/dist-es/pill/internal/DivButton.js.map +0 -1
- package/dist-es/pill/internal/PillCheckbox.css.js +0 -4
- package/dist-es/pill/internal/PillCheckbox.css.js.map +0 -1
- package/dist-es/pill/internal/PillCheckbox.js +0 -23
- package/dist-es/pill/internal/PillCheckbox.js.map +0 -1
- package/dist-es/pill-next/PillNext.css.js +0 -4
- package/dist-es/pill-next/PillNext.css.js.map +0 -1
- package/dist-es/pill-next/PillNext.js +0 -57
- package/dist-es/pill-next/PillNext.js.map +0 -1
- package/dist-es/scrim/ScrimContext.js +0 -9
- package/dist-es/scrim/ScrimContext.js.map +0 -1
- package/dist-es/scrim/internal/PreventFocus.js +0 -35
- package/dist-es/scrim/internal/PreventFocus.js.map +0 -1
- package/dist-types/combo-box-next/useComboBox.d.ts +0 -44
- package/dist-types/combo-box-next/useComboboxPortal.d.ts +0 -22
- package/dist-types/combo-box-next/utils.d.ts +0 -7
- package/dist-types/dropdown-next/useDropdownNext.d.ts +0 -42
- package/dist-types/pagination/ArrowButton.d.ts +0 -7
- package/dist-types/pagination/CompactControls.d.ts +0 -8
- package/dist-types/pagination/RegularControls.d.ts +0 -8
- package/dist-types/pagination/utils.d.ts +0 -1
- package/dist-types/pill/ClosablePill.d.ts +0 -8
- package/dist-types/pill/Pill.d.ts +0 -15
- package/dist-types/pill/PillBase.d.ts +0 -52
- package/dist-types/pill/SelectablePill.d.ts +0 -17
- package/dist-types/pill/constants.d.ts +0 -1
- package/dist-types/pill/index.d.ts +0 -3
- package/dist-types/pill/internal/DeleteButton.d.ts +0 -8
- package/dist-types/pill/internal/DivButton.d.ts +0 -12
- package/dist-types/pill/internal/PillCheckbox.d.ts +0 -3
- package/dist-types/pill-next/PillNext.d.ts +0 -7
- package/dist-types/pill-next/index.d.ts +0 -1
- package/dist-types/scrim/ScrimContext.d.ts +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { memo, useRef, useState } from 'react';
|
|
4
|
+
import { makePrefixer, useIsomorphicLayoutEffect, Tooltip, Pill } from '@salt-ds/core';
|
|
5
|
+
import { getWidth } from './useWidth.js';
|
|
6
|
+
import { useWindow } from '@salt-ds/window';
|
|
7
|
+
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
8
|
+
import css_248z from './InputPill.css.js';
|
|
9
|
+
import { CloseIcon } from '@salt-ds/icons';
|
|
10
|
+
|
|
11
|
+
const withBaseName = makePrefixer("saltInputPill");
|
|
12
|
+
const InputPill = memo(function InputPill2(props) {
|
|
13
|
+
const {
|
|
14
|
+
className,
|
|
15
|
+
hidden,
|
|
16
|
+
highlighted,
|
|
17
|
+
index,
|
|
18
|
+
label,
|
|
19
|
+
onClose,
|
|
20
|
+
pillsRef,
|
|
21
|
+
...rest
|
|
22
|
+
} = props;
|
|
23
|
+
const targetWindow = useWindow();
|
|
24
|
+
useComponentCssInjection({
|
|
25
|
+
testId: "salt-input-pill",
|
|
26
|
+
css: css_248z,
|
|
27
|
+
window: targetWindow
|
|
28
|
+
});
|
|
29
|
+
const ref = useRef(null);
|
|
30
|
+
const [isEllipsisActive, setEllipsisActive] = useState(false);
|
|
31
|
+
const isRemovable = Boolean(onClose);
|
|
32
|
+
useIsomorphicLayoutEffect(() => {
|
|
33
|
+
var _a;
|
|
34
|
+
const text = (_a = ref == null ? void 0 : ref.current) == null ? void 0 : _a.firstElementChild;
|
|
35
|
+
if (!isRemovable && pillsRef.current) {
|
|
36
|
+
pillsRef.current[index] = getWidth(ref.current);
|
|
37
|
+
}
|
|
38
|
+
setEllipsisActive((text == null ? void 0 : text.offsetWidth) < (text == null ? void 0 : text.scrollWidth));
|
|
39
|
+
}, [pillsRef, index, isRemovable]);
|
|
40
|
+
useIsomorphicLayoutEffect(
|
|
41
|
+
() => () => {
|
|
42
|
+
pillsRef.current[index] = void 0;
|
|
43
|
+
},
|
|
44
|
+
[pillsRef, index]
|
|
45
|
+
);
|
|
46
|
+
const handleClose = (event) => {
|
|
47
|
+
onClose == null ? void 0 : onClose(event, index);
|
|
48
|
+
};
|
|
49
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
50
|
+
content: label,
|
|
51
|
+
disabled: !isEllipsisActive,
|
|
52
|
+
children: /* @__PURE__ */ jsxs(Pill, {
|
|
53
|
+
className: clsx(
|
|
54
|
+
withBaseName(),
|
|
55
|
+
{
|
|
56
|
+
[withBaseName("pillHighlighted")]: highlighted,
|
|
57
|
+
[withBaseName("expanded")]: isRemovable,
|
|
58
|
+
[withBaseName("hidden")]: hidden
|
|
59
|
+
},
|
|
60
|
+
className
|
|
61
|
+
),
|
|
62
|
+
tabIndex: -1,
|
|
63
|
+
onClick: isRemovable ? handleClose : void 0,
|
|
64
|
+
ref,
|
|
65
|
+
role: "option",
|
|
66
|
+
...rest,
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsx("span", {
|
|
69
|
+
className: withBaseName("label"),
|
|
70
|
+
children: label
|
|
71
|
+
}),
|
|
72
|
+
isRemovable && /* @__PURE__ */ jsx(CloseIcon, {})
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export { InputPill };
|
|
79
|
+
//# sourceMappingURL=InputPill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPill.js","sources":["../src/tokenized-input-next/internal/InputPill.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport {\n memo,\n MutableRefObject,\n SyntheticEvent,\n useRef,\n useState,\n} from \"react\";\nimport {\n makePrefixer,\n Tooltip,\n useIsomorphicLayoutEffect,\n Pill,\n PillProps,\n} from \"@salt-ds/core\";\nimport { getWidth } from \"./useWidth\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport inputPillCss from \"./InputPill.css\";\nimport { CloseIcon } from \"@salt-ds/icons\";\n\nconst withBaseName = makePrefixer(\"saltInputPill\");\n\nexport type InputPillProps = PillProps & {\n /**\n * A ref object holds pills index map to width.\n */\n pillsRef: MutableRefObject<Record<number, number | undefined>>;\n /**\n * Index of the pill within Input.\n */\n index: number;\n /**\n * Whether the pill is the last visible one within Input.\n */\n lastVisible?: boolean;\n /**\n * Pill label.\n */\n label?: string;\n /**\n * Whether the pill is highlighted.\n */\n highlighted?: boolean;\n\n /**\n * Callback when pill is deleted.\n */\n onClose?: (event: SyntheticEvent, index: number) => void;\n};\n\nexport const InputPill = memo(function InputPill(props: InputPillProps) {\n const {\n className,\n hidden,\n highlighted,\n index,\n label,\n onClose,\n pillsRef,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-input-pill\",\n css: inputPillCss,\n window: targetWindow,\n });\n\n const ref = useRef<HTMLButtonElement | null>(null);\n const [isEllipsisActive, setEllipsisActive] = useState(false);\n const isRemovable = Boolean(onClose);\n\n // useIsomorphicLayoutEffect to match the calcFirstHiddenIndex\n // We need to collect widths before the calculation\n useIsomorphicLayoutEffect(() => {\n const text = ref?.current?.firstElementChild as HTMLElement;\n if (!isRemovable && pillsRef.current) {\n pillsRef.current[index] = getWidth(ref.current);\n }\n setEllipsisActive(text?.offsetWidth < text?.scrollWidth);\n }, [pillsRef, index, isRemovable]);\n\n useIsomorphicLayoutEffect(\n () => () => {\n pillsRef.current[index] = undefined;\n },\n [pillsRef, index]\n );\n\n const handleClose = (event: SyntheticEvent) => {\n onClose?.(event, index);\n };\n return (\n <Tooltip content={label} disabled={!isEllipsisActive}>\n <Pill\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"pillHighlighted\")]: highlighted,\n [withBaseName(\"expanded\")]: isRemovable,\n [withBaseName(\"hidden\")]: hidden,\n },\n className\n )}\n tabIndex={-1}\n onClick={isRemovable ? handleClose : undefined}\n ref={ref}\n role=\"option\"\n {...rest}\n >\n <span className={withBaseName(\"label\")}>{label}</span>\n {isRemovable && <CloseIcon />}\n </Pill>\n </Tooltip>\n );\n});\n"],"names":["InputPill","inputPillCss"],"mappings":";;;;;;;;;;AAqBA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AA8B1C,MAAM,SAAY,GAAA,IAAA,CAAK,SAASA,UAAAA,CAAU,KAAuB,EAAA;AACtE,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACG,GAAA,IAAA;AAAA,GACD,GAAA,KAAA,CAAA;AACJ,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,GAAA,GAAM,OAAiC,IAAI,CAAA,CAAA;AACjD,EAAA,MAAM,CAAC,gBAAA,EAAkB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAC5D,EAAM,MAAA,WAAA,GAAc,QAAQ,OAAO,CAAA,CAAA;AAInC,EAAA,yBAAA,CAA0B,MAAM;AA3ElC,IAAA,IAAA,EAAA,CAAA;AA4EI,IAAM,MAAA,IAAA,GAAA,CAAO,EAAK,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,OAAA,KAAL,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAA,CAAA;AAC3B,IAAI,IAAA,CAAC,WAAe,IAAA,QAAA,CAAS,OAAS,EAAA;AACpC,MAAA,QAAA,CAAS,OAAQ,CAAA,KAAA,CAAA,GAAS,QAAS,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,KAChD;AACA,IAAkB,iBAAA,CAAA,CAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,WAAc,KAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,WAAW,CAAA,CAAA,CAAA;AAAA,GACtD,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,WAAW,CAAC,CAAA,CAAA;AAEjC,EAAA,yBAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,QAAA,CAAS,QAAQ,KAAS,CAAA,GAAA,KAAA,CAAA,CAAA;AAAA,KAC5B;AAAA,IACA,CAAC,UAAU,KAAK,CAAA;AAAA,GAClB,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,KAA0B,KAAA;AAC7C,IAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAU,KAAO,EAAA,KAAA,CAAA,CAAA;AAAA,GACnB,CAAA;AACA,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA;AAAA,IAAQ,OAAS,EAAA,KAAA;AAAA,IAAO,UAAU,CAAC,gBAAA;AAAA,IAClC,QAAC,kBAAA,IAAA,CAAA,IAAA,EAAA;AAAA,MACC,SAAW,EAAA,IAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb;AAAA,UACE,CAAC,YAAa,CAAA,iBAAiB,CAAI,GAAA,WAAA;AAAA,UACnC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,WAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,QAAQ,CAAI,GAAA,MAAA;AAAA,SAC5B;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,QAAU,EAAA,CAAA,CAAA;AAAA,MACV,OAAA,EAAS,cAAc,WAAc,GAAA,KAAA,CAAA;AAAA,MACrC,GAAA;AAAA,MACA,IAAK,EAAA,QAAA;AAAA,MACJ,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,MAAA,EAAA;AAAA,UAAK,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAAI,QAAA,EAAA,KAAA;AAAA,SAAM,CAAA;AAAA,QAC9C,WAAA,wBAAgB,SAAU,EAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAC7B,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function calcFirstHiddenIndex({
|
|
2
|
+
containerWidth = 0,
|
|
3
|
+
pillWidths = []
|
|
4
|
+
} = {}) {
|
|
5
|
+
let totalWidth = 0;
|
|
6
|
+
let firstHiddenIndex = null;
|
|
7
|
+
for (let i = 0; i < pillWidths.length; i++) {
|
|
8
|
+
totalWidth += pillWidths[i];
|
|
9
|
+
if (totalWidth > containerWidth) {
|
|
10
|
+
firstHiddenIndex = i;
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return firstHiddenIndex;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { calcFirstHiddenIndex };
|
|
18
|
+
//# sourceMappingURL=calcFirstHiddenIndex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calcFirstHiddenIndex.js","sources":["../src/tokenized-input-next/internal/calcFirstHiddenIndex.ts"],"sourcesContent":["export function calcFirstHiddenIndex({\n containerWidth = 0,\n pillWidths = [],\n}: { containerWidth?: number; pillWidths?: number[] } = {}) {\n let totalWidth = 0;\n let firstHiddenIndex: null | number = null;\n\n for (let i = 0; i < pillWidths.length; i++) {\n totalWidth += pillWidths[i];\n\n if (totalWidth > containerWidth) {\n firstHiddenIndex = i;\n break;\n }\n }\n\n return firstHiddenIndex;\n}\n"],"names":[],"mappings":"AAAO,SAAS,oBAAqB,CAAA;AAAA,EACnC,cAAiB,GAAA,CAAA;AAAA,EACjB,aAAa,EAAC;AAChB,CAAA,GAAwD,EAAI,EAAA;AAC1D,EAAA,IAAI,UAAa,GAAA,CAAA,CAAA;AACjB,EAAA,IAAI,gBAAkC,GAAA,IAAA,CAAA;AAEtC,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CAAK,EAAA,EAAA;AAC1C,IAAA,UAAA,IAAc,UAAW,CAAA,CAAA,CAAA,CAAA;AAEzB,IAAA,IAAI,aAAa,cAAgB,EAAA;AAC/B,MAAmB,gBAAA,GAAA,CAAA,CAAA;AACnB,MAAA,MAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,gBAAA,CAAA;AACT;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { useIsomorphicLayoutEffect } from '@salt-ds/core';
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
|
+
|
|
4
|
+
function useResizeObserver(onSizeChange) {
|
|
5
|
+
const ref = useRef(null);
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!ref.current) {
|
|
8
|
+
return void 0;
|
|
9
|
+
}
|
|
10
|
+
const observer = new ResizeObserver(onSizeChange);
|
|
11
|
+
observer.observe(ref.current);
|
|
12
|
+
return () => {
|
|
13
|
+
observer.disconnect();
|
|
14
|
+
};
|
|
15
|
+
}, [onSizeChange]);
|
|
16
|
+
useIsomorphicLayoutEffect(() => {
|
|
17
|
+
if (ref.current) {
|
|
18
|
+
onSizeChange([
|
|
19
|
+
{
|
|
20
|
+
target: ref.current,
|
|
21
|
+
contentRect: ref.current.getBoundingClientRect(),
|
|
22
|
+
borderBoxSize: [],
|
|
23
|
+
contentBoxSize: [],
|
|
24
|
+
devicePixelContentBoxSize: []
|
|
25
|
+
}
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
}, [onSizeChange]);
|
|
29
|
+
return ref;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { useResizeObserver };
|
|
33
|
+
//# sourceMappingURL=useResizeObserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResizeObserver.js","sources":["../src/tokenized-input-next/internal/useResizeObserver.ts"],"sourcesContent":["// TODO: Use resize observer from Tabstrip / Toolbar\n\nimport { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useRef, useEffect, Ref } from \"react\";\n\n/**\n * This monitors the size of a component and calls `onSizeChange` callback\n * every time when size changes.\n */\nexport function useResizeObserver<Element extends HTMLElement>(\n onSizeChange: (\n entries: ResizeObserverEntry[],\n observer?: ResizeObserver\n ) => void\n): Ref<Element> {\n const ref = useRef<Element>(null);\n\n useEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n\n const observer = new ResizeObserver(onSizeChange);\n observer.observe(ref.current);\n\n return () => {\n observer.disconnect();\n };\n }, [onSizeChange]);\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n onSizeChange([\n {\n target: ref.current,\n contentRect: ref.current.getBoundingClientRect(),\n borderBoxSize: [],\n contentBoxSize: [],\n devicePixelContentBoxSize: [],\n },\n ]);\n }\n }, [onSizeChange]);\n\n return ref;\n}\n"],"names":[],"mappings":";;;AASO,SAAS,kBACd,YAIc,EAAA;AACd,EAAM,MAAA,GAAA,GAAM,OAAgB,IAAI,CAAA,CAAA;AAEhC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,CAAC,IAAI,OAAS,EAAA;AAChB,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAEA,IAAM,MAAA,QAAA,GAAW,IAAI,cAAA,CAAe,YAAY,CAAA,CAAA;AAChD,IAAS,QAAA,CAAA,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAA;AAE5B,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,UAAW,EAAA,CAAA;AAAA,KACtB,CAAA;AAAA,GACF,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAa,YAAA,CAAA;AAAA,QACX;AAAA,UACE,QAAQ,GAAI,CAAA,OAAA;AAAA,UACZ,WAAA,EAAa,GAAI,CAAA,OAAA,CAAQ,qBAAsB,EAAA;AAAA,UAC/C,eAAe,EAAC;AAAA,UAChB,gBAAgB,EAAC;AAAA,UACjB,2BAA2B,EAAC;AAAA,SAC9B;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAEjB,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { useIsomorphicLayoutEffect } from '@salt-ds/core';
|
|
3
|
+
|
|
4
|
+
const safeParseFloat = (target) => parseFloat(target != null ? target : "0");
|
|
5
|
+
const getPadding = (node) => {
|
|
6
|
+
if (node == null) {
|
|
7
|
+
return 0;
|
|
8
|
+
}
|
|
9
|
+
const style = window.getComputedStyle(node);
|
|
10
|
+
const padding = safeParseFloat(style.paddingLeft) + safeParseFloat(style.paddingRight);
|
|
11
|
+
return padding;
|
|
12
|
+
};
|
|
13
|
+
const getWidth = (node) => {
|
|
14
|
+
if (node == null) {
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
const style = window.getComputedStyle(node);
|
|
18
|
+
const margin = safeParseFloat(style.marginLeft) + safeParseFloat(style.marginRight);
|
|
19
|
+
let dimension;
|
|
20
|
+
if (style.display === "none") {
|
|
21
|
+
const nodeDisplay = node.style.display;
|
|
22
|
+
node.style.display = "inline-block";
|
|
23
|
+
dimension = node.getBoundingClientRect();
|
|
24
|
+
node.style.display = nodeDisplay;
|
|
25
|
+
} else {
|
|
26
|
+
dimension = node.getBoundingClientRect();
|
|
27
|
+
}
|
|
28
|
+
return dimension.width + margin;
|
|
29
|
+
};
|
|
30
|
+
const useWidth = (density) => {
|
|
31
|
+
const [node, setNode] = useState(null);
|
|
32
|
+
const [width, setWidth] = useState(0);
|
|
33
|
+
useIsomorphicLayoutEffect(() => {
|
|
34
|
+
if (node !== null) {
|
|
35
|
+
setWidth(getWidth(node));
|
|
36
|
+
}
|
|
37
|
+
}, [node, density]);
|
|
38
|
+
return [setNode, width];
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { getPadding, getWidth, useWidth };
|
|
42
|
+
//# sourceMappingURL=useWidth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWidth.js","sources":["../src/tokenized-input-next/internal/useWidth.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { Density, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\n\nconst safeParseFloat = (target?: string) => parseFloat(target ?? \"0\");\n\nexport const getPadding = (node: HTMLElement | null) => {\n if (node == null) {\n return 0;\n }\n const style = window.getComputedStyle(node);\n const padding =\n safeParseFloat(style.paddingLeft) + safeParseFloat(style.paddingRight);\n return padding;\n};\n\nexport const getWidth = (node: HTMLElement | null) => {\n if (node == null) {\n return 0;\n }\n\n const style = window.getComputedStyle(node);\n const margin =\n safeParseFloat(style.marginLeft) + safeParseFloat(style.marginRight);\n\n let dimension;\n\n if (style.display === \"none\") {\n const nodeDisplay = node.style.display;\n\n node.style.display = \"inline-block\";\n dimension = node.getBoundingClientRect();\n node.style.display = nodeDisplay;\n } else {\n dimension = node.getBoundingClientRect();\n }\n\n return dimension.width + margin;\n};\n\n/**\n * This records the width of a component when it's rendered\n */\nexport const useWidth = (\n density: Density\n): [(newNode: any) => void, number] => {\n const [node, setNode] = useState<HTMLElement | null>(null);\n const [width, setWidth] = useState<number>(0);\n\n useIsomorphicLayoutEffect(() => {\n if (node !== null) {\n setWidth(getWidth(node));\n }\n }, [node, density]);\n\n return [setNode, width];\n};\n"],"names":[],"mappings":";;;AAGA,MAAM,cAAiB,GAAA,CAAC,MAAoB,KAAA,UAAA,CAAW,0BAAU,GAAG,CAAA,CAAA;AAEvD,MAAA,UAAA,GAAa,CAAC,IAA6B,KAAA;AACtD,EAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,UACJ,cAAe,CAAA,KAAA,CAAM,WAAW,CAAI,GAAA,cAAA,CAAe,MAAM,YAAY,CAAA,CAAA;AACvE,EAAO,OAAA,OAAA,CAAA;AACT,EAAA;AAEa,MAAA,QAAA,GAAW,CAAC,IAA6B,KAAA;AACpD,EAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,IAAO,OAAA,CAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,SACJ,cAAe,CAAA,KAAA,CAAM,UAAU,CAAI,GAAA,cAAA,CAAe,MAAM,WAAW,CAAA,CAAA;AAErE,EAAI,IAAA,SAAA,CAAA;AAEJ,EAAI,IAAA,KAAA,CAAM,YAAY,MAAQ,EAAA;AAC5B,IAAM,MAAA,WAAA,GAAc,KAAK,KAAM,CAAA,OAAA,CAAA;AAE/B,IAAA,IAAA,CAAK,MAAM,OAAU,GAAA,cAAA,CAAA;AACrB,IAAA,SAAA,GAAY,KAAK,qBAAsB,EAAA,CAAA;AACvC,IAAA,IAAA,CAAK,MAAM,OAAU,GAAA,WAAA,CAAA;AAAA,GAChB,MAAA;AACL,IAAA,SAAA,GAAY,KAAK,qBAAsB,EAAA,CAAA;AAAA,GACzC;AAEA,EAAA,OAAO,UAAU,KAAQ,GAAA,MAAA,CAAA;AAC3B,EAAA;AAKa,MAAA,QAAA,GAAW,CACtB,OACqC,KAAA;AACrC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAA6B,IAAI,CAAA,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAiB,CAAC,CAAA,CAAA;AAE5C,EAAA,yBAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAS,QAAA,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,OAAO,CAAC,CAAA,CAAA;AAElB,EAAO,OAAA,CAAC,SAAS,KAAK,CAAA,CAAA;AACxB;;;;"}
|
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { useFormFieldProps, useDensity, useId, useForkRef, useControlled, useIsomorphicLayoutEffect, ownerWindow } from '@salt-ds/core';
|
|
2
|
+
import copy from 'clipboard-copy';
|
|
3
|
+
import { useState, useRef, useMemo, useCallback } from 'react';
|
|
4
|
+
import { escapeRegExp } from '../utils/escapeRegExp.js';
|
|
5
|
+
import { useWidth, getPadding } from './internal/useWidth.js';
|
|
6
|
+
import { useResizeObserver } from './internal/useResizeObserver.js';
|
|
7
|
+
import { calcFirstHiddenIndex } from './internal/calcFirstHiddenIndex.js';
|
|
8
|
+
|
|
9
|
+
const getCursorPosition = (inputRef) => {
|
|
10
|
+
if (inputRef.current) {
|
|
11
|
+
const { selectionStart, selectionEnd } = inputRef.current;
|
|
12
|
+
if (selectionStart != null && selectionStart === selectionEnd) {
|
|
13
|
+
return selectionStart;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return -1;
|
|
17
|
+
};
|
|
18
|
+
const isCtrlModifier = (event) => {
|
|
19
|
+
return event.ctrlKey || event.metaKey || ["CONTROL", "META"].indexOf(event.key.toUpperCase()) !== -1;
|
|
20
|
+
};
|
|
21
|
+
function isValidItem(data) {
|
|
22
|
+
return typeof data === "string" && Boolean(data.length) || typeof data !== "string" && data != null;
|
|
23
|
+
}
|
|
24
|
+
function useTokenizedInputNext(props) {
|
|
25
|
+
const {
|
|
26
|
+
disabled: formFieldDisabled,
|
|
27
|
+
readOnly,
|
|
28
|
+
necessity,
|
|
29
|
+
validationStatus,
|
|
30
|
+
a11yProps: {
|
|
31
|
+
"aria-describedby": ariaDescribedBy,
|
|
32
|
+
"aria-labelledby": ariaLabelledBy
|
|
33
|
+
} = {}
|
|
34
|
+
} = useFormFieldProps();
|
|
35
|
+
const {
|
|
36
|
+
delimiters = [","],
|
|
37
|
+
defaultSelected = [],
|
|
38
|
+
disabled = formFieldDisabled,
|
|
39
|
+
readOnly: readOnlyProp,
|
|
40
|
+
validationStatus: validationStatusProp,
|
|
41
|
+
disableAddOnBlur,
|
|
42
|
+
onBlur,
|
|
43
|
+
onClick,
|
|
44
|
+
onExpand,
|
|
45
|
+
onCollapse,
|
|
46
|
+
onKeyDown,
|
|
47
|
+
onInputChange,
|
|
48
|
+
onInputFocus,
|
|
49
|
+
onInputBlur,
|
|
50
|
+
onClear,
|
|
51
|
+
onChange,
|
|
52
|
+
id: idProp,
|
|
53
|
+
value: valueProp,
|
|
54
|
+
expanded: expandedProp,
|
|
55
|
+
selectedItems: selectedItemsProp,
|
|
56
|
+
"aria-label": ariaLabel,
|
|
57
|
+
"aria-describedby": ariaDescribedByProp,
|
|
58
|
+
expandButtonRef: expandButtonRefProp,
|
|
59
|
+
...restProps
|
|
60
|
+
} = props;
|
|
61
|
+
const density = useDensity();
|
|
62
|
+
const id = useId(idProp);
|
|
63
|
+
const [focused, setFocused] = useState(false);
|
|
64
|
+
const [pillGroupWidth, setPillGroupWidth] = useState(null);
|
|
65
|
+
const [firstHiddenIndex, setFirstHiddenIndex] = useState(null);
|
|
66
|
+
const [activeIndices, setActiveIndices] = useState([]);
|
|
67
|
+
const [highlightedIndex, setHighlightedIndex] = useState(
|
|
68
|
+
void 0
|
|
69
|
+
);
|
|
70
|
+
const [expandButtonHookRef, expandButtonWidth] = useWidth(density);
|
|
71
|
+
const [clearButtonRef, clearButtonWidth] = useWidth(density);
|
|
72
|
+
const [statusAdornmentRef, statusAdornmentWidth] = useWidth(density);
|
|
73
|
+
const [inputRef, inputWidth] = useWidth(density);
|
|
74
|
+
const containerRef = useRef(null);
|
|
75
|
+
const pillsRef = useRef({});
|
|
76
|
+
const textAreaRef = useRef(null);
|
|
77
|
+
const preventBlurOnCopy = useRef(false);
|
|
78
|
+
const expandButtonRef = useForkRef(expandButtonHookRef, expandButtonRefProp);
|
|
79
|
+
const hasActiveItems = Boolean(activeIndices.length);
|
|
80
|
+
const primaryDelimiter = delimiters[0];
|
|
81
|
+
const delimiterRegex = useMemo(
|
|
82
|
+
() => new RegExp(delimiters.map(escapeRegExp).join("|"), "gi"),
|
|
83
|
+
[delimiters]
|
|
84
|
+
);
|
|
85
|
+
const [value, setValue, isInputControlled] = useControlled({
|
|
86
|
+
controlled: valueProp,
|
|
87
|
+
default: "",
|
|
88
|
+
name: "TokenizedInputNext",
|
|
89
|
+
state: "value"
|
|
90
|
+
});
|
|
91
|
+
const [selectedItems = [], setSelectedItems, isSelectionControlled] = useControlled({
|
|
92
|
+
controlled: selectedItemsProp,
|
|
93
|
+
default: defaultSelected,
|
|
94
|
+
name: "TokenizedInputNext",
|
|
95
|
+
state: "selectedItems"
|
|
96
|
+
});
|
|
97
|
+
const [expanded, setExpanded, isExpandedControlled] = useControlled({
|
|
98
|
+
controlled: expandedProp,
|
|
99
|
+
default: false,
|
|
100
|
+
name: "TokenizedInputNext",
|
|
101
|
+
state: "expanded"
|
|
102
|
+
});
|
|
103
|
+
const widthOffset = inputWidth + statusAdornmentWidth + (expanded ? clearButtonWidth : expandButtonWidth);
|
|
104
|
+
const containerObserverRef = useResizeObserver(
|
|
105
|
+
useCallback(
|
|
106
|
+
([{ contentRect }]) => {
|
|
107
|
+
const padding = getPadding(containerRef.current);
|
|
108
|
+
setPillGroupWidth(contentRect.width - padding - widthOffset);
|
|
109
|
+
},
|
|
110
|
+
[widthOffset]
|
|
111
|
+
)
|
|
112
|
+
);
|
|
113
|
+
useIsomorphicLayoutEffect(
|
|
114
|
+
() => () => {
|
|
115
|
+
setFirstHiddenIndex(null);
|
|
116
|
+
},
|
|
117
|
+
[density]
|
|
118
|
+
);
|
|
119
|
+
useIsomorphicLayoutEffect(
|
|
120
|
+
() => {
|
|
121
|
+
if (expanded) {
|
|
122
|
+
setFirstHiddenIndex(null);
|
|
123
|
+
} else if (pillGroupWidth != null) {
|
|
124
|
+
setFirstHiddenIndex(
|
|
125
|
+
calcFirstHiddenIndex({
|
|
126
|
+
containerWidth: pillGroupWidth,
|
|
127
|
+
pillWidths: Object.values(pillsRef.current).filter(
|
|
128
|
+
Boolean
|
|
129
|
+
)
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
[expanded, pillGroupWidth, selectedItems]
|
|
135
|
+
);
|
|
136
|
+
const focusInput = useCallback(() => {
|
|
137
|
+
if (textAreaRef.current) {
|
|
138
|
+
textAreaRef.current.focus();
|
|
139
|
+
}
|
|
140
|
+
}, []);
|
|
141
|
+
const updateInputValue = (newValue) => {
|
|
142
|
+
if (!isInputControlled) {
|
|
143
|
+
setValue(newValue);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
const updateSelectedItems = useCallback(
|
|
147
|
+
(event, action) => {
|
|
148
|
+
if (!isSelectionControlled) {
|
|
149
|
+
setSelectedItems((prevSelectedItems) => {
|
|
150
|
+
const newItems = typeof action === "function" ? action(prevSelectedItems) : action;
|
|
151
|
+
if (newItems !== prevSelectedItems) {
|
|
152
|
+
onChange == null ? void 0 : onChange(event, newItems);
|
|
153
|
+
}
|
|
154
|
+
return newItems;
|
|
155
|
+
});
|
|
156
|
+
} else {
|
|
157
|
+
onChange == null ? void 0 : onChange(
|
|
158
|
+
event,
|
|
159
|
+
typeof action === "function" ? action(selectedItems) : action
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
[isSelectionControlled, setSelectedItems, onChange, selectedItems]
|
|
164
|
+
);
|
|
165
|
+
const updateExpanded = (event, newExpanded) => {
|
|
166
|
+
if (!isExpandedControlled) {
|
|
167
|
+
setExpanded(newExpanded);
|
|
168
|
+
}
|
|
169
|
+
if (newExpanded) {
|
|
170
|
+
focusInput();
|
|
171
|
+
onExpand == null ? void 0 : onExpand(event);
|
|
172
|
+
} else {
|
|
173
|
+
onCollapse == null ? void 0 : onCollapse(event);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
const resetInput = () => {
|
|
177
|
+
updateInputValue("");
|
|
178
|
+
setHighlightedIndex(void 0);
|
|
179
|
+
setActiveIndices([]);
|
|
180
|
+
};
|
|
181
|
+
const removeItems = useCallback(
|
|
182
|
+
(event, itemIndices) => {
|
|
183
|
+
updateSelectedItems(
|
|
184
|
+
event,
|
|
185
|
+
(prevSelectedItems) => prevSelectedItems && (prevSelectedItems.length === 0 ? prevSelectedItems : prevSelectedItems.filter(
|
|
186
|
+
(_, index) => itemIndices.indexOf(index) === -1
|
|
187
|
+
))
|
|
188
|
+
);
|
|
189
|
+
},
|
|
190
|
+
[updateSelectedItems]
|
|
191
|
+
);
|
|
192
|
+
const handleInputFocus = (event) => {
|
|
193
|
+
event.stopPropagation();
|
|
194
|
+
if (preventBlurOnCopy.current) {
|
|
195
|
+
preventBlurOnCopy.current = false;
|
|
196
|
+
setActiveIndices(
|
|
197
|
+
Array.from(
|
|
198
|
+
{ length: selectedItems ? selectedItems.length : 0 },
|
|
199
|
+
(_, index) => index
|
|
200
|
+
)
|
|
201
|
+
);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
onInputFocus == null ? void 0 : onInputFocus(event);
|
|
205
|
+
updateExpanded(event, true);
|
|
206
|
+
setFocused(true);
|
|
207
|
+
};
|
|
208
|
+
const handleBlur = (event) => {
|
|
209
|
+
onBlur == null ? void 0 : onBlur(event);
|
|
210
|
+
setFocused(false);
|
|
211
|
+
updateExpanded(event, false);
|
|
212
|
+
};
|
|
213
|
+
const handleInputBlur = (event) => {
|
|
214
|
+
const container = containerRef == null ? void 0 : containerRef.current;
|
|
215
|
+
const eventTarget = event.relatedTarget;
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
event.stopPropagation();
|
|
218
|
+
setHighlightedIndex(void 0);
|
|
219
|
+
setActiveIndices([]);
|
|
220
|
+
if (!disableAddOnBlur) {
|
|
221
|
+
handleAddItems(event, value);
|
|
222
|
+
}
|
|
223
|
+
onInputBlur == null ? void 0 : onInputBlur(event);
|
|
224
|
+
if (eventTarget !== container && !(container == null ? void 0 : container.contains(eventTarget))) {
|
|
225
|
+
handleBlur(event);
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
const handleClick = (event) => {
|
|
229
|
+
updateExpanded(event, true);
|
|
230
|
+
setActiveIndices([]);
|
|
231
|
+
onClick == null ? void 0 : onClick(event);
|
|
232
|
+
};
|
|
233
|
+
const handleInputChange = (event) => {
|
|
234
|
+
setHighlightedIndex(void 0);
|
|
235
|
+
onInputChange == null ? void 0 : onInputChange(event);
|
|
236
|
+
const newValue = event.target.value;
|
|
237
|
+
if (delimiterRegex.test(newValue)) {
|
|
238
|
+
handleAddItems(event, newValue);
|
|
239
|
+
} else {
|
|
240
|
+
updateInputValue(newValue);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
const handleAddItems = (event, newValue, appendOnly) => {
|
|
244
|
+
if (!newValue || newValue.length === 0) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
resetInput();
|
|
248
|
+
const newItems = newValue.split(delimiterRegex).reduce((values, item) => {
|
|
249
|
+
const newItem = item.trim();
|
|
250
|
+
return isValidItem(newItem) ? values.concat(newItem) : values;
|
|
251
|
+
}, []);
|
|
252
|
+
if (newItems.length) {
|
|
253
|
+
updateSelectedItems(
|
|
254
|
+
event,
|
|
255
|
+
(prevSelectedItems = []) => hasActiveItems && !appendOnly ? newItems : prevSelectedItems.concat(newItems)
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const handleRemoveItem = useCallback(
|
|
260
|
+
(event, itemIndex) => {
|
|
261
|
+
focusInput();
|
|
262
|
+
if (itemIndex != void 0 && !readOnly && !readOnlyProp) {
|
|
263
|
+
removeItems(event, [itemIndex]);
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
[focusInput, removeItems]
|
|
267
|
+
);
|
|
268
|
+
const handleClear = (event) => {
|
|
269
|
+
updateSelectedItems(event, []);
|
|
270
|
+
resetInput();
|
|
271
|
+
focusInput();
|
|
272
|
+
onClear == null ? void 0 : onClear(event);
|
|
273
|
+
};
|
|
274
|
+
const cursorAtInputStart = () => getCursorPosition(textAreaRef) === 0 && Boolean(selectedItems.length);
|
|
275
|
+
const highlightAtPillGroupEnd = () => highlightedIndex === selectedItems.length - 1;
|
|
276
|
+
const pillGroupKeyDownHandlers = {
|
|
277
|
+
ArrowLeft: (event) => {
|
|
278
|
+
event.preventDefault();
|
|
279
|
+
setHighlightedIndex(
|
|
280
|
+
(prevHighlightedIndex) => prevHighlightedIndex == null ? selectedItems.length - 1 : Math.max(0, prevHighlightedIndex - 1)
|
|
281
|
+
);
|
|
282
|
+
},
|
|
283
|
+
ArrowRight: (event) => {
|
|
284
|
+
if (highlightAtPillGroupEnd()) {
|
|
285
|
+
return setHighlightedIndex(void 0);
|
|
286
|
+
}
|
|
287
|
+
event.preventDefault();
|
|
288
|
+
setHighlightedIndex(
|
|
289
|
+
(prevHighlightedIndex) => prevHighlightedIndex == null ? prevHighlightedIndex : Math.min(selectedItems.length - 1, prevHighlightedIndex + 1)
|
|
290
|
+
);
|
|
291
|
+
},
|
|
292
|
+
Backspace: (event) => {
|
|
293
|
+
event.preventDefault();
|
|
294
|
+
handleRemoveItem(event, highlightedIndex);
|
|
295
|
+
setHighlightedIndex(
|
|
296
|
+
(prevHighlightedIndex) => prevHighlightedIndex == null ? prevHighlightedIndex : Math.max(0, prevHighlightedIndex - 1)
|
|
297
|
+
);
|
|
298
|
+
},
|
|
299
|
+
Home: (event) => {
|
|
300
|
+
event.preventDefault();
|
|
301
|
+
setHighlightedIndex(0);
|
|
302
|
+
},
|
|
303
|
+
End: (event) => {
|
|
304
|
+
event.preventDefault();
|
|
305
|
+
setHighlightedIndex(selectedItems.length - 1);
|
|
306
|
+
},
|
|
307
|
+
Enter: (event) => {
|
|
308
|
+
event.preventDefault();
|
|
309
|
+
handleRemoveItem(event, highlightedIndex);
|
|
310
|
+
},
|
|
311
|
+
Delete: (event) => {
|
|
312
|
+
event.preventDefault();
|
|
313
|
+
handleRemoveItem(event, highlightedIndex);
|
|
314
|
+
},
|
|
315
|
+
" ": (event) => {
|
|
316
|
+
event.preventDefault();
|
|
317
|
+
handleRemoveItem(event, highlightedIndex);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const inputKeyDownHandlers = {
|
|
321
|
+
ArrowLeft: (event) => {
|
|
322
|
+
if (cursorAtInputStart()) {
|
|
323
|
+
event.preventDefault();
|
|
324
|
+
setHighlightedIndex(selectedItems.length - 1);
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
Backspace: (event) => {
|
|
328
|
+
if (hasActiveItems) {
|
|
329
|
+
removeItems(event, activeIndices);
|
|
330
|
+
} else if (cursorAtInputStart()) {
|
|
331
|
+
setHighlightedIndex(selectedItems.length - 1);
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
Delete: (event) => {
|
|
335
|
+
if (hasActiveItems) {
|
|
336
|
+
removeItems(event, activeIndices);
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
Enter: (event) => {
|
|
340
|
+
event.preventDefault();
|
|
341
|
+
if (hasActiveItems) {
|
|
342
|
+
removeItems(event, activeIndices);
|
|
343
|
+
} else {
|
|
344
|
+
handleAddItems(event, value);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
const handleCtrlModifierKeyDown = (event) => {
|
|
349
|
+
var _a;
|
|
350
|
+
const win = ownerWindow(event.target);
|
|
351
|
+
const supportClipboard = (_a = win.navigator) == null ? void 0 : _a.clipboard;
|
|
352
|
+
switch (event.key.toUpperCase()) {
|
|
353
|
+
case "A":
|
|
354
|
+
setHighlightedIndex(void 0);
|
|
355
|
+
setActiveIndices(
|
|
356
|
+
Array.from({ length: selectedItems.length }, (_, index) => index)
|
|
357
|
+
);
|
|
358
|
+
break;
|
|
359
|
+
case "C":
|
|
360
|
+
const textToCopy = activeIndices.length > 0 ? activeIndices.map((index) => String(selectedItems[index])).concat(value != null ? String(value).trim() : "").filter(Boolean).join(primaryDelimiter) : highlightedIndex !== void 0 ? String(selectedItems[highlightedIndex] + ",") : "";
|
|
361
|
+
copy(textToCopy).then((result) => {
|
|
362
|
+
preventBlurOnCopy.current = !supportClipboard;
|
|
363
|
+
return result;
|
|
364
|
+
}).catch((error) => {
|
|
365
|
+
console.error(error);
|
|
366
|
+
});
|
|
367
|
+
break;
|
|
368
|
+
case "V":
|
|
369
|
+
break;
|
|
370
|
+
case "ARROWLEFT":
|
|
371
|
+
pillGroupKeyDownHandlers.ArrowLeft(event);
|
|
372
|
+
break;
|
|
373
|
+
case "ARROWRIGHT":
|
|
374
|
+
pillGroupKeyDownHandlers.ArrowRight(event);
|
|
375
|
+
break;
|
|
376
|
+
case "BACKSPACE":
|
|
377
|
+
if (cursorAtInputStart()) {
|
|
378
|
+
handleRemoveItem(event, selectedItems.length - 1);
|
|
379
|
+
}
|
|
380
|
+
break;
|
|
381
|
+
case "CONTROL":
|
|
382
|
+
case "META":
|
|
383
|
+
break;
|
|
384
|
+
default:
|
|
385
|
+
setActiveIndices([]);
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
const handleCommonKeyDown = (event) => {
|
|
389
|
+
const eventKey = event.key.toUpperCase();
|
|
390
|
+
if (eventKey === "ESCAPE") {
|
|
391
|
+
event.preventDefault();
|
|
392
|
+
resetInput();
|
|
393
|
+
} else if (eventKey === "TAB" && !disableAddOnBlur) {
|
|
394
|
+
handleAddItems(event, value);
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
const handleKeyDown = (event) => {
|
|
398
|
+
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
399
|
+
if (event.defaultPrevented) {
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
if (isCtrlModifier(event)) {
|
|
403
|
+
handleCtrlModifierKeyDown(event);
|
|
404
|
+
} else {
|
|
405
|
+
let handler;
|
|
406
|
+
if (highlightedIndex == null) {
|
|
407
|
+
handler = inputKeyDownHandlers[event.key];
|
|
408
|
+
setActiveIndices([]);
|
|
409
|
+
} else {
|
|
410
|
+
handler = pillGroupKeyDownHandlers[event.key];
|
|
411
|
+
}
|
|
412
|
+
if (handler != null) {
|
|
413
|
+
handler(event);
|
|
414
|
+
} else {
|
|
415
|
+
handleCommonKeyDown(event);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
const state = {
|
|
420
|
+
value,
|
|
421
|
+
selectedItems,
|
|
422
|
+
activeIndices,
|
|
423
|
+
highlightedIndex,
|
|
424
|
+
expanded
|
|
425
|
+
};
|
|
426
|
+
const eventHandlers = {
|
|
427
|
+
onBlur: expanded ? handleBlur : onBlur,
|
|
428
|
+
onClick: handleClick,
|
|
429
|
+
onInputChange: handleInputChange,
|
|
430
|
+
onInputFocus: handleInputFocus,
|
|
431
|
+
onInputBlur: handleInputBlur,
|
|
432
|
+
onKeyDown: handleKeyDown,
|
|
433
|
+
onRemoveItem: handleRemoveItem,
|
|
434
|
+
onClear: handleClear
|
|
435
|
+
};
|
|
436
|
+
return {
|
|
437
|
+
state,
|
|
438
|
+
firstHiddenIndex,
|
|
439
|
+
refs: {
|
|
440
|
+
textAreaRef: useForkRef(textAreaRef, inputRef),
|
|
441
|
+
pillsRef,
|
|
442
|
+
clearButtonRef,
|
|
443
|
+
expandButtonRef,
|
|
444
|
+
statusAdornmentRef,
|
|
445
|
+
containerRef: useForkRef(containerRef, containerObserverRef)
|
|
446
|
+
},
|
|
447
|
+
helpers: {
|
|
448
|
+
setValue,
|
|
449
|
+
setSelectedItems,
|
|
450
|
+
setHighlightedIndex,
|
|
451
|
+
updateExpanded
|
|
452
|
+
},
|
|
453
|
+
inputProps: {
|
|
454
|
+
id,
|
|
455
|
+
disabled,
|
|
456
|
+
validationStatus: validationStatus != null ? validationStatus : validationStatusProp,
|
|
457
|
+
readOnly: readOnly != null ? readOnly : readOnlyProp,
|
|
458
|
+
necessity,
|
|
459
|
+
focused,
|
|
460
|
+
"aria-labelledby": ariaLabelledBy,
|
|
461
|
+
"aria-label": ariaLabel,
|
|
462
|
+
"aria-describedby": ariaDescribedBy != null ? ariaDescribedBy : ariaDescribedByProp,
|
|
463
|
+
...state,
|
|
464
|
+
...restProps,
|
|
465
|
+
...disabled ? {} : eventHandlers
|
|
466
|
+
}
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
export { useTokenizedInputNext };
|
|
471
|
+
//# sourceMappingURL=useTokenizedInputNext.js.map
|