@cube-dev/ui-kit 0.194.1 → 0.196.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 (708) hide show
  1. package/dist/CHANGELOG.md +190 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.d.ts +6 -0
  16. package/dist/components/Root.js +125 -102
  17. package/dist/components/Root.js.map +1 -1
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Banner/Banner.js +1 -1
  20. package/dist/components/actions/Button/Button.js +11 -5
  21. package/dist/components/actions/Button/Button.js.map +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.d.ts +9 -4
  24. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  25. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  26. package/dist/components/actions/ButtonSplit/context.js +1 -1
  27. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/dist/components/actions/CommandMenu/styled.js +1 -1
  29. package/dist/components/actions/ItemAction/ItemAction.js +27 -25
  30. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  31. package/dist/components/actions/ItemActionContext.js +1 -1
  32. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  33. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/dist/components/actions/Link/Link.js +1 -1
  35. package/dist/components/actions/Menu/Menu.js +1 -1
  36. package/dist/components/actions/Menu/MenuCollectionItem.js +7 -4
  37. package/dist/components/actions/Menu/MenuCollectionItem.js.map +1 -1
  38. package/dist/components/actions/Menu/MenuItem.js +69 -60
  39. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  40. package/dist/components/actions/Menu/MenuSection.js +1 -1
  41. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  42. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  43. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  44. package/dist/components/actions/Menu/context.js +1 -1
  45. package/dist/components/actions/Menu/styled.js +1 -4
  46. package/dist/components/actions/Menu/styled.js.map +1 -1
  47. package/dist/components/actions/actions-run.js +1 -1
  48. package/dist/components/actions/index.js +1 -1
  49. package/dist/components/actions/use-action.js +15 -14
  50. package/dist/components/actions/use-action.js.map +1 -1
  51. package/dist/components/actions/use-anchored-menu.js +1 -1
  52. package/dist/components/actions/use-context-menu.js +1 -1
  53. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  54. package/dist/components/content/Alert/Alert.js +1 -1
  55. package/dist/components/content/Alert/use-alert.js +1 -1
  56. package/dist/components/content/Avatar/Avatar.js +1 -1
  57. package/dist/components/content/Badge/Badge.js +1 -1
  58. package/dist/components/content/Card/Card.js +1 -1
  59. package/dist/components/content/Content.js +1 -1
  60. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  61. package/dist/components/content/CopySnippet/CopySnippet.d.ts +14 -14
  62. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  63. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  64. package/dist/components/content/Divider.js +1 -1
  65. package/dist/components/content/Footer.js +1 -1
  66. package/dist/components/content/Header.js +1 -1
  67. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  68. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  69. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  70. package/dist/components/content/Item/Item.js +16 -4
  71. package/dist/components/content/Item/Item.js.map +1 -1
  72. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  73. package/dist/components/content/ItemBadge/ItemBadge.js +7 -3
  74. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  75. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  76. package/dist/components/content/Layout/GridLayout.js +1 -1
  77. package/dist/components/content/Layout/Layout.js +29 -15
  78. package/dist/components/content/Layout/Layout.js.map +1 -1
  79. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  80. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  81. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  82. package/dist/components/content/Layout/LayoutContent.js +1 -1
  83. package/dist/components/content/Layout/LayoutContext.js +20 -10
  84. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  85. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  86. package/dist/components/content/Layout/LayoutFooter.js +12 -9
  87. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  88. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  89. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  90. package/dist/components/content/Layout/LayoutPane.d.ts +5 -1
  91. package/dist/components/content/Layout/LayoutPane.js +323 -149
  92. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  93. package/dist/components/content/Layout/LayoutPanel.d.ts +4 -2
  94. package/dist/components/content/Layout/LayoutPanel.js +73 -2
  95. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  96. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  97. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  98. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  99. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  100. package/dist/components/content/Layout/index.js +1 -1
  101. package/dist/components/content/Layout/utils.js +1 -1
  102. package/dist/components/content/Paragraph.js +1 -1
  103. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  104. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  105. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  106. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  107. package/dist/components/content/Result/Result.js +1 -1
  108. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  109. package/dist/components/content/Tag/Tag.js +1 -1
  110. package/dist/components/content/Text.js +1 -1
  111. package/dist/components/content/TextItem/TextItem.js +1 -1
  112. package/dist/components/content/Title.js +1 -1
  113. package/dist/components/content/Tree/Tree.js +1 -1
  114. package/dist/components/content/Tree/TreeNode.js +2 -1
  115. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  116. package/dist/components/content/Tree/styled.js +1 -1
  117. package/dist/components/content/Tree/tree-index.js +1 -1
  118. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  119. package/dist/components/content/Tree/use-load-data.js +1 -1
  120. package/dist/components/content/highlightText.js +1 -1
  121. package/dist/components/content/use-auto-tooltip.js +3 -3
  122. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  123. package/dist/components/data/DataTable/DataTable.js +1 -1
  124. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  125. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  126. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  127. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  128. package/dist/components/data/ItemTable/ItemTableToolbar.js +2 -1
  129. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
  130. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  131. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  132. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  133. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  134. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  135. package/dist/components/data/ItemTable/use-item-table-tree-model.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 +3 -1
  141. package/dist/components/data/TableBase/TableView.js.map +1 -1
  142. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  143. package/dist/components/data/TableBase/column-header.js +1 -1
  144. package/dist/components/data/TableBase/column-menu.js +1 -1
  145. package/dist/components/data/TableBase/column-styles.js +1 -1
  146. package/dist/components/data/TableBase/column-tint.js +1 -1
  147. package/dist/components/data/TableBase/row-menu.js +1 -1
  148. package/dist/components/data/TableBase/styled.js +1 -1
  149. package/dist/components/data/TableBase/table-tree.js +1 -1
  150. package/dist/components/data/TableBase/types.js +1 -1
  151. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  152. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  153. package/dist/components/data/TableBase/use-column-order.js +1 -1
  154. package/dist/components/data/TableBase/use-column-window.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-tooltip-refresh.js +1 -1
  165. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  166. package/dist/components/fields/Checkbox/Checkbox.js +28 -17
  167. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  168. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -1
  169. package/dist/components/fields/Checkbox/CheckboxGroup.js +6 -6
  170. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  171. package/dist/components/fields/Checkbox/context.js +1 -1
  172. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  173. package/dist/components/fields/ColorPicker/ColorPicker.js +3 -1
  174. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  175. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  176. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +2 -1
  177. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  178. package/dist/components/fields/ComboBox/ComboBox.d.ts +27 -7
  179. package/dist/components/fields/ComboBox/ComboBox.js +1095 -619
  180. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  181. package/dist/components/fields/ComboBox/comboBoxOptions.js +84 -0
  182. package/dist/components/fields/ComboBox/comboBoxOptions.js.map +1 -0
  183. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  184. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  185. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  186. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  187. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  188. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  189. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  190. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  191. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  192. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  193. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  194. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  195. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  196. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  197. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  198. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  199. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  200. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  201. package/dist/components/fields/DatePicker/parseDate.d.ts +7 -0
  202. package/dist/components/fields/DatePicker/parseDate.js +17 -3
  203. package/dist/components/fields/DatePicker/parseDate.js.map +1 -1
  204. package/dist/components/fields/DatePicker/period.js +1 -1
  205. package/dist/components/fields/DatePicker/props.js +1 -1
  206. package/dist/components/fields/DatePicker/utils.js +1 -1
  207. package/dist/components/fields/FileInput/FileInput.js +1 -1
  208. package/dist/components/fields/FilterListBox/FilterListBox.js +2 -1
  209. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  210. package/dist/components/fields/FilterPicker/FilterPicker.js +15 -6
  211. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  212. package/dist/components/fields/Input/Input.d.ts +2 -2
  213. package/dist/components/fields/Input/Input.js +2 -2
  214. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  215. package/dist/components/fields/ListBox/ListBox.d.ts +10 -4
  216. package/dist/components/fields/ListBox/ListBox.js +298 -146
  217. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  218. package/dist/components/fields/ListBox/optionId.js +1 -1
  219. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +150 -139
  220. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  221. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  222. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  223. package/dist/components/fields/NumberInput/NumberInput.d.ts +6 -1
  224. package/dist/components/fields/NumberInput/NumberInput.js +136 -128
  225. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  226. package/dist/components/fields/NumberInput/StepButton.js +38 -48
  227. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  228. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +1 -2
  229. package/dist/components/fields/PasswordInput/PasswordInput.js +77 -111
  230. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  231. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  232. package/dist/components/fields/Picker/Picker.js +22 -8
  233. package/dist/components/fields/Picker/Picker.js.map +1 -1
  234. package/dist/components/fields/RadioGroup/Radio.d.ts +12 -8
  235. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  236. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
  237. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  238. package/dist/components/fields/RadioGroup/context.js +1 -1
  239. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  240. package/dist/components/fields/SearchInput/SearchInput.d.ts +8 -3
  241. package/dist/components/fields/SearchInput/SearchInput.js +22 -29
  242. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  243. package/dist/components/fields/Select/Select.d.ts +12 -1
  244. package/dist/components/fields/Select/Select.js +365 -207
  245. package/dist/components/fields/Select/Select.js.map +1 -1
  246. package/dist/components/fields/Slider/Gradation.js +1 -1
  247. package/dist/components/fields/Slider/HueSlider.js +1 -1
  248. package/dist/components/fields/Slider/RangeSlider.js +3 -4
  249. package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
  250. package/dist/components/fields/Slider/Slider.js +1 -1
  251. package/dist/components/fields/Slider/SliderBase.js +1 -1
  252. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  253. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  254. package/dist/components/fields/Slider/elements.js +1 -1
  255. package/dist/components/fields/Slider/index.js +1 -1
  256. package/dist/components/fields/Switch/Switch.js +101 -101
  257. package/dist/components/fields/Switch/Switch.js.map +1 -1
  258. package/dist/components/fields/TagInput/TagInput.js +336 -330
  259. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  260. package/dist/components/fields/TagInput/TagList.js +1 -1
  261. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  262. package/dist/components/fields/TagInput/useTagError.js +1 -1
  263. package/dist/components/fields/TextArea/TextArea.d.ts +0 -1
  264. package/dist/components/fields/TextArea/TextArea.js +49 -63
  265. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  266. package/dist/components/fields/TextInput/TextInput.d.ts +1 -1
  267. package/dist/components/fields/TextInput/TextInput.js +42 -46
  268. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  269. package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -2
  270. package/dist/components/fields/TextInput/TextInputBase.js +32 -10
  271. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  272. package/dist/components/fields/TextInput/displayed-validation.js +50 -0
  273. package/dist/components/fields/TextInput/displayed-validation.js.map +1 -0
  274. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  275. package/dist/components/fields/TextInputMapper/TextInputMapper.js +20 -17
  276. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  277. package/dist/components/fields/TriggerActions.js +1 -1
  278. package/dist/components/fields/color/ColorPanel.js +3 -1
  279. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  280. package/dist/components/fields/color/channels.js +1 -1
  281. package/dist/components/fields/color/color.js +1 -1
  282. package/dist/components/fields/color/context.js +1 -1
  283. package/dist/components/fields/index.d.ts +2 -2
  284. package/dist/components/fields/option-origin-press.js +78 -0
  285. package/dist/components/fields/option-origin-press.js.map +1 -0
  286. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +10 -8
  287. package/dist/components/form/FieldWrapper/FieldWrapper.js +214 -158
  288. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  289. package/dist/components/form/FieldWrapper/field-description.js +3 -3
  290. package/dist/components/form/FieldWrapper/field-description.js.map +1 -1
  291. package/dist/components/form/FieldWrapper/types.d.ts +4 -3
  292. package/dist/components/form/Form/Field.js +1 -1
  293. package/dist/components/form/Form/Form.js +1 -1
  294. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  295. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  296. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  297. package/dist/components/form/Form/SubmitError.js +1 -1
  298. package/dist/components/form/Form/backend.js +1 -1
  299. package/dist/components/form/Form/index.js +1 -1
  300. package/dist/components/form/Form/modern/actions.js +1 -1
  301. package/dist/components/form/Form/modern/context.js +1 -1
  302. package/dist/components/form/Form/modern/controller.js +1 -1
  303. package/dist/components/form/Form/modern/field-binding.js +1 -1
  304. package/dist/components/form/Form/modern/field.js +1 -1
  305. package/dist/components/form/Form/modern/react.js +1 -1
  306. package/dist/components/form/Form/modern/store.js +1 -1
  307. package/dist/components/form/Form/modern/validation.js +1 -1
  308. package/dist/components/form/Form/modern/values.js +1 -1
  309. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  310. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  311. package/dist/components/form/Form/use-field/use-field-props.js +34 -22
  312. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  313. package/dist/components/form/Form/use-field/use-field.js +1 -1
  314. package/dist/components/form/Form/use-form.js +1 -1
  315. package/dist/components/form/Form/validation.js +1 -1
  316. package/dist/components/form/Label.js +1 -1
  317. package/dist/components/form/field-chrome.js +15 -0
  318. package/dist/components/form/field-chrome.js.map +1 -0
  319. package/dist/components/form/index.d.ts +1 -1
  320. package/dist/components/form/legacy-tooltip.js +1 -1
  321. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  322. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  323. package/dist/components/form/validation/use-validation-props.js +1 -1
  324. package/dist/components/form/wrapper.d.ts +6 -5
  325. package/dist/components/form/wrapper.js +11 -8
  326. package/dist/components/form/wrapper.js.map +1 -1
  327. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  328. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  329. package/dist/components/layout/Flex.js +1 -1
  330. package/dist/components/layout/Flow.js +1 -1
  331. package/dist/components/layout/Grid.js +1 -1
  332. package/dist/components/layout/Panel.js +1 -1
  333. package/dist/components/layout/Prefix.js +1 -1
  334. package/dist/components/layout/ResizablePanel.js +1 -1
  335. package/dist/components/layout/Space.js +1 -1
  336. package/dist/components/layout/Suffix.js +1 -1
  337. package/dist/components/navigation/Pagination/Pagination.js +3 -1
  338. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  339. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  340. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  341. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  342. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  343. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  344. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  345. package/dist/components/navigation/Tabs/TabPicker.js +2 -1
  346. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  347. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  348. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  349. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  350. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  351. package/dist/components/navigation/Tabs/styled.js +1 -1
  352. package/dist/components/navigation/Tabs/types.js +1 -1
  353. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  354. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  355. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  356. package/dist/components/other/Calendar/Calendar.js +1 -1
  357. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  358. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  359. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  360. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  361. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  362. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  363. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  364. package/dist/components/other/Calendar/styled.js +1 -1
  365. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  366. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  367. package/dist/components/overlays/AlertDialog/AlertDialog.d.ts +6 -1
  368. package/dist/components/overlays/AlertDialog/AlertDialog.js +3 -2
  369. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  370. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.d.ts +15 -4
  371. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +85 -15
  372. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  373. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  374. package/dist/components/overlays/AlertDialog/types.d.ts +2 -1
  375. package/dist/components/overlays/Dialog/Dialog.js +28 -14
  376. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  377. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  378. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  379. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +7 -3
  380. package/dist/components/overlays/Dialog/DialogTrigger.js +149 -132
  381. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  382. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  383. package/dist/components/overlays/Dialog/context.js +1 -1
  384. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  385. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  386. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  387. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +83 -0
  388. package/dist/components/overlays/Dialog/use-dialog-open-sync.js.map +1 -0
  389. package/dist/components/overlays/Modal/Modal.js +1 -1
  390. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  391. package/dist/components/overlays/Modal/Overlay.js +9 -3
  392. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  393. package/dist/components/overlays/Modal/Popover.js +31 -29
  394. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  395. package/dist/components/overlays/Modal/Tray.js +2 -1
  396. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  397. package/dist/components/overlays/Modal/Underlay.js +1 -1
  398. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  399. package/dist/components/overlays/Notifications/Notification.js +1 -1
  400. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  401. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  402. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  403. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  404. package/dist/components/overlays/Notifications/OverlayContainer.js +18 -32
  405. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  406. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  407. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  408. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  409. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  410. package/dist/components/overlays/Notifications/index.js +1 -1
  411. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  412. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  413. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  414. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  415. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  416. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  417. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  418. package/dist/components/overlays/Toast/index.js +1 -1
  419. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  420. package/dist/components/overlays/Toast/useToast.js +1 -1
  421. package/dist/components/overlays/Tooltip/Tooltip.d.ts +8 -0
  422. package/dist/components/overlays/Tooltip/Tooltip.js +16 -22
  423. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  424. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  425. package/dist/components/overlays/Tooltip/TooltipTrigger.d.ts +1 -1
  426. package/dist/components/overlays/Tooltip/TooltipTrigger.js +163 -113
  427. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  428. package/dist/components/overlays/Tooltip/context.js +1 -1
  429. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  430. package/dist/components/overlays/Tooltip/split-trigger-props.js +6 -5
  431. package/dist/components/overlays/Tooltip/split-trigger-props.js.map +1 -1
  432. package/dist/components/portal/Portal.js +1 -1
  433. package/dist/components/portal/PortalProvider.js +1 -1
  434. package/dist/components/portal/usePortal.js +1 -1
  435. package/dist/components/shared/DraggableCollection.js +1 -1
  436. package/dist/components/shared/InvalidIcon.js +1 -1
  437. package/dist/components/shared/ValidIcon.js +1 -1
  438. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  439. package/dist/components/status/Spin/Cube.js +1 -1
  440. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  441. package/dist/components/status/Spin/Spin.js +1 -1
  442. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  443. package/dist/data/item-themes.js +1 -1
  444. package/dist/data/themes.js +1 -1
  445. package/dist/eslint-plugin/defaults.generated.js +11 -17
  446. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  447. package/dist/eslint-plugin/index.js +1 -1
  448. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  449. package/dist/i18n/I18nProvider.js +1 -1
  450. package/dist/i18n/createFormatter.js +1 -1
  451. package/dist/i18n/index.js +1 -1
  452. package/dist/i18n/instance.js +1 -1
  453. package/dist/i18n/locales/de-DE/uikit.js +6 -4
  454. package/dist/i18n/locales/en-US/uikit.js +6 -4
  455. package/dist/i18n/locales/en-US/uikit.json.d.ts +3 -1
  456. package/dist/i18n/locales/es-ES/uikit.js +6 -4
  457. package/dist/i18n/locales/es-MX/uikit.js +6 -4
  458. package/dist/i18n/locales/fr-FR/uikit.js +6 -4
  459. package/dist/i18n/locales/it-IT/uikit.js +6 -4
  460. package/dist/i18n/locales/ja-JP/uikit.js +6 -4
  461. package/dist/i18n/locales/nb-NO/uikit.js +6 -4
  462. package/dist/i18n/locales/pt-BR/uikit.js +6 -4
  463. package/dist/i18n/locales/pt-PT/uikit.js +6 -4
  464. package/dist/i18n/locales/sv-SE/uikit.js +6 -4
  465. package/dist/i18n/locales/vi-VN/uikit.js +6 -4
  466. package/dist/i18n/locales.js +1 -1
  467. package/dist/i18n/namespace.js +1 -1
  468. package/dist/i18n/useFormatter.js +1 -1
  469. package/dist/i18n/useI18n.js +1 -1
  470. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  471. package/dist/icons/AdjustmentsIcon.js +1 -1
  472. package/dist/icons/AiIcon.js +1 -1
  473. package/dist/icons/AreaChartIcon.js +1 -1
  474. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  475. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  476. package/dist/icons/BackwardIcon.js +1 -1
  477. package/dist/icons/BarChartIcon.js +1 -1
  478. package/dist/icons/BellFilledIcon.js +1 -1
  479. package/dist/icons/BellIcon.js +1 -1
  480. package/dist/icons/BooleanIcon.js +1 -1
  481. package/dist/icons/CalendarEditIcon.js +1 -1
  482. package/dist/icons/CalendarIcon.js +1 -1
  483. package/dist/icons/CaretDownIcon.js +1 -1
  484. package/dist/icons/CaretUpIcon.js +1 -1
  485. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  486. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  487. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  488. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  489. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  490. package/dist/icons/ChartBarLineIcon.js +1 -1
  491. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  492. package/dist/icons/ChartBarStackedIcon.js +1 -1
  493. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  494. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  495. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  496. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  497. package/dist/icons/ChartBubbleIcon.js +1 -1
  498. package/dist/icons/ChartDonut2Icon.js +1 -1
  499. package/dist/icons/ChartFunnelIcon.js +1 -1
  500. package/dist/icons/ChartHeatmapIcon.js +1 -1
  501. package/dist/icons/ChartKPIIcon.js +1 -1
  502. package/dist/icons/ChartPie2Icon.js +1 -1
  503. package/dist/icons/ChartScatterIcon.js +1 -1
  504. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  505. package/dist/icons/CheckCircleIcon.js +1 -1
  506. package/dist/icons/CheckIcon.js +1 -1
  507. package/dist/icons/CircleFilledIcon.js +1 -1
  508. package/dist/icons/ClearIcon.js +1 -1
  509. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  510. package/dist/icons/CloseCircleIcon.js +1 -1
  511. package/dist/icons/CloseIcon.js +1 -1
  512. package/dist/icons/CodeIcon.js +1 -1
  513. package/dist/icons/ColumnTotalIcon.js +1 -1
  514. package/dist/icons/CopyIcon.js +1 -1
  515. package/dist/icons/CountIcon.js +1 -1
  516. package/dist/icons/CubeIcon.js +1 -1
  517. package/dist/icons/CubePauseIcon.js +1 -1
  518. package/dist/icons/CubePlayIcon.js +1 -1
  519. package/dist/icons/CurrencyDollarIcon.js +1 -1
  520. package/dist/icons/DangerIcon.js +1 -1
  521. package/dist/icons/DashboardIcon.js +1 -1
  522. package/dist/icons/DatabaseIcon.js +1 -1
  523. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  524. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  525. package/dist/icons/DirectionIcon.js +1 -1
  526. package/dist/icons/DonutIcon.js +1 -1
  527. package/dist/icons/DownIcon.js +1 -1
  528. package/dist/icons/EditIcon.js +1 -1
  529. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  530. package/dist/icons/ExclamationCircleIcon.js +1 -1
  531. package/dist/icons/ExclamationIcon.js +1 -1
  532. package/dist/icons/EyeIcon.js +1 -1
  533. package/dist/icons/EyeInvisibleIcon.js +1 -1
  534. package/dist/icons/FilterIcon.js +1 -1
  535. package/dist/icons/FolderFilledIcon.js +1 -1
  536. package/dist/icons/FolderIcon.js +1 -1
  537. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  538. package/dist/icons/FolderOpenIcon.js +1 -1
  539. package/dist/icons/ForwardIcon.js +1 -1
  540. package/dist/icons/GripVerticalIcon.js +1 -1
  541. package/dist/icons/HierarchyIcon.js +1 -1
  542. package/dist/icons/HierarchyOpenIcon.js +1 -1
  543. package/dist/icons/Icon.js +1 -1
  544. package/dist/icons/InfoCircleIcon.js +1 -1
  545. package/dist/icons/InfoIcon.js +1 -1
  546. package/dist/icons/KeyIcon.js +1 -1
  547. package/dist/icons/LeftIcon.js +1 -1
  548. package/dist/icons/LineChartIcon.js +1 -1
  549. package/dist/icons/LoadingIcon.js +1 -1
  550. package/dist/icons/LockFilledIcon.js +1 -1
  551. package/dist/icons/LockIcon.js +1 -1
  552. package/dist/icons/MoreIcon.js +1 -1
  553. package/dist/icons/NotAllowedIcon.js +1 -1
  554. package/dist/icons/Number123Icon.js +1 -1
  555. package/dist/icons/NumberIcon.js +1 -1
  556. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  557. package/dist/icons/PauseCircleIcon.js +1 -1
  558. package/dist/icons/PauseIcon.js +1 -1
  559. package/dist/icons/PercentageIcon.js +1 -1
  560. package/dist/icons/PieChartIcon.js +1 -1
  561. package/dist/icons/PipetteIcon.js +1 -1
  562. package/dist/icons/PlayCircleIcon.js +1 -1
  563. package/dist/icons/PlayIcon.js +1 -1
  564. package/dist/icons/PlusIcon.js +1 -1
  565. package/dist/icons/ProgressBarIcon.js +1 -1
  566. package/dist/icons/ReloadIcon.js +1 -1
  567. package/dist/icons/ReportIcon.js +1 -1
  568. package/dist/icons/ReturnIcon.js +1 -1
  569. package/dist/icons/RightIcon.js +1 -1
  570. package/dist/icons/RowTotalsIcon.js +1 -1
  571. package/dist/icons/SchemeIcon.js +1 -1
  572. package/dist/icons/SearchIcon.js +1 -1
  573. package/dist/icons/SemanticQueryIcon.js +1 -1
  574. package/dist/icons/SettingsIcon.js +1 -1
  575. package/dist/icons/ShieldFilledIcon.js +1 -1
  576. package/dist/icons/ShieldIcon.js +1 -1
  577. package/dist/icons/SlashIcon.js +1 -1
  578. package/dist/icons/SparklesIcon.js +1 -1
  579. package/dist/icons/SqlIcon.js +1 -1
  580. package/dist/icons/StatsIcon.js +1 -1
  581. package/dist/icons/StopIcon.js +1 -1
  582. package/dist/icons/StringIcon.js +1 -1
  583. package/dist/icons/SubtotalsIcon.js +1 -1
  584. package/dist/icons/SwitchIcon.js +1 -1
  585. package/dist/icons/TableIcon.js +1 -1
  586. package/dist/icons/ThumbsDownIcon.js +1 -1
  587. package/dist/icons/ThumbsUpIcon.js +1 -1
  588. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  589. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  590. package/dist/icons/ThunderboltIcon.js +1 -1
  591. package/dist/icons/TimeIcon.js +1 -1
  592. package/dist/icons/TrashIcon.js +1 -1
  593. package/dist/icons/UnlockIcon.js +1 -1
  594. package/dist/icons/UpIcon.js +1 -1
  595. package/dist/icons/UserGroupIcon.js +1 -1
  596. package/dist/icons/UserIcon.js +1 -1
  597. package/dist/icons/UserLockIcon.js +1 -1
  598. package/dist/icons/ViewIcon.js +1 -1
  599. package/dist/icons/WarningFilledIcon.js +1 -1
  600. package/dist/icons/WarningIcon.js +1 -1
  601. package/dist/icons/wrap-icon.js +1 -1
  602. package/dist/index.d.ts +3 -3
  603. package/dist/index.js +4 -4
  604. package/dist/probe/canonicalize.js +1 -1
  605. package/dist/probe/css.js +1 -1
  606. package/dist/probe/index.js +1 -1
  607. package/dist/provider.js +1 -1
  608. package/dist/providers/TrackingProvider.js +1 -1
  609. package/dist/providers/navigation-url.js +15 -3
  610. package/dist/providers/navigation-url.js.map +1 -1
  611. package/dist/providers/navigationAdapter.default.js +1 -1
  612. package/dist/providers/use-navigation.js +1 -1
  613. package/dist/shared/form.d.ts +17 -4
  614. package/dist/tokens/all-tokens.js +1 -1
  615. package/dist/tokens/base.js +1 -1
  616. package/dist/tokens/color-seed.js +1 -1
  617. package/dist/tokens/color-theme.js +1 -1
  618. package/dist/tokens/colors.js +1 -1
  619. package/dist/tokens/layout.js +1 -1
  620. package/dist/tokens/lazy-styles.js +1 -1
  621. package/dist/tokens/legacy-color.js +1 -1
  622. package/dist/tokens/palette-config.js +1 -1
  623. package/dist/tokens/palette.js +1 -1
  624. package/dist/tokens/resolve.js +1 -1
  625. package/dist/tokens/shadows.js +1 -1
  626. package/dist/tokens/sizes.js +1 -1
  627. package/dist/tokens/spacing.js +1 -1
  628. package/dist/tokens/typography.js +1 -1
  629. package/dist/utils/ResizeSensor.js +1 -1
  630. package/dist/utils/colors.js +1 -1
  631. package/dist/utils/dotize.js +1 -1
  632. package/dist/utils/is-dev-env.js +1 -1
  633. package/dist/utils/modules.js +1 -1
  634. package/dist/utils/promise.js +1 -1
  635. package/dist/utils/raf.js +1 -1
  636. package/dist/utils/random.js +1 -1
  637. package/dist/utils/range.js +1 -1
  638. package/dist/utils/react/RenderCache.js +1 -1
  639. package/dist/utils/react/Slots.js +1 -1
  640. package/dist/utils/react/chain.js +1 -1
  641. package/dist/utils/react/disabledProps.js +1 -1
  642. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  643. package/dist/utils/react/index.js +1 -1
  644. package/dist/utils/react/interactions.js +1 -1
  645. package/dist/utils/react/isTextOnly.js +1 -1
  646. package/dist/utils/react/mapProps.js +1 -1
  647. package/dist/utils/react/mergeProps.js +1 -1
  648. package/dist/utils/react/nullableValue.js +18 -9
  649. package/dist/utils/react/nullableValue.js.map +1 -1
  650. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  651. package/dist/utils/react/programmaticFocus.js +1 -1
  652. package/dist/utils/react/resolveIcon.js +1 -1
  653. package/dist/utils/react/sharedStore.js +1 -1
  654. package/dist/utils/react/useBufferedValue.js +1 -1
  655. package/dist/utils/react/useCombinedRefs.js +1 -1
  656. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  657. package/dist/utils/react/useEventBus.js +1 -1
  658. package/dist/utils/react/useId.js +1 -1
  659. package/dist/utils/react/useIsDarwin.js +1 -1
  660. package/dist/utils/react/useKeySymbols.js +1 -1
  661. package/dist/utils/react/useLayoutEffect.js +1 -1
  662. package/dist/utils/react/useLocalStorage.js +1 -1
  663. package/dist/utils/react/useMergeStyles.js +1 -1
  664. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  665. package/dist/utils/react/usePopoverSync.js +1 -1
  666. package/dist/utils/react/useQaProps.js +1 -1
  667. package/dist/utils/react/useScheme.js +1 -1
  668. package/dist/utils/react/useViewportSize.js +1 -1
  669. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  670. package/dist/utils/selection.js +1 -1
  671. package/dist/utils/styles.js +1 -1
  672. package/dist/utils/tree.js +1 -1
  673. package/dist/utils/warnings.js +1 -1
  674. package/dist/version.js +2 -2
  675. package/docs/ComplexLayout.md +1 -1
  676. package/docs/CreateComponent.md +2 -0
  677. package/docs/FieldProperties.md +32 -5
  678. package/docs/Theming.md +2 -1
  679. package/docs/Usage.md +2 -0
  680. package/docs/components/Root.md +1 -1
  681. package/docs/components/actions/Button.md +8 -2
  682. package/docs/components/actions/ButtonSplit.md +27 -1
  683. package/docs/components/actions/Link.md +1 -1
  684. package/docs/components/actions/Menu.md +4 -2
  685. package/docs/components/content/InfoBadge.md +2 -0
  686. package/docs/components/content/ItemBadge.md +4 -0
  687. package/docs/components/content/Layout.md +41 -6
  688. package/docs/components/fields/Checkbox.md +4 -3
  689. package/docs/components/fields/ComboBox.md +30 -19
  690. package/docs/components/fields/FilterListBox.md +2 -2
  691. package/docs/components/fields/FilterPicker.md +2 -2
  692. package/docs/components/fields/ListBox.md +14 -10
  693. package/docs/components/fields/NumberInput.md +20 -11
  694. package/docs/components/fields/PasswordInput.md +6 -7
  695. package/docs/components/fields/Picker.md +6 -5
  696. package/docs/components/fields/RadioGroup.md +1 -1
  697. package/docs/components/fields/SearchInput.md +7 -6
  698. package/docs/components/fields/Select.md +14 -8
  699. package/docs/components/fields/Switch.md +4 -3
  700. package/docs/components/fields/TagInput.md +8 -1
  701. package/docs/components/fields/TextArea.md +4 -3
  702. package/docs/components/fields/TextInput.md +13 -6
  703. package/docs/components/overlays/AlertDialog.md +45 -5
  704. package/docs/components/overlays/Dialog.md +5 -5
  705. package/docs/components/overlays/DialogTrigger.md +6 -6
  706. package/docs/components/overlays/Tooltip.md +17 -6
  707. package/docs/components/overlays/TooltipTrigger.md +2 -0
  708. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.194.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.196.0 | Cube Dev Team */
