@cube-dev/ui-kit 0.0.0-canary-85abc8a → 0.0.0-canary-306afc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/hooks/use-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.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/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.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 +245 -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 +876 -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 +6 -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 +173 -0
- package/dist/components/data/TableBase/use-cell-selection.d.ts +4 -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 +80 -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/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPickerPanel.js +1 -1
- package/dist/components/fields/ColorPicker/channels.js +1 -1
- package/dist/components/fields/ColorPicker/color.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +2 -2
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +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.js +2 -12
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +4 -17
- 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.js +5 -12
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.js +3 -15
- package/dist/components/fields/TextInput/TextInput.js.map +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +0 -7
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.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/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.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.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/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.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 +207 -1
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +36 -1
- package/dist/i18n/locales/en-US/uikit.js +36 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +41 -1
- package/dist/i18n/locales/es-ES/uikit.js +36 -1
- package/dist/i18n/locales/es-MX/uikit.js +36 -1
- package/dist/i18n/locales/fr-FR/uikit.js +36 -1
- package/dist/i18n/locales/it-IT/uikit.js +36 -1
- package/dist/i18n/locales/ja-JP/uikit.js +36 -1
- package/dist/i18n/locales/nb-NO/uikit.js +36 -1
- package/dist/i18n/locales/pt-BR/uikit.js +36 -1
- package/dist/i18n/locales/pt-PT/uikit.js +36 -1
- package/dist/i18n/locales/sv-SE/uikit.js +36 -1
- package/dist/i18n/locales/vi-VN/uikit.js +36 -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.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 +19 -10
- package/dist/index.js +8 -5
- 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 +0 -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/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.d.ts +0 -1
- package/dist/utils/react/index.js +1 -2
- 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/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/data/DataTable.md +298 -0
- package/docs/components/data/ItemTable.md +971 -0
- package/docs/components/navigation/Pagination.md +245 -0
- package/package.json +8 -3
- package/dist/utils/react/useBufferedValue.d.ts +0 -56
- package/dist/utils/react/useBufferedValue.js +0 -86
- package/dist/utils/react/useBufferedValue.js.map +0 -1
|
@@ -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.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-306afc2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"build": "tsdown",
|
|
38
38
|
"watch": "tsdown --watch",
|
|
39
39
|
"test": "vitest run",
|
|
40
|
+
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
40
41
|
"test-cover": "vitest run --coverage",
|
|
41
42
|
"test-watch": "vitest",
|
|
42
43
|
"prettier": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
|
|
@@ -79,6 +80,7 @@
|
|
|
79
80
|
"@react-aria/ssr": "^3.9.10",
|
|
80
81
|
"@react-aria/utils": "^3.32.0",
|
|
81
82
|
"@react-spectrum/utils": "^3.12.10",
|
|
83
|
+
"@react-stately/selection": "^3.20.7",
|
|
82
84
|
"@react-stately/utils": "^3.11.0",
|
|
83
85
|
"@react-types/shared": "^3.32.1",
|
|
84
86
|
"@tabler/icons-react": "^3.31.0",
|
|
@@ -135,7 +137,9 @@
|
|
|
135
137
|
"@types/react-test-renderer": "^18.0.7",
|
|
136
138
|
"@uiw/react-codemirror": "^4.25.4",
|
|
137
139
|
"@vitejs/plugin-react": "^6.0.0",
|
|
138
|
-
"@vitest/
|
|
140
|
+
"@vitest/browser": "^4.1.10",
|
|
141
|
+
"@vitest/browser-playwright": "^4.1.10",
|
|
142
|
+
"@vitest/coverage-v8": "^4.1.10",
|
|
139
143
|
"best-effort-json-parser": "^1.2.1",
|
|
140
144
|
"bytes": "^3.1.2",
|
|
141
145
|
"chromatic": "^13.1.4",
|
|
@@ -148,6 +152,7 @@
|
|
|
148
152
|
"markdown-table": "^3.0.3",
|
|
149
153
|
"npm-run-all": "^4.1.5",
|
|
150
154
|
"oxlint": "^1.72.0",
|
|
155
|
+
"playwright": "^1.62.1",
|
|
151
156
|
"prettier": "^3.2.5",
|
|
152
157
|
"react": "^19.1.1",
|
|
153
158
|
"react-dom": "^19.1.1",
|
|
@@ -162,7 +167,7 @@
|
|
|
162
167
|
"tsdown": "^0.20.3",
|
|
163
168
|
"typescript": "^5.6.3",
|
|
164
169
|
"vite": "^8.0.0",
|
|
165
|
-
"vitest": "^4.1.
|
|
170
|
+
"vitest": "^4.1.10"
|
|
166
171
|
},
|
|
167
172
|
"browserslist": [
|
|
168
173
|
"last 2 Chrome versions",
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/utils/react/useBufferedValue.d.ts
|
|
3
|
-
interface UseBufferedValueOptions<T> {
|
|
4
|
-
/**
|
|
5
|
-
* Identity of a value, for values `Object.is` doesn't compare usefully — an array of colour
|
|
6
|
-
* stops, a settings object. Defaults to the value itself, which is what strings want.
|
|
7
|
-
*/
|
|
8
|
-
getKey?: (value: T) => unknown;
|
|
9
|
-
/** Nothing can be typed into a disabled control, so there is nothing to protect. */
|
|
10
|
-
isDisabled?: boolean;
|
|
11
|
-
/** Same for a read-only one. */
|
|
12
|
-
isReadOnly?: boolean;
|
|
13
|
-
/** Escape hatch: `false` makes the hook inert and passes `value`/`onChange` straight through. */
|
|
14
|
-
isBuffered?: boolean;
|
|
15
|
-
}
|
|
16
|
-
interface UseBufferedValueResult<T> {
|
|
17
|
-
/** Render this instead of `value`. `undefined` passes through, meaning uncontrolled. */
|
|
18
|
-
value: T | undefined;
|
|
19
|
-
/** Call this instead of `onChange`. Still emits once per call, in the same tick. */
|
|
20
|
-
onChange: (next: T) => void;
|
|
21
|
-
/** Drop the buffer and let `value` win again. The text fields call it on blur. */
|
|
22
|
-
reset: () => void;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Holds a controlled value locally so a parent that echoes the new value back *late* cannot
|
|
26
|
-
* overwrite what the user is doing.
|
|
27
|
-
*
|
|
28
|
-
* **Why any of this is needed.** A controlled `<input>` renders whatever string its parent hands
|
|
29
|
-
* it. If the parent hands back the pre-keystroke string — because its state reaches the component
|
|
30
|
-
* through a store that publishes a render late, or through a debounce, or a deferred update —
|
|
31
|
-
* React writes that stale string into the DOM node, and a native `value` assignment collapses the
|
|
32
|
-
* selection to the end. Typing in the middle of a field throws the caret to the end. The value
|
|
33
|
-
* eventually lands, so it looks like a caret bug rather than a data-flow one.
|
|
34
|
-
*
|
|
35
|
-
* The buffer keeps the typed text on screen until the parent catches up, while still emitting
|
|
36
|
-
* `onChange` once per keystroke — so nothing downstream changes: no debouncing, no commit-on-blur,
|
|
37
|
-
* no swallowed calls.
|
|
38
|
-
*
|
|
39
|
-
* Generic on purpose. The same lateness affects values that aren't strings (a colour scale's array
|
|
40
|
-
* of stops emitted through a chart-spec pipeline), and `getKey` is where those pass the signature
|
|
41
|
-
* function they already have.
|
|
42
|
-
*
|
|
43
|
-
* ```tsx
|
|
44
|
-
* const buffered = useBufferedValue(value, onChange, { isReadOnly, isDisabled });
|
|
45
|
-
*
|
|
46
|
-
* <input value={buffered.value} onChange={buffered.onChange} onBlur={buffered.reset} />
|
|
47
|
-
* ```
|
|
48
|
-
*
|
|
49
|
-
* One case it cannot resolve: an external change that lands *between* an emit and its echo, and
|
|
50
|
-
* happens to equal a value still in flight, is read as our own echo. Telling those apart needs a
|
|
51
|
-
* sequence number from the store rather than value matching.
|
|
52
|
-
*/
|
|
53
|
-
declare function useBufferedValue<T>(value: T | undefined, onChange?: (next: T) => void, options?: UseBufferedValueOptions<T>): UseBufferedValueResult<T>;
|
|
54
|
-
//#endregion
|
|
55
|
-
export { UseBufferedValueOptions, UseBufferedValueResult, useBufferedValue };
|
|
56
|
-
//# sourceMappingURL=useBufferedValue.d.ts.map
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-85abc8a | Cube Dev Team */
|
|
2
|
-
import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
|
|
3
|
-
import { useCallback, useRef, useState } from "react";
|
|
4
|
-
|
|
5
|
-
//#region src/utils/react/useBufferedValue.ts
|
|
6
|
-
const NOTHING_PENDING = [];
|
|
7
|
-
/**
|
|
8
|
-
* Holds a controlled value locally so a parent that echoes the new value back *late* cannot
|
|
9
|
-
* overwrite what the user is doing.
|
|
10
|
-
*
|
|
11
|
-
* **Why any of this is needed.** A controlled `<input>` renders whatever string its parent hands
|
|
12
|
-
* it. If the parent hands back the pre-keystroke string — because its state reaches the component
|
|
13
|
-
* through a store that publishes a render late, or through a debounce, or a deferred update —
|
|
14
|
-
* React writes that stale string into the DOM node, and a native `value` assignment collapses the
|
|
15
|
-
* selection to the end. Typing in the middle of a field throws the caret to the end. The value
|
|
16
|
-
* eventually lands, so it looks like a caret bug rather than a data-flow one.
|
|
17
|
-
*
|
|
18
|
-
* The buffer keeps the typed text on screen until the parent catches up, while still emitting
|
|
19
|
-
* `onChange` once per keystroke — so nothing downstream changes: no debouncing, no commit-on-blur,
|
|
20
|
-
* no swallowed calls.
|
|
21
|
-
*
|
|
22
|
-
* Generic on purpose. The same lateness affects values that aren't strings (a colour scale's array
|
|
23
|
-
* of stops emitted through a chart-spec pipeline), and `getKey` is where those pass the signature
|
|
24
|
-
* function they already have.
|
|
25
|
-
*
|
|
26
|
-
* ```tsx
|
|
27
|
-
* const buffered = useBufferedValue(value, onChange, { isReadOnly, isDisabled });
|
|
28
|
-
*
|
|
29
|
-
* <input value={buffered.value} onChange={buffered.onChange} onBlur={buffered.reset} />
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* One case it cannot resolve: an external change that lands *between* an emit and its echo, and
|
|
33
|
-
* happens to equal a value still in flight, is read as our own echo. Telling those apart needs a
|
|
34
|
-
* sequence number from the store rather than value matching.
|
|
35
|
-
*/
|
|
36
|
-
function useBufferedValue(value, onChange, options = {}) {
|
|
37
|
-
const { getKey, isDisabled, isReadOnly, isBuffered = true } = options;
|
|
38
|
-
const isActive = isBuffered && value !== void 0 && !isDisabled && !isReadOnly;
|
|
39
|
-
const keyOf = (next) => getKey && next != null ? getKey(next) : next;
|
|
40
|
-
const valueKey = keyOf(value);
|
|
41
|
-
const [draft, setDraft] = useState(value);
|
|
42
|
-
const pendingRef = useRef(NOTHING_PENDING);
|
|
43
|
-
const seenKeyRef = useRef(valueKey);
|
|
44
|
-
const latestRef = useRef({
|
|
45
|
-
value,
|
|
46
|
-
onChange,
|
|
47
|
-
keyOf,
|
|
48
|
-
isActive
|
|
49
|
-
});
|
|
50
|
-
const pending = pendingRef.current;
|
|
51
|
-
const propMoved = valueKey !== seenKeyRef.current;
|
|
52
|
-
const echoAt = propMoved ? pending.indexOf(valueKey) : -1;
|
|
53
|
-
const isExternal = propMoved && echoAt < 0;
|
|
54
|
-
const rendered = isActive && !isExternal && pending.length > 0 ? draft : value;
|
|
55
|
-
useLayoutEffect$1(() => {
|
|
56
|
-
latestRef.current = {
|
|
57
|
-
value,
|
|
58
|
-
onChange,
|
|
59
|
-
keyOf,
|
|
60
|
-
isActive
|
|
61
|
-
};
|
|
62
|
-
seenKeyRef.current = valueKey;
|
|
63
|
-
if (!isActive || isExternal) pendingRef.current = NOTHING_PENDING;
|
|
64
|
-
else if (echoAt >= 0) pendingRef.current = pending.slice(echoAt + 1);
|
|
65
|
-
});
|
|
66
|
-
return {
|
|
67
|
-
value: rendered,
|
|
68
|
-
onChange: useCallback((next) => {
|
|
69
|
-
const { onChange: latestOnChange, keyOf: latestKeyOf, isActive: latestIsActive } = latestRef.current;
|
|
70
|
-
if (latestIsActive) {
|
|
71
|
-
pendingRef.current = [...pendingRef.current, latestKeyOf(next)];
|
|
72
|
-
setDraft(next);
|
|
73
|
-
}
|
|
74
|
-
latestOnChange?.(next);
|
|
75
|
-
}, []),
|
|
76
|
-
reset: useCallback(() => {
|
|
77
|
-
const { value: latestValue } = latestRef.current;
|
|
78
|
-
pendingRef.current = NOTHING_PENDING;
|
|
79
|
-
setDraft(latestValue);
|
|
80
|
-
}, [])
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
//#endregion
|
|
85
|
-
export { useBufferedValue };
|
|
86
|
-
//# sourceMappingURL=useBufferedValue.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBufferedValue.js","names":[],"sources":["../../../src/utils/react/useBufferedValue.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nimport { useLayoutEffect } from './useLayoutEffect';\n\nconst NOTHING_PENDING: unknown[] = [];\n\nexport interface UseBufferedValueOptions<T> {\n /**\n * Identity of a value, for values `Object.is` doesn't compare usefully — an array of colour\n * stops, a settings object. Defaults to the value itself, which is what strings want.\n */\n getKey?: (value: T) => unknown;\n /** Nothing can be typed into a disabled control, so there is nothing to protect. */\n isDisabled?: boolean;\n /** Same for a read-only one. */\n isReadOnly?: boolean;\n /** Escape hatch: `false` makes the hook inert and passes `value`/`onChange` straight through. */\n isBuffered?: boolean;\n}\n\nexport interface UseBufferedValueResult<T> {\n /** Render this instead of `value`. `undefined` passes through, meaning uncontrolled. */\n value: T | undefined;\n /** Call this instead of `onChange`. Still emits once per call, in the same tick. */\n onChange: (next: T) => void;\n /** Drop the buffer and let `value` win again. The text fields call it on blur. */\n reset: () => void;\n}\n\n/**\n * Holds a controlled value locally so a parent that echoes the new value back *late* cannot\n * overwrite what the user is doing.\n *\n * **Why any of this is needed.** A controlled `<input>` renders whatever string its parent hands\n * it. If the parent hands back the pre-keystroke string — because its state reaches the component\n * through a store that publishes a render late, or through a debounce, or a deferred update —\n * React writes that stale string into the DOM node, and a native `value` assignment collapses the\n * selection to the end. Typing in the middle of a field throws the caret to the end. The value\n * eventually lands, so it looks like a caret bug rather than a data-flow one.\n *\n * The buffer keeps the typed text on screen until the parent catches up, while still emitting\n * `onChange` once per keystroke — so nothing downstream changes: no debouncing, no commit-on-blur,\n * no swallowed calls.\n *\n * Generic on purpose. The same lateness affects values that aren't strings (a colour scale's array\n * of stops emitted through a chart-spec pipeline), and `getKey` is where those pass the signature\n * function they already have.\n *\n * ```tsx\n * const buffered = useBufferedValue(value, onChange, { isReadOnly, isDisabled });\n *\n * <input value={buffered.value} onChange={buffered.onChange} onBlur={buffered.reset} />\n * ```\n *\n * One case it cannot resolve: an external change that lands *between* an emit and its echo, and\n * happens to equal a value still in flight, is read as our own echo. Telling those apart needs a\n * sequence number from the store rather than value matching.\n */\nexport function useBufferedValue<T>(\n value: T | undefined,\n onChange?: (next: T) => void,\n options: UseBufferedValueOptions<T> = {},\n): UseBufferedValueResult<T> {\n const { getKey, isDisabled, isReadOnly, isBuffered = true } = options;\n\n // An `undefined` value means the control is uncontrolled — it already owns its text.\n const isActive =\n isBuffered && value !== undefined && !isDisabled && !isReadOnly;\n\n const keyOf = (next: T | undefined): unknown =>\n getKey && next != null ? getKey(next) : next;\n const valueKey = keyOf(value);\n\n // The only state, and the only thing that can force a render: what the user typed. It is rendered\n // *while we are ahead of the parent* and ignored otherwise — which is what makes adopting an\n // external value free, since there is nothing to write.\n const [draft, setDraft] = useState(value);\n // Keys we have emitted that the parent hasn't echoed back yet. A queue rather than one slot: the\n // user can type again before the first echo returns, and each echo has to be recognised as ours\n // or applying it would swallow everything typed after it.\n const pendingRef = useRef<unknown[]>(NOTHING_PENDING);\n // The last value we accepted as the parent's opinion — not the last one we rendered.\n const seenKeyRef = useRef<unknown>(valueKey);\n const latestRef = useRef({ value, onChange, keyOf, isActive });\n\n // These three refs are read during render but written *only* in an event handler or after commit,\n // never during a render. That is what keeps them honest under concurrent rendering: React may\n // discard a render (an interrupted pass, a StrictMode double-invoke), and a discarded render runs\n // no effects, so it cannot leave the bookkeeping describing a pass that never committed.\n const pending = pendingRef.current;\n const propMoved = valueKey !== seenKeyRef.current;\n // Our own echo, a render or more late — possibly an earlier emit a later one superseded.\n const echoAt = propMoved ? pending.indexOf(valueKey) : -1;\n // A real change from the parent: undo/redo, a reset, a transformed value, another record.\n const isExternal = propMoved && echoAt < 0;\n const isAhead = isActive && !isExternal && pending.length > 0;\n // Not being ahead is the whole of \"the parent wins\", so an external change needs no state write\n // and costs no extra render. Being ahead — including when the value is the stale one the parent\n // held *before* the keystroke — is what stops React writing that string back and collapsing the\n // selection.\n const rendered = isAhead ? draft : value;\n\n useLayoutEffect(() => {\n latestRef.current = { value, onChange, keyOf, isActive };\n seenKeyRef.current = valueKey;\n\n if (!isActive || isExternal) {\n pendingRef.current = NOTHING_PENDING;\n } else if (echoAt >= 0) {\n pendingRef.current = pending.slice(echoAt + 1);\n }\n });\n\n const handleChange = useCallback((next: T) => {\n const {\n onChange: latestOnChange,\n keyOf: latestKeyOf,\n isActive: latestIsActive,\n } = latestRef.current;\n\n if (latestIsActive) {\n // A ref write in an event handler, which runs after a commit — never mid-render.\n pendingRef.current = [...pendingRef.current, latestKeyOf(next)];\n setDraft(next);\n }\n\n latestOnChange?.(next);\n }, []);\n\n const reset = useCallback(() => {\n const { value: latestValue } = latestRef.current;\n\n // Emptying the queue is what hands control back: with nothing in flight we are no longer ahead,\n // so the parent's value is rendered again. `setDraft` is only here to schedule that render.\n pendingRef.current = NOTHING_PENDING;\n setDraft(latestValue);\n }, []);\n\n return { value: rendered, onChange: handleChange, reset };\n}\n"],"mappings":";;;;;AAIA,MAAM,kBAA6B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDrC,SAAgB,iBACd,OACA,UACA,UAAsC,EAAE,EACb;CAC3B,MAAM,EAAE,QAAQ,YAAY,YAAY,aAAa,SAAS;CAG9D,MAAM,WACJ,cAAc,UAAU,UAAa,CAAC,cAAc,CAAC;CAEvD,MAAM,SAAS,SACb,UAAU,QAAQ,OAAO,OAAO,KAAK,GAAG;CAC1C,MAAM,WAAW,MAAM,MAAM;CAK7B,MAAM,CAAC,OAAO,YAAY,SAAS,MAAM;CAIzC,MAAM,aAAa,OAAkB,gBAAgB;CAErD,MAAM,aAAa,OAAgB,SAAS;CAC5C,MAAM,YAAY,OAAO;EAAE;EAAO;EAAU;EAAO;EAAU,CAAC;CAM9D,MAAM,UAAU,WAAW;CAC3B,MAAM,YAAY,aAAa,WAAW;CAE1C,MAAM,SAAS,YAAY,QAAQ,QAAQ,SAAS,GAAG;CAEvD,MAAM,aAAa,aAAa,SAAS;CAMzC,MAAM,WALU,YAAY,CAAC,cAAc,QAAQ,SAAS,IAKjC,QAAQ;AAEnC,yBAAsB;AACpB,YAAU,UAAU;GAAE;GAAO;GAAU;GAAO;GAAU;AACxD,aAAW,UAAU;AAErB,MAAI,CAAC,YAAY,WACf,YAAW,UAAU;WACZ,UAAU,EACnB,YAAW,UAAU,QAAQ,MAAM,SAAS,EAAE;GAEhD;AA2BF,QAAO;EAAE,OAAO;EAAU,UAzBL,aAAa,SAAY;GAC5C,MAAM,EACJ,UAAU,gBACV,OAAO,aACP,UAAU,mBACR,UAAU;AAEd,OAAI,gBAAgB;AAElB,eAAW,UAAU,CAAC,GAAG,WAAW,SAAS,YAAY,KAAK,CAAC;AAC/D,aAAS,KAAK;;AAGhB,oBAAiB,KAAK;KACrB,EAAE,CAAC;EAW4C,OATpC,kBAAkB;GAC9B,MAAM,EAAE,OAAO,gBAAgB,UAAU;AAIzC,cAAW,UAAU;AACrB,YAAS,YAAY;KACpB,EAAE,CAAC;EAEmD"}
|