@cube-dev/ui-kit 0.154.1 → 0.156.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/dist/CHANGELOG.md +99 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +10 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +4 -3
  25. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.d.ts +2 -1
  60. package/dist/components/content/Item/Item.js +1 -1
  61. package/dist/components/content/Item/Item.js.map +1 -1
  62. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  63. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  64. package/dist/components/content/Layout/GridLayout.js +1 -1
  65. package/dist/components/content/Layout/Layout.js +1 -1
  66. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  67. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  68. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  69. package/dist/components/content/Layout/LayoutContent.js +1 -1
  70. package/dist/components/content/Layout/LayoutContext.js +1 -1
  71. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  72. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  73. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  74. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutPane.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.d.ts +21 -42
  91. package/dist/components/content/Text.js +4 -5
  92. package/dist/components/content/Text.js.map +1 -1
  93. package/dist/components/content/TextItem/TextItem.js +1 -1
  94. package/dist/components/content/Title.js +2 -3
  95. package/dist/components/content/Title.js.map +1 -1
  96. package/dist/components/content/Tree/Tree.js +1 -1
  97. package/dist/components/content/Tree/TreeNode.js +1 -1
  98. package/dist/components/content/Tree/styled.js +1 -1
  99. package/dist/components/content/Tree/tree-index.js +1 -1
  100. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  101. package/dist/components/content/Tree/use-load-data.js +1 -1
  102. package/dist/components/content/highlightText.js +1 -1
  103. package/dist/components/content/use-auto-tooltip.d.ts +0 -1
  104. package/dist/components/content/use-auto-tooltip.js +1 -1
  105. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  106. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  107. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  108. package/dist/components/fields/Checkbox/context.js +1 -1
  109. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +67 -0
  110. package/dist/components/fields/ColorPicker/ColorPicker.js +240 -0
  111. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -0
  112. package/dist/components/fields/ColorPicker/ColorPickerPanel.js +149 -0
  113. package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +1 -0
  114. package/dist/components/fields/ColorPicker/channels.d.ts +13 -0
  115. package/dist/components/fields/ColorPicker/channels.js +194 -0
  116. package/dist/components/fields/ColorPicker/channels.js.map +1 -0
  117. package/dist/components/fields/ColorPicker/color.d.ts +15 -0
  118. package/dist/components/fields/ColorPicker/color.js +282 -0
  119. package/dist/components/fields/ColorPicker/color.js.map +1 -0
  120. package/dist/components/fields/ColorPicker/index.d.ts +4 -0
  121. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  122. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  123. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  124. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  125. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  126. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  127. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  128. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  129. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  130. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  131. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  132. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  133. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  134. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  135. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  136. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  137. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  138. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  139. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  140. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  141. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  142. package/dist/components/fields/DatePicker/period.js +1 -1
  143. package/dist/components/fields/DatePicker/props.js +1 -1
  144. package/dist/components/fields/DatePicker/utils.js +1 -1
  145. package/dist/components/fields/FileInput/FileInput.d.ts +2 -1
  146. package/dist/components/fields/FileInput/FileInput.js +1 -1
  147. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  148. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -3
  149. package/dist/components/fields/FilterListBox/FilterListBox.js +7 -6
  150. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  151. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  152. package/dist/components/fields/Input/Input.js +1 -1
  153. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  154. package/dist/components/fields/ListBox/ListBox.js +1 -1
  155. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  156. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  157. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  158. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  159. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  160. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  161. package/dist/components/fields/Picker/Picker.js +1 -1
  162. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  163. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  164. package/dist/components/fields/RadioGroup/context.js +1 -1
  165. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  166. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  167. package/dist/components/fields/Select/Select.d.ts +2 -1
  168. package/dist/components/fields/Select/Select.js +1 -1
  169. package/dist/components/fields/Select/Select.js.map +1 -1
  170. package/dist/components/fields/Slider/Gradation.js +1 -1
  171. package/dist/components/fields/Slider/HueSlider.js +1 -1
  172. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  173. package/dist/components/fields/Slider/Slider.js +1 -1
  174. package/dist/components/fields/Slider/SliderBase.js +1 -1
  175. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  176. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  177. package/dist/components/fields/Slider/elements.js +1 -1
  178. package/dist/components/fields/Slider/index.js +1 -1
  179. package/dist/components/fields/Switch/Switch.js +1 -1
  180. package/dist/components/fields/TextArea/TextArea.js +1 -1
  181. package/dist/components/fields/TextInput/TextInput.js +1 -1
  182. package/dist/components/fields/TextInput/TextInputBase.d.ts +2 -1
  183. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  184. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  185. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  186. package/dist/components/fields/index.d.ts +4 -0
  187. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +2 -1
  188. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  189. package/dist/components/form/FieldWrapper/types.d.ts +2 -1
  190. package/dist/components/form/Form/Field.js +1 -1
  191. package/dist/components/form/Form/Form.js +1 -1
  192. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  193. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  194. package/dist/components/form/Form/SubmitError.js +1 -1
  195. package/dist/components/form/Form/index.js +1 -1
  196. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  197. package/dist/components/form/Form/use-field/use-field.js +1 -1
  198. package/dist/components/form/Form/use-form.js +1 -1
  199. package/dist/components/form/Form/validation.js +1 -1
  200. package/dist/components/form/Label.js +1 -1
  201. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  202. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  203. package/dist/components/form/validation/use-validation-props.js +1 -1
  204. package/dist/components/form/wrapper.js +1 -1
  205. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  206. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  207. package/dist/components/layout/Board/Board.d.ts +55 -1
  208. package/dist/components/layout/Board/Board.js +278 -75
  209. package/dist/components/layout/Board/Board.js.map +1 -1
  210. package/dist/components/layout/Board/BoardProvider.js +1 -1
  211. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  212. package/dist/components/layout/Board/Widget.d.ts +16 -0
  213. package/dist/components/layout/Board/Widget.js +6 -3
  214. package/dist/components/layout/Board/Widget.js.map +1 -1
  215. package/dist/components/layout/Board/WidgetHost.js +81 -14
  216. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  217. package/dist/components/layout/Board/board-context.js +1 -1
  218. package/dist/components/layout/Board/board-context.js.map +1 -1
  219. package/dist/components/layout/Board/board-store.js +2 -2
  220. package/dist/components/layout/Board/board-store.js.map +1 -1
  221. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  222. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  223. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  224. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  225. package/dist/components/layout/Board/grid-core/group-move.js +132 -0
  226. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
  227. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  228. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  229. package/dist/components/layout/Board/index.d.ts +2 -1
  230. package/dist/components/layout/Board/index.js +2 -2
  231. package/dist/components/layout/Board/index.js.map +1 -1
  232. package/dist/components/layout/Board/responsive-utils.js +1 -1
  233. package/dist/components/layout/Board/use-board-layout.js +17 -12
  234. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  235. package/dist/components/layout/Board/use-board-registry.js +139 -20
  236. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  237. package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
  238. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
  239. package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
  240. package/dist/components/layout/Board/use-board-selection.js +113 -0
  241. package/dist/components/layout/Board/use-board-selection.js.map +1 -0
  242. package/dist/components/layout/Flex.js +1 -1
  243. package/dist/components/layout/Flow.js +1 -1
  244. package/dist/components/layout/Grid.js +1 -1
  245. package/dist/components/layout/Panel.js +1 -1
  246. package/dist/components/layout/Prefix.js +1 -1
  247. package/dist/components/layout/ResizablePanel.js +1 -1
  248. package/dist/components/layout/Space.js +1 -1
  249. package/dist/components/layout/Suffix.js +1 -1
  250. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  251. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  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 +1 -1
  255. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  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/FileTabs/FileTabs.js +1 -1
  264. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  265. package/dist/components/other/Calendar/Calendar.js +1 -1
  266. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  267. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  268. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  269. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  270. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  271. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  272. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  273. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  274. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  275. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  276. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  277. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  278. package/dist/components/overlays/Dialog/context.js +1 -1
  279. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  280. package/dist/components/overlays/Modal/Modal.js +1 -1
  281. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  282. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  283. package/dist/components/overlays/Modal/Overlay.js +1 -1
  284. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  285. package/dist/components/overlays/Modal/Popover.js +1 -1
  286. package/dist/components/overlays/Modal/Tray.js +1 -1
  287. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  288. package/dist/components/overlays/Modal/Underlay.js +1 -1
  289. package/dist/components/overlays/Notifications/Notification.js +1 -1
  290. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  291. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  292. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  293. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  294. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  295. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  296. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  297. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  298. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  299. package/dist/components/overlays/Notifications/index.js +1 -1
  300. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  301. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  302. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  303. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  304. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  305. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  306. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  307. package/dist/components/overlays/Toast/index.js +1 -1
  308. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  309. package/dist/components/overlays/Toast/useToast.js +1 -1
  310. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  311. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  312. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  313. package/dist/components/overlays/Tooltip/context.js +1 -1
  314. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  315. package/dist/components/portal/Portal.js +1 -1
  316. package/dist/components/portal/PortalProvider.js +1 -1
  317. package/dist/components/portal/usePortal.js +1 -1
  318. package/dist/components/shared/DraggableCollection.js +1 -1
  319. package/dist/components/shared/InvalidIcon.js +1 -1
  320. package/dist/components/shared/ValidIcon.js +1 -1
  321. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  322. package/dist/components/status/Spin/Cube.js +1 -1
  323. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  324. package/dist/components/status/Spin/Spin.js +1 -1
  325. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  326. package/dist/data/item-themes.js +1 -1
  327. package/dist/data/themes.js +1 -1
  328. package/dist/eslint-plugin/defaults.generated.js +9 -1
  329. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  330. package/dist/eslint-plugin/index.js +1 -1
  331. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  332. package/dist/i18n/I18nProvider.js +1 -1
  333. package/dist/i18n/createFormatter.js +1 -1
  334. package/dist/i18n/index.js +1 -1
  335. package/dist/i18n/instance.js +1 -1
  336. package/dist/i18n/locales/de-DE/uikit.js +9 -1
  337. package/dist/i18n/locales/en-US/uikit.js +9 -1
  338. package/dist/i18n/locales/en-US/uikit.json.d.ts +9 -1
  339. package/dist/i18n/locales/es-ES/uikit.js +9 -1
  340. package/dist/i18n/locales/es-MX/uikit.js +9 -1
  341. package/dist/i18n/locales/fr-FR/uikit.js +9 -1
  342. package/dist/i18n/locales/it-IT/uikit.js +9 -1
  343. package/dist/i18n/locales/ja-JP/uikit.js +9 -1
  344. package/dist/i18n/locales/nb-NO/uikit.js +9 -1
  345. package/dist/i18n/locales/pt-BR/uikit.js +9 -1
  346. package/dist/i18n/locales/pt-PT/uikit.js +9 -1
  347. package/dist/i18n/locales/sv-SE/uikit.js +9 -1
  348. package/dist/i18n/locales/vi-VN/uikit.js +9 -1
  349. package/dist/i18n/locales.js +1 -1
  350. package/dist/i18n/useFormatter.js +1 -1
  351. package/dist/i18n/useI18n.js +1 -1
  352. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  353. package/dist/icons/AdjustmentsIcon.js +1 -1
  354. package/dist/icons/AiIcon.js +1 -1
  355. package/dist/icons/AreaChartIcon.js +1 -1
  356. package/dist/icons/BackwardIcon.js +1 -1
  357. package/dist/icons/BarChartIcon.js +1 -1
  358. package/dist/icons/BellFilledIcon.js +1 -1
  359. package/dist/icons/BellIcon.js +1 -1
  360. package/dist/icons/BooleanIcon.js +1 -1
  361. package/dist/icons/CalendarEditIcon.js +1 -1
  362. package/dist/icons/CalendarIcon.js +1 -1
  363. package/dist/icons/CaretDownIcon.js +1 -1
  364. package/dist/icons/CaretUpIcon.js +1 -1
  365. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  366. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  367. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  368. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  369. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  370. package/dist/icons/ChartBarLineIcon.js +1 -1
  371. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  372. package/dist/icons/ChartBarStackedIcon.js +1 -1
  373. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  374. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  375. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  376. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  377. package/dist/icons/ChartBubbleIcon.js +1 -1
  378. package/dist/icons/ChartDonut2Icon.js +1 -1
  379. package/dist/icons/ChartFunnelIcon.js +1 -1
  380. package/dist/icons/ChartHeatmapIcon.js +1 -1
  381. package/dist/icons/ChartKPIIcon.js +1 -1
  382. package/dist/icons/ChartPie2Icon.js +1 -1
  383. package/dist/icons/ChartScatterIcon.js +1 -1
  384. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  385. package/dist/icons/CheckCircleIcon.js +1 -1
  386. package/dist/icons/CheckIcon.js +1 -1
  387. package/dist/icons/CircleFilledIcon.js +1 -1
  388. package/dist/icons/ClearIcon.js +1 -1
  389. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  390. package/dist/icons/CloseCircleIcon.js +1 -1
  391. package/dist/icons/CloseIcon.js +1 -1
  392. package/dist/icons/CodeIcon.js +1 -1
  393. package/dist/icons/ColumnTotalIcon.js +1 -1
  394. package/dist/icons/CopyIcon.js +1 -1
  395. package/dist/icons/CountIcon.js +1 -1
  396. package/dist/icons/CubeIcon.js +1 -1
  397. package/dist/icons/CubePauseIcon.js +1 -1
  398. package/dist/icons/CubePlayIcon.js +1 -1
  399. package/dist/icons/CurrencyDollarIcon.js +1 -1
  400. package/dist/icons/DangerIcon.js +1 -1
  401. package/dist/icons/DashboardIcon.js +1 -1
  402. package/dist/icons/DatabaseIcon.js +1 -1
  403. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  404. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  405. package/dist/icons/DirectionIcon.js +1 -1
  406. package/dist/icons/DonutIcon.js +1 -1
  407. package/dist/icons/DownIcon.js +1 -1
  408. package/dist/icons/EditIcon.js +1 -1
  409. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  410. package/dist/icons/ExclamationCircleIcon.js +1 -1
  411. package/dist/icons/ExclamationIcon.js +1 -1
  412. package/dist/icons/EyeIcon.js +1 -1
  413. package/dist/icons/EyeInvisibleIcon.js +1 -1
  414. package/dist/icons/FilterIcon.js +1 -1
  415. package/dist/icons/FolderFilledIcon.js +1 -1
  416. package/dist/icons/FolderIcon.js +1 -1
  417. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  418. package/dist/icons/FolderOpenIcon.js +1 -1
  419. package/dist/icons/ForwardIcon.js +1 -1
  420. package/dist/icons/GripVerticalIcon.js +1 -1
  421. package/dist/icons/HierarchyIcon.js +1 -1
  422. package/dist/icons/HierarchyOpenIcon.js +1 -1
  423. package/dist/icons/Icon.js +1 -1
  424. package/dist/icons/InfoCircleIcon.js +1 -1
  425. package/dist/icons/InfoIcon.js +1 -1
  426. package/dist/icons/KeyIcon.js +1 -1
  427. package/dist/icons/LeftIcon.js +1 -1
  428. package/dist/icons/LineChartIcon.js +1 -1
  429. package/dist/icons/LoadingIcon.js +1 -1
  430. package/dist/icons/LockFilledIcon.js +1 -1
  431. package/dist/icons/LockIcon.js +1 -1
  432. package/dist/icons/MoreIcon.js +1 -1
  433. package/dist/icons/NotAllowedIcon.js +1 -1
  434. package/dist/icons/Number123Icon.js +1 -1
  435. package/dist/icons/NumberIcon.js +1 -1
  436. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  437. package/dist/icons/PauseCircleIcon.js +1 -1
  438. package/dist/icons/PauseIcon.js +1 -1
  439. package/dist/icons/PercentageIcon.js +1 -1
  440. package/dist/icons/PieChartIcon.js +1 -1
  441. package/dist/icons/PipetteIcon.d.ts +12 -0
  442. package/dist/icons/PipetteIcon.js +11 -0
  443. package/dist/icons/PipetteIcon.js.map +1 -0
  444. package/dist/icons/PlayCircleIcon.js +1 -1
  445. package/dist/icons/PlayIcon.js +1 -1
  446. package/dist/icons/PlusIcon.js +1 -1
  447. package/dist/icons/ProgressBarIcon.js +1 -1
  448. package/dist/icons/ReloadIcon.js +1 -1
  449. package/dist/icons/ReportIcon.js +1 -1
  450. package/dist/icons/ReturnIcon.js +1 -1
  451. package/dist/icons/RightIcon.js +1 -1
  452. package/dist/icons/RowTotalsIcon.js +1 -1
  453. package/dist/icons/SchemeIcon.js +1 -1
  454. package/dist/icons/SearchIcon.js +1 -1
  455. package/dist/icons/SemanticQueryIcon.js +1 -1
  456. package/dist/icons/SettingsIcon.js +1 -1
  457. package/dist/icons/ShieldFilledIcon.js +1 -1
  458. package/dist/icons/ShieldIcon.js +1 -1
  459. package/dist/icons/SlashIcon.js +1 -1
  460. package/dist/icons/SparklesIcon.js +1 -1
  461. package/dist/icons/SqlIcon.js +1 -1
  462. package/dist/icons/StatsIcon.js +1 -1
  463. package/dist/icons/StopIcon.js +1 -1
  464. package/dist/icons/StringIcon.js +1 -1
  465. package/dist/icons/SubtotalsIcon.js +1 -1
  466. package/dist/icons/SwitchIcon.js +1 -1
  467. package/dist/icons/TableIcon.js +1 -1
  468. package/dist/icons/ThumbsDownIcon.js +1 -1
  469. package/dist/icons/ThumbsUpIcon.js +1 -1
  470. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  471. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  472. package/dist/icons/ThunderboltIcon.js +1 -1
  473. package/dist/icons/TimeIcon.js +1 -1
  474. package/dist/icons/TrashIcon.js +1 -1
  475. package/dist/icons/UnlockIcon.js +1 -1
  476. package/dist/icons/UpIcon.js +1 -1
  477. package/dist/icons/UserGroupIcon.js +1 -1
  478. package/dist/icons/UserIcon.js +1 -1
  479. package/dist/icons/UserLockIcon.js +1 -1
  480. package/dist/icons/ViewIcon.js +1 -1
  481. package/dist/icons/WarningFilledIcon.js +1 -1
  482. package/dist/icons/WarningIcon.js +1 -1
  483. package/dist/icons/index.d.ts +1 -0
  484. package/dist/icons/wrap-icon.js +1 -1
  485. package/dist/index.d.ts +9 -3
  486. package/dist/index.js +13 -8
  487. package/dist/index.js.map +1 -1
  488. package/dist/props.d.ts +13 -0
  489. package/dist/provider.d.ts +1 -1
  490. package/dist/provider.js +1 -1
  491. package/dist/provider.js.map +1 -1
  492. package/dist/providers/TrackingProvider.js +1 -1
  493. package/dist/providers/navigationAdapter.default.js +1 -1
  494. package/dist/shared/form.d.ts +2 -1
  495. package/dist/tokens/base.js +1 -1
  496. package/dist/tokens/colors.js +1 -1
  497. package/dist/tokens/index.js +1 -1
  498. package/dist/tokens/layout.js +1 -1
  499. package/dist/tokens/lazy-styles.js +1 -1
  500. package/dist/tokens/palette-config.js +1 -1
  501. package/dist/tokens/palette.js +1 -1
  502. package/dist/tokens/shadows.js +1 -1
  503. package/dist/tokens/sizes.js +1 -1
  504. package/dist/tokens/spacing.js +1 -1
  505. package/dist/tokens/typography.js +1 -1
  506. package/dist/utils/ResizeSensor.js +1 -1
  507. package/dist/utils/is-dev-env.js +1 -1
  508. package/dist/utils/modules.js +1 -1
  509. package/dist/utils/promise.js +1 -1
  510. package/dist/utils/raf.js +1 -1
  511. package/dist/utils/random.js +1 -1
  512. package/dist/utils/range.js +1 -1
  513. package/dist/utils/react/RenderCache.js +1 -1
  514. package/dist/utils/react/Slots.js +1 -1
  515. package/dist/utils/react/chain.js +1 -1
  516. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  517. package/dist/utils/react/index.js +1 -1
  518. package/dist/utils/react/interactions.js +1 -1
  519. package/dist/utils/react/isTextOnly.js +1 -1
  520. package/dist/utils/react/mapProps.js +1 -1
  521. package/dist/utils/react/mergeProps.d.ts +1 -1
  522. package/dist/utils/react/mergeProps.js +1 -1
  523. package/dist/utils/react/mergeProps.js.map +1 -1
  524. package/dist/utils/react/nullableValue.d.ts +1 -1
  525. package/dist/utils/react/nullableValue.js +1 -1
  526. package/dist/utils/react/nullableValue.js.map +1 -1
  527. package/dist/utils/react/resolveIcon.js +1 -1
  528. package/dist/utils/react/sharedStore.js +1 -1
  529. package/dist/utils/react/useCombinedRefs.js +1 -1
  530. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  531. package/dist/utils/react/useEventBus.js +1 -1
  532. package/dist/utils/react/useId.js +1 -1
  533. package/dist/utils/react/useIsDarwin.js +1 -1
  534. package/dist/utils/react/useKeySymbols.js +1 -1
  535. package/dist/utils/react/useLayoutEffect.js +1 -1
  536. package/dist/utils/react/useLocalStorage.js +1 -1
  537. package/dist/utils/react/useMergeStyles.js +1 -1
  538. package/dist/utils/react/usePopoverSync.js +1 -1
  539. package/dist/utils/react/useQaProps.js +1 -1
  540. package/dist/utils/react/useViewportSize.js +1 -1
  541. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  542. package/dist/utils/selection.js +1 -1
  543. package/dist/utils/styles.js +1 -1
  544. package/dist/utils/tree.js +1 -1
  545. package/dist/utils/warnings.js +1 -1
  546. package/dist/version.js +3 -3
  547. package/docs/components/content/Text.md +1 -2
  548. package/docs/components/fields/ColorPicker.md +271 -0
  549. package/docs/components/layout/Board.md +154 -6
  550. package/docs/tasty/README.md +3 -1
  551. package/docs/tasty/ai-agents.md +21 -7
  552. package/docs/tasty/configuration.md +220 -30
  553. package/docs/tasty/debug.md +7 -7
  554. package/docs/tasty/design-system.md +2 -2
  555. package/docs/tasty/dsl.md +68 -8
  556. package/docs/tasty/injector.md +31 -4
  557. package/docs/tasty/methodology.md +1 -1
  558. package/docs/tasty/migration-v3.md +285 -0
  559. package/docs/tasty/pipeline.md +3 -3
  560. package/docs/tasty/plugins.md +349 -0
  561. package/docs/tasty/react-api.md +61 -1
  562. package/docs/tasty/ssr.md +41 -33
  563. package/docs/tasty/styles.md +27 -9
  564. package/docs/tasty/tasty-static.md +8 -6
  565. package/package.json +3 -3
