@cube-dev/ui-kit 0.191.0 → 0.192.1
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 +14 -0
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +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/ItemActionsWrapper.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/actions-run.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.d.ts +24 -24
- 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 +2 -1
- package/dist/components/content/Layout/Layout.js.map +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 +36 -16
- package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPanelTransition.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 +28 -28
- 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 +74 -52
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
- package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +50 -11
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/TreeGridTable.js +1 -1
- package/dist/components/data/TableBase/column-header.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-styles.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-menu.js +1 -1
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +7 -3
- package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tooltip-refresh.js +68 -0
- package/dist/components/data/TableBase/use-table-tooltip-refresh.js.map +1 -0
- package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -2
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.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 +2 -2
- package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +3 -3
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +2 -2
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +7 -3
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBox/optionId.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +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 +7 -3
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +20 -20
- 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/TagInput/TagInput.js +1 -1
- package/dist/components/fields/TagInput/TagList.js +1 -1
- package/dist/components/fields/TagInput/useActiveOption.js +1 -1
- package/dist/components/fields/TagInput/useTagError.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/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/TriggerActions.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ModernFormRoot.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/backend.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/modern/actions.js +1 -1
- package/dist/components/form/Form/modern/context.js +1 -1
- package/dist/components/form/Form/modern/controller.js +1 -1
- package/dist/components/form/Form/modern/field-binding.js +1 -1
- package/dist/components/form/Form/modern/field.js +1 -1
- package/dist/components/form/Form/modern/react.js +1 -1
- package/dist/components/form/Form/modern/store.js +1 -1
- package/dist/components/form/Form/modern/validation.js +1 -1
- package/dist/components/form/Form/modern/values.js +1 -1
- package/dist/components/form/Form/reset-unbound-controls.js +1 -1
- package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/legacy-tooltip.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +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-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +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/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.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.d.ts +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/default-button-text.js +1 -1
- package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +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/overlays/Tooltip/split-trigger-props.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +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 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/escapePropagation.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +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/content/Layout.md +2 -0
- package/docs/components/overlays/DialogTrigger.md +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { useEffect, useRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { ArrowNarrowDownIcon } from "../../../icons/ArrowNarrowDownIcon.js";
|
|
3
3
|
import { ArrowNarrowUpIcon } from "../../../icons/ArrowNarrowUpIcon.js";
|
|
4
4
|
import { TableHeaderItem } from "./styled.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { __Menu } from "../../actions/Menu/Menu.js";
|
|
3
3
|
import { normalizeMenuAction } from "./row-menu.js";
|
|
4
4
|
import { Children, cloneElement, isValidElement } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { _Item } from "../../content/Item/Item.js";
|
|
3
3
|
import { Action } from "../../actions/Action/Action.js";
|
|
4
4
|
import { keyframes, tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
//#region src/components/data/TableBase/table-tree.ts
|
|
3
3
|
/** Build identity and parent/child indexes without modifying consumer rows. */
|
|
4
4
|
function buildTableTree(rows, getChildren, getKey) {
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { useState } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { useLayoutEffect, useRef } from "react";
|
|
4
4
|
|
|
@@ -48,7 +48,11 @@ function useRowMoveAnimation(t0) {
|
|
|
48
48
|
if ($[1] !== bodyRef || $[2] !== duration || $[3] !== isEnabled) {
|
|
49
49
|
t3 = () => {
|
|
50
50
|
const body = bodyRef.current;
|
|
51
|
-
if (!body)
|
|
51
|
+
if (!body || !isEnabled || prefersReducedMotion()) {
|
|
52
|
+
previousRef.current = null;
|
|
53
|
+
previousOrderRef.current = [];
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
52
56
|
const rows = Array.from(body.querySelectorAll("tr[data-element=\"Row\"][data-key]:not([data-pinned])"));
|
|
53
57
|
const next = /* @__PURE__ */ new Map();
|
|
54
58
|
for (const row of rows) next.set(row.dataset.key, row.offsetTop);
|
|
@@ -57,7 +61,7 @@ function useRowMoveAnimation(t0) {
|
|
|
57
61
|
const nextOrder = rows.map(_temp);
|
|
58
62
|
previousRef.current = next;
|
|
59
63
|
previousOrderRef.current = nextOrder;
|
|
60
|
-
if (!
|
|
64
|
+
if (!previous) return;
|
|
61
65
|
const stillHere = new Set(nextOrder);
|
|
62
66
|
const before = previousOrder.filter((key) => stillHere.has(key));
|
|
63
67
|
const after = nextOrder.filter((key_0) => previous.has(key_0));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-row-move-animation.js","names":["useLayoutEffect","useRef","RefObject","ROW_MOVE_DURATION","UseRowMoveAnimationOptions","isEnabled","bodyRef","HTMLTableSectionElement","duration","prefersReducedMotion","window","Boolean","matchMedia","matches","useRowMoveAnimation","t0","$","_c","t1","undefined","previousRef","t2","Symbol","for","previousOrderRef","t3","body","current","rows","Array","from","querySelectorAll","next","Map","row","set","dataset","key","offsetTop","previous","previousOrder","nextOrder","map","_temp","stillHere","Set","before","filter","has","after","key_0","isReorder","length","some","key_1","index","moved","row_1","get","delta","push","row_2","delta_0","style","transition","transform","row_3","clear","row_4","timer","setTimeout","clearTimeout","row_0"],"sources":["../../../../src/components/data/TableBase/use-row-move-animation.ts"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\n/** Matches ag-grid's row animation closely enough to feel familiar. */\nexport const ROW_MOVE_DURATION = 120;\n\nexport interface UseRowMoveAnimationOptions {\n isEnabled: boolean;\n /** The `<tbody>` the rows live in. */\n bodyRef: RefObject<HTMLTableSectionElement | null>;\n /** @default 120 */\n duration?: number;\n}\n\n/** Matches `DisplayTransition`'s check, which is the kit's existing precedent. */\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches)\n );\n}\n\n/**\n * Slides rows to their new positions when the order changes.\n *\n * FLIP: the previous commit's positions are the First, this commit's are the\n * Last, and each row is Inverted with a `translateY` back to where it was and\n * then Played to zero. The DOM is already correct the whole time — only the\n * paint is behind — so a test or a screen reader sees the new order\n * immediately, and nothing has to be delayed or double-rendered.\n *\n * Sorting a table otherwise teleports every row at once, and the eye has no way\n * to follow a particular one to where it went. The whole value is in tracking\n * one row, which is why this animates positions rather than cross-fading.\n *\n * **Only a reorder**, and only rows that were already on screen. If the rows\n * common to both commits are in the same relative order, nothing animates,\n * however much their positions moved — that is a relayout, not a reorder, and\n * it covers the initial mount (widths resolving, the virtualizer measuring, a\n * scrollbar appearing), a container resize, and a filter that only removes\n * rows.\n *\n * Scrolling is not movement either, and that falls out of measuring `offsetTop`\n * rather than viewport coordinates: it is relative to the scroller's content,\n * so it does not change as the content scrolls past.\n */\nexport function useRowMoveAnimation({\n isEnabled,\n bodyRef,\n duration = ROW_MOVE_DURATION,\n}: UseRowMoveAnimationOptions) {\n const previousRef = useRef<Map<string, number> | null>(null);\n const previousOrderRef = useRef<string[]>([]);\n\n // No dependency array: the previous positions have to be captured after every\n // commit, because any of them may turn out to be the one a reorder starts\n // from.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n\n if (!body) return;\n\n const rows = Array.from(\n body.querySelectorAll<HTMLTableRowElement>(\n // Pinned rows are excluded by the selector rather than filtered later:\n // they do not take part in the order, so they never move.\n 'tr[data-element=\"Row\"][data-key]:not([data-pinned])',\n ),\n );\n\n // `offsetTop`, not `getBoundingClientRect()`: it is relative to the\n // scroller, so scrolling does not read as movement. Otherwise every scroll\n // tick would look like a reorder of the whole page.\n const next = new Map<string, number>();\n\n for (const row of rows) next.set(row.dataset.key!, row.offsetTop);\n\n const previous = previousRef.current;\n const previousOrder = previousOrderRef.current;\n const nextOrder = rows.map((row) => row.dataset.key!);\n\n previousRef.current = next;\n previousOrderRef.current = nextOrder;\n\n // Checked per commit rather than once: the setting can change mid-session,\n // and the position bookkeeping above must keep running either way so the\n // animation is correct the moment it is turned back on.\n if (!isEnabled || prefersReducedMotion() || !previous) return;\n\n // Animate a REORDER, never a relayout.\n //\n // Positions shift for all sorts of reasons that are not a row moving: the\n // column widths resolving after the first measure, the virtualizer taking\n // its measurements, a scrollbar appearing, a font landing, the container\n // being resized. Every one of those happens on the second commit of a\n // normal mount — so keying off \"an offset changed\" animated the table into\n // existence on load, which is exactly what a load should not do.\n //\n // Comparing the order of the rows common to both commits answers the real\n // question. A relayout leaves it identical; a sort does not.\n const stillHere = new Set(nextOrder);\n const before = previousOrder.filter((key) => stillHere.has(key));\n const after = nextOrder.filter((key) => previous.has(key));\n const isReorder =\n before.length !== after.length ||\n before.some((key, index) => key !== after[index]);\n\n if (!isReorder) return;\n\n const moved: { row: HTMLTableRowElement; delta: number }[] = [];\n\n for (const row of rows) {\n const from = previous.get(row.dataset.key!);\n\n // A row that was not here before has nowhere to come from. Skipped rather\n // than bailing on the whole batch: a virtualized window swaps some of its\n // rows on every re-sort, and refusing to animate unless ALL of them are\n // familiar means a virtualized grid — most result grids — never animates\n // at all.\n if (from === undefined) continue;\n\n const delta = from - next.get(row.dataset.key!)!;\n\n if (delta !== 0) moved.push({ row, delta });\n }\n\n if (!moved.length) return;\n\n // Invert: put every moved row back where it was, with transitions off so\n // this jump is not itself animated.\n for (const { row, delta } of moved) {\n row.style.transition = 'none';\n row.style.transform = `translateY(${delta}px)`;\n }\n\n // Flush the inverted state into layout, so the browser has something to\n // animate FROM. A forced reflow rather than `requestAnimationFrame`,\n // deliberately: rAF does not fire in a hidden tab, and a sort that lands\n // while the tab is in the background would leave every row frozen at its\n // old position until the next reorder. One reflow, once per animation.\n void body.offsetHeight;\n\n // Play.\n for (const { row } of moved) {\n row.style.transition = `transform ${duration}ms ease-out`;\n row.style.transform = '';\n }\n\n // Clear on arrival. A `transition` left inline would go on to animate\n // transforms this hook never set — a dragged row, for one.\n //\n // A timer rather than `transitionend`, for the same reason the invert does\n // not use `requestAnimationFrame`: in a hidden tab the transition never\n // runs, so the event never fires and every animated row keeps its inline\n // `transition` for the rest of the session. The duration is known exactly,\n // so there is nothing to wait to be told.\n const clear = () => {\n for (const { row } of moved) {\n row.style.transition = '';\n row.style.transform = '';\n }\n };\n const timer = setTimeout(clear, duration);\n\n return () => {\n // A reorder landing mid-animation starts over from wherever the rows are,\n // so nothing may be left behind.\n clearTimeout(timer);\n clear();\n };\n });\n}\n"],"mappings":";;;;;;AAKA,MAAaG,oBAAoB;;AAWjC,SAASM,uBAAuB;AAC9B,QACE,OAAOC,WAAW,eAClBC,QAAQD,OAAOE,aAAa,mCAAmC,EAAEC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7E,SAAOC,oBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA6B,MAAA,EAAAZ,WAAAC,SAAAE,UAAAU,OAAAH;CAGlC,MAAAP,WAAAU,OAAAC,SAAAhB,oBAAAe;CAEA,MAAAE,cAAoBnB,OAAmC,KAAK;CAAC,IAAAoB;AAAA,KAAAL,EAAA,OAAAM,OAAAC,IAAA,4BAAA,EAAA;AACnBF,OAAA,EAAE;AAAAL,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAA5C,MAAAQ,mBAAyBvB,OAAiBoB,GAAG;CAAC,IAAAI;AAAA,KAAAT,EAAA,OAAAV,WAAAU,EAAA,OAAAR,YAAAQ,EAAA,OAAAX,WAAA;AAK9BoB,aAAA;GACd,MAAAC,OAAapB,QAAOqB;AAEpB,OAAI,CAACD,KAAI;GAET,MAAAE,OAAaC,MAAKC,KAChBJ,KAAIK,iBAGF,wDAEJ,CAAC;GAKD,MAAAC,uBAAa,IAAIC,KAAqB;AAEtC,QAAK,MAAAC,OAAaN,KAAMI,MAAIG,IAAKD,IAAGE,QAAQC,KAAOH,IAAGI,UAAW;GAEjE,MAAAC,WAAiBnB,YAAWO;GAC5B,MAAAa,gBAAsBhB,iBAAgBG;GACtC,MAAAc,YAAkBb,KAAIc,IAAKC,MAA0B;AAErDvB,eAAWO,UAAWK;AACtBR,oBAAgBG,UAAWc;AAK3B,OAAI,CAACpC,aAAaI,sBAAmC,IAAjD,CAAyC8B,SAAQ;GAarD,MAAAK,YAAkB,IAAIC,IAAIJ,UAAU;GACpC,MAAAK,SAAeN,cAAaO,QAAQV,QAASO,UAASI,IAAKX,IAAI,CAAC;GAChE,MAAAY,QAAcR,UAASM,QAAQG,UAASX,SAAQS,IAAKX,MAAI,CAAC;AAK1D,OAAI,EAHFS,OAAMM,WAAYH,MAAKG,UACvBN,OAAMO,MAAMC,OAAAC,UAAgBlB,UAAQY,MAAMM,OAAO,EAErC;GAEd,MAAAC,QAA6D,EAAE;AAE/D,QAAK,MAAAC,SAAa7B,MAAI;IACpB,MAAAE,OAAaS,SAAQmB,IAAKxB,MAAGE,QAAQC,IAAM;AAO3C,QAAIP,SAASX,OAAW;IAExB,MAAAwC,QAAc7B,OAAOE,KAAI0B,IAAKxB,MAAGE,QAAQC,IAAO;AAEhD,QAAIsB,UAAU,EAAGH,OAAKI,KAAM;KAAA1B,KAAEA;KAAGyB;KAAS,CAAC;;AAG7C,OAAI,CAACH,MAAKJ,OAAO;AAIjB,QAAK,MAAA,EAAAlB,KAAA2B,OAAAF,OAAAG,aAAwBN,OAAK;AAChCtB,UAAG6B,MAAMC,aAAc;AACvB9B,UAAG6B,MAAME,YAAa,cAAcN,QAAK;;AAW3C,QAAK,MAAA,EAAAzB,KAAAgC,WAAiBV,OAAK;AACzBtB,UAAG6B,MAAMC,aAAc,aAAaxD,SAAQ;AAC5C0B,UAAG6B,MAAME,YAAa;;GAWxB,MAAAE,cAAc;AACZ,SAAK,MAAA,EAAAjC,KAAAkC,WAAiBZ,OAAK;AACzBtB,WAAG6B,MAAMC,aAAc;AACvB9B,WAAG6B,MAAME,YAAa;;;GAG1B,MAAAI,QAAcC,WAAWH,OAAO3D,SAAS;AAAC,gBAEnC;AAGL+D,iBAAaF,MAAM;AACnBF,WAAO;;;AAEVnD,IAAA,KAAAV;AAAAU,IAAA,KAAAR;AAAAQ,IAAA,KAAAX;AAAAW,IAAA,KAAAS;OAAAA,MAAAT,EAAA;AAjHDhB,iBAAgByB,GAiHd;;AA5HG,SAAAkB,MAAA6B,OAAA;AAAA,QAiCiCtC,MAAGE,QAAQC"}
|
|
1
|
+
{"version":3,"file":"use-row-move-animation.js","names":["useLayoutEffect","useRef","RefObject","ROW_MOVE_DURATION","UseRowMoveAnimationOptions","isEnabled","bodyRef","HTMLTableSectionElement","duration","prefersReducedMotion","window","Boolean","matchMedia","matches","useRowMoveAnimation","t0","$","_c","t1","undefined","previousRef","t2","Symbol","for","previousOrderRef","t3","body","current","rows","Array","from","querySelectorAll","next","Map","row","set","dataset","key","offsetTop","previous","previousOrder","nextOrder","map","_temp","stillHere","Set","before","filter","has","after","key_0","isReorder","length","some","key_1","index","moved","row_1","get","delta","push","row_2","delta_0","style","transition","transform","row_3","clear","row_4","timer","setTimeout","clearTimeout","row_0"],"sources":["../../../../src/components/data/TableBase/use-row-move-animation.ts"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\n/** Matches ag-grid's row animation closely enough to feel familiar. */\nexport const ROW_MOVE_DURATION = 120;\n\nexport interface UseRowMoveAnimationOptions {\n isEnabled: boolean;\n /** The `<tbody>` the rows live in. */\n bodyRef: RefObject<HTMLTableSectionElement | null>;\n /** @default 120 */\n duration?: number;\n}\n\n/** Matches `DisplayTransition`'s check, which is the kit's existing precedent. */\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches)\n );\n}\n\n/**\n * Slides rows to their new positions when the order changes.\n *\n * FLIP: the previous commit's positions are the First, this commit's are the\n * Last, and each row is Inverted with a `translateY` back to where it was and\n * then Played to zero. The DOM is already correct the whole time — only the\n * paint is behind — so a test or a screen reader sees the new order\n * immediately, and nothing has to be delayed or double-rendered.\n *\n * Sorting a table otherwise teleports every row at once, and the eye has no way\n * to follow a particular one to where it went. The whole value is in tracking\n * one row, which is why this animates positions rather than cross-fading.\n *\n * **Only a reorder**, and only rows that were already on screen. If the rows\n * common to both commits are in the same relative order, nothing animates,\n * however much their positions moved — that is a relayout, not a reorder, and\n * it covers the initial mount (widths resolving, the virtualizer measuring, a\n * scrollbar appearing), a container resize, and a filter that only removes\n * rows.\n *\n * Scrolling is not movement either, and that falls out of measuring `offsetTop`\n * rather than viewport coordinates: it is relative to the scroller's content,\n * so it does not change as the content scrolls past.\n */\nexport function useRowMoveAnimation({\n isEnabled,\n bodyRef,\n duration = ROW_MOVE_DURATION,\n}: UseRowMoveAnimationOptions) {\n const previousRef = useRef<Map<string, number> | null>(null);\n const previousOrderRef = useRef<string[]>([]);\n\n // No dependency array: positions are captured after every enabled commit,\n // because any of them may be the one a reorder starts from.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n\n if (!body || !isEnabled || prefersReducedMotion()) {\n // Enabling starts a fresh snapshot; disabled frames need no geometry.\n previousRef.current = null;\n previousOrderRef.current = [];\n return;\n }\n\n const rows = Array.from(\n body.querySelectorAll<HTMLTableRowElement>(\n // Pinned rows are excluded by the selector rather than filtered later:\n // they do not take part in the order, so they never move.\n 'tr[data-element=\"Row\"][data-key]:not([data-pinned])',\n ),\n );\n\n // `offsetTop`, not `getBoundingClientRect()`: it is relative to the\n // scroller, so scrolling does not read as movement. Otherwise every scroll\n // tick would look like a reorder of the whole page.\n const next = new Map<string, number>();\n\n for (const row of rows) next.set(row.dataset.key!, row.offsetTop);\n\n const previous = previousRef.current;\n const previousOrder = previousOrderRef.current;\n const nextOrder = rows.map((row) => row.dataset.key!);\n\n previousRef.current = next;\n previousOrderRef.current = nextOrder;\n\n if (!previous) return;\n\n // Animate a REORDER, never a relayout.\n //\n // Positions shift for all sorts of reasons that are not a row moving: the\n // column widths resolving after the first measure, the virtualizer taking\n // its measurements, a scrollbar appearing, a font landing, the container\n // being resized. Every one of those happens on the second commit of a\n // normal mount — so keying off \"an offset changed\" animated the table into\n // existence on load, which is exactly what a load should not do.\n //\n // Comparing the order of the rows common to both commits answers the real\n // question. A relayout leaves it identical; a sort does not.\n const stillHere = new Set(nextOrder);\n const before = previousOrder.filter((key) => stillHere.has(key));\n const after = nextOrder.filter((key) => previous.has(key));\n const isReorder =\n before.length !== after.length ||\n before.some((key, index) => key !== after[index]);\n\n if (!isReorder) return;\n\n const moved: { row: HTMLTableRowElement; delta: number }[] = [];\n\n for (const row of rows) {\n const from = previous.get(row.dataset.key!);\n\n // A row that was not here before has nowhere to come from. Skipped rather\n // than bailing on the whole batch: a virtualized window swaps some of its\n // rows on every re-sort, and refusing to animate unless ALL of them are\n // familiar means a virtualized grid — most result grids — never animates\n // at all.\n if (from === undefined) continue;\n\n const delta = from - next.get(row.dataset.key!)!;\n\n if (delta !== 0) moved.push({ row, delta });\n }\n\n if (!moved.length) return;\n\n // Invert: put every moved row back where it was, with transitions off so\n // this jump is not itself animated.\n for (const { row, delta } of moved) {\n row.style.transition = 'none';\n row.style.transform = `translateY(${delta}px)`;\n }\n\n // Flush the inverted state into layout, so the browser has something to\n // animate FROM. A forced reflow rather than `requestAnimationFrame`,\n // deliberately: rAF does not fire in a hidden tab, and a sort that lands\n // while the tab is in the background would leave every row frozen at its\n // old position until the next reorder. One reflow, once per animation.\n void body.offsetHeight;\n\n // Play.\n for (const { row } of moved) {\n row.style.transition = `transform ${duration}ms ease-out`;\n row.style.transform = '';\n }\n\n // Clear on arrival. A `transition` left inline would go on to animate\n // transforms this hook never set — a dragged row, for one.\n //\n // A timer rather than `transitionend`, for the same reason the invert does\n // not use `requestAnimationFrame`: in a hidden tab the transition never\n // runs, so the event never fires and every animated row keeps its inline\n // `transition` for the rest of the session. The duration is known exactly,\n // so there is nothing to wait to be told.\n const clear = () => {\n for (const { row } of moved) {\n row.style.transition = '';\n row.style.transform = '';\n }\n };\n const timer = setTimeout(clear, duration);\n\n return () => {\n // A reorder landing mid-animation starts over from wherever the rows are,\n // so nothing may be left behind.\n clearTimeout(timer);\n clear();\n };\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useDebouncedValue } from "../../../_internal/hooks/use-debounced-value.js";
|
|
3
3
|
import { getColumnText } from "./use-table-columns.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { RowCollection } from "./RowCollection.js";
|
|
4
4
|
import { useCallback, useMemo, useRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { getColumnText, getColumnValue } from "./use-table-columns.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { sortRows } from "./use-table-sort.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
|
+
import { refreshAutoTooltipsWithin } from "../../content/use-auto-tooltip.js";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
import { useEffect } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/components/data/TableBase/use-table-tooltip-refresh.ts
|
|
7
|
+
const APPEARANCE_ELEMENTS = new Set([
|
|
8
|
+
"Scroller",
|
|
9
|
+
"Table",
|
|
10
|
+
"Head",
|
|
11
|
+
"HeadRow",
|
|
12
|
+
"HeaderCell",
|
|
13
|
+
"HeaderGroupCell",
|
|
14
|
+
"Body",
|
|
15
|
+
"Row",
|
|
16
|
+
"Cell"
|
|
17
|
+
]);
|
|
18
|
+
function useTableTooltipRefresh(scroller, isScrolling) {
|
|
19
|
+
const $ = c(7);
|
|
20
|
+
let t0;
|
|
21
|
+
if ($[0] !== isScrolling || $[1] !== scroller?.parentElement) {
|
|
22
|
+
t0 = () => {
|
|
23
|
+
const root = scroller?.parentElement;
|
|
24
|
+
if (root && !isScrolling) refreshAutoTooltipsWithin(root);
|
|
25
|
+
};
|
|
26
|
+
$[0] = isScrolling;
|
|
27
|
+
$[1] = scroller?.parentElement;
|
|
28
|
+
$[2] = t0;
|
|
29
|
+
} else t0 = $[2];
|
|
30
|
+
useEffect(t0);
|
|
31
|
+
let t1;
|
|
32
|
+
if ($[3] !== scroller?.parentElement) {
|
|
33
|
+
t1 = () => {
|
|
34
|
+
const root_0 = scroller?.parentElement;
|
|
35
|
+
if (!root_0) return;
|
|
36
|
+
const observer = new MutationObserver((records) => {
|
|
37
|
+
if (records.some((t2) => {
|
|
38
|
+
const { target } = t2;
|
|
39
|
+
return target === root_0 || !root_0.contains(target) || target instanceof HTMLElement && APPEARANCE_ELEMENTS.has(target.dataset.element ?? "");
|
|
40
|
+
})) refreshAutoTooltipsWithin(root_0);
|
|
41
|
+
});
|
|
42
|
+
const refresh = () => refreshAutoTooltipsWithin(root_0);
|
|
43
|
+
document.fonts?.addEventListener("loadingdone", refresh);
|
|
44
|
+
observer.observe(root_0, {
|
|
45
|
+
attributes: true,
|
|
46
|
+
subtree: true
|
|
47
|
+
});
|
|
48
|
+
for (let parent = root_0.parentElement; parent; parent = parent.parentElement) observer.observe(parent, { attributes: true });
|
|
49
|
+
return () => {
|
|
50
|
+
observer.disconnect();
|
|
51
|
+
document.fonts?.removeEventListener("loadingdone", refresh);
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
$[3] = scroller?.parentElement;
|
|
55
|
+
$[4] = t1;
|
|
56
|
+
} else t1 = $[4];
|
|
57
|
+
let t2;
|
|
58
|
+
if ($[5] !== scroller) {
|
|
59
|
+
t2 = [scroller];
|
|
60
|
+
$[5] = scroller;
|
|
61
|
+
$[6] = t2;
|
|
62
|
+
} else t2 = $[6];
|
|
63
|
+
useEffect(t1, t2);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
//#endregion
|
|
67
|
+
export { useTableTooltipRefresh };
|
|
68
|
+
//# sourceMappingURL=use-table-tooltip-refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-table-tooltip-refresh.js","names":["useEffect","refreshAutoTooltipsWithin","APPEARANCE_ELEMENTS","Set","useTableTooltipRefresh","scroller","isScrolling","$","_c","t0","parentElement","root","t1","root_0","observer","MutationObserver","records","some","t2","target","contains","HTMLElement","has","dataset","element","refresh","document","fonts","addEventListener","observe","attributes","subtree","parent","disconnect","removeEventListener"],"sources":["../../../../src/components/data/TableBase/use-table-tooltip-refresh.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { refreshAutoTooltipsWithin } from '../../content/use-auto-tooltip';\n\n// These elements own inherited table typography and its state selectors.\nconst APPEARANCE_ELEMENTS = new Set([\n 'Scroller',\n 'Table',\n 'Head',\n 'HeadRow',\n 'HeaderCell',\n 'HeaderGroupCell',\n 'Body',\n 'Row',\n 'Cell',\n]);\n\nexport function useTableTooltipRefresh(\n scroller: HTMLDivElement | null,\n isScrolling: boolean,\n) {\n // A commit can change inherited appearance without changing the box or\n // font-set size. Refresh at rest, including the commit that settles scroll.\n useEffect(() => {\n const root = scroller?.parentElement;\n if (root && !isScrolling) refreshAutoTooltipsWithin(root);\n });\n\n useEffect(() => {\n const root = scroller?.parentElement;\n if (!root) return;\n\n const observer = new MutationObserver((records) => {\n if (\n records.some(\n ({ target }) =>\n target === root ||\n !root.contains(target) ||\n (target instanceof HTMLElement &&\n APPEARANCE_ELEMENTS.has(target.dataset.element ?? '')),\n )\n ) {\n // One scan per delivery also covers sibling/state selector changes.\n // Spacer height and tooltip-trigger mutations need no refresh.\n refreshAutoTooltipsWithin(root);\n }\n });\n const refresh = () => refreshAutoTooltipsWithin(root);\n document.fonts?.addEventListener('loadingdone', refresh);\n observer.observe(root, { attributes: true, subtree: true });\n for (\n let parent = root.parentElement;\n parent;\n parent = parent.parentElement\n ) {\n observer.observe(parent, { attributes: true });\n }\n return () => {\n observer.disconnect();\n document.fonts?.removeEventListener('loadingdone', refresh);\n };\n }, [scroller]);\n}\n"],"mappings":";;;;;;AAKA,MAAME,sBAAsB,IAAIC,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAOC,uBAAAC,UAAAC,aAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAD,eAAAC,EAAA,OAAAF,UAAAK,eAAA;AAMKD,aAAA;GACR,MAAAE,OAAaN,UAAQK;AACrB,OAAIC,QAAA,CAASL,YAAaL,2BAA0BU,KAAK;;AAC1DJ,IAAA,KAAAD;AAAAC,IAAA,KAAAF,UAAAK;AAAAH,IAAA,KAAAE;OAAAA,MAAAF,EAAA;AAHDP,WAAUS,GAGR;CAAA,IAAAG;AAAA,KAAAL,EAAA,OAAAF,UAAAK,eAAA;AAEQE,aAAA;GACR,MAAAC,SAAaR,UAAQK;AACrB,OAAI,CAACC,OAAI;GAET,MAAAG,WAAiB,IAAIC,kBAAiBC,YAAA;AACpC,QACEA,QAAOC,MACLC,OAAA;KAAC,MAAA,EAAAC,WAAAD;AAAU,YACTC,WAAWR,UAAX,CACCA,OAAIS,SAAUD,OAEyC,IADvDA,kBAAkBE,eACjBnB,oBAAmBoB,IAAKH,OAAMI,QAAQC,WAAd,GAA8B;MAC3D,CAIDvB,2BAA0BU,OAAK;KAEjC;GACF,MAAAc,gBAAsBxB,0BAA0BU,OAAK;AACrDe,YAAQC,OAAwBC,iBAAC,eAAeH,QAAQ;AACxDX,YAAQe,QAASlB,QAAM;IAAAmB,YAAc;IAAIC,SAAW;IAAM,CAAC;AAC3D,QAAA,IAAAC,SACerB,OAAID,eACjBsB,QAFFA,SAGWA,OAAMtB,cAEfI,UAAQe,QAASG,QAAQ,EAAAF,YAAc,MAAM,CAAC;AAC/C,gBACM;AACLhB,aAAQmB,YAAa;AACrBP,aAAQC,OAA2BO,oBAAC,eAAeT,QAAQ;;;AAE9DlB,IAAA,KAAAF,UAAAK;AAAAH,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAAA,IAAAW;AAAA,KAAAX,EAAA,OAAAF,UAAA;AAAEa,OAAA,CAACb,SAAS;AAAAE,IAAA,KAAAF;AAAAE,IAAA,KAAAW;OAAAA,MAAAX,EAAA;AAjCbP,WAAUY,IAiCPM,GAAW"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { castNullableArrayValue } from "../../../utils/react/nullableValue.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
4
|
import { ItemActionProvider } from "../../actions/ItemActionContext.js";
|
|
@@ -313,7 +313,6 @@ const ColorInput = forwardRef(function ColorInput(allProps, ref) {
|
|
|
313
313
|
t28 = isInsidePopover ? null : /* @__PURE__ */ jsxs(DialogTrigger, {
|
|
314
314
|
hideArrow: true,
|
|
315
315
|
type: "popover",
|
|
316
|
-
mobileType: "tray",
|
|
317
316
|
placement,
|
|
318
317
|
targetRef: targetRefProp ?? targetRef,
|
|
319
318
|
isOpen: controlledOpen ?? isOpen,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorInput.js","names":["BaseProps","BaseStyleProps","BlockStyleProps","ColorStyleProps","OuterStyleProps","Styles","tasty","FocusEvent","ForwardedRef","forwardRef","KeyboardEvent","MouseEvent","RefObject","useEffect","useRef","useState","Placement","useTextField","useEvent","PipetteIcon","FieldBaseProps","mergeProps","ItemAction","ItemActionProvider","useFieldProps","Dialog","DialogTrigger","ColorSpace","ColorFormat","ColorValue","detectFormat","formatColor","parseColor","ColorPanel","useIsInsideColorPopover","ColorSwatch","TextInputBase","ColorInputFormatMode","POPOVER_STYLES","overflow","FALLBACK_COLOR","h","s","l","ColorInputTrigger","qa","icon","CubeColorInputProps","value","defaultValue","onChange","format","formatMode","defaultSpace","isOpen","defaultOpen","onOpenChange","shouldFlip","targetRef","HTMLElement","placement","placeholder","size","onFocus","event","HTMLInputElement","onBlur","styles","inputStyles","triggerStyles","swatchStyles","ColorInput","allProps","ref","$","_c","t0","Symbol","for","defaultValidationTrigger","valuePropsMapper","_temp","props","value_0","onChange_0","t1","t2","t3","controlledOpen","targetRefProp","t4","t5","isDisabled","isReadOnly","isInvalid","isValid","isLoading","autoFocus","labelProps","userLabelProps","userOnBlur","label","description","ariaLabel","ariaLabelledby","ariaDescribedby","id","undefined","isInsidePopover","t6","t7","toString","initialText","t8","parsed","text","setText","t9","color","setColor","space","setSpace","setOpen","inputRef","t10","validText","emitted","t11","next","current","emit","t12","source","outputFormat","t13","t14","raw","parsed_0","nextText","t15","nextText_0","trim","parsed_1","handleTextChange","t16","parsed_2","settle","t17","currentTarget","select","handleFocus","handleMouseDown","_temp2","t18","event_1","handleBlur","t19","event_2","key","handleKeyDown","t20","nextColor","nextText_1","handleColorChange","t21","next_0","handleOpenChange","t22","type","onKeyDown","inputProps","t23","t24","t25","t26","spellCheck","onMouseDown","t27","t28","t29","cubeInputType","event_0","document","activeElement","preventDefault","focus"],"sources":["../../../../src/components/fields/ColorInput/ColorInput.tsx"],"sourcesContent":["import {\n BaseProps,\n BaseStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Placement, useTextField } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\nimport { PipetteIcon } from '../../../icons/PipetteIcon';\nimport { FieldBaseProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { ItemAction, ItemActionProvider } from '../../actions';\nimport { useFieldProps } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n detectFormat,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { useIsInsideColorPopover } from '../color/context';\nimport { ColorSwatch } from '../ColorSwatch';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\n/**\n * How the text in the input relates to the committed value.\n *\n * - `forced` — the text is rewritten in `format` whenever it is not mid-edit,\n * and the value is always written in `format`.\n * - `derive` — the user's own notation is left alone, and the value is\n * normalized in whichever notation the text is written in.\n * - `free` — the text *is* the value, verbatim. It is still verified, so an\n * unparsable entry falls back to the last valid one.\n */\nexport type ColorInputFormatMode = 'forced' | 'derive' | 'free';\n\n/**\n * A popover caps its height at half the viewport. The panel can exceed that on\n * a short screen, and would otherwise spill outside the popover's own border.\n */\nconst POPOVER_STYLES: Styles = { overflow: 'auto' };\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst ColorInputTrigger = tasty(ItemAction, {\n qa: 'ColorInputTrigger',\n icon: <PipetteIcon />,\n});\n\nexport interface CubeColorInputProps\n extends BaseProps,\n BaseStyleProps,\n OuterStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the normalized color string, or `null` when the field is cleared. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in, and the one `forced` mode displays. */\n format?: ColorFormat;\n /** How strictly the input text is tied to `format`. */\n formatMode?: ColorInputFormatMode;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the input. */\n shouldFlip?: boolean;\n /**\n * The ref of the element the popover should visually attach itself to.\n * Defaults to the field wrapper.\n *\n * Forwarded to `DialogTrigger`, so the anchor also becomes what outside-click\n * dismissal treats as the trigger.\n */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Placement of the popover relative to the anchor.\n * Accepts React Aria's `Placement` strings (e.g. `'bottom start'`,\n * `'top start'`, `'right top'`, `'left top'`).\n * @default 'bottom right'\n */\n placement?: Placement;\n /** Text shown while the field is empty. */\n placeholder?: string;\n /** The size of the input. */\n size?: 'small' | 'medium' | 'large' | (string & {});\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n styles?: Styles;\n /** Styles of the text input element. */\n inputStyles?: Styles;\n /** Styles of the popover trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch shown inside the input. */\n swatchStyles?: Styles;\n}\n\n/**\n * A color field: the color as text, a swatch of the current value, and a\n * popover to dial it in across OKHST, OKLCH and RGB.\n */\nexport const ColorInput = forwardRef(function ColorInput(\n allProps: CubeColorInputProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onBlur',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n formatMode = 'forced',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n targetRef: targetRefProp,\n placement = 'bottom right',\n placeholder = 'Pick a color',\n size,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n isLoading,\n autoFocus,\n inputStyles,\n triggerStyles,\n swatchStyles,\n labelProps: userLabelProps,\n onBlur: userOnBlur,\n onFocus,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n id,\n } = props;\n\n // Already inside a color popover: this is the value field for that popover,\n // so it must not offer a popover of its own.\n const isInsidePopover = useIsInsideColorPopover();\n\n const initialText = (value ?? defaultValue ?? '').toString();\n const [text, setText] = useState(() => {\n const parsed = parseColor(initialText);\n\n return parsed && formatMode === 'forced'\n ? formatColor(parsed, format)\n : initialText;\n });\n const [color, setColor] = useState(() => parseColor(initialText));\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n /** The last text that parsed, so an invalid entry has something to fall back to. */\n const validText = useRef(parseColor(initialText) ? text : '');\n /** What was last handed to `onChange`, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n const emit = useEvent((next: string | null) => {\n emitted.current = next;\n onChange?.(next);\n });\n\n /** The notation a value should be written in, given the current text. */\n const outputFormat = (source: string): ColorFormat =>\n formatMode === 'forced' ? format : detectFormat(source) ?? format;\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n\n const raw = (value ?? '').toString();\n const parsed = parseColor(raw);\n const nextText =\n parsed && formatMode === 'forced' ? formatColor(parsed, format) : raw;\n\n setColor(parsed);\n setText(nextText);\n validText.current = parsed ? nextText : '';\n }, [value, format, formatMode]);\n\n const handleTextChange = useEvent((nextText: string) => {\n setText(nextText);\n\n if (!nextText.trim()) {\n setColor(null);\n validText.current = '';\n emit(null);\n\n return;\n }\n\n const parsed = parseColor(nextText);\n\n // Half-typed input keeps the last valid color, so the value stays a real\n // color at every keystroke.\n if (!parsed) return;\n\n setColor(parsed);\n validText.current = nextText;\n emit(\n formatMode === 'free'\n ? nextText.trim()\n : formatColor(parsed, outputFormat(nextText)),\n );\n });\n\n /** Resolve whatever is in the input into a real color, or undo it. */\n const settle = useEvent(() => {\n if (!text.trim()) return;\n\n const parsed = parseColor(text);\n\n if (!parsed) {\n setText(validText.current);\n\n return;\n }\n\n if (formatMode === 'forced') setText(formatColor(parsed, format));\n });\n\n /**\n * Focusing offers the whole value up for replacement, the way a hex field\n * does. The string is the unit of editing here: a single channel is tuned\n * with the sliders, not by hand-editing one number inside `oklch(…)`.\n *\n * Read off the event rather than `inputRef`, which `TextInputBase` re-points\n * through `useCombinedRefs`.\n */\n const handleFocus = useEvent((event: FocusEvent<HTMLInputElement>) => {\n event.currentTarget.select();\n onFocus?.(event);\n });\n\n /**\n * A click would otherwise drop a caret and undo that selection — the browser\n * applies it after the focus handler has run. Suppressing the default action\n * of the focusing press means no caret is ever placed; focus is then moved\n * here instead, which selects.\n *\n * Only the press that *takes* focus is suppressed, so clicking a field that\n * already has focus still positions the caret, and dragging still selects a\n * range.\n */\n const handleMouseDown = useEvent((event: MouseEvent<HTMLInputElement>) => {\n if (document.activeElement === event.currentTarget) return;\n\n event.preventDefault();\n event.currentTarget.focus();\n });\n\n const handleBlur = useEvent((event: FocusEvent<HTMLInputElement>) => {\n settle();\n userOnBlur?.(event);\n });\n\n const handleKeyDown = useEvent((event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') settle();\n });\n\n const handleColorChange = useEvent((nextColor: ColorValue) => {\n const nextText = formatColor(nextColor, outputFormat(text));\n\n setColor(nextColor);\n setText(nextText);\n validText.current = nextText;\n emit(nextText);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n const { labelProps, inputProps } = useTextField(\n {\n id,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n isDisabled,\n isReadOnly,\n isInvalid,\n autoFocus,\n placeholder,\n value: text,\n type: 'text',\n onChange: handleTextChange,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n },\n inputRef,\n );\n\n return (\n <TextInputBase\n {...props}\n ref={ref}\n value={text}\n defaultValue={props.defaultValue ?? undefined}\n qa={qa || 'ColorInput'}\n size={size}\n autoComplete=\"off\"\n // A flat 20px at every field size, which is what this has always rendered.\n // Neither of the other two options is right here: tracking `$size` puts a\n // large field's swatch against the border, because a text input hangs its\n // prefix off the edge with no padding of its own, and passing the field's\n // own size through grows the swatch with the field — visibly, and for no\n // reason a caller asked for. The swatch is a fixed badge, not a control.\n icon={<ColorSwatch size=\"small\" color={color} styles={swatchStyles} />}\n inputRef={inputRef}\n inputProps={{\n ...inputProps,\n spellCheck: false,\n onMouseDown: handleMouseDown,\n }}\n inputStyles={inputStyles}\n labelProps={mergeProps(labelProps, userLabelProps)}\n wrapperRef={targetRef}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n isLoading={isLoading}\n // The validation state reads left of the trigger, the way `DateInputBase`\n // orders it for the date pickers.\n suffixPosition=\"after\"\n suffix={\n isInsidePopover ? null : (\n <DialogTrigger\n hideArrow\n type=\"popover\"\n mobileType=\"tray\"\n placement={placement}\n targetRef={targetRefProp ?? targetRef}\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n {/*\n The trigger is disabled by either flag, but the two arrive through\n different channels on purpose. A disabled FIELD travels through the\n provider so `current` treats the state as inherited: the field has\n already faded the colour the trigger paints from, and fading again\n multiplies the two (measured `.12` — all but invisible). Read-only\n alone leaves the field's text opaque, so there the trigger really is\n disabled on its own and should fade itself.\n */}\n <ItemActionProvider isDisabled={isDisabled}>\n <ColorInputTrigger\n size={size}\n aria-label=\"Open the color picker\"\n isDisabled={isReadOnly && !isDisabled ? true : undefined}\n styles={triggerStyles}\n />\n </ItemActionProvider>\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n <ColorPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isDisabled || isReadOnly}\n previewFormat={outputFormat(text)}\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </Dialog>\n </DialogTrigger>\n )\n }\n />\n );\n});\n\n(ColorInput as any).cubeInputType = 'Text';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorInput.js","names":["BaseProps","BaseStyleProps","BlockStyleProps","ColorStyleProps","OuterStyleProps","Styles","tasty","FocusEvent","ForwardedRef","forwardRef","KeyboardEvent","MouseEvent","RefObject","useEffect","useRef","useState","Placement","useTextField","useEvent","PipetteIcon","FieldBaseProps","mergeProps","ItemAction","ItemActionProvider","useFieldProps","Dialog","DialogTrigger","ColorSpace","ColorFormat","ColorValue","detectFormat","formatColor","parseColor","ColorPanel","useIsInsideColorPopover","ColorSwatch","TextInputBase","ColorInputFormatMode","POPOVER_STYLES","overflow","FALLBACK_COLOR","h","s","l","ColorInputTrigger","qa","icon","CubeColorInputProps","value","defaultValue","onChange","format","formatMode","defaultSpace","isOpen","defaultOpen","onOpenChange","shouldFlip","targetRef","HTMLElement","placement","placeholder","size","onFocus","event","HTMLInputElement","onBlur","styles","inputStyles","triggerStyles","swatchStyles","ColorInput","allProps","ref","$","_c","t0","Symbol","for","defaultValidationTrigger","valuePropsMapper","_temp","props","value_0","onChange_0","t1","t2","t3","controlledOpen","targetRefProp","t4","t5","isDisabled","isReadOnly","isInvalid","isValid","isLoading","autoFocus","labelProps","userLabelProps","userOnBlur","label","description","ariaLabel","ariaLabelledby","ariaDescribedby","id","undefined","isInsidePopover","t6","t7","toString","initialText","t8","parsed","text","setText","t9","color","setColor","space","setSpace","setOpen","inputRef","t10","validText","emitted","t11","next","current","emit","t12","source","outputFormat","t13","t14","raw","parsed_0","nextText","t15","nextText_0","trim","parsed_1","handleTextChange","t16","parsed_2","settle","t17","currentTarget","select","handleFocus","handleMouseDown","_temp2","t18","event_1","handleBlur","t19","event_2","key","handleKeyDown","t20","nextColor","nextText_1","handleColorChange","t21","next_0","handleOpenChange","t22","type","onKeyDown","inputProps","t23","t24","t25","t26","spellCheck","onMouseDown","t27","t28","t29","cubeInputType","event_0","document","activeElement","preventDefault","focus"],"sources":["../../../../src/components/fields/ColorInput/ColorInput.tsx"],"sourcesContent":["import {\n BaseProps,\n BaseStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Placement, useTextField } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\nimport { PipetteIcon } from '../../../icons/PipetteIcon';\nimport { FieldBaseProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { ItemAction, ItemActionProvider } from '../../actions';\nimport { useFieldProps } from '../../form';\nimport { Dialog } from '../../overlays/Dialog/Dialog';\nimport { DialogTrigger } from '../../overlays/Dialog/DialogTrigger';\nimport { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n detectFormat,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { useIsInsideColorPopover } from '../color/context';\nimport { ColorSwatch } from '../ColorSwatch';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\n/**\n * How the text in the input relates to the committed value.\n *\n * - `forced` — the text is rewritten in `format` whenever it is not mid-edit,\n * and the value is always written in `format`.\n * - `derive` — the user's own notation is left alone, and the value is\n * normalized in whichever notation the text is written in.\n * - `free` — the text *is* the value, verbatim. It is still verified, so an\n * unparsable entry falls back to the last valid one.\n */\nexport type ColorInputFormatMode = 'forced' | 'derive' | 'free';\n\n/**\n * A popover caps its height at half the viewport. The panel can exceed that on\n * a short screen, and would otherwise spill outside the popover's own border.\n */\nconst POPOVER_STYLES: Styles = { overflow: 'auto' };\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst ColorInputTrigger = tasty(ItemAction, {\n qa: 'ColorInputTrigger',\n icon: <PipetteIcon />,\n});\n\nexport interface CubeColorInputProps\n extends BaseProps,\n BaseStyleProps,\n OuterStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the normalized color string, or `null` when the field is cleared. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in, and the one `forced` mode displays. */\n format?: ColorFormat;\n /** How strictly the input text is tied to `format`. */\n formatMode?: ColorInputFormatMode;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the input. */\n shouldFlip?: boolean;\n /**\n * The ref of the element the popover should visually attach itself to.\n * Defaults to the field wrapper.\n *\n * Forwarded to `DialogTrigger`, so the anchor also becomes what outside-click\n * dismissal treats as the trigger.\n */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Placement of the popover relative to the anchor.\n * Accepts React Aria's `Placement` strings (e.g. `'bottom start'`,\n * `'top start'`, `'right top'`, `'left top'`).\n * @default 'bottom right'\n */\n placement?: Placement;\n /** Text shown while the field is empty. */\n placeholder?: string;\n /** The size of the input. */\n size?: 'small' | 'medium' | 'large' | (string & {});\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n styles?: Styles;\n /** Styles of the text input element. */\n inputStyles?: Styles;\n /** Styles of the popover trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch shown inside the input. */\n swatchStyles?: Styles;\n}\n\n/**\n * A color field: the color as text, a swatch of the current value, and a\n * popover to dial it in across OKHST, OKLCH and RGB.\n */\nexport const ColorInput = forwardRef(function ColorInput(\n allProps: CubeColorInputProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onBlur',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n formatMode = 'forced',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n targetRef: targetRefProp,\n placement = 'bottom right',\n placeholder = 'Pick a color',\n size,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n isLoading,\n autoFocus,\n inputStyles,\n triggerStyles,\n swatchStyles,\n labelProps: userLabelProps,\n onBlur: userOnBlur,\n onFocus,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n id,\n } = props;\n\n // Already inside a color popover: this is the value field for that popover,\n // so it must not offer a popover of its own.\n const isInsidePopover = useIsInsideColorPopover();\n\n const initialText = (value ?? defaultValue ?? '').toString();\n const [text, setText] = useState(() => {\n const parsed = parseColor(initialText);\n\n return parsed && formatMode === 'forced'\n ? formatColor(parsed, format)\n : initialText;\n });\n const [color, setColor] = useState(() => parseColor(initialText));\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n /** The last text that parsed, so an invalid entry has something to fall back to. */\n const validText = useRef(parseColor(initialText) ? text : '');\n /** What was last handed to `onChange`, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n const emit = useEvent((next: string | null) => {\n emitted.current = next;\n onChange?.(next);\n });\n\n /** The notation a value should be written in, given the current text. */\n const outputFormat = (source: string): ColorFormat =>\n formatMode === 'forced' ? format : detectFormat(source) ?? format;\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n\n const raw = (value ?? '').toString();\n const parsed = parseColor(raw);\n const nextText =\n parsed && formatMode === 'forced' ? formatColor(parsed, format) : raw;\n\n setColor(parsed);\n setText(nextText);\n validText.current = parsed ? nextText : '';\n }, [value, format, formatMode]);\n\n const handleTextChange = useEvent((nextText: string) => {\n setText(nextText);\n\n if (!nextText.trim()) {\n setColor(null);\n validText.current = '';\n emit(null);\n\n return;\n }\n\n const parsed = parseColor(nextText);\n\n // Half-typed input keeps the last valid color, so the value stays a real\n // color at every keystroke.\n if (!parsed) return;\n\n setColor(parsed);\n validText.current = nextText;\n emit(\n formatMode === 'free'\n ? nextText.trim()\n : formatColor(parsed, outputFormat(nextText)),\n );\n });\n\n /** Resolve whatever is in the input into a real color, or undo it. */\n const settle = useEvent(() => {\n if (!text.trim()) return;\n\n const parsed = parseColor(text);\n\n if (!parsed) {\n setText(validText.current);\n\n return;\n }\n\n if (formatMode === 'forced') setText(formatColor(parsed, format));\n });\n\n /**\n * Focusing offers the whole value up for replacement, the way a hex field\n * does. The string is the unit of editing here: a single channel is tuned\n * with the sliders, not by hand-editing one number inside `oklch(…)`.\n *\n * Read off the event rather than `inputRef`, which `TextInputBase` re-points\n * through `useCombinedRefs`.\n */\n const handleFocus = useEvent((event: FocusEvent<HTMLInputElement>) => {\n event.currentTarget.select();\n onFocus?.(event);\n });\n\n /**\n * A click would otherwise drop a caret and undo that selection — the browser\n * applies it after the focus handler has run. Suppressing the default action\n * of the focusing press means no caret is ever placed; focus is then moved\n * here instead, which selects.\n *\n * Only the press that *takes* focus is suppressed, so clicking a field that\n * already has focus still positions the caret, and dragging still selects a\n * range.\n */\n const handleMouseDown = useEvent((event: MouseEvent<HTMLInputElement>) => {\n if (document.activeElement === event.currentTarget) return;\n\n event.preventDefault();\n event.currentTarget.focus();\n });\n\n const handleBlur = useEvent((event: FocusEvent<HTMLInputElement>) => {\n settle();\n userOnBlur?.(event);\n });\n\n const handleKeyDown = useEvent((event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') settle();\n });\n\n const handleColorChange = useEvent((nextColor: ColorValue) => {\n const nextText = formatColor(nextColor, outputFormat(text));\n\n setColor(nextColor);\n setText(nextText);\n validText.current = nextText;\n emit(nextText);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n const { labelProps, inputProps } = useTextField(\n {\n id,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n isDisabled,\n isReadOnly,\n isInvalid,\n autoFocus,\n placeholder,\n value: text,\n type: 'text',\n onChange: handleTextChange,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n },\n inputRef,\n );\n\n return (\n <TextInputBase\n {...props}\n ref={ref}\n value={text}\n defaultValue={props.defaultValue ?? undefined}\n qa={qa || 'ColorInput'}\n size={size}\n autoComplete=\"off\"\n // A flat 20px at every field size, which is what this has always rendered.\n // Neither of the other two options is right here: tracking `$size` puts a\n // large field's swatch against the border, because a text input hangs its\n // prefix off the edge with no padding of its own, and passing the field's\n // own size through grows the swatch with the field — visibly, and for no\n // reason a caller asked for. The swatch is a fixed badge, not a control.\n icon={<ColorSwatch size=\"small\" color={color} styles={swatchStyles} />}\n inputRef={inputRef}\n inputProps={{\n ...inputProps,\n spellCheck: false,\n onMouseDown: handleMouseDown,\n }}\n inputStyles={inputStyles}\n labelProps={mergeProps(labelProps, userLabelProps)}\n wrapperRef={targetRef}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n isLoading={isLoading}\n // The validation state reads left of the trigger, the way `DateInputBase`\n // orders it for the date pickers.\n suffixPosition=\"after\"\n suffix={\n isInsidePopover ? null : (\n <DialogTrigger\n hideArrow\n type=\"popover\"\n placement={placement}\n targetRef={targetRefProp ?? targetRef}\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n {/*\n The trigger is disabled by either flag, but the two arrive through\n different channels on purpose. A disabled FIELD travels through the\n provider so `current` treats the state as inherited: the field has\n already faded the colour the trigger paints from, and fading again\n multiplies the two (measured `.12` — all but invisible). Read-only\n alone leaves the field's text opaque, so there the trigger really is\n disabled on its own and should fade itself.\n */}\n <ItemActionProvider isDisabled={isDisabled}>\n <ColorInputTrigger\n size={size}\n aria-label=\"Open the color picker\"\n isDisabled={isReadOnly && !isDisabled ? true : undefined}\n styles={triggerStyles}\n />\n </ItemActionProvider>\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n <ColorPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isDisabled || isReadOnly}\n previewFormat={outputFormat(text)}\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </Dialog>\n </DialogTrigger>\n )\n }\n />\n );\n});\n\n(ColorInput as any).cubeInputType = 'Text';\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
4
|
import { _Text } from "../../content/Text.js";
|
|
@@ -109,7 +109,6 @@ const ColorPicker = forwardRef(function ColorPicker(allProps, ref) {
|
|
|
109
109
|
children: /* @__PURE__ */ jsxs(DialogTrigger, {
|
|
110
110
|
hideArrow: true,
|
|
111
111
|
type: "popover",
|
|
112
|
-
mobileType: "tray",
|
|
113
112
|
placement,
|
|
114
113
|
targetRef,
|
|
115
114
|
isOpen: controlledOpen ?? isOpen,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.js","names":["BaseProps","BLOCK_STYLES","BlockStyleProps","OUTER_STYLES","OuterStyleProps","Styles","tasty","ForwardedRef","forwardRef","ReactNode","RefObject","useEffect","useRef","useState","Placement","useEvent","FieldBaseProps","extractStyles","ItemButton","CubeItemProps","Text","getValidationIcon","getValidationTheme","useFieldProps","wrapWithField","Dialog","DialogTrigger","ColorSpace","ColorFormat","ColorValue","formatColor","parseColor","ColorPanel","ColorPopoverContext","ColorInput","ColorSwatch","ColorSwatchGroup","CubeColorSwatchItem","POPOVER_STYLES","overflow","PALETTE_STYLES","border","padding","width","FALLBACK_COLOR","h","s","l","ColorPickerWrapper","qa","styles","display","flow","gridRows","placeContent","placeItems","CubeColorPickerProps","value","defaultValue","onChange","format","defaultSpace","isOpen","defaultOpen","onOpenChange","shouldFlip","targetRef","HTMLElement","placement","children","placeholder","size","type","theme","triggerTooltip","swatches","swatchColumns","triggerStyles","swatchStyles","ColorPicker","allProps","ref","props","defaultValidationTrigger","valuePropsMapper","id","controlledOpen","isDisabled","isReadOnly","isLoading","isInvalid","isValid","autoFocus","ariaLabel","isEditingDisabled","color","setColor","toString","space","setSpace","setOpen","emitted","undefined","current","handleColorChange","next","text","colorText","handleValueChange","handleOpenChange","label","pickerField","length","cubeInputType"],"sources":["../../../../src/components/fields/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n ReactNode,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Placement } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\nimport { FieldBaseProps } from '../../../shared';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport {\n getValidationIcon,\n getValidationTheme,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { ColorPopoverContext } from '../color/context';\nimport { ColorInput } from '../ColorInput';\nimport { ColorSwatch } from '../ColorSwatch';\nimport { ColorSwatchGroup, CubeColorSwatchItem } from '../ColorSwatchGroup';\n\n/**\n * A popover caps its height at half the viewport. The panel can exceed that on\n * a short screen, and would otherwise spill outside the popover's own border.\n */\nconst POPOVER_STYLES: Styles = { overflow: 'auto' };\n\n/**\n * The rule separating the palette from the editor. `Divider` is not used: it\n * places itself on named grid lines meant for menu layouts, which this panel\n * does not define, so it lands in the wrong row and spawns a stray column.\n */\nconst PALETTE_STYLES: Styles = {\n border: 'top',\n padding: '1x top',\n width: '100%',\n};\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst ColorPickerWrapper = tasty({\n qa: 'ColorPickerWrapper',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport interface CubeColorPickerProps\n extends BaseProps,\n OuterStyleProps,\n BlockStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the color string, or `null` when there is no color. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in. */\n format?: ColorFormat;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the trigger. */\n shouldFlip?: boolean;\n /**\n * The ref of the element the popover should visually attach itself to.\n * Defaults to the trigger button.\n *\n * Forwarded to `DialogTrigger`, so the anchor also becomes what outside-click\n * dismissal treats as the trigger.\n */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Placement of the popover relative to the anchor.\n * Accepts React Aria's `Placement` strings (e.g. `'bottom start'`,\n * `'top start'`, `'right top'`, `'left top'`).\n * @default 'bottom start'\n */\n placement?: Placement;\n /** Replaces the color shown on the trigger. Pass `null` for a swatch on its own. */\n children?: ReactNode;\n /** Shown on the trigger while there is no color. */\n placeholder?: ReactNode;\n /** The size of the trigger. */\n size?: CubeItemProps['size'];\n /** The visual type of the trigger. */\n type?: CubeItemProps['type'];\n theme?: CubeItemProps['theme'];\n /** Tooltip for the trigger, separate from `labelTooltip`. */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Colors to offer under the editor, for picking without dialing one in. */\n swatches?: CubeColorSwatchItem[];\n /** How many swatches per row. Defaults to a single row. */\n swatchColumns?: number;\n styles?: Styles;\n /** Styles of the trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch. */\n swatchStyles?: Styles;\n 'aria-label'?: string;\n}\n\n/**\n * A color swatch that opens the color popover — the same one `ColorInput`\n * uses, without the text field. Reach for it when a color is chosen but never\n * typed: a toolbar, a chart legend, a cell in a dense table.\n */\nexport const ColorPicker = forwardRef(function ColorPicker(\n allProps: CubeColorPickerProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n id,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n targetRef,\n placement = 'bottom start',\n children,\n placeholder = 'Pick a color',\n size,\n type = 'outline',\n theme = 'default',\n triggerTooltip,\n swatches,\n swatchColumns,\n triggerStyles,\n swatchStyles,\n isDisabled,\n isReadOnly,\n isLoading,\n isInvalid,\n isValid,\n autoFocus,\n 'aria-label': ariaLabel,\n } = props;\n\n const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);\n\n /**\n * Loading locks the trigger, but the popover can outlive that — it may be\n * controlled, or opened before the load began — so the editor inside has to\n * refuse edits on the same terms.\n */\n const isEditingDisabled = isDisabled || isLoading;\n\n const [color, setColor] = useState(() =>\n parseColor((value ?? defaultValue ?? '').toString()),\n );\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n /** What was last published, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n setColor(parseColor((value ?? '').toString()));\n }, [value]);\n\n const handleColorChange = useEvent((next: ColorValue) => {\n const text = formatColor(next, format);\n\n emitted.current = text;\n setColor(next);\n onChange?.(text);\n });\n\n const colorText = color ? formatColor(color, format) : null;\n\n /**\n * The palette and the value field both speak in strings, and the field can\n * hand back `null` when it is cleared — which has to reach the picker, or the\n * text empties while the preview and trigger keep the old color.\n */\n const handleValueChange = useEvent((next: string | null) => {\n emitted.current = next;\n setColor(next ? parseColor(next) : null);\n onChange?.(next);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n // The swatch carries the color and the label spells it out. `children`\n // replaces that label, and `null` leaves the swatch on its own.\n const label =\n children !== undefined ? (\n children\n ) : color ? (\n formatColor(color, format)\n ) : (\n // Muted, so an unset picker never reads like one holding a value —\n // the same treatment `Picker` and `Select` give their placeholders.\n <Text.Placeholder>{placeholder}</Text.Placeholder>\n );\n\n const pickerField = (\n <ColorPickerWrapper styles={styles}>\n <DialogTrigger\n hideArrow\n type=\"popover\"\n mobileType=\"tray\"\n placement={placement}\n targetRef={targetRef}\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n <ItemButton\n data-popover-trigger\n id={id}\n qa={qa || 'ColorPickerTrigger'}\n data-input-type=\"colorpicker\"\n type={type}\n theme={getValidationTheme(theme, { isInvalid, isValid })}\n size={size}\n // Fixed 20px rather than tracking the trigger, same as `ColorInput`\n // and same as this has always rendered.\n icon={\n <ColorSwatch size=\"small\" color={color} styles={swatchStyles} />\n }\n rightIcon={getValidationIcon({ isInvalid, isValid })}\n tooltip={triggerTooltip}\n isDisabled={isEditingDisabled || isReadOnly}\n autoFocus={autoFocus}\n aria-label={ariaLabel}\n mods={{ placeholder: !color }}\n styles={triggerStyles}\n >\n {label}\n </ItemButton>\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n {/* Marks the subtree so a nested swatch group drops its custom-color\n escape hatch, which is a picker and would recurse forever. */}\n <ColorPopoverContext.Provider value={true}>\n <ColorPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isEditingDisabled || isReadOnly}\n previewFormat={format}\n input={\n <ColorInput\n aria-label=\"Color value\"\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled}\n isReadOnly={isReadOnly}\n onChange={handleValueChange}\n />\n }\n swatches={\n swatches?.length ? (\n <ColorSwatchGroup\n aria-label=\"Palette\"\n styles={PALETTE_STYLES}\n colors={swatches}\n columns={swatchColumns}\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled || isReadOnly}\n onChange={handleValueChange}\n />\n ) : null\n }\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </ColorPopoverContext.Provider>\n </Dialog>\n </DialogTrigger>\n </ColorPickerWrapper>\n );\n\n return wrapWithField(pickerField, ref as any, props);\n});\n\n/**\n * Drives the legacy `<Field>` wiring: `Picker` validates on change and passes\n * the value through untouched, where `Text` would default to `onBlur` and\n * coerce `null` into an empty string.\n */\n(ColorPicker as any).cubeInputType = 'Picker';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","names":["BaseProps","BLOCK_STYLES","BlockStyleProps","OUTER_STYLES","OuterStyleProps","Styles","tasty","ForwardedRef","forwardRef","ReactNode","RefObject","useEffect","useRef","useState","Placement","useEvent","FieldBaseProps","extractStyles","ItemButton","CubeItemProps","Text","getValidationIcon","getValidationTheme","useFieldProps","wrapWithField","Dialog","DialogTrigger","ColorSpace","ColorFormat","ColorValue","formatColor","parseColor","ColorPanel","ColorPopoverContext","ColorInput","ColorSwatch","ColorSwatchGroup","CubeColorSwatchItem","POPOVER_STYLES","overflow","PALETTE_STYLES","border","padding","width","FALLBACK_COLOR","h","s","l","ColorPickerWrapper","qa","styles","display","flow","gridRows","placeContent","placeItems","CubeColorPickerProps","value","defaultValue","onChange","format","defaultSpace","isOpen","defaultOpen","onOpenChange","shouldFlip","targetRef","HTMLElement","placement","children","placeholder","size","type","theme","triggerTooltip","swatches","swatchColumns","triggerStyles","swatchStyles","ColorPicker","allProps","ref","props","defaultValidationTrigger","valuePropsMapper","id","controlledOpen","isDisabled","isReadOnly","isLoading","isInvalid","isValid","autoFocus","ariaLabel","isEditingDisabled","color","setColor","toString","space","setSpace","setOpen","emitted","undefined","current","handleColorChange","next","text","colorText","handleValueChange","handleOpenChange","label","pickerField","length","cubeInputType"],"sources":["../../../../src/components/fields/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n ReactNode,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Placement } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\nimport { FieldBaseProps } from '../../../shared';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport {\n getValidationIcon,\n getValidationTheme,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { Dialog } from '../../overlays/Dialog/Dialog';\nimport { DialogTrigger } from '../../overlays/Dialog/DialogTrigger';\nimport { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { ColorPopoverContext } from '../color/context';\nimport { ColorInput } from '../ColorInput';\nimport { ColorSwatch } from '../ColorSwatch';\nimport { ColorSwatchGroup, CubeColorSwatchItem } from '../ColorSwatchGroup';\n\n/**\n * A popover caps its height at half the viewport. The panel can exceed that on\n * a short screen, and would otherwise spill outside the popover's own border.\n */\nconst POPOVER_STYLES: Styles = { overflow: 'auto' };\n\n/**\n * The rule separating the palette from the editor. `Divider` is not used: it\n * places itself on named grid lines meant for menu layouts, which this panel\n * does not define, so it lands in the wrong row and spawns a stray column.\n */\nconst PALETTE_STYLES: Styles = {\n border: 'top',\n padding: '1x top',\n width: '100%',\n};\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst ColorPickerWrapper = tasty({\n qa: 'ColorPickerWrapper',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport interface CubeColorPickerProps\n extends BaseProps,\n OuterStyleProps,\n BlockStyleProps,\n FieldBaseProps<string | null | undefined> {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the color string, or `null` when there is no color. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in. */\n format?: ColorFormat;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the trigger. */\n shouldFlip?: boolean;\n /**\n * The ref of the element the popover should visually attach itself to.\n * Defaults to the trigger button.\n *\n * Forwarded to `DialogTrigger`, so the anchor also becomes what outside-click\n * dismissal treats as the trigger.\n */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Placement of the popover relative to the anchor.\n * Accepts React Aria's `Placement` strings (e.g. `'bottom start'`,\n * `'top start'`, `'right top'`, `'left top'`).\n * @default 'bottom start'\n */\n placement?: Placement;\n /** Replaces the color shown on the trigger. Pass `null` for a swatch on its own. */\n children?: ReactNode;\n /** Shown on the trigger while there is no color. */\n placeholder?: ReactNode;\n /** The size of the trigger. */\n size?: CubeItemProps['size'];\n /** The visual type of the trigger. */\n type?: CubeItemProps['type'];\n theme?: CubeItemProps['theme'];\n /** Tooltip for the trigger, separate from `labelTooltip`. */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Colors to offer under the editor, for picking without dialing one in. */\n swatches?: CubeColorSwatchItem[];\n /** How many swatches per row. Defaults to a single row. */\n swatchColumns?: number;\n styles?: Styles;\n /** Styles of the trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch. */\n swatchStyles?: Styles;\n 'aria-label'?: string;\n}\n\n/**\n * A color swatch that opens the color popover — the same one `ColorInput`\n * uses, without the text field. Reach for it when a color is chosen but never\n * typed: a toolbar, a chart legend, a cell in a dense table.\n */\nexport const ColorPicker = forwardRef(function ColorPicker(\n allProps: CubeColorPickerProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n id,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n targetRef,\n placement = 'bottom start',\n children,\n placeholder = 'Pick a color',\n size,\n type = 'outline',\n theme = 'default',\n triggerTooltip,\n swatches,\n swatchColumns,\n triggerStyles,\n swatchStyles,\n isDisabled,\n isReadOnly,\n isLoading,\n isInvalid,\n isValid,\n autoFocus,\n 'aria-label': ariaLabel,\n } = props;\n\n const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);\n\n /**\n * Loading locks the trigger, but the popover can outlive that — it may be\n * controlled, or opened before the load began — so the editor inside has to\n * refuse edits on the same terms.\n */\n const isEditingDisabled = isDisabled || isLoading;\n\n const [color, setColor] = useState(() =>\n parseColor((value ?? defaultValue ?? '').toString()),\n );\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n /** What was last published, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n setColor(parseColor((value ?? '').toString()));\n }, [value]);\n\n const handleColorChange = useEvent((next: ColorValue) => {\n const text = formatColor(next, format);\n\n emitted.current = text;\n setColor(next);\n onChange?.(text);\n });\n\n const colorText = color ? formatColor(color, format) : null;\n\n /**\n * The palette and the value field both speak in strings, and the field can\n * hand back `null` when it is cleared — which has to reach the picker, or the\n * text empties while the preview and trigger keep the old color.\n */\n const handleValueChange = useEvent((next: string | null) => {\n emitted.current = next;\n setColor(next ? parseColor(next) : null);\n onChange?.(next);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n // The swatch carries the color and the label spells it out. `children`\n // replaces that label, and `null` leaves the swatch on its own.\n const label =\n children !== undefined ? (\n children\n ) : color ? (\n formatColor(color, format)\n ) : (\n // Muted, so an unset picker never reads like one holding a value —\n // the same treatment `Picker` and `Select` give their placeholders.\n <Text.Placeholder>{placeholder}</Text.Placeholder>\n );\n\n const pickerField = (\n <ColorPickerWrapper styles={styles}>\n <DialogTrigger\n hideArrow\n type=\"popover\"\n placement={placement}\n targetRef={targetRef}\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n <ItemButton\n data-popover-trigger\n id={id}\n qa={qa || 'ColorPickerTrigger'}\n data-input-type=\"colorpicker\"\n type={type}\n theme={getValidationTheme(theme, { isInvalid, isValid })}\n size={size}\n // Fixed 20px rather than tracking the trigger, same as `ColorInput`\n // and same as this has always rendered.\n icon={\n <ColorSwatch size=\"small\" color={color} styles={swatchStyles} />\n }\n rightIcon={getValidationIcon({ isInvalid, isValid })}\n tooltip={triggerTooltip}\n isDisabled={isEditingDisabled || isReadOnly}\n autoFocus={autoFocus}\n aria-label={ariaLabel}\n mods={{ placeholder: !color }}\n styles={triggerStyles}\n >\n {label}\n </ItemButton>\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n {/* Marks the subtree so a nested swatch group drops its custom-color\n escape hatch, which is a picker and would recurse forever. */}\n <ColorPopoverContext.Provider value={true}>\n <ColorPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isEditingDisabled || isReadOnly}\n previewFormat={format}\n input={\n <ColorInput\n aria-label=\"Color value\"\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled}\n isReadOnly={isReadOnly}\n onChange={handleValueChange}\n />\n }\n swatches={\n swatches?.length ? (\n <ColorSwatchGroup\n aria-label=\"Palette\"\n styles={PALETTE_STYLES}\n colors={swatches}\n columns={swatchColumns}\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled || isReadOnly}\n onChange={handleValueChange}\n />\n ) : null\n }\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </ColorPopoverContext.Provider>\n </Dialog>\n </DialogTrigger>\n </ColorPickerWrapper>\n );\n\n return wrapWithField(pickerField, ref as any, props);\n});\n\n/**\n * Drives the legacy `<Field>` wiring: `Picker` validates on change and passes\n * the value through untouched, where `Text` would default to `onBlur` and\n * coerce `null` into an empty string.\n */\n(ColorPicker as any).cubeInputType = 'Picker';\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { parseColor, toHex } from "../color/color.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.192.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|