@cube-dev/ui-kit 0.185.3 → 0.186.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 (627) hide show
  1. package/dist/CHANGELOG.md +16 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +23 -21
  13. package/dist/components/GlobalStyles.js.map +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/Banner/Banner.js.map +1 -1
  20. package/dist/components/actions/Button/Button.js +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +128 -66
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  24. package/dist/components/actions/ButtonSplit/context.js +1 -1
  25. package/dist/components/actions/CommandMenu/CommandMenu.js +451 -280
  26. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  27. package/dist/components/actions/CommandMenu/styled.js +1 -1
  28. package/dist/components/actions/ItemAction/ItemAction.js +57 -93
  29. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  30. package/dist/components/actions/ItemActionContext.js +1 -1
  31. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  32. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  33. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/dist/components/actions/Link/Link.js +1 -1
  35. package/dist/components/actions/Menu/Menu.js +49 -69
  36. package/dist/components/actions/Menu/Menu.js.map +1 -1
  37. package/dist/components/actions/Menu/MenuItem.js +1 -1
  38. package/dist/components/actions/Menu/MenuSection.js +1 -1
  39. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/dist/components/actions/Menu/context.js +1 -1
  43. package/dist/components/actions/Menu/styled.js +1 -1
  44. package/dist/components/actions/actions-run.js +1 -1
  45. package/dist/components/actions/index.js +1 -1
  46. package/dist/components/actions/use-action.js +1 -1
  47. package/dist/components/actions/use-anchored-menu.js +1 -1
  48. package/dist/components/actions/use-context-menu.js +1 -1
  49. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/dist/components/content/Alert/Alert.js +1 -1
  51. package/dist/components/content/Alert/use-alert.js +1 -1
  52. package/dist/components/content/Avatar/Avatar.js +1 -1
  53. package/dist/components/content/Badge/Badge.js +5 -2
  54. package/dist/components/content/Badge/Badge.js.map +1 -1
  55. package/dist/components/content/Card/Card.js +1 -1
  56. package/dist/components/content/Content.js +1 -1
  57. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  58. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  59. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  60. package/dist/components/content/Disclosure/Disclosure.js +44 -60
  61. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  62. package/dist/components/content/Divider.js +1 -1
  63. package/dist/components/content/Footer.js +1 -1
  64. package/dist/components/content/Header.js +1 -1
  65. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  66. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  67. package/dist/components/content/InlineInput/InlineInput.js +39 -65
  68. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  69. package/dist/components/content/Item/Item.js +208 -263
  70. package/dist/components/content/Item/Item.js.map +1 -1
  71. package/dist/components/content/ItemBadge/ItemBadge.js +70 -145
  72. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  73. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  74. package/dist/components/content/Layout/GridLayout.js +1 -1
  75. package/dist/components/content/Layout/Layout.js +1 -1
  76. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  77. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  78. package/dist/components/content/Layout/LayoutContainer.js +39 -18
  79. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  80. package/dist/components/content/Layout/LayoutContent.js +100 -48
  81. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  82. package/dist/components/content/Layout/LayoutContext.js +211 -95
  83. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  84. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  85. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  86. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  87. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  88. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  89. package/dist/components/content/Layout/LayoutPane.js +240 -123
  90. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  91. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  92. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  93. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  94. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  95. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  96. package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
  97. package/dist/components/content/Layout/index.js +1 -1
  98. package/dist/components/content/Layout/utils.js +1 -1
  99. package/dist/components/content/Paragraph.js +1 -1
  100. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  101. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  102. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  103. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  104. package/dist/components/content/Result/Result.js +28 -48
  105. package/dist/components/content/Result/Result.js.map +1 -1
  106. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  107. package/dist/components/content/Tag/Tag.js +1 -1
  108. package/dist/components/content/Text.d.ts +14 -14
  109. package/dist/components/content/Text.js +1 -1
  110. package/dist/components/content/TextItem/TextItem.js +9 -17
  111. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  112. package/dist/components/content/Title.js +1 -1
  113. package/dist/components/content/Tree/Tree.js +1 -1
  114. package/dist/components/content/Tree/TreeNode.js +1 -1
  115. package/dist/components/content/Tree/styled.js +1 -1
  116. package/dist/components/content/Tree/tree-index.js +1 -1
  117. package/dist/components/content/Tree/use-checkbox-tree.js +68 -105
  118. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  119. package/dist/components/content/Tree/use-load-data.js +1 -1
  120. package/dist/components/content/highlightText.js +1 -1
  121. package/dist/components/content/use-auto-tooltip.js +106 -138
  122. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  123. package/dist/components/data/DataTable/DataTable.js +1 -1
  124. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  125. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  126. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  127. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  128. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  129. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  130. package/dist/components/data/TableBase/RowCollection.js +1 -1
  131. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  132. package/dist/components/data/TableBase/TableRow.js +1 -1
  133. package/dist/components/data/TableBase/TableView.js +1 -1
  134. package/dist/components/data/TableBase/column-menu.js +1 -1
  135. package/dist/components/data/TableBase/column-tint.js +1 -1
  136. package/dist/components/data/TableBase/row-menu.js +1 -1
  137. package/dist/components/data/TableBase/styled.js +1 -1
  138. package/dist/components/data/TableBase/table-tree.js +1 -1
  139. package/dist/components/data/TableBase/types.js +1 -1
  140. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  141. package/dist/components/data/TableBase/use-column-order.js +30 -31
  142. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  143. package/dist/components/data/TableBase/use-container-width.js +1 -1
  144. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  145. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  146. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  147. package/dist/components/data/TableBase/use-table-search.js +1 -1
  148. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  149. package/dist/components/data/TableBase/use-table-sort.js +38 -42
  150. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  151. package/dist/components/data/TableBase/use-table-sorts.js +19 -57
  152. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  153. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  154. package/dist/components/data/TableBase/use-table-tree-state.js +55 -64
  155. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  156. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  157. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  158. package/dist/components/fields/Checkbox/context.js +1 -1
  159. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  160. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  161. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  162. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  163. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  164. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  165. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  166. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  167. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  168. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  169. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  170. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  171. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  172. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  173. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  174. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  175. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  176. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  179. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  181. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  182. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  183. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  184. package/dist/components/fields/DatePicker/period.js +1 -1
  185. package/dist/components/fields/DatePicker/props.js +1 -1
  186. package/dist/components/fields/DatePicker/utils.js +1 -1
  187. package/dist/components/fields/FileInput/FileInput.js +1 -1
  188. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  189. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  190. package/dist/components/fields/Input/Input.js +1 -1
  191. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  192. package/dist/components/fields/ListBox/ListBox.js +1 -1
  193. package/dist/components/fields/ListBox/optionId.js +1 -1
  194. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +111 -108
  195. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  196. package/dist/components/fields/ListBoxPopover/listNavigation.js +4 -3
  197. package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
  198. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +1 -1
  199. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +109 -69
  200. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  201. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  202. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  203. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  204. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  205. package/dist/components/fields/Picker/Picker.js +1 -1
  206. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  207. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  208. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  209. package/dist/components/fields/RadioGroup/context.js +1 -1
  210. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  211. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  212. package/dist/components/fields/Select/Select.js +1 -1
  213. package/dist/components/fields/Slider/Gradation.js +1 -1
  214. package/dist/components/fields/Slider/HueSlider.js +1 -1
  215. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  216. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  217. package/dist/components/fields/Slider/Slider.js +1 -1
  218. package/dist/components/fields/Slider/SliderBase.js +1 -1
  219. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  220. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  221. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  222. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  223. package/dist/components/fields/Slider/elements.js +1 -1
  224. package/dist/components/fields/Slider/index.js +1 -1
  225. package/dist/components/fields/Switch/Switch.js +1 -1
  226. package/dist/components/fields/TagInput/TagInput.d.ts +9 -2
  227. package/dist/components/fields/TagInput/TagInput.js +849 -1156
  228. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  229. package/dist/components/fields/TagInput/TagList.js +1 -1
  230. package/dist/components/fields/TextArea/TextArea.js +1 -1
  231. package/dist/components/fields/TextInput/TextInput.js +1 -1
  232. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  233. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  234. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  235. package/dist/components/fields/TriggerActions.js +1 -1
  236. package/dist/components/fields/color/ColorPanel.js +1 -1
  237. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  238. package/dist/components/fields/color/channels.js +1 -1
  239. package/dist/components/fields/color/color.js +1 -1
  240. package/dist/components/fields/color/context.js +1 -1
  241. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  242. package/dist/components/form/Form/Field.js +10 -15
  243. package/dist/components/form/Form/Field.js.map +1 -1
  244. package/dist/components/form/Form/Form.js +1 -1
  245. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  246. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  247. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  248. package/dist/components/form/Form/SubmitError.js +1 -1
  249. package/dist/components/form/Form/backend.js +1 -1
  250. package/dist/components/form/Form/index.js +1 -1
  251. package/dist/components/form/Form/modern/actions.js +1 -1
  252. package/dist/components/form/Form/modern/context.js +1 -1
  253. package/dist/components/form/Form/modern/controller.js +1 -1
  254. package/dist/components/form/Form/modern/field-binding.js +1 -1
  255. package/dist/components/form/Form/modern/field.js +1 -1
  256. package/dist/components/form/Form/modern/react.js +1 -1
  257. package/dist/components/form/Form/modern/react.js.map +1 -1
  258. package/dist/components/form/Form/modern/store.js +1 -1
  259. package/dist/components/form/Form/modern/validation.js +1 -1
  260. package/dist/components/form/Form/modern/values.js +1 -1
  261. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  262. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  263. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  264. package/dist/components/form/Form/use-field/use-field.js +1 -1
  265. package/dist/components/form/Form/use-form.js +1 -1
  266. package/dist/components/form/Form/validation.js +1 -1
  267. package/dist/components/form/Label.js +1 -1
  268. package/dist/components/form/legacy-tooltip.js +1 -1
  269. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  270. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  271. package/dist/components/form/validation/use-validation-props.js +1 -1
  272. package/dist/components/form/wrapper.js +1 -1
  273. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  274. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  275. package/dist/components/layout/Board/Board.js +1 -1
  276. package/dist/components/layout/Board/BoardProvider.js +1 -1
  277. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  278. package/dist/components/layout/Board/Widget.js +1 -1
  279. package/dist/components/layout/Board/WidgetHost.js +1 -1
  280. package/dist/components/layout/Board/board-context.js +1 -1
  281. package/dist/components/layout/Board/board-store.js +1 -1
  282. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  283. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  284. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  285. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  286. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  287. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  288. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  289. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  290. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  291. package/dist/components/layout/Board/index.js +1 -1
  292. package/dist/components/layout/Board/responsive-utils.js +1 -1
  293. package/dist/components/layout/Board/use-board-layout.js +1 -1
  294. package/dist/components/layout/Board/use-board-registry.js +1 -1
  295. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  296. package/dist/components/layout/Board/use-board-selection.js +1 -1
  297. package/dist/components/layout/Flex.js +1 -1
  298. package/dist/components/layout/Flow.js +1 -1
  299. package/dist/components/layout/Grid.js +1 -1
  300. package/dist/components/layout/Panel.js +129 -48
  301. package/dist/components/layout/Panel.js.map +1 -1
  302. package/dist/components/layout/Prefix.js +1 -1
  303. package/dist/components/layout/ResizablePanel.js +1 -1
  304. package/dist/components/layout/Space.js +1 -1
  305. package/dist/components/layout/Suffix.js +1 -1
  306. package/dist/components/navigation/Pagination/Pagination.js +227 -347
  307. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  308. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  309. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  310. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  311. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  312. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  313. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  314. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  315. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  316. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  317. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  318. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  319. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  320. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  321. package/dist/components/navigation/Tabs/styled.js +1 -1
  322. package/dist/components/navigation/Tabs/types.js +1 -1
  323. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  324. package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
  325. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  326. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  327. package/dist/components/other/Calendar/Calendar.js +1 -1
  328. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  329. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  330. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  331. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  332. package/dist/components/other/Calendar/CalendarPanel.js +497 -515
  333. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  334. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  335. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  336. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  337. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  338. package/dist/components/other/Calendar/styled.js +1 -1
  339. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  340. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  341. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  342. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  343. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  344. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  345. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  346. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  347. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  348. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  349. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  350. package/dist/components/overlays/Dialog/context.js +1 -1
  351. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  352. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  353. package/dist/components/overlays/Modal/Modal.js +1 -1
  354. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  355. package/dist/components/overlays/Modal/Overlay.js +1 -1
  356. package/dist/components/overlays/Modal/Popover.js +1 -1
  357. package/dist/components/overlays/Modal/Tray.js +1 -1
  358. package/dist/components/overlays/Modal/Underlay.js +1 -1
  359. package/dist/components/overlays/Notifications/Notification.js +1 -1
  360. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  361. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  362. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  363. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  364. package/dist/components/overlays/Notifications/OverlayContainer.js +266 -161
  365. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  366. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  367. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  368. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  369. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  370. package/dist/components/overlays/Notifications/index.js +1 -1
  371. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  372. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  373. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  374. package/dist/components/overlays/Notifications/use-persistent-notifications.js +18 -9
  375. package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
  376. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  377. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  378. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  379. package/dist/components/overlays/Toast/index.js +1 -1
  380. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  381. package/dist/components/overlays/Toast/useToast.js +1 -1
  382. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  383. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  384. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  385. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  386. package/dist/components/overlays/Tooltip/context.js +1 -1
  387. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  388. package/dist/components/portal/Portal.js +1 -1
  389. package/dist/components/portal/PortalProvider.js +1 -1
  390. package/dist/components/portal/usePortal.js +1 -1
  391. package/dist/components/shared/DraggableCollection.js +1 -1
  392. package/dist/components/shared/InvalidIcon.js +1 -1
  393. package/dist/components/shared/ValidIcon.js +1 -1
  394. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  395. package/dist/components/status/Spin/Cube.js +1 -1
  396. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  397. package/dist/components/status/Spin/Spin.js +1 -1
  398. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  399. package/dist/data/item-themes.js +1 -1
  400. package/dist/data/themes.js +1 -1
  401. package/dist/eslint-plugin/defaults.generated.js +1 -1
  402. package/dist/eslint-plugin/index.js +1 -1
  403. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  404. package/dist/i18n/I18nProvider.js +1 -1
  405. package/dist/i18n/createFormatter.js +1 -1
  406. package/dist/i18n/index.js +1 -1
  407. package/dist/i18n/instance.js +1 -1
  408. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  409. package/dist/i18n/locales/en-US/uikit.js +1 -1
  410. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  411. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  412. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  413. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  414. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  415. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  416. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  417. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  418. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  419. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  420. package/dist/i18n/locales.js +1 -1
  421. package/dist/i18n/useFormatter.js +1 -1
  422. package/dist/i18n/useFormatter.js.map +1 -1
  423. package/dist/i18n/useI18n.js +1 -1
  424. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  425. package/dist/icons/AdjustmentsIcon.js +1 -1
  426. package/dist/icons/AiIcon.js +1 -1
  427. package/dist/icons/AreaChartIcon.js +1 -1
  428. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  429. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  430. package/dist/icons/BackwardIcon.js +1 -1
  431. package/dist/icons/BarChartIcon.js +1 -1
  432. package/dist/icons/BellFilledIcon.js +1 -1
  433. package/dist/icons/BellIcon.js +1 -1
  434. package/dist/icons/BooleanIcon.js +1 -1
  435. package/dist/icons/CalendarEditIcon.js +1 -1
  436. package/dist/icons/CalendarIcon.js +1 -1
  437. package/dist/icons/CaretDownIcon.js +1 -1
  438. package/dist/icons/CaretUpIcon.js +1 -1
  439. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  440. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  441. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  442. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  443. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  444. package/dist/icons/ChartBarLineIcon.js +1 -1
  445. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  446. package/dist/icons/ChartBarStackedIcon.js +1 -1
  447. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  448. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  449. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  450. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  451. package/dist/icons/ChartBubbleIcon.js +1 -1
  452. package/dist/icons/ChartDonut2Icon.js +1 -1
  453. package/dist/icons/ChartFunnelIcon.js +1 -1
  454. package/dist/icons/ChartHeatmapIcon.js +1 -1
  455. package/dist/icons/ChartKPIIcon.js +1 -1
  456. package/dist/icons/ChartPie2Icon.js +1 -1
  457. package/dist/icons/ChartScatterIcon.js +1 -1
  458. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  459. package/dist/icons/CheckCircleIcon.js +1 -1
  460. package/dist/icons/CheckIcon.js +1 -1
  461. package/dist/icons/CircleFilledIcon.js +1 -1
  462. package/dist/icons/ClearIcon.js +1 -1
  463. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  464. package/dist/icons/CloseCircleIcon.js +1 -1
  465. package/dist/icons/CloseIcon.js +1 -1
  466. package/dist/icons/CodeIcon.js +1 -1
  467. package/dist/icons/ColumnTotalIcon.js +1 -1
  468. package/dist/icons/CopyIcon.js +1 -1
  469. package/dist/icons/CountIcon.js +1 -1
  470. package/dist/icons/CubeIcon.js +1 -1
  471. package/dist/icons/CubePauseIcon.js +1 -1
  472. package/dist/icons/CubePlayIcon.js +1 -1
  473. package/dist/icons/CurrencyDollarIcon.js +1 -1
  474. package/dist/icons/DangerIcon.js +1 -1
  475. package/dist/icons/DashboardIcon.js +1 -1
  476. package/dist/icons/DatabaseIcon.js +1 -1
  477. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  478. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  479. package/dist/icons/DirectionIcon.js +1 -1
  480. package/dist/icons/DonutIcon.js +1 -1
  481. package/dist/icons/DownIcon.js +1 -1
  482. package/dist/icons/EditIcon.js +1 -1
  483. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  484. package/dist/icons/ExclamationCircleIcon.js +1 -1
  485. package/dist/icons/ExclamationIcon.js +1 -1
  486. package/dist/icons/EyeIcon.js +1 -1
  487. package/dist/icons/EyeInvisibleIcon.js +1 -1
  488. package/dist/icons/FilterIcon.js +1 -1
  489. package/dist/icons/FolderFilledIcon.js +1 -1
  490. package/dist/icons/FolderIcon.js +1 -1
  491. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  492. package/dist/icons/FolderOpenIcon.js +1 -1
  493. package/dist/icons/ForwardIcon.js +1 -1
  494. package/dist/icons/GripVerticalIcon.js +1 -1
  495. package/dist/icons/HierarchyIcon.js +1 -1
  496. package/dist/icons/HierarchyOpenIcon.js +1 -1
  497. package/dist/icons/Icon.js +1 -1
  498. package/dist/icons/InfoCircleIcon.js +1 -1
  499. package/dist/icons/InfoIcon.js +1 -1
  500. package/dist/icons/KeyIcon.js +1 -1
  501. package/dist/icons/LeftIcon.js +1 -1
  502. package/dist/icons/LineChartIcon.js +1 -1
  503. package/dist/icons/LoadingIcon.js +1 -1
  504. package/dist/icons/LockFilledIcon.js +1 -1
  505. package/dist/icons/LockIcon.js +1 -1
  506. package/dist/icons/MoreIcon.js +1 -1
  507. package/dist/icons/NotAllowedIcon.js +1 -1
  508. package/dist/icons/Number123Icon.js +1 -1
  509. package/dist/icons/NumberIcon.js +1 -1
  510. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  511. package/dist/icons/PauseCircleIcon.js +1 -1
  512. package/dist/icons/PauseIcon.js +1 -1
  513. package/dist/icons/PercentageIcon.js +1 -1
  514. package/dist/icons/PieChartIcon.js +1 -1
  515. package/dist/icons/PipetteIcon.js +1 -1
  516. package/dist/icons/PlayCircleIcon.js +1 -1
  517. package/dist/icons/PlayIcon.js +1 -1
  518. package/dist/icons/PlusIcon.js +1 -1
  519. package/dist/icons/ProgressBarIcon.js +1 -1
  520. package/dist/icons/ReloadIcon.js +1 -1
  521. package/dist/icons/ReportIcon.js +1 -1
  522. package/dist/icons/ReturnIcon.js +1 -1
  523. package/dist/icons/RightIcon.js +1 -1
  524. package/dist/icons/RowTotalsIcon.js +1 -1
  525. package/dist/icons/SchemeIcon.js +1 -1
  526. package/dist/icons/SearchIcon.js +1 -1
  527. package/dist/icons/SemanticQueryIcon.js +1 -1
  528. package/dist/icons/SettingsIcon.js +1 -1
  529. package/dist/icons/ShieldFilledIcon.js +1 -1
  530. package/dist/icons/ShieldIcon.js +1 -1
  531. package/dist/icons/SlashIcon.js +1 -1
  532. package/dist/icons/SparklesIcon.js +1 -1
  533. package/dist/icons/SqlIcon.js +1 -1
  534. package/dist/icons/StatsIcon.js +1 -1
  535. package/dist/icons/StopIcon.js +1 -1
  536. package/dist/icons/StringIcon.js +1 -1
  537. package/dist/icons/SubtotalsIcon.js +1 -1
  538. package/dist/icons/SwitchIcon.js +1 -1
  539. package/dist/icons/TableIcon.js +1 -1
  540. package/dist/icons/ThumbsDownIcon.js +1 -1
  541. package/dist/icons/ThumbsUpIcon.js +1 -1
  542. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  543. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  544. package/dist/icons/ThunderboltIcon.js +1 -1
  545. package/dist/icons/TimeIcon.js +1 -1
  546. package/dist/icons/TrashIcon.js +1 -1
  547. package/dist/icons/UnlockIcon.js +1 -1
  548. package/dist/icons/UpIcon.js +1 -1
  549. package/dist/icons/UserGroupIcon.js +1 -1
  550. package/dist/icons/UserIcon.js +1 -1
  551. package/dist/icons/UserLockIcon.js +1 -1
  552. package/dist/icons/ViewIcon.js +1 -1
  553. package/dist/icons/WarningFilledIcon.js +1 -1
  554. package/dist/icons/WarningIcon.js +1 -1
  555. package/dist/icons/wrap-icon.js +1 -1
  556. package/dist/index.js +1 -1
  557. package/dist/probe/canonicalize.js +1 -1
  558. package/dist/probe/css.js +1 -1
  559. package/dist/probe/index.js +1 -1
  560. package/dist/provider.js +1 -1
  561. package/dist/providers/TrackingProvider.js +1 -1
  562. package/dist/providers/navigationAdapter.default.js +1 -1
  563. package/dist/tokens/all-tokens.js +1 -1
  564. package/dist/tokens/base.js +1 -1
  565. package/dist/tokens/color-seed.js +1 -1
  566. package/dist/tokens/color-theme.js +1 -1
  567. package/dist/tokens/colors.js +1 -1
  568. package/dist/tokens/layout.js +1 -1
  569. package/dist/tokens/lazy-styles.js +1 -1
  570. package/dist/tokens/legacy-color.js +1 -1
  571. package/dist/tokens/palette-config.js +1 -1
  572. package/dist/tokens/palette.js +1 -1
  573. package/dist/tokens/resolve.js +1 -1
  574. package/dist/tokens/shadows.js +1 -1
  575. package/dist/tokens/sizes.js +1 -1
  576. package/dist/tokens/spacing.js +1 -1
  577. package/dist/tokens/typography.js +1 -1
  578. package/dist/utils/ResizeSensor.js +1 -1
  579. package/dist/utils/colors.js +1 -1
  580. package/dist/utils/dotize.js +1 -1
  581. package/dist/utils/is-dev-env.js +1 -1
  582. package/dist/utils/modules.js +1 -1
  583. package/dist/utils/promise.js +1 -1
  584. package/dist/utils/raf.js +1 -1
  585. package/dist/utils/random.js +1 -1
  586. package/dist/utils/range.js +1 -1
  587. package/dist/utils/react/RenderCache.js +1 -1
  588. package/dist/utils/react/Slots.js +1 -1
  589. package/dist/utils/react/chain.js +1 -1
  590. package/dist/utils/react/disabledProps.js +1 -1
  591. package/dist/utils/react/escapePropagation.js +1 -1
  592. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  593. package/dist/utils/react/index.js +1 -1
  594. package/dist/utils/react/interactions.js +1 -1
  595. package/dist/utils/react/isTextOnly.js +1 -1
  596. package/dist/utils/react/mapProps.js +1 -1
  597. package/dist/utils/react/mergeProps.js +1 -1
  598. package/dist/utils/react/nullableValue.js +1 -1
  599. package/dist/utils/react/programmaticFocus.js +1 -1
  600. package/dist/utils/react/resolveIcon.js +1 -1
  601. package/dist/utils/react/sharedStore.js +1 -1
  602. package/dist/utils/react/useBufferedValue.js +1 -1
  603. package/dist/utils/react/useCombinedRefs.js +1 -1
  604. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  605. package/dist/utils/react/useEventBus.js +1 -1
  606. package/dist/utils/react/useId.js +1 -1
  607. package/dist/utils/react/useIsDarwin.js +1 -1
  608. package/dist/utils/react/useKeySymbols.js +1 -1
  609. package/dist/utils/react/useKeySymbols.js.map +1 -1
  610. package/dist/utils/react/useLayoutEffect.js +1 -1
  611. package/dist/utils/react/useLocalStorage.js +1 -1
  612. package/dist/utils/react/useMergeStyles.js +1 -1
  613. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  614. package/dist/utils/react/usePopoverSync.js +1 -1
  615. package/dist/utils/react/usePopoverSync.js.map +1 -1
  616. package/dist/utils/react/useQaProps.js +1 -1
  617. package/dist/utils/react/useScheme.js +1 -1
  618. package/dist/utils/react/useViewportSize.js +1 -1
  619. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  620. package/dist/utils/selection.js +1 -1
  621. package/dist/utils/styles.js +1 -1
  622. package/dist/utils/tree.js +1 -1
  623. package/dist/utils/warnings.js +1 -1
  624. package/dist/version.js +2 -2
  625. package/docs/CreateComponent.md +3 -1
  626. package/docs/components/fields/TagInput.md +8 -8
  627. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { mergeIds } from "./useId.js";
