@cube-dev/ui-kit 0.0.0-canary-8700a46 → 0.0.0-canary-3b2471f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/actions-run.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBox/optionId.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +111 -108
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +4 -3
- package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +110 -64
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TagInput/TagInput.d.ts +9 -2
- package/dist/components/fields/TagInput/TagInput.js +462 -394
- package/dist/components/fields/TagInput/TagInput.js.map +1 -1
- package/dist/components/fields/TagInput/TagList.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/TriggerActions.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ModernFormRoot.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/backend.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/modern/actions.js +1 -1
- package/dist/components/form/Form/modern/context.js +1 -1
- package/dist/components/form/Form/modern/controller.js +1 -1
- package/dist/components/form/Form/modern/field-binding.js +1 -1
- package/dist/components/form/Form/modern/field.js +1 -1
- package/dist/components/form/Form/modern/react.js +1 -1
- package/dist/components/form/Form/modern/store.js +1 -1
- package/dist/components/form/Form/modern/validation.js +1 -1
- package/dist/components/form/Form/modern/values.js +1 -1
- package/dist/components/form/Form/reset-unbound-controls.js +1 -1
- package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/legacy-tooltip.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/escapePropagation.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/components/fields/TagInput.md +8 -8
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagInput.js","names":["useControlledState","Key","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","Styles","tasty","ClipboardEvent","cloneElement","FocusEvent","ForwardedRef","forwardRef","isValidElement","KeyboardEvent","ReactElement","ReactNode","RefObject","useEffect","useLayoutEffect","useMemo","useRef","useState","useFilter","useId","useTextField","VisuallyHidden","Section","BaseSection","useListState","useEvent","useFormatter","useI18n","CloseIcon","DirectionIcon","generateRandomId","mergeProps","useCombinedRefs","castNullableArrayValue","WithNullableValue","extractStyles","ItemAction","CollectionItem","Item","useFieldProps","wrapWithField","getListBoxOptionId","collectVisibleKeys","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","markKeyboardFocus","useCompositeFocus","TextInputBase","TagList","TagListEntry","FieldBaseProps","CubeTagProps","FilterFn","textValue","inputValue","TagInputPopoverTrigger","TagValidationResult","CubeTagInputProps","value","defaultValue","onChange","defaultInputValue","onInputChange","placeholder","autoComplete","inputMode","enterKeyHint","onFocus","onBlur","onKeyDown","e","HTMLInputElement","delimiters","validateTag","normalizeTag","maxTags","shouldCommitOnBlur","isClearable","onClear","items","Iterable","T","children","item","allowsCustomValue","filter","disabledKeys","popoverTrigger","onOpenChange","isOpen","hideTrigger","direction","shouldFlip","overlayOffset","containerPadding","tagProps","Partial","icon","prefix","suffix","suffixPosition","size","inputRef","wrapperRef","HTMLDivElement","popoverRef","listBoxRef","wrapperStyles","inputStyles","tagListStyles","tagStyles","triggerStyles","overlayStyles","listBoxStyles","optionStyles","sectionStyles","headingStyles","TagInputElement","qa","styles","display","flow","gap","TAG_SIZES","Record","small","medium","large","DEFAULT_DELIMITERS","LINE_BREAK","escapeRegExp","text","replace","delimiterPattern","RegExp","separators","Boolean","map","length","join","splitTagText","pattern","source","split","part","trim","textLabel","node","undefined","textCollator","Intl","Collator","sensitivity","textSorter","numeric","isSameText","a","b","compare","compareText","withCustomOptions","customKeys","customTerm","hasOptionRows","hasSections","optionsLabel","customValuesLabel","customOptions","key","push","customSection","Array","isArray","isComposingKey","nativeEvent","isComposing","keyCode","RejectionReason","Rejection","reason","message","TagInput","props","ref","$","_c","t0","t1","Symbol","for","defaultValidationTrigger","valuePropsMapper","_temp","t","formatList","autoFocus","className","errorMessage","id","inputRefProp","inputValueProp","isDisabled","isInvalid","isLoading","isReadOnly","isRequired","isValid","label","listBoxRefProp","mods","onChange_0","otherProps","popoverRefProp","qaVal","renderChildren","style","t2","userLabelProps","valueProp","wrapperRefProp","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","labelProps","t65","t66","t67","t68","t69","name","form","t70","rootRef","tagListRef","listStateRef","tagInputId","listBoxId","tagListId","summaryId","hintId","triggerId","clearId","values","setValues","uniqueValues","Set","String","draft","setDraftState","tagError","setTagErrorState","tagErrorIdRef","current","setTagError","announcement","setAnnouncement","from","index","rendered","hasOptions","localCollectionState","selectionMode","collection","contains","_temp2","textFilterFn","isFilterActive","setIsFilterActive","term","knownLabels","setKnownLabels","_temp3","getItem","get","getOptionLabel","key_0","getTagLabel","key_1","isTagLocked","disabledKeySet","keys","next","key_2","label_0","Map","set","rememberLabels","text_0","nodes","type","childNodes","child","findOptionKey","optionFilterFn","nodes_0","visibleOptionKeys","unpickedCustomValues","setUnpickedCustomValues","customValueKeys","value_0","has","sort","matchesTerm","visibleCustomKeys","key_3","includes","popoverChildren","some","_temp4","hasResults","visibleOptionsSignature","isPopoverOpen","setIsPopoverOpen","isInteractive","shouldShowPopover","notifiedOpenRef","activeOption","setActiveOption","activeOptionKey","key_4","forTerm","listState","selectionManager","setFocusedKey","moveVirtualFocus","popoverMinWidth","setPopoverMinWidth","exactOptionKey","visibleTargetKeys","preferredOptionKey","find","key_5","focusTermRef","offsetWidth","visibleKeys","isNewTerm","attempts","isCancelled","tick","listState_0","requestAnimationFrame","focused","focusedKey","keepsFocus","prev","next_0","setDraft","text_1","prev_0","announce","rejection","count","rejectionMessage","joiner","hasFieldMessage","forceField","commitParts","parts","present","accepted","rejected","optionKey","typed","nextValue","result","add","error","messages","_temp5","commitDraft","rows","querySelectorAll","focus","focusLastTag","removeValues","requested","keys_0","key_6","removed","next_1","value_1","value_2","toggleOption","key_7","prev_1","handlePopoverSelection","selection","next_2","changed","key_8","value_3","forEach","clicked","setTimeout","isTabbingRef","handleKeyDown","defaultPrevented","listState_1","preventDefault","value_4","repeat","isCurrent","targetKey","key_9","el","currentTarget","start","selectionStart","end","selectionEnd","rejected_0","slice","trimStart","stopPropagation","handleInputChange","next_3","parts_0","nextDraft","rest","pop","rejected_1","_temp6","e_0","pasted","clipboardData","getData","el_0","start_0","end_0","handlePaste","settleDraft","handleCompositeBlur","HTMLElement","compositeFocusProps","e_1","isTabbing","next_4","relatedTarget","Node","handleInputBlur","handleInputFocus","tags","value_5","ownProps","isOption","result_0","label_1","invalidMessage","effectiveIsInvalid","hasRemovableTags","_temp7","hasBackspaceHint","lockedKeys","_temp8","_temp9","optionDisabledKeys","inputProps","labelId","describedBy","tagInputProps","onPaste","role","willOpen","handleTriggerPress","pressed","trigger","clearText","canClear","clearButton","hasActions","T0","_temp0","tagInputField","_children","fieldProps","fieldRef","Omit","tag_2","tag","tag_1","tag_0","part_0","rejection_0","node_0","_TagInput","Object","assign","displayName","defineProperty","enumerable","configurable"],"sources":["../../../../src/components/fields/TagInput/TagInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { Key } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ClipboardEvent,\n cloneElement,\n FocusEvent,\n ForwardedRef,\n forwardRef,\n isValidElement,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n RefObject,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useId, useTextField, VisuallyHidden } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useFormatter, useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps, useCombinedRefs } from '../../../utils/react';\nimport {\n castNullableArrayValue,\n WithNullableValue,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { useFieldProps } from '../../form/Form/use-field/use-field-props';\nimport { wrapWithField } from '../../form/wrapper';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n collectVisibleKeys,\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n markKeyboardFocus,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\nimport { TagList, TagListEntry } from './TagList';\n\nimport type { FieldBaseProps } from '../../../shared';\nimport type { CubeTagProps } from '../../content/Tag/Tag';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nexport type TagInputPopoverTrigger = 'focus' | 'input' | 'manual';\n\n/**\n * What `validateTag` returns: `true` (or nothing) accepts the value, `false`\n * rejects it with the default message, and a string rejects it with that\n * message.\n */\nexport type TagValidationResult = boolean | string | null | undefined;\n\nexport interface CubeTagInputProps<T = object>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n FieldBaseProps<readonly string[] | null | undefined> {\n /** The values in controlled mode. */\n value?: readonly string[];\n /** The initial values in uncontrolled mode. */\n defaultValue?: readonly string[];\n /** Called with the whole new list whenever a value is added or removed. */\n onChange?: (value: string[]) => void;\n\n /** The text being typed, in controlled mode. */\n inputValue?: string;\n /** The initial text in uncontrolled mode. */\n defaultInputValue?: string;\n /** Called when the text being typed changes. */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input. */\n placeholder?: string;\n /** HTML `autocomplete` attribute for the input. */\n autoComplete?: string;\n /**\n * Which virtual keyboard the input asks for: `'email'` for addresses,\n * `'decimal'` for numbers. The input stays a text input, so the browser does\n * not validate what is typed.\n */\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n /** The label of the virtual keyboard's Enter key. */\n enterKeyHint?:\n | 'enter'\n | 'done'\n | 'go'\n | 'next'\n | 'previous'\n | 'search'\n | 'send';\n /** Called when focus enters the component (input, chips or popover). Receives no event. */\n onFocus?: () => void;\n /** Called when focus leaves the component entirely. Receives no event. */\n onBlur?: () => void;\n /**\n * Called when a key is pressed in the input, before the component handles it.\n * Call `e.preventDefault()` to stop the component from handling the key.\n */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n\n /**\n * Characters that commit the typed text, and that pasted text is split on.\n * Pasted text is also always split on line breaks. Pass `[]` for values that\n * may contain the default separator.\n * @default [',']\n */\n delimiters?: string[];\n /**\n * Checks one value before it becomes a chip. Return `true` or nothing to\n * accept it, `false` to reject it with the default message, or a string to\n * reject it with that message. Also paints existing chips that fail it in the\n * danger theme. Values picked from the options are not checked.\n */\n validateTag?: (value: string) => TagValidationResult;\n /**\n * Rewrites a typed value before it is checked and added: lowercase an\n * address, write a number one way. Duplicates are found after it runs.\n * Return an empty string to drop the value. Values picked from the options\n * are not rewritten.\n */\n normalizeTag?: (value: string) => string;\n /**\n * The most values the field holds. Values past it are refused with a\n * message and stay in the input.\n */\n maxTags?: number;\n /** Whether leaving the field commits the typed text. @default true */\n shouldCommitOnBlur?: boolean;\n /**\n * Whether a button in the input clears the typed text. It shows while there\n * is text; the chips have their own remove buttons.\n */\n isClearable?: boolean;\n /** Called when the clear button is pressed. */\n onClear?: () => void;\n\n /** Options to suggest, as data. Pair with a render function in `children`. */\n items?: Iterable<T>;\n /**\n * Options to suggest: `TagInput.Item` elements or a render function for\n * `items`. Without options the field accepts any typed value.\n */\n children?: ReactNode | ((item: T) => ReactElement);\n /**\n * Whether typed values that are not among the options are accepted. Only\n * applies when options are given; without options every value is custom.\n * @default false\n */\n allowsCustomValue?: boolean;\n /**\n * Custom filter for the options, or `false` to show every option (for\n * server-side filtering).\n */\n filter?: FilterFn | false;\n /** Keys of options that cannot be picked. */\n disabledKeys?: Iterable<Key>;\n /** When the suggestions popover opens. @default 'input' */\n popoverTrigger?: TagInputPopoverTrigger;\n /** Called when the suggestions popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether to hide the button that toggles the suggestions popover. */\n hideTrigger?: boolean;\n /** Where the suggestions popover opens. @default 'bottom' */\n direction?: 'bottom' | 'top';\n /** Whether the popover flips when there is no room. @default true */\n shouldFlip?: boolean;\n /** Distance between the input and the popover, in pixels. @default 8 */\n overlayOffset?: number;\n /** Minimum space between the popover and the viewport edge, in pixels. @default 8 */\n containerPadding?: number;\n\n /**\n * Props for each chip's `Tag` (theme, icon, label, …), by value. A string\n * `children` also names the value to screen readers. `isDisabled` locks the\n * chip: it cannot be removed.\n */\n tagProps?: (value: string) => Partial<CubeTagProps> | undefined;\n\n /** Left input icon. */\n icon?: ReactElement;\n /** Input decoration before the main input. */\n prefix?: ReactNode;\n /** Input decoration after the main input. */\n suffix?: ReactNode;\n /** Whether the suffix goes before or after the validation and loading icons. */\n suffixPosition?: 'before' | 'after';\n /** Size of the input. The chips follow it. @default 'medium' */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref to the input element. */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref to the bordered input box. */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref to the popover element. */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref to the listbox in the popover. */\n listBoxRef?: RefObject<HTMLDivElement>;\n\n /** Styles for the bordered input box. */\n wrapperStyles?: Styles;\n /** Styles for the input element. */\n inputStyles?: Styles;\n /** Styles for the list of chips. */\n tagListStyles?: Styles;\n /** Styles for every chip. */\n tagStyles?: Styles;\n /** Styles for the button that toggles the popover. */\n triggerStyles?: Styles;\n /** Styles for the popover. */\n overlayStyles?: Styles;\n /** Styles for the listbox in the popover. */\n listBoxStyles?: Styles;\n /** Styles for each option. */\n optionStyles?: Styles;\n /** Styles for option sections. */\n sectionStyles?: Styles;\n /** Styles for option section headings. */\n headingStyles?: Styles;\n}\n\nconst TagInputElement = tasty({\n qa: 'TagInputContainer',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: '1x',\n },\n});\n\n// The chips sit a step below the input, so a row of them reads as the field's\n// value rather than as a second row of controls. Never below `xsmall`: the\n// `inline` tag is set in the bold badge type, which reads as a label.\nconst TAG_SIZES: Record<string, CubeTagProps['size']> = {\n small: 'xsmall',\n medium: 'xsmall',\n large: 'small',\n};\n\nconst DEFAULT_DELIMITERS = [','];\nconst LINE_BREAK = /\\r\\n|\\r|\\n/;\n\nfunction escapeRegExp(text: string) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction delimiterPattern(delimiters: string[]): RegExp | null {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n\n return separators.length ? new RegExp(separators.join('|')) : null;\n}\n\n/** Splits `text` on the delimiters and line breaks into trimmed, non-empty parts. */\nexport function splitTagText(text: string, delimiters: string[]): string[] {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n const pattern = new RegExp([LINE_BREAK.source, ...separators].join('|'), 'g');\n\n return text\n .split(pattern)\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\n/** A chip's own label, when `tagProps` gives it one as plain text. */\nfunction textLabel(node: ReactNode): string | undefined {\n return typeof node === 'string' && node !== '' ? node : undefined;\n}\n\n// Safari reports the Enter that confirms an IME composition with\n// `isComposing: false`, but still with the composition key code.\nconst textCollator = new Intl.Collator(undefined, { sensitivity: 'base' });\n// Numbers in order: 2 before 10.\nconst textSorter = new Intl.Collator(undefined, { numeric: true });\n\nfunction isSameText(a: string, b: string) {\n return textCollator.compare(a, b) === 0;\n}\n\nfunction compareText(a: string, b: string) {\n return textSorter.compare(a, b);\n}\n\n/**\n * The popover's rows: the options, then the user's own values and the typed\n * text. Those go in a section of their own when there are options to set them\n * apart from.\n */\nfunction withCustomOptions(\n children: ReactNode,\n {\n customKeys,\n customTerm,\n hasOptionRows,\n hasSections,\n optionsLabel,\n customValuesLabel,\n }: {\n customKeys: string[];\n customTerm: string | null;\n hasOptionRows: boolean;\n hasSections: boolean;\n optionsLabel: string;\n customValuesLabel: string;\n },\n) {\n if (!customTerm && !customKeys.length) return children;\n\n const customOptions = customKeys.map((key) => (\n <Item key={key} textValue={key}>\n {key}\n </Item>\n ));\n\n if (customTerm) {\n customOptions.push(\n <Item key={customTerm} textValue={customTerm}>\n {customTerm}\n </Item>,\n );\n }\n\n if (!hasOptionRows) {\n return customOptions;\n }\n\n const customSection = (\n <BaseSection key=\"__custom_values__\" aria-label={customValuesLabel}>\n {customOptions}\n </BaseSection>\n );\n\n // A section cannot nest in another one, so options that already come in\n // sections only get the custom section appended.\n if (hasSections) {\n return [\n ...(Array.isArray(children) ? children : [children]),\n customSection,\n ];\n }\n\n return [\n <BaseSection key=\"__options__\" aria-label={optionsLabel}>\n {children as never}\n </BaseSection>,\n customSection,\n ];\n}\n\nfunction isComposingKey(e: KeyboardEvent<HTMLInputElement>) {\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\ntype RejectionReason =\n | 'invalid'\n | 'duplicate'\n | 'unknown'\n | 'unavailable'\n | 'limit';\n\ninterface Rejection {\n text: string;\n reason: RejectionReason;\n message?: string;\n}\n\nfunction TagInput<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = castNullableArrayValue(props);\n props = useFieldProps(props, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value ?? [],\n onChange,\n }),\n });\n\n const { t } = useI18n();\n const { formatList } = useFormatter();\n\n let {\n qa,\n id,\n label,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange,\n placeholder,\n autoFocus,\n autoComplete = 'off',\n onFocus,\n onBlur,\n onKeyDown,\n delimiters = DEFAULT_DELIMITERS,\n validateTag,\n normalizeTag,\n maxTags,\n shouldCommitOnBlur = true,\n isClearable,\n onClear,\n items,\n children: renderChildren,\n allowsCustomValue,\n filter,\n disabledKeys,\n popoverTrigger = 'input',\n onOpenChange,\n hideTrigger,\n direction = 'bottom',\n shouldFlip = true,\n overlayOffset = 8,\n containerPadding = 8,\n tagProps,\n icon,\n prefix,\n suffix,\n suffixPosition,\n size = 'medium',\n isDisabled,\n isReadOnly,\n isRequired,\n isLoading,\n isInvalid,\n isValid,\n message,\n errorMessage,\n inputRef: inputRefProp,\n wrapperRef: wrapperRefProp,\n popoverRef: popoverRefProp,\n listBoxRef: listBoxRefProp,\n wrapperStyles,\n inputStyles,\n tagListStyles,\n tagStyles,\n triggerStyles,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n labelProps: userLabelProps,\n mods,\n className,\n style,\n qaVal,\n // The input holds the text being typed, not the field's value: a native\n // form must not submit it under the field's name.\n name,\n form,\n ...otherProps\n } = props;\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const rootRef = useCombinedRefs(ref);\n const inputRef = useCombinedRefs(inputRefProp);\n const wrapperRef = useCombinedRefs(wrapperRefProp);\n const popoverRef = useCombinedRefs(popoverRefProp);\n const listBoxRef = useCombinedRefs(listBoxRefProp);\n const tagListRef = useRef<HTMLDivElement>(null);\n const listStateRef = useRef<ListStateLike | null>(null);\n\n const tagInputId = useMemo(() => generateRandomId(), []);\n const listBoxId = `TagInputListBox-${tagInputId}`;\n const tagListId = useId();\n const summaryId = useId();\n const hintId = useId();\n const triggerId = useId();\n const clearId = useId();\n\n // ---- values -------------------------------------------------------------\n const [values, setValues] = useControlledState<readonly string[]>(\n valueProp as readonly string[] | undefined,\n (defaultValue as readonly string[] | undefined) ?? [],\n onChange as ((value: readonly string[]) => void) | undefined,\n );\n // A controlled value may repeat an entry; the chips are keyed by value, so\n // render each one once.\n const uniqueValues = [...new Set((values ?? []).map(String))];\n\n // ---- typed text ---------------------------------------------------------\n const [draft, setDraftState] = useControlledState<string>(\n inputValueProp as string | undefined,\n defaultInputValue ?? '',\n onInputChange,\n );\n // The id gives a repeated rejection a fresh message node, so it is announced\n // again.\n const [tagError, setTagErrorState] = useState<{\n id: number;\n text: string;\n } | null>(null);\n // Only ever grows: a clear and a new rejection can land in one batch.\n const tagErrorIdRef = useRef(0);\n const setTagError = useEvent((text: string | null) => {\n if (text == null) {\n setTagErrorState(null);\n\n return;\n }\n\n tagErrorIdRef.current += 1;\n setTagErrorState({ id: tagErrorIdRef.current, text });\n });\n const [announcement, setAnnouncement] = useState({ id: 0, text: '' });\n\n // ---- options ------------------------------------------------------------\n let children: ReactNode = renderChildren as ReactNode;\n\n if (items && typeof renderChildren === 'function') {\n children = Array.from(items).map((item, index) => {\n const rendered = (renderChildren as (item: T) => ReactNode)(item);\n\n if (isValidElement(rendered) && rendered.key == null) {\n return cloneElement(rendered, {\n key:\n (item as { key?: Key })?.key ?? (item as { id?: Key })?.id ?? index,\n });\n }\n\n return rendered;\n });\n }\n\n const hasOptions = children != null && children !== false;\n\n // Reads option labels, and matches typed text to an option, whether or not\n // the popover is open.\n const localCollectionState = useListState({\n children: children as never,\n selectionMode: 'none',\n });\n const collection = localCollectionState.collection;\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const textFilterFn: FilterFn =\n filter === false ? () => true : filter || contains;\n\n const [isFilterActive, setIsFilterActive] = useState(false);\n const term = draft.trim();\n\n // Labels of picked options, kept after the option leaves the collection, as\n // it does with server-side filtering (`items` + `filter={false}`).\n const [knownLabels, setKnownLabels] = useState<ReadonlyMap<string, string>>(\n () => new Map(),\n );\n\n const getOptionLabel = (key: string) =>\n collection.getItem(key)?.textValue || knownLabels.get(key) || key;\n\n // What a chip reads as, and what announcements name it by: a string label\n // the chip is given, then the option's own.\n const getTagLabel = (key: string) =>\n textLabel(tagProps?.(key)?.children) ?? getOptionLabel(key);\n\n // A locked chip stays put: no remove button, Delete or unpick.\n const isTagLocked = (key: string) => !!tagProps?.(key)?.isDisabled;\n\n const disabledKeySet = new Set([...(disabledKeys ?? [])].map(String));\n\n // Called before the text changes (and the options with it) and when values\n // are added, while the options still hold the labels.\n const rememberLabels = useEvent((keys: readonly string[]) => {\n let next: Map<string, string> | null = null;\n\n for (const key of keys) {\n const label = collection.getItem(key)?.textValue;\n\n if (label && knownLabels.get(key) !== label) {\n if (!next) next = new Map(knownLabels);\n next.set(key, label);\n }\n }\n\n if (next) setKnownLabels(next);\n });\n\n /** The key of the option whose key or label is `text`, if any. */\n const findOptionKey = (text: string): string | null => {\n if (!hasOptions) return null;\n\n for (const node of collection) {\n const nodes = node.type === 'section' ? [...node.childNodes] : [node];\n\n for (const child of nodes) {\n if (child.type !== 'item') continue;\n\n if (\n String(child.key) === text ||\n isSameText(child.textValue || '', text)\n ) {\n return String(child.key);\n }\n }\n }\n\n return null;\n };\n\n const optionFilterFn = (nodes: Iterable<any>) => {\n if (!isFilterActive || !term) return nodes;\n\n return filterCollectionNodes(nodes, term, textFilterFn);\n };\n\n const visibleOptionKeys: Key[] = [];\n\n if (hasOptions) {\n collectVisibleKeys(\n optionFilterFn(collection),\n visibleOptionKeys,\n disabledKeys ? new Set(disabledKeys) : undefined,\n );\n }\n\n // Custom values unpicked in the list during this visit. They stay listed,\n // unchecked, until focus leaves the field: the row does not vanish under the\n // pointer, and it can be picked back.\n const [unpickedCustomValues, setUnpickedCustomValues] = useState<\n readonly string[]\n >([]);\n\n // The user's own values, listed after the options so they can be unpicked\n // where they were picked. Only with `allowsCustomValue`: without it an\n // unpicked value could not be added back. Sorted, so toggling one does not\n // move it.\n const customValueKeys =\n hasOptions && allowsCustomValue\n ? [\n ...new Set(\n [...uniqueValues, ...unpickedCustomValues].filter(\n (value) =>\n collection.getItem(value) == null && !knownLabels.has(value),\n ),\n ),\n ].sort(compareText)\n : [];\n\n // The typed text narrows them as it narrows the options, even when the\n // options are filtered on the server (`filter={false}`): these rows are\n // this component's own.\n const matchesTerm = typeof filter === 'function' ? filter : contains;\n const visibleCustomKeys =\n isFilterActive && term\n ? customValueKeys.filter((key) => matchesTerm(key, term))\n : customValueKeys;\n\n // The typed text as a pickable row, when it would add something new.\n const customTerm =\n hasOptions &&\n allowsCustomValue &&\n term &&\n findOptionKey(term) == null &&\n !uniqueValues.includes(term) &&\n !customValueKeys.includes(term)\n ? term\n : null;\n\n const popoverChildren = withCustomOptions(children, {\n customKeys: visibleCustomKeys,\n customTerm,\n hasOptionRows: visibleOptionKeys.length > 0,\n hasSections: [...collection].some((node) => node.type === 'section'),\n optionsLabel: t('tagInput.options', 'Options'),\n customValuesLabel: t('tagInput.customValues', 'Custom values'),\n });\n\n const hasResults =\n visibleOptionKeys.length > 0 ||\n visibleCustomKeys.length > 0 ||\n customTerm != null;\n // Options rebuild on every render when they come from `items`, so effects\n // follow what is visible rather than the collection's identity.\n const visibleOptionsSignature = [\n ...visibleOptionKeys,\n ...visibleCustomKeys,\n ].join('\\u0000');\n\n // ---- popover ------------------------------------------------------------\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const isInteractive = !isDisabled && !isReadOnly;\n const shouldShowPopover =\n hasOptions && isInteractive && isPopoverOpen && hasResults;\n\n // With no matching option the popover hides but stays open, so it comes back\n // as soon as the text matches again.\n const notifiedOpenRef = useRef(false);\n\n useEffect(() => {\n if (notifiedOpenRef.current === shouldShowPopover) return;\n\n notifiedOpenRef.current = shouldShowPopover;\n onOpenChange?.(shouldShowPopover);\n }, [shouldShowPopover, onOpenChange]);\n\n // The option under virtual focus, mirrored in state for the input's\n // `aria-activedescendant`: the listbox's own state update does not re-render\n // this component. It is also what Enter acts on, so Enter only ever picks the\n // option a screen reader was told about. `term` is the text it was chosen\n // for; `source` tells a user's own pick (arrows, a click) from focus the\n // component placed while the text changed.\n const [activeOption, setActiveOption] = useState<{\n key: Key;\n term: string;\n source: 'auto' | 'user';\n } | null>(null);\n const activeOptionKey = activeOption?.key ?? null;\n\n const moveVirtualFocus = useEvent(\n (key: Key | null, source: 'auto' | 'user', forTerm: string) => {\n const listState = listStateRef.current;\n\n if (!listState || key == null) return;\n\n markKeyboardFocus(listState);\n listState.selectionManager.setFocusedKey(key);\n setActiveOption({ key, term: forTerm, source });\n },\n );\n\n // The popover is at least as wide as the input box.\n const [popoverMinWidth, setPopoverMinWidth] = useState<number>();\n\n // An option whose label is exactly the typed text wins over the first match,\n // so typing \"build\" and pressing Enter picks \"build\", not \"rebuild\".\n let exactOptionKey = term ? findOptionKey(term) : null;\n\n if (exactOptionKey == null && term && customValueKeys.includes(term)) {\n exactOptionKey = term;\n }\n\n const visibleTargetKeys: Key[] = [...visibleOptionKeys, ...visibleCustomKeys];\n\n if (customTerm) visibleTargetKeys.push(customTerm);\n // Typed text means \"add\", so past an exact match the first row that is not\n // added yet wins: typing \"def\" next to a picked \"undefined\" lands on \"def\".\n let preferredOptionKey: Key | null = null;\n\n if (exactOptionKey != null && visibleTargetKeys.includes(exactOptionKey)) {\n preferredOptionKey = exactOptionKey;\n } else if (term) {\n preferredOptionKey =\n visibleTargetKeys.find((key) => !uniqueValues.includes(String(key))) ??\n null;\n }\n\n if (preferredOptionKey == null) {\n preferredOptionKey = visibleTargetKeys[0] ?? null;\n }\n const focusTermRef = useRef<string | null>(null);\n\n // Focus the best match when the popover opens or the text changes, and\n // whenever the focused option is filtered out, so Enter always acts on a\n // visible row. The keys come from this render's own filter: the listbox's\n // collection can lag a render behind right after the text narrows.\n useLayoutEffect(() => {\n // `aria-activedescendant` is only set while the popover shows, so a stale\n // active option needs no reset here; the next pass re-syncs it.\n if (!shouldShowPopover) {\n focusTermRef.current = null;\n\n return;\n }\n\n setPopoverMinWidth(wrapperRef.current?.offsetWidth);\n\n // Rebuilt from the signature: the key arrays themselves are new on every\n // render when options come from `items`. Collection keys are strings.\n const visibleKeys: Key[] = visibleOptionsSignature\n ? visibleOptionsSignature.split('\\u0000')\n : [];\n\n if (customTerm) visibleKeys.push(customTerm);\n\n const isNewTerm = !!term && focusTermRef.current !== term;\n\n focusTermRef.current = term;\n\n let attempts = 0;\n let isCancelled = false;\n\n const tick = () => {\n if (isCancelled) return;\n\n const listState = listStateRef.current;\n\n if (!listState) {\n attempts += 1;\n\n if (attempts < 8) requestAnimationFrame(tick);\n\n return;\n }\n\n const focused = listState.selectionManager.focusedKey;\n const keepsFocus =\n focused != null && visibleKeys.includes(focused) && !isNewTerm;\n\n // Re-announced even when focus stays: after a close and reopen the list\n // still has it, but the input no longer points at it.\n if (keepsFocus) {\n setActiveOption((prev) =>\n prev?.key === focused\n ? { ...prev, term }\n : { key: focused, term, source: 'auto' },\n );\n } else {\n moveVirtualFocus(preferredOptionKey, 'auto', term);\n }\n };\n\n requestAnimationFrame(() => requestAnimationFrame(tick));\n\n // Text typed after this pass was scheduled owns the focus now.\n return () => {\n isCancelled = true;\n };\n }, [\n shouldShowPopover,\n visibleOptionsSignature,\n customTerm,\n term,\n preferredOptionKey,\n moveVirtualFocus,\n wrapperRef,\n ]);\n\n const setDraft = useEvent((next: string) => {\n setDraftState(next);\n setIsFilterActive(!!next.trim());\n });\n\n // A fresh node per message, so a repeated one (\"Added a\", remove, \"Added a\")\n // is announced again.\n const announce = useEvent((text: string) => {\n setAnnouncement((prev) => ({ id: prev.id + 1, text }));\n });\n\n // ---- commit -------------------------------------------------------------\n const rejectionMessage = useEvent((rejection: Rejection) => {\n if (rejection.message) return rejection.message;\n\n switch (rejection.reason) {\n case 'duplicate':\n return t('tagInput.duplicateValue', '\"{{value}}\" is already added', {\n value: rejection.text,\n });\n case 'unknown':\n return t('tagInput.unknownValue', '\"{{value}}\" is not in the list', {\n value: rejection.text,\n });\n case 'unavailable':\n return t('tagInput.unavailableValue', '\"{{value}}\" is not available', {\n value: rejection.text,\n });\n case 'limit':\n return t('tagInput.limitReached', 'You can add up to {{count}}', {\n count: maxTags,\n });\n default:\n return t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: rejection.text,\n });\n }\n });\n\n const joiner = delimiters[0] ? `${delimiters[0]} ` : ' ';\n\n // Without a label or `forceField` there is no field wrapper to show the\n // message, so a rejection is announced instead.\n const hasFieldMessage = !!label || !!props.forceField;\n\n /**\n * Turns typed parts into values. Accepted parts become chips; rejected ones\n * come back as text for the input, with a message, so nothing typed is lost.\n */\n const commitParts = useEvent((parts: string[]): string => {\n if (!parts.length) return '';\n\n const present = new Set(uniqueValues);\n const accepted: string[] = [];\n const rejected: Rejection[] = [];\n\n for (const part of parts) {\n let optionKey = findOptionKey(part);\n let typed = part;\n\n // Only text of its own is rewritten; an option keeps its key.\n if (optionKey == null && normalizeTag) {\n typed = normalizeTag(part).trim();\n\n if (!typed) continue;\n\n optionKey = findOptionKey(typed);\n }\n\n const nextValue = optionKey ?? typed;\n\n if (optionKey != null && disabledKeySet.has(optionKey)) {\n rejected.push({ text: part, reason: 'unavailable' });\n continue;\n }\n\n if (optionKey == null && hasOptions && !allowsCustomValue) {\n rejected.push({ text: part, reason: 'unknown' });\n continue;\n }\n\n if (present.has(nextValue)) {\n rejected.push({ text: part, reason: 'duplicate' });\n continue;\n }\n\n if (maxTags != null && present.size >= maxTags) {\n rejected.push({ text: part, reason: 'limit' });\n continue;\n }\n\n if (optionKey == null && validateTag) {\n const result = validateTag(nextValue);\n\n if (result === false || typeof result === 'string') {\n rejected.push({\n text: part,\n reason: 'invalid',\n message: typeof result === 'string' ? result : undefined,\n });\n continue;\n }\n }\n\n present.add(nextValue);\n accepted.push(nextValue);\n }\n\n const error = rejected.length ? rejectionMessage(rejected[0]) : null;\n const messages: string[] = [];\n\n if (accepted.length) {\n rememberLabels(accepted);\n setValues([...uniqueValues, ...accepted]);\n messages.push(\n t('tagInput.added', 'Added {{value}}', {\n value: formatList(accepted.map(getTagLabel)),\n }),\n );\n }\n\n if (error && !hasFieldMessage) messages.push(error);\n if (messages.length) announce(messages.join(' '));\n\n setTagError(error);\n\n return rejected.map((rejection) => rejection.text).join(joiner);\n });\n\n const commitDraft = useEvent(() => {\n setDraft(commitParts(splitTagText(draft, delimiters)));\n });\n\n // Focusing the row itself tells the tag group which chip is focused, as a\n // click would.\n const focusLastTag = useEvent(() => {\n const rows = tagListRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"row\"]:not([aria-disabled=\"true\"])',\n );\n\n rows?.[rows.length - 1]?.focus();\n });\n\n const removeValues = useEvent((requested: string[]) => {\n const keys = requested.filter((key) => !isTagLocked(key));\n\n if (!keys.length) return;\n\n const removed = new Set(keys);\n const next = uniqueValues.filter((value) => !removed.has(value));\n\n // Focus leaves the list before the last chip it can land on unmounts under\n // it; locked chips take no focus.\n if (!next.some((value) => !isTagLocked(value))) {\n inputRef.current?.focus();\n }\n\n setValues(next);\n setTagError(null);\n announce(\n t('tagInput.removed', 'Removed {{value}}', {\n value: formatList(keys.map(getTagLabel)),\n }),\n );\n });\n\n /**\n * Picks an option in the popover, or unpicks one that already is a chip. The\n * popover stays open for the next pick, and the query is cleared so the full\n * list is back.\n */\n const toggleOption = useEvent((key: string) => {\n if (isTagLocked(key)) return;\n\n setTagError(null);\n\n if (uniqueValues.includes(key)) {\n removeValues([key]);\n setDraft('');\n\n if (customValueKeys.includes(key)) {\n setUnpickedCustomValues((prev) =>\n prev.includes(key) ? prev : [...prev, key],\n );\n }\n } else if (!commitParts([key])) {\n // An accepted pick clears the query. A refused one (past `maxTags`)\n // keeps it, next to the message saying why.\n setDraft('');\n }\n });\n\n // A click in the popover list. The list reports its whole new selection, so\n // compare it with the chips to find the option that changed.\n const handlePopoverSelection = useEvent(\n (selection: Key | Key[] | null | 'all') => {\n if (!Array.isArray(selection)) return;\n\n const next = new Set(selection.map(String));\n const changed = [\n ...[...next].filter((key) => !uniqueValues.includes(key)),\n ...uniqueValues.filter(\n (value) =>\n !next.has(value) &&\n (collection.getItem(value) != null ||\n visibleCustomKeys.includes(value)),\n ),\n ];\n\n changed.forEach(toggleOption);\n\n // The click moved the list's focus to the option; the input's\n // `aria-activedescendant` follows it.\n const clicked = changed[changed.length - 1];\n\n if (clicked != null) {\n listStateRef.current?.selectionManager.setFocusedKey(clicked);\n // The pick clears the text.\n setActiveOption({ key: clicked, term: '', source: 'user' });\n }\n\n // A click can take DOM focus off the input; keep typing where it was.\n setTimeout(() => inputRef.current?.focus(), 0);\n },\n );\n\n // ---- keyboard -----------------------------------------------------------\n // Set while Tab moves focus out of the input, so the blur can tell a Tab to\n // the chips (commit the text) from a click on a remove button (keep it).\n const isTabbingRef = useRef(false);\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n\n // A Tab the consumer prevented moves no focus.\n isTabbingRef.current = e.key === 'Tab' && !e.defaultPrevented;\n\n if (e.defaultPrevented || !isInteractive) return;\n\n const listState = listStateRef.current;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (!hasOptions) return;\n\n e.preventDefault();\n\n if (!shouldShowPopover) {\n if (!hasResults) setIsFilterActive(false);\n setIsPopoverOpen(true);\n\n return;\n }\n\n if (listState) {\n moveVirtualFocus(\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n 'user',\n term,\n );\n }\n\n return;\n }\n\n if ((e.key === 'Home' || e.key === 'End') && shouldShowPopover) {\n e.preventDefault();\n\n if (listState) {\n moveVirtualFocus(\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n 'user',\n term,\n );\n }\n\n return;\n }\n\n // The chips sit below the input, not beside the caret, so Backspace in an\n // empty input moves to the last chip instead of removing it out of view.\n // The chip comes into view with focus and says it is removable; the next\n // Backspace removes it and moves to the one before.\n if (\n e.key === 'Backspace' &&\n !draft &&\n uniqueValues.some((value) => !isTagLocked(value))\n ) {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // A held Backspace that just emptied the input stops there, so it does\n // not run on into the chips.\n if (e.repeat) return;\n\n setIsPopoverOpen(false);\n focusLastTag();\n\n return;\n }\n\n if (e.key === 'Enter') {\n if (isComposingKey(e)) return;\n\n // The announced option, unless the text changed since it was chosen and\n // its focus pass has not run yet: then the best match for this text.\n const isCurrent = activeOption != null && activeOption.term === term;\n const targetKey = shouldShowPopover\n ? isCurrent\n ? activeOption.key\n : preferredOptionKey\n : null;\n\n if (targetKey != null) {\n e.preventDefault();\n\n const key = String(targetKey);\n\n // Typed text means \"add\". An option that is already a chip is refused\n // as a duplicate, as a comma or blur would; unpicking one takes the\n // arrows, a click, or an empty input.\n if (\n term &&\n uniqueValues.includes(key) &&\n !(isCurrent && activeOption.source === 'user')\n ) {\n setTagError(\n rejectionMessage({\n text: getTagLabel(key),\n reason: 'duplicate',\n }),\n );\n\n return;\n }\n\n toggleOption(key);\n\n return;\n }\n\n // Enter is for adding values and never submits a form, even with nothing\n // typed: pressing it once more after the last value must not send a\n // half-filled dialog.\n e.preventDefault();\n\n if (term) commitDraft();\n\n return;\n }\n\n if (delimiters.includes(e.key)) {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // The separator splits the text where it is typed: what comes before the\n // caret is committed, what comes after stays in the input.\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? start;\n const rejected = commitParts(\n splitTagText(draft.slice(0, start), delimiters),\n );\n\n setDraft(\n [rejected, draft.slice(end).trimStart()].filter(Boolean).join(joiner),\n );\n\n return;\n }\n\n if (e.key === 'Escape') {\n if (shouldShowPopover) {\n e.preventDefault();\n e.stopPropagation();\n setIsPopoverOpen(false);\n } else if (draft) {\n e.preventDefault();\n e.stopPropagation();\n setDraft('');\n setTagError(null);\n // It may be open but hidden for want of a match; the full list must\n // not appear when the text goes.\n setIsPopoverOpen(false);\n }\n }\n });\n\n // A separator can also arrive without a key press: autocorrect, IME, drag and\n // drop. Commit everything before the last separator and keep the rest typed.\n const handleInputChange = useEvent((next: string) => {\n setTagError(null);\n rememberLabels(uniqueValues);\n\n const pattern = delimiterPattern(delimiters);\n const parts = pattern ? next.split(pattern) : [next];\n\n let nextDraft = next;\n\n if (parts.length > 1) {\n const rest = (parts.pop() ?? '').trimStart();\n const rejected = commitParts(\n parts.map((part) => part.trim()).filter(Boolean),\n );\n\n nextDraft = [rejected, rest].filter(Boolean).join(joiner);\n }\n\n setDraft(nextDraft);\n\n if (hasOptions && popoverTrigger !== 'manual' && nextDraft.trim()) {\n setIsPopoverOpen(true);\n }\n });\n\n // An `<input>` drops line breaks from pasted text, so split a pasted list\n // here, where they are still visible.\n const handlePaste = useEvent((e: ClipboardEvent<HTMLInputElement>) => {\n if (!isInteractive) return;\n\n const pasted = e.clipboardData.getData('text');\n\n if (!pasted || splitTagText(pasted, delimiters).length < 2) return;\n\n e.preventDefault();\n\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? draft.length;\n\n setTagError(null);\n setDraft(\n commitParts(\n splitTagText(\n `${draft.slice(0, start)}\\n${pasted}\\n${draft.slice(end)}`,\n delimiters,\n ),\n ),\n );\n });\n\n // ---- focus --------------------------------------------------------------\n // What leaving the input does to the typed text.\n const settleDraft = useEvent(() => {\n if (!term || !shouldCommitOnBlur || !isInteractive) return;\n\n if (hasOptions && !allowsCustomValue && findOptionKey(term) == null) {\n // Leaving a filter query behind is not an entry: drop it, as ComboBox\n // does with text that matches no option.\n setDraft('');\n setTagError(null);\n } else {\n commitDraft();\n }\n });\n\n const handleCompositeBlur = useEvent(() => {\n setIsPopoverOpen(false);\n setUnpickedCustomValues([]);\n settleDraft();\n onBlur?.();\n });\n\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef: rootRef as RefObject<HTMLElement>,\n popoverRef: popoverRef as RefObject<HTMLElement>,\n onFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n // Tabbing from the input to the chips stays inside the component, so the\n // composite blur never fires: close the popover and settle the text on the\n // way. A click on a chip's remove button also moves focus there, and leaves\n // both alone.\n const handleInputBlur = useEvent((e: FocusEvent<HTMLInputElement>) => {\n const isTabbing = isTabbingRef.current;\n const next = e.relatedTarget as Node | null;\n\n isTabbingRef.current = false;\n\n if (!isTabbing || !next || !rootRef.current?.contains(next)) return;\n\n setIsPopoverOpen(false);\n settleDraft();\n });\n\n const handleInputFocus = useEvent(() => {\n if (hasOptions && popoverTrigger === 'focus' && isInteractive) {\n setIsPopoverOpen(true);\n }\n });\n\n // ---- chips --------------------------------------------------------------\n const tags: TagListEntry[] = uniqueValues.map((value) => {\n const ownProps = tagProps?.(value);\n const isOption =\n collection.getItem(value) != null || knownLabels.has(value);\n const result = !isOption && validateTag ? validateTag(value) : true;\n const label = textLabel(ownProps?.children) ?? getOptionLabel(value);\n\n return {\n key: value,\n label,\n // Put in words as well as in color, for the chip's description.\n invalidMessage:\n typeof result === 'string'\n ? result\n : result === false\n ? t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: label,\n })\n : undefined,\n tagProps: ownProps,\n isDisabled: !!ownProps?.isDisabled,\n };\n });\n\n const effectiveIsInvalid = tagError ? true : isInvalid;\n const hasRemovableTags = tags.some((tag) => !tag.isDisabled);\n // Backspace in an empty input is how the keyboard gets to the chips without\n // Tab; nothing on screen says so.\n const hasBackspaceHint = isInteractive && hasRemovableTags;\n\n // A locked value's option stays checked but cannot be unpicked.\n const lockedKeys = tags.filter((tag) => tag.isDisabled).map((tag) => tag.key);\n const optionDisabledKeys = lockedKeys.length\n ? [...disabledKeySet, ...lockedKeys]\n : disabledKeys;\n\n // ---- input --------------------------------------------------------------\n const { labelProps, inputProps } = useTextField(\n {\n ...otherProps,\n id,\n label,\n value: draft,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid: effectiveIsInvalid,\n autoFocus,\n onChange: handleInputChange,\n } as never,\n inputRef,\n );\n // Names the chips and the trigger after the field: \"Selected values, Also\n // send to\", rather than the same words for every field on the page.\n const labelId = label ? (labelProps.id as string | undefined) : undefined;\n\n // Joined, not replaced: the input keeps any description it already has.\n const describedBy: string[] = [];\n\n if (inputProps['aria-describedby']) {\n describedBy.push(inputProps['aria-describedby']);\n }\n if (tags.length) describedBy.push(summaryId);\n if (hasBackspaceHint) describedBy.push(hintId);\n\n const tagInputProps = mergeProps(\n inputProps,\n {\n onKeyDown: handleKeyDown,\n onPaste: handlePaste,\n onBlur: handleInputBlur,\n onFocus: handleInputFocus,\n autoComplete,\n 'data-input-type': 'taginput',\n 'aria-describedby': describedBy.join(' ') || undefined,\n },\n hasOptions\n ? {\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': shouldShowPopover,\n 'aria-controls': shouldShowPopover ? listBoxId : undefined,\n 'aria-activedescendant':\n shouldShowPopover && activeOptionKey != null\n ? getListBoxOptionId(listBoxId, activeOptionKey)\n : undefined,\n }\n : null,\n );\n\n const handleTriggerPress = useEvent(() => {\n const willOpen = !shouldShowPopover;\n\n if (willOpen && !hasResults) setIsFilterActive(false);\n\n setIsPopoverOpen(willOpen);\n inputRef.current?.focus();\n });\n\n const trigger =\n hasOptions && !hideTrigger ? (\n <ItemAction\n data-popover-trigger\n id={triggerId}\n qa=\"TagInputTrigger\"\n icon={<DirectionIcon to={shouldShowPopover ? 'up' : 'down'} />}\n size={size}\n isDisabled={!isInteractive}\n styles={triggerStyles}\n mods={{ pressed: shouldShowPopover }}\n // Arrow keys open the list from the input, so the button stays out of\n // the Tab order and Tab goes from the input straight to the chips.\n tabIndex={-1}\n aria-expanded={shouldShowPopover}\n aria-haspopup=\"listbox\"\n aria-label={t('tagInput.showOptions', 'Show options')}\n aria-labelledby={labelId ? `${triggerId} ${labelId}` : undefined}\n onPress={handleTriggerPress}\n />\n ) : null;\n\n // Clears what is typed, as Escape does. The chips below have their own\n // remove buttons, so a button inside the input is about the text only.\n const clearText = useEvent(() => {\n // The button goes away with the text; keep focus in the field.\n inputRef.current?.focus();\n setDraft('');\n setTagError(null);\n setIsPopoverOpen(false);\n onClear?.();\n });\n\n const canClear = !!isClearable && isInteractive && draft !== '';\n const clearButton = canClear ? (\n <ItemAction\n id={clearId}\n qa=\"TagInputClearButton\"\n icon={<CloseIcon />}\n size={size}\n // Escape does the same from the keyboard. As a Tab stop it would take\n // focus just as tabbing away commits the text and removes it.\n tabIndex={-1}\n aria-label={t('tagInput.clearText', 'Clear text')}\n aria-labelledby={labelId ? `${clearId} ${labelId}` : undefined}\n onPress={clearText}\n />\n ) : null;\n\n // Not a bare fragment: an empty one would still mark the input as having a\n // suffix.\n const hasActions = clearButton != null || trigger != null;\n\n const tagInputField = (\n <TagInputElement\n ref={rootRef}\n className={className}\n style={style}\n qaVal={qaVal}\n styles={styles}\n {...compositeFocusProps}\n >\n <TextInputBase\n qa={qa || 'TagInput'}\n inputRef={inputRef}\n wrapperRef={wrapperRef}\n inputProps={tagInputProps}\n mods={mods}\n icon={icon}\n prefix={prefix}\n suffix={suffix}\n suffixPosition={suffixPosition}\n actions={\n hasActions ? (\n <>\n {clearButton}\n {trigger}\n </>\n ) : null\n }\n size={size}\n autoFocus={autoFocus}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isInvalid={effectiveIsInvalid}\n isValid={isValid}\n styles={wrapperStyles}\n inputStyles={inputStyles}\n />\n {tags.length ? (\n <TagList\n id={tagListId}\n listRef={tagListRef}\n inputRef={inputRef}\n aria-label={t('tagInput.selectedValues', 'Selected values')}\n aria-labelledby={labelId}\n tags={tags}\n size={TAG_SIZES[size] ?? 'xsmall'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n styles={tagListStyles}\n tagStyles={tagStyles}\n onRemove={removeValues}\n />\n ) : null}\n {/* Read only as the input's description, never on its own in browse mode. */}\n <span hidden id={summaryId}>\n {tags.length\n ? t('tagInput.summary', 'Selected: {{values}}.', {\n values: formatList(tags.map((tag) => tag.label)),\n })\n : null}\n </span>\n <span hidden id={hintId}>\n {hasBackspaceHint\n ? t(\n 'tagInput.backspaceHint',\n 'Press Backspace to go to the selected values.',\n )\n : null}\n </span>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <span key={announcement.id}>{announcement.text}</span>\n </VisuallyHidden>\n {hasOptions ? (\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={popoverMinWidth}\n listBoxId={listBoxId}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={isFilterActive ? term : undefined}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n selectionMode=\"multiple\"\n selectedKeys={uniqueValues}\n isCheckable\n // Clicking back into the input keeps the list open for the next pick.\n shouldCloseOnTriggerInteraction={false}\n isDisabled={isDisabled}\n disabledKeys={optionDisabledKeys}\n listStateRef={listStateRef}\n label={label}\n ariaLabel={(props as { 'aria-label'?: string })['aria-label']}\n compositeFocusProps={compositeFocusProps}\n filter={optionFilterFn}\n size={size}\n onSelectionChange={handlePopoverSelection}\n onClose={() => setIsPopoverOpen(false)}\n >\n {popoverChildren}\n </ListBoxPopover>\n ) : null}\n </TagInputElement>\n );\n\n const { children: _children, ...fieldProps } = props;\n\n // The forwarded ref sits on the component's root, labelled or not, so the\n // field wrapper gets a ref of its own that nothing reads.\n const fieldRef = useCombinedRefs<HTMLDivElement>();\n\n return wrapWithField(tagInputField, fieldRef, {\n ...(fieldProps as Omit<CubeTagInputProps<T>, 'children'>),\n labelProps: mergeProps(labelProps, userLabelProps),\n isInvalid: effectiveIsInvalid,\n // A rejected entry speaks for itself until the text is edited. Keyed, so\n // the same rejection twice in a row is announced twice.\n message: tagError ? (\n <span key={tagError.id}>{tagError.text}</span>\n ) : (\n message\n ),\n errorMessage: tagError ? undefined : errorMessage,\n });\n}\n\n/**\n * A field for a list of values, shown as removable chips below a single-line\n * input. Values are typed (Enter or a separator commits them) or picked from\n * suggested options.\n */\nconst _TagInput = forwardRef(TagInput) as unknown as (<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>> & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement) & {\n Item: typeof Item;\n Section: typeof BaseSection;\n};\n\nObject.assign(_TagInput, {\n Item,\n Section: BaseSection,\n displayName: 'TagInput',\n});\n\n// The legacy `<Field>` picks its value mapper from this. The `CheckboxGroup`\n// mapper is the one for an array value: `[]` when empty, validated on change.\nObject.defineProperty(_TagInput, 'cubeInputType', {\n value: 'CheckboxGroup',\n enumerable: false,\n configurable: false,\n});\n\nexport { _TagInput as TagInput };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TagInput.js","names":["useControlledState","Node","CollectionNode","Key","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","Styles","tasty","ClipboardEvent","cloneElement","FocusEvent","ForwardedRef","forwardRef","isValidElement","KeyboardEvent","ReactElement","ReactNode","RefObject","useEffect","useLayoutEffect","useMemo","useRef","useState","useFilter","useId","useTextField","VisuallyHidden","Section","BaseSection","useListState","useEvent","useFormatter","useI18n","CloseIcon","DirectionIcon","generateRandomId","mergeProps","useCombinedRefs","castNullableArrayValue","WithNullableValue","extractStyles","ItemAction","CollectionItem","Item","useFieldProps","wrapWithField","getListBoxOptionId","collectVisibleKeys","filterCollectionNodes","getEdgeVisibleKey","getNextVisibleKey","ListBoxPopover","ListStateLike","markKeyboardFocus","useCompositeFocus","TextInputBase","TagList","TagListEntry","FieldBaseProps","CubeTagProps","FilterFn","textValue","inputValue","TagInputPopoverTrigger","TagValidationResult","CubeTagInputProps","value","defaultValue","onChange","defaultInputValue","onInputChange","placeholder","autoComplete","inputMode","enterKeyHint","onFocus","onBlur","onKeyDown","e","HTMLInputElement","delimiters","validateTag","normalizeTag","maxTags","shouldCommitOnBlur","isClearable","onClear","items","Iterable","T","children","item","allowsCustomValue","filter","disabledKeys","popoverTrigger","onOpenChange","isOpen","hideTrigger","direction","shouldFlip","overlayOffset","containerPadding","tagProps","Partial","icon","prefix","suffix","suffixPosition","size","inputRef","wrapperRef","HTMLDivElement","popoverRef","listBoxRef","wrapperStyles","inputStyles","tagListStyles","tagStyles","triggerStyles","overlayStyles","listBoxStyles","optionStyles","sectionStyles","headingStyles","TagInputElement","qa","styles","display","flow","gap","TAG_SIZES","Record","small","medium","large","DEFAULT_DELIMITERS","LINE_BREAK","escapeRegExp","text","replace","delimiterPattern","RegExp","separators","Boolean","map","length","join","splitTagText","pattern","source","split","part","trim","textLabel","node","undefined","textCollator","Intl","Collator","sensitivity","textSorter","numeric","isSameText","a","b","compare","compareText","OptionMatch","exact","loose","matchOptionText","collection","byKey","nodes","type","childNodes","child","key","String","label","withCustomOptions","customKeys","customTerm","hasOptionRows","hasSections","optionsLabel","customValuesLabel","customOptions","push","customSection","Array","isArray","isComposingKey","nativeEvent","isComposing","keyCode","RejectionReason","Rejection","reason","message","TagInput","props","ref","$","_c","t0","t1","Symbol","for","defaultValidationTrigger","valuePropsMapper","_temp","t","formatList","autoFocus","className","errorMessage","id","inputRefProp","inputValueProp","isDisabled","isInvalid","isLoading","isReadOnly","isRequired","isValid","listBoxRefProp","mods","onChange_0","otherProps","popoverRefProp","qaVal","renderChildren","style","t2","userLabelProps","valueProp","wrapperRefProp","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","t51","t52","t53","t54","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","labelProps","t65","t66","t67","t68","t69","name","form","t70","rootRef","tagListRef","listStateRef","tagInputId","listBoxId","tagListId","summaryId","hintId","triggerId","clearId","values","setValues","uniqueValues","Set","draft","setDraftState","tagError","setTagErrorState","tagErrorIdRef","current","setTagError","announcement","setAnnouncement","from","index","rendered","hasOptions","localCollectionState","selectionMode","contains","_temp2","textFilterFn","isFilterActive","setIsFilterActive","term","knownLabels","setKnownLabels","_temp3","getItem","get","getOptionLabel","key_0","getTagLabel","key_1","isTagLocked","disabledKeySet","keys","next","key_2","label_0","Map","set","rememberLabels","text_0","match","findOptionKey","text_1","optionKey","typed","resolveTypedText","termOptionKey","optionFilterFn","keep","visibleOptionKeys","unpickedCustomValues","setUnpickedCustomValues","customValueKeys","value_0","has","sort","matchesTerm","visibleCustomKeys","key_3","includes","popoverChildren","some","_temp4","hasResults","visibleOptionsSignature","isPopoverOpen","setIsPopoverOpen","isInteractive","shouldShowPopover","notifiedOpenRef","activeOption","setActiveOption","activeOptionKey","key_4","forTerm","listState","selectionManager","setFocusedKey","moveVirtualFocus","popoverMinWidth","setPopoverMinWidth","exactOptionKey","key_5","visibleTargetKeys","preferredOptionKey","find","key_6","focusTermRef","offsetWidth","visibleKeys","isNewTerm","attempts","isCancelled","tick","listState_0","requestAnimationFrame","focused","focusedKey","keepsFocus","prev","next_0","setDraft","text_2","prev_0","announce","rejection","count","rejectionMessage","_temp5","joinDelimiter","joiner","hasFieldMessage","forceField","commitParts","parts","isPick","present","accepted","rejected","optionKey_0","typed_0","nextValue","result","add","returned","_temp6","kept","slice","shown","error","messages","_temp7","rest","commitDraft","rows","querySelectorAll","focus","focusLastTag","removeValues","requested","keys_0","key_7","removed","next_1","value_1","value_2","toggleOption","key_8","prev_1","handlePopoverSelection","selection","next_2","changed","key_9","value_3","forEach","clicked","setTimeout","isTabbingRef","handleKeyDown","defaultPrevented","listState_1","preventDefault","value_4","repeat","isCurrent","targetKey","key_10","el","currentTarget","start","selectionStart","end","selectionEnd","rejected_0","trimStart","stopPropagation","handleInputChange","next_3","parts_0","nextDraft","rest_0","pop","rejected_1","_temp8","e_0","pasted","clipboardData","getData","el_0","start_0","end_0","handlePaste","settleDraft","handleCompositeBlur","HTMLElement","compositeFocusProps","e_1","isTabbing","next_4","relatedTarget","handleInputBlur","handleInputFocus","tags","value_5","ownProps","isOption","result_0","label_1","invalidMessage","effectiveIsInvalid","hasRemovableTags","_temp9","hasBackspaceHint","lockedKeys","_temp0","_temp1","optionDisabledKeys","inputProps","labelId","describedBy","tagInputProps","onPaste","role","willOpen","handleTriggerPress","pressed","trigger","clearText","canClear","clearButton","hasActions","T0","_temp10","tagInputField","_children","fieldProps","fieldRef","Omit","tag_2","tag","tag_1","tag_0","part_0","rejection_1","rejection_0","delimiter","test","node_0","_TagInput","Object","assign","displayName","defineProperty","enumerable","configurable"],"sources":["../../../../src/components/fields/TagInput/TagInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { Node as CollectionNode, Key } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ClipboardEvent,\n cloneElement,\n FocusEvent,\n ForwardedRef,\n forwardRef,\n isValidElement,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n RefObject,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useId, useTextField, VisuallyHidden } from 'react-aria';\nimport { Section as BaseSection, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useFormatter, useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { DirectionIcon } from '../../../icons/DirectionIcon';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps, useCombinedRefs } from '../../../utils/react';\nimport {\n castNullableArrayValue,\n WithNullableValue,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemAction } from '../../actions/ItemAction/ItemAction';\nimport { CollectionItem as Item } from '../../CollectionItem';\nimport { useFieldProps } from '../../form/Form/use-field/use-field-props';\nimport { wrapWithField } from '../../form/wrapper';\nimport { getListBoxOptionId } from '../ListBox/optionId';\nimport {\n collectVisibleKeys,\n filterCollectionNodes,\n getEdgeVisibleKey,\n getNextVisibleKey,\n ListBoxPopover,\n ListStateLike,\n markKeyboardFocus,\n useCompositeFocus,\n} from '../ListBoxPopover';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\nimport { TagList, TagListEntry } from './TagList';\n\nimport type { FieldBaseProps } from '../../../shared';\nimport type { CubeTagProps } from '../../content/Tag/Tag';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nexport type TagInputPopoverTrigger = 'focus' | 'input' | 'manual';\n\n/**\n * What `validateTag` returns: `true` (or nothing) accepts the value, `false`\n * rejects it with the default message, and a string rejects it with that\n * message.\n */\nexport type TagValidationResult = boolean | string | null | undefined;\n\nexport interface CubeTagInputProps<T = object>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n FieldBaseProps<readonly string[] | null | undefined> {\n /** The values in controlled mode. */\n value?: readonly string[];\n /** The initial values in uncontrolled mode. */\n defaultValue?: readonly string[];\n /** Called with the whole new list whenever a value is added or removed. */\n onChange?: (value: string[]) => void;\n\n /** The text being typed, in controlled mode. */\n inputValue?: string;\n /** The initial text in uncontrolled mode. */\n defaultInputValue?: string;\n /** Called when the text being typed changes. */\n onInputChange?: (value: string) => void;\n /** Placeholder text for the input. */\n placeholder?: string;\n /** HTML `autocomplete` attribute for the input. */\n autoComplete?: string;\n /**\n * Which virtual keyboard the input asks for: `'email'` for addresses,\n * `'decimal'` for numbers. The input stays a text input, so the browser does\n * not validate what is typed.\n */\n inputMode?:\n | 'none'\n | 'text'\n | 'tel'\n | 'url'\n | 'email'\n | 'numeric'\n | 'decimal'\n | 'search';\n /** The label of the virtual keyboard's Enter key. */\n enterKeyHint?:\n | 'enter'\n | 'done'\n | 'go'\n | 'next'\n | 'previous'\n | 'search'\n | 'send';\n /** Called when focus enters the component (input, chips or popover). Receives no event. */\n onFocus?: () => void;\n /**\n * Called when focus leaves the component entirely, after the typed text is\n * committed and before the press that moved focus is handled. Receives no\n * event.\n */\n onBlur?: () => void;\n /**\n * Called when a key is pressed in the input, before the component handles it.\n * Call `e.preventDefault()` to stop the component from handling the key.\n */\n onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;\n\n /**\n * Characters that commit the typed text, and that pasted text is split on.\n * Pasted text is also always split on line breaks. Pass `[]` for values that\n * may contain the default separator; only the first of several refused\n * values then stays in the input.\n * @default [',']\n */\n delimiters?: string[];\n /**\n * Checks one value before it becomes a chip. Return `true` or nothing to\n * accept it, `false` to reject it with the default message, or a string to\n * reject it with that message. Also paints existing chips that fail it in the\n * danger theme. Values picked from the options are not checked.\n */\n validateTag?: (value: string) => TagValidationResult;\n /**\n * Rewrites a typed value before it is checked and added: lowercase an\n * address, write a number one way. Duplicates are found after it runs.\n * Return an empty string to drop the value. Values picked from the options\n * are not rewritten.\n */\n normalizeTag?: (value: string) => string;\n /**\n * The most values the field holds. Values past it are refused with a\n * message and stay in the input.\n */\n maxTags?: number;\n /** Whether leaving the field commits the typed text. @default true */\n shouldCommitOnBlur?: boolean;\n /**\n * Whether a button in the input clears the typed text. It shows while there\n * is text; the chips have their own remove buttons.\n */\n isClearable?: boolean;\n /** Called when the clear button is pressed. */\n onClear?: () => void;\n\n /** Options to suggest, as data. Pair with a render function in `children`. */\n items?: Iterable<T>;\n /**\n * Options to suggest: `TagInput.Item` elements or a render function for\n * `items`. Without options the field accepts any typed value.\n */\n children?: ReactNode | ((item: T) => ReactElement);\n /**\n * Whether typed values that are not among the options are accepted. Only\n * applies when options are given; without options every value is custom.\n * Text that matches an option only in case or accents is then added as\n * typed; without it, that text picks the option.\n * @default false\n */\n allowsCustomValue?: boolean;\n /**\n * Custom filter for the options, or `false` to show every option (for\n * server-side filtering).\n */\n filter?: FilterFn | false;\n /** Keys of options that cannot be picked. */\n disabledKeys?: Iterable<Key>;\n /** When the suggestions popover opens. @default 'input' */\n popoverTrigger?: TagInputPopoverTrigger;\n /** Called when the suggestions popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether to hide the button that toggles the suggestions popover. */\n hideTrigger?: boolean;\n /** Where the suggestions popover opens. @default 'bottom' */\n direction?: 'bottom' | 'top';\n /** Whether the popover flips when there is no room. @default true */\n shouldFlip?: boolean;\n /** Distance between the input and the popover, in pixels. @default 8 */\n overlayOffset?: number;\n /** Minimum space between the popover and the viewport edge, in pixels. @default 8 */\n containerPadding?: number;\n\n /**\n * Props for each chip's `Tag` (theme, icon, label, …), by value. A string\n * `children` also names the value to screen readers. `isDisabled` locks the\n * chip: it cannot be removed.\n */\n tagProps?: (value: string) => Partial<CubeTagProps> | undefined;\n\n /** Left input icon. */\n icon?: ReactElement;\n /** Input decoration before the main input. */\n prefix?: ReactNode;\n /** Input decoration after the main input. */\n suffix?: ReactNode;\n /** Whether the suffix goes before or after the validation and loading icons. */\n suffixPosition?: 'before' | 'after';\n /** Size of the input. The chips follow it. @default 'medium' */\n size?: 'small' | 'medium' | 'large' | (string & {});\n\n /** Ref to the input element. */\n inputRef?: RefObject<HTMLInputElement>;\n /** Ref to the bordered input box. */\n wrapperRef?: RefObject<HTMLDivElement>;\n /** Ref to the popover element. */\n popoverRef?: RefObject<HTMLDivElement>;\n /** Ref to the listbox in the popover. */\n listBoxRef?: RefObject<HTMLDivElement>;\n\n /** Styles for the bordered input box. */\n wrapperStyles?: Styles;\n /** Styles for the input element. */\n inputStyles?: Styles;\n /** Styles for the list of chips. */\n tagListStyles?: Styles;\n /** Styles for every chip. */\n tagStyles?: Styles;\n /** Styles for the button that toggles the popover. */\n triggerStyles?: Styles;\n /** Styles for the popover. */\n overlayStyles?: Styles;\n /** Styles for the listbox in the popover. */\n listBoxStyles?: Styles;\n /** Styles for each option. */\n optionStyles?: Styles;\n /** Styles for option sections. */\n sectionStyles?: Styles;\n /** Styles for option section headings. */\n headingStyles?: Styles;\n}\n\nconst TagInputElement = tasty({\n qa: 'TagInputContainer',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: '1x',\n },\n});\n\n// The chips sit a step below the input, so a row of them reads as the field's\n// value rather than as a second row of controls. Never below `xsmall`: the\n// `inline` tag is set in the bold badge type, which reads as a label.\nconst TAG_SIZES: Record<string, CubeTagProps['size']> = {\n small: 'xsmall',\n medium: 'xsmall',\n large: 'small',\n};\n\nconst DEFAULT_DELIMITERS = [','];\nconst LINE_BREAK = /\\r\\n|\\r|\\n/;\n\nfunction escapeRegExp(text: string) {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction delimiterPattern(delimiters: string[]): RegExp | null {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n\n return separators.length ? new RegExp(separators.join('|')) : null;\n}\n\n/** Splits `text` on the delimiters and line breaks into trimmed, non-empty parts. */\nexport function splitTagText(text: string, delimiters: string[]): string[] {\n const separators = delimiters.filter(Boolean).map(escapeRegExp);\n const pattern = new RegExp([LINE_BREAK.source, ...separators].join('|'), 'g');\n\n return text\n .split(pattern)\n .map((part) => part.trim())\n .filter(Boolean);\n}\n\n/** A chip's own label, when `tagProps` gives it one as plain text. */\nfunction textLabel(node: ReactNode): string | undefined {\n return typeof node === 'string' && node !== '' ? node : undefined;\n}\n\n// Safari reports the Enter that confirms an IME composition with\n// `isComposing: false`, but still with the composition key code.\nconst textCollator = new Intl.Collator(undefined, { sensitivity: 'base' });\n// Numbers in order: 2 before 10.\nconst textSorter = new Intl.Collator(undefined, { numeric: true });\n\nfunction isSameText(a: string, b: string) {\n return textCollator.compare(a, b) === 0;\n}\n\nfunction compareText(a: string, b: string) {\n return textSorter.compare(a, b);\n}\n\ninterface OptionMatch {\n /** The first option whose label is the text, or else the one whose key is. */\n exact: string | null;\n /** The first option whose label is the text ignoring case and accents. */\n loose: string | null;\n}\n\n/**\n * The options typed text names. The label comes first, since it is what the\n * user sees, then the key. An exact match is looked for in the whole list\n * before a loose one counts, so `active` finds `active` even after `Active`.\n */\nfunction matchOptionText(\n collection: Iterable<CollectionNode<unknown>>,\n text: string,\n): OptionMatch {\n let byKey: string | null = null;\n let loose: string | null = null;\n\n for (const node of collection) {\n const nodes = node.type === 'section' ? [...node.childNodes] : [node];\n\n for (const child of nodes) {\n if (child.type !== 'item') continue;\n\n const key = String(child.key);\n const label = child.textValue || '';\n\n if (label === text) return { exact: key, loose };\n\n if (byKey == null && key === text) byKey = key;\n if (loose == null && isSameText(label, text)) loose = key;\n }\n }\n\n return { exact: byKey, loose };\n}\n\n/**\n * The popover's rows: the options, then the user's own values and the typed\n * text. Those go in a section of their own when there are options to set them\n * apart from.\n */\nfunction withCustomOptions(\n children: ReactNode,\n {\n customKeys,\n customTerm,\n hasOptionRows,\n hasSections,\n optionsLabel,\n customValuesLabel,\n }: {\n customKeys: string[];\n customTerm: string | null;\n hasOptionRows: boolean;\n hasSections: boolean;\n optionsLabel: string;\n customValuesLabel: string;\n },\n) {\n if (!customTerm && !customKeys.length) return children;\n\n const customOptions = customKeys.map((key) => (\n <Item key={key} textValue={key}>\n {key}\n </Item>\n ));\n\n if (customTerm) {\n customOptions.push(\n <Item key={customTerm} textValue={customTerm}>\n {customTerm}\n </Item>,\n );\n }\n\n if (!hasOptionRows) {\n return customOptions;\n }\n\n const customSection = (\n <BaseSection key=\"__custom_values__\" aria-label={customValuesLabel}>\n {customOptions}\n </BaseSection>\n );\n\n // A section cannot nest in another one, so options that already come in\n // sections only get the custom section appended.\n if (hasSections) {\n return [\n ...(Array.isArray(children) ? children : [children]),\n customSection,\n ];\n }\n\n return [\n <BaseSection key=\"__options__\" aria-label={optionsLabel}>\n {children as never}\n </BaseSection>,\n customSection,\n ];\n}\n\nfunction isComposingKey(e: KeyboardEvent<HTMLInputElement>) {\n return e.nativeEvent.isComposing || e.keyCode === 229;\n}\n\ntype RejectionReason =\n | 'invalid'\n | 'duplicate'\n | 'unknown'\n | 'unavailable'\n | 'limit';\n\ninterface Rejection {\n text: string;\n reason: RejectionReason;\n message?: string;\n}\n\nfunction TagInput<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n props = castNullableArrayValue(props);\n props = useFieldProps(props, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value ?? [],\n onChange,\n }),\n });\n\n const { t } = useI18n();\n const { formatList } = useFormatter();\n\n let {\n qa,\n id,\n label,\n value: valueProp,\n defaultValue,\n onChange,\n inputValue: inputValueProp,\n defaultInputValue,\n onInputChange,\n placeholder,\n autoFocus,\n autoComplete = 'off',\n onFocus,\n onBlur,\n onKeyDown,\n delimiters = DEFAULT_DELIMITERS,\n validateTag,\n normalizeTag,\n maxTags,\n shouldCommitOnBlur = true,\n isClearable,\n onClear,\n items,\n children: renderChildren,\n allowsCustomValue,\n filter,\n disabledKeys,\n popoverTrigger = 'input',\n onOpenChange,\n hideTrigger,\n direction = 'bottom',\n shouldFlip = true,\n overlayOffset = 8,\n containerPadding = 8,\n tagProps,\n icon,\n prefix,\n suffix,\n suffixPosition,\n size = 'medium',\n isDisabled,\n isReadOnly,\n isRequired,\n isLoading,\n isInvalid,\n isValid,\n message,\n errorMessage,\n inputRef: inputRefProp,\n wrapperRef: wrapperRefProp,\n popoverRef: popoverRefProp,\n listBoxRef: listBoxRefProp,\n wrapperStyles,\n inputStyles,\n tagListStyles,\n tagStyles,\n triggerStyles,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n labelProps: userLabelProps,\n mods,\n className,\n style,\n qaVal,\n // The input holds the text being typed, not the field's value: a native\n // form must not submit it under the field's name.\n name,\n form,\n ...otherProps\n } = props;\n\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n const rootRef = useCombinedRefs(ref);\n const inputRef = useCombinedRefs(inputRefProp);\n const wrapperRef = useCombinedRefs(wrapperRefProp);\n const popoverRef = useCombinedRefs(popoverRefProp);\n const listBoxRef = useCombinedRefs(listBoxRefProp);\n const tagListRef = useRef<HTMLDivElement>(null);\n const listStateRef = useRef<ListStateLike | null>(null);\n\n const tagInputId = useMemo(() => generateRandomId(), []);\n const listBoxId = `TagInputListBox-${tagInputId}`;\n const tagListId = useId();\n const summaryId = useId();\n const hintId = useId();\n const triggerId = useId();\n const clearId = useId();\n\n // ---- values -------------------------------------------------------------\n const [values, setValues] = useControlledState<readonly string[]>(\n valueProp as readonly string[] | undefined,\n (defaultValue as readonly string[] | undefined) ?? [],\n onChange as ((value: readonly string[]) => void) | undefined,\n );\n // A controlled value may repeat an entry; the chips are keyed by value, so\n // render each one once.\n const uniqueValues = [...new Set((values ?? []).map(String))];\n\n // ---- typed text ---------------------------------------------------------\n const [draft, setDraftState] = useControlledState<string>(\n inputValueProp as string | undefined,\n defaultInputValue ?? '',\n onInputChange,\n );\n // The id gives a repeated rejection a fresh message node, so it is announced\n // again.\n const [tagError, setTagErrorState] = useState<{\n id: number;\n text: string;\n } | null>(null);\n // Only ever grows: a clear and a new rejection can land in one batch.\n const tagErrorIdRef = useRef(0);\n const setTagError = useEvent((text: string | null) => {\n if (text == null) {\n setTagErrorState(null);\n\n return;\n }\n\n tagErrorIdRef.current += 1;\n setTagErrorState({ id: tagErrorIdRef.current, text });\n });\n const [announcement, setAnnouncement] = useState({ id: 0, text: '' });\n\n // ---- options ------------------------------------------------------------\n let children: ReactNode = renderChildren as ReactNode;\n\n if (items && typeof renderChildren === 'function') {\n children = Array.from(items).map((item, index) => {\n const rendered = (renderChildren as (item: T) => ReactNode)(item);\n\n if (isValidElement(rendered) && rendered.key == null) {\n return cloneElement(rendered, {\n key:\n (item as { key?: Key })?.key ?? (item as { id?: Key })?.id ?? index,\n });\n }\n\n return rendered;\n });\n }\n\n const hasOptions = children != null && children !== false;\n\n // Reads option labels, and matches typed text to an option, whether or not\n // the popover is open.\n const localCollectionState = useListState({\n children: children as never,\n selectionMode: 'none',\n });\n const collection = localCollectionState.collection;\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const textFilterFn: FilterFn =\n filter === false ? () => true : filter || contains;\n\n const [isFilterActive, setIsFilterActive] = useState(false);\n const term = draft.trim();\n\n // Labels of picked options, kept after the option leaves the collection, as\n // it does with server-side filtering (`items` + `filter={false}`).\n const [knownLabels, setKnownLabels] = useState<ReadonlyMap<string, string>>(\n () => new Map(),\n );\n\n const getOptionLabel = (key: string) =>\n collection.getItem(key)?.textValue || knownLabels.get(key) || key;\n\n // What a chip reads as, and what announcements name it by: a string label\n // the chip is given, then the option's own.\n const getTagLabel = (key: string) =>\n textLabel(tagProps?.(key)?.children) ?? getOptionLabel(key);\n\n // A locked chip stays put: no remove button, Delete or unpick.\n const isTagLocked = (key: string) => !!tagProps?.(key)?.isDisabled;\n\n const disabledKeySet = new Set([...(disabledKeys ?? [])].map(String));\n\n // Called before the text changes (and the options with it) and when values\n // are added, while the options still hold the labels.\n const rememberLabels = useEvent((keys: readonly string[]) => {\n let next: Map<string, string> | null = null;\n\n for (const key of keys) {\n const label = collection.getItem(key)?.textValue;\n\n if (label && knownLabels.get(key) !== label) {\n if (!next) next = new Map(knownLabels);\n next.set(key, label);\n }\n }\n\n if (next) setKnownLabels(next);\n });\n\n /**\n * The option typed text stands for, if any. Without `allowsCustomValue` a\n * label in another case or without its accents counts, so `production`\n * finds `Production`. With it, such text is a value of its own and is added\n * as typed: `paris` is not `Paris` to a case-sensitive filter.\n */\n const findOptionKey = (text: string): string | null => {\n if (!hasOptions) return null;\n\n const match = matchOptionText(collection, text);\n\n return match.exact ?? (allowsCustomValue ? null : match.loose);\n };\n\n /**\n * What typed text commits as: the option it names, or else the text itself,\n * rewritten by `normalizeTag`, and the option that names if any. Enter, a\n * delimiter, a paste and blur all go through this, so they agree.\n */\n const resolveTypedText = (text: string) => {\n const optionKey = findOptionKey(text);\n\n if (optionKey != null || !normalizeTag) return { optionKey, typed: text };\n\n const typed = normalizeTag(text).trim();\n\n return { optionKey: typed ? findOptionKey(typed) : null, typed };\n };\n\n const termOptionKey = term ? resolveTypedText(term).optionKey : null;\n\n // The option the text names stays listed even when the filter would hide\n // it (a key typed, a custom filter), so Enter can land on it.\n const optionFilterFn = (nodes: Iterable<any>) => {\n if (!isFilterActive || !term) return nodes;\n\n return filterCollectionNodes(nodes, term, textFilterFn, {\n keep:\n termOptionKey == null\n ? undefined\n : (node) => String(node.key) === termOptionKey,\n });\n };\n\n const visibleOptionKeys: Key[] = [];\n\n if (hasOptions) {\n collectVisibleKeys(\n optionFilterFn(collection),\n visibleOptionKeys,\n disabledKeys ? new Set(disabledKeys) : undefined,\n );\n }\n\n // Custom values unpicked in the list during this visit. They stay listed,\n // unchecked, until focus leaves the field: the row does not vanish under the\n // pointer, and it can be picked back.\n const [unpickedCustomValues, setUnpickedCustomValues] = useState<\n readonly string[]\n >([]);\n\n // The user's own values, listed after the options so they can be unpicked\n // where they were picked. Only with `allowsCustomValue`: without it an\n // unpicked value could not be added back. Sorted, so toggling one does not\n // move it.\n const customValueKeys =\n hasOptions && allowsCustomValue\n ? [\n ...new Set(\n [...uniqueValues, ...unpickedCustomValues].filter(\n (value) =>\n collection.getItem(value) == null && !knownLabels.has(value),\n ),\n ),\n ].sort(compareText)\n : [];\n\n // The typed text narrows them as it narrows the options, even when the\n // options are filtered on the server (`filter={false}`): these rows are\n // this component's own.\n const matchesTerm = typeof filter === 'function' ? filter : contains;\n const visibleCustomKeys =\n isFilterActive && term\n ? customValueKeys.filter((key) => matchesTerm(key, term))\n : customValueKeys;\n\n // The typed text as a pickable row, when it would add something new.\n const customTerm =\n hasOptions &&\n allowsCustomValue &&\n term &&\n termOptionKey == null &&\n !uniqueValues.includes(term) &&\n !customValueKeys.includes(term)\n ? term\n : null;\n\n const popoverChildren = withCustomOptions(children, {\n customKeys: visibleCustomKeys,\n customTerm,\n hasOptionRows: visibleOptionKeys.length > 0,\n hasSections: [...collection].some((node) => node.type === 'section'),\n optionsLabel: t('tagInput.options', 'Options'),\n customValuesLabel: t('tagInput.customValues', 'Custom values'),\n });\n\n const hasResults =\n visibleOptionKeys.length > 0 ||\n visibleCustomKeys.length > 0 ||\n customTerm != null;\n // Options rebuild on every render when they come from `items`, so effects\n // follow what is visible rather than the collection's identity.\n const visibleOptionsSignature = [\n ...visibleOptionKeys,\n ...visibleCustomKeys,\n ].join('\\u0000');\n\n // ---- popover ------------------------------------------------------------\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const isInteractive = !isDisabled && !isReadOnly;\n const shouldShowPopover =\n hasOptions && isInteractive && isPopoverOpen && hasResults;\n\n // With no matching option the popover hides but stays open, so it comes back\n // as soon as the text matches again.\n const notifiedOpenRef = useRef(false);\n\n useEffect(() => {\n if (notifiedOpenRef.current === shouldShowPopover) return;\n\n notifiedOpenRef.current = shouldShowPopover;\n onOpenChange?.(shouldShowPopover);\n }, [shouldShowPopover, onOpenChange]);\n\n // The option under virtual focus, mirrored in state for the input's\n // `aria-activedescendant`: the listbox's own state update does not re-render\n // this component. It is also what Enter acts on, so Enter only ever picks the\n // option a screen reader was told about. `term` is the text it was chosen\n // for; `source` tells a user's own pick (arrows, a click) from focus the\n // component placed while the text changed.\n const [activeOption, setActiveOption] = useState<{\n key: Key;\n term: string;\n source: 'auto' | 'user';\n } | null>(null);\n const activeOptionKey = activeOption?.key ?? null;\n\n const moveVirtualFocus = useEvent(\n (key: Key | null, source: 'auto' | 'user', forTerm: string) => {\n const listState = listStateRef.current;\n\n if (!listState || key == null) return;\n\n markKeyboardFocus(listState);\n listState.selectionManager.setFocusedKey(key);\n setActiveOption({ key, term: forTerm, source });\n },\n );\n\n // The popover is at least as wide as the input box.\n const [popoverMinWidth, setPopoverMinWidth] = useState<number>();\n\n // The option the typed text names wins over the first match, so typing\n // \"build\" and pressing Enter picks \"build\", not \"rebuild\".\n let exactOptionKey = termOptionKey;\n\n if (exactOptionKey == null && term && customValueKeys.includes(term)) {\n exactOptionKey = term;\n }\n\n // Text that names a row only in another case is a value of its own, so its\n // own row wins over that one: Enter adds `paris` as typed, not `Paris`.\n if (\n exactOptionKey == null &&\n customTerm &&\n (matchOptionText(collection, customTerm).loose != null ||\n customValueKeys.some((key) => isSameText(key, customTerm)))\n ) {\n exactOptionKey = customTerm;\n }\n\n const visibleTargetKeys: Key[] = [...visibleOptionKeys, ...visibleCustomKeys];\n\n if (customTerm) visibleTargetKeys.push(customTerm);\n // Typed text means \"add\", so past an exact match the first row that is not\n // added yet wins: typing \"def\" next to a picked \"undefined\" lands on \"def\".\n let preferredOptionKey: Key | null = null;\n\n if (exactOptionKey != null && visibleTargetKeys.includes(exactOptionKey)) {\n preferredOptionKey = exactOptionKey;\n } else if (term) {\n preferredOptionKey =\n visibleTargetKeys.find((key) => !uniqueValues.includes(String(key))) ??\n null;\n }\n\n if (preferredOptionKey == null) {\n preferredOptionKey = visibleTargetKeys[0] ?? null;\n }\n const focusTermRef = useRef<string | null>(null);\n\n // Focus the best match when the popover opens or the text changes, and\n // whenever the focused option is filtered out, so Enter always acts on a\n // visible row. The keys come from this render's own filter: the listbox's\n // collection can lag a render behind right after the text narrows.\n useLayoutEffect(() => {\n // `aria-activedescendant` is only set while the popover shows, so a stale\n // active option needs no reset here; the next pass re-syncs it.\n if (!shouldShowPopover) {\n focusTermRef.current = null;\n\n return;\n }\n\n setPopoverMinWidth(wrapperRef.current?.offsetWidth);\n\n // Rebuilt from the signature: the key arrays themselves are new on every\n // render when options come from `items`. Collection keys are strings.\n const visibleKeys: Key[] = visibleOptionsSignature\n ? visibleOptionsSignature.split('\\u0000')\n : [];\n\n if (customTerm) visibleKeys.push(customTerm);\n\n const isNewTerm = !!term && focusTermRef.current !== term;\n\n focusTermRef.current = term;\n\n let attempts = 0;\n let isCancelled = false;\n\n const tick = () => {\n if (isCancelled) return;\n\n const listState = listStateRef.current;\n\n if (!listState) {\n attempts += 1;\n\n if (attempts < 8) requestAnimationFrame(tick);\n\n return;\n }\n\n const focused = listState.selectionManager.focusedKey;\n const keepsFocus =\n focused != null && visibleKeys.includes(focused) && !isNewTerm;\n\n // Re-announced even when focus stays: after a close and reopen the list\n // still has it, but the input no longer points at it.\n if (keepsFocus) {\n setActiveOption((prev) =>\n prev?.key === focused\n ? { ...prev, term }\n : { key: focused, term, source: 'auto' },\n );\n } else {\n moveVirtualFocus(preferredOptionKey, 'auto', term);\n }\n };\n\n requestAnimationFrame(() => requestAnimationFrame(tick));\n\n // Text typed after this pass was scheduled owns the focus now.\n return () => {\n isCancelled = true;\n };\n }, [\n shouldShowPopover,\n visibleOptionsSignature,\n customTerm,\n term,\n preferredOptionKey,\n moveVirtualFocus,\n wrapperRef,\n ]);\n\n const setDraft = useEvent((next: string) => {\n setDraftState(next);\n setIsFilterActive(!!next.trim());\n });\n\n // A fresh node per message, so a repeated one (\"Added a\", remove, \"Added a\")\n // is announced again.\n const announce = useEvent((text: string) => {\n setAnnouncement((prev) => ({ id: prev.id + 1, text }));\n });\n\n // ---- commit -------------------------------------------------------------\n const rejectionMessage = useEvent((rejection: Rejection) => {\n if (rejection.message) return rejection.message;\n\n switch (rejection.reason) {\n case 'duplicate':\n return t('tagInput.duplicateValue', '\"{{value}}\" is already added', {\n value: rejection.text,\n });\n case 'unknown':\n return t('tagInput.unknownValue', '\"{{value}}\" is not in the list', {\n value: rejection.text,\n });\n case 'unavailable':\n return t('tagInput.unavailableValue', '\"{{value}}\" is not available', {\n value: rejection.text,\n });\n case 'limit':\n return t('tagInput.limitReached', 'You can add up to {{count}}', {\n count: maxTags,\n });\n default:\n return t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: rejection.text,\n });\n }\n });\n\n // Refused parts go back to the input joined by a delimiter, so they split\n // back into the same values. A line break cannot join them: the input drops\n // it. Typing a delimiter always leaves one to join with.\n const joinDelimiter = delimiters.find(\n (delimiter) => delimiter && !LINE_BREAK.test(delimiter),\n );\n const joiner = joinDelimiter ? `${joinDelimiter} ` : ' ';\n\n // Without a label or `forceField` there is no field wrapper to show the\n // message, so a rejection is announced instead.\n const hasFieldMessage = !!label || !!props.forceField;\n\n /**\n * Turns typed parts into values. Accepted parts become chips. Refused ones\n * come back as text for the input, with a message, except a duplicate: it is\n * a chip already, and the message says so. With no delimiter to join them,\n * only the first refused part comes back, since glued together they would\n * commit as one value nobody typed. Keys picked from the list (`isPick`) are\n * committed as they are, with no text matching.\n */\n const commitParts = useEvent((parts: string[], isPick = false): string => {\n if (!parts.length) return '';\n\n const present = new Set(uniqueValues);\n const accepted: string[] = [];\n const rejected: Rejection[] = [];\n\n for (const part of parts) {\n // Only text of its own is rewritten; an option keeps its key.\n const { optionKey, typed } = isPick\n ? { optionKey: part, typed: part }\n : resolveTypedText(part);\n\n if (!typed) continue;\n\n const nextValue = optionKey ?? typed;\n\n if (optionKey != null && disabledKeySet.has(optionKey)) {\n rejected.push({ text: part, reason: 'unavailable' });\n continue;\n }\n\n if (optionKey == null && hasOptions && !allowsCustomValue) {\n rejected.push({ text: part, reason: 'unknown' });\n continue;\n }\n\n if (present.has(nextValue)) {\n rejected.push({ text: part, reason: 'duplicate' });\n continue;\n }\n\n if (maxTags != null && present.size >= maxTags) {\n rejected.push({ text: part, reason: 'limit' });\n continue;\n }\n\n if (optionKey == null && validateTag) {\n const result = validateTag(nextValue);\n\n if (result === false || typeof result === 'string') {\n rejected.push({\n text: part,\n reason: 'invalid',\n message: typeof result === 'string' ? result : undefined,\n });\n continue;\n }\n }\n\n present.add(nextValue);\n accepted.push(nextValue);\n }\n\n const returned = rejected.filter(\n (rejection) => rejection.reason !== 'duplicate',\n );\n const kept = joinDelimiter ? returned : returned.slice(0, 1);\n // The message is about the text left in the input, if there is any.\n const shown = kept[0] ?? rejected[0];\n const error = shown ? rejectionMessage(shown) : null;\n const messages: string[] = [];\n\n if (accepted.length) {\n rememberLabels(accepted);\n setValues([...uniqueValues, ...accepted]);\n messages.push(\n t('tagInput.added', 'Added {{value}}', {\n value: formatList(accepted.map(getTagLabel)),\n }),\n );\n }\n\n if (error && !hasFieldMessage) messages.push(error);\n if (messages.length) announce(messages.join(' '));\n\n setTagError(error);\n\n return kept.map((rejection) => rejection.text).join(joiner);\n });\n\n /** Commits the typed text and returns what is left in the input. */\n const commitDraft = useEvent(() => {\n const rest = commitParts(splitTagText(draft, delimiters));\n\n setDraft(rest);\n\n return rest;\n });\n\n // Focusing the row itself tells the tag group which chip is focused, as a\n // click would.\n const focusLastTag = useEvent(() => {\n const rows = tagListRef.current?.querySelectorAll<HTMLElement>(\n '[role=\"row\"]:not([aria-disabled=\"true\"])',\n );\n\n rows?.[rows.length - 1]?.focus();\n });\n\n const removeValues = useEvent((requested: string[]) => {\n const keys = requested.filter((key) => !isTagLocked(key));\n\n if (!keys.length) return;\n\n const removed = new Set(keys);\n const next = uniqueValues.filter((value) => !removed.has(value));\n\n // Focus leaves the list before the last chip it can land on unmounts under\n // it; locked chips take no focus.\n if (!next.some((value) => !isTagLocked(value))) {\n inputRef.current?.focus();\n }\n\n setValues(next);\n setTagError(null);\n announce(\n t('tagInput.removed', 'Removed {{value}}', {\n value: formatList(keys.map(getTagLabel)),\n }),\n );\n });\n\n /**\n * Picks an option in the popover, or unpicks one that already is a chip. The\n * popover stays open for the next pick, and the query is cleared so the full\n * list is back. A picked row is added as its own key, never swapped for a\n * look-alike, except the typed text's row: that one is the typed text, so\n * it commits as a delimiter would.\n */\n const toggleOption = useEvent((key: string) => {\n if (isTagLocked(key)) return;\n\n setTagError(null);\n\n if (uniqueValues.includes(key)) {\n removeValues([key]);\n setDraft('');\n\n if (customValueKeys.includes(key)) {\n setUnpickedCustomValues((prev) =>\n prev.includes(key) ? prev : [...prev, key],\n );\n }\n } else if (!commitParts([key], key !== customTerm)) {\n // An accepted pick clears the query. A refused one (past `maxTags`)\n // keeps it, next to the message saying why.\n setDraft('');\n }\n });\n\n // A click in the popover list. The list reports its whole new selection, so\n // compare it with the chips to find the option that changed.\n const handlePopoverSelection = useEvent(\n (selection: Key | Key[] | null | 'all') => {\n if (!Array.isArray(selection)) return;\n\n const next = new Set(selection.map(String));\n const changed = [\n ...[...next].filter((key) => !uniqueValues.includes(key)),\n ...uniqueValues.filter(\n (value) =>\n !next.has(value) &&\n (collection.getItem(value) != null ||\n visibleCustomKeys.includes(value)),\n ),\n ];\n\n changed.forEach(toggleOption);\n\n // The click moved the list's focus to the option; the input's\n // `aria-activedescendant` follows it.\n const clicked = changed[changed.length - 1];\n\n if (clicked != null) {\n listStateRef.current?.selectionManager.setFocusedKey(clicked);\n // The pick clears the text.\n setActiveOption({ key: clicked, term: '', source: 'user' });\n }\n\n // A click can take DOM focus off the input; keep typing where it was.\n setTimeout(() => inputRef.current?.focus(), 0);\n },\n );\n\n // ---- keyboard -----------------------------------------------------------\n // Set while Tab moves focus out of the input, so the blur can tell a Tab to\n // the chips (commit the text) from a click on a remove button (keep it).\n const isTabbingRef = useRef(false);\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n\n // A Tab the consumer prevented moves no focus.\n isTabbingRef.current = e.key === 'Tab' && !e.defaultPrevented;\n\n if (e.defaultPrevented || !isInteractive) return;\n\n const listState = listStateRef.current;\n\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (!hasOptions) return;\n\n e.preventDefault();\n\n if (!shouldShowPopover) {\n if (!hasResults) setIsFilterActive(false);\n setIsPopoverOpen(true);\n\n return;\n }\n\n if (listState) {\n moveVirtualFocus(\n getNextVisibleKey(listState, e.key === 'ArrowDown' ? 1 : -1),\n 'user',\n term,\n );\n }\n\n return;\n }\n\n if ((e.key === 'Home' || e.key === 'End') && shouldShowPopover) {\n e.preventDefault();\n\n if (listState) {\n moveVirtualFocus(\n getEdgeVisibleKey(listState, e.key === 'Home' ? 'first' : 'last'),\n 'user',\n term,\n );\n }\n\n return;\n }\n\n // The chips sit below the input, not beside the caret, so Backspace in an\n // empty input moves to the last chip instead of removing it out of view.\n // The chip comes into view with focus and says it is removable; the next\n // Backspace removes it and moves to the one before.\n if (\n e.key === 'Backspace' &&\n !draft &&\n uniqueValues.some((value) => !isTagLocked(value))\n ) {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // A held Backspace that just emptied the input stops there, so it does\n // not run on into the chips.\n if (e.repeat) return;\n\n setIsPopoverOpen(false);\n focusLastTag();\n\n return;\n }\n\n if (e.key === 'Enter') {\n if (isComposingKey(e)) return;\n\n // The announced option, unless the text changed since it was chosen and\n // its focus pass has not run yet: then the best match for this text.\n const isCurrent = activeOption != null && activeOption.term === term;\n const targetKey = shouldShowPopover\n ? isCurrent\n ? activeOption.key\n : preferredOptionKey\n : null;\n\n if (targetKey != null) {\n e.preventDefault();\n\n const key = String(targetKey);\n\n // Typed text means \"add\". An option that is already a chip is refused\n // as a duplicate and the text cleared, as a comma or blur would;\n // unpicking one takes the arrows, a click, or an empty input.\n if (\n term &&\n uniqueValues.includes(key) &&\n !(isCurrent && activeOption.source === 'user')\n ) {\n setDraft('');\n setTagError(\n rejectionMessage({\n text: getTagLabel(key),\n reason: 'duplicate',\n }),\n );\n\n return;\n }\n\n toggleOption(key);\n\n return;\n }\n\n // Enter is for adding values and never submits a form, even with nothing\n // typed: pressing it once more after the last value must not send a\n // half-filled dialog.\n e.preventDefault();\n\n if (term) commitDraft();\n\n return;\n }\n\n if (delimiters.includes(e.key)) {\n if (isComposingKey(e)) return;\n\n e.preventDefault();\n\n // The separator splits the text where it is typed: what comes before the\n // caret is committed, what comes after stays in the input.\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? start;\n const rejected = commitParts(\n splitTagText(draft.slice(0, start), delimiters),\n );\n\n setDraft(\n [rejected, draft.slice(end).trimStart()].filter(Boolean).join(joiner),\n );\n\n return;\n }\n\n // Escape takes back one thing at a time: the list, then the text. A\n // message goes with either, or on its own when the input is already empty,\n // as after a refused duplicate.\n if (e.key === 'Escape') {\n if (shouldShowPopover) {\n e.preventDefault();\n e.stopPropagation();\n setIsPopoverOpen(false);\n setTagError(null);\n } else if (draft || tagError) {\n e.preventDefault();\n e.stopPropagation();\n setDraft('');\n setTagError(null);\n // It may be open but hidden for want of a match; the full list must\n // not appear when the text goes.\n setIsPopoverOpen(false);\n }\n }\n });\n\n // A separator can also arrive without a key press: autocorrect, IME, drag and\n // drop. Commit everything before the last separator and keep the rest typed.\n const handleInputChange = useEvent((next: string) => {\n setTagError(null);\n rememberLabels(uniqueValues);\n\n const pattern = delimiterPattern(delimiters);\n const parts = pattern ? next.split(pattern) : [next];\n\n let nextDraft = next;\n\n if (parts.length > 1) {\n const rest = (parts.pop() ?? '').trimStart();\n const rejected = commitParts(\n parts.map((part) => part.trim()).filter(Boolean),\n );\n\n nextDraft = [rejected, rest].filter(Boolean).join(joiner);\n }\n\n setDraft(nextDraft);\n\n if (hasOptions && popoverTrigger !== 'manual' && nextDraft.trim()) {\n setIsPopoverOpen(true);\n }\n });\n\n // An `<input>` drops line breaks from pasted text, so split a pasted list\n // here, where they are still visible.\n const handlePaste = useEvent((e: ClipboardEvent<HTMLInputElement>) => {\n if (!isInteractive) return;\n\n const pasted = e.clipboardData.getData('text');\n\n if (!pasted || splitTagText(pasted, delimiters).length < 2) return;\n\n e.preventDefault();\n\n const el = e.currentTarget;\n const start = el.selectionStart ?? draft.length;\n const end = el.selectionEnd ?? draft.length;\n\n setTagError(null);\n setDraft(\n commitParts(\n splitTagText(\n `${draft.slice(0, start)}\\n${pasted}\\n${draft.slice(end)}`,\n delimiters,\n ),\n ),\n );\n });\n\n // ---- focus --------------------------------------------------------------\n // What leaving the input does to the typed text. Returns the text left.\n const settleDraft = useEvent((): string => {\n if (!term) return '';\n if (!shouldCommitOnBlur || !isInteractive) return draft;\n\n if (hasOptions && !allowsCustomValue && termOptionKey == null) {\n // Leaving a filter query behind is not an entry: drop it, as ComboBox\n // does with text that matches no option.\n setDraft('');\n setTagError(null);\n\n return '';\n }\n\n return commitDraft();\n });\n\n const handleCompositeBlur = useEvent(() => {\n setIsPopoverOpen(false);\n setUnpickedCustomValues([]);\n\n // A message can only be about text in the input. Once none is left, as\n // after a refused duplicate, the field does not stay marked invalid.\n if (!settleDraft()) setTagError(null);\n\n onBlur?.();\n });\n\n const { compositeFocusProps } = useCompositeFocus({\n wrapperRef: rootRef as RefObject<HTMLElement>,\n popoverRef: popoverRef as RefObject<HTMLElement>,\n onFocus,\n onBlur: handleCompositeBlur,\n isDisabled,\n });\n\n // Tabbing from the input to the chips stays inside the component, so the\n // composite blur never fires: close the popover and settle the text on the\n // way. A click on a chip's remove button also moves focus there, and leaves\n // both alone.\n const handleInputBlur = useEvent((e: FocusEvent<HTMLInputElement>) => {\n const isTabbing = isTabbingRef.current;\n const next = e.relatedTarget as Node | null;\n\n isTabbingRef.current = false;\n\n if (!isTabbing || !next || !rootRef.current?.contains(next)) return;\n\n setIsPopoverOpen(false);\n settleDraft();\n });\n\n const handleInputFocus = useEvent(() => {\n if (hasOptions && popoverTrigger === 'focus' && isInteractive) {\n setIsPopoverOpen(true);\n }\n });\n\n // ---- chips --------------------------------------------------------------\n const tags: TagListEntry[] = uniqueValues.map((value) => {\n const ownProps = tagProps?.(value);\n const isOption =\n collection.getItem(value) != null || knownLabels.has(value);\n const result = !isOption && validateTag ? validateTag(value) : true;\n const label = textLabel(ownProps?.children) ?? getOptionLabel(value);\n\n return {\n key: value,\n label,\n // Put in words as well as in color, for the chip's description.\n invalidMessage:\n typeof result === 'string'\n ? result\n : result === false\n ? t('tagInput.invalidValue', '\"{{value}}\" is not a valid value', {\n value: label,\n })\n : undefined,\n tagProps: ownProps,\n isDisabled: !!ownProps?.isDisabled,\n };\n });\n\n const effectiveIsInvalid = tagError ? true : isInvalid;\n const hasRemovableTags = tags.some((tag) => !tag.isDisabled);\n // Backspace in an empty input is how the keyboard gets to the chips without\n // Tab; nothing on screen says so.\n const hasBackspaceHint = isInteractive && hasRemovableTags;\n\n // A locked value's option stays checked but cannot be unpicked.\n const lockedKeys = tags.filter((tag) => tag.isDisabled).map((tag) => tag.key);\n const optionDisabledKeys = lockedKeys.length\n ? [...disabledKeySet, ...lockedKeys]\n : disabledKeys;\n\n // ---- input --------------------------------------------------------------\n const { labelProps, inputProps } = useTextField(\n {\n ...otherProps,\n id,\n label,\n value: draft,\n placeholder,\n isDisabled,\n isReadOnly,\n isRequired,\n isInvalid: effectiveIsInvalid,\n autoFocus,\n onChange: handleInputChange,\n } as never,\n inputRef,\n );\n // Names the chips and the trigger after the field: \"Selected values, Also\n // send to\", rather than the same words for every field on the page.\n const labelId = label ? (labelProps.id as string | undefined) : undefined;\n\n // Joined, not replaced: the input keeps any description it already has.\n const describedBy: string[] = [];\n\n if (inputProps['aria-describedby']) {\n describedBy.push(inputProps['aria-describedby']);\n }\n if (tags.length) describedBy.push(summaryId);\n if (hasBackspaceHint) describedBy.push(hintId);\n\n const tagInputProps = mergeProps(\n inputProps,\n {\n onKeyDown: handleKeyDown,\n onPaste: handlePaste,\n onBlur: handleInputBlur,\n onFocus: handleInputFocus,\n autoComplete,\n 'data-input-type': 'taginput',\n 'aria-describedby': describedBy.join(' ') || undefined,\n },\n hasOptions\n ? {\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': shouldShowPopover,\n 'aria-controls': shouldShowPopover ? listBoxId : undefined,\n 'aria-activedescendant':\n shouldShowPopover && activeOptionKey != null\n ? getListBoxOptionId(listBoxId, activeOptionKey)\n : undefined,\n }\n : null,\n );\n\n const handleTriggerPress = useEvent(() => {\n const willOpen = !shouldShowPopover;\n\n if (willOpen && !hasResults) setIsFilterActive(false);\n\n setIsPopoverOpen(willOpen);\n inputRef.current?.focus();\n });\n\n const trigger =\n hasOptions && !hideTrigger ? (\n <ItemAction\n data-popover-trigger\n id={triggerId}\n qa=\"TagInputTrigger\"\n icon={<DirectionIcon to={shouldShowPopover ? 'up' : 'down'} />}\n size={size}\n isDisabled={!isInteractive}\n styles={triggerStyles}\n mods={{ pressed: shouldShowPopover }}\n // Arrow keys open the list from the input, so the button stays out of\n // the Tab order and Tab goes from the input straight to the chips.\n tabIndex={-1}\n aria-expanded={shouldShowPopover}\n aria-haspopup=\"listbox\"\n aria-label={t('tagInput.showOptions', 'Show options')}\n aria-labelledby={labelId ? `${triggerId} ${labelId}` : undefined}\n onPress={handleTriggerPress}\n />\n ) : null;\n\n // Clears what is typed, as Escape does. The chips below have their own\n // remove buttons, so a button inside the input is about the text only.\n const clearText = useEvent(() => {\n // The button goes away with the text; keep focus in the field.\n inputRef.current?.focus();\n setDraft('');\n setTagError(null);\n setIsPopoverOpen(false);\n onClear?.();\n });\n\n const canClear = !!isClearable && isInteractive && draft !== '';\n const clearButton = canClear ? (\n <ItemAction\n id={clearId}\n qa=\"TagInputClearButton\"\n icon={<CloseIcon />}\n size={size}\n // Escape does the same from the keyboard. As a Tab stop it would take\n // focus just as tabbing away commits the text and removes it.\n tabIndex={-1}\n aria-label={t('tagInput.clearText', 'Clear text')}\n aria-labelledby={labelId ? `${clearId} ${labelId}` : undefined}\n onPress={clearText}\n />\n ) : null;\n\n // Not a bare fragment: an empty one would still mark the input as having a\n // suffix.\n const hasActions = clearButton != null || trigger != null;\n\n const tagInputField = (\n <TagInputElement\n ref={rootRef}\n className={className}\n style={style}\n qaVal={qaVal}\n styles={styles}\n {...compositeFocusProps}\n >\n <TextInputBase\n qa={qa || 'TagInput'}\n inputRef={inputRef}\n wrapperRef={wrapperRef}\n inputProps={tagInputProps}\n mods={mods}\n icon={icon}\n prefix={prefix}\n suffix={suffix}\n suffixPosition={suffixPosition}\n actions={\n hasActions ? (\n <>\n {clearButton}\n {trigger}\n </>\n ) : null\n }\n size={size}\n autoFocus={autoFocus}\n isDisabled={isDisabled}\n isLoading={isLoading}\n isInvalid={effectiveIsInvalid}\n isValid={isValid}\n styles={wrapperStyles}\n inputStyles={inputStyles}\n />\n {tags.length ? (\n <TagList\n id={tagListId}\n listRef={tagListRef}\n inputRef={inputRef}\n aria-label={t('tagInput.selectedValues', 'Selected values')}\n aria-labelledby={labelId}\n tags={tags}\n size={TAG_SIZES[size] ?? 'xsmall'}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n styles={tagListStyles}\n tagStyles={tagStyles}\n onRemove={removeValues}\n />\n ) : null}\n {/* Read only as the input's description, never on its own in browse mode. */}\n <span hidden id={summaryId}>\n {tags.length\n ? t('tagInput.summary', 'Selected: {{values}}.', {\n values: formatList(tags.map((tag) => tag.label)),\n })\n : null}\n </span>\n <span hidden id={hintId}>\n {hasBackspaceHint\n ? t(\n 'tagInput.backspaceHint',\n 'Press Backspace to go to the selected values.',\n )\n : null}\n </span>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n <span key={announcement.id}>{announcement.text}</span>\n </VisuallyHidden>\n {hasOptions ? (\n <ListBoxPopover\n isOpen={shouldShowPopover}\n triggerRef={wrapperRef as RefObject<HTMLElement>}\n popoverRef={popoverRef}\n listBoxRef={listBoxRef}\n direction={direction}\n shouldFlip={shouldFlip}\n overlayOffset={overlayOffset}\n containerPadding={containerPadding}\n comboBoxWidth={popoverMinWidth}\n listBoxId={listBoxId}\n overlayStyles={overlayStyles}\n listBoxStyles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={isFilterActive ? term : undefined}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n selectionMode=\"multiple\"\n selectedKeys={uniqueValues}\n isCheckable\n // Clicking back into the input keeps the list open for the next pick.\n shouldCloseOnTriggerInteraction={false}\n // A press on an outside control reaches it, so a Save button saves\n // on the first click: focus moves there, and the blur commits the\n // text. A press elsewhere, as on a dialog's backdrop, only closes it.\n shouldPassControlPresses\n isDisabled={isDisabled}\n disabledKeys={optionDisabledKeys}\n listStateRef={listStateRef}\n label={label}\n ariaLabel={(props as { 'aria-label'?: string })['aria-label']}\n compositeFocusProps={compositeFocusProps}\n filter={optionFilterFn}\n size={size}\n onSelectionChange={handlePopoverSelection}\n onClose={() => setIsPopoverOpen(false)}\n >\n {popoverChildren}\n </ListBoxPopover>\n ) : null}\n </TagInputElement>\n );\n\n const { children: _children, ...fieldProps } = props;\n\n // The forwarded ref sits on the component's root, labelled or not, so the\n // field wrapper gets a ref of its own that nothing reads.\n const fieldRef = useCombinedRefs<HTMLDivElement>();\n\n return wrapWithField(tagInputField, fieldRef, {\n ...(fieldProps as Omit<CubeTagInputProps<T>, 'children'>),\n labelProps: mergeProps(labelProps, userLabelProps),\n isInvalid: effectiveIsInvalid,\n // A rejected entry speaks for itself until the text is edited. Keyed, so\n // the same rejection twice in a row is announced twice.\n message: tagError ? (\n <span key={tagError.id}>{tagError.text}</span>\n ) : (\n message\n ),\n errorMessage: tagError ? undefined : errorMessage,\n });\n}\n\n/**\n * A field for a list of values, shown as removable chips below a single-line\n * input. Values are typed (Enter or a separator commits them) or picked from\n * suggested options.\n */\nconst _TagInput = forwardRef(TagInput) as unknown as (<T extends object>(\n props: WithNullableValue<CubeTagInputProps<T>> & {\n ref?: ForwardedRef<HTMLDivElement>;\n },\n) => ReactElement) & {\n Item: typeof Item;\n Section: typeof BaseSection;\n};\n\nObject.assign(_TagInput, {\n Item,\n Section: BaseSection,\n displayName: 'TagInput',\n});\n\n// The legacy `<Field>` picks its value mapper from this. The `CheckboxGroup`\n// mapper is the one for an array value: `[]` when empty, validated on change.\nObject.defineProperty(_TagInput, 'cubeInputType', {\n value: 'CheckboxGroup',\n enumerable: false,\n configurable: false,\n});\n\nexport { _TagInput as TagInput };\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { chain } from "../../../utils/react/chain.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useBufferedValue } from "../../../utils/react/useBufferedValue.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { chain } from "../../../utils/react/chain.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useBufferedValue } from "../../../utils/react/useBufferedValue.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { ItemActionIcon } from "../actions/ItemActionsWrapper.js";
|
|
3
3
|
import { c } from "react-compiler-runtime";
|
|
4
4
|
import { Fragment, jsxs } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { formatColor, getContrastingColor, toHex } from "./color.js";
|
|
4
4
|
import { CHANNELS, COLOR_SPACES, COLOR_SPACE_HINTS, COLOR_SPACE_LABELS } from "./channels.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { maxChroma, normalizeHue, oklchToOkhsl } from "../../../utils/colors.js";
|
|
3
3
|
import { fromOkhst, fromRgb, isAchromatic, toHex, toOkhst, toOklch, toRgb } from "./color.js";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
|
|
2
2
|
import { anyNaN, clamp, maxChroma, normalizeHue, oklchToOkhsl, parseColorFunction, readComponent, readHue, rgbFromSrgb } from "../../../utils/colors.js";
|
|
3
3
|
import { contrastRatioFromLuminance, formatHsl, formatOkhsl, formatOkhst, formatOklch, formatRgb, hslToSrgb, okhslToLinearSrgb, okhslToOkhst, okhslToOklch, okhslToSrgb, okhstToOkhsl, parseHexAlpha, relativeLuminanceFromLinearRgb, srgbToHex, srgbToOkhsl } from "@tenphi/glaze";
|
|
4
4
|
|