@cube-dev/ui-kit 0.0.0-canary-bef9600 → 0.0.0-canary-e3f8a1a

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 (654) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.js +11 -5
  18. package/dist/components/actions/Button/Button.js.map +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +27 -25
  25. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -4
  39. package/dist/components/actions/Menu/styled.js.map +1 -1
  40. package/dist/components/actions/actions-run.js +1 -1
  41. package/dist/components/actions/index.js +1 -1
  42. package/dist/components/actions/use-action.js +1 -1
  43. package/dist/components/actions/use-anchored-menu.js +1 -1
  44. package/dist/components/actions/use-context-menu.js +1 -1
  45. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/dist/components/content/Alert/Alert.js +1 -1
  47. package/dist/components/content/Alert/use-alert.js +1 -1
  48. package/dist/components/content/Avatar/Avatar.js +1 -1
  49. package/dist/components/content/Badge/Badge.js +1 -1
  50. package/dist/components/content/Card/Card.js +1 -1
  51. package/dist/components/content/Content.js +1 -1
  52. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  53. package/dist/components/content/CopySnippet/CopySnippet.d.ts +4 -4
  54. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  55. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  56. package/dist/components/content/Divider.js +1 -1
  57. package/dist/components/content/Footer.js +1 -1
  58. package/dist/components/content/Header.js +1 -1
  59. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  60. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  61. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  62. package/dist/components/content/Item/Item.js +3 -3
  63. package/dist/components/content/Item/Item.js.map +1 -1
  64. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  65. package/dist/components/content/ItemBadge/ItemBadge.js +7 -3
  66. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  67. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  68. package/dist/components/content/Layout/GridLayout.js +1 -1
  69. package/dist/components/content/Layout/Layout.js +28 -15
  70. package/dist/components/content/Layout/Layout.js.map +1 -1
  71. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  72. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  73. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  74. package/dist/components/content/Layout/LayoutContent.js +1 -1
  75. package/dist/components/content/Layout/LayoutContext.js +20 -10
  76. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  77. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  78. package/dist/components/content/Layout/LayoutFooter.js +12 -9
  79. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  80. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  81. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  82. package/dist/components/content/Layout/LayoutPane.js +1 -1
  83. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  84. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  85. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  86. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  87. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  88. package/dist/components/content/Layout/index.js +1 -1
  89. package/dist/components/content/Layout/utils.js +1 -1
  90. package/dist/components/content/Paragraph.js +1 -1
  91. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  92. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  93. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  94. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  95. package/dist/components/content/Result/Result.js +1 -1
  96. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  97. package/dist/components/content/Tag/Tag.js +1 -1
  98. package/dist/components/content/Text.d.ts +14 -14
  99. package/dist/components/content/Text.js +1 -1
  100. package/dist/components/content/TextItem/TextItem.js +1 -1
  101. package/dist/components/content/Title.js +1 -1
  102. package/dist/components/content/Tree/Tree.js +1 -1
  103. package/dist/components/content/Tree/TreeNode.js +1 -1
  104. package/dist/components/content/Tree/styled.js +1 -1
  105. package/dist/components/content/Tree/tree-index.js +1 -1
  106. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  107. package/dist/components/content/Tree/use-load-data.js +1 -1
  108. package/dist/components/content/highlightText.js +1 -1
  109. package/dist/components/content/use-auto-tooltip.js +3 -3
  110. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  111. package/dist/components/data/DataTable/DataTable.js +1 -1
  112. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  113. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  114. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  115. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  116. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  117. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  118. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  119. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  120. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  121. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  122. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  123. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  124. package/dist/components/data/TableBase/RowCollection.js +1 -1
  125. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  126. package/dist/components/data/TableBase/TableRow.js +1 -1
  127. package/dist/components/data/TableBase/TableView.js +1 -1
  128. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  129. package/dist/components/data/TableBase/column-header.js +1 -1
  130. package/dist/components/data/TableBase/column-menu.js +1 -1
  131. package/dist/components/data/TableBase/column-styles.js +1 -1
  132. package/dist/components/data/TableBase/column-tint.js +1 -1
  133. package/dist/components/data/TableBase/row-menu.js +1 -1
  134. package/dist/components/data/TableBase/styled.js +1 -1
  135. package/dist/components/data/TableBase/table-tree.js +1 -1
  136. package/dist/components/data/TableBase/types.js +1 -1
  137. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  138. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  139. package/dist/components/data/TableBase/use-column-order.js +1 -1
  140. package/dist/components/data/TableBase/use-column-window.js +1 -1
  141. package/dist/components/data/TableBase/use-container-width.js +1 -1
  142. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  143. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  144. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  145. package/dist/components/data/TableBase/use-table-search.js +1 -1
  146. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  147. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  148. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  149. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  150. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  151. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  152. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  153. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  154. package/dist/components/fields/Checkbox/CheckboxGroup.js +5 -5
  155. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  156. package/dist/components/fields/Checkbox/context.js +1 -1
  157. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  158. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  159. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  160. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  161. package/dist/components/fields/ComboBox/ComboBox.d.ts +26 -6
  162. package/dist/components/fields/ComboBox/ComboBox.js +1095 -619
  163. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  164. package/dist/components/fields/ComboBox/comboBoxOptions.js +84 -0
  165. package/dist/components/fields/ComboBox/comboBoxOptions.js.map +1 -0
  166. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  167. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  168. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  169. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  170. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  171. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  172. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  173. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  174. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  175. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  176. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  177. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  179. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  181. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  182. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  183. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  184. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  185. package/dist/components/fields/DatePicker/period.js +1 -1
  186. package/dist/components/fields/DatePicker/props.js +1 -1
  187. package/dist/components/fields/DatePicker/utils.js +1 -1
  188. package/dist/components/fields/FileInput/FileInput.js +1 -1
  189. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  190. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  191. package/dist/components/fields/Input/Input.d.ts +2 -2
  192. package/dist/components/fields/Input/Input.js +2 -2
  193. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  194. package/dist/components/fields/ListBox/ListBox.d.ts +10 -4
  195. package/dist/components/fields/ListBox/ListBox.js +293 -143
  196. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  197. package/dist/components/fields/ListBox/optionId.js +1 -1
  198. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +15 -12
  199. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  200. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  201. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  202. package/dist/components/fields/NumberInput/NumberInput.d.ts +0 -1
  203. package/dist/components/fields/NumberInput/NumberInput.js +136 -128
  204. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  205. package/dist/components/fields/NumberInput/StepButton.js +38 -48
  206. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  207. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +1 -2
  208. package/dist/components/fields/PasswordInput/PasswordInput.js +77 -111
  209. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  210. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  211. package/dist/components/fields/Picker/Picker.js +8 -3
  212. package/dist/components/fields/Picker/Picker.js.map +1 -1
  213. package/dist/components/fields/RadioGroup/Radio.d.ts +8 -8
  214. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  215. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -2
  216. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  217. package/dist/components/fields/RadioGroup/context.js +1 -1
  218. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  219. package/dist/components/fields/SearchInput/SearchInput.d.ts +8 -3
  220. package/dist/components/fields/SearchInput/SearchInput.js +22 -29
  221. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  222. package/dist/components/fields/Select/Select.d.ts +12 -1
  223. package/dist/components/fields/Select/Select.js +365 -207
  224. package/dist/components/fields/Select/Select.js.map +1 -1
  225. package/dist/components/fields/Slider/Gradation.js +1 -1
  226. package/dist/components/fields/Slider/HueSlider.js +1 -1
  227. package/dist/components/fields/Slider/RangeSlider.js +3 -4
  228. package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
  229. package/dist/components/fields/Slider/Slider.js +1 -1
  230. package/dist/components/fields/Slider/SliderBase.js +1 -1
  231. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  232. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  233. package/dist/components/fields/Slider/elements.js +1 -1
  234. package/dist/components/fields/Slider/index.js +1 -1
  235. package/dist/components/fields/Switch/Switch.js +1 -1
  236. package/dist/components/fields/TagInput/TagInput.js +1 -1
  237. package/dist/components/fields/TagInput/TagList.js +1 -1
  238. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  239. package/dist/components/fields/TagInput/useTagError.js +1 -1
  240. package/dist/components/fields/TextArea/TextArea.d.ts +0 -1
  241. package/dist/components/fields/TextArea/TextArea.js +49 -63
  242. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  243. package/dist/components/fields/TextInput/TextInput.d.ts +1 -1
  244. package/dist/components/fields/TextInput/TextInput.js +42 -46
  245. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  246. package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -2
  247. package/dist/components/fields/TextInput/TextInputBase.js +32 -10
  248. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  249. package/dist/components/fields/TextInput/displayed-validation.js +50 -0
  250. package/dist/components/fields/TextInput/displayed-validation.js.map +1 -0
  251. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  252. package/dist/components/fields/TextInputMapper/TextInputMapper.js +2 -2
  253. package/dist/components/fields/TriggerActions.js +1 -1
  254. package/dist/components/fields/color/ColorPanel.js +1 -1
  255. package/dist/components/fields/color/channels.js +1 -1
  256. package/dist/components/fields/color/color.js +1 -1
  257. package/dist/components/fields/color/context.js +1 -1
  258. package/dist/components/fields/index.d.ts +2 -2
  259. package/dist/components/fields/option-origin-press.js +78 -0
  260. package/dist/components/fields/option-origin-press.js.map +1 -0
  261. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  262. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  263. package/dist/components/form/Form/Field.js +1 -1
  264. package/dist/components/form/Form/Form.js +1 -1
  265. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  266. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  267. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  268. package/dist/components/form/Form/SubmitError.js +1 -1
  269. package/dist/components/form/Form/backend.js +1 -1
  270. package/dist/components/form/Form/index.js +1 -1
  271. package/dist/components/form/Form/modern/actions.js +1 -1
  272. package/dist/components/form/Form/modern/context.js +1 -1
  273. package/dist/components/form/Form/modern/controller.js +1 -1
  274. package/dist/components/form/Form/modern/field-binding.js +1 -1
  275. package/dist/components/form/Form/modern/field.js +1 -1
  276. package/dist/components/form/Form/modern/react.js +1 -1
  277. package/dist/components/form/Form/modern/store.js +1 -1
  278. package/dist/components/form/Form/modern/validation.js +1 -1
  279. package/dist/components/form/Form/modern/values.js +1 -1
  280. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  281. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  282. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  283. package/dist/components/form/Form/use-field/use-field.js +1 -1
  284. package/dist/components/form/Form/use-form.js +1 -1
  285. package/dist/components/form/Form/validation.js +1 -1
  286. package/dist/components/form/Label.js +1 -1
  287. package/dist/components/form/field-chrome.js +1 -1
  288. package/dist/components/form/legacy-tooltip.js +1 -1
  289. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  290. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  291. package/dist/components/form/validation/use-validation-props.js +1 -1
  292. package/dist/components/form/wrapper.js +1 -1
  293. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  294. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  295. package/dist/components/layout/Flex.js +1 -1
  296. package/dist/components/layout/Flow.js +1 -1
  297. package/dist/components/layout/Grid.js +1 -1
  298. package/dist/components/layout/Panel.js +1 -1
  299. package/dist/components/layout/Prefix.js +1 -1
  300. package/dist/components/layout/ResizablePanel.js +1 -1
  301. package/dist/components/layout/Space.js +1 -1
  302. package/dist/components/layout/Suffix.js +1 -1
  303. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  304. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  305. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  306. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  307. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  308. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  309. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  310. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  311. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  312. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  313. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  314. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  315. package/dist/components/navigation/Tabs/styled.js +1 -1
  316. package/dist/components/navigation/Tabs/types.js +1 -1
  317. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  318. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  319. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  320. package/dist/components/other/Calendar/Calendar.js +1 -1
  321. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  322. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  323. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  324. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  325. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  326. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  327. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  328. package/dist/components/other/Calendar/styled.js +1 -1
  329. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  330. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  331. package/dist/components/overlays/AlertDialog/AlertDialog.d.ts +6 -1
  332. package/dist/components/overlays/AlertDialog/AlertDialog.js +3 -2
  333. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  334. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +3 -2
  335. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  336. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  337. package/dist/components/overlays/Dialog/Dialog.js +28 -14
  338. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  339. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  340. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  341. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +7 -3
  342. package/dist/components/overlays/Dialog/DialogTrigger.js +149 -132
  343. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  344. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  345. package/dist/components/overlays/Dialog/context.js +1 -1
  346. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  347. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  348. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  349. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +83 -0
  350. package/dist/components/overlays/Dialog/use-dialog-open-sync.js.map +1 -0
  351. package/dist/components/overlays/Modal/Modal.js +1 -1
  352. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  353. package/dist/components/overlays/Modal/Overlay.js +3 -2
  354. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  355. package/dist/components/overlays/Modal/Popover.js +1 -1
  356. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  357. package/dist/components/overlays/Modal/Tray.js +1 -1
  358. package/dist/components/overlays/Modal/Underlay.js +1 -1
  359. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  360. package/dist/components/overlays/Notifications/Notification.js +1 -1
  361. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  362. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  363. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  364. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  365. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  366. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  367. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  368. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  369. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  370. package/dist/components/overlays/Notifications/index.js +1 -1
  371. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  372. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  373. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  374. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  375. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  376. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  377. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  378. package/dist/components/overlays/Toast/index.js +1 -1
  379. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  380. package/dist/components/overlays/Toast/useToast.js +1 -1
  381. package/dist/components/overlays/Tooltip/Tooltip.d.ts +8 -0
  382. package/dist/components/overlays/Tooltip/Tooltip.js +16 -22
  383. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  384. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  385. package/dist/components/overlays/Tooltip/TooltipTrigger.d.ts +1 -1
  386. package/dist/components/overlays/Tooltip/TooltipTrigger.js +163 -113
  387. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  388. package/dist/components/overlays/Tooltip/context.js +1 -1
  389. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  390. package/dist/components/overlays/Tooltip/split-trigger-props.js +6 -5
  391. package/dist/components/overlays/Tooltip/split-trigger-props.js.map +1 -1
  392. package/dist/components/portal/Portal.js +1 -1
  393. package/dist/components/portal/PortalProvider.js +1 -1
  394. package/dist/components/portal/usePortal.js +1 -1
  395. package/dist/components/shared/DraggableCollection.js +1 -1
  396. package/dist/components/shared/InvalidIcon.js +1 -1
  397. package/dist/components/shared/ValidIcon.js +1 -1
  398. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  399. package/dist/components/status/Spin/Cube.js +1 -1
  400. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  401. package/dist/components/status/Spin/Spin.js +1 -1
  402. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  403. package/dist/data/item-themes.js +1 -1
  404. package/dist/data/themes.js +1 -1
  405. package/dist/eslint-plugin/defaults.generated.js +11 -17
  406. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  407. package/dist/eslint-plugin/index.js +1 -1
  408. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  409. package/dist/i18n/I18nProvider.js +1 -1
  410. package/dist/i18n/createFormatter.js +1 -1
  411. package/dist/i18n/index.js +1 -1
  412. package/dist/i18n/instance.js +1 -1
  413. package/dist/i18n/locales/de-DE/uikit.js +6 -4
  414. package/dist/i18n/locales/en-US/uikit.js +6 -4
  415. package/dist/i18n/locales/en-US/uikit.json.d.ts +3 -1
  416. package/dist/i18n/locales/es-ES/uikit.js +6 -4
  417. package/dist/i18n/locales/es-MX/uikit.js +6 -4
  418. package/dist/i18n/locales/fr-FR/uikit.js +6 -4
  419. package/dist/i18n/locales/it-IT/uikit.js +6 -4
  420. package/dist/i18n/locales/ja-JP/uikit.js +6 -4
  421. package/dist/i18n/locales/nb-NO/uikit.js +6 -4
  422. package/dist/i18n/locales/pt-BR/uikit.js +6 -4
  423. package/dist/i18n/locales/pt-PT/uikit.js +6 -4
  424. package/dist/i18n/locales/sv-SE/uikit.js +6 -4
  425. package/dist/i18n/locales/vi-VN/uikit.js +6 -4
  426. package/dist/i18n/locales.js +1 -1
  427. package/dist/i18n/namespace.js +1 -1
  428. package/dist/i18n/useFormatter.js +1 -1
  429. package/dist/i18n/useI18n.js +1 -1
  430. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  431. package/dist/icons/AdjustmentsIcon.js +1 -1
  432. package/dist/icons/AiIcon.js +1 -1
  433. package/dist/icons/AreaChartIcon.js +1 -1
  434. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  435. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  436. package/dist/icons/BackwardIcon.js +1 -1
  437. package/dist/icons/BarChartIcon.js +1 -1
  438. package/dist/icons/BellFilledIcon.js +1 -1
  439. package/dist/icons/BellIcon.js +1 -1
  440. package/dist/icons/BooleanIcon.js +1 -1
  441. package/dist/icons/CalendarEditIcon.js +1 -1
  442. package/dist/icons/CalendarIcon.js +1 -1
  443. package/dist/icons/CaretDownIcon.js +1 -1
  444. package/dist/icons/CaretUpIcon.js +1 -1
  445. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  446. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  447. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  448. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  449. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  450. package/dist/icons/ChartBarLineIcon.js +1 -1
  451. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  452. package/dist/icons/ChartBarStackedIcon.js +1 -1
  453. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  454. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  455. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  456. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  457. package/dist/icons/ChartBubbleIcon.js +1 -1
  458. package/dist/icons/ChartDonut2Icon.js +1 -1
  459. package/dist/icons/ChartFunnelIcon.js +1 -1
  460. package/dist/icons/ChartHeatmapIcon.js +1 -1
  461. package/dist/icons/ChartKPIIcon.js +1 -1
  462. package/dist/icons/ChartPie2Icon.js +1 -1
  463. package/dist/icons/ChartScatterIcon.js +1 -1
  464. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  465. package/dist/icons/CheckCircleIcon.js +1 -1
  466. package/dist/icons/CheckIcon.js +1 -1
  467. package/dist/icons/CircleFilledIcon.js +1 -1
  468. package/dist/icons/ClearIcon.js +1 -1
  469. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  470. package/dist/icons/CloseCircleIcon.js +1 -1
  471. package/dist/icons/CloseIcon.js +1 -1
  472. package/dist/icons/CodeIcon.js +1 -1
  473. package/dist/icons/ColumnTotalIcon.js +1 -1
  474. package/dist/icons/CopyIcon.js +1 -1
  475. package/dist/icons/CountIcon.js +1 -1
  476. package/dist/icons/CubeIcon.js +1 -1
  477. package/dist/icons/CubePauseIcon.js +1 -1
  478. package/dist/icons/CubePlayIcon.js +1 -1
  479. package/dist/icons/CurrencyDollarIcon.js +1 -1
  480. package/dist/icons/DangerIcon.js +1 -1
  481. package/dist/icons/DashboardIcon.js +1 -1
  482. package/dist/icons/DatabaseIcon.js +1 -1
  483. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  484. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  485. package/dist/icons/DirectionIcon.js +1 -1
  486. package/dist/icons/DonutIcon.js +1 -1
  487. package/dist/icons/DownIcon.js +1 -1
  488. package/dist/icons/EditIcon.js +1 -1
  489. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  490. package/dist/icons/ExclamationCircleIcon.js +1 -1
  491. package/dist/icons/ExclamationIcon.js +1 -1
  492. package/dist/icons/EyeIcon.js +1 -1
  493. package/dist/icons/EyeInvisibleIcon.js +1 -1
  494. package/dist/icons/FilterIcon.js +1 -1
  495. package/dist/icons/FolderFilledIcon.js +1 -1
  496. package/dist/icons/FolderIcon.js +1 -1
  497. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  498. package/dist/icons/FolderOpenIcon.js +1 -1
  499. package/dist/icons/ForwardIcon.js +1 -1
  500. package/dist/icons/GripVerticalIcon.js +1 -1
  501. package/dist/icons/HierarchyIcon.js +1 -1
  502. package/dist/icons/HierarchyOpenIcon.js +1 -1
  503. package/dist/icons/Icon.js +1 -1
  504. package/dist/icons/InfoCircleIcon.js +1 -1
  505. package/dist/icons/InfoIcon.js +1 -1
  506. package/dist/icons/KeyIcon.js +1 -1
  507. package/dist/icons/LeftIcon.js +1 -1
  508. package/dist/icons/LineChartIcon.js +1 -1
  509. package/dist/icons/LoadingIcon.js +1 -1
  510. package/dist/icons/LockFilledIcon.js +1 -1
  511. package/dist/icons/LockIcon.js +1 -1
  512. package/dist/icons/MoreIcon.js +1 -1
  513. package/dist/icons/NotAllowedIcon.js +1 -1
  514. package/dist/icons/Number123Icon.js +1 -1
  515. package/dist/icons/NumberIcon.js +1 -1
  516. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  517. package/dist/icons/PauseCircleIcon.js +1 -1
  518. package/dist/icons/PauseIcon.js +1 -1
  519. package/dist/icons/PercentageIcon.js +1 -1
  520. package/dist/icons/PieChartIcon.js +1 -1
  521. package/dist/icons/PipetteIcon.js +1 -1
  522. package/dist/icons/PlayCircleIcon.js +1 -1
  523. package/dist/icons/PlayIcon.js +1 -1
  524. package/dist/icons/PlusIcon.js +1 -1
  525. package/dist/icons/ProgressBarIcon.js +1 -1
  526. package/dist/icons/ReloadIcon.js +1 -1
  527. package/dist/icons/ReportIcon.js +1 -1
  528. package/dist/icons/ReturnIcon.js +1 -1
  529. package/dist/icons/RightIcon.js +1 -1
  530. package/dist/icons/RowTotalsIcon.js +1 -1
  531. package/dist/icons/SchemeIcon.js +1 -1
  532. package/dist/icons/SearchIcon.js +1 -1
  533. package/dist/icons/SemanticQueryIcon.js +1 -1
  534. package/dist/icons/SettingsIcon.js +1 -1
  535. package/dist/icons/ShieldFilledIcon.js +1 -1
  536. package/dist/icons/ShieldIcon.js +1 -1
  537. package/dist/icons/SlashIcon.js +1 -1
  538. package/dist/icons/SparklesIcon.js +1 -1
  539. package/dist/icons/SqlIcon.js +1 -1
  540. package/dist/icons/StatsIcon.js +1 -1
  541. package/dist/icons/StopIcon.js +1 -1
  542. package/dist/icons/StringIcon.js +1 -1
  543. package/dist/icons/SubtotalsIcon.js +1 -1
  544. package/dist/icons/SwitchIcon.js +1 -1
  545. package/dist/icons/TableIcon.js +1 -1
  546. package/dist/icons/ThumbsDownIcon.js +1 -1
  547. package/dist/icons/ThumbsUpIcon.js +1 -1
  548. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  549. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  550. package/dist/icons/ThunderboltIcon.js +1 -1
  551. package/dist/icons/TimeIcon.js +1 -1
  552. package/dist/icons/TrashIcon.js +1 -1
  553. package/dist/icons/UnlockIcon.js +1 -1
  554. package/dist/icons/UpIcon.js +1 -1
  555. package/dist/icons/UserGroupIcon.js +1 -1
  556. package/dist/icons/UserIcon.js +1 -1
  557. package/dist/icons/UserLockIcon.js +1 -1
  558. package/dist/icons/ViewIcon.js +1 -1
  559. package/dist/icons/WarningFilledIcon.js +1 -1
  560. package/dist/icons/WarningIcon.js +1 -1
  561. package/dist/icons/wrap-icon.js +1 -1
  562. package/dist/index.d.ts +1 -1
  563. package/dist/index.js +2 -2
  564. package/dist/probe/canonicalize.js +1 -1
  565. package/dist/probe/css.js +1 -1
  566. package/dist/probe/index.js +1 -1
  567. package/dist/provider.js +1 -1
  568. package/dist/providers/TrackingProvider.js +1 -1
  569. package/dist/providers/navigation-url.js +1 -1
  570. package/dist/providers/navigationAdapter.default.js +1 -1
  571. package/dist/providers/use-navigation.js +1 -1
  572. package/dist/tokens/all-tokens.js +1 -1
  573. package/dist/tokens/base.js +1 -1
  574. package/dist/tokens/color-seed.js +1 -1
  575. package/dist/tokens/color-theme.js +1 -1
  576. package/dist/tokens/colors.js +1 -1
  577. package/dist/tokens/layout.js +1 -1
  578. package/dist/tokens/lazy-styles.js +1 -1
  579. package/dist/tokens/legacy-color.js +1 -1
  580. package/dist/tokens/palette-config.js +1 -1
  581. package/dist/tokens/palette.js +1 -1
  582. package/dist/tokens/resolve.js +1 -1
  583. package/dist/tokens/shadows.js +1 -1
  584. package/dist/tokens/sizes.js +1 -1
  585. package/dist/tokens/spacing.js +1 -1
  586. package/dist/tokens/typography.js +1 -1
  587. package/dist/utils/ResizeSensor.js +1 -1
  588. package/dist/utils/colors.js +1 -1
  589. package/dist/utils/dotize.js +1 -1
  590. package/dist/utils/is-dev-env.js +1 -1
  591. package/dist/utils/modules.js +1 -1
  592. package/dist/utils/promise.js +1 -1
  593. package/dist/utils/raf.js +1 -1
  594. package/dist/utils/random.js +1 -1
  595. package/dist/utils/range.js +1 -1
  596. package/dist/utils/react/RenderCache.js +1 -1
  597. package/dist/utils/react/Slots.js +1 -1
  598. package/dist/utils/react/chain.js +1 -1
  599. package/dist/utils/react/disabledProps.js +1 -1
  600. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  601. package/dist/utils/react/index.js +1 -1
  602. package/dist/utils/react/interactions.js +1 -1
  603. package/dist/utils/react/isTextOnly.js +1 -1
  604. package/dist/utils/react/mapProps.js +1 -1
  605. package/dist/utils/react/mergeProps.js +1 -1
  606. package/dist/utils/react/nullableValue.js +18 -9
  607. package/dist/utils/react/nullableValue.js.map +1 -1
  608. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  609. package/dist/utils/react/programmaticFocus.js +1 -1
  610. package/dist/utils/react/resolveIcon.js +1 -1
  611. package/dist/utils/react/sharedStore.js +1 -1
  612. package/dist/utils/react/useBufferedValue.js +1 -1
  613. package/dist/utils/react/useCombinedRefs.js +1 -1
  614. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  615. package/dist/utils/react/useEventBus.js +1 -1
  616. package/dist/utils/react/useId.js +1 -1
  617. package/dist/utils/react/useIsDarwin.js +1 -1
  618. package/dist/utils/react/useKeySymbols.js +1 -1
  619. package/dist/utils/react/useLayoutEffect.js +1 -1
  620. package/dist/utils/react/useLocalStorage.js +1 -1
  621. package/dist/utils/react/useMergeStyles.js +1 -1
  622. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  623. package/dist/utils/react/usePopoverSync.js +1 -1
  624. package/dist/utils/react/useQaProps.js +1 -1
  625. package/dist/utils/react/useScheme.js +1 -1
  626. package/dist/utils/react/useViewportSize.js +1 -1
  627. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  628. package/dist/utils/selection.js +1 -1
  629. package/dist/utils/styles.js +1 -1
  630. package/dist/utils/tree.js +1 -1
  631. package/dist/utils/warnings.js +1 -1
  632. package/dist/version.js +2 -2
  633. package/docs/components/actions/Button.md +8 -2
  634. package/docs/components/content/InfoBadge.md +2 -0
  635. package/docs/components/content/ItemBadge.md +4 -0
  636. package/docs/components/content/Layout.md +2 -1
  637. package/docs/components/fields/ComboBox.md +25 -18
  638. package/docs/components/fields/FilterListBox.md +2 -2
  639. package/docs/components/fields/FilterPicker.md +2 -2
  640. package/docs/components/fields/ListBox.md +14 -10
  641. package/docs/components/fields/NumberInput.md +10 -10
  642. package/docs/components/fields/PasswordInput.md +6 -7
  643. package/docs/components/fields/Picker.md +6 -5
  644. package/docs/components/fields/RadioGroup.md +1 -1
  645. package/docs/components/fields/SearchInput.md +7 -6
  646. package/docs/components/fields/Select.md +14 -8
  647. package/docs/components/fields/TextArea.md +4 -3
  648. package/docs/components/fields/TextInput.md +13 -6
  649. package/docs/components/overlays/AlertDialog.md +7 -1
  650. package/docs/components/overlays/Dialog.md +5 -5
  651. package/docs/components/overlays/DialogTrigger.md +6 -6
  652. package/docs/components/overlays/Tooltip.md +17 -6
  653. package/docs/components/overlays/TooltipTrigger.md +2 -0
  654. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { _Item } from "../../content/Item/Item.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/types.ts