@@ -1,5 +1,6 @@
1
1
 
2
2
  import { LayoutConstraint, LayoutItem, ResizeHandleAxis } from "./grid-core/types.js";
3
+ import { BoardSelectionMode } from "./use-board-selection.js";
3
4
  import { CubeBoardWidgetProps } from "./Widget.js";
4
5
  import { AllBaseProps, ContainerStyleProps } from "@tenphi/tasty";
5
6
  import { ReactNode } from "react";
@@ -12,12 +13,23 @@ type BoardCompactType = 'vertical' | 'horizontal' | 'free' | null;
12
13
  * (falls back to `oldItem` if the item just left this board via a cross-board
13
14
  * transfer), `oldItem` is that item as it was when the gesture started, and
14
15
  * `placeholder` is the current drop-slot preview (if any).
16
+ *
17
+ * The plural fields describe the whole gesture: a group drag moves every
18
+ * selected widget at once, so `items`/`oldItems`/`placeholders` list them all,
19
+ * grabbed widget first. An ordinary drag or a resize produces exactly one entry,
20
+ * so `items[0] === item` and `placeholders[0] === placeholder` always hold.
15
21
  */
16
22
  interface BoardInteractionInfo {
17
23
  layout: LayoutItem[];
18
24
  item: LayoutItem;
19
25
  oldItem: LayoutItem;
20
26
  placeholder: LayoutItem | null;
27
+ /** Every item in this gesture, grabbed first. */
28
+ items: LayoutItem[];
29
+ /** Those items as they were when the gesture started, same order. */
30
+ oldItems: LayoutItem[];
31
+ /** Every drop-slot preview. Empty exactly when `placeholder` is `null`. */
32
+ placeholders: LayoutItem[];
21
33
  }
