@cube-dev/ui-kit 0.155.0 → 0.157.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/dist/CHANGELOG.md +284 -0
- package/dist/_internal/hooks/use-chained-callback.js +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.d.ts +10 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +4 -3
- 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/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +42 -44
- package/dist/components/actions/use-context-menu.js.map +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +2 -2
- 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.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.d.ts +13 -0
- package/dist/components/data/DataTable/DataTable.js +246 -0
- package/dist/components/data/DataTable/DataTable.js.map +1 -0
- package/dist/components/data/DataTable/index.d.ts +3 -0
- package/dist/components/data/DataTable/types.d.ts +145 -0
- package/dist/components/data/ItemTable/ItemTable.d.ts +19 -0
- package/dist/components/data/ItemTable/ItemTable.js +350 -0
- package/dist/components/data/ItemTable/ItemTable.js.map +1 -0
- package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +23 -0
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +131 -0
- package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -0
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +46 -0
- package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -0
- package/dist/components/data/ItemTable/ItemTableFooter.js +79 -0
- package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -0
- package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +34 -0
- package/dist/components/data/ItemTable/ItemTableToolbar.js +91 -0
- package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -0
- package/dist/components/data/ItemTable/index.d.ts +4 -0
- package/dist/components/data/ItemTable/types.d.ts +327 -0
- package/dist/components/data/TableBase/ColumnResizer.js +70 -0
- package/dist/components/data/TableBase/ColumnResizer.js.map +1 -0
- package/dist/components/data/TableBase/RowCollection.js +99 -0
- package/dist/components/data/TableBase/RowCollection.js.map +1 -0
- package/dist/components/data/TableBase/TableRow.js +89 -0
- package/dist/components/data/TableBase/TableRow.js.map +1 -0
- package/dist/components/data/TableBase/TableView.d.ts +22 -0
- package/dist/components/data/TableBase/TableView.js +921 -0
- package/dist/components/data/TableBase/TableView.js.map +1 -0
- package/dist/components/data/TableBase/index.d.ts +5 -0
- package/dist/components/data/TableBase/row-menu.js +40 -0
- package/dist/components/data/TableBase/row-menu.js.map +1 -0
- package/dist/components/data/TableBase/styled.d.ts +5 -0
- package/dist/components/data/TableBase/styled.js +532 -0
- package/dist/components/data/TableBase/styled.js.map +1 -0
- package/dist/components/data/TableBase/types.d.ts +160 -0
- package/dist/components/data/TableBase/types.js +31 -0
- package/dist/components/data/TableBase/types.js.map +1 -0
- package/dist/components/data/TableBase/use-cell-selection.d.ts +3 -0
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-cell-selection.js.map +1 -0
- package/dist/components/data/TableBase/use-container-width.js +35 -0
- package/dist/components/data/TableBase/use-container-width.js.map +1 -0
- package/dist/components/data/TableBase/use-row-move-animation.js +90 -0
- package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -0
- package/dist/components/data/TableBase/use-scrollability.js +49 -0
- package/dist/components/data/TableBase/use-scrollability.js.map +1 -0
- package/dist/components/data/TableBase/use-table-columns.d.ts +2 -0
- package/dist/components/data/TableBase/use-table-columns.js +166 -0
- package/dist/components/data/TableBase/use-table-columns.js.map +1 -0
- package/dist/components/data/TableBase/use-table-search.js +64 -0
- package/dist/components/data/TableBase/use-table-search.js.map +1 -0
- package/dist/components/data/TableBase/use-table-selection.d.ts +4 -0
- package/dist/components/data/TableBase/use-table-selection.js +233 -0
- package/dist/components/data/TableBase/use-table-selection.js.map +1 -0
- package/dist/components/data/TableBase/use-table-sort.js +91 -0
- package/dist/components/data/TableBase/use-table-sort.js.map +1 -0
- package/dist/components/data/TableBase/use-table-sorts.js +97 -0
- package/dist/components/data/TableBase/use-table-sorts.js.map +1 -0
- package/dist/components/data/TableBase/use-table-storage.d.ts +8 -0
- package/dist/components/data/TableBase/use-table-storage.js +58 -0
- package/dist/components/data/TableBase/use-table-storage.js.map +1 -0
- package/dist/components/data/index.d.ts +10 -0
- 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.d.ts +67 -0
- package/dist/components/fields/ColorInput/ColorInput.js +230 -0
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
- package/dist/components/fields/ColorInput/index.d.ts +2 -0
- package/dist/components/fields/ColorPicker/ColorPicker.d.ts +64 -0
- package/dist/components/fields/ColorPicker/ColorPicker.js +189 -0
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -0
- package/dist/components/fields/ColorPicker/index.d.ts +2 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +269 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
- package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -3
- package/dist/components/fields/FilterListBox/FilterListBox.js +8 -6
- package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +6 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +2 -2
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.d.ts +7 -0
- package/dist/components/fields/ListBox/ListBox.js +4 -3
- package/dist/components/fields/ListBox/ListBox.js.map +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +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.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -2
- package/dist/components/fields/PasswordInput/PasswordInput.js +12 -2
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +6 -1
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
- package/dist/components/fields/RadioGroup/Radio.js +4 -4
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.d.ts +2 -2
- package/dist/components/fields/SearchInput/SearchInput.js +17 -4
- package/dist/components/fields/SearchInput/SearchInput.js.map +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/TextArea/TextArea.d.ts +2 -2
- package/dist/components/fields/TextArea/TextArea.js +12 -5
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
- package/dist/components/fields/TextInput/TextInput.js +15 -3
- package/dist/components/fields/TextInput/TextInput.js.map +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +17 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInput/index.d.ts +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +152 -0
- package/dist/components/fields/color/ColorPanel.js.map +1 -0
- package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
- package/dist/components/fields/color/ColorSwatch.js +58 -0
- package/dist/components/fields/color/ColorSwatch.js.map +1 -0
- package/dist/components/fields/color/channels.d.ts +13 -0
- package/dist/components/fields/color/channels.js +194 -0
- package/dist/components/fields/color/channels.js.map +1 -0
- package/dist/components/fields/color/color.d.ts +21 -0
- package/dist/components/fields/color/color.js +282 -0
- package/dist/components/fields/color/color.js.map +1 -0
- package/dist/components/fields/color/context.js +20 -0
- package/dist/components/fields/color/context.js.map +1 -0
- package/dist/components/fields/color/index.d.ts +4 -0
- package/dist/components/fields/index.d.ts +11 -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/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/index.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/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.d.ts +26 -0
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.d.ts +55 -1
- package/dist/components/layout/Board/Board.js +278 -75
- 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.d.ts +16 -0
- package/dist/components/layout/Board/Widget.js +6 -3
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +81 -14
- 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-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.js +2 -2
- package/dist/components/layout/Board/board-store.js.map +1 -1
- package/dist/components/layout/Board/grid-core/calculate.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 +132 -0
- package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.d.ts +2 -1
- package/dist/components/layout/Board/index.js +2 -2
- package/dist/components/layout/Board/index.js.map +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +17 -12
- package/dist/components/layout/Board/use-board-layout.js.map +1 -1
- package/dist/components/layout/Board/use-board-registry.js +139 -20
- package/dist/components/layout/Board/use-board-registry.js.map +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
- package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
- package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
- package/dist/components/layout/Board/use-board-selection.js +113 -0
- package/dist/components/layout/Board/use-board-selection.js.map +1 -0
- 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.d.ts +9 -0
- package/dist/components/navigation/Pagination/Pagination.js +258 -0
- package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
- package/dist/components/navigation/Pagination/index.d.ts +4 -0
- package/dist/components/navigation/Pagination/types.d.ts +81 -0
- package/dist/components/navigation/Pagination/use-pagination.d.ts +52 -0
- package/dist/components/navigation/Pagination/use-pagination.js +83 -0
- package/dist/components/navigation/Pagination/use-pagination.js.map +1 -0
- 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/navigation/index.d.ts +5 -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/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.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/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/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 +24 -8
- package/dist/components/shared/DraggableCollection.js.map +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 +227 -5
- 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 +44 -1
- package/dist/i18n/locales/en-US/uikit.js +44 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +49 -1
- package/dist/i18n/locales/es-ES/uikit.js +44 -1
- package/dist/i18n/locales/es-MX/uikit.js +44 -1
- package/dist/i18n/locales/fr-FR/uikit.js +44 -1
- package/dist/i18n/locales/it-IT/uikit.js +44 -1
- package/dist/i18n/locales/ja-JP/uikit.js +44 -1
- package/dist/i18n/locales/nb-NO/uikit.js +44 -1
- package/dist/i18n/locales/pt-BR/uikit.js +44 -1
- package/dist/i18n/locales/pt-PT/uikit.js +44 -1
- package/dist/i18n/locales/sv-SE/uikit.js +44 -1
- package/dist/i18n/locales/vi-VN/uikit.js +44 -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/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.d.ts +12 -0
- package/dist/icons/PipetteIcon.js +11 -0
- package/dist/icons/PipetteIcon.js.map +1 -0
- 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/index.d.ts +1 -0
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +31 -12
- package/dist/index.js +24 -11
- package/dist/index.js.map +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/base.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.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 -1
- package/dist/tokens/typography.js +11 -2
- package/dist/tokens/typography.js.map +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/index.d.ts +1 -0
- 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/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.d.ts +1 -0
- package/dist/utils/react/index.js +2 -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/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.d.ts +56 -0
- package/dist/utils/react/useBufferedValue.js +86 -0
- package/dist/utils/react/useBufferedValue.js.map +1 -0
- 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/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/components/actions/ButtonGroup.md +1 -1
- package/docs/components/data/DataTable.md +298 -0
- package/docs/components/data/ItemTable.md +984 -0
- package/docs/components/fields/ColorInput.md +284 -0
- package/docs/components/fields/ColorPicker.md +212 -0
- package/docs/components/fields/ColorSwatchGroup.md +206 -0
- package/docs/components/fields/FilterPicker.md +1 -1
- package/docs/components/fields/ListBox.md +4 -0
- package/docs/components/fields/PasswordInput.md +1 -0
- package/docs/components/fields/Picker.md +1 -1
- package/docs/components/fields/SearchInput.md +1 -0
- package/docs/components/fields/TextArea.md +1 -0
- package/docs/components/fields/TextInput.md +1 -0
- package/docs/components/layout/Board.md +154 -6
- package/docs/components/navigation/Pagination.md +245 -0
- package/package.json +8 -3
- package/dist/components/organisms/FileTabs/FileTabs.d.ts +0 -54
- package/dist/components/organisms/FileTabs/FileTabs.js +0 -282
- package/dist/components/organisms/FileTabs/FileTabs.js.map +0 -1
- package/docs/components/organisms/FileTabs.md +0 -51
|
@@ -32,7 +32,7 @@ Choose a different component when the interaction has another shape:
|
|
|
32
32
|
- **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow entering custom values that are not present in the predefined options
|
|
33
33
|
- **`isClearable`** `boolean` (default: `false`) — Whether the filter picker is clearable using a clear button in the rightIcon slot
|
|
34
34
|
- **`isLoadingItems`** `boolean` (default: `false`) — Whether items are currently loading. Shows a loading spinner in the search input suffix inside the popover. Unlike `isLoading`, does not disable the trigger.
|
|
35
|
-
- **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
|
|
35
|
+
- **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
|
|
36
36
|
- **`disabledKeys`** `Key[]` — Array of keys for disabled items
|
|
37
37
|
- **`items`** `Iterable<T>` — Array of items to render when using the render function pattern for large datasets with dynamic content
|
|
38
38
|
- **`placeholder`** `string` — Placeholder text when no selection is made
|
|
@@ -147,6 +147,10 @@ The `mods` property accepts the following modifiers you can override:
|
|
|
147
147
|
- When `true`, prevents the user from deselecting the last selected item
|
|
148
148
|
- Ensures at least one item is always selected in single selection mode
|
|
149
149
|
|
|
150
|
+
**allowDuplicateSelectionEvents** (`boolean`, default: `false`)
|
|
151
|
+
- When `true`, `onSelectionChange` fires even when the new selection equals the current one (React Stately suppresses such duplicate events by default)
|
|
152
|
+
- Used by popover-based wrappers (Picker, FilterPicker) together with `disallowEmptySelection` to close the popover when the user re-selects the current item
|
|
153
|
+
|
|
150
154
|
**disableSelectionToggle** (`boolean`, default: `false`)
|
|
151
155
|
- When `true`, clicking an already-selected item keeps it selected instead of toggling it off
|
|
152
156
|
- Useful when embedding ListBox inside components like ComboBox
|
|
@@ -18,6 +18,7 @@ A password input is a specialized text field that masks user input to protect se
|
|
|
18
18
|
|
|
19
19
|
- **`value`** `string` — The password value in controlled mode
|
|
20
20
|
- **`defaultValue`** `string` — The default password value in uncontrolled mode
|
|
21
|
+
- **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
|
|
21
22
|
- **`placeholder`** `string` — Placeholder text when input is empty
|
|
22
23
|
- **`icon`** — Icon element rendered before the input
|
|
23
24
|
- **`prefix`** — Input decoration before the main input
|
|
@@ -45,7 +45,7 @@ Choose a different component when the interaction has another shape:
|
|
|
45
45
|
- **`isCheckable`** `boolean` (default: `false`) — Whether to show checkboxes for multiple selection mode
|
|
46
46
|
- **`showSelectAll`** `boolean` (default: `false`) — Whether to show "Select All" option in multiple selection mode
|
|
47
47
|
- **`selectAllLabel`** `ReactNode` (default: `Select All`) — Label for the "Select All" option
|
|
48
|
-
- **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
|
|
48
|
+
- **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
|
|
49
49
|
- **`disabledKeys`** `Key[]` — Array of keys for disabled items
|
|
50
50
|
- **`isClearable`** `boolean` (default: `false`) — Whether the picker shows a clear button when a selection is made
|
|
51
51
|
- **`onClear`** `() => void` — Callback called when the clear button is pressed
|
|
@@ -18,6 +18,7 @@ A search input provides a specialized text field for search functionality, featu
|
|
|
18
18
|
|
|
19
19
|
- **`value`** `string` — The search value in controlled mode
|
|
20
20
|
- **`defaultValue`** `string` — The default search value in uncontrolled mode
|
|
21
|
+
- **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
|
|
21
22
|
- **`placeholder`** `string` — Placeholder text when input is empty
|
|
22
23
|
- **`icon`** `ReactElement` — Icon element rendered before the input (default: search icon)
|
|
23
24
|
- **`prefix`** `ReactNode` — Content rendered before the input
|
|
@@ -39,6 +39,7 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
39
39
|
- **`rows`** `number` (default: `3`) — Number of visible text rows
|
|
40
40
|
- **`value`** `string` — The text value in controlled mode
|
|
41
41
|
- **`defaultValue`** `string` — The default text value in uncontrolled mode
|
|
42
|
+
- **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
|
|
42
43
|
- **`placeholder`** `string` — Placeholder text when input is empty
|
|
43
44
|
- **`icon`** `ReactElement` — Icon element rendered before the input
|
|
44
45
|
- **`prefix`** `ReactNode` — Input decoration before the main input
|
|
@@ -18,6 +18,7 @@ A text input component that allows users to input custom text entries with a key
|
|
|
18
18
|
|
|
19
19
|
- **`value`** `string` — The text value in controlled mode
|
|
20
20
|
- **`defaultValue`** `string` — The default text value in uncontrolled mode
|
|
21
|
+
- **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
|
|
21
22
|
- **`placeholder`** `string` — Placeholder text when input is empty
|
|
22
23
|
- **`icon`** — Icon element rendered before the input
|
|
23
24
|
- **`prefix`** — Input decoration before the main input
|
|
@@ -32,6 +32,16 @@ clipped by an ancestor's `overflow: hidden`.
|
|
|
32
32
|
widget is placed exactly where you drop it and its neighbours are never pushed
|
|
33
33
|
or swapped; without `allowOverlap` a drop onto an occupied cell is blocked, and
|
|
34
34
|
with `allowOverlap` widgets may stack for a fully free canvas.
|
|
35
|
+
- **Selection** — off by default. Pressing a widget selects it and arms a drag
|
|
36
|
+
of the selection: selecting and grabbing are one gesture, so move the pointer
|
|
37
|
+
and it drags, stay still and it was just a selection. <kbd>Shift</kbd> (or
|
|
38
|
+
<kbd>Cmd</kbd>/<kbd>Ctrl</kbd>) toggles a widget's membership. Keys are layout
|
|
39
|
+
item ids, scoped to a single board, and always reported in layout order.
|
|
40
|
+
- **Selection is focus-like** — it tracks what the user is working with, and
|
|
41
|
+
touching anything else moves it on: pressing another widget makes *that* the
|
|
42
|
+
selection, pressing a control inside a widget drops it, and so does focus
|
|
43
|
+
leaving the board. With `'multiple'`, pressing an already-selected widget
|
|
44
|
+
keeps the selection so a drag moves the whole block.
|
|
35
45
|
|
|
36
46
|
## Properties
|
|
37
47
|
|
|
@@ -58,6 +68,13 @@ clipped by an ancestor's `overflow: hidden`.
|
|
|
58
68
|
- **`dragHandle`** `string` — CSS selector for the only elements from which a pointer drag may start. Can be overridden per widget.
|
|
59
69
|
- **`showGridLines`** `boolean | 'drag'` (default: `false`) — Show grid lines behind the widgets. `true` always, `'drag'` only while a widget is being dragged or resized. A nested board that does not set this inherits an enabled ancestor's grid lines, showing its own while a drag is in progress.
|
|
60
70
|
- **`isAligned`** `boolean` (default: `false`) — Align a nested board with its ancestor `Board`'s layout. Only takes effect when the board is nested inside another `Board`'s widget. When set, every cell matches the parent's cell size exactly: the board inherits the parent's column pitch (deriving its own column count from its measured width so cells stay parent-sized as the container is resized) and uses the parent's row height verbatim. It never shrinks rows to fit — pair it with an `isAutoHeight` container so the widget grows to fit its rows at that height. `cols`/`rowHeight` then act as fallbacks used only until the parent metrics resolve.
|
|
71
|
+
- **`selectionMode`** `'none' | 'single' | 'multiple'` (default: `'none'`) — Whether widgets can be selected, and how many at a time. `'multiple'` also enables the marquee and rigid group movement.
|
|
72
|
+
- **`selectedKeys`** `string[]` — Controlled selection. Keys are layout item ids (`LayoutItem.i`).
|
|
73
|
+
- **`defaultSelectedKeys`** `string[]` — Initial selection for uncontrolled usage.
|
|
74
|
+
- **`onSelectionChange`** `(keys: string[]) => void` — Called when the selection changes. Keys are deduped and returned in the board's layout order, never in click order.
|
|
75
|
+
- **`selectionCancel`** `string` (default: `BOARD_SELECTION_CANCEL`) — CSS selector marking interactive descendants. A press on one never selects and never starts a drag, so the control keeps its own click *and* its native focus; it also drops the selection, since interacting with a widget's content means the user has moved on. On a selectable board this doubles as the drag guard, so form controls stay usable without also configuring `dragCancel`. The default covers native form controls, links, and the common ARIA widget roles, plus `[data-no-select]` as an escape hatch. Pass `''` to disable the guard. Can be overridden per widget.
|
|
76
|
+
- **`allowMarqueeSelection`** `boolean` (default: `selectionMode === 'multiple'`) — Draw a rubber-band selection when a drag starts on empty board space. A press on a widget selects and drags instead, so the lasso owns empty canvas only. Hold <kbd>Shift</kbd> or <kbd>Cmd</kbd>/<kbd>Ctrl</kbd> to add to the existing selection rather than replacing it.
|
|
77
|
+
- **`onWidgetsDelete`** `(keys: string[]) => void` — Called when <kbd>Delete</kbd>/<kbd>Backspace</kbd> is pressed with a non-empty selection and focus is not in an editable field. **Board never mutates the layout itself** — removing the widgets is yours to do, which is what lets you make it undoable. Board only handles these keys when this handler is set.
|
|
61
78
|
- **`constraints`** `LayoutConstraint[]` — Grid/item layout constraints.
|
|
62
79
|
- **`width`** `number` — Explicit width (disables measurement; useful for SSR/tests).
|
|
63
80
|
- **`widgetProps`** `Partial<Board.Widget props>` — Default props applied to every widget this board hosts (per-widget `Board.Widget` props override these). Use it to add a card border to every widget (`widgetProps={{ isCard: true }}`) or set shared `styles`/sizing defaults without repeating them on each widget.
|
|
@@ -82,6 +99,16 @@ clipped by an ancestor's `overflow: hidden`.
|
|
|
82
99
|
- **`isAutoHeight`** `boolean` (default: `false`) — Grow this widget's height in its board to fit its content (only ever increases, never shrinks). Pair it with a nested `Board isAligned` so the container expands until the inner board's rows fit at the parent's row height. It also pins the widget's resize floor: you cannot drag the widget shorter than the height its content currently needs.
|
|
83
100
|
- **`dragCancel`** `string` — Override the board's `dragCancel` selector for this widget.
|
|
84
101
|
- **`dragHandle`** `string` — Override the board's `dragHandle` selector for this widget.
|
|
102
|
+
- **`isSelectable`** `boolean` — Disable selection for this widget while the board's `selectionMode` is on.
|
|
103
|
+
- **`selectionCancel`** `string` — Override the board's `selectionCancel` selector for this widget.
|
|
104
|
+
- **`aria-label`** `string` — Accessible name for the widget. Falls back to `qa`, then the layout item id — both developer-facing, so set this whenever the widget is user-visible. Also what the selection announcement reads out.
|
|
105
|
+
|
|
106
|
+
A widget clips its content to its grid cell, card or not — otherwise a nested
|
|
107
|
+
board with more rows than currently fit, or a mid-drag reflow, would paint over
|
|
108
|
+
its neighbours. The cost is that a descendant's `outline` is cropped at the edge
|
|
109
|
+
(an outline is clipped by an *ancestor's* overflow, not its own), so a widget
|
|
110
|
+
whose content must paint outside — a control drawing its own active ring — sets
|
|
111
|
+
`overflow="visible"`, or draws the ring inset with a negative `outlineOffset`.
|
|
85
112
|
|
|
86
113
|
### Board.Provider
|
|
87
114
|
|
|
@@ -119,6 +146,48 @@ container's measured width, mirroring react-grid-layout's `Responsive` +
|
|
|
119
146
|
A breakpoint with no layout is synthesized from the nearest available one,
|
|
120
147
|
corrected into bounds and compacted for the target column count.
|
|
121
148
|
|
|
149
|
+
### Modifiers
|
|
150
|
+
|
|
151
|
+
Every widget host exposes these as `data-*` attributes, and any style map passed
|
|
152
|
+
through `widgetProps.styles` or a per-widget `styles` resolves against them.
|
|
153
|
+
|
|
154
|
+
- **`selected`** — the widget is in the board's selection.
|
|
155
|
+
- **`card`** — the widget draws a card border (`isCard`).
|
|
156
|
+
- **`draggable`** — the widget can be dragged and no drag is in flight.
|
|
157
|
+
- **`drag`** — the widget is being dragged.
|
|
158
|
+
- **`floating`** — this is the clone floating in the drag overlay.
|
|
159
|
+
- **`resizing`** — the widget is being resized.
|
|
160
|
+
- **`static`** — the layout item is `static`.
|
|
161
|
+
- **`hovered`**, **`focus-visible`** — pointer and keyboard-focus states.
|
|
162
|
+
- **`settled`** — the board has painted its widgets once, so position changes animate.
|
|
163
|
+
|
|
164
|
+
Selection is an *edge* treatment — a `#primary-border` border plus a `#primary`
|
|
165
|
+
ring — because it reads as a focus-like state rather than a fill. `outline` stays
|
|
166
|
+
reserved for the real focus ring, which is what keeps the two legible together:
|
|
167
|
+
they use different tokens and the focus outline sits one border-width further
|
|
168
|
+
out. To restyle it, override the same keys:
|
|
169
|
+
|
|
170
|
+
```jsx
|
|
171
|
+
<Board
|
|
172
|
+
selectionMode="multiple"
|
|
173
|
+
widgetProps={{
|
|
174
|
+
styles: {
|
|
175
|
+
border: { '': true, selected: '#note-border' },
|
|
176
|
+
shadow: { '': false, selected: '0 0 0 1bw #note' },
|
|
177
|
+
},
|
|
178
|
+
}}
|
|
179
|
+
/>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Data attributes
|
|
183
|
+
|
|
184
|
+
Supported hooks for tests, E2E, and building your own selection overlay:
|
|
185
|
+
|
|
186
|
+
- **`data-board-id`** on the board element — the board's `id`.
|
|
187
|
+
- **`data-board-widget-host`** on every widget host — presence only, "this is a widget host".
|
|
188
|
+
- **`data-board-widget-id`** on every widget host — which widget.
|
|
189
|
+
- **`data-selected`** on a selected host.
|
|
190
|
+
|
|
122
191
|
### Base Properties
|
|
123
192
|
|
|
124
193
|
Supports [Base properties](../../BaseProperties.md).
|
|
@@ -221,14 +290,76 @@ mounted so the tab a widget is dragged out of (and the board owning the in-fligh
|
|
|
221
290
|
drag) is not unmounted mid-gesture. Spring-loading works with mouse and pen;
|
|
222
291
|
touch drags capture the pointer, so they do not trigger it.
|
|
223
292
|
|
|
293
|
+
### Selection
|
|
294
|
+
|
|
295
|
+
Click to select, Shift/Cmd/Ctrl-click to add or remove, and drag from empty board
|
|
296
|
+
Press a widget to select it, <kbd>Shift</kbd>-press to add or remove one, and
|
|
297
|
+
drag from empty board space to lasso. Because the press both selects and arms the
|
|
298
|
+
drag, grabbing a widget you have not selected simply makes it the selection and
|
|
299
|
+
moves it; grabbing one that *is* selected moves the whole block rigidly — keeping
|
|
300
|
+
its shape horizontally, clamping against the grid edge as a unit rather than
|
|
301
|
+
collapsing, and committing once.
|
|
302
|
+
|
|
303
|
+
A group reflows exactly like a single widget: it is compacted by the same rules,
|
|
304
|
+
so on a `vertical` board it can no more be parked in empty space than one widget
|
|
305
|
+
can, and the widgets around it close the gap in the same frame. Under
|
|
306
|
+
`compact="free"` (or `null`) nothing compacts, so the block stays precisely where
|
|
307
|
+
it was dropped.
|
|
308
|
+
|
|
309
|
+
### Interactive content keeps its clicks
|
|
310
|
+
|
|
311
|
+
### Controlled selection and deleting widgets
|
|
312
|
+
|
|
313
|
+
### Restyling the selection
|
|
314
|
+
|
|
224
315
|
## Accessibility
|
|
225
316
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
317
|
+
### Keyboard Navigation
|
|
318
|
+
|
|
319
|
+
| Key | Action |
|
|
320
|
+
| --- | --- |
|
|
321
|
+
| <kbd>Tab</kbd> | Move focus to the next widget. |
|
|
322
|
+
| <kbd>Arrow</kbd> keys | Move the focused widget one cell. With a selection, moves the whole selection. |
|
|
323
|
+
| <kbd>Space</kbd> | Toggle the focused widget's selection (`selectionMode` only). |
|
|
324
|
+
| <kbd>Shift</kbd> / <kbd>Cmd</kbd> / <kbd>Ctrl</kbd> + press | Add or remove a widget from the selection. |
|
|
325
|
+
| <kbd>Escape</kbd> | Clear the selection. |
|
|
326
|
+
| <kbd>Delete</kbd> / <kbd>Backspace</kbd> | Request deletion of the selection via `onWidgetsDelete`. |
|
|
327
|
+
|
|
328
|
+
Arrow keys and <kbd>Space</kbd> only act when the widget host **itself** is
|
|
329
|
+
focused, never when focus is inside a nested control, so an `input`,
|
|
330
|
+
`textarea`, or `button` inside a widget keeps every key it needs. Board's own
|
|
331
|
+
keys are handled on the board element rather than on `document`, and are only
|
|
332
|
+
consumed when they actually do something — an <kbd>Escape</kbd> with nothing
|
|
333
|
+
selected still reaches an ancestor Dialog, and <kbd>Backspace</kbd> stays
|
|
334
|
+
available for text editing and browser-back.
|
|
335
|
+
|
|
336
|
+
Every draggable or selectable widget is its own tab stop. Roving tabindex would
|
|
337
|
+
be an improvement on a large board, but arrow keys are already claimed for
|
|
338
|
+
movement, so it needs a navigation key set of its own — see below.
|
|
339
|
+
|
|
340
|
+
### Screen Reader Support
|
|
341
|
+
|
|
342
|
+
Each widget host is a `group` with an accessible name, taken from
|
|
343
|
+
`aria-label`, then `qa`, then the layout item id — set `aria-label` on any
|
|
344
|
+
user-visible widget, since the other two are developer-facing. Draggable widgets
|
|
345
|
+
carry a localized `aria-roledescription`, and selectable ones advertise
|
|
346
|
+
`aria-keyshortcuts="Space"`.
|
|
347
|
+
|
|
348
|
+
Selection state is conveyed two ways: a selected widget is described as
|
|
349
|
+
"Selected" via `aria-describedby`, and every selection change is announced
|
|
350
|
+
through a polite live region owned by the board ("Revenue selected", "3 widgets
|
|
351
|
+
selected", "Selection cleared"). A marquee announces once, on release — not once
|
|
352
|
+
per pointer frame.
|
|
353
|
+
|
|
354
|
+
### ARIA Properties
|
|
355
|
+
|
|
356
|
+
Board deliberately does **not** use a collection role. `aria-selected` is only
|
|
357
|
+
valid on `option`, `gridcell`, `row`, `treeitem` and friends, and every one of
|
|
358
|
+
those requires presentational children — but a Board widget hosts arbitrary
|
|
359
|
+
interactive content (nested boards, tabs, inputs), and a `grid`'s keyboard model
|
|
360
|
+
would fight `useMove`'s arrow keys. Rather than ship ARIA that lies about the
|
|
361
|
+
structure, selection is exposed through the name, description, and live region
|
|
362
|
+
described above. Set `aria-label` on your widgets and this reads correctly.
|
|
232
363
|
|
|
233
364
|
## Not yet supported
|
|
234
365
|
|
|
@@ -240,6 +371,23 @@ touch drags capture the pointer, so they do not trigger it.
|
|
|
240
371
|
placeholder, and new `onDrop`/`droppingItem` props). Add widgets
|
|
241
372
|
programmatically (render a new `Board.Widget` and add its layout item), or drag
|
|
242
373
|
between boards with `Board.Provider`.
|
|
374
|
+
- **Cross-board group transfer** — a group drag never leaves its source board.
|
|
375
|
+
Cross-board transfer is single-item throughout (`WidgetTransferInfo`, the
|
|
376
|
+
carried preview, the free-slot fallback), and landing a group on a board with a
|
|
377
|
+
different column count has no obvious right answer. Degrading to a
|
|
378
|
+
single-widget transfer would silently split a selection the user made, so the
|
|
379
|
+
gesture is confined instead. Drag widgets across one at a time.
|
|
380
|
+
- **Collection ARIA semantics** — `role="grid"`/`option`, `aria-selected` and
|
|
381
|
+
`aria-multiselectable`, for the reason above.
|
|
382
|
+
- **Roving tabindex** — needs a widget-navigation key set that does not collide
|
|
383
|
+
with `useMove`'s arrow keys.
|
|
384
|
+
- **<kbd>Cmd/Ctrl</kbd>+<kbd>A</kbd>** — select all.
|
|
385
|
+
- **Cross-board marquee and cross-board selection** — selection is per board; a
|
|
386
|
+
`Board.Provider` shares drag, not selection.
|
|
387
|
+
- **Windows High Contrast Mode** — no component in the kit styles for
|
|
388
|
+
`forced-colors` yet. The selected state uses a tint, a border *and* an extra
|
|
389
|
+
ring, so it does not rely on hue alone, but a full forced-colors pass is a
|
|
390
|
+
system-wide change.
|
|
243
391
|
|
|
244
392
|
## Attribution
|
|
245
393
|
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Pagination
|
|
2
|
+
|
|
3
|
+
Pagination is the control for moving through a paged collection. It renders a
|
|
4
|
+
bounded run of page buttons, optional first/last jumps, an optional page-size
|
|
5
|
+
selector, and an optional item-range summary.
|
|
6
|
+
|
|
7
|
+
It is a pure control: it owns no data. Client-side slicing lives in the
|
|
8
|
+
companion `usePagination` hook, and `ItemTable` composes the two.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- Paging through a list, table, or grid where the user needs to jump around
|
|
13
|
+
rather than scroll.
|
|
14
|
+
- Cursor pagination with an unknown total — supply `hasNextPage` and omit
|
|
15
|
+
`total`/`totalPages`, and the control degrades to prev/next.
|
|
16
|
+
- Anywhere you need a page-size selector wired to the same state.
|
|
17
|
+
|
|
18
|
+
Prefer infinite scroll when the collection is a feed the user skims, and
|
|
19
|
+
pagination when they need stable, addressable positions.
|
|
20
|
+
|
|
21
|
+
## Component
|
|
22
|
+
|
|
23
|
+
### Properties
|
|
24
|
+
|
|
25
|
+
- **`page`** `number` — Controlled current page, 1-based. Pair with
|
|
26
|
+
`onPageChange`.
|
|
27
|
+
- **`defaultPage`** `number` (default: `1`) — Initial page for uncontrolled
|
|
28
|
+
usage.
|
|
29
|
+
- **`onPageChange`** `(page: number) => void` — Never fires with a page outside
|
|
30
|
+
`1…totalPages` when the total is known.
|
|
31
|
+
- **`total`** `number` — Total items across all pages. Preferred over
|
|
32
|
+
`totalPages`; it also powers the range summary and the `select` type's range
|
|
33
|
+
labels.
|
|
34
|
+
- **`totalPages`** `number` — Total pages. Only needed when the item count is
|
|
35
|
+
genuinely unavailable. Wins over the value derived from `total` + `pageSize`.
|
|
36
|
+
- **`pageSize`** `number` — Controlled page size.
|
|
37
|
+
- **`defaultPageSize`** `number` (default: `50`) — Initial page size for
|
|
38
|
+
uncontrolled usage.
|
|
39
|
+
- **`onPageSizeChange`** `(pageSize: number) => void` — Changing the size also
|
|
40
|
+
resets to page 1, because the old page index no longer refers to the same
|
|
41
|
+
items.
|
|
42
|
+
- **`pageSizeOptions`** `number[]` — Supplying this **and** `onPageSizeChange`
|
|
43
|
+
renders the size selector.
|
|
44
|
+
- **`type`** `'numbers' | 'select' | 'compact'` (default: `'numbers'`) — How the
|
|
45
|
+
page control is rendered. `numbers` is the default because it is the only mode
|
|
46
|
+
whose rendered element count is independent of the page count; `select`
|
|
47
|
+
materializes one entry per page, so above a safety cap the component falls
|
|
48
|
+
back to `compact` on its own.
|
|
49
|
+
- **`siblingCount`** `number` (default: `1`) — Page buttons either side of the
|
|
50
|
+
current page.
|
|
51
|
+
- **`boundaryCount`** `number` (default: `1`) — Page buttons pinned at each end.
|
|
52
|
+
Together with `siblingCount` this bounds the rendered count at
|
|
53
|
+
`boundaryCount * 2 + siblingCount * 2 + 3`.
|
|
54
|
+
- **`size`** `'small' | 'medium'` (default: `'small'`) — Control size.
|
|
55
|
+
- **`isDisabled`** `boolean` — Disable every control.
|
|
56
|
+
- **`hasNextPage`** `boolean` — Keeps "next" enabled when the total is unknown.
|
|
57
|
+
Ignored once `total` or `totalPages` is supplied — a known total is always
|
|
58
|
+
authoritative.
|
|
59
|
+
- **`isCompact`** `boolean` (default: `false`) — Hide the first/last jump
|
|
60
|
+
buttons.
|
|
61
|
+
- **`summary`** `boolean | ((info: CubeTablePageInfo) => ReactNode)` (default:
|
|
62
|
+
`false`) — `true` renders the localized `1–50 of 1,204`, with numbers
|
|
63
|
+
formatted for the active locale. Pass a function for full control.
|
|
64
|
+
- **`labelFormatter`** `(info: CubeTablePageInfo) => ReactNode` — Labels the
|
|
65
|
+
entries of `type="select"`. Receives the page info with `page` set to the
|
|
66
|
+
entry being labelled.
|
|
67
|
+
- **`ariaLabel`** `string` — Labels the `<nav>` landmark. Defaults to the
|
|
68
|
+
localized "Pagination".
|
|
69
|
+
|
|
70
|
+
#### `CubeTablePageInfo`
|
|
71
|
+
|
|
72
|
+
Handed to `summary` and `labelFormatter`:
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
interface CubeTablePageInfo {
|
|
76
|
+
page: number; // 1-based
|
|
77
|
+
pageSize: number;
|
|
78
|
+
totalPages: number;
|
|
79
|
+
total: number; // 0 when unknown
|
|
80
|
+
from: number; // 1-based index of the first item on this page
|
|
81
|
+
to: number; // 1-based index of the last item on this page
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Base Properties
|
|
86
|
+
|
|
87
|
+
Supports Base Properties.
|
|
88
|
+
|
|
89
|
+
### Styling Properties
|
|
90
|
+
|
|
91
|
+
#### styles
|
|
92
|
+
|
|
93
|
+
Customizes the root element.
|
|
94
|
+
|
|
95
|
+
**Sub-elements:**
|
|
96
|
+
|
|
97
|
+
- `Summary` — the range summary and the `compact` page label
|
|
98
|
+
- `Controls` — the row of nav and page buttons
|
|
99
|
+
- `Gap` — the `…` between two runs of page numbers
|
|
100
|
+
|
|
101
|
+
#### pageSizeSelectStyles
|
|
102
|
+
|
|
103
|
+
Customizes the page-size `Select`.
|
|
104
|
+
|
|
105
|
+
### Style Properties
|
|
106
|
+
|
|
107
|
+
These properties allow direct style application without using the `styles` prop:
|
|
108
|
+
|
|
109
|
+
- **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
|
|
110
|
+
- **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
|
|
111
|
+
- **Block:** `border`, `radius`, `shadow`, `outline`
|
|
112
|
+
|
|
113
|
+
### Modifiers
|
|
114
|
+
|
|
115
|
+
| Modifier | Type | Description |
|
|
116
|
+
| -------- | ---- | ----------- |
|
|
117
|
+
| `size` | `'small' \| 'medium'` | Control size |
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
### Basic Usage
|
|
122
|
+
|
|
123
|
+
```jsx
|
|
124
|
+
const [page, setPage] = useState(1);
|
|
125
|
+
|
|
126
|
+
<Pagination page={page} pageSize={50} total={1204} onPageChange={setPage} />;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### With a Summary
|
|
130
|
+
|
|
131
|
+
```jsx
|
|
132
|
+
<Pagination page={3} pageSize={50} total={1204} summary onPageChange={setPage} />
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Many Pages
|
|
136
|
+
|
|
137
|
+
A million rows at 50 per page is 20 000 pages — and still ~7 buttons.
|
|
138
|
+
|
|
139
|
+
```jsx
|
|
140
|
+
<Pagination page={9421} pageSize={50} total={1000000} summary onPageChange={setPage} />
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Page Size Selector
|
|
144
|
+
|
|
145
|
+
```jsx
|
|
146
|
+
const [page, setPage] = useState(1);
|
|
147
|
+
const [pageSize, setPageSize] = useState(50);
|
|
148
|
+
|
|
149
|
+
<Pagination
|
|
150
|
+
page={page}
|
|
151
|
+
pageSize={pageSize}
|
|
152
|
+
total={1204}
|
|
153
|
+
pageSizeOptions={[10, 20, 50, 100, 500]}
|
|
154
|
+
summary
|
|
155
|
+
onPageChange={setPage}
|
|
156
|
+
onPageSizeChange={setPageSize}
|
|
157
|
+
/>;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Unknown Total (Cursor Pagination)
|
|
161
|
+
|
|
162
|
+
```jsx
|
|
163
|
+
<Pagination page={page} hasNextPage={hasNextPage} onPageChange={setPage} />
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Compact
|
|
167
|
+
|
|
168
|
+
```jsx
|
|
169
|
+
<Pagination type="compact" page={3} pageSize={50} total={1204} summary />
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Client-side Slicing with `usePagination`
|
|
173
|
+
|
|
174
|
+
```jsx
|
|
175
|
+
const { pageItems, page, pageSize, total, setPage, setPageSize } =
|
|
176
|
+
usePagination(items, { defaultPageSize: 10 });
|
|
177
|
+
|
|
178
|
+
return (
|
|
179
|
+
<>
|
|
180
|
+
{pageItems.map((item) => (
|
|
181
|
+
<Text key={item}>{item}</Text>
|
|
182
|
+
))}
|
|
183
|
+
<Pagination
|
|
184
|
+
page={page}
|
|
185
|
+
pageSize={pageSize}
|
|
186
|
+
total={total}
|
|
187
|
+
pageSizeOptions={[5, 10, 25]}
|
|
188
|
+
summary
|
|
189
|
+
onPageChange={setPage}
|
|
190
|
+
onPageSizeChange={setPageSize}
|
|
191
|
+
/>
|
|
192
|
+
</>
|
|
193
|
+
);
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Accessibility
|
|
197
|
+
|
|
198
|
+
### Keyboard Navigation
|
|
199
|
+
|
|
200
|
+
- `Tab` — moves through the controls in visual order.
|
|
201
|
+
- `Enter` / `Space` — activates the focused button.
|
|
202
|
+
|
|
203
|
+
Every control is a real `<button>`, so there is nothing bespoke to learn.
|
|
204
|
+
|
|
205
|
+
### Screen Reader Support
|
|
206
|
+
|
|
207
|
+
- The root is a `<nav>` landmark labelled "Pagination" (override with
|
|
208
|
+
`ariaLabel`).
|
|
209
|
+
- The current page button carries `aria-current="page"`.
|
|
210
|
+
- Every button has an explicit `aria-label` — "Page 3", "Next page", and so on
|
|
211
|
+
— so an icon-only button is never announced as unlabelled.
|
|
212
|
+
- The `…` gap is `aria-hidden`; it conveys nothing a screen reader user needs.
|
|
213
|
+
|
|
214
|
+
### ARIA Properties
|
|
215
|
+
|
|
216
|
+
| Property | Applied to |
|
|
217
|
+
| -------- | ---------- |
|
|
218
|
+
| `aria-label` | The `<nav>` and every button |
|
|
219
|
+
| `aria-current="page"` | The current page button |
|
|
220
|
+
| `aria-hidden="true"` | The `…` gap |
|
|
221
|
+
|
|
222
|
+
## Best Practices
|
|
223
|
+
|
|
224
|
+
- Do: pass `total` rather than `totalPages` when you know the item count — the
|
|
225
|
+
summary and range labels both need it.
|
|
226
|
+
- Do: use `type="numbers"` (the default) for anything that can grow. It is the
|
|
227
|
+
only mode whose cost does not scale with the page count.
|
|
228
|
+
- Do: reset to page 1 whenever the underlying query changes (a new search term,
|
|
229
|
+
a new filter). A stale page index against a smaller result set shows an empty
|
|
230
|
+
page.
|
|
231
|
+
- Don't: render `type="select"` over a large page count. It builds one
|
|
232
|
+
collection item per page.
|
|
233
|
+
- Don't: pass both `hasNextPage` and a known total and expect the former to win
|
|
234
|
+
— it doesn't.
|
|
235
|
+
|
|
236
|
+
## Suggested Improvements
|
|
237
|
+
|
|
238
|
+
- A "jump to page" input for very large page counts.
|
|
239
|
+
- Optional URL synchronization, so a page is linkable.
|
|
240
|
+
|
|
241
|
+
## Related Components
|
|
242
|
+
|
|
243
|
+
- ItemTable — composes `Pagination` in its footer
|
|
244
|
+
- [Select](../fields/Select.md) — used for the page-size selector
|
|
245
|
+
- [Button](../actions/Button.md) — used for every nav and page control
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cube-dev/ui-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.157.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
"@react-aria/ssr": "^3.9.10",
|
|
49
49
|
"@react-aria/utils": "^3.32.0",
|
|
50
50
|
"@react-spectrum/utils": "^3.12.10",
|
|
51
|
+
"@react-stately/selection": "^3.20.7",
|
|
51
52
|
"@react-stately/utils": "^3.11.0",
|
|
52
53
|
"@react-types/shared": "^3.32.1",
|
|
53
54
|
"@tabler/icons-react": "^3.31.0",
|
|
@@ -104,7 +105,9 @@
|
|
|
104
105
|
"@types/react-test-renderer": "^18.0.7",
|
|
105
106
|
"@uiw/react-codemirror": "^4.25.4",
|
|
106
107
|
"@vitejs/plugin-react": "^6.0.0",
|
|
107
|
-
"@vitest/
|
|
108
|
+
"@vitest/browser": "^4.1.10",
|
|
109
|
+
"@vitest/browser-playwright": "^4.1.10",
|
|
110
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
108
111
|
"best-effort-json-parser": "^1.2.1",
|
|
109
112
|
"bytes": "^3.1.2",
|
|
110
113
|
"chromatic": "^13.1.4",
|
|
@@ -117,6 +120,7 @@
|
|
|
117
120
|
"markdown-table": "^3.0.3",
|
|
118
121
|
"npm-run-all": "^4.1.5",
|
|
119
122
|
"oxlint": "^1.72.0",
|
|
123
|
+
"playwright": "^1.62.1",
|
|
120
124
|
"prettier": "^3.2.5",
|
|
121
125
|
"react": "^19.1.1",
|
|
122
126
|
"react-dom": "^19.1.1",
|
|
@@ -131,7 +135,7 @@
|
|
|
131
135
|
"tsdown": "^0.20.3",
|
|
132
136
|
"typescript": "^5.6.3",
|
|
133
137
|
"vite": "^8.0.0",
|
|
134
|
-
"vitest": "^4.1.
|
|
138
|
+
"vitest": "^4.1.10"
|
|
135
139
|
},
|
|
136
140
|
"browserslist": [
|
|
137
141
|
"last 2 Chrome versions",
|
|
@@ -148,6 +152,7 @@
|
|
|
148
152
|
"build": "tsdown",
|
|
149
153
|
"watch": "tsdown --watch",
|
|
150
154
|
"test": "vitest run",
|
|
155
|
+
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
151
156
|
"test-cover": "vitest run --coverage",
|
|
152
157
|
"test-watch": "vitest",
|
|
153
158
|
"prettier": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { CubeActionProps } from "../../actions/Action/Action.js";
|
|
3
|
-
import "../../actions/index.js";
|
|
4
|
-
import { CubeFlexProps } from "../../layout/Flex.js";
|
|
5
|
-
import { Styles } from "@tenphi/tasty";
|
|
6
|
-
import { ReactNode } from "react";
|
|
7
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
8
|
-
|
|
9
|
-
//#region src/components/organisms/FileTabs/FileTabs.d.ts
|
|
10
|
-
/**
|
|
11
|
-
* @deprecated consider using <Tabs /> instead
|
|
12
|
-
*/
|
|
13
|
-
interface FileTabProps extends Omit<CubeActionProps, 'id'> {
|
|
14
|
-
isDirty?: boolean;
|
|
15
|
-
isDisabled?: boolean;
|
|
16
|
-
children?: ReactNode;
|
|
17
|
-
isClosable?: boolean;
|
|
18
|
-
onClose?: () => void;
|
|
19
|
-
}
|
|
20
|
-
interface CubeFileTabsProps extends CubeFlexProps {
|
|
21
|
-
/** The initial active key in the tabs (uncontrolled). */
|
|
22
|
-
defaultActiveKey?: string;
|
|
23
|
-
/** The currently active key in the tabs (controlled). */
|
|
24
|
-
activeKey?: string | number;
|
|
25
|
-
/** Handler that is called when the tab is clicked. */
|
|
26
|
-
onTabClick?: (string: any) => void;
|
|
27
|
-
/** Handler that is called when the tab is closed. */
|
|
28
|
-
onTabClose?: (string: any) => void;
|
|
29
|
-
/** Styles for each tab pane */
|
|
30
|
-
paneStyles?: Styles;
|
|
31
|
-
/** Whether the tabs are closable */
|
|
32
|
-
isClosable?: boolean;
|
|
33
|
-
children?: ReactNode;
|
|
34
|
-
}
|
|
35
|
-
declare function FileTabs({
|
|
36
|
-
defaultActiveKey,
|
|
37
|
-
activeKey: activeKeyProp,
|
|
38
|
-
onTabClick,
|
|
39
|
-
onTabClose,
|
|
40
|
-
paneStyles,
|
|
41
|
-
isClosable,
|
|
42
|
-
children,
|
|
43
|
-
...props
|
|
44
|
-
}: CubeFileTabsProps): react_jsx_runtime0.JSX.Element;
|
|
45
|
-
declare namespace FileTabs {
|
|
46
|
-
var TabPane: (allProps: CubeFileTabProps) => react_jsx_runtime0.JSX.Element;
|
|
47
|
-
}
|
|
48
|
-
interface CubeFileTabProps extends FileTabProps {
|
|
49
|
-
id: string | number;
|
|
50
|
-
title: string;
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { CubeFileTabProps, FileTabs };
|
|
54
|
-
//# sourceMappingURL=FileTabs.d.ts.map
|