3
3
  /**
4
4
  * Size mapping for radio type tabs.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { chainRaf } from "../../../utils/raf.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { _Title } from "../../content/Title.js";
4
4
  import { Card } from "../../content/Card/Card.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { getWeekNumber } from "../../fields/DatePicker/period.js";
3
3
  import { CalendarCell } from "./CalendarCell.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { RightIcon } from "../../../icons/RightIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { CalendarElement } from "./styled.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { getQuarter } from "../../fields/DatePicker/period.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { useLayoutEffect, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
 
4
4
  //#region src/components/other/Calendar/styled.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { Icon } from "../../../icons/Icon.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { mergeStyles, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { wrapIcon } from "../../../icons/wrap-icon.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
 
@@ -12,7 +12,12 @@ interface CubeAlertDialogActionsProps {
12
12
  }
13
13
  interface CubeAlertDialogProps extends Omit<CubeDialogProps, 'children'> {
14
14
  content?: ReactNode;
15
- /** Whether the dialog is an important prompt */
15
+ /**
16
+ * Whether the confirm action is destructive. It is styled as such, and the
17
+ * dialog opens with focus on Cancel, or on the dialog itself when there is
18
+ * no Cancel, so a reflexive Enter does not run it. An explicit `autoFocus`
19
+ * on `actions.confirm` still puts focus there.
20
+ */
16
21
  danger?: boolean;
