@cube-dev/ui-kit 0.0.0-canary-e76eb3e → 0.0.0-canary-01fea9d
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 +44 -42
- package/dist/components/actions/use-context-menu.js.map +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +2 -2
- package/dist/components/content/Tag/Tag.js.map +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.d.ts +67 -0
- package/dist/components/fields/ColorInput/ColorInput.js +228 -0
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
- package/dist/components/fields/ColorInput/index.d.ts +2 -0
- package/dist/components/fields/ColorPicker/ColorPicker.d.ts +34 -37
- package/dist/components/fields/ColorPicker/ColorPicker.js +112 -184
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorPicker/index.d.ts +1 -3
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +251 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
- package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.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 +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
- package/dist/components/fields/RadioGroup/Radio.js +4 -4
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.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/{ColorPicker/ColorPickerPanel.js → color/ColorPanel.js} +13 -11
- package/dist/components/fields/color/ColorPanel.js.map +1 -0
- package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
- package/dist/components/fields/color/ColorSwatch.js +58 -0
- package/dist/components/fields/color/ColorSwatch.js.map +1 -0
- package/dist/components/fields/{ColorPicker → color}/channels.d.ts +1 -1
- package/dist/components/fields/{ColorPicker → color}/channels.js +2 -2
- package/dist/components/fields/color/channels.js.map +1 -0
- package/dist/components/fields/color/color.d.ts +21 -0
- package/dist/components/fields/{ColorPicker → color}/color.js +2 -2
- package/dist/components/fields/color/color.js.map +1 -0
- package/dist/components/fields/color/context.js +20 -0
- package/dist/components/fields/color/context.js.map +1 -0
- package/dist/components/fields/color/index.d.ts +4 -0
- package/dist/components/fields/index.d.ts +9 -3
- 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/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 +1 -5
- 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 +8 -24
- 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 +1 -199
- 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 +1 -35
- package/dist/i18n/locales/en-US/uikit.js +1 -35
- package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -40
- package/dist/i18n/locales/es-ES/uikit.js +1 -35
- package/dist/i18n/locales/es-MX/uikit.js +1 -35
- package/dist/i18n/locales/fr-FR/uikit.js +1 -35
- package/dist/i18n/locales/it-IT/uikit.js +1 -35
- package/dist/i18n/locales/ja-JP/uikit.js +1 -35
- package/dist/i18n/locales/nb-NO/uikit.js +1 -35
- package/dist/i18n/locales/pt-BR/uikit.js +1 -35
- package/dist/i18n/locales/pt-PT/uikit.js +1 -35
- package/dist/i18n/locales/sv-SE/uikit.js +1 -35
- package/dist/i18n/locales/vi-VN/uikit.js +1 -35
- 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 +15 -22
- package/dist/index.js +9 -10
- 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 +2 -11
- package/dist/tokens/typography.js.map +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/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/fields/ColorInput.md +272 -0
- package/docs/components/fields/ColorPicker.md +80 -146
- package/docs/components/fields/ColorSwatchGroup.md +206 -0
- package/package.json +3 -8
- package/dist/components/data/DataTable/DataTable.d.ts +0 -13
- package/dist/components/data/DataTable/DataTable.js +0 -242
- package/dist/components/data/DataTable/DataTable.js.map +0 -1
- package/dist/components/data/DataTable/index.d.ts +0 -3
- package/dist/components/data/DataTable/types.d.ts +0 -140
- package/dist/components/data/ItemTable/ItemTable.d.ts +0 -19
- package/dist/components/data/ItemTable/ItemTable.js +0 -347
- package/dist/components/data/ItemTable/ItemTable.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +0 -23
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +0 -131
- package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +0 -46
- package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +0 -79
- package/dist/components/data/ItemTable/ItemTableFooter.js.map +0 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +0 -34
- package/dist/components/data/ItemTable/ItemTableToolbar.js +0 -91
- package/dist/components/data/ItemTable/ItemTableToolbar.js.map +0 -1
- package/dist/components/data/ItemTable/index.d.ts +0 -4
- package/dist/components/data/ItemTable/types.d.ts +0 -322
- package/dist/components/data/TableBase/ColumnResizer.js +0 -70
- package/dist/components/data/TableBase/ColumnResizer.js.map +0 -1
- package/dist/components/data/TableBase/RowCollection.js +0 -99
- package/dist/components/data/TableBase/RowCollection.js.map +0 -1
- package/dist/components/data/TableBase/TableRow.js +0 -89
- package/dist/components/data/TableBase/TableRow.js.map +0 -1
- package/dist/components/data/TableBase/TableView.d.ts +0 -22
- package/dist/components/data/TableBase/TableView.js +0 -857
- package/dist/components/data/TableBase/TableView.js.map +0 -1
- package/dist/components/data/TableBase/index.d.ts +0 -5
- package/dist/components/data/TableBase/row-menu.js +0 -40
- package/dist/components/data/TableBase/row-menu.js.map +0 -1
- package/dist/components/data/TableBase/styled.d.ts +0 -5
- package/dist/components/data/TableBase/styled.js +0 -504
- package/dist/components/data/TableBase/styled.js.map +0 -1
- package/dist/components/data/TableBase/types.d.ts +0 -161
- package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -3
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-cell-selection.js.map +0 -1
- package/dist/components/data/TableBase/use-container-width.js +0 -35
- package/dist/components/data/TableBase/use-container-width.js.map +0 -1
- package/dist/components/data/TableBase/use-scrollability.js +0 -49
- package/dist/components/data/TableBase/use-scrollability.js.map +0 -1
- package/dist/components/data/TableBase/use-table-columns.d.ts +0 -2
- package/dist/components/data/TableBase/use-table-columns.js +0 -166
- package/dist/components/data/TableBase/use-table-columns.js.map +0 -1
- package/dist/components/data/TableBase/use-table-search.js +0 -50
- package/dist/components/data/TableBase/use-table-search.js.map +0 -1
- package/dist/components/data/TableBase/use-table-selection.d.ts +0 -4
- package/dist/components/data/TableBase/use-table-selection.js +0 -233
- package/dist/components/data/TableBase/use-table-selection.js.map +0 -1
- package/dist/components/data/TableBase/use-table-sort.js +0 -91
- package/dist/components/data/TableBase/use-table-sort.js.map +0 -1
- package/dist/components/data/TableBase/use-table-sorts.js +0 -97
- package/dist/components/data/TableBase/use-table-sorts.js.map +0 -1
- package/dist/components/data/TableBase/use-table-storage.d.ts +0 -8
- package/dist/components/data/TableBase/use-table-storage.js +0 -58
- package/dist/components/data/TableBase/use-table-storage.js.map +0 -1
- package/dist/components/data/index.d.ts +0 -10
- package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +0 -1
- package/dist/components/fields/ColorPicker/channels.js.map +0 -1
- package/dist/components/fields/ColorPicker/color.d.ts +0 -15
- package/dist/components/fields/ColorPicker/color.js.map +0 -1
- package/dist/components/navigation/Pagination/Pagination.d.ts +0 -9
- package/dist/components/navigation/Pagination/Pagination.js +0 -258
- package/dist/components/navigation/Pagination/Pagination.js.map +0 -1
- package/dist/components/navigation/Pagination/index.d.ts +0 -4
- package/dist/components/navigation/Pagination/types.d.ts +0 -81
- package/dist/components/navigation/Pagination/use-pagination.d.ts +0 -52
- package/dist/components/navigation/Pagination/use-pagination.js +0 -83
- package/dist/components/navigation/Pagination/use-pagination.js.map +0 -1
- package/docs/components/data/DataTable.md +0 -286
- package/docs/components/data/ItemTable.md +0 -970
- package/docs/components/navigation/Pagination.md +0 -245
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import "../../content/Item/index.js";
|
|
3
|
-
import { CubeItemProps } from "../../content/Item/Item.js";
|
|
4
|
-
import { Styles } from "@tenphi/tasty";
|
|
5
|
-
import { ReactNode } from "react";
|
|
6
|
-
import { Key as Key$1 } from "@react-types/shared";
|
|
7
|
-
|
|
8
|
-
//#region src/components/data/TableBase/types.d.ts
|
|
9
|
-
type CubeTableSortDirection = 'asc' | 'desc';
|
|
10
|
-
type CubeTableAlign = 'start' | 'center' | 'end';
|
|
11
|
-
type CubeTableRowSection = 'body' | 'pinnedTop' | 'pinnedBottom';
|
|
12
|
-
/**
|
|
13
|
-
* `asc | desc` rather than React Aria's `ascending | descending`: we do not use
|
|
14
|
-
* `useTableState`, so there is no `SortDescriptor` interop to preserve, and
|
|
15
|
-
* every consumer and server query parameter already speaks `asc|desc`.
|
|
16
|
-
* `aria-sort` is a one-line map in the header cell.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* A rectangular block of cells, stored as two opposite corners.
|
|
20
|
-
*
|
|
21
|
-
* Corners rather than a set of keys so the selection survives a re-sort or a
|
|
22
|
-
* page change the way a keyed row selection does: "the block between these two
|
|
23
|
-
* cells" is re-resolved against the current order every render.
|
|
24
|
-
*/
|
|
25
|
-
interface CubeTableCellRange {
|
|
26
|
-
fromRowKey: Key$1;
|
|
27
|
-
toRowKey: Key$1;
|
|
28
|
-
fromColumnKey: string;
|
|
29
|
-
toColumnKey: string;
|
|
30
|
-
}
|
|
31
|
-
interface CubeTableSort {
|
|
32
|
-
/** `key` of the sorted column. */
|
|
33
|
-
columnKey: string;
|
|
34
|
-
direction: CubeTableSortDirection;
|
|
35
|
-
}
|
|
36
|
-
interface CubeTableCellContext<T = any> {
|
|
37
|
-
row: T;
|
|
38
|
-
rowKey: Key$1;
|
|
39
|
-
rowIndex: number;
|
|
40
|
-
columnKey: string;
|
|
41
|
-
columnIndex: number;
|
|
42
|
-
section: CubeTableRowSection;
|
|
43
|
-
isSelected: boolean;
|
|
44
|
-
isRowFocused: boolean;
|
|
45
|
-
isDropTarget: boolean;
|
|
46
|
-
}
|
|
47
|
-
interface CubeTableRowContext<T = any> {
|
|
48
|
-
row: T;
|
|
49
|
-
rowKey: Key$1;
|
|
50
|
-
rowIndex: number;
|
|
51
|
-
section: CubeTableRowSection;
|
|
52
|
-
isSelected: boolean;
|
|
53
|
-
isFocused: boolean;
|
|
54
|
-
isDropTarget: boolean;
|
|
55
|
-
}
|
|
56
|
-
interface CubeTableHeaderContext {
|
|
57
|
-
columnKey: string;
|
|
58
|
-
columnIndex: number;
|
|
59
|
-
sort: CubeTableSortDirection | null;
|
|
60
|
-
isSortable: boolean;
|
|
61
|
-
isResizing: boolean;
|
|
62
|
-
width: number | null;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Rich header content. Every slot maps 1:1 onto the `Item` rendered inside the
|
|
66
|
-
* header `<th>`, so a header gets icon / description / tooltip / suffix /
|
|
67
|
-
* actions for free.
|
|
68
|
-
*/
|
|
69
|
-
interface CubeTableColumnHeader {
|
|
70
|
-
icon?: CubeItemProps['icon'];
|
|
71
|
-
rightIcon?: CubeItemProps['rightIcon'];
|
|
72
|
-
prefix?: ReactNode;
|
|
73
|
-
suffix?: ReactNode;
|
|
74
|
-
description?: ReactNode;
|
|
75
|
-
descriptionPlacement?: CubeItemProps['descriptionPlacement'];
|
|
76
|
-
/** `true` = auto tooltip when the label is truncated. */
|
|
77
|
-
tooltip?: CubeItemProps['tooltip'];
|
|
78
|
-
actions?: ReactNode;
|
|
79
|
-
/** Hide `actions` until hover/focus. @default true */
|
|
80
|
-
autoHideActions?: boolean;
|
|
81
|
-
theme?: CubeItemProps['theme'];
|
|
82
|
-
/** Full takeover of the header cell's content. Overrides `title` and every slot. */
|
|
83
|
-
render?: (ctx: CubeTableHeaderContext) => ReactNode;
|
|
84
|
-
/** Overrides `column.align` for the header only. */
|
|
85
|
-
align?: CubeTableAlign;
|
|
86
|
-
styles?: Styles;
|
|
87
|
-
}
|
|
88
|
-
interface CubeTableColumn<T = any> {
|
|
89
|
-
/**
|
|
90
|
-
* Column id. Also the default data path — dot notation is supported
|
|
91
|
-
* (`'owner.name'`). Anything beyond a path needs `getValue`.
|
|
92
|
-
*/
|
|
93
|
-
key: string;
|
|
94
|
-
/** Header label. Shorthand for `header` with no extra slots. */
|
|
95
|
-
title?: ReactNode;
|
|
96
|
-
header?: CubeTableColumnHeader;
|
|
97
|
-
/**
|
|
98
|
-
* Renders `<th scope="row">` instead of `<td>`, names the row for screen
|
|
99
|
-
* readers, and hosts the `rowLink` anchor. Defaults to the first
|
|
100
|
-
* non-structural column when a row link is present.
|
|
101
|
-
*/
|
|
102
|
-
isRowHeader?: boolean;
|
|
103
|
-
/** Fixed width in px. Mutually exclusive with `flex`. */
|
|
104
|
-
width?: number;
|
|
105
|
-
/** Weight for the leftover space. @default 1 when `width` is unset */
|
|
106
|
-
flex?: number;
|
|
107
|
-
/** @default 150 */
|
|
108
|
-
minWidth?: number;
|
|
109
|
-
maxWidth?: number;
|
|
110
|
-
/** Inherits the table's `isResizable`. */
|
|
111
|
-
isResizable?: boolean;
|
|
112
|
-
/** Stick to the start/end edge during horizontal scroll. */
|
|
113
|
-
pin?: 'start' | 'end';
|
|
114
|
-
/** Hide without losing width or order state. */
|
|
115
|
-
isHidden?: boolean;
|
|
116
|
-
/** @default (row) => get(row, key) */
|
|
117
|
-
getValue?: (row: T, rowIndex: number) => unknown;
|
|
118
|
-
/** Raw value → display text. Feeds client sort, client search and TSV copy. */
|
|
119
|
-
format?: (value: any, row: T, rowIndex: number) => string;
|
|
120
|
-
/** Client-side comparator over raw `getValue` results. */
|
|
121
|
-
compare?: (a: any, b: any, rowA: T, rowB: T) => number;
|
|
122
|
-
/** A returned string is wrapped in a truncating `TextItem`. */
|
|
123
|
-
render?: (value: any, row: T, rowIndex: number, ctx: CubeTableCellContext<T>) => ReactNode;
|
|
124
|
-
cellStyles?: Styles | ((ctx: CubeTableCellContext<T>) => Styles | undefined);
|
|
125
|
-
cellProps?: (ctx: CubeTableCellContext<T>) => Record<string, any> | undefined;
|
|
126
|
-
align?: CubeTableAlign;
|
|
127
|
-
/** @default true unless the table's `sortMode` is `'off'` */
|
|
128
|
-
isSortable?: boolean;
|
|
129
|
-
/** Two-state cycling (asc ↔ desc), never back to unsorted. @default false */
|
|
130
|
-
disallowSortRemoval?: boolean;
|
|
131
|
-
/** Include in the built-in client search. @default true */
|
|
132
|
-
isSearchable?: boolean;
|
|
133
|
-
/** Include in TSV copy. @default true */
|
|
134
|
-
isCopyable?: boolean;
|
|
135
|
-
/** Wrap text and let the row grow to fit. */
|
|
136
|
-
autoHeight?: boolean;
|
|
137
|
-
/** Consumer-owned bag. Never reaches the DOM. */
|
|
138
|
-
meta?: Record<string, unknown>;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* How a refresh over an existing result is presented.
|
|
142
|
-
*
|
|
143
|
-
* - `overlay` — keep the previous rows visible, dimmed, behind a spinner. A
|
|
144
|
-
* server page or a re-sort never blanks the table.
|
|
145
|
-
* - `skeleton` — discard the previous rows and show placeholders.
|
|
146
|
-
* - `none` — no visuals beyond `aria-busy`; the page owns the indicator.
|
|
147
|
-
*/
|
|
148
|
-
type CubeTableLoadingIndicator = 'overlay' | 'skeleton' | 'none';
|
|
149
|
-
type CubeTableSelectionMode = 'none' | 'single' | 'multiple';
|
|
150
|
-
/**
|
|
151
|
-
* What the header checkbox acts on.
|
|
152
|
-
*
|
|
153
|
-
* - `page` — the rows on the current page.
|
|
154
|
-
* - `filtered` — every row passing the current search/filter, across pages.
|
|
155
|
-
* - `all` — emits the `'all'` sentinel, meaning "everything, including rows the
|
|
156
|
-
* client has not loaded". The consumer decides what that means for its query.
|
|
157
|
-
*/
|
|
158
|
-
type CubeTableSelectAllMode = 'page' | 'filtered' | 'all';
|
|
159
|
-
//#endregion
|
|
160
|
-
export { CubeTableAlign, CubeTableCellContext, CubeTableCellRange, CubeTableColumn, CubeTableColumnHeader, CubeTableHeaderContext, CubeTableLoadingIndicator, CubeTableRowContext, CubeTableRowSection, CubeTableSelectAllMode, CubeTableSelectionMode, CubeTableSort, CubeTableSortDirection };
|
|
161
|
-
//# sourceMappingURL=types.d.ts.map
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-cell-selection.js","names":[],"sources":["../../../../src/components/data/TableBase/use-cell-selection.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { Key } from '@react-types/shared';\nimport type { CubeResolvedColumn, CubeTableCellRange } from './types';\n\nexport type CubeTableCellSelectionMode = 'none' | 'cell' | 'range';\n\nexport interface UseCellSelectionOptions<T> {\n /** @default 'range' */\n mode?: CubeTableCellSelectionMode;\n columns: CubeResolvedColumn<T>[];\n /**\n * Every row a range can reach, in the order they appear on screen — pinned\n * rows included. ag-grid excludes them (`!rowNode.rowPinned`), and we do not:\n * a total is a figure like any other, and selecting a column of revenue only\n * to have to copy its sum separately is the wrong trade.\n *\n * A pinned row is still not reachable by dragging THROUGH it — see\n * `TableView`'s pointer handlers for why.\n */\n rows: readonly T[];\n /**\n * Parallel to `rows`. Supplied rather than derived, so it cannot disagree with\n * the keys the renderer stamps on the cells — when the two drifted, every\n * range silently resolved to nothing.\n */\n rowKeys: readonly Key[];\n /**\n * Vetoes individual cells. A pinned total's label cell is the motivating\n * case: \"Total\" is a caption for the row, not a figure, and there is nothing\n * useful to do with it selected.\n *\n * A vetoed cell cannot anchor or receive a range, never highlights, and copies\n * as an empty field so a block spanning it keeps its shape.\n */\n isCellSelectable?: (row: T, rowKey: Key, columnKey: string) => boolean;\n range?: CubeTableCellRange | null;\n defaultRange?: CubeTableCellRange | null;\n onRangeChange?: (range: CubeTableCellRange | null) => void;\n}\n\nconst cellKey = (rowKey: Key, columnKey: string) => `${rowKey}\u0000${columnKey}`;\n\n/**\n * Rectangular cell selection.\n *\n * A result grid is read by cell, not by row: the thing a user wants out of it is\n * a figure, or a block of figures to paste somewhere else. So a click selects a\n * cell, shift-click and drag grow a rectangle, and ⌘/Ctrl+C writes the rectangle\n * out as TSV.\n *\n * The range is stored as two corners rather than a set of keys, so it survives\n * sorting and paging the way a keyed row selection does — and normalizing it\n * against the CURRENT row and column order is what makes \"the block between\n * these two cells\" keep meaning that after a re-sort.\n *\n * Structural columns (the row number, the checkbox, the row-menu button) can\n * never enter a range: they are chrome, and copying them would put the grid's\n * own furniture into the user's spreadsheet.\n */\nexport function useCellSelection<T>({\n mode = 'range',\n columns,\n rows,\n rowKeys,\n isCellSelectable,\n range: rangeProp,\n defaultRange,\n onRangeChange,\n}: UseCellSelectionOptions<T>) {\n const [range, setRange] = useControlledState<CubeTableCellRange | null>(\n rangeProp as CubeTableCellRange | null,\n defaultRange ?? null,\n onRangeChange as (value: CubeTableCellRange | null) => void,\n );\n\n // The press that started a drag. A ref rather than state: it is written and\n // read inside one pointer gesture, and re-rendering on every `pointerenter`\n // would drop frames across a wide grid.\n const anchorRef = useRef<CubeTableCellRange | null>(null);\n const isDraggingRef = useRef(false);\n\n const selectableColumns = useMemo(\n () => columns.filter((column) => !column.isStructural),\n [columns],\n );\n\n const isEnabled = mode !== 'none';\n\n /**\n * The range's corners resolved against the current order, as index bounds.\n * `null` when either corner has scrolled out of the data — a range whose\n * anchor no longer exists is not a range.\n */\n const bounds = useMemo(() => {\n if (!isEnabled || !range) return null;\n\n const rowFrom = rowKeys.indexOf(range.fromRowKey);\n const rowTo = rowKeys.indexOf(range.toRowKey);\n const colFrom = selectableColumns.findIndex(\n (column) => column.key === range.fromColumnKey,\n );\n const colTo = selectableColumns.findIndex(\n (column) => column.key === range.toColumnKey,\n );\n\n if (rowFrom === -1 || rowTo === -1 || colFrom === -1 || colTo === -1) {\n return null;\n }\n\n return {\n rowStart: Math.min(rowFrom, rowTo),\n rowEnd: Math.max(rowFrom, rowTo),\n colStart: Math.min(colFrom, colTo),\n colEnd: Math.max(colFrom, colTo),\n };\n }, [isEnabled, range, rowKeys, selectableColumns]);\n\n /**\n * Every selected cell, precomputed. A range spanning a full page is tens of\n * thousands of cells and every one of them asks whether it is selected on\n * every render, so this has to be a lookup rather than four comparisons.\n */\n const selectedKeys = useMemo(() => {\n const keys = new Set<string>();\n\n if (!bounds) return keys;\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n for (let c = bounds.colStart; c <= bounds.colEnd; c++) {\n const columnKey = selectableColumns[c].key;\n\n if (isCellSelectable?.(rows[r], rowKeys[r], columnKey) === false) {\n continue;\n }\n\n keys.add(cellKey(rowKeys[r], columnKey));\n }\n }\n\n return keys;\n }, [bounds, rows, rowKeys, selectableColumns, isCellSelectable]);\n\n // `useCallback`, not `useEvent`: the renderer asks this DURING render, once\n // per cell. `useEvent` keeps its closure current through a layout effect, so a\n // render-time reader sees the PREVIOUS render's answer — the highlight then\n // trails the selection by one commit and a cleared range stays painted.\n const isSelected = useCallback(\n (rowKey: Key, columnKey: string) =>\n selectedKeys.has(cellKey(rowKey, columnKey)),\n [selectedKeys],\n );\n\n const isSelectableColumn = useEvent((columnKey: string) =>\n selectableColumns.some((column) => column.key === columnKey),\n );\n\n /**\n * Whether a cell can take part at all — asked by the renderer before it wires\n * up any pointer handler, so a vetoed cell is inert rather than merely\n * unpainted.\n */\n const canSelectCell = useEvent((rowKey: Key, columnKey: string) => {\n if (!isEnabled || !isSelectableColumn(columnKey)) return false;\n if (!isCellSelectable) return true;\n\n const index = rowKeys.indexOf(rowKey);\n\n return index === -1 || isCellSelectable(rows[index], rowKey, columnKey);\n });\n\n const select = useEvent((rowKey: Key, columnKey: string) => {\n if (!canSelectCell(rowKey, columnKey)) return;\n\n const next: CubeTableCellRange = {\n fromRowKey: rowKey,\n toRowKey: rowKey,\n fromColumnKey: columnKey,\n toColumnKey: columnKey,\n };\n\n anchorRef.current = next;\n setRange(next);\n });\n\n /** Grow the range from the standing anchor. Shift-click and drag both land here. */\n const extendTo = useEvent((rowKey: Key, columnKey: string) => {\n if (mode !== 'range' || !canSelectCell(rowKey, columnKey)) return;\n\n // Shift-clicking with nothing selected yet behaves as a plain click, which\n // is what every grid and every file manager does.\n const anchor = anchorRef.current ?? range;\n\n if (!anchor) {\n select(rowKey, columnKey);\n\n return;\n }\n\n setRange({\n fromRowKey: anchor.fromRowKey,\n toRowKey: rowKey,\n fromColumnKey: anchor.fromColumnKey,\n toColumnKey: columnKey,\n });\n });\n\n const clear = useEvent(() => {\n anchorRef.current = null;\n if (range) setRange(null);\n });\n\n /**\n * The selection as tab-separated values — the format Excel and Sheets both\n * paste as a grid rather than as one run of text.\n *\n * Values come from the same display-text pipeline client sort and search use,\n * so what lands on the clipboard is what was on screen: a formatted currency\n * stays formatted, and a value with no text representation copies as empty\n * rather than as `[object Object]`.\n */\n const getSelectionText = useEvent(\n (\n getText: (\n column: CubeResolvedColumn<T>,\n row: T,\n rowIndex: number,\n ) => string,\n getHeader?: (column: CubeResolvedColumn<T>) => string,\n ) => {\n if (!bounds) return '';\n\n const cols = selectableColumns.slice(bounds.colStart, bounds.colEnd + 1);\n const lines: string[] = [];\n\n if (getHeader) {\n lines.push(cols.map((column) => quote(getHeader(column))).join('\\t'));\n }\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n lines.push(\n cols\n .map((column) =>\n selectedKeys.has(cellKey(rowKeys[r], column.key))\n ? quote(getText(column, rows[r], r))\n : '',\n )\n .join('\\t'),\n );\n }\n\n return lines.join('\\n');\n },\n );\n\n return {\n mode,\n isEnabled,\n range: bounds ? range : null,\n /** Cells in the range, for `aria-selected` and the highlight. */\n isSelected,\n /** `true` once the range covers more than one cell. */\n hasRange: selectedKeys.size > 1,\n cellCount: selectedKeys.size,\n canSelectCell,\n select,\n extendTo,\n clear,\n getSelectionText,\n anchorRef,\n isDraggingRef,\n };\n}\n\n/**\n * RFC-4180 quoting, tab-delimited.\n *\n * A value carrying a tab or a newline would otherwise break the grid apart on\n * paste — one cell becoming two, or one row becoming two.\n */\nfunction quote(value: string) {\n if (!/[\\t\\n\\r\"]/.test(value)) return value;\n\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n"],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { useLayoutEffect, useState } from "react";
|
|
3
|
-
|
|
4
|
-
//#region src/components/data/TableBase/use-container-width.ts
|
|
5
|
-
/**
|
|
6
|
-
* Content-box width of the scroller, measured before paint and kept current
|
|
7
|
-
* with a `ResizeObserver`.
|
|
8
|
-
*
|
|
9
|
-
* Takes the **element**, not a ref: in the virtualized path the scroller is
|
|
10
|
-
* created by Virtuoso and handed over through a callback after mount, so a hook
|
|
11
|
-
* that peeked at `ref.current` once would see `null` and never measure
|
|
12
|
-
* anything — leaving every column unsized.
|
|
13
|
-
*
|
|
14
|
-
* `useLayoutEffect` rather than `useEffect` on purpose: column widths are
|
|
15
|
-
* derived from this value, so measuring after paint would show one frame of
|
|
16
|
-
* min-width columns before they snap to their real size.
|
|
17
|
-
*/
|
|
18
|
-
function useContainerWidth(element) {
|
|
19
|
-
const [width, setWidth] = useState(null);
|
|
20
|
-
useLayoutEffect(() => {
|
|
21
|
-
if (!element || !(element instanceof Element)) return;
|
|
22
|
-
const measure = () => {
|
|
23
|
-
setWidth((current) => current === element.clientWidth ? current : element.clientWidth);
|
|
24
|
-
};
|
|
25
|
-
measure();
|
|
26
|
-
const observer = new ResizeObserver(measure);
|
|
27
|
-
observer.observe(element);
|
|
28
|
-
return () => observer.disconnect();
|
|
29
|
-
}, [element]);
|
|
30
|
-
return width;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
//#endregion
|
|
34
|
-
export { useContainerWidth };
|
|
35
|
-
//# sourceMappingURL=use-container-width.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-container-width.js","names":[],"sources":["../../../../src/components/data/TableBase/use-container-width.ts"],"sourcesContent":["import { useLayoutEffect, useState } from 'react';\n\n/**\n * Content-box width of the scroller, measured before paint and kept current\n * with a `ResizeObserver`.\n *\n * Takes the **element**, not a ref: in the virtualized path the scroller is\n * created by Virtuoso and handed over through a callback after mount, so a hook\n * that peeked at `ref.current` once would see `null` and never measure\n * anything — leaving every column unsized.\n *\n * `useLayoutEffect` rather than `useEffect` on purpose: column widths are\n * derived from this value, so measuring after paint would show one frame of\n * min-width columns before they snap to their real size.\n */\nexport function useContainerWidth(element: HTMLElement | null): number | null {\n const [width, setWidth] = useState<number | null>(null);\n\n useLayoutEffect(() => {\n // Virtuoso's `scrollerRef` reports `HTMLElement | Window | null`, and\n // `ResizeObserver.observe` throws on anything that is not an Element.\n if (!element || !(element instanceof Element)) return;\n\n const measure = () => {\n // `clientWidth` excludes the vertical scrollbar, which is what we want:\n // the columns must fit the content box, not the border box, or a\n // scrollbar appearing would push the last column out and bring a\n // horizontal scrollbar with it.\n setWidth((current) =>\n current === element.clientWidth ? current : element.clientWidth,\n );\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [element]);\n\n return width;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAeA,SAAgB,kBAAkB,SAA4C;CAC5E,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;AAEvD,uBAAsB;AAGpB,MAAI,CAAC,WAAW,EAAE,mBAAmB,SAAU;EAE/C,MAAM,gBAAgB;AAKpB,aAAU,YACR,YAAY,QAAQ,cAAc,UAAU,QAAQ,YACrD;;AAGH,WAAS;EAET,MAAM,WAAW,IAAI,eAAe,QAAQ;AAE5C,WAAS,QAAQ,QAAQ;AAEzB,eAAa,SAAS,YAAY;IACjC,CAAC,QAAQ,CAAC;AAEb,QAAO"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { useLayoutEffect, useState } from "react";
|
|
3
|
-
|
|
4
|
-
//#region src/components/data/TableBase/use-scrollability.ts
|
|
5
|
-
const NONE = {
|
|
6
|
-
x: false,
|
|
7
|
-
y: false
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Whether the scroller can actually scroll, per axis.
|
|
11
|
-
*
|
|
12
|
-
* This exists for `overscroll-behavior`. `contain` is what stops a horizontal
|
|
13
|
-
* swipe at the scroll edge from triggering browser back-navigation, but Chrome
|
|
14
|
-
* applies it to any element with `overflow: auto` — including one whose content
|
|
15
|
-
* fits. The wheel event is then swallowed by a scroller with nothing to scroll,
|
|
16
|
-
* and the page behind it will not move. So the containment has to be scoped to
|
|
17
|
-
* the axis that is genuinely scrollable, which means measuring.
|
|
18
|
-
*
|
|
19
|
-
* Both the scroller and its content are observed: the scroller's own box does
|
|
20
|
-
* not change when rows are added, so observing it alone would miss a table that
|
|
21
|
-
* grew past its container.
|
|
22
|
-
*/
|
|
23
|
-
function useScrollability(element) {
|
|
24
|
-
const [state, setState] = useState(NONE);
|
|
25
|
-
useLayoutEffect(() => {
|
|
26
|
-
if (!element || !(element instanceof Element)) {
|
|
27
|
-
setState(NONE);
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const measure = () => {
|
|
31
|
-
const next = {
|
|
32
|
-
x: element.scrollWidth - element.clientWidth > 1,
|
|
33
|
-
y: element.scrollHeight - element.clientHeight > 1
|
|
34
|
-
};
|
|
35
|
-
setState((current) => current.x === next.x && current.y === next.y ? current : next);
|
|
36
|
-
};
|
|
37
|
-
measure();
|
|
38
|
-
const observer = new ResizeObserver(measure);
|
|
39
|
-
observer.observe(element);
|
|
40
|
-
const content = element.firstElementChild;
|
|
41
|
-
if (content) observer.observe(content);
|
|
42
|
-
return () => observer.disconnect();
|
|
43
|
-
}, [element]);
|
|
44
|
-
return state;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
//#endregion
|
|
48
|
-
export { useScrollability };
|
|
49
|
-
//# sourceMappingURL=use-scrollability.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-scrollability.js","names":[],"sources":["../../../../src/components/data/TableBase/use-scrollability.ts"],"sourcesContent":["import { useLayoutEffect, useState } from 'react';\n\nexport interface CubeScrollability {\n x: boolean;\n y: boolean;\n}\n\nconst NONE: CubeScrollability = { x: false, y: false };\n\n/**\n * Whether the scroller can actually scroll, per axis.\n *\n * This exists for `overscroll-behavior`. `contain` is what stops a horizontal\n * swipe at the scroll edge from triggering browser back-navigation, but Chrome\n * applies it to any element with `overflow: auto` — including one whose content\n * fits. The wheel event is then swallowed by a scroller with nothing to scroll,\n * and the page behind it will not move. So the containment has to be scoped to\n * the axis that is genuinely scrollable, which means measuring.\n *\n * Both the scroller and its content are observed: the scroller's own box does\n * not change when rows are added, so observing it alone would miss a table that\n * grew past its container.\n */\nexport function useScrollability(\n element: HTMLElement | null,\n): CubeScrollability {\n const [state, setState] = useState<CubeScrollability>(NONE);\n\n useLayoutEffect(() => {\n // Matches `useContainerWidth`: a scroller handed over by a callback ref can\n // be null, and `observe` throws on anything that is not an Element.\n if (!element || !(element instanceof Element)) {\n setState(NONE);\n\n return;\n }\n\n const measure = () => {\n // A 1px tolerance: sub-pixel layout regularly leaves `scrollHeight` a\n // fraction above `clientHeight` on a table that visibly does not scroll,\n // and trapping the wheel over that fraction is the exact bug this avoids.\n const next = {\n x: element.scrollWidth - element.clientWidth > 1,\n y: element.scrollHeight - element.clientHeight > 1,\n };\n\n setState((current) =>\n current.x === next.x && current.y === next.y ? current : next,\n );\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n observer.observe(element);\n\n const content = element.firstElementChild;\n\n if (content) observer.observe(content);\n\n return () => observer.disconnect();\n }, [element]);\n\n return state;\n}\n"],"mappings":";;;;AAOA,MAAM,OAA0B;CAAE,GAAG;CAAO,GAAG;CAAO;;;;;;;;;;;;;;;AAgBtD,SAAgB,iBACd,SACmB;CACnB,MAAM,CAAC,OAAO,YAAY,SAA4B,KAAK;AAE3D,uBAAsB;AAGpB,MAAI,CAAC,WAAW,EAAE,mBAAmB,UAAU;AAC7C,YAAS,KAAK;AAEd;;EAGF,MAAM,gBAAgB;GAIpB,MAAM,OAAO;IACX,GAAG,QAAQ,cAAc,QAAQ,cAAc;IAC/C,GAAG,QAAQ,eAAe,QAAQ,eAAe;IAClD;AAED,aAAU,YACR,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK,IAAI,UAAU,KAC1D;;AAGH,WAAS;EAET,MAAM,WAAW,IAAI,eAAe,QAAQ;AAE5C,WAAS,QAAQ,QAAQ;EAEzB,MAAM,UAAU,QAAQ;AAExB,MAAI,QAAS,UAAS,QAAQ,QAAQ;AAEtC,eAAa,SAAS,YAAY;IACjC,CAAC,QAAQ,CAAC;AAEb,QAAO"}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { useMemo } from "react";
|
|
3
|
-
|
|
4
|
-
//#region src/components/data/TableBase/use-table-columns.ts
|
|
5
|
-
/** @default when a column declares neither `width` nor `minWidth`. */
|
|
6
|
-
const DEFAULT_MIN_WIDTH = 150;
|
|
7
|
-
/**
|
|
8
|
-
* Reads `key` as a data path. A plain key is a single property lookup; dots
|
|
9
|
-
* walk nested objects (`'owner.name'`). Anything richer belongs in `getValue`.
|
|
10
|
-
*/
|
|
11
|
-
function readPath(row, path) {
|
|
12
|
-
if (row == null) return void 0;
|
|
13
|
-
if (!path.includes(".")) return row[path];
|
|
14
|
-
let current = row;
|
|
15
|
-
for (const part of path.split(".")) {
|
|
16
|
-
if (current == null) return void 0;
|
|
17
|
-
current = current[part];
|
|
18
|
-
}
|
|
19
|
-
return current;
|
|
20
|
-
}
|
|
21
|
-
function getColumnValue(column, row, rowIndex) {
|
|
22
|
-
return column.getValue ? column.getValue(row, rowIndex) : readPath(row, column.key);
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Display text for a cell — what client sort, client search and TSV copy all
|
|
26
|
-
* operate on. Deliberately NOT the rendered output: `render` may return
|
|
27
|
-
* arbitrary React, and stringifying that is how cloud's filter ended up
|
|
28
|
-
* matching `"[object Object]"` against the query `"object"`.
|
|
29
|
-
*
|
|
30
|
-
* Returns `null` when the column cannot produce text, so callers can skip it
|
|
31
|
-
* rather than coerce a non-primitive.
|
|
32
|
-
*/
|
|
33
|
-
function getColumnText(column, row, rowIndex) {
|
|
34
|
-
const value = getColumnValue(column, row, rowIndex);
|
|
35
|
-
if (column.format) return column.format(value, row, rowIndex);
|
|
36
|
-
if (value == null) return "";
|
|
37
|
-
const type = typeof value;
|
|
38
|
-
if (type === "string") return value;
|
|
39
|
-
if (type === "number" || type === "boolean" || type === "bigint") return String(value);
|
|
40
|
-
if (value instanceof Date) return value.toISOString();
|
|
41
|
-
return null;
|
|
42
|
-
}
|
|
43
|
-
function clamp(value, min, max) {
|
|
44
|
-
return Math.min(Math.max(value, min), max ?? Number.POSITIVE_INFINITY);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Normalizes the public column list into resolved leaves: visual order, ARIA
|
|
48
|
-
* indices, pixel widths, and sticky offsets for pinned columns.
|
|
49
|
-
*
|
|
50
|
-
* Width resolution mirrors ag-grid's `fitGridWidth`: fixed columns take their
|
|
51
|
-
* width, the remainder is split across flex columns by weight, and each result
|
|
52
|
-
* is clamped to `[minWidth, maxWidth]`. Clamping perturbs the sum, so the
|
|
53
|
-
* residual is redistributed across the still-unclamped columns until it
|
|
54
|
-
* settles. When even the minimums do not fit, every column takes its minimum
|
|
55
|
-
* and the table scrolls horizontally.
|
|
56
|
-
*/
|
|
57
|
-
function useTableColumns({ columns, containerWidth, columnWidths, leadingColumns, trailingColumns }) {
|
|
58
|
-
return useMemo(() => {
|
|
59
|
-
const visible = [
|
|
60
|
-
...leadingColumns ?? [],
|
|
61
|
-
...columns,
|
|
62
|
-
...trailingColumns ?? []
|
|
63
|
-
].filter((column) => !column.isHidden);
|
|
64
|
-
const ordered = [
|
|
65
|
-
...visible.filter((c) => c.pin === "start"),
|
|
66
|
-
...visible.filter((c) => !c.pin),
|
|
67
|
-
...visible.filter((c) => c.pin === "end")
|
|
68
|
-
];
|
|
69
|
-
const structuralKeys = new Set([...leadingColumns ?? [], ...trailingColumns ?? []].map((c) => c.key));
|
|
70
|
-
const specs = ordered.map((column) => {
|
|
71
|
-
const isStructural = structuralKeys.has(column.key);
|
|
72
|
-
const explicit = columnWidths?.[column.key] ?? column.width;
|
|
73
|
-
const minWidth = column.minWidth ?? (explicit != null ? explicit : isStructural ? 0 : DEFAULT_MIN_WIDTH);
|
|
74
|
-
return {
|
|
75
|
-
column,
|
|
76
|
-
isStructural,
|
|
77
|
-
fixed: explicit ?? null,
|
|
78
|
-
minWidth,
|
|
79
|
-
maxWidth: column.maxWidth ?? null,
|
|
80
|
-
flex: explicit != null ? null : column.flex ?? 1
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
const resolved = /* @__PURE__ */ new Map();
|
|
84
|
-
let isOverflowing = false;
|
|
85
|
-
if (containerWidth != null && containerWidth > 0) {
|
|
86
|
-
const fixedTotal = specs.reduce((sum, s) => sum + (s.fixed ?? 0), 0);
|
|
87
|
-
const flexSpecs = specs.filter((s) => s.fixed == null);
|
|
88
|
-
if (specs.reduce((sum, s) => sum + (s.fixed ?? s.minWidth), 0) > containerWidth) {
|
|
89
|
-
isOverflowing = true;
|
|
90
|
-
for (const spec of specs) resolved.set(spec.column.key, spec.fixed ?? spec.minWidth);
|
|
91
|
-
} else {
|
|
92
|
-
let remaining = containerWidth - fixedTotal;
|
|
93
|
-
let pool = flexSpecs;
|
|
94
|
-
while (pool.length > 0) {
|
|
95
|
-
const totalFlex = pool.reduce((sum, s) => sum + (s.flex ?? 1), 0);
|
|
96
|
-
const nextPool = [];
|
|
97
|
-
let consumed = 0;
|
|
98
|
-
for (const spec of pool) {
|
|
99
|
-
const ideal = remaining * (spec.flex ?? 1) / (totalFlex || 1);
|
|
100
|
-
const clamped = clamp(ideal, spec.minWidth, spec.maxWidth);
|
|
101
|
-
if (clamped !== ideal) {
|
|
102
|
-
resolved.set(spec.column.key, clamped);
|
|
103
|
-
consumed += clamped;
|
|
104
|
-
} else nextPool.push(spec);
|
|
105
|
-
}
|
|
106
|
-
if (nextPool.length === pool.length) {
|
|
107
|
-
const totalLeft = nextPool.reduce((sum, s) => sum + (s.flex ?? 1), 0);
|
|
108
|
-
for (const spec of nextPool) resolved.set(spec.column.key, remaining * (spec.flex ?? 1) / (totalLeft || 1));
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
remaining -= consumed;
|
|
112
|
-
pool = nextPool;
|
|
113
|
-
}
|
|
114
|
-
for (const spec of specs) if (spec.fixed != null) resolved.set(spec.column.key, spec.fixed);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
let pinnedStartWidth = 0;
|
|
118
|
-
let pinnedEndWidth = 0;
|
|
119
|
-
const out = specs.map((spec, index) => ({
|
|
120
|
-
...spec.column,
|
|
121
|
-
index,
|
|
122
|
-
ariaColIndex: index + 1,
|
|
123
|
-
width: resolved.get(spec.column.key) ?? null,
|
|
124
|
-
minWidth: spec.minWidth,
|
|
125
|
-
maxWidth: spec.maxWidth,
|
|
126
|
-
flex: spec.flex,
|
|
127
|
-
align: spec.column.align ?? "start",
|
|
128
|
-
pinOffset: null,
|
|
129
|
-
isPinEdge: false,
|
|
130
|
-
isStructural: spec.isStructural
|
|
131
|
-
}));
|
|
132
|
-
for (const column of out) {
|
|
133
|
-
if (column.pin !== "start") continue;
|
|
134
|
-
column.pinOffset = pinnedStartWidth;
|
|
135
|
-
pinnedStartWidth += column.width ?? column.minWidth;
|
|
136
|
-
}
|
|
137
|
-
for (let i = out.length - 1; i >= 0; i--) {
|
|
138
|
-
const column = out[i];
|
|
139
|
-
if (column.pin !== "end") continue;
|
|
140
|
-
column.pinOffset = pinnedEndWidth;
|
|
141
|
-
pinnedEndWidth += column.width ?? column.minWidth;
|
|
142
|
-
}
|
|
143
|
-
const lastPinnedStart = out.filter((c) => c.pin === "start").at(-1);
|
|
144
|
-
const firstPinnedEnd = out.find((c) => c.pin === "end");
|
|
145
|
-
if (lastPinnedStart) lastPinnedStart.isPinEdge = true;
|
|
146
|
-
if (firstPinnedEnd) firstPinnedEnd.isPinEdge = true;
|
|
147
|
-
const totalWidth = out.every((c) => c.width != null) ? out.reduce((sum, c) => sum + (c.width ?? 0), 0) : null;
|
|
148
|
-
return {
|
|
149
|
-
columns: out,
|
|
150
|
-
pinnedStartWidth,
|
|
151
|
-
pinnedEndWidth,
|
|
152
|
-
totalWidth,
|
|
153
|
-
isOverflowing
|
|
154
|
-
};
|
|
155
|
-
}, [
|
|
156
|
-
columns,
|
|
157
|
-
containerWidth,
|
|
158
|
-
columnWidths,
|
|
159
|
-
leadingColumns,
|
|
160
|
-
trailingColumns
|
|
161
|
-
]);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
//#endregion
|
|
165
|
-
export { getColumnText, getColumnValue, useTableColumns };
|
|
166
|
-
//# sourceMappingURL=use-table-columns.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-columns.js","names":[],"sources":["../../../../src/components/data/TableBase/use-table-columns.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport type {\n CubeResolvedColumn,\n CubeTableColumn,\n CubeTableColumnLayout,\n} from './types';\n\n/** @default when a column declares neither `width` nor `minWidth`. */\nexport const DEFAULT_MIN_WIDTH = 150;\n\n/**\n * Reads `key` as a data path. A plain key is a single property lookup; dots\n * walk nested objects (`'owner.name'`). Anything richer belongs in `getValue`.\n */\nexport function readPath(row: any, path: string): unknown {\n if (row == null) return undefined;\n if (!path.includes('.')) return row[path];\n\n let current: any = row;\n\n for (const part of path.split('.')) {\n if (current == null) return undefined;\n current = current[part];\n }\n\n return current;\n}\n\n/** Only the value-pipeline members, so both raw and resolved columns fit. */\ntype ValueColumn<T> = Pick<CubeTableColumn<T>, 'key' | 'getValue' | 'format'>;\n\nexport function getColumnValue<T>(\n column: ValueColumn<T>,\n row: T,\n rowIndex: number,\n): unknown {\n return column.getValue\n ? column.getValue(row, rowIndex)\n : readPath(row, column.key);\n}\n\n/**\n * Display text for a cell — what client sort, client search and TSV copy all\n * operate on. Deliberately NOT the rendered output: `render` may return\n * arbitrary React, and stringifying that is how cloud's filter ended up\n * matching `\"[object Object]\"` against the query `\"object\"`.\n *\n * Returns `null` when the column cannot produce text, so callers can skip it\n * rather than coerce a non-primitive.\n */\nexport function getColumnText<T>(\n column: ValueColumn<T>,\n row: T,\n rowIndex: number,\n): string | null {\n const value = getColumnValue(column, row, rowIndex);\n\n if (column.format) return column.format(value, row, rowIndex);\n if (value == null) return '';\n\n const type = typeof value;\n\n if (type === 'string') return value as string;\n if (type === 'number' || type === 'boolean' || type === 'bigint') {\n return String(value);\n }\n if (value instanceof Date) return value.toISOString();\n\n return null;\n}\n\nfunction clamp(value: number, min: number, max: number | null): number {\n return Math.min(Math.max(value, min), max ?? Number.POSITIVE_INFINITY);\n}\n\nexport interface UseTableColumnsOptions<T> {\n columns: CubeTableColumn<T>[];\n /** Content-box width of the scroller, or `null` before the first measure. */\n containerWidth: number | null;\n /** User-resized widths, keyed by column key. Wins over `column.width`. */\n columnWidths?: Record<string, number>;\n /** Extra leading columns owned by the table (selection, drag handle). */\n leadingColumns?: CubeTableColumn<T>[];\n /** Extra trailing columns owned by the table (row menu). */\n trailingColumns?: CubeTableColumn<T>[];\n}\n\n/**\n * Normalizes the public column list into resolved leaves: visual order, ARIA\n * indices, pixel widths, and sticky offsets for pinned columns.\n *\n * Width resolution mirrors ag-grid's `fitGridWidth`: fixed columns take their\n * width, the remainder is split across flex columns by weight, and each result\n * is clamped to `[minWidth, maxWidth]`. Clamping perturbs the sum, so the\n * residual is redistributed across the still-unclamped columns until it\n * settles. When even the minimums do not fit, every column takes its minimum\n * and the table scrolls horizontally.\n */\nexport function useTableColumns<T>({\n columns,\n containerWidth,\n columnWidths,\n leadingColumns,\n trailingColumns,\n}: UseTableColumnsOptions<T>): CubeTableColumnLayout<T> {\n return useMemo(() => {\n const visible = [\n ...(leadingColumns ?? []),\n ...columns,\n ...(trailingColumns ?? []),\n ].filter((column) => !column.isHidden);\n\n // Pinned columns lead and trail regardless of their position in the source\n // array, so `aria-colindex` and DOM order agree and nothing needs CSS\n // `order:` to be reshuffled.\n const ordered = [\n ...visible.filter((c) => c.pin === 'start'),\n ...visible.filter((c) => !c.pin),\n ...visible.filter((c) => c.pin === 'end'),\n ];\n\n const structuralKeys = new Set(\n [...(leadingColumns ?? []), ...(trailingColumns ?? [])].map((c) => c.key),\n );\n\n const specs = ordered.map((column) => {\n const isStructural = structuralKeys.has(column.key);\n const explicit = columnWidths?.[column.key] ?? column.width;\n const minWidth =\n column.minWidth ??\n (explicit != null ? explicit : isStructural ? 0 : DEFAULT_MIN_WIDTH);\n\n return {\n column,\n isStructural,\n fixed: explicit ?? null,\n minWidth,\n maxWidth: column.maxWidth ?? null,\n flex: explicit != null ? null : column.flex ?? 1,\n };\n });\n\n const resolved = new Map<string, number>();\n let isOverflowing = false;\n\n if (containerWidth != null && containerWidth > 0) {\n const fixedTotal = specs.reduce((sum, s) => sum + (s.fixed ?? 0), 0);\n const flexSpecs = specs.filter((s) => s.fixed == null);\n const minTotal = specs.reduce(\n (sum, s) => sum + (s.fixed ?? s.minWidth),\n 0,\n );\n\n if (minTotal > containerWidth) {\n isOverflowing = true;\n for (const spec of specs) {\n resolved.set(spec.column.key, spec.fixed ?? spec.minWidth);\n }\n } else {\n let remaining = containerWidth - fixedTotal;\n let pool = flexSpecs;\n\n // Each pass assigns proportional widths, freezes whatever hit a bound,\n // and re-splits the leftover among the rest.\n while (pool.length > 0) {\n const totalFlex = pool.reduce((sum, s) => sum + (s.flex ?? 1), 0);\n const nextPool: typeof pool = [];\n let consumed = 0;\n\n for (const spec of pool) {\n const ideal = (remaining * (spec.flex ?? 1)) / (totalFlex || 1);\n const clamped = clamp(ideal, spec.minWidth, spec.maxWidth);\n\n if (clamped !== ideal) {\n resolved.set(spec.column.key, clamped);\n consumed += clamped;\n } else {\n nextPool.push(spec);\n }\n }\n\n if (nextPool.length === pool.length) {\n // Nothing was clamped this pass — the proportional split stands.\n const totalLeft = nextPool.reduce(\n (sum, s) => sum + (s.flex ?? 1),\n 0,\n );\n for (const spec of nextPool) {\n resolved.set(\n spec.column.key,\n (remaining * (spec.flex ?? 1)) / (totalLeft || 1),\n );\n }\n break;\n }\n\n remaining -= consumed;\n pool = nextPool;\n }\n\n for (const spec of specs) {\n if (spec.fixed != null) resolved.set(spec.column.key, spec.fixed);\n }\n }\n }\n\n let pinnedStartWidth = 0;\n let pinnedEndWidth = 0;\n\n const out: CubeResolvedColumn<T>[] = specs.map((spec, index) => ({\n ...spec.column,\n index,\n ariaColIndex: index + 1,\n width: resolved.get(spec.column.key) ?? null,\n minWidth: spec.minWidth,\n maxWidth: spec.maxWidth,\n flex: spec.flex,\n align: spec.column.align ?? 'start',\n pinOffset: null,\n isPinEdge: false,\n isStructural: spec.isStructural,\n }));\n\n // Sticky offsets accumulate inwards from each edge.\n for (const column of out) {\n if (column.pin !== 'start') continue;\n column.pinOffset = pinnedStartWidth;\n pinnedStartWidth += column.width ?? column.minWidth;\n }\n\n for (let i = out.length - 1; i >= 0; i--) {\n const column = out[i];\n if (column.pin !== 'end') continue;\n column.pinOffset = pinnedEndWidth;\n pinnedEndWidth += column.width ?? column.minWidth;\n }\n\n const lastPinnedStart = out.filter((c) => c.pin === 'start').at(-1);\n const firstPinnedEnd = out.find((c) => c.pin === 'end');\n\n if (lastPinnedStart) lastPinnedStart.isPinEdge = true;\n if (firstPinnedEnd) firstPinnedEnd.isPinEdge = true;\n\n const totalWidth = out.every((c) => c.width != null)\n ? out.reduce((sum, c) => sum + (c.width ?? 0), 0)\n : null;\n\n return {\n columns: out,\n pinnedStartWidth,\n pinnedEndWidth,\n totalWidth,\n isOverflowing,\n };\n }, [columns, containerWidth, columnWidths, leadingColumns, trailingColumns]);\n}\n"],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e76eb3e | Cube Dev Team */
|
|
2
|
-
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
|
-
import { useDebouncedValue } from "../../../_internal/hooks/use-debounced-value.js";
|
|
4
|
-
import { getColumnText } from "./use-table-columns.js";
|
|
5
|
-
import { useMemo } from "react";
|
|
6
|
-
import { useControlledState } from "@react-stately/utils";
|
|
7
|
-
|
|
8
|
-
//#region src/components/data/TableBase/use-table-search.ts
|
|
9
|
-
/**
|
|
10
|
-
* Default matcher: a case-insensitive substring test against each searchable
|
|
11
|
-
* column's **display text**.
|
|
12
|
-
*
|
|
13
|
-
* Deliberately not the raw value. Cloud's filter tested
|
|
14
|
-
* `String(row[column.key])`, which meant a column rendering `owner.profile.name`
|
|
15
|
-
* was unsearchable, and an object-valued column stringified to
|
|
16
|
-
* `"[object Object]"` — so the query "object" matched every row with a nested
|
|
17
|
-
* value. `getColumnText` returns `null` for anything it cannot honestly turn
|
|
18
|
-
* into text, and those columns are skipped rather than coerced.
|
|
19
|
-
*/
|
|
20
|
-
function defaultMatcher(columns, row, rowIndex, query) {
|
|
21
|
-
return columns.some((column) => {
|
|
22
|
-
if (column.isSearchable === false) return false;
|
|
23
|
-
const text = getColumnText(column, row, rowIndex);
|
|
24
|
-
return text != null && text.toLowerCase().includes(query);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
function useTableSearch({ columns, rows, mode = "client", value, defaultValue, onChange, delay = 500, filter }) {
|
|
28
|
-
const [searchValue, setSearchState] = useControlledState(value, defaultValue ?? "", onChange);
|
|
29
|
-
const query = useDebouncedValue(searchValue, delay).trim().toLowerCase();
|
|
30
|
-
return {
|
|
31
|
-
searchValue,
|
|
32
|
-
setSearchValue: useEvent((next) => setSearchState(next)),
|
|
33
|
-
query,
|
|
34
|
-
searchedRows: useMemo(() => {
|
|
35
|
-
if (mode !== "client" || !query) return rows;
|
|
36
|
-
return rows.filter((row, index) => filter ? filter(row, query) : defaultMatcher(columns, row, index, query));
|
|
37
|
-
}, [
|
|
38
|
-
mode,
|
|
39
|
-
query,
|
|
40
|
-
rows,
|
|
41
|
-
columns,
|
|
42
|
-
filter
|
|
43
|
-
]),
|
|
44
|
-
isFiltered: query.length > 0
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
//#endregion
|
|
49
|
-
export { useTableSearch };
|
|
50
|
-
//# sourceMappingURL=use-table-search.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-table-search.js","names":[],"sources":["../../../../src/components/data/TableBase/use-table-search.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useMemo } from 'react';\n\nimport { useDebouncedValue, useEvent } from '../../../_internal/hooks';\n\nimport { getColumnText } from './use-table-columns';\n\nimport type { CubeTableColumn } from './types';\n\nexport type CubeTableSearchMode = 'client' | 'server';\n\nexport interface UseTableSearchOptions<T> {\n columns: CubeTableColumn<T>[];\n rows: readonly T[];\n /** @default 'client' */\n mode?: CubeTableSearchMode;\n value?: string;\n defaultValue?: string;\n onChange?: (value: string) => void;\n /** Debounces the filter AND the callback, in both modes. @default 500 */\n delay?: number;\n /** Replaces the default matcher in client mode. */\n filter?: (row: T, query: string) => boolean;\n}\n\nexport interface UseTableSearchResult<T> {\n /** The immediate term — what the input shows. */\n searchValue: string;\n setSearchValue: (value: string) => void;\n /** The debounced term — what the filter and the callback act on. */\n query: string;\n /** Filtered in client mode; the original array otherwise. */\n searchedRows: readonly T[];\n /** `true` when a non-empty term is narrowing the data. */\n isFiltered: boolean;\n}\n\n/**\n * Default matcher: a case-insensitive substring test against each searchable\n * column's **display text**.\n *\n * Deliberately not the raw value. Cloud's filter tested\n * `String(row[column.key])`, which meant a column rendering `owner.profile.name`\n * was unsearchable, and an object-valued column stringified to\n * `\"[object Object]\"` — so the query \"object\" matched every row with a nested\n * value. `getColumnText` returns `null` for anything it cannot honestly turn\n * into text, and those columns are skipped rather than coerced.\n */\nfunction defaultMatcher<T>(\n columns: CubeTableColumn<T>[],\n row: T,\n rowIndex: number,\n query: string,\n): boolean {\n return columns.some((column) => {\n if (column.isSearchable === false) return false;\n\n const text = getColumnText(column, row, rowIndex);\n\n return text != null && text.toLowerCase().includes(query);\n });\n}\n\nexport function useTableSearch<T>({\n columns,\n rows,\n mode = 'client',\n value,\n defaultValue,\n onChange,\n delay = 500,\n filter,\n}: UseTableSearchOptions<T>): UseTableSearchResult<T> {\n const [searchValue, setSearchState] = useControlledState<string>(\n value as string,\n defaultValue ?? '',\n onChange as (v: string) => void,\n );\n\n // The input stays immediate; only the work is debounced. Cloud debounced the\n // server callback but ran the client filter on every keystroke.\n const query = useDebouncedValue(searchValue, delay).trim().toLowerCase();\n\n const setSearchValue = useEvent((next: string) => setSearchState(next));\n\n const searchedRows = useMemo(() => {\n if (mode !== 'client' || !query) return rows;\n\n return rows.filter((row, index) =>\n filter ? filter(row, query) : defaultMatcher(columns, row, index, query),\n );\n }, [mode, query, rows, columns, filter]);\n\n return {\n searchValue,\n setSearchValue,\n query,\n searchedRows,\n isFiltered: query.length > 0,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAgDA,SAAS,eACP,SACA,KACA,UACA,OACS;AACT,QAAO,QAAQ,MAAM,WAAW;AAC9B,MAAI,OAAO,iBAAiB,MAAO,QAAO;EAE1C,MAAM,OAAO,cAAc,QAAQ,KAAK,SAAS;AAEjD,SAAO,QAAQ,QAAQ,KAAK,aAAa,CAAC,SAAS,MAAM;GACzD;;AAGJ,SAAgB,eAAkB,EAChC,SACA,MACA,OAAO,UACP,OACA,cACA,UACA,QAAQ,KACR,UACoD;CACpD,MAAM,CAAC,aAAa,kBAAkB,mBACpC,OACA,gBAAgB,IAChB,SACD;CAID,MAAM,QAAQ,kBAAkB,aAAa,MAAM,CAAC,MAAM,CAAC,aAAa;AAYxE,QAAO;EACL;EACA,gBAZqB,UAAU,SAAiB,eAAe,KAAK,CAAC;EAarE;EACA,cAZmB,cAAc;AACjC,OAAI,SAAS,YAAY,CAAC,MAAO,QAAO;AAExC,UAAO,KAAK,QAAQ,KAAK,UACvB,SAAS,OAAO,KAAK,MAAM,GAAG,eAAe,SAAS,KAAK,OAAO,MAAM,CACzE;KACA;GAAC;GAAM;GAAO;GAAM;GAAS;GAAO,CAAC;EAOtC,YAAY,MAAM,SAAS;EAC5B"}
|