@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
|
@@ -1,14 +1,116 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import {
|
|
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 { useTooltipTriggerBinding } from "../overlays/Tooltip/TooltipTrigger.js";
|
|
4
|
+
import { createProviderTooltip } from "../overlays/Tooltip/TooltipProvider.js";
|
|
3
5
|
import { c } from "react/compiler-runtime";
|
|
4
|
-
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
import { useEffect, useEffectEvent, useRef, useState } from "react";
|
|
5
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { useIsSSR } from "react-aria";
|
|
6
9
|
import { flushSync } from "react-dom";
|
|
7
10
|
//#region src/components/content/use-auto-tooltip.tsx
|
|
8
11
|
function assignRef(ref, element) {
|
|
9
12
|
if (typeof ref === "function") ref(element);
|
|
10
13
|
else if (ref) ref.current = element;
|
|
11
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* The handlers React Aria's `useTooltipTrigger` puts on the trigger. The
|
|
17
|
+
* element renders before the tooltip beside it has computed its own, so it
|
|
18
|
+
* gets a forwarder for each while a tooltip is mounted. Hover comes from
|
|
19
|
+
* `useHover`, which uses pointer events where the browser has them and mouse
|
|
20
|
+
* and touch events elsewhere; only those names are forwarded, so a forwarder
|
|
21
|
+
* never replaces a handler of the element's own that React Aria leaves alone.
|
|
22
|
+
*/
|
|
23
|
+
const FOCUS_TRIGGER_HANDLERS = [
|
|
24
|
+
"onFocus",
|
|
25
|
+
"onBlur",
|
|
26
|
+
"onKeyDown",
|
|
27
|
+
"onKeyUp",
|
|
28
|
+
"onPointerDown"
|
|
29
|
+
];
|
|
30
|
+
const POINTER_HOVER_HANDLERS = ["onPointerEnter", "onPointerLeave"];
|
|
31
|
+
const MOUSE_HOVER_HANDLERS = [
|
|
32
|
+
"onMouseEnter",
|
|
33
|
+
"onMouseLeave",
|
|
34
|
+
"onTouchStart"
|
|
35
|
+
];
|
|
36
|
+
function getTriggerHandlerNames() {
|
|
37
|
+
return [...FOCUS_TRIGGER_HANDLERS, ...typeof PointerEvent === "undefined" ? MOUSE_HOVER_HANDLERS : POINTER_HOVER_HANDLERS];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The tooltip of an element rendered by `renderWithTooltip`, mounted beside the
|
|
41
|
+
* element only while a tooltip exists. It owns the tooltip's state and hands
|
|
42
|
+
* the element its trigger handlers through `handlersRef`, so an element that
|
|
43
|
+
* never has a tooltip runs none of it, and the element keeps its node when the
|
|
44
|
+
* tooltip comes and goes.
|
|
45
|
+
*/
|
|
46
|
+
function AutoTooltipLayer(t0) {
|
|
47
|
+
const $ = c(19);
|
|
48
|
+
const { options, tooltip, placement, handlersRef, onDescribedByChange } = t0;
|
|
49
|
+
const isSSR = useIsSSR();
|
|
50
|
+
const { triggerProps, renderTooltip } = useTooltipTriggerBinding(options, tooltip);
|
|
51
|
+
const describedBy = triggerProps["aria-describedby"];
|
|
52
|
+
let t1;
|
|
53
|
+
if ($[0] !== handlersRef || $[1] !== triggerProps) {
|
|
54
|
+
t1 = () => {
|
|
55
|
+
handlersRef.current = triggerProps;
|
|
56
|
+
};
|
|
57
|
+
$[0] = handlersRef;
|
|
58
|
+
$[1] = triggerProps;
|
|
59
|
+
$[2] = t1;
|
|
60
|
+
} else t1 = $[2];
|
|
61
|
+
useLayoutEffect$1(t1);
|
|
62
|
+
let t2;
|
|
63
|
+
if ($[3] !== onDescribedByChange) {
|
|
64
|
+
t2 = (id) => {
|
|
65
|
+
onDescribedByChange(id);
|
|
66
|
+
};
|
|
67
|
+
$[3] = onDescribedByChange;
|
|
68
|
+
$[4] = t2;
|
|
69
|
+
} else t2 = $[4];
|
|
70
|
+
const publishDescribedBy = useEffectEvent(t2);
|
|
71
|
+
let t3;
|
|
72
|
+
if ($[5] !== describedBy || $[6] !== publishDescribedBy) {
|
|
73
|
+
t3 = () => {
|
|
74
|
+
publishDescribedBy(describedBy);
|
|
75
|
+
};
|
|
76
|
+
$[5] = describedBy;
|
|
77
|
+
$[6] = publishDescribedBy;
|
|
78
|
+
$[7] = t3;
|
|
79
|
+
} else t3 = $[7];
|
|
80
|
+
let t4;
|
|
81
|
+
if ($[8] !== describedBy) {
|
|
82
|
+
t4 = [describedBy];
|
|
83
|
+
$[8] = describedBy;
|
|
84
|
+
$[9] = t4;
|
|
85
|
+
} else t4 = $[9];
|
|
86
|
+
useLayoutEffect$1(t3, t4);
|
|
87
|
+
let t5;
|
|
88
|
+
if ($[10] !== handlersRef || $[11] !== publishDescribedBy) {
|
|
89
|
+
t5 = () => () => {
|
|
90
|
+
handlersRef.current = null;
|
|
91
|
+
publishDescribedBy(void 0);
|
|
92
|
+
};
|
|
93
|
+
$[10] = handlersRef;
|
|
94
|
+
$[11] = publishDescribedBy;
|
|
95
|
+
$[12] = t5;
|
|
96
|
+
} else t5 = $[12];
|
|
97
|
+
let t6;
|
|
98
|
+
if ($[13] !== handlersRef) {
|
|
99
|
+
t6 = [handlersRef];
|
|
100
|
+
$[13] = handlersRef;
|
|
101
|
+
$[14] = t6;
|
|
102
|
+
} else t6 = $[14];
|
|
103
|
+
useLayoutEffect$1(t5, t6);
|
|
104
|
+
let t7;
|
|
105
|
+
if ($[15] !== isSSR || $[16] !== placement || $[17] !== renderTooltip) {
|
|
106
|
+
t7 = isSSR ? null : renderTooltip(placement);
|
|
107
|
+
$[15] = isSSR;
|
|
108
|
+
$[16] = placement;
|
|
109
|
+
$[17] = renderTooltip;
|
|
110
|
+
$[18] = t7;
|
|
111
|
+
} else t7 = $[18];
|
|
112
|
+
return t7;
|
|
113
|
+
}
|
|
12
114
|
/** Overflow checks queued for the end of the current task, from every label. */
|
|
13
115
|
const pendingOverflowChecks = /* @__PURE__ */ new Set();
|
|
14
116
|
const overflowChecksByNode = /* @__PURE__ */ new WeakMap();
|
|
@@ -21,11 +123,10 @@ function refreshAutoTooltipsWithin(element) {
|
|
|
21
123
|
* one synchronous render.
|
|
22
124
|
*
|
|
23
125
|
* All reads happen before React touches the DOM again, so they share one
|
|
24
|
-
* layout. `flushSync` applies the verdicts
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* render, not a nested update.
|
|
126
|
+
* layout. `flushSync` applies the verdicts before paint and before any other
|
|
127
|
+
* task, so code that asks whether the tooltip is active after this task gets
|
|
128
|
+
* the answer the measurement gave. Outside a React commit this is an ordinary
|
|
129
|
+
* sync render, not a nested update.
|
|
29
130
|
*/
|
|
30
131
|
function runOverflowChecks() {
|
|
31
132
|
const checks = Array.from(pendingOverflowChecks);
|
|
@@ -98,26 +199,19 @@ function getAutoTitle(children, description, truncation) {
|
|
|
98
199
|
* The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip
|
|
99
200
|
* is rendered at all.
|
|
100
201
|
*/
|
|
101
|
-
function resolveTooltip({ tooltip, children, description, labelProps,
|
|
202
|
+
function resolveTooltip({ tooltip, children, description, labelProps, truncation }) {
|
|
102
203
|
if (!tooltip) return null;
|
|
103
204
|
if (typeof tooltip === "string") return { title: tooltip };
|
|
104
205
|
const isOverflowed = truncation !== "none";
|
|
105
206
|
const autoTitle = getAutoTitle(children, description, truncation);
|
|
106
|
-
const hasAutoContent = !!(autoTitle || labelProps) &&
|
|
107
|
-
if (tooltip === true) {
|
|
108
|
-
if (!hasAutoContent) return null;
|
|
109
|
-
return {
|
|
110
|
-
title: autoTitle,
|
|
111
|
-
isDisabled: !isOverflowed && isDynamicLabel
|
|
112
|
-
};
|
|
113
|
-
}
|
|
207
|
+
const hasAutoContent = !!(autoTitle || labelProps) && isOverflowed;
|
|
208
|
+
if (tooltip === true) return hasAutoContent ? { title: autoTitle } : null;
|
|
114
209
|
const { auto, ...tooltipProps } = tooltip;
|
|
115
210
|
if (tooltipProps.title && auto !== true) return tooltipProps;
|
|
116
211
|
if (!hasAutoContent) return null;
|
|
117
212
|
return {
|
|
118
213
|
...tooltipProps,
|
|
119
|
-
title: tooltipProps.title ?? autoTitle
|
|
120
|
-
isDisabled: tooltipProps.isDisabled ?? (!isOverflowed && isDynamicLabel)
|
|
214
|
+
title: tooltipProps.title ?? autoTitle
|
|
121
215
|
};
|
|
122
216
|
}
|
|
123
217
|
/** Whether a measured node's text is cut off. */
|
|
@@ -148,68 +242,67 @@ function observeMeasuredNodes(measured, onResize) {
|
|
|
148
242
|
if (description) measured.observer.observe(description);
|
|
149
243
|
}
|
|
150
244
|
function useAutoTooltip(t0) {
|
|
151
|
-
const $ = c(
|
|
152
|
-
const { tooltip, children, description, labelProps,
|
|
153
|
-
|
|
154
|
-
let t2;
|
|
245
|
+
const $ = c(56);
|
|
246
|
+
const { tooltip, children, description, labelProps, labelRef: labelRefOption, descriptionRef: descriptionRefOption } = t0;
|
|
247
|
+
let t1;
|
|
155
248
|
if ($[0] !== tooltip) {
|
|
156
|
-
|
|
249
|
+
t1 = allowsAutoTooltip(tooltip);
|
|
157
250
|
$[0] = tooltip;
|
|
158
|
-
$[1] =
|
|
159
|
-
} else
|
|
160
|
-
const allowsAuto =
|
|
251
|
+
$[1] = t1;
|
|
252
|
+
} else t1 = $[1];
|
|
253
|
+
const allowsAuto = t1;
|
|
161
254
|
const ownTitle = getOwnAutoTitle(tooltip);
|
|
162
255
|
const isLabelMeasured = allowsAuto && isMeasured(children, ownTitle);
|
|
163
256
|
const isDescriptionMeasured = allowsAuto && isMeasured(description, ownTitle);
|
|
164
257
|
const isAutoTooltipEnabled = isLabelMeasured || isDescriptionMeasured;
|
|
165
258
|
const externalLabelRef = labelProps?.ref;
|
|
166
259
|
const [truncation, setTruncation] = useState("none");
|
|
167
|
-
let
|
|
260
|
+
let t2;
|
|
168
261
|
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
169
|
-
|
|
262
|
+
t2 = {
|
|
170
263
|
label: null,
|
|
171
264
|
description: null,
|
|
172
265
|
observer: null
|
|
173
266
|
};
|
|
174
|
-
$[2] =
|
|
175
|
-
} else
|
|
176
|
-
const measuredRef = useRef(
|
|
267
|
+
$[2] = t2;
|
|
268
|
+
} else t2 = $[2];
|
|
269
|
+
const measuredRef = useRef(t2);
|
|
177
270
|
const verdictRef = useRef("none");
|
|
178
|
-
let
|
|
271
|
+
let t3;
|
|
179
272
|
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
180
|
-
|
|
273
|
+
t3 = (value) => {
|
|
181
274
|
if (verdictRef.current === value) return;
|
|
182
275
|
verdictRef.current = value;
|
|
183
276
|
setTruncation(value);
|
|
184
277
|
};
|
|
185
|
-
$[3] =
|
|
186
|
-
} else
|
|
187
|
-
const setVerdict =
|
|
188
|
-
let
|
|
278
|
+
$[3] = t3;
|
|
279
|
+
} else t3 = $[3];
|
|
280
|
+
const setVerdict = t3;
|
|
281
|
+
let t4;
|
|
189
282
|
if ($[4] !== setVerdict) {
|
|
190
|
-
|
|
283
|
+
t4 = () => {
|
|
191
284
|
const { label, description: description_0 } = measuredRef.current;
|
|
192
285
|
if (!label && !description_0) return;
|
|
193
286
|
setVerdict(measureTruncation(label, description_0));
|
|
194
287
|
};
|
|
195
288
|
$[4] = setVerdict;
|
|
196
|
-
$[5] =
|
|
197
|
-
} else
|
|
198
|
-
const checkOverflow =
|
|
199
|
-
let
|
|
289
|
+
$[5] = t4;
|
|
290
|
+
} else t4 = $[5];
|
|
291
|
+
const checkOverflow = t4;
|
|
292
|
+
let t5;
|
|
200
293
|
if ($[6] !== checkOverflow) {
|
|
201
|
-
|
|
294
|
+
t5 = () => {
|
|
202
295
|
queueOverflowCheck(checkOverflow);
|
|
203
296
|
};
|
|
204
297
|
$[6] = checkOverflow;
|
|
205
|
-
$[7] =
|
|
206
|
-
} else
|
|
207
|
-
const scheduleOverflowCheck =
|
|
298
|
+
$[7] = t5;
|
|
299
|
+
} else t5 = $[7];
|
|
300
|
+
const scheduleOverflowCheck = t5;
|
|
208
301
|
const measuredLabel = isLabelMeasured ? getMeasureKey(children, ownTitle) : void 0;
|
|
209
302
|
const measuredDescription = isDescriptionMeasured ? getMeasureKey(description, ownTitle) : void 0;
|
|
210
|
-
let
|
|
303
|
+
let t6;
|
|
211
304
|
if ($[8] !== isAutoTooltipEnabled || $[9] !== scheduleOverflowCheck || $[10] !== setVerdict) {
|
|
212
|
-
|
|
305
|
+
t6 = () => {
|
|
213
306
|
if (isAutoTooltipEnabled) {
|
|
214
307
|
scheduleOverflowCheck();
|
|
215
308
|
return;
|
|
@@ -219,11 +312,11 @@ function useAutoTooltip(t0) {
|
|
|
219
312
|
$[8] = isAutoTooltipEnabled;
|
|
220
313
|
$[9] = scheduleOverflowCheck;
|
|
221
314
|
$[10] = setVerdict;
|
|
222
|
-
$[11] =
|
|
223
|
-
} else
|
|
224
|
-
let
|
|
315
|
+
$[11] = t6;
|
|
316
|
+
} else t6 = $[11];
|
|
317
|
+
let t7;
|
|
225
318
|
if ($[12] !== isAutoTooltipEnabled || $[13] !== isDescriptionMeasured || $[14] !== isLabelMeasured || $[15] !== measuredDescription || $[16] !== measuredLabel || $[17] !== scheduleOverflowCheck || $[18] !== setVerdict) {
|
|
226
|
-
|
|
319
|
+
t7 = [
|
|
227
320
|
isAutoTooltipEnabled,
|
|
228
321
|
isLabelMeasured,
|
|
229
322
|
isDescriptionMeasured,
|
|
@@ -239,12 +332,12 @@ function useAutoTooltip(t0) {
|
|
|
239
332
|
$[16] = measuredLabel;
|
|
240
333
|
$[17] = scheduleOverflowCheck;
|
|
241
334
|
$[18] = setVerdict;
|
|
242
|
-
$[19] =
|
|
243
|
-
} else
|
|
244
|
-
useEffect(
|
|
245
|
-
let
|
|
335
|
+
$[19] = t7;
|
|
336
|
+
} else t7 = $[19];
|
|
337
|
+
useEffect(t6, t7);
|
|
338
|
+
let t8;
|
|
246
339
|
if ($[20] !== checkOverflow || $[21] !== scheduleOverflowCheck) {
|
|
247
|
-
|
|
340
|
+
t8 = (part, element) => {
|
|
248
341
|
const measured = measuredRef.current;
|
|
249
342
|
const previous = measured[part];
|
|
250
343
|
measured[part] = element;
|
|
@@ -264,12 +357,12 @@ function useAutoTooltip(t0) {
|
|
|
264
357
|
};
|
|
265
358
|
$[20] = checkOverflow;
|
|
266
359
|
$[21] = scheduleOverflowCheck;
|
|
267
|
-
$[22] =
|
|
268
|
-
} else
|
|
269
|
-
const attachMeasuredNode =
|
|
270
|
-
let
|
|
360
|
+
$[22] = t8;
|
|
361
|
+
} else t8 = $[22];
|
|
362
|
+
const attachMeasuredNode = t8;
|
|
363
|
+
let t9;
|
|
271
364
|
if ($[23] !== attachMeasuredNode || $[24] !== externalLabelRef || $[25] !== isLabelMeasured || $[26] !== labelRefOption) {
|
|
272
|
-
|
|
365
|
+
t9 = (element_0) => {
|
|
273
366
|
assignRef(externalLabelRef, element_0);
|
|
274
367
|
assignRef(labelRefOption, element_0);
|
|
275
368
|
attachMeasuredNode("label", isLabelMeasured ? element_0 : null);
|
|
@@ -278,72 +371,101 @@ function useAutoTooltip(t0) {
|
|
|
278
371
|
$[24] = externalLabelRef;
|
|
279
372
|
$[25] = isLabelMeasured;
|
|
280
373
|
$[26] = labelRefOption;
|
|
281
|
-
$[27] =
|
|
282
|
-
} else
|
|
283
|
-
const handleLabelElementRef =
|
|
284
|
-
let
|
|
374
|
+
$[27] = t9;
|
|
375
|
+
} else t9 = $[27];
|
|
376
|
+
const handleLabelElementRef = t9;
|
|
377
|
+
let t10;
|
|
285
378
|
if ($[28] !== attachMeasuredNode || $[29] !== descriptionRefOption || $[30] !== isDescriptionMeasured) {
|
|
286
|
-
|
|
379
|
+
t10 = (element_1) => {
|
|
287
380
|
assignRef(descriptionRefOption, element_1);
|
|
288
381
|
attachMeasuredNode("description", isDescriptionMeasured ? element_1 : null);
|
|
289
382
|
};
|
|
290
383
|
$[28] = attachMeasuredNode;
|
|
291
384
|
$[29] = descriptionRefOption;
|
|
292
385
|
$[30] = isDescriptionMeasured;
|
|
293
|
-
$[31] =
|
|
294
|
-
} else
|
|
295
|
-
const handleDescriptionElementRef =
|
|
296
|
-
let
|
|
386
|
+
$[31] = t10;
|
|
387
|
+
} else t10 = $[31];
|
|
388
|
+
const handleDescriptionElementRef = t10;
|
|
389
|
+
let t11;
|
|
297
390
|
if ($[32] !== labelProps) {
|
|
298
|
-
|
|
391
|
+
t11 = labelProps || {};
|
|
299
392
|
$[32] = labelProps;
|
|
300
|
-
$[33] =
|
|
301
|
-
} else
|
|
393
|
+
$[33] = t11;
|
|
394
|
+
} else t11 = $[33];
|
|
302
395
|
let finalLabelProps;
|
|
303
|
-
if ($[34] !==
|
|
304
|
-
const { ref: _labelPropsRef, ...
|
|
305
|
-
finalLabelProps =
|
|
306
|
-
$[34] =
|
|
396
|
+
if ($[34] !== t11) {
|
|
397
|
+
const { ref: _labelPropsRef, ...t12 } = t11;
|
|
398
|
+
finalLabelProps = t12;
|
|
399
|
+
$[34] = t11;
|
|
307
400
|
$[35] = finalLabelProps;
|
|
308
401
|
} else finalLabelProps = $[35];
|
|
309
|
-
let
|
|
310
|
-
if ($[36] !== children || $[37] !== description || $[38] !==
|
|
311
|
-
|
|
402
|
+
let t12;
|
|
403
|
+
if ($[36] !== children || $[37] !== description || $[38] !== labelProps || $[39] !== tooltip || $[40] !== truncation) {
|
|
404
|
+
t12 = resolveTooltip({
|
|
312
405
|
tooltip,
|
|
313
406
|
children,
|
|
314
407
|
description,
|
|
315
408
|
labelProps,
|
|
316
|
-
isDynamicLabel,
|
|
317
409
|
truncation
|
|
318
410
|
});
|
|
319
411
|
$[36] = children;
|
|
320
412
|
$[37] = description;
|
|
321
|
-
$[38] =
|
|
322
|
-
$[39] =
|
|
323
|
-
$[40] =
|
|
324
|
-
$[41] =
|
|
413
|
+
$[38] = labelProps;
|
|
414
|
+
$[39] = tooltip;
|
|
415
|
+
$[40] = truncation;
|
|
416
|
+
$[41] = t12;
|
|
417
|
+
} else t12 = $[41];
|
|
418
|
+
const resolvedTooltip = t12;
|
|
419
|
+
const isTooltipActive = !!resolvedTooltip && resolvedTooltip.isDisabled !== true;
|
|
420
|
+
const triggerRef = useRef(null);
|
|
421
|
+
const handlersRef = useRef(null);
|
|
422
|
+
const describedByRef = useRef(void 0);
|
|
423
|
+
const [describedBy, setDescribedBy] = useState();
|
|
424
|
+
let t13;
|
|
425
|
+
if ($[42] === Symbol.for("react.memo_cache_sentinel")) {
|
|
426
|
+
t13 = (id) => {
|
|
427
|
+
if (describedByRef.current === id) return;
|
|
428
|
+
describedByRef.current = id;
|
|
429
|
+
setDescribedBy(id);
|
|
430
|
+
};
|
|
325
431
|
$[42] = t13;
|
|
326
432
|
} else t13 = $[42];
|
|
327
|
-
const
|
|
328
|
-
const isTooltipActive = !!resolvedTooltip && resolvedTooltip.isDisabled !== true;
|
|
433
|
+
const updateDescribedBy = t13;
|
|
329
434
|
let t14;
|
|
330
|
-
if ($[43] !== resolvedTooltip) {
|
|
435
|
+
if ($[43] !== describedBy || $[44] !== resolvedTooltip) {
|
|
331
436
|
t14 = (renderElement, defaultTooltipPlacement) => {
|
|
332
|
-
if (!resolvedTooltip) return renderElement();
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
437
|
+
if (!resolvedTooltip) return /* @__PURE__ */ jsxs(Fragment$1, { children: [renderElement(), null] });
|
|
438
|
+
const { title, tooltipStyles, width, qa, placement, isDisabled, targetRef, ...triggerOptions } = resolvedTooltip;
|
|
439
|
+
const anchorRef = targetRef ?? triggerRef;
|
|
440
|
+
const forwardedProps = { "aria-describedby": describedBy };
|
|
441
|
+
for (const name of getTriggerHandlerNames()) forwardedProps[name] = (event) => handlersRef.current?.[name]?.(event);
|
|
442
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [renderElement(forwardedProps, anchorRef), /* @__PURE__ */ jsx(AutoTooltipLayer, {
|
|
443
|
+
options: {
|
|
444
|
+
...triggerOptions,
|
|
445
|
+
isDisabled,
|
|
446
|
+
targetRef: anchorRef
|
|
447
|
+
},
|
|
448
|
+
tooltip: createProviderTooltip({
|
|
449
|
+
title,
|
|
450
|
+
tooltipStyles,
|
|
451
|
+
width,
|
|
452
|
+
qa,
|
|
453
|
+
isDisabled
|
|
454
|
+
}),
|
|
455
|
+
placement: placement ?? defaultTooltipPlacement,
|
|
456
|
+
handlersRef,
|
|
457
|
+
onDescribedByChange: updateDescribedBy
|
|
458
|
+
})] });
|
|
338
459
|
};
|
|
339
|
-
$[43] =
|
|
340
|
-
$[44] =
|
|
341
|
-
|
|
460
|
+
$[43] = describedBy;
|
|
461
|
+
$[44] = resolvedTooltip;
|
|
462
|
+
$[45] = t14;
|
|
463
|
+
} else t14 = $[45];
|
|
342
464
|
const renderWithTooltip = t14;
|
|
343
465
|
const t15 = truncation !== "none";
|
|
344
466
|
const t16 = !!tooltip;
|
|
345
467
|
let t17;
|
|
346
|
-
if ($[
|
|
468
|
+
if ($[46] !== finalLabelProps || $[47] !== handleDescriptionElementRef || $[48] !== handleLabelElementRef || $[49] !== isAutoTooltipEnabled || $[50] !== isTooltipActive || $[51] !== renderWithTooltip || $[52] !== scheduleOverflowCheck || $[53] !== t15 || $[54] !== t16) {
|
|
347
469
|
t17 = {
|
|
348
470
|
labelRef: handleLabelElementRef,
|
|
349
471
|
descriptionRef: handleDescriptionElementRef,
|
|
@@ -355,17 +477,17 @@ function useAutoTooltip(t0) {
|
|
|
355
477
|
renderWithTooltip,
|
|
356
478
|
scheduleOverflowCheck
|
|
357
479
|
};
|
|
358
|
-
$[
|
|
359
|
-
$[
|
|
360
|
-
$[
|
|
361
|
-
$[
|
|
362
|
-
$[
|
|
363
|
-
$[
|
|
364
|
-
$[
|
|
365
|
-
$[
|
|
366
|
-
$[
|
|
367
|
-
$[
|
|
368
|
-
} else t17 = $[
|
|
480
|
+
$[46] = finalLabelProps;
|
|
481
|
+
$[47] = handleDescriptionElementRef;
|
|
482
|
+
$[48] = handleLabelElementRef;
|
|
483
|
+
$[49] = isAutoTooltipEnabled;
|
|
484
|
+
$[50] = isTooltipActive;
|
|
485
|
+
$[51] = renderWithTooltip;
|
|
486
|
+
$[52] = scheduleOverflowCheck;
|
|
487
|
+
$[53] = t15;
|
|
488
|
+
$[54] = t16;
|
|
489
|
+
$[55] = t17;
|
|
490
|
+
} else t17 = $[55];
|
|
369
491
|
return t17;
|
|
370
492
|
}
|
|
371
493
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-auto-tooltip.js","names":["HTMLAttributes","ReactNode","Ref","RefObject","useCallback","useEffect","useRef","useState","PositionProps","flushSync","CubeTooltipProviderProps","TooltipProvider","Props","AutoTooltipValue","Omit","auto","UseAutoTooltipOptions","tooltip","children","description","labelProps","isDynamicLabel","labelRef","HTMLElement","descriptionRef","assignRef","ref","element","current","pendingOverflowChecks","Set","overflowChecksByNode","WeakMap","refreshAutoTooltipsWithin","node","Array","from","querySelectorAll","get","forEach","queueOverflowCheck","runOverflowChecks","checks","clear","check","size","queueMicrotask","add","allowsAutoTooltip","title","undefined","getOwnAutoTitle","isMeasured","part","ownTitle","getMeasureKey","Truncation","getAutoTitle","truncation","resolveTooltip","isOverflowed","autoTitle","hasAutoContent","isDisabled","tooltipProps","isTruncated","scrollWidth","clientWidth","measureTruncation","label","isLabelCut","isDescriptionCut","MeasuredNodes","observer","ResizeObserver","observeMeasuredNodes","measured","onResize","disconnect","observe","useAutoTooltip","t0","$","_c","t1","labelRefOption","descriptionRefOption","t2","allowsAuto","isLabelMeasured","isDescriptionMeasured","isAutoTooltipEnabled","externalLabelRef","setTruncation","t3","Symbol","for","measuredRef","verdictRef","t4","value","setVerdict","t5","description_0","checkOverflow","t6","scheduleOverflowCheck","measuredLabel","measuredDescription","t7","t8","t9","previous","delete","checks_0","set","attachMeasuredNode","t10","element_0","handleLabelElementRef","t11","element_1","handleDescriptionElementRef","t12","finalLabelProps","_labelPropsRef","t13","resolvedTooltip","isTooltipActive","t14","renderElement","defaultTooltipPlacement","triggerProps","renderWithTooltip","t15","t16","t17","hasTooltip","_c"],"sources":["../../../src/components/content/use-auto-tooltip.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n ReactNode,\n Ref,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { PositionProps } from 'react-aria';\nimport { flushSync } from 'react-dom';\n\nimport {\n CubeTooltipProviderProps,\n TooltipProvider,\n} from '../overlays/Tooltip/TooltipProvider';\n\nimport type { Props } from '../../props';\n\nexport type AutoTooltipValue =\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n\nexport interface UseAutoTooltipOptions {\n tooltip: AutoTooltipValue | undefined;\n children: ReactNode;\n /**\n * Secondary text that truncates alongside the label, such as `Item`'s\n * description. A string description is measured with the label, and the auto\n * tooltip shows whichever of the two is cut off. With `{ title, auto: true }`\n * any description is measured, and the tooltip shows that title.\n */\n description?: ReactNode;\n labelProps?: Props;\n isDynamicLabel?: boolean;\n /**\n * The caller's own ref to the label element. The hook owns the label's ref\n * (it measures the node), so a caller that also needs the node hands its ref\n * over here rather than attaching a second one.\n */\n labelRef?: Ref<HTMLElement>;\n /** The caller's own ref to the description element, as `labelRef`. */\n descriptionRef?: Ref<HTMLElement>;\n}\n\nfunction assignRef(ref: unknown, element: HTMLElement | null) {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n (ref as { current: HTMLElement | null }).current = element;\n }\n}\n\n/** Overflow checks queued for the end of the current task, from every label. */\nconst pendingOverflowChecks = new Set<() => void>();\nconst overflowChecksByNode = new WeakMap<HTMLElement, Set<() => void>>();\n\n/** Refresh a retained tooltip tree after inherited appearance changes. */\nexport function refreshAutoTooltipsWithin(element: HTMLElement) {\n for (const node of [\n element,\n ...Array.from(element.querySelectorAll<HTMLElement>('*')),\n ]) {\n overflowChecksByNode.get(node)?.forEach(queueOverflowCheck);\n }\n}\n\n/**\n * Runs every queued check in one pass and commits the verdicts that changed in\n * one synchronous render.\n *\n * All reads happen before React touches the DOM again, so they share one\n * layout. `flushSync` applies the verdicts, and the `TooltipProvider` remounts\n * they cause, before paint and before any other task, so code that looks the\n * label up after this task gets the node the verdict leaves in place, not one\n * about to be replaced. Outside a React commit this is an ordinary sync\n * render, not a nested update.\n */\nfunction runOverflowChecks() {\n const checks = Array.from(pendingOverflowChecks);\n\n pendingOverflowChecks.clear();\n\n flushSync(() => {\n for (const check of checks) check();\n });\n}\n\nfunction queueOverflowCheck(check: () => void) {\n if (!pendingOverflowChecks.size) queueMicrotask(runOverflowChecks);\n\n pendingOverflowChecks.add(check);\n}\n\n/**\n * Whether the tooltip value asks to detect overflow on its own. What it\n * measures is decided separately (`isMeasured`).\n */\nfunction allowsAutoTooltip(tooltip: AutoTooltipValue | undefined): boolean {\n // Boolean true enables auto overflow detection\n if (tooltip === true) return true;\n if (typeof tooltip === 'object') {\n // If title is provided and auto is explicitly true, enable auto overflow detection\n if (tooltip.title) {\n return tooltip.auto === true;\n }\n\n // If no title is provided, default to auto=true unless explicitly disabled\n return tooltip.auto !== undefined ? !!tooltip.auto : true;\n }\n return false;\n}\n\n/**\n * The tooltip's own title when it still waits for overflow (`{ title, auto:\n * true }`), or `undefined`.\n */\nfunction getOwnAutoTitle(tooltip: AutoTooltipValue | undefined): ReactNode {\n if (typeof tooltip !== 'object' || tooltip.auto !== true) return undefined;\n\n return tooltip.title || undefined;\n}\n\n/**\n * Whether a label or description takes part in overflow detection.\n *\n * Without a title of its own, the tooltip shows the text that is cut off, so\n * only a string part is measured. With one, it never shows the part, so a part\n * of any kind is measured: an element label, such as a coloured commit hash\n * followed by its message, gets a tooltip that appears only when it is cut off.\n * Only the part's own box is compared, so a child that cuts off its own text\n * inside it does not count.\n */\nfunction isMeasured(part: ReactNode, ownTitle: ReactNode): boolean {\n return ownTitle ? part != null : typeof part === 'string';\n}\n\n/**\n * What a measured part's re-check is keyed on. Text can change its overflow\n * without resizing the observed box, so a string part is keyed by its text. Any\n * other part is keyed by the tooltip's own title, which callers derive from the\n * same text, rather than by an element that is new on every render.\n */\nfunction getMeasureKey(part: ReactNode, ownTitle: ReactNode) {\n if (typeof part === 'string') return part;\n\n return typeof ownTitle === 'string' ? ownTitle : undefined;\n}\n\n/** Which measured parts are cut off. */\ntype Truncation = 'none' | 'label' | 'description' | 'both';\n\n/**\n * What the auto tooltip shows: the text that is cut off, and nothing the row\n * already shows in full. When both parts are, the description goes below the\n * label as the tooltip's `Description`, styled as secondary text.\n */\nfunction getAutoTitle(\n children: ReactNode,\n description: ReactNode,\n truncation: Truncation,\n): ReactNode {\n if (truncation === 'description') return description;\n if (truncation === 'both') {\n return (\n <>\n {children}\n <div data-element=\"Description\">{description}</div>\n </>\n );\n }\n\n // The label is cut off, or nothing is and the tooltip stays mounted but\n // disabled for a dynamic label.\n return children;\n}\n\n/**\n * The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip\n * is rendered at all.\n */\nfunction resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel,\n truncation,\n}: Omit<UseAutoTooltipOptions, 'labelRef' | 'descriptionRef'> & {\n truncation: Truncation;\n}): Omit<CubeTooltipProviderProps, 'children'> | null {\n if (!tooltip) return null;\n\n // String tooltip - simple case\n if (typeof tooltip === 'string') {\n return { title: tooltip };\n }\n\n const isOverflowed = truncation !== 'none';\n const autoTitle = getAutoTitle(children, description, truncation);\n const hasAutoContent =\n !!(autoTitle || labelProps) && (isOverflowed || isDynamicLabel);\n\n // Boolean tooltip - auto tooltip on overflow\n if (tooltip === true) {\n if (!hasAutoContent) return null;\n\n return {\n title: autoTitle,\n isDisabled: !isOverflowed && isDynamicLabel,\n };\n }\n\n // Object tooltip - advanced configuration\n const { auto, ...tooltipProps } = tooltip;\n\n // If title is provided and auto is not explicitly true, always show the tooltip\n if (tooltipProps.title && auto !== true) {\n return tooltipProps;\n }\n\n // If title is provided with auto=true, OR no title but auto behavior enabled\n if (!hasAutoContent) return null;\n\n // A nullish `title` falls back to the auto title, so it goes after the spread.\n return {\n ...tooltipProps,\n title: tooltipProps.title ?? autoTitle,\n isDisabled: tooltipProps.isDisabled ?? (!isOverflowed && isDynamicLabel),\n };\n}\n\n/** Whether a measured node's text is cut off. */\nfunction isTruncated(element: HTMLElement | null): boolean {\n return !!element && element.scrollWidth > element.clientWidth;\n}\n\nfunction measureTruncation(\n label: HTMLElement | null,\n description: HTMLElement | null,\n): Truncation {\n const isLabelCut = isTruncated(label);\n const isDescriptionCut = isTruncated(description);\n\n if (isLabelCut) return isDescriptionCut ? 'both' : 'label';\n\n return isDescriptionCut ? 'description' : 'none';\n}\n\ninterface MeasuredNodes {\n label: HTMLElement | null;\n description: HTMLElement | null;\n observer: ResizeObserver | null;\n}\n\n/**\n * Points the hook's one observer at the nodes now measured, so a row with a\n * label and a description still costs a single observer. It re-points by\n * disconnecting and observing again rather than with `unobserve`: those are\n * the only two calls the hook has ever made, so a consumer's test stub that\n * implements just them keeps working.\n */\nfunction observeMeasuredNodes(measured: MeasuredNodes, onResize: () => void) {\n try {\n measured.observer?.disconnect();\n } catch {\n // do nothing\n }\n\n const { label, description } = measured;\n\n if (!label && !description) return;\n\n measured.observer ??= new ResizeObserver(() => onResize());\n\n if (label) measured.observer.observe(label);\n if (description) measured.observer.observe(description);\n}\n\nexport function useAutoTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel = false,\n labelRef: labelRefOption,\n descriptionRef: descriptionRefOption,\n}: UseAutoTooltipOptions) {\n const allowsAuto = allowsAutoTooltip(tooltip);\n const ownTitle = getOwnAutoTitle(tooltip);\n const isLabelMeasured = allowsAuto && isMeasured(children, ownTitle);\n const isDescriptionMeasured = allowsAuto && isMeasured(description, ownTitle);\n const isAutoTooltipEnabled = isLabelMeasured || isDescriptionMeasured;\n\n // Track overflow for auto tooltip (only when enabled)\n const externalLabelRef = (labelProps as any)?.ref;\n const [truncation, setTruncation] = useState<Truncation>('none');\n // The nodes being measured, and the one observer watching all of them.\n const measuredRef = useRef<MeasuredNodes>({\n label: null,\n description: null,\n observer: null,\n });\n\n const verdictRef = useRef<Truncation>('none');\n\n /**\n * Sets the verdict only when it changes. React skips an unchanged `setState`\n * only while the component has no other update queued; otherwise the no-op is\n * enqueued like any other update. From an effect flushed inside a sync commit\n * that is a pending update, and a nested one — see the mount effect below.\n * Mirroring the verdict makes every unchanged write free, whatever else the\n * component has queued.\n */\n const setVerdict = useCallback((value: Truncation) => {\n if (verdictRef.current === value) return;\n\n verdictRef.current = value;\n setTruncation(value);\n }, []);\n\n const checkOverflow = useCallback(() => {\n const { label, description } = measuredRef.current;\n\n if (!label && !description) return;\n\n setVerdict(measureTruncation(label, description));\n }, [setVerdict]);\n\n /**\n * Measure once the current task has finished, not inside it.\n *\n * A microtask runs after React's whole commit — every mutation, layout effect\n * and ref attachment — and before paint. Every label on the page therefore\n * reads after all of them have written, so the reads collapse into one style\n * and layout flush instead of forcing one each, mid-commit. Reading straight\n * from the callback ref is what cost 122ms of `get scrollWidth` in one Cloud\n * profile, more than the entire style engine.\n *\n * A microtask rather than the observer's first delivery: observer callbacks\n * are part of the rendering steps, so a runner that is not producing frames —\n * a background tab, or a headless browser running many stories at once — can\n * delay them past the point something asks whether the tooltip is active.\n * Microtasks do not depend on a frame. See `runOverflowChecks` for how the\n * verdicts are applied.\n */\n const scheduleOverflowCheck = useCallback(() => {\n queueOverflowCheck(checkOverflow);\n }, [checkOverflow]);\n\n // Text can change its overflow without changing the observed box size.\n const measuredLabel = isLabelMeasured\n ? getMeasureKey(children, ownTitle)\n : undefined;\n const measuredDescription = isDescriptionMeasured\n ? getMeasureKey(description, ownTitle)\n : undefined;\n\n useEffect(() => {\n if (isAutoTooltipEnabled) {\n // Queued, not measured here. React 19 flushes a sync commit's passive\n // effects before the commit returns, so a verdict set from this effect\n // leaves that commit with an update pending — a nested update. A list\n // that commits each row on its own (ag-grid-react wraps every new row in\n // `flushSync`) then gains one per row, and React throws \"Maximum update\n // depth exceeded\" once the count passes 50. The queued check runs after\n // the commit and still before paint. The callback refs have usually\n // queued it already, so this call is absorbed. It matters when what is\n // measured changes without a node re-attaching — the description stops\n // being a string, say, while the label stays.\n scheduleOverflowCheck();\n\n return;\n }\n\n // Clearing here rather than in the callback ref, which cannot be trusted\n // to do it. Flipping `isAutoTooltipEnabled` changes the ref's identity, so\n // React detaches with the PREVIOUS callback — the one that still believes\n // auto tooltips are on, and therefore keeps the last verdict — and only\n // attaches the new one if the label still exists. When `children` stops\n // being a string the label unmounts, so the new callback never runs and a\n // stale verdict would keep an auto tooltip mounted over content that is no\n // longer text. That is the default `Button` path, where `tooltip` is `true`.\n setVerdict('none');\n }, [\n isAutoTooltipEnabled,\n isLabelMeasured,\n isDescriptionMeasured,\n measuredLabel,\n measuredDescription,\n scheduleOverflowCheck,\n setVerdict,\n ]);\n\n // The callback refs own the observer: React hands them `null` when a node\n // goes away. Effect cleanup must not discard nodes still owned by refs:\n // reconnecting effects would otherwise strand queued measurements. Let\n // attachment/detachment update observer ownership symmetrically.\n const attachMeasuredNode = useCallback(\n (part: 'label' | 'description', element: HTMLElement | null) => {\n const measured = measuredRef.current;\n\n const previous = measured[part];\n measured[part] = element;\n\n if (\n previous &&\n previous !== measured.label &&\n previous !== measured.description\n ) {\n const checks = overflowChecksByNode.get(previous);\n checks?.delete(checkOverflow);\n if (!checks?.size) overflowChecksByNode.delete(previous);\n }\n if (element) {\n const checks = overflowChecksByNode.get(element) ?? new Set();\n checks.add(checkOverflow);\n overflowChecksByNode.set(element, checks);\n }\n\n // The observer covers every later size change.\n observeMeasuredNodes(measured, checkOverflow);\n\n // No node to measure. Leave the previous verdict alone rather than\n // clearing it: turning the verdict on mounts `TooltipProvider`, which\n // remounts the label underneath it, so React detaches the old node and\n // attaches a new one within that commit. Clearing here would unmount the\n // provider, remount the label, measure it, mount the provider again — a\n // loop that never settles.\n if (!element) return;\n\n // Do NOT measure synchronously here — see `scheduleOverflowCheck`. This\n // covers the node the ref just handed us, including the fresh one React\n // creates when `TooltipProvider` mounts and remounts the element.\n scheduleOverflowCheck();\n },\n [checkOverflow, scheduleOverflowCheck],\n );\n\n const handleLabelElementRef = useCallback(\n (element: HTMLElement | null) => {\n // Notify the external refs\n assignRef(externalLabelRef, element);\n assignRef(labelRefOption, element);\n\n attachMeasuredNode('label', isLabelMeasured ? element : null);\n },\n [externalLabelRef, labelRefOption, isLabelMeasured, attachMeasuredNode],\n );\n\n const handleDescriptionElementRef = useCallback(\n (element: HTMLElement | null) => {\n assignRef(descriptionRefOption, element);\n\n attachMeasuredNode('description', isDescriptionMeasured ? element : null);\n },\n [descriptionRefOption, isDescriptionMeasured, attachMeasuredNode],\n );\n\n const { ref: _labelPropsRef, ...finalLabelProps } = labelProps || {};\n\n // Resolved once so that both the rendering below and `isTooltipActive` speak\n // about the same tooltip.\n const resolvedTooltip = resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n isDynamicLabel,\n truncation,\n });\n\n /** Whether a tooltip is rendered and able to open. */\n const isTooltipActive =\n !!resolvedTooltip && resolvedTooltip.isDisabled !== true;\n\n const renderWithTooltip = (\n renderElement: (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ) => ReactNode,\n defaultTooltipPlacement: PositionProps['placement'],\n ) => {\n if (!resolvedTooltip) return renderElement();\n\n return (\n <TooltipProvider placement={defaultTooltipPlacement} {...resolvedTooltip}>\n {(triggerProps, ref) => renderElement(triggerProps, ref)}\n </TooltipProvider>\n );\n };\n\n return {\n labelRef: handleLabelElementRef,\n descriptionRef: handleDescriptionElementRef,\n labelProps: finalLabelProps,\n isOverflowed: truncation !== 'none',\n isAutoTooltipEnabled,\n hasTooltip: !!tooltip,\n isTooltipActive,\n renderWithTooltip,\n scheduleOverflowCheck,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-auto-tooltip.js","names":["HTMLAttributes","ReactElement","ReactNode","Ref","RefObject","SyntheticEvent","useCallback","useEffect","useEffectEvent","useRef","useState","Placement","PositionProps","useIsSSR","flushSync","useLayoutEffect","CubeTooltipProps","createProviderTooltip","CubeTooltipProviderProps","TooltipTriggerBindingProps","useTooltipTriggerBinding","Props","AutoTooltipValue","Omit","auto","UseAutoTooltipOptions","tooltip","children","description","labelProps","labelRef","HTMLElement","descriptionRef","assignRef","ref","element","current","FOCUS_TRIGGER_HANDLERS","const","POINTER_HOVER_HANDLERS","MOUSE_HOVER_HANDLERS","TriggerHandlerName","TriggerHandlers","Partial","Record","event","getTriggerHandlerNames","PointerEvent","AutoTooltipLayerProps","options","targetRef","placement","handlersRef","onDescribedByChange","id","AutoTooltipLayer","t0","$","_c","isSSR","triggerProps","renderTooltip","describedBy","t1","t2","publishDescribedBy","t3","t4","t5","undefined","t6","t7","pendingOverflowChecks","Set","overflowChecksByNode","WeakMap","refreshAutoTooltipsWithin","node","Array","from","querySelectorAll","get","forEach","queueOverflowCheck","runOverflowChecks","checks","clear","check","size","queueMicrotask","add","allowsAutoTooltip","title","getOwnAutoTitle","isMeasured","part","ownTitle","getMeasureKey","Truncation","getAutoTitle","truncation","resolveTooltip","isOverflowed","autoTitle","hasAutoContent","tooltipProps","isTruncated","scrollWidth","clientWidth","measureTruncation","label","isLabelCut","isDescriptionCut","MeasuredNodes","observer","ResizeObserver","observeMeasuredNodes","measured","onResize","disconnect","observe","useAutoTooltip","labelRefOption","descriptionRefOption","allowsAuto","isLabelMeasured","isDescriptionMeasured","isAutoTooltipEnabled","externalLabelRef","setTruncation","Symbol","for","measuredRef","verdictRef","value","setVerdict","description_0","checkOverflow","scheduleOverflowCheck","measuredLabel","measuredDescription","t8","previous","delete","checks_0","set","attachMeasuredNode","t9","element_0","handleLabelElementRef","t10","element_1","handleDescriptionElementRef","t11","finalLabelProps","_labelPropsRef","t12","resolvedTooltip","isTooltipActive","isDisabled","triggerRef","describedByRef","setDescribedBy","t13","updateDescribedBy","t14","renderElement","defaultTooltipPlacement","tooltipStyles","width","qa","triggerOptions","anchorRef","forwardedProps","name","renderWithTooltip","t15","t16","t17","hasTooltip","_c"],"sources":["../../../src/components/content/use-auto-tooltip.tsx"],"sourcesContent":["import {\n HTMLAttributes,\n ReactElement,\n ReactNode,\n Ref,\n RefObject,\n SyntheticEvent,\n useCallback,\n useEffect,\n useEffectEvent,\n useRef,\n useState,\n} from 'react';\nimport { Placement, PositionProps, useIsSSR } from 'react-aria';\nimport { flushSync } from 'react-dom';\n\nimport { useLayoutEffect } from '../../utils/react/useLayoutEffect';\nimport { CubeTooltipProps } from '../overlays/Tooltip/Tooltip';\nimport {\n createProviderTooltip,\n CubeTooltipProviderProps,\n} from '../overlays/Tooltip/TooltipProvider';\nimport {\n TooltipTriggerBindingProps,\n useTooltipTriggerBinding,\n} from '../overlays/Tooltip/TooltipTrigger';\n\nimport type { Props } from '../../props';\n\nexport type AutoTooltipValue =\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n\nexport interface UseAutoTooltipOptions {\n tooltip: AutoTooltipValue | undefined;\n children: ReactNode;\n /**\n * Secondary text that truncates alongside the label, such as `Item`'s\n * description. A string description is measured with the label, and the auto\n * tooltip shows whichever of the two is cut off. With `{ title, auto: true }`\n * any description is measured, and the tooltip shows that title.\n */\n description?: ReactNode;\n labelProps?: Props;\n /**\n * The caller's own ref to the label element. The hook owns the label's ref\n * (it measures the node), so a caller that also needs the node hands its ref\n * over here rather than attaching a second one.\n */\n labelRef?: Ref<HTMLElement>;\n /** The caller's own ref to the description element, as `labelRef`. */\n descriptionRef?: Ref<HTMLElement>;\n}\n\nfunction assignRef(ref: unknown, element: HTMLElement | null) {\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n (ref as { current: HTMLElement | null }).current = element;\n }\n}\n\n/**\n * The handlers React Aria's `useTooltipTrigger` puts on the trigger. The\n * element renders before the tooltip beside it has computed its own, so it\n * gets a forwarder for each while a tooltip is mounted. Hover comes from\n * `useHover`, which uses pointer events where the browser has them and mouse\n * and touch events elsewhere; only those names are forwarded, so a forwarder\n * never replaces a handler of the element's own that React Aria leaves alone.\n */\nconst FOCUS_TRIGGER_HANDLERS = [\n 'onFocus',\n 'onBlur',\n 'onKeyDown',\n 'onKeyUp',\n 'onPointerDown',\n] as const;\nconst POINTER_HOVER_HANDLERS = ['onPointerEnter', 'onPointerLeave'] as const;\nconst MOUSE_HOVER_HANDLERS = [\n 'onMouseEnter',\n 'onMouseLeave',\n 'onTouchStart',\n] as const;\n\ntype TriggerHandlerName =\n | (typeof FOCUS_TRIGGER_HANDLERS)[number]\n | (typeof POINTER_HOVER_HANDLERS)[number]\n | (typeof MOUSE_HOVER_HANDLERS)[number];\n\ntype TriggerHandlers = Partial<\n Record<TriggerHandlerName, (event: SyntheticEvent) => void>\n>;\n\nfunction getTriggerHandlerNames(): readonly TriggerHandlerName[] {\n return [\n ...FOCUS_TRIGGER_HANDLERS,\n ...(typeof PointerEvent === 'undefined'\n ? MOUSE_HOVER_HANDLERS\n : POINTER_HOVER_HANDLERS),\n ];\n}\n\ninterface AutoTooltipLayerProps {\n /** The trigger options, with the ref the tooltip is positioned against. */\n options: TooltipTriggerBindingProps & { targetRef: RefObject<HTMLElement> };\n tooltip: ReactElement<CubeTooltipProps>;\n placement: Placement | undefined;\n /** Where the layer publishes its trigger handlers for the forwarders. */\n handlersRef: RefObject<TriggerHandlers | null>;\n onDescribedByChange: (id: string | undefined) => void;\n}\n\n/**\n * The tooltip of an element rendered by `renderWithTooltip`, mounted beside the\n * element only while a tooltip exists. It owns the tooltip's state and hands\n * the element its trigger handlers through `handlersRef`, so an element that\n * never has a tooltip runs none of it, and the element keeps its node when the\n * tooltip comes and goes.\n */\nfunction AutoTooltipLayer({\n options,\n tooltip,\n placement,\n handlersRef,\n onDescribedByChange,\n}: AutoTooltipLayerProps) {\n const isSSR = useIsSSR();\n const { triggerProps, renderTooltip } = useTooltipTriggerBinding(\n options,\n tooltip,\n );\n const describedBy = triggerProps['aria-describedby'];\n\n // Events reach the element only after a commit, so publishing the handlers\n // here is never late.\n useLayoutEffect(() => {\n handlersRef.current = triggerProps as TriggerHandlers;\n });\n\n // The open tooltip's id describes the element, which renders it as a prop.\n const publishDescribedBy = useEffectEvent((id: string | undefined) => {\n onDescribedByChange(id);\n });\n\n useLayoutEffect(() => {\n publishDescribedBy(describedBy);\n }, [describedBy]);\n\n useLayoutEffect(\n () => () => {\n handlersRef.current = null;\n publishDescribedBy(undefined);\n },\n [handlersRef],\n );\n\n return isSSR ? null : renderTooltip(placement);\n}\n\n/** Overflow checks queued for the end of the current task, from every label. */\nconst pendingOverflowChecks = new Set<() => void>();\nconst overflowChecksByNode = new WeakMap<HTMLElement, Set<() => void>>();\n\n/** Refresh a retained tooltip tree after inherited appearance changes. */\nexport function refreshAutoTooltipsWithin(element: HTMLElement) {\n for (const node of [\n element,\n ...Array.from(element.querySelectorAll<HTMLElement>('*')),\n ]) {\n overflowChecksByNode.get(node)?.forEach(queueOverflowCheck);\n }\n}\n\n/**\n * Runs every queued check in one pass and commits the verdicts that changed in\n * one synchronous render.\n *\n * All reads happen before React touches the DOM again, so they share one\n * layout. `flushSync` applies the verdicts before paint and before any other\n * task, so code that asks whether the tooltip is active after this task gets\n * the answer the measurement gave. Outside a React commit this is an ordinary\n * sync render, not a nested update.\n */\nfunction runOverflowChecks() {\n const checks = Array.from(pendingOverflowChecks);\n\n pendingOverflowChecks.clear();\n\n flushSync(() => {\n for (const check of checks) check();\n });\n}\n\nfunction queueOverflowCheck(check: () => void) {\n if (!pendingOverflowChecks.size) queueMicrotask(runOverflowChecks);\n\n pendingOverflowChecks.add(check);\n}\n\n/**\n * Whether the tooltip value asks to detect overflow on its own. What it\n * measures is decided separately (`isMeasured`).\n */\nfunction allowsAutoTooltip(tooltip: AutoTooltipValue | undefined): boolean {\n // Boolean true enables auto overflow detection\n if (tooltip === true) return true;\n if (typeof tooltip === 'object') {\n // If title is provided and auto is explicitly true, enable auto overflow detection\n if (tooltip.title) {\n return tooltip.auto === true;\n }\n\n // If no title is provided, default to auto=true unless explicitly disabled\n return tooltip.auto !== undefined ? !!tooltip.auto : true;\n }\n return false;\n}\n\n/**\n * The tooltip's own title when it still waits for overflow (`{ title, auto:\n * true }`), or `undefined`.\n */\nfunction getOwnAutoTitle(tooltip: AutoTooltipValue | undefined): ReactNode {\n if (typeof tooltip !== 'object' || tooltip.auto !== true) return undefined;\n\n return tooltip.title || undefined;\n}\n\n/**\n * Whether a label or description takes part in overflow detection.\n *\n * Without a title of its own, the tooltip shows the text that is cut off, so\n * only a string part is measured. With one, it never shows the part, so a part\n * of any kind is measured: an element label, such as a coloured commit hash\n * followed by its message, gets a tooltip that appears only when it is cut off.\n * Only the part's own box is compared, so a child that cuts off its own text\n * inside it does not count.\n */\nfunction isMeasured(part: ReactNode, ownTitle: ReactNode): boolean {\n return ownTitle ? part != null : typeof part === 'string';\n}\n\n/**\n * What a measured part's re-check is keyed on. Text can change its overflow\n * without resizing the observed box, so a string part is keyed by its text. Any\n * other part is keyed by the tooltip's own title, which callers derive from the\n * same text, rather than by an element that is new on every render.\n */\nfunction getMeasureKey(part: ReactNode, ownTitle: ReactNode) {\n if (typeof part === 'string') return part;\n\n return typeof ownTitle === 'string' ? ownTitle : undefined;\n}\n\n/** Which measured parts are cut off. */\ntype Truncation = 'none' | 'label' | 'description' | 'both';\n\n/**\n * What the auto tooltip shows: the text that is cut off, and nothing the row\n * already shows in full. When both parts are, the description goes below the\n * label as the tooltip's `Description`, styled as secondary text.\n */\nfunction getAutoTitle(\n children: ReactNode,\n description: ReactNode,\n truncation: Truncation,\n): ReactNode {\n if (truncation === 'description') return description;\n if (truncation === 'both') {\n return (\n <>\n {children}\n <div data-element=\"Description\">{description}</div>\n </>\n );\n }\n\n // The label is cut off, or nothing is and no tooltip renders.\n return children;\n}\n\n/**\n * The `TooltipProvider` props a tooltip resolves to, or `null` when no tooltip\n * is rendered at all.\n */\nfunction resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n truncation,\n}: Omit<UseAutoTooltipOptions, 'labelRef' | 'descriptionRef'> & {\n truncation: Truncation;\n}): Omit<CubeTooltipProviderProps, 'children'> | null {\n if (!tooltip) return null;\n\n // String tooltip - simple case\n if (typeof tooltip === 'string') {\n return { title: tooltip };\n }\n\n const isOverflowed = truncation !== 'none';\n const autoTitle = getAutoTitle(children, description, truncation);\n const hasAutoContent = !!(autoTitle || labelProps) && isOverflowed;\n\n // Boolean tooltip - auto tooltip on overflow\n if (tooltip === true) {\n return hasAutoContent ? { title: autoTitle } : null;\n }\n\n // Object tooltip - advanced configuration\n const { auto, ...tooltipProps } = tooltip;\n\n // If title is provided and auto is not explicitly true, always show the tooltip\n if (tooltipProps.title && auto !== true) {\n return tooltipProps;\n }\n\n // If title is provided with auto=true, OR no title but auto behavior enabled\n if (!hasAutoContent) return null;\n\n // A nullish `title` falls back to the auto title, so it goes after the spread.\n return {\n ...tooltipProps,\n title: tooltipProps.title ?? autoTitle,\n };\n}\n\n/** Whether a measured node's text is cut off. */\nfunction isTruncated(element: HTMLElement | null): boolean {\n return !!element && element.scrollWidth > element.clientWidth;\n}\n\nfunction measureTruncation(\n label: HTMLElement | null,\n description: HTMLElement | null,\n): Truncation {\n const isLabelCut = isTruncated(label);\n const isDescriptionCut = isTruncated(description);\n\n if (isLabelCut) return isDescriptionCut ? 'both' : 'label';\n\n return isDescriptionCut ? 'description' : 'none';\n}\n\ninterface MeasuredNodes {\n label: HTMLElement | null;\n description: HTMLElement | null;\n observer: ResizeObserver | null;\n}\n\n/**\n * Points the hook's one observer at the nodes now measured, so a row with a\n * label and a description still costs a single observer. It re-points by\n * disconnecting and observing again rather than with `unobserve`: those are\n * the only two calls the hook has ever made, so a consumer's test stub that\n * implements just them keeps working.\n */\nfunction observeMeasuredNodes(measured: MeasuredNodes, onResize: () => void) {\n try {\n measured.observer?.disconnect();\n } catch {\n // do nothing\n }\n\n const { label, description } = measured;\n\n if (!label && !description) return;\n\n measured.observer ??= new ResizeObserver(() => onResize());\n\n if (label) measured.observer.observe(label);\n if (description) measured.observer.observe(description);\n}\n\nexport function useAutoTooltip({\n tooltip,\n children,\n description,\n labelProps,\n labelRef: labelRefOption,\n descriptionRef: descriptionRefOption,\n}: UseAutoTooltipOptions) {\n const allowsAuto = allowsAutoTooltip(tooltip);\n const ownTitle = getOwnAutoTitle(tooltip);\n const isLabelMeasured = allowsAuto && isMeasured(children, ownTitle);\n const isDescriptionMeasured = allowsAuto && isMeasured(description, ownTitle);\n const isAutoTooltipEnabled = isLabelMeasured || isDescriptionMeasured;\n\n // Track overflow for auto tooltip (only when enabled)\n const externalLabelRef = (labelProps as any)?.ref;\n const [truncation, setTruncation] = useState<Truncation>('none');\n // The nodes being measured, and the one observer watching all of them.\n const measuredRef = useRef<MeasuredNodes>({\n label: null,\n description: null,\n observer: null,\n });\n\n const verdictRef = useRef<Truncation>('none');\n\n /**\n * Sets the verdict only when it changes. React skips an unchanged `setState`\n * only while the component has no other update queued; otherwise the no-op is\n * enqueued like any other update. From an effect flushed inside a sync commit\n * that is a pending update, and a nested one — see the mount effect below.\n * Mirroring the verdict makes every unchanged write free, whatever else the\n * component has queued.\n */\n const setVerdict = useCallback((value: Truncation) => {\n if (verdictRef.current === value) return;\n\n verdictRef.current = value;\n setTruncation(value);\n }, []);\n\n const checkOverflow = useCallback(() => {\n const { label, description } = measuredRef.current;\n\n if (!label && !description) return;\n\n setVerdict(measureTruncation(label, description));\n }, [setVerdict]);\n\n /**\n * Measure once the current task has finished, not inside it.\n *\n * A microtask runs after React's whole commit — every mutation, layout effect\n * and ref attachment — and before paint. Every label on the page therefore\n * reads after all of them have written, so the reads collapse into one style\n * and layout flush instead of forcing one each, mid-commit. Reading straight\n * from the callback ref is what cost 122ms of `get scrollWidth` in one Cloud\n * profile, more than the entire style engine.\n *\n * A microtask rather than the observer's first delivery: observer callbacks\n * are part of the rendering steps, so a runner that is not producing frames —\n * a background tab, or a headless browser running many stories at once — can\n * delay them past the point something asks whether the tooltip is active.\n * Microtasks do not depend on a frame. See `runOverflowChecks` for how the\n * verdicts are applied.\n */\n const scheduleOverflowCheck = useCallback(() => {\n queueOverflowCheck(checkOverflow);\n }, [checkOverflow]);\n\n // Text can change its overflow without changing the observed box size.\n const measuredLabel = isLabelMeasured\n ? getMeasureKey(children, ownTitle)\n : undefined;\n const measuredDescription = isDescriptionMeasured\n ? getMeasureKey(description, ownTitle)\n : undefined;\n\n useEffect(() => {\n if (isAutoTooltipEnabled) {\n // Queued, not measured here. React 19 flushes a sync commit's passive\n // effects before the commit returns, so a verdict set from this effect\n // leaves that commit with an update pending — a nested update. A list\n // that commits each row on its own (ag-grid-react wraps every new row in\n // `flushSync`) then gains one per row, and React throws \"Maximum update\n // depth exceeded\" once the count passes 50. The queued check runs after\n // the commit and still before paint. The callback refs have usually\n // queued it already, so this call is absorbed. It matters when what is\n // measured changes without a node re-attaching — the description stops\n // being a string, say, while the label stays.\n scheduleOverflowCheck();\n\n return;\n }\n\n // Clearing here rather than in the callback ref, which cannot be trusted\n // to do it. Flipping `isAutoTooltipEnabled` changes the ref's identity, so\n // React detaches with the PREVIOUS callback — the one that still believes\n // auto tooltips are on, and therefore keeps the last verdict — and only\n // attaches the new one if the label still exists. When `children` stops\n // being a string the label unmounts, so the new callback never runs and a\n // stale verdict would keep an auto tooltip mounted over content that is no\n // longer text. That is the default `Button` path, where `tooltip` is `true`.\n setVerdict('none');\n }, [\n isAutoTooltipEnabled,\n isLabelMeasured,\n isDescriptionMeasured,\n measuredLabel,\n measuredDescription,\n scheduleOverflowCheck,\n setVerdict,\n ]);\n\n // The callback refs own the observer: React hands them `null` when a node\n // goes away. Effect cleanup must not discard nodes still owned by refs:\n // reconnecting effects would otherwise strand queued measurements. Let\n // attachment/detachment update observer ownership symmetrically.\n const attachMeasuredNode = useCallback(\n (part: 'label' | 'description', element: HTMLElement | null) => {\n const measured = measuredRef.current;\n\n const previous = measured[part];\n measured[part] = element;\n\n if (\n previous &&\n previous !== measured.label &&\n previous !== measured.description\n ) {\n const checks = overflowChecksByNode.get(previous);\n checks?.delete(checkOverflow);\n if (!checks?.size) overflowChecksByNode.delete(previous);\n }\n if (element) {\n const checks = overflowChecksByNode.get(element) ?? new Set();\n checks.add(checkOverflow);\n overflowChecksByNode.set(element, checks);\n }\n\n // The observer covers every later size change.\n observeMeasuredNodes(measured, checkOverflow);\n\n // No node to measure. Leave the previous verdict alone rather than\n // clearing it: a consumer whose callback ref is new on every render has\n // React detach and re-attach it within one commit, and clearing here\n // would undo the measurement the re-attached node is about to repeat.\n if (!element) return;\n\n // Do NOT measure synchronously here — see `scheduleOverflowCheck`. This\n // covers the node the ref just handed us.\n scheduleOverflowCheck();\n },\n [checkOverflow, scheduleOverflowCheck],\n );\n\n const handleLabelElementRef = useCallback(\n (element: HTMLElement | null) => {\n // Notify the external refs\n assignRef(externalLabelRef, element);\n assignRef(labelRefOption, element);\n\n attachMeasuredNode('label', isLabelMeasured ? element : null);\n },\n [externalLabelRef, labelRefOption, isLabelMeasured, attachMeasuredNode],\n );\n\n const handleDescriptionElementRef = useCallback(\n (element: HTMLElement | null) => {\n assignRef(descriptionRefOption, element);\n\n attachMeasuredNode('description', isDescriptionMeasured ? element : null);\n },\n [descriptionRefOption, isDescriptionMeasured, attachMeasuredNode],\n );\n\n const { ref: _labelPropsRef, ...finalLabelProps } = labelProps || {};\n\n // Resolved once so that both the rendering below and `isTooltipActive` speak\n // about the same tooltip.\n const resolvedTooltip = resolveTooltip({\n tooltip,\n children,\n description,\n labelProps,\n truncation,\n });\n\n /** Whether a tooltip is rendered and able to open. */\n const isTooltipActive =\n !!resolvedTooltip && resolvedTooltip.isDisabled !== true;\n\n // The element's tooltip trigger. While a tooltip exists, the element gets\n // forwarders to the handlers of the tooltip layer mounted beside it.\n const triggerRef = useRef<HTMLElement>(null!);\n const handlersRef = useRef<TriggerHandlers | null>(null);\n const describedByRef = useRef<string | undefined>(undefined);\n const [describedBy, setDescribedBy] = useState<string>();\n\n // Sets the id only when it changes, as `setVerdict` does: from a layout\n // effect inside a commit, even an unchanged `setState` can queue a render.\n const updateDescribedBy = (id: string | undefined) => {\n if (describedByRef.current === id) return;\n\n describedByRef.current = id;\n setDescribedBy(id);\n };\n\n /**\n * Renders the element and, beside it, its tooltip.\n *\n * The element keeps its place in the tree whether or not a tooltip exists,\n * so the tooltip coming or going never remounts it. Wrapping the element in\n * `TooltipProvider` only while a tooltip existed changed the element type\n * above it: a button whose label started truncating lost its node and its\n * focus.\n */\n const renderWithTooltip = (\n renderElement: (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ) => ReactNode,\n defaultTooltipPlacement: PositionProps['placement'],\n ) => {\n if (!resolvedTooltip) {\n return (\n <>\n {renderElement()}\n {null}\n </>\n );\n }\n\n const {\n title,\n tooltipStyles,\n width,\n qa,\n placement,\n isDisabled,\n targetRef,\n ...triggerOptions\n } = resolvedTooltip;\n // A caller that positions the tooltip against an element of its own (the\n // `Layout.Header` title) passes that ref, and the element gets it too.\n const anchorRef = targetRef ?? triggerRef;\n\n const forwardedProps: Record<string, unknown> = {\n 'aria-describedby': describedBy,\n };\n\n for (const name of getTriggerHandlerNames()) {\n forwardedProps[name] = (event: SyntheticEvent) =>\n handlersRef.current?.[name]?.(event);\n }\n\n return (\n <>\n {renderElement(forwardedProps, anchorRef)}\n <AutoTooltipLayer\n options={{ ...triggerOptions, isDisabled, targetRef: anchorRef }}\n tooltip={createProviderTooltip({\n title,\n tooltipStyles,\n width,\n qa,\n isDisabled,\n })}\n placement={placement ?? defaultTooltipPlacement}\n handlersRef={handlersRef}\n onDescribedByChange={updateDescribedBy}\n />\n </>\n );\n };\n\n return {\n labelRef: handleLabelElementRef,\n descriptionRef: handleDescriptionElementRef,\n labelProps: finalLabelProps,\n isOverflowed: truncation !== 'none',\n isAutoTooltipEnabled,\n hasTooltip: !!tooltip,\n isTooltipActive,\n renderWithTooltip,\n scheduleOverflowCheck,\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, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|