@cube-dev/ui-kit 0.178.0 → 0.180.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 (742) hide show
  1. package/dist/CHANGELOG.md +73 -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 +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +218 -0
  27. package/dist/components/actions/ItemActionsWrapper.js.map +1 -0
  28. package/dist/components/actions/ItemButton/ItemButton.d.ts +11 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +25 -143
  30. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  31. package/dist/components/actions/Link/Link.js +1 -1
  32. package/dist/components/actions/Menu/Menu.js +1 -1
  33. package/dist/components/actions/Menu/MenuItem.js +1 -1
  34. package/dist/components/actions/Menu/MenuSection.js +1 -1
  35. package/dist/components/actions/Menu/MenuTrigger.js +3 -1
  36. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  37. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  38. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  39. package/dist/components/actions/Menu/context.js +1 -1
  40. package/dist/components/actions/Menu/styled.js +1 -1
  41. package/dist/components/actions/actions-run.js +34 -0
  42. package/dist/components/actions/actions-run.js.map +1 -0
  43. package/dist/components/actions/index.js +1 -1
  44. package/dist/components/actions/use-action.js +1 -1
  45. package/dist/components/actions/use-anchored-menu.js +1 -1
  46. package/dist/components/actions/use-context-menu.js +1 -1
  47. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  48. package/dist/components/content/Alert/Alert.js +1 -1
  49. package/dist/components/content/Alert/use-alert.js +1 -1
  50. package/dist/components/content/Avatar/Avatar.js +1 -1
  51. package/dist/components/content/Badge/Badge.js +1 -1
  52. package/dist/components/content/Card/Card.js +1 -1
  53. package/dist/components/content/Content.js +1 -1
  54. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  55. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  56. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  57. package/dist/components/content/Divider.js +1 -1
  58. package/dist/components/content/Footer.js +1 -1
  59. package/dist/components/content/Header.js +1 -1
  60. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  61. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  62. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  63. package/dist/components/content/Item/Item.js +5 -5
  64. package/dist/components/content/Item/Item.js.map +1 -1
  65. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  66. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  67. package/dist/components/content/Layout/GridLayout.js +1 -1
  68. package/dist/components/content/Layout/Layout.js +1 -1
  69. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  70. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  71. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  72. package/dist/components/content/Layout/LayoutContent.js +1 -1
  73. package/dist/components/content/Layout/LayoutContext.js +1 -1
  74. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  75. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  76. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  77. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutPane.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  80. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  81. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  82. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  83. package/dist/components/content/Layout/index.js +1 -1
  84. package/dist/components/content/Layout/utils.js +1 -1
  85. package/dist/components/content/Paragraph.js +1 -1
  86. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  87. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  88. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  89. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  90. package/dist/components/content/Result/Result.js +1 -1
  91. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  92. package/dist/components/content/Tag/Tag.js +1 -1
  93. package/dist/components/content/Text.d.ts +14 -14
  94. package/dist/components/content/Text.js +1 -1
  95. package/dist/components/content/TextItem/TextItem.js +1 -1
  96. package/dist/components/content/Title.js +1 -1
  97. package/dist/components/content/Tree/Tree.js +1 -1
  98. package/dist/components/content/Tree/TreeNode.js +1 -1
  99. package/dist/components/content/Tree/styled.js +1 -1
  100. package/dist/components/content/Tree/tree-index.js +1 -1
  101. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  102. package/dist/components/content/Tree/use-load-data.js +1 -1
  103. package/dist/components/content/highlightText.js +1 -1
  104. package/dist/components/content/use-auto-tooltip.js +1 -1
  105. package/dist/components/data/DataTable/DataTable.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  110. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  111. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  112. package/dist/components/data/TableBase/RowCollection.js +1 -1
  113. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  114. package/dist/components/data/TableBase/TableRow.js +1 -1
  115. package/dist/components/data/TableBase/TableView.js +1 -1
  116. package/dist/components/data/TableBase/column-menu.js +1 -1
  117. package/dist/components/data/TableBase/column-tint.js +1 -1
  118. package/dist/components/data/TableBase/row-menu.js +1 -1
  119. package/dist/components/data/TableBase/styled.js +1 -1
  120. package/dist/components/data/TableBase/table-tree.js +1 -1
  121. package/dist/components/data/TableBase/types.js +1 -1
  122. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  123. package/dist/components/data/TableBase/use-column-order.js +1 -1
  124. package/dist/components/data/TableBase/use-container-width.js +1 -1
  125. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  126. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  127. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  128. package/dist/components/data/TableBase/use-table-search.js +1 -1
  129. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  130. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  131. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  132. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  133. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  134. package/dist/components/fields/Checkbox/Checkbox.d.ts +7 -0
  135. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  136. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  137. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -1
  138. package/dist/components/fields/Checkbox/CheckboxGroup.js +3 -3
  139. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  140. package/dist/components/fields/Checkbox/context.js +1 -1
  141. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  142. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  143. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  144. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  145. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  146. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  147. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  148. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  149. package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
  150. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  151. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -1
  152. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  153. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  154. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  155. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
  156. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  157. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  159. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  160. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  161. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  162. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  163. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +1 -1
  164. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  165. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  166. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +1 -1
  167. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  168. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  169. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  171. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  173. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  175. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  176. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  177. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  179. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  180. package/dist/components/fields/DatePicker/period.js +1 -1
  181. package/dist/components/fields/DatePicker/props.js +1 -1
  182. package/dist/components/fields/DatePicker/utils.js +1 -1
  183. package/dist/components/fields/FileInput/FileInput.d.ts +2 -0
  184. package/dist/components/fields/FileInput/FileInput.js +1 -1
  185. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  186. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  187. package/dist/components/fields/FilterPicker/FilterPicker.js +18 -27
  188. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  189. package/dist/components/fields/Input/Input.js +1 -1
  190. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  191. package/dist/components/fields/ListBox/ListBox.js +1 -1
  192. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  193. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  194. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  195. package/dist/components/fields/NumberInput/NumberInput.d.ts +1 -1
  196. package/dist/components/fields/NumberInput/NumberInput.js +3 -3
  197. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  198. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  199. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  200. package/dist/components/fields/Picker/Picker.js +18 -27
  201. package/dist/components/fields/Picker/Picker.js.map +1 -1
  202. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  203. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  204. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  205. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  206. package/dist/components/fields/RadioGroup/context.js +1 -1
  207. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  208. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  209. package/dist/components/fields/Select/Select.js +53 -55
  210. package/dist/components/fields/Select/Select.js.map +1 -1
  211. package/dist/components/fields/Slider/Gradation.js +1 -1
  212. package/dist/components/fields/Slider/HueSlider.js +1 -1
  213. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  214. package/dist/components/fields/Slider/Slider.js +1 -1
  215. package/dist/components/fields/Slider/SliderBase.js +2 -2
  216. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  217. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  218. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  219. package/dist/components/fields/Slider/elements.js +1 -1
  220. package/dist/components/fields/Slider/index.js +1 -1
  221. package/dist/components/fields/Slider/types.d.ts +1 -1
  222. package/dist/components/fields/Switch/Switch.d.ts +2 -0
  223. package/dist/components/fields/Switch/Switch.js +1 -1
  224. package/dist/components/fields/Switch/Switch.js.map +1 -1
  225. package/dist/components/fields/TextArea/TextArea.js +1 -1
  226. package/dist/components/fields/TextInput/TextInput.js +1 -1
  227. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  228. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  229. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  230. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  231. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  232. package/dist/components/fields/TriggerActions.js +5 -56
  233. package/dist/components/fields/TriggerActions.js.map +1 -1
  234. package/dist/components/fields/color/ColorPanel.js +1 -1
  235. package/dist/components/fields/color/channels.js +1 -1
  236. package/dist/components/fields/color/color.js +1 -1
  237. package/dist/components/fields/color/context.js +1 -1
  238. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  239. package/dist/components/form/Form/Field.js +1 -1
  240. package/dist/components/form/Form/Form.d.ts +38 -2
  241. package/dist/components/form/Form/Form.js +86 -16
  242. package/dist/components/form/Form/Form.js.map +1 -1
  243. package/dist/components/form/Form/ModernFormRoot.d.ts +19 -0
  244. package/dist/components/form/Form/ModernFormRoot.js +108 -0
  245. package/dist/components/form/Form/ModernFormRoot.js.map +1 -0
  246. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +2 -1
  247. package/dist/components/form/Form/ResetButton/ResetButton.js +17 -2
  248. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  249. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +2 -1
  250. package/dist/components/form/Form/SubmitButton/SubmitButton.js +17 -2
  251. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  252. package/dist/components/form/Form/SubmitError.js +26 -3
  253. package/dist/components/form/Form/SubmitError.js.map +1 -1
  254. package/dist/components/form/Form/backend.d.ts +25 -0
  255. package/dist/components/form/Form/backend.js +30 -0
  256. package/dist/components/form/Form/backend.js.map +1 -0
  257. package/dist/components/form/Form/index.d.ts +18 -4
  258. package/dist/components/form/Form/index.js +8 -2
  259. package/dist/components/form/Form/index.js.map +1 -1
  260. package/dist/components/form/Form/modern/actions.js +41 -0
  261. package/dist/components/form/Form/modern/actions.js.map +1 -0
  262. package/dist/components/form/Form/modern/context.d.ts +9 -0
  263. package/dist/components/form/Form/modern/context.js +14 -0
  264. package/dist/components/form/Form/modern/context.js.map +1 -0
  265. package/dist/components/form/Form/modern/controller.d.ts +23 -0
  266. package/dist/components/form/Form/modern/controller.js +48 -0
  267. package/dist/components/form/Form/modern/controller.js.map +1 -0
  268. package/dist/components/form/Form/modern/field-binding.js +41 -0
  269. package/dist/components/form/Form/modern/field-binding.js.map +1 -0
  270. package/dist/components/form/Form/modern/path-types.d.ts +12 -0
  271. package/dist/components/form/Form/modern/react.d.ts +21 -0
  272. package/dist/components/form/Form/modern/react.js +27 -0
  273. package/dist/components/form/Form/modern/react.js.map +1 -0
  274. package/dist/components/form/Form/modern/store.js +813 -0
  275. package/dist/components/form/Form/modern/store.js.map +1 -0
  276. package/dist/components/form/Form/modern/types.d.ts +173 -0
  277. package/dist/components/form/Form/modern/validation.d.ts +27 -0
  278. package/dist/components/form/Form/modern/validation.js +41 -0
  279. package/dist/components/form/Form/modern/validation.js.map +1 -0
  280. package/dist/components/form/Form/modern/values.d.ts +7 -0
  281. package/dist/components/form/Form/modern/values.js +144 -0
  282. package/dist/components/form/Form/modern/values.js.map +1 -0
  283. package/dist/components/form/Form/use-field/types.d.ts +4 -1
  284. package/dist/components/form/Form/use-field/use-field-binding.js +93 -0
  285. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -0
  286. package/dist/components/form/Form/use-field/use-field-props.d.ts +12 -1
  287. package/dist/components/form/Form/use-field/use-field-props.js +67 -50
  288. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  289. package/dist/components/form/Form/use-field/use-field.d.ts +6 -0
  290. package/dist/components/form/Form/use-field/use-field.js +47 -22
  291. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  292. package/dist/components/form/Form/use-form.d.ts +4 -1
  293. package/dist/components/form/Form/use-form.js +9 -5
  294. package/dist/components/form/Form/use-form.js.map +1 -1
  295. package/dist/components/form/Form/validation.js +2 -2
  296. package/dist/components/form/Label.js +1 -1
  297. package/dist/components/form/index.d.ts +8 -1
  298. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  299. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  300. package/dist/components/form/validation/use-validation-props.js +1 -1
  301. package/dist/components/form/wrapper.js +1 -1
  302. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  303. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  304. package/dist/components/layout/Board/Board.js +1 -1
  305. package/dist/components/layout/Board/BoardProvider.js +1 -1
  306. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  307. package/dist/components/layout/Board/Widget.js +1 -1
  308. package/dist/components/layout/Board/WidgetHost.js +1 -1
  309. package/dist/components/layout/Board/board-context.js +1 -1
  310. package/dist/components/layout/Board/board-store.js +1 -1
  311. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  312. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  313. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  314. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  315. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  316. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  317. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  318. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  319. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  320. package/dist/components/layout/Board/index.js +1 -1
  321. package/dist/components/layout/Board/responsive-utils.js +1 -1
  322. package/dist/components/layout/Board/use-board-layout.js +1 -1
  323. package/dist/components/layout/Board/use-board-registry.js +1 -1
  324. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  325. package/dist/components/layout/Board/use-board-selection.js +1 -1
  326. package/dist/components/layout/Flex.js +1 -1
  327. package/dist/components/layout/Flow.js +1 -1
  328. package/dist/components/layout/Grid.js +1 -1
  329. package/dist/components/layout/Panel.js +1 -1
  330. package/dist/components/layout/Prefix.js +1 -1
  331. package/dist/components/layout/ResizablePanel.js +1 -1
  332. package/dist/components/layout/Space.js +1 -1
  333. package/dist/components/layout/Suffix.js +1 -1
  334. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  335. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  336. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  337. package/dist/components/navigation/Tabs/TabButton.js +36 -40
  338. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  339. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  340. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  341. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  342. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  343. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  344. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  345. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  346. package/dist/components/navigation/Tabs/styled.js +1 -29
  347. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  348. package/dist/components/navigation/Tabs/types.js +1 -1
  349. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  350. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  351. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  352. package/dist/components/other/Calendar/Calendar.js +1 -1
  353. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  354. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  355. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  356. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  357. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  358. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  359. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  360. package/dist/components/other/Calendar/styled.js +1 -1
  361. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  362. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  363. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  364. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  365. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  366. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  367. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  368. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  369. package/dist/components/overlays/Dialog/DialogTrigger.js +4 -2
  370. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  371. package/dist/components/overlays/Dialog/context.js +1 -1
  372. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  373. package/dist/components/overlays/Modal/Modal.js +1 -1
  374. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  375. package/dist/components/overlays/Modal/Overlay.js +1 -1
  376. package/dist/components/overlays/Modal/Popover.js +1 -1
  377. package/dist/components/overlays/Modal/Tray.js +1 -1
  378. package/dist/components/overlays/Modal/Underlay.js +1 -1
  379. package/dist/components/overlays/Notifications/Notification.js +1 -1
  380. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  381. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  382. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  383. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  384. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  385. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  386. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  387. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  388. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  389. package/dist/components/overlays/Notifications/index.js +1 -1
  390. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  391. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  392. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  393. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  394. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  395. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  396. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  397. package/dist/components/overlays/Toast/index.js +1 -1
  398. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  399. package/dist/components/overlays/Toast/useToast.js +1 -1
  400. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  401. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  402. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  403. package/dist/components/overlays/Tooltip/context.js +1 -1
  404. package/dist/components/portal/Portal.js +1 -1
  405. package/dist/components/portal/PortalProvider.js +1 -1
  406. package/dist/components/portal/usePortal.js +1 -1
  407. package/dist/components/shared/DraggableCollection.js +1 -1
  408. package/dist/components/shared/InvalidIcon.js +1 -1
  409. package/dist/components/shared/ValidIcon.js +1 -1
  410. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  411. package/dist/components/status/Spin/Cube.js +1 -1
  412. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  413. package/dist/components/status/Spin/Spin.js +1 -1
  414. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  415. package/dist/data/item-themes.js +25 -6
  416. package/dist/data/item-themes.js.map +1 -1
  417. package/dist/data/themes.js +1 -1
  418. package/dist/eslint-plugin/defaults.generated.js +1 -1
  419. package/dist/eslint-plugin/index.js +1 -1
  420. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  421. package/dist/i18n/I18nProvider.js +1 -1
  422. package/dist/i18n/createFormatter.js +1 -1
  423. package/dist/i18n/index.js +1 -1
  424. package/dist/i18n/instance.js +1 -1
  425. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  426. package/dist/i18n/locales/en-US/uikit.js +1 -1
  427. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  428. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  429. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  430. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  431. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  432. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  433. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  434. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  435. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  436. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  437. package/dist/i18n/locales.js +1 -1
  438. package/dist/i18n/useFormatter.js +1 -1
  439. package/dist/i18n/useI18n.js +1 -1
  440. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  441. package/dist/icons/AdjustmentsIcon.js +1 -1
  442. package/dist/icons/AiIcon.js +1 -1
  443. package/dist/icons/AreaChartIcon.js +1 -1
  444. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  445. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  446. package/dist/icons/BackwardIcon.js +1 -1
  447. package/dist/icons/BarChartIcon.js +1 -1
  448. package/dist/icons/BellFilledIcon.js +1 -1
  449. package/dist/icons/BellIcon.js +1 -1
  450. package/dist/icons/BooleanIcon.js +1 -1
  451. package/dist/icons/CalendarEditIcon.js +1 -1
  452. package/dist/icons/CalendarIcon.js +1 -1
  453. package/dist/icons/CaretDownIcon.js +1 -1
  454. package/dist/icons/CaretUpIcon.js +1 -1
  455. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  456. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  457. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  458. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  459. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  460. package/dist/icons/ChartBarLineIcon.js +1 -1
  461. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  462. package/dist/icons/ChartBarStackedIcon.js +1 -1
  463. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  464. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  465. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  466. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  467. package/dist/icons/ChartBubbleIcon.js +1 -1
  468. package/dist/icons/ChartDonut2Icon.js +1 -1
  469. package/dist/icons/ChartFunnelIcon.js +1 -1
  470. package/dist/icons/ChartHeatmapIcon.js +1 -1
  471. package/dist/icons/ChartKPIIcon.js +1 -1
  472. package/dist/icons/ChartPie2Icon.js +1 -1
  473. package/dist/icons/ChartScatterIcon.js +1 -1
  474. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  475. package/dist/icons/CheckCircleIcon.js +1 -1
  476. package/dist/icons/CheckIcon.js +1 -1
  477. package/dist/icons/CircleFilledIcon.js +1 -1
  478. package/dist/icons/ClearIcon.js +1 -1
  479. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  480. package/dist/icons/CloseCircleIcon.js +1 -1
  481. package/dist/icons/CloseIcon.js +1 -1
  482. package/dist/icons/CodeIcon.js +1 -1
  483. package/dist/icons/ColumnTotalIcon.js +1 -1
  484. package/dist/icons/CopyIcon.js +1 -1
  485. package/dist/icons/CountIcon.js +1 -1
  486. package/dist/icons/CubeIcon.js +1 -1
  487. package/dist/icons/CubePauseIcon.js +1 -1
  488. package/dist/icons/CubePlayIcon.js +1 -1
  489. package/dist/icons/CurrencyDollarIcon.js +1 -1
  490. package/dist/icons/DangerIcon.js +1 -1
  491. package/dist/icons/DashboardIcon.js +1 -1
  492. package/dist/icons/DatabaseIcon.js +1 -1
  493. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  494. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  495. package/dist/icons/DirectionIcon.js +1 -1
  496. package/dist/icons/DonutIcon.js +1 -1
  497. package/dist/icons/DownIcon.js +1 -1
  498. package/dist/icons/EditIcon.js +1 -1
  499. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  500. package/dist/icons/ExclamationCircleIcon.js +1 -1
  501. package/dist/icons/ExclamationIcon.js +1 -1
  502. package/dist/icons/EyeIcon.js +1 -1
  503. package/dist/icons/EyeInvisibleIcon.js +1 -1
  504. package/dist/icons/FilterIcon.js +1 -1
  505. package/dist/icons/FolderFilledIcon.js +1 -1
  506. package/dist/icons/FolderIcon.js +1 -1
  507. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  508. package/dist/icons/FolderOpenIcon.js +1 -1
  509. package/dist/icons/ForwardIcon.js +1 -1
  510. package/dist/icons/GripVerticalIcon.js +1 -1
  511. package/dist/icons/HierarchyIcon.js +1 -1
  512. package/dist/icons/HierarchyOpenIcon.js +1 -1
  513. package/dist/icons/Icon.js +1 -1
  514. package/dist/icons/InfoCircleIcon.js +1 -1
  515. package/dist/icons/InfoIcon.js +1 -1
  516. package/dist/icons/KeyIcon.js +1 -1
  517. package/dist/icons/LeftIcon.js +1 -1
  518. package/dist/icons/LineChartIcon.js +1 -1
  519. package/dist/icons/LoadingIcon.js +1 -1
  520. package/dist/icons/LockFilledIcon.js +1 -1
  521. package/dist/icons/LockIcon.js +1 -1
  522. package/dist/icons/MoreIcon.js +1 -1
  523. package/dist/icons/NotAllowedIcon.js +1 -1
  524. package/dist/icons/Number123Icon.js +1 -1
  525. package/dist/icons/NumberIcon.js +1 -1
  526. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  527. package/dist/icons/PauseCircleIcon.js +1 -1
  528. package/dist/icons/PauseIcon.js +1 -1
  529. package/dist/icons/PercentageIcon.js +1 -1
  530. package/dist/icons/PieChartIcon.js +1 -1
  531. package/dist/icons/PipetteIcon.js +1 -1
  532. package/dist/icons/PlayCircleIcon.js +1 -1
  533. package/dist/icons/PlayIcon.js +1 -1
  534. package/dist/icons/PlusIcon.js +1 -1
  535. package/dist/icons/ProgressBarIcon.js +1 -1
  536. package/dist/icons/ReloadIcon.js +1 -1
  537. package/dist/icons/ReportIcon.js +1 -1
  538. package/dist/icons/ReturnIcon.js +1 -1
  539. package/dist/icons/RightIcon.js +1 -1
  540. package/dist/icons/RowTotalsIcon.js +1 -1
  541. package/dist/icons/SchemeIcon.js +1 -1
  542. package/dist/icons/SearchIcon.js +1 -1
  543. package/dist/icons/SemanticQueryIcon.js +1 -1
  544. package/dist/icons/SettingsIcon.js +1 -1
  545. package/dist/icons/ShieldFilledIcon.js +1 -1
  546. package/dist/icons/ShieldIcon.js +1 -1
  547. package/dist/icons/SlashIcon.js +1 -1
  548. package/dist/icons/SparklesIcon.js +1 -1
  549. package/dist/icons/SqlIcon.js +1 -1
  550. package/dist/icons/StatsIcon.js +1 -1
  551. package/dist/icons/StopIcon.js +1 -1
  552. package/dist/icons/StringIcon.js +1 -1
  553. package/dist/icons/SubtotalsIcon.js +1 -1
  554. package/dist/icons/SwitchIcon.js +1 -1
  555. package/dist/icons/TableIcon.js +1 -1
  556. package/dist/icons/ThumbsDownIcon.js +1 -1
  557. package/dist/icons/ThumbsUpIcon.js +1 -1
  558. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  559. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  560. package/dist/icons/ThunderboltIcon.js +1 -1
  561. package/dist/icons/TimeIcon.js +1 -1
  562. package/dist/icons/TrashIcon.js +1 -1
  563. package/dist/icons/UnlockIcon.js +1 -1
  564. package/dist/icons/UpIcon.js +1 -1
  565. package/dist/icons/UserGroupIcon.js +1 -1
  566. package/dist/icons/UserIcon.js +1 -1
  567. package/dist/icons/UserLockIcon.js +1 -1
  568. package/dist/icons/ViewIcon.js +1 -1
  569. package/dist/icons/WarningFilledIcon.js +1 -1
  570. package/dist/icons/WarningIcon.js +1 -1
  571. package/dist/icons/wrap-icon.js +1 -1
  572. package/dist/index.d.ts +10 -3
  573. package/dist/index.js +3 -3
  574. package/dist/probe/canonicalize.js +1 -1
  575. package/dist/probe/css.js +1 -1
  576. package/dist/probe/index.js +1 -1
  577. package/dist/provider.js +1 -1
  578. package/dist/providers/TrackingProvider.js +1 -1
  579. package/dist/providers/navigationAdapter.default.js +1 -1
  580. package/dist/shared/form.d.ts +16 -2
  581. package/dist/shared/index.d.ts +1 -1
  582. package/dist/tokens/all-tokens.js +1 -1
  583. package/dist/tokens/base.js +1 -1
  584. package/dist/tokens/color-seed.js +1 -1
  585. package/dist/tokens/color-theme.js +1 -1
  586. package/dist/tokens/colors.js +1 -1
  587. package/dist/tokens/layout.js +1 -1
  588. package/dist/tokens/lazy-styles.js +1 -1
  589. package/dist/tokens/legacy-color.js +1 -1
  590. package/dist/tokens/palette-config.js +1 -1
  591. package/dist/tokens/palette.js +1 -1
  592. package/dist/tokens/resolve.js +1 -1
  593. package/dist/tokens/shadows.js +1 -1
  594. package/dist/tokens/sizes.js +1 -1
  595. package/dist/tokens/spacing.js +1 -1
  596. package/dist/tokens/typography.js +1 -1
  597. package/dist/utils/ResizeSensor.js +1 -1
  598. package/dist/utils/colors.js +1 -1
  599. package/dist/utils/dotize.js +50 -0
  600. package/dist/utils/dotize.js.map +1 -0
  601. package/dist/utils/is-dev-env.js +1 -1
  602. package/dist/utils/modules.js +1 -1
  603. package/dist/utils/promise.js +1 -1
  604. package/dist/utils/raf.js +1 -1
  605. package/dist/utils/random.js +1 -1
  606. package/dist/utils/range.js +1 -1
  607. package/dist/utils/react/RenderCache.js +1 -1
  608. package/dist/utils/react/Slots.js +1 -1
  609. package/dist/utils/react/chain.js +1 -1
  610. package/dist/utils/react/disabledProps.js +1 -1
  611. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  612. package/dist/utils/react/index.js +1 -1
  613. package/dist/utils/react/interactions.js +1 -1
  614. package/dist/utils/react/isTextOnly.js +1 -1
  615. package/dist/utils/react/mapProps.js +1 -1
  616. package/dist/utils/react/mergeProps.js +1 -1
  617. package/dist/utils/react/nullableValue.js +1 -1
  618. package/dist/utils/react/resolveIcon.js +1 -1
  619. package/dist/utils/react/sharedStore.js +1 -1
  620. package/dist/utils/react/useBufferedValue.js +1 -1
  621. package/dist/utils/react/useCombinedRefs.js +1 -1
  622. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  623. package/dist/utils/react/useEventBus.js +1 -1
  624. package/dist/utils/react/useId.js +1 -1
  625. package/dist/utils/react/useIsDarwin.js +1 -1
  626. package/dist/utils/react/useKeySymbols.js +1 -1
  627. package/dist/utils/react/useLayoutEffect.js +1 -1
  628. package/dist/utils/react/useLocalStorage.js +1 -1
  629. package/dist/utils/react/useMergeStyles.js +1 -1
  630. package/dist/utils/react/usePopoverSync.js +1 -1
  631. package/dist/utils/react/useQaProps.js +1 -1
  632. package/dist/utils/react/useScheme.js +1 -1
  633. package/dist/utils/react/useViewportSize.js +1 -1
  634. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  635. package/dist/utils/selection.js +1 -1
  636. package/dist/utils/styles.js +1 -1
  637. package/dist/utils/tree.js +1 -1
  638. package/dist/utils/warnings.js +1 -1
  639. package/dist/version.js +3 -3
  640. package/docs/CreateComponent.md +4 -0
  641. package/docs/Usage.md +2 -0
  642. package/docs/components/Block.md +3 -3
  643. package/docs/components/CollectionItem.md +3 -3
  644. package/docs/components/GridProvider.md +3 -3
  645. package/docs/components/Root.md +1 -1
  646. package/docs/components/actions/Action.md +3 -3
  647. package/docs/components/actions/Banner.md +3 -3
  648. package/docs/components/actions/Button.md +3 -3
  649. package/docs/components/actions/ButtonGroup.md +3 -3
  650. package/docs/components/actions/ButtonSplit.md +3 -3
  651. package/docs/components/actions/CommandMenu.md +3 -3
  652. package/docs/components/actions/ItemAction.md +3 -1
  653. package/docs/components/actions/ItemButton.md +15 -1
  654. package/docs/components/actions/Link.md +3 -3
  655. package/docs/components/actions/Menu.md +3 -3
  656. package/docs/components/actions/MenuTrigger.md +3 -3
  657. package/docs/components/actions/SubMenuTrigger.md +3 -3
  658. package/docs/components/actions/use-anchored-menu.md +3 -3
  659. package/docs/components/actions/use-context-menu.md +3 -3
  660. package/docs/components/content/ActiveZone.md +3 -3
  661. package/docs/components/content/Alert.md +3 -3
  662. package/docs/components/content/Avatar.md +3 -3
  663. package/docs/components/content/Card.md +3 -3
  664. package/docs/components/content/Content.md +3 -3
  665. package/docs/components/content/CopyPasteBlock.md +1 -1
  666. package/docs/components/content/CopySnippet.md +3 -3
  667. package/docs/components/content/Disclosure.md +3 -3
  668. package/docs/components/content/Divider.md +3 -3
  669. package/docs/components/content/Footer.md +3 -3
  670. package/docs/components/content/Header.md +3 -3
  671. package/docs/components/content/HotKeys.md +3 -3
  672. package/docs/components/content/InlineInput.md +3 -3
  673. package/docs/components/content/Item.md +3 -3
  674. package/docs/components/content/Layout.md +3 -3
  675. package/docs/components/content/Paragraph.md +3 -3
  676. package/docs/components/content/Placeholder.md +3 -3
  677. package/docs/components/content/Result.md +3 -3
  678. package/docs/components/content/Skeleton.md +3 -3
  679. package/docs/components/content/Title.md +3 -3
  680. package/docs/components/content/Tree.md +3 -3
  681. package/docs/components/data/DataTable.md +3 -3
  682. package/docs/components/data/ItemTable.md +3 -3
  683. package/docs/components/fields/Checkbox.md +3 -3
  684. package/docs/components/fields/ColorInput.md +3 -3
  685. package/docs/components/fields/ColorPicker.md +3 -3
  686. package/docs/components/fields/ColorSwatch.md +3 -3
  687. package/docs/components/fields/ColorSwatchGroup.md +3 -3
  688. package/docs/components/fields/ComboBox.md +3 -3
  689. package/docs/components/fields/CommandTextArea.md +3 -3
  690. package/docs/components/fields/DatePicker.md +3 -3
  691. package/docs/components/fields/FileInput.md +3 -3
  692. package/docs/components/fields/FilterListBox.md +3 -3
  693. package/docs/components/fields/FilterPicker.md +13 -3
  694. package/docs/components/fields/HueSlider.md +3 -3
  695. package/docs/components/fields/ListBox.md +3 -3
  696. package/docs/components/fields/NumberInput.md +3 -3
  697. package/docs/components/fields/PasswordInput.md +3 -3
  698. package/docs/components/fields/PeriodPicker.md +3 -3
  699. package/docs/components/fields/Picker.md +13 -3
  700. package/docs/components/fields/RadioGroup.md +3 -3
  701. package/docs/components/fields/SearchComboBox.md +3 -3
  702. package/docs/components/fields/SearchInput.md +3 -3
  703. package/docs/components/fields/Select.md +13 -3
  704. package/docs/components/fields/Slider.md +3 -3
  705. package/docs/components/fields/Switch.md +3 -3
  706. package/docs/components/fields/TextArea.md +3 -3
  707. package/docs/components/fields/TextInput.md +3 -3
  708. package/docs/components/fields/TextInputMapper.md +3 -3
  709. package/docs/components/form/Field.md +3 -3
  710. package/docs/components/form/Form.md +54 -4
  711. package/docs/components/layout/Board.md +3 -3
  712. package/docs/components/layout/Flex.md +3 -3
  713. package/docs/components/layout/Flow.md +3 -3
  714. package/docs/components/layout/Grid.md +3 -3
  715. package/docs/components/layout/Panel.md +3 -3
  716. package/docs/components/layout/Prefix.md +3 -3
  717. package/docs/components/layout/ResizablePanel.md +3 -3
  718. package/docs/components/layout/Space.md +3 -3
  719. package/docs/components/layout/Suffix.md +3 -3
  720. package/docs/components/navigation/Pagination.md +3 -3
  721. package/docs/components/navigation/Tabs.md +3 -3
  722. package/docs/components/organisms/StatsCard.md +3 -3
  723. package/docs/components/overlays/AlertDialog.md +3 -3
  724. package/docs/components/overlays/Dialog.md +2 -2
  725. package/docs/components/overlays/DialogContainer.md +2 -2
  726. package/docs/components/overlays/DialogForm.md +2 -2
  727. package/docs/components/overlays/DialogTrigger.md +2 -2
  728. package/docs/components/overlays/Tooltip.md +3 -3
  729. package/docs/components/overlays/TooltipProvider.md +3 -3
  730. package/docs/components/overlays/TooltipTrigger.md +3 -3
  731. package/docs/components/status/LoadingAnimation.md +3 -3
  732. package/docs/components/status/Spin.md +3 -3
  733. package/docs/modern-form-migration.md +104 -0
  734. package/docs/modern-form-typecheck.md +35 -0
  735. package/docs/tasty/ai-agents.md +8 -3
  736. package/docs/tasty/debug.md +2 -5
  737. package/docs/tasty/methodology.md +3 -3
  738. package/docs/tasty/pipeline.md +3 -0
  739. package/docs/tasty/runtime-benchmarks.md +105 -68
  740. package/docs/tasty/ssr.md +1 -1
  741. package/docs/tasty/styles.md +43 -11
  742. package/package.json +13 -4