22
34
  /** Visibility of the internal grid-line overlay. */
23
35
  type BoardGridLines = boolean | 'drag';
@@ -109,6 +121,41 @@ interface CubeBoardProps extends Omit<AllBaseProps, 'children' | 'onDragStart' |
109
121
  * rows at that height. @default false
110
122
  */
111
123
  isAligned?: boolean;
124
+ /**
125
+ * Whether widgets can be selected, and how many at a time. `'multiple'` also
126
+ * enables the marquee and rigid group movement: dragging any selected widget
127
+ * moves the whole selection. @default 'none'
128
+ */
129
+ selectionMode?: BoardSelectionMode;
130
+ /** Controlled selection. Keys are layout item ids (`LayoutItem.i`). */
131
+ selectedKeys?: string[];
132
+ /** Initial selection for uncontrolled usage. */
133
+ defaultSelectedKeys?: string[];
134
+ /**
135
+ * Called when the selection changes. Keys are deduped and returned in the
136
+ * board's layout order, never in click order.
137
+ */
138
+ onSelectionChange?: (keys: string[]) => void;
139
+ /**
140
+ * CSS selector for descendants whose clicks must never change the selection
141
+ * (form controls, buttons, links). Mirrors `dragCancel`; can be overridden per
142
+ * widget. Pass `''` to disable the guard entirely.
143
+ * @default BOARD_SELECTION_CANCEL
144
+ */
145
+ selectionCancel?: string;
146
+ /**
147
+ * Draw a rubber-band (marquee) selection when a drag starts on empty board
148
+ * space. Only meaningful with `selectionMode="multiple"`.
149
+ * @default selectionMode === 'multiple'
150
+ */
151
+ allowMarqueeSelection?: boolean;
152
+ /**
153
+ * Called when the user presses <kbd>Delete</kbd>/<kbd>Backspace</kbd> with a
154
+ * non-empty selection, and focus is inside the board but not in an editable
155
+ * field. Board never mutates the layout itself — removing the widgets is the
156
+ * consumer's job. Board only handles these keys when this handler is set.
157
+ */
158
+ onWidgetsDelete?: (keys: string[]) => void;
112
159
  /** Grid/item layout constraints. */
