@cube-dev/ui-kit 0.208.0 → 0.210.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/CHANGELOG.md +24 -0
- package/dist/README.md +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +5 -2
- package/dist/components/Root.js.map +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/AutoCollapseObserver.js +215 -0
- package/dist/components/actions/Button/AutoCollapseObserver.js.map +1 -0
- package/dist/components/actions/Button/Button.d.ts +38 -0
- package/dist/components/actions/Button/Button.js +73 -13
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/Button/index.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 +2 -2
- 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/MenuCollectionItem.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/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +2 -2
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.d.ts +0 -9
- package/dist/components/content/Item/Item.js +108 -112
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.d.ts +6 -0
- package/dist/components/content/Layout/LayoutHeader.js +98 -86
- package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +2 -2
- 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.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/checked-keys.js +1 -1
- package/dist/components/content/Tree/rowId.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 +233 -111
- 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/item-table-sections.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/TableRowLink.js +1 -1
- package/dist/components/data/TableBase/TableView.js +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-body-sections.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-column-window.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +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 +1 -1
- 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 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +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/ComboBox/comboBoxOptions.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/CalendarPopover.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +206 -184
- package/dist/components/fields/FileInput/FileInput.js.map +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterListBox/styled.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/FilterPicker/FilterTree.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/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 +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +2 -4
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/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/displayed-validation.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/fields/option-origin-press.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/field-description.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/FormContext.js +1 -1
- package/dist/components/form/Form/FormElement.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/field-chrome.js +1 -1
- package/dist/components/form/field-layout.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/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/BoardDragActiveProvider.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/segmented-styles.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.js +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/Dialog/use-dialog-open-sync.js +1 -1
- package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +1 -1
- package/dist/components/overlays/Dialog/use-retained-dialog-focus.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/Modal/modal-containment.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 +20 -7
- package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.d.ts +1 -0
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +223 -101
- package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +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/namespace.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/navigation-url.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/providers/use-navigation.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/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/overlayKeyPropagation.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 +3 -3
- package/docs/Usage.md +16 -2
- package/docs/components/actions/Button.md +45 -0
- package/docs/components/content/Layout.md +9 -0
- package/docs/components/fields/FileInput.md +18 -5
- package/docs/tasty/ai-agents.md +1 -1
- package/docs/tasty/design-system.md +12 -0
- package/docs/tasty/dsl.md +20 -0
- package/docs/tasty/pipeline.md +1 -1
- package/package.json +2 -2
- package/tasty.config.generated.ts +1 -1
- package/tasty.config.ts +81 -41
package/README.md
CHANGED
|
@@ -143,7 +143,7 @@ pnpm chromatic # Run visual regression tests
|
|
|
143
143
|
|
|
144
144
|
### Agent reviews
|
|
145
145
|
|
|
146
|
-
Local agent reviews follow the [UI Kit review rules](docs/rules/review.md), including [Entropy review](docs/rules/entropy.md#entropy-review). Use `$ui-review` in Codex or `/ui-review` in Claude for a full review, and `$entropy-review` or `/entropy-review` respectively for a focused complexity assessment.
|
|
146
|
+
Local agent reviews follow the [UI Kit review rules](docs/rules/review.md), including [Entropy review](docs/rules/entropy.md#entropy-review). Use `$ui-review` in Codex or `/ui-review` in Claude for a full review, and `$entropy-review` or `/entropy-review` respectively for a focused complexity assessment. `$implement` or `/implement` takes a task from its Linear issue to a merged PR with these reviews as its review rounds; agents also use it when asked to implement a task end to end.
|
|
147
147
|
|
|
148
148
|
### Project Structure
|
|
149
149
|
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @cube-dev/ui-kit
|
|
2
2
|
|
|
3
|
+
## 0.210.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1633](https://github.com/cube-js/cube-ui-kit/pull/1633) [`ccdf7a83e`](https://github.com/cube-js/cube-ui-kit/commit/ccdf7a83e0f92f1bd87fd76b62f55c80c9da38e7) Thanks [@tenphi](https://github.com/tenphi)! - `Layout.Header` takes a `titlePreset` prop (`h1`–`h6`) that sets the title's typography preset apart from its `level`, so a page title can be an `h1` in the document outline and look like an `h3`: `<Layout.Header title="Billing" level={1} titlePreset="h3" />`. It replaces a `styles={{ Title: { preset } }}` override, which `tasty/no-protected-restyle` reports.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#1633](https://github.com/cube-js/cube-ui-kit/pull/1633) [`ccdf7a83e`](https://github.com/cube-js/cube-ui-kit/commit/ccdf7a83e0f92f1bd87fd76b62f55c80c9da38e7) Thanks [@tenphi](https://github.com/tenphi)! - The published `tasty.config.ts` lets a container that draws no fill and no border of its own (`Layout`, `GridLayout`, `Panel`, `ResizablePanel`, `Content`, `Header` and `Footer`) keep `fill` and `border`, so `tasty/no-protected-restyle` accepts a page backdrop such as `<Layout fill="#surface-2">` or a divider such as `<Panel border="top">`. `Layout`'s sections (`Layout.Content`, `Layout.Header`, `Layout.Toolbar` and the rest) keep `fill` only: the border that separates stacked sections is UI Kit's. `Card`, `Layout.Panel` and the other containers with a surface of their own stay as they were. Every container also keeps `textAlign`, which aligns the content it holds, and `container`, which names it for its content's container queries.
|
|
12
|
+
|
|
13
|
+
## 0.209.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- [#1632](https://github.com/cube-js/cube-ui-kit/pull/1632) [`0191fdd15`](https://github.com/cube-js/cube-ui-kit/commit/0191fdd15921ce26e1e8ddd689bde5a1a919b4fd) Thanks [@tenphi](https://github.com/tenphi)! - `Button` can collapse to fit a narrow window or container. `collapseState` says when: `true` for `@mobile`, a viewport narrower than 920px, or any state or condition, such as `'@(page, w < 864px)'`; it works in CSS, so crossing it re-renders only the button. `isCollapsed` collapses it from JavaScript, and `autoCollapse` collapses it while the row it sits in can't fit every child at full width, which follows the real width of the labels in any language. The button collapses when any of them says so. Collapsed, a button with an icon shows only the icon, its label kept as the accessible name and shown as the tooltip, and a button with a `shortLabel` shows that label instead. A button with neither warns that it has nothing to collapse to. UI Kit now registers the `@mobile` state (`@media(w < 920px)`) for every component's styles.
|
|
18
|
+
|
|
19
|
+
- [#1630](https://github.com/cube-js/cube-ui-kit/pull/1630) [`8e4f68651`](https://github.com/cube-js/cube-ui-kit/commit/8e4f6865122dd51e4c0578fc054874955754b130) Thanks [@tenphi](https://github.com/tenphi)! - `FileInput` is easier to read and lines up with the inputs around it. The "Choose file" chip's label uses the accent text color instead of the accent fill, so it meets WCAG AA in light, dark and both high-contrast schemes (it was as low as 2.8:1 in dark), and it is medium weight with hover, pressed and drag-over feedback. "No file selected" (or the `placeholder`) is a softer gray than a chosen file name, still AA. The box is drawn like a text input's box: the same height at each `size` (28, 32 and 40px; `size` used to have no effect), the same border, focus and validation colors, and it now fills the width of its field as other inputs do. Pass `controlWidth` (or `width`) to make it narrower; a file name that does not fit ends in an ellipsis. Disabled uses the disabled colors. The pointer cursor now also shows over the "Choose file" chip. Space now opens the file dialog, as Enter does.
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- [#1632](https://github.com/cube-js/cube-ui-kit/pull/1632) [`0191fdd15`](https://github.com/cube-js/cube-ui-kit/commit/0191fdd15921ce26e1e8ddd689bde5a1a919b4fd) Thanks [@tenphi](https://github.com/tenphi)! - UI Kit runs on Tasty 3.18.0 (`@tenphi/tasty`). A state alias, global or local to a component's styles, can now use other aliases in its expression, such as `'@compact': '@mobile & !expanded'`; before, Tasty dropped such an alias with a warning. A circular alias never matches and warns with `CIRCULAR_STATE_ALIAS`.
|
|
24
|
+
|
|
25
|
+
- [#1632](https://github.com/cube-js/cube-ui-kit/pull/1632) [`0191fdd15`](https://github.com/cube-js/cube-ui-kit/commit/0191fdd15921ce26e1e8ddd689bde5a1a919b4fd) Thanks [@tenphi](https://github.com/tenphi)! - A `Button` whose label starts or stops truncating, for example when its container is resized, keeps its DOM node and its keyboard focus. The automatic tooltip used to wrap the button only while the label was cut off, so React replaced the `<button>` element each time and focus dropped to the page. The tooltip is now mounted beside the element instead of around it, and only while there is one. The same applies to every component with an automatic or toggled tooltip: `Item`, `ItemButton` and `Menu` items, `TextItem`, the `Layout.Header` title, `InlineInput`, `Checkbox`, `Switch`, `Radio` and text inputs. A component whose tooltip never turns on runs none of the tooltip's logic. `Item`'s private `isDynamicLabel` prop is removed: it kept the tooltip mounted only to avoid that remount.
|
|
26
|
+
|
|
3
27
|
## 0.208.0
|
|
4
28
|
|
|
5
29
|
### Minor Changes
|
package/dist/README.md
CHANGED
|
@@ -143,7 +143,7 @@ pnpm chromatic # Run visual regression tests
|
|
|
143
143
|
|
|
144
144
|
### Agent reviews
|
|
145
145
|
|
|
146
|
-
Local agent reviews follow the [UI Kit review rules](docs/rules/review.md), including [Entropy review](docs/rules/entropy.md#entropy-review). Use `$ui-review` in Codex or `/ui-review` in Claude for a full review, and `$entropy-review` or `/entropy-review` respectively for a focused complexity assessment.
|
|
146
|
+
Local agent reviews follow the [UI Kit review rules](docs/rules/review.md), including [Entropy review](docs/rules/entropy.md#entropy-review). Use `$ui-review` in Codex or `/ui-review` in Claude for a full review, and `$entropy-review` or `/entropy-review` respectively for a focused complexity assessment. `$implement` or `/implement` takes a task from its Linear issue to a merged PR with these reviews as its review rounds; agents also use it when asked to implement a task end to end.
|
|
147
147
|
|
|
148
148
|
### Project Structure
|
|
149
149
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
//#region src/_internal/hooks/use-debounced-value.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { deprecationWarning } from "../../utils/warnings.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import React, { useEffect } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { useLayoutEffect as useLayoutEffect$1 } from "../../utils/react/useLayoutEffect.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { useRef } from "react";
|
package/dist/components/Block.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../utils/styles.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { ItemAction } from "./actions/ItemAction/ItemAction.js";
|
|
3
3
|
import { ItemBadge } from "./content/ItemBadge/ItemBadge.js";
|
|
4
4
|
import { Item } from "react-stately";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { mergeStyleLayers } from "../utils/styles.js";
|
|
3
3
|
import { usePaletteValue } from "../tokens/palette-config.js";
|
|
4
4
|
import { getTokens } from "../tokens/all-tokens.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { useCombinedRefs } from "../utils/react/useCombinedRefs.js";
|
|
3
3
|
import { filterBaseProps, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef, useCallback, useEffect, useState } from "react";
|
package/dist/components/Root.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../utils/styles.js";
|
|
3
3
|
import { PortalProvider } from "./portal/PortalProvider.js";
|
|
4
4
|
import { TASTY_VERSION, VERSION } from "../version.js";
|
|
@@ -17,7 +17,10 @@ import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
|
17
17
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
18
18
|
import { ModalProvider } from "react-aria";
|
|
19
19
|
//#region src/components/Root.tsx
|
|
20
|
-
setGlobalPredefinedStates(
|
|
20
|
+
setGlobalPredefinedStates({
|
|
21
|
+
...AMBIENT_PREDEFINED_STATES,
|
|
22
|
+
"@mobile": "@media(w < 920px)"
|
|
23
|
+
});
|
|
21
24
|
configure({
|
|
22
25
|
batchInjection: true,
|
|
23
26
|
units: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Root.js","names":["BASE_STYLES","BaseProps","BLOCK_STYLES","configure","filterBaseProps","setGlobalPredefinedStates","tasty","TastyBatchProvider","useEffect","useLayoutEffect","useRef","useState","ModalProvider","I18nProvider","Provider","NavigationAdapter","TrackingProps","TrackingProvider","PaletteConfig","setPaletteConfig","EventBusProvider","AMBIENT_PREDEFINED_STATES","extractStyles","TASTY_VERSION","VERSION","GlobalStyles","AlertDialogApiProvider","OverlayProvider","PortalProvider","i18n","I18nInstance","batchInjection","units","x","r","cr","bw","ow","recipes","reset","margin","padding","border","outline","boxSizing","button","appearance","touchAction","textDecoration","fill","color","cursor","disabled","input","wordSpacing","caretColor","shadow","preset","hide","RootElement","id","styles","display","STYLES","CubeRootProps","tokens","key","palette","bodyStyles","fontDisplay","fonts","publicUrl","navigation","font","monospaceFont","applyLegacyTokens","tracking","cursorStrategy","locale","Root","allProps","$","_c","children","t0","_applyLegacyTokens","t1","style","props","undefined","t2","t3","t4","ref","rootRef","setRootRef","t5","current","t6","Symbol","for","T0","T1","T2","T3","t7","event","T4","t10","eventProps","t11","t12","$pointer","t13","t14","t15","t8","t9","t16","t17","t18","t19","_c","I18nProvider"],"sources":["../../src/components/Root.tsx"],"sourcesContent":["import {\n BASE_STYLES,\n BaseProps,\n BLOCK_STYLES,\n configure,\n filterBaseProps,\n setGlobalPredefinedStates,\n tasty,\n TastyBatchProvider,\n} from '@tenphi/tasty';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ModalProvider } from 'react-aria';\n\nimport { I18nProvider } from '../i18n/I18nProvider';\nimport { Provider } from '../provider';\nimport { NavigationAdapter } from '../providers/navigation.types';\nimport { TrackingProps, TrackingProvider } from '../providers/TrackingProvider';\nimport { PaletteConfig, setPaletteConfig } from '../tokens/palette-config';\nimport { EventBusProvider } from '../utils/react/useEventBus';\nimport { AMBIENT_PREDEFINED_STATES } from '../utils/react/useScheme';\nimport { extractStyles } from '../utils/styles';\nimport { TASTY_VERSION, VERSION } from '../version';\n\nimport { GlobalStyles } from './GlobalStyles';\nimport { AlertDialogApiProvider } from './overlays/AlertDialog/AlertDialogApiProvider';\nimport { OverlayProvider } from './overlays/Notifications/OverlayProvider';\nimport { PortalProvider } from './portal/PortalProvider';\n\nimport type { i18n as I18nInstance } from 'i18next';\n\n// Color-scheme aliases for the Glaze-generated palette (see `src/tokens/palette.ts`).\n// Attribute opt-in wins over system preference:\n// <html data-scheme=\"dark\"> → forces the dark scheme\n// <html data-contrast=\"high\"> → forces the high-contrast scheme\n// Otherwise falls back to the user's `prefers-color-scheme` / `prefers-contrast`.\n// `@reduced-motion`, registered beside them, follows `prefers-reduced-motion:\n// reduce` alone.\n//\n// The strings live in `useScheme.ts`, which also reads the same two conditions\n// from JS (`useScheme()` / `useHighContrast()`) — one definition, so the CSS and\n// the JS answers cannot drift apart.\nsetGlobalPredefinedStates(AMBIENT_PREDEFINED_STATES);\n\nconfigure({\n // Collapse the kit's stylesheet writes into one style invalidation per commit\n // instead of one per component. Only takes effect inside a\n // `<TastyBatchProvider>` window, and windows have to be opened per portal\n // boundary because a commit that mounts a portal does not re-render `<Root>`.\n // The kit opens three: here, in `<Portal>` (tooltips, Select and\n // ListBoxPopover lists, notifications, AlertDialogZone) and in `<Overlay>`\n // (popovers, modals, trays — i.e. Dialog and Menu). Writes in any commit\n // without a window go straight through exactly as before, so a\n // `useLayoutEffect` can never measure an element whose rules have not landed.\n batchInjection: true,\n units: {\n x: 'var(--gap)',\n r: 'var(--radius)',\n cr: 'var(--card-radius)',\n bw: 'var(--border-width)',\n ow: 'var(--outline-width)',\n },\n recipes: {\n reset: {\n margin: 0,\n padding: 0,\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n },\n button: {\n appearance: 'none',\n touchAction: 'manipulation',\n textDecoration: 'none',\n '-webkit-tap-highlight-color': 'transparent',\n fill: '#clear',\n color: 'inherit',\n cursor: {\n '': 'default',\n ':is(a)': 'pointer',\n ':is(button)': '$pointer',\n disabled: 'not-allowed',\n },\n },\n input: {\n appearance: 'none',\n wordSpacing: 'initial',\n color: 'inherit',\n fill: '#clear',\n },\n 'input-autofill': {\n '@autofill': ':-webkit-autofill | :autofill',\n appearance: {\n '@autofill': 'none',\n },\n '-webkit-text-fill-color': {\n '': 'currentColor',\n '@autofill': '#primary-text',\n },\n caretColor: {\n '@autofill': '#primary-text',\n },\n shadow: {\n '@autofill': '0 0 0 9999rem #surface inset',\n },\n preset: {\n '@autofill': 'inherit',\n },\n '-webkit-opacity': {\n '': false,\n '[disabled]': '1',\n },\n },\n 'input-placeholder': {\n '-webkit-text-fill-color': '#placeholder',\n color: '#placeholder',\n },\n 'input-search-cancel-button': {\n hide: true,\n appearance: 'none',\n },\n },\n});\n\nconst RootElement = tasty({\n id: 'cube-ui-kit-root',\n styles: {\n display: 'contents',\n color: '#dark-02',\n preset: 't3',\n },\n});\n\nconst STYLES = [...BASE_STYLES, ...BLOCK_STYLES];\n\nexport interface CubeRootProps extends BaseProps {\n tokens?: { [key: string]: string };\n /**\n * Tune the generated color palette. Every zone — `accent`, `base` and each status\n * theme — takes the same seed: a color, or `{ hue, saturation }`. Plus the global\n * `surfaceMode`, `pastel` and `contrastLevel`. Omitted fields take their default, so\n * this prop describes the whole palette and dropping a field from it drops the\n * customization.\n *\n * Removing the prop entirely is the one thing that does *not* reset the\n * palette, so `<Root>` with no `palette` cannot clobber a host's imperative\n * `setPaletteConfig()` call. Pass `{}` to ask for the default.\n *\n * The first mount applies it during render, so the first paint is already\n * tuned; a later change applies in a layout effect, before paint.\n *\n * The palette is global process state, so this is a declarative wrapper over\n * `setPaletteConfig()`; both drive the same store, and the last write wins.\n * Root's layout effect runs after its descendants' in the same commit, so a\n * descendant's `setPaletteConfig()` from a layout effect in that commit loses\n * to the prop; write from a passive effect or an event handler instead.\n * See `Getting Started/Theming` in Storybook.\n */\n palette?: PaletteConfig;\n bodyStyles?: { [key: string]: string };\n fontDisplay?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n fonts?: boolean;\n publicUrl?: string;\n navigation?: NavigationAdapter;\n font?: string;\n monospaceFont?: string;\n /** @deprecated Tokens are now always applied via GlobalStyles */\n applyLegacyTokens?: boolean;\n tracking?: TrackingProps;\n cursorStrategy?: 'web' | 'native';\n /**\n * i18next instance for this tree. During SSR, pass a request-local instance\n * created with `createUIKitI18n(locale)`.\n */\n i18n?: I18nInstance;\n /** Override the React Aria formatting locale. */\n locale?: string;\n}\n\nexport function Root(allProps: CubeRootProps) {\n let {\n children,\n /** Raw css styles for body element */\n bodyStyles,\n fontDisplay = 'swap',\n fonts,\n publicUrl,\n navigation,\n font,\n monospaceFont,\n applyLegacyTokens: _applyLegacyTokens, // deprecated, ignored\n tracking,\n cursorStrategy = 'web',\n style,\n tokens,\n palette,\n i18n,\n locale,\n ...props\n } = allProps;\n\n // The first mount applies the palette during render, so the first paint and\n // SSR output already use it and `GlobalStyles` below reads it directly. A lazy\n // initializer runs once per mount, which React Compiler preserves; a `useMemo`\n // compiles to a call on every render. A later change waits for the layout\n // effect: a write notifies every palette subscriber, and React rejects\n // updating another component while this one renders. Updates from a layout\n // effect still land before paint. `setPaletteConfig` is a no-op when the\n // resolved config is unchanged, so the effect's mount pass, an inline object\n // literal and StrictMode's double calls cost nothing.\n //\n // A `<Root>` that mounts while another tree already subscribes, with a\n // different palette, still notifies that tree during its first render.\n useState(() => {\n if (palette) setPaletteConfig(palette);\n });\n\n useLayoutEffect(() => {\n if (palette) setPaletteConfig(palette);\n }, [palette]);\n\n const ref = useRef(null);\n\n const [rootRef, setRootRef] = useState();\n\n useEffect(() => {\n if (!rootRef) {\n // @ts-ignore\n setRootRef(ref?.current);\n }\n }, []);\n\n const styles = extractStyles(props, STYLES);\n\n return (\n <TastyBatchProvider>\n <I18nProvider i18n={i18n} locale={locale}>\n <Provider navigation={navigation} root={rootRef}>\n <TrackingProvider event={tracking?.event}>\n <RootElement\n ref={ref}\n data-uikit={VERSION}\n data-tasty={TASTY_VERSION}\n data-font-display={fontDisplay}\n {...filterBaseProps(props, { eventProps: true })}\n styles={styles}\n tokens={{\n $pointer: cursorStrategy === 'web' ? 'pointer' : 'default',\n ...tokens,\n }}\n // oxlint-disable-next-line tasty/no-style-prop -- forwards the consumer's public `style` prop\n style={style}\n >\n <GlobalStyles\n bodyStyles={bodyStyles}\n publicUrl={publicUrl}\n fonts={fonts}\n font={font}\n monospaceFont={monospaceFont}\n fontDisplay={fontDisplay}\n />\n <ModalProvider>\n <PortalProvider value={ref}>\n <EventBusProvider>\n <OverlayProvider>\n <AlertDialogApiProvider>\n {children}\n </AlertDialogApiProvider>\n </OverlayProvider>\n </EventBusProvider>\n </PortalProvider>\n </ModalProvider>\n </RootElement>\n </TrackingProvider>\n </Provider>\n </I18nProvider>\n </TastyBatchProvider>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Root.js","names":["BASE_STYLES","BaseProps","BLOCK_STYLES","configure","filterBaseProps","setGlobalPredefinedStates","tasty","TastyBatchProvider","useEffect","useLayoutEffect","useRef","useState","ModalProvider","I18nProvider","Provider","NavigationAdapter","TrackingProps","TrackingProvider","PaletteConfig","setPaletteConfig","EventBusProvider","AMBIENT_PREDEFINED_STATES","extractStyles","TASTY_VERSION","VERSION","GlobalStyles","AlertDialogApiProvider","OverlayProvider","PortalProvider","i18n","I18nInstance","batchInjection","units","x","r","cr","bw","ow","recipes","reset","margin","padding","border","outline","boxSizing","button","appearance","touchAction","textDecoration","fill","color","cursor","disabled","input","wordSpacing","caretColor","shadow","preset","hide","RootElement","id","styles","display","STYLES","CubeRootProps","tokens","key","palette","bodyStyles","fontDisplay","fonts","publicUrl","navigation","font","monospaceFont","applyLegacyTokens","tracking","cursorStrategy","locale","Root","allProps","$","_c","children","t0","_applyLegacyTokens","t1","style","props","undefined","t2","t3","t4","ref","rootRef","setRootRef","t5","current","t6","Symbol","for","T0","T1","T2","T3","t7","event","T4","t10","eventProps","t11","t12","$pointer","t13","t14","t15","t8","t9","t16","t17","t18","t19","_c","I18nProvider"],"sources":["../../src/components/Root.tsx"],"sourcesContent":["import {\n BASE_STYLES,\n BaseProps,\n BLOCK_STYLES,\n configure,\n filterBaseProps,\n setGlobalPredefinedStates,\n tasty,\n TastyBatchProvider,\n} from '@tenphi/tasty';\nimport { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ModalProvider } from 'react-aria';\n\nimport { I18nProvider } from '../i18n/I18nProvider';\nimport { Provider } from '../provider';\nimport { NavigationAdapter } from '../providers/navigation.types';\nimport { TrackingProps, TrackingProvider } from '../providers/TrackingProvider';\nimport { PaletteConfig, setPaletteConfig } from '../tokens/palette-config';\nimport { EventBusProvider } from '../utils/react/useEventBus';\nimport { AMBIENT_PREDEFINED_STATES } from '../utils/react/useScheme';\nimport { extractStyles } from '../utils/styles';\nimport { TASTY_VERSION, VERSION } from '../version';\n\nimport { GlobalStyles } from './GlobalStyles';\nimport { AlertDialogApiProvider } from './overlays/AlertDialog/AlertDialogApiProvider';\nimport { OverlayProvider } from './overlays/Notifications/OverlayProvider';\nimport { PortalProvider } from './portal/PortalProvider';\n\nimport type { i18n as I18nInstance } from 'i18next';\n\n// Color-scheme aliases for the Glaze-generated palette (see `src/tokens/palette.ts`).\n// Attribute opt-in wins over system preference:\n// <html data-scheme=\"dark\"> → forces the dark scheme\n// <html data-contrast=\"high\"> → forces the high-contrast scheme\n// Otherwise falls back to the user's `prefers-color-scheme` / `prefers-contrast`.\n// `@reduced-motion`, registered beside them, follows `prefers-reduced-motion:\n// reduce` alone.\n//\n// The strings live in `useScheme.ts`, which also reads the same two conditions\n// from JS (`useScheme()` / `useHighContrast()`) — one definition, so the CSS and\n// the JS answers cannot drift apart.\nsetGlobalPredefinedStates({\n ...AMBIENT_PREDEFINED_STATES,\n // A viewport too narrow for the desktop layout. `<Button collapseState>`\n // collapses there. Cube Cloud defines the same value.\n '@mobile': '@media(w < 920px)',\n});\n\nconfigure({\n // Collapse the kit's stylesheet writes into one style invalidation per commit\n // instead of one per component. Only takes effect inside a\n // `<TastyBatchProvider>` window, and windows have to be opened per portal\n // boundary because a commit that mounts a portal does not re-render `<Root>`.\n // The kit opens three: here, in `<Portal>` (tooltips, Select and\n // ListBoxPopover lists, notifications, AlertDialogZone) and in `<Overlay>`\n // (popovers, modals, trays — i.e. Dialog and Menu). Writes in any commit\n // without a window go straight through exactly as before, so a\n // `useLayoutEffect` can never measure an element whose rules have not landed.\n batchInjection: true,\n units: {\n x: 'var(--gap)',\n r: 'var(--radius)',\n cr: 'var(--card-radius)',\n bw: 'var(--border-width)',\n ow: 'var(--outline-width)',\n },\n recipes: {\n reset: {\n margin: 0,\n padding: 0,\n border: 0,\n outline: 0,\n boxSizing: 'border-box',\n },\n button: {\n appearance: 'none',\n touchAction: 'manipulation',\n textDecoration: 'none',\n '-webkit-tap-highlight-color': 'transparent',\n fill: '#clear',\n color: 'inherit',\n cursor: {\n '': 'default',\n ':is(a)': 'pointer',\n ':is(button)': '$pointer',\n disabled: 'not-allowed',\n },\n },\n input: {\n appearance: 'none',\n wordSpacing: 'initial',\n color: 'inherit',\n fill: '#clear',\n },\n 'input-autofill': {\n '@autofill': ':-webkit-autofill | :autofill',\n appearance: {\n '@autofill': 'none',\n },\n '-webkit-text-fill-color': {\n '': 'currentColor',\n '@autofill': '#primary-text',\n },\n caretColor: {\n '@autofill': '#primary-text',\n },\n shadow: {\n '@autofill': '0 0 0 9999rem #surface inset',\n },\n preset: {\n '@autofill': 'inherit',\n },\n '-webkit-opacity': {\n '': false,\n '[disabled]': '1',\n },\n },\n 'input-placeholder': {\n '-webkit-text-fill-color': '#placeholder',\n color: '#placeholder',\n },\n 'input-search-cancel-button': {\n hide: true,\n appearance: 'none',\n },\n },\n});\n\nconst RootElement = tasty({\n id: 'cube-ui-kit-root',\n styles: {\n display: 'contents',\n color: '#dark-02',\n preset: 't3',\n },\n});\n\nconst STYLES = [...BASE_STYLES, ...BLOCK_STYLES];\n\nexport interface CubeRootProps extends BaseProps {\n tokens?: { [key: string]: string };\n /**\n * Tune the generated color palette. Every zone — `accent`, `base` and each status\n * theme — takes the same seed: a color, or `{ hue, saturation }`. Plus the global\n * `surfaceMode`, `pastel` and `contrastLevel`. Omitted fields take their default, so\n * this prop describes the whole palette and dropping a field from it drops the\n * customization.\n *\n * Removing the prop entirely is the one thing that does *not* reset the\n * palette, so `<Root>` with no `palette` cannot clobber a host's imperative\n * `setPaletteConfig()` call. Pass `{}` to ask for the default.\n *\n * The first mount applies it during render, so the first paint is already\n * tuned; a later change applies in a layout effect, before paint.\n *\n * The palette is global process state, so this is a declarative wrapper over\n * `setPaletteConfig()`; both drive the same store, and the last write wins.\n * Root's layout effect runs after its descendants' in the same commit, so a\n * descendant's `setPaletteConfig()` from a layout effect in that commit loses\n * to the prop; write from a passive effect or an event handler instead.\n * See `Getting Started/Theming` in Storybook.\n */\n palette?: PaletteConfig;\n bodyStyles?: { [key: string]: string };\n fontDisplay?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n fonts?: boolean;\n publicUrl?: string;\n navigation?: NavigationAdapter;\n font?: string;\n monospaceFont?: string;\n /** @deprecated Tokens are now always applied via GlobalStyles */\n applyLegacyTokens?: boolean;\n tracking?: TrackingProps;\n cursorStrategy?: 'web' | 'native';\n /**\n * i18next instance for this tree. During SSR, pass a request-local instance\n * created with `createUIKitI18n(locale)`.\n */\n i18n?: I18nInstance;\n /** Override the React Aria formatting locale. */\n locale?: string;\n}\n\nexport function Root(allProps: CubeRootProps) {\n let {\n children,\n /** Raw css styles for body element */\n bodyStyles,\n fontDisplay = 'swap',\n fonts,\n publicUrl,\n navigation,\n font,\n monospaceFont,\n applyLegacyTokens: _applyLegacyTokens, // deprecated, ignored\n tracking,\n cursorStrategy = 'web',\n style,\n tokens,\n palette,\n i18n,\n locale,\n ...props\n } = allProps;\n\n // The first mount applies the palette during render, so the first paint and\n // SSR output already use it and `GlobalStyles` below reads it directly. A lazy\n // initializer runs once per mount, which React Compiler preserves; a `useMemo`\n // compiles to a call on every render. A later change waits for the layout\n // effect: a write notifies every palette subscriber, and React rejects\n // updating another component while this one renders. Updates from a layout\n // effect still land before paint. `setPaletteConfig` is a no-op when the\n // resolved config is unchanged, so the effect's mount pass, an inline object\n // literal and StrictMode's double calls cost nothing.\n //\n // A `<Root>` that mounts while another tree already subscribes, with a\n // different palette, still notifies that tree during its first render.\n useState(() => {\n if (palette) setPaletteConfig(palette);\n });\n\n useLayoutEffect(() => {\n if (palette) setPaletteConfig(palette);\n }, [palette]);\n\n const ref = useRef(null);\n\n const [rootRef, setRootRef] = useState();\n\n useEffect(() => {\n if (!rootRef) {\n // @ts-ignore\n setRootRef(ref?.current);\n }\n }, []);\n\n const styles = extractStyles(props, STYLES);\n\n return (\n <TastyBatchProvider>\n <I18nProvider i18n={i18n} locale={locale}>\n <Provider navigation={navigation} root={rootRef}>\n <TrackingProvider event={tracking?.event}>\n <RootElement\n ref={ref}\n data-uikit={VERSION}\n data-tasty={TASTY_VERSION}\n data-font-display={fontDisplay}\n {...filterBaseProps(props, { eventProps: true })}\n styles={styles}\n tokens={{\n $pointer: cursorStrategy === 'web' ? 'pointer' : 'default',\n ...tokens,\n }}\n // oxlint-disable-next-line tasty/no-style-prop -- forwards the consumer's public `style` prop\n style={style}\n >\n <GlobalStyles\n bodyStyles={bodyStyles}\n publicUrl={publicUrl}\n fonts={fonts}\n font={font}\n monospaceFont={monospaceFont}\n fontDisplay={fontDisplay}\n />\n <ModalProvider>\n <PortalProvider value={ref}>\n <EventBusProvider>\n <OverlayProvider>\n <AlertDialogApiProvider>\n {children}\n </AlertDialogApiProvider>\n </OverlayProvider>\n </EventBusProvider>\n </PortalProvider>\n </ModalProvider>\n </RootElement>\n </TrackingProvider>\n </Provider>\n </I18nProvider>\n </TastyBatchProvider>\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.210.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useAction } from "../use-action.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.210.0 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
4
4
|
import { Item as _Item } from "../../content/Item/Item.js";
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.210.0 | Cube Dev Team */
|
|
2
|
+
import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
|
|
3
|
+
import { c } from "react/compiler-runtime";
|
|
4
|
+
import { useEffectEvent, useRef } from "react";
|
|
5
|
+
import { flushSync } from "react-dom";
|
|
6
|
+
//#region src/components/actions/Button/AutoCollapseObserver.tsx
|
|
7
|
+
const rows = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
const pendingRows = /* @__PURE__ */ new Set();
|
|
9
|
+
/**
|
|
10
|
+
* One observer for every row. It watches the rows alone: collapsing changes
|
|
11
|
+
* the buttons' widths but not their row's, so it never reports its own
|
|
12
|
+
* decision back.
|
|
13
|
+
*/
|
|
14
|
+
let rowObserver = null;
|
|
15
|
+
function getRowObserver() {
|
|
16
|
+
rowObserver ??= new ResizeObserver((records) => {
|
|
17
|
+
for (const record of records) scheduleRowCheck(record.target);
|
|
18
|
+
});
|
|
19
|
+
return rowObserver;
|
|
20
|
+
}
|
|
21
|
+
function px(value) {
|
|
22
|
+
return parseFloat(value) || 0;
|
|
23
|
+
}
|
|
24
|
+
function getContentWidth(row) {
|
|
25
|
+
const style = getComputedStyle(row);
|
|
26
|
+
return row.clientWidth - px(style.paddingLeft) - px(style.paddingRight);
|
|
27
|
+
}
|
|
28
|
+
function getLabel(element) {
|
|
29
|
+
return element.querySelector(":scope > [data-element=\"Label\"]");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Whether a button shows its collapsed form, whichever trigger collapsed it.
|
|
33
|
+
* Read from the styles the collapse applies rather than from widths: a label
|
|
34
|
+
* squeezed to nothing is not collapsed.
|
|
35
|
+
*/
|
|
36
|
+
function isShownCollapsed(element, label) {
|
|
37
|
+
if (element.dataset.collapse === "label") {
|
|
38
|
+
const full = label.querySelector(":scope > [data-element=\"FullLabel\"]");
|
|
39
|
+
return !!full && getComputedStyle(full).display === "none";
|
|
40
|
+
}
|
|
41
|
+
return getComputedStyle(label).maxWidth === "0px";
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* How much wider the row has to be for its expanded buttons to show their
|
|
45
|
+
* labels whole: what their labels cut off, plus what overflows the row. A
|
|
46
|
+
* button another trigger collapsed has no label on show, so it adds nothing.
|
|
47
|
+
*/
|
|
48
|
+
function getShortfall(row, state) {
|
|
49
|
+
let shortfall = Math.max(0, row.scrollWidth - row.clientWidth);
|
|
50
|
+
for (const { element } of state.entries) {
|
|
51
|
+
const label = getLabel(element);
|
|
52
|
+
if (!label || isShownCollapsed(element, label)) continue;
|
|
53
|
+
shortfall += Math.max(0, label.scrollWidth - label.clientWidth);
|
|
54
|
+
}
|
|
55
|
+
return shortfall;
|
|
56
|
+
}
|
|
57
|
+
/** Whether the row's buttons should be collapsed now. */
|
|
58
|
+
function decide(row, state) {
|
|
59
|
+
const width = getContentWidth(row);
|
|
60
|
+
if (state.isStale) state.neededWidth = void 0;
|
|
61
|
+
if (state.isCollapsed) return state.neededWidth !== void 0 && width + .5 < state.neededWidth;
|
|
62
|
+
const shortfall = getShortfall(row, state);
|
|
63
|
+
if (shortfall <= 0) return false;
|
|
64
|
+
state.neededWidth = Math.max(state.neededWidth ?? 0, width + shortfall);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Checks every queued row and applies the decisions in one synchronous render,
|
|
69
|
+
* before paint, as `useAutoTooltip` applies its overflow verdicts. A row that
|
|
70
|
+
* expanded is checked once more, which can only collapse it again.
|
|
71
|
+
*/
|
|
72
|
+
function runRowChecks() {
|
|
73
|
+
const queued = Array.from(pendingRows);
|
|
74
|
+
pendingRows.clear();
|
|
75
|
+
const changes = [];
|
|
76
|
+
const expanded = [];
|
|
77
|
+
for (const row of queued) {
|
|
78
|
+
const state = rows.get(row);
|
|
79
|
+
if (!state || !state.entries.size || !row.isConnected) continue;
|
|
80
|
+
const wasCollapsed = state.isCollapsed;
|
|
81
|
+
const isCollapsed = decide(row, state);
|
|
82
|
+
state.isCollapsed = isCollapsed;
|
|
83
|
+
state.isStale = false;
|
|
84
|
+
if (wasCollapsed && !isCollapsed) expanded.push(row);
|
|
85
|
+
for (const entry of state.entries) if (entry.isCollapsed !== isCollapsed) changes.push([entry, isCollapsed]);
|
|
86
|
+
}
|
|
87
|
+
if (changes.length) flushSync(() => {
|
|
88
|
+
for (const [entry, isCollapsed] of changes) {
|
|
89
|
+
entry.isCollapsed = isCollapsed;
|
|
90
|
+
entry.notify(isCollapsed);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
for (const row of expanded) scheduleRowCheck(row);
|
|
94
|
+
}
|
|
95
|
+
function scheduleRowCheck(row, isStale = false) {
|
|
96
|
+
const state = rows.get(row);
|
|
97
|
+
if (!state) return;
|
|
98
|
+
if (isStale) state.isStale = true;
|
|
99
|
+
if (!pendingRows.size) queueMicrotask(runRowChecks);
|
|
100
|
+
pendingRows.add(row);
|
|
101
|
+
}
|
|
102
|
+
function joinRow(row, element, notify) {
|
|
103
|
+
let state = rows.get(row);
|
|
104
|
+
if (!state) {
|
|
105
|
+
const childObserver = new MutationObserver(() => scheduleRowCheck(row, true));
|
|
106
|
+
state = {
|
|
107
|
+
entries: /* @__PURE__ */ new Set(),
|
|
108
|
+
isCollapsed: false,
|
|
109
|
+
neededWidth: void 0,
|
|
110
|
+
isStale: false,
|
|
111
|
+
childObserver
|
|
112
|
+
};
|
|
113
|
+
rows.set(row, state);
|
|
114
|
+
getRowObserver().observe(row);
|
|
115
|
+
childObserver.observe(row, { childList: true });
|
|
116
|
+
}
|
|
117
|
+
const entry = {
|
|
118
|
+
element,
|
|
119
|
+
notify,
|
|
120
|
+
isCollapsed: false
|
|
121
|
+
};
|
|
122
|
+
const joined = state;
|
|
123
|
+
joined.entries.add(entry);
|
|
124
|
+
scheduleRowCheck(row, true);
|
|
125
|
+
return () => {
|
|
126
|
+
joined.entries.delete(entry);
|
|
127
|
+
if (joined.entries.size) scheduleRowCheck(row, true);
|
|
128
|
+
else {
|
|
129
|
+
rows.delete(row);
|
|
130
|
+
rowObserver?.unobserve(row);
|
|
131
|
+
joined.childObserver.disconnect();
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Renders nothing. `Button` mounts it only with `autoCollapse`, so a button
|
|
137
|
+
* without the prop runs none of this.
|
|
138
|
+
*/
|
|
139
|
+
function AutoCollapseObserver(t0) {
|
|
140
|
+
const $ = c(13);
|
|
141
|
+
const { targetRef, contentKey, isLabelCut, onChange } = t0;
|
|
142
|
+
let t1;
|
|
143
|
+
if ($[0] !== onChange) {
|
|
144
|
+
t1 = (isCollapsed) => {
|
|
145
|
+
onChange(isCollapsed);
|
|
146
|
+
};
|
|
147
|
+
$[0] = onChange;
|
|
148
|
+
$[1] = t1;
|
|
149
|
+
} else t1 = $[1];
|
|
150
|
+
const notify = useEffectEvent(t1);
|
|
151
|
+
const rowRef = useRef(null);
|
|
152
|
+
let t2;
|
|
153
|
+
if ($[2] !== notify || $[3] !== targetRef) {
|
|
154
|
+
t2 = () => {
|
|
155
|
+
let leave;
|
|
156
|
+
let isActive = true;
|
|
157
|
+
queueMicrotask(() => {
|
|
158
|
+
const element = targetRef.current;
|
|
159
|
+
const row = element?.parentElement;
|
|
160
|
+
if (!isActive || !element || !row) return;
|
|
161
|
+
rowRef.current = row;
|
|
162
|
+
leave = joinRow(row, element, (isCollapsed_0) => notify(isCollapsed_0));
|
|
163
|
+
});
|
|
164
|
+
return () => {
|
|
165
|
+
isActive = false;
|
|
166
|
+
rowRef.current = null;
|
|
167
|
+
leave?.();
|
|
168
|
+
notify(false);
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
$[2] = notify;
|
|
172
|
+
$[3] = targetRef;
|
|
173
|
+
$[4] = t2;
|
|
174
|
+
} else t2 = $[4];
|
|
175
|
+
let t3;
|
|
176
|
+
if ($[5] !== targetRef) {
|
|
177
|
+
t3 = [targetRef];
|
|
178
|
+
$[5] = targetRef;
|
|
179
|
+
$[6] = t3;
|
|
180
|
+
} else t3 = $[6];
|
|
181
|
+
useLayoutEffect$1(t2, t3);
|
|
182
|
+
let t4;
|
|
183
|
+
if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
184
|
+
t4 = () => {
|
|
185
|
+
if (rowRef.current) scheduleRowCheck(rowRef.current, true);
|
|
186
|
+
};
|
|
187
|
+
$[7] = t4;
|
|
188
|
+
} else t4 = $[7];
|
|
189
|
+
let t5;
|
|
190
|
+
if ($[8] !== contentKey) {
|
|
191
|
+
t5 = [contentKey];
|
|
192
|
+
$[8] = contentKey;
|
|
193
|
+
$[9] = t5;
|
|
194
|
+
} else t5 = $[9];
|
|
195
|
+
useLayoutEffect$1(t4, t5);
|
|
196
|
+
let t6;
|
|
197
|
+
if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
198
|
+
t6 = () => {
|
|
199
|
+
if (rowRef.current) scheduleRowCheck(rowRef.current);
|
|
200
|
+
};
|
|
201
|
+
$[10] = t6;
|
|
202
|
+
} else t6 = $[10];
|
|
203
|
+
let t7;
|
|
204
|
+
if ($[11] !== isLabelCut) {
|
|
205
|
+
t7 = [isLabelCut];
|
|
206
|
+
$[11] = isLabelCut;
|
|
207
|
+
$[12] = t7;
|
|
208
|
+
} else t7 = $[12];
|
|
209
|
+
useLayoutEffect$1(t6, t7);
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
//#endregion
|
|
213
|
+
export { AutoCollapseObserver };
|
|
214
|
+
|
|
215
|
+
//# sourceMappingURL=AutoCollapseObserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoCollapseObserver.js","names":["RefObject","useEffectEvent","useRef","flushSync","useLayoutEffect","RowEntry","element","HTMLElement","notify","isCollapsed","RowState","entries","Set","neededWidth","isStale","childObserver","MutationObserver","rows","WeakMap","pendingRows","rowObserver","ResizeObserver","getRowObserver","records","record","scheduleRowCheck","target","px","value","parseFloat","getContentWidth","row","style","getComputedStyle","clientWidth","paddingLeft","paddingRight","getLabel","querySelector","isShownCollapsed","label","dataset","collapse","full","display","maxWidth","getShortfall","state","shortfall","Math","max","scrollWidth","decide","width","undefined","runRowChecks","queued","Array","from","clear","changes","expanded","get","size","isConnected","wasCollapsed","push","entry","length","queueMicrotask","add","joinRow","set","observe","childList","joined","delete","unobserve","disconnect","AutoCollapseObserverProps","targetRef","contentKey","isLabelCut","onChange","AutoCollapseObserver","t0","$","_c","t1","rowRef","t2","leave","isActive","current","parentElement","isCollapsed_0","t3","t4","Symbol","for","t5","t6","t7","_c"],"sources":["../../../../src/components/actions/Button/AutoCollapseObserver.tsx"],"sourcesContent":["import { RefObject, useEffectEvent, useRef } from 'react';\nimport { flushSync } from 'react-dom';\n\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\n\n/**\n * Collapses the `Button`s with `autoCollapse` in a row while the row can't fit\n * them expanded, and expands them once it can. The row is the button's parent\n * element, and its buttons collapse together.\n *\n * The decision reads the buttons, not their siblings:\n *\n * - **Expanded**, the row is too narrow when one of its buttons' labels is cut\n * off, or the row overflows. The row then collapses its buttons, and\n * remembers how wide it would have had to be: its width plus everything that\n * was cut off.\n * - **Collapsed**, the row expands its buttons once it is that wide. The freed\n * width may have gone to a sibling that grows or to an auto margin, so\n * adding up the siblings' widths would never show the row fitting again.\n * - **After expanding**, the row checks again, before paint. If the buttons\n * are cut off after all, they collapse again with the larger width\n * remembered, so the estimate only grows and the decision settles.\n *\n * When something the needed width depends on changes while collapsed (a\n * button's content, a child added or removed), the remembered width is stale:\n * the row expands, checks and collapses again if it has to, all before paint.\n *\n * A row as wide as its content always fits, so its buttons never collapse: its\n * width has to come from its container (a block, `flex: 1`, a fixed width).\n * Wrapping and vertical rows give their buttons room by wrapping or stacking,\n * so their buttons never collapse either.\n */\n\ninterface RowEntry {\n element: HTMLElement;\n notify: (isCollapsed: boolean) => void;\n isCollapsed: boolean;\n}\n\ninterface RowState {\n entries: Set<RowEntry>;\n isCollapsed: boolean;\n /** The row's content width at which its buttons fit expanded. */\n neededWidth: number | undefined;\n /** The needed width may be wrong: try expanded, then check. */\n isStale: boolean;\n /** Children added or removed change what the row needs. */\n childObserver: MutationObserver;\n}\n\nconst rows = new WeakMap<HTMLElement, RowState>();\nconst pendingRows = new Set<HTMLElement>();\n\n/**\n * One observer for every row. It watches the rows alone: collapsing changes\n * the buttons' widths but not their row's, so it never reports its own\n * decision back.\n */\nlet rowObserver: ResizeObserver | null = null;\n\nfunction getRowObserver() {\n rowObserver ??= new ResizeObserver((records) => {\n for (const record of records) {\n scheduleRowCheck(record.target as HTMLElement);\n }\n });\n\n return rowObserver;\n}\n\nfunction px(value: string) {\n return parseFloat(value) || 0;\n}\n\nfunction getContentWidth(row: HTMLElement) {\n const style = getComputedStyle(row);\n\n return row.clientWidth - px(style.paddingLeft) - px(style.paddingRight);\n}\n\nfunction getLabel(element: HTMLElement) {\n return element.querySelector<HTMLElement>(':scope > [data-element=\"Label\"]');\n}\n\n/**\n * Whether a button shows its collapsed form, whichever trigger collapsed it.\n * Read from the styles the collapse applies rather than from widths: a label\n * squeezed to nothing is not collapsed.\n */\nfunction isShownCollapsed(element: HTMLElement, label: HTMLElement) {\n if (element.dataset.collapse === 'label') {\n const full = label.querySelector<HTMLElement>(\n ':scope > [data-element=\"FullLabel\"]',\n );\n\n return !!full && getComputedStyle(full).display === 'none';\n }\n\n return getComputedStyle(label).maxWidth === '0px';\n}\n\n/**\n * How much wider the row has to be for its expanded buttons to show their\n * labels whole: what their labels cut off, plus what overflows the row. A\n * button another trigger collapsed has no label on show, so it adds nothing.\n */\nfunction getShortfall(row: HTMLElement, state: RowState) {\n let shortfall = Math.max(0, row.scrollWidth - row.clientWidth);\n\n for (const { element } of state.entries) {\n const label = getLabel(element);\n\n if (!label || isShownCollapsed(element, label)) continue;\n\n shortfall += Math.max(0, label.scrollWidth - label.clientWidth);\n }\n\n return shortfall;\n}\n\n/** Whether the row's buttons should be collapsed now. */\nfunction decide(row: HTMLElement, state: RowState) {\n const width = getContentWidth(row);\n\n // What the row remembered was measured on content that has since changed.\n if (state.isStale) state.neededWidth = undefined;\n\n if (state.isCollapsed) {\n // Half a pixel of slack for sub-pixel widths, so an exact fit expands.\n return state.neededWidth !== undefined && width + 0.5 < state.neededWidth;\n }\n\n const shortfall = getShortfall(row, state);\n\n if (shortfall <= 0) return false;\n\n state.neededWidth = Math.max(state.neededWidth ?? 0, width + shortfall);\n\n return true;\n}\n\n/**\n * Checks every queued row and applies the decisions in one synchronous render,\n * before paint, as `useAutoTooltip` applies its overflow verdicts. A row that\n * expanded is checked once more, which can only collapse it again.\n */\nfunction runRowChecks() {\n const queued = Array.from(pendingRows);\n\n pendingRows.clear();\n\n const changes: [RowEntry, boolean][] = [];\n const expanded: HTMLElement[] = [];\n\n for (const row of queued) {\n const state = rows.get(row);\n\n if (!state || !state.entries.size || !row.isConnected) continue;\n\n const wasCollapsed = state.isCollapsed;\n const isCollapsed = decide(row, state);\n\n state.isCollapsed = isCollapsed;\n state.isStale = false;\n if (wasCollapsed && !isCollapsed) expanded.push(row);\n\n for (const entry of state.entries) {\n if (entry.isCollapsed !== isCollapsed) changes.push([entry, isCollapsed]);\n }\n }\n\n if (changes.length) {\n flushSync(() => {\n for (const [entry, isCollapsed] of changes) {\n entry.isCollapsed = isCollapsed;\n entry.notify(isCollapsed);\n }\n });\n }\n\n for (const row of expanded) scheduleRowCheck(row);\n}\n\nfunction scheduleRowCheck(row: HTMLElement, isStale = false) {\n const state = rows.get(row);\n\n if (!state) return;\n if (isStale) state.isStale = true;\n if (!pendingRows.size) queueMicrotask(runRowChecks);\n\n pendingRows.add(row);\n}\n\nfunction joinRow(\n row: HTMLElement,\n element: HTMLElement,\n notify: RowEntry['notify'],\n) {\n let state = rows.get(row);\n\n if (!state) {\n const childObserver = new MutationObserver(() =>\n scheduleRowCheck(row, true),\n );\n\n state = {\n entries: new Set(),\n isCollapsed: false,\n neededWidth: undefined,\n isStale: false,\n childObserver,\n };\n rows.set(row, state);\n getRowObserver().observe(row);\n childObserver.observe(row, { childList: true });\n }\n\n const entry: RowEntry = { element, notify, isCollapsed: false };\n const joined = state;\n\n joined.entries.add(entry);\n scheduleRowCheck(row, true);\n\n return () => {\n joined.entries.delete(entry);\n\n if (joined.entries.size) {\n // The row may fit its remaining buttons now.\n scheduleRowCheck(row, true);\n } else {\n rows.delete(row);\n rowObserver?.unobserve(row);\n joined.childObserver.disconnect();\n }\n };\n}\n\nexport interface AutoCollapseObserverProps {\n /** The button element; its parent is the measured row. */\n targetRef: RefObject<HTMLElement | null>;\n /**\n * Changes whenever the button's full width can: its label, short label,\n * icons, size, and whether another trigger collapses it.\n */\n contentKey: string;\n /**\n * Whether the button's label is cut off, from its automatic tooltip. A\n * sibling that grows squeezes the button without resizing the row.\n */\n isLabelCut: boolean;\n onChange: (isCollapsed: boolean) => void;\n}\n\n/**\n * Renders nothing. `Button` mounts it only with `autoCollapse`, so a button\n * without the prop runs none of this.\n */\nexport function AutoCollapseObserver({\n targetRef,\n contentKey,\n isLabelCut,\n onChange,\n}: AutoCollapseObserverProps) {\n const notify = useEffectEvent((isCollapsed: boolean) => {\n onChange(isCollapsed);\n });\n // The row joined. The button's ref can't be read from this child's layout\n // effects: on every update React detaches the button's callback ref before\n // they run and attaches it again only after them.\n const rowRef = useRef<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n let leave: (() => void) | undefined;\n let isActive = true;\n\n // The button's ref is attached after this child's layout effect, so the\n // row is joined once the commit has finished, still before paint.\n queueMicrotask(() => {\n const element = targetRef.current;\n const row = element?.parentElement;\n\n if (!isActive || !element || !row) return;\n\n rowRef.current = row;\n leave = joinRow(row, element, (isCollapsed) => notify(isCollapsed));\n });\n\n return () => {\n isActive = false;\n rowRef.current = null;\n leave?.();\n notify(false);\n };\n }, [targetRef]);\n\n // What the button needs changed, so what the row remembers may be wrong.\n // Joining checks the row anyway, so before that there is nothing to do.\n useLayoutEffect(() => {\n if (rowRef.current) scheduleRowCheck(rowRef.current, true);\n }, [contentKey]);\n\n // The row didn't resize, but the button may no longer fit it.\n useLayoutEffect(() => {\n if (rowRef.current) scheduleRowCheck(rowRef.current);\n }, [isLabelCut]);\n\n return null;\n}\n"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { CubeTooltipProviderProps } from "../../overlays/Tooltip/TooltipProvider
|
|
|
3
3
|
import { DynamicIcon } from "../../../utils/react/resolveIcon.js";
|
|
4
4
|
import { CubeActionProps } from "../Action/Action.js";
|
|
5
5
|
import { Mods, Styles } from "@tenphi/tasty";
|
|
6
|
+
import { ReactNode } from "react";
|
|
6
7
|
import { Placement } from "react-aria";
|
|
7
8
|
//#region src/components/actions/Button/Button.d.ts
|
|
8
9
|
/** Known modifiers for Button component */
|
|
@@ -16,6 +17,13 @@ export type ButtonMods = Mods<{
|
|
|
16
17
|
'single-icon'?: boolean;
|
|
17
18
|
'text-only'?: boolean;
|
|
18
19
|
'raw-children'?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Collapsed by `isCollapsed` or `autoCollapse`; `collapseState` collapses
|
|
22
|
+
* through CSS instead.
|
|
23
|
+
*/
|
|
24
|
+
collapsed?: boolean;
|
|
25
|
+
/** What a collapsing button collapses to: its icon, or its `shortLabel`. */
|
|
26
|
+
collapse?: 'icon' | 'label';
|
|
19
27
|
}>;
|
|
20
28
|
export interface CubeButtonProps extends CubeActionProps {
|
|
21
29
|
icon?: DynamicIcon<ButtonMods>;
|
|
@@ -35,6 +43,36 @@ export interface CubeButtonProps extends CubeActionProps {
|
|
|
35
43
|
* A `link` button and the joined edges inside a `Button.Split` keep their own radius.
|
|
36
44
|
*/
|
|
37
45
|
shape?: 'button' | 'card' | 'sharp' | 'pill';
|
|
46
|
+
/**
|
|
47
|
+
* When the button collapses, so it fits a narrow window or container:
|
|
48
|
+
* - `true` - On `@mobile`, a viewport narrower than 920px
|
|
49
|
+
* - a string - Any state or condition, such as `'@compact'`,
|
|
50
|
+
* `'@(page, w < 864px)'` or `'@media(w < 600px)'`. A container condition
|
|
51
|
+
* needs that container around the button.
|
|
52
|
+
*
|
|
53
|
+
* Collapsed, a button with an icon shows only the icon: its label stays its
|
|
54
|
+
* accessible name and shows as its tooltip. A `shortLabel` replaces the label
|
|
55
|
+
* instead. The button collapses when any of `collapseState`, `isCollapsed`
|
|
56
|
+
* and `autoCollapse` says so.
|
|
57
|
+
*/
|
|
58
|
+
collapseState?: boolean | string;
|
|
59
|
+
/**
|
|
60
|
+
* Collapses the button from JavaScript, as `collapseState` does from CSS.
|
|
61
|
+
*/
|
|
62
|
+
isCollapsed?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Collapses the button when the row it sits in, its parent element, can't
|
|
65
|
+
* fit every child at full width, and expands it when the row can. It
|
|
66
|
+
* follows the real width of the labels, so it holds in every locale. The
|
|
67
|
+
* row's width has to come from its own container: a row as wide as its
|
|
68
|
+
* content always fits.
|
|
69
|
+
*/
|
|
70
|
+
autoCollapse?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* The label shown while the button is collapsed, beside its icon if it has
|
|
73
|
+
* one. Without it, a collapsed button shows only its icon.
|
|
74
|
+
*/
|
|
75
|
+
shortLabel?: ReactNode;
|
|
38
76
|
/**
|
|
39
77
|
* Tooltip content and configuration:
|
|
40
78
|
* - string: simple tooltip text
|