4
4
  import { mergeStyles } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/react/nullableValue.ts
3
3
  function castNullableStringValue(props) {
4
4
  return castNullableField(props, ["value", "defaultValue"], "string", (v) => String(v));
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/react/programmaticFocus.ts
3
3
  /**
4
4
  * Telling focus the user moved from focus a component moved for them.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/react/resolveIcon.ts
3
3
  /**
4
4
  * Resolves a dynamic icon prop to its content and slot state.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { isDevEnv } from "../is-dev-env.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useCallback, useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { createSharedStore } from "./sharedStore.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useEffect } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useIsDarwin } from "./useIsDarwin.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"useKeySymbols.js","names":["useMemo","useIsDarwin","COMMON","Record","esc","escape","enter","return","space","backspace","delete","up","arrowup","down","arrowdown","left","arrowleft","right","arrowright","MAC","mod","meta","cmd","command","ctrl","control","alt","option","shift","PC","win","windows","useKeySymbols","combo","$","_c","isDarwin","modifiers","t0","t1","alternative","split","map","part","key","trim","toUpperCase","_temp","filter","Boolean","raw","toLowerCase"],"sources":["../../../src/utils/react/useKeySymbols.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useIsDarwin } from './useIsDarwin';\n\n/* symbols that are identical on every OS */\nconst COMMON: Record<string, string> = {\n esc: 'Esc',\n escape: 'Esc',\n enter: '⏎',\n return: '⏎',\n space: '␣',\n backspace: '⌫',\n delete: '⌦',\n up: '↑',\n arrowup: '↑',\n down: '↓',\n arrowdown: '↓',\n left: '←',\n arrowleft: '←',\n right: '→',\n arrowright: '→',\n};\n\n/* modifiers for macOS / iOS */\nconst MAC: Record<string, string> = {\n mod: '⌘',\n meta: '⌘',\n cmd: '⌘',\n command: '⌘',\n ctrl: '⌃',\n control: '⌃',\n alt: '⌥',\n option: '⌥',\n shift: '⇧',\n};\n\n/* modifiers for Windows / Linux */\nconst PC: Record<string, string> = {\n mod: 'Ctrl',\n ctrl: 'Ctrl',\n control: 'Ctrl',\n meta: 'Win',\n win: 'Win',\n windows: 'Win',\n cmd: 'Win',\n command: 'Win',\n alt: '⎇',\n option: '⎇',\n shift: '⇧',\n};\n\n/**\n * useKeySymbols\n * -------------\n * Turns an author string such as\n * \"mod+k, ctrl+k\"\n * into\n * [[\"⌘\", \"K\"], [\"Ctrl\", \"K\"]]\n */\nexport function useKeySymbols(combo: string): string[][] {\n const isDarwin = useIsDarwin(); // ⌘ by default during SSR\n const modifiers = isDarwin ? MAC : PC;\n\n return useMemo(() => {\n /** split on commas, trim each alternative */\n return combo\n .split(',')\n .map((raw) => raw.trim().toLowerCase())\n .filter(Boolean) // drop empty fragments\n .map((alternative) =>\n alternative.split('+').map((part) => {\n const key = part.trim();\n return (\n modifiers[key] ?? // platform-specific modifier\n COMMON[key] ?? // shared glyphs\n part.toUpperCase() // plain key\n );\n }),\n );\n }, [combo, modifiers]);\n}\n"],"mappings":";;;;;AAKA,MAAME,SAAiC;CACrCE,KAAK;CACLC,QAAQ;CACRC,OAAO;CACPC,QAAQ;CACRC,OAAO;CACPC,WAAW;CACXC,QAAQ;CACRC,IAAI;CACJC,SAAS;CACTC,MAAM;CACNC,WAAW;CACXC,MAAM;CACNC,WAAW;CACXC,OAAO;CACPC,YAAY;CACb;AAGD,MAAMC,MAA8B;CAClCC,KAAK;CACLC,MAAM;CACNC,KAAK;CACLC,SAAS;CACTC,MAAM;CACNC,SAAS;CACTC,KAAK;CACLC,QAAQ;CACRC,OAAO;CACR;AAGD,MAAMC,KAA6B;CACjCT,KAAK;CACLI,MAAM;CACNC,SAAS;CACTJ,MAAM;CACNS,KAAK;CACLC,SAAS;CACTT,KAAK;CACLC,SAAS;CACTG,KAAK;CACLC,QAAQ;CACRC,OAAO;CACR;;;;;;;;;AAUD,SAAOI,cAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAEL,MAAAE,YADiBpC,aAAa,GACZkB,MAAAU;CAAoB,IAAAS;AAAA,KAAAJ,EAAA,OAAAD,SAAAC,EAAA,OAAAG,WAAA;EAAA,IAAAE;AAAA,MAAAL,EAAA,OAAAG,WAAA;AAQ7BE,SAAAC,gBACHA,YAAWC,MAAO,IAAI,CAAAC,KAAKC,SAAA;IACzB,MAAAC,MAAYD,KAAIE,MAAO;AAAC,WAEtBR,UAAUO,QACV1C,OAAO0C,QACPD,KAAIG,aAAc;KAEpB;AAAAZ,KAAA,KAAAG;AAAAH,KAAA,KAAAK;QAAAA,MAAAL,EAAA;AAZCI,OAAAL,MAAKQ,MACH,IAAI,CAAAC,IACNK,MAAkC,CAAAC,OAC/BC,QAAQ,CAAAP,IACXH,GASJ;AAAAL,IAAA,KAAAD;AAAAC,IAAA,KAAAG;AAAAH,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;AAAA,QAbHI;;AANG,SAAAS,MAAAG,KAAA;AAAA,QAQaA,IAAGL,MAAO,CAAAM,aAAc"}
1
+ {"version":3,"file":"useKeySymbols.js","names":["useIsDarwin","COMMON","Record","esc","escape","enter","return","space","backspace","delete","up","arrowup","down","arrowdown","left","arrowleft","right","arrowright","MAC","mod","meta","cmd","command","ctrl","control","alt","option","shift","PC","win","windows","useKeySymbols","combo","$","_c","isDarwin","modifiers","t0","t1","alternative","split","map","part","key","trim","toUpperCase","_temp","filter","Boolean","raw","toLowerCase"],"sources":["../../../src/utils/react/useKeySymbols.ts"],"sourcesContent":["import { useIsDarwin } from './useIsDarwin';\n\n/* symbols that are identical on every OS */\nconst COMMON: Record<string, string> = {\n esc: 'Esc',\n escape: 'Esc',\n enter: '⏎',\n return: '⏎',\n space: '␣',\n backspace: '⌫',\n delete: '⌦',\n up: '↑',\n arrowup: '↑',\n down: '↓',\n arrowdown: '↓',\n left: '←',\n arrowleft: '←',\n right: '→',\n arrowright: '→',\n};\n\n/* modifiers for macOS / iOS */\nconst MAC: Record<string, string> = {\n mod: '⌘',\n meta: '⌘',\n cmd: '⌘',\n command: '⌘',\n ctrl: '⌃',\n control: '⌃',\n alt: '⌥',\n option: '⌥',\n shift: '⇧',\n};\n\n/* modifiers for Windows / Linux */\nconst PC: Record<string, string> = {\n mod: 'Ctrl',\n ctrl: 'Ctrl',\n control: 'Ctrl',\n meta: 'Win',\n win: 'Win',\n windows: 'Win',\n cmd: 'Win',\n command: 'Win',\n alt: '⎇',\n option: '⎇',\n shift: '⇧',\n};\n\n/**\n * useKeySymbols\n * -------------\n * Turns an author string such as\n * \"mod+k, ctrl+k\"\n * into\n * [[\"⌘\", \"K\"], [\"Ctrl\", \"K\"]]\n */\nexport function useKeySymbols(combo: string): string[][] {\n const isDarwin = useIsDarwin(); // ⌘ by default during SSR\n const modifiers = isDarwin ? MAC : PC;\n\n /** split on commas, trim each alternative */\n return combo\n .split(',')\n .map((raw) => raw.trim().toLowerCase())\n .filter(Boolean) // drop empty fragments\n .map((alternative) =>\n alternative.split('+').map((part) => {\n const key = part.trim();\n return (\n modifiers[key] ?? // platform-specific modifier\n COMMON[key] ?? // shared glyphs\n part.toUpperCase() // plain key\n );\n }),\n );\n}\n"],"mappings":";;;;;AAGA,MAAMC,SAAiC;CACrCE,KAAK;CACLC,QAAQ;CACRC,OAAO;CACPC,QAAQ;CACRC,OAAO;CACPC,WAAW;CACXC,QAAQ;CACRC,IAAI;CACJC,SAAS;CACTC,MAAM;CACNC,WAAW;CACXC,MAAM;CACNC,WAAW;CACXC,OAAO;CACPC,YAAY;CACb;AAGD,MAAMC,MAA8B;CAClCC,KAAK;CACLC,MAAM;CACNC,KAAK;CACLC,SAAS;CACTC,MAAM;CACNC,SAAS;CACTC,KAAK;CACLC,QAAQ;CACRC,OAAO;CACR;AAGD,MAAMC,KAA6B;CACjCT,KAAK;CACLI,MAAM;CACNC,SAAS;CACTJ,MAAM;CACNS,KAAK;CACLC,SAAS;CACTT,KAAK;CACLC,SAAS;CACTG,KAAK;CACLC,QAAQ;CACRC,OAAO;CACR;;;;;;;;;AAUD,SAAOI,cAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAEL,MAAAE,YADiBpC,aAAa,GACZkB,MAAAU;CAAoB,IAAAS;AAAA,KAAAJ,EAAA,OAAAD,SAAAC,EAAA,OAAAG,WAAA;EAAA,IAAAE;AAAA,MAAAL,EAAA,OAAAG,WAAA;AAO/BE,SAAAC,gBACHA,YAAWC,MAAO,IAAI,CAAAC,KAAKC,SAAA;IACzB,MAAAC,MAAYD,KAAIE,MAAO;AAAC,WAEtBR,UAAUO,QACV1C,OAAO0C,QACPD,KAAIG,aAAc;KAEpB;AAAAZ,KAAA,KAAAG;AAAAH,KAAA,KAAAK;QAAAA,MAAAL,EAAA;AAZCI,OAAAL,MAAKQ,MACH,IAAI,CAAAC,IACNK,MAAkC,CAAAC,OAC/BC,QAAQ,CAAAP,IACXH,GASJ;AAAAL,IAAA,KAAAD;AAAAC,IAAA,KAAAG;AAAAH,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;AAAA,QAbII;;AALF,SAAAS,MAAAG,KAAA;AAAA,QAOWA,IAAGL,MAAO,CAAAM,aAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import * as React$1 from "react";
3
3
 
4
4
  //#region src/utils/react/useLayoutEffect.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useSyncExternalStore } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { mergeStyles } from "@tenphi/tasty";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { EventBusContext, useEventBus } from "./useEventBus.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { useContext, useEffect, useRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"usePopoverSync.js","names":["RefObject","useCallback","useContext","useEffect","useRef","EventBusContext","useEventBus","UsePopoverSyncOptions","menuId","isOpen","onClose","enabled","triggerRef","HTMLElement","containerRef","dismissOnInnerButtonPress","closeOnPeerOpen","PopoverOpenPayload","triggerEl","Element","PopoverDismissAncestorPayload","from","PopoverRegistryEntry","getContainerEl","getTriggerEl","openPopovers","Map","findOwningPopover","target","entry","contains","isLogicalDescendantOf","ancestorMenuId","ancestorContainer","cur","visited","Set","owner","id","has","add","usePopoverSync","t0","$","_c","t1","t2","t3","undefined","emit","on","isOpenRef","t4","t5","current","onCloseRef","t6","t7","containerRefRef","t8","t9","triggerRefRef","t10","t11","t12","t13","offOpen","data","container","offDismiss","data_0","container_0","wasOpenRef","t14","t15","delete","set","t16","t17","useDismissParentPopover","bus"],"sources":["../../../src/utils/react/usePopoverSync.ts"],"sourcesContent":["import { RefObject, useCallback, useContext, useEffect, useRef } from 'react';\n\nimport { EventBusContext, useEventBus } from './useEventBus';\n\nexport interface UsePopoverSyncOptions {\n /** Stable identifier for this popover instance (typically a generateRandomId() memo). */\n menuId: string;\n /** Current open state of this popover. */\n isOpen: boolean;\n /** Called when another popover opens while this one is open. */\n onClose: () => void;\n /**\n * When `false`, this popover does not participate in the sync (no listening,\n * no emitting). Useful for \"dummy\" triggers that proxy a real one (see\n * `MenuTrigger`'s `isDummy`). Defaults to `true`.\n */\n enabled?: boolean;\n /**\n * Ref to the popover's trigger element. When provided, the element is\n * included in the `popover:open` emit payload so peers can detect whether\n * the new opener is nested inside their own overlay (and skip closing in\n * that case). Optional — omitting it preserves the legacy \"always close on\n * peer open\" behaviour.\n */\n triggerRef?: RefObject<HTMLElement | null>;\n /**\n * Ref to the overlay/container element that hosts this popover's content.\n * When provided, the listener performs a DOM `contains()` check on incoming\n * peer triggers: peers whose trigger lives inside this container are\n * considered nested children and do NOT close us.\n */\n containerRef?: RefObject<HTMLElement | null>;\n /**\n * Whether this overlay closes when a Button/ItemButton inside its container\n * is pressed. Defaults to `true` (popover semantics — popovers are transient\n * surfaces and any action inside them should dismiss them). Set to `false`\n * for modals/trays/fullscreen dialogs — buttons inside a Dialog should not\n * auto-close it. Requires `containerRef` to be set; without it the listener\n * has no way to determine whether the dispatching button is \"inside\" this\n * overlay and is effectively a no-op.\n */\n dismissOnInnerButtonPress?: boolean;\n /**\n * Whether this overlay closes when a peer popover opens. Defaults to `true`\n * (popover semantics — only one popover open at a time). Set to `false` for\n * modals/trays/fullscreen dialogs so a peer popover opening cannot bypass\n * the dialog's own `isDismissable` / `onClose` handling and yank it shut.\n *\n * The host still EMITS `popover:open` regardless of this flag, so opening a\n * modal/tray correctly dismisses any peer popover that was open before.\n */\n closeOnPeerOpen?: boolean;\n}\n\ninterface PopoverOpenPayload {\n menuId: string;\n triggerEl: Element | null;\n}\n\ninterface PopoverDismissAncestorPayload {\n /** The DOM node of the button that requested the dismiss. */\n from: Element | null;\n}\n\ninterface PopoverRegistryEntry {\n getContainerEl: () => Element | null;\n getTriggerEl: () => Element | null;\n}\n\n/**\n * Module-level registry of currently open popovers. Lets us resolve the\n * LOGICAL parent of an arbitrary element across portal boundaries.\n *\n * Popover content is portaled to a shared root (`document.body` by default —\n * see `Overlay.tsx`), so a grandchild popover's trigger lives inside a\n * sibling portal rather than physically inside its grandparent's container.\n * A naive `container.contains(triggerEl)` check therefore misses the\n * relationship and closes the grandparent — the bug that surfaces with 3+\n * levels of `SubMenuTrigger` nesting.\n *\n * The registry stores closures over the host's refs so reads always see the\n * latest `.current` value without forcing a re-register per render.\n */\nconst openPopovers = new Map<string, PopoverRegistryEntry>();\n\n/**\n * Find the open popover whose container directly contains `target`. Returns\n * `null` for elements that live outside every registered popover (e.g. a\n * top-level trigger button rendered next to its overlay root).\n */\nfunction findOwningPopover(\n target: Element | null,\n): [string, PopoverRegistryEntry] | null {\n if (!target) return null;\n for (const entry of openPopovers) {\n if (entry[1].getContainerEl()?.contains(target)) {\n return entry;\n }\n }\n return null;\n}\n\n/**\n * Returns `true` when `target` is nested inside the overlay identified by\n * `ancestorMenuId` — either as a direct DOM descendant of `ancestorContainer`\n * or as a descendant of a chain of popovers whose triggers eventually land\n * inside it. Used by `popover:open` peers to avoid closing themselves when a\n * grand-child overlay opens through a portal.\n */\nfunction isLogicalDescendantOf(\n target: Element | null,\n ancestorMenuId: string,\n ancestorContainer: Element | null,\n): boolean {\n if (ancestorContainer && target && ancestorContainer.contains(target)) {\n return true;\n }\n let cur: Element | null = target;\n const visited = new Set<string>();\n while (cur) {\n const owner = findOwningPopover(cur);\n if (!owner) return false;\n const [id, entry] = owner;\n if (visited.has(id)) return false;\n visited.add(id);\n if (id === ancestorMenuId) return true;\n cur = entry.getTriggerEl();\n }\n return false;\n}\n\n/**\n * Coordinates the \"only one popover open at a time\" invariant via the EventBus.\n *\n * - When `isOpen` flips `false -> true`, emits `popover:open` once.\n * - While open, listens for peers' `popover:open` events and calls `onClose`.\n *\n * Implementation notes (ALL of these matter — losing any one re-introduces a\n * race that surfaces only under rapid trigger switching, which is hard to\n * reproduce in tests):\n *\n * 1. `isOpen` and `onClose` are read through refs inside the listener, so the\n * subscription effect's dep array does NOT include `isOpen`/`onClose`. This\n * keeps the listener identity stable across open/close transitions and\n * avoids the unsubscribe-emit-resubscribe window where an emit can be\n * delivered to a stale listener (or no listener).\n * 2. The emit fires only on the `false -> true` transition, gated by\n * `wasOpenRef`. A re-render where `isOpen` is still `true` must NOT\n * re-emit, otherwise it could re-trigger listeners on peers that just\n * opened in the same render flush.\n * 3. The `enabled` flag short-circuits both effects symmetrically. When it\n * flips off, `wasOpenRef` is reset so re-enabling later still emits if\n * `isOpen` is true at that moment.\n */\nexport function usePopoverSync({\n menuId,\n isOpen,\n onClose,\n enabled = true,\n triggerRef,\n containerRef,\n dismissOnInnerButtonPress = true,\n closeOnPeerOpen = true,\n}: UsePopoverSyncOptions): void {\n const { emit, on } = useEventBus();\n\n const isOpenRef = useRef(isOpen);\n useEffect(() => {\n isOpenRef.current = isOpen;\n }, [isOpen]);\n\n const onCloseRef = useRef(onClose);\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n // Track the latest containerRef via a stable ref-of-refs so the listener\n // never resubscribes when callers pass freshly-created ref wrappers across\n // renders. Same pattern as `onCloseRef` above — without this the listener's\n // effect would churn for any caller that doesn't memoize its refs.\n const containerRefRef = useRef(containerRef);\n useEffect(() => {\n containerRefRef.current = containerRef;\n }, [containerRef]);\n\n const triggerRefRef = useRef(triggerRef);\n useEffect(() => {\n triggerRefRef.current = triggerRef;\n }, [triggerRef]);\n\n useEffect(() => {\n if (!enabled) return;\n\n // `popover:open` listener — gated on `closeOnPeerOpen`. Modals/trays opt\n // out so a peer popover opening cannot bypass the dialog's\n // `isDismissable` / `onClose` handling and call `state.close()` directly.\n // Note: the EMIT side (lower in this hook) still fires regardless, so\n // opening a modal still correctly dismisses peer popovers.\n const offOpen = closeOnPeerOpen\n ? on('popover:open', (data: PopoverOpenPayload) => {\n if (data.menuId === menuId || !isOpenRef.current) return;\n const container = containerRefRef.current?.current ?? null;\n // Nested-popover guard: stay open when the opening peer's trigger is\n // a LOGICAL descendant of our overlay. Direct DOM containment only\n // covers the first level — for grand-child popovers the trigger lives\n // in a sibling portal, so we walk the registered popover chain back\n // up via each parent's trigger element. Without this, opening a\n // third-level `SubMenuTrigger` would close every ancestor menu.\n if (isLogicalDescendantOf(data.triggerEl, menuId, container)) return;\n onCloseRef.current();\n })\n : null;\n\n // `popover:dismiss-ancestor` is emitted by `Button` / `ItemButton` (and any\n // consumer using `useDismissParentPopover`) after their `onPress` runs.\n // Only popover-type overlays subscribe; modals/trays opt out via\n // `dismissOnInnerButtonPress: false` so a Button inside a Dialog content\n // does NOT auto-close the Dialog.\n const offDismiss = dismissOnInnerButtonPress\n ? on(\n 'popover:dismiss-ancestor',\n (data: PopoverDismissAncestorPayload) => {\n if (!isOpenRef.current) return;\n const container = containerRefRef.current?.current;\n const from = data?.from;\n // Require both a container and an originating element so we can do\n // the contains-check. Hosts without `containerRef` (e.g.\n // `use-anchored-menu`, `use-context-menu`) are silently no-op.\n if (!container || !from) return;\n if (container.contains(from)) onCloseRef.current();\n },\n )\n : null;\n\n return () => {\n offOpen?.();\n offDismiss?.();\n };\n }, [on, menuId, enabled, dismissOnInnerButtonPress, closeOnPeerOpen]);\n\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (!enabled) {\n if (wasOpenRef.current) {\n openPopovers.delete(menuId);\n }\n wasOpenRef.current = false;\n return;\n }\n if (isOpen && !wasOpenRef.current) {\n wasOpenRef.current = true;\n // Register BEFORE emitting so peers' listeners (deferred via the\n // bus's `setTimeout(0)`) can already see us in the registry when\n // they walk the logical chain.\n openPopovers.set(menuId, {\n getContainerEl: () => containerRefRef.current?.current ?? null,\n getTriggerEl: () => triggerRefRef.current?.current ?? null,\n });\n emit<PopoverOpenPayload>('popover:open', {\n menuId,\n triggerEl: triggerRefRef.current?.current ?? null,\n });\n } else if (!isOpen && wasOpenRef.current) {\n wasOpenRef.current = false;\n openPopovers.delete(menuId);\n }\n }, [isOpen, emit, menuId, enabled]);\n\n // Final cleanup on unmount: covers the case where a host unmounts while\n // still flagged open (e.g. a parent unmount tears down a child popover\n // before its close transition runs).\n useEffect(() => {\n return () => {\n openPopovers.delete(menuId);\n };\n }, [menuId]);\n}\n\n/**\n * Hook that returns a dispatcher to close the popover that contains a given\n * DOM element. Used by `Button` / `ItemButton` to implement the default\n * \"press inside a popover closes the popover\" behaviour. Custom (non-Cube)\n * interactive controls can call this directly:\n *\n * ```tsx\n * const dismiss = useDismissParentPopover();\n * <MyCustomPressable onPress={(e) => { doThing(); dismiss(e.currentTarget); }} />\n * ```\n *\n * The actual dismiss is dispatched through the EventBus, which defers via\n * `setTimeout(0)` — so the user's synchronous handler (and any React state\n * updates it triggers) flushes BEFORE the popover closes. This is critical\n * for the \"open a hoisted modal from a popover footer\" case: the modal\n * mounts first, then the popover closes.\n *\n * Only popover-type containers (those that pass `dismissOnInnerButtonPress`\n * as `true`, the default) react to the event. Modal/tray/fullscreen Dialog\n * containers explicitly opt out so a Button inside their content does not\n * auto-close them.\n *\n * When called outside an `EventBusProvider` (e.g. in unit tests that render\n * a Button without wrapping in `<Root>`), the returned function is a no-op —\n * the dismiss flow gracefully degrades rather than throwing.\n */\nexport function useDismissParentPopover() {\n // Read context defensively: `Button` / `ItemButton` use this hook\n // unconditionally, but tests (and standalone usages outside `<Root>`) may\n // mount them without an `EventBusProvider`. A throw would crash every\n // Button render in those cases.\n const bus = useContext(EventBusContext);\n const emit = bus?.emit;\n return useCallback(\n (from: Element | null) => {\n if (!from || !emit) return;\n emit<PopoverDismissAncestorPayload>('popover:dismiss-ancestor', { from });\n },\n [emit],\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmFA,MAAMyB,+BAAe,IAAIC,KAAmC;;;;;;AAO5D,SAASC,kBACPC,QACuC;AACvC,KAAI,CAACA,OAAQ,QAAO;AACpB,MAAK,MAAMC,SAASJ,aAClB,KAAII,MAAM,GAAGN,gBAAgB,EAAEO,SAASF,OAAO,CAC7C,QAAOC;AAGX,QAAO;;;;;;;;;AAUT,SAASE,sBACPH,QACAI,gBACAC,mBACS;AACT,KAAIA,qBAAqBL,UAAUK,kBAAkBH,SAASF,OAAO,CACnE,QAAO;CAET,IAAIM,MAAsBN;CAC1B,MAAMO,0BAAU,IAAIC,KAAa;AACjC,QAAOF,KAAK;EACV,MAAMG,QAAQV,kBAAkBO,IAAI;AACpC,MAAI,CAACG,MAAO,QAAO;EACnB,MAAM,CAACC,IAAIT,SAASQ;AACpB,MAAIF,QAAQI,IAAID,GAAG,CAAE,QAAO;AAC5BH,UAAQK,IAAIF,GAAG;AACf,MAAIA,OAAON,eAAgB,QAAO;AAClCE,QAAML,MAAML,cAAc;;AAE5B,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;AA0BT,SAAOiB,eAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAwB,MAAA,EAAApC,QAAAC,QAAAC,SAAAC,SAAAkC,IAAAjC,YAAAE,cAAAC,2BAAA+B,IAAA9B,iBAAA+B,OAAAL;CAI7B,MAAA/B,UAAAkC,OAAAG,SAAA,OAAAH;CAGA,MAAA9B,4BAAA+B,OAAAE,SAAA,OAAAF;CACA,MAAA9B,kBAAA+B,OAAAC,SAAA,OAAAD;CAEA,MAAA,EAAAE,MAAAC,OAAqB5C,aAAa;CAElC,MAAA6C,YAAkB/C,OAAOK,OAAO;CAAC,IAAA2C;CAAA,IAAAC;AAAA,KAAAV,EAAA,OAAAlC,QAAA;AACvB2C,aAAA;AACRD,aAASG,UAAW7C;;AACnB4C,OAAA,CAAC5C,OAAO;AAAAkC,IAAA,KAAAlC;AAAAkC,IAAA,KAAAS;AAAAT,IAAA,KAAAU;QAAA;AAAAD,OAAAT,EAAA;AAAAU,OAAAV,EAAA;;AAFXxC,WAAUiD,IAEPC,GAAS;CAEZ,MAAAE,aAAmBnD,OAAOM,QAAQ;CAAC,IAAA8C;CAAA,IAAAC;AAAA,KAAAd,EAAA,OAAAjC,SAAA;AACzB8C,aAAA;AACRD,cAAUD,UAAW5C;;AACpB+C,OAAA,CAAC/C,QAAQ;AAAAiC,IAAA,KAAAjC;AAAAiC,IAAA,KAAAa;AAAAb,IAAA,KAAAc;QAAA;AAAAD,OAAAb,EAAA;AAAAc,OAAAd,EAAA;;AAFZxC,WAAUqD,IAEPC,GAAU;CAMb,MAAAC,kBAAwBtD,OAAOU,aAAa;CAAC,IAAA6C;CAAA,IAAAC;AAAA,KAAAjB,EAAA,OAAA7B,cAAA;AACnC6C,aAAA;AACRD,mBAAeJ,UAAWxC;;AACzB8C,OAAA,CAAC9C,aAAa;AAAA6B,IAAA,KAAA7B;AAAA6B,IAAA,KAAAgB;AAAAhB,IAAA,KAAAiB;QAAA;AAAAD,OAAAhB,EAAA;AAAAiB,OAAAjB,EAAA;;AAFjBxC,WAAUwD,IAEPC,GAAe;CAElB,MAAAC,gBAAsBzD,OAAOQ,WAAW;CAAC,IAAAkD;CAAA,IAAAC;AAAA,KAAApB,EAAA,OAAA/B,YAAA;AAC/BkD,cAAA;AACRD,iBAAaP,UAAW1C;;AACvBmD,QAAA,CAACnD,WAAW;AAAA+B,IAAA,KAAA/B;AAAA+B,IAAA,MAAAmB;AAAAnB,IAAA,MAAAoB;QAAA;AAAAD,QAAAnB,EAAA;AAAAoB,QAAApB,EAAA;;AAFfxC,WAAU2D,KAEPC,IAAa;CAAA,IAAAC;CAAA,IAAAC;AAAA,KAAAtB,EAAA,QAAA3B,mBAAA2B,EAAA,QAAA5B,6BAAA4B,EAAA,QAAAhC,WAAAgC,EAAA,QAAAnC,UAAAmC,EAAA,QAAAO,IAAA;AAENc,cAAA;AACR,OAAI,CAACrD,QAAO;GAOZ,MAAAuD,UAAgBlD,kBACZkC,GAAG,iBAAgBiB,SAAA;AACjB,QAAIA,KAAI3D,WAAYA,UAAhB,CAA2B2C,UAASG,QAAQ;IAChD,MAAAc,YAAkBV,gBAAeJ,SAAiBA,WAAhC;AAOlB,QAAIvB,sBAAsBoC,KAAIjD,WAAYV,QAAQ4D,UAAU,CAAA;AAC5Db,eAAUD,SAAU;KAElB,GAbQ;GAoBhB,MAAAe,aAAmBtD,4BACfmC,GACE,6BACAoB,WAAA;AACE,QAAI,CAACnB,UAASG,QAAQ;IACtB,MAAAiB,cAAkBb,gBAAeJ,SAAiBA;IAClD,MAAAjC,OAAa8C,QAAI9C;AAIjB,QAAI,CAAC+C,eAAD,CAAe/C,KAAI;AACvB,QAAI+C,YAAStC,SAAUT,KAAK,CAAEkC,YAAUD,SAAU;KAGlD,GAdW;AAcV,gBAEF;AACLY,eAAW;AACXG,kBAAc;;;AAEfJ,QAAA;GAACf;GAAI1C;GAAQG;GAASI;GAA2BC;GAAgB;AAAA2B,IAAA,MAAA3B;AAAA2B,IAAA,MAAA5B;AAAA4B,IAAA,MAAAhC;AAAAgC,IAAA,MAAAnC;AAAAmC,IAAA,MAAAO;AAAAP,IAAA,MAAAqB;AAAArB,IAAA,MAAAsB;QAAA;AAAAD,QAAArB,EAAA;AAAAsB,QAAAtB,EAAA;;AAhDpExC,WAAU6D,KAgDPC,IAAkE;CAErE,MAAAO,aAAmBpE,OAAO,MAAM;CAAC,IAAAqE;CAAA,IAAAC;AAAA,KAAA/B,EAAA,QAAAM,QAAAN,EAAA,QAAAhC,WAAAgC,EAAA,QAAAlC,UAAAkC,EAAA,QAAAnC,QAAA;AACvBiE,cAAA;AACR,OAAI,CAAC9D,SAAO;AACV,QAAI6D,WAAUlB,QACZ7B,cAAYkD,OAAQnE,OAAO;AAE7BgE,eAAUlB,UAAW;AAAH;;AAGpB,OAAI7C,UAAA,CAAW+D,WAAUlB,SAAQ;AAC/BkB,eAAUlB,UAAW;AAIrB7B,iBAAYmD,IAAKpE,QAAQ;KAAAe,sBACDmC,gBAAeJ,SAAiBA,WAAhC;KAAwC9B,oBAC1CqC,cAAaP,SAAiBA,WAA9B;KACrB,CAAC;AACFL,SAAyB,gBAAgB;KAAAzC;KAAAU,WAE5B2C,cAAaP,SAAiBA,WAA9B;KACZ,CAAC;cACO,CAAC7C,UAAU+D,WAAUlB,SAAQ;AACtCkB,eAAUlB,UAAW;AACrB7B,iBAAYkD,OAAQnE,OAAO;;;AAE5BkE,QAAA;GAACjE;GAAQwC;GAAMzC;GAAQG;GAAQ;AAAAgC,IAAA,MAAAM;AAAAN,IAAA,MAAAhC;AAAAgC,IAAA,MAAAlC;AAAAkC,IAAA,MAAAnC;AAAAmC,IAAA,MAAA8B;AAAA9B,IAAA,MAAA+B;QAAA;AAAAD,QAAA9B,EAAA;AAAA+B,QAAA/B,EAAA;;AAzBlCxC,WAAUsE,KAyBPC,IAAgC;CAAA,IAAAG;CAAA,IAAAC;AAAA,KAAAnC,EAAA,QAAAnC,QAAA;AAKzBqE,oBACD;AACLpD,gBAAYkD,OAAQnE,OAAO;;AAE5BsE,QAAA,CAACtE,OAAO;AAAAmC,IAAA,MAAAnC;AAAAmC,IAAA,MAAAkC;AAAAlC,IAAA,MAAAmC;QAAA;AAAAD,QAAAlC,EAAA;AAAAmC,QAAAnC,EAAA;;AAJXxC,WAAU0E,KAIPC,IAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6Bd,SAAOC,0BAAA;CAAA,MAAApC,IAAAC,EAAA,EAAA;CAML,MAAAK,OADY/C,WAAWG,gBAAgB,EACvB4C;CAAO,IAAAP;AAAA,KAAAC,EAAA,OAAAM,MAAA;AAErBP,QAAArB,SAAA;AACE,OAAI,CAACA,QAAD,CAAU4B,KAAI;AAClBA,QAAoC,4BAA4B,EAAA5B,MAAQ,CAAC;;AAC1EsB,IAAA,KAAAM;AAAAN,IAAA,KAAAD;OAAAA,MAAAC,EAAA;AAAA,QAJID"}
1
+ {"version":3,"file":"usePopoverSync.js","names":["RefObject","useContext","useEffect","useRef","EventBusContext","useEventBus","UsePopoverSyncOptions","menuId","isOpen","onClose","enabled","triggerRef","HTMLElement","containerRef","dismissOnInnerButtonPress","closeOnPeerOpen","PopoverOpenPayload","triggerEl","Element","PopoverDismissAncestorPayload","from","PopoverRegistryEntry","getContainerEl","getTriggerEl","openPopovers","Map","findOwningPopover","target","entry","contains","isLogicalDescendantOf","ancestorMenuId","ancestorContainer","cur","visited","Set","owner","id","has","add","usePopoverSync","t0","$","_c","t1","t2","t3","undefined","emit","on","isOpenRef","t4","t5","current","onCloseRef","t6","t7","containerRefRef","t8","t9","triggerRefRef","t10","t11","t12","t13","offOpen","data","container","offDismiss","data_0","container_0","wasOpenRef","t14","t15","delete","set","t16","t17","useDismissParentPopover","bus"],"sources":["../../../src/utils/react/usePopoverSync.ts"],"sourcesContent":["import { RefObject, useContext, useEffect, useRef } from 'react';\n\nimport { EventBusContext, useEventBus } from './useEventBus';\n\nexport interface UsePopoverSyncOptions {\n /** Stable identifier for this popover instance (typically a generateRandomId() memo). */\n menuId: string;\n /** Current open state of this popover. */\n isOpen: boolean;\n /** Called when another popover opens while this one is open. */\n onClose: () => void;\n /**\n * When `false`, this popover does not participate in the sync (no listening,\n * no emitting). Useful for \"dummy\" triggers that proxy a real one (see\n * `MenuTrigger`'s `isDummy`). Defaults to `true`.\n */\n enabled?: boolean;\n /**\n * Ref to the popover's trigger element. When provided, the element is\n * included in the `popover:open` emit payload so peers can detect whether\n * the new opener is nested inside their own overlay (and skip closing in\n * that case). Optional — omitting it preserves the legacy \"always close on\n * peer open\" behaviour.\n */\n triggerRef?: RefObject<HTMLElement | null>;\n /**\n * Ref to the overlay/container element that hosts this popover's content.\n * When provided, the listener performs a DOM `contains()` check on incoming\n * peer triggers: peers whose trigger lives inside this container are\n * considered nested children and do NOT close us.\n */\n containerRef?: RefObject<HTMLElement | null>;\n /**\n * Whether this overlay closes when a Button/ItemButton inside its container\n * is pressed. Defaults to `true` (popover semantics — popovers are transient\n * surfaces and any action inside them should dismiss them). Set to `false`\n * for modals/trays/fullscreen dialogs — buttons inside a Dialog should not\n * auto-close it. Requires `containerRef` to be set; without it the listener\n * has no way to determine whether the dispatching button is \"inside\" this\n * overlay and is effectively a no-op.\n */\n dismissOnInnerButtonPress?: boolean;\n /**\n * Whether this overlay closes when a peer popover opens. Defaults to `true`\n * (popover semantics — only one popover open at a time). Set to `false` for\n * modals/trays/fullscreen dialogs so a peer popover opening cannot bypass\n * the dialog's own `isDismissable` / `onClose` handling and yank it shut.\n *\n * The host still EMITS `popover:open` regardless of this flag, so opening a\n * modal/tray correctly dismisses any peer popover that was open before.\n */\n closeOnPeerOpen?: boolean;\n}\n\ninterface PopoverOpenPayload {\n menuId: string;\n triggerEl: Element | null;\n}\n\ninterface PopoverDismissAncestorPayload {\n /** The DOM node of the button that requested the dismiss. */\n from: Element | null;\n}\n\ninterface PopoverRegistryEntry {\n getContainerEl: () => Element | null;\n getTriggerEl: () => Element | null;\n}\n\n/**\n * Module-level registry of currently open popovers. Lets us resolve the\n * LOGICAL parent of an arbitrary element across portal boundaries.\n *\n * Popover content is portaled to a shared root (`document.body` by default —\n * see `Overlay.tsx`), so a grandchild popover's trigger lives inside a\n * sibling portal rather than physically inside its grandparent's container.\n * A naive `container.contains(triggerEl)` check therefore misses the\n * relationship and closes the grandparent — the bug that surfaces with 3+\n * levels of `SubMenuTrigger` nesting.\n *\n * The registry stores closures over the host's refs so reads always see the\n * latest `.current` value without forcing a re-register per render.\n */\nconst openPopovers = new Map<string, PopoverRegistryEntry>();\n\n/**\n * Find the open popover whose container directly contains `target`. Returns\n * `null` for elements that live outside every registered popover (e.g. a\n * top-level trigger button rendered next to its overlay root).\n */\nfunction findOwningPopover(\n target: Element | null,\n): [string, PopoverRegistryEntry] | null {\n if (!target) return null;\n for (const entry of openPopovers) {\n if (entry[1].getContainerEl()?.contains(target)) {\n return entry;\n }\n }\n return null;\n}\n\n/**\n * Returns `true` when `target` is nested inside the overlay identified by\n * `ancestorMenuId` — either as a direct DOM descendant of `ancestorContainer`\n * or as a descendant of a chain of popovers whose triggers eventually land\n * inside it. Used by `popover:open` peers to avoid closing themselves when a\n * grand-child overlay opens through a portal.\n */\nfunction isLogicalDescendantOf(\n target: Element | null,\n ancestorMenuId: string,\n ancestorContainer: Element | null,\n): boolean {\n if (ancestorContainer && target && ancestorContainer.contains(target)) {\n return true;\n }\n let cur: Element | null = target;\n const visited = new Set<string>();\n while (cur) {\n const owner = findOwningPopover(cur);\n if (!owner) return false;\n const [id, entry] = owner;\n if (visited.has(id)) return false;\n visited.add(id);\n if (id === ancestorMenuId) return true;\n cur = entry.getTriggerEl();\n }\n return false;\n}\n\n/**\n * Coordinates the \"only one popover open at a time\" invariant via the EventBus.\n *\n * - When `isOpen` flips `false -> true`, emits `popover:open` once.\n * - While open, listens for peers' `popover:open` events and calls `onClose`.\n *\n * Implementation notes (ALL of these matter — losing any one re-introduces a\n * race that surfaces only under rapid trigger switching, which is hard to\n * reproduce in tests):\n *\n * 1. `isOpen` and `onClose` are read through refs inside the listener, so the\n * subscription effect's dep array does NOT include `isOpen`/`onClose`. This\n * keeps the listener identity stable across open/close transitions and\n * avoids the unsubscribe-emit-resubscribe window where an emit can be\n * delivered to a stale listener (or no listener).\n * 2. The emit fires only on the `false -> true` transition, gated by\n * `wasOpenRef`. A re-render where `isOpen` is still `true` must NOT\n * re-emit, otherwise it could re-trigger listeners on peers that just\n * opened in the same render flush.\n * 3. The `enabled` flag short-circuits both effects symmetrically. When it\n * flips off, `wasOpenRef` is reset so re-enabling later still emits if\n * `isOpen` is true at that moment.\n */\nexport function usePopoverSync({\n menuId,\n isOpen,\n onClose,\n enabled = true,\n triggerRef,\n containerRef,\n dismissOnInnerButtonPress = true,\n closeOnPeerOpen = true,\n}: UsePopoverSyncOptions): void {\n const { emit, on } = useEventBus();\n\n const isOpenRef = useRef(isOpen);\n useEffect(() => {\n isOpenRef.current = isOpen;\n }, [isOpen]);\n\n const onCloseRef = useRef(onClose);\n useEffect(() => {\n onCloseRef.current = onClose;\n }, [onClose]);\n\n // Track the latest containerRef via a stable ref-of-refs so the listener\n // never resubscribes when callers pass freshly-created ref wrappers across\n // renders. Same pattern as `onCloseRef` above — without this the listener's\n // effect would churn for any caller that doesn't memoize its refs.\n const containerRefRef = useRef(containerRef);\n useEffect(() => {\n containerRefRef.current = containerRef;\n }, [containerRef]);\n\n const triggerRefRef = useRef(triggerRef);\n useEffect(() => {\n triggerRefRef.current = triggerRef;\n }, [triggerRef]);\n\n useEffect(() => {\n if (!enabled) return;\n\n // `popover:open` listener — gated on `closeOnPeerOpen`. Modals/trays opt\n // out so a peer popover opening cannot bypass the dialog's\n // `isDismissable` / `onClose` handling and call `state.close()` directly.\n // Note: the EMIT side (lower in this hook) still fires regardless, so\n // opening a modal still correctly dismisses peer popovers.\n const offOpen = closeOnPeerOpen\n ? on('popover:open', (data: PopoverOpenPayload) => {\n if (data.menuId === menuId || !isOpenRef.current) return;\n const container = containerRefRef.current?.current ?? null;\n // Nested-popover guard: stay open when the opening peer's trigger is\n // a LOGICAL descendant of our overlay. Direct DOM containment only\n // covers the first level — for grand-child popovers the trigger lives\n // in a sibling portal, so we walk the registered popover chain back\n // up via each parent's trigger element. Without this, opening a\n // third-level `SubMenuTrigger` would close every ancestor menu.\n if (isLogicalDescendantOf(data.triggerEl, menuId, container)) return;\n onCloseRef.current();\n })\n : null;\n\n // `popover:dismiss-ancestor` is emitted by `Button` / `ItemButton` (and any\n // consumer using `useDismissParentPopover`) after their `onPress` runs.\n // Only popover-type overlays subscribe; modals/trays opt out via\n // `dismissOnInnerButtonPress: false` so a Button inside a Dialog content\n // does NOT auto-close the Dialog.\n const offDismiss = dismissOnInnerButtonPress\n ? on(\n 'popover:dismiss-ancestor',\n (data: PopoverDismissAncestorPayload) => {\n if (!isOpenRef.current) return;\n const container = containerRefRef.current?.current;\n const from = data?.from;\n // Require both a container and an originating element so we can do\n // the contains-check. Hosts without `containerRef` (e.g.\n // `use-anchored-menu`, `use-context-menu`) are silently no-op.\n if (!container || !from) return;\n if (container.contains(from)) onCloseRef.current();\n },\n )\n : null;\n\n return () => {\n offOpen?.();\n offDismiss?.();\n };\n }, [on, menuId, enabled, dismissOnInnerButtonPress, closeOnPeerOpen]);\n\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (!enabled) {\n if (wasOpenRef.current) {\n openPopovers.delete(menuId);\n }\n wasOpenRef.current = false;\n return;\n }\n if (isOpen && !wasOpenRef.current) {\n wasOpenRef.current = true;\n // Register BEFORE emitting so peers' listeners (deferred via the\n // bus's `setTimeout(0)`) can already see us in the registry when\n // they walk the logical chain.\n openPopovers.set(menuId, {\n getContainerEl: () => containerRefRef.current?.current ?? null,\n getTriggerEl: () => triggerRefRef.current?.current ?? null,\n });\n emit<PopoverOpenPayload>('popover:open', {\n menuId,\n triggerEl: triggerRefRef.current?.current ?? null,\n });\n } else if (!isOpen && wasOpenRef.current) {\n wasOpenRef.current = false;\n openPopovers.delete(menuId);\n }\n }, [isOpen, emit, menuId, enabled]);\n\n // Final cleanup on unmount: covers the case where a host unmounts while\n // still flagged open (e.g. a parent unmount tears down a child popover\n // before its close transition runs).\n useEffect(() => {\n return () => {\n openPopovers.delete(menuId);\n };\n }, [menuId]);\n}\n\n/**\n * Hook that returns a dispatcher to close the popover that contains a given\n * DOM element. Used by `Button` / `ItemButton` to implement the default\n * \"press inside a popover closes the popover\" behaviour. Custom (non-Cube)\n * interactive controls can call this directly:\n *\n * ```tsx\n * const dismiss = useDismissParentPopover();\n * <MyCustomPressable onPress={(e) => { doThing(); dismiss(e.currentTarget); }} />\n * ```\n *\n * The actual dismiss is dispatched through the EventBus, which defers via\n * `setTimeout(0)` — so the user's synchronous handler (and any React state\n * updates it triggers) flushes BEFORE the popover closes. This is critical\n * for the \"open a hoisted modal from a popover footer\" case: the modal\n * mounts first, then the popover closes.\n *\n * Only popover-type containers (those that pass `dismissOnInnerButtonPress`\n * as `true`, the default) react to the event. Modal/tray/fullscreen Dialog\n * containers explicitly opt out so a Button inside their content does not\n * auto-close them.\n *\n * When called outside an `EventBusProvider` (e.g. in unit tests that render\n * a Button without wrapping in `<Root>`), the returned function is a no-op —\n * the dismiss flow gracefully degrades rather than throwing.\n */\nexport function useDismissParentPopover() {\n // Read context defensively: `Button` / `ItemButton` use this hook\n // unconditionally, but tests (and standalone usages outside `<Root>`) may\n // mount them without an `EventBusProvider`. A throw would crash every\n // Button render in those cases.\n const bus = useContext(EventBusContext);\n const emit = bus?.emit;\n return (from: Element | null) => {\n if (!from || !emit) return;\n emit<PopoverDismissAncestorPayload>('popover:dismiss-ancestor', { from });\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/react/useQaProps.ts
3
3
  /**
4
4
  * Processes QA props.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useSyncExternalStore } from "react";
3
3
 
4
4
  //#region src/utils/react/useScheme.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { Fragment, isValidElement } from "react";
3
3
 
4
4
  //#region src/utils/react/wrapNodeIfPlain.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/selection.ts
3
3
  /**
4
4
  * Deduplicate/toggle keys in a selection: if a key appears twice it is
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/styles.ts
3
3
  /**
4
4
  * Split properties into style and non-style properties.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/utils/tree.ts
3
3
  function toFlatTree(tree, includingFolders) {
4
4
  return tree.reduce((result, node) => {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { isDevEnvOrTest } from "./is-dev-env.js";
3
3
 
4
4
  //#region src/utils/warnings.ts
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.185.3";
3
+ const VERSION = "0.186.0";
4
4
  const TASTY_VERSION = "3.9.2";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
@@ -446,7 +446,9 @@ For input components that need to integrate with forms, see the [Field documenta
446
446
 
447
447
  7. **Keep it simple when appropriate**: Not every component needs all features - use what makes sense for your use case
448
448
 
449
- 8. **Use named React imports**: Import `useCallback`, `useState`, `forwardRef` etc. directly from `'react'` instead of using `React.useCallback(...)`.
449
+ 8. **Use named React imports**: Import `useState`, `useRef`, `forwardRef` etc. directly from `'react'` instead of using `React.useState(...)`.
450
+
451
+ **Skip `useMemo` and `useCallback` for performance.** React Compiler memoizes compiled components and hooks at build time, so derived values, `mods` objects, context values and handlers are plain expressions. Keep a manual memo only where identity is part of the contract: a callback ref, an effect dependency, a `useSyncExternalStore` subscription, or a value created once per mount.
450
452
 
451
453
  9. **Use `useEvent` for stable callbacks**: When a callback doesn't need to trigger re-renders, prefer `useEvent` from `src/_internal/hooks/use-event` for a stable identity that always calls the latest implementation:
452
454
 
@@ -27,7 +27,7 @@ A multi-value field. The user types a value into a single-line input and commits
27
27
  - **`defaultValue`** `string[]` — The initial values in uncontrolled mode
28
28
  - **`inputValue`** `string` — The text being typed, in controlled mode
29
29
  - **`defaultInputValue`** `string` — The initial text being typed, in uncontrolled mode
30
- - **`allowsCustomValue`** `boolean` (default: `false`) — Whether typed values that are not among the options are accepted. Only applies when options are given
30
+ - **`allowsCustomValue`** `boolean` (default: `false`) — Whether typed values that are not among the options are accepted. Only applies when options are given. Text that matches an option only in case or accents is then added as typed
31
31
  - **`delimiters`** `string[]` (default: `[',']`) — Characters that commit the typed text and split pasted text. Pasted text is also split on line breaks
32
32
  - **`validateTag`** `(value: string) => boolean | string | null | undefined` — Checks one value before it becomes a chip. Return `false` or a message to reject it
33
33
  - **`normalizeTag`** `(value: string) => string` — Rewrites a typed value before it is checked and added. Return an empty string to drop it
@@ -51,16 +51,16 @@ A multi-value field. The user types a value into a single-line input and commits
51
51
  - **`onClear`** `() => void` — Called when the clear button is pressed
52
52
  - **`onOpenChange`** `(isOpen: boolean) => void` — Called when the suggestions popover opens or closes
53
53
  - **`onFocus`** `() => void` — Called when focus enters the component: the input, a chip or the popover
54
- - **`onBlur`** `() => void` — Called when focus leaves the component entirely
54
+ - **`onBlur`** `() => void` — Called when focus leaves the component entirely, after the typed text is committed and before the press that moved focus is handled, so a Save click sees the new value
55
55
  - **`onKeyDown`** `(e: KeyboardEvent) => void` — Called when a key is pressed in the input, before the component handles it. Call `e.preventDefault()` to stop the built-in handling
56
56
  - **`inputRef`**, **`wrapperRef`**, **`popoverRef`**, **`listBoxRef`** `RefObject` — Refs to the input, the bordered input box, the popover and its listbox. The forwarded `ref` points at the root, which holds the input and the chips
57
57
  - **`mods`** `Record<string, boolean>` — Modifiers for the bordered input box, see [Modifiers](#modifiers)
58
58
 
59
59
  #### Notable Properties
60
60
 
61
- **delimiters** - Typing a delimiter commits the text before it, and pasting splits the text on every delimiter and line break, so a column copied from a spreadsheet or a comma-separated list becomes one chip per entry. A single pasted value is inserted as plain text for the user to finish. Pass `[]` when a value may contain a comma: only Enter and pasted line breaks separate values then.
61
+ **delimiters** - Typing a delimiter commits the text before it, and pasting splits the text on every delimiter and line break, so a column copied from a spreadsheet or a comma-separated list becomes one chip per entry. A single pasted value is inserted as plain text for the user to finish. Pass `[]` when a value may contain a comma: only Enter and pasted line breaks separate values then. Refused values go back to the input joined by the first delimiter, so they split into the same values again; with `[]` nothing can separate them in one line, so only the first refused value stays there, with its message.
62
62
 
63
- **validateTag** - Runs on every value about to become a chip. A rejected value stays in the input, the field turns invalid and the message shows below it until the text is edited. A value picked from the options is not checked. Values already in `value` that fail the check are drawn in the danger theme and carry the message as their description, so an invalid entry loaded from the server stands out. Duplicates are always refused, with a message of their own.
63
+ **validateTag** - Runs on every value about to become a chip. A rejected value stays in the input, the field turns invalid and the message shows below it until the text is edited. A value picked from the options is not checked. Values already in `value` that fail the check are drawn in the danger theme and carry the message as their description, so an invalid entry loaded from the server stands out. Duplicates are always refused, with a message of their own, and leave the input: the value is there already, as a chip. When a paste mixes the two, the message is the one for the text left in the input. A message is cleared by Escape, and by leaving the field once nothing is left in the input, so a refused duplicate does not leave an empty field marked invalid.
64
64
 
65
65
  **normalizeTag** - Runs on typed text before anything else looks at it, so the duplicate check, `validateTag` and the new chip all see the rewritten value: lowercase an email address, strip thousands separators, write a number one way. The rejected text that stays in the input is what the user typed. Picked options keep their keys.
66
66
 
@@ -68,7 +68,7 @@ A multi-value field. The user types a value into a single-line input and commits
68
68
 
69
69
  **tagProps** - Called per value. Return a theme, an icon or `qa` for the chip. A string `children` replaces the chip's text and also names the value in the input's description and in the "Added"/"Removed" announcements, for values whose label does not come from the options. `isDisabled: true` locks the chip: it has no remove button, the keyboard skips it, and its option cannot be unpicked. An invalid chip stays in the danger theme whatever theme it asks for.
70
70
 
71
- **children / items** - Options turn the input into a combobox. Typing filters them and focuses the option whose label is exactly the typed text, or else the first match. Enter or a click toggles the focused option, and the popover stays open so the user can pick several in a row. Typed text means "add": pressing Enter on an option that is already a chip refuses it as a duplicate, and unpicking it takes the arrow keys, a click, or an empty input. A picked option shows a checked box. Without `allowsCustomValue`, typed text must match an option by key or label, and on blur a query that matches nothing is dropped. With it, the typed text is offered as its own option after the matches, the same way [FilterListBox](./FilterListBox.md) does, and custom values already added are listed there too, checked and sorted, so they can be unpicked from the list as well as from their chips. One unpicked in the list stays there, unchecked, until focus leaves the field, so it can be picked back. An option in `disabledKeys` is refused however it is entered. A chip for an option shows the option's label, while the value holds its key. The label is remembered, so it survives server-side filtering (`filter={false}` with changing `items`).
71
+ **children / items** - Options turn the input into a combobox. Typing filters them and focuses the option the typed text names, or else the first match. Enter or a click toggles the focused option, and the popover stays open so the user can pick several in a row. A picked option is added as its own key, whatever other options its text resembles. Typed text means "add": pressing Enter on an option that is already a chip refuses it as a duplicate, and unpicking it takes the arrow keys, a click, or an empty input. A picked option shows a checked box. Typed text names an option by its exact label, then by its key, anywhere in the list, before any looser match counts, so `active` finds `active` even when `Active` comes first. Enter, a delimiter, a paste and blur all go by the same rule, and the option the text names stays listed and focused even when the filter would hide it, as when a key is typed, so they always add the same option. Without `allowsCustomValue`, typed text must name an option, and a label in another case or without its accents counts too: `production` adds `Production`. On blur a query that names nothing is dropped. With `allowsCustomValue`, only an exact match counts: `paris` next to an option `Paris` is a value of its own, offered and focused as its own row and added as typed, since a case-sensitive filter treats the two apart. A press on a control outside while the popover shows (a button, a link, another field) is not taken by it: it reaches the control, so a Save button saves on the first click, with the typed text already committed. A press anywhere else, such as the backdrop of a dialog the field sits in, only closes the popover, and the dialog stays open. The typed text is offered as its own option after the matches, the same way [FilterListBox](./FilterListBox.md) does, and custom values already added are listed there too, checked and sorted, so they can be unpicked from the list as well as from their chips. One unpicked in the list stays there, unchecked, until focus leaves the field, so it can be picked back. An option in `disabledKeys` is refused however it is entered. A chip for an option shows the option's label, while the value holds its key. The label is remembered, so it survives server-side filtering (`filter={false}` with changing `items`).
72
72
 
73
73
  ### Base Properties
74
74
 
@@ -185,7 +185,7 @@ const EMAIL = /^[^\s@,]+@[^\s@,]+\.[^\s@,]+$/;
185
185
 
186
186
  ### Pasting a List
187
187
 
188
- Pasted text is split on delimiters and line breaks. Accepted entries become chips, rejected ones stay in the input with the message from `validateTag`.
188
+ Pasted text is split on delimiters and line breaks. Accepted entries become chips, rejected ones stay in the input with the message from `validateTag`, and duplicates of existing chips are dropped with a message of their own.
189
189
 
190
190
  ### Picking from Suggestions
191
191
 
@@ -359,9 +359,9 @@ const [recipients, setRecipients] = useState(['ana@acme.com']);
359
359
 
360
360
  - `Tab` - Moves focus from the input to the chips, then out of the field. The chips are one Tab stop; the popover trigger and the clear button are not Tab stops. Tabbing away closes the popover and commits the typed text
361
361
  - `Shift+Tab` - Moves back from the chips to the input
362
- - `Enter` - Commits the typed text. With the popover open, toggles the focused option, the one `aria-activedescendant` announces; with text typed, an option that is already a chip is refused as a duplicate rather than removed. Never submits a surrounding form, even with nothing typed, so one Enter too many after the last value does not send a half-filled dialog
362
+ - `Enter` - Commits the typed text. With the popover open, toggles the focused option, the one `aria-activedescendant` announces; with text typed, an option that is already a chip is refused as a duplicate rather than removed, and the text is cleared. Never submits a surrounding form, even with nothing typed, so one Enter too many after the last value does not send a half-filled dialog
363
363
  - `,` (or another delimiter) - Commits the text before the caret and keeps the rest typed
364
- - `Escape` - Closes the popover, or clears the typed text when it is closed
364
+ - `Escape` - Closes the popover, or clears the typed text when it is closed. Either way it clears a message about the text, even once the input is empty
365
365
  - `Backspace` in the empty input - Moves focus to the last chip without removing it, and closes the popover. A Backspace held down to clear the text stops at the empty input
366
366
  - `ArrowDown` / `ArrowUp` - Opens the popover or moves through the options
367
367
  - `Home` / `End` - Moves to the first or last option while the popover is open
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.185.3",
3
+ "version": "0.186.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -98,7 +98,7 @@
98
98
  "@statoscope/cli": "^5.20.1",
99
99
  "@storybook/addon-docs": "^10.3.6",
100
100
  "@storybook/react-vite": "^10.3.6",
101
- "@tenphi/eslint-plugin-tasty": "^1.1.0",
101
+ "@tenphi/eslint-plugin-tasty": "^1.2.0",
102
102
  "@testing-library/dom": "^10.4.1",
103
103
  "@testing-library/jest-dom": "^6.7.0",
104
104
  "@testing-library/react": "^16.3.0",