@cube-dev/ui-kit 0.157.3 → 0.159.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 +155 -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 +10 -4
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +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 +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.d.ts +7 -0
- package/dist/components/content/Item/Item.js +13 -6
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +41 -32
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/data/DataTable/DataTable.js +82 -24
- package/dist/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/components/data/DataTable/types.d.ts +56 -1
- package/dist/components/data/ItemTable/ItemTable.js +13 -5
- package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +3 -7
- package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/ItemTable/types.d.ts +19 -0
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +5 -3
- package/dist/components/data/TableBase/RowCollection.js.map +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +115 -0
- package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -0
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +195 -33
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/column-menu.d.ts +36 -0
- package/dist/components/data/TableBase/column-menu.js +104 -0
- package/dist/components/data/TableBase/column-menu.js.map +1 -0
- package/dist/components/data/TableBase/column-tint.js +168 -0
- package/dist/components/data/TableBase/column-tint.js.map +1 -0
- package/dist/components/data/TableBase/index.d.ts +3 -2
- package/dist/components/data/TableBase/row-menu.js +11 -6
- package/dist/components/data/TableBase/row-menu.js.map +1 -1
- package/dist/components/data/TableBase/styled.js +45 -16
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/types.d.ts +104 -6
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +100 -0
- package/dist/components/data/TableBase/use-column-order.js.map +1 -0
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +24 -2
- package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +20 -1
- package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +40 -1
- package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
- package/dist/components/data/TableBase/use-table-storage.d.ts +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +6 -2
- package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
- package/dist/components/data/index.d.ts +2 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/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 +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/ColorSwatch.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/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.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/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 +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 +13 -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 +5 -1
- package/dist/i18n/locales/en-US/uikit.js +5 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +4 -0
- package/dist/i18n/locales/es-ES/uikit.js +5 -1
- package/dist/i18n/locales/es-MX/uikit.js +5 -1
- package/dist/i18n/locales/fr-FR/uikit.js +5 -1
- package/dist/i18n/locales/it-IT/uikit.js +5 -1
- package/dist/i18n/locales/ja-JP/uikit.js +5 -1
- package/dist/i18n/locales/nb-NO/uikit.js +5 -1
- package/dist/i18n/locales/pt-BR/uikit.js +5 -1
- package/dist/i18n/locales/pt-PT/uikit.js +5 -1
- package/dist/i18n/locales/sv-SE/uikit.js +5 -1
- package/dist/i18n/locales/vi-VN/uikit.js +5 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.d.ts +12 -0
- package/dist/icons/ArrowNarrowDownIcon.js +11 -0
- package/dist/icons/ArrowNarrowDownIcon.js.map +1 -0
- package/dist/icons/ArrowNarrowUpIcon.d.ts +12 -0
- package/dist/icons/ArrowNarrowUpIcon.js +11 -0
- package/dist/icons/ArrowNarrowUpIcon.js.map +1 -0
- 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/index.d.ts +2 -0
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +7 -2
- 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/color-theme.d.ts +86 -0
- package/dist/tokens/color-theme.js +156 -0
- package/dist/tokens/color-theme.js.map +1 -0
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/index.js +2 -1
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.d.ts +1 -1
- package/dist/tokens/palette-config.js +17 -5
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.d.ts +1 -1
- package/dist/tokens/palette.js +44 -2
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/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/disabledProps.d.ts +49 -0
- package/dist/utils/react/disabledProps.js +82 -0
- package/dist/utils/react/disabledProps.js.map +1 -0
- 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.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/Theming.md +20 -13
- package/docs/components/actions/Button.md +17 -0
- package/docs/components/content/Item.md +8 -1
- package/docs/components/data/DataTable.md +118 -2
- package/docs/components/data/ItemTable.md +37 -5
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
|
|
2
|
+
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { useDraggableItem, useDropIndicator } from "react-aria";
|
|
6
|
+
|
|
7
|
+
//#region src/components/data/TableBase/TableHeaderCell.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Controls inside the header that own their own press, and must never start a
|
|
10
|
+
* column drag.
|
|
11
|
+
*
|
|
12
|
+
* Drag-source resolution walks the DOM tree, not the React event path, so
|
|
13
|
+
* `Item`'s `Actions` slot calling `stopPropagation` does nothing here — the
|
|
14
|
+
* `<th>` is still the drag source as far as the browser is concerned. Only
|
|
15
|
+
* `preventDefault` on `dragstart` stops it, which is what the capture handler
|
|
16
|
+
* below does.
|
|
17
|
+
*/
|
|
18
|
+
const NO_DRAG_SELECTOR = "[data-element=\"Resizer\"], [data-element=\"Actions\"], a, button, input, select, textarea, [role=\"button\"], [role=\"menuitem\"]";
|
|
19
|
+
function HeaderCell(props) {
|
|
20
|
+
const { cellProps, extra, children } = props;
|
|
21
|
+
return /* @__PURE__ */ jsx("th", {
|
|
22
|
+
...cellProps,
|
|
23
|
+
...extra,
|
|
24
|
+
children
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A header cell inside a collection that accepts drags.
|
|
29
|
+
*
|
|
30
|
+
* Split from the plain one so the drag hooks can be called unconditionally —
|
|
31
|
+
* they are hooks, and whether a table reorders its columns is a prop.
|
|
32
|
+
*/
|
|
33
|
+
function DraggableHeaderCell(props) {
|
|
34
|
+
const { columnKey, hasAction, isLastDraggable, dragState, dropState } = props;
|
|
35
|
+
const { dragProps, isDragging } = useDraggableItem({
|
|
36
|
+
key: columnKey,
|
|
37
|
+
hasAction
|
|
38
|
+
}, dragState);
|
|
39
|
+
return /* @__PURE__ */ jsxs(HeaderCell, {
|
|
40
|
+
...props,
|
|
41
|
+
extra: {
|
|
42
|
+
...mergeProps$1(props.cellProps, dragProps, { onDragStartCapture: (event) => {
|
|
43
|
+
if (event.target?.closest?.(NO_DRAG_SELECTOR)) {
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
event.stopPropagation();
|
|
46
|
+
}
|
|
47
|
+
} }),
|
|
48
|
+
"data-draggable": "",
|
|
49
|
+
"data-dragging": isDragging ? "" : void 0
|
|
50
|
+
},
|
|
51
|
+
children: [
|
|
52
|
+
/* @__PURE__ */ jsx(ColumnDropIndicator, {
|
|
53
|
+
columnKey,
|
|
54
|
+
dropPosition: "before",
|
|
55
|
+
dropState
|
|
56
|
+
}),
|
|
57
|
+
props.children,
|
|
58
|
+
isLastDraggable ? /* @__PURE__ */ jsx(ColumnDropIndicator, {
|
|
59
|
+
columnKey,
|
|
60
|
+
dropPosition: "after",
|
|
61
|
+
dropState
|
|
62
|
+
}) : null
|
|
63
|
+
]
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function TableHeaderCell(props) {
|
|
67
|
+
return props.dragState && props.dropState ? /* @__PURE__ */ jsx(DraggableHeaderCell, { ...props }) : /* @__PURE__ */ jsx(HeaderCell, { ...props });
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The line showing where a dragged column would land.
|
|
71
|
+
*
|
|
72
|
+
* Lives INSIDE the `<th>`, absolutely positioned on one of its edges — a `<tr>`
|
|
73
|
+
* may only contain `<th>`/`<td>`, so there is nowhere between two header cells
|
|
74
|
+
* to put it. Being absolute also means mounting one cannot shift the layout,
|
|
75
|
+
* which is the bug class the row indicator had to be careful about.
|
|
76
|
+
*
|
|
77
|
+
* `useDropIndicator` reports `isHidden` unless this is the active target, so a
|
|
78
|
+
* table merely capable of reordering keeps its exact DOM until a drag starts.
|
|
79
|
+
*/
|
|
80
|
+
function ColumnDropIndicator({ columnKey, dropPosition, dropState }) {
|
|
81
|
+
const ref = useRef(null);
|
|
82
|
+
const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator({ target: {
|
|
83
|
+
type: "item",
|
|
84
|
+
key: columnKey,
|
|
85
|
+
dropPosition
|
|
86
|
+
} }, dropState, ref);
|
|
87
|
+
/**
|
|
88
|
+
* Re-register the drop targets when the header's geometry changes.
|
|
89
|
+
*
|
|
90
|
+
* React Aria's `ListDropTargetDelegate` measures every `[data-key]` at the
|
|
91
|
+
* moment a drag starts. A column resized mid-drag — or a scrollbar appearing —
|
|
92
|
+
* leaves those rects stale, and the drop lands in the wrong place. Same trick
|
|
93
|
+
* `TabDropIndicator` uses.
|
|
94
|
+
*/
|
|
95
|
+
const [, forceUpdate] = useState(0);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
const row = ref.current?.closest("[data-element=\"HeadRow\"]");
|
|
98
|
+
if (!row || typeof ResizeObserver === "undefined") return;
|
|
99
|
+
const observer = new ResizeObserver(() => forceUpdate((n) => n + 1));
|
|
100
|
+
observer.observe(row);
|
|
101
|
+
return () => observer.disconnect();
|
|
102
|
+
}, []);
|
|
103
|
+
if (isHidden) return null;
|
|
104
|
+
return /* @__PURE__ */ jsx("div", {
|
|
105
|
+
...dropIndicatorProps,
|
|
106
|
+
ref,
|
|
107
|
+
"data-element": "ColumnDropIndicator",
|
|
108
|
+
"data-position": dropPosition,
|
|
109
|
+
"data-drop-target": isDropTarget ? "" : void 0
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
//#endregion
|
|
114
|
+
export { TableHeaderCell };
|
|
115
|
+
//# sourceMappingURL=TableHeaderCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableHeaderCell.js","names":["mergeProps"],"sources":["../../../../src/components/data/TableBase/TableHeaderCell.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useDraggableItem, useDropIndicator } from 'react-aria';\n\nimport { mergeProps } from '../../../utils/react';\n\nimport type { ReactNode } from 'react';\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n} from 'react-stately';\n\n/**\n * Controls inside the header that own their own press, and must never start a\n * column drag.\n *\n * Drag-source resolution walks the DOM tree, not the React event path, so\n * `Item`'s `Actions` slot calling `stopPropagation` does nothing here — the\n * `<th>` is still the drag source as far as the browser is concerned. Only\n * `preventDefault` on `dragstart` stops it, which is what the capture handler\n * below does.\n */\nconst NO_DRAG_SELECTOR =\n '[data-element=\"Resizer\"], [data-element=\"Actions\"], a, button, input, select, textarea, [role=\"button\"], [role=\"menuitem\"]';\n\nexport interface TableHeaderCellProps {\n columnKey: string;\n /** Everything the renderer already computed: mods, ARIA, handlers, styles. */\n cellProps: Record<string, any>;\n /** Whether the header itself responds to Enter — i.e. it sorts. */\n hasAction: boolean;\n isLastDraggable: boolean;\n dragState?: DraggableCollectionState;\n dropState?: DroppableCollectionState;\n children: ReactNode;\n}\n\nfunction HeaderCell(\n props: TableHeaderCellProps & { extra?: Record<string, any> },\n) {\n const { cellProps, extra, children } = props;\n\n return (\n <th {...cellProps} {...extra}>\n {children}\n </th>\n );\n}\n\n/**\n * A header cell inside a collection that accepts drags.\n *\n * Split from the plain one so the drag hooks can be called unconditionally —\n * they are hooks, and whether a table reorders its columns is a prop.\n */\nfunction DraggableHeaderCell(props: TableHeaderCellProps) {\n const { columnKey, hasAction, isLastDraggable, dragState, dropState } = props;\n\n const { dragProps, isDragging } = useDraggableItem(\n // `hasAction` re-gates React Aria's Enter/Space capture behind Alt, so plain\n // Enter still reaches the header's own sort handler instead of starting a\n // keyboard drag session.\n { key: columnKey, hasAction },\n dragState as DraggableCollectionState,\n );\n\n return (\n <HeaderCell\n {...props}\n extra={{\n // `dragProps` last for `draggable`, which is a value rather than a\n // handler — `mergeProps` chains handlers but takes the later value. The\n // sort `onClick` survives: `useDraggableItem` only deletes its own.\n ...mergeProps(props.cellProps, dragProps, {\n // Capture, so this runs before React Aria's own `onDragStart` on the\n // same node and can cancel it.\n onDragStartCapture: (event: any) => {\n if ((event.target as HTMLElement)?.closest?.(NO_DRAG_SELECTOR)) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n }),\n 'data-draggable': '',\n 'data-dragging': isDragging ? '' : undefined,\n }}\n >\n <ColumnDropIndicator\n columnKey={columnKey}\n dropPosition=\"before\"\n dropState={dropState as DroppableCollectionState}\n />\n {props.children}\n {isLastDraggable ? (\n <ColumnDropIndicator\n columnKey={columnKey}\n dropPosition=\"after\"\n dropState={dropState as DroppableCollectionState}\n />\n ) : null}\n </HeaderCell>\n );\n}\n\nexport function TableHeaderCell(props: TableHeaderCellProps) {\n return props.dragState && props.dropState ? (\n <DraggableHeaderCell {...props} />\n ) : (\n <HeaderCell {...props} />\n );\n}\n\ninterface ColumnDropIndicatorProps {\n columnKey: string;\n dropPosition: 'before' | 'after';\n dropState: DroppableCollectionState;\n}\n\n/**\n * The line showing where a dragged column would land.\n *\n * Lives INSIDE the `<th>`, absolutely positioned on one of its edges — a `<tr>`\n * may only contain `<th>`/`<td>`, so there is nowhere between two header cells\n * to put it. Being absolute also means mounting one cannot shift the layout,\n * which is the bug class the row indicator had to be careful about.\n *\n * `useDropIndicator` reports `isHidden` unless this is the active target, so a\n * table merely capable of reordering keeps its exact DOM until a drag starts.\n */\nfunction ColumnDropIndicator({\n columnKey,\n dropPosition,\n dropState,\n}: ColumnDropIndicatorProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator(\n { target: { type: 'item', key: columnKey, dropPosition } },\n dropState,\n ref,\n );\n\n /**\n * Re-register the drop targets when the header's geometry changes.\n *\n * React Aria's `ListDropTargetDelegate` measures every `[data-key]` at the\n * moment a drag starts. A column resized mid-drag — or a scrollbar appearing —\n * leaves those rects stale, and the drop lands in the wrong place. Same trick\n * `TabDropIndicator` uses.\n */\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n const row = ref.current?.closest('[data-element=\"HeadRow\"]');\n\n if (!row || typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(() => forceUpdate((n) => n + 1));\n\n observer.observe(row);\n\n return () => observer.disconnect();\n }, []);\n\n if (isHidden) return null;\n\n return (\n <div\n {...dropIndicatorProps}\n ref={ref}\n data-element=\"ColumnDropIndicator\"\n data-position={dropPosition}\n data-drop-target={isDropTarget ? '' : undefined}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,MAAM,mBACJ;AAcF,SAAS,WACP,OACA;CACA,MAAM,EAAE,WAAW,OAAO,aAAa;AAEvC,QACE,oBAAC;EAAG,GAAI;EAAW,GAAI;EACpB;GACE;;;;;;;;AAUT,SAAS,oBAAoB,OAA6B;CACxD,MAAM,EAAE,WAAW,WAAW,iBAAiB,WAAW,cAAc;CAExE,MAAM,EAAE,WAAW,eAAe,iBAIhC;EAAE,KAAK;EAAW;EAAW,EAC7B,UACD;AAED,QACE,qBAAC;EACC,GAAI;EACJ,OAAO;GAIL,GAAGA,aAAW,MAAM,WAAW,WAAW,EAGxC,qBAAqB,UAAe;AAClC,QAAK,MAAM,QAAwB,UAAU,iBAAiB,EAAE;AAC9D,WAAM,gBAAgB;AACtB,WAAM,iBAAiB;;MAG5B,CAAC;GACF,kBAAkB;GAClB,iBAAiB,aAAa,KAAK;GACpC;;GAED,oBAAC;IACY;IACX,cAAa;IACF;KACX;GACD,MAAM;GACN,kBACC,oBAAC;IACY;IACX,cAAa;IACF;KACX,GACA;;GACO;;AAIjB,SAAgB,gBAAgB,OAA6B;AAC3D,QAAO,MAAM,aAAa,MAAM,YAC9B,oBAAC,uBAAoB,GAAI,QAAS,GAElC,oBAAC,cAAW,GAAI,QAAS;;;;;;;;;;;;;AAqB7B,SAAS,oBAAoB,EAC3B,WACA,cACA,aAC2B;CAC3B,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,EAAE,oBAAoB,UAAU,iBAAiB,iBACrD,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAW;EAAc,EAAE,EAC1D,WACA,IACD;;;;;;;;;CAUD,MAAM,GAAG,eAAe,SAAS,EAAE;AAEnC,iBAAgB;EACd,MAAM,MAAM,IAAI,SAAS,QAAQ,6BAA2B;AAE5D,MAAI,CAAC,OAAO,OAAO,mBAAmB,YAAa;EAEnD,MAAM,WAAW,IAAI,qBAAqB,aAAa,MAAM,IAAI,EAAE,CAAC;AAEpE,WAAS,QAAQ,IAAI;AAErB,eAAa,SAAS,YAAY;IACjC,EAAE,CAAC;AAEN,KAAI,SAAU,QAAO;AAErB,QACE,oBAAC;EACC,GAAI;EACC;EACL,gBAAa;EACb,iBAAe;EACf,oBAAkB,eAAe,KAAK;GACtC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { useRef } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,25 +1,33 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
|
|
4
4
|
import { TextItem } from "../../content/TextItem/TextItem.js";
|
|
5
5
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
6
6
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ArrowNarrowDownIcon } from "../../../icons/ArrowNarrowDownIcon.js";
|
|
8
|
+
import { ArrowNarrowUpIcon } from "../../../icons/ArrowNarrowUpIcon.js";
|
|
8
9
|
import { MoreIcon } from "../../../icons/MoreIcon.js";
|
|
9
10
|
import { _MenuTrigger } from "../../actions/Menu/MenuTrigger.js";
|
|
10
11
|
import { __Menu } from "../../actions/Menu/Menu.js";
|
|
11
12
|
import { Action } from "../../actions/Action/Action.js";
|
|
12
13
|
import { useContextMenu } from "../../actions/use-context-menu.js";
|
|
13
14
|
import { useToast } from "../../overlays/Toast/useToast.js";
|
|
15
|
+
import { usePaletteVersion } from "../../../tokens/palette-config.js";
|
|
16
|
+
import { SIZES, SIZE_NAME_TO_KEY } from "../../../tokens/sizes.js";
|
|
17
|
+
import { getColorTheme, useColorTheme } from "../../../tokens/color-theme.js";
|
|
14
18
|
import { __Checkbox } from "../../fields/Checkbox/Checkbox.js";
|
|
15
19
|
import { Placeholder } from "../../content/Placeholder/Placeholder.js";
|
|
16
20
|
import { Skeleton } from "../../content/Skeleton/Skeleton.js";
|
|
17
|
-
import { ColumnResizer } from "./ColumnResizer.js";
|
|
18
21
|
import { ROW_MENU_COLUMN_KEY, isMenuEmpty, normalizeMenuAction } from "./row-menu.js";
|
|
22
|
+
import { COLUMN_MENU_SORT_DIRECTION, isColumnMenuSortKey, processColumnMenuItems } from "./column-menu.js";
|
|
23
|
+
import { buildColumnTints, tintSlot } from "./column-tint.js";
|
|
24
|
+
import { ColumnResizer } from "./ColumnResizer.js";
|
|
19
25
|
import { TableElement, TableHeaderItem } from "./styled.js";
|
|
26
|
+
import { TableHeaderCell } from "./TableHeaderCell.js";
|
|
20
27
|
import { TableRow, TableRowDropIndicator } from "./TableRow.js";
|
|
21
28
|
import { selectionRowKey } from "./types.js";
|
|
22
29
|
import { toTsv } from "./use-cell-selection.js";
|
|
30
|
+
import { getDraggableColumnKeys, isColumnDraggable } from "./use-column-order.js";
|
|
23
31
|
import { useRowMoveAnimation } from "./use-row-move-animation.js";
|
|
24
32
|
import { useScrollability } from "./use-scrollability.js";
|
|
25
33
|
import { getColumnText, getColumnValue } from "./use-table-columns.js";
|
|
@@ -48,6 +56,23 @@ const ARIA_SORT = {
|
|
|
48
56
|
desc: "descending"
|
|
49
57
|
};
|
|
50
58
|
/**
|
|
59
|
+
* Registers one column tint's tokens.
|
|
60
|
+
*
|
|
61
|
+
* A component per theme rather than a loop of `useColorTheme` calls: the number
|
|
62
|
+
* of tinted columns is data-dependent, and hooks cannot be called in a loop. Each
|
|
63
|
+
* of these has a fixed hook count, and mounting a different NUMBER of them is
|
|
64
|
+
* fine. Keyed on the theme name, so remounting only happens when the set of
|
|
65
|
+
* colours actually changes.
|
|
66
|
+
*
|
|
67
|
+
* Renders nothing — `useColorTheme` injects into a global slot keyed by the
|
|
68
|
+
* theme's own hash, so two tables sharing a colour share one injection and
|
|
69
|
+
* neither can evict the other's.
|
|
70
|
+
*/
|
|
71
|
+
function ColumnTintRegistrar({ config }) {
|
|
72
|
+
useColorTheme(config);
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
51
76
|
* Content height per size step, mirroring `$row-height` in `styled.ts`. Only the
|
|
52
77
|
* initial estimate — every rendered row is measured, so a wrong guess costs a
|
|
53
78
|
* scrollbar adjustment, not a layout bug. The `+ 1` is the row separator.
|
|
@@ -83,13 +108,32 @@ function pinStyle(column) {
|
|
|
83
108
|
* bookkeeping and the tasty sub-element contract have a single implementation.
|
|
84
109
|
*/
|
|
85
110
|
function TableView(props) {
|
|
86
|
-
const { qa, rows, getRowKey, layout, onScrollerRef, rootRef, size = "medium", shape = "plain", rowHeight, headerHeight, isHeaderHidden = false, isStriped = false, hasColumnDividers, isRowMoveAnimated = true, isHeaderSticky = true, isVirtualized = "auto", virtualizeThreshold = 50, overscan = 20, isLoading = false, loadingIndicator = "overlay", skeletonRowCount = 6, selection, selectionTooltip, overlay, rowMenu, rowContextMenu = false, onRowMenuAction, rowMenuTriggerProps, rowLink, onRowAction, onLoadMore, hasMore = false, isLoadingMore = false, loadMoreMargin, pinnedTopRows, pinnedBottomRows, cellSelection, rowNumberOffset = 0, rowIndexOffset = 0, totalRowCount, isReorderable = false, dragState, dropState, collectionProps, bodyRef, isResizable = false, onColumnResize, onColumnResizeEnd, emptyLabel, noResultsLabel, error, isFiltered = false, sortMode = "off", sort, sorts, onColumnSort, getRowProps, headerPreset, contentPreset, toolbar, footer, ariaLabel, styles, headerStyles, headerCellStyles, bodyStyles, rowStyles, cellStyles, mods } = props;
|
|
111
|
+
const { qa, rows, getRowKey, layout, onScrollerRef, rootRef, size = "medium", shape = "plain", rowSize, rowHeight, headerHeight, isHeaderHidden = false, isStriped = false, hasColumnDividers, isRowMoveAnimated = true, isHeaderSticky = true, isVirtualized = "auto", virtualizeThreshold = 50, overscan = 20, isLoading = false, loadingIndicator = "overlay", skeletonRowCount = 6, selection, selectionTooltip, overlay, rowMenu, rowContextMenu = false, onRowMenuAction, rowMenuTriggerProps, rowLink, onRowAction, onLoadMore, hasMore = false, isLoadingMore = false, loadMoreMargin, pinnedTopRows, pinnedBottomRows, cellSelection, rowNumberOffset = 0, rowIndexOffset = 0, totalRowCount, isReorderable = false, dragState, dropState, collectionProps, isColumnReorderable = false, columnDragState, columnDropState, headCollectionProps, headRowRef, onColumnFocus, bodyRef, isResizable = false, onColumnResize, onColumnResizeEnd, emptyLabel, noResultsLabel, error, isFiltered = false, sortMode = "off", sort, sorts, onColumnSort, onColumnSortChange, columnContextMenu = true, onColumnMenuAction, columnMenuTriggerProps, columnMenuProps, getRowProps, headerPreset, contentPreset, toolbar, footer, ariaLabel, styles, headerStyles, headerCellStyles, bodyStyles, rowStyles, cellStyles, mods } = props;
|
|
87
112
|
const { columns } = layout;
|
|
88
113
|
const columnCount = columns.length;
|
|
114
|
+
/**
|
|
115
|
+
* `rowSize` resolved to the size scale, or `null` when it was not given.
|
|
116
|
+
*
|
|
117
|
+
* Both halves come from `SIZE_NAME_TO_KEY` rather than being written out
|
|
118
|
+
* twice: the CSS keeps the token so it follows the scale, and the virtualizer
|
|
119
|
+
* needs the number, and the two must not drift.
|
|
120
|
+
*/
|
|
121
|
+
const rowSizeKey = rowSize ? SIZE_NAME_TO_KEY[rowSize] : null;
|
|
122
|
+
const lastDraggableKey = isColumnReorderable ? getDraggableColumnKeys(columns, true).at(-1) ?? null : null;
|
|
89
123
|
const { t } = useI18n();
|
|
90
124
|
const toast = useToast();
|
|
91
125
|
const [scrollerEl, setScrollerEl] = useState(null);
|
|
92
126
|
const scrollerRef = useRef(null);
|
|
127
|
+
/**
|
|
128
|
+
* The column whose menu is open, held for the whole table rather than per
|
|
129
|
+
* header cell.
|
|
130
|
+
*
|
|
131
|
+
* `renderHeaderCell` is a closure inside this component, not a component of
|
|
132
|
+
* its own, so it cannot hold state — and only one column menu can be open at a
|
|
133
|
+
* time anyway. Controlled rather than letting `MenuTrigger` own it: Shift+F10
|
|
134
|
+
* has to be able to open it from the `<th>`, and the trigger is not a tab stop.
|
|
135
|
+
*/
|
|
136
|
+
const [openMenuColumnKey, setOpenMenuColumnKey] = useState(null);
|
|
93
137
|
const localBodyRef = useRef(null);
|
|
94
138
|
const handleBodyRef = useCallback((element) => {
|
|
95
139
|
localBodyRef.current = element;
|
|
@@ -108,18 +152,23 @@ function TableView(props) {
|
|
|
108
152
|
const bodyRowIndex = (rowIndex) => headerRowCount + pinnedTopCount + rowIndexOffset + rowIndex + 1;
|
|
109
153
|
/** 1-based `aria-rowindex` for the i-th pinned row at `edge`. */
|
|
110
154
|
const pinnedRowIndex = (index, edge) => edge === "top" ? headerRowCount + index + 1 : headerRowCount + pinnedTopCount + bodyRowCount + index + 1;
|
|
155
|
+
const tints = useMemo(() => buildColumnTints(columns, { resolveTheme: getColorTheme }), [columns, usePaletteVersion()]);
|
|
111
156
|
const mergedStyles = useMemo(() => ({
|
|
112
157
|
...styles,
|
|
113
158
|
...contentPreset ? { Table: { preset: contentPreset } } : null,
|
|
114
159
|
...headerStyles ? { HeadRow: headerStyles } : null,
|
|
115
|
-
...headerPreset || headerCellStyles ? { HeaderCell: {
|
|
160
|
+
...headerPreset || headerCellStyles || tints.headerCellStyles ? { HeaderCell: {
|
|
116
161
|
...headerPreset ? { preset: headerPreset } : null,
|
|
162
|
+
...tints.headerCellStyles,
|
|
117
163
|
...headerCellStyles
|
|
118
164
|
} } : null,
|
|
119
165
|
...bodyStyles ? { Body: bodyStyles } : null,
|
|
120
166
|
...rowStyles ? { Row: rowStyles } : null,
|
|
121
|
-
...cellStyles ? { Cell:
|
|
122
|
-
|
|
167
|
+
...cellStyles || tints.cellStyles ? { Cell: {
|
|
168
|
+
...tints.cellStyles,
|
|
169
|
+
...cellStyles
|
|
170
|
+
} } : null,
|
|
171
|
+
...rowHeight != null ? { "$row-height": `${rowHeight}px` } : rowSizeKey ? { "$row-height": `$size-${rowSizeKey.toLowerCase()}` } : null,
|
|
123
172
|
...headerHeight != null ? { "$header-height": `${headerHeight}px` } : null
|
|
124
173
|
}), [
|
|
125
174
|
styles,
|
|
@@ -130,8 +179,10 @@ function TableView(props) {
|
|
|
130
179
|
bodyStyles,
|
|
131
180
|
rowStyles,
|
|
132
181
|
cellStyles,
|
|
182
|
+
rowSizeKey,
|
|
133
183
|
rowHeight,
|
|
134
|
-
headerHeight
|
|
184
|
+
headerHeight,
|
|
185
|
+
tints
|
|
135
186
|
]);
|
|
136
187
|
/**
|
|
137
188
|
* Whether a cell is inside the current range.
|
|
@@ -212,6 +263,21 @@ function TableView(props) {
|
|
|
212
263
|
if (column.index === 0) return "start";
|
|
213
264
|
if (column.index === columns.length - 1) return "end";
|
|
214
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* The row band, mirrored from the `<tr>` onto its cells.
|
|
268
|
+
*
|
|
269
|
+
* `Row` already carries `data-odd` and publishes `#row-base` from it, which is
|
|
270
|
+
* all an untinted cell needs. A TINTED cell has to pick its own band, and a
|
|
271
|
+
* sub-element's state keys resolve against the table root rather than its DOM
|
|
272
|
+
* parent — so the flag has to be on the cell itself. Same reason `data-pinned`
|
|
273
|
+
* is mirrored.
|
|
274
|
+
*
|
|
275
|
+
* Pinned rows are exempt: they carry no `data-odd` on the `<tr>` either, and
|
|
276
|
+
* banding a totals row would be wrong.
|
|
277
|
+
*/
|
|
278
|
+
function cellBandFlag(rowIndex, pinnedEdge) {
|
|
279
|
+
return pinnedEdge == null && isStriped && rowIndex % 2 === 1 ? "" : void 0;
|
|
280
|
+
}
|
|
215
281
|
function renderStateRow(content) {
|
|
216
282
|
return /* @__PURE__ */ jsx("tr", {
|
|
217
283
|
"data-element": "Row",
|
|
@@ -290,6 +356,7 @@ function TableView(props) {
|
|
|
290
356
|
"data-pin-edge": column.isPinEdge ? "" : void 0,
|
|
291
357
|
"data-last-row": isLastRow ? "" : void 0,
|
|
292
358
|
"data-pinned": pinnedEdge,
|
|
359
|
+
"data-odd": cellBandFlag(rowIndex, pinnedEdge),
|
|
293
360
|
"data-last-column": lastColumnFlag(column),
|
|
294
361
|
"data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
|
|
295
362
|
role: "gridcell",
|
|
@@ -316,6 +383,7 @@ function TableView(props) {
|
|
|
316
383
|
"data-pin-edge": column.isPinEdge ? "" : void 0,
|
|
317
384
|
"data-last-row": isLastRow ? "" : void 0,
|
|
318
385
|
"data-pinned": pinnedEdge,
|
|
386
|
+
"data-odd": cellBandFlag(rowIndex, pinnedEdge),
|
|
319
387
|
"data-last-column": lastColumnFlag(column),
|
|
320
388
|
"data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
|
|
321
389
|
role: "gridcell",
|
|
@@ -383,12 +451,33 @@ function TableView(props) {
|
|
|
383
451
|
"data-sorted": isSorted ? "" : void 0,
|
|
384
452
|
"data-dir": activeSort?.direction,
|
|
385
453
|
"aria-hidden": "true",
|
|
386
|
-
children: /* @__PURE__ */ jsx(
|
|
454
|
+
children: activeSort?.direction === "desc" ? /* @__PURE__ */ jsx(ArrowNarrowDownIcon, {}) : /* @__PURE__ */ jsx(ArrowNarrowUpIcon, {})
|
|
387
455
|
}) : null;
|
|
388
456
|
const hasCustomRightIcon = header?.rightIcon != null;
|
|
389
457
|
const rightIcon = hasCustomRightIcon ? header.rightIcon : sortIndicator;
|
|
390
458
|
const suffixContent = hasCustomRightIcon ? sortIndicator : null;
|
|
391
459
|
const suffix = header?.suffix != null || suffixContent ? /* @__PURE__ */ jsxs(Fragment$1, { children: [header?.suffix, suffixContent] }) : void 0;
|
|
460
|
+
const menuItems = resolveColumnMenu(column);
|
|
461
|
+
const hasMenu = menuItems != null;
|
|
462
|
+
const isContextOnly = columnContextMenu === "context-only";
|
|
463
|
+
const menuAction = hasMenu && !isContextOnly ? /* @__PURE__ */ jsxs(_MenuTrigger, {
|
|
464
|
+
isOpen: openMenuColumnKey === column.key,
|
|
465
|
+
placement: "bottom end",
|
|
466
|
+
onOpenChange: (open) => setOpenMenuColumnKey(open ? column.key : null),
|
|
467
|
+
children: [/* @__PURE__ */ jsx(ItemAction, {
|
|
468
|
+
tabIndex: -1,
|
|
469
|
+
icon: /* @__PURE__ */ jsx(MoreIcon, {}),
|
|
470
|
+
"aria-label": t("itemTable.columnMenu", "Column menu"),
|
|
471
|
+
...columnMenuTriggerProps,
|
|
472
|
+
...header?.menuTriggerProps
|
|
473
|
+
}), /* @__PURE__ */ jsx(__Menu, {
|
|
474
|
+
...columnMenuProps,
|
|
475
|
+
...header?.menuProps,
|
|
476
|
+
onAction: columnMenuActionHandler(column, false),
|
|
477
|
+
children: processColumnMenuItems(menuItems, columnMenuContext(column, isSortable, activeSort))
|
|
478
|
+
})]
|
|
479
|
+
}) : null;
|
|
480
|
+
const actions = header?.actions != null || menuAction ? /* @__PURE__ */ jsxs(Fragment$1, { children: [header?.actions, menuAction] }) : void 0;
|
|
392
481
|
const content = header?.render ? header.render(ctx) : column.title == null && !header ? null : /* @__PURE__ */ jsx(TableHeaderItem, {
|
|
393
482
|
icon: header?.icon,
|
|
394
483
|
rightIcon,
|
|
@@ -398,33 +487,57 @@ function TableView(props) {
|
|
|
398
487
|
descriptionPlacement: header?.descriptionPlacement,
|
|
399
488
|
tooltip: header?.tooltip ?? true,
|
|
400
489
|
theme: header?.theme,
|
|
401
|
-
actions
|
|
490
|
+
actions,
|
|
402
491
|
autoHideActions: header?.autoHideActions ?? true,
|
|
492
|
+
preserveActionsSpace: actions != null,
|
|
403
493
|
styles: header?.styles,
|
|
404
494
|
children: column.title
|
|
405
495
|
});
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
496
|
+
const isDraggable = isColumnDraggable(column, isColumnReorderable);
|
|
497
|
+
return /* @__PURE__ */ jsxs(TableHeaderCell, {
|
|
498
|
+
columnKey: column.key,
|
|
499
|
+
hasAction: isSortable,
|
|
500
|
+
isLastDraggable: isDraggable && column.key === lastDraggableKey,
|
|
501
|
+
dragState: isDraggable ? columnDragState : void 0,
|
|
502
|
+
dropState: isDraggable ? columnDropState : void 0,
|
|
503
|
+
cellProps: {
|
|
504
|
+
"data-element": "HeaderCell",
|
|
505
|
+
"data-key": column.key,
|
|
506
|
+
"data-pin": column.pin,
|
|
507
|
+
"data-pin-edge": column.isPinEdge ? "" : void 0,
|
|
508
|
+
"data-align": header?.align ?? column.align,
|
|
509
|
+
"data-sortable": isSortable ? "" : void 0,
|
|
510
|
+
"data-resizable": canResize ? "" : void 0,
|
|
511
|
+
"data-last-column": lastColumnFlag(column),
|
|
512
|
+
"data-sorted": isSorted ? "" : void 0,
|
|
513
|
+
"data-menu-open": openMenuColumnKey === column.key ? "" : void 0,
|
|
514
|
+
"data-tint": tintSlot(tints, column.key, "header"),
|
|
515
|
+
role: "columnheader",
|
|
516
|
+
scope: "col",
|
|
517
|
+
tabIndex: isSortable || hasMenu || isDraggable ? 0 : -1,
|
|
518
|
+
"aria-colindex": column.ariaColIndex,
|
|
519
|
+
"aria-sort": activeSort ? ARIA_SORT[activeSort.direction] : void 0,
|
|
520
|
+
"aria-haspopup": hasMenu ? "menu" : void 0,
|
|
521
|
+
style: pinStyle(column),
|
|
522
|
+
onFocus: isColumnReorderable ? () => onColumnFocus?.(isDraggable ? column.key : null) : void 0,
|
|
523
|
+
onClick: isSortable ? () => onColumnSort?.(column.key) : void 0,
|
|
524
|
+
onContextMenu: hasMenu ? (event) => openColumnContextMenu(column, isSortable, activeSort, event) : void 0,
|
|
525
|
+
onKeyDown: isSortable || hasMenu ? (event) => {
|
|
526
|
+
if (event.key === "F10" && event.shiftKey && hasMenu) {
|
|
527
|
+
if (isContextOnly) openColumnContextMenu(column, isSortable, activeSort, event);
|
|
528
|
+
else {
|
|
529
|
+
event.preventDefault();
|
|
530
|
+
event.stopPropagation();
|
|
531
|
+
setOpenMenuColumnKey(column.key);
|
|
532
|
+
}
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
if (!isSortable) return;
|
|
536
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
537
|
+
event.preventDefault();
|
|
538
|
+
onColumnSort?.(column.key);
|
|
539
|
+
} : void 0
|
|
540
|
+
},
|
|
428
541
|
children: [content, canResize ? /* @__PURE__ */ jsx(ColumnResizer, {
|
|
429
542
|
column,
|
|
430
543
|
label: t("itemTable.resizeColumn", "Resize column"),
|
|
@@ -442,6 +555,7 @@ function TableView(props) {
|
|
|
442
555
|
"data-kind": "row-number",
|
|
443
556
|
"data-last-row": isLastRow ? "" : void 0,
|
|
444
557
|
"data-pinned": pinnedEdge,
|
|
558
|
+
"data-odd": cellBandFlag(rowIndex, pinnedEdge),
|
|
445
559
|
"data-last-column": lastColumnFlag(column),
|
|
446
560
|
"data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
|
|
447
561
|
role: "gridcell",
|
|
@@ -476,6 +590,8 @@ function TableView(props) {
|
|
|
476
590
|
"data-link": link !== void 0 ? "" : void 0,
|
|
477
591
|
"data-last-row": isLastRow ? "" : void 0,
|
|
478
592
|
"data-pinned": pinnedEdge,
|
|
593
|
+
"data-odd": cellBandFlag(rowIndex, pinnedEdge),
|
|
594
|
+
"data-tint": tintSlot(tints, column.key, pinnedEdge == null ? "body" : "totals"),
|
|
479
595
|
"data-last-column": lastColumnFlag(column),
|
|
480
596
|
"data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
|
|
481
597
|
"data-cell-selected": isCellSelected(rangeKey, column.key) ? "" : void 0,
|
|
@@ -619,7 +735,7 @@ function TableView(props) {
|
|
|
619
735
|
count: shouldVirtualize ? rows.length : 0,
|
|
620
736
|
getScrollElement: () => scrollerRef.current,
|
|
621
737
|
getItemKey: (index) => String(getRowKey(rowsRef.current[index], index)),
|
|
622
|
-
estimateSize: () => (rowHeight ?? ESTIMATED_ROW_HEIGHT[size ?? "medium"]) + 1,
|
|
738
|
+
estimateSize: () => (rowHeight ?? (rowSizeKey ? SIZES[rowSizeKey] : ESTIMATED_ROW_HEIGHT[size ?? "medium"])) + 1,
|
|
623
739
|
measureElement: (element) => element.getBoundingClientRect().height,
|
|
624
740
|
overscan
|
|
625
741
|
});
|
|
@@ -744,6 +860,45 @@ function TableView(props) {
|
|
|
744
860
|
onAction: menuActionHandler(row, rowKey, true)
|
|
745
861
|
}, void 0, "clientX" in event.nativeEvent ? event.nativeEvent : void 0);
|
|
746
862
|
});
|
|
863
|
+
function resolveColumnMenu(column) {
|
|
864
|
+
if (columnContextMenu === false || column.isStructural) return null;
|
|
865
|
+
const items = column.header?.menu;
|
|
866
|
+
return isMenuEmpty(items) ? null : items;
|
|
867
|
+
}
|
|
868
|
+
/** The reserved sort keys, labelled here so `column-menu.ts` stays pure. */
|
|
869
|
+
function columnMenuContext(column, isSortable, activeSort) {
|
|
870
|
+
return {
|
|
871
|
+
isSortable,
|
|
872
|
+
sort: activeSort?.direction ?? null,
|
|
873
|
+
disallowSortRemoval: column.disallowSortRemoval === true,
|
|
874
|
+
labels: {
|
|
875
|
+
"sort-asc": t("itemTable.sortAscending", "Sort ascending"),
|
|
876
|
+
"sort-desc": t("itemTable.sortDescending", "Sort descending"),
|
|
877
|
+
"clear-sort": t("itemTable.clearSort", "Clear sort")
|
|
878
|
+
}
|
|
879
|
+
};
|
|
880
|
+
}
|
|
881
|
+
function columnMenuActionHandler(column, closeAfter) {
|
|
882
|
+
return (action) => {
|
|
883
|
+
const normalized = normalizeMenuAction(action);
|
|
884
|
+
if (isColumnMenuSortKey(normalized)) onColumnSortChange?.(column.key, COLUMN_MENU_SORT_DIRECTION[normalized]);
|
|
885
|
+
column.header?.onMenuAction?.(normalized);
|
|
886
|
+
onColumnMenuAction?.(normalized, column.key);
|
|
887
|
+
if (closeAfter) contextMenu.close();
|
|
888
|
+
};
|
|
889
|
+
}
|
|
890
|
+
const openColumnContextMenu = useEvent((column, isSortable, activeSort, event) => {
|
|
891
|
+
const items = resolveColumnMenu(column);
|
|
892
|
+
if (items == null) return;
|
|
893
|
+
event.preventDefault();
|
|
894
|
+
event.stopPropagation();
|
|
895
|
+
contextMenu.open({
|
|
896
|
+
...columnMenuProps,
|
|
897
|
+
...column.header?.menuProps,
|
|
898
|
+
children: processColumnMenuItems(items, columnMenuContext(column, isSortable, activeSort)),
|
|
899
|
+
onAction: columnMenuActionHandler(column, true)
|
|
900
|
+
}, void 0, "clientX" in event.nativeEvent ? event.nativeEvent : void 0);
|
|
901
|
+
});
|
|
747
902
|
/** Resolves the row a pointer or keyboard event landed in. */
|
|
748
903
|
function rowFromEvent(target) {
|
|
749
904
|
const element = target?.closest?.("tr[data-element=\"Row\"][data-key]");
|
|
@@ -764,6 +919,12 @@ function TableView(props) {
|
|
|
764
919
|
"data-element": "HeadRow",
|
|
765
920
|
role: "row",
|
|
766
921
|
"aria-rowindex": 1,
|
|
922
|
+
ref: headRowRef,
|
|
923
|
+
...headCollectionProps,
|
|
924
|
+
onKeyDownCapture: (event) => {
|
|
925
|
+
if (event.target?.closest?.("[data-element=\"Resizer\"]")) return;
|
|
926
|
+
headCollectionProps?.onKeyDownCapture?.(event);
|
|
927
|
+
},
|
|
767
928
|
children: columns.map(renderHeaderCell)
|
|
768
929
|
});
|
|
769
930
|
const tableProps = {
|
|
@@ -911,6 +1072,7 @@ function TableView(props) {
|
|
|
911
1072
|
}) }),
|
|
912
1073
|
overlay,
|
|
913
1074
|
contextMenu.rendered,
|
|
1075
|
+
tints.configs.map((config, index) => /* @__PURE__ */ jsx(ColumnTintRegistrar, { config }, index)),
|
|
914
1076
|
footer
|
|
915
1077
|
]
|
|
916
1078
|
});
|