@cube-dev/ui-kit 0.183.0 → 0.184.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 +30 -0
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +2 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -8
- package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemActionsWrapper.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/Menu.js.map +1 -1
- package/dist/components/actions/Menu/MenuItem.js +19 -15
- package/dist/components/actions/Menu/MenuItem.js.map +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -8
- package/dist/components/actions/Menu/MenuSection.js.map +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -7
- package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/actions-run.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +2 -1
- package/dist/components/content/Content.js.map +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.d.ts +27 -2
- package/dist/components/content/Item/Item.js +240 -231
- package/dist/components/content/Item/Item.js.map +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 +123 -118
- package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.d.ts +6 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Tag/Tag.js.map +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.d.ts +1 -1
- package/dist/components/content/use-auto-tooltip.js +231 -125
- 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/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.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.d.ts +1 -0
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +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-tree-state.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.d.ts +8 -0
- package/dist/components/fields/Checkbox/Checkbox.js +58 -39
- package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -2
- package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.d.ts +17 -1
- package/dist/components/fields/ColorInput/ColorInput.js +137 -134
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.d.ts +18 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js +4 -3
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.d.ts +17 -1
- package/dist/components/fields/DatePicker/DatePicker.js +81 -77
- package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.d.ts +17 -2
- package/dist/components/fields/DatePicker/DateRangePicker.js +109 -105
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +17 -2
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +228 -220
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.d.ts +17 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +89 -85
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.d.ts +11 -2
- package/dist/components/fields/FilterPicker/FilterPicker.js +3 -2
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/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.d.ts +20 -3
- package/dist/components/fields/Picker/Picker.js +4 -3
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +10 -2
- package/dist/components/fields/RadioGroup/Radio.js +215 -213
- 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.d.ts +24 -3
- package/dist/components/fields/Select/Select.js +8 -5
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +2 -2
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/TriggerActions.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +11 -9
- package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
- package/dist/components/form/FieldWrapper/types.d.ts +1 -1
- package/dist/components/form/Form/Field.js +6 -4
- package/dist/components/form/Form/Field.js.map +1 -1
- package/dist/components/form/Form/Form.js +20 -5
- package/dist/components/form/Form/Form.js.map +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/use-field/use-field-binding.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/legacy-tooltip.js +28 -0
- package/dist/components/form/legacy-tooltip.js.map +1 -0
- 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 +5 -3
- package/dist/components/form/wrapper.js.map +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +131 -110
- package/dist/components/navigation/Tabs/TabButton.js.map +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 +2 -1
- package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +2 -2
- package/dist/components/navigation/Tabs/styled.js.map +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 +18 -9
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +6 -5
- package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/ModernDialogForm.js +71 -64
- package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-content-overflow.js +68 -0
- package/dist/components/overlays/Dialog/use-content-overflow.js.map +1 -0
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +72 -69
- 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.d.ts +16 -0
- package/dist/components/overlays/Tooltip/split-trigger-props.js +54 -0
- package/dist/components/overlays/Tooltip/split-trigger-props.js.map +1 -0
- 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.d.ts +1 -1
- package/dist/data/item-themes.js +7 -1
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/shared/form.d.ts +9 -2
- package/dist/tokens/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/colors.js +1 -1
- package/dist/utils/dotize.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/escapePropagation.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/programmaticFocus.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useScheme.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/FieldProperties.md +2 -2
- package/docs/components/actions/ButtonSplit.md +2 -0
- package/docs/components/content/InfoBadge.md +1 -1
- package/docs/components/content/Layout.md +1 -1
- package/docs/components/content/Tag.md +10 -2
- package/docs/components/fields/Checkbox.md +11 -0
- package/docs/components/fields/ColorInput.md +2 -0
- package/docs/components/fields/ColorPicker.md +3 -1
- package/docs/components/fields/DatePicker.md +2 -0
- package/docs/components/fields/FilterPicker.md +3 -1
- package/docs/components/fields/PeriodPicker.md +2 -0
- package/docs/components/fields/Picker.md +3 -1
- package/docs/components/fields/RadioGroup.md +2 -2
- package/docs/components/fields/Select.md +5 -0
- package/docs/components/form/Field.md +2 -2
- package/docs/components/form/Form.md +2 -0
- package/docs/components/navigation/Tabs.md +3 -3
- package/docs/components/overlays/Dialog.md +30 -3
- package/docs/components/overlays/DialogForm.md +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.js","names":["useObjectRef","useSyncRef","FocusStrategy","ItemProps","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","ReactElement","ReactNode","Ref","useMemo","AriaMenuProps","useMenu","Section","BaseSection","useTreeState","mergeProps","extractStyles","CollectionItem","useMenuContext","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledMenuWrapper","SubMenuTrigger","CubeMenuProps","Omit","T","header","footer","menuStyles","headerStyles","footerStyles","styles","itemStyles","sectionStyles","sectionHeadingStyles","shouldFocusWrap","autoFocus","shouldUseVirtualFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","Menu","props","ref","$","_c","t0","focusOnHover","t1","qa","rest","undefined","domRef","contextProps","ariaSelectedKeys","Set","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","state","collection","getKeys","map","_temp","_temp2","completeProps","treeProps","collectionItems","hasSections","some","_temp3","menuProps","t2","t3","mods","popover","t4","wrapperMods","t5","sections","menuMods","items","isFirstSection","forEach","item_0","item","type","push","String","key","menuItem","onAction","wrapper","cloneElement","renderedItems","t6","t7","t8","t9","Record","role","key_0","_Menu","forwardRef","RefAttributes","HTMLUListElement","SectionComponent","Object","assign","displayName","__MenuComponent","Item","Trigger","__Menu"],"sources":["../../../../src/components/actions/Menu/Menu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy, ItemProps } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, { ReactElement, ReactNode, Ref, useMemo } from 'react';\nimport { AriaMenuProps, useMenu } from 'react-aria';\nimport { Section as BaseSection, useTreeState } from 'react-stately';\n\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem } from '../../CollectionItem';\n\nimport { useMenuContext } from './context';\nimport { MenuItem } from './MenuItem';\nimport { MenuSection } from './MenuSection';\nimport { MenuTrigger } from './MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n StyledMenuWrapper,\n} from './styled';\nimport { SubMenuTrigger } from './SubMenuTrigger';\n\nexport interface CubeMenuProps<T>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n Omit<\n AriaMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // @deprecated\n header?: ReactNode;\n footer?: ReactNode;\n menuStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n styles?: Styles;\n itemStyles?: Styles;\n sectionStyles?: Styles;\n sectionHeadingStyles?: Styles;\n /**\n * Whether keyboard navigation should wrap around when reaching the start/end of the collection.\n * This directly maps to the `shouldFocusWrap` option supported by React-Aria's `useMenu` hook.\n */\n shouldFocusWrap?: boolean;\n\n /**\n * Whether the menu should automatically receive focus when it mounts.\n * This directly maps to the `autoFocus` option supported by React-Aria's `useMenu` hook.\n */\n autoFocus?: boolean | FocusStrategy;\n shouldUseVirtualFocus?: boolean;\n\n /** Size of the menu items */\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction Menu<T extends object>(\n props: CubeMenuProps<T>,\n ref: Ref<HTMLUListElement>,\n) {\n const {\n header,\n footer,\n menuStyles,\n headerStyles,\n footerStyles,\n itemStyles,\n sectionStyles,\n sectionHeadingStyles,\n size = 'medium',\n focusOnHover = false,\n qa,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n ...rest\n } = props;\n const domRef = useObjectRef(ref);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: any) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(state.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, rest, {\n focusOnHover,\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Props used for collection building.\n const treeProps = completeProps as typeof completeProps;\n\n const state = useTreeState(treeProps as typeof completeProps);\n const collectionItems = [...state.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n const { menuProps } = useMenu(completeProps, state, domRef);\n const styles = useMemo(\n () => extractStyles(completeProps, CONTAINER_STYLES),\n [completeProps],\n );\n\n const wrapperMods = useMemo(() => {\n return {\n popover: completeProps.mods?.popover,\n footer: !!footer,\n header: !!header,\n };\n }, [completeProps.mods?.popover, footer, header]);\n\n const menuMods = useMemo(() => {\n return {\n sections: hasSections,\n };\n }, [hasSections]);\n\n // Sync the ref stored in the context object with the menu's DOM ref.\n // `useSyncRef` from @react-aria/utils expects the context object as the\n // first argument to keep it up-to-date, and a ref object as the second.\n useSyncRef(contextProps, domRef);\n\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n collectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={state}\n styles={sectionStyles}\n itemStyles={itemStyles}\n headingStyles={sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={state}\n styles={itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // Apply tooltip wrapper if tooltip property is provided\n // if (item.props.tooltip) {\n // const tooltipProps =\n // typeof item.props.tooltip === 'string'\n // ? { title: item.props.tooltip }\n // : item.props.tooltip;\n\n // menuItem = (\n // <TooltipProvider key={item.key} placement=\"right\" {...tooltipProps}>\n // {menuItem}\n // </TooltipProvider>\n // );\n // }\n\n // Apply custom wrapper if provided\n if (item.props?.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n } else if ((item as any).wrapper) {\n // Handle wrapper from collection nodes (e.g., SubMenuTrigger)\n menuItem = (item as any).wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [collectionItems, state, sectionStyles, itemStyles, sectionHeadingStyles]);\n\n return (\n <StyledMenuWrapper\n qa={qa}\n styles={styles}\n mods={wrapperMods}\n {...(filterBaseProps(completeProps) as Record<string, unknown>)}\n >\n {header ? (\n <StyledHeader data-size={size} styles={headerStyles}>\n {header}\n </StyledHeader>\n ) : (\n <div role=\"presentation\" />\n )}\n <StyledMenu\n {...mergeProps(\n {\n styles: menuStyles,\n 'data-size': size,\n mods: menuMods,\n },\n menuProps,\n )}\n ref={domRef}\n role={menuProps.role ?? 'menu'}\n >\n {renderedItems}\n </StyledMenu>\n {footer ? (\n <StyledFooter data-size={size} styles={footerStyles}>\n {footer}\n </StyledFooter>\n ) : (\n <div role=\"presentation\" />\n )}\n </StyledMenuWrapper>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nconst _Menu = React.forwardRef(Menu) as <T>(\n props: CubeMenuProps<T> & React.RefAttributes<HTMLUListElement>,\n) => ReactElement;\n\ntype SectionComponent = typeof BaseSection;\n\nconst Section = Object.assign(BaseSection, {\n displayName: 'Section',\n}) as SectionComponent;\n\ntype __MenuComponent = typeof _Menu & {\n Item: typeof CollectionItem;\n Section: typeof Section;\n SubMenuTrigger: typeof SubMenuTrigger;\n Trigger: typeof MenuTrigger;\n};\n\nconst __Menu = Object.assign(_Menu as __MenuComponent, {\n Item: CollectionItem,\n Section,\n SubMenuTrigger,\n Trigger: MenuTrigger,\n displayName: 'Menu',\n});\n\n__Menu.displayName = 'Menu';\n\nexport { __Menu as Menu };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.js","names":["useObjectRef","useSyncRef","FocusStrategy","ItemProps","BasePropsWithoutChildren","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","Styles","React","ReactElement","ReactNode","Ref","useMemo","AriaMenuProps","useMenu","Section","BaseSection","useTreeState","mergeProps","extractStyles","CollectionItem","useMenuContext","MenuItem","MenuSection","MenuTrigger","StyledDivider","StyledFooter","StyledHeader","StyledMenu","StyledMenuWrapper","SubMenuTrigger","CubeMenuProps","Omit","T","header","footer","menuStyles","headerStyles","footerStyles","styles","itemStyles","sectionStyles","sectionHeadingStyles","shouldFocusWrap","autoFocus","shouldUseVirtualFocus","size","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","Menu","props","ref","$","_c","t0","focusOnHover","t1","qa","rest","undefined","domRef","contextProps","ariaSelectedKeys","Set","ariaDefaultSelectedKeys","handleSelectionChange","allKeys","Array","from","state","collection","getKeys","map","_temp","_temp2","completeProps","treeProps","collectionItems","hasSections","some","_temp3","menuProps","t2","t3","mods","popover","t4","wrapperMods","t5","sections","menuMods","items","isFirstSection","forEach","item_0","item","type","push","String","key","menuItem","onAction","wrapper","cloneElement","renderedItems","t6","t7","t8","t9","Record","role","key_0","_Menu","forwardRef","RefAttributes","HTMLUListElement","SectionComponent","Object","assign","displayName","__MenuComponent","Item","Trigger","__Menu"],"sources":["../../../../src/components/actions/Menu/Menu.tsx"],"sourcesContent":["import { useObjectRef, useSyncRef } from '@react-aria/utils';\nimport { FocusStrategy, ItemProps } from '@react-types/shared';\nimport {\n BasePropsWithoutChildren,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n} from '@tenphi/tasty';\nimport React, { ReactElement, ReactNode, Ref, useMemo } from 'react';\nimport { AriaMenuProps, useMenu } from 'react-aria';\nimport { Section as BaseSection, useTreeState } from 'react-stately';\n\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { CollectionItem } from '../../CollectionItem';\n\nimport { useMenuContext } from './context';\nimport { MenuItem } from './MenuItem';\nimport { MenuSection } from './MenuSection';\nimport { MenuTrigger } from './MenuTrigger';\nimport {\n StyledDivider,\n StyledFooter,\n StyledHeader,\n StyledMenu,\n StyledMenuWrapper,\n} from './styled';\nimport { SubMenuTrigger } from './SubMenuTrigger';\n\nexport interface CubeMenuProps<T>\n extends BasePropsWithoutChildren,\n ContainerStyleProps,\n Omit<\n AriaMenuProps<T>,\n 'selectedKeys' | 'defaultSelectedKeys' | 'onSelectionChange'\n > {\n // @deprecated\n header?: ReactNode;\n footer?: ReactNode;\n menuStyles?: Styles;\n headerStyles?: Styles;\n footerStyles?: Styles;\n styles?: Styles;\n itemStyles?: Styles;\n sectionStyles?: Styles;\n sectionHeadingStyles?: Styles;\n /**\n * Whether keyboard navigation should wrap around when reaching the start/end of the collection.\n * This directly maps to the `shouldFocusWrap` option supported by React-Aria's `useMenu` hook.\n */\n shouldFocusWrap?: boolean;\n\n /**\n * Whether the menu should automatically receive focus when it mounts.\n * This directly maps to the `autoFocus` option supported by React-Aria's `useMenu` hook.\n */\n autoFocus?: boolean | FocusStrategy;\n shouldUseVirtualFocus?: boolean;\n\n /** Size of the menu items */\n size?: 'medium' | 'large' | (string & {});\n\n /** Currently selected keys (controlled) */\n selectedKeys?: string[];\n /** Initially selected keys (uncontrolled) */\n defaultSelectedKeys?: string[];\n /** Handler for selection changes */\n onSelectionChange?: (keys: string[]) => void;\n}\n\nfunction Menu<T extends object>(\n props: CubeMenuProps<T>,\n ref: Ref<HTMLUListElement>,\n) {\n const {\n header,\n footer,\n menuStyles,\n headerStyles,\n footerStyles,\n itemStyles,\n sectionStyles,\n sectionHeadingStyles,\n size = 'medium',\n focusOnHover = false,\n qa,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n ...rest\n } = props;\n const domRef = useObjectRef(ref);\n const contextProps = useMenuContext();\n\n // Convert string[] to Set<Key> for React Aria compatibility\n const ariaSelectedKeys = selectedKeys ? new Set(selectedKeys) : undefined;\n const ariaDefaultSelectedKeys = defaultSelectedKeys\n ? new Set(defaultSelectedKeys)\n : undefined;\n\n const handleSelectionChange = onSelectionChange\n ? (keys: any) => {\n if (keys === 'all') {\n // Handle 'all' selection case - collect all available keys\n const allKeys = Array.from(state.collection.getKeys()).map(\n (key: any) => String(key),\n );\n onSelectionChange(allKeys);\n } else if (keys instanceof Set) {\n onSelectionChange(Array.from(keys).map((key) => String(key)));\n } else {\n onSelectionChange([]);\n }\n }\n : undefined;\n\n const completeProps = mergeProps(contextProps, rest, {\n focusOnHover,\n selectedKeys: ariaSelectedKeys,\n defaultSelectedKeys: ariaDefaultSelectedKeys,\n onSelectionChange: handleSelectionChange,\n });\n\n // Props used for collection building.\n const treeProps = completeProps as typeof completeProps;\n\n const state = useTreeState(treeProps as typeof completeProps);\n const collectionItems = [...state.collection];\n const hasSections = collectionItems.some((item) => item.type === 'section');\n\n const { menuProps } = useMenu(completeProps, state, domRef);\n const styles = useMemo(\n () => extractStyles(completeProps, CONTAINER_STYLES),\n [completeProps],\n );\n\n const wrapperMods = useMemo(() => {\n return {\n popover: completeProps.mods?.popover,\n footer: !!footer,\n header: !!header,\n };\n }, [completeProps.mods?.popover, footer, header]);\n\n const menuMods = useMemo(() => {\n return {\n sections: hasSections,\n };\n }, [hasSections]);\n\n // Sync the ref stored in the context object with the menu's DOM ref.\n // `useSyncRef` from @react-aria/utils expects the context object as the\n // first argument to keep it up-to-date, and a ref object as the second.\n useSyncRef(contextProps, domRef);\n\n const renderedItems = useMemo(() => {\n const items: React.ReactNode[] = [];\n let isFirstSection = true;\n\n collectionItems.forEach((item) => {\n if (item.type === 'section') {\n if (!isFirstSection) {\n items.push(\n <StyledDivider\n key={`divider-${String(item.key)}`}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />,\n );\n }\n\n items.push(\n <MenuSection\n key={item.key}\n item={item}\n state={state}\n styles={sectionStyles}\n itemStyles={itemStyles}\n headingStyles={sectionHeadingStyles}\n size={size}\n />,\n );\n\n isFirstSection = false;\n return;\n }\n\n let menuItem = (\n <MenuItem\n key={item.key}\n item={item}\n state={state}\n styles={itemStyles}\n size={size}\n onAction={item.onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself — wrapping it in a\n // second provider makes the two tooltips close each other.\n\n // Apply custom wrapper if provided\n if (item.props?.wrapper) {\n menuItem = item.props.wrapper(menuItem);\n } else if ((item as any).wrapper) {\n // Handle wrapper from collection nodes (e.g., SubMenuTrigger)\n menuItem = (item as any).wrapper(menuItem);\n }\n\n // Ensure every child has a stable key, even if the wrapper component didn't set one.\n items.push(React.cloneElement(menuItem, { key: item.key }));\n });\n\n return items;\n }, [collectionItems, state, sectionStyles, itemStyles, sectionHeadingStyles]);\n\n return (\n <StyledMenuWrapper\n qa={qa}\n styles={styles}\n mods={wrapperMods}\n {...(filterBaseProps(completeProps) as Record<string, unknown>)}\n >\n {header ? (\n <StyledHeader data-size={size} styles={headerStyles}>\n {header}\n </StyledHeader>\n ) : (\n <div role=\"presentation\" />\n )}\n <StyledMenu\n {...mergeProps(\n {\n styles: menuStyles,\n 'data-size': size,\n mods: menuMods,\n },\n menuProps,\n )}\n ref={domRef}\n role={menuProps.role ?? 'menu'}\n >\n {renderedItems}\n </StyledMenu>\n {footer ? (\n <StyledFooter data-size={size} styles={footerStyles}>\n {footer}\n </StyledFooter>\n ) : (\n <div role=\"presentation\" />\n )}\n </StyledMenuWrapper>\n );\n}\n\n// forwardRef doesn't support generic parameters, so cast the result to the correct type\n// https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref\nconst _Menu = React.forwardRef(Menu) as <T>(\n props: CubeMenuProps<T> & React.RefAttributes<HTMLUListElement>,\n) => ReactElement;\n\ntype SectionComponent = typeof BaseSection;\n\nconst Section = Object.assign(BaseSection, {\n displayName: 'Section',\n}) as SectionComponent;\n\ntype __MenuComponent = typeof _Menu & {\n Item: typeof CollectionItem;\n Section: typeof Section;\n SubMenuTrigger: typeof SubMenuTrigger;\n Trigger: typeof MenuTrigger;\n};\n\nconst __Menu = Object.assign(_Menu as __MenuComponent, {\n Item: CollectionItem,\n Section,\n SubMenuTrigger,\n Trigger: MenuTrigger,\n displayName: 'Menu',\n});\n\n__Menu.displayName = 'Menu';\n\nexport { __Menu as Menu };\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.184.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { filterCollectionItemProps } from "../../CollectionItem.js";
|
|
4
4
|
import { _Item } from "../../content/Item/Item.js";
|
|
@@ -67,6 +67,18 @@ function MenuItem(props) {
|
|
|
67
67
|
} else t6 = $[15];
|
|
68
68
|
const { menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, isFocused, isSelected, isPressed, isDisabled } = useMenuItem(t6, state, elementRef);
|
|
69
69
|
const isVirtualFocused = state.selectionManager.focusedKey === key;
|
|
70
|
+
const { onKeyDown: itemOnKeyDown, ...itemOwnProps } = menuItemProps;
|
|
71
|
+
let t7;
|
|
72
|
+
if ($[16] !== itemOnKeyDown || $[17] !== submenuContext) {
|
|
73
|
+
t7 = submenuContext?.onKeyDown ? (e) => {
|
|
74
|
+
submenuContext.onKeyDown?.(e);
|
|
75
|
+
if (!e.defaultPrevented) itemOnKeyDown?.(e);
|
|
76
|
+
} : itemOnKeyDown;
|
|
77
|
+
$[16] = itemOnKeyDown;
|
|
78
|
+
$[17] = submenuContext;
|
|
79
|
+
$[18] = t7;
|
|
80
|
+
} else t7 = $[18];
|
|
81
|
+
const onKeyDown = t7;
|
|
70
82
|
const mods = {
|
|
71
83
|
...itemMods,
|
|
72
84
|
focused: isFocused || isVirtualFocused,
|
|
@@ -78,17 +90,10 @@ function MenuItem(props) {
|
|
|
78
90
|
};
|
|
79
91
|
const T0 = FocusRing;
|
|
80
92
|
const T1 = _Item;
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (!e.defaultPrevented && menuItemProps.onKeyDown) menuItemProps.onKeyDown(e);
|
|
86
|
-
} : menuItemProps.onKeyDown;
|
|
87
|
-
$[16] = menuItemProps;
|
|
88
|
-
$[17] = submenuContext;
|
|
89
|
-
$[18] = t7;
|
|
90
|
-
} else t7 = $[18];
|
|
91
|
-
const t8 = mergeProps$1(menuItemProps, filteredItemProps, {
|
|
93
|
+
const t8 = mergeProps$1({
|
|
94
|
+
...itemOwnProps,
|
|
95
|
+
onKeyDown
|
|
96
|
+
}, filteredItemProps, {
|
|
92
97
|
"data-popover-trigger": true,
|
|
93
98
|
qa: itemQa ? itemQa : `MenuItem-${key}`,
|
|
94
99
|
mods,
|
|
@@ -101,9 +106,8 @@ function MenuItem(props) {
|
|
|
101
106
|
"aria-haspopup": submenuContext ? "menu" : void 0,
|
|
102
107
|
"aria-expanded": submenuContext?.isOpen,
|
|
103
108
|
"data-has-submenu": submenuContext ? true : void 0,
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
onMouseLeave: submenuContext?.onMouseLeave || menuItemProps.onMouseLeave
|
|
109
|
+
onMouseEnter: submenuContext?.onMouseEnter,
|
|
110
|
+
onMouseLeave: submenuContext?.onMouseLeave
|
|
107
111
|
});
|
|
108
112
|
let t9;
|
|
109
113
|
if ($[19] !== filteredItemProps || $[20] !== submenuContext) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","names":["Key","Node","Styles","KeyboardEvent","useContext","useRef","FocusRing","useMenuItem","TreeState","RightIcon","mergeProps","filterCollectionItemProps","Item","useMenuContext","SubmenuTriggerContext","MenuSelectionType","MenuItemProps","item","T","state","styles","isVirtualized","isDisabled","onAction","key","size","MenuItem","props","$","_c","onClose","closeOnSelect","rendered","itemProps","submenuContext","filteredItemProps","mods","itemMods","qa","itemQa","isSelectable","selectionManager","selectionMode","t0","disabledKeys","has","isDisabledKey","ref","elementRef","triggerRef","t1","isSelected","t2","t3","undefined","t4","t5","t6","menuItemProps","labelProps","descriptionProps","keyboardShortcutProps","isFocused","isPressed","isVirtualFocused","focusedKey","
|
|
1
|
+
{"version":3,"file":"MenuItem.js","names":["Key","Node","Styles","KeyboardEvent","useContext","useRef","FocusRing","useMenuItem","TreeState","RightIcon","mergeProps","filterCollectionItemProps","Item","useMenuContext","SubmenuTriggerContext","MenuSelectionType","MenuItemProps","item","T","state","styles","isVirtualized","isDisabled","onAction","key","size","MenuItem","props","$","_c","onClose","closeOnSelect","rendered","itemProps","submenuContext","filteredItemProps","mods","itemMods","qa","itemQa","isSelectable","selectionManager","selectionMode","t0","disabledKeys","has","isDisabledKey","ref","elementRef","triggerRef","t1","isSelected","t2","t3","undefined","t4","t5","t6","menuItemProps","labelProps","descriptionProps","keyboardShortcutProps","isFocused","isPressed","isVirtualFocused","focusedKey","onKeyDown","itemOnKeyDown","itemOwnProps","t7","e","defaultPrevented","focused","pressed","selected","disabled","submenu","menuitem","T0","T1","t8","as","isOpen","onMouseEnter","onMouseLeave","t9","rightIcon","t10","t11","t12","t13"],"sources":["../../../../src/components/actions/Menu/MenuItem.tsx"],"sourcesContent":["import { Key, Node } from '@react-types/shared';\nimport { Styles } from '@tenphi/tasty';\nimport { KeyboardEvent, useContext, useRef } from 'react';\nimport { FocusRing, useMenuItem } from 'react-aria';\nimport { TreeState } from 'react-stately';\n\nimport { RightIcon } from '../../../icons/RightIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { filterCollectionItemProps } from '../../CollectionItem';\nimport { Item } from '../../content/Item/Item';\n\nimport { useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\nexport type MenuSelectionType = 'checkbox' | 'radio' | 'checkmark';\n\nexport interface MenuItemProps<T> {\n item: Node<T>;\n state: TreeState<T>;\n styles?: Styles;\n isVirtualized?: boolean;\n isDisabled?: boolean;\n onAction?: (key: Key) => void;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuItem<T>(props: MenuItemProps<T>) {\n const { item, state, styles, isVirtualized, onAction, size } = props;\n const { onClose, closeOnSelect } = useMenuContext();\n const { rendered, key, props: itemProps } = item;\n\n // Check if this item is wrapped in a SubmenuTriggerContext\n const submenuContext = useContext(SubmenuTriggerContext);\n\n // Filter out service props (react-stately and parent-handled props)\n // All remaining props are safe to pass to Item component\n const filteredItemProps = filterCollectionItemProps(itemProps);\n\n // Extract specific props that need special handling\n const { hotkeys, mods: itemMods, qa: itemQa } = filteredItemProps;\n\n const isSelectable = state.selectionManager.selectionMode !== 'none';\n const isDisabledKey =\n state.disabledKeys.has(key) || submenuContext?.isDisabled;\n\n const ref = useRef<HTMLLIElement>(null);\n\n // Use the triggerRef from submenu context if present\n const elementRef = (submenuContext?.triggerRef ?? ref) as any;\n\n const {\n menuItemProps,\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n isFocused,\n isSelected,\n isPressed,\n isDisabled,\n } = useMenuItem(\n {\n isSelected: state.selectionManager.isSelected(key),\n isDisabled: isDisabledKey,\n 'aria-label': item['aria-label'],\n key,\n onClose: submenuContext ? undefined : onClose, // Don't close menu for submenu triggers\n closeOnSelect: submenuContext ? false : closeOnSelect, // Don't close on submenu trigger selection\n isVirtualized,\n onAction: submenuContext?.onAction || onAction,\n },\n state,\n elementRef,\n );\n\n // Selection indicator will be handled by Item component\n const isVirtualFocused = state.selectionManager.focusedKey === key;\n\n // `mergeProps` chains handlers rather than replacing them, so a handler of\n // the item's own passed to it again runs twice. `onKeyDown` used to be: Enter\n // and Space each click the item, so every keyboard activation fired\n // `onAction` twice. It is taken out here and passed once.\n const { onKeyDown: itemOnKeyDown, ...itemOwnProps } = menuItemProps;\n const onKeyDown = submenuContext?.onKeyDown\n ? (e: KeyboardEvent) => {\n // The submenu goes first; a key it handles is not the item's too.\n submenuContext.onKeyDown?.(e);\n if (!e.defaultPrevented) itemOnKeyDown?.(e);\n }\n : itemOnKeyDown;\n\n const mods = {\n ...itemMods,\n focused: isFocused || isVirtualFocused,\n pressed: isPressed,\n selected: isSelected,\n disabled: isDisabled,\n submenu: !!submenuContext,\n menuitem: true,\n };\n\n return (\n <FocusRing>\n <Item\n {...mergeProps({ ...itemOwnProps, onKeyDown }, filteredItemProps, {\n 'data-popover-trigger': true,\n qa: itemQa ? itemQa : `MenuItem-${key}`,\n mods,\n styles,\n 'data-size': size,\n as: 'li',\n labelProps,\n descriptionProps,\n keyboardShortcutProps,\n 'aria-haspopup': submenuContext ? 'menu' : undefined,\n 'aria-expanded': submenuContext?.isOpen,\n 'data-has-submenu': submenuContext ? true : undefined,\n // Chained after the item's own hover handlers.\n onMouseEnter: submenuContext?.onMouseEnter,\n onMouseLeave: submenuContext?.onMouseLeave,\n })}\n ref={elementRef}\n disableActionsFocus={true}\n rightIcon={submenuContext ? <RightIcon /> : filteredItemProps.rightIcon}\n defaultTooltipPlacement=\"right\"\n isSelected={isSelectable ? isSelected : undefined}\n isDisabled={isDisabled}\n size={size === 'small' ? 'small' : 'medium'}\n >\n {rendered}\n </Item>\n </FocusRing>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
3
2
|
import { MenuItem } from "./MenuItem.js";
|
|
4
3
|
import { StyledMenu, StyledSection, StyledSectionHeading } from "./styled.js";
|
|
5
4
|
import { c } from "react-compiler-runtime";
|
|
@@ -59,12 +58,6 @@ function MenuSection(props) {
|
|
|
59
58
|
size,
|
|
60
59
|
onAction: node.onAction
|
|
61
60
|
}, node.key);
|
|
62
|
-
if (node.props.tooltip) menuItem = /* @__PURE__ */ jsx(TooltipProvider, {
|
|
63
|
-
activeWrap: true,
|
|
64
|
-
placement: "right",
|
|
65
|
-
...typeof node.props.tooltip === "string" ? { title: node.props.tooltip } : node.props.tooltip,
|
|
66
|
-
children: menuItem
|
|
67
|
-
}, node.key);
|
|
68
61
|
if (node.props.wrapper) menuItem = node.props.wrapper(menuItem);
|
|
69
62
|
return menuItem;
|
|
70
63
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuSection.js","names":["Styles","useMenuSection","
|
|
1
|
+
{"version":3,"file":"MenuSection.js","names":["Styles","useMenuSection","MenuItem","MenuItemProps","StyledMenu","StyledSection","StyledSectionHeading","CubeMenuSectionProps","T","itemStyles","headingStyles","size","MenuSection","props","$","_c","item","state","styles","heading","rendered","t0","t1","itemProps","headingProps","groupProps","t2","t3","Symbol","for","section","t4","childNodes","t5","map","node","menuItem","key","onAction","wrapper","t6","t7"],"sources":["../../../../src/components/actions/Menu/MenuSection.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { useMenuSection } from 'react-aria';\n\nimport { MenuItem, MenuItemProps } from './MenuItem';\nimport { StyledMenu, StyledSection, StyledSectionHeading } from './styled';\n\nexport interface CubeMenuSectionProps<T> extends MenuItemProps<T> {\n itemStyles?: Styles;\n headingStyles?: Styles;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuSection<T>(props: CubeMenuSectionProps<T>) {\n const { item, state, styles, itemStyles, headingStyles, size } = props;\n const heading = item.rendered;\n const { itemProps, headingProps, groupProps } = useMenuSection({\n heading,\n 'aria-label': item['aria-label'],\n });\n\n return (\n <>\n <StyledSection {...itemProps} styles={styles}>\n {heading && (\n <StyledSectionHeading\n {...headingProps}\n size={size}\n styles={headingStyles}\n >\n {heading}\n </StyledSectionHeading>\n )}\n <StyledMenu {...groupProps} mods={{ section: true }}>\n {[...item.childNodes].map((node) => {\n let menuItem = (\n <MenuItem\n key={node.key}\n item={node}\n styles={itemStyles}\n state={state}\n size={size}\n onAction={(node as unknown as MenuItemProps<T>).onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself, as `Menu` does\n // for items outside a section.\n if (node.props.wrapper) {\n menuItem = node.props.wrapper(menuItem);\n }\n\n return menuItem;\n })}\n </StyledMenu>\n </StyledSection>\n </>\n );\n}\n"],"mappings":";;;;;;;;;AAaA,SAAOY,YAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACL,MAAA,EAAAC,MAAAC,OAAAC,QAAAT,YAAAC,eAAAC,SAAiEE;CACjE,MAAAM,UAAgBH,KAAII;CAGJ,MAAAC,KAAAL,KAAK;CAAa,IAAAM;AAAA,KAAAR,EAAA,OAAAK,WAAAL,EAAA,OAAAO,IAAA;AAF6BC,OAAA;GAAAH;GAAA,cAE/CE;GACf;AAAAP,IAAA,KAAAK;AAAAL,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;CAHD,MAAA,EAAAS,WAAAC,cAAAC,eAAgDxB,eAAeqB,GAG7D;CAAC,IAAAI;AAAA,KAAAZ,EAAA,OAAAK,WAAAL,EAAA,OAAAU,gBAAAV,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,MAAA;AAKIe,OAAAP,WACC,oBAAC;GAAoB,GACfK;GACEb;GACED,QAAAA;aAEPS;IAEJ;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAU;AAAAV,IAAA,KAAAJ;AAAAI,IAAA,KAAAH;AAAAG,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAc,OAAAC,IAAA,4BAAA,EAAA;AACiCF,OAAA,EAAAG,SAAW,MAAM;AAAAhB,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAE,KAAAgB,YAAA;AAChDD,OAAA,CAAA,GAAIf,KAAIgB,WAAY;AAAAlB,IAAA,KAAAE,KAAAgB;AAAAlB,IAAA,MAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAmB;AAAA,KAAAnB,EAAA,QAAAL,cAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAG,SAAAH,EAAA,QAAAiB,IAAA;AAApBE,OAAAF,GAAoBG,KAAKC,SAAA;GACxB,IAAAC,WACE,oBAAC;IAEOD,MAAAA;IACE1B,QAAAA;IACDQ;IACDN;IACI,UAACwB,KAAmCG;MALzCH,KAAIE,IAMT;AAKJ,OAAIF,KAAItB,MAAM0B,QACZH,YAAWD,KAAItB,MAAM0B,QAASH,SAAS;AACxC,UAEMA;IACP;AAAAtB,IAAA,MAAAL;AAAAK,IAAA,MAAAH;AAAAG,IAAA,MAAAG;AAAAH,IAAA,MAAAiB;AAAAjB,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;CAAA,IAAA0B;AAAA,KAAA1B,EAAA,QAAAW,cAAAX,EAAA,QAAAmB,IAAA;AApBJO,OAAA,oBAAC;GAAU,GAAKf;GAAkB,MAAAE;aAC/BM;IAoBU;AAAAnB,IAAA,MAAAW;AAAAX,IAAA,MAAAmB;AAAAnB,IAAA,MAAA0B;OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;AAAA,KAAA3B,EAAA,QAAAS,aAAAT,EAAA,QAAAI,UAAAJ,EAAA,QAAAY,MAAAZ,EAAA,QAAA0B,IAAA;AAhCjBC,OAAA,0CACE,qBAAC;GAAa,GAAKlB;GAAmBL;cACnCQ,IASDc;IAsBc,GACf;AAAA1B,IAAA,MAAAS;AAAAT,IAAA,MAAAI;AAAAJ,IAAA,MAAAY;AAAAZ,IAAA,MAAA0B;AAAA1B,IAAA,MAAA2B;OAAAA,MAAA3B,EAAA;AAAA,QAlCH2B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
2
2
|
import { SlotProvider } from "../../../utils/react/Slots.js";
|
|
3
3
|
import { usePopoverSync } from "../../../utils/react/usePopoverSync.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
|
|
3
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
4
|
import { MenuContext, useMenuContext } from "./context.js";
|
|
@@ -95,7 +95,6 @@ function InternalSubMenuTrigger(props) {
|
|
|
95
95
|
e.stopPropagation();
|
|
96
96
|
e.nativeEvent.stopImmediatePropagation();
|
|
97
97
|
state.open();
|
|
98
|
-
suppressNextActionRef.current = true;
|
|
99
98
|
} else if (e.key === "ArrowLeft" && state.isOpen) {
|
|
100
99
|
e.preventDefault();
|
|
101
100
|
e.stopPropagation();
|
|
@@ -106,7 +105,6 @@ function InternalSubMenuTrigger(props) {
|
|
|
106
105
|
const hoverCloseTimerRef = useRef(null);
|
|
107
106
|
const isHoveringRef = useRef(false);
|
|
108
107
|
const isHoveringSubmenuRef = useRef(false);
|
|
109
|
-
const suppressNextActionRef = useRef(false);
|
|
110
108
|
const checkShouldClose = () => {
|
|
111
109
|
if (!isHoveringRef.current && !isHoveringSubmenuRef.current) hoverCloseTimerRef.current = setTimeout(() => {
|
|
112
110
|
if (!isHoveringRef.current && !isHoveringSubmenuRef.current) state.close();
|
|
@@ -164,10 +162,6 @@ function InternalSubMenuTrigger(props) {
|
|
|
164
162
|
onMouseLeave: handleMouseLeave,
|
|
165
163
|
onKeyDown: handleKeyDown,
|
|
166
164
|
onAction: isDisabled ? void 0 : () => {
|
|
167
|
-
if (suppressNextActionRef.current) {
|
|
168
|
-
suppressNextActionRef.current = false;
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
165
|
state.open();
|
|
172
166
|
}
|
|
173
167
|
}), [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubMenuTrigger.js","names":["useSyncRef","React","Key","ReactElement","ReactNode","useEffect","useMemo","useRef","useState","AriaMenuTriggerProps","DismissButton","Placement","useMenuTrigger","useOverlayPosition","useMenuTriggerState","useEvent","generateRandomId","usePopoverSync","Popover","MenuContext","MenuContextValue","useMenuContext","SubmenuTriggerContext","DEFAULT_PLACEMENT","DEFAULT_OFFSET","DEFAULT_CROSS_OFFSET","CubeSubMenuTriggerProps","placement","offset","crossOffset","shouldFlip","containerPadding","children","isDisabled","onAction","key","autoFocus","InternalSubMenuTriggerProps","targetKey","InternalSubMenuTrigger","props","overlayProps","menuTrigger","menu","Children","toArray","state","submenuId","domTriggerRef","HTMLElement","popoverRef","HTMLDivElement","menuRef","HTMLUListElement","menuId","isOpen","onClose","close","triggerRef","containerRef","menuTriggerProps","rawTriggerProps","menuProps","type","parentContext","onKeyDown","_mtOnKeyDown","onPress","_mtOnPress","onPressStart","_mtOnPressStart","onKeyUp","_mtOnKeyUp","positionProps","targetRef","overlayRef","scrollRef","nestedMenuContext","ctx","ref","closeOnSelect","mods","popover","isClosing","hoverOpenTimerRef","current","clearTimeout","hoverCloseTimerRef","isHoveringRef","isHoveringSubmenuRef","handleKeyDown","e","KeyboardEvent","preventDefault","stopPropagation","open","nativeEvent","stopImmediatePropagation","suppressNextActionRef","ReturnType","setTimeout","checkShouldClose","handleMouseEnter","handleMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","mergeHandler","handler1","handler2","args","shouldCloseOnInteractOutside","el","Element","menuTriggerEl","closest","triggerContextValue","triggerProps","onMouseEnter","onMouseLeave","undefined","style","display","cloneElement","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n Placement,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover } from '../../overlays/Modal';\n\nimport { MenuContext, MenuContextValue, useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\n// Default placement & offset for sub-menus (matches Spectrum / Aria)\nconst DEFAULT_PLACEMENT: Placement = 'right top';\nconst DEFAULT_OFFSET = 4;\nconst DEFAULT_CROSS_OFFSET = -5;\n\nexport interface CubeSubMenuTriggerProps extends AriaMenuTriggerProps {\n /** The preferred placement of the sub-menu relative to the trigger */\n placement?: Placement;\n\n /** Distance in pixels between the trigger and sub-menu */\n offset?: number;\n\n /** Distance in pixels along the cross axis from the default alignment */\n crossOffset?: number;\n\n /** Whether the sub-menu should flip to the opposite side when it would overflow */\n shouldFlip?: boolean;\n\n /** Minimum padding in pixels between the sub-menu and viewport edges */\n containerPadding?: number;\n\n /**\n * Sub-menu trigger and the sub-menu itself. Must be exactly two React nodes.\n *\n * 1) Trigger – **must render `<li role=\"menuitem\">`** (usually `Menu.Item`).\n * 2) Sub-menu – a `<Menu>` element.\n */\n children: [ReactNode, ReactElement];\n\n /** Whether the trigger is disabled and cannot be activated */\n isDisabled?: boolean;\n\n /**\n * Callback fired when an action is selected from the sub-menu.\n * Bubbles the `onAction` event from the sub-menu to parent components.\n */\n onAction?: (key: Key) => void;\n\n /**\n * Controls focus behavior when the sub-menu opens.\n * - `true` or `'first'`: Focus the first item\n * - `'last'`: Focus the last item\n * - `false`: Don't auto-focus any item\n * @default 'first'\n */\n autoFocus?: boolean | 'first' | 'last';\n}\n\ninterface InternalSubMenuTriggerProps extends CubeSubMenuTriggerProps {\n targetKey?: Key;\n}\n\n/**\n * Internal SubMenuTrigger that receives the already-rendered trigger element\n * from the collection system and wraps it with submenu behavior.\n */\nfunction InternalSubMenuTrigger(props: InternalSubMenuTriggerProps) {\n const {\n children,\n placement = DEFAULT_PLACEMENT,\n offset = DEFAULT_OFFSET,\n crossOffset = DEFAULT_CROSS_OFFSET,\n shouldFlip = true,\n isDisabled,\n autoFocus = 'first',\n onAction,\n targetKey,\n ...overlayProps\n } = props;\n\n // Children: [menuTrigger (already rendered MenuItem), menu (Menu component)]\n const [menuTrigger, menu] = React.Children.toArray(children) as [\n ReactElement,\n ReactElement,\n ];\n\n const state = useMenuTriggerState(props as AriaMenuTriggerProps);\n\n // Generate a unique ID for this submenu instance\n const submenuId = useMemo(() => generateRandomId(), []);\n\n // Refs – trigger (MenuItem <li>) and overlay (<div> from Popover)\n const domTriggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n usePopoverSync({\n menuId: submenuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: domTriggerRef,\n containerRef: popoverRef,\n });\n\n // Strip keyboard/press handlers that we will implement ourselves\n const { menuTriggerProps: rawTriggerProps, menuProps } = useMenuTrigger(\n { type: 'submenu', isDisabled },\n state,\n domTriggerRef,\n );\n\n // Get parent context to check if parent menu is closing\n const parentContext = useMenuContext();\n\n // Remove default onKeyDown/onPress handlers from trigger props – we implement custom ones\n const {\n onKeyDown: _mtOnKeyDown,\n onPress: _mtOnPress,\n onPressStart: _mtOnPressStart,\n onKeyUp: _mtOnKeyUp,\n ...menuTriggerProps\n } = rawTriggerProps;\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: domTriggerRef,\n overlayRef: popoverRef,\n scrollRef: menuRef,\n placement,\n offset: offset as number,\n crossOffset: crossOffset as number,\n shouldFlip,\n isOpen: state.isOpen,\n onClose: state.close,\n });\n\n /**\n * Build a MenuContext for the nested menu so it behaves just like a regular\n * popover-based Menu (selection handling, focus management, etc.).\n */\n const nestedMenuContext = useMemo(() => {\n const ctx: MenuContextValue = {\n ...menuProps,\n ref: menuRef,\n // Pass the parent's onClose to close the entire menu hierarchy\n onClose: () => {\n // Close this submenu state immediately\n state.close();\n\n // Then close the parent menu\n if (parentContext.onClose) {\n parentContext.onClose();\n }\n },\n closeOnSelect: true,\n autoFocus,\n mods: {\n popover: true,\n },\n // Propagate closing state from parent\n isClosing: parentContext.isClosing || !state.isOpen,\n };\n\n return ctx;\n }, [\n menuProps,\n autoFocus,\n state,\n parentContext.onClose,\n parentContext.isClosing,\n ]);\n\n // Sync the parent selection manager focus with DOM ref (for virtual focus scenarios)\n useSyncRef(parentContext, domTriggerRef);\n\n // Cleanup hover timers and reset refs on unmount\n useEffect(() => {\n return () => {\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n }\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n }\n isHoveringRef.current = false;\n isHoveringSubmenuRef.current = false;\n };\n }, []);\n\n // ----- Render -----\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n\n // Arrow right opens submenu\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n e.stopPropagation();\n state.open();\n }\n // Enter or Space opens submenu (suppress subsequent onAction)\n else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n // Stop immediate propagation to prevent React Aria's handlers from running\n e.nativeEvent.stopImmediatePropagation();\n state.open();\n suppressNextActionRef.current = true; // Remember it was keyboard\n }\n // Arrow left closes submenu if open\n else if (e.key === 'ArrowLeft' && state.isOpen) {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n }\n };\n\n // Use refs to store timer IDs\n const hoverOpenTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverCloseTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if mouse is over trigger or submenu\n const isHoveringRef = useRef(false);\n const isHoveringSubmenuRef = useRef(false);\n\n // Track whether the next onAction comes from a keyboard press\n const suppressNextActionRef = useRef(false);\n\n const checkShouldClose = () => {\n // Only close if mouse is not over trigger OR submenu\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n hoverCloseTimerRef.current = setTimeout(() => {\n // Double check before closing\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n state.close();\n }\n }, 300);\n }\n };\n\n // Handle mouse interactions on trigger\n const handleMouseEnter = () => {\n if (isDisabled) return;\n\n isHoveringRef.current = true;\n\n // Clear any pending close timer\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n\n // Use a small delay to prevent accidental opens\n if (!state.isOpen) {\n hoverOpenTimerRef.current = setTimeout(() => {\n if (isHoveringRef.current) {\n state.open();\n }\n }, 200);\n }\n };\n\n const handleMouseLeave = () => {\n isHoveringRef.current = false;\n\n // Clear open timer if it exists\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n hoverOpenTimerRef.current = null;\n }\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Handle mouse events on the submenu popover\n const handlePopoverMouseEnter = () => {\n isHoveringSubmenuRef.current = true;\n\n // Clear any pending close timer when entering submenu\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n isHoveringSubmenuRef.current = false;\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Merge event handlers\n const mergeHandler = (handler1: any, handler2: any) => {\n return (...args: any[]) => {\n handler1?.(...args);\n handler2?.(...args);\n };\n };\n\n // Outside-click handling for the nested submenu Popover.\n //\n // React Aria's `useOverlay` keeps a module-level `visibleOverlays` stack and\n // only invokes `onClose` for the topmost overlay (`onHide` gates on the\n // stack tail). With root + N nested submenus open, a single outside click\n // would otherwise only close the deepest submenu. Scheduling\n // `parentContext.onClose()` here propagates the close upward; the existing\n // `parentContext.isClosing` cascade (see `nestedMenuContext.isClosing` and\n // the Popover's `isOpen={!parentContext.isClosing}`) collapses every\n // intermediate submenu visually.\n //\n // Mirrors `MenuTrigger`'s predicate so clicks on `[data-popover-trigger]`\n // and `[data-popover-dismiss]` elements behave consistently across nesting\n // levels.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n if (!state.isOpen) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n if (el.closest('[data-popover-dismiss]')) {\n // Let the button's onPress fire first, then collapse the chain.\n setTimeout(() => parentContext.onClose?.(), 0);\n return false;\n }\n // True outside click: schedule parent close so the entire hierarchy\n // cascades. `useOverlay`'s own `onHide` will close this submenu via the\n // topmost-overlay rule.\n setTimeout(() => parentContext.onClose?.(), 0);\n return true;\n }\n // Click landed on a popover trigger (parent menu item, sibling submenu\n // trigger, or a different menu's button). Don't close ourselves here —\n // either the trigger handles it or `usePopoverSync` closes us via\n // `popover:open`.\n return false;\n });\n\n // Provide context to the trigger element (already rendered MenuItem)\n const triggerContextValue = useMemo(\n () => ({\n triggerRef: domTriggerRef,\n triggerProps: menuTriggerProps,\n isOpen: state.isOpen,\n isDisabled,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onKeyDown: handleKeyDown,\n onAction: isDisabled\n ? undefined\n : () => {\n // Ignore the synthetic press generated by the same Enter/Space\n if (suppressNextActionRef.current) {\n suppressNextActionRef.current = false;\n return;\n }\n // This is a mouse click, open the submenu\n state.open();\n },\n }),\n [\n state,\n isDisabled,\n handleMouseEnter,\n handleMouseLeave,\n handleKeyDown,\n menuTriggerProps,\n ],\n );\n\n return (\n <>\n <SubmenuTriggerContext.Provider value={triggerContextValue}>\n {menuTrigger}\n </SubmenuTriggerContext.Provider>\n {state.isOpen && (\n <Popover\n ref={popoverRef}\n hideArrow\n isNonModal\n isOpen={!parentContext.isClosing}\n style={positionProps.style}\n placement={placement as Placement}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n // Spread any additional overlay props\n {...overlayProps}\n >\n {/* Wrap content in a div to capture mouse events */}\n <div\n style={{ display: 'contents' }}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n >\n {/* Dismiss buttons for screen reader / keyboard support */}\n <DismissButton onDismiss={state.close} />\n {/* Provide updated menu context so nested menu behaves correctly */}\n <MenuContext.Provider value={nestedMenuContext}>\n {/* Clone nested menu to inject required props */}\n {React.cloneElement(menu, {\n ...(menu.props as any),\n autoFocus,\n onAction: (key: Key) => {\n // Call original menu onAction first\n (menu.props as any).onAction?.(key);\n onAction?.(key);\n // Don't close here - MenuItem will handle it via context.onClose\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n // Handle keyboard navigation for closing submenu\n if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n // Return focus to trigger\n domTriggerRef.current?.focus();\n }\n // Call original handler if exists\n (menu.props as any).onKeyDown?.(e);\n },\n ref: menuRef,\n })}\n </MenuContext.Provider>\n <DismissButton onDismiss={state.close} />\n </div>\n </Popover>\n )}\n </>\n );\n}\n\n/**\n * Public SubMenuTrigger component that users interact with.\n * It just provides the getCollectionNode for the collection system.\n */\nexport function SubMenuTrigger(props: CubeSubMenuTriggerProps) {\n // This component is never actually rendered directly.\n // The collection system uses getCollectionNode to build the menu.\n return null;\n}\n\n// Allow React Stately collection builder to treat SubMenuTrigger as an Item\n(SubMenuTrigger as any).getCollectionNode = function* (\n props: CubeSubMenuTriggerProps,\n) {\n const [trigger, menu] = React.Children.toArray(\n props.children,\n ) as ReactElement[];\n\n // Yield a collection node that tells the Menu to wrap this item with InternalSubMenuTrigger\n yield {\n element: trigger,\n wrapper: (element: ReactElement) => (\n <InternalSubMenuTrigger\n key={element.key || undefined}\n targetKey={element.key || undefined}\n {...props}\n >\n {element}\n {menu}\n </InternalSubMenuTrigger>\n ),\n };\n};\n\nSubMenuTrigger.displayName = 'SubMenuTrigger';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubMenuTrigger.js","names":["useSyncRef","React","Key","ReactElement","ReactNode","useEffect","useMemo","useRef","useState","AriaMenuTriggerProps","DismissButton","Placement","useMenuTrigger","useOverlayPosition","useMenuTriggerState","useEvent","generateRandomId","usePopoverSync","Popover","MenuContext","MenuContextValue","useMenuContext","SubmenuTriggerContext","DEFAULT_PLACEMENT","DEFAULT_OFFSET","DEFAULT_CROSS_OFFSET","CubeSubMenuTriggerProps","placement","offset","crossOffset","shouldFlip","containerPadding","children","isDisabled","onAction","key","autoFocus","InternalSubMenuTriggerProps","targetKey","InternalSubMenuTrigger","props","overlayProps","menuTrigger","menu","Children","toArray","state","submenuId","domTriggerRef","HTMLElement","popoverRef","HTMLDivElement","menuRef","HTMLUListElement","menuId","isOpen","onClose","close","triggerRef","containerRef","menuTriggerProps","rawTriggerProps","menuProps","type","parentContext","onKeyDown","_mtOnKeyDown","onPress","_mtOnPress","onPressStart","_mtOnPressStart","onKeyUp","_mtOnKeyUp","positionProps","targetRef","overlayRef","scrollRef","nestedMenuContext","ctx","ref","closeOnSelect","mods","popover","isClosing","hoverOpenTimerRef","current","clearTimeout","hoverCloseTimerRef","isHoveringRef","isHoveringSubmenuRef","handleKeyDown","e","KeyboardEvent","preventDefault","stopPropagation","open","nativeEvent","stopImmediatePropagation","ReturnType","setTimeout","checkShouldClose","handleMouseEnter","handleMouseLeave","handlePopoverMouseEnter","handlePopoverMouseLeave","mergeHandler","handler1","handler2","args","shouldCloseOnInteractOutside","el","Element","menuTriggerEl","closest","triggerContextValue","triggerProps","onMouseEnter","onMouseLeave","undefined","style","display","cloneElement","focus","SubMenuTrigger","getCollectionNode","trigger","element","wrapper","displayName"],"sources":["../../../../src/components/actions/Menu/SubMenuTrigger.tsx"],"sourcesContent":["import { useSyncRef } from '@react-aria/utils';\nimport React, {\n Key,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n AriaMenuTriggerProps,\n DismissButton,\n Placement,\n useMenuTrigger,\n useOverlayPosition,\n} from 'react-aria';\nimport { useMenuTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { Popover } from '../../overlays/Modal';\n\nimport { MenuContext, MenuContextValue, useMenuContext } from './context';\nimport { SubmenuTriggerContext } from './SubmenuTriggerContext';\n\n// Default placement & offset for sub-menus (matches Spectrum / Aria)\nconst DEFAULT_PLACEMENT: Placement = 'right top';\nconst DEFAULT_OFFSET = 4;\nconst DEFAULT_CROSS_OFFSET = -5;\n\nexport interface CubeSubMenuTriggerProps extends AriaMenuTriggerProps {\n /** The preferred placement of the sub-menu relative to the trigger */\n placement?: Placement;\n\n /** Distance in pixels between the trigger and sub-menu */\n offset?: number;\n\n /** Distance in pixels along the cross axis from the default alignment */\n crossOffset?: number;\n\n /** Whether the sub-menu should flip to the opposite side when it would overflow */\n shouldFlip?: boolean;\n\n /** Minimum padding in pixels between the sub-menu and viewport edges */\n containerPadding?: number;\n\n /**\n * Sub-menu trigger and the sub-menu itself. Must be exactly two React nodes.\n *\n * 1) Trigger – **must render `<li role=\"menuitem\">`** (usually `Menu.Item`).\n * 2) Sub-menu – a `<Menu>` element.\n */\n children: [ReactNode, ReactElement];\n\n /** Whether the trigger is disabled and cannot be activated */\n isDisabled?: boolean;\n\n /**\n * Callback fired when an action is selected from the sub-menu.\n * Bubbles the `onAction` event from the sub-menu to parent components.\n */\n onAction?: (key: Key) => void;\n\n /**\n * Controls focus behavior when the sub-menu opens.\n * - `true` or `'first'`: Focus the first item\n * - `'last'`: Focus the last item\n * - `false`: Don't auto-focus any item\n * @default 'first'\n */\n autoFocus?: boolean | 'first' | 'last';\n}\n\ninterface InternalSubMenuTriggerProps extends CubeSubMenuTriggerProps {\n targetKey?: Key;\n}\n\n/**\n * Internal SubMenuTrigger that receives the already-rendered trigger element\n * from the collection system and wraps it with submenu behavior.\n */\nfunction InternalSubMenuTrigger(props: InternalSubMenuTriggerProps) {\n const {\n children,\n placement = DEFAULT_PLACEMENT,\n offset = DEFAULT_OFFSET,\n crossOffset = DEFAULT_CROSS_OFFSET,\n shouldFlip = true,\n isDisabled,\n autoFocus = 'first',\n onAction,\n targetKey,\n ...overlayProps\n } = props;\n\n // Children: [menuTrigger (already rendered MenuItem), menu (Menu component)]\n const [menuTrigger, menu] = React.Children.toArray(children) as [\n ReactElement,\n ReactElement,\n ];\n\n const state = useMenuTriggerState(props as AriaMenuTriggerProps);\n\n // Generate a unique ID for this submenu instance\n const submenuId = useMemo(() => generateRandomId(), []);\n\n // Refs – trigger (MenuItem <li>) and overlay (<div> from Popover)\n const domTriggerRef = useRef<HTMLElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLUListElement>(null);\n\n usePopoverSync({\n menuId: submenuId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: domTriggerRef,\n containerRef: popoverRef,\n });\n\n // Strip keyboard/press handlers that we will implement ourselves\n const { menuTriggerProps: rawTriggerProps, menuProps } = useMenuTrigger(\n { type: 'submenu', isDisabled },\n state,\n domTriggerRef,\n );\n\n // Get parent context to check if parent menu is closing\n const parentContext = useMenuContext();\n\n // Remove default onKeyDown/onPress handlers from trigger props – we implement custom ones\n const {\n onKeyDown: _mtOnKeyDown,\n onPress: _mtOnPress,\n onPressStart: _mtOnPressStart,\n onKeyUp: _mtOnKeyUp,\n ...menuTriggerProps\n } = rawTriggerProps;\n\n const { overlayProps: positionProps } = useOverlayPosition({\n targetRef: domTriggerRef,\n overlayRef: popoverRef,\n scrollRef: menuRef,\n placement,\n offset: offset as number,\n crossOffset: crossOffset as number,\n shouldFlip,\n isOpen: state.isOpen,\n onClose: state.close,\n });\n\n /**\n * Build a MenuContext for the nested menu so it behaves just like a regular\n * popover-based Menu (selection handling, focus management, etc.).\n */\n const nestedMenuContext = useMemo(() => {\n const ctx: MenuContextValue = {\n ...menuProps,\n ref: menuRef,\n // Pass the parent's onClose to close the entire menu hierarchy\n onClose: () => {\n // Close this submenu state immediately\n state.close();\n\n // Then close the parent menu\n if (parentContext.onClose) {\n parentContext.onClose();\n }\n },\n closeOnSelect: true,\n autoFocus,\n mods: {\n popover: true,\n },\n // Propagate closing state from parent\n isClosing: parentContext.isClosing || !state.isOpen,\n };\n\n return ctx;\n }, [\n menuProps,\n autoFocus,\n state,\n parentContext.onClose,\n parentContext.isClosing,\n ]);\n\n // Sync the parent selection manager focus with DOM ref (for virtual focus scenarios)\n useSyncRef(parentContext, domTriggerRef);\n\n // Cleanup hover timers and reset refs on unmount\n useEffect(() => {\n return () => {\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n }\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n }\n isHoveringRef.current = false;\n isHoveringSubmenuRef.current = false;\n };\n }, []);\n\n // ----- Render -----\n\n // Handle keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (isDisabled) return;\n\n // Arrow right opens submenu\n if (e.key === 'ArrowRight') {\n e.preventDefault();\n e.stopPropagation();\n state.open();\n }\n // Enter or Space opens submenu. Preventing the default keeps `MenuItem`\n // from passing the key on to React Aria's item handler, which would click\n // the item and run its action as well.\n else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n // Stop immediate propagation to prevent React Aria's handlers from running\n e.nativeEvent.stopImmediatePropagation();\n state.open();\n }\n // Arrow left closes submenu if open\n else if (e.key === 'ArrowLeft' && state.isOpen) {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n }\n };\n\n // Use refs to store timer IDs\n const hoverOpenTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoverCloseTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Track if mouse is over trigger or submenu\n const isHoveringRef = useRef(false);\n const isHoveringSubmenuRef = useRef(false);\n\n const checkShouldClose = () => {\n // Only close if mouse is not over trigger OR submenu\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n hoverCloseTimerRef.current = setTimeout(() => {\n // Double check before closing\n if (!isHoveringRef.current && !isHoveringSubmenuRef.current) {\n state.close();\n }\n }, 300);\n }\n };\n\n // Handle mouse interactions on trigger\n const handleMouseEnter = () => {\n if (isDisabled) return;\n\n isHoveringRef.current = true;\n\n // Clear any pending close timer\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n\n // Use a small delay to prevent accidental opens\n if (!state.isOpen) {\n hoverOpenTimerRef.current = setTimeout(() => {\n if (isHoveringRef.current) {\n state.open();\n }\n }, 200);\n }\n };\n\n const handleMouseLeave = () => {\n isHoveringRef.current = false;\n\n // Clear open timer if it exists\n if (hoverOpenTimerRef.current) {\n clearTimeout(hoverOpenTimerRef.current);\n hoverOpenTimerRef.current = null;\n }\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Handle mouse events on the submenu popover\n const handlePopoverMouseEnter = () => {\n isHoveringSubmenuRef.current = true;\n\n // Clear any pending close timer when entering submenu\n if (hoverCloseTimerRef.current) {\n clearTimeout(hoverCloseTimerRef.current);\n hoverCloseTimerRef.current = null;\n }\n };\n\n const handlePopoverMouseLeave = () => {\n isHoveringSubmenuRef.current = false;\n\n // Check if we should close\n checkShouldClose();\n };\n\n // Merge event handlers\n const mergeHandler = (handler1: any, handler2: any) => {\n return (...args: any[]) => {\n handler1?.(...args);\n handler2?.(...args);\n };\n };\n\n // Outside-click handling for the nested submenu Popover.\n //\n // React Aria's `useOverlay` keeps a module-level `visibleOverlays` stack and\n // only invokes `onClose` for the topmost overlay (`onHide` gates on the\n // stack tail). With root + N nested submenus open, a single outside click\n // would otherwise only close the deepest submenu. Scheduling\n // `parentContext.onClose()` here propagates the close upward; the existing\n // `parentContext.isClosing` cascade (see `nestedMenuContext.isClosing` and\n // the Popover's `isOpen={!parentContext.isClosing}`) collapses every\n // intermediate submenu visually.\n //\n // Mirrors `MenuTrigger`'s predicate so clicks on `[data-popover-trigger]`\n // and `[data-popover-dismiss]` elements behave consistently across nesting\n // levels.\n const shouldCloseOnInteractOutside = useEvent((el: Element) => {\n if (!state.isOpen) return false;\n\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n if (el.closest('[data-popover-dismiss]')) {\n // Let the button's onPress fire first, then collapse the chain.\n setTimeout(() => parentContext.onClose?.(), 0);\n return false;\n }\n // True outside click: schedule parent close so the entire hierarchy\n // cascades. `useOverlay`'s own `onHide` will close this submenu via the\n // topmost-overlay rule.\n setTimeout(() => parentContext.onClose?.(), 0);\n return true;\n }\n // Click landed on a popover trigger (parent menu item, sibling submenu\n // trigger, or a different menu's button). Don't close ourselves here —\n // either the trigger handles it or `usePopoverSync` closes us via\n // `popover:open`.\n return false;\n });\n\n // Provide context to the trigger element (already rendered MenuItem)\n const triggerContextValue = useMemo(\n () => ({\n triggerRef: domTriggerRef,\n triggerProps: menuTriggerProps,\n isOpen: state.isOpen,\n isDisabled,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onKeyDown: handleKeyDown,\n onAction: isDisabled\n ? undefined\n : () => {\n // A pointer press: Enter and Space open the submenu in\n // `handleKeyDown` and never reach the item's action.\n state.open();\n },\n }),\n [\n state,\n isDisabled,\n handleMouseEnter,\n handleMouseLeave,\n handleKeyDown,\n menuTriggerProps,\n ],\n );\n\n return (\n <>\n <SubmenuTriggerContext.Provider value={triggerContextValue}>\n {menuTrigger}\n </SubmenuTriggerContext.Provider>\n {state.isOpen && (\n <Popover\n ref={popoverRef}\n hideArrow\n isNonModal\n isOpen={!parentContext.isClosing}\n style={positionProps.style}\n placement={placement as Placement}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={state.close}\n // Spread any additional overlay props\n {...overlayProps}\n >\n {/* Wrap content in a div to capture mouse events */}\n <div\n style={{ display: 'contents' }}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n >\n {/* Dismiss buttons for screen reader / keyboard support */}\n <DismissButton onDismiss={state.close} />\n {/* Provide updated menu context so nested menu behaves correctly */}\n <MenuContext.Provider value={nestedMenuContext}>\n {/* Clone nested menu to inject required props */}\n {React.cloneElement(menu, {\n ...(menu.props as any),\n autoFocus,\n onAction: (key: Key) => {\n // Call original menu onAction first\n (menu.props as any).onAction?.(key);\n onAction?.(key);\n // Don't close here - MenuItem will handle it via context.onClose\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n // Handle keyboard navigation for closing submenu\n if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n state.close();\n // Return focus to trigger\n domTriggerRef.current?.focus();\n }\n // Call original handler if exists\n (menu.props as any).onKeyDown?.(e);\n },\n ref: menuRef,\n })}\n </MenuContext.Provider>\n <DismissButton onDismiss={state.close} />\n </div>\n </Popover>\n )}\n </>\n );\n}\n\n/**\n * Public SubMenuTrigger component that users interact with.\n * It just provides the getCollectionNode for the collection system.\n */\nexport function SubMenuTrigger(props: CubeSubMenuTriggerProps) {\n // This component is never actually rendered directly.\n // The collection system uses getCollectionNode to build the menu.\n return null;\n}\n\n// Allow React Stately collection builder to treat SubMenuTrigger as an Item\n(SubMenuTrigger as any).getCollectionNode = function* (\n props: CubeSubMenuTriggerProps,\n) {\n const [trigger, menu] = React.Children.toArray(\n props.children,\n ) as ReactElement[];\n\n // Yield a collection node that tells the Menu to wrap this item with InternalSubMenuTrigger\n yield {\n element: trigger,\n wrapper: (element: ReactElement) => (\n <InternalSubMenuTrigger\n key={element.key || undefined}\n targetKey={element.key || undefined}\n {...props}\n >\n {element}\n {menu}\n </InternalSubMenuTrigger>\n ),\n };\n};\n\nSubMenuTrigger.displayName = 'SubMenuTrigger';\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.184.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { ItemActionProvider, useItemActionContext } from "./ItemActionContext.js";
|
|
3
3
|
import { openLink, parseTo, performClickHandler, useAction } from "./use-action.js";
|
|
4
4
|
import { ItemAction } from "./ItemAction/ItemAction.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { usePopoverSync } from "../../utils/react/usePopoverSync.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { usePopoverSync } from "../../utils/react/usePopoverSync.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.184.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.184.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.184.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.184.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { _Item } from "../Item/Item.js";
|
|
3
3
|
import themes_default from "../../../data/themes.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { c } from "react-compiler-runtime";
|
|
4
4
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useSlotProps } from "../../utils/react/Slots.js";
|
|
4
4
|
import { c } from "react-compiler-runtime";
|
|
@@ -10,6 +10,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
10
10
|
const STYLE_LIST = [...CONTAINER_STYLES, ...TEXT_STYLES];
|
|
11
11
|
const ContentElement = tasty({
|
|
12
12
|
qa: "Content",
|
|
13
|
+
"data-id": "Content",
|
|
13
14
|
as: "section",
|
|
14
15
|
styles: {
|
|
15
16
|
gridArea: "content",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Content.js","names":["BaseProps","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","tasty","TEXT_STYLES","TextStyleProps","forwardRef","useSlotProps","extractStyles","STYLE_LIST","ContentElement","qa","as","styles","gridArea","preset","color","display","flow","gap","overflow","scrollbar","CubeContentProps","Content","props","ref","$","_c","t0","t1","eventProps","t2"],"sources":["../../../src/components/content/Content.tsx"],"sourcesContent":["import {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n tasty,\n TEXT_STYLES,\n TextStyleProps,\n} from '@tenphi/tasty';\nimport { forwardRef } from 'react';\n\nimport { useSlotProps } from '../../utils/react';\nimport { extractStyles } from '../../utils/styles';\n\nconst STYLE_LIST = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst ContentElement = tasty({\n qa: 'Content',\n as: 'section',\n styles: {\n gridArea: 'content',\n preset: 'p3',\n color: '#dark-02',\n display: 'block',\n flow: 'column',\n gap: '2x',\n overflow: 'auto',\n scrollbar: 'styled',\n },\n});\n\nexport interface CubeContentProps\n extends BaseProps,\n ContainerStyleProps,\n TextStyleProps {}\n\nexport const Content = forwardRef(function Content(\n props: CubeContentProps,\n ref,\n) {\n props = useSlotProps(props, 'content');\n\n const styles = extractStyles(props, STYLE_LIST);\n\n return (\n <ContentElement\n {...filterBaseProps(props, { eventProps: true })}\n ref={ref}\n styles={styles}\n />\n );\n});\n"],"mappings":";;;;;;;;;AAcA,MAAMU,aAAa,CAAC,GAAGT,kBAAkB,GAAGI,YAAY;AAExD,MAAMM,iBAAiBP,MAAM;CAC3BQ,IAAI;
|
|
1
|
+
{"version":3,"file":"Content.js","names":["BaseProps","CONTAINER_STYLES","ContainerStyleProps","filterBaseProps","tasty","TEXT_STYLES","TextStyleProps","forwardRef","useSlotProps","extractStyles","STYLE_LIST","ContentElement","qa","as","styles","gridArea","preset","color","display","flow","gap","overflow","scrollbar","CubeContentProps","Content","props","ref","$","_c","t0","t1","eventProps","t2"],"sources":["../../../src/components/content/Content.tsx"],"sourcesContent":["import {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n tasty,\n TEXT_STYLES,\n TextStyleProps,\n} from '@tenphi/tasty';\nimport { forwardRef } from 'react';\n\nimport { useSlotProps } from '../../utils/react';\nimport { extractStyles } from '../../utils/styles';\n\nconst STYLE_LIST = [...CONTAINER_STYLES, ...TEXT_STYLES];\n\nconst ContentElement = tasty({\n qa: 'Content',\n // Stable where `qa` is not: `Dialog` finds its body by this to watch it for\n // overflow, and a consumer's own `qa` must not hide it.\n 'data-id': 'Content',\n as: 'section',\n styles: {\n gridArea: 'content',\n preset: 'p3',\n color: '#dark-02',\n display: 'block',\n flow: 'column',\n gap: '2x',\n overflow: 'auto',\n scrollbar: 'styled',\n },\n});\n\nexport interface CubeContentProps\n extends BaseProps,\n ContainerStyleProps,\n TextStyleProps {}\n\nexport const Content = forwardRef(function Content(\n props: CubeContentProps,\n ref,\n) {\n props = useSlotProps(props, 'content');\n\n const styles = extractStyles(props, STYLE_LIST);\n\n return (\n <ContentElement\n {...filterBaseProps(props, { eventProps: true })}\n ref={ref}\n styles={styles}\n />\n );\n});\n"],"mappings":";;;;;;;;;AAcA,MAAMU,aAAa,CAAC,GAAGT,kBAAkB,GAAGI,YAAY;AAExD,MAAMM,iBAAiBP,MAAM;CAC3BQ,IAAI;CAGJ,WAAW;CACXC,IAAI;CACJC,QAAQ;EACNC,UAAU;EACVC,QAAQ;EACRC,OAAO;EACPC,SAAS;EACTC,MAAM;EACNC,KAAK;EACLC,UAAU;EACVC,WAAW;EACb;CACD,CAAC;AAOF,MAAaE,UAAUjB,WAAW,SAAAiB,QAAAC,OAAAC,KAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;AAIhCH,SAAQjB,aAAaiB,OAAO,UAAU;CAAjC,IAAAI;AAAA,KAAAF,EAAA,OAAAF,OAAA;AAEUI,OAAApB,cAAcgB,OAAOf,WAAW;AAAAiB,IAAA,KAAAF;AAAAE,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CAA/C,MAAAb,SAAee;CAAiC,IAAAC;AAAA,KAAAH,EAAA,OAAAF,OAAA;AAIxCK,OAAA3B,gBAAgBsB,OAAO,EAAAM,YAAc,MAAM,CAAC;AAAAJ,IAAA,KAAAF;AAAAE,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAA,IAAAK;AAAA,KAAAL,EAAA,OAAAD,OAAAC,EAAA,OAAAb,UAAAa,EAAA,OAAAG,IAAA;AADlDE,OAAA,oBAAC;GAAc,GACTF;GACCJ;GACGZ;IACR;AAAAa,IAAA,KAAAD;AAAAC,IAAA,KAAAb;AAAAa,IAAA,KAAAG;AAAAH,IAAA,KAAAK;OAAAA,MAAAL,EAAA;AAAA,QAJFK;EAMF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useTimer } from "../../../_internal/hooks/use-timer/use-timer.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { _Tooltip } from "../../overlays/Tooltip/Tooltip.js";
|
|
3
3
|
import { TooltipTrigger } from "../../overlays/Tooltip/TooltipTrigger.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
2
2
|
import { useSlotProps } from "../../utils/react/Slots.js";
|
|
3
3
|
import { useCombinedRefs } from "../../utils/react/useCombinedRefs.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useSlotProps } from "../../utils/react/Slots.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useSlotProps } from "../../utils/react/Slots.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.184.0 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { _Text } from "../Text.js";
|
|
4
4
|
import { useKeySymbols } from "../../../utils/react/useKeySymbols.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.184.0 | Cube Dev Team */
|
|
2
2
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
3
3
|
import { ItemBadge } from "../ItemBadge/ItemBadge.js";
|
|
4
4
|
import { useI18n } from "../../../i18n/useI18n.js";
|