@@ -1 +1 @@
1
- {"version":3,"file":"TabButton.js","names":["Menu","MenuTrigger","mergeProps"],"sources":["../../../../src/components/navigation/Tabs/TabButton.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n ReactElement,\n ReactNode,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n useDraggableItem,\n useFocus,\n useFocusVisible,\n useHover,\n useTab,\n} from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { MoreIcon } from '../../../icons/MoreIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { CubeItemActionProps, ItemAction } from '../../actions/ItemAction';\nimport { ItemActionProvider } from '../../actions/ItemActionContext';\nimport { CubeMenuProps, Menu, MenuTrigger } from '../../actions/Menu';\nimport { useContextMenu } from '../../actions/use-context-menu';\nimport {\n CubeInlineInputRef,\n InlineInput,\n} from '../../content/InlineInput/InlineInput';\nimport { useBoardDragActive } from '../../layout/Board/board-context';\nimport { createMockDragState } from '../../shared/DraggableCollection';\n\nimport { POPOVER_PLACEMENT_BY_TABS_PLACEMENT } from './popover-placement';\nimport { TabContainer, TabElement } from './styled';\nimport { TabDropIndicator } from './TabDropIndicator';\nimport { useTabsContext } from './TabsContext';\nimport { ParsedTab, RADIO_SIZE_MAP } from './types';\n\nimport type { Key, Node } from '@react-types/shared';\nimport type { KeyboardEvent, MouseEvent, PointerEvent } from 'react';\nimport type { DraggableCollectionState } from 'react-stately';\n\n// =============================================================================\n// Event handlers for actions to prevent event propagation to tab button\n// =============================================================================\n\nconst ACTIONS_EVENT_HANDLERS = {\n onClick: (e: MouseEvent) => e.stopPropagation(),\n onPointerDown: (e: PointerEvent) => e.stopPropagation(),\n onPointerUp: (e: PointerEvent) => e.stopPropagation(),\n onMouseDown: (e: MouseEvent) => e.stopPropagation(),\n onMouseUp: (e: MouseEvent) => e.stopPropagation(),\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation();\n }\n },\n};\n\n// Inherit the tab button's pointer cursor — InlineInput's default `cursor: text`\n// hover hint is misleading inside a clickable tab.\nconst INLINE_INPUT_STYLES = { cursor: 'inherit' } as const;\n\n// How long a dragged Board widget must hover a tab header before that tab\n// spring-loads (opens). Long enough to avoid accidental switches while crossing\n// tabs, short enough to feel responsive.\nconst SPRING_LOAD_DELAY = 500;\n\n// =============================================================================\n// Menu Processing Utilities\n// =============================================================================\n\ninterface MenuItemLikeProps {\n children?: ReactNode;\n isDisabled?: boolean;\n theme?: string;\n}\n\n/**\n * Extracts the raw key from a React element, stripping the \".$\" prefix\n * that React adds via Children.map/toArray.\n */\nfunction getRawKey(element: ReactElement): string | null {\n if (element.key == null) return null;\n const keyStr = String(element.key);\n return keyStr.startsWith('.$') ? keyStr.slice(2) : keyStr;\n}\n\n/**\n * Process menu items for predefined action keys (rename, delete).\n * Auto-adds labels and disables items when requirements aren't met.\n */\nfunction processMenuItems(\n children: ReactNode,\n effectiveIsEditable: boolean,\n isDeletable: boolean,\n): ReactNode {\n // Use Children.forEach instead of Children.toArray to avoid React prepending\n // \".$\" to element keys, which breaks selectedKeys matching in Menu.\n const result: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n result.push(child);\n return;\n }\n\n const childKey = getRawKey(child);\n const childProps = child.props as MenuItemLikeProps;\n\n // Handle predefined action keys\n if (childKey === 'rename') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: childProps.children ?? 'Rename',\n isDisabled: childProps.isDisabled ?? !effectiveIsEditable,\n }),\n );\n return;\n }\n if (childKey === 'delete') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: childProps.children ?? 'Delete',\n theme: childProps.theme ?? 'danger',\n isDisabled: childProps.isDisabled ?? !isDeletable,\n }),\n );\n return;\n }\n\n // Recursively process Menu.Section children\n if (childProps.children && typeof childProps.children !== 'string') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: processMenuItems(\n childProps.children,\n effectiveIsEditable,\n isDeletable,\n ),\n }),\n );\n return;\n }\n\n result.push(child);\n });\n\n return result;\n}\n\n/**\n * Check if menu children is empty (null, undefined, or empty fragment)\n */\nfunction isMenuEmpty(menu: ReactNode): boolean {\n if (menu === null || menu === undefined) return true;\n const children = Children.toArray(menu);\n return children.length === 0;\n}\n\n// =============================================================================\n// TabButton Props\n// =============================================================================\n\nexport interface TabButtonProps {\n /** React Aria collection item */\n item: Node<object>;\n /** Parsed tab data */\n tabData: ParsedTab;\n /** Whether this is the last tab (for drop indicator) */\n isLastTab?: boolean;\n}\n\n// =============================================================================\n// TabButton Component\n// =============================================================================\n\n/**\n * Individual tab button component.\n *\n * Uses TabsContext to access shared props, dramatically reducing prop drilling.\n * Handles:\n * - Tab selection and keyboard navigation\n * - Inline title editing\n * - Menu and context menu\n * - Drag-and-drop reordering\n * - Focus and hover states\n */\nexport function TabButton({ item, tabData, isLastTab }: TabButtonProps) {\n const { t } = useI18n();\n const editTabTitleLabel = t('tabs.editTabTitle', 'Edit tab title');\n\n // Get shared context\n const {\n state,\n type,\n size,\n placement,\n autoHideActions: parentAutoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onAction: parentOnAction,\n onDelete,\n dragState,\n dropState,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n } = useTabsContext();\n\n const ref = useRef<HTMLButtonElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const actionsRef = useRef<HTMLDivElement>(null);\n const inlineInputRef = useRef<CubeInlineInputRef>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n // Measure actions width for proper space allocation in Item\n const [actionsWidth, setActionsWidth] = useState(0);\n\n // Drag-and-drop support - only enable when both states are provided\n const isDraggable = !!dragState && !!dropState;\n\n // useDraggableItem must be called unconditionally (Rules of Hooks)\n // When dragState is undefined, we pass a minimal mock state to satisfy the hook\n const mockDragState = useMemo(\n () => createMockDragState(state.collection, state.selectionManager),\n [state.collection, state.selectionManager],\n );\n\n const dragResult = useDraggableItem(\n { key: item.key },\n dragState ?? mockDragState,\n );\n const effectiveDragProps = isDraggable ? dragResult.dragProps : {};\n const isDragging = isDraggable && dragResult.isDragging;\n\n // Controlled state for menu trigger (enables keyboard opening with Shift+F10)\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n // Hover, focus, and focus-visible state handling\n const { hoverProps, isHovered } = useHover({});\n const [isFocused, setIsFocused] = useState(false);\n const { focusProps } = useFocus({ onFocusChange: setIsFocused });\n const { isFocusVisible } = useFocusVisible();\n\n // Suppress focus-visible when restoring focus after editing\n const [suppressFocusVisible, setSuppressFocusVisible] = useState(false);\n const effectiveFocusVisible = isFocusVisible && !suppressFocusVisible;\n\n const isActive = state.selectedKey === item.key;\n const isDisabled = state.disabledKeys.has(item.key);\n const isDeletable = !!onDelete;\n const isEditing = editingKey === item.key;\n\n // Spring-load: when this Tabs sits inside a Board and a widget is being\n // dragged, hovering an inactive tab header for a moment opens it, so the user\n // can drop the widget into (or move it between) tabs. React Aria's `useMove`\n // uses window listeners without pointer capture and the dragged widget is\n // `pointer-events: none`, so the tab header still receives native pointer\n // enter/leave during the drag. `false` outside a Board, so nothing changes.\n const isBoardDragActive = useBoardDragActive();\n const [isDropPending, setIsDropPending] = useState(false);\n const springLoadTimerRef = useRef<number | null>(null);\n\n const clearSpringLoad = useEvent(() => {\n if (springLoadTimerRef.current != null) {\n clearTimeout(springLoadTimerRef.current);\n springLoadTimerRef.current = null;\n }\n setIsDropPending(false);\n });\n\n const handleSpringLoadEnter = useEvent(() => {\n if (!isBoardDragActive || isActive || isDisabled) return;\n if (springLoadTimerRef.current != null) return;\n setIsDropPending(true);\n springLoadTimerRef.current = window.setTimeout(() => {\n springLoadTimerRef.current = null;\n setIsDropPending(false);\n state.setSelectedKey(item.key);\n }, SPRING_LOAD_DELAY);\n });\n\n // Cancel any pending spring-load when the drag ends (or the tab unmounts), so\n // a stale timer can never switch tabs after the drop.\n useEffect(() => {\n if (!isBoardDragActive) clearSpringLoad();\n return clearSpringLoad;\n }, [isBoardDragActive, clearSpringLoad]);\n\n // Compute effective values - Tab-level overrides Tabs-level.\n // Icon-only tabs (no `title`) have nothing to rename, so editing is disabled.\n const effectiveIsEditable =\n (tabData.isEditable ?? parentIsEditable ?? false) && tabData.title != null;\n const effectiveMenu =\n tabData.menu === null ? null : tabData.menu ?? parentMenu;\n const effectiveMenuTriggerProps: Partial<CubeItemActionProps> = {\n ...parentMenuTriggerProps,\n ...tabData.menuTriggerProps,\n };\n const effectiveMenuProps: Partial<CubeMenuProps<object>> = {\n ...parentMenuProps,\n ...tabData.menuProps,\n };\n const effectiveContextMenu =\n tabData.contextMenu ?? parentContextMenu ?? false;\n const effectiveType = type ?? 'default';\n\n const contextMenuEnabled =\n effectiveContextMenu === true || effectiveContextMenu === 'context-only';\n const contextMenuOnly = effectiveContextMenu === 'context-only';\n\n // Inline close when no menu, or context-only (no overflow trigger)\n const showDeleteButton =\n isDeletable && (isMenuEmpty(effectiveMenu) || contextMenuOnly);\n\n // Process menu items for auto-labels and disabled states\n const processedMenu =\n effectiveMenu && !isMenuEmpty(effectiveMenu)\n ? processMenuItems(effectiveMenu, effectiveIsEditable, isDeletable)\n : null;\n\n const itemKeyStr = String(item.key);\n\n const handleDelete = useEvent(() => {\n onDelete?.(itemKeyStr);\n });\n\n const titleString =\n typeof tabData.title === 'string' ? tabData.title : itemKeyStr;\n\n const handleStartEditing = useEvent(() => {\n if (!effectiveIsEditable || isDisabled) return;\n startEditing(itemKeyStr, titleString);\n });\n\n const handleSubmitEditing = useEvent((newTitle: string) => {\n submitEditing(itemKeyStr, newTitle, tabData.onTitleChange);\n // Suppress focus-visible and restore focus to the tab button after editing\n setSuppressFocusVisible(true);\n ref.current?.focus();\n });\n\n const handleCancelEditing = useEvent(() => {\n cancelEditing();\n // Suppress focus-visible and restore focus to the tab button after editing\n setSuppressFocusVisible(true);\n ref.current?.focus();\n });\n\n const handleEditingChange = useEvent((editing: boolean) => {\n if (editing && !isEditing) {\n handleStartEditing();\n }\n });\n\n // Handle menu actions - predefined actions first, then callbacks\n const handleMenuAction = useEvent((action: Key) => {\n // Strip the \".$\" prefix that React adds via Children.toArray/map\n const actionStr = String(action);\n const normalizedAction = actionStr.startsWith('.$')\n ? actionStr.slice(2)\n : actionStr;\n\n // Handle predefined actions first (only if requirements are met)\n // The rename input claims focus through its own `<FocusScope autoFocus>`,\n // and the closing Menu no longer takes focus back to its trigger once an\n // action has moved it (see `MenuTrigger`), so no refocus pass is needed.\n if (normalizedAction === 'rename' && effectiveIsEditable) {\n inlineInputRef.current?.startEditing();\n }\n if (normalizedAction === 'delete' && isDeletable) {\n onDelete?.(itemKeyStr);\n }\n // Call Tab-level onAction first (with normalized action)\n tabData.onAction?.(normalizedAction);\n // Then call Tabs-level onAction with tab key (with normalized action)\n parentOnAction?.(normalizedAction, itemKeyStr);\n });\n\n const menuElement = processedMenu ? (\n <Menu {...effectiveMenuProps} onAction={handleMenuAction}>\n {processedMenu}\n </Menu>\n ) : null;\n\n // Menus follow the same axis-aware popover rule as TabPicker so they always\n // open toward the panel area instead of past the bar's outer edge.\n const menuPopoverPlacement = POPOVER_PLACEMENT_BY_TABS_PLACEMENT[placement];\n\n const contextMenu = useContextMenu<HTMLDivElement, CubeMenuProps<object>>(\n Menu,\n { placement: menuPopoverPlacement },\n {\n ...effectiveMenuProps,\n onAction: handleMenuAction,\n children: processedMenu,\n },\n );\n\n // Keyboard handler for accessibility shortcuts (WAI-ARIA Tabs Pattern)\n const handleKeyDown = useEvent((e: KeyboardEvent) => {\n // Reset focus-visible suppression on any keyboard interaction\n if (suppressFocusVisible) {\n setSuppressFocusVisible(false);\n }\n\n // F2 to start editing (standard rename shortcut)\n if (e.key === 'F2' && effectiveIsEditable && !isDisabled) {\n e.preventDefault();\n e.stopPropagation();\n inlineInputRef.current?.startEditing();\n }\n\n // Shift+F10 opens the menu (standard context menu shortcut)\n if (e.key === 'F10' && e.shiftKey && processedMenu) {\n e.preventDefault();\n e.stopPropagation();\n if (contextMenuOnly) {\n contextMenu.open();\n } else {\n setIsMenuOpen(true);\n }\n }\n\n // Delete key for direct tab deletion (ARIA Tabs pattern optional feature)\n // Skip when editing to allow normal text editing operations\n if (\n (e.key === 'Delete' || e.key === 'Backspace') &&\n isDeletable &&\n !isEditing\n ) {\n e.preventDefault();\n onDelete?.(itemKeyStr);\n }\n });\n\n const mods = useMemo(\n () => ({\n type: effectiveType,\n placement,\n active: isActive,\n deletable: isDeletable,\n disabled: isDisabled,\n editing: isEditing,\n hovered: isHovered,\n focused: isFocused,\n 'focus-visible': effectiveFocusVisible,\n draggable: isDraggable,\n dragging: isDragging,\n 'drop-pending': isDropPending,\n }),\n [\n effectiveType,\n placement,\n isActive,\n isDeletable,\n isDisabled,\n isEditing,\n isHovered,\n isFocused,\n effectiveFocusVisible,\n isDraggable,\n isDragging,\n isDropPending,\n ],\n );\n\n // Scroll active tab into view\n useEffect(() => {\n if (ref.current && isActive) {\n ref.current.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }, [isActive]);\n\n // Overflow trigger (hidden in context-only mode)\n const menuAction =\n menuElement && !contextMenuOnly ? (\n <MenuTrigger\n isOpen={isMenuOpen}\n placement={menuPopoverPlacement}\n onOpenChange={setIsMenuOpen}\n >\n <ItemAction\n tabIndex={-1}\n icon={<MoreIcon />}\n {...effectiveMenuTriggerProps}\n />\n {menuElement}\n </MenuTrigger>\n ) : null;\n\n // Build delete button (only shown when no menu)\n const deleteAction = showDeleteButton ? (\n <ItemAction\n tabIndex={-1}\n icon={<CloseIcon />}\n tooltip={t('tabs.close', 'Close')}\n onPress={handleDelete}\n />\n ) : null;\n\n // Order: custom actions → menu trigger → delete button\n const actions =\n tabData.actions || menuAction || deleteAction ? (\n <>\n {tabData.actions}\n {menuAction}\n {deleteAction}\n </>\n ) : undefined;\n\n // Measure actions width to pass to Item for proper space allocation\n useLayoutEffect(() => {\n if (actions && actionsRef.current) {\n setActionsWidth(Math.round(actionsRef.current.offsetWidth));\n }\n }, [actions]);\n\n // Determine effective size\n const effectiveSize = tabData.size ?? size ?? 'medium';\n const itemSize =\n effectiveType === 'radio'\n ? RADIO_SIZE_MAP[effectiveSize === 'large' ? 'large' : 'medium']\n : effectiveSize;\n\n // Determine Item type prop\n const itemType = 'clear';\n\n // Determine shape - file type uses sharp edges\n const isFileType = effectiveType === 'file';\n const itemShape = isFileType ? 'sharp' : undefined;\n\n // Determine autoHideActions - tab-level overrides parent-level\n const effectiveAutoHideActions =\n tabData.autoHideActions ?? parentAutoHideActions;\n\n // Extract tab-specific props and pass through the rest (style props) to the Item\n const {\n title: _title,\n content: _content,\n key: _key,\n isDisabled: _isDisabled,\n prerender: _prerender,\n keepMounted: _keepMounted,\n size: _size,\n actions: _actions,\n autoHideActions: _autoHideActions,\n isEditable: _isEditable,\n onTitleChange: _onTitleChange,\n menu: _menu,\n menuTriggerProps: _menuTriggerProps,\n menuProps: _menuProps,\n contextMenu: _contextMenu,\n onAction: _onAction,\n tooltip: tabTooltip,\n qa,\n qaVal,\n styles,\n ...itemStyleProps\n } = tabData;\n\n // Render title with editing support if editable\n // Override InlineInput's default `cursor: text` hover hint — in Tabs the\n // title sits inside a clickable tab, so a text caret cursor is misleading.\n //\n // When the title is a plain string we let InlineInput render it directly,\n // which lets the optimistic display kick in (avoids flicker if the parent's\n // `onTitleChange` updates the source asynchronously, e.g. inside a RAF).\n // For ReactNode titles (icons, badges, ...), preserve the original node.\n //\n // For editable tabs, route the tab's `tooltip` prop through InlineInput so\n // it owns the truncation + tooltip behaviour (and we pass `tooltip={false}`\n // to `TabElement` below to avoid double tooltips).\n const renderTitleDisplay =\n typeof tabData.title === 'string' ? undefined : () => tabData.title;\n const titleContent = effectiveIsEditable ? (\n <InlineInput\n ref={inlineInputRef}\n value={titleString}\n isEditing={isEditing}\n isDisabled={isDisabled}\n keyboardActivation={false}\n aria-label={editTabTitleLabel}\n styles={INLINE_INPUT_STYLES}\n renderDisplay={renderTitleDisplay}\n tooltip={tabTooltip ?? true}\n onEditingChange={handleEditingChange}\n onSubmit={handleSubmitEditing}\n onCancel={handleCancelEditing}\n />\n ) : (\n tabData.title\n );\n\n // Use the hook's targetRef when context menu is enabled\n const effectiveContainerRef =\n contextMenuEnabled && processedMenu ? contextMenu.targetRef : containerRef;\n\n // ARIA: indicate popup menu presence\n const ariaProps = processedMenu ? { 'aria-haspopup': 'menu' as const } : {};\n\n // Mods for TabContainer\n const containerMods = {\n ...mods,\n 'auto-hide-actions': effectiveAutoHideActions,\n };\n\n return (\n <TabContainer\n ref={effectiveContainerRef}\n data-size={itemSize}\n mods={containerMods}\n tokens={{ '$actions-width': `${actionsWidth}px` }}\n {...effectiveDragProps}\n >\n {/* Drop indicator before this tab */}\n {isDraggable && dropState && (\n <TabDropIndicator\n target={{ type: 'item', key: item.key, dropPosition: 'before' }}\n dropState={dropState}\n position=\"before\"\n />\n )}\n <TabElement\n preserveActionsSpace\n autoHideActions={effectiveAutoHideActions}\n as=\"button\"\n {...mergeProps(tabProps, hoverProps, focusProps, {\n onKeyDown: handleKeyDown,\n onPointerEnter: handleSpringLoadEnter,\n onPointerLeave: clearSpringLoad,\n })}\n {...ariaProps}\n {...itemStyleProps}\n ref={ref}\n qa={qa ?? `Tab-${String(item.key)}`}\n qaVal={qaVal}\n styles={styles}\n mods={mods}\n isSelected={isActive}\n isDisabled={isDisabled}\n size={itemSize}\n type={itemType}\n shape={itemShape}\n actions={actions ? true : undefined}\n tooltip={effectiveIsEditable ? false : tabTooltip}\n >\n {titleContent}\n </TabElement>\n {/* Actions rendered outside the button for accessibility */}\n {actions && (\n <div\n ref={actionsRef}\n data-element=\"Actions\"\n {...ACTIONS_EVENT_HANDLERS}\n >\n <ItemActionProvider\n type={itemType}\n theme=\"default\"\n isDisabled={isDisabled}\n >\n {actions}\n </ItemActionProvider>\n </div>\n )}\n {contextMenuEnabled && processedMenu && contextMenu.rendered}\n {/* Drop indicator after the last tab */}\n {isDraggable && dropState && isLastTab && (\n <TabDropIndicator\n target={{ type: 'item', key: item.key, dropPosition: 'after' }}\n dropState={dropState}\n position=\"after\"\n />\n )}\n </TabContainer>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TabButton.js","names":["Menu","MenuTrigger","mergeProps"],"sources":["../../../../src/components/navigation/Tabs/TabButton.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n useDraggableItem,\n useFocus,\n useFocusVisible,\n useHover,\n useTab,\n} from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { MoreIcon } from '../../../icons/MoreIcon';\nimport { mergeProps } from '../../../utils/react';\nimport { CubeItemActionProps, ItemAction } from '../../actions/ItemAction';\nimport { ItemActionsWrapper } from '../../actions/ItemActionsWrapper';\nimport { CubeMenuProps, Menu, MenuTrigger } from '../../actions/Menu';\nimport { useContextMenu } from '../../actions/use-context-menu';\nimport {\n CubeInlineInputRef,\n InlineInput,\n} from '../../content/InlineInput/InlineInput';\nimport { useBoardDragActive } from '../../layout/Board/board-context';\nimport { createMockDragState } from '../../shared/DraggableCollection';\n\nimport { POPOVER_PLACEMENT_BY_TABS_PLACEMENT } from './popover-placement';\nimport { TabContainer, TabElement } from './styled';\nimport { TabDropIndicator } from './TabDropIndicator';\nimport { useTabsContext } from './TabsContext';\nimport { ParsedTab, RADIO_SIZE_MAP } from './types';\n\nimport type { Key, Node } from '@react-types/shared';\nimport type { KeyboardEvent, MouseEvent, PointerEvent } from 'react';\nimport type { DraggableCollectionState } from 'react-stately';\n\n// =============================================================================\n// Event handlers for actions to prevent event propagation to tab button\n// =============================================================================\n\nconst ACTIONS_EVENT_HANDLERS = {\n onClick: (e: MouseEvent) => e.stopPropagation(),\n onPointerDown: (e: PointerEvent) => e.stopPropagation(),\n onPointerUp: (e: PointerEvent) => e.stopPropagation(),\n onMouseDown: (e: MouseEvent) => e.stopPropagation(),\n onMouseUp: (e: MouseEvent) => e.stopPropagation(),\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation();\n }\n },\n};\n\n// Inherit the tab button's pointer cursor — InlineInput's default `cursor: text`\n// hover hint is misleading inside a clickable tab.\nconst INLINE_INPUT_STYLES = { cursor: 'inherit' } as const;\n\n// How long a dragged Board widget must hover a tab header before that tab\n// spring-loads (opens). Long enough to avoid accidental switches while crossing\n// tabs, short enough to feel responsive.\nconst SPRING_LOAD_DELAY = 500;\n\n// =============================================================================\n// Menu Processing Utilities\n// =============================================================================\n\ninterface MenuItemLikeProps {\n children?: ReactNode;\n isDisabled?: boolean;\n theme?: string;\n}\n\n/**\n * Extracts the raw key from a React element, stripping the \".$\" prefix\n * that React adds via Children.map/toArray.\n */\nfunction getRawKey(element: ReactElement): string | null {\n if (element.key == null) return null;\n const keyStr = String(element.key);\n return keyStr.startsWith('.$') ? keyStr.slice(2) : keyStr;\n}\n\n/**\n * Process menu items for predefined action keys (rename, delete).\n * Auto-adds labels and disables items when requirements aren't met.\n */\nfunction processMenuItems(\n children: ReactNode,\n effectiveIsEditable: boolean,\n isDeletable: boolean,\n): ReactNode {\n // Use Children.forEach instead of Children.toArray to avoid React prepending\n // \".$\" to element keys, which breaks selectedKeys matching in Menu.\n const result: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n result.push(child);\n return;\n }\n\n const childKey = getRawKey(child);\n const childProps = child.props as MenuItemLikeProps;\n\n // Handle predefined action keys\n if (childKey === 'rename') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: childProps.children ?? 'Rename',\n isDisabled: childProps.isDisabled ?? !effectiveIsEditable,\n }),\n );\n return;\n }\n if (childKey === 'delete') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: childProps.children ?? 'Delete',\n theme: childProps.theme ?? 'danger',\n isDisabled: childProps.isDisabled ?? !isDeletable,\n }),\n );\n return;\n }\n\n // Recursively process Menu.Section children\n if (childProps.children && typeof childProps.children !== 'string') {\n result.push(\n cloneElement(child as ReactElement<MenuItemLikeProps>, {\n children: processMenuItems(\n childProps.children,\n effectiveIsEditable,\n isDeletable,\n ),\n }),\n );\n return;\n }\n\n result.push(child);\n });\n\n return result;\n}\n\n/**\n * Check if menu children is empty (null, undefined, or empty fragment)\n */\nfunction isMenuEmpty(menu: ReactNode): boolean {\n if (menu === null || menu === undefined) return true;\n const children = Children.toArray(menu);\n return children.length === 0;\n}\n\n// =============================================================================\n// TabButton Props\n// =============================================================================\n\nexport interface TabButtonProps {\n /** React Aria collection item */\n item: Node<object>;\n /** Parsed tab data */\n tabData: ParsedTab;\n /** Whether this is the last tab (for drop indicator) */\n isLastTab?: boolean;\n}\n\n// =============================================================================\n// TabButton Component\n// =============================================================================\n\n/**\n * Individual tab button component.\n *\n * Uses TabsContext to access shared props, dramatically reducing prop drilling.\n * Handles:\n * - Tab selection and keyboard navigation\n * - Inline title editing\n * - Menu and context menu\n * - Drag-and-drop reordering\n * - Focus and hover states\n */\nexport function TabButton({ item, tabData, isLastTab }: TabButtonProps) {\n const { t } = useI18n();\n const editTabTitleLabel = t('tabs.editTabTitle', 'Edit tab title');\n\n // Get shared context\n const {\n state,\n type,\n size,\n placement,\n autoHideActions: parentAutoHideActions,\n isEditable: parentIsEditable,\n menu: parentMenu,\n menuTriggerProps: parentMenuTriggerProps,\n menuProps: parentMenuProps,\n contextMenu: parentContextMenu,\n onAction: parentOnAction,\n onDelete,\n dragState,\n dropState,\n editingKey,\n startEditing,\n submitEditing,\n cancelEditing,\n } = useTabsContext();\n\n const ref = useRef<HTMLButtonElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const inlineInputRef = useRef<CubeInlineInputRef>(null);\n const { tabProps } = useTab({ key: item.key }, state, ref);\n\n // Drag-and-drop support - only enable when both states are provided\n const isDraggable = !!dragState && !!dropState;\n\n // useDraggableItem must be called unconditionally (Rules of Hooks)\n // When dragState is undefined, we pass a minimal mock state to satisfy the hook\n const mockDragState = useMemo(\n () => createMockDragState(state.collection, state.selectionManager),\n [state.collection, state.selectionManager],\n );\n\n const dragResult = useDraggableItem(\n { key: item.key },\n dragState ?? mockDragState,\n );\n const effectiveDragProps = isDraggable ? dragResult.dragProps : {};\n const isDragging = isDraggable && dragResult.isDragging;\n\n // Controlled state for menu trigger (enables keyboard opening with Shift+F10)\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n\n // Hover, focus, and focus-visible state handling\n const { hoverProps, isHovered } = useHover({});\n const [isFocused, setIsFocused] = useState(false);\n const { focusProps } = useFocus({ onFocusChange: setIsFocused });\n const { isFocusVisible } = useFocusVisible();\n\n // Suppress focus-visible when restoring focus after editing\n const [suppressFocusVisible, setSuppressFocusVisible] = useState(false);\n const effectiveFocusVisible = isFocusVisible && !suppressFocusVisible;\n\n const isActive = state.selectedKey === item.key;\n const isDisabled = state.disabledKeys.has(item.key);\n const isDeletable = !!onDelete;\n const isEditing = editingKey === item.key;\n\n // Spring-load: when this Tabs sits inside a Board and a widget is being\n // dragged, hovering an inactive tab header for a moment opens it, so the user\n // can drop the widget into (or move it between) tabs. React Aria's `useMove`\n // uses window listeners without pointer capture and the dragged widget is\n // `pointer-events: none`, so the tab header still receives native pointer\n // enter/leave during the drag. `false` outside a Board, so nothing changes.\n const isBoardDragActive = useBoardDragActive();\n const [isDropPending, setIsDropPending] = useState(false);\n const springLoadTimerRef = useRef<number | null>(null);\n\n const clearSpringLoad = useEvent(() => {\n if (springLoadTimerRef.current != null) {\n clearTimeout(springLoadTimerRef.current);\n springLoadTimerRef.current = null;\n }\n setIsDropPending(false);\n });\n\n const handleSpringLoadEnter = useEvent(() => {\n if (!isBoardDragActive || isActive || isDisabled) return;\n if (springLoadTimerRef.current != null) return;\n setIsDropPending(true);\n springLoadTimerRef.current = window.setTimeout(() => {\n springLoadTimerRef.current = null;\n setIsDropPending(false);\n state.setSelectedKey(item.key);\n }, SPRING_LOAD_DELAY);\n });\n\n // Cancel any pending spring-load when the drag ends (or the tab unmounts), so\n // a stale timer can never switch tabs after the drop.\n useEffect(() => {\n if (!isBoardDragActive) clearSpringLoad();\n return clearSpringLoad;\n }, [isBoardDragActive, clearSpringLoad]);\n\n // Compute effective values - Tab-level overrides Tabs-level.\n // Icon-only tabs (no `title`) have nothing to rename, so editing is disabled.\n const effectiveIsEditable =\n (tabData.isEditable ?? parentIsEditable ?? false) && tabData.title != null;\n const effectiveMenu =\n tabData.menu === null ? null : tabData.menu ?? parentMenu;\n const effectiveMenuTriggerProps: Partial<CubeItemActionProps> = {\n ...parentMenuTriggerProps,\n ...tabData.menuTriggerProps,\n };\n const effectiveMenuProps: Partial<CubeMenuProps<object>> = {\n ...parentMenuProps,\n ...tabData.menuProps,\n };\n const effectiveContextMenu =\n tabData.contextMenu ?? parentContextMenu ?? false;\n const effectiveType = type ?? 'default';\n\n const contextMenuEnabled =\n effectiveContextMenu === true || effectiveContextMenu === 'context-only';\n const contextMenuOnly = effectiveContextMenu === 'context-only';\n\n // Inline close when no menu, or context-only (no overflow trigger)\n const showDeleteButton =\n isDeletable && (isMenuEmpty(effectiveMenu) || contextMenuOnly);\n\n // Process menu items for auto-labels and disabled states\n const processedMenu =\n effectiveMenu && !isMenuEmpty(effectiveMenu)\n ? processMenuItems(effectiveMenu, effectiveIsEditable, isDeletable)\n : null;\n\n const itemKeyStr = String(item.key);\n\n const handleDelete = useEvent(() => {\n onDelete?.(itemKeyStr);\n });\n\n const titleString =\n typeof tabData.title === 'string' ? tabData.title : itemKeyStr;\n\n const handleStartEditing = useEvent(() => {\n if (!effectiveIsEditable || isDisabled) return;\n startEditing(itemKeyStr, titleString);\n });\n\n const handleSubmitEditing = useEvent((newTitle: string) => {\n submitEditing(itemKeyStr, newTitle, tabData.onTitleChange);\n // Suppress focus-visible and restore focus to the tab button after editing\n setSuppressFocusVisible(true);\n ref.current?.focus();\n });\n\n const handleCancelEditing = useEvent(() => {\n cancelEditing();\n // Suppress focus-visible and restore focus to the tab button after editing\n setSuppressFocusVisible(true);\n ref.current?.focus();\n });\n\n const handleEditingChange = useEvent((editing: boolean) => {\n if (editing && !isEditing) {\n handleStartEditing();\n }\n });\n\n // Handle menu actions - predefined actions first, then callbacks\n const handleMenuAction = useEvent((action: Key) => {\n // Strip the \".$\" prefix that React adds via Children.toArray/map\n const actionStr = String(action);\n const normalizedAction = actionStr.startsWith('.$')\n ? actionStr.slice(2)\n : actionStr;\n\n // Handle predefined actions first (only if requirements are met)\n // The rename input claims focus through its own `<FocusScope autoFocus>`,\n // and the closing Menu no longer takes focus back to its trigger once an\n // action has moved it (see `MenuTrigger`), so no refocus pass is needed.\n if (normalizedAction === 'rename' && effectiveIsEditable) {\n inlineInputRef.current?.startEditing();\n }\n if (normalizedAction === 'delete' && isDeletable) {\n onDelete?.(itemKeyStr);\n }\n // Call Tab-level onAction first (with normalized action)\n tabData.onAction?.(normalizedAction);\n // Then call Tabs-level onAction with tab key (with normalized action)\n parentOnAction?.(normalizedAction, itemKeyStr);\n });\n\n const menuElement = processedMenu ? (\n <Menu {...effectiveMenuProps} onAction={handleMenuAction}>\n {processedMenu}\n </Menu>\n ) : null;\n\n // Menus follow the same axis-aware popover rule as TabPicker so they always\n // open toward the panel area instead of past the bar's outer edge.\n const menuPopoverPlacement = POPOVER_PLACEMENT_BY_TABS_PLACEMENT[placement];\n\n const contextMenu = useContextMenu<HTMLDivElement, CubeMenuProps<object>>(\n Menu,\n { placement: menuPopoverPlacement },\n {\n ...effectiveMenuProps,\n onAction: handleMenuAction,\n children: processedMenu,\n },\n );\n\n // Keyboard handler for accessibility shortcuts (WAI-ARIA Tabs Pattern)\n const handleKeyDown = useEvent((e: KeyboardEvent) => {\n // Reset focus-visible suppression on any keyboard interaction\n if (suppressFocusVisible) {\n setSuppressFocusVisible(false);\n }\n\n // F2 to start editing (standard rename shortcut)\n if (e.key === 'F2' && effectiveIsEditable && !isDisabled) {\n e.preventDefault();\n e.stopPropagation();\n inlineInputRef.current?.startEditing();\n }\n\n // Shift+F10 opens the menu (standard context menu shortcut)\n if (e.key === 'F10' && e.shiftKey && processedMenu) {\n e.preventDefault();\n e.stopPropagation();\n if (contextMenuOnly) {\n contextMenu.open();\n } else {\n setIsMenuOpen(true);\n }\n }\n\n // Delete key for direct tab deletion (ARIA Tabs pattern optional feature)\n // Skip when editing to allow normal text editing operations\n if (\n (e.key === 'Delete' || e.key === 'Backspace') &&\n isDeletable &&\n !isEditing\n ) {\n e.preventDefault();\n onDelete?.(itemKeyStr);\n }\n });\n\n const mods = useMemo(\n () => ({\n type: effectiveType,\n placement,\n active: isActive,\n deletable: isDeletable,\n disabled: isDisabled,\n editing: isEditing,\n hovered: isHovered,\n focused: isFocused,\n 'focus-visible': effectiveFocusVisible,\n draggable: isDraggable,\n dragging: isDragging,\n 'drop-pending': isDropPending,\n }),\n [\n effectiveType,\n placement,\n isActive,\n isDeletable,\n isDisabled,\n isEditing,\n isHovered,\n isFocused,\n effectiveFocusVisible,\n isDraggable,\n isDragging,\n isDropPending,\n ],\n );\n\n // Scroll active tab into view\n useEffect(() => {\n if (ref.current && isActive) {\n ref.current.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n }, [isActive]);\n\n // Overflow trigger (hidden in context-only mode)\n const menuAction =\n menuElement && !contextMenuOnly ? (\n <MenuTrigger\n isOpen={isMenuOpen}\n placement={menuPopoverPlacement}\n onOpenChange={setIsMenuOpen}\n >\n <ItemAction\n tabIndex={-1}\n icon={<MoreIcon />}\n {...effectiveMenuTriggerProps}\n />\n {menuElement}\n </MenuTrigger>\n ) : null;\n\n // Build delete button (only shown when no menu)\n const deleteAction = showDeleteButton ? (\n <ItemAction\n tabIndex={-1}\n icon={<CloseIcon />}\n tooltip={t('tabs.close', 'Close')}\n onPress={handleDelete}\n />\n ) : null;\n\n // Order: custom actions → menu trigger → delete button\n const actions =\n tabData.actions || menuAction || deleteAction ? (\n <>\n {tabData.actions}\n {menuAction}\n {deleteAction}\n </>\n ) : undefined;\n\n // Determine effective size\n const effectiveSize = tabData.size ?? size ?? 'medium';\n const itemSize =\n effectiveType === 'radio'\n ? RADIO_SIZE_MAP[effectiveSize === 'large' ? 'large' : 'medium']\n : effectiveSize;\n\n // Determine Item type prop\n const itemType = 'clear';\n\n // Determine shape - file type uses sharp edges\n const isFileType = effectiveType === 'file';\n const itemShape = isFileType ? 'sharp' : undefined;\n\n // Determine autoHideActions - tab-level overrides parent-level\n const effectiveAutoHideActions =\n tabData.autoHideActions ?? parentAutoHideActions;\n\n // Extract tab-specific props and pass through the rest (style props) to the Item\n const {\n title: _title,\n content: _content,\n key: _key,\n isDisabled: _isDisabled,\n prerender: _prerender,\n keepMounted: _keepMounted,\n size: _size,\n actions: _actions,\n autoHideActions: _autoHideActions,\n isEditable: _isEditable,\n onTitleChange: _onTitleChange,\n menu: _menu,\n menuTriggerProps: _menuTriggerProps,\n menuProps: _menuProps,\n contextMenu: _contextMenu,\n onAction: _onAction,\n tooltip: tabTooltip,\n qa,\n qaVal,\n styles,\n ...itemStyleProps\n } = tabData;\n\n // Render title with editing support if editable\n // Override InlineInput's default `cursor: text` hover hint — in Tabs the\n // title sits inside a clickable tab, so a text caret cursor is misleading.\n //\n // When the title is a plain string we let InlineInput render it directly,\n // which lets the optimistic display kick in (avoids flicker if the parent's\n // `onTitleChange` updates the source asynchronously, e.g. inside a RAF).\n // For ReactNode titles (icons, badges, ...), preserve the original node.\n //\n // For editable tabs, route the tab's `tooltip` prop through InlineInput so\n // it owns the truncation + tooltip behaviour (and we pass `tooltip={false}`\n // to `TabElement` below to avoid double tooltips).\n const renderTitleDisplay =\n typeof tabData.title === 'string' ? undefined : () => tabData.title;\n const titleContent = effectiveIsEditable ? (\n <InlineInput\n ref={inlineInputRef}\n value={titleString}\n isEditing={isEditing}\n isDisabled={isDisabled}\n keyboardActivation={false}\n aria-label={editTabTitleLabel}\n styles={INLINE_INPUT_STYLES}\n renderDisplay={renderTitleDisplay}\n tooltip={tabTooltip ?? true}\n onEditingChange={handleEditingChange}\n onSubmit={handleSubmitEditing}\n onCancel={handleCancelEditing}\n />\n ) : (\n tabData.title\n );\n\n // Use the hook's targetRef when context menu is enabled\n const effectiveContainerRef =\n contextMenuEnabled && processedMenu ? contextMenu.targetRef : containerRef;\n\n // ARIA: indicate popup menu presence\n const ariaProps = processedMenu ? { 'aria-haspopup': 'menu' as const } : {};\n\n // Mods for TabContainer\n const containerMods = {\n ...mods,\n 'auto-hide-actions': effectiveAutoHideActions,\n };\n\n return (\n <TabContainer\n ref={effectiveContainerRef}\n data-size={itemSize}\n mods={containerMods}\n {...effectiveDragProps}\n >\n {/* Drop indicator before this tab */}\n {isDraggable && dropState && (\n <TabDropIndicator\n target={{ type: 'item', key: item.key, dropPosition: 'before' }}\n dropState={dropState}\n position=\"before\"\n />\n )}\n <ItemActionsWrapper\n preserveActionsSpace\n // The active tab keeps its actions on show. Everywhere else the wrapper\n // reveals them on hover or focus, which is the same set of triggers the\n // hand-rolled run used, minus the `active` case it had to spell out in\n // CSS because it had no way to ask for it.\n autoHideActions={effectiveAutoHideActions && !isActive}\n type={itemType}\n theme=\"default\"\n size={itemSize}\n isDisabled={isDisabled}\n mods={mods}\n actions={actions}\n // The container carries the drag handlers, so a press on an action would\n // start a drag if it were allowed to reach it.\n actionsProps={ACTIONS_EVENT_HANDLERS}\n >\n {({ showActions }) => (\n <TabElement\n insideWrapper\n preserveActionsSpace\n showActions={showActions}\n autoHideActions={effectiveAutoHideActions}\n as=\"button\"\n {...mergeProps(tabProps, hoverProps, focusProps, {\n onKeyDown: handleKeyDown,\n onPointerEnter: handleSpringLoadEnter,\n onPointerLeave: clearSpringLoad,\n })}\n {...ariaProps}\n {...itemStyleProps}\n ref={ref}\n qa={qa ?? `Tab-${String(item.key)}`}\n qaVal={qaVal}\n styles={styles}\n mods={mods}\n isSelected={isActive}\n isDisabled={isDisabled}\n size={itemSize}\n type={itemType}\n shape={itemShape}\n actions={actions ? true : undefined}\n tooltip={effectiveIsEditable ? false : tabTooltip}\n >\n {titleContent}\n </TabElement>\n )}\n </ItemActionsWrapper>\n {contextMenuEnabled && processedMenu && contextMenu.rendered}\n {/* Drop indicator after the last tab */}\n {isDraggable && dropState && isLastTab && (\n <TabDropIndicator\n target={{ type: 'item', key: item.key, dropPosition: 'after' }}\n dropState={dropState}\n position=\"after\"\n />\n )}\n </TabContainer>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { DropIndicatorElement } from "./styled.js";
3
3
  import { useTabsContext } from "./TabsContext.js";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { TabPanelElement } from "./styled.js";
3
3
  import { useEffect, useMemo, useRef } from "react";
4
4
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { CloseIcon } from "../../../icons/CloseIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _ItemButton } from "../../actions/ItemButton/ItemButton.js";
3
3
  import { useOptionalTabsContext } from "./TabsContext.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/popover-placement.ts
3
3
  /**
4
4
  * Maps the parent Tabs `placement` to the popover placement for menus and
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _Item } from "../../content/Item/Item.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
 
@@ -349,34 +349,6 @@ const TabContainer = tasty({ styles: {
349
349
  "": "default",
350
350
  draggable: "grab",
351
351
  dragging: "grabbing"
352
- },
353
- $size: {
354
- "": "$size-md",
355
- "size=xsmall": "$size-xs",
356
- "size=small": "$size-sm",
357
- "size=medium": "$size-md",
358
- "size=large": "$size-lg",
359
- "size=xlarge": "$size-xl"
360
- },
361
- Actions: {
362
- $: ">",
363
- position: "absolute",
364
- inset: "1bw 1bw auto auto",
365
- display: "flex",
366
- gap: "1bw",
367
- placeItems: "center",
368
- placeContent: "center end",
369
- pointerEvents: "auto",
370
- height: "min ($size - 2bw)",
371
- padding: "0 $side-padding",
372
- opacity: {
373
- "": 1,
374
- "auto-hide-actions": 0,
375
- "auto-hide-actions & (active | :hover | :focus-within | :has([data-pressed]))": 1
376
- },
377
- transition: "opacity $transition",
378
- "$action-size": "min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))",
379
- "$side-padding": "(($size - $action-size - 2bw) / 2)"
380
352
  }
381
353
  } });
382
354
  const DropIndicatorElement = tasty({ styles: {
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","names":["Item"],"sources":["../../../../src/components/navigation/Tabs/styled.ts"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { Item } from '../../content/Item';\n\n// =============================================================================\n// Main Tabs Container — flex wrapper holding the tab Bar and the panels.\n// `placement` mod drives `flex-direction` so DOM order stays \"bar then panels\"\n// and visual order is controlled with `column / column-reverse / row / row-reverse`.\n// =============================================================================\n\nexport const TabsElement = tasty({\n styles: {\n display: 'flex',\n flow: {\n '': 'column',\n 'placement=bottom': 'column-reverse',\n 'placement=left': 'row',\n 'placement=right': 'row-reverse',\n },\n // Participate in parent flex layouts; allow shrinking on both axes so we\n // never force the parent into overflow. The Bar keeps `flex-shrink: 0`,\n // which makes the practical minimum of the wrapper along the main axis\n // equal to the tablist's intrinsic size. When there are no panels the\n // wrapper has only the Bar inside it, so we lock its sizing to the Bar's\n // intrinsic size — matching the pre-wrapper behavior of a panel-less Tabs.\n flexShrink: { '': 0, 'has-panels': 1 },\n flexGrow: { '': 0, 'has-panels': 1 },\n width: 'min 0',\n height: 'min 0',\n overflow: 'visible',\n\n // ============================================\n // Bar — the tab strip (Prefix + ScrollWrapper + Suffix).\n // ============================================\n Bar: {\n $: '>',\n display: 'flex',\n flow: {\n '': 'row',\n 'placement=left | placement=right': 'column',\n },\n placeItems: {\n '': 'end stretch',\n 'placement=bottom': 'start stretch',\n 'placement=left': 'stretch end',\n 'placement=right': 'stretch start',\n 'type=radio | type=file': 'stretch',\n },\n overflow: 'visible',\n border: {\n '': 0,\n '(type=default | type=file | type=narrow) & has-panels': 'bottom',\n '(type=default | type=file | type=narrow) & has-panels & placement=bottom':\n 'top',\n '(type=default | type=file | type=narrow) & has-panels & placement=left':\n 'right',\n '(type=default | type=file | type=narrow) & has-panels & placement=right':\n 'left',\n },\n // Bar sizing — always follow the outer wrapper along the main axis so\n // `width` / `height` props on `<Tabs>` apply to the strip as they did\n // before the wrapper was introduced.\n // - horizontal placements: main-axis = wrapper width (100%), cross-axis intrinsic (auto)\n // - vertical placements: main-axis = wrapper height (100%), cross-axis intrinsic (auto / max-content for radio)\n width: {\n '': '100%',\n 'placement=left | placement=right': 'auto',\n 'type=radio & (placement=left | placement=right)': 'max-content',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': '100%',\n 'type=radio & (placement=left | placement=right)': 'max-content',\n },\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n radius: {\n '': 0,\n 'type=radio': '1cr',\n },\n fill: {\n '': '#clear',\n 'type=radio': '#surface-4',\n },\n // Never let the Bar shrink/grow within the outer wrapper — this is what\n // gives the wrapper its effective \"tablist-size minimum\" on the main axis.\n flexShrink: 0,\n flexGrow: 0,\n\n $transition: '$tab-transition',\n '$tab-indicator-size': {\n '': '2bw',\n 'size=large': '1ow',\n },\n },\n\n // ============================================\n // Prefix — slot before the scroll area.\n // ============================================\n Prefix: {\n $: '> Bar >',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 0 .5x 1x',\n 'type=default & (placement=left | placement=right)': '1x .5x 0 .5x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n 'type=file & (placement=left | placement=right)': 'bottom',\n },\n },\n\n // ============================================\n // Suffix — slot after the scroll area.\n // ============================================\n Suffix: {\n $: '> Bar >',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 1x .5x 0',\n 'type=default & (placement=left | placement=right)': '0 .5x 1x .5x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'left',\n 'type=file & (placement=left | placement=right)': 'top',\n },\n },\n\n // Wrapper for scroll area and scrollbar (scrollbar is positioned relative to this)\n ScrollWrapper: {\n $: '> Bar >',\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexShrink: 1,\n width: {\n '': 'min 0',\n 'placement=left | placement=right': 'auto',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': 'min 0',\n },\n overflow: {\n '': 'hidden',\n 'type=radio': 'visible',\n },\n },\n\n Scroll: {\n $: '> Bar > ScrollWrapper >',\n position: 'relative',\n display: 'block',\n overflow: {\n '': 'auto hidden',\n 'placement=left | placement=right': 'hidden auto',\n 'type=radio': 'visible',\n },\n scrollbar: 'none',\n flexGrow: 1,\n width: '100%',\n // Add padding/margin for radio type to allow shadow to render outside\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n margin: {\n '': 0,\n 'type=radio': '-.5x',\n },\n // Multi-group fade with axis-neutral color tokens for smooth transitions.\n // Direction flips based on placement.\n fade: {\n '': '2x left #tabs-fade-start #black, 2x right #tabs-fade-end #black',\n 'placement=left | placement=right':\n '2x top #tabs-fade-start #black, 2x bottom #tabs-fade-end #black',\n },\n // ##name outputs --name-color (literal CSS property name)\n transition:\n '##tabs-fade-start $tab-transition ease-in, ##tabs-fade-end $tab-transition ease-in',\n\n // Transition transparent color: opaque (no fade) -> transparent (fade visible)\n '#tabs-fade-start': {\n '': '#black',\n 'fade-start': '#black.0',\n },\n '#tabs-fade-end': {\n '': '#black',\n 'fade-end': '#black.0',\n },\n },\n\n TabList: {\n $: '> Bar > ScrollWrapper > Scroll >',\n position: 'relative',\n display: 'grid',\n // `border-box` is required because we set `width: 100%` for vertical\n // placements AND apply padding. With the default `content-box`, the\n // TabList's outer box would be `100% + padding × 2` and overflow Scroll\n // horizontally — and the side selection indicator (positioned at\n // `right: 0` / `left: 0` of TabList) would land in that overflow region\n // and get clipped by Scroll's `overflow-x: hidden`.\n boxSizing: 'border-box',\n flow: {\n '': 'column',\n 'placement=left | placement=right': 'row',\n },\n gridAutoColumns: {\n '': 'auto',\n 'type=radio': '1fr',\n },\n gridAutoRows: {\n '': 'auto',\n 'type=radio & (placement=left | placement=right)': '1fr',\n },\n gap: {\n '': 0,\n 'type=default': '1x',\n 'type=narrow': '2x',\n 'type=radio': '.5x',\n // Tabs stack vertically — collapse the gap so the strip reads as a\n // single column. `narrow` is coerced to `default` in vertical, but we\n // keep the rule defensive in case the styled element is consumed\n // directly with a `type=narrow` mod set.\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '1bw',\n },\n placeContent: 'start',\n overflow: 'visible',\n width: {\n '': 'max-content',\n 'type=radio': '100%',\n 'placement=left | placement=right': '100%',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': 'max-content',\n },\n // For vertical default/narrow we apply `$tablist-padding` on ALL sides\n // (instead of only the parallel axis) so the breathing room around the\n // tabs and the selection indicator can be tuned via the `tabListPadding`\n // prop — the same prop that controls horizontal start/end padding.\n padding: {\n '': '0 $tablist-padding',\n 'placement=left | placement=right': '$tablist-padding 0',\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '$tablist-padding',\n },\n\n // Default `$tablist-padding` per type. Vertical default/narrow gets the\n // smaller `.5x` default since it applies to all four sides; the\n // `tabListPadding` prop overrides this via inline CSS variable.\n '$tablist-padding': {\n '': '0',\n 'type=default | type=narrow': '1x',\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '.5x',\n },\n },\n\n // Size variable for actions (if ItemAction is used instead of TabsAction)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Custom tiny scrollbar — positioned relative to ScrollWrapper. Switches\n // edges and dimensions based on placement; the driving CSS custom\n // properties come from `useTinyScrollbar.handleHStyle` / `handleVStyle`.\n Scrollbar: {\n $: '> Bar > ScrollWrapper >',\n position: 'absolute',\n bottom: {\n '': '1px',\n 'placement=left | placement=right': 'auto',\n },\n top: {\n '': 'auto',\n 'placement=left | placement=right': '$scrollbar-v-top',\n },\n left: {\n '': '$scrollbar-h-left',\n 'placement=left | placement=right': 'auto',\n },\n right: {\n '': 'auto',\n 'placement=left | placement=right': '1px',\n },\n height: {\n '': '1ow',\n 'placement=left | placement=right': '$scrollbar-v-height',\n },\n width: {\n '': '$scrollbar-h-width',\n 'placement=left | placement=right': '1ow',\n },\n radius: 'round',\n fill: '#dark.35',\n opacity: {\n '': 0,\n 'focused | scrolling': 1,\n },\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n },\n },\n});\n\n// =============================================================================\n// Tab Button (extends Item)\n// =============================================================================\n\nexport const TabElement = tasty(Item, {\n as: 'button',\n styles: {\n radius: {\n '': false,\n 'type=radio | type=default': true,\n 'type=narrow': 'top',\n 'type=narrow & placement=bottom': 'bottom',\n 'type=narrow & placement=left': 'left',\n 'type=narrow & placement=right': 'right',\n },\n color: {\n '': '#dark-02',\n 'type=narrow & (hovered & !selected)': '#primary-text',\n '(type=default | type=narrow) & selected': '#primary-text',\n disabled: '#disabled-surface-text',\n },\n fill: {\n '': '#clear',\n 'hovered & !type=narrow': '#dark.03',\n 'type=file': '#surface-3',\n 'type=file & hovered': '#surface-3.5',\n 'type=radio & hovered': '#surface.5',\n '(type=file | type=radio) & selected': '#surface',\n // Spring-load hint: a widget is hovering this tab and it is about to open.\n 'drop-pending': '#primary.10',\n },\n border: {\n '': '#clear',\n 'type=file': '0 #clear',\n },\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n },\n shadow: {\n '': '$selection-shadow',\n 'focused & focus-visible':\n 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n editing: 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n 'type=radio & selected': '$item-shadow',\n 'type=radio & selected & focused & focus-visible':\n '$item-shadow, inset 0 0 0 1bw #primary-text',\n },\n outline: 'none',\n placeContent: {\n // extend\n 'type=radio': 'center',\n },\n gridTemplate: {\n // extend\n 'type=radio':\n '\"icon prefix label suffix rightIcon actions\" auto / max-content max-content max-content max-content max-content max-content',\n },\n // File-type selection indicator: an inset shadow on the edge that faces\n // the panel area. Flips with placement so the highlight always sits on\n // the edge adjacent to the content.\n '$selection-shadow': {\n '': 'inset 0 0 0 0 #primary',\n 'type=file & selected': 'inset 0 (-1 * $tab-indicator-size) 0 0 #primary',\n 'type=file & selected & placement=bottom':\n 'inset 0 $tab-indicator-size 0 0 #primary',\n 'type=file & selected & placement=left':\n 'inset (-1 * $tab-indicator-size) 0 0 0 #primary',\n 'type=file & selected & placement=right':\n 'inset $tab-indicator-size 0 0 0 #primary',\n '!type=file': 'inset 0 0 0 0 #primary.0',\n },\n // Collapse horizontal padding for narrow type\n '$label-padding-left': {\n '': '$inline-padding',\n 'has-start-content': 0,\n 'type=narrow': 0,\n },\n '$label-padding-right': {\n '': '$inline-padding',\n 'has-end-content': 0,\n 'type=narrow': 0,\n },\n Label: {\n placeSelf: {\n '': 'center start',\n 'type=radio': 'center start',\n 'type=radio & !has-prefix & !has-suffix & !has-icon & !has-right-icon':\n 'center',\n },\n },\n Actions: {\n transition: false,\n },\n },\n});\n\n// =============================================================================\n// Tab Container (wrapper for tab + actions)\n// =============================================================================\n\nexport const TabContainer = tasty({\n styles: {\n position: 'relative',\n display: 'grid',\n margin: {\n '': 0,\n // Horizontal strip: .5x top/bottom creates space between the tab and the\n // bottom-edge indicator (which sits at `bottom: 0` of TabList).\n 'type=default': '.5x 0',\n // Vertical strip: the breathing room around the tabs and the gap from\n // the side indicator is provided by the TabList's own `.5x` padding —\n // don't add per-tab horizontal margin on top of it.\n 'type=default & (placement=left | placement=right)': 0,\n },\n border: {\n '': 0,\n 'type=file': 'right',\n 'type=file & (placement=left | placement=right)': 'bottom',\n },\n cursor: {\n '': 'default',\n draggable: 'grab',\n dragging: 'grabbing',\n },\n\n // Size variable for actions (same as ItemButton's ActionsWrapper)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Actions rendered outside the button for accessibility\n Actions: {\n $: '>',\n position: 'absolute',\n inset: '1bw 1bw auto auto',\n display: 'flex',\n gap: '1bw',\n placeItems: 'center',\n placeContent: 'center end',\n pointerEvents: 'auto',\n height: 'min ($size - 2bw)',\n padding: '0 $side-padding',\n // Simple CSS opacity for show-on-hover\n opacity: {\n '': 1,\n 'auto-hide-actions': 0,\n 'auto-hide-actions & (active | :hover | :focus-within | :has([data-pressed]))': 1,\n },\n transition: 'opacity $transition',\n // Size variables (same as Item)\n '$action-size': 'min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))',\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n },\n },\n});\n\n// =============================================================================\n// Drop Indicator for Drag-and-Drop\n// Geometry flips based on placement: a vertical bar between horizontal tabs,\n// a horizontal bar between vertical tabs. `before`/`after` mods come from\n// `TabDropIndicator` and decide which edge inset is applied.\n// =============================================================================\n\nexport const DropIndicatorElement = tasty({\n styles: {\n zIndex: 10,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: {\n '': 0,\n 'drop-target': 1,\n },\n fill: '#primary',\n width: {\n '': '.5x',\n 'placement=left | placement=right': 'auto',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': '.5x',\n },\n top: {\n '': 0,\n 'placement=left | placement=right': 'auto',\n '(placement=left | placement=right) & before': '-2px',\n },\n bottom: {\n '': 0,\n 'placement=left | placement=right': 'auto',\n '(placement=left | placement=right) & after': '-2px',\n },\n left: {\n '': 'auto',\n 'before & !(placement=left | placement=right)': '-2px',\n 'placement=left | placement=right': 0,\n },\n right: {\n '': 'auto',\n 'after & !(placement=left | placement=right)': '-2px',\n 'placement=left | placement=right': 0,\n },\n },\n});\n\n// =============================================================================\n// Tab Selection Indicator (for default/narrow type)\n// Position flips with placement; the dynamic axis dimensions (left/width for\n// horizontal, top/height for vertical) are populated via inline `style` from\n// `useTabIndicator` in `Tabs.tsx`.\n// =============================================================================\n\nexport const TabIndicatorElement = tasty({\n styles: {\n position: 'absolute',\n bottom: {\n '': '0',\n 'placement=bottom | placement=left | placement=right': 'auto',\n },\n top: {\n '': 'auto',\n 'placement=bottom': '0',\n },\n left: {\n '': 'auto',\n 'placement=right': '0',\n },\n right: {\n '': 'auto',\n 'placement=left': '0',\n },\n height: {\n '': '$tab-indicator-size',\n 'placement=left | placement=right': 'auto',\n },\n width: {\n '': 'auto',\n 'placement=left | placement=right': '$tab-indicator-size',\n },\n fill: '#primary',\n // Transition all four properties unconditionally — only the two relevant\n // ones change per render, the others stay constant.\n transition:\n 'left $tab-transition ease-in-out, width $tab-transition ease-in-out, top $tab-transition ease-in-out, height $tab-transition ease-in-out',\n pointerEvents: 'none',\n },\n});\n\n// =============================================================================\n// Tab Panel\n// =============================================================================\n\nexport const TabPanelElement = tasty({\n as: 'section',\n styles: {\n display: 'contents',\n hide: {\n '': true,\n active: false,\n },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"styled.js","names":["Item"],"sources":["../../../../src/components/navigation/Tabs/styled.ts"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { Item } from '../../content/Item';\n\n// =============================================================================\n// Main Tabs Container — flex wrapper holding the tab Bar and the panels.\n// `placement` mod drives `flex-direction` so DOM order stays \"bar then panels\"\n// and visual order is controlled with `column / column-reverse / row / row-reverse`.\n// =============================================================================\n\nexport const TabsElement = tasty({\n styles: {\n display: 'flex',\n flow: {\n '': 'column',\n 'placement=bottom': 'column-reverse',\n 'placement=left': 'row',\n 'placement=right': 'row-reverse',\n },\n // Participate in parent flex layouts; allow shrinking on both axes so we\n // never force the parent into overflow. The Bar keeps `flex-shrink: 0`,\n // which makes the practical minimum of the wrapper along the main axis\n // equal to the tablist's intrinsic size. When there are no panels the\n // wrapper has only the Bar inside it, so we lock its sizing to the Bar's\n // intrinsic size — matching the pre-wrapper behavior of a panel-less Tabs.\n flexShrink: { '': 0, 'has-panels': 1 },\n flexGrow: { '': 0, 'has-panels': 1 },\n width: 'min 0',\n height: 'min 0',\n overflow: 'visible',\n\n // ============================================\n // Bar — the tab strip (Prefix + ScrollWrapper + Suffix).\n // ============================================\n Bar: {\n $: '>',\n display: 'flex',\n flow: {\n '': 'row',\n 'placement=left | placement=right': 'column',\n },\n placeItems: {\n '': 'end stretch',\n 'placement=bottom': 'start stretch',\n 'placement=left': 'stretch end',\n 'placement=right': 'stretch start',\n 'type=radio | type=file': 'stretch',\n },\n overflow: 'visible',\n border: {\n '': 0,\n '(type=default | type=file | type=narrow) & has-panels': 'bottom',\n '(type=default | type=file | type=narrow) & has-panels & placement=bottom':\n 'top',\n '(type=default | type=file | type=narrow) & has-panels & placement=left':\n 'right',\n '(type=default | type=file | type=narrow) & has-panels & placement=right':\n 'left',\n },\n // Bar sizing — always follow the outer wrapper along the main axis so\n // `width` / `height` props on `<Tabs>` apply to the strip as they did\n // before the wrapper was introduced.\n // - horizontal placements: main-axis = wrapper width (100%), cross-axis intrinsic (auto)\n // - vertical placements: main-axis = wrapper height (100%), cross-axis intrinsic (auto / max-content for radio)\n width: {\n '': '100%',\n 'placement=left | placement=right': 'auto',\n 'type=radio & (placement=left | placement=right)': 'max-content',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': '100%',\n 'type=radio & (placement=left | placement=right)': 'max-content',\n },\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n radius: {\n '': 0,\n 'type=radio': '1cr',\n },\n fill: {\n '': '#clear',\n 'type=radio': '#surface-4',\n },\n // Never let the Bar shrink/grow within the outer wrapper — this is what\n // gives the wrapper its effective \"tablist-size minimum\" on the main axis.\n flexShrink: 0,\n flexGrow: 0,\n\n $transition: '$tab-transition',\n '$tab-indicator-size': {\n '': '2bw',\n 'size=large': '1ow',\n },\n },\n\n // ============================================\n // Prefix — slot before the scroll area.\n // ============================================\n Prefix: {\n $: '> Bar >',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 0 .5x 1x',\n 'type=default & (placement=left | placement=right)': '1x .5x 0 .5x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'right',\n 'type=file & (placement=left | placement=right)': 'bottom',\n },\n },\n\n // ============================================\n // Suffix — slot after the scroll area.\n // ============================================\n Suffix: {\n $: '> Bar >',\n display: 'flex',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n placeSelf: 'stretch',\n padding: {\n '': 0,\n 'type=default': '.5x 1x .5x 0',\n 'type=default & (placement=left | placement=right)': '0 .5x 1x .5x',\n },\n gap: {\n '': 0,\n 'type=default': '.5x',\n },\n border: {\n '': 0,\n 'type=file': 'left',\n 'type=file & (placement=left | placement=right)': 'top',\n },\n },\n\n // Wrapper for scroll area and scrollbar (scrollbar is positioned relative to this)\n ScrollWrapper: {\n $: '> Bar >',\n position: 'relative',\n display: 'flex',\n flexGrow: 1,\n flexShrink: 1,\n width: {\n '': 'min 0',\n 'placement=left | placement=right': 'auto',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': 'min 0',\n },\n overflow: {\n '': 'hidden',\n 'type=radio': 'visible',\n },\n },\n\n Scroll: {\n $: '> Bar > ScrollWrapper >',\n position: 'relative',\n display: 'block',\n overflow: {\n '': 'auto hidden',\n 'placement=left | placement=right': 'hidden auto',\n 'type=radio': 'visible',\n },\n scrollbar: 'none',\n flexGrow: 1,\n width: '100%',\n // Add padding/margin for radio type to allow shadow to render outside\n padding: {\n '': 0,\n 'type=radio': '.5x',\n },\n margin: {\n '': 0,\n 'type=radio': '-.5x',\n },\n // Multi-group fade with axis-neutral color tokens for smooth transitions.\n // Direction flips based on placement.\n fade: {\n '': '2x left #tabs-fade-start #black, 2x right #tabs-fade-end #black',\n 'placement=left | placement=right':\n '2x top #tabs-fade-start #black, 2x bottom #tabs-fade-end #black',\n },\n // ##name outputs --name-color (literal CSS property name)\n transition:\n '##tabs-fade-start $tab-transition ease-in, ##tabs-fade-end $tab-transition ease-in',\n\n // Transition transparent color: opaque (no fade) -> transparent (fade visible)\n '#tabs-fade-start': {\n '': '#black',\n 'fade-start': '#black.0',\n },\n '#tabs-fade-end': {\n '': '#black',\n 'fade-end': '#black.0',\n },\n },\n\n TabList: {\n $: '> Bar > ScrollWrapper > Scroll >',\n position: 'relative',\n display: 'grid',\n // `border-box` is required because we set `width: 100%` for vertical\n // placements AND apply padding. With the default `content-box`, the\n // TabList's outer box would be `100% + padding × 2` and overflow Scroll\n // horizontally — and the side selection indicator (positioned at\n // `right: 0` / `left: 0` of TabList) would land in that overflow region\n // and get clipped by Scroll's `overflow-x: hidden`.\n boxSizing: 'border-box',\n flow: {\n '': 'column',\n 'placement=left | placement=right': 'row',\n },\n gridAutoColumns: {\n '': 'auto',\n 'type=radio': '1fr',\n },\n gridAutoRows: {\n '': 'auto',\n 'type=radio & (placement=left | placement=right)': '1fr',\n },\n gap: {\n '': 0,\n 'type=default': '1x',\n 'type=narrow': '2x',\n 'type=radio': '.5x',\n // Tabs stack vertically — collapse the gap so the strip reads as a\n // single column. `narrow` is coerced to `default` in vertical, but we\n // keep the rule defensive in case the styled element is consumed\n // directly with a `type=narrow` mod set.\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '1bw',\n },\n placeContent: 'start',\n overflow: 'visible',\n width: {\n '': 'max-content',\n 'type=radio': '100%',\n 'placement=left | placement=right': '100%',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': 'max-content',\n },\n // For vertical default/narrow we apply `$tablist-padding` on ALL sides\n // (instead of only the parallel axis) so the breathing room around the\n // tabs and the selection indicator can be tuned via the `tabListPadding`\n // prop — the same prop that controls horizontal start/end padding.\n padding: {\n '': '0 $tablist-padding',\n 'placement=left | placement=right': '$tablist-padding 0',\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '$tablist-padding',\n },\n\n // Default `$tablist-padding` per type. Vertical default/narrow gets the\n // smaller `.5x` default since it applies to all four sides; the\n // `tabListPadding` prop overrides this via inline CSS variable.\n '$tablist-padding': {\n '': '0',\n 'type=default | type=narrow': '1x',\n '(type=default | type=narrow) & (placement=left | placement=right)':\n '.5x',\n },\n },\n\n // Size variable for actions (if ItemAction is used instead of TabsAction)\n $size: {\n '': '$size-md',\n 'size=xsmall': '$size-xs',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n 'size=xlarge': '$size-xl',\n },\n\n // Custom tiny scrollbar — positioned relative to ScrollWrapper. Switches\n // edges and dimensions based on placement; the driving CSS custom\n // properties come from `useTinyScrollbar.handleHStyle` / `handleVStyle`.\n Scrollbar: {\n $: '> Bar > ScrollWrapper >',\n position: 'absolute',\n bottom: {\n '': '1px',\n 'placement=left | placement=right': 'auto',\n },\n top: {\n '': 'auto',\n 'placement=left | placement=right': '$scrollbar-v-top',\n },\n left: {\n '': '$scrollbar-h-left',\n 'placement=left | placement=right': 'auto',\n },\n right: {\n '': 'auto',\n 'placement=left | placement=right': '1px',\n },\n height: {\n '': '1ow',\n 'placement=left | placement=right': '$scrollbar-v-height',\n },\n width: {\n '': '$scrollbar-h-width',\n 'placement=left | placement=right': '1ow',\n },\n radius: 'round',\n fill: '#dark.35',\n opacity: {\n '': 0,\n 'focused | scrolling': 1,\n },\n transition: 'opacity 0.15s',\n pointerEvents: 'none',\n },\n },\n});\n\n// =============================================================================\n// Tab Button (extends Item)\n// =============================================================================\n\nexport const TabElement = tasty(Item, {\n as: 'button',\n styles: {\n radius: {\n '': false,\n 'type=radio | type=default': true,\n 'type=narrow': 'top',\n 'type=narrow & placement=bottom': 'bottom',\n 'type=narrow & placement=left': 'left',\n 'type=narrow & placement=right': 'right',\n },\n color: {\n '': '#dark-02',\n 'type=narrow & (hovered & !selected)': '#primary-text',\n '(type=default | type=narrow) & selected': '#primary-text',\n disabled: '#disabled-surface-text',\n },\n fill: {\n '': '#clear',\n 'hovered & !type=narrow': '#dark.03',\n 'type=file': '#surface-3',\n 'type=file & hovered': '#surface-3.5',\n 'type=radio & hovered': '#surface.5',\n '(type=file | type=radio) & selected': '#surface',\n // Spring-load hint: a widget is hovering this tab and it is about to open.\n 'drop-pending': '#primary.10',\n },\n border: {\n '': '#clear',\n 'type=file': '0 #clear',\n },\n preset: {\n '': 't3m',\n 'size=xsmall': 't4',\n },\n shadow: {\n '': '$selection-shadow',\n 'focused & focus-visible':\n 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n editing: 'inset 0 0 0 1bw #primary-text, $selection-shadow',\n 'type=radio & selected': '$item-shadow',\n 'type=radio & selected & focused & focus-visible':\n '$item-shadow, inset 0 0 0 1bw #primary-text',\n },\n outline: 'none',\n placeContent: {\n // extend\n 'type=radio': 'center',\n },\n gridTemplate: {\n // extend\n 'type=radio':\n '\"icon prefix label suffix rightIcon actions\" auto / max-content max-content max-content max-content max-content max-content',\n },\n // File-type selection indicator: an inset shadow on the edge that faces\n // the panel area. Flips with placement so the highlight always sits on\n // the edge adjacent to the content.\n '$selection-shadow': {\n '': 'inset 0 0 0 0 #primary',\n 'type=file & selected': 'inset 0 (-1 * $tab-indicator-size) 0 0 #primary',\n 'type=file & selected & placement=bottom':\n 'inset 0 $tab-indicator-size 0 0 #primary',\n 'type=file & selected & placement=left':\n 'inset (-1 * $tab-indicator-size) 0 0 0 #primary',\n 'type=file & selected & placement=right':\n 'inset $tab-indicator-size 0 0 0 #primary',\n '!type=file': 'inset 0 0 0 0 #primary.0',\n },\n // Collapse horizontal padding for narrow type\n '$label-padding-left': {\n '': '$inline-padding',\n 'has-start-content': 0,\n 'type=narrow': 0,\n },\n '$label-padding-right': {\n '': '$inline-padding',\n 'has-end-content': 0,\n 'type=narrow': 0,\n },\n Label: {\n placeSelf: {\n '': 'center start',\n 'type=radio': 'center start',\n 'type=radio & !has-prefix & !has-suffix & !has-icon & !has-right-icon':\n 'center',\n },\n },\n Actions: {\n transition: false,\n },\n },\n});\n\n// =============================================================================\n// Tab Container (wrapper for tab + actions)\n// =============================================================================\n\nexport const TabContainer = tasty({\n styles: {\n position: 'relative',\n display: 'grid',\n margin: {\n '': 0,\n // Horizontal strip: .5x top/bottom creates space between the tab and the\n // bottom-edge indicator (which sits at `bottom: 0` of TabList).\n 'type=default': '.5x 0',\n // Vertical strip: the breathing room around the tabs and the gap from\n // the side indicator is provided by the TabList's own `.5x` padding —\n // don't add per-tab horizontal margin on top of it.\n 'type=default & (placement=left | placement=right)': 0,\n },\n border: {\n '': 0,\n 'type=file': 'right',\n 'type=file & (placement=left | placement=right)': 'bottom',\n },\n cursor: {\n '': 'default',\n draggable: 'grab',\n dragging: 'grabbing',\n },\n },\n});\n\n// =============================================================================\n// Drop Indicator for Drag-and-Drop\n// Geometry flips based on placement: a vertical bar between horizontal tabs,\n// a horizontal bar between vertical tabs. `before`/`after` mods come from\n// `TabDropIndicator` and decide which edge inset is applied.\n// =============================================================================\n\nexport const DropIndicatorElement = tasty({\n styles: {\n zIndex: 10,\n position: 'absolute',\n pointerEvents: 'none',\n opacity: {\n '': 0,\n 'drop-target': 1,\n },\n fill: '#primary',\n width: {\n '': '.5x',\n 'placement=left | placement=right': 'auto',\n },\n height: {\n '': 'auto',\n 'placement=left | placement=right': '.5x',\n },\n top: {\n '': 0,\n 'placement=left | placement=right': 'auto',\n '(placement=left | placement=right) & before': '-2px',\n },\n bottom: {\n '': 0,\n 'placement=left | placement=right': 'auto',\n '(placement=left | placement=right) & after': '-2px',\n },\n left: {\n '': 'auto',\n 'before & !(placement=left | placement=right)': '-2px',\n 'placement=left | placement=right': 0,\n },\n right: {\n '': 'auto',\n 'after & !(placement=left | placement=right)': '-2px',\n 'placement=left | placement=right': 0,\n },\n },\n});\n\n// =============================================================================\n// Tab Selection Indicator (for default/narrow type)\n// Position flips with placement; the dynamic axis dimensions (left/width for\n// horizontal, top/height for vertical) are populated via inline `style` from\n// `useTabIndicator` in `Tabs.tsx`.\n// =============================================================================\n\nexport const TabIndicatorElement = tasty({\n styles: {\n position: 'absolute',\n bottom: {\n '': '0',\n 'placement=bottom | placement=left | placement=right': 'auto',\n },\n top: {\n '': 'auto',\n 'placement=bottom': '0',\n },\n left: {\n '': 'auto',\n 'placement=right': '0',\n },\n right: {\n '': 'auto',\n 'placement=left': '0',\n },\n height: {\n '': '$tab-indicator-size',\n 'placement=left | placement=right': 'auto',\n },\n width: {\n '': 'auto',\n 'placement=left | placement=right': '$tab-indicator-size',\n },\n fill: '#primary',\n // Transition all four properties unconditionally — only the two relevant\n // ones change per render, the others stay constant.\n transition:\n 'left $tab-transition ease-in-out, width $tab-transition ease-in-out, top $tab-transition ease-in-out, height $tab-transition ease-in-out',\n pointerEvents: 'none',\n },\n});\n\n// =============================================================================\n// Tab Panel\n// =============================================================================\n\nexport const TabPanelElement = tasty({\n as: 'section',\n styles: {\n display: 'contents',\n hide: {\n '': true,\n active: false,\n },\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/types.ts
3
3
  /**
4
4
  * Size mapping for radio type tabs.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useCallback, useState } from "react";
3
3
 
4
4
  //#region src/components/navigation/Tabs/use-tab-editing.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { chainRaf } from "../../../utils/raf.js";
3
3
  import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { _Title } from "../../content/Title.js";
4
4
  import { Card } from "../../content/Card/Card.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { forwardRef, useImperativeHandle, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { getWeekNumber } from "../../fields/DatePicker/period.js";
3
3
  import { CalendarCell } from "./CalendarCell.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { RightIcon } from "../../../icons/RightIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { CalendarElement } from "./styled.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { getQuarter } from "../../fields/DatePicker/period.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { useLayoutEffect, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { forwardRef, useImperativeHandle, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
 
4
4
  //#region src/components/other/Calendar/styled.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { Icon } from "../../../icons/Icon.js";
3
3
  import { mergeStyles, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { wrapIcon } from "../../../icons/wrap-icon.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { Paragraph } from "../../content/Paragraph.js";
4
4
  import { _Title } from "../../content/Title.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { AlertDialogZone } from "./AlertDialogZone.js";
3
3
  import { createContext, useContext, useMemo, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { Portal } from "../../portal/Portal.js";
3
3
  import { DialogContainer } from "../Dialog/DialogContainer.js";
4
4
  import { _AlertDialog } from "./AlertDialog.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { SlotProvider } from "../../../utils/react/Slots.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _Modal } from "../Modal/Modal.js";
3
3
  import { DialogContext } from "./context.js";
4
4
  import { Children, isValidElement, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { ButtonGroup } from "../../actions/ButtonGroup/ButtonGroup.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.178.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
@@ -7,6 +7,7 @@ import { generateRandomId } from "../../../utils/random.js";
7
7
  import { _Modal } from "../Modal/Modal.js";
8
8
  import { _Tray } from "../Modal/Tray.js";
9
9
  import { _Popover } from "../Modal/Popover.js";
10
+ import { isOwnActionsPress } from "../../actions/actions-run.js";
10
11
  import { DialogContext } from "./context.js";
11
12
  import { Fragment, useEffect, useMemo, useRef } from "react";
12
13
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -151,6 +152,8 @@ function PopoverTrigger(allProps) {
151
152
  };
152
153
  const resolveShouldCloseOnInteractOutside = useEvent((el) => {
153
154
  if (shouldCloseOnInteractOutside && !shouldCloseOnInteractOutside(el)) return false;
155
+ const ownTrigger = targetRef?.current ?? triggerRef.current;
156
+ if (isOwnActionsPress(el, ownTrigger)) return false;
154
157
  const popoverTriggerEl = el.closest("[data-popover-trigger]");
155
158
  if (!popoverTriggerEl) {
156
159
  if (el.closest("[data-popover-keep]")) return false;
@@ -160,7 +163,6 @@ function PopoverTrigger(allProps) {
160
163
  }
161
164
  return true;
162
165
  }
163
- const ownTrigger = targetRef?.current ?? triggerRef.current;
164
166
  if (popoverTriggerEl === ownTrigger || ownTrigger?.contains(el)) return true;
165
167
  return false;
166
168
  });