@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.
Files changed (619) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.d.ts +0 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  55. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  56. package/dist/components/content/Item/Item.js +1 -1
  57. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  58. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  59. package/dist/components/content/Layout/GridLayout.js +1 -1
  60. package/dist/components/content/Layout/Layout.js +2 -2
  61. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  62. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  63. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  64. package/dist/components/content/Layout/LayoutContent.js +2 -2
  65. package/dist/components/content/Layout/LayoutContext.js +1 -1
  66. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  67. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  68. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  69. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  70. package/dist/components/content/Layout/LayoutPane.js +2 -2
  71. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanelHeader.js +2 -2
  73. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  74. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  75. package/dist/components/content/Layout/index.js +1 -1
  76. package/dist/components/content/Layout/utils.js +1 -1
  77. package/dist/components/content/Paragraph.js +1 -1
  78. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  79. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  80. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  81. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  82. package/dist/components/content/Result/Result.js +1 -1
  83. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  84. package/dist/components/content/Tag/Tag.js +1 -1
  85. package/dist/components/content/Text.d.ts +28 -28
  86. package/dist/components/content/Text.js +1 -1
  87. package/dist/components/content/TextItem/TextItem.js +1 -1
  88. package/dist/components/content/Title.js +1 -1
  89. package/dist/components/content/Tree/Tree.js +1 -1
  90. package/dist/components/content/Tree/TreeNode.js +2 -2
  91. package/dist/components/content/Tree/styled.js +1 -1
  92. package/dist/components/content/Tree/tree-index.js +1 -1
  93. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  94. package/dist/components/content/Tree/use-load-data.js +1 -1
  95. package/dist/components/content/highlightText.js +1 -1
  96. package/dist/components/content/use-auto-tooltip.js +1 -1
  97. package/dist/components/data/DataTable/DataTable.js +1 -1
  98. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  103. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  104. package/dist/components/data/TableBase/RowCollection.js +1 -1
  105. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  106. package/dist/components/data/TableBase/TableRow.js +1 -1
  107. package/dist/components/data/TableBase/TableView.js +2 -2
  108. package/dist/components/data/TableBase/column-menu.js +1 -1
  109. package/dist/components/data/TableBase/column-tint.js +1 -1
  110. package/dist/components/data/TableBase/row-menu.js +1 -1
  111. package/dist/components/data/TableBase/styled.d.ts +1 -2
  112. package/dist/components/data/TableBase/styled.js +1 -1
  113. package/dist/components/data/TableBase/table-tree.js +1 -1
  114. package/dist/components/data/TableBase/types.js +1 -1
  115. package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
  116. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  117. package/dist/components/data/TableBase/use-column-order.js +1 -1
  118. package/dist/components/data/TableBase/use-container-width.js +1 -1
  119. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  120. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  121. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  122. package/dist/components/data/TableBase/use-table-search.js +1 -1
  123. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  124. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  125. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  126. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  127. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  128. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  129. package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -2
  130. package/dist/components/fields/Checkbox/context.js +1 -1
  131. package/dist/components/fields/ColorInput/ColorInput.js +2 -2
  132. package/dist/components/fields/ColorPicker/ColorPicker.js +2 -2
  133. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  134. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  135. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  136. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  137. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  138. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  139. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  140. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  141. package/dist/components/fields/DatePicker/DatePicker.js +2 -2
  142. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  144. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  145. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  146. package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
  147. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -2
  148. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  149. package/dist/components/fields/DatePicker/PeriodPicker.js +2 -2
  150. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  151. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  152. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  153. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  154. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  155. package/dist/components/fields/DatePicker/period.js +1 -1
  156. package/dist/components/fields/DatePicker/props.js +1 -1
  157. package/dist/components/fields/DatePicker/utils.js +1 -1
  158. package/dist/components/fields/FileInput/FileInput.js +1 -1
  159. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  160. package/dist/components/fields/FilterPicker/FilterPicker.js +3 -3
  161. package/dist/components/fields/Input/Input.js +1 -1
  162. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  163. package/dist/components/fields/ListBox/ListBox.js +4 -4
  164. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  165. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
  166. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  167. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  168. package/dist/components/fields/NumberInput/NumberInput.js +2 -2
  169. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  170. package/dist/components/fields/PasswordInput/PasswordInput.js +2 -2
  171. package/dist/components/fields/Picker/Picker.js +3 -3
  172. package/dist/components/fields/RadioGroup/Radio.js +2 -2
  173. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
  174. package/dist/components/fields/RadioGroup/context.js +1 -1
  175. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  176. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  177. package/dist/components/fields/Select/Select.js +1 -1
  178. package/dist/components/fields/Slider/Gradation.js +1 -1
  179. package/dist/components/fields/Slider/HueSlider.js +1 -1
  180. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  181. package/dist/components/fields/Slider/Slider.js +1 -1
  182. package/dist/components/fields/Slider/SliderBase.js +1 -1
  183. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  184. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  185. package/dist/components/fields/Slider/elements.js +1 -1
  186. package/dist/components/fields/Slider/index.js +1 -1
  187. package/dist/components/fields/Switch/Switch.js +2 -2
  188. package/dist/components/fields/TextArea/TextArea.js +2 -2
  189. package/dist/components/fields/TextInput/TextInput.js +2 -2
  190. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  191. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  192. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  193. package/dist/components/fields/color/ColorPanel.js +1 -1
  194. package/dist/components/fields/color/channels.js +7 -6
  195. package/dist/components/fields/color/channels.js.map +1 -1
  196. package/dist/components/fields/color/color.d.ts +1 -0
  197. package/dist/components/fields/color/color.js +22 -100
  198. package/dist/components/fields/color/color.js.map +1 -1
  199. package/dist/components/fields/color/context.js +1 -1
  200. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  201. package/dist/components/form/Form/Field.js +1 -1
  202. package/dist/components/form/Form/Form.js +1 -1
  203. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  204. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  205. package/dist/components/form/Form/SubmitError.js +1 -1
  206. package/dist/components/form/Form/index.js +1 -1
  207. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  208. package/dist/components/form/Form/use-field/use-field.js +1 -1
  209. package/dist/components/form/Form/use-form.js +1 -1
  210. package/dist/components/form/Form/validation.js +1 -1
  211. package/dist/components/form/Label.js +1 -1
  212. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  213. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  214. package/dist/components/form/validation/use-validation-props.js +1 -1
  215. package/dist/components/form/wrapper.js +1 -1
  216. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  217. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  218. package/dist/components/layout/Board/Board.js +1 -1
  219. package/dist/components/layout/Board/BoardProvider.js +1 -1
  220. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  221. package/dist/components/layout/Board/Widget.js +1 -1
  222. package/dist/components/layout/Board/WidgetHost.js +1 -1
  223. package/dist/components/layout/Board/board-context.js +1 -1
  224. package/dist/components/layout/Board/board-store.js +1 -1
  225. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  226. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  227. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  228. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  229. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  230. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  231. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  232. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  233. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  234. package/dist/components/layout/Board/index.js +1 -1
  235. package/dist/components/layout/Board/responsive-utils.js +1 -1
  236. package/dist/components/layout/Board/use-board-layout.js +1 -1
  237. package/dist/components/layout/Board/use-board-registry.js +1 -1
  238. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  239. package/dist/components/layout/Board/use-board-selection.js +1 -1
  240. package/dist/components/layout/Flex.js +1 -1
  241. package/dist/components/layout/Flow.js +1 -1
  242. package/dist/components/layout/Grid.js +1 -1
  243. package/dist/components/layout/Panel.js +1 -1
  244. package/dist/components/layout/Prefix.js +1 -1
  245. package/dist/components/layout/ResizablePanel.js +1 -1
  246. package/dist/components/layout/Space.js +1 -1
  247. package/dist/components/layout/Suffix.js +1 -1
  248. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  249. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  250. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  251. package/dist/components/navigation/Tabs/TabButton.js +3 -3
  252. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  253. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  254. package/dist/components/navigation/Tabs/TabPicker.js +2 -2
  255. package/dist/components/navigation/Tabs/Tabs.js +2 -2
  256. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  257. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  258. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  259. package/dist/components/navigation/Tabs/styled.js +1 -1
  260. package/dist/components/navigation/Tabs/types.js +1 -1
  261. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  262. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  263. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  264. package/dist/components/other/Calendar/Calendar.js +1 -1
  265. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  266. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  267. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  268. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  269. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  270. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  271. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  272. package/dist/components/other/Calendar/styled.js +1 -1
  273. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  274. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  275. package/dist/components/overlays/AlertDialog/AlertDialog.js +2 -2
  276. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  277. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  278. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  279. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  280. package/dist/components/overlays/Dialog/DialogForm.js +4 -4
  281. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  282. package/dist/components/overlays/Dialog/context.js +1 -1
  283. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  284. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  285. package/dist/components/overlays/Modal/Modal.js +1 -1
  286. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  287. package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
  288. package/dist/components/overlays/Modal/Overlay.js +1 -1
  289. package/dist/components/overlays/Modal/Popover.js +1 -1
  290. package/dist/components/overlays/Modal/Tray.js +1 -1
  291. package/dist/components/overlays/Modal/Underlay.js +1 -1
  292. package/dist/components/overlays/Modal/types.d.ts +0 -1
  293. package/dist/components/overlays/Notifications/Notification.js +1 -1
  294. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  295. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  296. package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
  297. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  298. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  299. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  300. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  301. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  302. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  303. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  304. package/dist/components/overlays/Notifications/index.js +1 -1
  305. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  306. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  307. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  308. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  309. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  310. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  311. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  312. package/dist/components/overlays/Toast/index.js +1 -1
  313. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  314. package/dist/components/overlays/Toast/useToast.js +1 -1
  315. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  316. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  317. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  318. package/dist/components/overlays/Tooltip/context.js +1 -1
  319. package/dist/components/portal/Portal.js +1 -1
  320. package/dist/components/portal/PortalProvider.js +1 -1
  321. package/dist/components/portal/index.d.ts +0 -1
  322. package/dist/components/portal/usePortal.js +1 -1
  323. package/dist/components/shared/DraggableCollection.js +1 -1
  324. package/dist/components/shared/InvalidIcon.js +1 -1
  325. package/dist/components/shared/ValidIcon.js +1 -1
  326. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  327. package/dist/components/status/Spin/Cube.js +1 -1
  328. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  329. package/dist/components/status/Spin/Spin.js +1 -1
  330. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  331. package/dist/data/item-themes.js +1 -1
  332. package/dist/data/themes.js +1 -1
  333. package/dist/eslint-plugin/defaults.generated.js +1 -1
  334. package/dist/eslint-plugin/index.js +1 -1
  335. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  336. package/dist/i18n/I18nProvider.js +1 -1
  337. package/dist/i18n/createFormatter.js +1 -1
  338. package/dist/i18n/index.js +1 -1
  339. package/dist/i18n/instance.js +1 -1
  340. package/dist/i18n/locales/de-DE/uikit.js +1 -25
  341. package/dist/i18n/locales/en-US/uikit.js +1 -25
  342. package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -27
  343. package/dist/i18n/locales/es-ES/uikit.js +1 -25
  344. package/dist/i18n/locales/es-MX/uikit.js +1 -25
  345. package/dist/i18n/locales/fr-FR/uikit.js +1 -25
  346. package/dist/i18n/locales/it-IT/uikit.js +1 -25
  347. package/dist/i18n/locales/ja-JP/uikit.js +1 -25
  348. package/dist/i18n/locales/nb-NO/uikit.js +1 -25
  349. package/dist/i18n/locales/pt-BR/uikit.js +1 -25
  350. package/dist/i18n/locales/pt-PT/uikit.js +1 -25
  351. package/dist/i18n/locales/sv-SE/uikit.js +1 -25
  352. package/dist/i18n/locales/vi-VN/uikit.js +1 -25
  353. package/dist/i18n/locales.js +1 -1
  354. package/dist/i18n/useFormatter.js +1 -1
  355. package/dist/i18n/useI18n.js +1 -1
  356. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  357. package/dist/icons/AdjustmentsIcon.js +1 -1
  358. package/dist/icons/AiIcon.js +1 -1
  359. package/dist/icons/AreaChartIcon.js +1 -1
  360. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  361. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  362. package/dist/icons/BackwardIcon.js +1 -1
  363. package/dist/icons/BarChartIcon.js +1 -1
  364. package/dist/icons/BellFilledIcon.js +1 -1
  365. package/dist/icons/BellIcon.js +1 -1
  366. package/dist/icons/BooleanIcon.js +1 -1
  367. package/dist/icons/CalendarEditIcon.js +1 -1
  368. package/dist/icons/CalendarIcon.js +1 -1
  369. package/dist/icons/CaretDownIcon.js +1 -1
  370. package/dist/icons/CaretUpIcon.js +1 -1
  371. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  372. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  373. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  374. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  375. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  376. package/dist/icons/ChartBarLineIcon.js +1 -1
  377. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  378. package/dist/icons/ChartBarStackedIcon.js +1 -1
  379. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  380. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  381. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  382. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  383. package/dist/icons/ChartBubbleIcon.js +1 -1
  384. package/dist/icons/ChartDonut2Icon.js +1 -1
  385. package/dist/icons/ChartFunnelIcon.js +1 -1
  386. package/dist/icons/ChartHeatmapIcon.js +1 -1
  387. package/dist/icons/ChartKPIIcon.js +1 -1
  388. package/dist/icons/ChartPie2Icon.js +1 -1
  389. package/dist/icons/ChartScatterIcon.js +1 -1
  390. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  391. package/dist/icons/CheckCircleIcon.js +1 -1
  392. package/dist/icons/CheckIcon.js +1 -1
  393. package/dist/icons/CircleFilledIcon.js +1 -1
  394. package/dist/icons/ClearIcon.js +1 -1
  395. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  396. package/dist/icons/CloseCircleIcon.js +1 -1
  397. package/dist/icons/CloseIcon.js +1 -1
  398. package/dist/icons/CodeIcon.js +1 -1
  399. package/dist/icons/ColumnTotalIcon.js +1 -1
  400. package/dist/icons/CopyIcon.js +1 -1
  401. package/dist/icons/CountIcon.js +1 -1
  402. package/dist/icons/CubeIcon.js +1 -1
  403. package/dist/icons/CubePauseIcon.js +1 -1
  404. package/dist/icons/CubePlayIcon.js +1 -1
  405. package/dist/icons/CurrencyDollarIcon.js +1 -1
  406. package/dist/icons/DangerIcon.js +1 -1
  407. package/dist/icons/DashboardIcon.js +1 -1
  408. package/dist/icons/DatabaseIcon.js +1 -1
  409. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  410. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  411. package/dist/icons/DirectionIcon.js +1 -1
  412. package/dist/icons/DonutIcon.js +1 -1
  413. package/dist/icons/DownIcon.js +1 -1
  414. package/dist/icons/EditIcon.js +1 -1
  415. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  416. package/dist/icons/ExclamationCircleIcon.js +1 -1
  417. package/dist/icons/ExclamationIcon.js +1 -1
  418. package/dist/icons/EyeIcon.js +1 -1
  419. package/dist/icons/EyeInvisibleIcon.js +1 -1
  420. package/dist/icons/FilterIcon.js +1 -1
  421. package/dist/icons/FolderFilledIcon.js +1 -1
  422. package/dist/icons/FolderIcon.js +1 -1
  423. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  424. package/dist/icons/FolderOpenIcon.js +1 -1
  425. package/dist/icons/ForwardIcon.js +1 -1
  426. package/dist/icons/GripVerticalIcon.js +1 -1
  427. package/dist/icons/HierarchyIcon.js +1 -1
  428. package/dist/icons/HierarchyOpenIcon.js +1 -1
  429. package/dist/icons/Icon.js +1 -1
  430. package/dist/icons/InfoCircleIcon.js +1 -1
  431. package/dist/icons/InfoIcon.js +1 -1
  432. package/dist/icons/KeyIcon.js +1 -1
  433. package/dist/icons/LeftIcon.js +1 -1
  434. package/dist/icons/LineChartIcon.js +1 -1
  435. package/dist/icons/LoadingIcon.js +1 -1
  436. package/dist/icons/LockFilledIcon.js +1 -1
  437. package/dist/icons/LockIcon.js +1 -1
  438. package/dist/icons/MoreIcon.js +1 -1
  439. package/dist/icons/NotAllowedIcon.js +1 -1
  440. package/dist/icons/Number123Icon.js +1 -1
  441. package/dist/icons/NumberIcon.js +1 -1
  442. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  443. package/dist/icons/PauseCircleIcon.js +1 -1
  444. package/dist/icons/PauseIcon.js +1 -1
  445. package/dist/icons/PercentageIcon.js +1 -1
  446. package/dist/icons/PieChartIcon.js +1 -1
  447. package/dist/icons/PipetteIcon.js +1 -1
  448. package/dist/icons/PlayCircleIcon.js +1 -1
  449. package/dist/icons/PlayIcon.js +1 -1
  450. package/dist/icons/PlusIcon.js +1 -1
  451. package/dist/icons/ProgressBarIcon.js +1 -1
  452. package/dist/icons/ReloadIcon.js +1 -1
  453. package/dist/icons/ReportIcon.js +1 -1
  454. package/dist/icons/ReturnIcon.js +1 -1
  455. package/dist/icons/RightIcon.js +1 -1
  456. package/dist/icons/RowTotalsIcon.js +1 -1
  457. package/dist/icons/SchemeIcon.js +1 -1
  458. package/dist/icons/SearchIcon.js +1 -1
  459. package/dist/icons/SemanticQueryIcon.js +1 -1
  460. package/dist/icons/SettingsIcon.js +1 -1
  461. package/dist/icons/ShieldFilledIcon.js +1 -1
  462. package/dist/icons/ShieldIcon.js +1 -1
  463. package/dist/icons/SlashIcon.js +1 -1
  464. package/dist/icons/SparklesIcon.js +1 -1
  465. package/dist/icons/SqlIcon.js +1 -1
  466. package/dist/icons/StatsIcon.js +1 -1
  467. package/dist/icons/StopIcon.js +1 -1
  468. package/dist/icons/StringIcon.js +1 -1
  469. package/dist/icons/SubtotalsIcon.js +1 -1
  470. package/dist/icons/SwitchIcon.js +1 -1
  471. package/dist/icons/TableIcon.js +1 -1
  472. package/dist/icons/ThumbsDownIcon.js +1 -1
  473. package/dist/icons/ThumbsUpIcon.js +1 -1
  474. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  475. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  476. package/dist/icons/ThunderboltIcon.js +1 -1
  477. package/dist/icons/TimeIcon.js +1 -1
  478. package/dist/icons/TrashIcon.js +1 -1
  479. package/dist/icons/UnlockIcon.js +1 -1
  480. package/dist/icons/UpIcon.js +1 -1
  481. package/dist/icons/UserGroupIcon.js +1 -1
  482. package/dist/icons/UserIcon.js +1 -1
  483. package/dist/icons/UserLockIcon.js +1 -1
  484. package/dist/icons/ViewIcon.js +1 -1
  485. package/dist/icons/WarningFilledIcon.js +1 -1
  486. package/dist/icons/WarningIcon.js +1 -1
  487. package/dist/icons/index.d.ts +0 -8
  488. package/dist/icons/wrap-icon.js +1 -1
  489. package/dist/index.d.ts +2 -15
  490. package/dist/index.js +50 -61
  491. package/dist/index.js.map +1 -1
  492. package/dist/probe/canonicalize.js +1 -1
  493. package/dist/probe/css.js +1 -1
  494. package/dist/probe/index.js +1 -1
  495. package/dist/provider.js +1 -1
  496. package/dist/providers/TrackingProvider.js +1 -1
  497. package/dist/providers/navigationAdapter.default.js +1 -1
  498. package/dist/tokens/all-tokens.js +2 -2
  499. package/dist/tokens/base.js +1 -1
  500. package/dist/tokens/color-seed.js +1 -1
  501. package/dist/tokens/color-theme.js +1 -1
  502. package/dist/tokens/colors.js +2 -2
  503. package/dist/tokens/index.d.ts +1 -0
  504. package/dist/tokens/layout.js +1 -1
  505. package/dist/tokens/lazy-styles.js +1 -1
  506. package/dist/tokens/legacy-color.d.ts +61 -0
  507. package/dist/tokens/legacy-color.js +58 -0
  508. package/dist/tokens/legacy-color.js.map +1 -0
  509. package/dist/tokens/palette-config.js +1 -1
  510. package/dist/tokens/palette.js +2 -2
  511. package/dist/tokens/resolve.js +1 -1
  512. package/dist/tokens/shadows.js +1 -1
  513. package/dist/tokens/sizes.js +1 -1
  514. package/dist/tokens/spacing.js +1 -1
  515. package/dist/tokens/typography.js +1 -1
  516. package/dist/utils/ResizeSensor.js +1 -1
  517. package/dist/utils/colors.d.ts +2 -0
  518. package/dist/utils/colors.js +247 -0
  519. package/dist/utils/colors.js.map +1 -0
  520. package/dist/utils/is-dev-env.js +1 -1
  521. package/dist/utils/modules.js +1 -1
  522. package/dist/utils/promise.js +1 -1
  523. package/dist/utils/raf.js +1 -1
  524. package/dist/utils/random.js +1 -1
  525. package/dist/utils/range.js +1 -1
  526. package/dist/utils/react/RenderCache.js +1 -1
  527. package/dist/utils/react/Slots.js +1 -1
  528. package/dist/utils/react/chain.js +1 -1
  529. package/dist/utils/react/disabledProps.js +1 -1
  530. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  531. package/dist/utils/react/index.js +1 -1
  532. package/dist/utils/react/interactions.js +1 -1
  533. package/dist/utils/react/isTextOnly.js +1 -1
  534. package/dist/utils/react/mapProps.js +1 -1
  535. package/dist/utils/react/mergeProps.js +1 -1
  536. package/dist/utils/react/nullableValue.js +1 -1
  537. package/dist/utils/react/resolveIcon.js +1 -1
  538. package/dist/utils/react/sharedStore.js +1 -1
  539. package/dist/utils/react/useBufferedValue.js +1 -1
  540. package/dist/utils/react/useCombinedRefs.js +1 -1
  541. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  542. package/dist/utils/react/useEventBus.js +1 -1
  543. package/dist/utils/react/useId.js +1 -1
  544. package/dist/utils/react/useIsDarwin.js +1 -1
  545. package/dist/utils/react/useKeySymbols.js +1 -1
  546. package/dist/utils/react/useLayoutEffect.js +1 -1
  547. package/dist/utils/react/useLocalStorage.js +1 -1
  548. package/dist/utils/react/useMergeStyles.js +1 -1
  549. package/dist/utils/react/usePopoverSync.js +1 -1
  550. package/dist/utils/react/useQaProps.js +1 -1
  551. package/dist/utils/react/useScheme.js +1 -1
  552. package/dist/utils/react/useViewportSize.js +1 -1
  553. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  554. package/dist/utils/selection.js +1 -1
  555. package/dist/utils/styles.js +1 -1
  556. package/dist/utils/tree.js +1 -1
  557. package/dist/utils/warnings.js +1 -1
  558. package/dist/version.js +2 -2
  559. package/docs/Usage.md +18 -0
  560. package/package.json +1 -1
  561. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
  562. package/dist/components/layout/Dashboard/Dashboard.d.ts +0 -19
  563. package/dist/components/layout/Dashboard/Dashboard.js +0 -188
  564. package/dist/components/layout/Dashboard/Dashboard.js.map +0 -1
  565. package/dist/components/layout/Dashboard/DashboardContainer.d.ts +0 -13
  566. package/dist/components/layout/Dashboard/DashboardContainer.js +0 -272
  567. package/dist/components/layout/Dashboard/DashboardContainer.js.map +0 -1
  568. package/dist/components/layout/Dashboard/DashboardContainerContent.js +0 -405
  569. package/dist/components/layout/Dashboard/DashboardContainerContent.js.map +0 -1
  570. package/dist/components/layout/Dashboard/DashboardNodeActions.js +0 -228
  571. package/dist/components/layout/Dashboard/DashboardNodeActions.js.map +0 -1
  572. package/dist/components/layout/Dashboard/DashboardTabs.d.ts +0 -14
  573. package/dist/components/layout/Dashboard/DashboardTabs.js +0 -85
  574. package/dist/components/layout/Dashboard/DashboardTabs.js.map +0 -1
  575. package/dist/components/layout/Dashboard/DashboardWidget.d.ts +0 -9
  576. package/dist/components/layout/Dashboard/DashboardWidget.js +0 -196
  577. package/dist/components/layout/Dashboard/DashboardWidget.js.map +0 -1
  578. package/dist/components/layout/Dashboard/context.js +0 -37
  579. package/dist/components/layout/Dashboard/context.js.map +0 -1
  580. package/dist/components/layout/Dashboard/drag.js +0 -481
  581. package/dist/components/layout/Dashboard/drag.js.map +0 -1
  582. package/dist/components/layout/Dashboard/index.d.ts +0 -6
  583. package/dist/components/layout/Dashboard/occupancy.js +0 -240
  584. package/dist/components/layout/Dashboard/occupancy.js.map +0 -1
  585. package/dist/components/layout/Dashboard/placement.js +0 -94
  586. package/dist/components/layout/Dashboard/placement.js.map +0 -1
  587. package/dist/components/layout/Dashboard/styles.js +0 -344
  588. package/dist/components/layout/Dashboard/styles.js.map +0 -1
  589. package/dist/components/layout/Dashboard/types.d.ts +0 -220
  590. package/dist/components/layout/Dashboard/use-dashboard-gestures.js +0 -321
  591. package/dist/components/layout/Dashboard/use-dashboard-gestures.js.map +0 -1
  592. package/dist/components/layout/Dashboard/use-dashboard-node.js +0 -93
  593. package/dist/components/layout/Dashboard/use-dashboard-node.js.map +0 -1
  594. package/dist/components/portal/PortalProvider.d.ts +0 -2
  595. package/dist/icons/ArrowsHorizontalIcon.d.ts +0 -12
  596. package/dist/icons/ArrowsHorizontalIcon.js +0 -11
  597. package/dist/icons/ArrowsHorizontalIcon.js.map +0 -1
  598. package/dist/icons/ArrowsInHorizontalIcon.d.ts +0 -20
  599. package/dist/icons/ArrowsInHorizontalIcon.js +0 -31
  600. package/dist/icons/ArrowsInHorizontalIcon.js.map +0 -1
  601. package/dist/icons/ArrowsInVerticalIcon.d.ts +0 -13
  602. package/dist/icons/ArrowsInVerticalIcon.js +0 -24
  603. package/dist/icons/ArrowsInVerticalIcon.js.map +0 -1
  604. package/dist/icons/ArrowsMaximizeIcon.d.ts +0 -12
  605. package/dist/icons/ArrowsMaximizeIcon.js +0 -11
  606. package/dist/icons/ArrowsMaximizeIcon.js.map +0 -1
  607. package/dist/icons/ArrowsMinimizeIcon.d.ts +0 -12
  608. package/dist/icons/ArrowsMinimizeIcon.js +0 -11
  609. package/dist/icons/ArrowsMinimizeIcon.js.map +0 -1
  610. package/dist/icons/ArrowsVerticalIcon.d.ts +0 -12
  611. package/dist/icons/ArrowsVerticalIcon.js +0 -11
  612. package/dist/icons/ArrowsVerticalIcon.js.map +0 -1
  613. package/dist/icons/CirclePlusIcon.d.ts +0 -12
  614. package/dist/icons/CirclePlusIcon.js +0 -11
  615. package/dist/icons/CirclePlusIcon.js.map +0 -1
  616. package/dist/icons/MaximizeIcon.d.ts +0 -12
  617. package/dist/icons/MaximizeIcon.js +0 -11
  618. package/dist/icons/MaximizeIcon.js.map +0 -1
  619. 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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"}