113
160
  constraints?: LayoutConstraint[];
114
161
  /**
@@ -125,6 +172,13 @@ interface CubeBoardProps extends Omit<AllBaseProps, 'children' | 'onDragStart' |
125
172
  widgetProps?: Partial<CubeBoardWidgetDefaults>;
126
173
  children?: ReactNode;
127
174
  }
175
+ /**
176
+ * Descendants whose clicks never change the selection. A widget is a large
177
+ * surface the user also clicks to *work with*, so anything interactive inside it
178
+ * must keep its click. `[data-no-select]` is the escape hatch for an app's own
179
+ * custom controls.
180
+ */
181
+ declare const BOARD_SELECTION_CANCEL: string;
128
182
  //#endregion
129
- export { BoardCompactType, BoardGridLines, BoardInteractionInfo, CubeBoardProps };
183
+ export { BOARD_SELECTION_CANCEL, BoardCompactType, BoardGridLines, BoardInteractionInfo, CubeBoardProps };
130
184
  //# sourceMappingURL=Board.d.ts.map
@@ -1,7 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.154.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
+ import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
5
  import { useEvent } from "../../../_internal/hooks/use-event.js";
6
+ import { useI18n } from "../../../i18n/useI18n.js";
5
7
  import { BoardGridLinesContext, BoardMetricsContext, useBoardGridLines, useBoardHost, useBoardMetrics, useBoardRegistry } from "./board-context.js";
