@cube-dev/ui-kit 0.0.0-canary-bada6bd → 0.0.0-canary-09a7efe
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/README.md +1 -1
- package/dist/README.md +1 -1
- 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 +3 -1
- package/dist/components/actions/ItemButton/ItemButton.js.map +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 +3 -5
- package/dist/components/actions/use-action.js.map +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 +3 -3
- package/dist/components/content/Item/Item.js.map +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.d.ts +14 -14
- 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 +3 -3
- package/dist/components/content/use-auto-tooltip.js.map +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 +90 -43
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +3 -2
- package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +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 +28 -18
- package/dist/components/fields/FilterListBox/FilterListBox.js.map +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.d.ts +2 -2
- package/dist/components/fields/ListBox/ListBox.js +1 -2
- package/dist/components/fields/ListBox/ListBox.js.map +1 -1
- package/dist/components/fields/ListBox/optionId.js +16 -0
- package/dist/components/fields/ListBox/optionId.js.map +1 -0
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +120 -110
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +44 -22
- 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 +3 -2
- package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +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 +182 -0
- package/dist/components/fields/TagInput/TagInput.js +1856 -0
- package/dist/components/fields/TagInput/TagInput.js.map +1 -0
- package/dist/components/fields/TagInput/TagList.js +355 -0
- package/dist/components/fields/TagInput/TagList.js.map +1 -0
- package/dist/components/fields/TagInput/index.d.ts +2 -0
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -0
- package/dist/components/fields/TextInput/TextInputBase.js +8 -6
- package/dist/components/fields/TextInput/TextInputBase.js.map +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/fields/index.d.ts +2 -0
- package/dist/components/form/FieldWrapper/FieldWrapper.js +13 -2
- package/dist/components/form/FieldWrapper/FieldWrapper.js.map +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/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 +14 -12
- package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.d.ts +6 -0
- package/dist/components/overlays/Tooltip/TooltipProvider.js +43 -38
- package/dist/components/overlays/Tooltip/TooltipProvider.js.map +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 +47 -1
- package/dist/eslint-plugin/defaults.generated.js.map +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 +18 -1
- package/dist/i18n/locales/en-US/uikit.js +18 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +22 -2
- package/dist/i18n/locales/es-ES/uikit.js +18 -1
- package/dist/i18n/locales/es-MX/uikit.js +18 -1
- package/dist/i18n/locales/fr-FR/uikit.js +18 -1
- package/dist/i18n/locales/it-IT/uikit.js +18 -1
- package/dist/i18n/locales/ja-JP/uikit.js +18 -1
- package/dist/i18n/locales/nb-NO/uikit.js +18 -1
- package/dist/i18n/locales/pt-BR/uikit.js +18 -1
- package/dist/i18n/locales/pt-PT/uikit.js +18 -1
- package/dist/i18n/locales/sv-SE/uikit.js +18 -1
- package/dist/i18n/locales/vi-VN/uikit.js +18 -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.d.ts +2 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +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.d.ts +1 -0
- package/dist/tokens/typography.js +10 -1
- package/dist/tokens/typography.js.map +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 +3 -4
- package/dist/utils/react/wrapNodeIfPlain.js.map +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/Usage.md +10 -9
- package/docs/components/actions/ItemButton.md +2 -2
- package/docs/components/fields/TagInput.md +429 -0
- package/docs/components/overlays/TooltipProvider.md +1 -0
- package/package.json +1 -1
- package/tasty.config.ts +2 -1
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# TagInput
|
|
2
|
+
|
|
3
|
+
A multi-value field. The user types a value into a single-line input and commits it with Enter or a comma, and each value becomes a removable chip listed below the input. The same component covers free-form lists (email addresses, numbers, IAM principals) and picking several values from suggestions, with an optional custom value on top.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- The value is a list of short strings the user types or pastes: recipients, domains, bin boundaries, tags
|
|
8
|
+
- The user picks several values from a long list and should see what is picked while searching for the next one
|
|
9
|
+
- A list of options where the user may also add a value that is not in it (`allowsCustomValue`)
|
|
10
|
+
- Not for a short, fixed list of options: use [FilterPicker](./FilterPicker.md) or CheckboxGroup
|
|
11
|
+
|
|
12
|
+
## Component
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
- **`children`** `ReactNode | (item: T) => ReactElement` — `TagInput.Item` elements, or a render function for `items`, that suggest values. Without options the field accepts any typed value
|
|
19
|
+
- **`items`** `Iterable<T>` — Options to suggest, as data
|
|
20
|
+
- **`placeholder`** `string` — Placeholder text for the input
|
|
21
|
+
- **`icon`** `ReactElement` — Icon element rendered before the input
|
|
22
|
+
- **`prefix`** `ReactNode` — Input decoration before the main input
|
|
23
|
+
- **`suffix`** `ReactNode` — Input decoration after the main input
|
|
24
|
+
- **`suffixPosition`** `'before' | 'after'` — Whether the suffix goes before or after the validation and loading icons
|
|
25
|
+
- **`tagProps`** `(value: string) => Partial<CubeTagProps>` — Props for each chip's `Tag` (theme, icon, label), by value. A string `children` also names the value to screen readers, and `isDisabled` locks the chip
|
|
26
|
+
- **`value`** `string[]` — The values in controlled mode
|
|
27
|
+
- **`defaultValue`** `string[]` — The initial values in uncontrolled mode
|
|
28
|
+
- **`inputValue`** `string` — The text being typed, in controlled mode
|
|
29
|
+
- **`defaultInputValue`** `string` — The initial text being typed, in uncontrolled mode
|
|
30
|
+
- **`allowsCustomValue`** `boolean` (default: `false`) — Whether typed values that are not among the options are accepted. Only applies when options are given
|
|
31
|
+
- **`delimiters`** `string[]` (default: `[',']`) — Characters that commit the typed text and split pasted text. Pasted text is also split on line breaks
|
|
32
|
+
- **`validateTag`** `(value: string) => boolean | string | null | undefined` — Checks one value before it becomes a chip. Return `false` or a message to reject it
|
|
33
|
+
- **`normalizeTag`** `(value: string) => string` — Rewrites a typed value before it is checked and added. Return an empty string to drop it
|
|
34
|
+
- **`maxTags`** `number` — The most values the field holds. Values past it are refused and stay in the input
|
|
35
|
+
- **`shouldCommitOnBlur`** `boolean` (default: `true`) — Whether leaving the field commits the typed text
|
|
36
|
+
- **`isClearable`** `boolean` (default: `false`) — Whether a button in the input clears the typed text. It shows while there is text
|
|
37
|
+
- **`filter`** `((textValue: string, inputValue: string) => boolean) | false` — Custom filter for the options, or `false` to show every option
|
|
38
|
+
- **`popoverTrigger`** `'focus' | 'input' | 'manual'` (default: `input`) — When the suggestions popover opens
|
|
39
|
+
- **`hideTrigger`** `boolean` (default: `false`) — Whether to hide the button that toggles the popover
|
|
40
|
+
- **`disabledKeys`** `Iterable<Key>` — Keys of options that cannot be picked
|
|
41
|
+
- **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Size of the input. The chips follow it
|
|
42
|
+
- **`direction`** `'bottom' | 'top'` (default: `bottom`) — Where the suggestions popover opens
|
|
43
|
+
- **`shouldFlip`** `boolean` (default: `true`) — Whether the popover flips when there is no room
|
|
44
|
+
- **`overlayOffset`** `number` (default: `8`) — Distance between the input and the popover, in pixels
|
|
45
|
+
- **`containerPadding`** `number` (default: `8`) — Minimum space between the popover and the viewport edge, in pixels
|
|
46
|
+
- **`autoComplete`** `string` (default: `off`) — HTML `autocomplete` attribute for the input
|
|
47
|
+
- **`inputMode`** `'text' | 'email' | 'url' | 'tel' | 'numeric' | 'decimal' | 'search' | 'none'` — Which virtual keyboard the input asks for. The input stays a text input, so the browser does not validate what is typed
|
|
48
|
+
- **`enterKeyHint`** `'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'` — The label of the virtual keyboard's Enter key
|
|
49
|
+
- **`onChange`** `(value: string[]) => void` — Called with the whole new list of values
|
|
50
|
+
- **`onInputChange`** `(value: string) => void` — Called when the text being typed changes
|
|
51
|
+
- **`onClear`** `() => void` — Called when the clear button is pressed
|
|
52
|
+
- **`onOpenChange`** `(isOpen: boolean) => void` — Called when the suggestions popover opens or closes
|
|
53
|
+
- **`onFocus`** `() => void` — Called when focus enters the component: the input, a chip or the popover
|
|
54
|
+
- **`onBlur`** `() => void` — Called when focus leaves the component entirely
|
|
55
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Called when a key is pressed in the input, before the component handles it. Call `e.preventDefault()` to stop the built-in handling
|
|
56
|
+
- **`inputRef`**, **`wrapperRef`**, **`popoverRef`**, **`listBoxRef`** `RefObject` — Refs to the input, the bordered input box, the popover and its listbox. The forwarded `ref` points at the root, which holds the input and the chips
|
|
57
|
+
- **`mods`** `Record<string, boolean>` — Modifiers for the bordered input box, see [Modifiers](#modifiers)
|
|
58
|
+
|
|
59
|
+
#### Notable Properties
|
|
60
|
+
|
|
61
|
+
**delimiters** - Typing a delimiter commits the text before it, and pasting splits the text on every delimiter and line break, so a column copied from a spreadsheet or a comma-separated list becomes one chip per entry. A single pasted value is inserted as plain text for the user to finish. Pass `[]` when a value may contain a comma: only Enter and pasted line breaks separate values then.
|
|
62
|
+
|
|
63
|
+
**validateTag** - Runs on every value about to become a chip. A rejected value stays in the input, the field turns invalid and the message shows below it until the text is edited. A value picked from the options is not checked. Values already in `value` that fail the check are drawn in the danger theme and carry the message as their description, so an invalid entry loaded from the server stands out. Duplicates are always refused, with a message of their own.
|
|
64
|
+
|
|
65
|
+
**normalizeTag** - Runs on typed text before anything else looks at it, so the duplicate check, `validateTag` and the new chip all see the rewritten value: lowercase an email address, strip thousands separators, write a number one way. The rejected text that stays in the input is what the user typed. Picked options keep their keys.
|
|
66
|
+
|
|
67
|
+
**maxTags** - A hard limit on the number of values. Past it, typed, pasted and picked values are refused with a message and stay in the input, while values up to the limit are still added. For a limit that only flags the field, use a `rules` entry instead.
|
|
68
|
+
|
|
69
|
+
**tagProps** - Called per value. Return a theme, an icon or `qa` for the chip. A string `children` replaces the chip's text and also names the value in the input's description and in the "Added"/"Removed" announcements, for values whose label does not come from the options. `isDisabled: true` locks the chip: it has no remove button, the keyboard skips it, and its option cannot be unpicked. An invalid chip stays in the danger theme whatever theme it asks for.
|
|
70
|
+
|
|
71
|
+
**children / items** - Options turn the input into a combobox. Typing filters them and focuses the option whose label is exactly the typed text, or else the first match. Enter or a click toggles the focused option, and the popover stays open so the user can pick several in a row. Typed text means "add": pressing Enter on an option that is already a chip refuses it as a duplicate, and unpicking it takes the arrow keys, a click, or an empty input. A picked option shows a checked box. Without `allowsCustomValue`, typed text must match an option by key or label, and on blur a query that matches nothing is dropped. With it, the typed text is offered as its own option after the matches, the same way [FilterListBox](./FilterListBox.md) does, and custom values already added are listed there too, checked and sorted, so they can be unpicked from the list as well as from their chips. One unpicked in the list stays there, unchecked, until focus leaves the field, so it can be picked back. An option in `disabledKeys` is refused however it is entered. A chip for an option shows the option's label, while the value holds its key. The label is remembered, so it survives server-side filtering (`filter={false}` with changing `items`).
|
|
72
|
+
|
|
73
|
+
### Base Properties
|
|
74
|
+
|
|
75
|
+
Supports [Base properties](../../BaseProperties.md)
|
|
76
|
+
|
|
77
|
+
### Field Properties
|
|
78
|
+
|
|
79
|
+
Supports all [Field properties](../../FieldProperties.md)
|
|
80
|
+
|
|
81
|
+
### Styling Properties
|
|
82
|
+
|
|
83
|
+
#### styles
|
|
84
|
+
|
|
85
|
+
Customizes the root element, a column holding the input box and the chips.
|
|
86
|
+
|
|
87
|
+
#### wrapperStyles
|
|
88
|
+
|
|
89
|
+
Customizes the bordered input box.
|
|
90
|
+
|
|
91
|
+
**Sub-elements:**
|
|
92
|
+
|
|
93
|
+
- `Prefix` - Container for prefix content and icons
|
|
94
|
+
- `Suffix` - Container for suffix content, validation icons, the clear button and the popover trigger, which always comes last
|
|
95
|
+
- `InputIcon` - Container for the left icon
|
|
96
|
+
- `ValidationIcon` - Container for validation state icons
|
|
97
|
+
- `State` - Container for the validation and loading icons
|
|
98
|
+
|
|
99
|
+
#### inputStyles
|
|
100
|
+
|
|
101
|
+
Customizes the text input element.
|
|
102
|
+
|
|
103
|
+
#### tagListStyles
|
|
104
|
+
|
|
105
|
+
Customizes the wrapping row of chips.
|
|
106
|
+
|
|
107
|
+
#### tagStyles
|
|
108
|
+
|
|
109
|
+
Customizes every chip. Use `tagProps` for per-value props.
|
|
110
|
+
|
|
111
|
+
#### triggerStyles
|
|
112
|
+
|
|
113
|
+
Customizes the button that toggles the popover.
|
|
114
|
+
|
|
115
|
+
#### overlayStyles
|
|
116
|
+
|
|
117
|
+
Customizes the popover.
|
|
118
|
+
|
|
119
|
+
#### listBoxStyles
|
|
120
|
+
|
|
121
|
+
Customizes the listbox in the popover.
|
|
122
|
+
|
|
123
|
+
#### optionStyles
|
|
124
|
+
|
|
125
|
+
Customizes each option.
|
|
126
|
+
|
|
127
|
+
#### sectionStyles
|
|
128
|
+
|
|
129
|
+
Customizes option sections.
|
|
130
|
+
|
|
131
|
+
#### headingStyles
|
|
132
|
+
|
|
133
|
+
Customizes option section headings.
|
|
134
|
+
|
|
135
|
+
### Style Properties
|
|
136
|
+
|
|
137
|
+
These properties allow direct style application without using the `styles` prop:
|
|
138
|
+
|
|
139
|
+
- **Base:** `display`, `font`, `preset`, `hide`, `whiteSpace`, `opacity`, `transition`
|
|
140
|
+
- **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `blockMargin`, `inlineMargin`, `inset`, `blockInset`, `inlineInset`, `position`, `scrollMargin`, `blockScrollMargin`, `inlineScrollMargin`, `scrollPadding`, `blockScrollPadding`, `inlineScrollPadding`
|
|
141
|
+
- **Dimension:** `width`, `height`, `blockSize`, `inlineSize`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
|
|
142
|
+
- **Block:** `border`, `blockBorder`, `inlineBorder`, `radius`, `shadow`, `outline`, `padding`, `blockPadding`, `inlinePadding`, `overflow`, `scrollbar`, `textAlign`
|
|
143
|
+
- **Color:** `color`, `fill`, `fade`, `image`
|
|
144
|
+
- **Flow:** `flow`, `place`, `placeItems`, `placeContent`, `alignItems`, `alignContent`, `justifyItems`, `justifyContent`, `align`, `justify`, `gap`, `columnGap`, `rowGap`, `gridColumns`, `gridRows`, `gridTemplate`, `gridAreas`
|
|
145
|
+
|
|
146
|
+
### Modifiers
|
|
147
|
+
|
|
148
|
+
The `mods` prop accepts the following modifiers for the bordered input box:
|
|
149
|
+
|
|
150
|
+
- **`focused`** `boolean` — Forces focus ring appearance.
|
|
151
|
+
- **`disabled`** `boolean` — Forces disabled appearance.
|
|
152
|
+
- **`invalid`** `boolean` — Forces invalid state styling.
|
|
153
|
+
- **`valid`** `boolean` — Forces valid state styling.
|
|
154
|
+
- **`prefix`** `boolean` — Indicates presence of prefix content.
|
|
155
|
+
- **`suffix`** `boolean` — Indicates presence of suffix content.
|
|
156
|
+
|
|
157
|
+
## Variants
|
|
158
|
+
|
|
159
|
+
### Sizes
|
|
160
|
+
|
|
161
|
+
- `small` - Compact input with extra-small chips
|
|
162
|
+
- `medium` - Default size, with extra-small chips
|
|
163
|
+
- `large` - Emphasized input with small chips
|
|
164
|
+
|
|
165
|
+
### Validation States
|
|
166
|
+
|
|
167
|
+
### Disabled and Read-only
|
|
168
|
+
|
|
169
|
+
A disabled field's chips drop out of the Tab order. A read-only field keeps them focusable but shows no remove buttons and ignores Delete.
|
|
170
|
+
|
|
171
|
+
## Examples
|
|
172
|
+
|
|
173
|
+
### Free-form Values
|
|
174
|
+
|
|
175
|
+
```jsx
|
|
176
|
+
const EMAIL = /^[^\s@,]+@[^\s@,]+\.[^\s@,]+$/;
|
|
177
|
+
|
|
178
|
+
<TagInput
|
|
179
|
+
label="Also send to"
|
|
180
|
+
placeholder="name@company.com"
|
|
181
|
+
defaultValue={['ana@acme.com']}
|
|
182
|
+
validateTag={(value) => EMAIL.test(value) || 'Enter an email address'}
|
|
183
|
+
/>;
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Pasting a List
|
|
187
|
+
|
|
188
|
+
Pasted text is split on delimiters and line breaks. Accepted entries become chips, rejected ones stay in the input with the message from `validateTag`.
|
|
189
|
+
|
|
190
|
+
### Picking from Suggestions
|
|
191
|
+
|
|
192
|
+
```jsx
|
|
193
|
+
<TagInput label="Allowed actions" placeholder="Search actions">
|
|
194
|
+
<TagInput.Item key="read">read</TagInput.Item>
|
|
195
|
+
<TagInput.Item key="refresh">refresh</TagInput.Item>
|
|
196
|
+
<TagInput.Item key="rebuild">rebuild</TagInput.Item>
|
|
197
|
+
<TagInput.Item key="deploy">deploy</TagInput.Item>
|
|
198
|
+
</TagInput>
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Suggestions with Custom Values
|
|
202
|
+
|
|
203
|
+
```jsx
|
|
204
|
+
<TagInput
|
|
205
|
+
allowsCustomValue
|
|
206
|
+
label="Allowed actions"
|
|
207
|
+
placeholder="Search or add an action"
|
|
208
|
+
>
|
|
209
|
+
<TagInput.Item key="read">read</TagInput.Item>
|
|
210
|
+
<TagInput.Item key="refresh">refresh</TagInput.Item>
|
|
211
|
+
</TagInput>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Data-driven Options
|
|
215
|
+
|
|
216
|
+
```jsx
|
|
217
|
+
const members = [
|
|
218
|
+
{ key: 'orders.count', label: 'Orders count' },
|
|
219
|
+
{ key: 'orders.status', label: 'Order status' },
|
|
220
|
+
];
|
|
221
|
+
|
|
222
|
+
<TagInput label="Members" items={members}>
|
|
223
|
+
{(member) => <TagInput.Item key={member.key}>{member.label}</TagInput.Item>}
|
|
224
|
+
</TagInput>;
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Per-chip Props
|
|
228
|
+
|
|
229
|
+
```jsx
|
|
230
|
+
<TagInput
|
|
231
|
+
label="Members"
|
|
232
|
+
defaultValue={['orders.count', 'orders.status']}
|
|
233
|
+
tagProps={(value) => ({
|
|
234
|
+
theme: isMeasure(value) ? 'primary' : 'success',
|
|
235
|
+
})}
|
|
236
|
+
>
|
|
237
|
+
{members.map((key) => (
|
|
238
|
+
<TagInput.Item key={key}>{key}</TagInput.Item>
|
|
239
|
+
))}
|
|
240
|
+
</TagInput>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Values with Commas
|
|
244
|
+
|
|
245
|
+
```jsx
|
|
246
|
+
<TagInput
|
|
247
|
+
label="Allowed IAM principals"
|
|
248
|
+
delimiters={[]}
|
|
249
|
+
description="Only Enter and pasted line breaks separate values."
|
|
250
|
+
/>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Many Values in a Narrow Field
|
|
254
|
+
|
|
255
|
+
```jsx
|
|
256
|
+
<TagInput
|
|
257
|
+
label="Bin boundaries"
|
|
258
|
+
width="240px"
|
|
259
|
+
placeholder="Add a number"
|
|
260
|
+
defaultValue={['0', '10', '25', '50', '75', '100']}
|
|
261
|
+
validateTag={(value) => Number.isFinite(Number(value)) || 'Enter a number'}
|
|
262
|
+
/>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Moving Between the Input and the Chips
|
|
266
|
+
|
|
267
|
+
Tab goes from the input to the chips. Backspace in the empty input does too, landing on the last chip without removing it; the next Backspace removes it and moves to the one before. From a chip, Escape goes back to the input, and so does typing, which carries on in the input.
|
|
268
|
+
|
|
269
|
+
### Locked Values and Clearing the Text
|
|
270
|
+
|
|
271
|
+
A locked chip has no remove button and the keyboard skips it. The clear button inside the input clears only the typed text, never the chips, and shows while there is text to clear.
|
|
272
|
+
|
|
273
|
+
```jsx
|
|
274
|
+
<TagInput
|
|
275
|
+
isClearable
|
|
276
|
+
label="Owners"
|
|
277
|
+
defaultValue={['you@acme.com', 'ana@acme.com']}
|
|
278
|
+
tagProps={(value) =>
|
|
279
|
+
value === currentUser ? { isDisabled: true, children: `${value} (you)` } : undefined
|
|
280
|
+
}
|
|
281
|
+
/>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### A Limit on the Number of Values
|
|
285
|
+
|
|
286
|
+
```jsx
|
|
287
|
+
<TagInput label="Reviewers" maxTags={3} description="Up to three reviewers." />
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Rewriting Typed Values
|
|
291
|
+
|
|
292
|
+
```jsx
|
|
293
|
+
<TagInput
|
|
294
|
+
label="Also send to"
|
|
295
|
+
normalizeTag={(value) => value.toLowerCase()}
|
|
296
|
+
validateTag={validateEmail}
|
|
297
|
+
/>
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
With the rewrite, `Ana@Acme.com` is a duplicate of `ana@acme.com` rather than a second chip.
|
|
301
|
+
|
|
302
|
+
### Numbers
|
|
303
|
+
|
|
304
|
+
The value is always a `string[]`. Map a numeric model at the boundary, and let `normalizeTag` write each number one way, so `10.0` is a duplicate of `10`:
|
|
305
|
+
|
|
306
|
+
```jsx
|
|
307
|
+
const [bounds, setBounds] = useState([0, 10, 25]);
|
|
308
|
+
|
|
309
|
+
<TagInput
|
|
310
|
+
label="Bin boundaries"
|
|
311
|
+
inputMode="decimal"
|
|
312
|
+
delimiters={[',', ';', ' ']}
|
|
313
|
+
value={bounds.map(String)}
|
|
314
|
+
onChange={(next) => setBounds(next.map(Number).sort((a, b) => a - b))}
|
|
315
|
+
normalizeTag={(value) =>
|
|
316
|
+
Number.isFinite(Number(value)) ? String(Number(value)) : value
|
|
317
|
+
}
|
|
318
|
+
validateTag={(value) => Number.isFinite(Number(value)) || 'Enter a number'}
|
|
319
|
+
/>;
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
For numbers written with thousands separators, turn the comma delimiter off and strip them in `normalizeTag`: `delimiters={[]}` with `normalizeTag={(value) => value.replaceAll(',', '')}`.
|
|
323
|
+
|
|
324
|
+
### Labels for Values Outside the Options
|
|
325
|
+
|
|
326
|
+
When a value's label is not in the options, for example because the options are loaded on demand or leave out what is already picked, give the chip its label in `tagProps`:
|
|
327
|
+
|
|
328
|
+
```jsx
|
|
329
|
+
<TagInput
|
|
330
|
+
label="Roles"
|
|
331
|
+
items={unpickedRoles}
|
|
332
|
+
tagProps={(id) => ({ children: roleTitles[id] })}
|
|
333
|
+
>
|
|
334
|
+
{(role) => <TagInput.Item key={role.id}>{role.title}</TagInput.Item>}
|
|
335
|
+
</TagInput>
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Controlled
|
|
339
|
+
|
|
340
|
+
```jsx
|
|
341
|
+
const [recipients, setRecipients] = useState(['ana@acme.com']);
|
|
342
|
+
|
|
343
|
+
<TagInput label="Recipients" value={recipients} onChange={setRecipients} />;
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### Side Label
|
|
347
|
+
|
|
348
|
+
```jsx
|
|
349
|
+
<TagInput
|
|
350
|
+
labelPosition="side"
|
|
351
|
+
label="Also send to"
|
|
352
|
+
description="Press Enter or type a comma to add an address."
|
|
353
|
+
/>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## Accessibility
|
|
357
|
+
|
|
358
|
+
### Keyboard Navigation
|
|
359
|
+
|
|
360
|
+
- `Tab` - Moves focus from the input to the chips, then out of the field. The chips are one Tab stop; the popover trigger and the clear button are not Tab stops. Tabbing away closes the popover and commits the typed text
|
|
361
|
+
- `Shift+Tab` - Moves back from the chips to the input
|
|
362
|
+
- `Enter` - Commits the typed text. With the popover open, toggles the focused option, the one `aria-activedescendant` announces; with text typed, an option that is already a chip is refused as a duplicate rather than removed. Never submits a surrounding form, even with nothing typed, so one Enter too many after the last value does not send a half-filled dialog
|
|
363
|
+
- `,` (or another delimiter) - Commits the text before the caret and keeps the rest typed
|
|
364
|
+
- `Escape` - Closes the popover, or clears the typed text when it is closed
|
|
365
|
+
- `Backspace` in the empty input - Moves focus to the last chip without removing it, and closes the popover. A Backspace held down to clear the text stops at the empty input
|
|
366
|
+
- `ArrowDown` / `ArrowUp` - Opens the popover or moves through the options
|
|
367
|
+
- `Home` / `End` - Moves to the first or last option while the popover is open
|
|
368
|
+
- `ArrowLeft` / `ArrowRight` - Moves between chips. Locked chips are skipped
|
|
369
|
+
- `Delete` / `Backspace` on a chip - Removes it and focuses its neighbour, or the input when no chip is left. Holding the key down removes one chip, not the whole row
|
|
370
|
+
- `Escape` on a chip - Moves focus back to the input
|
|
371
|
+
- Typing on a chip - Moves focus back to the input, where the typed character lands
|
|
372
|
+
|
|
373
|
+
### Screen Reader Support
|
|
374
|
+
|
|
375
|
+
- Without options the input is a text field. With options it is a combobox with a multi-select listbox of checkable options
|
|
376
|
+
- The input's description reads the current values ("Selected: …") and says that Backspace moves to them, so the user hears what is already added and how to reach it
|
|
377
|
+
- Focus on a chip reads its label, its position and React Aria's hint to press Delete or Backspace to remove it
|
|
378
|
+
- A polite live region announces "Added …" and "Removed …" when the user adds or removes a value. Changes made from outside the field are not announced
|
|
379
|
+
- The chips are a grid named "Selected values" followed by the field's label. Each chip is a row, and its remove button reads "Remove" followed by the chip's label. An invalid chip is described by its validation message, not only by its color
|
|
380
|
+
- A rejected value marks the input invalid. With a visible label its message is shown under the field and announced as an alert, again for each new attempt. Without one, the message is announced through the live region
|
|
381
|
+
- A disabled field's chips are out of the Tab order, and so are locked chips. A read-only field's chips stay focusable, without remove buttons
|
|
382
|
+
- The clear button is named "Clear text" followed by the field's label. Escape does the same from the keyboard
|
|
383
|
+
|
|
384
|
+
### ARIA Properties
|
|
385
|
+
|
|
386
|
+
- `aria-describedby` - Adds the summary of current values and the Backspace hint to the input's own descriptions, such as one passed in `aria-describedby`
|
|
387
|
+
- `aria-invalid` - Set while a typed value is rejected, or when the field is invalid
|
|
388
|
+
- `role="combobox"`, `aria-expanded`, `aria-controls`, `aria-activedescendant`, `aria-autocomplete="list"` - Set when options are given. `aria-activedescendant` follows both arrow keys and clicks
|
|
389
|
+
|
|
390
|
+
## Best Practices
|
|
391
|
+
|
|
392
|
+
1. **Do**: Validate each value with `validateTag` and the whole list with `rules`
|
|
393
|
+
|
|
394
|
+
```jsx
|
|
395
|
+
<TagInput
|
|
396
|
+
name="recipients"
|
|
397
|
+
validateTag={validateEmail}
|
|
398
|
+
rules={[{ max: 5, type: 'array', message: 'Up to five recipients' }]}
|
|
399
|
+
/>
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
2. **Don't**: Use it for a handful of fixed options. A CheckboxGroup or [FilterPicker](./FilterPicker.md) shows the choices without typing
|
|
403
|
+
|
|
404
|
+
3. **Do**: Say how to add a value in the `description` or `placeholder` when the delimiter is not obvious
|
|
405
|
+
|
|
406
|
+
4. **Do**: Turn delimiters off with `delimiters={[]}` when a value may contain a comma
|
|
407
|
+
|
|
408
|
+
## Integration with Forms
|
|
409
|
+
|
|
410
|
+
The field value is an array of strings. With a `name`, the form stores the array and validates on change by default, and array rules like `{ type: 'array', max: 5 }` apply to it. The input itself holds only the text being typed, so it carries no `name` and a native form submission does not include it.
|
|
411
|
+
|
|
412
|
+
```jsx
|
|
413
|
+
<Form defaultValues={{ recipients: ['ana@acme.com'] }} onSubmit={save}>
|
|
414
|
+
<TagInput
|
|
415
|
+
name="recipients"
|
|
416
|
+
label="Recipients"
|
|
417
|
+
validateTag={validateEmail}
|
|
418
|
+
rules={[{ required: true, message: 'Add at least one recipient' }]}
|
|
419
|
+
/>
|
|
420
|
+
<Form.Submit>Save</Form.Submit>
|
|
421
|
+
</Form>
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
## Related Components
|
|
425
|
+
|
|
426
|
+
- [FilterPicker](./FilterPicker.md) - Use for picking several values from a list behind a button, without typing new ones
|
|
427
|
+
- [ComboBox](./ComboBox.md) - Use for one value with suggestions
|
|
428
|
+
- CheckboxGroup - Use for a short, fixed list of choices
|
|
429
|
+
- [Tag](../content/Tag.md) - The chip each value renders as
|
|
@@ -13,6 +13,7 @@ A convenience wrapper that combines `TooltipTrigger` and `Tooltip` into a single
|
|
|
13
13
|
- **`title`** `ReactNode` — Tooltip content
|
|
14
14
|
- **`tooltipStyles`** `Styles` — Custom styles for the tooltip container
|
|
15
15
|
- **`width`** `string` — Tooltip width
|
|
16
|
+
- **`qa`** `string` — `data-qa` for the rendered tooltip, so a test can find this trigger's tooltip rather than whichever one is open. Components that take a `tooltip` object accept it there too: `tooltip={{ title: 'Copy', qa: 'CopyTooltip' }}`
|
|
16
17
|
- **`placement`** `Placement` (default: `'top'`) — Position of the tooltip relative to its trigger
|
|
17
18
|
- **`offset`** `number` (default: `8`) — Distance between the tooltip and the trigger element
|
|
18
19
|
- **`crossOffset`** `number` (default: `0`) — Cross-axis offset of the tooltip
|
package/package.json
CHANGED
package/tasty.config.ts
CHANGED
|
@@ -351,7 +351,7 @@ export default {
|
|
|
351
351
|
'h5',
|
|
352
352
|
'h6',
|
|
353
353
|
|
|
354
|
-
// Text styles (t1-t4, with medium weight variants)
|
|
354
|
+
// Text styles (t1-t4, with medium weight variants, and t4n at normal weight)
|
|
355
355
|
't1',
|
|
356
356
|
't2',
|
|
357
357
|
't2m',
|
|
@@ -359,6 +359,7 @@ export default {
|
|
|
359
359
|
't3m',
|
|
360
360
|
't4',
|
|
361
361
|
't4m',
|
|
362
|
+
't4n',
|
|
362
363
|
|
|
363
364
|
// Markdown/prose styles (m1-m3)
|
|
364
365
|
'm1',
|