17
22
  actions?: CubeAlertDialogActionsProps;
18
23
  title?: string;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { Paragraph } from "../../content/Paragraph.js";
4
4
  import { _Title } from "../../content/Title.js";
@@ -91,7 +91,7 @@ function AlertDialog(props, ref) {
91
91
  if ($[16] !== cancelProps || $[17] !== confirmProps || $[18] !== danger || $[19] !== noActions || $[20] !== onClose || $[21] !== secondaryProps) {
92
92
  t2 = !noActions && (confirmProps || secondaryProps || cancelProps) ? /* @__PURE__ */ jsx(Footer, { children: /* @__PURE__ */ jsxs(ButtonGroup, { children: [
93
93
  confirmProps && /* @__PURE__ */ jsx(Button, {
94
- autoFocus: true,
94
+ autoFocus: !danger,
95
95
  theme: danger ? "danger" : void 0,
96
96
  ...confirmProps,
97
97
  onPress: (e) => chain(confirmProps?.onPress?.(e), onClose?.("confirm"))
@@ -101,6 +101,7 @@ function AlertDialog(props, ref) {
101
101
  onPress: (e_0) => chain(secondaryProps?.onPress?.(e_0), onClose?.("secondary"))
102
102
  }),
103
103
  cancelProps && /* @__PURE__ */ jsx(Button, {
104
+ autoFocus: danger && !confirmProps?.autoFocus,
104
105
  ...cancelProps,
105
106
  onPress: (e_1) => chain(cancelProps?.onPress?.(e_1), onClose?.("cancel"))
106
107
  })
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialog.js","names":["forwardRef","ReactNode","useI18n","chain","Button","ButtonGroup","Content","Footer","Header","Paragraph","Title","useDialogContext","withDefaultButtonText","CubeDialogProps","Dialog","CubeButtonProps","CubeAlertDialogActionsProps","confirm","secondary","cancel","CubeAlertDialogProps","Omit","content","danger","actions","title","noActions","AlertDialog","props","ref","$","_c","onClose","t","otherProps","t0","t1","t2","styles","t3","t4","t5","cancelProps","confirmProps","secondaryProps","type","undefined","e","onPress","e_0","e_1","_AlertDialog","displayName"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import { forwardRef, ReactNode } from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { chain } from '../../../utils/react';\nimport { Button } from '../../actions/Button/Button';\nimport { ButtonGroup } from '../../actions/ButtonGroup/ButtonGroup';\nimport { Content } from '../../content/Content';\nimport { Footer } from '../../content/Footer';\nimport { Header } from '../../content/Header';\nimport { Paragraph } from '../../content/Paragraph';\nimport { Title } from '../../content/Title';\nimport { useDialogContext } from '../Dialog/context';\nimport { withDefaultButtonText } from '../Dialog/default-button-text';\nimport { CubeDialogProps, Dialog } from '../Dialog/Dialog';\n\nimport type { CubeButtonProps } from '../../actions/Button/Button';\n\nexport interface CubeAlertDialogActionsProps {\n confirm?: CubeButtonProps | boolean;\n secondary?: CubeButtonProps;\n cancel?: CubeButtonProps | boolean;\n}\n\nexport interface CubeAlertDialogProps\n extends Omit<CubeDialogProps, 'children'> {\n content?: ReactNode;\n /** Whether the dialog is an important prompt */\n danger?: boolean;\n actions?: CubeAlertDialogActionsProps;\n title?: string;\n noActions?: boolean;\n}\n\n/**\n * AlertDialogs are a specific type of Dialog. They display important information that users need to acknowledge.\n */\nfunction AlertDialog(props: CubeAlertDialogProps, ref) {\n const { onClose } = useDialogContext();\n const { t } = useI18n();\n\n const { danger, actions, title, styles, noActions, content, ...otherProps } =\n props;\n\n let {\n confirm: confirmProps,\n secondary: secondaryProps,\n cancel: cancelProps,\n } = actions ?? {};\n\n // the confirm button is present by default\n confirmProps =\n confirmProps !== false\n ? withDefaultButtonText(\n {\n type: 'primary',\n ...(typeof confirmProps === 'object' ? confirmProps : null),\n },\n t('alertDialog.confirm', 'Ok'),\n )\n : undefined;\n\n // the cancel button is hidden by default\n cancelProps = cancelProps\n ? withDefaultButtonText(\n typeof cancelProps === 'object' ? cancelProps : undefined,\n t('alertDialog.cancel', 'Cancel'),\n )\n : undefined;\n\n return (\n <Dialog ref={ref} role=\"alertdialog\" isDismissable={false} {...otherProps}>\n {title ? (\n <Header>\n <Title>{title}</Title>\n </Header>\n ) : null}\n {content ? (\n <Content>\n {typeof content === 'string' ? (\n <Paragraph>{content}</Paragraph>\n ) : (\n content\n )}\n </Content>\n ) : null}\n {!noActions && (confirmProps || secondaryProps || cancelProps) ? (\n <Footer>\n <ButtonGroup>\n {confirmProps && (\n <Button\n autoFocus\n theme={danger ? 'danger' : undefined}\n {...confirmProps}\n onPress={(e) =>\n chain(\n (confirmProps as CubeButtonProps)?.onPress?.(e),\n onClose?.('confirm'),\n )\n }\n />\n )}\n {secondaryProps && (\n <Button\n {...secondaryProps}\n onPress={(e) =>\n chain(secondaryProps?.onPress?.(e), onClose?.('secondary'))\n }\n />\n )}\n {cancelProps && (\n <Button\n {...cancelProps}\n onPress={(e) =>\n chain(\n (cancelProps as CubeButtonProps)?.onPress?.(e),\n onClose?.('cancel'),\n )\n }\n />\n )}\n </ButtonGroup>\n </Footer>\n ) : null}\n </Dialog>\n );\n}\n\n/**\n * AlertDialogs are a specific type of Dialog. They display important information that users need to acknowledge.\n */\nconst _AlertDialog = forwardRef(AlertDialog);\n\n_AlertDialog.displayName = 'AlertDialog';\n\nexport { _AlertDialog as AlertDialog };\n"],"mappings":"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"}
1
+ {"version":3,"file":"AlertDialog.js","names":["forwardRef","ReactNode","useI18n","chain","Button","ButtonGroup","Content","Footer","Header","Paragraph","Title","useDialogContext","withDefaultButtonText","CubeDialogProps","Dialog","CubeButtonProps","CubeAlertDialogActionsProps","confirm","secondary","cancel","CubeAlertDialogProps","Omit","content","danger","actions","title","noActions","AlertDialog","props","ref","$","_c","onClose","t","otherProps","t0","t1","t2","styles","t3","t4","t5","cancelProps","confirmProps","secondaryProps","type","undefined","e","onPress","e_0","autoFocus","e_1","_AlertDialog","displayName"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import { forwardRef, ReactNode } from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { chain } from '../../../utils/react';\nimport { Button } from '../../actions/Button/Button';\nimport { ButtonGroup } from '../../actions/ButtonGroup/ButtonGroup';\nimport { Content } from '../../content/Content';\nimport { Footer } from '../../content/Footer';\nimport { Header } from '../../content/Header';\nimport { Paragraph } from '../../content/Paragraph';\nimport { Title } from '../../content/Title';\nimport { useDialogContext } from '../Dialog/context';\nimport { withDefaultButtonText } from '../Dialog/default-button-text';\nimport { CubeDialogProps, Dialog } from '../Dialog/Dialog';\n\nimport type { CubeButtonProps } from '../../actions/Button/Button';\n\nexport interface CubeAlertDialogActionsProps {\n confirm?: CubeButtonProps | boolean;\n secondary?: CubeButtonProps;\n cancel?: CubeButtonProps | boolean;\n}\n\nexport interface CubeAlertDialogProps\n extends Omit<CubeDialogProps, 'children'> {\n content?: ReactNode;\n /**\n * Whether the confirm action is destructive. It is styled as such, and the\n * dialog opens with focus on Cancel, or on the dialog itself when there is\n * no Cancel, so a reflexive Enter does not run it. An explicit `autoFocus`\n * on `actions.confirm` still puts focus there.\n */\n danger?: boolean;\n actions?: CubeAlertDialogActionsProps;\n title?: string;\n noActions?: boolean;\n}\n\n/**\n * AlertDialogs are a specific type of Dialog. They display important information that users need to acknowledge.\n */\nfunction AlertDialog(props: CubeAlertDialogProps, ref) {\n const { onClose } = useDialogContext();\n const { t } = useI18n();\n\n const { danger, actions, title, styles, noActions, content, ...otherProps } =\n props;\n\n let {\n confirm: confirmProps,\n secondary: secondaryProps,\n cancel: cancelProps,\n } = actions ?? {};\n\n // the confirm button is present by default\n confirmProps =\n confirmProps !== false\n ? withDefaultButtonText(\n {\n type: 'primary',\n ...(typeof confirmProps === 'object' ? confirmProps : null),\n },\n t('alertDialog.confirm', 'Ok'),\n )\n : undefined;\n\n // the cancel button is hidden by default\n cancelProps = cancelProps\n ? withDefaultButtonText(\n typeof cancelProps === 'object' ? cancelProps : undefined,\n t('alertDialog.cancel', 'Cancel'),\n )\n : undefined;\n\n return (\n <Dialog ref={ref} role=\"alertdialog\" isDismissable={false} {...otherProps}>\n {title ? (\n <Header>\n <Title>{title}</Title>\n </Header>\n ) : null}\n {content ? (\n <Content>\n {typeof content === 'string' ? (\n <Paragraph>{content}</Paragraph>\n ) : (\n content\n )}\n </Content>\n ) : null}\n {!noActions && (confirmProps || secondaryProps || cancelProps) ? (\n <Footer>\n <ButtonGroup>\n {confirmProps && (\n <Button\n // A destructive action never takes focus on open, where a\n // reflexive Enter would run it: Cancel takes it instead, or\n // the dialog itself when there is no Cancel.\n autoFocus={!danger}\n theme={danger ? 'danger' : undefined}\n {...confirmProps}\n onPress={(e) =>\n chain(\n (confirmProps as CubeButtonProps)?.onPress?.(e),\n onClose?.('confirm'),\n )\n }\n />\n )}\n {secondaryProps && (\n <Button\n {...secondaryProps}\n onPress={(e) =>\n chain(secondaryProps?.onPress?.(e), onClose?.('secondary'))\n }\n />\n )}\n {cancelProps && (\n <Button\n // Unless the confirm button asks for focus explicitly.\n autoFocus={danger && !confirmProps?.autoFocus}\n {...cancelProps}\n onPress={(e) =>\n chain(\n (cancelProps as CubeButtonProps)?.onPress?.(e),\n onClose?.('cancel'),\n )\n }\n />\n )}\n </ButtonGroup>\n </Footer>\n ) : null}\n </Dialog>\n );\n}\n\n/**\n * AlertDialogs are a specific type of Dialog. They display important information that users need to acknowledge.\n */\nconst _AlertDialog = forwardRef(AlertDialog);\n\n_AlertDialog.displayName = 'AlertDialog';\n\nexport { _AlertDialog as AlertDialog };\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | 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
5
  import { createContext, useContext, useLayoutEffect, useRef, useState } from "react";
@@ -91,7 +92,7 @@ function AlertDialogApiProvider(props) {
91
92
  isVisible: false
92
93
  }
93
94
  });
94
- 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);
95
96
  return true;
96
97
  };
97
98
  let resolvePromise;
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogApiProvider.js","names":["createContext","useContext","useLayoutEffect","useMemo","useRef","useState","invariant","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 { 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 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 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
+ {"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.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | Cube Dev Team */
2
2
  import { Portal } from "../../portal/Portal.js";
3
3
  import { DialogContainer } from "../Dialog/DialogContainer.js";
4
4
  import { _AlertDialog } from "./AlertDialog.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | 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.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | 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.0.0-canary-bef9600 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e3f8a1a | 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;