@cube-dev/ui-kit 0.187.2 → 0.189.0
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 +4 -0
- package/dist/CHANGELOG.md +47 -0
- package/dist/README.md +4 -0
- 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 +3 -6
- package/dist/components/GlobalStyles.js.map +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.d.ts +4 -0
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Action/Action.js.map +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +2 -2
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +40 -19
- package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +4 -7
- package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +3 -3
- 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 +7 -5
- package/dist/components/actions/Menu/MenuSection.js.map +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 +4 -6
- package/dist/components/actions/Menu/styled.js.map +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.d.ts +4 -0
- package/dist/components/actions/use-action.js +6 -1
- 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/Alert.js.map +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/Badge/Badge.js.map +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 +53 -78
- package/dist/components/content/Disclosure/Disclosure.js.map +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.d.ts +7 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +6 -1
- package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +11 -10
- 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 +13 -22
- package/dist/components/content/Placeholder/Placeholder.js.map +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.d.ts +34 -4
- package/dist/components/content/Result/Result.js +199 -95
- package/dist/components/content/Result/Result.js.map +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +3 -5
- package/dist/components/content/Tag/Tag.js.map +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.d.ts +2 -0
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Title.js.map +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/styled.js.map +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 +33 -10
- package/dist/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/components/data/DataTable/types.d.ts +3 -1
- package/dist/components/data/ItemTable/ItemTable.js +3 -6
- package/dist/components/data/ItemTable/ItemTable.js.map +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 +9 -7
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-styles.js +82 -0
- package/dist/components/data/TableBase/column-styles.js.map +1 -0
- 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 +8 -10
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.d.ts +11 -0
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +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.d.ts +9 -4
- package/dist/components/fields/ComboBox/ComboBox.js +2 -1
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +3 -5
- 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/DateInputBase.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +119 -129
- package/dist/components/fields/DatePicker/DatePicker.js.map +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 +128 -138
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +321 -331
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +163 -179
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +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/FilterListBox/FilterListBox.js.map +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +5 -6
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +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 +46 -44
- 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 +1 -1
- package/dist/components/fields/NumberInput/NumberInput.d.ts +2 -2
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +3 -3
- package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +5 -6
- package/dist/components/fields/Picker/Picker.js.map +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.d.ts +9 -4
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -1
- 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 +68 -66
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +33 -43
- package/dist/components/fields/Slider/HueSlider.js.map +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.js +170 -158
- 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.d.ts +2 -2
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js.map +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +2 -2
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- 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/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 +2 -2
- package/dist/components/layout/Board/Board.js.map +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 +4 -4
- package/dist/components/layout/Board/WidgetHost.js.map +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 +470 -407
- package/dist/components/navigation/Tabs/TabButton.js.map +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 +22 -4
- package/dist/components/navigation/Tabs/Tabs.js.map +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.d.ts +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/types.js.map +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/CalendarCell.js.map +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/PeriodGrid.js.map +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/CubeLogo/CubeLogo.js.map +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +78 -116
- package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.d.ts +57 -50
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +52 -48
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +99 -104
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
- package/dist/components/overlays/AlertDialog/index.d.ts +2 -1
- package/dist/components/overlays/Dialog/Dialog.js +2 -2
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.d.ts +2 -2
- package/dist/components/overlays/Dialog/DialogForm.js +4 -5
- package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +5 -6
- package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/default-button-text.js +30 -0
- package/dist/components/overlays/Dialog/default-button-text.js.map +1 -0
- 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 +2 -2
- package/dist/components/overlays/Modal/Popover.js.map +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Tray.js.map +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 +18 -2
- 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 +4 -1
- package/dist/i18n/locales/en-US/uikit.js +4 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +3 -0
- package/dist/i18n/locales/es-ES/uikit.js +4 -1
- package/dist/i18n/locales/es-MX/uikit.js +4 -1
- package/dist/i18n/locales/fr-FR/uikit.js +4 -1
- package/dist/i18n/locales/it-IT/uikit.js +4 -1
- package/dist/i18n/locales/ja-JP/uikit.js +4 -1
- package/dist/i18n/locales/nb-NO/uikit.js +4 -1
- package/dist/i18n/locales/pt-BR/uikit.js +4 -1
- package/dist/i18n/locales/pt-PT/uikit.js +4 -1
- package/dist/i18n/locales/sv-SE/uikit.js +4 -1
- package/dist/i18n/locales/vi-VN/uikit.js +4 -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 +5 -4
- package/dist/index.js +3 -3
- 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/shared/form.d.ts +29 -1
- package/dist/shared/index.d.ts +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 +51 -6
- package/dist/utils/styles.js.map +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +3 -3
- package/docs/components/actions/Action.md +1 -1
- package/docs/components/actions/Button.md +4 -2
- package/docs/components/actions/ItemButton.md +1 -0
- package/docs/components/actions/Link.md +1 -1
- package/docs/components/content/InfoBadge.md +1 -1
- package/docs/components/content/Item.md +1 -1
- package/docs/components/content/Result.md +202 -12
- package/docs/components/content/Title.md +1 -0
- package/docs/components/data/DataTable.md +18 -0
- package/docs/components/data/ItemTable.md +3 -1
- package/docs/components/fields/ComboBox.md +49 -1
- package/docs/components/fields/FilterPicker.md +3 -3
- package/docs/components/fields/NumberInput.md +27 -0
- package/docs/components/fields/PasswordInput.md +24 -0
- package/docs/components/fields/Picker.md +3 -3
- package/docs/components/fields/SearchComboBox.md +3 -1
- package/docs/components/fields/TagInput.md +4 -2
- package/docs/components/fields/TextArea.md +24 -0
- package/docs/components/fields/TextInput.md +24 -0
- package/docs/components/navigation/Tabs.md +8 -3
- package/docs/components/overlays/AlertDialog.md +100 -3
- package/docs/components/overlays/DialogForm.md +3 -3
- package/docs/components/overlays/UseDialogContainer.md +4 -7
- package/docs/tasty/dsl.md +28 -6
- package/docs/tasty/styles.md +20 -0
- package/package.json +3 -3
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# Result
|
|
2
2
|
|
|
3
|
-
An empty state or result display with icon, title, and optional content. Supports status presets with built-in icons.
|
|
3
|
+
An empty state or result display with icon, title, and optional content. Supports status presets with built-in icons and an actions slot. The `large` size with the `stacked` layout is the vertical card used as the body of a confirmation or result dialog.
|
|
4
4
|
|
|
5
5
|
## When to Use
|
|
6
6
|
|
|
7
7
|
- Empty states (no data, no results)
|
|
8
8
|
- Success/error feedback after actions
|
|
9
|
+
- Confirmation and result dialogs (payment complete, action failed)
|
|
9
10
|
- 404, 403, 500 error pages
|
|
10
11
|
- Informational messages
|
|
11
12
|
|
|
@@ -19,9 +20,35 @@ An empty state or result display with icon, title, and optional content. Support
|
|
|
19
20
|
- **`title`** `ReactNode` — Main title text
|
|
20
21
|
- **`subtitle`** `ReactNode` — Secondary text below the title
|
|
21
22
|
- **`subTitle`** `ReactNode` — Deprecated: use `subtitle` instead
|
|
22
|
-
- **`icon`** `ReactNode` — Custom icon
|
|
23
|
-
- **`
|
|
24
|
-
- **`
|
|
23
|
+
- **`icon`** `ReactNode` — Custom icon that replaces the status icon
|
|
24
|
+
- **`size`** `'medium' | 'large'` (default: `'medium'`) — Visual scale: the icon size and the title and subtitle presets. Does not change the layout. Ignored when `isCompact` is set
|
|
25
|
+
- **`layout`** `'default' | 'stacked'` (default: `'default'`) — Arrangement of the block. `stacked` fills the container and stacks the actions to the full width, as in a confirmation or result dialog. Ignored when `isCompact` is set
|
|
26
|
+
- **`isCompact`** `boolean` (default: `false`) — Compact horizontal layout. Overrides `size` and `layout`
|
|
27
|
+
- **`actions`** `ReactNode` — Action buttons as `Result.Action` elements: a centered row by default, a full-width column in the `stacked` layout
|
|
28
|
+
- **`children`** `ReactNode` — Free content between the text and the actions
|
|
29
|
+
|
|
30
|
+
The elements render in this order: icon, title, subtitle, children, actions.
|
|
31
|
+
|
|
32
|
+
### Result.Action
|
|
33
|
+
|
|
34
|
+
A `Button` for the `actions` slot. It takes every `Button` prop, and its `size` follows the Result's `size` unless you set one: `medium` buttons in a medium Result, `large` in a large one, `medium` when `isCompact`. A `type="link"` action keeps the `inline` size of a link `Button`. Set `type` on each action as on any `Button`.
|
|
35
|
+
|
|
36
|
+
### Base Properties
|
|
37
|
+
|
|
38
|
+
Supports [Base properties](../../BaseProperties.md).
|
|
39
|
+
|
|
40
|
+
### Styling Properties
|
|
41
|
+
|
|
42
|
+
#### styles
|
|
43
|
+
|
|
44
|
+
Customizes the root element of the component.
|
|
45
|
+
|
|
46
|
+
**Sub-elements:**
|
|
47
|
+
|
|
48
|
+
- `Icon` - The status icon wrapper. Colored by the `status` modifier, padded on every side by `3x`, or a quarter of `--icon-size` when that is larger (an icon above `12x`), so the room never drops below the spacing between the other blocks, and that room is the whole distance to the title (no padding when `isCompact`). Wraps a custom `icon` too, with the same room and without a status color. Not rendered for a status without an icon (`404`, `403`, `500`)
|
|
49
|
+
- `Title` - The text block holding the title and the subtitle
|
|
50
|
+
- `Content` - The free `children` block
|
|
51
|
+
- `Actions` - The `actions` block
|
|
25
52
|
|
|
26
53
|
### Style Defaults
|
|
27
54
|
|
|
@@ -29,15 +56,13 @@ An empty state or result display with icon, title, and optional content. Support
|
|
|
29
56
|
- `flow` — `column`
|
|
30
57
|
- `placeContent` — `center` (switches to `start` when `isCompact`)
|
|
31
58
|
- `placeItems` — `center` (switches to `start` when `isCompact`)
|
|
32
|
-
- `gap` — `3x`
|
|
33
|
-
- `padding` — `6x 4x` (
|
|
59
|
+
- `gap` — `0`; `Content` and `Actions` keep `3x` from the block above with a top margin (`2x 1x` and no margins when `isCompact`)
|
|
60
|
+
- `padding` — `6x 4x` (`0` when `isCompact`; `1.5x` when `layout="stacked"`, and `0` for a stacked Result inside a `Dialog`, whose `Content` already pads it. The `@in-dialog` state is the Result's own, so `styles={{ padding: { 'layout=stacked & @in-dialog': '1x' } }}` sets it and keeps the rest of the default padding)
|
|
34
61
|
- `textAlign` — `center` (switches to `left` when `isCompact`)
|
|
35
|
-
- `
|
|
62
|
+
- `boxSizing` — `border-box`
|
|
63
|
+
- `width` — `max 80ch` (caps the readable line length; override via the `width` prop). `100%` up to `80ch` when `layout="stacked"`, so the stacked actions share one width wherever the card sits
|
|
36
64
|
- `margin` — `0 auto` (centers Result horizontally within its parent; switches to `0` when `isCompact`)
|
|
37
|
-
|
|
38
|
-
### Base Properties
|
|
39
|
-
|
|
40
|
-
Supports [Base properties](../../BaseProperties.md).
|
|
65
|
+
- `--icon-size` — `6x` (`10x` when `size="large"`)
|
|
41
66
|
|
|
42
67
|
### Style Properties
|
|
43
68
|
|
|
@@ -50,8 +75,51 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
50
75
|
- **Color:** `color`, `fill`, `fade`, `image`
|
|
51
76
|
- **Flow:** `flow`, `place`, `placeItems`, `placeContent`, `alignItems`, `alignContent`, `justifyItems`, `justifyContent`, `align`, `justify`, `gap`, `columnGap`, `rowGap`, `gridColumns`, `gridRows`, `gridTemplate`, `gridAreas`
|
|
52
77
|
|
|
78
|
+
### Modifiers
|
|
79
|
+
|
|
80
|
+
The root element exposes these modifiers as `data-*` attributes:
|
|
81
|
+
|
|
82
|
+
| Modifier | Type | Description |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| `compact` | `boolean` | Set by `isCompact`: horizontal icon + title layout |
|
|
85
|
+
| `size` | `'medium' \| 'large'` | Set by `size`; `medium` when `isCompact` |
|
|
86
|
+
| `layout` | `'default' \| 'stacked'` | Set by `layout`; `default` when `isCompact` |
|
|
87
|
+
| `status` | `CubeResultStatus` | Set by `status`, `info` by default; drives the icon color. Not set when a custom `icon` is passed |
|
|
88
|
+
|
|
89
|
+
## Variants
|
|
90
|
+
|
|
91
|
+
### Sizes
|
|
92
|
+
|
|
93
|
+
The size scales the content and never changes the arrangement. `isCompact` has its own scale and ignores it.
|
|
94
|
+
|
|
95
|
+
- `medium` - Default. Icon `6x`, title `h4`, subtitle `t2m`
|
|
96
|
+
- `large` - Icon `10x`, title `h2`, subtitle `t2`, `Result.Action` buttons `large`
|
|
97
|
+
|
|
98
|
+
### Layouts
|
|
99
|
+
|
|
100
|
+
The layout arranges the block and never changes the scale. `isCompact` has its own arrangement and ignores it.
|
|
101
|
+
|
|
102
|
+
- `default` - A centered column capped at `80ch`, actions in a centered row that wraps
|
|
103
|
+
- `stacked` - Fills the container up to `80ch` with a `1.5x` padding of its own (none inside a `Dialog`), actions stacked to the full width, free `children` stretched. Combine with `size="large"` for the vertical card of a confirmation or result dialog
|
|
104
|
+
|
|
53
105
|
## Examples
|
|
54
106
|
|
|
107
|
+
### Basic Usage
|
|
108
|
+
|
|
109
|
+
```jsx
|
|
110
|
+
<Result
|
|
111
|
+
status="success"
|
|
112
|
+
title="Successfully Purchased Cloud Server ECS!"
|
|
113
|
+
subtitle="Cloud server configuration takes 1-5 minutes, please wait."
|
|
114
|
+
actions={
|
|
115
|
+
<>
|
|
116
|
+
<Result.Action type="primary">Go Console</Result.Action>
|
|
117
|
+
<Result.Action>Buy Again</Result.Action>
|
|
118
|
+
</>
|
|
119
|
+
}
|
|
120
|
+
/>
|
|
121
|
+
```
|
|
122
|
+
|
|
55
123
|
### Info
|
|
56
124
|
|
|
57
125
|
### Warning
|
|
@@ -60,14 +128,136 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
60
128
|
|
|
61
129
|
### Custom Icon
|
|
62
130
|
|
|
131
|
+
```jsx
|
|
132
|
+
<Result
|
|
133
|
+
title="Access is denied!"
|
|
134
|
+
subtitle="Request access from the administrator."
|
|
135
|
+
icon={
|
|
136
|
+
<Icon color="#warning">
|
|
137
|
+
<IconLock />
|
|
138
|
+
</Icon>
|
|
139
|
+
}
|
|
140
|
+
actions={<Result.Action>Request</Result.Action>}
|
|
141
|
+
/>
|
|
142
|
+
```
|
|
143
|
+
|
|
63
144
|
### Custom Title
|
|
64
145
|
|
|
65
146
|
### Compact
|
|
66
147
|
|
|
148
|
+
### Large
|
|
149
|
+
|
|
150
|
+
The `large` size scales the icon and the text. The actions stay in a centered row.
|
|
151
|
+
|
|
152
|
+
```jsx
|
|
153
|
+
<Result
|
|
154
|
+
size="large"
|
|
155
|
+
status="success"
|
|
156
|
+
title="Payment complete"
|
|
157
|
+
subtitle="Charged $1,234.00 to Visa **** 4242"
|
|
158
|
+
actions={
|
|
159
|
+
<>
|
|
160
|
+
<Result.Action type="primary">
|
|
161
|
+
Done
|
|
162
|
+
</Result.Action>
|
|
163
|
+
<Result.Action>
|
|
164
|
+
View invoice
|
|
165
|
+
</Result.Action>
|
|
166
|
+
</>
|
|
167
|
+
}
|
|
168
|
+
/>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Stacked
|
|
172
|
+
|
|
173
|
+
The `stacked` layout fills the container and stacks the actions to the full width. With `size="large"` it is the vertical card for confirmation and result dialogs.
|
|
174
|
+
|
|
175
|
+
```jsx
|
|
176
|
+
<Result
|
|
177
|
+
size="large"
|
|
178
|
+
layout="stacked"
|
|
179
|
+
status="success"
|
|
180
|
+
title="Payment complete"
|
|
181
|
+
subtitle="Charged $1,234.00 to Visa **** 4242"
|
|
182
|
+
actions={
|
|
183
|
+
<Result.Action type="primary">
|
|
184
|
+
Done
|
|
185
|
+
</Result.Action>
|
|
186
|
+
}
|
|
187
|
+
/>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Free `children` (an alert, details) stretch to the full width in this layout.
|
|
191
|
+
|
|
192
|
+
### In a Dialog
|
|
193
|
+
|
|
194
|
+
Inside a `Dialog` the stacked large Result is the whole body: no `Header` and no `Footer`. Its title takes the dialog `title` slot, so the dialog is labelled by it automatically.
|
|
195
|
+
|
|
196
|
+
```jsx
|
|
197
|
+
<DialogContainer isOpen={isOpen} onDismiss={close}>
|
|
198
|
+
<Dialog size="S">
|
|
199
|
+
<Content>
|
|
200
|
+
<Result
|
|
201
|
+
size="large"
|
|
202
|
+
layout="stacked"
|
|
203
|
+
status="success"
|
|
204
|
+
title="Payment complete"
|
|
205
|
+
subtitle="Charged $1,234.00 to Visa **** 4242"
|
|
206
|
+
actions={
|
|
207
|
+
<Result.Action type="primary" onPress={close}>
|
|
208
|
+
Done
|
|
209
|
+
</Result.Action>
|
|
210
|
+
}
|
|
211
|
+
/>
|
|
212
|
+
</Content>
|
|
213
|
+
</Dialog>
|
|
214
|
+
</DialogContainer>
|
|
215
|
+
```
|
|
216
|
+
|
|
67
217
|
### Width Limit
|
|
68
218
|
|
|
69
219
|
The default `width: max 80ch` keeps long copy in a comfortable reading column even inside a much wider parent. Override the cap by passing your own `width`.
|
|
70
220
|
|
|
221
|
+
## Accessibility
|
|
222
|
+
|
|
223
|
+
### Keyboard Navigation
|
|
224
|
+
|
|
225
|
+
- The component itself is not focusable; the `Result.Action` buttons keep the keyboard behavior of `Button`
|
|
226
|
+
|
|
227
|
+
### Screen Reader Support
|
|
228
|
+
|
|
229
|
+
- The title renders as an `h2` heading and the subtitle as an `h3`, so the result is reachable through heading navigation
|
|
230
|
+
- Inside a `Dialog` without a `Header`, the title takes the dialog's `title` slot and becomes its accessible name
|
|
231
|
+
|
|
232
|
+
## Best Practices
|
|
233
|
+
|
|
234
|
+
1. **Do**: Put `Result.Action` buttons in `actions` and keep `children` for content
|
|
235
|
+
|
|
236
|
+
```jsx
|
|
237
|
+
<Result title="Payment failed" actions={<Result.Action>Update card</Result.Action>}>
|
|
238
|
+
<Alert>Nothing was charged.</Alert>
|
|
239
|
+
</Result>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
2. **Don't**: Combine a Result with a dialog `Header`. Both titles would take the dialog `title` slot and share one id
|
|
243
|
+
|
|
244
|
+
```jsx
|
|
245
|
+
<Dialog>
|
|
246
|
+
<Header>
|
|
247
|
+
<Title>Payment</Title>
|
|
248
|
+
</Header>
|
|
249
|
+
<Content>
|
|
250
|
+
<Result size="large" layout="stacked" title="Payment complete" />
|
|
251
|
+
</Content>
|
|
252
|
+
</Dialog>
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Related Components
|
|
256
|
+
|
|
257
|
+
- [Dialog](../overlays/Dialog.md) - Host for the stacked large Result card
|
|
258
|
+
- [AlertDialog](../overlays/AlertDialog.md) - Confirmation with a header and footer instead of a result card
|
|
259
|
+
- [Alert](./Alert.md) - Inline status message for the `children` slot
|
|
260
|
+
|
|
71
261
|
## Differences from Ant Design
|
|
72
262
|
|
|
73
263
|
| There are differences | Ant Design property | Cube UIKit property |
|
|
@@ -76,4 +266,4 @@ The default `width: max 80ch` keeps long copy in a comfortable reading column ev
|
|
|
76
266
|
| No | `title` | `title` |
|
|
77
267
|
| Yes | `subTitle` | `subtitle` |
|
|
78
268
|
| No | `icon` | `icon` |
|
|
79
|
-
| Yes | `extra` |
|
|
269
|
+
| Yes | `extra` | `actions` |
|
|
@@ -11,6 +11,7 @@ A heading component for section titles. Renders as `h1`–`h6` based on the `lev
|
|
|
11
11
|
## Properties
|
|
12
12
|
|
|
13
13
|
- **`level`** `1 | 2 | 3 | 4 | 5 | 6` (default: `1`) — Heading level (maps to `h1`–`h6` tag and corresponding preset `h1`–`h6`)
|
|
14
|
+
- **`slot`** `string` (default: `'title'`) — The slot to read provided props from, e.g. the `title` slot a `Dialog` labels itself with. Pass another name to opt out
|
|
14
15
|
- **`ellipsis`** `boolean` — Truncate overflow with ellipsis
|
|
15
16
|
- **`nowrap`** `boolean` — Prevent text wrapping
|
|
16
17
|
- **`monospace`** `boolean` — Use monospace font
|
|
@@ -142,6 +142,24 @@ Per column, on `CubeDataTableColumn`: `isReorderable`, `color` and `colorScope`
|
|
|
142
142
|
|
|
143
143
|
Presentational, not a Cube type. `number` right-aligns the column and switches it to tabular figures, so digits line up down the column and a total lines up with the rows above it.
|
|
144
144
|
|
|
145
|
+
The figures sit under the column's own `cellStyles`, so those still apply in either form. A function is still called per cell, and its result is merged over the figures.
|
|
146
|
+
|
|
147
|
+
#### Column `cellStyles`
|
|
148
|
+
|
|
149
|
+
Tasty styles for one column's body cells, exactly as in ItemTable: tokens, units, presets and state maps all work, and a state key asks about the cell itself. In the table-level `cellStyles` a bare key asks about the table instead, so a map copied from there that keys on `shape=card` or `column-dividers` matches nothing in a column; `@own(...)` asks about the cell in both. Values read as tasty, not CSS: `paddingLeft: 24` sets all four sides (the others to 0), so set one side with the CSS longhand and a unit (`paddingInlineStart: '24px'`); a bare number takes a unit on tasty's own properties (pass `lineHeight: '1.2'` for a unitless one) but not on plain CSS ones (`borderRadius: '4px'`, or `radius`); colors inside `border` / `outline` must be tokens (`'1px solid #red'`); a vendor key needs its CSS name in quotes (`'-webkit-line-clamp': 2`), since a capitalised `WebkitLineClamp` reads as a sub-element; and `textOverflow: 'ellipsis'` also adds `overflow: hidden` and `white-space: nowrap`. The function form runs per cell with the cell's context, which is how a pinned row is styled apart from the body:
|
|
150
|
+
|
|
151
|
+
```jsx
|
|
152
|
+
{
|
|
153
|
+
key: 'orders',
|
|
154
|
+
title: 'Orders',
|
|
155
|
+
dataType: 'number',
|
|
156
|
+
cellStyles: (ctx) =>
|
|
157
|
+
ctx.section === 'pinnedBottom' ? { color: '#surface-text-soft-2' } : undefined,
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Cells with equal styles share one class, so a function that returns a few distinct objects costs a few classes, however many rows there are. A column's own styles win over the table's cell paint, its `color` tint and the table-level `cellStyles` below.
|
|
162
|
+
|
|
145
163
|
Loading, empty and error states, pagination, footer slots, virtualization, column resize and persistence all behave exactly as they do in `ItemTable` — they come from the shared renderer.
|
|
146
164
|
|
|
147
165
|
### Base Properties
|
|
@@ -144,7 +144,7 @@ interface CubeItemTableColumn<T> {
|
|
|
144
144
|
compare?: (a, b, rowA, rowB) => number; // client-side comparator
|
|
145
145
|
|
|
146
146
|
render?: (value, row, i, ctx) => ReactNode;
|
|
147
|
-
cellStyles?: Styles | ((ctx) => Styles | undefined);
|
|
147
|
+
cellStyles?: Styles | ((ctx) => Styles | undefined); // tasty styles for this column's body cells
|
|
148
148
|
cellProps?: (ctx) => Record<string, any> | undefined;
|
|
149
149
|
|
|
150
150
|
align?: 'start' | 'center' | 'end';
|
|
@@ -156,6 +156,8 @@ interface CubeItemTableColumn<T> {
|
|
|
156
156
|
}
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
+
**`cellStyles` is tasty, not inline CSS.** Tokens, units, presets, recipes and state maps all work, and a state key asks about the cell itself, so `{ color: { '': '#surface-text', '@own(pinned=bottom)': '#surface-text-soft-2' } }` dims only a pinned row. That differs from the table-level `cellStyles` slot, where a bare key asks about the table: a map copied from there that keys on `shape=card` or `column-dividers` matches nothing in a column, while `@own(...)` asks about the cell in both. Values read as tasty too, not CSS: `paddingLeft: 24` sets all four sides (the others to 0), so set one side with the CSS longhand and a unit (`paddingInlineStart: '24px'`); a bare number takes a unit on tasty's own properties (pass `lineHeight: '1.2'` for a unitless one) but not on plain CSS ones (`borderRadius: '4px'`, or `radius`); colors inside `border` / `outline` must be tokens (`'1px solid #red'`); a vendor key needs its CSS name in quotes (`'-webkit-line-clamp': 2`), since a capitalised `WebkitLineClamp` reads as a sub-element; and `textOverflow: 'ellipsis'` also adds `overflow: hidden` and `white-space: nowrap`. The function form runs per cell with the same `ctx` as `render`, for styles that depend on the row: `(ctx) => ctx.row.status === 'failed' ? { color: '#danger-text' } : undefined`. Cells with equal styles share one class, so a function that returns a few distinct objects costs a few classes, not one per cell. A column's own styles win over the table's cell paint, its `color` tint and the table-level `cellStyles`.
|
|
160
|
+
|
|
159
161
|
**The value pipeline is the escape hatch.** `getValue`, `format` and `compare` exist so a column whose displayed text differs from its raw value stays sortable, searchable and copyable. `render` is for appearance only — sorting and searching never see its output, which is why an object-valued column with no `format` renders empty rather than `"[object Object]"`.
|
|
160
162
|
|
|
161
163
|
#### `CubeTableColumnHeader`
|
|
@@ -52,10 +52,56 @@ A combobox component that combines a text input with a dropdown list, allowing u
|
|
|
52
52
|
- **`containerPadding`** `number` (default: `8`) — Minimum padding in pixels between the popover and viewport edges
|
|
53
53
|
- **`onFocus`** `() => void` — Callback fired when focus enters the ComboBox
|
|
54
54
|
- **`onBlur`** `() => void` — Callback fired when focus leaves the ComboBox
|
|
55
|
-
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed on the input
|
|
55
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed on the input, before the component's own key handling. Call `e.preventDefault()` to skip that handling for the key, see **onKeyDown** below
|
|
56
56
|
|
|
57
57
|
#### Notable Properties
|
|
58
58
|
|
|
59
|
+
**onKeyDown** - Runs before ComboBox's own key handling, listed under [Keyboard Navigation](#keyboard-navigation). Calling `e.preventDefault()` takes the key over: ComboBox skips its handling for that event, so a prevented `ArrowDown` does not open the popover or move focus, and a prevented `Enter` does not select the focused option or commit a custom value. Without `preventDefault()` the built-in handling runs as usual after your handler. The event is React Aria's keyboard event (`KeyboardEvent` from `@react-types/shared`), whose propagation stops at the input unless you call `e.continuePropagation()`.
|
|
60
|
+
|
|
61
|
+
```jsx
|
|
62
|
+
<ComboBox
|
|
63
|
+
label="Assignee"
|
|
64
|
+
onKeyDown={(e) => {
|
|
65
|
+
// Enter is ours while the popover is closed
|
|
66
|
+
if (e.key === 'Enter' && !isOpen) {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
submit();
|
|
69
|
+
}
|
|
70
|
+
}}
|
|
71
|
+
onOpenChange={setIsOpen}
|
|
72
|
+
>
|
|
73
|
+
{users.map((user) => (
|
|
74
|
+
<ComboBox.Item key={user.id}>{user.name}</ComboBox.Item>
|
|
75
|
+
))}
|
|
76
|
+
</ComboBox>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Enter inside a form.** `preventDefault()` stops the browser's form submission and ComboBox's own handling together; it cannot stop just one. With `allowsCustomValue`, the popover closed and text that matches no option, the built-in `Enter` commits the typed value and lets the event through, so the surrounding form submits. A handler that prevents that `Enter` stops both: the form does not submit, and the value is not committed until the input loses focus (when `shouldCommitOnBlur` is on, the default). In earlier versions such a handler stopped only the submit, and the value was still committed on `Enter`. To keep that behavior, commit the value in your handler:
|
|
80
|
+
|
|
81
|
+
```jsx
|
|
82
|
+
const [selectedKey, setSelectedKey] = useState(null);
|
|
83
|
+
|
|
84
|
+
<ComboBox
|
|
85
|
+
allowsCustomValue
|
|
86
|
+
label="Tag"
|
|
87
|
+
selectedKey={selectedKey}
|
|
88
|
+
onSelectionChange={setSelectedKey}
|
|
89
|
+
onKeyDown={(e) => {
|
|
90
|
+
if (e.key === 'Enter' && !isOpen) {
|
|
91
|
+
// Stops the form submit and the built-in commit
|
|
92
|
+
e.preventDefault();
|
|
93
|
+
// so commit the typed value here
|
|
94
|
+
setSelectedKey(e.currentTarget.value.trim() || null);
|
|
95
|
+
}
|
|
96
|
+
}}
|
|
97
|
+
onOpenChange={setIsOpen}
|
|
98
|
+
>
|
|
99
|
+
{tags.map((tag) => (
|
|
100
|
+
<ComboBox.Item key={tag}>{tag}</ComboBox.Item>
|
|
101
|
+
))}
|
|
102
|
+
</ComboBox>;
|
|
103
|
+
```
|
|
104
|
+
|
|
59
105
|
**defaultInputValue** - Sets the initial input value in uncontrolled mode. This is useful when you want to display a specific text in the input field on mount without selecting any option. When both `defaultInputValue` and `defaultSelectedKey` are provided, `defaultInputValue` takes priority. The value can be changed by the user and is not enforced after initial render.
|
|
60
106
|
|
|
61
107
|
**sortSelectedToTop** - When using the `items` prop (data-driven mode), the selected item will automatically appear at the top of the list when the popover opens. This is enabled by default when using `items`, but disabled when using JSX children. Set to `false` to maintain the original order.
|
|
@@ -524,6 +570,8 @@ const [selectedKey, setSelectedKey] = useState(null);
|
|
|
524
570
|
- `End` - Moves focus to the last option (when popover is open)
|
|
525
571
|
- Typing - Filters options based on input value
|
|
526
572
|
|
|
573
|
+
An `onKeyDown` handler runs before all of these and can skip any of them for a key by calling `e.preventDefault()`.
|
|
574
|
+
|
|
527
575
|
### Screen Reader Support
|
|
528
576
|
|
|
529
577
|
- Input announces as "combobox" with appropriate expanded/collapsed state
|
|
@@ -166,7 +166,7 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
166
166
|
The `mods` property accepts the following modifiers you can override:
|
|
167
167
|
|
|
168
168
|
- **`placeholder`** `boolean` — Applied when no selection is made
|
|
169
|
-
- **`selected`** `boolean` —
|
|
169
|
+
- **`selected`** `boolean` — Not set by the component. Pass `mods={{ selected: true }}` to give the trigger its brand-tinted selected fill, e.g. while a filter is active. Holding a value doesn't set it
|
|
170
170
|
|
|
171
171
|
## Sub-components
|
|
172
172
|
|
|
@@ -324,8 +324,8 @@ const categories = [
|
|
|
324
324
|
|
|
325
325
|
### Button Types
|
|
326
326
|
|
|
327
|
-
- `outline` - Default outlined button style; `
|
|
328
|
-
- `clear` - Transparent background button; `
|
|
327
|
+
- `outline` - Default outlined button style; `mods={{ selected: true }}` adds a brand-tinted fill
|
|
328
|
+
- `clear` - Transparent background button; `mods={{ selected: true }}` adds a brand-tinted fill
|
|
329
329
|
- `primary` - Primary brand color button
|
|
330
330
|
|
|
331
331
|
### Sizes
|
|
@@ -38,6 +38,31 @@ A number input component that allows users to enter numeric values and increment
|
|
|
38
38
|
- **`onChange`** `function` — Callback fired when the input value changes
|
|
39
39
|
- **`onBlur`** `function` — Callback fired when the input loses focus
|
|
40
40
|
- **`onFocus`** `function` — Callback fired when the input receives focus
|
|
41
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed in the input. See [Keyboard Events](#keyboard-events)
|
|
42
|
+
- **`onKeyUp`** `(e: KeyboardEvent) => void` — Callback fired when a key is released in the input
|
|
43
|
+
|
|
44
|
+
#### Keyboard Events
|
|
45
|
+
|
|
46
|
+
`onKeyDown` and `onKeyUp` are attached to the `<input>` by React Aria's `useNumberField`, which handles some keys itself and runs that handling **before** your `onKeyDown`:
|
|
47
|
+
|
|
48
|
+
- `ArrowUp` / `ArrowDown` and `PageUp` / `PageDown` step the value, unless a modifier key is held
|
|
49
|
+
- `Home` / `End` set the value to `minValue` / `maxValue`, when those are set
|
|
50
|
+
- `Enter` commits the typed number, firing `onChange` when the value changed
|
|
51
|
+
|
|
52
|
+
Because they run first, `e.preventDefault()` in `onKeyDown` cannot cancel them: it cancels only what the browser would do with the key, such as submitting a surrounding form on `Enter`. That makes NumberInput the exception among the fields with built-in key handling (`ComboBox`, `SearchComboBox`, `TagInput` and `CommandTextArea` run your handler first and skip their own handling for a key you prevent), and it is what makes an `Enter` handler work here: by the time it runs, the typed number is committed and any `onChange` for it has fired.
|
|
53
|
+
|
|
54
|
+
```jsx
|
|
55
|
+
<NumberInput
|
|
56
|
+
label="Limit"
|
|
57
|
+
onChange={setLimit}
|
|
58
|
+
onKeyDown={(e) => {
|
|
59
|
+
// `onChange` has already been called with the committed number.
|
|
60
|
+
if (e.key === 'Enter') onCommit();
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The handler receives React Aria's keyboard event rather than a plain React one. Keys other than `Enter` continue to ancestors as usual; `Enter` stops at the input unless you call `e.continuePropagation()`.
|
|
41
66
|
|
|
42
67
|
### Base Properties
|
|
43
68
|
|
|
@@ -137,7 +162,9 @@ The `mods` prop accepts the following modifiers you can override:
|
|
|
137
162
|
- `Tab` – Moves focus to the input field
|
|
138
163
|
- `Shift + Tab` – Moves focus away from the input
|
|
139
164
|
- Arrow keys – Increment/decrement value
|
|
165
|
+
- `PageUp`/`PageDown` – Increment/decrement value
|
|
140
166
|
- `Home`/`End` – Set to min/max value
|
|
167
|
+
- `Enter` – Commits the typed value
|
|
141
168
|
- Standard text editing shortcuts
|
|
142
169
|
|
|
143
170
|
### Screen Reader Support
|
|
@@ -31,6 +31,30 @@ A password input is a specialized text field that masks user input to protect se
|
|
|
31
31
|
- **`onChange`** `function` — Callback fired when the input value changes
|
|
32
32
|
- **`onBlur`** `function` — Callback fired when the input loses focus
|
|
33
33
|
- **`onFocus`** `function` — Callback fired when the input receives focus
|
|
34
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed in the input. See [Keyboard Events](#keyboard-events)
|
|
35
|
+
- **`onKeyUp`** `(e: KeyboardEvent) => void` — Callback fired when a key is released in the input
|
|
36
|
+
|
|
37
|
+
#### Keyboard Events
|
|
38
|
+
|
|
39
|
+
`onKeyDown` and `onKeyUp` are attached to the `<input>` by React Aria's `useTextField`. PasswordInput has no key handling of its own, so the handler simply receives the event: `e.preventDefault()` cancels only what the browser would do with the key, such as typing the character or submitting a surrounding form on `Enter`. The visibility toggle is a separate button and never sees the input's keys.
|
|
40
|
+
|
|
41
|
+
The handler receives React Aria's keyboard event rather than a plain React one, and once you pass `onKeyDown` the key stops at the input: React Aria stops its propagation after your handler. A parent's `onKeyDown` no longer sees it, and neither does a surrounding `Dialog`, so `Escape` stops closing it. Call `e.continuePropagation()` for the keys that should travel on:
|
|
42
|
+
|
|
43
|
+
```jsx
|
|
44
|
+
<PasswordInput
|
|
45
|
+
label="Password"
|
|
46
|
+
onKeyDown={(e) => {
|
|
47
|
+
if (e.key === 'Enter') {
|
|
48
|
+
e.preventDefault(); // keep a surrounding form from submitting
|
|
49
|
+
signIn();
|
|
50
|
+
} else {
|
|
51
|
+
e.continuePropagation(); // let Escape still close a Dialog
|
|
52
|
+
}
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The fields that do handle keys themselves (`ComboBox`, `SearchComboBox`, `TagInput`, `CommandTextArea`) run your `onKeyDown` first and skip their own handling for a key you prevent. `NumberInput` is the exception: React Aria runs its stepping and `Enter` commit before your handler.
|
|
34
58
|
|
|
35
59
|
### Base Properties
|
|
36
60
|
|
|
@@ -155,7 +155,7 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
155
155
|
The `mods` property accepts the following modifiers you can override:
|
|
156
156
|
|
|
157
157
|
- **`placeholder`** `boolean` — Applied when no selection is made
|
|
158
|
-
- **`selected`** `boolean` —
|
|
158
|
+
- **`selected`** `boolean` — Not set by the component. Pass `mods={{ selected: true }}` to give the trigger its brand-tinted selected fill, e.g. while a filter is active. Holding a value doesn't set it
|
|
159
159
|
|
|
160
160
|
## Sub-components
|
|
161
161
|
|
|
@@ -324,8 +324,8 @@ For large datasets or dynamic content, use the `items` prop with a render functi
|
|
|
324
324
|
|
|
325
325
|
The trigger button supports various visual styles via the `type` prop:
|
|
326
326
|
|
|
327
|
-
- **`outline`** (default) — Outlined button with border. Use case: Standard form inputs. `
|
|
328
|
-
- **`clear`** — Transparent background. Use case: Toolbar actions, compact interfaces. `
|
|
327
|
+
- **`outline`** (default) — Outlined button with border. Use case: Standard form inputs. `mods={{ selected: true }}` adds a brand-tinted fill.
|
|
328
|
+
- **`clear`** — Transparent background. Use case: Toolbar actions, compact interfaces. `mods={{ selected: true }}` adds a brand-tinted fill.
|
|
329
329
|
- **`primary`** — Primary brand color. Use case: Emphasized selections
|
|
330
330
|
|
|
331
331
|
### Trigger Button Themes
|
|
@@ -46,7 +46,7 @@ Choose a different component when the interaction has another outcome:
|
|
|
46
46
|
- **`onOpenChange`** `(isOpen: boolean) => void` — Fired when the popover opens or closes
|
|
47
47
|
- **`onFocus`** `() => void` — Fired when focus enters the component
|
|
48
48
|
- **`onBlur`** `() => void` — Fired when focus leaves the component
|
|
49
|
-
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Fired when a key is pressed on the input
|
|
49
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Fired when a key is pressed on the input, before the component's own key handling. Call `e.preventDefault()` to skip that handling for the key: a prevented `Enter` selects nothing and does not call `onSubmit`, a prevented `ArrowDown` does not open the popover. The event is React Aria's keyboard event, whose propagation stops at the input unless the handler calls `e.continuePropagation()`
|
|
50
50
|
- **`prefix`** `ReactNode` — Content rendered before the input
|
|
51
51
|
- **`suffix`** `ReactNode` — Content rendered after the input
|
|
52
52
|
- **`suffixPosition`** `'before' | 'after'` (default: `before`) — Position of suffix relative to status icons
|
|
@@ -229,6 +229,8 @@ useEffect(() => {
|
|
|
229
229
|
- `Home` / `End` - Moves focus to the first / last suggestion (when the popover is open)
|
|
230
230
|
- Typing - Filters suggestions based on the input value
|
|
231
231
|
|
|
232
|
+
An `onKeyDown` handler runs before all of these and can skip any of them for a key by calling `e.preventDefault()`.
|
|
233
|
+
|
|
232
234
|
### ARIA Properties
|
|
233
235
|
|
|
234
236
|
- `role="combobox"` - Identifies the input as a combobox
|
|
@@ -377,13 +377,15 @@ const [recipients, setRecipients] = useState(['ana@acme.com']);
|
|
|
377
377
|
- 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
|
|
378
378
|
- Focus on a chip reads its label, its position and React Aria's hint to press Delete or Backspace to remove it
|
|
379
379
|
- 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
|
|
380
|
-
- The chips are a grid
|
|
380
|
+
- The chips, the popover trigger, the clear button and the options listbox are named after the field, however the field is named. With a visible label or `aria-labelledby`, they point at the same elements: the grid reads "Selected values" followed by the field's name, the trigger "Show options" followed by it, and the listbox the field's name alone. An `aria-label` has no element to point at, so its text is joined in: "Selected values, …", "Show options, …", "Clear text, …", and the listbox takes the `aria-label`. Next to a visible label or `aria-labelledby` it comes first, as it does on the input itself: with `aria-label="Values"` and `aria-labelledby` pointing at "Primary key", the input reads "Values Primary key" and the grid "Selected values, Values Primary key". Each row of a table whose fields are labelled by a header and a row cell so gets its own names
|
|
381
|
+
- 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
|
|
381
382
|
- 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
|
|
382
383
|
- 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
|
|
383
|
-
- The clear button is named "Clear text" followed by the field's
|
|
384
|
+
- The clear button is named "Clear text" followed by the field's name. Escape does the same from the keyboard
|
|
384
385
|
|
|
385
386
|
### ARIA Properties
|
|
386
387
|
|
|
388
|
+
- `aria-label` / `aria-labelledby` - Name the input when there is no visible label, and through it the chips, the buttons and the listbox. Pass one of them, or `label`
|
|
387
389
|
- `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`
|
|
388
390
|
- `aria-invalid` - Set while a typed value is rejected, or when the field is invalid
|
|
389
391
|
- `role="combobox"`, `aria-expanded`, `aria-controls`, `aria-activedescendant`, `aria-autocomplete="list"` - Set when options are given. `aria-activedescendant` follows both arrow keys and clicks
|
|
@@ -59,6 +59,30 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
59
59
|
- **`onChange`** `function` — Callback fired when the input value changes
|
|
60
60
|
- **`onBlur`** `function` — Callback fired when the input loses focus
|
|
61
61
|
- **`onFocus`** `function` — Callback fired when the input receives focus
|
|
62
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed in the textarea. See [Keyboard Events](#keyboard-events)
|
|
63
|
+
- **`onKeyUp`** `(e: KeyboardEvent) => void` — Callback fired when a key is released in the textarea
|
|
64
|
+
|
|
65
|
+
### Keyboard Events
|
|
66
|
+
|
|
67
|
+
`onKeyDown` and `onKeyUp` are attached to the `<textarea>` by React Aria's `useTextField`. TextArea has no key handling of its own, so the handler simply receives the event: `e.preventDefault()` cancels only what the browser would do with the key, such as inserting a newline on `Enter`.
|
|
68
|
+
|
|
69
|
+
The handler receives React Aria's keyboard event rather than a plain React one, and once you pass `onKeyDown` the key stops at the textarea: React Aria stops its propagation after your handler. A parent's `onKeyDown` no longer sees it, and neither does a surrounding `Dialog`, so `Escape` stops closing it. Call `e.continuePropagation()` for the keys that should travel on:
|
|
70
|
+
|
|
71
|
+
```jsx
|
|
72
|
+
<TextArea
|
|
73
|
+
label="Comment"
|
|
74
|
+
onKeyDown={(e) => {
|
|
75
|
+
if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {
|
|
76
|
+
e.preventDefault(); // no newline
|
|
77
|
+
send();
|
|
78
|
+
} else {
|
|
79
|
+
e.continuePropagation(); // let Escape still close a Dialog
|
|
80
|
+
}
|
|
81
|
+
}}
|
|
82
|
+
/>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The fields that do handle keys themselves (`ComboBox`, `SearchComboBox`, `TagInput`, `CommandTextArea`) run your `onKeyDown` first and skip their own handling for a key you prevent. `NumberInput` is the exception: React Aria runs its stepping and `Enter` commit before your handler.
|
|
62
86
|
|
|
63
87
|
### Base Properties
|
|
64
88
|
|
|
@@ -39,6 +39,30 @@ A text input component that allows users to input custom text entries with a key
|
|
|
39
39
|
- **`onChange`** `function` — Callback fired when the input value changes
|
|
40
40
|
- **`onBlur`** `function` — Callback fired when the input loses focus
|
|
41
41
|
- **`onFocus`** `function` — Callback fired when the input receives focus
|
|
42
|
+
- **`onKeyDown`** `(e: KeyboardEvent) => void` — Callback fired when a key is pressed in the input. See [Keyboard Events](#keyboard-events)
|
|
43
|
+
- **`onKeyUp`** `(e: KeyboardEvent) => void` — Callback fired when a key is released in the input
|
|
44
|
+
|
|
45
|
+
#### Keyboard Events
|
|
46
|
+
|
|
47
|
+
`onKeyDown` and `onKeyUp` are attached to the `<input>` by React Aria's `useTextField`. TextInput has no key handling of its own, so the handler simply receives the event: `e.preventDefault()` cancels only what the browser would do with the key, such as typing the character or submitting a surrounding form on `Enter`.
|
|
48
|
+
|
|
49
|
+
The handler receives React Aria's keyboard event rather than a plain React one, and once you pass `onKeyDown` the key stops at the input: React Aria stops its propagation after your handler. A parent's `onKeyDown` no longer sees it, and neither does a surrounding `Dialog`, so `Escape` stops closing it. Call `e.continuePropagation()` for the keys that should travel on:
|
|
50
|
+
|
|
51
|
+
```jsx
|
|
52
|
+
<TextInput
|
|
53
|
+
label="Name"
|
|
54
|
+
onKeyDown={(e) => {
|
|
55
|
+
if (e.key === 'Enter') {
|
|
56
|
+
e.preventDefault(); // keep a surrounding form from submitting
|
|
57
|
+
commit();
|
|
58
|
+
} else {
|
|
59
|
+
e.continuePropagation(); // let Escape still close a Dialog
|
|
60
|
+
}
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The fields that do handle keys themselves (`ComboBox`, `SearchComboBox`, `TagInput`, `CommandTextArea`) run your `onKeyDown` first and skip their own handling for a key you prevent. `NumberInput` is the exception: React Aria runs its stepping and `Enter` commit before your handler.
|
|
42
66
|
|
|
43
67
|
### Base Properties
|
|
44
68
|
|
|
@@ -203,13 +203,18 @@ The `width` style prop (inherited from Item) is useful for file-style tabs where
|
|
|
203
203
|
|
|
204
204
|
Optional wrapper for tabs when using explicit panel placement.
|
|
205
205
|
|
|
206
|
+
- **`qa`** `string` — `data-qa` attribute on the `role="tablist"` element
|
|
207
|
+
- **`qaVal`** `string` — `data-qaval` attribute on the `role="tablist"` element
|
|
208
|
+
|
|
206
209
|
```jsx
|
|
207
|
-
<Tabs.List>
|
|
210
|
+
<Tabs.List qa="ReportTabs">
|
|
208
211
|
<Tab key="tab1" title="Tab 1" />
|
|
209
212
|
<Tab key="tab2" title="Tab 2" />
|
|
210
213
|
</Tabs.List>
|
|
211
214
|
```
|
|
212
215
|
|
|
216
|
+
`Tabs.List` also works without `Tabs.Panel`, so wrap the tabs in it whenever a test needs a stable selector for the tab list. The `qa` prop on `Tabs` itself lands on the outer wrapper, not on the tab list.
|
|
217
|
+
|
|
213
218
|
### Tabs.Panel
|
|
214
219
|
|
|
215
220
|
Explicit panel definition for advanced layout control.
|
|
@@ -676,7 +681,7 @@ When both are in the same slot:
|
|
|
676
681
|
|
|
677
682
|
### Navigation-Only Tabs
|
|
678
683
|
|
|
679
|
-
Use tabs without panel content for navigation purposes.
|
|
684
|
+
Use tabs without panel content for navigation purposes. Use this only when each tab leads to a different page or route; content that belongs to a tab goes in a panel (`renderPanel` or `Tab` children), so the tab can point screen readers at it.
|
|
680
685
|
|
|
681
686
|
```jsx
|
|
682
687
|
const [view, setView] = useState('overview');
|
|
@@ -877,7 +882,7 @@ When `Tabs` is rendered inside a [`Board`](../layout/Board.md), tab switching be
|
|
|
877
882
|
- `aria-label` - Set via `label` prop on Tabs
|
|
878
883
|
- `aria-selected` - Managed automatically for active tab
|
|
879
884
|
- `aria-disabled` - Applied when `isDisabled` is true
|
|
880
|
-
- `aria-controls` - Links
|
|
885
|
+
- `aria-controls` - Links the selected tab to its panel automatically; omitted for a tab that has no panel
|
|
881
886
|
- `aria-labelledby` - Links panels to their tabs automatically
|
|
882
887
|
- `aria-haspopup` - Set to "menu" when tab has a menu
|
|
883
888
|
|