@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,244 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var core = require('@salt-ds/core');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var useTokenizedInputNext = require('./useTokenizedInputNext.js');
|
|
9
|
+
var clsx = require('clsx');
|
|
10
|
+
var InputPill = require('./internal/InputPill.js');
|
|
11
|
+
var icons = require('@salt-ds/icons');
|
|
12
|
+
var window = require('@salt-ds/window');
|
|
13
|
+
var styles = require('@salt-ds/styles');
|
|
14
|
+
var TokenizedInputNext$1 = require('./TokenizedInputNext.css.js');
|
|
15
|
+
|
|
16
|
+
const withBaseName = core.makePrefixer("saltTokenizedInputNext");
|
|
17
|
+
const getItemsAriaLabel = (itemCount) => itemCount === 0 ? "no item selected" : `${itemCount} ${itemCount > 1 ? "items" : "item"}`;
|
|
18
|
+
const TokenizedInputNext = React.forwardRef(function TokenizedInputNext2({
|
|
19
|
+
textAreaRef: textAreaRefProp,
|
|
20
|
+
textAreaProps = {},
|
|
21
|
+
variant = "primary",
|
|
22
|
+
...rest
|
|
23
|
+
}, ref) {
|
|
24
|
+
const targetWindow = window.useWindow();
|
|
25
|
+
styles.useComponentCssInjection({
|
|
26
|
+
testId: "salt-tokenized-input-next",
|
|
27
|
+
css: TokenizedInputNext$1,
|
|
28
|
+
window: targetWindow
|
|
29
|
+
});
|
|
30
|
+
const {
|
|
31
|
+
"aria-describedby": textAreaDescribedBy,
|
|
32
|
+
"aria-labelledby": textAreaLabelledBy,
|
|
33
|
+
required: textAreaRequired,
|
|
34
|
+
...restTextAreaProps
|
|
35
|
+
} = textAreaProps;
|
|
36
|
+
const { refs, helpers, inputProps, firstHiddenIndex } = useTokenizedInputNext.useTokenizedInputNext(rest);
|
|
37
|
+
const {
|
|
38
|
+
textAreaRef: textAreaHookRef,
|
|
39
|
+
pillsRef,
|
|
40
|
+
clearButtonRef,
|
|
41
|
+
expandButtonRef,
|
|
42
|
+
statusAdornmentRef,
|
|
43
|
+
containerRef: containerHookRef
|
|
44
|
+
} = refs;
|
|
45
|
+
const {
|
|
46
|
+
ExpandButtonProps = {
|
|
47
|
+
"aria-label": "expand edit"
|
|
48
|
+
},
|
|
49
|
+
className,
|
|
50
|
+
activeIndices = [],
|
|
51
|
+
selectedItems = [],
|
|
52
|
+
highlightedIndex,
|
|
53
|
+
value,
|
|
54
|
+
expanded,
|
|
55
|
+
disabled,
|
|
56
|
+
onBlur,
|
|
57
|
+
onKeyDown,
|
|
58
|
+
onRemoveItem,
|
|
59
|
+
onInputChange,
|
|
60
|
+
focused,
|
|
61
|
+
validationStatus,
|
|
62
|
+
readOnly,
|
|
63
|
+
onInputFocus,
|
|
64
|
+
onInputBlur,
|
|
65
|
+
onClear,
|
|
66
|
+
onClick,
|
|
67
|
+
onKeyUp,
|
|
68
|
+
id: idProp,
|
|
69
|
+
"aria-label": ariaLabel,
|
|
70
|
+
"aria-labelledby": ariaLabelledBy,
|
|
71
|
+
"aria-describedby": ariaDescribedBy,
|
|
72
|
+
...restProps
|
|
73
|
+
} = inputProps;
|
|
74
|
+
const id = core.useId(idProp);
|
|
75
|
+
const inputId = `${id}-input`;
|
|
76
|
+
const expandButtonId = `${id}-expand-button`;
|
|
77
|
+
const clearButtonId = `${id}-clear-button`;
|
|
78
|
+
const keydownExpandButton = React.useRef(false);
|
|
79
|
+
const containerRef = core.useForkRef(ref, containerHookRef);
|
|
80
|
+
const textAreaRef = core.useForkRef(textAreaHookRef, textAreaRefProp);
|
|
81
|
+
const showExpandButton = !expanded && firstHiddenIndex != null;
|
|
82
|
+
const hasHelpers = (helpers2) => {
|
|
83
|
+
if (process.env.NODE_ENV !== "production") {
|
|
84
|
+
if (helpers2 == null) {
|
|
85
|
+
console.warn(
|
|
86
|
+
'TokenizedInputNext is used without helpers. You should pass in "helpers" from "useTokenizedInputNext".'
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return helpers2 != null;
|
|
91
|
+
};
|
|
92
|
+
const handleExpandButtonKeyDown = (event) => {
|
|
93
|
+
const singleChar = event.key.length === 1;
|
|
94
|
+
const triggerExpand = [
|
|
95
|
+
"CONTROL",
|
|
96
|
+
"META",
|
|
97
|
+
"ENTER",
|
|
98
|
+
"BACKSPACE",
|
|
99
|
+
"ARROWDOWN",
|
|
100
|
+
"ARROWLEFT",
|
|
101
|
+
"ARROWRIGHT"
|
|
102
|
+
].indexOf(event.key.toUpperCase()) !== -1;
|
|
103
|
+
if ((singleChar || triggerExpand) && hasHelpers(helpers)) {
|
|
104
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
105
|
+
event.preventDefault();
|
|
106
|
+
event.stopPropagation();
|
|
107
|
+
}
|
|
108
|
+
helpers.updateExpanded(event, true);
|
|
109
|
+
keydownExpandButton.current = true;
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
const handleInputKeyUp = (event) => {
|
|
113
|
+
if (keydownExpandButton.current && "Enter" !== event.key) {
|
|
114
|
+
keydownExpandButton.current = false;
|
|
115
|
+
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
116
|
+
}
|
|
117
|
+
onKeyUp == null ? void 0 : onKeyUp(event);
|
|
118
|
+
};
|
|
119
|
+
const handleExpand = (event) => {
|
|
120
|
+
event.stopPropagation();
|
|
121
|
+
if (hasHelpers(helpers)) {
|
|
122
|
+
helpers.updateExpanded(event, true);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const handleClearButtonFocus = (event) => {
|
|
126
|
+
event.stopPropagation();
|
|
127
|
+
};
|
|
128
|
+
const selectedItemIds = selectedItems.map(
|
|
129
|
+
(_, index) => `${id}-pill-${index}`
|
|
130
|
+
);
|
|
131
|
+
const inputAriaLabelledBy = disabled ? [ariaLabelledBy, inputId, ...selectedItemIds] : [ariaLabelledBy, inputId];
|
|
132
|
+
const expandedWithItems = expanded && !showExpandButton && selectedItems.length > 0;
|
|
133
|
+
const { "aria-label": expandButtonAccessibleText, ...restExpandButtonProps } = ExpandButtonProps;
|
|
134
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
135
|
+
className: withBaseName("container"),
|
|
136
|
+
children: [
|
|
137
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
138
|
+
"aria-owns": selectedItemIds.join(" "),
|
|
139
|
+
className: withBaseName("hidden"),
|
|
140
|
+
role: "listbox"
|
|
141
|
+
}),
|
|
142
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
143
|
+
className: clsx.clsx(
|
|
144
|
+
withBaseName(),
|
|
145
|
+
withBaseName(variant),
|
|
146
|
+
{
|
|
147
|
+
[withBaseName("expanded")]: expanded,
|
|
148
|
+
[withBaseName("focused")]: !disabled && focused,
|
|
149
|
+
[withBaseName("disabled")]: disabled,
|
|
150
|
+
[withBaseName("readOnly")]: readOnly,
|
|
151
|
+
[withBaseName(validationStatus)]: validationStatus
|
|
152
|
+
},
|
|
153
|
+
className
|
|
154
|
+
),
|
|
155
|
+
ref: containerRef,
|
|
156
|
+
onClick,
|
|
157
|
+
tabIndex: -1,
|
|
158
|
+
...restProps,
|
|
159
|
+
children: [
|
|
160
|
+
selectedItems.length > 0 && selectedItems.map((item, index) => {
|
|
161
|
+
const label = String(item);
|
|
162
|
+
return /* @__PURE__ */ jsxRuntime.jsx(InputPill.InputPill, {
|
|
163
|
+
disabled,
|
|
164
|
+
hidden: showExpandButton && index >= firstHiddenIndex,
|
|
165
|
+
highlighted: index === highlightedIndex || activeIndices.indexOf(index) !== -1,
|
|
166
|
+
id: `${id}-pill-${index}`,
|
|
167
|
+
index,
|
|
168
|
+
label,
|
|
169
|
+
onClose: expanded && !readOnly ? (event) => onRemoveItem == null ? void 0 : onRemoveItem(event, index) : void 0,
|
|
170
|
+
pillsRef
|
|
171
|
+
}, `${index}-${label}`);
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ jsxRuntime.jsx("textarea", {
|
|
174
|
+
"aria-labelledby": clsx.clsx(inputAriaLabelledBy, textAreaLabelledBy),
|
|
175
|
+
"aria-describedby": clsx.clsx(ariaDescribedBy, textAreaDescribedBy),
|
|
176
|
+
"aria-label": clsx.clsx(ariaLabel, getItemsAriaLabel(selectedItems.length)),
|
|
177
|
+
"aria-activedescendant": highlightedIndex && highlightedIndex >= 0 ? `${id}-pill-${highlightedIndex}` : void 0,
|
|
178
|
+
disabled,
|
|
179
|
+
id: inputId,
|
|
180
|
+
readOnly,
|
|
181
|
+
ref: textAreaRef,
|
|
182
|
+
required: textAreaRequired,
|
|
183
|
+
rows: 1,
|
|
184
|
+
tabIndex: disabled ? -1 : 0,
|
|
185
|
+
value,
|
|
186
|
+
className: clsx.clsx(withBaseName("textarea"), textAreaProps == null ? void 0 : textAreaProps.className),
|
|
187
|
+
onChange: onInputChange,
|
|
188
|
+
onBlur: onInputBlur,
|
|
189
|
+
onFocus: !disabled ? onInputFocus : void 0,
|
|
190
|
+
onKeyDown,
|
|
191
|
+
...restTextAreaProps
|
|
192
|
+
}),
|
|
193
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
194
|
+
className: withBaseName("endAdornmentContainer"),
|
|
195
|
+
children: [
|
|
196
|
+
!disabled && !readOnly && validationStatus && /* @__PURE__ */ jsxRuntime.jsx(core.StatusAdornment, {
|
|
197
|
+
className: withBaseName("statusAdornment"),
|
|
198
|
+
ref: statusAdornmentRef,
|
|
199
|
+
status: validationStatus
|
|
200
|
+
}),
|
|
201
|
+
expandedWithItems && !readOnly && /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
202
|
+
className: withBaseName("endAdornment"),
|
|
203
|
+
disabled,
|
|
204
|
+
id: clearButtonId,
|
|
205
|
+
onBlur,
|
|
206
|
+
onClick: onClear,
|
|
207
|
+
onFocus: handleClearButtonFocus,
|
|
208
|
+
ref: clearButtonRef,
|
|
209
|
+
variant: "secondary",
|
|
210
|
+
"data-testid": "clear-button",
|
|
211
|
+
"aria-label": "clear input",
|
|
212
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, {
|
|
213
|
+
"aria-hidden": true
|
|
214
|
+
})
|
|
215
|
+
}),
|
|
216
|
+
showExpandButton && /* @__PURE__ */ jsxRuntime.jsx(core.Button, {
|
|
217
|
+
className: withBaseName("endAdornment"),
|
|
218
|
+
"aria-label": expandButtonAccessibleText,
|
|
219
|
+
"aria-labelledby": clsx.clsx(ariaLabelledBy, inputId, expandButtonId),
|
|
220
|
+
disabled,
|
|
221
|
+
id: expandButtonId,
|
|
222
|
+
onBlur,
|
|
223
|
+
onClick: handleExpand,
|
|
224
|
+
onKeyDown: handleExpandButtonKeyDown,
|
|
225
|
+
onKeyUp: handleInputKeyUp,
|
|
226
|
+
ref: expandButtonRef,
|
|
227
|
+
variant: "secondary",
|
|
228
|
+
"data-testid": "expand-button",
|
|
229
|
+
...restExpandButtonProps,
|
|
230
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(icons.OverflowMenuIcon, {})
|
|
231
|
+
})
|
|
232
|
+
]
|
|
233
|
+
}),
|
|
234
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", {
|
|
235
|
+
className: withBaseName("activationIndicator")
|
|
236
|
+
})
|
|
237
|
+
]
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
exports.TokenizedInputNext = TokenizedInputNext;
|
|
244
|
+
//# sourceMappingURL=TokenizedInputNext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenizedInputNext.js","sources":["../src/tokenized-input-next/TokenizedInputNext.tsx"],"sourcesContent":["import {\n AdornmentValidationStatus,\n Button,\n ButtonProps,\n makePrefixer,\n NecessityType,\n StatusAdornment,\n useForkRef,\n useId,\n ValidationStatus,\n} from \"@salt-ds/core\";\nimport {\n ChangeEventHandler,\n FocusEvent,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n ReactEventHandler,\n Ref,\n SyntheticEvent,\n TextareaHTMLAttributes,\n useRef,\n} from \"react\";\nimport {\n TokenizedInputNextHelpers,\n TokenizedInputNextState,\n useTokenizedInputNext,\n} from \"./useTokenizedInputNext\";\nimport { clsx } from \"clsx\";\nimport { InputPill } from \"./internal/InputPill\";\nimport { CloseIcon, OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport tokenizedInputCss from \"./TokenizedInputNext.css\";\n\ntype ChangeHandler<Item> = (\n event: SyntheticEvent,\n selectedItems: Item[] | undefined\n) => void;\n\ntype ExpandButtonProps = Pick<\n ButtonProps,\n \"role\" | \"aria-roledescription\" | \"aria-describedby\"\n> & { \"aria-label\"?: string };\n\nexport interface TokenizedInputNextProps<Item>\n extends Partial<TokenizedInputNextState<Item>>,\n Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onFocus\" | \"onBlur\" | \"onChange\" | \"onKeyUp\" | \"onKeyDown\"\n > {\n ExpandButtonProps?: ExpandButtonProps;\n disabled?: boolean;\n focused?: boolean;\n expandButtonRef?: Ref<HTMLButtonElement>;\n onBlur?: FocusEventHandler<HTMLTextAreaElement | HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLTextAreaElement | HTMLButtonElement>;\n // Can key down on either input or expand button\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement | HTMLButtonElement>;\n onRemoveItem?: (event: SyntheticEvent, index: number) => void;\n onInputBlur?: FocusEventHandler<HTMLTextAreaElement>;\n onInputFocus?: FocusEventHandler<HTMLTextAreaElement>;\n onInputChange?: ChangeEventHandler<HTMLTextAreaElement>;\n onClick?: ReactEventHandler;\n onClear?: ReactEventHandler;\n delimiters?: string[];\n disableAddOnBlur?: boolean;\n defaultSelected?: Item[];\n onChange?: ChangeHandler<Item>;\n onCollapse?: ReactEventHandler;\n onExpand?: ReactEventHandler;\n\n /// from input\n /**\n * Validation status.\n */\n validationStatus?: Omit<ValidationStatus, \"info\">;\n /**\n * If `true`, the component is read only.\n */\n readOnly?: boolean;\n /**\n * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#Attributes) applied to the `textarea` element.\n */\n textAreaProps?: TextareaHTMLAttributes<HTMLTextAreaElement>;\n /**\n * Optional ref for the textarea component\n */\n textAreaRef?: Ref<HTMLTextAreaElement>;\n necessity?: NecessityType;\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n}\n\nconst withBaseName = makePrefixer(\"saltTokenizedInputNext\");\n\nconst getItemsAriaLabel = (itemCount: number) =>\n itemCount === 0\n ? \"no item selected\"\n : `${itemCount} ${itemCount > 1 ? \"items\" : \"item\"}`;\n\nexport const TokenizedInputNext = forwardRef(function TokenizedInputNext<Item>(\n {\n textAreaRef: textAreaRefProp,\n textAreaProps = {},\n variant = \"primary\",\n ...rest\n }: TokenizedInputNextProps<Item>,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-tokenized-input-next\",\n css: tokenizedInputCss,\n window: targetWindow,\n });\n const {\n \"aria-describedby\": textAreaDescribedBy,\n \"aria-labelledby\": textAreaLabelledBy,\n required: textAreaRequired,\n ...restTextAreaProps\n } = textAreaProps;\n\n const { refs, helpers, inputProps, firstHiddenIndex } =\n useTokenizedInputNext(rest);\n\n const {\n textAreaRef: textAreaHookRef,\n pillsRef,\n clearButtonRef,\n expandButtonRef,\n statusAdornmentRef,\n containerRef: containerHookRef,\n } = refs;\n\n const {\n ExpandButtonProps = {\n \"aria-label\": \"expand edit\",\n },\n className,\n activeIndices = [],\n selectedItems = [],\n highlightedIndex,\n value,\n expanded,\n disabled,\n onBlur,\n onKeyDown,\n onRemoveItem,\n onInputChange,\n focused,\n validationStatus,\n readOnly,\n onInputFocus,\n onInputBlur,\n onClear,\n onClick,\n onKeyUp,\n id: idProp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n ...restProps\n } = inputProps;\n\n const id = useId(idProp);\n const inputId = `${id}-input`;\n const expandButtonId = `${id}-expand-button`;\n const clearButtonId = `${id}-clear-button`;\n\n const keydownExpandButton = useRef(false);\n const containerRef = useForkRef(ref, containerHookRef);\n const textAreaRef = useForkRef(textAreaHookRef, textAreaRefProp);\n const showExpandButton = !expanded && firstHiddenIndex != null;\n\n const hasHelpers = (helpers: TokenizedInputNextHelpers<Item>) => {\n if (process.env.NODE_ENV !== \"production\") {\n if (helpers == null) {\n console.warn(\n 'TokenizedInputNext is used without helpers. You should pass in \"helpers\" from \"useTokenizedInputNext\".'\n );\n }\n }\n return helpers != null;\n };\n\n const handleExpandButtonKeyDown = (\n event: KeyboardEvent<HTMLButtonElement>\n ) => {\n const singleChar = event.key.length === 1;\n const triggerExpand =\n [\n \"CONTROL\",\n \"META\",\n \"ENTER\",\n \"BACKSPACE\",\n \"ARROWDOWN\",\n \"ARROWLEFT\",\n \"ARROWRIGHT\",\n ].indexOf(event.key.toUpperCase()) !== -1;\n\n if ((singleChar || triggerExpand) && hasHelpers(helpers)) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n event.stopPropagation();\n }\n helpers.updateExpanded(event, true);\n keydownExpandButton.current = true;\n }\n };\n\n const handleInputKeyUp = (\n event: KeyboardEvent<HTMLButtonElement | HTMLTextAreaElement>\n ) => {\n // Call keydown again if the initial event has been used to expand the input\n if (keydownExpandButton.current && \"Enter\" !== event.key) {\n keydownExpandButton.current = false;\n onKeyDown?.(event);\n }\n onKeyUp?.(event);\n };\n\n const handleExpand = (event: SyntheticEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n if (hasHelpers(helpers)) {\n helpers.updateExpanded(event, true);\n }\n };\n\n const handleClearButtonFocus = (event: FocusEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n };\n\n const selectedItemIds = selectedItems.map(\n (_, index) => `${id}-pill-${index}`\n );\n\n const inputAriaLabelledBy = disabled\n ? [ariaLabelledBy, inputId, ...selectedItemIds]\n : [ariaLabelledBy, inputId];\n\n const expandedWithItems =\n expanded && !showExpandButton && selectedItems.length > 0;\n const { \"aria-label\": expandButtonAccessibleText, ...restExpandButtonProps } =\n ExpandButtonProps;\n\n return (\n <div className={withBaseName(\"container\")}>\n <span\n aria-owns={selectedItemIds.join(\" \")}\n className={withBaseName(\"hidden\")}\n role=\"listbox\"\n />\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"expanded\")]: expanded,\n [withBaseName(\"focused\")]: !disabled && focused,\n [withBaseName(\"disabled\")]: disabled,\n [withBaseName(\"readOnly\")]: readOnly,\n [withBaseName(validationStatus as string)]: validationStatus,\n },\n className\n )}\n ref={containerRef}\n onClick={onClick}\n // Tab index allows the div to be found as related target and prevents it closing when a click in happens\n tabIndex={-1}\n {...restProps}\n >\n {selectedItems.length > 0 &&\n selectedItems.map((item, index) => {\n const label = String(item);\n return (\n <InputPill\n disabled={disabled}\n hidden={showExpandButton && index >= firstHiddenIndex}\n highlighted={\n index === highlightedIndex ||\n activeIndices.indexOf(index) !== -1\n }\n id={`${id}-pill-${index}`}\n index={index}\n key={`${index}-${label}`}\n label={label}\n onClose={\n expanded && !readOnly\n ? (event) => onRemoveItem?.(event, index)\n : undefined\n }\n pillsRef={pillsRef}\n />\n );\n })}\n <textarea\n aria-labelledby={clsx(inputAriaLabelledBy, textAreaLabelledBy)}\n aria-describedby={clsx(ariaDescribedBy, textAreaDescribedBy)}\n aria-label={clsx(ariaLabel, getItemsAriaLabel(selectedItems.length))}\n aria-activedescendant={\n highlightedIndex && highlightedIndex >= 0\n ? `${id}-pill-${highlightedIndex}`\n : undefined\n }\n disabled={disabled}\n id={inputId}\n readOnly={readOnly}\n ref={textAreaRef}\n required={textAreaRequired}\n rows={1}\n tabIndex={disabled ? -1 : 0}\n value={value}\n className={clsx(withBaseName(\"textarea\"), textAreaProps?.className)}\n onChange={onInputChange}\n onBlur={onInputBlur}\n onFocus={!disabled ? onInputFocus : undefined}\n onKeyDown={onKeyDown}\n {...restTextAreaProps}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!disabled && !readOnly && validationStatus && (\n <StatusAdornment\n className={withBaseName(\"statusAdornment\")}\n ref={statusAdornmentRef}\n status={validationStatus as AdornmentValidationStatus}\n />\n )}\n {expandedWithItems && !readOnly && (\n <Button\n className={withBaseName(\"endAdornment\")}\n disabled={disabled}\n id={clearButtonId}\n onBlur={onBlur}\n onClick={onClear}\n onFocus={handleClearButtonFocus}\n ref={clearButtonRef}\n variant=\"secondary\"\n data-testid=\"clear-button\"\n aria-label=\"clear input\"\n >\n <CloseIcon aria-hidden />\n </Button>\n )}\n {showExpandButton && (\n <Button\n className={withBaseName(\"endAdornment\")}\n aria-label={expandButtonAccessibleText}\n aria-labelledby={clsx(ariaLabelledBy, inputId, expandButtonId)}\n disabled={disabled}\n id={expandButtonId}\n onBlur={onBlur}\n onClick={handleExpand}\n onKeyDown={handleExpandButtonKeyDown}\n onKeyUp={handleInputKeyUp}\n ref={expandButtonRef}\n variant=\"secondary\"\n data-testid=\"expand-button\"\n {...restExpandButtonProps}\n >\n <OverflowMenuIcon />\n </Button>\n )}\n </div>\n\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","TokenizedInputNext","useWindow","useComponentCssInjection","tokenizedInputCss","useTokenizedInputNext","useId","useRef","useForkRef","helpers","jsxs","jsx","clsx","InputPill","StatusAdornment","Button","CloseIcon","OverflowMenuIcon"],"mappings":";;;;;;;;;;;;;;;AAmGA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA,CAAA;AAE1D,MAAM,iBAAA,GAAoB,CAAC,SAAA,KACzB,SAAc,KAAA,CAAA,GACV,qBACA,CAAG,EAAA,SAAA,CAAA,CAAA,EAAa,SAAY,GAAA,CAAA,GAAI,OAAU,GAAA,MAAA,CAAA,CAAA,CAAA;AAEnC,MAAA,kBAAA,GAAqBC,gBAAW,CAAA,SAASC,mBACpD,CAAA;AAAA,EACE,WAAa,EAAA,eAAA;AAAA,EACb,gBAAgB,EAAC;AAAA,EACjB,OAAU,GAAA,SAAA;AAAA,EACP,GAAA,IAAA;AACL,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,2BAAA;AAAA,IACR,GAAK,EAAAC,oBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AACD,EAAM,MAAA;AAAA,IACJ,kBAAoB,EAAA,mBAAA;AAAA,IACpB,iBAAmB,EAAA,kBAAA;AAAA,IACnB,QAAU,EAAA,gBAAA;AAAA,IACP,GAAA,iBAAA;AAAA,GACD,GAAA,aAAA,CAAA;AAEJ,EAAA,MAAM,EAAE,IAAM,EAAA,OAAA,EAAS,YAAY,gBAAiB,EAAA,GAClDC,4CAAsB,IAAI,CAAA,CAAA;AAE5B,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,eAAA;AAAA,IACb,QAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAc,EAAA,gBAAA;AAAA,GACZ,GAAA,IAAA,CAAA;AAEJ,EAAM,MAAA;AAAA,IACJ,iBAAoB,GAAA;AAAA,MAClB,YAAc,EAAA,aAAA;AAAA,KAChB;AAAA,IACA,SAAA;AAAA,IACA,gBAAgB,EAAC;AAAA,IACjB,gBAAgB,EAAC;AAAA,IACjB,gBAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,EAAI,EAAA,MAAA;AAAA,IACJ,YAAc,EAAA,SAAA;AAAA,IACd,iBAAmB,EAAA,cAAA;AAAA,IACnB,kBAAoB,EAAA,eAAA;AAAA,IACjB,GAAA,SAAA;AAAA,GACD,GAAA,UAAA,CAAA;AAEJ,EAAM,MAAA,EAAA,GAAKC,WAAM,MAAM,CAAA,CAAA;AACvB,EAAA,MAAM,UAAU,CAAG,EAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AACnB,EAAA,MAAM,iBAAiB,CAAG,EAAA,EAAA,CAAA,cAAA,CAAA,CAAA;AAC1B,EAAA,MAAM,gBAAgB,CAAG,EAAA,EAAA,CAAA,aAAA,CAAA,CAAA;AAEzB,EAAM,MAAA,mBAAA,GAAsBC,aAAO,KAAK,CAAA,CAAA;AACxC,EAAM,MAAA,YAAA,GAAeC,eAAW,CAAA,GAAA,EAAK,gBAAgB,CAAA,CAAA;AACrD,EAAM,MAAA,WAAA,GAAcA,eAAW,CAAA,eAAA,EAAiB,eAAe,CAAA,CAAA;AAC/D,EAAM,MAAA,gBAAA,GAAmB,CAAC,QAAA,IAAY,gBAAoB,IAAA,IAAA,CAAA;AAE1D,EAAM,MAAA,UAAA,GAAa,CAACC,QAA6C,KAAA;AAC/D,IAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,QAAA,KAAa,YAAc,EAAA;AACzC,MAAA,IAAIA,YAAW,IAAM,EAAA;AACnB,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,wGAAA;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACF;AACA,IAAA,OAAOA,QAAW,IAAA,IAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAM,MAAA,yBAAA,GAA4B,CAChC,KACG,KAAA;AACH,IAAM,MAAA,UAAA,GAAa,KAAM,CAAA,GAAA,CAAI,MAAW,KAAA,CAAA,CAAA;AACxC,IAAA,MAAM,aACJ,GAAA;AAAA,MACE,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAQ,CAAA,KAAA,CAAM,GAAI,CAAA,WAAA,EAAa,CAAM,KAAA,CAAA,CAAA,CAAA;AAEzC,IAAA,IAAA,CAAK,UAAc,IAAA,aAAA,KAAkB,UAAW,CAAA,OAAO,CAAG,EAAA;AACxD,MAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,OAAW,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AAC9C,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AACA,MAAQ,OAAA,CAAA,cAAA,CAAe,OAAO,IAAI,CAAA,CAAA;AAClC,MAAA,mBAAA,CAAoB,OAAU,GAAA,IAAA,CAAA;AAAA,KAChC;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmB,CACvB,KACG,KAAA;AAEH,IAAA,IAAI,mBAAoB,CAAA,OAAA,IAAW,OAAY,KAAA,KAAA,CAAM,GAAK,EAAA;AACxD,MAAA,mBAAA,CAAoB,OAAU,GAAA,KAAA,CAAA;AAC9B,MAAY,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACd;AACA,IAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACZ,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,KAA6C,KAAA;AACjE,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAEtB,IAAI,IAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AACvB,MAAQ,OAAA,CAAA,cAAA,CAAe,OAAO,IAAI,CAAA,CAAA;AAAA,KACpC;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,sBAAA,GAAyB,CAAC,KAAyC,KAAA;AACvE,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,MAAM,kBAAkB,aAAc,CAAA,GAAA;AAAA,IACpC,CAAC,CAAA,EAAG,KAAU,KAAA,CAAA,EAAG,EAAW,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,mBAAA,GAAsB,QACxB,GAAA,CAAC,cAAgB,EAAA,OAAA,EAAS,GAAG,eAAe,CAAA,GAC5C,CAAC,cAAA,EAAgB,OAAO,CAAA,CAAA;AAE5B,EAAA,MAAM,iBACJ,GAAA,QAAA,IAAY,CAAC,gBAAA,IAAoB,cAAc,MAAS,GAAA,CAAA,CAAA;AAC1D,EAAA,MAAM,EAAE,YAAA,EAAc,0BAA+B,EAAA,GAAA,qBAAA,EACnD,GAAA,iBAAA,CAAA;AAEF,EAAA,uBACGC,eAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAA,EAAW,aAAa,WAAW,CAAA;AAAA,IACtC,QAAA,EAAA;AAAA,sBAACC,cAAA,CAAA,MAAA,EAAA;AAAA,QACC,WAAA,EAAW,eAAgB,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,QACnC,SAAA,EAAW,aAAa,QAAQ,CAAA;AAAA,QAChC,IAAK,EAAA,SAAA;AAAA,OACP,CAAA;AAAA,sBACCD,eAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAW,EAAAE,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb,aAAa,OAAO,CAAA;AAAA,UACpB;AAAA,YACE,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,SAAS,CAAA,GAAI,CAAC,QAAY,IAAA,OAAA;AAAA,YACxC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,YAC5B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,YAC5B,CAAC,YAAa,CAAA,gBAA0B,CAAI,GAAA,gBAAA;AAAA,WAC9C;AAAA,UACA,SAAA;AAAA,SACF;AAAA,QACA,GAAK,EAAA,YAAA;AAAA,QACL,OAAA;AAAA,QAEA,QAAU,EAAA,CAAA,CAAA;AAAA,QACT,GAAG,SAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,aAAA,CAAc,SAAS,CACtB,IAAA,aAAA,CAAc,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AACjC,YAAM,MAAA,KAAA,GAAQ,OAAO,IAAI,CAAA,CAAA;AACzB,YAAA,uBACGD,cAAA,CAAAE,mBAAA,EAAA;AAAA,cACC,QAAA;AAAA,cACA,MAAA,EAAQ,oBAAoB,KAAS,IAAA,gBAAA;AAAA,cACrC,aACE,KAAU,KAAA,gBAAA,IACV,aAAc,CAAA,OAAA,CAAQ,KAAK,CAAM,KAAA,CAAA,CAAA;AAAA,cAEnC,EAAA,EAAI,GAAG,EAAW,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAAA,cAClB,KAAA;AAAA,cAEA,KAAA;AAAA,cACA,OAAA,EACE,YAAY,CAAC,QAAA,GACT,CAAC,KAAU,KAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAe,OAAO,KACjC,CAAA,GAAA,KAAA,CAAA;AAAA,cAEN,QAAA;AAAA,aAPK,EAAA,CAAA,EAAG,SAAS,KAQnB,CAAA,CAAA,CAAA,CAAA;AAAA,WAEH,CAAA;AAAA,0BACFF,cAAA,CAAA,UAAA,EAAA;AAAA,YACC,iBAAA,EAAiBC,SAAK,CAAA,mBAAA,EAAqB,kBAAkB,CAAA;AAAA,YAC7D,kBAAA,EAAkBA,SAAK,CAAA,eAAA,EAAiB,mBAAmB,CAAA;AAAA,YAC3D,cAAYA,SAAK,CAAA,SAAA,EAAW,iBAAkB,CAAA,aAAA,CAAc,MAAM,CAAC,CAAA;AAAA,YACnE,yBACE,gBAAoB,IAAA,gBAAA,IAAoB,CACpC,GAAA,CAAA,EAAG,WAAW,gBACd,CAAA,CAAA,GAAA,KAAA,CAAA;AAAA,YAEN,QAAA;AAAA,YACA,EAAI,EAAA,OAAA;AAAA,YACJ,QAAA;AAAA,YACA,GAAK,EAAA,WAAA;AAAA,YACL,QAAU,EAAA,gBAAA;AAAA,YACV,IAAM,EAAA,CAAA;AAAA,YACN,QAAA,EAAU,WAAW,CAAK,CAAA,GAAA,CAAA;AAAA,YAC1B,KAAA;AAAA,YACA,WAAWA,SAAK,CAAA,YAAA,CAAa,UAAU,CAAA,EAAG,+CAAe,SAAS,CAAA;AAAA,YAClE,QAAU,EAAA,aAAA;AAAA,YACV,MAAQ,EAAA,WAAA;AAAA,YACR,OAAA,EAAS,CAAC,QAAA,GAAW,YAAe,GAAA,KAAA,CAAA;AAAA,YACpC,SAAA;AAAA,YACC,GAAG,iBAAA;AAAA,WACN,CAAA;AAAA,0BACCF,eAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAA,EAAW,aAAa,uBAAuB,CAAA;AAAA,YACjD,QAAA,EAAA;AAAA,cAAA,CAAC,QAAY,IAAA,CAAC,QAAY,IAAA,gBAAA,oBACxBC,cAAA,CAAAG,oBAAA,EAAA;AAAA,gBACC,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,gBACzC,GAAK,EAAA,kBAAA;AAAA,gBACL,MAAQ,EAAA,gBAAA;AAAA,eACV,CAAA;AAAA,cAED,iBAAA,IAAqB,CAAC,QAAA,oBACpBH,cAAA,CAAAI,WAAA,EAAA;AAAA,gBACC,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,gBACtC,QAAA;AAAA,gBACA,EAAI,EAAA,aAAA;AAAA,gBACJ,MAAA;AAAA,gBACA,OAAS,EAAA,OAAA;AAAA,gBACT,OAAS,EAAA,sBAAA;AAAA,gBACT,GAAK,EAAA,cAAA;AAAA,gBACL,OAAQ,EAAA,WAAA;AAAA,gBACR,aAAY,EAAA,cAAA;AAAA,gBACZ,YAAW,EAAA,aAAA;AAAA,gBAEX,QAAC,kBAAAJ,cAAA,CAAAK,eAAA,EAAA;AAAA,kBAAU,aAAW,EAAA,IAAA;AAAA,iBAAC,CAAA;AAAA,eACzB,CAAA;AAAA,cAED,oCACEL,cAAA,CAAAI,WAAA,EAAA;AAAA,gBACC,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,gBACtC,YAAY,EAAA,0BAAA;AAAA,gBACZ,iBAAiB,EAAAH,SAAA,CAAK,cAAgB,EAAA,OAAA,EAAS,cAAc,CAAA;AAAA,gBAC7D,QAAA;AAAA,gBACA,EAAI,EAAA,cAAA;AAAA,gBACJ,MAAA;AAAA,gBACA,OAAS,EAAA,YAAA;AAAA,gBACT,SAAW,EAAA,yBAAA;AAAA,gBACX,OAAS,EAAA,gBAAA;AAAA,gBACT,GAAK,EAAA,eAAA;AAAA,gBACL,OAAQ,EAAA,WAAA;AAAA,gBACR,aAAY,EAAA,eAAA;AAAA,gBACX,GAAG,qBAAA;AAAA,gBAEJ,yCAACK,sBAAiB,EAAA,EAAA,CAAA;AAAA,eACpB,CAAA;AAAA,aAAA;AAAA,WAEJ,CAAA;AAAA,0BAECN,cAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAA,EAAW,aAAa,qBAAqB,CAAA;AAAA,WAAG,CAAA;AAAA,SAAA;AAAA,OACvD,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".saltInputPill {\n max-width: 100%;\n margin: var(--salt-spacing-25) var(--salt-spacing-50);\n margin-left: 0;\n}\n.saltInputPill-expanded {\n max-width: calc(100% - (var(--salt-size-base) - var(--salt-spacing-100)));\n}\n.saltInputPill-label {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.saltInputPill.saltInputPill-hidden {\n display: none;\n}\n\n.saltInputPill.saltInputPill:hover {\n background: var(--salt-selectable-background-hover);\n}\n\n.saltInputPill.saltInputPill-pillHighlighted {\n --saltPill-background: var(--salt-selectable-background-hover);\n}\n\n.saltInputPill.saltInputPill:active {\n background: var(--salt-actionable-primary-background-active);\n --saltPill-color: var(--salt-actionable-primary-foreground-active);\n --saltIcon-color: var(--salt-actionable-primary-foreground-active);\n}\n";
|
|
4
|
+
|
|
5
|
+
module.exports = css_248z;
|
|
6
|
+
//# sourceMappingURL=InputPill.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputPill.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var clsx = require('clsx');
|
|
7
|
+
var React = require('react');
|
|
8
|
+
var core = require('@salt-ds/core');
|
|
9
|
+
var useWidth = require('./useWidth.js');
|
|
10
|
+
var window = require('@salt-ds/window');
|
|
11
|
+
var styles = require('@salt-ds/styles');
|
|
12
|
+
var InputPill$1 = require('./InputPill.css.js');
|
|
13
|
+
var icons = require('@salt-ds/icons');
|
|
14
|
+
|
|
15
|
+
const withBaseName = core.makePrefixer("saltInputPill");
|
|
16
|
+
const InputPill = React.memo(function InputPill2(props) {
|
|
17
|
+
const {
|
|
18
|
+
className,
|
|
19
|
+
hidden,
|
|
20
|
+
highlighted,
|
|
21
|
+
index,
|
|
22
|
+
label,
|
|
23
|
+
onClose,
|
|
24
|
+
pillsRef,
|
|
25
|
+
...rest
|
|
26
|
+
} = props;
|
|
27
|
+
const targetWindow = window.useWindow();
|
|
28
|
+
styles.useComponentCssInjection({
|
|
29
|
+
testId: "salt-input-pill",
|
|
30
|
+
css: InputPill$1,
|
|
31
|
+
window: targetWindow
|
|
32
|
+
});
|
|
33
|
+
const ref = React.useRef(null);
|
|
34
|
+
const [isEllipsisActive, setEllipsisActive] = React.useState(false);
|
|
35
|
+
const isRemovable = Boolean(onClose);
|
|
36
|
+
core.useIsomorphicLayoutEffect(() => {
|
|
37
|
+
var _a;
|
|
38
|
+
const text = (_a = ref == null ? void 0 : ref.current) == null ? void 0 : _a.firstElementChild;
|
|
39
|
+
if (!isRemovable && pillsRef.current) {
|
|
40
|
+
pillsRef.current[index] = useWidth.getWidth(ref.current);
|
|
41
|
+
}
|
|
42
|
+
setEllipsisActive((text == null ? void 0 : text.offsetWidth) < (text == null ? void 0 : text.scrollWidth));
|
|
43
|
+
}, [pillsRef, index, isRemovable]);
|
|
44
|
+
core.useIsomorphicLayoutEffect(
|
|
45
|
+
() => () => {
|
|
46
|
+
pillsRef.current[index] = void 0;
|
|
47
|
+
},
|
|
48
|
+
[pillsRef, index]
|
|
49
|
+
);
|
|
50
|
+
const handleClose = (event) => {
|
|
51
|
+
onClose == null ? void 0 : onClose(event, index);
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsxRuntime.jsx(core.Tooltip, {
|
|
54
|
+
content: label,
|
|
55
|
+
disabled: !isEllipsisActive,
|
|
56
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(core.Pill, {
|
|
57
|
+
className: clsx.clsx(
|
|
58
|
+
withBaseName(),
|
|
59
|
+
{
|
|
60
|
+
[withBaseName("pillHighlighted")]: highlighted,
|
|
61
|
+
[withBaseName("expanded")]: isRemovable,
|
|
62
|
+
[withBaseName("hidden")]: hidden
|
|
63
|
+
},
|
|
64
|
+
className
|
|
65
|
+
),
|
|
66
|
+
tabIndex: -1,
|
|
67
|
+
onClick: isRemovable ? handleClose : void 0,
|
|
68
|
+
ref,
|
|
69
|
+
role: "option",
|
|
70
|
+
...rest,
|
|
71
|
+
children: [
|
|
72
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", {
|
|
73
|
+
className: withBaseName("label"),
|
|
74
|
+
children: label
|
|
75
|
+
}),
|
|
76
|
+
isRemovable && /* @__PURE__ */ jsxRuntime.jsx(icons.CloseIcon, {})
|
|
77
|
+
]
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
exports.InputPill = InputPill;
|
|
83
|
+
//# 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":["makePrefixer","memo","InputPill","useWindow","useComponentCssInjection","inputPillCss","useRef","useState","useIsomorphicLayoutEffect","getWidth","jsx","Tooltip","jsxs","Pill","clsx","CloseIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function calcFirstHiddenIndex({
|
|
6
|
+
containerWidth = 0,
|
|
7
|
+
pillWidths = []
|
|
8
|
+
} = {}) {
|
|
9
|
+
let totalWidth = 0;
|
|
10
|
+
let firstHiddenIndex = null;
|
|
11
|
+
for (let i = 0; i < pillWidths.length; i++) {
|
|
12
|
+
totalWidth += pillWidths[i];
|
|
13
|
+
if (totalWidth > containerWidth) {
|
|
14
|
+
firstHiddenIndex = i;
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return firstHiddenIndex;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
exports.calcFirstHiddenIndex = calcFirstHiddenIndex;
|
|
22
|
+
//# 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,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var core = require('@salt-ds/core');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
|
|
8
|
+
function useResizeObserver(onSizeChange) {
|
|
9
|
+
const ref = React.useRef(null);
|
|
10
|
+
React.useEffect(() => {
|
|
11
|
+
if (!ref.current) {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
const observer = new ResizeObserver(onSizeChange);
|
|
15
|
+
observer.observe(ref.current);
|
|
16
|
+
return () => {
|
|
17
|
+
observer.disconnect();
|
|
18
|
+
};
|
|
19
|
+
}, [onSizeChange]);
|
|
20
|
+
core.useIsomorphicLayoutEffect(() => {
|
|
21
|
+
if (ref.current) {
|
|
22
|
+
onSizeChange([
|
|
23
|
+
{
|
|
24
|
+
target: ref.current,
|
|
25
|
+
contentRect: ref.current.getBoundingClientRect(),
|
|
26
|
+
borderBoxSize: [],
|
|
27
|
+
contentBoxSize: [],
|
|
28
|
+
devicePixelContentBoxSize: []
|
|
29
|
+
}
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
}, [onSizeChange]);
|
|
33
|
+
return ref;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.useResizeObserver = useResizeObserver;
|
|
37
|
+
//# 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":["useRef","useEffect","useIsomorphicLayoutEffect"],"mappings":";;;;;;;AASO,SAAS,kBACd,YAIc,EAAA;AACd,EAAM,MAAA,GAAA,GAAMA,aAAgB,IAAI,CAAA,CAAA;AAEhC,EAAAC,eAAA,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,EAAAC,8BAAA,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,48 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
var core = require('@salt-ds/core');
|
|
7
|
+
|
|
8
|
+
const safeParseFloat = (target) => parseFloat(target != null ? target : "0");
|
|
9
|
+
const getPadding = (node) => {
|
|
10
|
+
if (node == null) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
const style = window.getComputedStyle(node);
|
|
14
|
+
const padding = safeParseFloat(style.paddingLeft) + safeParseFloat(style.paddingRight);
|
|
15
|
+
return padding;
|
|
16
|
+
};
|
|
17
|
+
const getWidth = (node) => {
|
|
18
|
+
if (node == null) {
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
const style = window.getComputedStyle(node);
|
|
22
|
+
const margin = safeParseFloat(style.marginLeft) + safeParseFloat(style.marginRight);
|
|
23
|
+
let dimension;
|
|
24
|
+
if (style.display === "none") {
|
|
25
|
+
const nodeDisplay = node.style.display;
|
|
26
|
+
node.style.display = "inline-block";
|
|
27
|
+
dimension = node.getBoundingClientRect();
|
|
28
|
+
node.style.display = nodeDisplay;
|
|
29
|
+
} else {
|
|
30
|
+
dimension = node.getBoundingClientRect();
|
|
31
|
+
}
|
|
32
|
+
return dimension.width + margin;
|
|
33
|
+
};
|
|
34
|
+
const useWidth = (density) => {
|
|
35
|
+
const [node, setNode] = React.useState(null);
|
|
36
|
+
const [width, setWidth] = React.useState(0);
|
|
37
|
+
core.useIsomorphicLayoutEffect(() => {
|
|
38
|
+
if (node !== null) {
|
|
39
|
+
setWidth(getWidth(node));
|
|
40
|
+
}
|
|
41
|
+
}, [node, density]);
|
|
42
|
+
return [setNode, width];
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.getPadding = getPadding;
|
|
46
|
+
exports.getWidth = getWidth;
|
|
47
|
+
exports.useWidth = useWidth;
|
|
48
|
+
//# 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":["useState","useIsomorphicLayoutEffect"],"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,GAAIA,eAA6B,IAAI,CAAA,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAiB,CAAC,CAAA,CAAA;AAE5C,EAAAC,8BAAA,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;;;;;;"}
|