@cube-dev/ui-kit 0.0.0-canary-e056095 → 0.0.0-canary-31f7f8e
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/_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.d.ts +0 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +2 -2
- 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 +2 -2
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +2 -2
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +2 -2
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +28 -28
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +2 -2
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +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 +2 -2
- 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 -2
- 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.d.ts +0 -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.js +2 -2
- package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -2
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +2 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js +2 -2
- 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 +2 -2
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +2 -2
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -2
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +2 -2
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +3 -3
- 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 +4 -4
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +0 -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 +2 -2
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
- package/dist/components/fields/Picker/Picker.js +3 -3
- package/dist/components/fields/RadioGroup/Radio.js +2 -2
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
- 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 +2 -2
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +2 -2
- package/dist/components/fields/TextArea/TextArea.js +2 -2
- package/dist/components/fields/TextInput/TextInput.js +2 -2
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +7 -6
- package/dist/components/fields/color/channels.js.map +1 -1
- package/dist/components/fields/color/color.d.ts +1 -0
- package/dist/components/fields/color/color.js +22 -100
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/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/index.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/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +3 -3
- 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 -2
- package/dist/components/navigation/Tabs/Tabs.js +2 -2
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +2 -2
- 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 +2 -2
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +4 -4
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +1 -2
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Modal/types.d.ts +0 -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.d.ts +0 -2
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +0 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -25
- package/dist/i18n/locales/en-US/uikit.js +1 -25
- package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -27
- package/dist/i18n/locales/es-ES/uikit.js +1 -25
- package/dist/i18n/locales/es-MX/uikit.js +1 -25
- package/dist/i18n/locales/fr-FR/uikit.js +1 -25
- package/dist/i18n/locales/it-IT/uikit.js +1 -25
- package/dist/i18n/locales/ja-JP/uikit.js +1 -25
- package/dist/i18n/locales/nb-NO/uikit.js +1 -25
- package/dist/i18n/locales/pt-BR/uikit.js +1 -25
- package/dist/i18n/locales/pt-PT/uikit.js +1 -25
- package/dist/i18n/locales/sv-SE/uikit.js +1 -25
- package/dist/i18n/locales/vi-VN/uikit.js +1 -25
- 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/index.d.ts +0 -8
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +2 -15
- package/dist/index.js +50 -61
- package/dist/index.js.map +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/all-tokens.js +2 -2
- 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 +2 -2
- package/dist/tokens/index.d.ts +1 -0
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/legacy-color.d.ts +61 -0
- package/dist/tokens/legacy-color.js +58 -0
- package/dist/tokens/legacy-color.js.map +1 -0
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +2 -2
- 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.d.ts +2 -0
- package/dist/utils/colors.js +247 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/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/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/Usage.md +18 -0
- package/package.json +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
- package/dist/components/layout/Dashboard/Dashboard.d.ts +0 -19
- package/dist/components/layout/Dashboard/Dashboard.js +0 -188
- package/dist/components/layout/Dashboard/Dashboard.js.map +0 -1
- package/dist/components/layout/Dashboard/DashboardContainer.d.ts +0 -13
- package/dist/components/layout/Dashboard/DashboardContainer.js +0 -272
- package/dist/components/layout/Dashboard/DashboardContainer.js.map +0 -1
- package/dist/components/layout/Dashboard/DashboardContainerContent.js +0 -405
- package/dist/components/layout/Dashboard/DashboardContainerContent.js.map +0 -1
- package/dist/components/layout/Dashboard/DashboardNodeActions.js +0 -228
- package/dist/components/layout/Dashboard/DashboardNodeActions.js.map +0 -1
- package/dist/components/layout/Dashboard/DashboardTabs.d.ts +0 -14
- package/dist/components/layout/Dashboard/DashboardTabs.js +0 -85
- package/dist/components/layout/Dashboard/DashboardTabs.js.map +0 -1
- package/dist/components/layout/Dashboard/DashboardWidget.d.ts +0 -9
- package/dist/components/layout/Dashboard/DashboardWidget.js +0 -196
- package/dist/components/layout/Dashboard/DashboardWidget.js.map +0 -1
- package/dist/components/layout/Dashboard/context.js +0 -37
- package/dist/components/layout/Dashboard/context.js.map +0 -1
- package/dist/components/layout/Dashboard/drag.js +0 -481
- package/dist/components/layout/Dashboard/drag.js.map +0 -1
- package/dist/components/layout/Dashboard/index.d.ts +0 -6
- package/dist/components/layout/Dashboard/occupancy.js +0 -240
- package/dist/components/layout/Dashboard/occupancy.js.map +0 -1
- package/dist/components/layout/Dashboard/placement.js +0 -94
- package/dist/components/layout/Dashboard/placement.js.map +0 -1
- package/dist/components/layout/Dashboard/styles.js +0 -344
- package/dist/components/layout/Dashboard/styles.js.map +0 -1
- package/dist/components/layout/Dashboard/types.d.ts +0 -220
- package/dist/components/layout/Dashboard/use-dashboard-gestures.js +0 -321
- package/dist/components/layout/Dashboard/use-dashboard-gestures.js.map +0 -1
- package/dist/components/layout/Dashboard/use-dashboard-node.js +0 -93
- package/dist/components/layout/Dashboard/use-dashboard-node.js.map +0 -1
- package/dist/components/portal/PortalProvider.d.ts +0 -2
- package/dist/icons/ArrowsHorizontalIcon.d.ts +0 -12
- package/dist/icons/ArrowsHorizontalIcon.js +0 -11
- package/dist/icons/ArrowsHorizontalIcon.js.map +0 -1
- package/dist/icons/ArrowsInHorizontalIcon.d.ts +0 -20
- package/dist/icons/ArrowsInHorizontalIcon.js +0 -31
- package/dist/icons/ArrowsInHorizontalIcon.js.map +0 -1
- package/dist/icons/ArrowsInVerticalIcon.d.ts +0 -13
- package/dist/icons/ArrowsInVerticalIcon.js +0 -24
- package/dist/icons/ArrowsInVerticalIcon.js.map +0 -1
- package/dist/icons/ArrowsMaximizeIcon.d.ts +0 -12
- package/dist/icons/ArrowsMaximizeIcon.js +0 -11
- package/dist/icons/ArrowsMaximizeIcon.js.map +0 -1
- package/dist/icons/ArrowsMinimizeIcon.d.ts +0 -12
- package/dist/icons/ArrowsMinimizeIcon.js +0 -11
- package/dist/icons/ArrowsMinimizeIcon.js.map +0 -1
- package/dist/icons/ArrowsVerticalIcon.d.ts +0 -12
- package/dist/icons/ArrowsVerticalIcon.js +0 -11
- package/dist/icons/ArrowsVerticalIcon.js.map +0 -1
- package/dist/icons/CirclePlusIcon.d.ts +0 -12
- package/dist/icons/CirclePlusIcon.js +0 -11
- package/dist/icons/CirclePlusIcon.js.map +0 -1
- package/dist/icons/MaximizeIcon.d.ts +0 -12
- package/dist/icons/MaximizeIcon.js +0 -11
- package/dist/icons/MaximizeIcon.js.map +0 -1
- package/docs/components/layout/Dashboard.md +0 -409
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardContainer.js","names":[],"sources":["../../../../src/components/layout/Dashboard/DashboardContainer.tsx"],"sourcesContent":["import { CONTAINER_STYLES, filterBaseProps, Styles } from '@tenphi/tasty';\nimport { forwardRef, useContext, useMemo, useRef, useState } from 'react';\nimport { useMove } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { GripVerticalIcon } from '../../../icons/GripVerticalIcon';\nimport {\n mergeProps,\n useCombinedRefs,\n useLayoutEffect,\n} from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { Button } from '../../actions/Button/Button';\n\nimport { DashboardMetricsContext, DashboardTreeContext } from './context';\nimport { DashboardContainerContent } from './DashboardContainerContent';\nimport { DashboardNodeActions } from './DashboardNodeActions';\nimport { renderDashboardDropPreview } from './drag';\nimport {\n getContainerChildMinimum,\n getDashboardDescendantContainerDepth,\n hasContainerLayoutChildren,\n} from './occupancy';\nimport {\n clamp,\n clampRowOrigin,\n clampRows,\n clampSpan,\n getPlacementStyle,\n isSamePlacement,\n normalizePlacement,\n} from './placement';\nimport {\n ContainerElement,\n ContainerHeaderElement,\n CornerResizeGripElement,\n ResizeHandleElement,\n TopLevelResizeHandleElement,\n} from './styles';\nimport { useDashboardGestures } from './use-dashboard-gestures';\nimport { useDashboardNodeInteraction } from './use-dashboard-node';\n\nimport type { ForwardedRef, ReactNode } from 'react';\nimport type {\n CubeDashboardContainerProps,\n DashboardContainerKind,\n DashboardPlacement,\n DashboardPlacementChangeInput,\n DashboardPlacementChangeItem,\n DashboardPlacementChangePhase,\n DashboardPlacementChangeReason,\n DashboardTreeContextValue,\n} from './types';\n\nexport interface DashboardContainerShellProps\n extends CubeDashboardContainerProps {\n kind: DashboardContainerKind;\n content: ReactNode;\n}\n\nexport const DashboardContainerShell = forwardRef(\n function DashboardContainerShell(\n props: DashboardContainerShellProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) {\n const {\n id,\n title,\n kind,\n content,\n isSelectable,\n isMovable = false,\n isResizable = false,\n minColumns = 1,\n maxColumns = 12,\n minRows = 1,\n maxRows,\n onPlacementChange,\n moveLabel,\n resizeLabel,\n onSettingsPress,\n settingsLabel,\n onDeletePress,\n onDuplicatePress,\n duplicateLabel,\n actions,\n onMenuAction,\n deleteLabel,\n column,\n row,\n columns,\n rows = 1,\n children,\n mods,\n styles: explicitStyles,\n style,\n 'aria-label': ariaLabel,\n ...otherProps\n } = props;\n const { t } = useI18n();\n const metrics = useContext(DashboardMetricsContext);\n const localRef = useRef<HTMLDivElement>(null);\n const combinedRef = useCombinedRefs(ref, localRef);\n const node = useDashboardNodeInteraction({\n id,\n isContainer: true,\n isSelectable,\n });\n\n useLayoutEffect(() => {\n node.editing.markArriving(id);\n }, [id, node.editing.markArriving]);\n\n if (node.containerDepth > 3) {\n throw new Error(\n `Dashboard container \"${id}\" exceeds the maximum nesting depth of 3.`,\n );\n }\n\n const extractedStyles = extractStyles(props, CONTAINER_STYLES);\n const styles: Styles = { ...extractedStyles, ...explicitStyles };\n const normalizedPlacement =\n node.tree.parentKind === 'root'\n ? {\n column: 0,\n row: clampRowOrigin(row),\n columns: 12,\n rows: clampRows(rows, 1),\n }\n : normalizePlacement(\n { column, row, columns, rows },\n node.tree.parentColumns,\n node.tree.parentRows,\n );\n const placementStyle = getPlacementStyle(node.tree, normalizedPlacement);\n const childMinimum = getContainerChildMinimum(\n kind,\n children,\n normalizedPlacement.columns,\n normalizedPlacement.rows,\n );\n const descendantContainerDepth =\n getDashboardDescendantContainerDepth(children);\n const isEmpty = !hasContainerLayoutChildren(kind, children);\n const columnLimit = node.tree.parentColumns;\n const rowLimit =\n node.tree.parentKind === 'root'\n ? Math.max(\n childMinimum.rows,\n clampRows(maxRows, Math.max(12, normalizedPlacement.rows)),\n )\n : node.tree.parentRows;\n const resolvedMinColumns = clamp(\n Math.max(clampSpan(minColumns, 1), childMinimum.columns),\n 1,\n columnLimit,\n );\n const resolvedMaxColumns = clamp(\n clampSpan(maxColumns, columnLimit),\n resolvedMinColumns,\n columnLimit,\n );\n const resolvedMinRows = clamp(\n Math.max(clampRows(minRows, 1), childMinimum.rows),\n 1,\n rowLimit,\n );\n const resolvedMaxRows = clamp(\n clampRows(maxRows, rowLimit),\n resolvedMinRows,\n rowLimit,\n );\n const canMove = isMovable && !!onPlacementChange;\n const canMoveColumns =\n canMove &&\n node.tree.parentKind !== 'root' &&\n node.tree.parentKind !== 'vertical-stack';\n const canMoveRows = canMove && node.tree.parentKind !== 'horizontal-stack';\n const canResizeColumns =\n isResizable &&\n !!onPlacementChange &&\n node.tree.parentKind !== 'root' &&\n node.tree.parentKind !== 'vertical-stack' &&\n resolvedMaxColumns > resolvedMinColumns;\n const canResizeRows =\n isResizable &&\n !!onPlacementChange &&\n node.tree.parentKind !== 'horizontal-stack' &&\n resolvedMaxRows > resolvedMinRows;\n const canResize = canResizeColumns || canResizeRows;\n const resizeAxis = canResizeColumns ? (canResizeRows ? 'both' : 'x') : 'y';\n const shouldRenderTitle = kind === 'tabs' && !!title;\n const label = ariaLabel ?? (typeof title === 'string' ? title : id);\n const baseProps = filterBaseProps(otherProps, {\n eventProps: true,\n labelable: true,\n });\n const gestures = useDashboardGestures({\n id,\n isContainer: true,\n containerKind: kind,\n nodeRef: localRef,\n tree: node.tree,\n editing: node.editing,\n metrics,\n placement: normalizedPlacement,\n isSelected: node.isSelected,\n selectSelf: node.selectSelf,\n onPlacementChange,\n canMove,\n canMoveColumns,\n canMoveRows,\n canResize,\n canResizeColumns,\n canResizeRows,\n minColumns: resolvedMinColumns,\n maxColumns: resolvedMaxColumns,\n minRows: resolvedMinRows,\n maxRows: resolvedMaxRows,\n isRootChild: node.tree.parentKind === 'root',\n maximumContainerParentDepth: Math.max(0, 2 - descendantContainerDepth),\n });\n const { isMoving, isResizing, dropPreview, surfaceMoveProps, resizeProps } =\n gestures;\n const handleSettingsPress = useEvent(() => {\n node.selectSelf(false);\n onSettingsPress?.();\n });\n const handleDeletePress = useEvent(() => {\n node.selectSelf(false);\n onDeletePress?.();\n });\n const handleDuplicatePress = useEvent(() => {\n node.selectSelf(false);\n onDuplicatePress?.();\n });\n const handleMenuResize = useEvent((next: DashboardPlacement) => {\n gestures.reportPlacement(next, 'resize', 'commit', 'command');\n });\n const resolvedMods = {\n ...mods,\n depth: String(node.containerDepth),\n titled: shouldRenderTitle,\n selected: node.isSelected,\n arriving: node.editing.arrivingIds.has(id),\n hovered: node.isHovered,\n 'focus-within': node.isFocusWithin,\n editing: node.editing.isEditing,\n empty: isEmpty,\n dragging: node.editing.movingId !== null,\n movable: canMove,\n moving: isMoving,\n resizing: isResizing,\n };\n const ContainerResizeHandleElement =\n node.tree.parentKind === 'root'\n ? TopLevelResizeHandleElement\n : ResizeHandleElement;\n\n return (\n <ContainerElement\n {...mergeProps(baseProps, node.interactionProps, surfaceMoveProps)}\n ref={combinedRef}\n role=\"group\"\n aria-label={moveLabel ?? label}\n aria-roledescription={t('dashboard.container', 'Dashboard container')}\n tabIndex={node.canSelect || canMove ? 0 : undefined}\n data-dashboard-node=\"container\"\n data-dashboard-node-id={id}\n data-dashboard-depth={node.containerDepth}\n data-dashboard-column={normalizedPlacement.column}\n data-dashboard-row={normalizedPlacement.row}\n data-dashboard-columns={normalizedPlacement.columns}\n data-dashboard-rows={normalizedPlacement.rows}\n data-dashboard-min-columns={resolvedMinColumns}\n data-dashboard-max-columns={Math.max(\n resolvedMinColumns,\n clampSpan(maxColumns, 12),\n )}\n data-dashboard-min-rows={resolvedMinRows}\n data-dashboard-max-rows={\n maxRows === undefined\n ? Number.MAX_SAFE_INTEGER\n : Math.max(resolvedMinRows, clampRows(maxRows, resolvedMinRows))\n }\n data-selected={node.isSelected || undefined}\n data-arriving={node.editing.arrivingIds.has(id) || undefined}\n data-moving={isMoving || undefined}\n data-resizing={isResizing || undefined}\n data-dashboard-empty={isEmpty || undefined}\n mods={resolvedMods}\n styles={styles}\n style={{ ...placementStyle, ...style }}\n >\n {shouldRenderTitle ? (\n <ContainerHeaderElement>{title}</ContainerHeaderElement>\n ) : null}\n {content}\n <DashboardNodeActions\n label={label}\n mods={resolvedMods}\n qaAttribute=\"data-dashboard-container-actions\"\n nodeId={id}\n isSelected={node.isSelected}\n placement={normalizedPlacement}\n bounds={{\n minColumns: resolvedMinColumns,\n maxColumns: resolvedMaxColumns,\n minRows: resolvedMinRows,\n maxRows: resolvedMaxRows,\n parentColumns: node.tree.parentColumns,\n parentRows: rowLimit,\n }}\n canResizeColumns={canResizeColumns}\n canResizeRows={canResizeRows}\n nodeRef={localRef}\n actions={actions}\n settingsLabel={settingsLabel}\n duplicateLabel={duplicateLabel}\n deleteLabel={deleteLabel}\n onResize={handleMenuResize}\n onSettingsPress={onSettingsPress && handleSettingsPress}\n onDuplicatePress={onDuplicatePress && handleDuplicatePress}\n onDeletePress={onDeletePress && handleDeletePress}\n onMenuAction={onMenuAction}\n />\n {canResize ? (\n <ContainerResizeHandleElement\n {...resizeProps}\n type=\"button\"\n aria-label={\n resizeLabel ??\n t('dashboard.resizeContainer', 'Resize dashboard container')\n }\n data-dashboard-container-resize-handle=\"\"\n data-dashboard-resize-axis={resizeAxis}\n data-dashboard-no-select=\"\"\n aria-hidden={!node.isSelected || undefined}\n tabIndex={node.isSelected ? undefined : -1}\n mods={{\n ...resolvedMods,\n axis: resizeAxis,\n corner: resizeAxis === 'both',\n }}\n >\n <span data-element=\"Icon\">\n {resizeAxis === 'both' ? (\n <CornerResizeGripElement />\n ) : (\n <GripVerticalIcon size=\"1.5x\" />\n )}\n </span>\n </ContainerResizeHandleElement>\n ) : null}\n {renderDashboardDropPreview(\n dropPreview,\n t('dashboard.dropBlocked', 'This position is already taken'),\n )}\n </ContainerElement>\n );\n },\n);\n\nexport function DashboardContainer(\n kind: Exclude<DashboardContainerKind, 'tabs'>,\n props: CubeDashboardContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { id, columns, rows = 1, children } = props;\n const tree = useContext(DashboardTreeContext);\n const containerDepth = tree.containerDepth + 1;\n const resolvedColumns =\n tree.parentKind === 'root'\n ? 12\n : Math.min(clampSpan(columns, tree.parentColumns), tree.parentColumns);\n const resolvedRows =\n tree.parentKind === 'root'\n ? clampRows(rows, 1)\n : Math.min(clampRows(rows, 1), tree.parentRows);\n const childTree = useMemo<DashboardTreeContextValue>(\n () => ({\n containerDepth,\n parentKind: kind,\n parentId: id,\n layoutParentId: id,\n parentColumns: resolvedColumns,\n parentRows: resolvedRows,\n ancestorIds: [...tree.ancestorIds, id],\n }),\n [containerDepth, id, kind, resolvedColumns, resolvedRows, tree.ancestorIds],\n );\n\n const content = (\n <DashboardTreeContext.Provider value={childTree}>\n <DashboardContainerContent\n id={id}\n kind={kind}\n columns={resolvedColumns}\n rows={resolvedRows}\n depth={containerDepth}\n ancestorIds={[...tree.ancestorIds, id]}\n >\n {children}\n </DashboardContainerContent>\n </DashboardTreeContext.Provider>\n );\n\n return (\n <DashboardContainerShell\n {...props}\n ref={ref}\n kind={kind}\n content={content}\n />\n );\n}\n\nexport const DashboardHorizontalStack = forwardRef(\n function DashboardHorizontalStack(\n props: CubeDashboardContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) {\n return DashboardContainer('horizontal-stack', props, ref);\n },\n);\nDashboardHorizontalStack.displayName = 'DashboardHorizontalStack';\n\nexport const DashboardVerticalStack = forwardRef(\n function DashboardVerticalStack(\n props: CubeDashboardContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) {\n return DashboardContainer('vertical-stack', props, ref);\n },\n);\nDashboardVerticalStack.displayName = 'DashboardVerticalStack';\n\nexport const DashboardGrid = forwardRef(function DashboardGrid(\n props: CubeDashboardContainerProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n return DashboardContainer('grid', props, ref);\n});\nDashboardGrid.displayName = 'DashboardGrid';\n"],"mappings":"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"}
|
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e056095 | Cube Dev Team */
|
|
2
|
-
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
|
-
import { useI18n } from "../../../i18n/useI18n.js";
|
|
4
|
-
import { Button } from "../../actions/Button/Button.js";
|
|
5
|
-
import { __Menu } from "../../actions/Menu/Menu.js";
|
|
6
|
-
import { useAnchoredMenu } from "../../actions/use-anchored-menu.js";
|
|
7
|
-
import { DashboardAuthoringContext, DashboardEditingContext, DashboardMetricsContext } from "./context.js";
|
|
8
|
-
import { CirclePlusIcon } from "../../../icons/CirclePlusIcon.js";
|
|
9
|
-
import { clamp, clampRows, getContentGridStyle, isSamePlacement, pointToCell } from "./placement.js";
|
|
10
|
-
import { getDashboardAddPlacement, getDashboardChildPlacements, getDashboardFreeCells, getDashboardFreeRegion } from "./occupancy.js";
|
|
11
|
-
import { ADD_CELL_BUTTON_STYLES, ContentGridElement, FreeCellElement, FreeCellsLayerElement, RootAddButtonElement } from "./styles.js";
|
|
12
|
-
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
13
|
-
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
-
|
|
15
|
-
//#region src/components/layout/Dashboard/DashboardContainerContent.tsx
|
|
16
|
-
/** Which arrow key grows the region on which axis, and in which direction. */
|
|
17
|
-
const REGION_KEYS = {
|
|
18
|
-
ArrowRight: [1, 0],
|
|
19
|
-
ArrowLeft: [-1, 0],
|
|
20
|
-
ArrowDown: [0, 1],
|
|
21
|
-
ArrowUp: [0, -1]
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* The insertion menu, as a standalone component so `useAnchoredMenu` can render
|
|
25
|
-
* it without a `Menu.Trigger` wrapping the add button.
|
|
26
|
-
*
|
|
27
|
-
* The button cannot be a press trigger: a region gesture ends wherever the
|
|
28
|
-
* pointer stopped — possibly outside the button, which has been resizing under
|
|
29
|
-
* it — and it has to open from the keyboard too. Both routes call `open()`.
|
|
30
|
-
*/
|
|
31
|
-
function AddItemsMenu({ label, items, disabledKeys, onAction }) {
|
|
32
|
-
return /* @__PURE__ */ jsx(__Menu, {
|
|
33
|
-
"aria-label": label,
|
|
34
|
-
width: "280px",
|
|
35
|
-
disabledKeys,
|
|
36
|
-
onAction,
|
|
37
|
-
children: items.map((definition) => /* @__PURE__ */ jsx(__Menu.Item, {
|
|
38
|
-
icon: definition.icon,
|
|
39
|
-
description: definition.description,
|
|
40
|
-
textValue: typeof definition.name === "string" ? definition.name : definition.id,
|
|
41
|
-
children: definition.name
|
|
42
|
-
}, definition.id))
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
function DashboardContainerContent({ id, kind, columns, rows, depth, ancestorIds, tabsId, tabId, children }) {
|
|
46
|
-
const { t } = useI18n();
|
|
47
|
-
const metrics = useContext(DashboardMetricsContext);
|
|
48
|
-
const editing = useContext(DashboardEditingContext);
|
|
49
|
-
const authoring = useContext(DashboardAuthoringContext);
|
|
50
|
-
const gridRef = useRef(null);
|
|
51
|
-
const [isOwnHovered, setIsOwnHovered] = useState(false);
|
|
52
|
-
const [activeCell, setActiveCell] = useState(null);
|
|
53
|
-
const [openAddCell, setOpenAddCell] = useState(null);
|
|
54
|
-
const openAddCellRef = useRef(null);
|
|
55
|
-
/** The area the add button currently claims, `null` while it is one cell. */
|
|
56
|
-
const [addRegion, setAddRegion] = useState(null);
|
|
57
|
-
const addRegionRef = useRef(null);
|
|
58
|
-
const isClaimingRef = useRef(false);
|
|
59
|
-
/** Set by an Escape that abandons a claim, so the release does not open. */
|
|
60
|
-
const isAbandonedRef = useRef(false);
|
|
61
|
-
/** Tears down a live claim's window listeners, including on unmount. */
|
|
62
|
-
const stopClaimRef = useRef(null);
|
|
63
|
-
const placements = useMemo(() => getDashboardChildPlacements(kind, children, columns, rows), [
|
|
64
|
-
children,
|
|
65
|
-
columns,
|
|
66
|
-
kind,
|
|
67
|
-
rows
|
|
68
|
-
]);
|
|
69
|
-
const freeCells = useMemo(() => getDashboardFreeCells(kind, placements, columns, rows), [
|
|
70
|
-
columns,
|
|
71
|
-
kind,
|
|
72
|
-
placements,
|
|
73
|
-
rows
|
|
74
|
-
]);
|
|
75
|
-
const availableItems = useMemo(() => kind === "tabs" ? authoring.addItems.filter((definition) => definition.kind !== void 0 && definition.kind !== "widget" && definition.kind !== "tabs") : authoring.addItems.filter((definition) => definition.kind !== "tabs"), [authoring.addItems, kind]);
|
|
76
|
-
const rememberedActiveCell = activeCell && freeCells.some((cell) => cell.column === activeCell.column && cell.row === activeCell.row) ? activeCell : null;
|
|
77
|
-
const resolvedActiveCell = kind === "tabs" || kind === "horizontal-stack" || kind === "vertical-stack" ? freeCells[0] ?? null : rememberedActiveCell;
|
|
78
|
-
const addButtonCell = openAddCell ?? resolvedActiveCell ?? freeCells[0] ?? null;
|
|
79
|
-
/**
|
|
80
|
-
* A one-cell region is indistinguishable from no region at all, and has to
|
|
81
|
-
* stay that way: as a demand it would disable every item whose minimum is
|
|
82
|
-
* larger than a cell, which is most of a real catalog.
|
|
83
|
-
*/
|
|
84
|
-
const claimedRegion = addRegion && (addRegion.columns > 1 || addRegion.rows > 1) ? addRegion : void 0;
|
|
85
|
-
/** Only a grid has more than one insertion point to drag across. */
|
|
86
|
-
const canClaimRegion = kind === "grid";
|
|
87
|
-
const activePlacements = useMemo(() => new Map(availableItems.map((definition) => [definition.id, addButtonCell ? getDashboardAddPlacement(definition, addButtonCell, kind, placements, columns, rows, depth, claimedRegion) : null])), [
|
|
88
|
-
availableItems,
|
|
89
|
-
claimedRegion,
|
|
90
|
-
columns,
|
|
91
|
-
depth,
|
|
92
|
-
kind,
|
|
93
|
-
placements,
|
|
94
|
-
addButtonCell,
|
|
95
|
-
rows
|
|
96
|
-
]);
|
|
97
|
-
const disabledKeys = useMemo(() => availableItems.filter((definition) => !activePlacements.get(definition.id)).map((definition) => definition.id), [activePlacements, availableItems]);
|
|
98
|
-
const buttonPlacement = !addButtonCell ? null : claimedRegion ?? {
|
|
99
|
-
...addButtonCell,
|
|
100
|
-
columns: 1,
|
|
101
|
-
rows: 1
|
|
102
|
-
};
|
|
103
|
-
const handleAction = useEvent((key) => {
|
|
104
|
-
const itemId = String(key);
|
|
105
|
-
const definition = availableItems.find((item) => item.id === itemId);
|
|
106
|
-
const region = addRegionRef.current;
|
|
107
|
-
const targetCell = openAddCellRef.current ?? addButtonCell;
|
|
108
|
-
const placement = definition && targetCell ? getDashboardAddPlacement(definition, targetCell, kind, placements, columns, rows, depth, region && (region.columns > 1 || region.rows > 1) ? region : void 0) : null;
|
|
109
|
-
if (!placement) return;
|
|
110
|
-
authoring.onAddItem?.(itemId, {
|
|
111
|
-
parentId: id,
|
|
112
|
-
parentKind: kind,
|
|
113
|
-
parentDepth: depth,
|
|
114
|
-
placement,
|
|
115
|
-
...tabsId && { tabsId },
|
|
116
|
-
...tabId && { tabId }
|
|
117
|
-
});
|
|
118
|
-
openAddCellRef.current = null;
|
|
119
|
-
});
|
|
120
|
-
const addMenu = useAnchoredMenu(AddItemsMenu, { placement: "bottom start" }, {
|
|
121
|
-
label: t("dashboard.addMenu", "Items available for {{container}}", { container: id }),
|
|
122
|
-
items: availableItems,
|
|
123
|
-
disabledKeys,
|
|
124
|
-
onAction: handleAction
|
|
125
|
-
});
|
|
126
|
-
const isAddMenuOpen = addMenu.isOpen;
|
|
127
|
-
const updateHover = useEvent((event) => {
|
|
128
|
-
if (isAddMenuOpen || isClaimingRef.current) return;
|
|
129
|
-
const target = event.target;
|
|
130
|
-
const content = event.currentTarget;
|
|
131
|
-
if (target.closest("[data-dashboard-drop-target]") !== content) {
|
|
132
|
-
setIsOwnHovered(false);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
setIsOwnHovered(true);
|
|
136
|
-
const freeCell = target.closest("[data-dashboard-free-cell], [data-dashboard-add-slot]");
|
|
137
|
-
if (freeCell?.dataset.dashboardParentId === id) {
|
|
138
|
-
const next = {
|
|
139
|
-
column: Number(freeCell.dataset.dashboardColumn),
|
|
140
|
-
row: Number(freeCell.dataset.dashboardRow)
|
|
141
|
-
};
|
|
142
|
-
setActiveCell((current) => current?.column === next.column && current.row === next.row ? current : next);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
const handlePointerLeave = useEvent(() => {
|
|
146
|
-
if (isClaimingRef.current) return;
|
|
147
|
-
setIsOwnHovered(false);
|
|
148
|
-
});
|
|
149
|
-
const lockAddCell = useEvent(() => {
|
|
150
|
-
openAddCellRef.current = addButtonCell;
|
|
151
|
-
setOpenAddCell(addButtonCell);
|
|
152
|
-
});
|
|
153
|
-
const setRegion = useEvent((next) => {
|
|
154
|
-
addRegionRef.current = next;
|
|
155
|
-
setAddRegion((current) => current && next && isSamePlacement(current, next) ? current : next);
|
|
156
|
-
});
|
|
157
|
-
const openAddMenu = useEvent(() => {
|
|
158
|
-
if (isAbandonedRef.current) {
|
|
159
|
-
isAbandonedRef.current = false;
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
lockAddCell();
|
|
163
|
-
addMenu.open();
|
|
164
|
-
});
|
|
165
|
-
/**
|
|
166
|
-
* Press-and-drag across free cells to claim the area before choosing what
|
|
167
|
-
* goes in it. The button itself grows to the claimed area, so the affordance
|
|
168
|
-
* shows the outcome rather than describing it.
|
|
169
|
-
*
|
|
170
|
-
* Hung off `onPressStart` rather than a DOM `pointerdown`, because `Button`
|
|
171
|
-
* filters raw event props out; the press gives no coordinates, but none are
|
|
172
|
-
* needed until the first move, which the window listener below reads
|
|
173
|
-
* directly.
|
|
174
|
-
*/
|
|
175
|
-
const startRegionClaim = useEvent((event) => {
|
|
176
|
-
const anchor = addButtonCell;
|
|
177
|
-
const grid = gridRef.current;
|
|
178
|
-
const isPointer = event.pointerType !== "keyboard" && event.pointerType !== "virtual";
|
|
179
|
-
if (!canClaimRegion || !anchor || !grid || !isPointer) return;
|
|
180
|
-
const cells = freeCells;
|
|
181
|
-
lockAddCell();
|
|
182
|
-
isClaimingRef.current = true;
|
|
183
|
-
setRegion({
|
|
184
|
-
...anchor,
|
|
185
|
-
columns: 1,
|
|
186
|
-
rows: 1
|
|
187
|
-
});
|
|
188
|
-
const stop = () => {
|
|
189
|
-
isClaimingRef.current = false;
|
|
190
|
-
stopClaimRef.current = null;
|
|
191
|
-
window.removeEventListener("pointermove", onPointerMove);
|
|
192
|
-
window.removeEventListener("pointerup", onPointerUp);
|
|
193
|
-
window.removeEventListener("pointercancel", onCancel);
|
|
194
|
-
window.removeEventListener("keydown", onKeyDown);
|
|
195
|
-
};
|
|
196
|
-
function onPointerMove(pointer) {
|
|
197
|
-
setRegion(getDashboardFreeRegion(anchor, pointToCell({
|
|
198
|
-
x: pointer.clientX,
|
|
199
|
-
y: pointer.clientY
|
|
200
|
-
}, grid.getBoundingClientRect(), columns, rows, metrics), cells, columns, rows));
|
|
201
|
-
}
|
|
202
|
-
function onPointerUp() {
|
|
203
|
-
stop();
|
|
204
|
-
openAddMenu();
|
|
205
|
-
}
|
|
206
|
-
function onCancel() {
|
|
207
|
-
isAbandonedRef.current = true;
|
|
208
|
-
stop();
|
|
209
|
-
setRegion(null);
|
|
210
|
-
}
|
|
211
|
-
function onKeyDown(keyEvent) {
|
|
212
|
-
if (keyEvent.key !== "Escape") return;
|
|
213
|
-
keyEvent.preventDefault();
|
|
214
|
-
onCancel();
|
|
215
|
-
}
|
|
216
|
-
stopClaimRef.current = stop;
|
|
217
|
-
window.addEventListener("pointermove", onPointerMove);
|
|
218
|
-
window.addEventListener("pointerup", onPointerUp);
|
|
219
|
-
window.addEventListener("pointercancel", onCancel);
|
|
220
|
-
window.addEventListener("keydown", onKeyDown);
|
|
221
|
-
});
|
|
222
|
-
useEffect(() => () => stopClaimRef.current?.(), []);
|
|
223
|
-
/**
|
|
224
|
-
* Shift+arrows are the same claim, without a pointer.
|
|
225
|
-
*
|
|
226
|
-
* Bound on the content grid rather than the button for the same reason as the
|
|
227
|
-
* press above — the raw handler would not survive `Button`'s prop filter — and
|
|
228
|
-
* gated on the add slot so a widget's own arrow keys are untouched.
|
|
229
|
-
*/
|
|
230
|
-
const handleRegionKeyDown = useEvent((event) => {
|
|
231
|
-
const anchor = addButtonCell;
|
|
232
|
-
const [columnDelta, rowDelta] = REGION_KEYS[event.key] ?? [0, 0];
|
|
233
|
-
if (!canClaimRegion || !anchor || !event.shiftKey || !columnDelta && !rowDelta || event.target.dataset?.dashboardAddSlot === void 0) return;
|
|
234
|
-
event.preventDefault();
|
|
235
|
-
event.stopPropagation();
|
|
236
|
-
const current = addRegionRef.current ?? {
|
|
237
|
-
...anchor,
|
|
238
|
-
columns: 1,
|
|
239
|
-
rows: 1
|
|
240
|
-
};
|
|
241
|
-
const far = {
|
|
242
|
-
column: clamp(current.column + current.columns - 1 + columnDelta, anchor.column, columns - 1),
|
|
243
|
-
row: clamp(current.row + current.rows - 1 + rowDelta, anchor.row, rows - 1)
|
|
244
|
-
};
|
|
245
|
-
lockAddCell();
|
|
246
|
-
setRegion(getDashboardFreeRegion(anchor, far, freeCells, columns, rows));
|
|
247
|
-
});
|
|
248
|
-
const wasAddMenuOpenRef = useRef(false);
|
|
249
|
-
useEffect(() => {
|
|
250
|
-
if (isAddMenuOpen) {
|
|
251
|
-
wasAddMenuOpenRef.current = true;
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
if (!wasAddMenuOpenRef.current) return;
|
|
255
|
-
wasAddMenuOpenRef.current = false;
|
|
256
|
-
setOpenAddCell(null);
|
|
257
|
-
setRegion(null);
|
|
258
|
-
const anchor = addMenu.anchorRef.current;
|
|
259
|
-
if (anchor && document.activeElement === document.body) anchor.focus();
|
|
260
|
-
}, [
|
|
261
|
-
addMenu.anchorRef,
|
|
262
|
-
isAddMenuOpen,
|
|
263
|
-
setRegion
|
|
264
|
-
]);
|
|
265
|
-
const anchorRef = addMenu.anchorRef;
|
|
266
|
-
const setAnchor = useCallback((value) => {
|
|
267
|
-
anchorRef.current = value ? value.UNSAFE_getDOMNode() : null;
|
|
268
|
-
}, [anchorRef]);
|
|
269
|
-
const isPermanentAdd = kind === "tabs";
|
|
270
|
-
const isAuthoringVisible = isPermanentAdd || isOwnHovered || isAddMenuOpen;
|
|
271
|
-
const hasAddTarget = !!addButtonCell && !!authoring.onAddItem && availableItems.length > 0;
|
|
272
|
-
const isAddButtonVisible = hasAddTarget && (isPermanentAdd || isOwnHovered || isAddMenuOpen);
|
|
273
|
-
const gridStyle = getContentGridStyle(kind, columns, rows, metrics);
|
|
274
|
-
return /* @__PURE__ */ jsxs(ContentGridElement, {
|
|
275
|
-
ref: gridRef,
|
|
276
|
-
"data-dashboard-drop-target": "",
|
|
277
|
-
"data-dashboard-parent-id": id,
|
|
278
|
-
"data-dashboard-container-kind": kind,
|
|
279
|
-
"data-dashboard-columns": columns,
|
|
280
|
-
"data-dashboard-rows": rows,
|
|
281
|
-
"data-dashboard-depth": depth,
|
|
282
|
-
"data-dashboard-ancestor-ids": JSON.stringify(ancestorIds),
|
|
283
|
-
"data-dashboard-tabs-id": tabsId,
|
|
284
|
-
"data-dashboard-tab-id": tabId,
|
|
285
|
-
"data-dashboard-own-hover": isOwnHovered || void 0,
|
|
286
|
-
style: gridStyle,
|
|
287
|
-
onPointerOver: updateHover,
|
|
288
|
-
onPointerMove: updateHover,
|
|
289
|
-
onPointerLeave: handlePointerLeave,
|
|
290
|
-
onKeyDown: handleRegionKeyDown,
|
|
291
|
-
children: [
|
|
292
|
-
editing.isEditing ? /* @__PURE__ */ jsx(FreeCellsLayerElement, {
|
|
293
|
-
"aria-hidden": "true",
|
|
294
|
-
style: gridStyle,
|
|
295
|
-
children: freeCells.map((cell) => /* @__PURE__ */ jsx(FreeCellElement, {
|
|
296
|
-
"data-dashboard-free-cell": "",
|
|
297
|
-
"data-dashboard-parent-id": id,
|
|
298
|
-
"data-dashboard-column": cell.column,
|
|
299
|
-
"data-dashboard-row": cell.row,
|
|
300
|
-
"data-highlighted": isAuthoringVisible || void 0,
|
|
301
|
-
mods: { highlighted: isAuthoringVisible },
|
|
302
|
-
style: kind === "tabs" ? {
|
|
303
|
-
gridColumn: "1 / -1",
|
|
304
|
-
gridRow: "1 / -1"
|
|
305
|
-
} : {
|
|
306
|
-
gridColumn: `${cell.column + 1} / span 1`,
|
|
307
|
-
gridRow: `${cell.row + 1} / span 1`
|
|
308
|
-
}
|
|
309
|
-
}, `${cell.column}:${cell.row}`))
|
|
310
|
-
}) : null,
|
|
311
|
-
children,
|
|
312
|
-
editing.isEditing && hasAddTarget && buttonPlacement ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
|
|
313
|
-
ref: setAnchor,
|
|
314
|
-
qa: "DashboardAddButton",
|
|
315
|
-
type: "clear",
|
|
316
|
-
icon: isAddButtonVisible ? /* @__PURE__ */ jsx(CirclePlusIcon, {}) : null,
|
|
317
|
-
"aria-label": claimedRegion ? t("dashboard.addItemRegion", "Add an item filling {{columns}} by {{rows}} cells from column {{column}}, row {{row}} in {{container}}", {
|
|
318
|
-
columns: claimedRegion.columns,
|
|
319
|
-
rows: claimedRegion.rows,
|
|
320
|
-
column: claimedRegion.column + 1,
|
|
321
|
-
row: claimedRegion.row + 1,
|
|
322
|
-
container: id
|
|
323
|
-
}) : t("dashboard.addItem", "Add an item at column {{column}}, row {{row}} in {{container}}", {
|
|
324
|
-
column: buttonPlacement.column + 1,
|
|
325
|
-
row: buttonPlacement.row + 1,
|
|
326
|
-
container: id
|
|
327
|
-
}),
|
|
328
|
-
"aria-haspopup": "menu",
|
|
329
|
-
"aria-expanded": isAddMenuOpen,
|
|
330
|
-
"data-dashboard-add-slot": "",
|
|
331
|
-
"data-dashboard-parent-id": id,
|
|
332
|
-
"data-dashboard-column": buttonPlacement.column,
|
|
333
|
-
"data-dashboard-row": buttonPlacement.row,
|
|
334
|
-
"data-dashboard-columns": kind === "tabs" ? columns : buttonPlacement.columns,
|
|
335
|
-
"data-dashboard-rows": kind === "tabs" ? rows : buttonPlacement.rows,
|
|
336
|
-
width: "100%",
|
|
337
|
-
height: "100%",
|
|
338
|
-
opacity: isAddButtonVisible ? 1 : 0,
|
|
339
|
-
"aria-hidden": !isAddButtonVisible || void 0,
|
|
340
|
-
tabIndex: isAddButtonVisible ? void 0 : -1,
|
|
341
|
-
styles: ADD_CELL_BUTTON_STYLES,
|
|
342
|
-
onPress: openAddMenu,
|
|
343
|
-
onPressStart: startRegionClaim,
|
|
344
|
-
style: kind === "tabs" ? {
|
|
345
|
-
gridColumn: "1 / -1",
|
|
346
|
-
gridRow: "1 / -1",
|
|
347
|
-
border: 0,
|
|
348
|
-
outline: "none"
|
|
349
|
-
} : {
|
|
350
|
-
gridColumn: `${buttonPlacement.column + 1} / span ${buttonPlacement.columns}`,
|
|
351
|
-
gridRow: `${buttonPlacement.row + 1} / span ${buttonPlacement.rows}`,
|
|
352
|
-
border: 0,
|
|
353
|
-
outline: "none"
|
|
354
|
-
}
|
|
355
|
-
}), addMenu.rendered] }) : null
|
|
356
|
-
]
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
function DashboardRootAddControl({ row }) {
|
|
360
|
-
const { t } = useI18n();
|
|
361
|
-
const authoring = useContext(DashboardAuthoringContext);
|
|
362
|
-
const containerItems = useMemo(() => authoring.addItems.filter((definition) => definition.kind !== void 0 && definition.kind !== "widget"), [authoring.addItems]);
|
|
363
|
-
const disabledKeys = useMemo(() => containerItems.filter((definition) => definition.isDisabled).map((definition) => definition.id), [containerItems]);
|
|
364
|
-
const handleAction = useEvent((key) => {
|
|
365
|
-
const itemId = String(key);
|
|
366
|
-
const definition = containerItems.find((item) => item.id === itemId);
|
|
367
|
-
if (!definition || definition.isDisabled) return;
|
|
368
|
-
const minRows = clampRows(definition.minRows, 1);
|
|
369
|
-
const maxRows = Math.max(minRows, clampRows(definition.maxRows, Math.max(12, minRows)));
|
|
370
|
-
const rows = clamp(clampRows(definition.defaultRows, minRows), minRows, maxRows);
|
|
371
|
-
authoring.onAddItem?.(itemId, {
|
|
372
|
-
parentId: null,
|
|
373
|
-
parentKind: "root",
|
|
374
|
-
parentDepth: 0,
|
|
375
|
-
placement: {
|
|
376
|
-
column: 0,
|
|
377
|
-
row,
|
|
378
|
-
columns: 12,
|
|
379
|
-
rows
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
if (!authoring.onAddItem || containerItems.length === 0) return null;
|
|
384
|
-
return /* @__PURE__ */ jsxs(__Menu.Trigger, { children: [/* @__PURE__ */ jsx(RootAddButtonElement, {
|
|
385
|
-
type: "clear",
|
|
386
|
-
icon: /* @__PURE__ */ jsx(CirclePlusIcon, {}),
|
|
387
|
-
"aria-label": t("dashboard.addTopLevelContainer", "Add top-level dashboard container"),
|
|
388
|
-
style: { border: 0 }
|
|
389
|
-
}), /* @__PURE__ */ jsx(__Menu, {
|
|
390
|
-
"aria-label": t("dashboard.addTopLevelMenu", "Top-level dashboard containers"),
|
|
391
|
-
width: "280px",
|
|
392
|
-
disabledKeys,
|
|
393
|
-
onAction: handleAction,
|
|
394
|
-
children: containerItems.map((definition) => /* @__PURE__ */ jsx(__Menu.Item, {
|
|
395
|
-
icon: definition.icon,
|
|
396
|
-
description: definition.description,
|
|
397
|
-
textValue: typeof definition.name === "string" ? definition.name : definition.id,
|
|
398
|
-
children: definition.name
|
|
399
|
-
}, definition.id))
|
|
400
|
-
})] });
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
//#endregion
|
|
404
|
-
export { DashboardContainerContent, DashboardRootAddControl };
|
|
405
|
-
//# sourceMappingURL=DashboardContainerContent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardContainerContent.js","names":["Menu"],"sources":["../../../../src/components/layout/Dashboard/DashboardContainerContent.tsx"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { CirclePlusIcon } from '../../../icons/CirclePlusIcon';\nimport { Button } from '../../actions/Button/Button';\nimport { Menu } from '../../actions/Menu/Menu';\nimport { useAnchoredMenu } from '../../actions/use-anchored-menu';\n\nimport {\n DashboardAuthoringContext,\n DashboardEditingContext,\n DashboardMetricsContext,\n} from './context';\nimport {\n getDashboardAddPlacement,\n getDashboardChildPlacements,\n getDashboardFreeCells,\n getDashboardFreeRegion,\n} from './occupancy';\nimport {\n clamp,\n clampRows,\n getContentGridStyle,\n isSamePlacement,\n pointToCell,\n} from './placement';\nimport {\n ADD_CELL_BUTTON_STYLES,\n ContentGridElement,\n FreeCellElement,\n FreeCellsLayerElement,\n RootAddButtonElement,\n} from './styles';\n\nimport type { FocusableRefValue, Key, PressEvent } from '@react-types/shared';\nimport type {\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n PointerEvent as ReactPointerEvent,\n} from 'react';\nimport type { DashboardFreeCell } from './occupancy';\nimport type {\n DashboardAddItemDefinition,\n DashboardContainerKind,\n DashboardPlacement,\n} from './types';\n\n/** Which arrow key grows the region on which axis, and in which direction. */\nconst REGION_KEYS: Record<string, [number, number]> = {\n ArrowRight: [1, 0],\n ArrowLeft: [-1, 0],\n ArrowDown: [0, 1],\n ArrowUp: [0, -1],\n};\n\nexport interface DashboardContainerContentProps {\n id: string;\n kind: DashboardContainerKind;\n columns: number;\n rows: number;\n depth: number;\n ancestorIds: string[];\n tabsId?: string;\n tabId?: string;\n children?: ReactNode;\n}\n\ninterface AddItemsMenuProps {\n label: string;\n items: readonly DashboardAddItemDefinition[];\n disabledKeys: string[];\n onAction: (key: Key) => void;\n}\n\n/**\n * The insertion menu, as a standalone component so `useAnchoredMenu` can render\n * it without a `Menu.Trigger` wrapping the add button.\n *\n * The button cannot be a press trigger: a region gesture ends wherever the\n * pointer stopped — possibly outside the button, which has been resizing under\n * it — and it has to open from the keyboard too. Both routes call `open()`.\n */\nfunction AddItemsMenu({\n label,\n items,\n disabledKeys,\n onAction,\n}: AddItemsMenuProps) {\n return (\n <Menu\n aria-label={label}\n width=\"280px\"\n disabledKeys={disabledKeys}\n onAction={onAction}\n >\n {items.map((definition) => (\n <Menu.Item\n key={definition.id}\n icon={definition.icon}\n description={definition.description}\n textValue={\n typeof definition.name === 'string'\n ? definition.name\n : definition.id\n }\n >\n {definition.name}\n </Menu.Item>\n ))}\n </Menu>\n );\n}\n\nexport function DashboardContainerContent({\n id,\n kind,\n columns,\n rows,\n depth,\n ancestorIds,\n tabsId,\n tabId,\n children,\n}: DashboardContainerContentProps) {\n const { t } = useI18n();\n const metrics = useContext(DashboardMetricsContext);\n const editing = useContext(DashboardEditingContext);\n const authoring = useContext(DashboardAuthoringContext);\n const gridRef = useRef<HTMLDivElement>(null);\n const [isOwnHovered, setIsOwnHovered] = useState(false);\n const [activeCell, setActiveCell] = useState<DashboardFreeCell | null>(null);\n const [openAddCell, setOpenAddCell] = useState<DashboardFreeCell | null>(\n null,\n );\n const openAddCellRef = useRef<DashboardFreeCell | null>(null);\n /** The area the add button currently claims, `null` while it is one cell. */\n const [addRegion, setAddRegion] = useState<DashboardPlacement | null>(null);\n const addRegionRef = useRef<DashboardPlacement | null>(null);\n const isClaimingRef = useRef(false);\n /** Set by an Escape that abandons a claim, so the release does not open. */\n const isAbandonedRef = useRef(false);\n /** Tears down a live claim's window listeners, including on unmount. */\n const stopClaimRef = useRef<(() => void) | null>(null);\n const placements = useMemo(\n () => getDashboardChildPlacements(kind, children, columns, rows),\n [children, columns, kind, rows],\n );\n const freeCells = useMemo(\n () => getDashboardFreeCells(kind, placements, columns, rows),\n [columns, kind, placements, rows],\n );\n const availableItems = useMemo(\n () =>\n kind === 'tabs'\n ? authoring.addItems.filter(\n (definition) =>\n definition.kind !== undefined &&\n definition.kind !== 'widget' &&\n definition.kind !== 'tabs',\n )\n : authoring.addItems.filter((definition) => definition.kind !== 'tabs'),\n [authoring.addItems, kind],\n );\n const rememberedActiveCell =\n activeCell &&\n freeCells.some(\n (cell) =>\n cell.column === activeCell.column && cell.row === activeCell.row,\n )\n ? activeCell\n : null;\n const resolvedActiveCell =\n kind === 'tabs' || kind === 'horizontal-stack' || kind === 'vertical-stack'\n ? freeCells[0] ?? null\n : rememberedActiveCell;\n const addButtonCell =\n openAddCell ?? resolvedActiveCell ?? freeCells[0] ?? null;\n /**\n * A one-cell region is indistinguishable from no region at all, and has to\n * stay that way: as a demand it would disable every item whose minimum is\n * larger than a cell, which is most of a real catalog.\n */\n const claimedRegion =\n addRegion && (addRegion.columns > 1 || addRegion.rows > 1)\n ? addRegion\n : undefined;\n /** Only a grid has more than one insertion point to drag across. */\n const canClaimRegion = kind === 'grid';\n const activePlacements = useMemo(\n () =>\n new Map(\n availableItems.map((definition) => [\n definition.id,\n addButtonCell\n ? getDashboardAddPlacement(\n definition,\n addButtonCell,\n kind,\n placements,\n columns,\n rows,\n depth,\n claimedRegion,\n )\n : null,\n ]),\n ),\n [\n availableItems,\n claimedRegion,\n columns,\n depth,\n kind,\n placements,\n addButtonCell,\n rows,\n ],\n );\n const disabledKeys = useMemo(\n () =>\n availableItems\n .filter((definition) => !activePlacements.get(definition.id))\n .map((definition) => definition.id),\n [activePlacements, availableItems],\n );\n const buttonPlacement: DashboardPlacement | null = !addButtonCell\n ? null\n : claimedRegion ?? { ...addButtonCell, columns: 1, rows: 1 };\n\n const handleAction = useEvent((key: Key) => {\n const itemId = String(key);\n const definition = availableItems.find((item) => item.id === itemId);\n const region = addRegionRef.current;\n const targetCell = openAddCellRef.current ?? addButtonCell;\n const placement =\n definition && targetCell\n ? getDashboardAddPlacement(\n definition,\n targetCell,\n kind,\n placements,\n columns,\n rows,\n depth,\n region && (region.columns > 1 || region.rows > 1)\n ? region\n : undefined,\n )\n : null;\n if (!placement) return;\n\n authoring.onAddItem?.(itemId, {\n parentId: id,\n parentKind: kind,\n parentDepth: depth,\n placement,\n ...(tabsId && { tabsId }),\n ...(tabId && { tabId }),\n });\n openAddCellRef.current = null;\n });\n\n const addMenu = useAnchoredMenu<AddItemsMenuProps>(\n AddItemsMenu,\n { placement: 'bottom start' },\n {\n label: t('dashboard.addMenu', 'Items available for {{container}}', {\n container: id,\n }),\n items: availableItems,\n disabledKeys,\n onAction: handleAction,\n },\n );\n const isAddMenuOpen = addMenu.isOpen;\n\n const updateHover = useEvent((event: ReactPointerEvent<HTMLDivElement>) => {\n // The claimed area must not follow the pointer's incidental hovers: both an\n // open menu and a live region gesture own the target cell.\n if (isAddMenuOpen || isClaimingRef.current) return;\n\n const target = event.target as HTMLElement;\n const content = event.currentTarget;\n const closestContent = target.closest('[data-dashboard-drop-target]');\n\n if (closestContent !== content) {\n setIsOwnHovered(false);\n return;\n }\n\n setIsOwnHovered(true);\n const freeCell = target.closest<HTMLElement>(\n '[data-dashboard-free-cell], [data-dashboard-add-slot]',\n );\n\n if (freeCell?.dataset.dashboardParentId === id) {\n const next = {\n column: Number(freeCell.dataset.dashboardColumn),\n row: Number(freeCell.dataset.dashboardRow),\n };\n setActiveCell((current) =>\n current?.column === next.column && current.row === next.row\n ? current\n : next,\n );\n }\n });\n const handlePointerLeave = useEvent(() => {\n // A claim drag routinely crosses the container's edge; hiding the control\n // there would erase the area the pointer is still choosing.\n if (isClaimingRef.current) return;\n\n setIsOwnHovered(false);\n });\n const lockAddCell = useEvent(() => {\n openAddCellRef.current = addButtonCell;\n setOpenAddCell(addButtonCell);\n });\n const setRegion = useEvent((next: DashboardPlacement | null) => {\n addRegionRef.current = next;\n setAddRegion((current) =>\n current && next && isSamePlacement(current, next) ? current : next,\n );\n });\n const openAddMenu = useEvent(() => {\n // `usePress` does not cancel a press on Escape, so the abandoned claim's\n // own release still arrives here. Escape means \"never mind\", not \"open the\n // menu on one cell\".\n if (isAbandonedRef.current) {\n isAbandonedRef.current = false;\n return;\n }\n\n lockAddCell();\n addMenu.open();\n });\n\n /**\n * Press-and-drag across free cells to claim the area before choosing what\n * goes in it. The button itself grows to the claimed area, so the affordance\n * shows the outcome rather than describing it.\n *\n * Hung off `onPressStart` rather than a DOM `pointerdown`, because `Button`\n * filters raw event props out; the press gives no coordinates, but none are\n * needed until the first move, which the window listener below reads\n * directly.\n */\n const startRegionClaim = useEvent((event: PressEvent) => {\n const anchor = addButtonCell;\n const grid = gridRef.current;\n const isPointer =\n event.pointerType !== 'keyboard' && event.pointerType !== 'virtual';\n if (!canClaimRegion || !anchor || !grid || !isPointer) return;\n\n // Freeze the target cell and the free-cell set for the gesture: nothing is\n // inserted mid-drag, so the layout they describe cannot change.\n const cells = freeCells;\n lockAddCell();\n isClaimingRef.current = true;\n setRegion({ ...anchor, columns: 1, rows: 1 });\n\n const stop = () => {\n isClaimingRef.current = false;\n stopClaimRef.current = null;\n window.removeEventListener('pointermove', onPointerMove);\n window.removeEventListener('pointerup', onPointerUp);\n window.removeEventListener('pointercancel', onCancel);\n window.removeEventListener('keydown', onKeyDown);\n };\n\n function onPointerMove(pointer: PointerEvent) {\n const cell = pointToCell(\n { x: pointer.clientX, y: pointer.clientY },\n grid!.getBoundingClientRect(),\n columns,\n rows,\n metrics,\n );\n\n setRegion(getDashboardFreeRegion(anchor!, cell, cells, columns, rows));\n }\n\n function onPointerUp() {\n stop();\n openAddMenu();\n }\n\n function onCancel() {\n isAbandonedRef.current = true;\n stop();\n setRegion(null);\n }\n\n function onKeyDown(keyEvent: KeyboardEvent) {\n if (keyEvent.key !== 'Escape') return;\n keyEvent.preventDefault();\n onCancel();\n }\n\n stopClaimRef.current = stop;\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', onPointerUp);\n window.addEventListener('pointercancel', onCancel);\n window.addEventListener('keydown', onKeyDown);\n });\n\n // A container removed mid-claim would otherwise leave its window listeners\n // running for the rest of the session.\n useEffect(() => () => stopClaimRef.current?.(), []);\n\n /**\n * Shift+arrows are the same claim, without a pointer.\n *\n * Bound on the content grid rather than the button for the same reason as the\n * press above — the raw handler would not survive `Button`'s prop filter — and\n * gated on the add slot so a widget's own arrow keys are untouched.\n */\n const handleRegionKeyDown = useEvent(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n const anchor = addButtonCell;\n const [columnDelta, rowDelta] = REGION_KEYS[event.key] ?? [0, 0];\n if (\n !canClaimRegion ||\n !anchor ||\n !event.shiftKey ||\n (!columnDelta && !rowDelta) ||\n (event.target as HTMLElement).dataset?.dashboardAddSlot === undefined\n ) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const current = addRegionRef.current ?? {\n ...anchor,\n columns: 1,\n rows: 1,\n };\n const far = {\n column: clamp(\n current.column + current.columns - 1 + columnDelta,\n anchor.column,\n columns - 1,\n ),\n row: clamp(\n current.row + current.rows - 1 + rowDelta,\n anchor.row,\n rows - 1,\n ),\n };\n\n lockAddCell();\n setRegion(getDashboardFreeRegion(anchor, far, freeCells, columns, rows));\n },\n );\n\n // The dummy trigger `useAnchoredMenu` renders deliberately restores no focus,\n // so the add button reclaims it — but only when the closing action left focus\n // on nothing, since an item that opened a panel has already claimed it.\n const wasAddMenuOpenRef = useRef(false);\n useEffect(() => {\n if (isAddMenuOpen) {\n wasAddMenuOpenRef.current = true;\n return;\n }\n if (!wasAddMenuOpenRef.current) return;\n\n wasAddMenuOpenRef.current = false;\n setOpenAddCell(null);\n setRegion(null);\n\n const anchor = addMenu.anchorRef.current;\n if (anchor && document.activeElement === document.body) anchor.focus();\n }, [addMenu.anchorRef, isAddMenuOpen, setRegion]);\n\n // `Button` hands back react-spectrum's focusable ref; the popover needs the\n // DOM node it wraps.\n const anchorRef = addMenu.anchorRef;\n const setAnchor = useCallback(\n (value: FocusableRefValue<HTMLElement> | null) => {\n anchorRef.current = value ? value.UNSAFE_getDOMNode() : null;\n },\n [anchorRef],\n );\n\n const isPermanentAdd = kind === 'tabs';\n const isAuthoringVisible = isPermanentAdd || isOwnHovered || isAddMenuOpen;\n const hasAddTarget =\n !!addButtonCell && !!authoring.onAddItem && availableItems.length > 0;\n const isAddButtonVisible =\n hasAddTarget && (isPermanentAdd || isOwnHovered || isAddMenuOpen);\n const gridStyle = getContentGridStyle(kind, columns, rows, metrics);\n\n return (\n <ContentGridElement\n ref={gridRef}\n data-dashboard-drop-target=\"\"\n data-dashboard-parent-id={id}\n data-dashboard-container-kind={kind}\n data-dashboard-columns={columns}\n data-dashboard-rows={rows}\n data-dashboard-depth={depth}\n data-dashboard-ancestor-ids={JSON.stringify(ancestorIds)}\n data-dashboard-tabs-id={tabsId}\n data-dashboard-tab-id={tabId}\n data-dashboard-own-hover={isOwnHovered || undefined}\n style={gridStyle}\n onPointerOver={updateHover}\n onPointerMove={updateHover}\n onPointerLeave={handlePointerLeave}\n onKeyDown={handleRegionKeyDown}\n >\n {editing.isEditing ? (\n <FreeCellsLayerElement aria-hidden=\"true\" style={gridStyle}>\n {freeCells.map((cell) => (\n <FreeCellElement\n key={`${cell.column}:${cell.row}`}\n data-dashboard-free-cell=\"\"\n data-dashboard-parent-id={id}\n data-dashboard-column={cell.column}\n data-dashboard-row={cell.row}\n data-highlighted={isAuthoringVisible || undefined}\n mods={{ highlighted: isAuthoringVisible }}\n style={\n kind === 'tabs'\n ? { gridColumn: '1 / -1', gridRow: '1 / -1' }\n : {\n gridColumn: `${cell.column + 1} / span 1`,\n gridRow: `${cell.row + 1} / span 1`,\n }\n }\n />\n ))}\n </FreeCellsLayerElement>\n ) : null}\n {children}\n {editing.isEditing && hasAddTarget && buttonPlacement ? (\n <>\n <Button\n ref={setAnchor}\n qa=\"DashboardAddButton\"\n type=\"clear\"\n icon={isAddButtonVisible ? <CirclePlusIcon /> : null}\n aria-label={\n claimedRegion\n ? t(\n 'dashboard.addItemRegion',\n 'Add an item filling {{columns}} by {{rows}} cells from column {{column}}, row {{row}} in {{container}}',\n {\n columns: claimedRegion.columns,\n rows: claimedRegion.rows,\n column: claimedRegion.column + 1,\n row: claimedRegion.row + 1,\n container: id,\n },\n )\n : t(\n 'dashboard.addItem',\n 'Add an item at column {{column}}, row {{row}} in {{container}}',\n {\n column: buttonPlacement.column + 1,\n row: buttonPlacement.row + 1,\n container: id,\n },\n )\n }\n aria-haspopup=\"menu\"\n aria-expanded={isAddMenuOpen}\n data-dashboard-add-slot=\"\"\n data-dashboard-parent-id={id}\n data-dashboard-column={buttonPlacement.column}\n data-dashboard-row={buttonPlacement.row}\n data-dashboard-columns={\n kind === 'tabs' ? columns : buttonPlacement.columns\n }\n data-dashboard-rows={kind === 'tabs' ? rows : buttonPlacement.rows}\n width=\"100%\"\n height=\"100%\"\n opacity={isAddButtonVisible ? 1 : 0}\n aria-hidden={!isAddButtonVisible || undefined}\n tabIndex={isAddButtonVisible ? undefined : -1}\n styles={ADD_CELL_BUTTON_STYLES}\n onPress={openAddMenu}\n onPressStart={startRegionClaim}\n style={\n kind === 'tabs'\n ? {\n gridColumn: '1 / -1',\n gridRow: '1 / -1',\n border: 0,\n outline: 'none',\n }\n : {\n gridColumn: `${buttonPlacement.column + 1} / span ${buttonPlacement.columns}`,\n gridRow: `${buttonPlacement.row + 1} / span ${buttonPlacement.rows}`,\n border: 0,\n outline: 'none',\n }\n }\n />\n {addMenu.rendered}\n </>\n ) : null}\n </ContentGridElement>\n );\n}\n\nexport function DashboardRootAddControl({ row }: { row: number }) {\n const { t } = useI18n();\n const authoring = useContext(DashboardAuthoringContext);\n const containerItems = useMemo(\n () =>\n authoring.addItems.filter(\n (definition) =>\n definition.kind !== undefined && definition.kind !== 'widget',\n ),\n [authoring.addItems],\n );\n const disabledKeys = useMemo(\n () =>\n containerItems\n .filter((definition) => definition.isDisabled)\n .map((definition) => definition.id),\n [containerItems],\n );\n const handleAction = useEvent((key: Key) => {\n const itemId = String(key);\n const definition = containerItems.find((item) => item.id === itemId);\n if (!definition || definition.isDisabled) return;\n\n const minRows = clampRows(definition.minRows, 1);\n const maxRows = Math.max(\n minRows,\n clampRows(definition.maxRows, Math.max(12, minRows)),\n );\n const rows = clamp(\n clampRows(definition.defaultRows, minRows),\n minRows,\n maxRows,\n );\n\n authoring.onAddItem?.(itemId, {\n parentId: null,\n parentKind: 'root',\n parentDepth: 0,\n placement: { column: 0, row, columns: 12, rows },\n });\n });\n\n if (!authoring.onAddItem || containerItems.length === 0) return null;\n\n return (\n <Menu.Trigger>\n <RootAddButtonElement\n type=\"clear\"\n icon={<CirclePlusIcon />}\n aria-label={t(\n 'dashboard.addTopLevelContainer',\n 'Add top-level dashboard container',\n )}\n style={{ border: 0 }}\n />\n <Menu\n aria-label={t(\n 'dashboard.addTopLevelMenu',\n 'Top-level dashboard containers',\n )}\n width=\"280px\"\n disabledKeys={disabledKeys}\n onAction={handleAction}\n >\n {containerItems.map((definition) => (\n <Menu.Item\n key={definition.id}\n icon={definition.icon}\n description={definition.description}\n textValue={\n typeof definition.name === 'string'\n ? definition.name\n : definition.id\n }\n >\n {definition.name}\n </Menu.Item>\n ))}\n </Menu>\n </Menu.Trigger>\n );\n}\n"],"mappings":"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"}
|