@cube-dev/ui-kit 0.187.2 → 0.189.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 (683) hide show
  1. package/README.md +4 -0
  2. package/dist/CHANGELOG.md +47 -0
  3. package/dist/README.md +4 -0
  4. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  5. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/dist/_internal/hooks/use-event.js +1 -1
  7. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  8. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  9. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  10. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  11. package/dist/_internal/hooks/use-warn.js +1 -1
  12. package/dist/components/Block.js +1 -1
  13. package/dist/components/CollectionItem.js +1 -1
  14. package/dist/components/GlobalStyles.js +3 -6
  15. package/dist/components/GlobalStyles.js.map +1 -1
  16. package/dist/components/GridProvider.js +1 -1
  17. package/dist/components/HiddenInput.js +1 -1
  18. package/dist/components/Root.js +1 -1
  19. package/dist/components/actions/Action/Action.d.ts +4 -0
  20. package/dist/components/actions/Action/Action.js +1 -1
  21. package/dist/components/actions/Action/Action.js.map +1 -1
  22. package/dist/components/actions/Banner/Banner.js +1 -1
  23. package/dist/components/actions/Button/Button.js +2 -2
  24. package/dist/components/actions/Button/Button.js.map +1 -1
  25. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/dist/components/actions/ButtonSplit/ButtonSplit.js +40 -19
  27. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  28. package/dist/components/actions/ButtonSplit/context.js +1 -1
  29. package/dist/components/actions/CommandMenu/CommandMenu.js +4 -7
  30. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  31. package/dist/components/actions/CommandMenu/styled.js +1 -1
  32. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  33. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  34. package/dist/components/actions/ItemActionContext.js +1 -1
  35. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  36. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  37. package/dist/components/actions/ItemButton/ItemButton.js +3 -3
  38. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  39. package/dist/components/actions/Link/Link.js +1 -1
  40. package/dist/components/actions/Menu/Menu.js +1 -1
  41. package/dist/components/actions/Menu/MenuItem.js +1 -1
  42. package/dist/components/actions/Menu/MenuSection.js +7 -5
  43. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  44. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  45. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  46. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  47. package/dist/components/actions/Menu/context.js +1 -1
  48. package/dist/components/actions/Menu/styled.js +4 -6
  49. package/dist/components/actions/Menu/styled.js.map +1 -1
  50. package/dist/components/actions/actions-run.js +1 -1
  51. package/dist/components/actions/index.js +1 -1
  52. package/dist/components/actions/use-action.d.ts +4 -0
  53. package/dist/components/actions/use-action.js +6 -1
  54. package/dist/components/actions/use-action.js.map +1 -1
  55. package/dist/components/actions/use-anchored-menu.js +1 -1
  56. package/dist/components/actions/use-context-menu.js +1 -1
  57. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  58. package/dist/components/content/Alert/Alert.js +1 -1
  59. package/dist/components/content/Alert/Alert.js.map +1 -1
  60. package/dist/components/content/Alert/use-alert.js +1 -1
  61. package/dist/components/content/Avatar/Avatar.js +1 -1
  62. package/dist/components/content/Badge/Badge.js +1 -1
  63. package/dist/components/content/Badge/Badge.js.map +1 -1
  64. package/dist/components/content/Card/Card.js +1 -1
  65. package/dist/components/content/Content.js +1 -1
  66. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  67. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  68. package/dist/components/content/Disclosure/Disclosure.js +53 -78
  69. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  70. package/dist/components/content/Divider.js +1 -1
  71. package/dist/components/content/Footer.js +1 -1
  72. package/dist/components/content/Header.js +1 -1
  73. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  74. package/dist/components/content/InfoBadge/InfoBadge.d.ts +7 -1
  75. package/dist/components/content/InfoBadge/InfoBadge.js +6 -1
  76. package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
  77. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  78. package/dist/components/content/Item/Item.js +11 -10
  79. package/dist/components/content/Item/Item.js.map +1 -1
  80. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  81. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  82. package/dist/components/content/Layout/GridLayout.js +1 -1
  83. package/dist/components/content/Layout/Layout.js +1 -1
  84. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  85. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  86. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  87. package/dist/components/content/Layout/LayoutContent.js +1 -1
  88. package/dist/components/content/Layout/LayoutContext.js +1 -1
  89. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  90. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  91. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  92. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  93. package/dist/components/content/Layout/LayoutPane.js +1 -1
  94. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  95. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  96. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  97. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  98. package/dist/components/content/Layout/index.js +1 -1
  99. package/dist/components/content/Layout/utils.js +1 -1
  100. package/dist/components/content/Paragraph.js +1 -1
  101. package/dist/components/content/Placeholder/Placeholder.js +13 -22
  102. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  103. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  104. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  105. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  106. package/dist/components/content/Result/Result.d.ts +34 -4
  107. package/dist/components/content/Result/Result.js +199 -95
  108. package/dist/components/content/Result/Result.js.map +1 -1
  109. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  110. package/dist/components/content/Tag/Tag.js +3 -5
  111. package/dist/components/content/Tag/Tag.js.map +1 -1
  112. package/dist/components/content/Text.d.ts +14 -14
  113. package/dist/components/content/Text.js +1 -1
  114. package/dist/components/content/TextItem/TextItem.js +1 -1
  115. package/dist/components/content/Title.d.ts +2 -0
  116. package/dist/components/content/Title.js +1 -1
  117. package/dist/components/content/Title.js.map +1 -1
  118. package/dist/components/content/Tree/Tree.js +1 -1
  119. package/dist/components/content/Tree/TreeNode.js +1 -1
  120. package/dist/components/content/Tree/styled.js +1 -1
  121. package/dist/components/content/Tree/styled.js.map +1 -1
  122. package/dist/components/content/Tree/tree-index.js +1 -1
  123. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  124. package/dist/components/content/Tree/use-load-data.js +1 -1
  125. package/dist/components/content/highlightText.js +1 -1
  126. package/dist/components/content/use-auto-tooltip.js +1 -1
  127. package/dist/components/data/DataTable/DataTable.js +33 -10
  128. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  129. package/dist/components/data/DataTable/types.d.ts +3 -1
  130. package/dist/components/data/ItemTable/ItemTable.js +3 -6
  131. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  132. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  133. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  134. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  135. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  136. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  137. package/dist/components/data/TableBase/RowCollection.js +1 -1
  138. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  139. package/dist/components/data/TableBase/TableRow.js +1 -1
  140. package/dist/components/data/TableBase/TableView.js +9 -7
  141. package/dist/components/data/TableBase/TableView.js.map +1 -1
  142. package/dist/components/data/TableBase/column-menu.js +1 -1
  143. package/dist/components/data/TableBase/column-styles.js +82 -0
  144. package/dist/components/data/TableBase/column-styles.js.map +1 -0
  145. package/dist/components/data/TableBase/column-tint.js +1 -1
  146. package/dist/components/data/TableBase/row-menu.js +1 -1
  147. package/dist/components/data/TableBase/styled.js +8 -10
  148. package/dist/components/data/TableBase/styled.js.map +1 -1
  149. package/dist/components/data/TableBase/table-tree.js +1 -1
  150. package/dist/components/data/TableBase/types.d.ts +11 -0
  151. package/dist/components/data/TableBase/types.js +1 -1
  152. package/dist/components/data/TableBase/types.js.map +1 -1
  153. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  154. package/dist/components/data/TableBase/use-column-order.js +1 -1
  155. package/dist/components/data/TableBase/use-container-width.js +1 -1
  156. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  157. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  158. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  159. package/dist/components/data/TableBase/use-table-search.js +1 -1
  160. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  161. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  162. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  163. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  164. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  165. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  166. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  167. package/dist/components/fields/Checkbox/context.js +1 -1
  168. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  169. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  170. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  171. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  172. package/dist/components/fields/ComboBox/ComboBox.d.ts +9 -4
  173. package/dist/components/fields/ComboBox/ComboBox.js +2 -1
  174. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  175. package/dist/components/fields/CommandTextArea/CommandTextArea.js +3 -5
  176. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  177. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  178. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  179. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  180. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  181. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  182. package/dist/components/fields/DatePicker/DatePicker.js +119 -129
  183. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  184. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  185. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  186. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  187. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  188. package/dist/components/fields/DatePicker/DateRangePicker.js +128 -138
  189. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  190. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +321 -331
  191. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  192. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  193. package/dist/components/fields/DatePicker/PeriodPicker.js +163 -179
  194. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  195. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  196. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  197. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  198. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  199. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  200. package/dist/components/fields/DatePicker/period.js +1 -1
  201. package/dist/components/fields/DatePicker/props.js +1 -1
  202. package/dist/components/fields/DatePicker/utils.js +1 -1
  203. package/dist/components/fields/FileInput/FileInput.js +1 -1
  204. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  205. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  206. package/dist/components/fields/FilterPicker/FilterPicker.js +5 -6
  207. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  208. package/dist/components/fields/Input/Input.js +1 -1
  209. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  210. package/dist/components/fields/ListBox/ListBox.js +1 -1
  211. package/dist/components/fields/ListBox/optionId.js +1 -1
  212. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +46 -44
  213. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  214. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  215. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  216. package/dist/components/fields/NumberInput/NumberInput.d.ts +2 -2
  217. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  218. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  219. package/dist/components/fields/NumberInput/StepButton.js +3 -3
  220. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  221. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -1
  222. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  223. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  224. package/dist/components/fields/Picker/Picker.js +5 -6
  225. package/dist/components/fields/Picker/Picker.js.map +1 -1
  226. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  227. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  228. package/dist/components/fields/RadioGroup/context.js +1 -1
  229. package/dist/components/fields/SearchComboBox/SearchComboBox.d.ts +9 -4
  230. package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -1
  231. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  232. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  233. package/dist/components/fields/Select/Select.js +68 -66
  234. package/dist/components/fields/Select/Select.js.map +1 -1
  235. package/dist/components/fields/Slider/Gradation.js +1 -1
  236. package/dist/components/fields/Slider/HueSlider.js +33 -43
  237. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  238. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  239. package/dist/components/fields/Slider/Slider.js +1 -1
  240. package/dist/components/fields/Slider/SliderBase.js +1 -1
  241. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  242. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  243. package/dist/components/fields/Slider/elements.js +1 -1
  244. package/dist/components/fields/Slider/index.js +1 -1
  245. package/dist/components/fields/Switch/Switch.js +1 -1
  246. package/dist/components/fields/TagInput/TagInput.js +170 -158
  247. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  248. package/dist/components/fields/TagInput/TagList.js +1 -1
  249. package/dist/components/fields/TextArea/TextArea.js +1 -1
  250. package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
  251. package/dist/components/fields/TextInput/TextInput.js +1 -1
  252. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  253. package/dist/components/fields/TextInput/TextInputBase.d.ts +2 -2
  254. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  255. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  256. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  257. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  258. package/dist/components/fields/TriggerActions.js +1 -1
  259. package/dist/components/fields/color/ColorPanel.js +1 -1
  260. package/dist/components/fields/color/channels.js +1 -1
  261. package/dist/components/fields/color/color.js +1 -1
  262. package/dist/components/fields/color/context.js +1 -1
  263. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  264. package/dist/components/form/Form/Field.js +1 -1
  265. package/dist/components/form/Form/Form.js +1 -1
  266. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  267. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  268. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  269. package/dist/components/form/Form/SubmitError.js +1 -1
  270. package/dist/components/form/Form/backend.js +1 -1
  271. package/dist/components/form/Form/index.js +1 -1
  272. package/dist/components/form/Form/modern/actions.js +1 -1
  273. package/dist/components/form/Form/modern/context.js +1 -1
  274. package/dist/components/form/Form/modern/controller.js +1 -1
  275. package/dist/components/form/Form/modern/field-binding.js +1 -1
  276. package/dist/components/form/Form/modern/field.js +1 -1
  277. package/dist/components/form/Form/modern/react.js +1 -1
  278. package/dist/components/form/Form/modern/store.js +1 -1
  279. package/dist/components/form/Form/modern/validation.js +1 -1
  280. package/dist/components/form/Form/modern/values.js +1 -1
  281. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  282. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  283. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  284. package/dist/components/form/Form/use-field/use-field.js +1 -1
  285. package/dist/components/form/Form/use-form.js +1 -1
  286. package/dist/components/form/Form/validation.js +1 -1
  287. package/dist/components/form/Label.js +1 -1
  288. package/dist/components/form/legacy-tooltip.js +1 -1
  289. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  290. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  291. package/dist/components/form/validation/use-validation-props.js +1 -1
  292. package/dist/components/form/wrapper.js +1 -1
  293. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  294. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  295. package/dist/components/layout/Board/Board.js +2 -2
  296. package/dist/components/layout/Board/Board.js.map +1 -1
  297. package/dist/components/layout/Board/BoardProvider.js +1 -1
  298. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  299. package/dist/components/layout/Board/Widget.js +1 -1
  300. package/dist/components/layout/Board/WidgetHost.js +4 -4
  301. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  302. package/dist/components/layout/Board/board-context.js +1 -1
  303. package/dist/components/layout/Board/board-store.js +1 -1
  304. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  305. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  306. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  307. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  308. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  309. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  310. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  311. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  312. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  313. package/dist/components/layout/Board/index.js +1 -1
  314. package/dist/components/layout/Board/responsive-utils.js +1 -1
  315. package/dist/components/layout/Board/use-board-layout.js +1 -1
  316. package/dist/components/layout/Board/use-board-registry.js +1 -1
  317. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  318. package/dist/components/layout/Board/use-board-selection.js +1 -1
  319. package/dist/components/layout/Flex.js +1 -1
  320. package/dist/components/layout/Flow.js +1 -1
  321. package/dist/components/layout/Grid.js +1 -1
  322. package/dist/components/layout/Panel.js +1 -1
  323. package/dist/components/layout/Prefix.js +1 -1
  324. package/dist/components/layout/ResizablePanel.js +1 -1
  325. package/dist/components/layout/Space.js +1 -1
  326. package/dist/components/layout/Suffix.js +1 -1
  327. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  328. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  329. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  330. package/dist/components/navigation/Tabs/TabButton.js +470 -407
  331. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  332. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  333. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  334. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  335. package/dist/components/navigation/Tabs/Tabs.js +22 -4
  336. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  337. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  338. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  339. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  340. package/dist/components/navigation/Tabs/styled.js +1 -1
  341. package/dist/components/navigation/Tabs/types.d.ts +1 -1
  342. package/dist/components/navigation/Tabs/types.js +1 -1
  343. package/dist/components/navigation/Tabs/types.js.map +1 -1
  344. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  345. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  346. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  347. package/dist/components/other/Calendar/Calendar.js +1 -1
  348. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  349. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  350. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  351. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  352. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  353. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  354. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  355. package/dist/components/other/Calendar/PeriodGrid.js.map +1 -1
  356. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  357. package/dist/components/other/Calendar/styled.js +1 -1
  358. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  359. package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
  360. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  361. package/dist/components/overlays/AlertDialog/AlertDialog.js +78 -116
  362. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  363. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.d.ts +57 -50
  364. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +52 -48
  365. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  366. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +99 -104
  367. package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
  368. package/dist/components/overlays/AlertDialog/index.d.ts +2 -1
  369. package/dist/components/overlays/Dialog/Dialog.js +2 -2
  370. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  371. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  372. package/dist/components/overlays/Dialog/DialogForm.d.ts +2 -2
  373. package/dist/components/overlays/Dialog/DialogForm.js +4 -5
  374. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  375. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  376. package/dist/components/overlays/Dialog/ModernDialogForm.js +5 -6
  377. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  378. package/dist/components/overlays/Dialog/context.js +1 -1
  379. package/dist/components/overlays/Dialog/default-button-text.js +30 -0
  380. package/dist/components/overlays/Dialog/default-button-text.js.map +1 -0
  381. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  382. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  383. package/dist/components/overlays/Modal/Modal.js +1 -1
  384. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  385. package/dist/components/overlays/Modal/Overlay.js +1 -1
  386. package/dist/components/overlays/Modal/Popover.js +2 -2
  387. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  388. package/dist/components/overlays/Modal/Tray.js +1 -1
  389. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  390. package/dist/components/overlays/Modal/Underlay.js +1 -1
  391. package/dist/components/overlays/Notifications/Notification.js +1 -1
  392. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  393. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  394. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  395. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  396. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  397. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  398. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  399. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  400. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  401. package/dist/components/overlays/Notifications/index.js +1 -1
  402. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  403. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  404. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  405. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  406. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  407. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  408. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  409. package/dist/components/overlays/Toast/index.js +1 -1
  410. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  411. package/dist/components/overlays/Toast/useToast.js +1 -1
  412. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  413. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  414. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  415. package/dist/components/overlays/Tooltip/context.js +1 -1
  416. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  417. package/dist/components/portal/Portal.js +1 -1
  418. package/dist/components/portal/PortalProvider.js +1 -1
  419. package/dist/components/portal/usePortal.js +1 -1
  420. package/dist/components/shared/DraggableCollection.js +1 -1
  421. package/dist/components/shared/InvalidIcon.js +1 -1
  422. package/dist/components/shared/ValidIcon.js +1 -1
  423. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  424. package/dist/components/status/Spin/Cube.js +1 -1
  425. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  426. package/dist/components/status/Spin/Spin.js +1 -1
  427. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  428. package/dist/data/item-themes.js +1 -1
  429. package/dist/data/themes.js +1 -1
  430. package/dist/eslint-plugin/defaults.generated.js +18 -2
  431. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  432. package/dist/eslint-plugin/index.js +1 -1
  433. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  434. package/dist/i18n/I18nProvider.js +1 -1
  435. package/dist/i18n/createFormatter.js +1 -1
  436. package/dist/i18n/index.js +1 -1
  437. package/dist/i18n/instance.js +1 -1
  438. package/dist/i18n/locales/de-DE/uikit.js +4 -1
  439. package/dist/i18n/locales/en-US/uikit.js +4 -1
  440. package/dist/i18n/locales/en-US/uikit.json.d.ts +3 -0
  441. package/dist/i18n/locales/es-ES/uikit.js +4 -1
  442. package/dist/i18n/locales/es-MX/uikit.js +4 -1
  443. package/dist/i18n/locales/fr-FR/uikit.js +4 -1
  444. package/dist/i18n/locales/it-IT/uikit.js +4 -1
  445. package/dist/i18n/locales/ja-JP/uikit.js +4 -1
  446. package/dist/i18n/locales/nb-NO/uikit.js +4 -1
  447. package/dist/i18n/locales/pt-BR/uikit.js +4 -1
  448. package/dist/i18n/locales/pt-PT/uikit.js +4 -1
  449. package/dist/i18n/locales/sv-SE/uikit.js +4 -1
  450. package/dist/i18n/locales/vi-VN/uikit.js +4 -1
  451. package/dist/i18n/locales.js +1 -1
  452. package/dist/i18n/useFormatter.js +1 -1
  453. package/dist/i18n/useI18n.js +1 -1
  454. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  455. package/dist/icons/AdjustmentsIcon.js +1 -1
  456. package/dist/icons/AiIcon.js +1 -1
  457. package/dist/icons/AreaChartIcon.js +1 -1
  458. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  459. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  460. package/dist/icons/BackwardIcon.js +1 -1
  461. package/dist/icons/BarChartIcon.js +1 -1
  462. package/dist/icons/BellFilledIcon.js +1 -1
  463. package/dist/icons/BellIcon.js +1 -1
  464. package/dist/icons/BooleanIcon.js +1 -1
  465. package/dist/icons/CalendarEditIcon.js +1 -1
  466. package/dist/icons/CalendarIcon.js +1 -1
  467. package/dist/icons/CaretDownIcon.js +1 -1
  468. package/dist/icons/CaretUpIcon.js +1 -1
  469. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  470. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  471. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  472. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  473. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  474. package/dist/icons/ChartBarLineIcon.js +1 -1
  475. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  476. package/dist/icons/ChartBarStackedIcon.js +1 -1
  477. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  478. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  479. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  480. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  481. package/dist/icons/ChartBubbleIcon.js +1 -1
  482. package/dist/icons/ChartDonut2Icon.js +1 -1
  483. package/dist/icons/ChartFunnelIcon.js +1 -1
  484. package/dist/icons/ChartHeatmapIcon.js +1 -1
  485. package/dist/icons/ChartKPIIcon.js +1 -1
  486. package/dist/icons/ChartPie2Icon.js +1 -1
  487. package/dist/icons/ChartScatterIcon.js +1 -1
  488. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  489. package/dist/icons/CheckCircleIcon.js +1 -1
  490. package/dist/icons/CheckIcon.js +1 -1
  491. package/dist/icons/CircleFilledIcon.js +1 -1
  492. package/dist/icons/ClearIcon.js +1 -1
  493. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  494. package/dist/icons/CloseCircleIcon.js +1 -1
  495. package/dist/icons/CloseIcon.js +1 -1
  496. package/dist/icons/CodeIcon.js +1 -1
  497. package/dist/icons/ColumnTotalIcon.js +1 -1
  498. package/dist/icons/CopyIcon.js +1 -1
  499. package/dist/icons/CountIcon.js +1 -1
  500. package/dist/icons/CubeIcon.js +1 -1
  501. package/dist/icons/CubePauseIcon.js +1 -1
  502. package/dist/icons/CubePlayIcon.js +1 -1
  503. package/dist/icons/CurrencyDollarIcon.js +1 -1
  504. package/dist/icons/DangerIcon.js +1 -1
  505. package/dist/icons/DashboardIcon.js +1 -1
  506. package/dist/icons/DatabaseIcon.js +1 -1
  507. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  508. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  509. package/dist/icons/DirectionIcon.js +1 -1
  510. package/dist/icons/DonutIcon.js +1 -1
  511. package/dist/icons/DownIcon.js +1 -1
  512. package/dist/icons/EditIcon.js +1 -1
  513. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  514. package/dist/icons/ExclamationCircleIcon.js +1 -1
  515. package/dist/icons/ExclamationIcon.js +1 -1
  516. package/dist/icons/EyeIcon.js +1 -1
  517. package/dist/icons/EyeInvisibleIcon.js +1 -1
  518. package/dist/icons/FilterIcon.js +1 -1
  519. package/dist/icons/FolderFilledIcon.js +1 -1
  520. package/dist/icons/FolderIcon.js +1 -1
  521. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  522. package/dist/icons/FolderOpenIcon.js +1 -1
  523. package/dist/icons/ForwardIcon.js +1 -1
  524. package/dist/icons/GripVerticalIcon.js +1 -1
  525. package/dist/icons/HierarchyIcon.js +1 -1
  526. package/dist/icons/HierarchyOpenIcon.js +1 -1
  527. package/dist/icons/Icon.js +1 -1
  528. package/dist/icons/InfoCircleIcon.js +1 -1
  529. package/dist/icons/InfoIcon.js +1 -1
  530. package/dist/icons/KeyIcon.js +1 -1
  531. package/dist/icons/LeftIcon.js +1 -1
  532. package/dist/icons/LineChartIcon.js +1 -1
  533. package/dist/icons/LoadingIcon.js +1 -1
  534. package/dist/icons/LockFilledIcon.js +1 -1
  535. package/dist/icons/LockIcon.js +1 -1
  536. package/dist/icons/MoreIcon.js +1 -1
  537. package/dist/icons/NotAllowedIcon.js +1 -1
  538. package/dist/icons/Number123Icon.js +1 -1
  539. package/dist/icons/NumberIcon.js +1 -1
  540. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  541. package/dist/icons/PauseCircleIcon.js +1 -1
  542. package/dist/icons/PauseIcon.js +1 -1
  543. package/dist/icons/PercentageIcon.js +1 -1
  544. package/dist/icons/PieChartIcon.js +1 -1
  545. package/dist/icons/PipetteIcon.js +1 -1
  546. package/dist/icons/PlayCircleIcon.js +1 -1
  547. package/dist/icons/PlayIcon.js +1 -1
  548. package/dist/icons/PlusIcon.js +1 -1
  549. package/dist/icons/ProgressBarIcon.js +1 -1
  550. package/dist/icons/ReloadIcon.js +1 -1
  551. package/dist/icons/ReportIcon.js +1 -1
  552. package/dist/icons/ReturnIcon.js +1 -1
  553. package/dist/icons/RightIcon.js +1 -1
  554. package/dist/icons/RowTotalsIcon.js +1 -1
  555. package/dist/icons/SchemeIcon.js +1 -1
  556. package/dist/icons/SearchIcon.js +1 -1
  557. package/dist/icons/SemanticQueryIcon.js +1 -1
  558. package/dist/icons/SettingsIcon.js +1 -1
  559. package/dist/icons/ShieldFilledIcon.js +1 -1
  560. package/dist/icons/ShieldIcon.js +1 -1
  561. package/dist/icons/SlashIcon.js +1 -1
  562. package/dist/icons/SparklesIcon.js +1 -1
  563. package/dist/icons/SqlIcon.js +1 -1
  564. package/dist/icons/StatsIcon.js +1 -1
  565. package/dist/icons/StopIcon.js +1 -1
  566. package/dist/icons/StringIcon.js +1 -1
  567. package/dist/icons/SubtotalsIcon.js +1 -1
  568. package/dist/icons/SwitchIcon.js +1 -1
  569. package/dist/icons/TableIcon.js +1 -1
  570. package/dist/icons/ThumbsDownIcon.js +1 -1
  571. package/dist/icons/ThumbsUpIcon.js +1 -1
  572. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  573. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  574. package/dist/icons/ThunderboltIcon.js +1 -1
  575. package/dist/icons/TimeIcon.js +1 -1
  576. package/dist/icons/TrashIcon.js +1 -1
  577. package/dist/icons/UnlockIcon.js +1 -1
  578. package/dist/icons/UpIcon.js +1 -1
  579. package/dist/icons/UserGroupIcon.js +1 -1
  580. package/dist/icons/UserIcon.js +1 -1
  581. package/dist/icons/UserLockIcon.js +1 -1
  582. package/dist/icons/ViewIcon.js +1 -1
  583. package/dist/icons/WarningFilledIcon.js +1 -1
  584. package/dist/icons/WarningIcon.js +1 -1
  585. package/dist/icons/wrap-icon.js +1 -1
  586. package/dist/index.d.ts +5 -4
  587. package/dist/index.js +3 -3
  588. package/dist/index.js.map +1 -1
  589. package/dist/probe/canonicalize.js +1 -1
  590. package/dist/probe/css.js +1 -1
  591. package/dist/probe/index.js +1 -1
  592. package/dist/provider.js +1 -1
  593. package/dist/providers/TrackingProvider.js +1 -1
  594. package/dist/providers/navigationAdapter.default.js +1 -1
  595. package/dist/shared/form.d.ts +29 -1
  596. package/dist/shared/index.d.ts +1 -1
  597. package/dist/tokens/all-tokens.js +1 -1
  598. package/dist/tokens/base.js +1 -1
  599. package/dist/tokens/color-seed.js +1 -1
  600. package/dist/tokens/color-theme.js +1 -1
  601. package/dist/tokens/colors.js +1 -1
  602. package/dist/tokens/layout.js +1 -1
  603. package/dist/tokens/lazy-styles.js +1 -1
  604. package/dist/tokens/legacy-color.js +1 -1
  605. package/dist/tokens/palette-config.js +1 -1
  606. package/dist/tokens/palette.js +1 -1
  607. package/dist/tokens/resolve.js +1 -1
  608. package/dist/tokens/shadows.js +1 -1
  609. package/dist/tokens/sizes.js +1 -1
  610. package/dist/tokens/spacing.js +1 -1
  611. package/dist/tokens/typography.js +1 -1
  612. package/dist/utils/ResizeSensor.js +1 -1
  613. package/dist/utils/colors.js +1 -1
  614. package/dist/utils/dotize.js +1 -1
  615. package/dist/utils/is-dev-env.js +1 -1
  616. package/dist/utils/modules.js +1 -1
  617. package/dist/utils/promise.js +1 -1
  618. package/dist/utils/raf.js +1 -1
  619. package/dist/utils/random.js +1 -1
  620. package/dist/utils/range.js +1 -1
  621. package/dist/utils/react/RenderCache.js +1 -1
  622. package/dist/utils/react/Slots.js +1 -1
  623. package/dist/utils/react/chain.js +1 -1
  624. package/dist/utils/react/disabledProps.js +1 -1
  625. package/dist/utils/react/escapePropagation.js +1 -1
  626. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  627. package/dist/utils/react/index.js +1 -1
  628. package/dist/utils/react/interactions.js +1 -1
  629. package/dist/utils/react/isTextOnly.js +1 -1
  630. package/dist/utils/react/mapProps.js +1 -1
  631. package/dist/utils/react/mergeProps.js +1 -1
  632. package/dist/utils/react/nullableValue.js +1 -1
  633. package/dist/utils/react/programmaticFocus.js +1 -1
  634. package/dist/utils/react/resolveIcon.js +1 -1
  635. package/dist/utils/react/sharedStore.js +1 -1
  636. package/dist/utils/react/useBufferedValue.js +1 -1
  637. package/dist/utils/react/useCombinedRefs.js +1 -1
  638. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  639. package/dist/utils/react/useEventBus.js +1 -1
  640. package/dist/utils/react/useId.js +1 -1
  641. package/dist/utils/react/useIsDarwin.js +1 -1
  642. package/dist/utils/react/useKeySymbols.js +1 -1
  643. package/dist/utils/react/useLayoutEffect.js +1 -1
  644. package/dist/utils/react/useLocalStorage.js +1 -1
  645. package/dist/utils/react/useMergeStyles.js +1 -1
  646. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  647. package/dist/utils/react/usePopoverSync.js +1 -1
  648. package/dist/utils/react/useQaProps.js +1 -1
  649. package/dist/utils/react/useScheme.js +1 -1
  650. package/dist/utils/react/useViewportSize.js +1 -1
  651. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  652. package/dist/utils/selection.js +1 -1
  653. package/dist/utils/styles.js +51 -6
  654. package/dist/utils/styles.js.map +1 -1
  655. package/dist/utils/tree.js +1 -1
  656. package/dist/utils/warnings.js +1 -1
  657. package/dist/version.js +3 -3
  658. package/docs/components/actions/Action.md +1 -1
  659. package/docs/components/actions/Button.md +4 -2
  660. package/docs/components/actions/ItemButton.md +1 -0
  661. package/docs/components/actions/Link.md +1 -1
  662. package/docs/components/content/InfoBadge.md +1 -1
  663. package/docs/components/content/Item.md +1 -1
  664. package/docs/components/content/Result.md +202 -12
  665. package/docs/components/content/Title.md +1 -0
  666. package/docs/components/data/DataTable.md +18 -0
  667. package/docs/components/data/ItemTable.md +3 -1
  668. package/docs/components/fields/ComboBox.md +49 -1
  669. package/docs/components/fields/FilterPicker.md +3 -3
  670. package/docs/components/fields/NumberInput.md +27 -0
  671. package/docs/components/fields/PasswordInput.md +24 -0
  672. package/docs/components/fields/Picker.md +3 -3
  673. package/docs/components/fields/SearchComboBox.md +3 -1
  674. package/docs/components/fields/TagInput.md +4 -2
  675. package/docs/components/fields/TextArea.md +24 -0
  676. package/docs/components/fields/TextInput.md +24 -0
  677. package/docs/components/navigation/Tabs.md +8 -3
  678. package/docs/components/overlays/AlertDialog.md +100 -3
  679. package/docs/components/overlays/DialogForm.md +3 -3
  680. package/docs/components/overlays/UseDialogContainer.md +4 -7
  681. package/docs/tasty/dsl.md +28 -6
  682. package/docs/tasty/styles.md +20 -0
  683. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ItemActionsWrapper.js","names":["ClearPressResponder","Mods","Styles","tasty","CSSProperties","HTMLAttributes","ReactNode","useLayoutEffect","useRef","useState","useFocusWithin","useHover","ITEM_RESTING_COLOR_VARIANTS","resolveItemVariant","ROW_STATE_ALIASES","CubeItemProps","DisplayTransition","ItemActionProvider","ItemActionsWrapperElement","variants","styles","display","position","placeContent","placeItems","$size","Actions","$","inset","gap","pointerEvents","padding","height","opacity","translate","transition","ActionsChild","ActionIcon","flexShrink","width","preset","ItemActionIcon","props","_c","t0","children","ItemActionsWrapperProps","state","showActions","skipActionsWidthTransition","actions","type","theme","size","isDisabled","disableActionsFocus","autoHideActions","preserveActionsSpace","mods","actionsProps","HTMLDivElement","ItemActionsWrapper","t1","t2","t3","t4","undefined","actionsRef","actionsWidth","setActionsWidth","areActionsVisible","setAreActionsVisible","skipWidthTransition","setSkipWidthTransition","isMountPassRef","t5","el","current","isMountPass","childElementCount","Math","round","offsetWidth","t6","isFocusWithin","setIsFocusWithin","hasPressed","setHasPressed","t7","Symbol","for","hoverProps","isHovered","t8","onFocusWithinChange","focusWithinProps","t9","actionsEl","checkPressed","querySelector","observer","MutationObserver","observe","attributes","attributeFilter","subtree","disconnect","t10","shouldShowActions","t11","t12","t13","disabled","finalMods","t14","t15","t16","t17","t18","t19","t20","phase","t21","ref","transitionRef","node","t22"],"sources":["../../../src/components/actions/ItemActionsWrapper.tsx"],"sourcesContent":["import { ClearPressResponder } from '@react-aria/interactions';\nimport { Mods, Styles, tasty } from '@tenphi/tasty';\nimport {\n CSSProperties,\n HTMLAttributes,\n ReactNode,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useFocusWithin, useHover } from 'react-aria';\n\nimport {\n ITEM_RESTING_COLOR_VARIANTS,\n resolveItemVariant,\n ROW_STATE_ALIASES,\n} from '../../data/item-themes';\nimport { CubeItemProps } from '../content/Item/Item';\nimport { DisplayTransition } from '../helpers/DisplayTransition/DisplayTransition';\n\nimport { ItemActionProvider } from './ItemActionContext';\n\n/**\n * The sibling-actions layout shared by `ItemButton` and the field triggers\n * (`Select` / `Picker` / `FilterPicker`).\n *\n * A row's actions cannot live inside the row when the row is itself a button:\n * that nests a `<button>` in a `<button>`, and a press on an action activates\n * the row. So the run is rendered as a SIBLING, laid over the row's trailing\n * end, and the row reserves the space for it through `--actions-width` — which\n * this file measures — and `Item`'s own `actions` placeholder column.\n *\n * The run is pointer-transparent; only its children take presses. That is what\n * lets a picker put its non-interactive caret in the run and still have a click\n * on the caret reach the trigger underneath, and it stops the run's padding and\n * inter-action gaps from swallowing presses meant for the row.\n *\n * Being a sibling also puts the run OUTSIDE the row for anything that asks\n * \"did this press land on my trigger?\" — an overlay opened by the row would\n * read a press on its own actions as a press outside and dismiss itself,\n * swallowing that press on the way. The run therefore marks itself with\n * `data-trigger-action`, which `isOwnActionsPress` resolves back to the row it\n * belongs to. See `actions-run.ts`.\n */\nconst ItemActionsWrapperElement = tasty({\n // Actions default to the `current` type, which paints from the inherited\n // `currentcolor` — but they are rendered as a SIBLING of the row here, not\n // inside it, so without this they would inherit the page color instead of the\n // row's. Harmless on the default theme (the two match) and plainly wrong on\n // any other: a `special` row would hand its actions the page's dark text to\n // tint with, on a dark purple surface. The variant carries the row's resting\n // color down so `currentcolor` means the same thing it does inside an `Item`.\n variants: ITEM_RESTING_COLOR_VARIANTS,\n styles: {\n // The row is the wrapper's own child, so the wrapper can read the one\n // interaction the row expresses as a COLOR change rather than a fill change.\n // Without it the label darkened under the finger while the caret and the\n // actions laid over the same row — which paint from the color this element\n // hands down — stayed at their resting tint. The variants restate it,\n // because that is where the colors keyed on it live.\n ...ROW_STATE_ALIASES,\n\n // The one layout the row does not want its actions centred in. A block\n // description stacks under the label and can make the row arbitrarily tall;\n // there the actions belong in the first line, beside the label, which is\n // what anchoring them to a `$size`-tall box at the top achieves. Every other\n // row — including one with an INLINE description — is a single band, and\n // centring is both what it wants and what survives a caller overriding the\n // height. Read off the row rather than plumbed through as a prop, because\n // `Item` is what decides the placement and it defaults by type.\n '@block-description': ':has(> [data-description=\"block\"])',\n\n display: 'grid',\n position: 'relative',\n placeContent: 'stretch',\n placeItems: 'stretch',\n\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: {\n $: '>',\n position: 'absolute',\n // Both insets set, so the run's BOX spans the row and `placeItems: center`\n // puts the actions on its centre line. What sits in the box does not grow\n // with it — every child is a fixed `$action-size`, which is capped so a\n // large row does not get oversized buttons.\n inset: {\n '': '1bw right dock',\n 'type=card': '(1bw + .5x) right dock',\n '@block-description': '1bw 1bw auto auto',\n 'type=card & @block-description': '(1bw + .5x) (1bw + .5x) auto auto',\n },\n display: 'flex',\n gap: '1bw',\n placeItems: 'center',\n placeContent: 'center end',\n\n // The run lies OVER the row. Left opaque, its padding and the gaps between\n // its actions eat presses that belong to the row behind it, and a\n // non-interactive control inside it (a picker's caret) could never reach\n // its own trigger. The run itself is therefore transparent to the pointer\n // and its children opt back in — see `ActionsChild` — so a child that\n // wants to stay transparent, like that caret, only has to say so.\n pointerEvents: 'none',\n\n padding: '0 $side-padding',\n // Only where the run is top-anchored: there the box has no bottom to\n // measure from, so `$size` is what gives it one. Everywhere else the two\n // insets decide the height, and this floor would force the box back to\n // `$size` and re-anchor it at the top.\n height: {\n '': 'min 0',\n '@block-description': 'min ($size - 2bw)',\n },\n opacity: {\n '': 1,\n '!actions-shown': 0,\n },\n // The run slides in as it fades, but only where it was taking no space to\n // begin with. Where the space is reserved the run has a fixed place in the\n // layout, and sliding it would read as the actions drifting rather than\n // appearing.\n translate: {\n '': '0 0',\n '!actions-shown & !preserve-actions-space': '.5x 0',\n },\n transition: 'theme, translate',\n\n // Size for the action buttons\n '$action-size': 'min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))',\n // Side padding for the button\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n },\n\n // Whatever a caller put in the run: interactive again, so the transparency\n // above applies only to the space BETWEEN and AROUND the actions. `*`\n // because the run's content is the caller's — there is no element name to\n // key on.\n ActionsChild: {\n $: '>Actions>*',\n pointerEvents: {\n '': 'auto',\n '!actions-shown': 'none',\n },\n },\n\n // A non-interactive box in the run, the same size as an action so it lines\n // up with one. `$side-padding + $action-size / 2` collapses to\n // `($size - 2bw) / 2` — the centre of `Item`'s own `rightIcon` square — so a\n // caret moved out of that slot and into the run does not move on screen.\n ActionIcon: {\n $: '>Actions>',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n width: '$action-size',\n height: '$action-size',\n // The run's children are interactive by default; this one is not, and a\n // press on it belongs to the row underneath.\n pointerEvents: 'none',\n // `--icon-size` comes from the preset, and the run is outside the row that\n // sets one — so the box restates the ladder `Item` uses. The `m` weights a\n // non-`item` type picks carry the same icon size as their plain\n // counterparts, so weight is not a factor here.\n preset: {\n '': 't3',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2',\n },\n },\n },\n});\n\n/**\n * A non-interactive box inside an actions run — a dropdown caret, a loading\n * spinner. It occupies an action's footprint so the run stays evenly spaced,\n * and it lets presses through to the row behind it.\n */\nexport function ItemActionIcon(props: { children: ReactNode }) {\n return <div data-element=\"ActionIcon\">{props.children}</div>;\n}\n\nexport interface ItemActionsWrapperProps {\n /**\n * The row or trigger the actions are laid over. Receives the resolved\n * visibility so it can reserve space for the run while it is shown, and\n * whether the reserved width must jump rather than animate (`Item`'s\n * `skipActionsWidthTransition`).\n */\n children: (state: {\n showActions: boolean;\n skipActionsWidthTransition: boolean;\n }) => ReactNode;\n /**\n * The run's content. Rendering the wrapper with an empty run is supported and\n * costs nothing — the measured width is 0 — which is how a trigger keeps its\n * markup stable across states that do and do not have trailing controls.\n */\n actions?: ReactNode;\n type?: string;\n theme?: string;\n /** `Item`'s size token, or a pixel number. */\n size?: CubeItemProps['size'];\n isDisabled?: boolean;\n disableActionsFocus?: boolean;\n /**\n * Hide the actions until the row is hovered, focused, or holds a pressed\n * control.\n * @default false\n */\n autoHideActions?: boolean;\n /**\n * Keep the run's width reserved while it is hidden, so the row does not\n * change size as the actions come and go. Only meaningful with\n * `autoHideActions`.\n *\n * It also keeps the run MOUNTED rather than transitioning it in and out:\n * an unmounted run cannot be measured, so a row that starts hidden would\n * have nothing to reserve.\n * @default false\n */\n preserveActionsSpace?: boolean;\n /** Extra modifiers for the wrapper, merged after the ones it derives itself. */\n mods?: Mods;\n /** Styles for the wrapper element — the one that is the row's layout box. */\n styles?: Styles;\n /** Extra props spread on the run's container, e.g. event handlers. */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\n/**\n * Wraps a row in the sibling-actions layout and publishes `--actions-width` so\n * the row can reserve the space the run covers.\n */\nexport function ItemActionsWrapper(props: ItemActionsWrapperProps) {\n const {\n children,\n actions,\n type = 'item',\n theme = 'default',\n size = 'medium',\n isDisabled,\n disableActionsFocus,\n autoHideActions = false,\n preserveActionsSpace = false,\n mods,\n styles,\n actionsProps,\n } = props;\n\n const actionsRef = useRef<HTMLDivElement>(null);\n const [actionsWidth, setActionsWidth] = useState(0);\n const [areActionsVisible, setAreActionsVisible] = useState(false);\n const [skipWidthTransition, setSkipWidthTransition] = useState(false);\n const isMountPassRef = useRef(true);\n\n useLayoutEffect(() => {\n const el = actionsRef.current;\n const isMountPass = isMountPassRef.current;\n\n isMountPassRef.current = false;\n\n if (!el) return;\n\n // An empty run still has the container's side padding, which would reserve\n // space inside the row for nothing. Nothing rendered means nothing to\n // reserve.\n const width = el.childElementCount ? Math.round(el.offsetWidth) : 0;\n\n if (width !== actionsWidth) {\n // The width a run reports on mount is where the row starts, not a change\n // to it. The `offsetWidth` read has already resolved the row at 0px, so\n // publishing with the transition on made every trigger grow by its caret\n // after mounting — and a click in that window sized FilterPicker's popover\n // from a half-grown trigger. A run revealed later still slides open.\n if (isMountPass) setSkipWidthTransition(true);\n setActionsWidth(width);\n } else if (skipWidthTransition) {\n // This pass's read resolved the row at its final width with the\n // transition off, so turning it back on animates nothing.\n setSkipWidthTransition(false);\n }\n }, [actions, areActionsVisible, actionsWidth, skipWidthTransition]);\n\n const [isFocusWithin, setIsFocusWithin] = useState(false);\n const [hasPressed, setHasPressed] = useState(false);\n const { hoverProps, isHovered } = useHover({});\n const { focusWithinProps } = useFocusWithin({\n onFocusWithinChange: setIsFocusWithin,\n });\n\n // Watch for data-pressed attribute on any descendant element\n useLayoutEffect(() => {\n const actionsEl = actionsRef.current;\n\n if (!actionsEl || !autoHideActions) return;\n\n const checkPressed = () => {\n setHasPressed(actionsEl.querySelector('[data-pressed]') !== null);\n };\n\n const observer = new MutationObserver(checkPressed);\n\n observer.observe(actionsEl, {\n attributes: true,\n attributeFilter: ['data-pressed'],\n subtree: true,\n });\n\n checkPressed();\n\n return () => observer.disconnect();\n }, [areActionsVisible, autoHideActions]);\n\n const shouldShowActions =\n isHovered || isFocusWithin || hasPressed || !autoHideActions;\n\n // `disabled` is on the wrapper so its variant can paint the row's DISABLED\n // label color, not just the resting one. Actions default to the `current` type\n // and suppress their own fade when the disabled state is inherited — on the\n // grounds that the host already faded the color they paint from — so without\n // this the wrapper would hand them a full-strength color and a disabled button\n // would sit next to full-strength actions. See `ITEM_RESTING_COLOR_VARIANTS`.\n const finalMods = {\n ...mods,\n ...(shouldShowActions ? { 'actions-shown': true } : null),\n ...(preserveActionsSpace ? { 'preserve-actions-space': true } : null),\n disabled: isDisabled,\n };\n\n return (\n <ItemActionsWrapperElement\n {...hoverProps}\n // The same resolver `Item` uses, so the wrapper cannot land on a\n // different variant than the row it wraps.\n variant={resolveItemVariant(theme, type)}\n data-size={size}\n data-type={type}\n data-theme={theme}\n mods={finalMods}\n styles={styles}\n style={\n {\n '--actions-width':\n areActionsVisible || !autoHideActions || preserveActionsSpace\n ? `${actionsWidth}px`\n : '0px',\n ...(typeof size === 'number' && { '--size': `${size}px` }),\n } as CSSProperties\n }\n >\n {children({\n showActions: shouldShowActions,\n skipActionsWidthTransition: skipWidthTransition,\n })}\n {/*\n The run is rendered under whatever press context the row sits in, and a\n `PressResponder` in that context reaches EVERY `usePress` below it — so\n an `ItemButton` / `TabButton` / picker trigger inside a `DialogTrigger`\n or a `MenuTrigger` handed its own actions the trigger's `onPress`, and\n pressing one toggled the overlay on top of running the action. The run\n belongs to the row, not to whatever opened around it: it clears the\n context so each action answers only to its own handler.\n */}\n <ClearPressResponder>\n <ItemActionProvider\n type={type}\n theme={theme}\n disableActionsFocus={disableActionsFocus}\n isDisabled={isDisabled}\n >\n {autoHideActions && !preserveActionsSpace ? (\n <DisplayTransition\n exposeUnmounted\n isShown={shouldShowActions}\n onPhaseChange={(phase) => {\n setAreActionsVisible(phase !== 'unmounted');\n }}\n >\n {({ ref: transitionRef }) => {\n return (\n <div\n {...focusWithinProps}\n {...actionsProps}\n ref={(node: any) => {\n actionsRef.current = node;\n transitionRef(node);\n }}\n data-element=\"Actions\"\n data-trigger-action=\"\"\n >\n {actions}\n </div>\n );\n }}\n </DisplayTransition>\n ) : (\n <div\n ref={actionsRef}\n {...actionsProps}\n data-element=\"Actions\"\n data-trigger-action=\"\"\n >\n {actions}\n </div>\n )}\n </ItemActionProvider>\n </ClearPressResponder>\n </ItemActionsWrapperElement>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAMkB,4BAA4Bf,MAAM;CAQtCgB,UAAUP;CACVQ,QAAQ;EAON,GAAGN;EAUH,sBAAsB;EAEtBO,SAAS;EACTC,UAAU;EACVC,cAAc;EACdC,YAAY;EAEZC,OAAO;GACL,IAAI;GACJ,eAAe;GACf,cAAc;GACd,eAAe;GACf,cAAc;GACd,eAAe;GAChB;EAEDC,SAAS;GACPC,GAAG;GACHL,UAAU;GAKVM,OAAO;IACL,IAAI;IACJ,aAAa;IACb,sBAAsB;IACtB,kCAAkC;IACnC;GACDP,SAAS;GACTQ,KAAK;GACLL,YAAY;GACZD,cAAc;GAQdO,eAAe;GAEfC,SAAS;GAKTC,QAAQ;IACN,IAAI;IACJ,sBAAsB;IACvB;GACDC,SAAS;IACP,IAAI;IACJ,kBAAkB;IACnB;GAKDC,WAAW;IACT,IAAI;IACJ,4CAA4C;IAC7C;GACDC,YAAY;GAGZ,gBAAgB;GAEhB,iBAAiB;GAClB;EAMDC,cAAc;GACZT,GAAG;GACHG,eAAe;IACb,IAAI;IACJ,kBAAkB;IACpB;GACD;EAMDO,YAAY;GACVV,GAAG;GACHN,SAAS;GACTG,YAAY;GACZD,cAAc;GACde,YAAY;GACZC,OAAO;GACPP,QAAQ;GAGRF,eAAe;GAKfU,QAAQ;IACN,IAAI;IACJ,eAAe;IACf,eAAe;IACjB;GACF;EACF;CACD,CAAC;;;;;;AAOF,SAAOC,eAAAC,OAAA;CAAA,MAAAf,IAAAgB,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAjB,EAAA,OAAAe,MAAAG,UAAA;AACED,OAAA,oBAAA;GAAkB,gBAAA;aAAcF,MAAKG;IAAgB;AAAAlB,IAAA,KAAAe,MAAAG;AAAAlB,IAAA,KAAAiB;OAAAA,MAAAjB,EAAA;AAAA,QAArDiB;;;;;;AAuDT,SAAOiB,mBAAAnB,OAAA;CAAA,MAAAf,IAAAgB,EAAA,GAAA;CACL,MAAA,EAAAE,UAAAK,SAAAC,MAAAP,IAAAQ,OAAAU,IAAAT,MAAAU,IAAAT,YAAAC,qBAAAC,iBAAAQ,IAAAP,sBAAAQ,IAAAP,MAAAtC,QAAAuC,iBAaIjB;CAVF,MAAAS,OAAAP,OAAAsB,SAAA,SAAAtB;CACA,MAAAQ,QAAAU,OAAAI,SAAA,YAAAJ;CACA,MAAAT,OAAAU,OAAAG,SAAA,WAAAH;CAGA,MAAAP,kBAAAQ,OAAAE,SAAA,QAAAF;CACA,MAAAP,uBAAAQ,OAAAC,SAAA,QAAAD;CAMF,MAAAE,aAAmB3D,OAAuB,KAAK;CAC/C,MAAA,CAAA4D,cAAAC,mBAAwC5D,SAAS,EAAE;CACnD,MAAA,CAAA6D,mBAAAC,wBAAkD9D,SAAS,MAAM;CACjE,MAAA,CAAA+D,qBAAAC,0BAAsDhE,SAAS,MAAM;CACrE,MAAAiE,iBAAuBlE,OAAO,KAAK;CAAC,IAAAmE;AAAA,KAAAhD,EAAA,OAAAyC,gBAAAzC,EAAA,OAAA6C,qBAAA;AAEpBG,aAAA;GACd,MAAAC,KAAWT,WAAUU;GACrB,MAAAC,cAAoBJ,eAAcG;AAElCH,kBAAcG,UAAW;AAEzB,OAAI,CAACD,GAAE;GAKP,MAAArC,QAAcqC,GAAEG,oBAAqBC,KAAIC,MAAOL,GAAEM,YAAiB,GAArD;AAEd,OAAI3C,UAAU6B,cAAY;AAMxB,QAAIU,YAAaL,wBAAuB,KAAK;AAC7CJ,oBAAgB9B,MAAM;cACbiC,oBAGTC,wBAAuB,MAAM;;AAEhC9C,IAAA,KAAAyC;AAAAzC,IAAA,KAAA6C;AAAA7C,IAAA,KAAAgD;OAAAA,MAAAhD,EAAA;CAAA,IAAAwD;AAAA,KAAAxD,EAAA,OAAAuB,WAAAvB,EAAA,OAAAyC,gBAAAzC,EAAA,OAAA2C,qBAAA3C,EAAA,OAAA6C,qBAAA;AAAEW,OAAA;GAACjC;GAASoB;GAAmBF;GAAcI;GAAoB;AAAA7C,IAAA,KAAAuB;AAAAvB,IAAA,KAAAyC;AAAAzC,IAAA,KAAA2C;AAAA3C,IAAA,KAAA6C;AAAA7C,IAAA,KAAAwD;OAAAA,MAAAxD,EAAA;AA1BlEpB,iBAAgBoE,IA0BbQ,GAAgE;CAEnE,MAAA,CAAAC,eAAAC,oBAA0C5E,SAAS,MAAM;CACzD,MAAA,CAAA6E,YAAAC,iBAAoC9E,SAAS,MAAM;CAAC,IAAA+E;AAAA,KAAA7D,EAAA,OAAA8D,OAAAC,IAAA,4BAAA,EAAA;AACTF,OAAA,EAAE;AAAA7D,IAAA,KAAA6D;OAAAA,MAAA7D,EAAA;CAA7C,MAAA,EAAAgE,YAAAC,cAAkCjF,SAAS6E,GAAG;CAAC,IAAAK;AAAA,KAAAlE,EAAA,OAAA8D,OAAAC,IAAA,4BAAA,EAAA;AACHG,OAAA,EAAAC,qBACrBT,kBACtB;AAAA1D,IAAA,KAAAkE;OAAAA,MAAAlE,EAAA;CAFD,MAAA,EAAAoE,qBAA6BrF,eAAemF,GAE1C;CAAC,IAAAG;AAAA,KAAArE,EAAA,QAAA6B,iBAAA;AAGawC,aAAA;GACd,MAAAC,YAAkB9B,WAAUU;AAE5B,OAAI,CAACoB,aAAD,CAAezC,gBAAe;GAElC,MAAA0C,qBAAqB;AACnBX,kBAAcU,UAASE,cAAe,iBAAiB,KAAK,KAAK;;GAGnE,MAAAC,WAAiB,IAAIC,iBAAiBH,aAAa;AAEnDE,YAAQE,QAASL,WAAW;IAAAM,YACd;IAAIC,iBACC,CAAC,eAAe;IAAAC,SACxB;IACV,CAAC;AAEFP,iBAAc;AAAA,gBAEDE,SAAQM,YAAa;;AACnC/E,IAAA,MAAA6B;AAAA7B,IAAA,MAAAqE;OAAAA,MAAArE,EAAA;CAAA,IAAAgF;AAAA,KAAAhF,EAAA,QAAA2C,qBAAA3C,EAAA,QAAA6B,iBAAA;AAAEmD,QAAA,CAACrC,mBAAmBd,gBAAgB;AAAA7B,IAAA,MAAA2C;AAAA3C,IAAA,MAAA6B;AAAA7B,IAAA,MAAAgF;OAAAA,OAAAhF,EAAA;AApBvCpB,iBAAgByF,IAoBbW,IAAqC;CAExC,MAAAC,oBACEhB,aAAAR,iBAAAE,cAAA,CAA6C9B;CAAgB,IAAAqD;AAAA,KAAAlF,EAAA,QAAAiF,mBAAA;AAUzDC,QAAAD,oBAAA,EAAA,iBAAuC,MAAa,GAApD;AAAoDjF,IAAA,MAAAiF;AAAAjF,IAAA,MAAAkF;OAAAA,OAAAlF,EAAA;CAAA,IAAAmF;AAAA,KAAAnF,EAAA,QAAA8B,sBAAA;AACpDqD,QAAArD,uBAAA,EAAA,0BAAmD,MAAa,GAAhE;AAAgE9B,IAAA,MAAA8B;AAAA9B,IAAA,MAAAmF;OAAAA,OAAAnF,EAAA;CAAA,IAAAoF;AAAA,KAAApF,EAAA,QAAA2B,cAAA3B,EAAA,QAAA+B,QAAA/B,EAAA,QAAAkF,OAAAlF,EAAA,QAAAmF,KAAA;AAHpDC,QAAA;GAAA,GACbrD;GAAI,GACHmD;GAAoD,GACpDC;GAAgEE,UAC1D1D;GACX;AAAA3B,IAAA,MAAA2B;AAAA3B,IAAA,MAAA+B;AAAA/B,IAAA,MAAAkF;AAAAlF,IAAA,MAAAmF;AAAAnF,IAAA,MAAAoF;OAAAA,OAAApF,EAAA;CALD,MAAAsF,YAAkBF;CAKhB,IAAAG;AAAA,KAAAvF,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AAOW+D,QAAArG,mBAAmBuC,OAAOD,KAAK;AAAAxB,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAAuF;OAAAA,OAAAvF,EAAA;CASlC,MAAAwF,MAAA7C,qBAAA,CAAsBd,mBAAtBC,uBAAA,GACOW,aAAY,MADnB;CAES,IAAAgD;AAAA,KAAAzF,EAAA,QAAA0B,MAAA;AACP+D,QAAA,OAAO/D,SAAS,YAAhB,EAAA,UAAwC,GAAGA,KAAI,KAAM;AAAA1B,IAAA,MAAA0B;AAAA1B,IAAA,MAAAyF;OAAAA,OAAAzF,EAAA;CAAA,IAAA0F;AAAA,KAAA1F,EAAA,QAAAwF,OAAAxF,EAAA,QAAAyF,KAAA;AAL3DC,QAAA;GAAA,mBAEIF;GAES,GACPC;GACL;AAAAzF,IAAA,MAAAwF;AAAAxF,IAAA,MAAAyF;AAAAzF,IAAA,MAAA0F;OAAAA,OAAA1F,EAAA;CAND,MAAA2F,MAAAD;CAMkB,IAAAE;AAAA,KAAA5F,EAAA,QAAAkB,YAAAlB,EAAA,QAAAiF,qBAAAjF,EAAA,QAAA6C,qBAAA;AAGnB+C,QAAA1E,SAAS;GAAAG,aACK4D;GAAiB3D,4BACFuB;GAC7B,CAAC;AAAA7C,IAAA,MAAAkB;AAAAlB,IAAA,MAAAiF;AAAAjF,IAAA,MAAA6C;AAAA7C,IAAA,MAAA4F;OAAAA,OAAA5F,EAAA;CAAA,IAAA6F;AAAA,KAAA7F,EAAA,QAAAuB,WAAAvB,EAAA,QAAAgC,gBAAAhC,EAAA,QAAA6B,mBAAA7B,EAAA,QAAAoE,oBAAApE,EAAA,QAAA8B,wBAAA9B,EAAA,QAAAiF,mBAAA;AAiBGY,QAAAhE,mBAAA,CAAoBC,uBACnB,oBAAC;GACC,iBAAA;GACSmD,SAAAA;GACM,gBAAAa,UAAA;AACblD,yBAAqBkD,UAAU,YAAY;;cAG5CC,QAAA;IAAC,MAAA,EAAAC,KAAAC,kBAAAF;AAAsB,WAEpB,oBAAA;KAWM,GAVA3B;KAAgB,GAChBpC;KACC,MAAAkE,SAAA;AACH1D,iBAAUU,UAAWgD;AACrBD,oBAAcC,KAAK;;KAER,gBAAA;KACO,uBAAA;eAEnB3E;MACG;;IAab,GARC,oBAAA;GACOiB,KAAAA;GAAU,GACXR;GACS,gBAAA;GACO,uBAAA;aAEnBT;IAEJ;AAAAvB,IAAA,MAAAuB;AAAAvB,IAAA,MAAAgC;AAAAhC,IAAA,MAAA6B;AAAA7B,IAAA,MAAAoE;AAAApE,IAAA,MAAA8B;AAAA9B,IAAA,MAAAiF;AAAAjF,IAAA,MAAA6F;OAAAA,OAAA7F,EAAA;CAAA,IAAA+F;AAAA,KAAA/F,EAAA,QAAA4B,uBAAA5B,EAAA,QAAA2B,cAAA3B,EAAA,QAAA6F,OAAA7F,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AAzCLuE,QAAA,oBAAC,iCACC,oBAAC;GACOvE;GACCC;GACcG;GACTD;aAEXkE;IAoCL,GAAsB;AAAA7F,IAAA,MAAA4B;AAAA5B,IAAA,MAAA2B;AAAA3B,IAAA,MAAA6F;AAAA7F,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAA+F;OAAAA,OAAA/F,EAAA;CAAA,IAAAmG;AAAA,KAAAnG,EAAA,QAAAsF,aAAAtF,EAAA,QAAAgE,cAAAhE,EAAA,QAAA0B,QAAA1B,EAAA,QAAAP,UAAAO,EAAA,QAAAuF,OAAAvF,EAAA,QAAA2F,OAAA3F,EAAA,QAAA4F,OAAA5F,EAAA,QAAA+F,OAAA/F,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AA5ExB2E,QAAA,qBAAC;GAAyB,GACpBnC;GAGK,SAAAuB;GACE7D,aAAAA;GACAF,aAAAA;GACCC,cAAAA;GACN6D,MAAAA;GACE7F;GAEN,OAAAkG;cASDC,KAaDG;IA4C0B;AAAA/F,IAAA,MAAAsF;AAAAtF,IAAA,MAAAgE;AAAAhE,IAAA,MAAA0B;AAAA1B,IAAA,MAAAP;AAAAO,IAAA,MAAAuF;AAAAvF,IAAA,MAAA2F;AAAA3F,IAAA,MAAA4F;AAAA5F,IAAA,MAAA+F;AAAA/F,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAAmG;OAAAA,OAAAnG,EAAA;AAAA,QA7E5BmG"}
1
+ {"version":3,"file":"ItemActionsWrapper.js","names":["ClearPressResponder","Mods","Styles","tasty","CSSProperties","HTMLAttributes","ReactNode","useLayoutEffect","useRef","useState","useFocusWithin","useHover","ITEM_RESTING_COLOR_VARIANTS","resolveItemVariant","ROW_STATE_ALIASES","CubeItemProps","DisplayTransition","ItemActionProvider","ItemActionsWrapperElement","variants","styles","display","position","placeContent","placeItems","$size","Actions","$","inset","gap","pointerEvents","padding","height","opacity","translate","transition","ActionsChild","ActionIcon","flexShrink","width","preset","ItemActionIcon","props","_c","t0","children","ItemActionsWrapperProps","state","showActions","skipActionsWidthTransition","actions","type","theme","size","isDisabled","disableActionsFocus","autoHideActions","preserveActionsSpace","mods","actionsProps","HTMLDivElement","ItemActionsWrapper","t1","t2","t3","t4","undefined","actionsRef","actionsWidth","setActionsWidth","areActionsVisible","setAreActionsVisible","skipWidthTransition","setSkipWidthTransition","isMountPassRef","t5","el","current","isMountPass","childElementCount","Math","round","offsetWidth","t6","isFocusWithin","setIsFocusWithin","hasPressed","setHasPressed","t7","Symbol","for","hoverProps","isHovered","t8","onFocusWithinChange","focusWithinProps","t9","actionsEl","checkPressed","querySelector","observer","MutationObserver","observe","attributes","attributeFilter","subtree","disconnect","t10","shouldShowActions","t11","t12","t13","disabled","finalMods","t14","t15","t16","t17","t18","t19","t20","phase","t21","ref","transitionRef","node","t22"],"sources":["../../../src/components/actions/ItemActionsWrapper.tsx"],"sourcesContent":["import { ClearPressResponder } from '@react-aria/interactions';\nimport { Mods, Styles, tasty } from '@tenphi/tasty';\nimport {\n CSSProperties,\n HTMLAttributes,\n ReactNode,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useFocusWithin, useHover } from 'react-aria';\n\nimport {\n ITEM_RESTING_COLOR_VARIANTS,\n resolveItemVariant,\n ROW_STATE_ALIASES,\n} from '../../data/item-themes';\nimport { CubeItemProps } from '../content/Item/Item';\nimport { DisplayTransition } from '../helpers/DisplayTransition/DisplayTransition';\n\nimport { ItemActionProvider } from './ItemActionContext';\n\n/**\n * The sibling-actions layout shared by `ItemButton` and the field triggers\n * (`Select` / `Picker` / `FilterPicker`).\n *\n * A row's actions cannot live inside the row when the row is itself a button:\n * that nests a `<button>` in a `<button>`, and a press on an action activates\n * the row. So the run is rendered as a SIBLING, laid over the row's trailing\n * end, and the row reserves the space for it through `--actions-width` — which\n * this file measures — and `Item`'s own `actions` placeholder column.\n *\n * The run is pointer-transparent; only its children take presses. That is what\n * lets a picker put its non-interactive caret in the run and still have a click\n * on the caret reach the trigger underneath, and it stops the run's padding and\n * inter-action gaps from swallowing presses meant for the row.\n *\n * Being a sibling also puts the run OUTSIDE the row for anything that asks\n * \"did this press land on my trigger?\" — an overlay opened by the row would\n * read a press on its own actions as a press outside and dismiss itself,\n * swallowing that press on the way. The run therefore marks itself with\n * `data-trigger-action`, which `isOwnActionsPress` resolves back to the row it\n * belongs to. See `actions-run.ts`.\n */\nconst ItemActionsWrapperElement = tasty({\n // Actions default to the `current` type, which paints from the inherited\n // `currentcolor` — but they are rendered as a SIBLING of the row here, not\n // inside it, so without this they would inherit the page color instead of the\n // row's. Harmless on the default theme (the two match) and plainly wrong on\n // any other: a `special` row would hand its actions the page's dark text to\n // tint with, on a dark purple surface. The variant carries the row's resting\n // color down so `currentcolor` means the same thing it does inside an `Item`.\n variants: ITEM_RESTING_COLOR_VARIANTS,\n styles: {\n // The row is the wrapper's own child, so the wrapper can read the one\n // interaction the row expresses as a COLOR change rather than a fill change.\n // Without it the label darkened under the finger while the caret and the\n // actions laid over the same row — which paint from the color this element\n // hands down — stayed at their resting tint. The variants restate it,\n // because that is where the colors keyed on it live.\n // eslint-disable-next-line tasty/no-style-spread -- shared with ITEM_RESTING_COLOR_VARIANTS, which declare the same states\n ...ROW_STATE_ALIASES,\n\n // The one layout the row does not want its actions centred in. A block\n // description stacks under the label and can make the row arbitrarily tall;\n // there the actions belong in the first line, beside the label, which is\n // what anchoring them to a `$size`-tall box at the top achieves. Every other\n // row — including one with an INLINE description — is a single band, and\n // centring is both what it wants and what survives a caller overriding the\n // height. Read off the row rather than plumbed through as a prop, because\n // `Item` is what decides the placement and it defaults by type.\n '@block-description': ':has(> [data-description=\"block\"])',\n\n display: 'grid',\n position: 'relative',\n placeContent: 'stretch',\n placeItems: 'stretch',\n\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: {\n $: '>',\n position: 'absolute',\n // Both insets set, so the run's BOX spans the row and `placeItems: center`\n // puts the actions on its centre line. What sits in the box does not grow\n // with it — every child is a fixed `$action-size`, which is capped so a\n // large row does not get oversized buttons.\n inset: {\n '': '1bw right dock',\n 'type=card': '(1bw + .5x) right dock',\n '@block-description': '1bw 1bw auto auto',\n 'type=card & @block-description': '(1bw + .5x) (1bw + .5x) auto auto',\n },\n display: 'flex',\n gap: '1bw',\n placeItems: 'center',\n placeContent: 'center end',\n\n // The run lies OVER the row. Left opaque, its padding and the gaps between\n // its actions eat presses that belong to the row behind it, and a\n // non-interactive control inside it (a picker's caret) could never reach\n // its own trigger. The run itself is therefore transparent to the pointer\n // and its children opt back in — see `ActionsChild` — so a child that\n // wants to stay transparent, like that caret, only has to say so.\n pointerEvents: 'none',\n\n padding: '0 $side-padding',\n // Only where the run is top-anchored: there the box has no bottom to\n // measure from, so `$size` is what gives it one. Everywhere else the two\n // insets decide the height, and this floor would force the box back to\n // `$size` and re-anchor it at the top.\n height: {\n '': 'min 0',\n '@block-description': 'min ($size - 2bw)',\n },\n opacity: {\n '': 1,\n '!actions-shown': 0,\n },\n // The run slides in as it fades, but only where it was taking no space to\n // begin with. Where the space is reserved the run has a fixed place in the\n // layout, and sliding it would read as the actions drifting rather than\n // appearing.\n translate: {\n '': '0 0',\n '!actions-shown & !preserve-actions-space': '.5x 0',\n },\n transition: 'theme, translate',\n\n // Size for the action buttons\n '$action-size': 'min(max((2x + 2bw), ($size - 1x - 2bw)), (3x - 2bw))',\n // Side padding for the button\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n },\n\n // Whatever a caller put in the run: interactive again, so the transparency\n // above applies only to the space BETWEEN and AROUND the actions. `*`\n // because the run's content is the caller's — there is no element name to\n // key on.\n ActionsChild: {\n $: '>Actions>*',\n pointerEvents: {\n '': 'auto',\n '!actions-shown': 'none',\n },\n },\n\n // A non-interactive box in the run, the same size as an action so it lines\n // up with one. `$side-padding + $action-size / 2` collapses to\n // `($size - 2bw) / 2` — the centre of `Item`'s own `rightIcon` square — so a\n // caret moved out of that slot and into the run does not move on screen.\n ActionIcon: {\n $: '>Actions>',\n display: 'grid',\n placeItems: 'center',\n placeContent: 'center',\n flexShrink: 0,\n width: '$action-size',\n height: '$action-size',\n // The run's children are interactive by default; this one is not, and a\n // press on it belongs to the row underneath.\n pointerEvents: 'none',\n // `--icon-size` comes from the preset, and the run is outside the row that\n // sets one — so the box restates the ladder `Item` uses. The `m` weights a\n // non-`item` type picks carry the same icon size as their plain\n // counterparts, so weight is not a factor here.\n preset: {\n '': 't3',\n 'size=xsmall': 't4',\n 'size=xlarge': 't2',\n },\n },\n },\n});\n\n/**\n * A non-interactive box inside an actions run — a dropdown caret, a loading\n * spinner. It occupies an action's footprint so the run stays evenly spaced,\n * and it lets presses through to the row behind it.\n */\nexport function ItemActionIcon(props: { children: ReactNode }) {\n return <div data-element=\"ActionIcon\">{props.children}</div>;\n}\n\nexport interface ItemActionsWrapperProps {\n /**\n * The row or trigger the actions are laid over. Receives the resolved\n * visibility so it can reserve space for the run while it is shown, and\n * whether the reserved width must jump rather than animate (`Item`'s\n * `skipActionsWidthTransition`).\n */\n children: (state: {\n showActions: boolean;\n skipActionsWidthTransition: boolean;\n }) => ReactNode;\n /**\n * The run's content. Rendering the wrapper with an empty run is supported and\n * costs nothing — the measured width is 0 — which is how a trigger keeps its\n * markup stable across states that do and do not have trailing controls.\n */\n actions?: ReactNode;\n type?: string;\n theme?: string;\n /** `Item`'s size token, or a pixel number. */\n size?: CubeItemProps['size'];\n isDisabled?: boolean;\n disableActionsFocus?: boolean;\n /**\n * Hide the actions until the row is hovered, focused, or holds a pressed\n * control.\n * @default false\n */\n autoHideActions?: boolean;\n /**\n * Keep the run's width reserved while it is hidden, so the row does not\n * change size as the actions come and go. Only meaningful with\n * `autoHideActions`.\n *\n * It also keeps the run MOUNTED rather than transitioning it in and out:\n * an unmounted run cannot be measured, so a row that starts hidden would\n * have nothing to reserve.\n * @default false\n */\n preserveActionsSpace?: boolean;\n /** Extra modifiers for the wrapper, merged after the ones it derives itself. */\n mods?: Mods;\n /** Styles for the wrapper element — the one that is the row's layout box. */\n styles?: Styles;\n /** Extra props spread on the run's container, e.g. event handlers. */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\n/**\n * Wraps a row in the sibling-actions layout and publishes `--actions-width` so\n * the row can reserve the space the run covers.\n */\nexport function ItemActionsWrapper(props: ItemActionsWrapperProps) {\n const {\n children,\n actions,\n type = 'item',\n theme = 'default',\n size = 'medium',\n isDisabled,\n disableActionsFocus,\n autoHideActions = false,\n preserveActionsSpace = false,\n mods,\n styles,\n actionsProps,\n } = props;\n\n const actionsRef = useRef<HTMLDivElement>(null);\n const [actionsWidth, setActionsWidth] = useState(0);\n const [areActionsVisible, setAreActionsVisible] = useState(false);\n const [skipWidthTransition, setSkipWidthTransition] = useState(false);\n const isMountPassRef = useRef(true);\n\n useLayoutEffect(() => {\n const el = actionsRef.current;\n const isMountPass = isMountPassRef.current;\n\n isMountPassRef.current = false;\n\n if (!el) return;\n\n // An empty run still has the container's side padding, which would reserve\n // space inside the row for nothing. Nothing rendered means nothing to\n // reserve.\n const width = el.childElementCount ? Math.round(el.offsetWidth) : 0;\n\n if (width !== actionsWidth) {\n // The width a run reports on mount is where the row starts, not a change\n // to it. The `offsetWidth` read has already resolved the row at 0px, so\n // publishing with the transition on made every trigger grow by its caret\n // after mounting — and a click in that window sized FilterPicker's popover\n // from a half-grown trigger. A run revealed later still slides open.\n if (isMountPass) setSkipWidthTransition(true);\n setActionsWidth(width);\n } else if (skipWidthTransition) {\n // This pass's read resolved the row at its final width with the\n // transition off, so turning it back on animates nothing.\n setSkipWidthTransition(false);\n }\n }, [actions, areActionsVisible, actionsWidth, skipWidthTransition]);\n\n const [isFocusWithin, setIsFocusWithin] = useState(false);\n const [hasPressed, setHasPressed] = useState(false);\n const { hoverProps, isHovered } = useHover({});\n const { focusWithinProps } = useFocusWithin({\n onFocusWithinChange: setIsFocusWithin,\n });\n\n // Watch for data-pressed attribute on any descendant element\n useLayoutEffect(() => {\n const actionsEl = actionsRef.current;\n\n if (!actionsEl || !autoHideActions) return;\n\n const checkPressed = () => {\n setHasPressed(actionsEl.querySelector('[data-pressed]') !== null);\n };\n\n const observer = new MutationObserver(checkPressed);\n\n observer.observe(actionsEl, {\n attributes: true,\n attributeFilter: ['data-pressed'],\n subtree: true,\n });\n\n checkPressed();\n\n return () => observer.disconnect();\n }, [areActionsVisible, autoHideActions]);\n\n const shouldShowActions =\n isHovered || isFocusWithin || hasPressed || !autoHideActions;\n\n // `disabled` is on the wrapper so its variant can paint the row's DISABLED\n // label color, not just the resting one. Actions default to the `current` type\n // and suppress their own fade when the disabled state is inherited — on the\n // grounds that the host already faded the color they paint from — so without\n // this the wrapper would hand them a full-strength color and a disabled button\n // would sit next to full-strength actions. See `ITEM_RESTING_COLOR_VARIANTS`.\n const finalMods = {\n ...mods,\n ...(shouldShowActions ? { 'actions-shown': true } : null),\n ...(preserveActionsSpace ? { 'preserve-actions-space': true } : null),\n disabled: isDisabled,\n };\n\n return (\n <ItemActionsWrapperElement\n {...hoverProps}\n // The same resolver `Item` uses, so the wrapper cannot land on a\n // different variant than the row it wraps.\n variant={resolveItemVariant(theme, type)}\n data-size={size}\n data-type={type}\n data-theme={theme}\n mods={finalMods}\n styles={styles}\n style={\n {\n '--actions-width':\n areActionsVisible || !autoHideActions || preserveActionsSpace\n ? `${actionsWidth}px`\n : '0px',\n ...(typeof size === 'number' && { '--size': `${size}px` }),\n } as CSSProperties\n }\n >\n {children({\n showActions: shouldShowActions,\n skipActionsWidthTransition: skipWidthTransition,\n })}\n {/*\n The run is rendered under whatever press context the row sits in, and a\n `PressResponder` in that context reaches EVERY `usePress` below it — so\n an `ItemButton` / `TabButton` / picker trigger inside a `DialogTrigger`\n or a `MenuTrigger` handed its own actions the trigger's `onPress`, and\n pressing one toggled the overlay on top of running the action. The run\n belongs to the row, not to whatever opened around it: it clears the\n context so each action answers only to its own handler.\n */}\n <ClearPressResponder>\n <ItemActionProvider\n type={type}\n theme={theme}\n disableActionsFocus={disableActionsFocus}\n isDisabled={isDisabled}\n >\n {autoHideActions && !preserveActionsSpace ? (\n <DisplayTransition\n exposeUnmounted\n isShown={shouldShowActions}\n onPhaseChange={(phase) => {\n setAreActionsVisible(phase !== 'unmounted');\n }}\n >\n {({ ref: transitionRef }) => {\n return (\n <div\n {...focusWithinProps}\n {...actionsProps}\n ref={(node: any) => {\n actionsRef.current = node;\n transitionRef(node);\n }}\n data-element=\"Actions\"\n data-trigger-action=\"\"\n >\n {actions}\n </div>\n );\n }}\n </DisplayTransition>\n ) : (\n <div\n ref={actionsRef}\n {...actionsProps}\n data-element=\"Actions\"\n data-trigger-action=\"\"\n >\n {actions}\n </div>\n )}\n </ItemActionProvider>\n </ClearPressResponder>\n </ItemActionsWrapperElement>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAMkB,4BAA4Bf,MAAM;CAQtCgB,UAAUP;CACVQ,QAAQ;EAQN,GAAGN;EAUH,sBAAsB;EAEtBO,SAAS;EACTC,UAAU;EACVC,cAAc;EACdC,YAAY;EAEZC,OAAO;GACL,IAAI;GACJ,eAAe;GACf,cAAc;GACd,eAAe;GACf,cAAc;GACd,eAAe;GAChB;EAEDC,SAAS;GACPC,GAAG;GACHL,UAAU;GAKVM,OAAO;IACL,IAAI;IACJ,aAAa;IACb,sBAAsB;IACtB,kCAAkC;IACnC;GACDP,SAAS;GACTQ,KAAK;GACLL,YAAY;GACZD,cAAc;GAQdO,eAAe;GAEfC,SAAS;GAKTC,QAAQ;IACN,IAAI;IACJ,sBAAsB;IACvB;GACDC,SAAS;IACP,IAAI;IACJ,kBAAkB;IACnB;GAKDC,WAAW;IACT,IAAI;IACJ,4CAA4C;IAC7C;GACDC,YAAY;GAGZ,gBAAgB;GAEhB,iBAAiB;GAClB;EAMDC,cAAc;GACZT,GAAG;GACHG,eAAe;IACb,IAAI;IACJ,kBAAkB;IACpB;GACD;EAMDO,YAAY;GACVV,GAAG;GACHN,SAAS;GACTG,YAAY;GACZD,cAAc;GACde,YAAY;GACZC,OAAO;GACPP,QAAQ;GAGRF,eAAe;GAKfU,QAAQ;IACN,IAAI;IACJ,eAAe;IACf,eAAe;IACjB;GACF;EACF;CACD,CAAC;;;;;;AAOF,SAAOC,eAAAC,OAAA;CAAA,MAAAf,IAAAgB,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAjB,EAAA,OAAAe,MAAAG,UAAA;AACED,OAAA,oBAAA;GAAkB,gBAAA;aAAcF,MAAKG;IAAgB;AAAAlB,IAAA,KAAAe,MAAAG;AAAAlB,IAAA,KAAAiB;OAAAA,MAAAjB,EAAA;AAAA,QAArDiB;;;;;;AAuDT,SAAOiB,mBAAAnB,OAAA;CAAA,MAAAf,IAAAgB,EAAA,GAAA;CACL,MAAA,EAAAE,UAAAK,SAAAC,MAAAP,IAAAQ,OAAAU,IAAAT,MAAAU,IAAAT,YAAAC,qBAAAC,iBAAAQ,IAAAP,sBAAAQ,IAAAP,MAAAtC,QAAAuC,iBAaIjB;CAVF,MAAAS,OAAAP,OAAAsB,SAAA,SAAAtB;CACA,MAAAQ,QAAAU,OAAAI,SAAA,YAAAJ;CACA,MAAAT,OAAAU,OAAAG,SAAA,WAAAH;CAGA,MAAAP,kBAAAQ,OAAAE,SAAA,QAAAF;CACA,MAAAP,uBAAAQ,OAAAC,SAAA,QAAAD;CAMF,MAAAE,aAAmB3D,OAAuB,KAAK;CAC/C,MAAA,CAAA4D,cAAAC,mBAAwC5D,SAAS,EAAE;CACnD,MAAA,CAAA6D,mBAAAC,wBAAkD9D,SAAS,MAAM;CACjE,MAAA,CAAA+D,qBAAAC,0BAAsDhE,SAAS,MAAM;CACrE,MAAAiE,iBAAuBlE,OAAO,KAAK;CAAC,IAAAmE;AAAA,KAAAhD,EAAA,OAAAyC,gBAAAzC,EAAA,OAAA6C,qBAAA;AAEpBG,aAAA;GACd,MAAAC,KAAWT,WAAUU;GACrB,MAAAC,cAAoBJ,eAAcG;AAElCH,kBAAcG,UAAW;AAEzB,OAAI,CAACD,GAAE;GAKP,MAAArC,QAAcqC,GAAEG,oBAAqBC,KAAIC,MAAOL,GAAEM,YAAiB,GAArD;AAEd,OAAI3C,UAAU6B,cAAY;AAMxB,QAAIU,YAAaL,wBAAuB,KAAK;AAC7CJ,oBAAgB9B,MAAM;cACbiC,oBAGTC,wBAAuB,MAAM;;AAEhC9C,IAAA,KAAAyC;AAAAzC,IAAA,KAAA6C;AAAA7C,IAAA,KAAAgD;OAAAA,MAAAhD,EAAA;CAAA,IAAAwD;AAAA,KAAAxD,EAAA,OAAAuB,WAAAvB,EAAA,OAAAyC,gBAAAzC,EAAA,OAAA2C,qBAAA3C,EAAA,OAAA6C,qBAAA;AAAEW,OAAA;GAACjC;GAASoB;GAAmBF;GAAcI;GAAoB;AAAA7C,IAAA,KAAAuB;AAAAvB,IAAA,KAAAyC;AAAAzC,IAAA,KAAA2C;AAAA3C,IAAA,KAAA6C;AAAA7C,IAAA,KAAAwD;OAAAA,MAAAxD,EAAA;AA1BlEpB,iBAAgBoE,IA0BbQ,GAAgE;CAEnE,MAAA,CAAAC,eAAAC,oBAA0C5E,SAAS,MAAM;CACzD,MAAA,CAAA6E,YAAAC,iBAAoC9E,SAAS,MAAM;CAAC,IAAA+E;AAAA,KAAA7D,EAAA,OAAA8D,OAAAC,IAAA,4BAAA,EAAA;AACTF,OAAA,EAAE;AAAA7D,IAAA,KAAA6D;OAAAA,MAAA7D,EAAA;CAA7C,MAAA,EAAAgE,YAAAC,cAAkCjF,SAAS6E,GAAG;CAAC,IAAAK;AAAA,KAAAlE,EAAA,OAAA8D,OAAAC,IAAA,4BAAA,EAAA;AACHG,OAAA,EAAAC,qBACrBT,kBACtB;AAAA1D,IAAA,KAAAkE;OAAAA,MAAAlE,EAAA;CAFD,MAAA,EAAAoE,qBAA6BrF,eAAemF,GAE1C;CAAC,IAAAG;AAAA,KAAArE,EAAA,QAAA6B,iBAAA;AAGawC,aAAA;GACd,MAAAC,YAAkB9B,WAAUU;AAE5B,OAAI,CAACoB,aAAD,CAAezC,gBAAe;GAElC,MAAA0C,qBAAqB;AACnBX,kBAAcU,UAASE,cAAe,iBAAiB,KAAK,KAAK;;GAGnE,MAAAC,WAAiB,IAAIC,iBAAiBH,aAAa;AAEnDE,YAAQE,QAASL,WAAW;IAAAM,YACd;IAAIC,iBACC,CAAC,eAAe;IAAAC,SACxB;IACV,CAAC;AAEFP,iBAAc;AAAA,gBAEDE,SAAQM,YAAa;;AACnC/E,IAAA,MAAA6B;AAAA7B,IAAA,MAAAqE;OAAAA,MAAArE,EAAA;CAAA,IAAAgF;AAAA,KAAAhF,EAAA,QAAA2C,qBAAA3C,EAAA,QAAA6B,iBAAA;AAAEmD,QAAA,CAACrC,mBAAmBd,gBAAgB;AAAA7B,IAAA,MAAA2C;AAAA3C,IAAA,MAAA6B;AAAA7B,IAAA,MAAAgF;OAAAA,OAAAhF,EAAA;AApBvCpB,iBAAgByF,IAoBbW,IAAqC;CAExC,MAAAC,oBACEhB,aAAAR,iBAAAE,cAAA,CAA6C9B;CAAgB,IAAAqD;AAAA,KAAAlF,EAAA,QAAAiF,mBAAA;AAUzDC,QAAAD,oBAAA,EAAA,iBAAuC,MAAa,GAApD;AAAoDjF,IAAA,MAAAiF;AAAAjF,IAAA,MAAAkF;OAAAA,OAAAlF,EAAA;CAAA,IAAAmF;AAAA,KAAAnF,EAAA,QAAA8B,sBAAA;AACpDqD,QAAArD,uBAAA,EAAA,0BAAmD,MAAa,GAAhE;AAAgE9B,IAAA,MAAA8B;AAAA9B,IAAA,MAAAmF;OAAAA,OAAAnF,EAAA;CAAA,IAAAoF;AAAA,KAAApF,EAAA,QAAA2B,cAAA3B,EAAA,QAAA+B,QAAA/B,EAAA,QAAAkF,OAAAlF,EAAA,QAAAmF,KAAA;AAHpDC,QAAA;GAAA,GACbrD;GAAI,GACHmD;GAAoD,GACpDC;GAAgEE,UAC1D1D;GACX;AAAA3B,IAAA,MAAA2B;AAAA3B,IAAA,MAAA+B;AAAA/B,IAAA,MAAAkF;AAAAlF,IAAA,MAAAmF;AAAAnF,IAAA,MAAAoF;OAAAA,OAAApF,EAAA;CALD,MAAAsF,YAAkBF;CAKhB,IAAAG;AAAA,KAAAvF,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AAOW+D,QAAArG,mBAAmBuC,OAAOD,KAAK;AAAAxB,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAAuF;OAAAA,OAAAvF,EAAA;CASlC,MAAAwF,MAAA7C,qBAAA,CAAsBd,mBAAtBC,uBAAA,GACOW,aAAY,MADnB;CAES,IAAAgD;AAAA,KAAAzF,EAAA,QAAA0B,MAAA;AACP+D,QAAA,OAAO/D,SAAS,YAAhB,EAAA,UAAwC,GAAGA,KAAI,KAAM;AAAA1B,IAAA,MAAA0B;AAAA1B,IAAA,MAAAyF;OAAAA,OAAAzF,EAAA;CAAA,IAAA0F;AAAA,KAAA1F,EAAA,QAAAwF,OAAAxF,EAAA,QAAAyF,KAAA;AAL3DC,QAAA;GAAA,mBAEIF;GAES,GACPC;GACL;AAAAzF,IAAA,MAAAwF;AAAAxF,IAAA,MAAAyF;AAAAzF,IAAA,MAAA0F;OAAAA,OAAA1F,EAAA;CAND,MAAA2F,MAAAD;CAMkB,IAAAE;AAAA,KAAA5F,EAAA,QAAAkB,YAAAlB,EAAA,QAAAiF,qBAAAjF,EAAA,QAAA6C,qBAAA;AAGnB+C,QAAA1E,SAAS;GAAAG,aACK4D;GAAiB3D,4BACFuB;GAC7B,CAAC;AAAA7C,IAAA,MAAAkB;AAAAlB,IAAA,MAAAiF;AAAAjF,IAAA,MAAA6C;AAAA7C,IAAA,MAAA4F;OAAAA,OAAA5F,EAAA;CAAA,IAAA6F;AAAA,KAAA7F,EAAA,QAAAuB,WAAAvB,EAAA,QAAAgC,gBAAAhC,EAAA,QAAA6B,mBAAA7B,EAAA,QAAAoE,oBAAApE,EAAA,QAAA8B,wBAAA9B,EAAA,QAAAiF,mBAAA;AAiBGY,QAAAhE,mBAAA,CAAoBC,uBACnB,oBAAC;GACC,iBAAA;GACSmD,SAAAA;GACM,gBAAAa,UAAA;AACblD,yBAAqBkD,UAAU,YAAY;;cAG5CC,QAAA;IAAC,MAAA,EAAAC,KAAAC,kBAAAF;AAAsB,WAEpB,oBAAA;KAWM,GAVA3B;KAAgB,GAChBpC;KACC,MAAAkE,SAAA;AACH1D,iBAAUU,UAAWgD;AACrBD,oBAAcC,KAAK;;KAER,gBAAA;KACO,uBAAA;eAEnB3E;MACG;;IAab,GARC,oBAAA;GACOiB,KAAAA;GAAU,GACXR;GACS,gBAAA;GACO,uBAAA;aAEnBT;IAEJ;AAAAvB,IAAA,MAAAuB;AAAAvB,IAAA,MAAAgC;AAAAhC,IAAA,MAAA6B;AAAA7B,IAAA,MAAAoE;AAAApE,IAAA,MAAA8B;AAAA9B,IAAA,MAAAiF;AAAAjF,IAAA,MAAA6F;OAAAA,OAAA7F,EAAA;CAAA,IAAA+F;AAAA,KAAA/F,EAAA,QAAA4B,uBAAA5B,EAAA,QAAA2B,cAAA3B,EAAA,QAAA6F,OAAA7F,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AAzCLuE,QAAA,oBAAC,iCACC,oBAAC;GACOvE;GACCC;GACcG;GACTD;aAEXkE;IAoCL,GAAsB;AAAA7F,IAAA,MAAA4B;AAAA5B,IAAA,MAAA2B;AAAA3B,IAAA,MAAA6F;AAAA7F,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAA+F;OAAAA,OAAA/F,EAAA;CAAA,IAAAmG;AAAA,KAAAnG,EAAA,QAAAsF,aAAAtF,EAAA,QAAAgE,cAAAhE,EAAA,QAAA0B,QAAA1B,EAAA,QAAAP,UAAAO,EAAA,QAAAuF,OAAAvF,EAAA,QAAA2F,OAAA3F,EAAA,QAAA4F,OAAA5F,EAAA,QAAA+F,OAAA/F,EAAA,QAAAyB,SAAAzB,EAAA,QAAAwB,MAAA;AA5ExB2E,QAAA,qBAAC;GAAyB,GACpBnC;GAGK,SAAAuB;GACE7D,aAAAA;GACAF,aAAAA;GACCC,cAAAA;GACN6D,MAAAA;GACE7F;GAEN,OAAAkG;cASDC,KAaDG;IA4C0B;AAAA/F,IAAA,MAAAsF;AAAAtF,IAAA,MAAAgE;AAAAhE,IAAA,MAAA0B;AAAA1B,IAAA,MAAAP;AAAAO,IAAA,MAAAuF;AAAAvF,IAAA,MAAA2F;AAAA3F,IAAA,MAAA4F;AAAA5F,IAAA,MAAA+F;AAAA/F,IAAA,MAAAyB;AAAAzB,IAAA,MAAAwB;AAAAxB,IAAA,MAAAmG;OAAAA,OAAAnG,EAAA;AAAA,QA7E5BmG"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../utils/react/mergeProps.js";
3
3
  import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useDismissParentPopover } from "../../../utils/react/usePopoverSync.js";
@@ -23,7 +23,7 @@ const StyledItem = tasty(_Item, {
23
23
  }
24
24
  });
25
25
  const ItemButton = forwardRef(function ItemButton(allProps, ref) {
26
- const { mods, to, htmlType, as, type = "item", theme = "default", onPress, onPressStart: _onPressStart, onPressEnd: _onPressEnd, onPressChange: _onPressChange, onPressUp: _onPressUp, actions, actionsProps, size = "medium", wrapperStyles, autoHideActions = false, disableActionsFocus = false, isDisabled, isLoading = false, ...rest } = allProps;
26
+ const { mods, to, htmlType, as, type = "item", theme = "default", onPress, onPressStart: _onPressStart, onPressEnd: _onPressEnd, onPressChange: _onPressChange, onPressUp: _onPressUp, navigationOptions: _navigationOptions, label: _label, actions, actionsProps, size = "medium", wrapperStyles, autoHideActions = false, disableActionsFocus = false, isDisabled, isLoading = false, ...rest } = allProps;
27
27
  const finalIsDisabled = isDisabled === true || isLoading && isDisabled !== false;
28
28
  const dismissParentPopover = useDismissParentPopover();
29
29
  const buttonElementRef = useRef(null);
@@ -32,7 +32,7 @@ const ItemButton = forwardRef(function ItemButton(allProps, ref) {
32
32
  const el = buttonElementRef.current;
33
33
  if (!el) return;
34
34
  if (el.hasAttribute("data-popover-trigger")) return;
35
- if (el.closest("[data-popover-keep]")) return;
35
+ if (el.closest("[data-popover-keep], [data-popover-keep-on-press]")) return;
36
36
  dismissParentPopover(el);
37
37
  });
38
38
  const { actionProps } = useAction({
@@ -1 +1 @@
1
- {"version":3,"file":"ItemButton.js","names":["FocusableRef","PressEvent","Styles","tasty","forwardRef","HTMLAttributes","ReactNode","useMemo","useRef","useEvent","mergeProps","mergeRefs","useDismissParentPopover","CubeItemProps","Item","ItemBadge","CubeItemActionProps","ItemAction","ItemActionsWrapper","CubeUseActionProps","useAction","CubeItemButtonProps","Omit","actions","size","wrapperStyles","actionsProps","HTMLDivElement","StyledItem","as","type","theme","styles","recipe","placeContent","ItemButton","allProps","ref","HTMLElement","mods","to","htmlType","onPress","onPressStart","_onPressStart","onPressEnd","_onPressEnd","onPressChange","_onPressChange","onPressUp","_onPressUp","autoHideActions","disableActionsFocus","isDisabled","isLoading","rest","finalIsDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","combinedRef","hasHadActions","undefined","withWrapper","ariaPressed","isSelected","role","renderButton","showActions","skipActionsWidthTransition","_ItemButton","Object","assign","Action","Badge","ItemButtonProps","ItemActionProps"],"sources":["../../../../src/components/actions/ItemButton/ItemButton.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport { forwardRef, HTMLAttributes, ReactNode, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport {\n mergeProps,\n mergeRefs,\n useDismissParentPopover,\n} from '../../../utils/react';\nimport { CubeItemProps, Item } from '../../content/Item';\nimport { ItemBadge } from '../../content/ItemBadge';\nimport { CubeItemActionProps, ItemAction } from '../ItemAction';\nimport { ItemActionsWrapper } from '../ItemActionsWrapper';\nimport { CubeUseActionProps, useAction } from '../use-action';\n\nexport interface CubeItemButtonProps\n extends Omit<CubeItemProps, 'size'>,\n Omit<CubeUseActionProps, 'as'> {\n /**\n * The row's trailing controls, rendered beside the button rather than inside\n * it. Pass `null` to keep an empty run — the row reserves no space for it, and\n * the button is not remounted when the actions arrive later.\n */\n actions?: ReactNode;\n size?: Omit<CubeItemProps['size'], 'inline'>;\n wrapperStyles?: Styles;\n /**\n * Extra props spread on the actions run's container, e.g. event handlers.\n * Only meaningful together with `actions`.\n */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst StyledItem = tasty(Item, {\n as: 'button',\n type: 'item',\n theme: 'default',\n styles: {\n recipe: 'reset button',\n placeContent: 'center stretch',\n },\n});\n\nconst ItemButton = forwardRef(function ItemButton(\n allProps: CubeItemButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const {\n mods,\n to,\n htmlType,\n as,\n type = 'item',\n theme = 'default',\n onPress,\n // Extract react-aria press callbacks to prevent them from leaking to DOM via rest.\n // These are handled by useButton inside useAction.\n onPressStart: _onPressStart,\n onPressEnd: _onPressEnd,\n onPressChange: _onPressChange,\n onPressUp: _onPressUp,\n actions,\n actionsProps,\n size = 'medium',\n wrapperStyles,\n autoHideActions = false,\n disableActionsFocus = false,\n isDisabled,\n isLoading = false,\n ...rest\n } = allProps as CubeItemButtonProps & {\n as?: 'a' | 'button' | 'div' | 'span';\n };\n\n // Loading state makes the component disabled (same logic as Item)\n const finalIsDisabled =\n isDisabled === true || (isLoading && isDisabled !== false);\n\n // Default: pressing an ItemButton inside an open popover closes that\n // popover. Opt-outs: `data-popover-trigger` on self (applied by\n // FilterPicker / Picker / Select / MenuTrigger for their own triggers) and\n // `data-popover-keep` on self or any ancestor. Modals don't subscribe.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n onPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep]')) return;\n dismissParentPopover(el);\n });\n\n const { actionProps } = useAction(\n {\n ...(allProps as any),\n htmlType,\n to,\n as,\n mods,\n isDisabled: finalIsDisabled,\n onPress: wrappedOnPress,\n },\n ref,\n );\n\n // Merge the useAction-supplied ref with our internal ref so the dismiss\n // wrapper can read the rendered DOM node at press time.\n const combinedRef = useMemo(\n () => mergeRefs(actionProps.ref as any, buttonElementRef),\n [actionProps.ref],\n );\n\n // Once a row has had actions it keeps the wrapper, even after they go away.\n // Adding or removing a DOM level around the button remounts it — losing focus,\n // any running transition, and the element every ref in the tree is holding —\n // and a row whose actions come and go with a permission or a loading flag\n // would do that on every flip. The empty run costs nothing: it publishes a\n // width of 0, so the row reserves no space for it.\n //\n // `null` is how a caller asks for the run up front — \"there is a run here, it\n // just has nothing in it right now\" — so a row that knows its actions are\n // coming never has to remount to receive them. Only `undefined` means the row\n // has no run at all.\n const hasHadActions = useRef(false);\n\n if (actions !== undefined) {\n hasHadActions.current = true;\n }\n\n const withWrapper = hasHadActions.current;\n\n // `isSelected` on a button is a toggle state, so it reads as `aria-pressed`,\n // as `Button` does. Skipped on a link (`to`), for a call site's own `role` (a\n // tab or option wants `aria-selected`), and on a trigger that reports\n // `aria-expanded`, which is its state instead. An explicit value still wins.\n //\n // Set after the spread: `useButton` always returns an `aria-pressed` key,\n // undefined when the caller passed none, which would overwrite it.\n const ariaPressed =\n allProps['aria-pressed'] ??\n (allProps.isSelected != null &&\n actionProps.as !== 'a' &&\n allProps.role == null &&\n allProps['aria-expanded'] == null\n ? allProps.isSelected\n : undefined);\n\n const renderButton = (\n showActions: boolean,\n skipActionsWidthTransition = false,\n ) => (\n <StyledItem\n // Two different questions. `insideWrapper` is \"am I laid out for a\n // sibling run\", which stays true so the DOM does not restructure;\n // `actions` is \"is there anything in that run to reserve width for\",\n // which must go back to false when the run empties — it drives the\n // two-square minimum width and the suffix's padding, and a row that\n // reserved space for nothing would sit wider than it needs to.\n insideWrapper={withWrapper}\n showActions={showActions}\n skipActionsWidthTransition={skipActionsWidthTransition}\n actions={actions ? true : undefined}\n {...(mergeProps(rest, actionProps) as any)}\n aria-pressed={ariaPressed}\n ref={combinedRef}\n data-popover-dismiss=\"\"\n htmlType={actionProps.type}\n type={type}\n theme={theme}\n size={size}\n isLoading={isLoading}\n isDisabled={isDisabled}\n />\n );\n\n if (withWrapper) {\n return (\n <ItemActionsWrapper\n type={type}\n theme={theme}\n size={size as CubeItemProps['size']}\n mods={mods}\n styles={wrapperStyles}\n actions={actions}\n actionsProps={actionsProps}\n autoHideActions={autoHideActions}\n disableActionsFocus={disableActionsFocus}\n isDisabled={finalIsDisabled}\n >\n {({ showActions, skipActionsWidthTransition }) =>\n renderButton(showActions, skipActionsWidthTransition)\n }\n </ItemActionsWrapper>\n );\n }\n\n return renderButton(false);\n});\n\nconst _ItemButton = Object.assign(ItemButton, {\n Action: ItemAction,\n Badge: ItemBadge,\n});\n\nexport { _ItemButton as ItemButton };\nexport type {\n CubeItemButtonProps as ItemButtonProps,\n CubeItemActionProps as ItemActionProps,\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,MAAM4B,aAAazB,MAAMW,OAAM;CAC7Be,IAAI;CACJC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNC,QAAQ;EACRC,cAAc;EAChB;CACD,CAAC;AAEF,MAAMC,aAAa/B,WAAW,SAAS+B,WACrCC,UACAC,KACA;CACA,MAAM,EACJE,MACAC,IACAC,UACAZ,IACAC,OAAO,QACPC,QAAQ,WACRW,SAGAC,cAAcC,eACdC,YAAYC,aACZC,eAAeC,gBACfC,WAAWC,YACX3B,SACAG,cACAF,OAAO,UACPC,eACA0B,kBAAkB,OAClBC,sBAAsB,OACtBC,YACAC,YAAY,OACZ,GAAGC,SACDnB;CAKJ,MAAMoB,kBACJH,eAAe,QAASC,aAAaD,eAAe;CAMtD,MAAMI,uBAAuB7C,yBAAyB;CACtD,MAAM8C,mBAAmBlD,OAA2B,KAAK;CAEzD,MAAMmD,iBAAiBlD,UAAUmD,MAAkB;AACjDlB,YAAUkB,EAAE;EACZ,MAAMC,KAAKH,iBAAiBI;AAC5B,MAAI,CAACD,GAAI;AACT,MAAIA,GAAGE,aAAa,uBAAuB,CAAE;AAC7C,MAAIF,GAAGG,QAAQ,sBAAsB,CAAE;AACvCP,uBAAqBI,GAAG;GACxB;CAEF,MAAM,EAAEI,gBAAgB7C,UACtB;EACE,GAAIgB;EACJK;EACAD;EACAX;EACAU;EACAc,YAAYG;EACZd,SAASiB;EACV,EACDtB,IACD;CAID,MAAM6B,cAAc3D,cACZI,UAAUsD,YAAY5B,KAAYqB,iBAAiB,EACzD,CAACO,YAAY5B,IACf,CAAC;CAaD,MAAM8B,gBAAgB3D,OAAO,MAAM;AAEnC,KAAIe,YAAY6C,OACdD,eAAcL,UAAU;CAG1B,MAAMO,cAAcF,cAAcL;CASlC,MAAMQ,cACJlC,SAAS,oBACRA,SAASmC,cAAc,QACxBN,YAAYpC,OAAO,OACnBO,SAASoC,QAAQ,QACjBpC,SAAS,oBAAoB,OACzBA,SAASmC,aACTH;CAEN,MAAMK,gBACJC,aACAC,6BAA6B,UAE7B,oBAAC;EAOC,eAAeN;EACFK;EACeC;EAC5B,SAASpD,UAAU,OAAO6C;EAC1B,GAAK1D,WAAW6C,MAAMU,YAAY;EAClC,gBAAcK;EACd,KAAKJ;EACL,wBAAqB;EACrB,UAAUD,YAAYnC;EAChBA;EACCC;EACDP;EACK8B;EACCD;GAEf;AAED,KAAIgB,YACF,QACE,oBAAC;EACOvC;EACCC;EACDP;EACAe;EACN,QAAQd;EACCF;EACKG;EACGyB;EACIC;EACrB,YAAYI;aAEV,EAAEkB,aAAAA,eAAaC,4BAAAA,mCACfF,aAAaC,eAAaC,6BAC5B;GACmB;AAIzB,QAAOF,aAAa,MAAM;EAC1B;AAEF,MAAMG,cAAcC,OAAOC,OAAO3C,YAAY;CAC5C4C,QAAQ9D;CACR+D,OAAOjE;CACR,CAAC"}
1
+ {"version":3,"file":"ItemButton.js","names":["FocusableRef","PressEvent","Styles","tasty","forwardRef","HTMLAttributes","ReactNode","useMemo","useRef","useEvent","mergeProps","mergeRefs","useDismissParentPopover","CubeItemProps","Item","ItemBadge","CubeItemActionProps","ItemAction","ItemActionsWrapper","CubeUseActionProps","useAction","CubeItemButtonProps","Omit","actions","size","wrapperStyles","actionsProps","HTMLDivElement","StyledItem","as","type","theme","styles","recipe","placeContent","ItemButton","allProps","ref","HTMLElement","mods","to","htmlType","onPress","onPressStart","_onPressStart","onPressEnd","_onPressEnd","onPressChange","_onPressChange","onPressUp","_onPressUp","navigationOptions","_navigationOptions","label","_label","autoHideActions","disableActionsFocus","isDisabled","isLoading","rest","finalIsDisabled","dismissParentPopover","buttonElementRef","wrappedOnPress","e","el","current","hasAttribute","closest","actionProps","combinedRef","hasHadActions","undefined","withWrapper","ariaPressed","isSelected","role","renderButton","showActions","skipActionsWidthTransition","_ItemButton","Object","assign","Action","Badge","ItemButtonProps","ItemActionProps"],"sources":["../../../../src/components/actions/ItemButton/ItemButton.tsx"],"sourcesContent":["import { FocusableRef, PressEvent } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport { forwardRef, HTMLAttributes, ReactNode, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport {\n mergeProps,\n mergeRefs,\n useDismissParentPopover,\n} from '../../../utils/react';\nimport { CubeItemProps, Item } from '../../content/Item';\nimport { ItemBadge } from '../../content/ItemBadge';\nimport { CubeItemActionProps, ItemAction } from '../ItemAction';\nimport { ItemActionsWrapper } from '../ItemActionsWrapper';\nimport { CubeUseActionProps, useAction } from '../use-action';\n\nexport interface CubeItemButtonProps\n extends Omit<CubeItemProps, 'size'>,\n Omit<CubeUseActionProps, 'as'> {\n /**\n * The row's trailing controls, rendered beside the button rather than inside\n * it. Pass `null` to keep an empty run — the row reserves no space for it, and\n * the button is not remounted when the actions arrive later.\n */\n actions?: ReactNode;\n size?: Omit<CubeItemProps['size'], 'inline'>;\n wrapperStyles?: Styles;\n /**\n * Extra props spread on the actions run's container, e.g. event handlers.\n * Only meaningful together with `actions`.\n */\n actionsProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst StyledItem = tasty(Item, {\n as: 'button',\n type: 'item',\n theme: 'default',\n styles: {\n recipe: 'reset button',\n placeContent: 'center stretch',\n },\n});\n\nconst ItemButton = forwardRef(function ItemButton(\n allProps: CubeItemButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const {\n mods,\n to,\n htmlType,\n as,\n type = 'item',\n theme = 'default',\n onPress,\n // Extract react-aria press callbacks to prevent them from leaking to DOM via rest.\n // These are handled by useButton inside useAction.\n onPressStart: _onPressStart,\n onPressEnd: _onPressEnd,\n onPressChange: _onPressChange,\n onPressUp: _onPressUp,\n // Consumed by useAction (it reads `allProps`); kept off the DOM element.\n navigationOptions: _navigationOptions,\n label: _label,\n actions,\n actionsProps,\n size = 'medium',\n wrapperStyles,\n autoHideActions = false,\n disableActionsFocus = false,\n isDisabled,\n isLoading = false,\n ...rest\n } = allProps as CubeItemButtonProps & {\n as?: 'a' | 'button' | 'div' | 'span';\n };\n\n // Loading state makes the component disabled (same logic as Item)\n const finalIsDisabled =\n isDisabled === true || (isLoading && isDisabled !== false);\n\n // Default: pressing an ItemButton inside an open popover closes that\n // popover. Opt-outs: `data-popover-trigger` on self (applied by\n // FilterPicker / Picker / Select / MenuTrigger for their own triggers) and\n // `data-popover-keep` or `data-popover-keep-on-press` (presses only, see\n // Button) on self or any ancestor. Modals don't subscribe.\n const dismissParentPopover = useDismissParentPopover();\n const buttonElementRef = useRef<HTMLElement | null>(null);\n\n const wrappedOnPress = useEvent((e: PressEvent) => {\n onPress?.(e);\n const el = buttonElementRef.current;\n if (!el) return;\n if (el.hasAttribute('data-popover-trigger')) return;\n if (el.closest('[data-popover-keep], [data-popover-keep-on-press]')) {\n return;\n }\n dismissParentPopover(el);\n });\n\n const { actionProps } = useAction(\n {\n ...(allProps as any),\n htmlType,\n to,\n as,\n mods,\n isDisabled: finalIsDisabled,\n onPress: wrappedOnPress,\n },\n ref,\n );\n\n // Merge the useAction-supplied ref with our internal ref so the dismiss\n // wrapper can read the rendered DOM node at press time.\n const combinedRef = useMemo(\n () => mergeRefs(actionProps.ref as any, buttonElementRef),\n [actionProps.ref],\n );\n\n // Once a row has had actions it keeps the wrapper, even after they go away.\n // Adding or removing a DOM level around the button remounts it — losing focus,\n // any running transition, and the element every ref in the tree is holding —\n // and a row whose actions come and go with a permission or a loading flag\n // would do that on every flip. The empty run costs nothing: it publishes a\n // width of 0, so the row reserves no space for it.\n //\n // `null` is how a caller asks for the run up front — \"there is a run here, it\n // just has nothing in it right now\" — so a row that knows its actions are\n // coming never has to remount to receive them. Only `undefined` means the row\n // has no run at all.\n const hasHadActions = useRef(false);\n\n if (actions !== undefined) {\n hasHadActions.current = true;\n }\n\n const withWrapper = hasHadActions.current;\n\n // `isSelected` on a button is a toggle state, so it reads as `aria-pressed`,\n // as `Button` does. Skipped on a link (`to`), for a call site's own `role` (a\n // tab or option wants `aria-selected`), and on a trigger that reports\n // `aria-expanded`, which is its state instead. An explicit value still wins.\n //\n // Set after the spread: `useButton` always returns an `aria-pressed` key,\n // undefined when the caller passed none, which would overwrite it.\n const ariaPressed =\n allProps['aria-pressed'] ??\n (allProps.isSelected != null &&\n actionProps.as !== 'a' &&\n allProps.role == null &&\n allProps['aria-expanded'] == null\n ? allProps.isSelected\n : undefined);\n\n const renderButton = (\n showActions: boolean,\n skipActionsWidthTransition = false,\n ) => (\n <StyledItem\n // Two different questions. `insideWrapper` is \"am I laid out for a\n // sibling run\", which stays true so the DOM does not restructure;\n // `actions` is \"is there anything in that run to reserve width for\",\n // which must go back to false when the run empties — it drives the\n // two-square minimum width and the suffix's padding, and a row that\n // reserved space for nothing would sit wider than it needs to.\n insideWrapper={withWrapper}\n showActions={showActions}\n skipActionsWidthTransition={skipActionsWidthTransition}\n actions={actions ? true : undefined}\n {...(mergeProps(rest, actionProps) as any)}\n aria-pressed={ariaPressed}\n ref={combinedRef}\n data-popover-dismiss=\"\"\n htmlType={actionProps.type}\n type={type}\n theme={theme}\n size={size}\n isLoading={isLoading}\n isDisabled={isDisabled}\n />\n );\n\n if (withWrapper) {\n return (\n <ItemActionsWrapper\n type={type}\n theme={theme}\n size={size as CubeItemProps['size']}\n mods={mods}\n styles={wrapperStyles}\n actions={actions}\n actionsProps={actionsProps}\n autoHideActions={autoHideActions}\n disableActionsFocus={disableActionsFocus}\n isDisabled={finalIsDisabled}\n >\n {({ showActions, skipActionsWidthTransition }) =>\n renderButton(showActions, skipActionsWidthTransition)\n }\n </ItemActionsWrapper>\n );\n }\n\n return renderButton(false);\n});\n\nconst _ItemButton = Object.assign(ItemButton, {\n Action: ItemAction,\n Badge: ItemBadge,\n});\n\nexport { _ItemButton as ItemButton };\nexport type {\n CubeItemButtonProps as ItemButtonProps,\n CubeItemActionProps as ItemActionProps,\n};\n"],"mappings":";;;;;;;;;;;;;;;AAkCA,MAAM4B,aAAazB,MAAMW,OAAM;CAC7Be,IAAI;CACJC,MAAM;CACNC,OAAO;CACPC,QAAQ;EACNC,QAAQ;EACRC,cAAc;EAChB;CACD,CAAC;AAEF,MAAMC,aAAa/B,WAAW,SAAS+B,WACrCC,UACAC,KACA;CACA,MAAM,EACJE,MACAC,IACAC,UACAZ,IACAC,OAAO,QACPC,QAAQ,WACRW,SAGAC,cAAcC,eACdC,YAAYC,aACZC,eAAeC,gBACfC,WAAWC,YAEXC,mBAAmBC,oBACnBC,OAAOC,QACP/B,SACAG,cACAF,OAAO,UACPC,eACA8B,kBAAkB,OAClBC,sBAAsB,OACtBC,YACAC,YAAY,OACZ,GAAGC,SACDvB;CAKJ,MAAMwB,kBACJH,eAAe,QAASC,aAAaD,eAAe;CAOtD,MAAMI,uBAAuBjD,yBAAyB;CACtD,MAAMkD,mBAAmBtD,OAA2B,KAAK;CAEzD,MAAMuD,iBAAiBtD,UAAUuD,MAAkB;AACjDtB,YAAUsB,EAAE;EACZ,MAAMC,KAAKH,iBAAiBI;AAC5B,MAAI,CAACD,GAAI;AACT,MAAIA,GAAGE,aAAa,uBAAuB,CAAE;AAC7C,MAAIF,GAAGG,QAAQ,oDAAoD,CACjE;AAEFP,uBAAqBI,GAAG;GACxB;CAEF,MAAM,EAAEI,gBAAgBjD,UACtB;EACE,GAAIgB;EACJK;EACAD;EACAX;EACAU;EACAkB,YAAYG;EACZlB,SAASqB;EACV,EACD1B,IACD;CAID,MAAMiC,cAAc/D,cACZI,UAAU0D,YAAYhC,KAAYyB,iBAAiB,EACzD,CAACO,YAAYhC,IACf,CAAC;CAaD,MAAMkC,gBAAgB/D,OAAO,MAAM;AAEnC,KAAIe,YAAYiD,OACdD,eAAcL,UAAU;CAG1B,MAAMO,cAAcF,cAAcL;CASlC,MAAMQ,cACJtC,SAAS,oBACRA,SAASuC,cAAc,QACxBN,YAAYxC,OAAO,OACnBO,SAASwC,QAAQ,QACjBxC,SAAS,oBAAoB,OACzBA,SAASuC,aACTH;CAEN,MAAMK,gBACJC,aACAC,6BAA6B,UAE7B,oBAAC;EAOC,eAAeN;EACFK;EACeC;EAC5B,SAASxD,UAAU,OAAOiD;EAC1B,GAAK9D,WAAWiD,MAAMU,YAAY;EAClC,gBAAcK;EACd,KAAKJ;EACL,wBAAqB;EACrB,UAAUD,YAAYvC;EAChBA;EACCC;EACDP;EACKkC;EACCD;GAEf;AAED,KAAIgB,YACF,QACE,oBAAC;EACO3C;EACCC;EACDP;EACAe;EACN,QAAQd;EACCF;EACKG;EACG6B;EACIC;EACrB,YAAYI;aAEV,EAAEkB,aAAAA,eAAaC,4BAAAA,mCACfF,aAAaC,eAAaC,6BAC5B;GACmB;AAIzB,QAAOF,aAAa,MAAM;EAC1B;AAEF,MAAMG,cAAcC,OAAOC,OAAO/C,YAAY;CAC5CgD,QAAQlE;CACRmE,OAAOrE;CACR,CAAC"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { Button } from "../Button/Button.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.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 { _CollectionItem } from "../../CollectionItem.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { filterCollectionItemProps } from "../../CollectionItem.js";
4
4
  import { _Item } from "../../content/Item/Item.js";
@@ -1,8 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { MenuItem } from "./MenuItem.js";
3
3
  import { StyledMenu, StyledSection, StyledSectionHeading } from "./styled.js";
4
4
  import { c } from "react-compiler-runtime";
5
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ import { cloneElement } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
7
  import { useMenuSection } from "react-aria";
7
8
 
8
9
  //#region src/components/actions/Menu/MenuSection.tsx
@@ -58,8 +59,9 @@ function MenuSection(props) {
58
59
  size,
59
60
  onAction: node.onAction
60
61
  }, node.key);
61
- if (node.props.wrapper) menuItem = node.props.wrapper(menuItem);
62
- return menuItem;
62
+ if (node.props?.wrapper) menuItem = node.props.wrapper(menuItem);
63
+ else if (node.wrapper) menuItem = node.wrapper(menuItem);
64
+ return cloneElement(menuItem, { key: node.key });
63
65
  });
64
66
  $[11] = itemStyles;
65
67
  $[12] = size;
@@ -80,7 +82,7 @@ function MenuSection(props) {
80
82
  } else t6 = $[18];
81
83
  let t7;
82
84
  if ($[19] !== itemProps || $[20] !== styles || $[21] !== t2 || $[22] !== t6) {
83
- t7 = /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(StyledSection, {
85
+ t7 = /* @__PURE__ */ jsx(Fragment$1, { children: /* @__PURE__ */ jsxs(StyledSection, {
84
86
  ...itemProps,
85
87
  styles,
86
88
  children: [t2, t6]
@@ -1 +1 @@
1
- {"version":3,"file":"MenuSection.js","names":["Styles","useMenuSection","MenuItem","MenuItemProps","StyledMenu","StyledSection","StyledSectionHeading","CubeMenuSectionProps","T","itemStyles","headingStyles","size","MenuSection","props","$","_c","item","state","styles","heading","rendered","t0","t1","itemProps","headingProps","groupProps","t2","t3","Symbol","for","section","t4","childNodes","t5","map","node","menuItem","key","onAction","wrapper","t6","t7"],"sources":["../../../../src/components/actions/Menu/MenuSection.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { useMenuSection } from 'react-aria';\n\nimport { MenuItem, MenuItemProps } from './MenuItem';\nimport { StyledMenu, StyledSection, StyledSectionHeading } from './styled';\n\nexport interface CubeMenuSectionProps<T> extends MenuItemProps<T> {\n itemStyles?: Styles;\n headingStyles?: Styles;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuSection<T>(props: CubeMenuSectionProps<T>) {\n const { item, state, styles, itemStyles, headingStyles, size } = props;\n const heading = item.rendered;\n const { itemProps, headingProps, groupProps } = useMenuSection({\n heading,\n 'aria-label': item['aria-label'],\n });\n\n return (\n <>\n <StyledSection {...itemProps} styles={styles}>\n {heading && (\n <StyledSectionHeading\n {...headingProps}\n size={size}\n styles={headingStyles}\n >\n {heading}\n </StyledSectionHeading>\n )}\n <StyledMenu {...groupProps} mods={{ section: true }}>\n {[...item.childNodes].map((node) => {\n let menuItem = (\n <MenuItem\n key={node.key}\n item={node}\n styles={itemStyles}\n state={state}\n size={size}\n onAction={(node as unknown as MenuItemProps<T>).onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself, as `Menu` does\n // for items outside a section.\n if (node.props.wrapper) {\n menuItem = node.props.wrapper(menuItem);\n }\n\n return menuItem;\n })}\n </StyledMenu>\n </StyledSection>\n </>\n );\n}\n"],"mappings":";;;;;;;;;AAaA,SAAOY,YAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACL,MAAA,EAAAC,MAAAC,OAAAC,QAAAT,YAAAC,eAAAC,SAAiEE;CACjE,MAAAM,UAAgBH,KAAII;CAGJ,MAAAC,KAAAL,KAAK;CAAa,IAAAM;AAAA,KAAAR,EAAA,OAAAK,WAAAL,EAAA,OAAAO,IAAA;AAF6BC,OAAA;GAAAH;GAAA,cAE/CE;GACf;AAAAP,IAAA,KAAAK;AAAAL,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;CAHD,MAAA,EAAAS,WAAAC,cAAAC,eAAgDxB,eAAeqB,GAG7D;CAAC,IAAAI;AAAA,KAAAZ,EAAA,OAAAK,WAAAL,EAAA,OAAAU,gBAAAV,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,MAAA;AAKIe,OAAAP,WACC,oBAAC;GAAoB,GACfK;GACEb;GACED,QAAAA;aAEPS;IAEJ;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAU;AAAAV,IAAA,KAAAJ;AAAAI,IAAA,KAAAH;AAAAG,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAc,OAAAC,IAAA,4BAAA,EAAA;AACiCF,OAAA,EAAAG,SAAW,MAAM;AAAAhB,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAE,KAAAgB,YAAA;AAChDD,OAAA,CAAA,GAAIf,KAAIgB,WAAY;AAAAlB,IAAA,KAAAE,KAAAgB;AAAAlB,IAAA,MAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAmB;AAAA,KAAAnB,EAAA,QAAAL,cAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAG,SAAAH,EAAA,QAAAiB,IAAA;AAApBE,OAAAF,GAAoBG,KAAKC,SAAA;GACxB,IAAAC,WACE,oBAAC;IAEOD,MAAAA;IACE1B,QAAAA;IACDQ;IACDN;IACI,UAACwB,KAAmCG;MALzCH,KAAIE,IAMT;AAKJ,OAAIF,KAAItB,MAAM0B,QACZH,YAAWD,KAAItB,MAAM0B,QAASH,SAAS;AACxC,UAEMA;IACP;AAAAtB,IAAA,MAAAL;AAAAK,IAAA,MAAAH;AAAAG,IAAA,MAAAG;AAAAH,IAAA,MAAAiB;AAAAjB,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;CAAA,IAAA0B;AAAA,KAAA1B,EAAA,QAAAW,cAAAX,EAAA,QAAAmB,IAAA;AApBJO,OAAA,oBAAC;GAAU,GAAKf;GAAkB,MAAAE;aAC/BM;IAoBU;AAAAnB,IAAA,MAAAW;AAAAX,IAAA,MAAAmB;AAAAnB,IAAA,MAAA0B;OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;AAAA,KAAA3B,EAAA,QAAAS,aAAAT,EAAA,QAAAI,UAAAJ,EAAA,QAAAY,MAAAZ,EAAA,QAAA0B,IAAA;AAhCjBC,OAAA,0CACE,qBAAC;GAAa,GAAKlB;GAAmBL;cACnCQ,IASDc;IAsBc,GACf;AAAA1B,IAAA,MAAAS;AAAAT,IAAA,MAAAI;AAAAJ,IAAA,MAAAY;AAAAZ,IAAA,MAAA0B;AAAA1B,IAAA,MAAA2B;OAAAA,MAAA3B,EAAA;AAAA,QAlCH2B"}
1
+ {"version":3,"file":"MenuSection.js","names":["Styles","cloneElement","useMenuSection","MenuItem","MenuItemProps","StyledMenu","StyledSection","StyledSectionHeading","CubeMenuSectionProps","T","itemStyles","headingStyles","size","MenuSection","props","$","_c","item","state","styles","heading","rendered","t0","t1","itemProps","headingProps","groupProps","t2","t3","Symbol","for","section","t4","childNodes","t5","map","node","menuItem","key","onAction","wrapper","t6","t7"],"sources":["../../../../src/components/actions/Menu/MenuSection.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { cloneElement } from 'react';\nimport { useMenuSection } from 'react-aria';\n\nimport { MenuItem, MenuItemProps } from './MenuItem';\nimport { StyledMenu, StyledSection, StyledSectionHeading } from './styled';\n\nexport interface CubeMenuSectionProps<T> extends MenuItemProps<T> {\n itemStyles?: Styles;\n headingStyles?: Styles;\n size?: 'small' | 'medium' | (string & {});\n}\n\n/** @private */\nexport function MenuSection<T>(props: CubeMenuSectionProps<T>) {\n const { item, state, styles, itemStyles, headingStyles, size } = props;\n const heading = item.rendered;\n const { itemProps, headingProps, groupProps } = useMenuSection({\n heading,\n 'aria-label': item['aria-label'],\n });\n\n return (\n <>\n <StyledSection {...itemProps} styles={styles}>\n {heading && (\n <StyledSectionHeading\n {...headingProps}\n size={size}\n styles={headingStyles}\n >\n {heading}\n </StyledSectionHeading>\n )}\n <StyledMenu {...groupProps} mods={{ section: true }}>\n {[...item.childNodes].map((node) => {\n let menuItem = (\n <MenuItem\n key={node.key}\n item={node}\n styles={itemStyles}\n state={state}\n size={size}\n onAction={(node as unknown as MenuItemProps<T>).onAction}\n />\n );\n\n // `MenuItem` renders the item's `tooltip` itself, as `Menu` does\n // for items outside a section. A `SubMenuTrigger` puts its\n // wrapper on the collection node rather than in the item's props.\n if (node.props?.wrapper) {\n menuItem = node.props.wrapper(menuItem);\n } else if ((node as any).wrapper) {\n menuItem = (node as any).wrapper(menuItem);\n }\n\n // The wrapper's element doesn't carry the item's key.\n return cloneElement(menuItem, { key: node.key });\n })}\n </StyledMenu>\n </StyledSection>\n </>\n );\n}\n"],"mappings":";;;;;;;;;;AAcA,SAAOa,YAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACL,MAAA,EAAAC,MAAAC,OAAAC,QAAAT,YAAAC,eAAAC,SAAiEE;CACjE,MAAAM,UAAgBH,KAAII;CAGJ,MAAAC,KAAAL,KAAK;CAAa,IAAAM;AAAA,KAAAR,EAAA,OAAAK,WAAAL,EAAA,OAAAO,IAAA;AAF6BC,OAAA;GAAAH;GAAA,cAE/CE;GACf;AAAAP,IAAA,KAAAK;AAAAL,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;OAAAA,MAAAR,EAAA;CAHD,MAAA,EAAAS,WAAAC,cAAAC,eAAgDxB,eAAeqB,GAG7D;CAAC,IAAAI;AAAA,KAAAZ,EAAA,OAAAK,WAAAL,EAAA,OAAAU,gBAAAV,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,MAAA;AAKIe,OAAAP,WACC,oBAAC;GAAoB,GACfK;GACEb;GACED,QAAAA;aAEPS;IAEJ;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAU;AAAAV,IAAA,KAAAJ;AAAAI,IAAA,KAAAH;AAAAG,IAAA,KAAAY;OAAAA,MAAAZ,EAAA;CAAA,IAAAa;AAAA,KAAAb,EAAA,OAAAc,OAAAC,IAAA,4BAAA,EAAA;AACiCF,OAAA,EAAAG,SAAW,MAAM;AAAAhB,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAAA,IAAAiB;AAAA,KAAAjB,EAAA,OAAAE,KAAAgB,YAAA;AAChDD,OAAA,CAAA,GAAIf,KAAIgB,WAAY;AAAAlB,IAAA,KAAAE,KAAAgB;AAAAlB,IAAA,MAAAiB;OAAAA,MAAAjB,EAAA;CAAA,IAAAmB;AAAA,KAAAnB,EAAA,QAAAL,cAAAK,EAAA,QAAAH,QAAAG,EAAA,QAAAG,SAAAH,EAAA,QAAAiB,IAAA;AAApBE,OAAAF,GAAoBG,KAAKC,SAAA;GACxB,IAAAC,WACE,oBAAC;IAEOD,MAAAA;IACE1B,QAAAA;IACDQ;IACDN;IACI,UAACwB,KAAmCG;MALzCH,KAAIE,IAMT;AAMJ,OAAIF,KAAItB,OAAe0B,QACrBH,YAAWD,KAAItB,MAAM0B,QAASH,SAAS;YAC7BD,KAAWI,QACrBH,YAAYD,KAAWI,QAAUH,SAAS;AAC3C,UAGMpC,aAAaoC,UAAU,EAAAC,KAAOF,KAAIE,KAAM,CAAC;IAChD;AAAAvB,IAAA,MAAAL;AAAAK,IAAA,MAAAH;AAAAG,IAAA,MAAAG;AAAAH,IAAA,MAAAiB;AAAAjB,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;CAAA,IAAA0B;AAAA,KAAA1B,EAAA,QAAAW,cAAAX,EAAA,QAAAmB,IAAA;AAxBJO,OAAA,oBAAC;GAAU,GAAKf;GAAkB,MAAAE;aAC/BM;IAwBU;AAAAnB,IAAA,MAAAW;AAAAX,IAAA,MAAAmB;AAAAnB,IAAA,MAAA0B;OAAAA,MAAA1B,EAAA;CAAA,IAAA2B;AAAA,KAAA3B,EAAA,QAAAS,aAAAT,EAAA,QAAAI,UAAAJ,EAAA,QAAAY,MAAAZ,EAAA,QAAA0B,IAAA;AApCjBC,OAAA,4CACE,qBAAC;GAAa,GAAKlB;GAAmBL;cACnCQ,IASDc;IA0Bc,GACf;AAAA1B,IAAA,MAAAS;AAAAT,IAAA,MAAAI;AAAAJ,IAAA,MAAAY;AAAAZ,IAAA,MAAA0B;AAAA1B,IAAA,MAAA2B;OAAAA,MAAA3B,EAAA;AAAA,QAtCH2B"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { SlotProvider } from "../../../utils/react/Slots.js";
3
3
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { MenuContext, useMenuContext } from "./context.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import React from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/SubmenuTriggerContext.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import React, { useContext } from "react";
3
3
 
4
4
  //#region src/components/actions/Menu/context.ts
@@ -1,8 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { DEFAULT_CLEAR_STYLES } from "../../../data/item-themes.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { DEFAULT_BUTTON_STYLES } from "../Button/Button.js";
5
- import { tasty } from "@tenphi/tasty";
5
+ import { mergeStyles, tasty } from "@tenphi/tasty";
6
6
 
7
7
  //#region src/components/actions/Menu/styled.tsx
8
8
  const StyledMenuWrapper = tasty({
@@ -126,9 +126,7 @@ const StyledSection = tasty({
126
126
  const StyledItem = tasty({
127
127
  qa: "Item",
128
128
  as: "li",
129
- styles: {
130
- ...DEFAULT_BUTTON_STYLES,
131
- ...DEFAULT_CLEAR_STYLES,
129
+ styles: mergeStyles(DEFAULT_BUTTON_STYLES, DEFAULT_CLEAR_STYLES, {
132
130
  display: "flex",
133
131
  flow: "row",
134
132
  justifyContent: "stretch",
@@ -168,7 +166,7 @@ const StyledItem = tasty({
168
166
  preset: "t4",
169
167
  color: "#dark-03"
170
168
  }
171
- }
169
+ })
172
170
  });
173
171
  const StyledSectionHeading = tasty(Space, {
174
172
  qa: "SectionHeading",
@@ -1 +1 @@
1
- {"version":3,"file":"styled.js","names":["tasty","DEFAULT_CLEAR_STYLES","Space","DEFAULT_BUTTON_STYLES","StyledMenuWrapper","qa","styles","display","gridRows","fill","margin","padding","border","radius","width","popover","shadow","height","tray","boxSizing","StyledMenu","as","flow","gap","sections","section","overflow","scrollbar","StyledDivider","listStyle","flexShrink","StyledHeader","role","color","preset","placeContent","placeItems","whiteSpace","$size","StyledFooter","StyledSection","StyledItem","justifyContent","focused","selected","pressed","disabled","cursor","outline","Description","StyledSectionHeading","prefix"],"sources":["../../../../src/components/actions/Menu/styled.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { DEFAULT_CLEAR_STYLES } from '../../../data/item-themes';\nimport { Space } from '../../layout/Space';\nimport { DEFAULT_BUTTON_STYLES } from '../Button/Button';\n\nexport const StyledMenuWrapper = tasty({\n qa: 'Menu',\n styles: {\n display: 'grid',\n gridRows: 'max-content 1sf max-content',\n fill: '#surface',\n margin: 0,\n padding: 0,\n border: true,\n radius: '(1cr + 1bw)',\n width: {\n '': 'auto',\n popover: 'max-content',\n },\n shadow: {\n '': '',\n // Use the design-system `$shadow` token (resolves to\n // `0 .5x 2x #shadow-md`) so the popover shadow follows the\n // scheme-aware Glaze `#shadow-md` color. The previous literal\n // `0px 5px 15px #dark.05` baked in `#dark` (now aliased to the\n // adaptive `#surface-text`) which inverts to a *light* shadow on\n // dark surfaces.\n 'popover | tray': '$shadow',\n },\n height: {\n '': 'initial',\n popover: 'initial max-content (50vh - 4x)',\n tray: 'initial max-content (100vh - 4x)',\n },\n boxSizing: 'border-box',\n },\n});\n\nexport const StyledMenu = tasty({\n as: 'ul',\n qa: 'MenuList',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: {\n '': '1bw',\n sections: false,\n },\n boxSizing: 'border-box',\n margin: 0,\n padding: {\n '': '0.5x',\n section: 0, // section menu\n },\n overflow: {\n '': 'auto',\n section: '',\n },\n scrollbar: 'styled',\n },\n});\n\nexport const StyledDivider = tasty({\n qa: 'Divider',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '.5x',\n listStyle: 'none',\n fill: '#border',\n height: '1bw',\n flexShrink: 0,\n },\n});\n\nexport const StyledHeader = tasty(Space, {\n qa: 'Header',\n as: 'div',\n role: 'heading',\n 'aria-level': 3,\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: 'min $size',\n boxSizing: 'border-box',\n border: 'bottom',\n radius: '1cr top',\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nexport const StyledFooter = tasty(Space, {\n qa: 'Footer',\n as: 'div',\n role: 'footer',\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n boxSizing: 'border-box',\n border: 'top',\n radius: '1cr bottom',\n },\n});\n\nexport const StyledSection = tasty({\n qa: 'Section',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fill: '#surface',\n },\n});\n\nexport const StyledItem = tasty({\n qa: 'Item',\n as: 'li',\n styles: {\n // Base button-like styles merged from Action/Button defaults\n ...DEFAULT_BUTTON_STYLES,\n ...DEFAULT_CLEAR_STYLES,\n\n // Override specifics for menu context\n display: 'flex',\n flow: 'row',\n justifyContent: 'stretch',\n listStyle: 'none',\n flexShrink: 0,\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n border: false,\n boxSizing: 'border-box',\n fill: {\n '': '#clear',\n focused: '#dark.03',\n selected: '#dark.09',\n 'selected & focused': '#dark.12',\n pressed: '#dark.09',\n disabled: '#clear',\n },\n color: {\n '': '#dark-02',\n 'selected | pressed': '#dark',\n disabled: '#disabled-surface-text',\n },\n cursor: {\n '': 'default',\n disabled: 'not-allowed',\n },\n shadow: '#clear',\n padding: {\n '': '.5x 1x',\n 'selectionIcon & selectable & !selected': '.5x 1x .5x (1x + 3x)',\n },\n gap: '.75x',\n outline: false,\n\n Description: {\n preset: 't4',\n color: '#dark-03',\n },\n },\n});\n\nexport const StyledSectionHeading = tasty(Space, {\n qa: 'SectionHeading',\n as: 'div',\n styles: {\n color: '#dark-04',\n preset: 'c2',\n height: '3x',\n placeContent: 'center space-between',\n padding: {\n '': '.5x .75x',\n prefix: '0 .75x 0 .5x',\n },\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"styled.js","names":["mergeStyles","tasty","DEFAULT_CLEAR_STYLES","Space","DEFAULT_BUTTON_STYLES","StyledMenuWrapper","qa","styles","display","gridRows","fill","margin","padding","border","radius","width","popover","shadow","height","tray","boxSizing","StyledMenu","as","flow","gap","sections","section","overflow","scrollbar","StyledDivider","listStyle","flexShrink","StyledHeader","role","color","preset","placeContent","placeItems","whiteSpace","$size","StyledFooter","StyledSection","StyledItem","justifyContent","focused","selected","pressed","disabled","cursor","outline","Description","StyledSectionHeading","prefix"],"sources":["../../../../src/components/actions/Menu/styled.tsx"],"sourcesContent":["import { mergeStyles, tasty } from '@tenphi/tasty';\n\nimport { DEFAULT_CLEAR_STYLES } from '../../../data/item-themes';\nimport { Space } from '../../layout/Space';\nimport { DEFAULT_BUTTON_STYLES } from '../Button/Button';\n\nexport const StyledMenuWrapper = tasty({\n qa: 'Menu',\n styles: {\n display: 'grid',\n gridRows: 'max-content 1sf max-content',\n fill: '#surface',\n margin: 0,\n padding: 0,\n border: true,\n radius: '(1cr + 1bw)',\n width: {\n '': 'auto',\n popover: 'max-content',\n },\n shadow: {\n '': '',\n // Use the design-system `$shadow` token (resolves to\n // `0 .5x 2x #shadow-md`) so the popover shadow follows the\n // scheme-aware Glaze `#shadow-md` color. The previous literal\n // `0px 5px 15px #dark.05` baked in `#dark` (now aliased to the\n // adaptive `#surface-text`) which inverts to a *light* shadow on\n // dark surfaces.\n 'popover | tray': '$shadow',\n },\n height: {\n '': 'initial',\n popover: 'initial max-content (50vh - 4x)',\n tray: 'initial max-content (100vh - 4x)',\n },\n boxSizing: 'border-box',\n },\n});\n\nexport const StyledMenu = tasty({\n as: 'ul',\n qa: 'MenuList',\n styles: {\n display: 'flex',\n flow: 'column',\n gap: {\n '': '1bw',\n sections: false,\n },\n boxSizing: 'border-box',\n margin: 0,\n padding: {\n '': '0.5x',\n section: 0, // section menu\n },\n overflow: {\n '': 'auto',\n section: '',\n },\n scrollbar: 'styled',\n },\n});\n\nexport const StyledDivider = tasty({\n qa: 'Divider',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '.5x',\n listStyle: 'none',\n fill: '#border',\n height: '1bw',\n flexShrink: 0,\n },\n});\n\nexport const StyledHeader = tasty(Space, {\n qa: 'Header',\n as: 'div',\n role: 'heading',\n 'aria-level': 3,\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: 'min $size',\n boxSizing: 'border-box',\n border: 'bottom',\n radius: '1cr top',\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nexport const StyledFooter = tasty(Space, {\n qa: 'Footer',\n as: 'div',\n role: 'footer',\n styles: {\n color: '#dark-02',\n preset: 't3',\n placeContent: 'space-between',\n placeItems: 'center',\n whiteSpace: 'nowrap',\n padding: '.5x 1.5x',\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n boxSizing: 'border-box',\n border: 'top',\n radius: '1cr bottom',\n },\n});\n\nexport const StyledSection = tasty({\n qa: 'Section',\n as: 'li',\n styles: {\n display: 'flex',\n flow: 'column',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fill: '#surface',\n },\n});\n\nexport const StyledItem = tasty({\n qa: 'Item',\n as: 'li',\n // Button's defaults with its `default.clear` theme, merged the way Button\n // applies that variant, then the menu-specific overrides.\n styles: mergeStyles(DEFAULT_BUTTON_STYLES, DEFAULT_CLEAR_STYLES, {\n // Override specifics for menu context\n display: 'flex',\n flow: 'row',\n justifyContent: 'stretch',\n listStyle: 'none',\n flexShrink: 0,\n height: {\n '': 'min $size-md',\n 'size=large': 'min $size-lg',\n },\n border: false,\n boxSizing: 'border-box',\n fill: {\n '': '#clear',\n focused: '#dark.03',\n selected: '#dark.09',\n 'selected & focused': '#dark.12',\n pressed: '#dark.09',\n disabled: '#clear',\n },\n color: {\n '': '#dark-02',\n 'selected | pressed': '#dark',\n disabled: '#disabled-surface-text',\n },\n cursor: {\n '': 'default',\n disabled: 'not-allowed',\n },\n shadow: '#clear',\n padding: {\n '': '.5x 1x',\n 'selectionIcon & selectable & !selected': '.5x 1x .5x (1x + 3x)',\n },\n gap: '.75x',\n outline: false,\n\n Description: {\n preset: 't4',\n color: '#dark-03',\n },\n }),\n});\n\nexport const StyledSectionHeading = tasty(Space, {\n qa: 'SectionHeading',\n as: 'div',\n styles: {\n color: '#dark-04',\n preset: 'c2',\n height: '3x',\n placeContent: 'center space-between',\n padding: {\n '': '.5x .75x',\n prefix: '0 .75x 0 .5x',\n },\n\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  //#region src/components/actions/actions-run.ts
3
3
  /**
4
4
  * Whether `element` — the node react-aria hands an overlay's dismiss predicate
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { ItemActionProvider, useItemActionContext } from "./ItemActionContext.js";
3
3
  import { openLink, parseTo, performClickHandler, useAction } from "./use-action.js";
4
4
  import { ItemAction } from "./ItemAction/ItemAction.js";
@@ -9,6 +9,10 @@ import { FocusableRef } from "@react-types/shared";
9
9
  //#region src/components/actions/use-action.d.ts
10
10
  interface CubeUseActionProps<T extends TagName = 'a' | 'button' | 'span' | 'div'> extends AllBaseProps<T>, Omit<AriaButtonProps, 'type'> {
11
11
  to?: NavigateArg;
12
+ /**
13
+ * @deprecated Use `aria-label` for the accessible name, and `children` for
14
+ * visible text. Not every action honours it: `ItemAction` ignores it.
15
+ */
12
16
  label?: string;
13
17
  htmlType?: 'button' | 'submit' | 'reset' | undefined;
14
18
  navigationOptions?: NavigateOptions;
@@ -1,6 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../_internal/hooks/use-event.js";
4
+ import { useWarn } from "../../_internal/hooks/use-warn.js";
4
5
  import { useFocus as useFocus$1 } from "../../utils/react/interactions.js";
5
6
  import { UIKitContext } from "../../provider.js";
6
7
  import { useTracking } from "../../providers/TrackingProvider.js";
@@ -171,6 +172,10 @@ function performClickHandler(evt, { navigate, resolvedHref, to, onPress, trackin
171
172
  }
172
173
  }
173
174
  const useAction = function useAction({ to, as, htmlType, label, mods, onPress, navigationOptions, ...props }, ref) {
175
+ useWarn(label !== void 0, {
176
+ key: "action-label-deprecated",
177
+ args: ["The \"label\" property of Button, ItemButton, ItemAction and Action is deprecated. Use \"aria-label\" for the accessible name and \"children\" for visible text."]
178
+ });
174
179
  const tracking = useTracking();
175
180
  const navigation = useContext(UIKitContext).navigation;
176
181
  const isDisabled = props.isDisabled;
@@ -1 +1 @@
1
- {"version":3,"file":"use-action.js","names":["useFocusableRef","FocusableRef","PressEvent","AllBaseProps","filterBaseProps","TagName","useContext","AriaButtonProps","useButton","useHover","useEvent","UIKitContext","useTracking","mergeProps","useFocus","NavigateArg","NavigateOptions","Path","To","LINK_PRESS_EVENT","BUTTON_PRESS_EVENT","NavigateLike","RelativeRoutingType","CubeUseActionProps","T","Omit","to","label","htmlType","navigationOptions","FILTER_OPTIONS","propNames","Set","openLink","href","target","link","document","createElement","rel","body","appendChild","click","removeChild","isExternalUrl","url","startsWith","includes","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","value","enumerable","configurable","e","performClickHandler","navigate","resolvedHref","onPress","tracking","element","qa","getAttribute","event","delta","id","targetElement","getElementById","scrollIntoView","behavior","block","inline","window","location","reload","assign","useAction","as","mods","props","ref","HTMLElement","navigation","isDisabled","useNavigate","useHref","domRef","mergedNavigationOptions","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","preventDefault","actionProps","hovered","pressed","focused","disabled"],"sources":["../../../src/components/actions/use-action.ts"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { FocusableRef, PressEvent } from '@react-types/shared';\nimport { AllBaseProps, filterBaseProps, TagName } from '@tenphi/tasty';\nimport { useContext } from 'react';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent } from '../../_internal';\nimport { UIKitContext } from '../../provider';\nimport { useTracking } from '../../providers/TrackingProvider';\nimport { mergeProps } from '../../utils/react';\nimport { useFocus } from '../../utils/react/interactions';\n\n// Import specific types for internal usage\nimport type {\n NavigateArg,\n NavigateOptions,\n Path,\n To,\n} from '../../providers/navigation.types';\n\nconst LINK_PRESS_EVENT = 'Link Press';\nconst BUTTON_PRESS_EVENT = 'Button Press';\n\n// Re-export types for convenience\nexport type {\n NavigateLike,\n Path,\n To,\n NavigateArg,\n NavigateOptions,\n RelativeRoutingType,\n} from '../../providers/navigation.types';\n\nexport interface CubeUseActionProps<\n T extends TagName = 'a' | 'button' | 'span' | 'div',\n> extends AllBaseProps<T>,\n Omit<AriaButtonProps, 'type'> {\n to?: NavigateArg;\n label?: string;\n htmlType?: 'button' | 'submit' | 'reset' | undefined;\n navigationOptions?: NavigateOptions;\n}\n\nconst FILTER_OPTIONS = { propNames: new Set(['onMouseEnter', 'onMouseLeave']) };\n\n/**\n * Helper to open link.\n * @param {String} href\n * @param {String|Boolean} [target]\n */\nexport function openLink(href, target?) {\n const link = document.createElement('a');\n\n link.href = href;\n\n if (target) {\n link.target = target === true ? '_blank' : target;\n // Prevent reverse tabnabbing when opening in a new tab\n link.rel = 'noopener noreferrer';\n }\n\n document.body.appendChild(link);\n\n link.click();\n\n document.body.removeChild(link);\n}\n\n/**\n * Checks if a URL is external (absolute HTTP(S), protocol-relative, or non-http protocols)\n */\nfunction isExternalUrl(url: string): boolean {\n return (\n url.startsWith('http://') ||\n url.startsWith('https://') ||\n url.startsWith('//') ||\n (url.includes(':') && !url.startsWith('#'))\n );\n}\n\nexport function parseTo(to: NavigateArg | undefined): {\n newTab: boolean;\n nativeRoute: boolean;\n cleanTo: To | undefined;\n isHistoryNavigation: boolean;\n historyDelta?: number;\n isHashNavigation: boolean;\n isExternal: boolean;\n} {\n // Handle number (history navigation)\n if (typeof to === 'number') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: true,\n historyDelta: to,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle object path\n if (to && typeof to === 'object') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: to,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle string\n if (!to || typeof to !== 'string') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n const newTab = to.startsWith('!');\n const nativeRoute = to.startsWith('@');\n const isHashNavigation = to.startsWith('#');\n const cleanTo = newTab || nativeRoute ? to.slice(1) : to;\n const isExternal = typeof cleanTo === 'string' && isExternalUrl(cleanTo);\n\n return {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation: false,\n isHashNavigation,\n isExternal,\n };\n}\n\ninterface SanitizedPressEvent {\n type?: string;\n pointerType?: string;\n shiftKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n altKey: boolean;\n // target is defined as a non-enumerable property below\n [key: string]: unknown; // allow non-enumerable 'target'\n}\n\nfunction sanitizePressEvent(evt: PressEvent): SanitizedPressEvent {\n const safeEvt: SanitizedPressEvent = {\n type: 'type' in evt ? evt.type : undefined,\n pointerType:\n 'pointerType' in evt\n ? (evt as { pointerType?: string }).pointerType\n : undefined,\n shiftKey:\n 'shiftKey' in evt ? !!(evt as { shiftKey?: boolean }).shiftKey : false,\n metaKey:\n 'metaKey' in evt ? !!(evt as { metaKey?: boolean }).metaKey : false,\n ctrlKey:\n 'ctrlKey' in evt ? !!(evt as { ctrlKey?: boolean }).ctrlKey : false,\n altKey: 'altKey' in evt ? !!(evt as { altKey?: boolean }).altKey : false,\n };\n try {\n Object.defineProperty(safeEvt, 'target', {\n value: 'target' in evt ? (evt as { target?: unknown }).target : undefined,\n enumerable: false,\n configurable: true,\n });\n } catch (e) {\n // Failed to define target property - continue without it\n }\n return safeEvt;\n}\n\nexport function performClickHandler(\n evt,\n { navigate, resolvedHref, to, onPress, tracking, navigationOptions },\n) {\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n historyDelta,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n const element = evt.target;\n const qa = element?.getAttribute('data-qa');\n\n onPress?.(sanitizePressEvent(evt));\n\n if (to == null) {\n // Allow 0 as valid navigation (go to current page)\n tracking.event(BUTTON_PRESS_EVENT, { qa }, element);\n return;\n }\n\n // Handle history navigation (back/forward)\n if (isHistoryNavigation && typeof historyDelta === 'number') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, delta: historyDelta, type: 'router-history' },\n element,\n );\n navigate(historyDelta);\n return;\n }\n\n // Handle hash navigation (smooth scroll)\n if (isHashNavigation && typeof to === 'string') {\n const id = to.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: to, type: 'hash', target: id },\n element,\n );\n\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n });\n }\n return;\n }\n\n // Handle new tab (via ! prefix or user modifiers)\n if (evt.shiftKey || evt.metaKey || (evt as any).ctrlKey || newTab) {\n openLink(resolvedHref, true);\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'tab' },\n element,\n );\n return;\n }\n\n // Handle @ prefix (native navigation)\n if (nativeRoute) {\n if (cleanTo === '' || cleanTo === undefined) {\n // @'' or @ -> reload current page\n tracking.event(LINK_PRESS_EVENT, { qa, type: 'native' }, element);\n window.location.reload();\n } else {\n // @path -> navigate to resolved path natively\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'native' },\n element,\n );\n window.location.assign(resolvedHref);\n }\n return;\n }\n\n // Handle external URLs (always native)\n if (isExternal && typeof cleanTo === 'string') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'native' },\n element,\n );\n window.location.assign(cleanTo);\n return;\n }\n\n // Handle router navigation\n if (cleanTo !== undefined) {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'router' },\n element,\n );\n navigate(cleanTo, navigationOptions);\n }\n}\n\nexport const useAction = function useAction(\n {\n to,\n as,\n htmlType,\n label,\n mods,\n onPress,\n navigationOptions,\n ...props\n }: CubeUseActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const tracking = useTracking();\n const navigation = useContext(UIKitContext).navigation;\n const isDisabled = props.isDisabled;\n\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n\n const navigate = navigation.useNavigate();\n // Resolve the path with its `!` / `@` prefix stripped, and only that. Also\n // resolving the raw `to` put `!https://…` through the router as a route,\n // which a HashRouter warned about on every render.\n const resolvedHref = navigation.useHref(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = to && !isHistoryNavigation ? 'a' : as || 'button';\n\n // Compute target (prefixes override explicit target prop per spec)\n const target = newTab ? '_blank' : props.target;\n\n // Compute href for anchor elements\n let href: string | undefined;\n if (as === 'a' && cleanTo !== undefined) {\n if (newTab || nativeRoute) {\n // For ! and @ prefixes, resolve the clean path\n href =\n typeof cleanTo === 'string' && isExternal\n ? cleanTo // External URLs as-is\n : resolvedHref;\n } else {\n // Regular navigation\n href = resolvedHref;\n }\n }\n\n const domRef = useFocusableRef(ref);\n\n // Use navigation options directly\n const mergedNavigationOptions = navigationOptions;\n\n const customOnPress = useEvent((evt: PressEvent) => {\n performClickHandler(evt, {\n navigate,\n resolvedHref: href || resolvedHref,\n to,\n onPress,\n tracking,\n navigationOptions: mergedNavigationOptions,\n });\n });\n\n let { buttonProps, isPressed } = useButton(\n {\n 'aria-label': label, // @TODO: remove label prop\n ...props,\n onPress: customOnPress,\n },\n domRef,\n );\n let { hoverProps, isHovered } = useHover({ isDisabled });\n let { focusProps, isFocused } = useFocus({ isDisabled }, true);\n\n const customProps =\n to && !isHistoryNavigation\n ? {\n onClick(evt) {\n evt.preventDefault();\n },\n }\n : {};\n\n return {\n isPressed,\n actionProps: {\n mods: {\n hovered: isHovered && !isDisabled,\n pressed: isPressed && !isDisabled,\n focused: isFocused && !isDisabled,\n disabled: isDisabled,\n ...mods,\n },\n ...(mergeProps(\n buttonProps,\n hoverProps,\n focusProps,\n customProps,\n filterBaseProps(props, FILTER_OPTIONS),\n ) as object),\n ref: domRef,\n type: htmlType || 'button',\n rel: as === 'a' && newTab ? 'noopener noreferrer' : undefined,\n as,\n isDisabled,\n target,\n href,\n },\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-action.js","names":["useFocusableRef","FocusableRef","PressEvent","AllBaseProps","filterBaseProps","TagName","useContext","AriaButtonProps","useButton","useHover","useEvent","useWarn","UIKitContext","useTracking","mergeProps","useFocus","NavigateArg","NavigateOptions","Path","To","LINK_PRESS_EVENT","BUTTON_PRESS_EVENT","NavigateLike","RelativeRoutingType","CubeUseActionProps","T","Omit","to","label","htmlType","navigationOptions","FILTER_OPTIONS","propNames","Set","openLink","href","target","link","document","createElement","rel","body","appendChild","click","removeChild","isExternalUrl","url","startsWith","includes","parseTo","newTab","nativeRoute","cleanTo","isHistoryNavigation","historyDelta","isHashNavigation","isExternal","undefined","slice","SanitizedPressEvent","type","pointerType","shiftKey","metaKey","ctrlKey","altKey","key","sanitizePressEvent","evt","safeEvt","Object","defineProperty","value","enumerable","configurable","e","performClickHandler","navigate","resolvedHref","onPress","tracking","element","qa","getAttribute","event","delta","id","targetElement","getElementById","scrollIntoView","behavior","block","inline","window","location","reload","assign","useAction","as","mods","props","ref","HTMLElement","args","navigation","isDisabled","useNavigate","useHref","domRef","mergedNavigationOptions","customOnPress","buttonProps","isPressed","hoverProps","isHovered","focusProps","isFocused","customProps","onClick","preventDefault","actionProps","hovered","pressed","focused","disabled"],"sources":["../../../src/components/actions/use-action.ts"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { FocusableRef, PressEvent } from '@react-types/shared';\nimport { AllBaseProps, filterBaseProps, TagName } from '@tenphi/tasty';\nimport { useContext } from 'react';\nimport { AriaButtonProps, useButton, useHover } from 'react-aria';\n\nimport { useEvent, useWarn } from '../../_internal';\nimport { UIKitContext } from '../../provider';\nimport { useTracking } from '../../providers/TrackingProvider';\nimport { mergeProps } from '../../utils/react';\nimport { useFocus } from '../../utils/react/interactions';\n\n// Import specific types for internal usage\nimport type {\n NavigateArg,\n NavigateOptions,\n Path,\n To,\n} from '../../providers/navigation.types';\n\nconst LINK_PRESS_EVENT = 'Link Press';\nconst BUTTON_PRESS_EVENT = 'Button Press';\n\n// Re-export types for convenience\nexport type {\n NavigateLike,\n Path,\n To,\n NavigateArg,\n NavigateOptions,\n RelativeRoutingType,\n} from '../../providers/navigation.types';\n\nexport interface CubeUseActionProps<\n T extends TagName = 'a' | 'button' | 'span' | 'div',\n> extends AllBaseProps<T>,\n Omit<AriaButtonProps, 'type'> {\n to?: NavigateArg;\n /**\n * @deprecated Use `aria-label` for the accessible name, and `children` for\n * visible text. Not every action honours it: `ItemAction` ignores it.\n */\n label?: string;\n htmlType?: 'button' | 'submit' | 'reset' | undefined;\n navigationOptions?: NavigateOptions;\n}\n\nconst FILTER_OPTIONS = { propNames: new Set(['onMouseEnter', 'onMouseLeave']) };\n\n/**\n * Helper to open link.\n * @param {String} href\n * @param {String|Boolean} [target]\n */\nexport function openLink(href, target?) {\n const link = document.createElement('a');\n\n link.href = href;\n\n if (target) {\n link.target = target === true ? '_blank' : target;\n // Prevent reverse tabnabbing when opening in a new tab\n link.rel = 'noopener noreferrer';\n }\n\n document.body.appendChild(link);\n\n link.click();\n\n document.body.removeChild(link);\n}\n\n/**\n * Checks if a URL is external (absolute HTTP(S), protocol-relative, or non-http protocols)\n */\nfunction isExternalUrl(url: string): boolean {\n return (\n url.startsWith('http://') ||\n url.startsWith('https://') ||\n url.startsWith('//') ||\n (url.includes(':') && !url.startsWith('#'))\n );\n}\n\nexport function parseTo(to: NavigateArg | undefined): {\n newTab: boolean;\n nativeRoute: boolean;\n cleanTo: To | undefined;\n isHistoryNavigation: boolean;\n historyDelta?: number;\n isHashNavigation: boolean;\n isExternal: boolean;\n} {\n // Handle number (history navigation)\n if (typeof to === 'number') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: true,\n historyDelta: to,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle object path\n if (to && typeof to === 'object') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: to,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n // Handle string\n if (!to || typeof to !== 'string') {\n return {\n newTab: false,\n nativeRoute: false,\n cleanTo: undefined,\n isHistoryNavigation: false,\n isHashNavigation: false,\n isExternal: false,\n };\n }\n\n const newTab = to.startsWith('!');\n const nativeRoute = to.startsWith('@');\n const isHashNavigation = to.startsWith('#');\n const cleanTo = newTab || nativeRoute ? to.slice(1) : to;\n const isExternal = typeof cleanTo === 'string' && isExternalUrl(cleanTo);\n\n return {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation: false,\n isHashNavigation,\n isExternal,\n };\n}\n\ninterface SanitizedPressEvent {\n type?: string;\n pointerType?: string;\n shiftKey: boolean;\n metaKey: boolean;\n ctrlKey: boolean;\n altKey: boolean;\n // target is defined as a non-enumerable property below\n [key: string]: unknown; // allow non-enumerable 'target'\n}\n\nfunction sanitizePressEvent(evt: PressEvent): SanitizedPressEvent {\n const safeEvt: SanitizedPressEvent = {\n type: 'type' in evt ? evt.type : undefined,\n pointerType:\n 'pointerType' in evt\n ? (evt as { pointerType?: string }).pointerType\n : undefined,\n shiftKey:\n 'shiftKey' in evt ? !!(evt as { shiftKey?: boolean }).shiftKey : false,\n metaKey:\n 'metaKey' in evt ? !!(evt as { metaKey?: boolean }).metaKey : false,\n ctrlKey:\n 'ctrlKey' in evt ? !!(evt as { ctrlKey?: boolean }).ctrlKey : false,\n altKey: 'altKey' in evt ? !!(evt as { altKey?: boolean }).altKey : false,\n };\n try {\n Object.defineProperty(safeEvt, 'target', {\n value: 'target' in evt ? (evt as { target?: unknown }).target : undefined,\n enumerable: false,\n configurable: true,\n });\n } catch (e) {\n // Failed to define target property - continue without it\n }\n return safeEvt;\n}\n\nexport function performClickHandler(\n evt,\n { navigate, resolvedHref, to, onPress, tracking, navigationOptions },\n) {\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n historyDelta,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n const element = evt.target;\n const qa = element?.getAttribute('data-qa');\n\n onPress?.(sanitizePressEvent(evt));\n\n if (to == null) {\n // Allow 0 as valid navigation (go to current page)\n tracking.event(BUTTON_PRESS_EVENT, { qa }, element);\n return;\n }\n\n // Handle history navigation (back/forward)\n if (isHistoryNavigation && typeof historyDelta === 'number') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, delta: historyDelta, type: 'router-history' },\n element,\n );\n navigate(historyDelta);\n return;\n }\n\n // Handle hash navigation (smooth scroll)\n if (isHashNavigation && typeof to === 'string') {\n const id = to.slice(1);\n const targetElement = document.getElementById(id);\n\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: to, type: 'hash', target: id },\n element,\n );\n\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start',\n inline: 'nearest',\n });\n }\n return;\n }\n\n // Handle new tab (via ! prefix or user modifiers)\n if (evt.shiftKey || evt.metaKey || (evt as any).ctrlKey || newTab) {\n openLink(resolvedHref, true);\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'tab' },\n element,\n );\n return;\n }\n\n // Handle @ prefix (native navigation)\n if (nativeRoute) {\n if (cleanTo === '' || cleanTo === undefined) {\n // @'' or @ -> reload current page\n tracking.event(LINK_PRESS_EVENT, { qa, type: 'native' }, element);\n window.location.reload();\n } else {\n // @path -> navigate to resolved path natively\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'native' },\n element,\n );\n window.location.assign(resolvedHref);\n }\n return;\n }\n\n // Handle external URLs (always native)\n if (isExternal && typeof cleanTo === 'string') {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: cleanTo, type: 'native' },\n element,\n );\n window.location.assign(cleanTo);\n return;\n }\n\n // Handle router navigation\n if (cleanTo !== undefined) {\n tracking.event(\n LINK_PRESS_EVENT,\n { qa, href: resolvedHref, type: 'router' },\n element,\n );\n navigate(cleanTo, navigationOptions);\n }\n}\n\nexport const useAction = function useAction(\n {\n to,\n as,\n htmlType,\n label,\n mods,\n onPress,\n navigationOptions,\n ...props\n }: CubeUseActionProps,\n ref: FocusableRef<HTMLElement>,\n) {\n useWarn(label !== undefined, {\n key: 'action-label-deprecated',\n args: [\n 'The \"label\" property of Button, ItemButton, ItemAction and Action is deprecated. Use \"aria-label\" for the accessible name and \"children\" for visible text.',\n ],\n });\n\n const tracking = useTracking();\n const navigation = useContext(UIKitContext).navigation;\n const isDisabled = props.isDisabled;\n\n const {\n newTab,\n nativeRoute,\n cleanTo,\n isHistoryNavigation,\n isHashNavigation,\n isExternal,\n } = parseTo(to);\n\n const navigate = navigation.useNavigate();\n // Resolve the path with its `!` / `@` prefix stripped, and only that. Also\n // resolving the raw `to` put `!https://…` through the router as a route,\n // which a HashRouter warned about on every render.\n const resolvedHref = navigation.useHref(cleanTo || '.');\n\n // Determine element type: 'a' for navigation, 'button' for actions\n as = to && !isHistoryNavigation ? 'a' : as || 'button';\n\n // Compute target (prefixes override explicit target prop per spec)\n const target = newTab ? '_blank' : props.target;\n\n // Compute href for anchor elements\n let href: string | undefined;\n if (as === 'a' && cleanTo !== undefined) {\n if (newTab || nativeRoute) {\n // For ! and @ prefixes, resolve the clean path\n href =\n typeof cleanTo === 'string' && isExternal\n ? cleanTo // External URLs as-is\n : resolvedHref;\n } else {\n // Regular navigation\n href = resolvedHref;\n }\n }\n\n const domRef = useFocusableRef(ref);\n\n // Use navigation options directly\n const mergedNavigationOptions = navigationOptions;\n\n const customOnPress = useEvent((evt: PressEvent) => {\n performClickHandler(evt, {\n navigate,\n resolvedHref: href || resolvedHref,\n to,\n onPress,\n tracking,\n navigationOptions: mergedNavigationOptions,\n });\n });\n\n let { buttonProps, isPressed } = useButton(\n {\n 'aria-label': label, // deprecated, see `CubeUseActionProps.label`\n ...props,\n onPress: customOnPress,\n },\n domRef,\n );\n let { hoverProps, isHovered } = useHover({ isDisabled });\n let { focusProps, isFocused } = useFocus({ isDisabled }, true);\n\n const customProps =\n to && !isHistoryNavigation\n ? {\n onClick(evt) {\n evt.preventDefault();\n },\n }\n : {};\n\n return {\n isPressed,\n actionProps: {\n mods: {\n hovered: isHovered && !isDisabled,\n pressed: isPressed && !isDisabled,\n focused: isFocused && !isDisabled,\n disabled: isDisabled,\n ...mods,\n },\n ...(mergeProps(\n buttonProps,\n hoverProps,\n focusProps,\n customProps,\n filterBaseProps(props, FILTER_OPTIONS),\n ) as object),\n ref: domRef,\n type: htmlType || 'button',\n rel: as === 'a' && newTab ? 'noopener noreferrer' : undefined,\n as,\n isDisabled,\n target,\n href,\n },\n };\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { usePopoverSync } from "../../utils/react/usePopoverSync.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.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 { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.187.2 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.189.0 | Cube Dev Team */
2
2
  import themes_default from "../../../data/themes.js";
3
3
  import { useAlert } from "./use-alert.js";
4
4
  import { c } from "react-compiler-runtime";