6
8
  import { getAllCollisions } from "./grid-core/collision.js";
7
9
  import { bottom, cloneLayout, correctBounds, getLayoutItem, modifyLayout } from "./grid-core/layout.js";
@@ -10,10 +12,13 @@ import { calcGridColWidth, calcGridItemPosition, calcWH } from "./grid-core/calc
10
12
  import { applySizeConstraints, defaultConstraints } from "./grid-core/constraints.js";
11
13
  import { BoardProvider } from "./BoardProvider.js";
12
14
  import { useBoardLayout } from "./use-board-layout.js";
15
+ import { useBoardSelectModifierKey } from "./use-board-select-modifier-key.js";
16
+ import { useBoardSelection } from "./use-board-selection.js";
13
17
  import { WidgetHost } from "./WidgetHost.js";
14
18
  import { CONTAINER_STYLES, filterBaseProps, mergeStyles, tasty } from "@tenphi/tasty";
15
19
  import { forwardRef, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from "react";
16
20
  import { jsx, jsxs } from "react/jsx-runtime";
21
+ import { useFocusWithin } from "react-aria";
17
22
  import { useResizeObserver } from "@react-aria/utils";
18
23
 
19
24
  //#region src/components/layout/Board/Board.tsx
@@ -26,7 +31,8 @@ const BoardElement = tasty({
26
31
  flexGrow: 1,
27
32
  height: "min 0",
28
33
  fill: "#surface",
29
- boxSizing: "border-box"
34
+ boxSizing: "border-box",
35
+ outline: 0
30
36
  }
31
37
  });