2
+ import { EXIT_DURATION } from "../Modal/Overlay.js";
2
3
  import { AlertDialogZone } from "./AlertDialogZone.js";
3
4
  import { c } from "react/compiler-runtime";
4
- import { createContext, useContext, useRef, useState } from "react";
5
+ import { createContext, useContext, useLayoutEffect, useRef, useState } from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
7
  import invariant from "tiny-invariant";
7
8
 
@@ -49,11 +50,9 @@ function AlertDialogApiProvider(props) {
49
50
  const id = useRef(0);
50
51
  let t0;
51
52
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
52
- t0 = { open: (dialogProps, t1) => {
53
- const params = t1 === void 0 ? {} : t1;
53
+ t0 = { open: (dialogProps, signals) => {
54
54
  const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } = dialogProps;
55
- const { cancelToken } = params;
56
- if (cancelToken?.aborted) {
55
+ if (signals.some(_temp)) {
57
56
  onCancel?.();
58
57
  return ignoreUnhandled(Promise.reject(void 0));
59
58
  }
@@ -74,11 +73,18 @@ function AlertDialogApiProvider(props) {
74
73
  status
75
74
  } : current?.id === currentId ? null : current);
76
75
  };
77
- const onAbort = () => currentDialog.meta.reject(void 0);
76
+ let isAbortedWhilePending = false;
77
+ const onAbort = () => {
78
+ if (pending) {
79
+ isAbortedWhilePending = true;
80
+ return;
81
+ }
82
+ currentDialog.meta.reject(void 0);
83
+ };
78
84
  const close = () => {
79
85
  if (currentDialog.meta.isClosed) return false;
80
86
  currentDialog.meta.isClosed = true;
81
- cancelToken?.removeEventListener("abort", onAbort);
87
+ for (const signal_0 of signals) signal_0.removeEventListener("abort", onAbort);
82
88
  setOpenedDialog((currentState) => currentState?.meta.id !== currentId ? currentState : {
83
89
  props: currentState.props,
84
90
  meta: {
@@ -86,7 +92,7 @@ function AlertDialogApiProvider(props) {
86
92
  isVisible: false
87
93
  }
88
94
  });
89
- setTimeout(() => setOpenedDialog((currentState_0) => currentState_0?.meta.id !== currentId ? currentState_0 : null), 300);
95
+ setTimeout(() => setOpenedDialog((currentState_0) => currentState_0?.meta.id !== currentId ? currentState_0 : null), EXIT_DURATION);
90
96
  return true;
91
97
  };
92
98
  let resolvePromise;
@@ -123,9 +129,10 @@ function AlertDialogApiProvider(props) {
123
129
  }, (error) => {
124
130
  setPending(null);
125
131
  reportActionError(error);
132
+ if (isAbortedWhilePending) currentDialog.meta.reject(void 0);
126
133
  });
127
134
  };
128
- cancelToken?.addEventListener("abort", onAbort, { once: true });
135
+ for (const signal_1 of signals) signal_1.addEventListener("abort", onAbort, { once: true });
129
136
  currentDialog.props = {
130
137
  ...restProps,
131
138
  onDismiss: (action) => {
@@ -145,7 +152,7 @@ function AlertDialogApiProvider(props) {
145
152
  } };
146
153
  $[0] = t0;
147
154
  } else t0 = $[0];
148
- const api = t0;
155
+ const opener = t0;
149
156
  let t1;
150
157
  if ($[1] !== openedDialog || $[2] !== pendingAction) {
151
158
  t1 = /* @__PURE__ */ jsx(AlertDialogZone, {
@@ -159,7 +166,7 @@ function AlertDialogApiProvider(props) {
159
166
  let t2;
160
167
  if ($[4] !== props.children || $[5] !== t1) {
161
168
  t2 = /* @__PURE__ */ jsxs(DialogApiContext.Provider, {
162
- value: api,
169
+ value: opener,
163
170
  children: [t1, props.children]
164
171
  });
165
172
  $[4] = props.children;
@@ -178,6 +185,13 @@ function AlertDialogApiProvider(props) {
178
185
  * with `undefined` on a cancel. A caller that runs everything in the callbacks
179
186
  * can ignore it: an ignored cancel is not reported as an unhandled rejection.
180
187
  *
188
+ * A dialog belongs to the component that calls this hook: when that component
189
+ * unmounts, its dialog closes as a cancel, so no callback runs against a
190
+ * component that is gone. Call the hook in a component that stays mounted
191
+ * while the dialog is open, such as the one that renders a menu, not in the
192
+ * menu item that closes it. A confirm or secondary action that is running
193
+ * finishes first.
194
+ *
181
195
  * ***Important*** only one alert dialog can be open at a time: `open` rejects
182
196
  * with an `Error` while another one is open. A dialog that is already closing
183
197
  * gives way.
@@ -213,10 +227,66 @@ function AlertDialogApiProvider(props) {
213
227
  * // Later, e.g. when the approval arrives:
214
228
  * controllerRef.current?.abort();
215
229
  */
230
+ function _temp(signal) {
231
+ return signal.aborted;
232
+ }
216
233
  function useAlertDialogAPI() {
217
- const api = useContext(DialogApiContext);
218
- invariant(api !== null, "You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component");
219
- return api;
234
+ const $ = c(5);
235
+ const opener = useContext(DialogApiContext);
236
+ invariant(opener !== null, "You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component");
237
+ let t0;
238
+ if ($[0] !== opener) {
239
+ t0 = () => createDialogOwner(opener);
240
+ $[0] = opener;
241
+ $[1] = t0;
242
+ } else t0 = $[1];
243
+ const [owner] = useState(t0);
244
+ let t1;
245
+ let t2;
246
+ if ($[2] !== owner) {
247
+ t1 = () => owner.attach();
248
+ t2 = [owner];
249
+ $[2] = owner;
250
+ $[3] = t1;
251
+ $[4] = t2;
252
+ } else {
253
+ t1 = $[3];
254
+ t2 = $[4];
255
+ }
256
+ useLayoutEffect(t1, t2);
257
+ return owner.api;
258
+ }
259
+ /**
260
+ * One `useAlertDialogAPI` caller's `open`, whose dialogs close when the
261
+ * caller unmounts. Its identity is the caller's for good: callers put `open`
262
+ * in effect dependencies.
263
+ */
264
+ function createDialogOwner(opener) {
265
+ let lifetime = null;
266
+ let isUnmounted = false;
267
+ const api = { open: (dialogProps, params = {}) => {
268
+ let owner;
269
+ if (isUnmounted) owner = AbortSignal.abort();
270
+ else {
271
+ lifetime ??= new AbortController();
272
+ owner = lifetime.signal;
273
+ }
274
+ const { cancelToken } = params;
275
+ return opener.open(dialogProps, cancelToken ? [owner, cancelToken] : [owner]);
276
+ } };
277
+ /** The effect setup. Its cleanup closes the dialogs the caller opened. */
278
+ const attach = () => {
279
+ isUnmounted = false;
280
+ return () => {
281
+ isUnmounted = true;
282
+ lifetime?.abort();
283
+ lifetime = null;
284
+ };
285
+ };
286
+ return {
287
+ api,
288
+ attach
289
+ };
220
290
  }
221
291
 
222
292
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogApiProvider.js","names":["createContext","useContext","useMemo","useRef","useState","invariant","AlertDialogZone","AlertDialogResolveStatus","Dialog","DialogProps","DialogApiContext","AlertDialogApi","open","dialogProps","params","AlertDialogApiParams","Promise","cancelToken","AbortSignal","isThenable","value","PromiseLike","then","runHandler","handler","undefined","error","reject","runActionHandlers","handlers","pending","map","filter","length","all","ignoreUnhandled","promise","T","catch","reportActionError","globalThis","reportError","setTimeout","PendingAction","id","status","AlertDialogApiProvider","props","$","_c","openedDialog","setOpenedDialog","pendingAction","setPendingAction","t0","Symbol","for","t1","onDismiss","onConfirm","onSecondary","onCancel","restProps","aborted","currentId","current","currentDialog","meta","isClosed","isVisible","setPending","onAbort","close","removeEventListener","currentState","currentState_0","resolvePromise","rejectPromise","resolve","status_0","reason","act","status_1","onPress","result","addEventListener","once","action","openedDialog_0","Error","api","t2","children","useAlertDialogAPI"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialogApiProvider.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, useRef, useState } from 'react';\nimport invariant from 'tiny-invariant';\n\nimport { AlertDialogZone } from './AlertDialogZone';\nimport { AlertDialogResolveStatus, Dialog, DialogProps } from './types';\n\nconst DialogApiContext = createContext<AlertDialogApi | null>(null);\n\nexport interface AlertDialogApi {\n /**\n * Opens the dialog. Resolves with the action the user picked. Rejects with\n * `undefined` when the dialog closes without one (Cancel, dismissal or an\n * aborted `cancelToken`), and with an `Error` when it cannot open. A cancel\n * is not reported as an unhandled rejection when the promise is ignored.\n */\n open: (\n dialogProps: DialogProps,\n params?: AlertDialogApiParams,\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nexport interface AlertDialogApiParams {\n /** Closes the dialog when aborted, which settles it as a cancel. */\n cancelToken?: AbortSignal;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then === 'function';\n}\n\n/** Runs an action handler, turning a throw into a rejected promise. */\nfunction runHandler(handler: (() => unknown) | undefined): unknown {\n if (!handler) return undefined;\n\n try {\n return handler();\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\n/**\n * Runs the button's `onPress` and the dialog's callback for the same action.\n * Returns a promise when either does, so the dialog waits for both.\n */\nfunction runActionHandlers(handlers: ((() => unknown) | undefined)[]) {\n const pending = handlers.map(runHandler).filter(isThenable);\n\n return pending.length ? Promise.all(pending) : undefined;\n}\n\n/** A cancel rejection nobody listens to is not an error worth reporting. */\nfunction ignoreUnhandled<T>(promise: Promise<T>) {\n promise.catch(() => {});\n\n return promise;\n}\n\n/** Reports a failed action handler without throwing into the press. */\nfunction reportActionError(error: unknown) {\n if (typeof globalThis.reportError === 'function') {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n });\n }\n}\n\n/**\n * The dialog whose action handler is still running, and which action.\n * @internal\n */\nexport interface PendingAction {\n id: number;\n status: AlertDialogResolveStatus;\n}\n\n/**\n * @internal Do not use it in your code!\n */\nexport function AlertDialogApiProvider(props) {\n const [openedDialog, setOpenedDialog] = useState<Dialog | null>(null);\n const [pendingAction, setPendingAction] = useState<PendingAction | null>(\n null,\n );\n const id = useRef(0);\n\n // A context value: callers put `open` in effect dependencies, so its\n // identity has to stay the same.\n const api = useMemo<AlertDialogApi>(\n () => ({\n open: (dialogProps, params = {}) => {\n const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } =\n dialogProps;\n const { cancelToken } = params;\n\n // An aborted signal is a cancel: it settles before anything opens.\n if (cancelToken?.aborted) {\n onCancel?.();\n\n return ignoreUnhandled(Promise.reject(undefined));\n }\n\n const currentId = ++id.current;\n const currentDialog = {\n props: null,\n meta: { id: currentId, isClosed: false, isVisible: true },\n } as unknown as Dialog;\n // Set while an action handler's promise runs: the dialog stays open.\n let pending: AlertDialogResolveStatus | null = null;\n\n const setPending = (status: AlertDialogResolveStatus | null) => {\n pending = status;\n setPendingAction((current) =>\n status\n ? { id: currentId, status }\n : current?.id === currentId\n ? null\n : current,\n );\n };\n\n // Aborting is a cancel, so it settles the promise the way Cancel does.\n const onAbort = () => currentDialog.meta.reject(undefined);\n\n const close = () => {\n if (currentDialog.meta.isClosed) return false;\n\n currentDialog.meta.isClosed = true;\n cancelToken?.removeEventListener('abort', onAbort);\n\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId\n ? currentState\n : {\n props: currentState.props,\n meta: { ...currentState.meta, isVisible: false },\n },\n );\n\n setTimeout(\n () =>\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId ? currentState : null,\n ),\n 300,\n );\n\n return true;\n };\n\n let resolvePromise!: (status: AlertDialogResolveStatus) => void;\n let rejectPromise!: (reason: unknown) => void;\n\n currentDialog.meta.promise = new Promise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n\n currentDialog.meta.resolve = (status) => {\n if (close()) resolvePromise(status);\n };\n\n // A rejection without a reason is a cancel: the Cancel button, a\n // dismissal, an aborted `cancelToken` or `content` calling `reject()`.\n // Anything else is a failure.\n currentDialog.meta.reject = (reason) => {\n if (!close()) return;\n\n if (reason !== undefined) {\n rejectPromise(reason);\n\n return;\n }\n\n ignoreUnhandled(currentDialog.meta.promise);\n rejectPromise(undefined);\n onCancel?.();\n };\n\n // The confirm and secondary buttons: run the handlers, and settle\n // once they have finished. A handler that throws or rejects keeps the\n // dialog open for another try.\n currentDialog.meta.act = (status, onPress) => {\n const result = runActionHandlers([\n onPress,\n status === 'confirm' ? onConfirm : onSecondary,\n ]);\n\n if (!isThenable(result)) {\n currentDialog.meta.resolve(status);\n\n return;\n }\n\n setPending(status);\n\n result.then(\n () => {\n setPending(null);\n\n if (currentDialog.meta.isClosed) return;\n\n currentDialog.meta.resolve(status);\n // The press's own dismissal was held back while it ran.\n onDismiss?.(status);\n },\n (error) => {\n setPending(null);\n reportActionError(error);\n },\n );\n };\n\n cancelToken?.addEventListener('abort', onAbort, { once: true });\n\n currentDialog.props = {\n ...restProps,\n // Called with the action's name by the action buttons, and without\n // one by Escape and a click outside.\n onDismiss: (action) => {\n if (pending) return;\n\n onDismiss?.(action);\n currentDialog.meta.reject(undefined);\n },\n };\n\n setOpenedDialog((openedDialog) => {\n // Another dialog is open, so this one can't be. One that is only\n // animating out gives way: its cleanup checks the id, so it leaves\n // the new dialog alone.\n if (openedDialog !== null && !openedDialog.meta.isClosed) {\n currentDialog.meta.reject(\n new Error(\n \"Another dialog is already opened. It's a bad practice to open more than one <AlertDialog /> at the same time\",\n ),\n );\n\n return openedDialog;\n }\n\n return currentDialog;\n });\n\n return currentDialog.meta.promise;\n },\n }),\n [],\n );\n\n return (\n <DialogApiContext.Provider value={api}>\n <AlertDialogZone\n openedDialog={openedDialog}\n pendingAction={pendingAction}\n />\n {props.children}\n </DialogApiContext.Provider>\n );\n}\n\n/**\n * Hook gives the ability to open `<AlertDialog />` imperatively.\n *\n * Pass the action as `onConfirm`. If it returns a promise, the dialog waits\n * for it with the button loading, and stays open if it fails.\n *\n * The returned promise resolves with the action the user picked and rejects\n * with `undefined` on a cancel. A caller that runs everything in the callbacks\n * can ignore it: an ignored cancel is not reported as an unhandled rejection.\n *\n * ***Important*** only one alert dialog can be open at a time: `open` rejects\n * with an `Error` while another one is open. A dialog that is already closing\n * gives way.\n *\n * @example running the action from the dialog.\n * const { open } = useAlertDialogAPI();\n *\n * const onPress = () => {\n * open({\n * title: 'Delete the item?',\n * danger: true,\n * actions: { confirm: { children: 'Delete' }, cancel: true },\n * onConfirm: () => deleteItem(),\n * });\n * };\n *\n * return <Button onPress={onPress}>Delete</Button>\n *\n * @example closing the dialog from code with a cancel token.\n * const { open } = useAlertDialogAPI();\n * const controllerRef = useRef<AbortController | null>(null);\n *\n * const onPress = () => {\n * // A signal stays aborted, so every dialog needs a fresh controller.\n * controllerRef.current = new AbortController();\n *\n * open(\n * { title: 'Waiting for approval', actions: { confirm: { children: 'Hide' } } },\n * { cancelToken: controllerRef.current.signal },\n * );\n * };\n *\n * // Later, e.g. when the approval arrives:\n * controllerRef.current?.abort();\n */\nexport function useAlertDialogAPI(): AlertDialogApi {\n const api = useContext(DialogApiContext);\n\n invariant(\n api !== null,\n \"You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component\",\n );\n\n return api;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AlertDialogApiProvider.js","names":["createContext","useContext","useLayoutEffect","useMemo","useRef","useState","invariant","EXIT_DURATION","AlertDialogZone","AlertDialogResolveStatus","Dialog","DialogProps","AlertDialogOpener","open","dialogProps","signals","AbortSignal","Promise","DialogApiContext","AlertDialogApi","params","AlertDialogApiParams","cancelToken","isThenable","value","PromiseLike","then","runHandler","handler","undefined","error","reject","runActionHandlers","handlers","pending","map","filter","length","all","ignoreUnhandled","promise","T","catch","reportActionError","globalThis","reportError","setTimeout","PendingAction","id","status","AlertDialogApiProvider","props","$","_c","openedDialog","setOpenedDialog","pendingAction","setPendingAction","t0","Symbol","for","onDismiss","onConfirm","onSecondary","onCancel","restProps","some","_temp","currentId","current","currentDialog","meta","isClosed","isVisible","setPending","isAbortedWhilePending","onAbort","close","signal_0","signal","removeEventListener","currentState","currentState_0","resolvePromise","rejectPromise","resolve","status_0","reason","act","status_1","onPress","result","signal_1","addEventListener","once","action","openedDialog_0","Error","opener","t1","t2","children","aborted","useAlertDialogAPI","createDialogOwner","owner","attach","api","lifetime","AbortController","isUnmounted","abort"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialogApiProvider.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport invariant from 'tiny-invariant';\n\nimport { EXIT_DURATION } from '../Modal/Overlay';\n\nimport { AlertDialogZone } from './AlertDialogZone';\nimport { AlertDialogResolveStatus, Dialog, DialogProps } from './types';\n\n/**\n * The provider's own `open`. A dialog closes, as a cancel, when any of its\n * signals aborts: the caller's `cancelToken`, and the one that ends with the\n * component that opened it.\n */\ninterface AlertDialogOpener {\n open: (\n dialogProps: DialogProps,\n signals: AbortSignal[],\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nconst DialogApiContext = createContext<AlertDialogOpener | null>(null);\n\nexport interface AlertDialogApi {\n /**\n * Opens the dialog. Resolves with the action the user picked. Rejects with\n * `undefined` when the dialog closes without one (Cancel, dismissal, an\n * aborted `cancelToken` or the unmount of the component that opened it),\n * and with an `Error` when it cannot open. A cancel is not reported as an\n * unhandled rejection when the promise is ignored.\n */\n open: (\n dialogProps: DialogProps,\n params?: AlertDialogApiParams,\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nexport interface AlertDialogApiParams {\n /**\n * Closes the dialog when aborted, which settles it as a cancel. A confirm or\n * secondary action that is running finishes first.\n */\n cancelToken?: AbortSignal;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then === 'function';\n}\n\n/** Runs an action handler, turning a throw into a rejected promise. */\nfunction runHandler(handler: (() => unknown) | undefined): unknown {\n if (!handler) return undefined;\n\n try {\n return handler();\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\n/**\n * Runs the button's `onPress` and the dialog's callback for the same action.\n * Returns a promise when either does, so the dialog waits for both.\n */\nfunction runActionHandlers(handlers: ((() => unknown) | undefined)[]) {\n const pending = handlers.map(runHandler).filter(isThenable);\n\n return pending.length ? Promise.all(pending) : undefined;\n}\n\n/** A cancel rejection nobody listens to is not an error worth reporting. */\nfunction ignoreUnhandled<T>(promise: Promise<T>) {\n promise.catch(() => {});\n\n return promise;\n}\n\n/** Reports a failed action handler without throwing into the press. */\nfunction reportActionError(error: unknown) {\n if (typeof globalThis.reportError === 'function') {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n });\n }\n}\n\n/**\n * The dialog whose action handler is still running, and which action.\n * @internal\n */\nexport interface PendingAction {\n id: number;\n status: AlertDialogResolveStatus;\n}\n\n/**\n * @internal Do not use it in your code!\n */\nexport function AlertDialogApiProvider(props) {\n const [openedDialog, setOpenedDialog] = useState<Dialog | null>(null);\n const [pendingAction, setPendingAction] = useState<PendingAction | null>(\n null,\n );\n const id = useRef(0);\n\n // A context value that never changes: each `useAlertDialogAPI` caller\n // keeps the one it first saw.\n const opener = useMemo<AlertDialogOpener>(\n () => ({\n open: (dialogProps, signals) => {\n const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } =\n dialogProps;\n\n // An aborted signal is a cancel: it settles before anything opens.\n if (signals.some((signal) => signal.aborted)) {\n onCancel?.();\n\n return ignoreUnhandled(Promise.reject(undefined));\n }\n\n const currentId = ++id.current;\n const currentDialog = {\n props: null,\n meta: { id: currentId, isClosed: false, isVisible: true },\n } as unknown as Dialog;\n // Set while an action handler's promise runs: the dialog stays open.\n let pending: AlertDialogResolveStatus | null = null;\n\n const setPending = (status: AlertDialogResolveStatus | null) => {\n pending = status;\n setPendingAction((current) =>\n status\n ? { id: currentId, status }\n : current?.id === currentId\n ? null\n : current,\n );\n };\n\n // Set by an abort that came while an action ran.\n let isAbortedWhilePending = false;\n\n // Aborting is a cancel, so it settles the promise the way Cancel does.\n // A running action finishes first, as it does on Escape: cut short, a\n // delete that went through would be reported as cancelled.\n const onAbort = () => {\n if (pending) {\n isAbortedWhilePending = true;\n\n return;\n }\n\n currentDialog.meta.reject(undefined);\n };\n\n const close = () => {\n if (currentDialog.meta.isClosed) return false;\n\n currentDialog.meta.isClosed = true;\n\n for (const signal of signals) {\n signal.removeEventListener('abort', onAbort);\n }\n\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId\n ? currentState\n : {\n props: currentState.props,\n meta: { ...currentState.meta, isVisible: false },\n },\n );\n\n // Dropped once the overlay has played its exit, not before: removing\n // it sooner unmounts the dialog mid-animation.\n setTimeout(\n () =>\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId ? currentState : null,\n ),\n EXIT_DURATION,\n );\n\n return true;\n };\n\n let resolvePromise!: (status: AlertDialogResolveStatus) => void;\n let rejectPromise!: (reason: unknown) => void;\n\n currentDialog.meta.promise = new Promise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n\n currentDialog.meta.resolve = (status) => {\n if (close()) resolvePromise(status);\n };\n\n // A rejection without a reason is a cancel: the Cancel button, a\n // dismissal, an aborted signal or `content` calling `reject()`.\n // Anything else is a failure.\n currentDialog.meta.reject = (reason) => {\n if (!close()) return;\n\n if (reason !== undefined) {\n rejectPromise(reason);\n\n return;\n }\n\n ignoreUnhandled(currentDialog.meta.promise);\n rejectPromise(undefined);\n onCancel?.();\n };\n\n // The confirm and secondary buttons: run the handlers, and settle\n // once they have finished. A handler that throws or rejects keeps the\n // dialog open for another try, unless it was aborted meanwhile.\n currentDialog.meta.act = (status, onPress) => {\n const result = runActionHandlers([\n onPress,\n status === 'confirm' ? onConfirm : onSecondary,\n ]);\n\n if (!isThenable(result)) {\n currentDialog.meta.resolve(status);\n\n return;\n }\n\n setPending(status);\n\n result.then(\n () => {\n setPending(null);\n\n if (currentDialog.meta.isClosed) return;\n\n currentDialog.meta.resolve(status);\n // The press's own dismissal was held back while it ran.\n onDismiss?.(status);\n },\n (error) => {\n setPending(null);\n reportActionError(error);\n\n if (isAbortedWhilePending) currentDialog.meta.reject(undefined);\n },\n );\n };\n\n for (const signal of signals) {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n currentDialog.props = {\n ...restProps,\n // Called with the action's name by the action buttons, and without\n // one by Escape and a click outside.\n onDismiss: (action) => {\n if (pending) return;\n\n onDismiss?.(action);\n currentDialog.meta.reject(undefined);\n },\n };\n\n setOpenedDialog((openedDialog) => {\n // Another dialog is open, so this one can't be. One that is only\n // animating out gives way: its cleanup checks the id, so it leaves\n // the new dialog alone.\n if (openedDialog !== null && !openedDialog.meta.isClosed) {\n currentDialog.meta.reject(\n new Error(\n \"Another dialog is already opened. It's a bad practice to open more than one <AlertDialog /> at the same time\",\n ),\n );\n\n return openedDialog;\n }\n\n return currentDialog;\n });\n\n return currentDialog.meta.promise;\n },\n }),\n [],\n );\n\n return (\n <DialogApiContext.Provider value={opener}>\n <AlertDialogZone\n openedDialog={openedDialog}\n pendingAction={pendingAction}\n />\n {props.children}\n </DialogApiContext.Provider>\n );\n}\n\n/**\n * Hook gives the ability to open `<AlertDialog />` imperatively.\n *\n * Pass the action as `onConfirm`. If it returns a promise, the dialog waits\n * for it with the button loading, and stays open if it fails.\n *\n * The returned promise resolves with the action the user picked and rejects\n * with `undefined` on a cancel. A caller that runs everything in the callbacks\n * can ignore it: an ignored cancel is not reported as an unhandled rejection.\n *\n * A dialog belongs to the component that calls this hook: when that component\n * unmounts, its dialog closes as a cancel, so no callback runs against a\n * component that is gone. Call the hook in a component that stays mounted\n * while the dialog is open, such as the one that renders a menu, not in the\n * menu item that closes it. A confirm or secondary action that is running\n * finishes first.\n *\n * ***Important*** only one alert dialog can be open at a time: `open` rejects\n * with an `Error` while another one is open. A dialog that is already closing\n * gives way.\n *\n * @example running the action from the dialog.\n * const { open } = useAlertDialogAPI();\n *\n * const onPress = () => {\n * open({\n * title: 'Delete the item?',\n * danger: true,\n * actions: { confirm: { children: 'Delete' }, cancel: true },\n * onConfirm: () => deleteItem(),\n * });\n * };\n *\n * return <Button onPress={onPress}>Delete</Button>\n *\n * @example closing the dialog from code with a cancel token.\n * const { open } = useAlertDialogAPI();\n * const controllerRef = useRef<AbortController | null>(null);\n *\n * const onPress = () => {\n * // A signal stays aborted, so every dialog needs a fresh controller.\n * controllerRef.current = new AbortController();\n *\n * open(\n * { title: 'Waiting for approval', actions: { confirm: { children: 'Hide' } } },\n * { cancelToken: controllerRef.current.signal },\n * );\n * };\n *\n * // Later, e.g. when the approval arrives:\n * controllerRef.current?.abort();\n */\nexport function useAlertDialogAPI(): AlertDialogApi {\n const opener = useContext(DialogApiContext);\n\n invariant(\n opener !== null,\n \"You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component\",\n );\n\n const [owner] = useState(() => createDialogOwner(opener));\n\n // A layout effect, so it is in place before any passive effect calls `open`.\n useLayoutEffect(() => owner.attach(), [owner]);\n\n return owner.api;\n}\n\n/**\n * One `useAlertDialogAPI` caller's `open`, whose dialogs close when the\n * caller unmounts. Its identity is the caller's for good: callers put `open`\n * in effect dependencies.\n */\nfunction createDialogOwner(opener: AlertDialogOpener) {\n // Aborted on unmount. Made on first use, so a StrictMode remount, which\n // runs the cleanup once, gets a fresh one.\n let lifetime: AbortController | null = null;\n let isUnmounted = false;\n\n const api: AlertDialogApi = {\n open: (dialogProps, params = {}) => {\n let owner: AbortSignal;\n\n if (isUnmounted) {\n // A late call, after an `await`, from a caller that is gone.\n owner = AbortSignal.abort();\n } else {\n lifetime ??= new AbortController();\n owner = lifetime.signal;\n }\n\n const { cancelToken } = params;\n\n return opener.open(\n dialogProps,\n cancelToken ? [owner, cancelToken] : [owner],\n );\n },\n };\n\n /** The effect setup. Its cleanup closes the dialogs the caller opened. */\n const attach = () => {\n isUnmounted = false;\n\n return () => {\n isUnmounted = true;\n lifetime?.abort();\n lifetime = null;\n };\n };\n\n return { api, attach };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.194.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.196.0 | Cube Dev Team */
2
2
  import { Portal } from "../../portal/Portal.js";
3
3
  import { DialogContainer } from "../Dialog/DialogContainer.js";
4
4
  import { _AlertDialog } from "./AlertDialog.js";
@@ -41,7 +41,8 @@ interface DialogProps extends Omit<CubeDialogContainerProps, 'onDismiss' | 'chil
41
41
  onSecondary?: () => unknown;
42
42
  /**
43
43
  * Runs when the dialog settles as a cancel: the Cancel button, Escape, a
44
- * click outside, an aborted `cancelToken`, or `content` calling `reject()`.
44
+ * click outside, an aborted `cancelToken`, the unmount of the component
45
+ * that opened it, or `content` calling `reject()`.
45
46
  */
46
47
  onCancel?: () => void;
47
48
  }
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.194.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.196.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { SlotProvider } from "../../../utils/react/Slots.js";
@@ -108,12 +108,22 @@ const sizePxMap = {
108
108
  large: 798
109
109
  };
110
110
  /**
111
+ * The control a dialog focuses when it opens: an input marked
112
+ * `data-autofocus`, or a submit or primary button. In an alert dialog never a
113
+ * destructive (`danger`) button, which a reflexive Enter would run.
114
+ */
115
+ function findPriorityFocusElement(dialog) {
116
+ const button = dialog.getAttribute("role") === "alertdialog" ? "button:not([data-theme=\"danger\"])" : "button";
117
+ return dialog.querySelector(`input[data-autofocus], ${button}[type="submit"], ${button}[data-type="primary"]`);
118
+ }
119
+ /**
111
120
  * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface.
112
121
  * Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.
113
122
  */
114
123
  const Dialog = forwardRef(function Dialog(props, ref) {
115
124
  const $ = c(7);
116
- const isEntered = useOpenTransitionContext()?.transitionState === "entered";
125
+ const transitionState = useOpenTransitionContext()?.transitionState;
126
+ const isShown = transitionState === "enter" || transitionState === "entered";
117
127
  const context = useDialogContext();
118
128
  let t0;
119
129
  if ($[0] !== props || $[1] !== ref) {
@@ -126,7 +136,8 @@ const Dialog = forwardRef(function Dialog(props, ref) {
126
136
  $[2] = t0;
127
137
  } else t0 = $[2];
128
138
  const content = t0;
129
- const shouldContainFocus = isEntered && !!context.isOpen && context.type !== "panel";
139
+ const isNonModalPopover = context.type === "popover" && context.isDismissable === false;
140
+ const shouldContainFocus = isShown && !!context.isOpen && context.type !== "panel" && !isNonModalPopover;
130
141
  const t1 = context.shouldRestoreFocus ?? true;
131
142
  let t2;
132
143
  if ($[3] !== content || $[4] !== shouldContainFocus || $[5] !== t1) {
@@ -144,12 +155,12 @@ const Dialog = forwardRef(function Dialog(props, ref) {
144
155
  });
145
156
  const DialogContent = forwardRef(function DialogContent(props, ref) {
146
157
  let { type = "modal", ...contextProps } = useDialogContext();
147
- let { qa, children, size = "M", isDismissable = contextProps.isDismissable, onDismiss = contextProps.onClose, closeIcon, closeButtonStyles, style, ...otherProps } = props;
158
+ let { qa, children, size = "M", isDismissable = type === "popover" ? void 0 : contextProps.isDismissable, onDismiss = contextProps.onClose, closeIcon, closeButtonStyles, style, ...otherProps } = props;
148
159
  size = sizeMap[size.toUpperCase()] || size;
149
160
  const styles = extractStyles(otherProps, STYLES_LIST);
150
161
  const { t } = useI18n();
151
162
  let domRef = useObjectRef(ref);
152
- let { dialogProps, titleProps } = useDialog(mergeProps$1(contextProps, props), domRef);
163
+ let { dialogProps, titleProps, contentProps } = useDialog(mergeProps$1(contextProps, props), domRef);
153
164
  let dismissButton;
154
165
  if (type === "popover" || type === "tray") dismissButton = /* @__PURE__ */ jsx(DismissButton, { onDismiss });
155
166
  useEffect(() => {
@@ -158,7 +169,7 @@ const DialogContent = forwardRef(function DialogContent(props, ref) {
158
169
  const activeElement = document.activeElement;
159
170
  const isFocusOutsideDialog = !domRef.current.contains(activeElement);
160
171
  const isFocusOnDialogShell = activeElement === domRef.current;
161
- const priorityElement = domRef.current.querySelector("input[data-autofocus], button[type=\"submit\"], button[data-type=\"primary\"]");
172
+ const priorityElement = findPriorityFocusElement(domRef.current);
162
173
  if (priorityElement && (isFocusOutsideDialog || isFocusOnDialogShell)) {
163
174
  priorityElement.focus();
164
175
  return;
@@ -175,15 +186,18 @@ const DialogContent = forwardRef(function DialogContent(props, ref) {
175
186
  preset: "h4",
176
187
  ...titleProps
177
188
  },
178
- content: { styles: {
179
- flexGrow: 1,
180
- padding: "$dialog-content-padding-v $dialog-padding-h",
181
- gap: "$dialog-content-gap",
182
- height: {
183
- "": "max (100% - (2 * $dialog-content-padding-v))",
184
- ":last-child": "max (100% - $dialog-content-padding-v)"
189
+ content: {
190
+ id: contentProps.id ?? null,
191
+ styles: {
192
+ flexGrow: 1,
193
+ padding: "$dialog-content-padding-v $dialog-padding-h",
194
+ gap: "$dialog-content-gap",
195
+ height: {
196
+ "": "max (100% - (2 * $dialog-content-padding-v))",
197
+ ":last-child": "max (100% - $dialog-content-padding-v)"
198
+ }
185
199
  }
186
- } },
200
+ },
187
201
  header: {
188
202
  ellipsis: true,
189
203
  styles: {
@@ -1 +1 @@
1
- {"version":3,"file":"Dialog.js","names":["createFocusManager","useObjectRef","BASE_STYLES","BaseProps","BaseStyleProps","BLOCK_STYLES","BlockStyleProps","DIMENSION_STYLES","DimensionStyleProps","FLOW_STYLES","Styles","tasty","forwardRef","ReactElement","Ref","useEffect","AriaDialogProps","DismissButton","FocusScope","useDialog","useI18n","CloseIcon","mergeProps","SlotProvider","extractStyles","ItemButton","useOpenTransitionContext","useDialogContext","useContentOverflow","STYLES_LIST","DialogElement","as","styles","display","flow","fill","pointerEvents","outline","position","width","height","gap","border","radius","shadow","top","CloseButton","qa","type","right","sizeMap","S","M","L","sizePxMap","small","medium","large","CubeDialogProps","Omit","size","isDismissable","onDismiss","arg","closeIcon","closeButtonStyles","role","Dialog","props","ref","$","_c","transitionContext","isEntered","transitionState","context","t0","content","shouldContainFocus","isOpen","t1","shouldRestoreFocus","t2","DialogContent","HTMLDivElement","contextProps","children","onClose","style","otherProps","toUpperCase","t","domRef","dialogProps","titleProps","dismissButton","setTimeout","current","activeElement","document","isFocusOutsideDialog","contains","isFocusOnDialogShell","priorityElement","querySelector","HTMLElement","focus","focusManager","focusFirst","tabbable","contentOverflows","slots","title","level","preset","flexGrow","padding","header","ellipsis","placeItems","placeContent","footer","mods","buttonGroup","dismissable"],"sources":["../../../../src/components/overlays/Dialog/Dialog.tsx"],"sourcesContent":["import { createFocusManager } from '@react-aria/focus';\nimport { useObjectRef } from '@react-aria/utils';\nimport {\n BASE_STYLES,\n BaseProps,\n BaseStyleProps,\n BLOCK_STYLES,\n BlockStyleProps,\n DIMENSION_STYLES,\n DimensionStyleProps,\n FLOW_STYLES,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, Ref, useEffect } from 'react';\nimport {\n AriaDialogProps,\n DismissButton,\n FocusScope,\n useDialog,\n} from 'react-aria';\n\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { mergeProps, SlotProvider } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions/ItemButton/ItemButton';\nimport { useOpenTransitionContext } from '../Modal/OpenTransitionContext';\n\nimport { useDialogContext } from './context';\nimport { useContentOverflow } from './use-content-overflow';\n\nconst STYLES_LIST = [\n ...BASE_STYLES,\n ...DIMENSION_STYLES,\n ...BLOCK_STYLES,\n ...FLOW_STYLES,\n];\n\nconst DialogElement = tasty({\n as: 'section',\n styles: {\n display: 'flex',\n flow: 'column',\n fill: '#surface',\n pointerEvents: 'auto',\n outline: 0,\n position: {\n '': 'relative',\n 'type=panel': 'absolute',\n },\n width: {\n '': '$min-dialog-size $dialog-size (100dvw - 8x)',\n 'type=fullscreen': '(100dvw - 8x) (100dvw - 8x)',\n 'type=fullscreenTakeover': '100dvw 100dvw',\n 'type=panel': 'auto',\n },\n height: {\n '': 'auto (100dvh - 8x)',\n 'type=fullscreen': '(100dvh - 8x) (100dvh - 8x)',\n 'type=fullscreenTakeover | type=panel': '100dvh 100dvh',\n 'type=popover': 'initial initial (50dvh - 5x)',\n },\n gap: 0,\n border: {\n '': false,\n 'type=popover': true,\n },\n radius: {\n '': '1cr',\n 'type=tray': '1cr top',\n 'type=fullscreenTakeover': '0r',\n },\n shadow: {\n '': '$dialog-shadow',\n 'type=popover | type=panel': '$shadow',\n },\n top: {\n '': false,\n 'type=modal': '((50vh - 50%) / -3)',\n 'type=panel': 'auto',\n },\n '$dialog-title-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-padding-h': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-footer-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-gap': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n\n // A `Form` placed directly here (`Dialog > Form > Content + Footer`) lays\n // itself out as this flex column — see `FormElement`. It is the form's own\n // state rather than a rule here, so the form's `styles` still win.\n },\n});\n\nconst CloseButton = tasty(ItemButton, {\n qa: 'ModalCloseButton',\n type: 'clear',\n styles: {\n position: 'absolute',\n top: '1x',\n right: '1x',\n },\n});\n\nconst sizeMap = {\n S: 'small',\n M: 'medium',\n L: 'large',\n};\nconst sizePxMap = {\n small: 360,\n medium: 479,\n large: 798,\n};\n\nexport interface CubeDialogProps\n extends Omit<BaseProps, 'role'>,\n AriaDialogProps,\n BaseStyleProps,\n BlockStyleProps,\n DimensionStyleProps {\n /** The size of the dialog */\n size?: 'S' | 'M' | 'L' | 'small' | 'medium' | 'large';\n /** Whether the dialog is dismissable */\n isDismissable?: boolean;\n /** Trigger when the dialog is dismissed */\n onDismiss?: (arg?: any) => void;\n /** That you can replace the close icon with */\n closeIcon?: ReactElement;\n closeButtonStyles?: Styles;\n role?: 'dialog' | 'alertdialog';\n}\n\n/**\n * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface.\n * Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.\n */\nexport const Dialog = forwardRef(function Dialog(\n props: CubeDialogProps,\n ref: Ref<HTMLDivElement>,\n) {\n const transitionContext = useOpenTransitionContext();\n\n const isEntered = transitionContext?.transitionState === 'entered';\n\n const context = useDialogContext();\n\n const content = <DialogContent key=\"content\" {...props} ref={ref} />;\n\n const shouldContainFocus =\n isEntered && !!context.isOpen && context.type !== 'panel';\n\n return (\n // This component traps the focus inside the dialog and restores it on\n // close. The restore is the one that matters for popover-type dialogs —\n // `DialogTrigger`'s own restore is a no-op there — so `shouldRestoreFocus`\n // has to reach it. Containment is unaffected either way.\n <FocusScope\n restoreFocus={context.shouldRestoreFocus ?? true}\n contain={shouldContainFocus}\n >\n {content}\n </FocusScope>\n );\n});\n\nconst DialogContent = forwardRef(function DialogContent(\n props: CubeDialogProps,\n ref: Ref<HTMLDivElement>,\n) {\n let { type = 'modal', ...contextProps } = useDialogContext();\n\n let {\n qa,\n children,\n size = 'M',\n isDismissable = contextProps.isDismissable,\n onDismiss = contextProps.onClose,\n closeIcon,\n closeButtonStyles,\n style,\n ...otherProps\n } = props;\n\n size = sizeMap[size.toUpperCase()] || size;\n\n const styles: Styles = extractStyles(otherProps, STYLES_LIST);\n\n const { t } = useI18n();\n\n let domRef = useObjectRef(ref);\n let { dialogProps, titleProps } = useDialog(\n mergeProps(contextProps, props),\n domRef,\n );\n\n // If rendered in a popover or tray there won't be a visible dismiss button,\n // so we render a hidden one for screen readers.\n let dismissButton;\n if (type === 'popover' || type === 'tray') {\n dismissButton = <DismissButton onDismiss={onDismiss} />;\n }\n\n // Focus the first focusable element in the dialog when it opens.\n //\n // We also re-run the priority focus logic when the dialog <section>\n // itself is the active element. This recovers from a race that occurs\n // when a popover-based component (FilterPicker, Picker, Select, …) opens\n // inside another contained Dialog: React's native `autoFocus` on the\n // inner control fires during the mutation phase, before the popover's\n // FocusScope registers in react-aria's focus-scope tree, so the outer\n // FocusScope yanks focus back. useDialog then defaults focus to the\n // dialog <section>; without re-promoting it here, the priority element\n // (e.g. the search input) is never focused.\n useEffect(() => {\n if (contextProps.isOpen) {\n setTimeout(() => {\n if (!domRef.current) return;\n\n const activeElement = document.activeElement;\n const isFocusOutsideDialog = !domRef.current.contains(activeElement);\n const isFocusOnDialogShell = activeElement === domRef.current;\n\n // Priority 1: autofocus input or primary button\n const priorityElement = domRef.current.querySelector(\n 'input[data-autofocus], button[type=\"submit\"], button[data-type=\"primary\"]',\n ) as HTMLElement | null;\n\n if (priorityElement && (isFocusOutsideDialog || isFocusOnDialogShell)) {\n priorityElement.focus();\n return;\n }\n\n if (isFocusOutsideDialog) {\n // Fallback: focus first tabbable element, or dialog itself\n const focusManager = createFocusManager(domRef);\n\n if (!focusManager.focusFirst({ tabbable: true })) {\n domRef.current.focus();\n }\n }\n });\n }\n }, [contextProps.isOpen]);\n\n // let hasHeader = useHasChild('[data-id=\"Header\"]', domRef);\n // let hasFooter = useHasChild('[data-id=\"Footer\"]', domRef);\n\n const contentOverflows = useContentOverflow(domRef);\n\n let slots = {\n title: {\n level: 2,\n preset: 'h4',\n ...titleProps,\n },\n content: {\n styles: {\n flexGrow: 1,\n padding: '$dialog-content-padding-v $dialog-padding-h',\n gap: '$dialog-content-gap',\n height: {\n '': 'max (100% - (2 * $dialog-content-padding-v))',\n ':last-child': 'max (100% - $dialog-content-padding-v)',\n },\n },\n },\n header: {\n ellipsis: true,\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center stretch',\n placeContent: 'space-between',\n padding: `$dialog-title-padding-v ${\n isDismissable ? '($dialog-padding-h + 4x)' : '$dialog-padding-h'\n } $dialog-title-padding-v $dialog-padding-h`,\n border: 'bottom',\n },\n },\n footer: {\n mods: { 'content-overflow': contentOverflows },\n styles: {\n display: 'flex',\n gap: '1x',\n flow: 'row-reverse',\n placeItems: 'baseline stretch',\n placeContent: 'space-between',\n padding: '$dialog-footer-v $dialog-padding-h',\n // A line only while the body scrolls: the footer then sits over\n // content that carries on beneath it, and the line is what says so.\n // Under a body that fits, the actions simply end it and a rule there\n // reads as clutter.\n border: {\n '': false,\n 'content-overflow': 'top',\n },\n },\n },\n buttonGroup: {\n styles: {\n flow: 'row-reverse',\n },\n },\n };\n\n return (\n <DialogElement\n ref={domRef}\n data-id=\"Dialog\"\n data-qa={qa || 'Dialog'}\n styles={styles}\n as=\"section\"\n {...dialogProps}\n mods={{ dismissable: isDismissable }}\n style={{\n '--dialog-size': `${sizePxMap[size] || sizePxMap.small}px`,\n ...style,\n }}\n data-type={type}\n data-size={size}\n >\n {dismissButton}\n\n <SlotProvider slots={slots}>\n {isDismissable && (\n <CloseButton\n icon={closeIcon || <CloseIcon size={20} />}\n aria-label={t('dialog.dismiss', 'Dismiss')}\n onPress={() => onDismiss && onDismiss()}\n />\n )}\n {children}\n </SlotProvider>\n </DialogElement>\n );\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Dialog.js","names":["createFocusManager","useObjectRef","BASE_STYLES","BaseProps","BaseStyleProps","BLOCK_STYLES","BlockStyleProps","DIMENSION_STYLES","DimensionStyleProps","FLOW_STYLES","Styles","tasty","forwardRef","ReactElement","Ref","useEffect","AriaDialogProps","DismissButton","FocusScope","useDialog","useI18n","CloseIcon","mergeProps","SlotProvider","extractStyles","ItemButton","useOpenTransitionContext","useDialogContext","useContentOverflow","STYLES_LIST","DialogElement","as","styles","display","flow","fill","pointerEvents","outline","position","width","height","gap","border","radius","shadow","top","CloseButton","qa","type","right","sizeMap","S","M","L","sizePxMap","small","medium","large","CubeDialogProps","Omit","size","isDismissable","onDismiss","arg","closeIcon","closeButtonStyles","role","findPriorityFocusElement","dialog","HTMLElement","button","getAttribute","querySelector","Dialog","props","ref","$","_c","transitionState","isShown","context","t0","content","isNonModalPopover","shouldContainFocus","isOpen","t1","shouldRestoreFocus","t2","DialogContent","HTMLDivElement","contextProps","children","undefined","onClose","style","otherProps","toUpperCase","t","domRef","dialogProps","titleProps","contentProps","dismissButton","setTimeout","current","activeElement","document","isFocusOutsideDialog","contains","isFocusOnDialogShell","priorityElement","focus","focusManager","focusFirst","tabbable","contentOverflows","slots","title","level","preset","id","flexGrow","padding","header","ellipsis","placeItems","placeContent","footer","mods","buttonGroup","dismissable"],"sources":["../../../../src/components/overlays/Dialog/Dialog.tsx"],"sourcesContent":["import { createFocusManager } from '@react-aria/focus';\nimport { useObjectRef } from '@react-aria/utils';\nimport {\n BASE_STYLES,\n BaseProps,\n BaseStyleProps,\n BLOCK_STYLES,\n BlockStyleProps,\n DIMENSION_STYLES,\n DimensionStyleProps,\n FLOW_STYLES,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, Ref, useEffect } from 'react';\nimport {\n AriaDialogProps,\n DismissButton,\n FocusScope,\n useDialog,\n} from 'react-aria';\n\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons/CloseIcon';\nimport { mergeProps, SlotProvider } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions/ItemButton/ItemButton';\nimport { useOpenTransitionContext } from '../Modal/OpenTransitionContext';\n\nimport { useDialogContext } from './context';\nimport { useContentOverflow } from './use-content-overflow';\n\nconst STYLES_LIST = [\n ...BASE_STYLES,\n ...DIMENSION_STYLES,\n ...BLOCK_STYLES,\n ...FLOW_STYLES,\n];\n\nconst DialogElement = tasty({\n as: 'section',\n styles: {\n display: 'flex',\n flow: 'column',\n fill: '#surface',\n pointerEvents: 'auto',\n outline: 0,\n position: {\n '': 'relative',\n 'type=panel': 'absolute',\n },\n width: {\n '': '$min-dialog-size $dialog-size (100dvw - 8x)',\n 'type=fullscreen': '(100dvw - 8x) (100dvw - 8x)',\n 'type=fullscreenTakeover': '100dvw 100dvw',\n 'type=panel': 'auto',\n },\n height: {\n '': 'auto (100dvh - 8x)',\n 'type=fullscreen': '(100dvh - 8x) (100dvh - 8x)',\n 'type=fullscreenTakeover | type=panel': '100dvh 100dvh',\n 'type=popover': 'initial initial (50dvh - 5x)',\n },\n gap: 0,\n border: {\n '': false,\n 'type=popover': true,\n },\n radius: {\n '': '1cr',\n 'type=tray': '1cr top',\n 'type=fullscreenTakeover': '0r',\n },\n shadow: {\n '': '$dialog-shadow',\n 'type=popover | type=panel': '$shadow',\n },\n top: {\n '': false,\n 'type=modal': '((50vh - 50%) / -3)',\n 'type=panel': 'auto',\n },\n '$dialog-title-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-padding-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-padding-h': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-footer-v': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n '$dialog-content-gap': {\n '': '1.5x',\n 'type=popover': '1x',\n },\n\n // A `Form` placed directly here (`Dialog > Form > Content + Footer`) lays\n // itself out as this flex column — see `FormElement`. It is the form's own\n // state rather than a rule here, so the form's `styles` still win.\n },\n});\n\nconst CloseButton = tasty(ItemButton, {\n qa: 'ModalCloseButton',\n type: 'clear',\n styles: {\n position: 'absolute',\n top: '1x',\n right: '1x',\n },\n});\n\nconst sizeMap = {\n S: 'small',\n M: 'medium',\n L: 'large',\n};\nconst sizePxMap = {\n small: 360,\n medium: 479,\n large: 798,\n};\n\nexport interface CubeDialogProps\n extends Omit<BaseProps, 'role'>,\n AriaDialogProps,\n BaseStyleProps,\n BlockStyleProps,\n DimensionStyleProps {\n /** The size of the dialog */\n size?: 'S' | 'M' | 'L' | 'small' | 'medium' | 'large';\n /** Whether the dialog is dismissable */\n isDismissable?: boolean;\n /** Trigger when the dialog is dismissed */\n onDismiss?: (arg?: any) => void;\n /** That you can replace the close icon with */\n closeIcon?: ReactElement;\n closeButtonStyles?: Styles;\n role?: 'dialog' | 'alertdialog';\n}\n\n/**\n * The control a dialog focuses when it opens: an input marked\n * `data-autofocus`, or a submit or primary button. In an alert dialog never a\n * destructive (`danger`) button, which a reflexive Enter would run.\n */\nfunction findPriorityFocusElement(dialog: HTMLElement) {\n const button =\n dialog.getAttribute('role') === 'alertdialog'\n ? 'button:not([data-theme=\"danger\"])'\n : 'button';\n\n return dialog.querySelector<HTMLElement>(\n `input[data-autofocus], ${button}[type=\"submit\"], ${button}[data-type=\"primary\"]`,\n );\n}\n\n/**\n * Dialogs are windows containing contextual information, tasks, or workflows that appear over the user interface.\n * Depending on the kind of Dialog, further interactions may be blocked until the Dialog is acknowledged.\n */\nexport const Dialog = forwardRef(function Dialog(\n props: CubeDialogProps,\n ref: Ref<HTMLDivElement>,\n) {\n const transitionState = useOpenTransitionContext()?.transitionState;\n\n // From the first frame of the enter transition, not only once it has\n // ended: a Tab pressed while the dialog animates in would otherwise land on\n // the page behind it, and nothing would pull it back. Released as soon as\n // the dialog closes, so focus can return to the trigger during the exit.\n const isShown = transitionState === 'enter' || transitionState === 'entered';\n\n const context = useDialogContext();\n\n const content = <DialogContent key=\"content\" {...props} ref={ref} />;\n\n // A popover that is not dismissable leaves the page usable, as a panel\n // does: an outside press reaches its control, and focus has to follow it\n // there, into a text field too.\n const isNonModalPopover =\n context.type === 'popover' && context.isDismissable === false;\n\n const shouldContainFocus =\n isShown &&\n !!context.isOpen &&\n context.type !== 'panel' &&\n !isNonModalPopover;\n\n return (\n // This component traps the focus inside the dialog and restores it on\n // close. The restore is the one that matters for popover-type dialogs —\n // `DialogTrigger`'s own restore is a no-op there — so `shouldRestoreFocus`\n // has to reach it. Containment is unaffected either way.\n <FocusScope\n restoreFocus={context.shouldRestoreFocus ?? true}\n contain={shouldContainFocus}\n >\n {content}\n </FocusScope>\n );\n});\n\nconst DialogContent = forwardRef(function DialogContent(\n props: CubeDialogProps,\n ref: Ref<HTMLDivElement>,\n) {\n let { type = 'modal', ...contextProps } = useDialogContext();\n\n let {\n qa,\n children,\n size = 'M',\n // A popover shows a close button only when its `Dialog` asks for one: its\n // trigger's `isDismissable` decides whether an outside press closes it.\n isDismissable = type === 'popover' ? undefined : contextProps.isDismissable,\n onDismiss = contextProps.onClose,\n closeIcon,\n closeButtonStyles,\n style,\n ...otherProps\n } = props;\n\n size = sizeMap[size.toUpperCase()] || size;\n\n const styles: Styles = extractStyles(otherProps, STYLES_LIST);\n\n const { t } = useI18n();\n\n let domRef = useObjectRef(ref);\n // `contentProps` carries an id only for `role=\"alertdialog\"` without an\n // explicit `aria-describedby`: an alert is described by its message, while a\n // plain dialog links nothing, so opening a form does not read it aloud.\n let { dialogProps, titleProps, contentProps } = useDialog(\n mergeProps(contextProps, props),\n domRef,\n );\n\n // If rendered in a popover or tray there won't be a visible dismiss button,\n // so we render a hidden one for screen readers.\n let dismissButton;\n if (type === 'popover' || type === 'tray') {\n dismissButton = <DismissButton onDismiss={onDismiss} />;\n }\n\n // Focus the first focusable element in the dialog when it opens.\n //\n // We also re-run the priority focus logic when the dialog <section>\n // itself is the active element. This recovers from a race that occurs\n // when a popover-based component (FilterPicker, Picker, Select, …) opens\n // inside another contained Dialog: React's native `autoFocus` on the\n // inner control fires during the mutation phase, before the popover's\n // FocusScope registers in react-aria's focus-scope tree, so the outer\n // FocusScope yanks focus back. useDialog then defaults focus to the\n // dialog <section>; without re-promoting it here, the priority element\n // (e.g. the search input) is never focused.\n useEffect(() => {\n if (contextProps.isOpen) {\n setTimeout(() => {\n if (!domRef.current) return;\n\n const activeElement = document.activeElement;\n const isFocusOutsideDialog = !domRef.current.contains(activeElement);\n const isFocusOnDialogShell = activeElement === domRef.current;\n\n // Priority 1: autofocus input or primary button\n const priorityElement = findPriorityFocusElement(domRef.current);\n\n if (priorityElement && (isFocusOutsideDialog || isFocusOnDialogShell)) {\n priorityElement.focus();\n return;\n }\n\n if (isFocusOutsideDialog) {\n // Fallback: focus first tabbable element, or dialog itself\n const focusManager = createFocusManager(domRef);\n\n if (!focusManager.focusFirst({ tabbable: true })) {\n domRef.current.focus();\n }\n }\n });\n }\n }, [contextProps.isOpen]);\n\n // let hasHeader = useHasChild('[data-id=\"Header\"]', domRef);\n // let hasFooter = useHasChild('[data-id=\"Footer\"]', domRef);\n\n const contentOverflows = useContentOverflow(domRef);\n\n let slots = {\n title: {\n level: 2,\n preset: 'h4',\n ...titleProps,\n },\n content: {\n // `null` rather than `undefined` when there is none: slots reach nested\n // slot providers, and `undefined` does not override, so a dialog opened\n // inside an alert dialog would repeat the alert's message id.\n id: contentProps.id ?? null,\n styles: {\n flexGrow: 1,\n padding: '$dialog-content-padding-v $dialog-padding-h',\n gap: '$dialog-content-gap',\n height: {\n '': 'max (100% - (2 * $dialog-content-padding-v))',\n ':last-child': 'max (100% - $dialog-content-padding-v)',\n },\n },\n },\n header: {\n ellipsis: true,\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center stretch',\n placeContent: 'space-between',\n padding: `$dialog-title-padding-v ${\n isDismissable ? '($dialog-padding-h + 4x)' : '$dialog-padding-h'\n } $dialog-title-padding-v $dialog-padding-h`,\n border: 'bottom',\n },\n },\n footer: {\n mods: { 'content-overflow': contentOverflows },\n styles: {\n display: 'flex',\n gap: '1x',\n flow: 'row-reverse',\n placeItems: 'baseline stretch',\n placeContent: 'space-between',\n padding: '$dialog-footer-v $dialog-padding-h',\n // A line only while the body scrolls: the footer then sits over\n // content that carries on beneath it, and the line is what says so.\n // Under a body that fits, the actions simply end it and a rule there\n // reads as clutter.\n border: {\n '': false,\n 'content-overflow': 'top',\n },\n },\n },\n buttonGroup: {\n styles: {\n flow: 'row-reverse',\n },\n },\n };\n\n return (\n <DialogElement\n ref={domRef}\n data-id=\"Dialog\"\n data-qa={qa || 'Dialog'}\n styles={styles}\n as=\"section\"\n {...dialogProps}\n mods={{ dismissable: isDismissable }}\n style={{\n '--dialog-size': `${sizePxMap[size] || sizePxMap.small}px`,\n ...style,\n }}\n data-type={type}\n data-size={size}\n >\n {dismissButton}\n\n <SlotProvider slots={slots}>\n {isDismissable && (\n <CloseButton\n icon={closeIcon || <CloseIcon size={20} />}\n aria-label={t('dialog.dismiss', 'Dismiss')}\n onPress={() => onDismiss && onDismiss()}\n />\n )}\n {children}\n </SlotProvider>\n </DialogElement>\n );\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.194.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.196.0 | Cube Dev Team */
2
2
  import { _Modal } from "../Modal/Modal.js";
3
3
  import { DialogContext } from "./context.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.194.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.196.0 | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { Button } from "../../actions/Button/Button.js";
@@ -21,12 +21,16 @@ interface CubeDialogTriggerProps extends Omit<OverlayTriggerProps, 'type'>, Posi
21
21
  mobileType?: 'modal' | 'tray' | 'fullscreen' | 'fullscreenTakeover' | 'panel' | 'popover';
22
22
  placement?: Placement;
23
23
  /**
24
- * Whether a popover type Dialog's arrow should be hidden.
24
+ * Has no effect: popovers render no arrow.
25
+ * @deprecated Popovers never render an arrow, so there is nothing to hide.
25
26
  */
26
27
  hideArrow?: boolean;
27
- /** The ref of the element the Dialog should visually attach itself to. Defaults to the trigger button if not defined. */
28
+ /** The ref of the element the Dialog should visually attach itself to. Defaults to the trigger button if not defined. A popover closes when this element scrolls, as one attached to its trigger does. */
28
29
  targetRef?: RefObject<HTMLElement | null>;
29
- /** Whether passive dismissal (Escape or an outside click) can close the dialog. Explicit dialog actions can still close it. */
30
+ /**
31
+ * Whether passive dismissal (Escape or an outside click) can close the dialog. Explicit dialog actions can still close it.
32
+ * A popover that is not dismissable lets an outside press through to the control it lands on, including a text field, which can take focus. It stays open when another popover opens, and closes when a modal, tray, fullscreen or panel dialog opens from another `DialogTrigger`.
33
+ */
30
34
  isDismissable?: boolean;
31
35
  /** Whether pressing the escape key to close the dialog should be disabled. */
32
36
  isKeyboardDismissDisabled?: boolean;