@cube-dev/ui-kit 0.208.0 → 0.209.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +14 -0
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +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.js +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 +15 -1
- package/docs/components/actions/Button.md +45 -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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
@@ -15,9 +15,10 @@ import { IconSwitch } from "../../helpers/IconSwitch/IconSwitch.js";
|
|
|
15
15
|
import { useIsFirstRender } from "../../../_internal/hooks/use-is-first-render.js";
|
|
16
16
|
import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
|
|
17
17
|
import { useButtonSplitContext } from "../ButtonSplit/context.js";
|
|
18
|
+
import { AutoCollapseObserver } from "./AutoCollapseObserver.js";
|
|
18
19
|
import { CONTAINER_STYLES, TEXT_STYLES, mergeStyles, tasty } from "@tenphi/tasty";
|
|
19
20
|
import { Children, forwardRef, isValidElement, useMemo, useRef, useState } from "react";
|
|
20
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
21
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
21
22
|
//#region src/components/actions/Button/Button.tsx
|
|
22
23
|
const BUTTON_SIZE_VALUES = [
|
|
23
24
|
"xsmall",
|
|
@@ -63,10 +64,12 @@ const DEFAULT_BUTTON_STYLES = {
|
|
|
63
64
|
"raw-children & !has-icons": "$block-padding $inline-padding $block-padding $inline-padding",
|
|
64
65
|
"type=link": "0"
|
|
65
66
|
},
|
|
67
|
+
"@collapsed": "collapsed",
|
|
66
68
|
width: {
|
|
67
|
-
|
|
69
|
+
_: "min $size",
|
|
68
70
|
"has-icon & has-right-icon": "min ($size * 2 - 2bw)",
|
|
69
71
|
"single-icon": "fixed $size",
|
|
72
|
+
"collapse=icon & @collapsed & !has-right-icon": "fixed $size",
|
|
70
73
|
"type=link": "min 1ch"
|
|
71
74
|
},
|
|
72
75
|
height: {
|
|
@@ -155,12 +158,30 @@ const DEFAULT_BUTTON_STYLES = {
|
|
|
155
158
|
whiteSpace: "nowrap",
|
|
156
159
|
overflow: "hidden",
|
|
157
160
|
textOverflow: "ellipsis",
|
|
158
|
-
width:
|
|
161
|
+
width: {
|
|
162
|
+
_: "0 100%",
|
|
163
|
+
"collapse=icon & @collapsed": "fixed 0px"
|
|
164
|
+
},
|
|
159
165
|
textAlign: "center",
|
|
160
166
|
transition: "theme, padding",
|
|
161
167
|
padding: {
|
|
162
|
-
|
|
163
|
-
"type=link": "0"
|
|
168
|
+
_: "$block-padding $right-padding $block-padding $left-padding",
|
|
169
|
+
"type=link": "0",
|
|
170
|
+
"collapse=icon & @collapsed": 0
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
FullLabel: {
|
|
174
|
+
$: "> Label >",
|
|
175
|
+
hide: {
|
|
176
|
+
"": false,
|
|
177
|
+
"@collapsed": true
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
ShortLabel: {
|
|
181
|
+
$: "> Label >",
|
|
182
|
+
display: {
|
|
183
|
+
_: "none",
|
|
184
|
+
"@collapsed": "inline"
|
|
164
185
|
}
|
|
165
186
|
}
|
|
166
187
|
};
|
|
@@ -206,7 +227,7 @@ const ButtonElement = tasty({
|
|
|
206
227
|
});
|
|
207
228
|
const Button = forwardRef(function Button(allProps, ref) {
|
|
208
229
|
const splitContext = useButtonSplitContext();
|
|
209
|
-
let { type, size: sizeProp, shape, label, children, theme = splitContext?.theme ?? "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", onPress: userOnPress, tokens, ...props } = allProps;
|
|
230
|
+
let { type, size: sizeProp, shape, label, children, theme = splitContext?.theme ?? "default", icon: iconProp, rightIcon: rightIconProp, mods, download, tooltip = true, defaultTooltipPlacement = "top", onPress: userOnPress, tokens, collapseState, isCollapsed, autoCollapse, shortLabel, ...props } = allProps;
|
|
210
231
|
type = type ?? splitContext?.type;
|
|
211
232
|
const size = sizeProp ?? splitContext?.size ?? (type === "link" ? "inline" : "medium");
|
|
212
233
|
const isExplicitlyDisabled = splitContext?.isDisabled || props.isDisabled;
|
|
@@ -229,7 +250,12 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
229
250
|
onPress: wrappedOnPress,
|
|
230
251
|
...label ? { label } : {}
|
|
231
252
|
}, ref);
|
|
232
|
-
const
|
|
253
|
+
const collapseCondition = collapseState === true ? "@mobile" : collapseState || void 0;
|
|
254
|
+
const ownStyles = extractStyles(props, STYLE_PROPS);
|
|
255
|
+
const styles = collapseCondition ? {
|
|
256
|
+
"@collapsed": `collapsed | (${collapseCondition})`,
|
|
257
|
+
...ownStyles
|
|
258
|
+
} : ownStyles;
|
|
233
259
|
const isDisabledElement = actionProps.isDisabled;
|
|
234
260
|
delete actionProps.isDisabled;
|
|
235
261
|
const baseMods = useMemo(() => ({
|
|
@@ -268,6 +294,14 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
268
294
|
const singleIcon = !!((hasLeftIcon && !hasRightSlot || hasRightSlot && !hasLeftIcon) && !hasChildren);
|
|
269
295
|
const hasIcons = hasLeftIcon || hasRightSlot;
|
|
270
296
|
const rawChildren = !!(hasChildren && typeof children !== "string" && !Children.toArray(children).some((child) => typeof child === "string"));
|
|
297
|
+
const isCollapsible = !!collapseCondition || isCollapsed != null || !!autoCollapse;
|
|
298
|
+
const [isAutoCollapsed, setIsAutoCollapsed] = useState(false);
|
|
299
|
+
const isCollapsedByJs = !!isCollapsed || !!autoCollapse && isAutoCollapsed;
|
|
300
|
+
const collapse = !isCollapsible || !hasChildren || rawChildren ? void 0 : shortLabel != null ? "label" : hasLeftSlot ? "icon" : void 0;
|
|
301
|
+
useWarn(isCollapsible && hasChildren && !collapse, {
|
|
302
|
+
key: ["button-nothing-to-collapse", rawChildren],
|
|
303
|
+
args: ["Button:", rawChildren ? "`collapseState`, `isCollapsed` and `autoCollapse` collapse only a text label; this button renders raw children." : "`collapseState`, `isCollapsed` or `autoCollapse` has nothing to collapse. Give the button an `icon` to collapse to, or a `shortLabel`."]
|
|
304
|
+
});
|
|
271
305
|
const [isIconShown, setIsIconShown] = useState(hasLeftIcon);
|
|
272
306
|
const [isRightIconShown, setIsRightIconShown] = useState(hasRightSlot);
|
|
273
307
|
const isFirstRender = useIsFirstRender();
|
|
@@ -281,7 +315,9 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
281
315
|
"single-icon": singleIcon,
|
|
282
316
|
"text-only": !!(hasChildren && typeof children === "string" && !hasIcons),
|
|
283
317
|
"raw-children": rawChildren,
|
|
284
|
-
"has-content": children != null
|
|
318
|
+
"has-content": children != null,
|
|
319
|
+
collapsed: isCollapsedByJs,
|
|
320
|
+
collapse
|
|
285
321
|
}), [
|
|
286
322
|
baseMods,
|
|
287
323
|
children,
|
|
@@ -292,9 +328,11 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
292
328
|
hasChildren,
|
|
293
329
|
rawChildren,
|
|
294
330
|
isIconShown,
|
|
295
|
-
isRightIconShown
|
|
331
|
+
isRightIconShown,
|
|
332
|
+
isCollapsedByJs,
|
|
333
|
+
collapse
|
|
296
334
|
]);
|
|
297
|
-
const { labelProps: finalLabelProps, labelRef, renderWithTooltip, isTooltipActive, isAutoTooltipEnabled } = useAutoTooltip({
|
|
335
|
+
const { labelProps: finalLabelProps, labelRef, renderWithTooltip, isTooltipActive, isAutoTooltipEnabled, isOverflowed } = useAutoTooltip({
|
|
298
336
|
tooltip,
|
|
299
337
|
children,
|
|
300
338
|
labelProps: void 0
|
|
@@ -362,7 +400,13 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
362
400
|
"data-element": "Label",
|
|
363
401
|
...finalLabelProps,
|
|
364
402
|
ref: labelRef,
|
|
365
|
-
children
|
|
403
|
+
children: collapse === "label" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
404
|
+
"data-element": "FullLabel",
|
|
405
|
+
children
|
|
406
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
407
|
+
"data-element": "ShortLabel",
|
|
408
|
+
children: shortLabel
|
|
409
|
+
})] }) : children
|
|
366
410
|
})),
|
|
367
411
|
/* @__PURE__ */ jsx(DisplayTransition, {
|
|
368
412
|
isShown: hasRightSlot,
|
|
@@ -378,7 +422,23 @@ const Button = forwardRef(function Button(allProps, ref) {
|
|
|
378
422
|
children: rightIcon
|
|
379
423
|
})
|
|
380
424
|
})
|
|
381
|
-
})
|
|
425
|
+
}),
|
|
426
|
+
autoCollapse ? /* @__PURE__ */ jsx(AutoCollapseObserver, {
|
|
427
|
+
targetRef: buttonElementRef,
|
|
428
|
+
contentKey: [
|
|
429
|
+
typeof children === "string" ? children : "",
|
|
430
|
+
typeof shortLabel === "string" ? shortLabel : "",
|
|
431
|
+
size,
|
|
432
|
+
collapse,
|
|
433
|
+
hasLeftSlot,
|
|
434
|
+
hasRightSlot,
|
|
435
|
+
isLoading,
|
|
436
|
+
isCollapsed,
|
|
437
|
+
collapseCondition
|
|
438
|
+
].join("|"),
|
|
439
|
+
isLabelCut: isOverflowed,
|
|
440
|
+
onChange: setIsAutoCollapsed
|
|
441
|
+
}) : null
|
|
382
442
|
]
|
|
383
443
|
});
|
|
384
444
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","names":["FocusableRef","PressEvent","CONTAINER_STYLES","mergeStyles","Mods","Styles","tasty","TEXT_STYLES","Children","forwardRef","HTMLAttributes","isValidElement","ReactNode","RefObject","useMemo","useRef","useState","Placement","useEvent","useIsFirstRender","useWarn","CURRENT_CLEAR_STYLES","CURRENT_LINK_STYLES","CURRENT_OUTLINE_2_STYLES","CURRENT_OUTLINE_STYLES","CURRENT_PRIMARY_STYLES","DANGER_CLEAR_STYLES","DANGER_LINK_STYLES","DANGER_OUTLINE_2_STYLES","DANGER_OUTLINE_STYLES","DANGER_PRIMARY_STYLES","DEFAULT_CLEAR_STYLES","DEFAULT_LINK_STYLES","DEFAULT_OUTLINE_2_STYLES","DEFAULT_OUTLINE_STYLES","DEFAULT_PRIMARY_STYLES","NOTE_CLEAR_STYLES","NOTE_LINK_STYLES","NOTE_OUTLINE_2_STYLES","NOTE_OUTLINE_STYLES","NOTE_PRIMARY_STYLES","SPECIAL_CLEAR_STYLES","SPECIAL_LINK_STYLES","SPECIAL_OUTLINE_STYLES","SPECIAL_PRIMARY_STYLES","SUCCESS_CLEAR_STYLES","SUCCESS_LINK_STYLES","SUCCESS_OUTLINE_2_STYLES","SUCCESS_OUTLINE_STYLES","SUCCESS_PRIMARY_STYLES","WARNING_CLEAR_STYLES","WARNING_LINK_STYLES","WARNING_OUTLINE_2_STYLES","WARNING_OUTLINE_STYLES","WARNING_PRIMARY_STYLES","LoadingIcon","getDisabledElementProps","omitActivationEventProps","mergeProps","DynamicIcon","resolveIcon","useDismissParentPopover","extractStyles","useAutoTooltip","DisplayTransition","IconSwitch","mergeTooltipFocusProps","CubeTooltipProviderProps","CubeActionProps","useButtonSplitContext","useAction","BUTTON_SIZE_VALUES","const","ButtonMods","pressed","loading","selected","CubeButtonProps","icon","rightIcon","isLoading","isSelected","type","theme","size","shape","tooltip","Omit","auto","defaultTooltipPlacement","ButtonVariant","STYLE_PROPS","DEFAULT_ICON_STYLES","$","position","display","placeItems","placeContent","placeSelf","width","height","pointerEvents","transition","DEFAULT_BUTTON_STYLES","recipe","flow","gap","preset","outlineOffset","padding","whiteSpace","radius","margin","zIndex","verticalAlign","$size","Icon","opacity","translate","RightIcon","Label","boxSizing","overflow","textOverflow","textAlign","ButtonElement","qa","styles","variants","Button","allProps","ref","HTMLElement","splitContext","sizeProp","label","children","iconProp","rightIconProp","mods","download","onPress","userOnPress","tokens","props","isExplicitlyDisabled","isDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","isPressed","isDisabledElement","baseMods","resolvedIcon","resolvedRightIcon","hasLeftSlot","hasSlot","hasRightSlot","content","iconKey","displayName","name","rightIconKey","specifiedLabel","key","args","hasLeftIcon","hasChildren","singleIcon","hasIcons","rawChildren","toArray","some","child","isIconShown","setIsIconShown","isRightIconShown","setIsRightIconShown","isFirstRender","modifiers","labelProps","finalLabelProps","labelRef","renderWithTooltip","isTooltipActive","isAutoTooltipEnabled","undefined","hasOwnTooltip","isOnlyLoading","isNativelyDisabled","isInert","inertProps","keepEvents","as","elementProps","renderButtonElement","tooltipTriggerProps","tooltipRef","handleRef","element","domRef","isCustomSize","includes","sizeTokenValue","effectiveType","ariaPressed","role","tabIndex"],"sources":["../../../../src/components/actions/Button/Button.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport {\n CONTAINER_STYLES,\n mergeStyles,\n Mods,\n Styles,\n tasty,\n TEXT_STYLES,\n} from '@tenphi/tasty';\nimport {\n Children,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n ReactNode,\n RefObject,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Placement } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { useIsFirstRender } from '../../../_internal/hooks/use-is-first-render';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport {\n CURRENT_CLEAR_STYLES,\n CURRENT_LINK_STYLES,\n CURRENT_OUTLINE_2_STYLES,\n CURRENT_OUTLINE_STYLES,\n CURRENT_PRIMARY_STYLES,\n DANGER_CLEAR_STYLES,\n DANGER_LINK_STYLES,\n DANGER_OUTLINE_2_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_OUTLINE_2_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_OUTLINE_2_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_OUTLINE_2_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_OUTLINE_2_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport {\n getDisabledElementProps,\n omitActivationEventProps,\n} from '../../../utils/react/disabledProps';\nimport { mergeProps } from '../../../utils/react/mergeProps';\nimport { DynamicIcon, resolveIcon } from '../../../utils/react/resolveIcon';\nimport { useDismissParentPopover } from '../../../utils/react/usePopoverSync';\nimport { extractStyles } from '../../../utils/styles';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition';\nimport { IconSwitch } from '../../helpers/IconSwitch/IconSwitch';\nimport { mergeTooltipFocusProps } from '../../overlays/Tooltip/split-trigger-props';\nimport { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\nimport { CubeActionProps } from '../Action/Action';\nimport { useButtonSplitContext } from '../ButtonSplit/context';\nimport { useAction } from '../use-action';\n\nconst BUTTON_SIZE_VALUES = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n 'inline',\n] as const;\n\n/** Known modifiers for Button component */\nexport type ButtonMods = Mods<{\n pressed?: boolean;\n loading?: boolean;\n selected?: boolean;\n 'has-icons'?: boolean;\n 'has-icon'?: boolean;\n 'has-right-icon'?: boolean;\n 'single-icon'?: boolean;\n 'text-only'?: boolean;\n 'raw-children'?: boolean;\n}>;\n\nexport interface CubeButtonProps extends CubeActionProps {\n icon?: DynamicIcon<ButtonMods>;\n rightIcon?: DynamicIcon<ButtonMods>;\n isLoading?: boolean;\n isSelected?: boolean;\n type?:\n | 'primary'\n | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'outline-2'\n | (string & {});\n theme?:\n | 'default'\n | 'danger'\n | 'success'\n | 'warning'\n | 'note'\n | 'special'\n | 'current'\n | (string & {});\n size?:\n | 'xsmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xlarge'\n | 'inline'\n | number\n | (string & {});\n /**\n * Corner shape, named as on `Item`:\n * - `button` - The button radius (`1r`, default)\n * - `card` - The card radius (`1cr`), for a button laid out as a card\n * - `sharp` - Square corners, for a button that fills a row or cell edge to edge\n * - `pill` - Fully rounded ends (`round`); a single-icon button becomes a circle\n *\n * A `link` button and the joined edges inside a `Button.Split` keep their own radius.\n */\n shape?: 'button' | 'card' | 'sharp' | 'pill';\n /**\n * Tooltip content and configuration:\n * - string: simple tooltip text\n * - true: auto tooltip on overflow (shows children as tooltip when truncated)\n * - object: advanced configuration with optional auto property\n */\n tooltip?:\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n /**\n * @private\n * Default tooltip placement for the button.\n * @default \"top\"\n */\n defaultTooltipPlacement?: Placement;\n}\n\nexport type ButtonVariant =\n // The `current` theme mixes every color from the inherited `currentcolor`\n // instead of a brand ramp — see the CURRENT THEME section of `item-themes`.\n | 'current.primary'\n | 'current.outline'\n | 'current.outline-2'\n | 'current.clear'\n | 'current.link'\n | 'default.primary'\n | 'default.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.outline'\n | 'special.clear'\n | 'special.link';\n\nconst STYLE_PROPS = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst DEFAULT_ICON_STYLES: Styles = {\n $: '>',\n position: 'relative',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n placeSelf: 'stretch',\n // overflow: 'hidden',\n width: 'fixed ($size - 2bw)',\n height: 'fixed ($size - 2bw)',\n pointerEvents: 'none',\n transition: 'theme, width, height, translate',\n};\n\nexport const DEFAULT_BUTTON_STYLES: Styles = {\n recipe: 'reset button',\n display: 'inline-grid',\n flow: 'column dense',\n gap: 0,\n placeItems: {\n '': 'stretch',\n 'raw-children': 'center stretch',\n },\n placeContent: 'center',\n position: 'relative',\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2m',\n 'type=link': 'strong',\n },\n outlineOffset: '$outline-offset',\n padding: {\n '': 0,\n 'raw-children & !has-icons':\n '$block-padding $inline-padding $block-padding $inline-padding',\n 'type=link': '0',\n },\n width: {\n '': 'min $size',\n 'has-icon & has-right-icon': 'min ($size * 2 - 2bw)',\n 'single-icon': 'fixed $size',\n 'type=link': 'min 1ch',\n },\n height: {\n '': 'fixed $size',\n 'type=link': 'initial',\n },\n whiteSpace: 'nowrap',\n radius: {\n '': true,\n 'shape=card': '1cr',\n 'shape=sharp': 0,\n 'shape=pill': 'round',\n 'type=link & !focused': 0,\n '@parent(button-split, >) & !:last-child': '1r left',\n '@parent(button-split, >) & !:first-child': '1r right',\n '@parent(button-split, >) & !:first-child & !:last-child': 0,\n },\n margin: {\n '': 0,\n // Outline halves overlap so their borders merge into one line. Primary halves\n // have no visible border, so a real gap divides them instead and shows\n // whatever is behind the split.\n '@parent(button-split, >) & !:first-child & (type=outline | type=outline-2)':\n '-1bw left',\n '@parent(button-split, >) & !:first-child & type=primary': '1bw left',\n },\n // oxlint-disable-next-line tasty/require-default-state -- outside a ButtonSplit the button sets no z-index, so the consumer's stacking applies\n zIndex: {\n '@parent(button-split, >) & :hover': 1,\n '@parent(button-split, >) & :focus-visible': 2,\n },\n transition: 'theme, grid-template, padding',\n verticalAlign: 'bottom',\n\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n 'size=inline': '(1lh + 2bw)',\n },\n '$inline-padding': {\n '': 'max($min-inline-padding, (($size - 1lh - 2bw) / 2 + $inline-compensation))',\n },\n '$block-padding': {\n '': '.5x',\n 'size=xsmall | size=small': '.25x',\n },\n '$inline-compensation': '.5x',\n '$min-inline-padding': '(1x - 1bw)',\n '$left-padding': {\n '': '$inline-padding',\n 'is-icon-shown': '0px',\n },\n '$right-padding': {\n '': '$inline-padding',\n 'is-right-icon-shown': '0px',\n },\n\n // Icon sub-element (recommended format)\n Icon: mergeStyles(DEFAULT_ICON_STYLES, {\n width: {\n '': 'fixed 0px',\n 'is-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-icon-shown': 1,\n },\n translate: {\n '': '($size * 1 / 4) 0',\n 'is-icon-shown': '0 0',\n },\n }),\n\n // RightIcon sub-element (recommended format)\n RightIcon: mergeStyles(DEFAULT_ICON_STYLES, {\n width: {\n '': 'fixed 0px',\n 'is-right-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-right-icon-shown': 1,\n },\n translate: {\n '': '($size * -1 / 4) 0',\n 'is-right-icon-shown': '0 0',\n },\n }),\n\n // Label sub-element (recommended format)\n Label: {\n $: '>',\n display: 'block',\n placeSelf: 'center stretch',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n width: '0 100%',\n textAlign: 'center',\n transition: 'theme, padding',\n padding: {\n '': '$block-padding $right-padding $block-padding $left-padding',\n 'type=link': '0',\n },\n },\n} as const;\n\nconst ButtonElement = tasty({\n qa: 'Button',\n styles: DEFAULT_BUTTON_STYLES,\n variants: {\n // Current theme — colors mixed from the inherited `currentcolor`\n 'current.primary': CURRENT_PRIMARY_STYLES,\n 'current.outline': CURRENT_OUTLINE_STYLES,\n 'current.outline-2': CURRENT_OUTLINE_2_STYLES,\n 'current.clear': CURRENT_CLEAR_STYLES,\n 'current.link': CURRENT_LINK_STYLES,\n\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n },\n});\n\nexport const Button = forwardRef(function Button(\n allProps: CubeButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const splitContext = useButtonSplitContext();\n\n let {\n type,\n size: sizeProp,\n shape,\n label,\n children,\n theme = splitContext?.theme ?? 'default',\n icon: iconProp,\n rightIcon: rightIconProp,\n mods,\n download,\n tooltip = true,\n defaultTooltipPlacement = 'top',\n onPress: userOnPress,\n tokens,\n ...props\n } = allProps;\n\n type = type ?? splitContext?.type;\n const size =\n sizeProp ?? splitContext?.size ?? (type === 'link' ? 'inline' : 'medium');\n\n const isExplicitlyDisabled = splitContext?.isDisabled || props.isDisabled;\n const isDisabled = isExplicitlyDisabled || props.isLoading;\n const isLoading = props.isLoading;\n const isSelected = props.isSelected;\n\n // Default: pressing a Button inside an open popover closes that popover.\n // Opt-outs (handled inline below):\n // - `data-popover-trigger` (auto, applied by MenuTrigger/DialogTrigger\n // type='popover' so triggers don't dismiss the popover they live in)\n // - `data-popover-keep` on self or any ancestor (manual opt-out for\n // toggles, custom inline editors, etc.)\n // - `data-popover-keep-on-press` on self or any ancestor: the same opt-out\n // for presses only. Unlike `data-popover-keep`, it does not stop a click\n // in the subtree from closing a nested popover (a field's listbox).\n // Modals/trays don't subscribe at all, so this is a no-op there.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n userOnPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep], [data-popover-keep-on-press]')) {\n return;\n }\n dismissParentPopover(el);\n });\n\n const { actionProps, isPressed } = useAction(\n {\n ...allProps,\n isDisabled,\n onPress: wrappedOnPress,\n ...(label ? { label } : {}),\n },\n ref,\n );\n\n const styles = extractStyles(props, STYLE_PROPS);\n const isDisabledElement = actionProps.isDisabled;\n\n delete actionProps.isDisabled;\n\n // Base mods for icon resolution (without icon-dependent mods)\n const baseMods = useMemo<ButtonMods>(\n () => ({\n pressed: isPressed && !isDisabled,\n loading: isLoading,\n selected: isSelected,\n ...mods,\n }),\n [isPressed, isDisabled, isLoading, isSelected, mods],\n );\n\n // Resolve dynamic icon props\n const resolvedIcon = useMemo(\n () => resolveIcon(iconProp, baseMods),\n [iconProp, baseMods],\n );\n const resolvedRightIcon = useMemo(\n () => resolveIcon(rightIconProp, baseMods),\n [rightIconProp, baseMods],\n );\n\n const hasLeftSlot = resolvedIcon.hasSlot;\n const hasRightSlot = resolvedRightIcon.hasSlot;\n\n const icon: ReactNode = resolvedIcon.content;\n const rightIcon: ReactNode = resolvedRightIcon.content;\n\n // Generate stable keys for icon transitions based on icon type\n const iconKey = isLoading\n ? 'loading'\n : isValidElement(icon)\n ? (icon.type as any)?.displayName || (icon.type as any)?.name || 'icon'\n : icon\n ? 'icon'\n : 'empty';\n\n const rightIconKey = isValidElement(rightIcon)\n ? (rightIcon.type as any)?.displayName ||\n (rightIcon.type as any)?.name ||\n 'icon'\n : rightIcon\n ? 'icon'\n : 'empty';\n\n children = children || hasLeftSlot || hasRightSlot ? children : label;\n\n const specifiedLabel =\n label ?? props['aria-label'] ?? props['aria-labelledby'];\n\n // Warn about accessibility issues when button has no accessible label\n useWarn(!children && hasLeftSlot && !specifiedLabel, {\n key: ['button-icon-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide `icon` property for a Button and do not provide any children then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n useWarn(!children && !hasLeftSlot && !specifiedLabel, {\n key: ['button-no-content-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide no children for a Button then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n if (!children && !specifiedLabel) {\n label = 'Unnamed'; // fix to avoid warning in production\n }\n\n const hasLeftIcon = !!(hasLeftSlot || isLoading);\n const hasChildren = children != null;\n const singleIcon = !!(\n ((hasLeftIcon && !hasRightSlot) || (hasRightSlot && !hasLeftIcon)) &&\n !hasChildren\n );\n\n const hasIcons = hasLeftIcon || hasRightSlot;\n const rawChildren = !!(\n hasChildren &&\n typeof children !== 'string' &&\n !Children.toArray(children).some((child) => typeof child === 'string')\n );\n\n const [isIconShown, setIsIconShown] = useState(hasLeftIcon);\n const [isRightIconShown, setIsRightIconShown] = useState(hasRightSlot);\n const isFirstRender = useIsFirstRender();\n\n const modifiers = useMemo<ButtonMods>(\n () => ({\n ...baseMods,\n 'has-icons': hasIcons,\n 'has-icon': hasLeftIcon,\n 'is-icon-shown': isIconShown,\n 'has-right-icon': hasRightSlot,\n 'is-right-icon-shown': isRightIconShown,\n 'single-icon': singleIcon,\n 'text-only': !!(hasChildren && typeof children === 'string' && !hasIcons),\n 'raw-children': rawChildren,\n 'has-content': children != null,\n }),\n [\n baseMods,\n children,\n hasLeftIcon,\n hasRightSlot,\n singleIcon,\n hasIcons,\n hasChildren,\n rawChildren,\n isIconShown,\n isRightIconShown,\n ],\n );\n\n const {\n labelProps: finalLabelProps,\n labelRef,\n renderWithTooltip,\n isTooltipActive,\n isAutoTooltipEnabled,\n } = useAutoTooltip({\n tooltip,\n children,\n labelProps: undefined,\n });\n\n // A tooltip the caller wrote, as opposed to the automatic one that shows a\n // label cut off by the layout.\n const hasOwnTooltip = isTooltipActive && !isAutoTooltipEnabled;\n // Loading without being disabled: busy, but not unavailable.\n const isOnlyLoading = !!isLoading && !isExplicitlyDisabled;\n\n // A disabled button still has to be able to show its tooltip — that is\n // usually where the reason for being unavailable is written. The native\n // `disabled` attribute would make the browser drop the hover that opens it,\n // so when a tooltip is present the button is marked `aria-disabled` and kept\n // inert instead. Only the caller's tooltip counts: the automatic one turns\n // on with the layout, and would make the button a Tab stop only while its\n // label is cut off.\n //\n // A button that is only loading keeps the focus it has, so a keyboard press\n // that starts the work does not drop it to the page, but Tab skips it, as it\n // would a disabled one, unless the caller's tooltip is there to be read. One\n // that is also `isDisabled` stays natively disabled: `SubmitButton` sets both\n // while a submission runs, and the frozen legacy Form contract pins that\n // button as `disabled`.\n //\n // The attribute is skipped for links too, where it is not valid markup and\n // `aria-disabled` is the only thing announcing the state.\n const { isNativelyDisabled, isInert, inertProps } = getDisabledElementProps({\n isDisabled: isDisabledElement,\n keepEvents: hasOwnTooltip || isOnlyLoading,\n as: typeof actionProps.as === 'string' ? actionProps.as : undefined,\n });\n\n // Without the native attribute, handlers a parent passed in (a `MenuTrigger`'s\n // `onKeyDown`) would still activate the button.\n const elementProps = isInert\n ? omitActivationEventProps(actionProps)\n : actionProps;\n\n // Render function that creates the button element\n const renderButtonElement = (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ): ReactNode => {\n // Use callback ref to merge multiple refs without calling hooks\n const handleRef = (element: HTMLElement | null) => {\n // Set the component's forwarded ref from useAction\n const domRef = actionProps.ref as any;\n if (typeof domRef === 'function') {\n domRef(element);\n } else if (domRef) {\n domRef.current = element;\n }\n // Set the tooltip ref if provided\n if (tooltipRef) {\n (tooltipRef as any).current = element;\n }\n // Track the rendered DOM node so the dismiss wrapper around `onPress`\n // can read it synchronously without coupling to `useAction`'s ref shape.\n buttonElementRef.current = element;\n };\n\n // Determine if size is custom (number or unrecognized string)\n const isCustomSize =\n typeof size === 'number' ||\n (size != null &&\n !(BUTTON_SIZE_VALUES as readonly string[]).includes(size));\n const sizeTokenValue =\n typeof size === 'number' ? `${size}px` : isCustomSize ? size : undefined;\n\n // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to\n // `outline` so the button still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\n\n // `isSelected` is a toggle state, so mirror it into `aria-pressed` — the\n // behaviour Button.docs.mdx has always described. An explicit\n // `aria-pressed` from the call site still wins.\n //\n // Skipped when the button renders as a link (`to`), where `aria-pressed` is\n // not a valid attribute, and when the call site sets its own `role` — a\n // button acting as a tab or an option needs `aria-selected`/`aria-current`\n // instead, and only the call site knows which.\n //\n // Applied *after* the spread: react-aria's `useButton` always returns an\n // `aria-pressed` key (undefined when the caller passed none), so anything\n // set before the spread is overwritten by it.\n const ariaPressed =\n allProps['aria-pressed'] ??\n (isSelected != null && actionProps.as !== 'a' && allProps.role == null\n ? isSelected\n : undefined);\n\n return (\n <ButtonElement\n download={download}\n aria-busy={isLoading || undefined}\n // The tooltip joins the button's own description rather than\n // replacing it while open.\n {...mergeProps(\n mergeTooltipFocusProps(elementProps, tooltipTriggerProps),\n inertProps,\n )}\n {...(isOnlyLoading && !hasOwnTooltip ? { tabIndex: -1 } : null)}\n aria-pressed={ariaPressed}\n ref={handleRef}\n mods={{ ...actionProps.mods, ...modifiers }}\n disabled={isNativelyDisabled}\n variant={`${theme}.${effectiveType ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={effectiveType ?? 'outline'}\n data-size={size}\n data-shape={shape === 'button' ? undefined : shape}\n data-popover-dismiss=\"\"\n styles={styles}\n tokens={{\n ...tokens,\n ...(sizeTokenValue ? { $size: sizeTokenValue } : {}),\n }}\n >\n <DisplayTransition\n isShown={hasLeftIcon}\n animateOnMount={!isFirstRender}\n onToggle={setIsIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"Icon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={iconKey}>\n {isLoading ? <LoadingIcon /> : icon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n {hasChildren &&\n (rawChildren ? (\n children\n ) : (\n <div data-element=\"Label\" {...finalLabelProps} ref={labelRef}>\n {children}\n </div>\n ))}\n <DisplayTransition\n isShown={hasRightSlot}\n animateOnMount={!isFirstRender}\n onToggle={setIsRightIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"RightIcon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={rightIconKey}>\n {rightIcon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n </ButtonElement>\n );\n };\n\n return renderWithTooltip(renderButtonElement, defaultTooltipPlacement);\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button.js","names":["FocusableRef","PressEvent","CONTAINER_STYLES","mergeStyles","Mods","Styles","tasty","TEXT_STYLES","Children","forwardRef","HTMLAttributes","isValidElement","ReactNode","RefObject","useMemo","useRef","useState","Placement","useEvent","useIsFirstRender","useWarn","CURRENT_CLEAR_STYLES","CURRENT_LINK_STYLES","CURRENT_OUTLINE_2_STYLES","CURRENT_OUTLINE_STYLES","CURRENT_PRIMARY_STYLES","DANGER_CLEAR_STYLES","DANGER_LINK_STYLES","DANGER_OUTLINE_2_STYLES","DANGER_OUTLINE_STYLES","DANGER_PRIMARY_STYLES","DEFAULT_CLEAR_STYLES","DEFAULT_LINK_STYLES","DEFAULT_OUTLINE_2_STYLES","DEFAULT_OUTLINE_STYLES","DEFAULT_PRIMARY_STYLES","NOTE_CLEAR_STYLES","NOTE_LINK_STYLES","NOTE_OUTLINE_2_STYLES","NOTE_OUTLINE_STYLES","NOTE_PRIMARY_STYLES","SPECIAL_CLEAR_STYLES","SPECIAL_LINK_STYLES","SPECIAL_OUTLINE_STYLES","SPECIAL_PRIMARY_STYLES","SUCCESS_CLEAR_STYLES","SUCCESS_LINK_STYLES","SUCCESS_OUTLINE_2_STYLES","SUCCESS_OUTLINE_STYLES","SUCCESS_PRIMARY_STYLES","WARNING_CLEAR_STYLES","WARNING_LINK_STYLES","WARNING_OUTLINE_2_STYLES","WARNING_OUTLINE_STYLES","WARNING_PRIMARY_STYLES","LoadingIcon","getDisabledElementProps","omitActivationEventProps","mergeProps","DynamicIcon","resolveIcon","useDismissParentPopover","extractStyles","useAutoTooltip","DisplayTransition","IconSwitch","mergeTooltipFocusProps","CubeTooltipProviderProps","CubeActionProps","useButtonSplitContext","useAction","AutoCollapseObserver","BUTTON_SIZE_VALUES","const","ButtonMods","pressed","loading","selected","collapsed","collapse","CubeButtonProps","icon","rightIcon","isLoading","isSelected","type","theme","size","shape","collapseState","isCollapsed","autoCollapse","shortLabel","tooltip","Omit","auto","defaultTooltipPlacement","ButtonVariant","STYLE_PROPS","DEFAULT_ICON_STYLES","$","position","display","placeItems","placeContent","placeSelf","width","height","pointerEvents","transition","DEFAULT_BUTTON_STYLES","recipe","flow","gap","preset","outlineOffset","padding","_","whiteSpace","radius","margin","zIndex","verticalAlign","$size","Icon","opacity","translate","RightIcon","Label","boxSizing","overflow","textOverflow","textAlign","FullLabel","hide","ShortLabel","ButtonElement","qa","styles","variants","Button","allProps","ref","HTMLElement","splitContext","sizeProp","label","children","iconProp","rightIconProp","mods","download","onPress","userOnPress","tokens","props","isExplicitlyDisabled","isDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","isPressed","collapseCondition","undefined","ownStyles","isDisabledElement","baseMods","resolvedIcon","resolvedRightIcon","hasLeftSlot","hasSlot","hasRightSlot","content","iconKey","displayName","name","rightIconKey","specifiedLabel","key","args","hasLeftIcon","hasChildren","singleIcon","hasIcons","rawChildren","toArray","some","child","isCollapsible","isAutoCollapsed","setIsAutoCollapsed","isCollapsedByJs","isIconShown","setIsIconShown","isRightIconShown","setIsRightIconShown","isFirstRender","modifiers","labelProps","finalLabelProps","labelRef","renderWithTooltip","isTooltipActive","isAutoTooltipEnabled","isOverflowed","hasOwnTooltip","isOnlyLoading","isNativelyDisabled","isInert","inertProps","keepEvents","as","elementProps","renderButtonElement","tooltipTriggerProps","tooltipRef","handleRef","element","domRef","isCustomSize","includes","sizeTokenValue","effectiveType","ariaPressed","role","tabIndex","join"],"sources":["../../../../src/components/actions/Button/Button.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport {\n CONTAINER_STYLES,\n mergeStyles,\n Mods,\n Styles,\n tasty,\n TEXT_STYLES,\n} from '@tenphi/tasty';\nimport {\n Children,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n ReactNode,\n RefObject,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Placement } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { useIsFirstRender } from '../../../_internal/hooks/use-is-first-render';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport {\n CURRENT_CLEAR_STYLES,\n CURRENT_LINK_STYLES,\n CURRENT_OUTLINE_2_STYLES,\n CURRENT_OUTLINE_STYLES,\n CURRENT_PRIMARY_STYLES,\n DANGER_CLEAR_STYLES,\n DANGER_LINK_STYLES,\n DANGER_OUTLINE_2_STYLES,\n DANGER_OUTLINE_STYLES,\n DANGER_PRIMARY_STYLES,\n DEFAULT_CLEAR_STYLES,\n DEFAULT_LINK_STYLES,\n DEFAULT_OUTLINE_2_STYLES,\n DEFAULT_OUTLINE_STYLES,\n DEFAULT_PRIMARY_STYLES,\n NOTE_CLEAR_STYLES,\n NOTE_LINK_STYLES,\n NOTE_OUTLINE_2_STYLES,\n NOTE_OUTLINE_STYLES,\n NOTE_PRIMARY_STYLES,\n SPECIAL_CLEAR_STYLES,\n SPECIAL_LINK_STYLES,\n SPECIAL_OUTLINE_STYLES,\n SPECIAL_PRIMARY_STYLES,\n SUCCESS_CLEAR_STYLES,\n SUCCESS_LINK_STYLES,\n SUCCESS_OUTLINE_2_STYLES,\n SUCCESS_OUTLINE_STYLES,\n SUCCESS_PRIMARY_STYLES,\n WARNING_CLEAR_STYLES,\n WARNING_LINK_STYLES,\n WARNING_OUTLINE_2_STYLES,\n WARNING_OUTLINE_STYLES,\n WARNING_PRIMARY_STYLES,\n} from '../../../data/item-themes';\nimport { LoadingIcon } from '../../../icons/LoadingIcon';\nimport {\n getDisabledElementProps,\n omitActivationEventProps,\n} from '../../../utils/react/disabledProps';\nimport { mergeProps } from '../../../utils/react/mergeProps';\nimport { DynamicIcon, resolveIcon } from '../../../utils/react/resolveIcon';\nimport { useDismissParentPopover } from '../../../utils/react/usePopoverSync';\nimport { extractStyles } from '../../../utils/styles';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport { DisplayTransition } from '../../helpers/DisplayTransition/DisplayTransition';\nimport { IconSwitch } from '../../helpers/IconSwitch/IconSwitch';\nimport { mergeTooltipFocusProps } from '../../overlays/Tooltip/split-trigger-props';\nimport { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\nimport { CubeActionProps } from '../Action/Action';\nimport { useButtonSplitContext } from '../ButtonSplit/context';\nimport { useAction } from '../use-action';\n\nimport { AutoCollapseObserver } from './AutoCollapseObserver';\n\nconst BUTTON_SIZE_VALUES = [\n 'xsmall',\n 'small',\n 'medium',\n 'large',\n 'xlarge',\n 'inline',\n] as const;\n\n/** Known modifiers for Button component */\nexport type ButtonMods = Mods<{\n pressed?: boolean;\n loading?: boolean;\n selected?: boolean;\n 'has-icons'?: boolean;\n 'has-icon'?: boolean;\n 'has-right-icon'?: boolean;\n 'single-icon'?: boolean;\n 'text-only'?: boolean;\n 'raw-children'?: boolean;\n /**\n * Collapsed by `isCollapsed` or `autoCollapse`; `collapseState` collapses\n * through CSS instead.\n */\n collapsed?: boolean;\n /** What a collapsing button collapses to: its icon, or its `shortLabel`. */\n collapse?: 'icon' | 'label';\n}>;\n\nexport interface CubeButtonProps extends CubeActionProps {\n icon?: DynamicIcon<ButtonMods>;\n rightIcon?: DynamicIcon<ButtonMods>;\n isLoading?: boolean;\n isSelected?: boolean;\n type?:\n | 'primary'\n | 'danger'\n | 'link'\n | 'clear'\n | 'outline'\n | 'outline-2'\n | (string & {});\n theme?:\n | 'default'\n | 'danger'\n | 'success'\n | 'warning'\n | 'note'\n | 'special'\n | 'current'\n | (string & {});\n size?:\n | 'xsmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xlarge'\n | 'inline'\n | number\n | (string & {});\n /**\n * Corner shape, named as on `Item`:\n * - `button` - The button radius (`1r`, default)\n * - `card` - The card radius (`1cr`), for a button laid out as a card\n * - `sharp` - Square corners, for a button that fills a row or cell edge to edge\n * - `pill` - Fully rounded ends (`round`); a single-icon button becomes a circle\n *\n * A `link` button and the joined edges inside a `Button.Split` keep their own radius.\n */\n shape?: 'button' | 'card' | 'sharp' | 'pill';\n /**\n * When the button collapses, so it fits a narrow window or container:\n * - `true` - On `@mobile`, a viewport narrower than 920px\n * - a string - Any state or condition, such as `'@compact'`,\n * `'@(page, w < 864px)'` or `'@media(w < 600px)'`. A container condition\n * needs that container around the button.\n *\n * Collapsed, a button with an icon shows only the icon: its label stays its\n * accessible name and shows as its tooltip. A `shortLabel` replaces the label\n * instead. The button collapses when any of `collapseState`, `isCollapsed`\n * and `autoCollapse` says so.\n */\n collapseState?: boolean | string;\n /**\n * Collapses the button from JavaScript, as `collapseState` does from CSS.\n */\n isCollapsed?: boolean;\n /**\n * Collapses the button when the row it sits in, its parent element, can't\n * fit every child at full width, and expands it when the row can. It\n * follows the real width of the labels, so it holds in every locale. The\n * row's width has to come from its own container: a row as wide as its\n * content always fits.\n */\n autoCollapse?: boolean;\n /**\n * The label shown while the button is collapsed, beside its icon if it has\n * one. Without it, a collapsed button shows only its icon.\n */\n shortLabel?: ReactNode;\n /**\n * Tooltip content and configuration:\n * - string: simple tooltip text\n * - true: auto tooltip on overflow (shows children as tooltip when truncated)\n * - object: advanced configuration with optional auto property\n */\n tooltip?:\n | string\n | boolean\n | (Omit<CubeTooltipProviderProps, 'children'> & { auto?: boolean });\n /**\n * @private\n * Default tooltip placement for the button.\n * @default \"top\"\n */\n defaultTooltipPlacement?: Placement;\n}\n\nexport type ButtonVariant =\n // The `current` theme mixes every color from the inherited `currentcolor`\n // instead of a brand ramp — see the CURRENT THEME section of `item-themes`.\n | 'current.primary'\n | 'current.outline'\n | 'current.outline-2'\n | 'current.clear'\n | 'current.link'\n | 'default.primary'\n | 'default.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'special.primary'\n | 'special.outline'\n | 'special.clear'\n | 'special.link';\n\nconst STYLE_PROPS = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst DEFAULT_ICON_STYLES: Styles = {\n $: '>',\n position: 'relative',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n placeSelf: 'stretch',\n // overflow: 'hidden',\n width: 'fixed ($size - 2bw)',\n height: 'fixed ($size - 2bw)',\n pointerEvents: 'none',\n transition: 'theme, width, height, translate',\n};\n\nexport const DEFAULT_BUTTON_STYLES: Styles = {\n recipe: 'reset button',\n display: 'inline-grid',\n flow: 'column dense',\n gap: 0,\n placeItems: {\n '': 'stretch',\n 'raw-children': 'center stretch',\n },\n placeContent: 'center',\n position: 'relative',\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2m',\n 'type=link': 'strong',\n },\n outlineOffset: '$outline-offset',\n padding: {\n '': 0,\n 'raw-children & !has-icons':\n '$block-padding $inline-padding $block-padding $inline-padding',\n 'type=link': '0',\n },\n // `collapseState` can make `@collapsed` a container query, which is unknown\n // outside its container. A `''` default is negated by the states above it and\n // would vanish with that query, so every map that reads `@collapsed` sets its\n // base value as a `_` floor instead.\n '@collapsed': 'collapsed',\n width: {\n _: 'min $size',\n 'has-icon & has-right-icon': 'min ($size * 2 - 2bw)',\n 'single-icon': 'fixed $size',\n 'collapse=icon & @collapsed & !has-right-icon': 'fixed $size',\n 'type=link': 'min 1ch',\n },\n height: {\n '': 'fixed $size',\n 'type=link': 'initial',\n },\n whiteSpace: 'nowrap',\n radius: {\n '': true,\n 'shape=card': '1cr',\n 'shape=sharp': 0,\n 'shape=pill': 'round',\n 'type=link & !focused': 0,\n '@parent(button-split, >) & !:last-child': '1r left',\n '@parent(button-split, >) & !:first-child': '1r right',\n '@parent(button-split, >) & !:first-child & !:last-child': 0,\n },\n margin: {\n '': 0,\n // Outline halves overlap so their borders merge into one line. Primary halves\n // have no visible border, so a real gap divides them instead and shows\n // whatever is behind the split.\n '@parent(button-split, >) & !:first-child & (type=outline | type=outline-2)':\n '-1bw left',\n '@parent(button-split, >) & !:first-child & type=primary': '1bw left',\n },\n // oxlint-disable-next-line tasty/require-default-state -- outside a ButtonSplit the button sets no z-index, so the consumer's stacking applies\n zIndex: {\n '@parent(button-split, >) & :hover': 1,\n '@parent(button-split, >) & :focus-visible': 2,\n },\n transition: 'theme, grid-template, padding',\n verticalAlign: 'bottom',\n\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n 'size=inline': '(1lh + 2bw)',\n },\n '$inline-padding': {\n '': 'max($min-inline-padding, (($size - 1lh - 2bw) / 2 + $inline-compensation))',\n },\n '$block-padding': {\n '': '.5x',\n 'size=xsmall | size=small': '.25x',\n },\n '$inline-compensation': '.5x',\n '$min-inline-padding': '(1x - 1bw)',\n '$left-padding': {\n '': '$inline-padding',\n 'is-icon-shown': '0px',\n },\n '$right-padding': {\n '': '$inline-padding',\n 'is-right-icon-shown': '0px',\n },\n\n // Icon sub-element (recommended format)\n Icon: mergeStyles(DEFAULT_ICON_STYLES, {\n width: {\n '': 'fixed 0px',\n 'is-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-icon-shown': 1,\n },\n translate: {\n '': '($size * 1 / 4) 0',\n 'is-icon-shown': '0 0',\n },\n }),\n\n // RightIcon sub-element (recommended format)\n RightIcon: mergeStyles(DEFAULT_ICON_STYLES, {\n width: {\n '': 'fixed 0px',\n 'is-right-icon-shown': 'fixed ($size - 2bw)',\n },\n opacity: {\n '': 0,\n 'is-right-icon-shown': 1,\n },\n translate: {\n '': '($size * -1 / 4) 0',\n 'is-right-icon-shown': '0 0',\n },\n }),\n\n // Label sub-element (recommended format)\n Label: {\n $: '>',\n display: 'block',\n placeSelf: 'center stretch',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n width: {\n _: '0 100%',\n // Out of sight but still the button's accessible name, and cut off, so\n // the automatic tooltip shows it.\n 'collapse=icon & @collapsed': 'fixed 0px',\n },\n textAlign: 'center',\n transition: 'theme, padding',\n padding: {\n _: '$block-padding $right-padding $block-padding $left-padding',\n 'type=link': '0',\n 'collapse=icon & @collapsed': 0,\n },\n },\n\n // The label and its `shortLabel`, rendered inside `Label` only when a\n // `shortLabel` is given. The hidden one leaves the accessible name.\n FullLabel: {\n $: '> Label >',\n hide: { '': false, '@collapsed': true },\n },\n ShortLabel: {\n $: '> Label >',\n // oxlint-disable-next-line tasty/prefer-hide -- hidden by a floor that holds where `@collapsed` is unknown; `hide: false` emits no `display` to show it over that floor\n display: { _: 'none', '@collapsed': 'inline' },\n },\n} as const;\n\nconst ButtonElement = tasty({\n qa: 'Button',\n styles: DEFAULT_BUTTON_STYLES,\n variants: {\n // Current theme — colors mixed from the inherited `currentcolor`\n 'current.primary': CURRENT_PRIMARY_STYLES,\n 'current.outline': CURRENT_OUTLINE_STYLES,\n 'current.outline-2': CURRENT_OUTLINE_2_STYLES,\n 'current.clear': CURRENT_CLEAR_STYLES,\n 'current.link': CURRENT_LINK_STYLES,\n\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n },\n});\n\nexport const Button = forwardRef(function Button(\n allProps: CubeButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const splitContext = useButtonSplitContext();\n\n let {\n type,\n size: sizeProp,\n shape,\n label,\n children,\n theme = splitContext?.theme ?? 'default',\n icon: iconProp,\n rightIcon: rightIconProp,\n mods,\n download,\n tooltip = true,\n defaultTooltipPlacement = 'top',\n onPress: userOnPress,\n tokens,\n collapseState,\n isCollapsed,\n autoCollapse,\n shortLabel,\n ...props\n } = allProps;\n\n type = type ?? splitContext?.type;\n const size =\n sizeProp ?? splitContext?.size ?? (type === 'link' ? 'inline' : 'medium');\n\n const isExplicitlyDisabled = splitContext?.isDisabled || props.isDisabled;\n const isDisabled = isExplicitlyDisabled || props.isLoading;\n const isLoading = props.isLoading;\n const isSelected = props.isSelected;\n\n // Default: pressing a Button inside an open popover closes that popover.\n // Opt-outs (handled inline below):\n // - `data-popover-trigger` (auto, applied by MenuTrigger/DialogTrigger\n // type='popover' so triggers don't dismiss the popover they live in)\n // - `data-popover-keep` on self or any ancestor (manual opt-out for\n // toggles, custom inline editors, etc.)\n // - `data-popover-keep-on-press` on self or any ancestor: the same opt-out\n // for presses only. Unlike `data-popover-keep`, it does not stop a click\n // in the subtree from closing a nested popover (a field's listbox).\n // Modals/trays don't subscribe at all, so this is a no-op there.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n userOnPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep], [data-popover-keep-on-press]')) {\n return;\n }\n dismissParentPopover(el);\n });\n\n const { actionProps, isPressed } = useAction(\n {\n ...allProps,\n isDisabled,\n onPress: wrappedOnPress,\n ...(label ? { label } : {}),\n },\n ref,\n );\n\n // `true` collapses on `@mobile`. A button that never collapses keeps the very\n // styles it had, so its CSS is unchanged.\n const collapseCondition =\n collapseState === true ? '@mobile' : collapseState || undefined;\n const ownStyles = extractStyles(props, STYLE_PROPS);\n const styles = collapseCondition\n ? // oxlint-disable-next-line tasty/no-runtime-styles-mutation, tasty/no-style-spread -- the call site names the condition, and the Button's own maps read it as `@collapsed`; a caller's `styles` still win\n { '@collapsed': `collapsed | (${collapseCondition})`, ...ownStyles }\n : ownStyles;\n const isDisabledElement = actionProps.isDisabled;\n\n delete actionProps.isDisabled;\n\n // Base mods for icon resolution (without icon-dependent mods)\n const baseMods = useMemo<ButtonMods>(\n () => ({\n pressed: isPressed && !isDisabled,\n loading: isLoading,\n selected: isSelected,\n ...mods,\n }),\n [isPressed, isDisabled, isLoading, isSelected, mods],\n );\n\n // Resolve dynamic icon props\n const resolvedIcon = useMemo(\n () => resolveIcon(iconProp, baseMods),\n [iconProp, baseMods],\n );\n const resolvedRightIcon = useMemo(\n () => resolveIcon(rightIconProp, baseMods),\n [rightIconProp, baseMods],\n );\n\n const hasLeftSlot = resolvedIcon.hasSlot;\n const hasRightSlot = resolvedRightIcon.hasSlot;\n\n const icon: ReactNode = resolvedIcon.content;\n const rightIcon: ReactNode = resolvedRightIcon.content;\n\n // Generate stable keys for icon transitions based on icon type\n const iconKey = isLoading\n ? 'loading'\n : isValidElement(icon)\n ? (icon.type as any)?.displayName || (icon.type as any)?.name || 'icon'\n : icon\n ? 'icon'\n : 'empty';\n\n const rightIconKey = isValidElement(rightIcon)\n ? (rightIcon.type as any)?.displayName ||\n (rightIcon.type as any)?.name ||\n 'icon'\n : rightIcon\n ? 'icon'\n : 'empty';\n\n children = children || hasLeftSlot || hasRightSlot ? children : label;\n\n const specifiedLabel =\n label ?? props['aria-label'] ?? props['aria-labelledby'];\n\n // Warn about accessibility issues when button has no accessible label\n useWarn(!children && hasLeftSlot && !specifiedLabel, {\n key: ['button-icon-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide `icon` property for a Button and do not provide any children then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n useWarn(!children && !hasLeftSlot && !specifiedLabel, {\n key: ['button-no-content-no-label', hasLeftSlot],\n args: [\n 'accessibility issue:',\n 'If you provide no children for a Button then you should specify the `aria-label` property to make sure the Button element stays accessible.',\n ],\n });\n\n if (!children && !specifiedLabel) {\n label = 'Unnamed'; // fix to avoid warning in production\n }\n\n const hasLeftIcon = !!(hasLeftSlot || isLoading);\n const hasChildren = children != null;\n const singleIcon = !!(\n ((hasLeftIcon && !hasRightSlot) || (hasRightSlot && !hasLeftIcon)) &&\n !hasChildren\n );\n\n const hasIcons = hasLeftIcon || hasRightSlot;\n const rawChildren = !!(\n hasChildren &&\n typeof children !== 'string' &&\n !Children.toArray(children).some((child) => typeof child === 'string')\n );\n\n // What a collapsing button collapses to: its `shortLabel`, or else its icon.\n // Raw children have no `Label` to hide or swap.\n const isCollapsible =\n !!collapseCondition || isCollapsed != null || !!autoCollapse;\n // Set by `AutoCollapseObserver`, which only `autoCollapse` mounts.\n const [isAutoCollapsed, setIsAutoCollapsed] = useState(false);\n const isCollapsedByJs = !!isCollapsed || (!!autoCollapse && isAutoCollapsed);\n const collapse: ButtonMods['collapse'] =\n !isCollapsible || !hasChildren || rawChildren\n ? undefined\n : shortLabel != null\n ? 'label'\n : hasLeftSlot\n ? 'icon'\n : undefined;\n\n useWarn(isCollapsible && hasChildren && !collapse, {\n key: ['button-nothing-to-collapse', rawChildren],\n args: [\n 'Button:',\n rawChildren\n ? '`collapseState`, `isCollapsed` and `autoCollapse` collapse only a text label; this button renders raw children.'\n : '`collapseState`, `isCollapsed` or `autoCollapse` has nothing to collapse. Give the button an `icon` to collapse to, or a `shortLabel`.',\n ],\n });\n\n const [isIconShown, setIsIconShown] = useState(hasLeftIcon);\n const [isRightIconShown, setIsRightIconShown] = useState(hasRightSlot);\n const isFirstRender = useIsFirstRender();\n\n const modifiers = useMemo<ButtonMods>(\n () => ({\n ...baseMods,\n 'has-icons': hasIcons,\n 'has-icon': hasLeftIcon,\n 'is-icon-shown': isIconShown,\n 'has-right-icon': hasRightSlot,\n 'is-right-icon-shown': isRightIconShown,\n 'single-icon': singleIcon,\n 'text-only': !!(hasChildren && typeof children === 'string' && !hasIcons),\n 'raw-children': rawChildren,\n 'has-content': children != null,\n collapsed: isCollapsedByJs,\n collapse,\n }),\n [\n baseMods,\n children,\n hasLeftIcon,\n hasRightSlot,\n singleIcon,\n hasIcons,\n hasChildren,\n rawChildren,\n isIconShown,\n isRightIconShown,\n isCollapsedByJs,\n collapse,\n ],\n );\n\n const {\n labelProps: finalLabelProps,\n labelRef,\n renderWithTooltip,\n isTooltipActive,\n isAutoTooltipEnabled,\n isOverflowed,\n } = useAutoTooltip({\n tooltip,\n children,\n labelProps: undefined,\n });\n\n // A tooltip the caller wrote, as opposed to the automatic one that shows a\n // label cut off by the layout.\n const hasOwnTooltip = isTooltipActive && !isAutoTooltipEnabled;\n // Loading without being disabled: busy, but not unavailable.\n const isOnlyLoading = !!isLoading && !isExplicitlyDisabled;\n\n // A disabled button still has to be able to show its tooltip — that is\n // usually where the reason for being unavailable is written. The native\n // `disabled` attribute would make the browser drop the hover that opens it,\n // so when a tooltip is present the button is marked `aria-disabled` and kept\n // inert instead. Only the caller's tooltip counts: the automatic one turns\n // on with the layout, and would make the button a Tab stop only while its\n // label is cut off.\n //\n // A button that is only loading keeps the focus it has, so a keyboard press\n // that starts the work does not drop it to the page, but Tab skips it, as it\n // would a disabled one, unless the caller's tooltip is there to be read. One\n // that is also `isDisabled` stays natively disabled: `SubmitButton` sets both\n // while a submission runs, and the frozen legacy Form contract pins that\n // button as `disabled`.\n //\n // The attribute is skipped for links too, where it is not valid markup and\n // `aria-disabled` is the only thing announcing the state.\n const { isNativelyDisabled, isInert, inertProps } = getDisabledElementProps({\n isDisabled: isDisabledElement,\n keepEvents: hasOwnTooltip || isOnlyLoading,\n as: typeof actionProps.as === 'string' ? actionProps.as : undefined,\n });\n\n // Without the native attribute, handlers a parent passed in (a `MenuTrigger`'s\n // `onKeyDown`) would still activate the button.\n const elementProps = isInert\n ? omitActivationEventProps(actionProps)\n : actionProps;\n\n // Render function that creates the button element\n const renderButtonElement = (\n tooltipTriggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ): ReactNode => {\n // Use callback ref to merge multiple refs without calling hooks\n const handleRef = (element: HTMLElement | null) => {\n // Set the component's forwarded ref from useAction\n const domRef = actionProps.ref as any;\n if (typeof domRef === 'function') {\n domRef(element);\n } else if (domRef) {\n domRef.current = element;\n }\n // Set the tooltip ref if provided\n if (tooltipRef) {\n (tooltipRef as any).current = element;\n }\n // Track the rendered DOM node so the dismiss wrapper around `onPress`\n // can read it synchronously without coupling to `useAction`'s ref shape.\n buttonElementRef.current = element;\n };\n\n // Determine if size is custom (number or unrecognized string)\n const isCustomSize =\n typeof size === 'number' ||\n (size != null &&\n !(BUTTON_SIZE_VALUES as readonly string[]).includes(size));\n const sizeTokenValue =\n typeof size === 'number' ? `${size}px` : isCustomSize ? size : undefined;\n\n // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to\n // `outline` so the button still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\n\n // `isSelected` is a toggle state, so mirror it into `aria-pressed` — the\n // behaviour Button.docs.mdx has always described. An explicit\n // `aria-pressed` from the call site still wins.\n //\n // Skipped when the button renders as a link (`to`), where `aria-pressed` is\n // not a valid attribute, and when the call site sets its own `role` — a\n // button acting as a tab or an option needs `aria-selected`/`aria-current`\n // instead, and only the call site knows which.\n //\n // Applied *after* the spread: react-aria's `useButton` always returns an\n // `aria-pressed` key (undefined when the caller passed none), so anything\n // set before the spread is overwritten by it.\n const ariaPressed =\n allProps['aria-pressed'] ??\n (isSelected != null && actionProps.as !== 'a' && allProps.role == null\n ? isSelected\n : undefined);\n\n return (\n <ButtonElement\n download={download}\n aria-busy={isLoading || undefined}\n // The tooltip joins the button's own description rather than\n // replacing it while open.\n {...mergeProps(\n mergeTooltipFocusProps(elementProps, tooltipTriggerProps),\n inertProps,\n )}\n {...(isOnlyLoading && !hasOwnTooltip ? { tabIndex: -1 } : null)}\n aria-pressed={ariaPressed}\n ref={handleRef}\n mods={{ ...actionProps.mods, ...modifiers }}\n disabled={isNativelyDisabled}\n variant={`${theme}.${effectiveType ?? 'outline'}` as ButtonVariant}\n data-theme={theme}\n data-type={effectiveType ?? 'outline'}\n data-size={size}\n data-shape={shape === 'button' ? undefined : shape}\n data-popover-dismiss=\"\"\n styles={styles}\n tokens={{\n ...tokens,\n ...(sizeTokenValue ? { $size: sizeTokenValue } : {}),\n }}\n >\n <DisplayTransition\n isShown={hasLeftIcon}\n animateOnMount={!isFirstRender}\n onToggle={setIsIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"Icon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={iconKey}>\n {isLoading ? <LoadingIcon /> : icon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n {hasChildren &&\n (rawChildren ? (\n children\n ) : (\n <div data-element=\"Label\" {...finalLabelProps} ref={labelRef}>\n {collapse === 'label' ? (\n <>\n <span data-element=\"FullLabel\">{children}</span>\n <span data-element=\"ShortLabel\">{shortLabel}</span>\n </>\n ) : (\n children\n )}\n </div>\n ))}\n <DisplayTransition\n isShown={hasRightSlot}\n animateOnMount={!isFirstRender}\n onToggle={setIsRightIconShown}\n >\n {({ ref }) => (\n <div ref={ref} data-element=\"RightIcon\" aria-hidden=\"true\">\n <IconSwitch noWrapper contentKey={rightIconKey}>\n {rightIcon}\n </IconSwitch>\n </div>\n )}\n </DisplayTransition>\n {autoCollapse ? (\n <AutoCollapseObserver\n targetRef={buttonElementRef}\n contentKey={[\n typeof children === 'string' ? children : '',\n typeof shortLabel === 'string' ? shortLabel : '',\n size,\n collapse,\n hasLeftSlot,\n hasRightSlot,\n isLoading,\n isCollapsed,\n collapseCondition,\n ].join('|')}\n isLabelCut={isOverflowed}\n onChange={setIsAutoCollapsed}\n />\n ) : null}\n </ButtonElement>\n );\n };\n\n return renderWithTooltip(renderButtonElement, defaultTooltipPlacement);\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.209.0 | Cube Dev Team */
|
|
2
2
|
import { Button as Button$1, DEFAULT_BUTTON_STYLES } from "./Button.js";
|
|
3
3
|
import { ButtonGroup } from "../ButtonGroup/ButtonGroup.js";
|
|
4
4
|
import { ButtonSplit } from "../ButtonSplit/ButtonSplit.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { useSlotProps } from "../../../utils/react/Slots.js";
|
|
3
3
|
import { Space } from "../../layout/Space.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { createContext, useContext } from "react";
|
|
3
3
|
//#region src/components/actions/ButtonSplit/context.ts
|
|
4
4
|
const ButtonSplitContext = createContext(null);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles, mergeStyleLayers } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { LoadingIcon } from "../../../icons/LoadingIcon.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
|
|
4
4
|
import { CURRENT_CLEAR_STYLES, CURRENT_OUTLINE_STYLES, CURRENT_PRIMARY_STYLES, DANGER_CLEAR_STYLES, DANGER_OUTLINE_STYLES, DANGER_PRIMARY_STYLES, DEFAULT_CLEAR_STYLES, DEFAULT_OUTLINE_STYLES, DEFAULT_PRIMARY_STYLES, ITEM_ACTION_BASE_STYLES, NOTE_CLEAR_STYLES, NOTE_OUTLINE_STYLES, NOTE_PRIMARY_STYLES, SPECIAL_CLEAR_STYLES, SPECIAL_OUTLINE_STYLES, SPECIAL_PRIMARY_STYLES, SUCCESS_CLEAR_STYLES, SUCCESS_OUTLINE_STYLES, SUCCESS_PRIMARY_STYLES, WARNING_CLEAR_STYLES, WARNING_OUTLINE_STYLES, WARNING_PRIMARY_STYLES } from "../../../data/item-themes.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { DisplayTransition } from "../helpers/DisplayTransition/DisplayTransition.js";
|
|
3
3
|
import { ITEM_RESTING_COLOR_VARIANTS, ROW_STATE_ALIASES, resolveItemVariant } from "../../data/item-themes.js";
|
|
4
4
|
import { ItemActionProvider } from "./ItemActionContext.js";
|
|
@@ -6,8 +6,8 @@ import { c } from "react/compiler-runtime";
|
|
|
6
6
|
import { mergeStyles, tasty } from "@tenphi/tasty";
|
|
7
7
|
import { useEffectEvent, useLayoutEffect, useRef, useState } from "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
-
import { flushSync } from "react-dom";
|
|
10
9
|
import { useFocusWithin, useHover } from "react-aria";
|
|
10
|
+
import { flushSync } from "react-dom";
|
|
11
11
|
import { ClearPressResponder } from "@react-aria/interactions";
|
|
12
12
|
//#region src/components/actions/ItemActionsWrapper.tsx
|
|
13
13
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useMenuContext } from "./context.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { normalizeNavigationUrl } from "../../../providers/navigation-url.js";
|
|
3
3
|
import { parseTo } from "../use-action.js";
|
|
4
4
|
import { COLLECTION_ITEM_CLICK, CollectionItem as _CollectionItem } from "../../CollectionItem.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { isExternalUrl, normalizeNavigationUrl } from "../../../providers/navigation-url.js";
|
|
4
4
|
import { useNavigation } from "../../../providers/use-navigation.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { getMenuItemReactKey } from "./MenuCollectionItem.js";
|
|
3
3
|
import { MenuItem } from "./MenuItem.js";
|
|
4
4
|
import { StyledMenu, StyledSection, StyledSectionHeading } from "./styled.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { SlotProvider } from "../../../utils/react/Slots.js";
|
|
3
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
4
|
import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
|
|
4
4
|
import { MenuContext, useMenuContext } from "./context.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import React from "react";
|
|
3
3
|
//#region src/components/actions/Menu/SubmenuTriggerContext.tsx
|
|
4
4
|
const SubmenuTriggerContext = React.createContext(null);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import React, { useContext } from "react";
|
|
3
3
|
//#region src/components/actions/Menu/context.ts
|
|
4
4
|
const MenuContext = React.createContext({});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { DEFAULT_CLEAR_STYLES } from "../../../data/item-themes.js";
|
|
3
3
|
import { Space } from "../../layout/Space.js";
|
|
4
4
|
import { DEFAULT_BUTTON_STYLES } from "../Button/Button.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { useEvent } from "../../_internal/hooks/use-event.js";
|
|
4
4
|
import { useFocus as useFocus$1 } from "../../utils/react/interactions.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { useEvent } from "../../_internal/hooks/use-event.js";
|
|
4
4
|
import { useI18n } from "../../i18n/useI18n.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { useEvent } from "../../_internal/hooks/use-event.js";
|
|
4
4
|
import { useI18n } from "../../i18n/useI18n.js";
|
|
@@ -8,8 +8,8 @@ import { MenuTrigger as _MenuTrigger } from "./Menu/MenuTrigger.js";
|
|
|
8
8
|
import { tasty } from "@tenphi/tasty";
|
|
9
9
|
import { createRef, useEffect, useMemo, useRef, useState } from "react";
|
|
10
10
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
-
import { createPortal } from "react-dom";
|
|
12
11
|
import { VisuallyHidden } from "react-aria";
|
|
12
|
+
import { createPortal } from "react-dom";
|
|
13
13
|
import { Pressable } from "@react-aria/interactions";
|
|
14
14
|
//#region src/components/actions/use-context-menu.tsx
|
|
15
15
|
const ContextMenuHostElement = tasty({
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import themes_default from "../../../data/themes.js";
|
|
3
3
|
import { useAlert } from "./use-alert.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useDeprecationWarning } from "../../../_internal/hooks/use-deprecation-warning.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { c } from "react/compiler-runtime";
|
|
4
4
|
import { CONTAINER_STYLES, Element, filterBaseProps } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.209.0 | Cube Dev Team */
|
|
2
2
|
import { Item as _Item } from "../Item/Item.js";
|
|
3
3
|
import themes_default from "../../../data/themes.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|