32
38
  const ContentLayer = tasty({ styles: {
@@ -39,15 +45,40 @@ const PlaceholderElement = tasty({
39
45
  position: "absolute",
40
46
  top: 0,
41
47
  left: 0,
42
- fill: "#purple.10",
48
+ fill: "#primary.10",
43
49
  radius: "1cr",
44
- border: "#purple.40",
50
+ border: "#primary.40",
45
51
  zIndex: 2,
46
52
  pointerEvents: "none",
47
53
  transition: "inset 80ms linear, width 80ms linear, height 80ms linear",
48
54
  boxSizing: "border-box"
49
55
  }
50
56
  });
57
+ const MarqueeElement = tasty({
58
+ qa: "BoardMarquee",
59
+ styles: {
60
+ position: "absolute",
61
+ top: 0,
62
+ left: 0,
63
+ fill: "#primary-accent-surface.06",
64
+ border: "1bw dashed #primary-border",
65
+ radius: "1cr",
66
+ zIndex: 3,
67
+ pointerEvents: "none",
68
+ boxSizing: "border-box"
69
+ }
70
+ });
71
+ const A11yLayer = tasty({ styles: {
72
+ position: "absolute",
73
+ width: "1px",
74
+ height: "1px",
75
+ padding: 0,
76
+ margin: "-1px",
77
+ overflow: "hidden",
78
+ clipPath: "inset(50%)",
79
+ whiteSpace: "nowrap",
80
+ border: 0
81
+ } });
51
82
  const GridOverlayElement = tasty({
52
83
  qa: "BoardGridOverlay",
53
84
  styles: {
@@ -58,12 +89,32 @@ const GridOverlayElement = tasty({
58
89
  opacity: ".5"
59
90
  }
60
91
  });
92
+ /**
93
+ * Descendants whose clicks never change the selection. A widget is a large
94
+ * surface the user also clicks to *work with*, so anything interactive inside it
95
+ * must keep its click. `[data-no-select]` is the escape hatch for an app's own
96
+ * custom controls.
97
+ */
98
+ const BOARD_SELECTION_CANCEL = "input,textarea,select,button,a,[role=\"button\"],[role=\"menuitem\"],[role=\"checkbox\"],[role=\"switch\"],[role=\"tab\"],[contenteditable=\"true\"],[data-no-select]";
99
+ /** Manhattan distance a pointer must travel before a press becomes a marquee. */
100
+ const MARQUEE_THRESHOLD = 4;
101
+ /**
102
+ * Whether an event landed in a text-editing context. Checking the *event target*
103
+ * beats `document.activeElement`: it stays correct for content rendered through
104
+ * a portal, and it cannot be fooled by focus that moved between the keystroke
105
+ * and the handler.
106
+ */
107
+ function isEditableTarget(target) {
108
+ const el = target;
109
+ if (!el || typeof el.closest !== "function") return false;
110
+ return !!el.closest("input,textarea,select,[contenteditable=\"true\"]");
111
+ }
61
112
  function compactTypeToCore(compact) {
62
113
  if (compact === "free") return null;
63
114
  return compact;
64
115
  }
65
116
  function BoardInner(props, ref) {
66
- const { id: providedId, layout: controlledLayout, defaultLayout, onLayoutChange, onDragStart, onDrag, onDragStop, onResizeStart, onResize: onResizeProp, onResizeStop, cols = 12, rowHeight = 100, margin = [8, 8], containerPadding, maxRows = Infinity, compact = "vertical", allowOverlap = false, preventCollision = false, isDraggable = true, isResizable = true, isDroppable = true, resizeHandles = ["se"], dragCancel, dragHandle, showGridLines, isAligned = false, constraints, width: providedWidth, widgetProps, children, ...otherProps } = props;
117
+ const { id: providedId, layout: controlledLayout, defaultLayout, onLayoutChange, onDragStart, onDrag, onDragStop, onResizeStart, onResize: onResizeProp, onResizeStop, cols = 12, rowHeight = 100, margin = [8, 8], containerPadding, maxRows = Infinity, compact = "vertical", allowOverlap = false, preventCollision = false, isDraggable = true, isResizable = true, isDroppable = true, resizeHandles = ["se"], dragCancel, dragHandle, showGridLines, isAligned = false, selectionMode = "none", selectedKeys, defaultSelectedKeys, onSelectionChange, selectionCancel = BOARD_SELECTION_CANCEL, allowMarqueeSelection = selectionMode === "multiple", onWidgetsDelete, constraints, width: providedWidth, widgetProps, children, ...otherProps } = props;
67
118
  const registry = useBoardRegistry();
68
119
  const parentMetrics = useBoardMetrics();
69
120
  const host = useBoardHost();
@@ -77,6 +128,8 @@ function BoardInner(props, ref) {
77
128
  const effectiveShowGridLines = showGridLines ?? (inheritedGridLines ? "drag" : false);
78
129
  const generatedId = useId();
79
130
  const boardId = providedId ?? generatedId;
131
+ const selectedHintId = `${generatedId}-selected`;
132
+ const { t } = useI18n();
80
133
  const containerRef = useCombinedRefs(ref);
81
134
  const contentRef = useRef(null);
82
135
  const [measuredWidth, setMeasuredWidth] = useState(0);
@@ -97,15 +150,29 @@ function BoardInner(props, ref) {
97
150
  useEffect(() => {
98
151
  if (providedWidth == null) onResizeContainer();
99
152
  }, [providedWidth]);
100
- const { layout, layoutRef, placeholder, placeholderRef, setPlaceholder, applyLayout } = useBoardLayout({
153
+ const { layout, layoutRef, placeholders, placeholder, placeholdersRef, placeholderRef, setPlaceholders, applyLayout } = useBoardLayout({
101
154
  layout: controlledLayout,
102
155
  defaultLayout,
103
156
  onLayoutChange
104
157
  });
158
+ const getWidgetLabel = useEvent((key) => {
159
+ const registration = registry.store.get(key);
160
+ return registration?.["aria-label"] ?? registration?.qa ?? key;
161
+ });
162
+ const isWidgetSelectable = (key) => (registry.store.get(key)?.isSelectable ?? widgetProps?.isSelectable) !== false;
163
+ const { selectedKeySet, selectedKeysRef, setSelection, select, clearSelection, announcement } = useBoardSelection({
164
+ selectionMode,
165
+ selectedKeys,
166
+ defaultSelectedKeys,
167
+ onSelectionChange,
168
+ layout,
169
+ getLabel: getWidgetLabel
170
+ });
171
+ const selectModifierKey = useBoardSelectModifierKey();
105
172
  useSyncExternalStore(registry.store.subscribe, registry.store.getVersion);
106
173
  const effectiveMargin = aligned ? parentMetrics.margin : margin;
107
174
  const resolvedPadding = containerPadding ?? (aligned ? [0, 0] : effectiveMargin);
108
- const rows = Math.max(bottom(layout), placeholder ? placeholder.y + placeholder.h : 0);
175
+ const rows = Math.max(bottom(layout), ...placeholders.map((p) => p.y + p.h), 0);
109
176
  const parentColWidth = aligned ? parentMetrics.colWidth : 0;
110
177
  const alignedCols = aligned && width > 0 ? Math.max(1, Math.floor((width - resolvedPadding[0] * 2 + effectiveMargin[0] + 2) / (parentColWidth + effectiveMargin[0]))) : cols;
111
178
  const effectiveCols = aligned ? alignedCols : cols;
@@ -153,7 +220,7 @@ function BoardInner(props, ref) {
153
220
  isDroppable
154
221
  };
155
222
  const applyLayoutEvent = useEvent(applyLayout);
156
- const setPlaceholderEvent = useEvent(setPlaceholder);
223
+ const setPlaceholdersEvent = useEvent(setPlaceholders);
157
224
  const entryRef = useRef(null);
158
225
  if (!entryRef.current) entryRef.current = {
159
226
  id: boardId,
@@ -165,8 +232,9 @@ function BoardInner(props, ref) {
165
232
  getMaxRows: () => liveRef.current.maxRows,
166
233
  getContainerHeight: () => liveRef.current.containerHeight,
167
234
  getLayout: () => layoutRef.current,
235
+ getSelectedKeys: () => selectedKeysRef.current.size > 0 ? selectedKeysRef.current : null,
168
236
  applyLayout: (next, commit) => applyLayoutEvent(next, commit),
169
- setPlaceholder: (item) => setPlaceholderEvent(item),
237
+ setPlaceholders: (items) => setPlaceholdersEvent(items),
170
238
  isDroppable: () => liveRef.current.isDroppable
171
239
  };
172
240
  useEffect(() => {
@@ -235,12 +303,15 @@ function BoardInner(props, ref) {
235
303
  accX: 0,
236
304
  accY: 0
237
305
  };
238
- setPlaceholder({ ...item });
306
+ setPlaceholders([{ ...item }]);
239
307
  onResizeStart?.({
240
308
  layout: layoutRef.current,
241
309
  item: { ...item },
242
310
  oldItem: { ...item },
243
- placeholder: { ...item }
311
+ placeholder: { ...item },
312
+ items: [{ ...item }],
313
+ oldItems: [{ ...item }],
314
+ placeholders: [{ ...item }]
244
315
  });
245
316
  return;
246
317
  }
@@ -249,12 +320,16 @@ function BoardInner(props, ref) {
249
320
  if (phase === "end") {
250
321
  const finalLayout = [...layoutRef.current];
251
322
  applyLayout(finalLayout, true);
252
- setPlaceholder(null);
323
+ setPlaceholders([]);
324
+ const resizedItem = getLayoutItem(finalLayout, id) ?? rs.item;
253
325
  onResizeStop?.({
254
326
  layout: finalLayout,
255
- item: getLayoutItem(finalLayout, id) ?? rs.item,
327
+ item: resizedItem,
256
328
  oldItem: rs.item,
257
- placeholder: null
329
+ placeholder: null,
330
+ items: [resizedItem],
331
+ oldItems: [rs.item],
332
+ placeholders: []
258
333
  });
259
334
  resizeStateRef.current = null;
260
335
  return;
@@ -307,12 +382,16 @@ function BoardInner(props, ref) {
307
382
  const compacted = [...compactor.compact(working, pp.cols)];
308
383
  applyLayout(compacted, false);
309
384
  const nextPlaceholder = getLayoutItem(compacted, id) ?? newItem;
310
- setPlaceholder(nextPlaceholder);
385
+ setPlaceholders([nextPlaceholder]);
386
+ const resizedItem = getLayoutItem(compacted, id) ?? newItem;
311
387
  onResizeProp?.({
312
388
  layout: compacted,
313
- item: getLayoutItem(compacted, id) ?? newItem,
389
+ item: resizedItem,
314
390
  oldItem: rs.item,
315
- placeholder: nextPlaceholder
391
+ placeholder: nextPlaceholder,
392
+ items: [resizedItem],
393
+ oldItems: [rs.item],
394
+ placeholders: [nextPlaceholder]
316
395
  });
317
396
  });
318
397
  const handleAutoHeight = useEvent((id, neededRows) => {
@@ -328,23 +407,117 @@ function BoardInner(props, ref) {
328
407
  applyLayout([...liveRef.current.compactor.compact(working, pp.cols)], true);
329
408
  });
330
409
  const dragOldItemRef = useRef(null);
410
+ const dragOldItemsRef = useRef([]);
331
411
  const handleDragLifecycle = useEvent((id, phase) => {
332
412
  const currentLayout = layoutRef.current;
333
413
  const liveItem = getLayoutItem(currentLayout, id);
334
- if (phase === "start") dragOldItemRef.current = liveItem ? { ...liveItem } : null;
414
+ if (phase === "start") {
415
+ dragOldItemRef.current = liveItem ? { ...liveItem } : null;
416
+ const ds = registry.getDragState();
417
+ dragOldItemsRef.current = ds && ds.itemId === id ? ds.items.map((it) => ({ ...it })) : [];
418
+ }
335
419
  const oldItem = dragOldItemRef.current ?? liveItem;
336
420
  if (!oldItem) return;
421
+ const item = liveItem ?? oldItem;
422
+ const oldItems = dragOldItemsRef.current.length ? dragOldItemsRef.current : [oldItem];
423
+ const items = oldItems.map((old) => getLayoutItem(currentLayout, old.i) ?? old);
337
424
  const info = {
338
425
  layout: currentLayout,
339
- item: liveItem ?? oldItem,
426
+ item,
340
427
  oldItem,
341
- placeholder: placeholderRef.current
428
+ placeholder: placeholderRef.current,
429
+ items,
430
+ oldItems,
431
+ placeholders: placeholdersRef.current
342
432
  };
343
433
  if (phase === "start") onDragStart?.(info);
344
434
  else if (phase === "move") onDrag?.(info);
345
435
  else {
346
436
  onDragStop?.(info);
347
437
  dragOldItemRef.current = null;
438
+ dragOldItemsRef.current = [];
439
+ }
440
+ });
441
+ const [marqueeRect, setMarqueeRect] = useState(null);
442
+ const handleContentPointerDown = useEvent((event) => {
443
+ if (selectionMode !== "multiple" || !allowMarqueeSelection || event.button !== 0 || registry.dragState) return;
444
+ const target = event.target;
445
+ if (target?.closest("[data-board-widget-host]")) return;
446
+ if (selectionCancel && target?.closest(selectionCancel)) return;
447
+ const content = contentRef.current;
448
+ if (!content) return;
449
+ const origin = content.getBoundingClientRect();
450
+ const startX = event.clientX;
451
+ const startY = event.clientY;
452
+ const additive = event[selectModifierKey] || event.shiftKey;
453
+ const base = additive ? [...selectedKeysRef.current] : [];
454
+ let passedThreshold = false;
455
+ const hitTest = (clientX, clientY) => {
456
+ const left = Math.min(startX, clientX) - origin.left;
457
+ const right = Math.max(startX, clientX) - origin.left;
458
+ const top = Math.min(startY, clientY) - origin.top;
459
+ const bottom = Math.max(startY, clientY) - origin.top;
460
+ const next = new Set(base);
461
+ for (const it of layoutRef.current) {
462
+ if (!isWidgetSelectable(it.i)) continue;
463
+ const pos = calcGridItemPosition(liveRef.current.positionParams, it.x, it.y, it.w, it.h);
464
+ if (pos.left < right && pos.left + pos.width > left && pos.top < bottom && pos.top + pos.height > top) next.add(it.i);
465
+ }
466
+ return {
467
+ next,
468
+ box: {
469
+ left,
470
+ top,
471
+ width: right - left,
472
+ height: bottom - top
473
+ }
474
+ };
475
+ };
476
+ const handleMove = (e) => {
477
+ if (!passedThreshold && Math.abs(e.clientX - startX) + Math.abs(e.clientY - startY) < MARQUEE_THRESHOLD) return;
478
+ passedThreshold = true;
479
+ setMarqueeRect(hitTest(e.clientX, e.clientY).box);
480
+ };
481
+ const finish = (e) => {
482
+ window.removeEventListener("pointermove", handleMove);
483
+ window.removeEventListener("pointerup", finish);
484
+ window.removeEventListener("pointercancel", finish);
485
+ setMarqueeRect(null);
486
+ if (passedThreshold) setSelection(hitTest(e.clientX, e.clientY).next);
487
+ else if (!additive) clearSelection();
488
+ containerRef.current?.focus({ preventScroll: true });
489
+ };
490
+ window.addEventListener("pointermove", handleMove);
491
+ window.addEventListener("pointerup", finish);
492
+ window.addEventListener("pointercancel", finish);
493
+ });
494
+ const marqueeStyle = marqueeRect ? {
495
+ left: `${marqueeRect.left}px`,
496
+ top: `${marqueeRect.top}px`,
497
+ width: `${marqueeRect.width}px`,
498
+ height: `${marqueeRect.height}px`
499
+ } : null;
500
+ const { focusWithinProps: boardFocusWithinProps } = useFocusWithin({
501
+ isDisabled: selectionMode === "none",
502
+ onBlurWithin: () => clearSelection()
503
+ });
504
+ const handleBoardKeyDown = useEvent((event) => {
505
+ if (selectionMode === "none") return;
506
+ const selected = selectedKeysRef.current;
507
+ if (selected.size === 0) return;
508
+ if (event.key === "Escape") {
509
+ event.preventDefault();
510
+ event.stopPropagation();
511
+ clearSelection();
512
+ return;
513
+ }
514
+ if ((event.key === "Delete" || event.key === "Backspace") && onWidgetsDelete && !isEditableTarget(event.target)) {
515
+ event.preventDefault();
516
+ event.stopPropagation();
517
+ const keys = [...selected];
518
+ clearSelection();
519
+ onWidgetsDelete(keys);
520
+ containerRef.current?.focus({ preventScroll: true });
348
521
  }
349
522
  });
350
523
  const styles = extractStyles(otherProps, CONTAINER_STYLES);
@@ -367,16 +540,18 @@ function BoardInner(props, ref) {
367
540
  };
368
541
  }, [ready]);
369
542
  const hostWidgetIsDragging = !!dragState && dragState.nestedBoardIds.has(boardId);
370
- const placeholderStyle = placeholder ? (() => {
371
- const pos = calcGridItemPosition(positionParams, placeholder.x, placeholder.y, placeholder.w, placeholder.h);
543
+ const placeholderStyles = useMemo(() => placeholders.map((p) => {
544
+ const pos = calcGridItemPosition(positionParams, p.x, p.y, p.w, p.h);
372
545
  return {
373
- left: `${pos.left}px`,
374
- top: `${pos.top}px`,
375
- width: `${pos.width}px`,
376
- height: `${pos.height}px`
546
+ i: p.i,
547
+ style: {
548
+ left: `${pos.left}px`,
549
+ top: `${pos.top}px`,
550
+ width: `${pos.width}px`,
551
+ height: `${pos.height}px`
552
+ }
377
553
  };
378
- })() : null;
379
- const showPlaceholder = placeholder && placeholderStyle;
554
+ }), [placeholders, positionParams]);
380
555
  const gridOverlayStyle = !hostWidgetIsDragging && (effectiveShowGridLines === true || effectiveShowGridLines === "drag" && (!!dragState || !!placeholder)) ? (() => {
381
556
  const colWidth = calcGridColWidth(positionParams);
382
557
  const rowHeightPx = positionParams.rowHeight;
@@ -416,59 +591,87 @@ function BoardInner(props, ref) {
416
591
  children: /* @__PURE__ */ jsx(BoardGridLinesContext.Provider, {
417
592
  value: effectiveShowGridLines === true || effectiveShowGridLines === "drag",
418
593
  children: /* @__PURE__ */ jsxs(BoardElement, {
419
- ...filterBaseProps(otherProps, { eventProps: true }),
594
+ ...mergeProps$1(filterBaseProps(otherProps, { eventProps: true }), boardFocusWithinProps, { onKeyDown: handleBoardKeyDown }),
420
595
  ref: containerRef,
421
596
  styles,
597
+ tabIndex: selectionMode !== "none" ? -1 : void 0,
598
+ "data-board-id": boardId,
422
599
  style: aligned ? void 0 : { minHeight: `${containerHeight}px` },
423
600
  mods: {
424
601
  dragging: !!dragState,
425
602
  "drop-target": dragState?.currentBoardId === boardId
426
603
  },
427
- children: [/* @__PURE__ */ jsxs(ContentLayer, {
428
- ref: contentRef,
429
- children: [
430
- ready && gridOverlayStyle ? /* @__PURE__ */ jsx(GridOverlayElement, {
431
- "aria-hidden": "true",
432
- style: gridOverlayStyle
433
- }) : null,
434
- ready ? layout.map((item) => {
435
- const registration = registry.store.get(item.i);
436
- const widgetDraggable = isDraggable && (registration?.isDraggable ?? widgetProps?.isDraggable) !== false && item.isDraggable !== false && !item.static;
437
- const widgetResizable = isResizable && (registration?.isResizable ?? widgetProps?.isResizable) !== false && item.isResizable !== false && !item.static;
438
- const handles = item.resizeHandles ?? registration?.resizeHandles ?? widgetProps?.resizeHandles ?? resizeHandles;
439
- const widgetDragCancel = registration?.dragCancel ?? widgetProps?.dragCancel ?? dragCancel;
440
- const widgetDragHandle = registration?.dragHandle ?? widgetProps?.dragHandle ?? dragHandle;
441
- const widgetIsCard = registration?.isCard ?? widgetProps?.isCard ?? false;
442
- const widgetIsAutoHeight = registration?.isAutoHeight ?? widgetProps?.isAutoHeight ?? false;
443
- const widgetQa = registration?.qa ?? widgetProps?.qa;
444
- return /* @__PURE__ */ jsx(WidgetHost, {
445
- boardId,
446
- item,
447
- positionParams,
448
- registration,
449
- isCard: widgetIsCard,
450
- styles: registration?.styles && widgetPropsStyles ? mergeStyles(widgetPropsStyles, registration.styles) : registration?.styles ?? widgetPropsStyles,
451
- isDraggable: widgetDraggable,
452
- isResizable: widgetResizable,
453
- resizeHandles: handles,
454
- isAutoHeight: widgetIsAutoHeight,
455
- qa: widgetQa,
456
- dragCancel: widgetDragCancel,
457
- dragHandle: widgetDragHandle,
458
- registry,
459
- dragState,
460
- settled,
461
- onResize: handleResize,
462
- onAutoHeight: handleAutoHeight,
463
- onDragLifecycle: handleDragLifecycle
464
- }, item.i);
465
- }) : null,
466
- showPlaceholder ? /* @__PURE__ */ jsx(PlaceholderElement, {
467
- "aria-hidden": "true",
468
- style: placeholderStyle
469
- }) : null
470
- ]
471
- }), children]
604
+ children: [
605
+ /* @__PURE__ */ jsxs(ContentLayer, {
606
+ ref: contentRef,
607
+ onPointerDown: handleContentPointerDown,
608
+ children: [
609
+ ready && gridOverlayStyle ? /* @__PURE__ */ jsx(GridOverlayElement, {
610
+ "aria-hidden": "true",
611
+ style: gridOverlayStyle
612
+ }) : null,
613
+ ready ? layout.map((item) => {
614
+ const registration = registry.store.get(item.i);
615
+ const widgetDraggable = isDraggable && (registration?.isDraggable ?? widgetProps?.isDraggable) !== false && item.isDraggable !== false && !item.static;
616
+ const widgetResizable = isResizable && (registration?.isResizable ?? widgetProps?.isResizable) !== false && item.isResizable !== false && !item.static;
617
+ const handles = item.resizeHandles ?? registration?.resizeHandles ?? widgetProps?.resizeHandles ?? resizeHandles;
618
+ const widgetDragCancel = registration?.dragCancel ?? widgetProps?.dragCancel ?? dragCancel;
619
+ const widgetDragHandle = registration?.dragHandle ?? widgetProps?.dragHandle ?? dragHandle;
620
+ const widgetIsCard = registration?.isCard ?? widgetProps?.isCard ?? false;
621
+ const widgetIsAutoHeight = registration?.isAutoHeight ?? widgetProps?.isAutoHeight ?? false;
622
+ const widgetQa = registration?.qa ?? widgetProps?.qa;
623
+ const widgetSelectable = selectionMode !== "none" && isWidgetSelectable(item.i);
624
+ const widgetSelectionCancel = registration?.selectionCancel ?? widgetProps?.selectionCancel ?? selectionCancel;
625
+ return /* @__PURE__ */ jsx(WidgetHost, {
626
+ boardId,
627
+ item,
628
+ positionParams,
629
+ registration,
630
+ isCard: widgetIsCard,
631
+ styles: registration?.styles && widgetPropsStyles ? mergeStyles(widgetPropsStyles, registration.styles) : registration?.styles ?? widgetPropsStyles,
632
+ isDraggable: widgetDraggable,
633
+ isResizable: widgetResizable,
634
+ resizeHandles: handles,
635
+ isAutoHeight: widgetIsAutoHeight,
636
+ qa: widgetQa,
637
+ dragCancel: widgetDragCancel,
638
+ dragHandle: widgetDragHandle,
639
+ isSelectable: widgetSelectable,
640
+ isSelected: selectedKeySet.has(item.i),
641
+ selectionCancel: widgetSelectionCancel,
642
+ selectedHintId,
643
+ onSelect: select,
644
+ onSelectionReset: clearSelection,
645
+ selectModifierKey,
646
+ registry,
647
+ dragState,
648
+ settled,
649
+ onResize: handleResize,
650
+ onAutoHeight: handleAutoHeight,
651
+ onDragLifecycle: handleDragLifecycle
652
+ }, item.i);
653
+ }) : null,
654
+ placeholderStyles.map(({ i, style }) => /* @__PURE__ */ jsx(PlaceholderElement, {
655
+ "aria-hidden": "true",
656
+ style
657
+ }, i)),
658
+ marqueeStyle ? /* @__PURE__ */ jsx(MarqueeElement, {
659
+ "aria-hidden": "true",
660
+ style: marqueeStyle
661
+ }) : null
662
+ ]
663
+ }),
664
+ selectionMode !== "none" ? /* @__PURE__ */ jsxs(A11yLayer, { children: [/* @__PURE__ */ jsx("span", {
665
+ id: selectedHintId,
666
+ children: t("board.selected", "Selected")
667
+ }), /* @__PURE__ */ jsx("span", {
668
+ role: "status",
669
+ "aria-live": "polite",
670
+ "aria-atomic": "true",
671
+ children: announcement
672
+ })] }) : null,
673
+ children
674
+ ]
472
675
  })
473
676
  })
474
677
  });
@@ -491,5 +694,5 @@ const Board = forwardRef(function Board(props, ref) {
491
694
  });
492
695
 
493
696
  //#endregion
494
- export { Board };
697
+ export { BOARD_SELECTION_CANCEL, Board };
495
698
  //# sourceMappingURL=Board.js.map