@cube-dev/ui-kit 0.203.0 → 0.205.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. package/dist/CHANGELOG.md +22 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/actions-run.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  61. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  62. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  63. package/dist/components/content/Layout/GridLayout.js +1 -1
  64. package/dist/components/content/Layout/Layout.js +1 -1
  65. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  66. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  67. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  68. package/dist/components/content/Layout/LayoutContent.js +1 -1
  69. package/dist/components/content/Layout/LayoutContext.js +1 -1
  70. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  71. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  72. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  73. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutPane.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanel.js +2 -2
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/checked-keys.js +1 -1
  96. package/dist/components/content/Tree/rowId.js +1 -1
  97. package/dist/components/content/Tree/styled.js +1 -1
  98. package/dist/components/content/Tree/tree-index.js +1 -1
  99. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  100. package/dist/components/content/Tree/use-load-data.js +1 -1
  101. package/dist/components/content/highlightText.js +1 -1
  102. package/dist/components/content/use-auto-tooltip.js +1 -1
  103. package/dist/components/data/DataTable/DataTable.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  109. package/dist/components/data/ItemTable/item-table-sections.js +1 -1
  110. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  111. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  112. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  113. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  114. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  115. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  116. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  117. package/dist/components/data/TableBase/RowCollection.js +1 -1
  118. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  119. package/dist/components/data/TableBase/TableRow.js +1 -1
  120. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  121. package/dist/components/data/TableBase/TableView.js +1 -1
  122. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  123. package/dist/components/data/TableBase/column-header.js +1 -1
  124. package/dist/components/data/TableBase/column-menu.js +1 -1
  125. package/dist/components/data/TableBase/column-styles.js +1 -1
  126. package/dist/components/data/TableBase/column-tint.js +1 -1
  127. package/dist/components/data/TableBase/row-menu.js +1 -1
  128. package/dist/components/data/TableBase/styled.js +1 -1
  129. package/dist/components/data/TableBase/table-body-sections.js +1 -1
  130. package/dist/components/data/TableBase/table-tree.js +1 -1
  131. package/dist/components/data/TableBase/types.js +1 -1
  132. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  133. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  134. package/dist/components/data/TableBase/use-column-order.js +1 -1
  135. package/dist/components/data/TableBase/use-column-window.js +1 -1
  136. package/dist/components/data/TableBase/use-container-width.js +1 -1
  137. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  138. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  139. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  140. package/dist/components/data/TableBase/use-table-search.js +1 -1
  141. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  142. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  143. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  144. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  145. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  146. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  147. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  148. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  149. package/dist/components/fields/Checkbox/context.js +1 -1
  150. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  151. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  152. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  153. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  154. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  155. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  156. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  157. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  158. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  159. package/dist/components/fields/DatePicker/CalendarPopover.js +281 -0
  160. package/dist/components/fields/DatePicker/CalendarPopover.js.map +1 -0
  161. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  162. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  163. package/dist/components/fields/DatePicker/DatePicker.js +26 -24
  164. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  166. package/dist/components/fields/DatePicker/DatePickerElement.js +4 -2
  167. package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
  168. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  169. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  170. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +10 -0
  171. package/dist/components/fields/DatePicker/DateRangePicker.js +143 -65
  172. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  173. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +172 -165
  174. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  175. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  179. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  181. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  182. package/dist/components/fields/DatePicker/period.js +1 -1
  183. package/dist/components/fields/DatePicker/props.js +1 -1
  184. package/dist/components/fields/DatePicker/utils.js +1 -1
  185. package/dist/components/fields/FileInput/FileInput.js +1 -1
  186. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  187. package/dist/components/fields/FilterListBox/styled.js +1 -1
  188. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  189. package/dist/components/fields/FilterPicker/FilterTree.js +1 -1
  190. package/dist/components/fields/Input/Input.js +1 -1
  191. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  192. package/dist/components/fields/ListBox/ListBox.js +1 -1
  193. package/dist/components/fields/ListBox/optionId.js +1 -1
  194. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  195. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  196. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  197. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  198. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  199. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  200. package/dist/components/fields/Picker/Picker.js +1 -1
  201. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  202. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  203. package/dist/components/fields/RadioGroup/context.js +1 -1
  204. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  205. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  206. package/dist/components/fields/Select/Select.js +1 -1
  207. package/dist/components/fields/Slider/Gradation.js +1 -1
  208. package/dist/components/fields/Slider/HueSlider.js +1 -1
  209. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  210. package/dist/components/fields/Slider/Slider.js +1 -1
  211. package/dist/components/fields/Slider/SliderBase.js +1 -1
  212. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  213. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  214. package/dist/components/fields/Slider/elements.js +1 -1
  215. package/dist/components/fields/Slider/index.js +1 -1
  216. package/dist/components/fields/Switch/Switch.js +1 -1
  217. package/dist/components/fields/TagInput/TagInput.js +1 -1
  218. package/dist/components/fields/TagInput/TagList.js +1 -1
  219. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  220. package/dist/components/fields/TagInput/useTagError.js +1 -1
  221. package/dist/components/fields/TextArea/TextArea.js +1 -1
  222. package/dist/components/fields/TextInput/TextInput.js +1 -1
  223. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  224. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  225. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  226. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  227. package/dist/components/fields/TriggerActions.js +1 -1
  228. package/dist/components/fields/color/ColorPanel.js +1 -1
  229. package/dist/components/fields/color/channels.js +1 -1
  230. package/dist/components/fields/color/color.js +1 -1
  231. package/dist/components/fields/color/context.js +1 -1
  232. package/dist/components/fields/option-origin-press.js +1 -1
  233. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  234. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  235. package/dist/components/form/Form/Field.js +1 -1
  236. package/dist/components/form/Form/Form.js +1 -1
  237. package/dist/components/form/Form/ModernFormRoot.js +198 -174
  238. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  239. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  240. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  241. package/dist/components/form/Form/SubmitError.js +1 -1
  242. package/dist/components/form/Form/backend.js +1 -1
  243. package/dist/components/form/Form/index.js +1 -1
  244. package/dist/components/form/Form/modern/actions.js +1 -1
  245. package/dist/components/form/Form/modern/context.js +1 -1
  246. package/dist/components/form/Form/modern/controller.js +1 -1
  247. package/dist/components/form/Form/modern/field-binding.js +1 -1
  248. package/dist/components/form/Form/modern/field.js +1 -1
  249. package/dist/components/form/Form/modern/react.js +1 -1
  250. package/dist/components/form/Form/modern/store.js +34 -3
  251. package/dist/components/form/Form/modern/store.js.map +1 -1
  252. package/dist/components/form/Form/modern/types.d.ts +5 -0
  253. package/dist/components/form/Form/modern/validation.js +1 -1
  254. package/dist/components/form/Form/modern/values.js +1 -1
  255. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  256. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  257. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  258. package/dist/components/form/Form/use-field/use-field.js +1 -1
  259. package/dist/components/form/Form/use-form.js +1 -1
  260. package/dist/components/form/Form/validation.js +1 -1
  261. package/dist/components/form/Label.js +1 -1
  262. package/dist/components/form/field-chrome.js +1 -1
  263. package/dist/components/form/field-layout.js +1 -1
  264. package/dist/components/form/legacy-tooltip.js +1 -1
  265. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  266. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  267. package/dist/components/form/validation/use-validation-props.js +1 -1
  268. package/dist/components/form/wrapper.js +1 -1
  269. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  270. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  271. package/dist/components/layout/Flex.js +1 -1
  272. package/dist/components/layout/Flow.js +1 -1
  273. package/dist/components/layout/Grid.js +1 -1
  274. package/dist/components/layout/Panel.js +1 -1
  275. package/dist/components/layout/Prefix.js +1 -1
  276. package/dist/components/layout/ResizablePanel.js +1 -1
  277. package/dist/components/layout/Space.js +1 -1
  278. package/dist/components/layout/Suffix.js +1 -1
  279. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  280. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  281. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  282. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  283. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  284. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  285. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  286. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  287. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  288. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  289. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  290. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  291. package/dist/components/navigation/Tabs/styled.js +1 -1
  292. package/dist/components/navigation/Tabs/types.js +1 -1
  293. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  294. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  295. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  296. package/dist/components/other/Calendar/Calendar.js +1 -1
  297. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  298. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  299. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  300. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  301. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  302. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  303. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  304. package/dist/components/other/Calendar/styled.js +1 -1
  305. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  306. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  307. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  308. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  309. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +2 -2
  310. package/dist/components/overlays/AlertDialog/types.d.ts +1 -1
  311. package/dist/components/overlays/Dialog/Dialog.js +9 -4
  312. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  313. package/dist/components/overlays/Dialog/DialogContainer.d.ts +7 -0
  314. package/dist/components/overlays/Dialog/DialogContainer.js +61 -32
  315. package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
  316. package/dist/components/overlays/Dialog/DialogForm.d.ts +7 -0
  317. package/dist/components/overlays/Dialog/DialogForm.js +10 -3
  318. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  319. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +8 -0
  320. package/dist/components/overlays/Dialog/DialogTrigger.js +24 -11
  321. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  322. package/dist/components/overlays/Dialog/ModernDialogForm.js +178 -172
  323. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  324. package/dist/components/overlays/Dialog/context.js +1 -1
  325. package/dist/components/overlays/Dialog/context.js.map +1 -1
  326. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  327. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  328. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  329. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  330. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +220 -0
  331. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js.map +1 -0
  332. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  333. package/dist/components/overlays/Modal/Modal.js +1 -1
  334. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  335. package/dist/components/overlays/Modal/Overlay.js +1 -1
  336. package/dist/components/overlays/Modal/Popover.js +1 -1
  337. package/dist/components/overlays/Modal/Tray.js +1 -1
  338. package/dist/components/overlays/Modal/Underlay.js +1 -1
  339. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  340. package/dist/components/overlays/Notifications/Notification.js +1 -1
  341. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  342. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  343. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  344. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  345. package/dist/components/overlays/Notifications/OverlayContainer.js +6 -3
  346. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  347. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  348. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  349. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  350. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  351. package/dist/components/overlays/Notifications/index.js +1 -1
  352. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  353. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  354. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  355. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  356. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  357. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  358. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  359. package/dist/components/overlays/Toast/index.js +1 -1
  360. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  361. package/dist/components/overlays/Toast/useToast.js +1 -1
  362. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  363. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  364. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  365. package/dist/components/overlays/Tooltip/context.js +1 -1
  366. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  367. package/dist/components/portal/Portal.js +1 -1
  368. package/dist/components/portal/PortalProvider.js +1 -1
  369. package/dist/components/portal/usePortal.js +1 -1
  370. package/dist/components/shared/DraggableCollection.js +1 -1
  371. package/dist/components/shared/InvalidIcon.js +1 -1
  372. package/dist/components/shared/ValidIcon.js +1 -1
  373. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  374. package/dist/components/status/Spin/Cube.js +1 -1
  375. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  376. package/dist/components/status/Spin/Spin.js +1 -1
  377. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  378. package/dist/data/item-themes.js +1 -1
  379. package/dist/data/themes.js +1 -1
  380. package/dist/eslint-plugin/defaults.generated.js +1 -1
  381. package/dist/eslint-plugin/index.js +1 -1
  382. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  383. package/dist/i18n/I18nProvider.js +1 -1
  384. package/dist/i18n/createFormatter.js +1 -1
  385. package/dist/i18n/index.js +1 -1
  386. package/dist/i18n/instance.js +1 -1
  387. package/dist/i18n/locales/de-DE/uikit.js +12 -3
  388. package/dist/i18n/locales/en-US/uikit.js +12 -3
  389. package/dist/i18n/locales/en-US/uikit.json.d.ts +12 -4
  390. package/dist/i18n/locales/es-ES/uikit.js +12 -3
  391. package/dist/i18n/locales/es-MX/uikit.js +12 -3
  392. package/dist/i18n/locales/fr-FR/uikit.js +12 -3
  393. package/dist/i18n/locales/it-IT/uikit.js +12 -3
  394. package/dist/i18n/locales/ja-JP/uikit.js +12 -3
  395. package/dist/i18n/locales/nb-NO/uikit.js +12 -3
  396. package/dist/i18n/locales/pt-BR/uikit.js +12 -3
  397. package/dist/i18n/locales/pt-PT/uikit.js +12 -3
  398. package/dist/i18n/locales/sv-SE/uikit.js +12 -3
  399. package/dist/i18n/locales/vi-VN/uikit.js +12 -3
  400. package/dist/i18n/locales.js +1 -1
  401. package/dist/i18n/namespace.js +1 -1
  402. package/dist/i18n/useFormatter.js +1 -1
  403. package/dist/i18n/useI18n.js +1 -1
  404. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  405. package/dist/icons/AdjustmentsIcon.js +1 -1
  406. package/dist/icons/AiIcon.js +1 -1
  407. package/dist/icons/AreaChartIcon.js +1 -1
  408. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  409. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  410. package/dist/icons/BackwardIcon.js +1 -1
  411. package/dist/icons/BarChartIcon.js +1 -1
  412. package/dist/icons/BellFilledIcon.js +1 -1
  413. package/dist/icons/BellIcon.js +1 -1
  414. package/dist/icons/BooleanIcon.js +1 -1
  415. package/dist/icons/CalendarEditIcon.js +1 -1
  416. package/dist/icons/CalendarIcon.js +1 -1
  417. package/dist/icons/CaretDownIcon.js +1 -1
  418. package/dist/icons/CaretUpIcon.js +1 -1
  419. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  420. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  421. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  422. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  423. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  424. package/dist/icons/ChartBarLineIcon.js +1 -1
  425. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  426. package/dist/icons/ChartBarStackedIcon.js +1 -1
  427. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  428. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  429. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  430. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  431. package/dist/icons/ChartBubbleIcon.js +1 -1
  432. package/dist/icons/ChartDonut2Icon.js +1 -1
  433. package/dist/icons/ChartFunnelIcon.js +1 -1
  434. package/dist/icons/ChartHeatmapIcon.js +1 -1
  435. package/dist/icons/ChartKPIIcon.js +1 -1
  436. package/dist/icons/ChartPie2Icon.js +1 -1
  437. package/dist/icons/ChartScatterIcon.js +1 -1
  438. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  439. package/dist/icons/CheckCircleIcon.js +1 -1
  440. package/dist/icons/CheckIcon.js +1 -1
  441. package/dist/icons/CircleFilledIcon.js +1 -1
  442. package/dist/icons/ClearIcon.js +1 -1
  443. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  444. package/dist/icons/CloseCircleIcon.js +1 -1
  445. package/dist/icons/CloseIcon.js +1 -1
  446. package/dist/icons/CodeIcon.js +1 -1
  447. package/dist/icons/ColumnTotalIcon.js +1 -1
  448. package/dist/icons/CopyIcon.js +1 -1
  449. package/dist/icons/CountIcon.js +1 -1
  450. package/dist/icons/CubeIcon.js +1 -1
  451. package/dist/icons/CubePauseIcon.js +1 -1
  452. package/dist/icons/CubePlayIcon.js +1 -1
  453. package/dist/icons/CurrencyDollarIcon.js +1 -1
  454. package/dist/icons/DangerIcon.js +1 -1
  455. package/dist/icons/DashboardIcon.js +1 -1
  456. package/dist/icons/DatabaseIcon.js +1 -1
  457. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  458. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  459. package/dist/icons/DirectionIcon.js +1 -1
  460. package/dist/icons/DonutIcon.js +1 -1
  461. package/dist/icons/DownIcon.js +1 -1
  462. package/dist/icons/EditIcon.js +1 -1
  463. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  464. package/dist/icons/ExclamationCircleIcon.js +1 -1
  465. package/dist/icons/ExclamationIcon.js +1 -1
  466. package/dist/icons/EyeIcon.js +1 -1
  467. package/dist/icons/EyeInvisibleIcon.js +1 -1
  468. package/dist/icons/FilterIcon.js +1 -1
  469. package/dist/icons/FolderFilledIcon.js +1 -1
  470. package/dist/icons/FolderIcon.js +1 -1
  471. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  472. package/dist/icons/FolderOpenIcon.js +1 -1
  473. package/dist/icons/ForwardIcon.js +1 -1
  474. package/dist/icons/GripVerticalIcon.js +1 -1
  475. package/dist/icons/HierarchyIcon.js +1 -1
  476. package/dist/icons/HierarchyOpenIcon.js +1 -1
  477. package/dist/icons/Icon.js +1 -1
  478. package/dist/icons/InfoCircleIcon.js +1 -1
  479. package/dist/icons/InfoIcon.js +1 -1
  480. package/dist/icons/KeyIcon.js +1 -1
  481. package/dist/icons/LeftIcon.js +1 -1
  482. package/dist/icons/LineChartIcon.js +1 -1
  483. package/dist/icons/LoadingIcon.js +1 -1
  484. package/dist/icons/LockFilledIcon.js +1 -1
  485. package/dist/icons/LockIcon.js +1 -1
  486. package/dist/icons/MoreIcon.js +1 -1
  487. package/dist/icons/NotAllowedIcon.js +1 -1
  488. package/dist/icons/Number123Icon.js +1 -1
  489. package/dist/icons/NumberIcon.js +1 -1
  490. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  491. package/dist/icons/PauseCircleIcon.js +1 -1
  492. package/dist/icons/PauseIcon.js +1 -1
  493. package/dist/icons/PercentageIcon.js +1 -1
  494. package/dist/icons/PieChartIcon.js +1 -1
  495. package/dist/icons/PipetteIcon.js +1 -1
  496. package/dist/icons/PlayCircleIcon.js +1 -1
  497. package/dist/icons/PlayIcon.js +1 -1
  498. package/dist/icons/PlusIcon.js +1 -1
  499. package/dist/icons/ProgressBarIcon.js +1 -1
  500. package/dist/icons/ReloadIcon.js +1 -1
  501. package/dist/icons/ReportIcon.js +1 -1
  502. package/dist/icons/ReturnIcon.js +1 -1
  503. package/dist/icons/RightIcon.js +1 -1
  504. package/dist/icons/RowTotalsIcon.js +1 -1
  505. package/dist/icons/SchemeIcon.js +1 -1
  506. package/dist/icons/SearchIcon.js +1 -1
  507. package/dist/icons/SemanticQueryIcon.js +1 -1
  508. package/dist/icons/SettingsIcon.js +1 -1
  509. package/dist/icons/ShieldFilledIcon.js +1 -1
  510. package/dist/icons/ShieldIcon.js +1 -1
  511. package/dist/icons/SlashIcon.js +1 -1
  512. package/dist/icons/SparklesIcon.js +1 -1
  513. package/dist/icons/SqlIcon.js +1 -1
  514. package/dist/icons/StatsIcon.js +1 -1
  515. package/dist/icons/StopIcon.js +1 -1
  516. package/dist/icons/StringIcon.js +1 -1
  517. package/dist/icons/SubtotalsIcon.js +1 -1
  518. package/dist/icons/SwitchIcon.js +1 -1
  519. package/dist/icons/TableIcon.js +1 -1
  520. package/dist/icons/ThumbsDownIcon.js +1 -1
  521. package/dist/icons/ThumbsUpIcon.js +1 -1
  522. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  523. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  524. package/dist/icons/ThunderboltIcon.js +1 -1
  525. package/dist/icons/TimeIcon.js +1 -1
  526. package/dist/icons/TrashIcon.js +1 -1
  527. package/dist/icons/UnlockIcon.js +1 -1
  528. package/dist/icons/UpIcon.js +1 -1
  529. package/dist/icons/UserGroupIcon.js +1 -1
  530. package/dist/icons/UserIcon.js +1 -1
  531. package/dist/icons/UserLockIcon.js +1 -1
  532. package/dist/icons/ViewIcon.js +1 -1
  533. package/dist/icons/WarningFilledIcon.js +1 -1
  534. package/dist/icons/WarningIcon.js +1 -1
  535. package/dist/icons/wrap-icon.js +1 -1
  536. package/dist/index.js +2 -2
  537. package/dist/probe/canonicalize.js +1 -1
  538. package/dist/probe/css.js +1 -1
  539. package/dist/probe/index.js +1 -1
  540. package/dist/provider.js +1 -1
  541. package/dist/providers/TrackingProvider.js +1 -1
  542. package/dist/providers/navigation-url.js +1 -1
  543. package/dist/providers/navigationAdapter.default.js +1 -1
  544. package/dist/providers/use-navigation.js +1 -1
  545. package/dist/tokens/all-tokens.js +1 -1
  546. package/dist/tokens/base.js +1 -1
  547. package/dist/tokens/color-seed.js +1 -1
  548. package/dist/tokens/color-theme.js +1 -1
  549. package/dist/tokens/colors.js +1 -1
  550. package/dist/tokens/layout.js +1 -1
  551. package/dist/tokens/lazy-styles.js +1 -1
  552. package/dist/tokens/legacy-color.js +1 -1
  553. package/dist/tokens/palette-config.js +1 -1
  554. package/dist/tokens/palette.js +1 -1
  555. package/dist/tokens/resolve.js +1 -1
  556. package/dist/tokens/shadows.js +1 -1
  557. package/dist/tokens/sizes.js +1 -1
  558. package/dist/tokens/spacing.js +1 -1
  559. package/dist/tokens/typography.js +1 -1
  560. package/dist/utils/ResizeSensor.js +1 -1
  561. package/dist/utils/colors.js +1 -1
  562. package/dist/utils/dotize.js +1 -1
  563. package/dist/utils/is-dev-env.js +1 -1
  564. package/dist/utils/modules.js +1 -1
  565. package/dist/utils/promise.js +1 -1
  566. package/dist/utils/raf.js +1 -1
  567. package/dist/utils/random.js +1 -1
  568. package/dist/utils/range.js +1 -1
  569. package/dist/utils/react/RenderCache.js +1 -1
  570. package/dist/utils/react/Slots.js +1 -1
  571. package/dist/utils/react/chain.js +1 -1
  572. package/dist/utils/react/disabledProps.js +1 -1
  573. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  574. package/dist/utils/react/index.js +1 -1
  575. package/dist/utils/react/interactions.js +1 -1
  576. package/dist/utils/react/isTextOnly.js +1 -1
  577. package/dist/utils/react/mapProps.js +1 -1
  578. package/dist/utils/react/mergeProps.js +1 -1
  579. package/dist/utils/react/nullableValue.js +1 -1
  580. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  581. package/dist/utils/react/programmaticFocus.js +1 -1
  582. package/dist/utils/react/resolveIcon.js +1 -1
  583. package/dist/utils/react/sharedStore.js +1 -1
  584. package/dist/utils/react/useBufferedValue.js +1 -1
  585. package/dist/utils/react/useCombinedRefs.js +1 -1
  586. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  587. package/dist/utils/react/useEventBus.js +1 -1
  588. package/dist/utils/react/useId.js +1 -1
  589. package/dist/utils/react/useIsDarwin.js +1 -1
  590. package/dist/utils/react/useKeySymbols.js +1 -1
  591. package/dist/utils/react/useLayoutEffect.js +1 -1
  592. package/dist/utils/react/useLocalStorage.js +1 -1
  593. package/dist/utils/react/useMergeStyles.js +1 -1
  594. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  595. package/dist/utils/react/usePopoverSync.js +1 -1
  596. package/dist/utils/react/useQaProps.js +1 -1
  597. package/dist/utils/react/useScheme.js +1 -1
  598. package/dist/utils/react/useViewportSize.js +1 -1
  599. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  600. package/dist/utils/selection.js +1 -1
  601. package/dist/utils/styles.js +1 -1
  602. package/dist/utils/tree.js +1 -1
  603. package/dist/utils/warnings.js +1 -1
  604. package/dist/version.js +2 -2
  605. package/docs/components/form/Form.md +2 -0
  606. package/docs/components/form/ModernForm.md +5 -1
  607. package/docs/components/overlays/Dialog.md +2 -2
  608. package/docs/components/overlays/DialogContainer.md +1 -0
  609. package/docs/components/overlays/DialogForm.md +3 -1
  610. package/docs/components/overlays/DialogTrigger.md +31 -1
  611. package/docs/components/overlays/Notifications.md +17 -0
  612. package/docs/components/overlays/Toast.md +1 -1
  613. package/docs/modern-form-guide.md +5 -1
  614. package/package.json +1 -1
@@ -1,10 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { Modal as _Modal } from "../Modal/Modal.js";
3
3
  import { Tray as _Tray } from "../Modal/Tray.js";
4
4
  import { DialogContext } from "./context.js";
5
+ import { DiscardChangesDialog, useDismissConfirmation } from "./use-dismiss-confirmation.js";
5
6
  import { c } from "react/compiler-runtime";
6
7
  import { Children, isValidElement, useState } from "react";
7
- import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
8
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
9
  //#region src/components/overlays/Dialog/DialogContainer.tsx
9
10
  /**
10
11
  * A DialogContainer accepts a single Dialog as a child, and manages to show and hide
@@ -13,8 +14,8 @@ import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
13
14
  * or when the trigger unmounts while the dialog is open.
14
15
  */
15
16
  function DialogContainer(props) {
16
- const $ = c(25);
17
- const { children, type: t0, onDismiss, isDismissable: t1, isKeyboardDismissDisabled, isOpen, hideOnClose, styles } = props;
17
+ const $ = c(36);
18
+ const { children, type: t0, onDismiss, isDismissable: t1, isKeyboardDismissDisabled, isOpen, hideOnClose, styles, confirmDismiss } = props;
18
19
  const type = t0 === void 0 ? "modal" : t0;
19
20
  const isDismissable = t1 === void 0 ? true : t1;
20
21
  let t2;
@@ -42,33 +43,45 @@ function DialogContainer(props) {
42
43
  children,
43
44
  child
44
45
  });
46
+ const { requestDismiss, registerUnsavedChanges, confirmationProps } = useDismissConfirmation(confirmDismiss, isActuallyOpened);
45
47
  let t4;
46
- if ($[5] !== isActuallyOpened || $[6] !== isDismissable || $[7] !== onDismiss || $[8] !== type) {
48
+ if ($[5] !== isActuallyOpened || $[6] !== isDismissable || $[7] !== onDismiss || $[8] !== registerUnsavedChanges || $[9] !== requestDismiss || $[10] !== type) {
47
49
  t4 = {
48
50
  type,
49
51
  onClose: onDismiss,
50
52
  isDismissable,
51
- isOpen: isActuallyOpened
53
+ isOpen: isActuallyOpened,
54
+ requestDismiss,
55
+ registerUnsavedChanges
52
56
  };
53
57
  $[5] = isActuallyOpened;
54
58
  $[6] = isDismissable;
55
59
  $[7] = onDismiss;
56
- $[8] = type;
57
- $[9] = t4;
58
- } else t4 = $[9];
60
+ $[8] = registerUnsavedChanges;
61
+ $[9] = requestDismiss;
62
+ $[10] = type;
63
+ $[11] = t4;
64
+ } else t4 = $[11];
59
65
  const context = t4;
60
66
  const OverlayComponent = type === "tray" ? _Tray : _Modal;
61
67
  const t5 = type === "tray" ? void 0 : type;
62
- const t6 = isDismissable ? onDismiss : void 0;
68
+ let t6;
69
+ if ($[12] !== isDismissable || $[13] !== onDismiss || $[14] !== requestDismiss) {
70
+ t6 = isDismissable && onDismiss ? () => requestDismiss(() => onDismiss()) : void 0;
71
+ $[12] = isDismissable;
72
+ $[13] = onDismiss;
73
+ $[14] = requestDismiss;
74
+ $[15] = t6;
75
+ } else t6 = $[15];
63
76
  const t7 = child ?? (hideOnClose && !isActuallyOpened ? lastDialog.child : null);
64
77
  let t8;
65
- if ($[10] !== t7) {
78
+ if ($[16] !== t7) {
66
79
  t8 = /* @__PURE__ */ jsx(Fragment$1, { children: t7 });
67
- $[10] = t7;
68
- $[11] = t8;
69
- } else t8 = $[11];
80
+ $[16] = t7;
81
+ $[17] = t8;
82
+ } else t8 = $[17];
70
83
  let t9;
71
- if ($[12] !== OverlayComponent || $[13] !== hideOnClose || $[14] !== isActuallyOpened || $[15] !== isDismissable || $[16] !== isKeyboardDismissDisabled || $[17] !== styles || $[18] !== t5 || $[19] !== t6 || $[20] !== t8) {
84
+ if ($[18] !== OverlayComponent || $[19] !== hideOnClose || $[20] !== isActuallyOpened || $[21] !== isDismissable || $[22] !== isKeyboardDismissDisabled || $[23] !== styles || $[24] !== t5 || $[25] !== t6 || $[26] !== t8) {
72
85
  t9 = /* @__PURE__ */ jsx(OverlayComponent, {
73
86
  isOpen: isActuallyOpened,
74
87
  type: t5,
@@ -79,28 +92,44 @@ function DialogContainer(props) {
79
92
  onClose: t6,
80
93
  children: t8
81
94
  });
82
- $[12] = OverlayComponent;
83
- $[13] = hideOnClose;
84
- $[14] = isActuallyOpened;
85
- $[15] = isDismissable;
86
- $[16] = isKeyboardDismissDisabled;
87
- $[17] = styles;
88
- $[18] = t5;
89
- $[19] = t6;
90
- $[20] = t8;
91
- $[21] = t9;
92
- } else t9 = $[21];
95
+ $[18] = OverlayComponent;
96
+ $[19] = hideOnClose;
97
+ $[20] = isActuallyOpened;
98
+ $[21] = isDismissable;
99
+ $[22] = isKeyboardDismissDisabled;
100
+ $[23] = styles;
101
+ $[24] = t5;
102
+ $[25] = t6;
103
+ $[26] = t8;
104
+ $[27] = t9;
105
+ } else t9 = $[27];
93
106
  let t10;
94
- if ($[22] !== context || $[23] !== t9) {
107
+ if ($[28] !== context || $[29] !== t9) {
95
108
  t10 = /* @__PURE__ */ jsx(DialogContext.Provider, {
96
109
  value: context,
97
110
  children: t9
98
111
  });
99
- $[22] = context;
100
- $[23] = t9;
101
- $[24] = t10;
102
- } else t10 = $[24];
103
- return t10;
112
+ $[28] = context;
113
+ $[29] = t9;
114
+ $[30] = t10;
115
+ } else t10 = $[30];
116
+ let t11;
117
+ if ($[31] !== confirmationProps) {
118
+ t11 = confirmationProps && /* @__PURE__ */ jsx(DialogContainer, {
119
+ ...confirmationProps,
120
+ children: /* @__PURE__ */ jsx(DiscardChangesDialog, {})
121
+ });
122
+ $[31] = confirmationProps;
123
+ $[32] = t11;
124
+ } else t11 = $[32];
125
+ let t12;
126
+ if ($[33] !== t10 || $[34] !== t11) {
127
+ t12 = /* @__PURE__ */ jsxs(Fragment$1, { children: [t10, t11] });
128
+ $[33] = t10;
129
+ $[34] = t11;
130
+ $[35] = t12;
131
+ } else t12 = $[35];
132
+ return t12;
104
133
  }
105
134
  //#endregion
106
135
  export { DialogContainer };
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContainer.js","names":["Styles","Children","isValidElement","ReactNode","useState","Modal","Tray","WithCloseBehavior","DialogContext","CubeDialogContainerProps","children","onDismiss","arg","type","styles","isDismissable","isOpen","isKeyboardDismissDisabled","DialogContainer","props","$","_c","t0","t1","hideOnClose","undefined","t2","childArray","toArray","length","Error","child","isActuallyOpened","t3","lastDialog","setLastDialog","t4","onClose","context","OverlayComponent","t5","t6","t7","t8","t9","t10","_c","Tray","Modal"],"sources":["../../../../src/components/overlays/Dialog/DialogContainer.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { Children, isValidElement, ReactNode, useState } from 'react';\n\nimport { Modal } from '../Modal/Modal';\nimport { Tray } from '../Modal/Tray';\nimport { WithCloseBehavior } from '../Modal/types';\n\nimport { DialogContext } from './context';\n\nexport interface CubeDialogContainerProps extends WithCloseBehavior {\n /** The Dialog to display, if any. */\n children?: ReactNode;\n /** Handler that is called when the 'x' button of a dismissible Dialog is clicked. */\n onDismiss?: (arg?: any) => void;\n /**\n * The type of Dialog that should be rendered. See the visual options below for examples of each.\n * @default 'modal'\n */\n type?: 'modal' | 'tray' | 'fullscreen' | 'fullscreenTakeover' | 'panel';\n /** Styles for the overlay content shell. Style the child Dialog separately. */\n styles?: Styles;\n /** Whether the Dialog is dismissible. See the [Dialog docs](Dialog.html#dismissable-dialogs) for more details. */\n isDismissable?: boolean;\n /**\n * This prop allows you to configure whenever the modal is open or not\n */\n isOpen?: boolean;\n /** Whether pressing the escape key to close the dialog should be disabled. */\n isKeyboardDismissDisabled?: boolean;\n}\n\n/**\n * A DialogContainer accepts a single Dialog as a child, and manages to show and hide\n * it in a modal.\n * Useful in cases where there is no trigger element\n * or when the trigger unmounts while the dialog is open.\n */\nexport function DialogContainer(props: CubeDialogContainerProps) {\n const {\n children,\n type = 'modal',\n onDismiss,\n isDismissable = true,\n isKeyboardDismissDisabled,\n isOpen,\n hideOnClose,\n styles,\n } = props;\n\n const childArray = Children.toArray(children);\n if (childArray.length > 1) {\n throw new Error('Only a single child can be passed to DialogContainer.');\n }\n\n const child = isValidElement(childArray[0]) ? childArray[0] : null;\n const isActuallyOpened = typeof isOpen !== 'boolean' ? !!child : isOpen;\n const [lastDialog, setLastDialog] = useState({ children, child });\n\n // Children.toArray clones elements, so compare the source when retaining\n // the last dialog to keep hideOnClose from remounting it or looping renders.\n if ((child || isActuallyOpened) && children !== lastDialog.children) {\n setLastDialog({ children, child });\n }\n\n const context = {\n type,\n onClose: onDismiss,\n isDismissable,\n isOpen: isActuallyOpened,\n };\n const OverlayComponent = type === 'tray' ? Tray : Modal;\n\n return (\n // The exit animation preserves its children. Keep live open state outside\n // that snapshot so forms cancel immediately when the container closes.\n <DialogContext.Provider value={context}>\n <OverlayComponent\n isOpen={isActuallyOpened}\n type={type === 'tray' ? undefined : type}\n styles={styles}\n hideOnClose={hideOnClose}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n onClose={isDismissable ? onDismiss : undefined}\n >\n <>\n {child ??\n (hideOnClose && !isActuallyOpened ? lastDialog.child : null)}\n </>\n </OverlayComponent>\n </DialogContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAqCA,SAAOkB,gBAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,EAAAX,UAAAG,MAAAS,IAAAX,WAAAI,eAAAQ,IAAAN,2BAAAD,QAAAQ,aAAAV,WASIK;CAPF,MAAAN,OAAAS,OAAAG,KAAAA,IAAA,UAAAH;CAEA,MAAAP,gBAAAQ,OAAAE,KAAAA,IAAA,OAAAF;CAAoB,IAAAG;CAAA,IAAAN,EAAA,OAAAV,UAAA;EAOtB,MAAAiB,aAAmB1B,SAAQ2B,QAASlB,QAAQ;EAC5C,IAAIiB,WAAUE,SAAU,GACtB,MAAM,IAAIC,MAAM,uDAAuD;EAG3DJ,KAAAxB,eAAeyB,WAAU,EAA0B,IAAnBA,WAAU,KAA1C;EAAoDP,EAAA,KAAAV;EAAAU,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAlE,MAAAW,QAAcL;CACd,MAAAM,mBAAyB,OAAOhB,WAAW,YAAlB,CAA+B,CAACe,QAAhCf;CAA+C,IAAAiB;CAAA,IAAAb,EAAA,OAAAW,SAAAX,EAAA,OAAAV,UAAA;EAC3BuB,KAAA;GAAAvB;GAAAqB;EAAkB;EAACX,EAAA,KAAAW;EAAAX,EAAA,KAAAV;EAAAU,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAhE,MAAA,CAAAc,YAAAC,iBAAoC/B,SAAS6B,EAAmB;CAIhE,KAAKF,SAAAC,qBAA8BtB,aAAawB,WAAUxB,UACxDyB,cAAc;EAAAzB;EAAAqB;CAAkB,CAAC;CAClC,IAAAK;CAAA,IAAAhB,EAAA,OAAAY,oBAAAZ,EAAA,OAAAL,iBAAAK,EAAA,OAAAT,aAAAS,EAAA,OAAAP,MAAA;EAEeuB,KAAA;GAAAvB;GAAAwB,SAEL1B;GAASI;GAAAC,QAEVgB;EACV;EAACZ,EAAA,KAAAY;EAAAZ,EAAA,KAAAL;EAAAK,EAAA,KAAAT;EAAAS,EAAA,KAAAP;EAAAO,EAAA,KAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CALD,MAAAkB,UAAgBF;CAMhB,MAAAG,mBAAyB1B,SAAS,SAATP,QAAAD;CAQb,MAAAmC,KAAA3B,SAAS,SAATY,KAAAA,IAAAZ;CAKG,MAAA4B,KAAA1B,gBAAAJ,YAAAc,KAAAA;CAGN,MAAAiB,KAAAX,UACEP,eAAA,CAAgBQ,mBAAmBE,WAAUH,QAA7C;CAA2D,IAAAY;CAAA,IAAAvB,EAAA,QAAAsB,IAAA;EAFhEC,KAAA,oBAAA,YAAA,EAAA,UACGD,GAC6D,CAAA;EAC7DtB,EAAA,MAAAsB;EAAAtB,EAAA,MAAAuB;CAAA,OAAAA,KAAAvB,EAAA;CAAA,IAAAwB;CAAA,IAAAxB,EAAA,QAAAmB,oBAAAnB,EAAA,QAAAI,eAAAJ,EAAA,QAAAY,oBAAAZ,EAAA,QAAAL,iBAAAK,EAAA,QAAAH,6BAAAG,EAAA,QAAAN,UAAAM,EAAA,QAAAoB,MAAApB,EAAA,QAAAqB,MAAArB,EAAA,QAAAuB,IAAA;EAZLC,KAAA,oBAAC,kBAAD;GACUZ,QAAAA;GACF,MAAAQ;GACE1B;GACKU;GACET;GACYE;GAClB,SAAAwB;GAETE,UAAAA;EATe,CAAA;EAaEvB,EAAA,MAAAmB;EAAAnB,EAAA,MAAAI;EAAAJ,EAAA,MAAAY;EAAAZ,EAAA,MAAAL;EAAAK,EAAA,MAAAH;EAAAG,EAAA,MAAAN;EAAAM,EAAA,MAAAoB;EAAApB,EAAA,MAAAqB;EAAArB,EAAA,MAAAuB;EAAAvB,EAAA,MAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAAA,IAAAyB;CAAA,IAAAzB,EAAA,QAAAkB,WAAAlB,EAAA,QAAAwB,IAAA;EAdrBC,MAAA,oBAAA,cAAA,UAAA;GAA+BP,OAAAA;GAC7BM,UAAAA;EAcF,CAAA;EAAyBxB,EAAA,MAAAkB;EAAAlB,EAAA,MAAAwB;EAAAxB,EAAA,MAAAyB;CAAA,OAAAA,MAAAzB,EAAA;CAAA,OAfzByB;AAeyB"}
1
+ {"version":3,"file":"DialogContainer.js","names":["Styles","Children","isValidElement","ReactNode","useState","Modal","Tray","WithCloseBehavior","DialogContext","DiscardChangesDialog","useDismissConfirmation","CubeDialogContainerProps","children","onDismiss","arg","type","styles","isDismissable","isOpen","isKeyboardDismissDisabled","confirmDismiss","DialogContainer","props","$","_c","t0","t1","hideOnClose","undefined","t2","childArray","toArray","length","Error","child","isActuallyOpened","t3","lastDialog","setLastDialog","requestDismiss","registerUnsavedChanges","confirmationProps","t4","onClose","context","OverlayComponent","t5","t6","t7","t8","t9","t10","t11","t12","_c","Tray","Modal"],"sources":["../../../../src/components/overlays/Dialog/DialogContainer.tsx"],"sourcesContent":["import { Styles } from '@tenphi/tasty';\nimport { Children, isValidElement, ReactNode, useState } from 'react';\n\nimport { Modal } from '../Modal/Modal';\nimport { Tray } from '../Modal/Tray';\nimport { WithCloseBehavior } from '../Modal/types';\n\nimport { DialogContext } from './context';\nimport {\n DiscardChangesDialog,\n useDismissConfirmation,\n} from './use-dismiss-confirmation';\n\nexport interface CubeDialogContainerProps extends WithCloseBehavior {\n /** The Dialog to display, if any. */\n children?: ReactNode;\n /** Handler that is called when the 'x' button of a dismissible Dialog is clicked. */\n onDismiss?: (arg?: any) => void;\n /**\n * The type of Dialog that should be rendered. See the visual options below for examples of each.\n * @default 'modal'\n */\n type?: 'modal' | 'tray' | 'fullscreen' | 'fullscreenTakeover' | 'panel';\n /** Styles for the overlay content shell. Style the child Dialog separately. */\n styles?: Styles;\n /** Whether the Dialog is dismissible. See the [Dialog docs](Dialog.html#dismissable-dialogs) for more details. */\n isDismissable?: boolean;\n /**\n * This prop allows you to configure whenever the modal is open or not\n */\n isOpen?: boolean;\n /** Whether pressing the escape key to close the dialog should be disabled. */\n isKeyboardDismissDisabled?: boolean;\n /**\n * Whether Escape, an outside click and the close button ask \"Discard\n * changes?\" before they close the dialog. Unset, they ask while a form\n * inside (a `DialogForm`, or a modern `Form`) has unsaved edits. Explicit\n * actions (submit, Cancel, closing it from code) never ask.\n */\n confirmDismiss?: boolean;\n}\n\n/**\n * A DialogContainer accepts a single Dialog as a child, and manages to show and hide\n * it in a modal.\n * Useful in cases where there is no trigger element\n * or when the trigger unmounts while the dialog is open.\n */\nexport function DialogContainer(props: CubeDialogContainerProps) {\n const {\n children,\n type = 'modal',\n onDismiss,\n isDismissable = true,\n isKeyboardDismissDisabled,\n isOpen,\n hideOnClose,\n styles,\n confirmDismiss,\n } = props;\n\n const childArray = Children.toArray(children);\n if (childArray.length > 1) {\n throw new Error('Only a single child can be passed to DialogContainer.');\n }\n\n const child = isValidElement(childArray[0]) ? childArray[0] : null;\n const isActuallyOpened = typeof isOpen !== 'boolean' ? !!child : isOpen;\n const [lastDialog, setLastDialog] = useState({ children, child });\n\n // Children.toArray clones elements, so compare the source when retaining\n // the last dialog to keep hideOnClose from remounting it or looping renders.\n if ((child || isActuallyOpened) && children !== lastDialog.children) {\n setLastDialog({ children, child });\n }\n\n const { requestDismiss, registerUnsavedChanges, confirmationProps } =\n useDismissConfirmation(confirmDismiss, isActuallyOpened);\n\n const context = {\n type,\n onClose: onDismiss,\n isDismissable,\n isOpen: isActuallyOpened,\n requestDismiss,\n registerUnsavedChanges,\n };\n const OverlayComponent = type === 'tray' ? Tray : Modal;\n\n return (\n <>\n {/*\n The exit animation preserves its children. Keep live open state outside\n that snapshot so forms cancel immediately when the container closes.\n */}\n <DialogContext.Provider value={context}>\n <OverlayComponent\n isOpen={isActuallyOpened}\n type={type === 'tray' ? undefined : type}\n styles={styles}\n hideOnClose={hideOnClose}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n onClose={\n isDismissable && onDismiss\n ? () => requestDismiss(() => onDismiss())\n : undefined\n }\n >\n <>\n {child ??\n (hideOnClose && !isActuallyOpened ? lastDialog.child : null)}\n </>\n </OverlayComponent>\n </DialogContext.Provider>\n {confirmationProps && (\n <DialogContainer {...confirmationProps}>\n <DiscardChangesDialog />\n </DialogContainer>\n )}\n </>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgDA,SAAOqB,gBAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,EAAAZ,UAAAG,MAAAU,IAAAZ,WAAAI,eAAAS,IAAAP,2BAAAD,QAAAS,aAAAX,QAAAI,mBAUIE;CARF,MAAAP,OAAAU,OAAAG,KAAAA,IAAA,UAAAH;CAEA,MAAAR,gBAAAS,OAAAE,KAAAA,IAAA,OAAAF;CAAoB,IAAAG;CAAA,IAAAN,EAAA,OAAAX,UAAA;EAQtB,MAAAkB,aAAmB7B,SAAQ8B,QAASnB,QAAQ;EAC5C,IAAIkB,WAAUE,SAAU,GACtB,MAAM,IAAIC,MAAM,uDAAuD;EAG3DJ,KAAA3B,eAAe4B,WAAU,EAA0B,IAAnBA,WAAU,KAA1C;EAAoDP,EAAA,KAAAX;EAAAW,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAlE,MAAAW,QAAcL;CACd,MAAAM,mBAAyB,OAAOjB,WAAW,YAAlB,CAA+B,CAACgB,QAAhChB;CAA+C,IAAAkB;CAAA,IAAAb,EAAA,OAAAW,SAAAX,EAAA,OAAAX,UAAA;EAC3BwB,KAAA;GAAAxB;GAAAsB;EAAkB;EAACX,EAAA,KAAAW;EAAAX,EAAA,KAAAX;EAAAW,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAhE,MAAA,CAAAc,YAAAC,iBAAoClC,SAASgC,EAAmB;CAIhE,KAAKF,SAAAC,qBAA8BvB,aAAayB,WAAUzB,UACxD0B,cAAc;EAAA1B;EAAAsB;CAAkB,CAAC;CAGnC,MAAA,EAAAK,gBAAAC,wBAAAC,sBACE/B,uBAAuBU,gBAAgBe,gBAAgB;CAAE,IAAAO;CAAA,IAAAnB,EAAA,OAAAY,oBAAAZ,EAAA,OAAAN,iBAAAM,EAAA,OAAAV,aAAAU,EAAA,OAAAiB,0BAAAjB,EAAA,OAAAgB,kBAAAhB,EAAA,QAAAR,MAAA;EAE3C2B,KAAA;GAAA3B;GAAA4B,SAEL9B;GAASI;GAAAC,QAEViB;GAAgBI;GAAAC;EAG1B;EAACjB,EAAA,KAAAY;EAAAZ,EAAA,KAAAN;EAAAM,EAAA,KAAAV;EAAAU,EAAA,KAAAiB;EAAAjB,EAAA,KAAAgB;EAAAhB,EAAA,MAAAR;EAAAQ,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAPD,MAAAqB,UAAgBF;CAQhB,MAAAG,mBAAyB9B,SAAS,SAATT,QAAAD;CAWX,MAAAyC,KAAA/B,SAAS,SAATa,KAAAA,IAAAb;CAAkC,IAAAgC;CAAA,IAAAxB,EAAA,QAAAN,iBAAAM,EAAA,QAAAV,aAAAU,EAAA,QAAAgB,gBAAA;EAMtCQ,KAAA9B,iBAAAJ,kBACU0B,qBAAqB1B,UAAU,CAAC,IAD1Ce,KAAAA;EAEaL,EAAA,MAAAN;EAAAM,EAAA,MAAAV;EAAAU,EAAA,MAAAgB;EAAAhB,EAAA,MAAAwB;CAAA,OAAAA,KAAAxB,EAAA;CAIZ,MAAAyB,KAAAd,UACEP,eAAA,CAAgBQ,mBAAmBE,WAAUH,QAA7C;CAA2D,IAAAe;CAAA,IAAA1B,EAAA,QAAAyB,IAAA;EAFhEC,KAAA,oBAAA,YAAA,EAAA,UACGD,GAC6D,CAAA;EAC7DzB,EAAA,MAAAyB;EAAAzB,EAAA,MAAA0B;CAAA,OAAAA,KAAA1B,EAAA;CAAA,IAAA2B;CAAA,IAAA3B,EAAA,QAAAsB,oBAAAtB,EAAA,QAAAI,eAAAJ,EAAA,QAAAY,oBAAAZ,EAAA,QAAAN,iBAAAM,EAAA,QAAAJ,6BAAAI,EAAA,QAAAP,UAAAO,EAAA,QAAAuB,MAAAvB,EAAA,QAAAwB,MAAAxB,EAAA,QAAA0B,IAAA;EAhBLC,KAAA,oBAAC,kBAAD;GACUf,QAAAA;GACF,MAAAW;GACE9B;GACKW;GACEV;GACYE;GAEzB,SAAA4B;GAKFE,UAAAA;EAbe,CAAA;EAiBE1B,EAAA,MAAAsB;EAAAtB,EAAA,MAAAI;EAAAJ,EAAA,MAAAY;EAAAZ,EAAA,MAAAN;EAAAM,EAAA,MAAAJ;EAAAI,EAAA,MAAAP;EAAAO,EAAA,MAAAuB;EAAAvB,EAAA,MAAAwB;EAAAxB,EAAA,MAAA0B;EAAA1B,EAAA,MAAA2B;CAAA,OAAAA,KAAA3B,EAAA;CAAA,IAAA4B;CAAA,IAAA5B,EAAA,QAAAqB,WAAArB,EAAA,QAAA2B,IAAA;EAlBrBC,MAAA,oBAAA,cAAA,UAAA;GAA+BP,OAAAA;GAC7BM,UAAAA;EAkBF,CAAA;EAAyB3B,EAAA,MAAAqB;EAAArB,EAAA,MAAA2B;EAAA3B,EAAA,MAAA4B;CAAA,OAAAA,MAAA5B,EAAA;CAAA,IAAA6B;CAAA,IAAA7B,EAAA,QAAAkB,mBAAA;EACxBW,MAAAX,qBACC,oBAAC,iBAAD;GAAgB,GAAKA;GACnB,UAAA,oBAAC,sBAAD,CAAqB,CAAA;EADP,CAAA;EAGjBlB,EAAA,MAAAkB;EAAAlB,EAAA,MAAA6B;CAAA,OAAAA,MAAA7B,EAAA;CAAA,IAAA8B;CAAA,IAAA9B,EAAA,QAAA4B,OAAA5B,EAAA,QAAA6B,KAAA;EA7BHC,MAAA,qBAAA,YAAA,EAAA,UAAA,CAKEF,KAoBCC,GAIA,EAAA,CAAA;EACA7B,EAAA,MAAA4B;EAAA5B,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;CAAA,OAAAA,MAAA9B,EAAA;CAAA,OA9BH8B;AA8BG"}
@@ -16,6 +16,13 @@ export interface CubeDialogFormProps<T extends FieldTypes = FieldTypes> extends
16
16
  cancelProps?: CubeButtonProps;
17
17
  /** Preserve form values after submission or dismissal. */
18
18
  preserve?: boolean;
19
+ /**
20
+ * Whether Escape, an outside click and the close button ask "Discard
21
+ * changes?" before they close the dialog. Unset, they ask while a field the
22
+ * user edited differs from its default, unless `preserve` is set. An
23
+ * explicit `confirmDismiss` on the `DialogTrigger` or `DialogContainer` wins.
24
+ */
25
+ confirmDismiss?: boolean;
19
26
  /** Whether to hide action button so developer can manually specify them */
20
27
  noActions?: boolean;
21
28
  /** The title of the dialog */
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { Title as _Title } from "../../content/Title.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { Button } from "../../actions/Button/Button.js";
@@ -15,6 +15,7 @@ import { Form as _Form } from "../../form/Form/Form.js";
15
15
  import { SubmitButton as _SubmitButton } from "../../form/Form/SubmitButton/SubmitButton.js";
16
16
  import { ModernDialogForm } from "./ModernDialogForm.js";
17
17
  import { c } from "react/compiler-runtime";
18
+ import { useEffect } from "react";
18
19
  import { jsx, jsxs } from "react/jsx-runtime";
19
20
  //#region src/components/overlays/Dialog/DialogForm.tsx
20
21
  function DialogForm(props) {
@@ -29,10 +30,16 @@ function DialogForm(props) {
29
30
  }
30
31
  function LegacyDialogForm(props) {
31
32
  "use no memo";
32
- let { qa, name, form, defaultValues, onDismiss, onSubmit, onSubmitFailed, onValuesChange, labelStyles, labelPosition, requiredMark, necessityIndicator, isReadOnly, isInvalid, isValid, validateTrigger, children, danger, noActions, submitProps, cancelProps, preserve, title, size, closeIcon, ...dialogProps } = props;
33
+ let { qa, name, form, defaultValues, onDismiss, onSubmit, onSubmitFailed, onValuesChange, labelStyles, labelPosition, requiredMark, necessityIndicator, isReadOnly, isInvalid, isValid, validateTrigger, children, danger, noActions, submitProps, cancelProps, preserve, confirmDismiss, title, size, closeIcon, ...dialogProps } = props;
33
34
  [form] = useForm(form);
34
35
  const { t } = useI18n();
35
- const { onClose } = useDialogContext();
36
+ const { onClose, registerUnsavedChanges } = useDialogContext();
37
+ useEffect(() => registerUnsavedChanges?.(() => confirmDismiss ?? (!preserve && form.getDirtyFieldNames().some((name_0) => form.isFieldTouched(name_0)))), [
38
+ registerUnsavedChanges,
39
+ form,
40
+ preserve,
41
+ confirmDismiss
42
+ ]);
36
43
  function onLocalDismiss() {
37
44
  onClose?.();
38
45
  onDismiss?.();
@@ -1 +1 @@
1
- {"version":3,"file":"DialogForm.js","names":["useI18n","Button","ButtonGroup","Content","Footer","Header","Title","isModernFormController","Form","SubmitButton","useForm","useDialogContext","withDefaultButtonText","CubeDialogProps","Dialog","ModernDialogForm","ReactElement","CubeButtonProps","CubeFormProps","ModernFormProps","CubeSubmitButtonProps","FieldTypes","CubeDialogFormProps","Omit","T","danger","submitProps","cancelProps","preserve","noActions","title","children","onLocalDismiss","CubeDialogFormRef","open","close","ModernDialogFormProps","width","DialogForm","props","$","_c","t0","form","LegacyDialogForm","qa","name","defaultValues","onDismiss","onSubmit","onSubmitFailed","onValuesChange","labelStyles","labelPosition","requiredMark","necessityIndicator","isReadOnly","isInvalid","isValid","validateTrigger","size","closeIcon","dialogProps","t","onClose","setTimeout","resetFields","data","undefined","_c","Title","Form","SubmitButton"],"sources":["../../../../src/components/overlays/Dialog/DialogForm.tsx"],"sourcesContent":["import { useI18n } from '../../../i18n';\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 { Title } from '../../content/Title';\nimport { isModernFormController } from '../../form/Form/backend';\nimport { Form } from '../../form/Form/Form';\nimport { SubmitButton } from '../../form/Form/SubmitButton/SubmitButton';\nimport { useForm } from '../../form/Form/use-form';\n\nimport { useDialogContext } from './context';\nimport { withDefaultButtonText } from './default-button-text';\nimport { CubeDialogProps, Dialog } from './Dialog';\nimport { ModernDialogForm } from './ModernDialogForm';\n\nimport type { ReactElement } from 'react';\nimport type { CubeButtonProps } from '../../actions/Button/Button';\nimport type { CubeFormProps } from '../../form/Form/Form';\nimport type { ModernFormProps } from '../../form/Form/ModernFormRoot';\nimport type { CubeSubmitButtonProps } from '../../form/Form/SubmitButton/SubmitButton';\nimport type { FieldTypes } from '../../form/Form/types';\n\nexport interface CubeDialogFormProps<T extends FieldTypes = FieldTypes>\n extends\n Omit<CubeDialogProps, 'children'>,\n Omit<CubeFormProps<T>, 'role' | 'children' | 'width'> {\n /** Whether the submit button has a `danger` theme */\n danger?: boolean;\n /** Properties for submit button. Use `children` to change text. */\n submitProps?: Omit<CubeButtonProps, 'form'>;\n /** Properties for cancel button. Use `children` to change text. */\n cancelProps?: CubeButtonProps;\n /** Preserve form values after submission or dismissal. */\n preserve?: boolean;\n /** Whether to hide action button so developer can manually specify them */\n noActions?: boolean;\n /** The title of the dialog */\n title?: string;\n /** Children nodes or render function */\n children?:\n | CubeFormProps['children']\n | ((onLocalDismiss: () => void) => CubeFormProps['children']);\n}\n\nexport interface CubeDialogFormRef {\n open: () => void;\n close: () => void;\n}\n\n/**\n * DialogForms are a specific type of Dialog. They contain forms to fill.\n */\nexport interface ModernDialogFormProps<T extends FieldTypes = FieldTypes>\n extends\n Omit<CubeDialogFormProps<T>, keyof CubeFormProps<T> | 'submitProps'>,\n Omit<ModernFormProps<T>, 'role' | 'children' | 'width'> {\n width?: CubeDialogProps['width'];\n children?: CubeDialogFormProps<T>['children'];\n submitProps?: Omit<CubeSubmitButtonProps<T>, 'form'>;\n}\n\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: CubeDialogFormProps<T>,\n): ReactElement;\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: ModernDialogFormProps<T>,\n): ReactElement;\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: CubeDialogFormProps<T> | ModernDialogFormProps<T>,\n): ReactElement {\n return isModernFormController(props.form) ? (\n <ModernDialogForm {...(props as ModernDialogFormProps<T>)} />\n ) : (\n <LegacyDialogForm {...(props as CubeDialogFormProps<T>)} />\n );\n}\n\nfunction LegacyDialogForm<T extends FieldTypes>(props: CubeDialogFormProps<T>) {\n 'use no memo';\n // Legacy form state is mutable; preserve its render-time reads until migration.\n\n let {\n qa,\n name,\n form,\n defaultValues,\n onDismiss,\n onSubmit,\n onSubmitFailed,\n onValuesChange,\n labelStyles,\n labelPosition,\n requiredMark,\n necessityIndicator,\n isReadOnly,\n isInvalid,\n isValid,\n validateTrigger,\n children,\n danger,\n noActions,\n submitProps,\n cancelProps,\n preserve,\n title,\n size,\n closeIcon,\n ...dialogProps\n } = props;\n\n [form] = useForm(form);\n\n const { t } = useI18n();\n const { onClose } = useDialogContext();\n\n function onLocalDismiss() {\n onClose?.();\n onDismiss?.();\n\n if (!preserve) {\n // let animations finish before resetting the form\n setTimeout(() => {\n form?.resetFields();\n }, 250);\n }\n }\n\n return (\n <Dialog\n qa={`${qa || ''}Dialog`}\n size={size}\n closeIcon={closeIcon}\n {...dialogProps}\n >\n <Header>\n <Title ellipsis>{title}</Title>\n </Header>\n {/*\n The form wraps BOTH slots rather than sitting inside `Content`, so the\n actions can live in a pinned `Footer` while the body scrolls. They still\n have to be inside the `<form>` for submit to work, which is why the form\n is the outer one of the two (CUB-4920). A form placed directly in a\n `Dialog` lays itself out as the dialog's column (see `FormElement`).\n */}\n <Form<T>\n qa={qa || 'DialogForm'}\n form={form}\n name={name}\n defaultValues={defaultValues}\n labelStyles={labelStyles}\n labelPosition={labelPosition}\n requiredMark={requiredMark}\n necessityIndicator={necessityIndicator}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n validateTrigger={validateTrigger}\n onSubmit={async (data) => {\n await onSubmit?.(data);\n\n onClose?.();\n\n if (!preserve) {\n // let animations finish before resetting the form\n setTimeout(() => {\n form.resetFields();\n }, 250);\n }\n }}\n onSubmitFailed={onSubmitFailed}\n onValuesChange={onValuesChange}\n >\n <Content>\n {typeof children === 'function' ? children(onLocalDismiss) : children}\n </Content>\n\n {!noActions ? (\n <Footer>\n <ButtonGroup>\n <SubmitButton\n qa={`${qa || ''}SubmitButton`}\n theme={danger ? 'danger' : undefined}\n {...withDefaultButtonText(\n submitProps,\n t('dialogForm.submit', 'Submit'),\n )}\n />\n <Button\n qa={`${qa || ''}CancelButton`}\n onPress={onLocalDismiss}\n {...withDefaultButtonText(\n cancelProps,\n t('dialogForm.cancel', 'Cancel'),\n )}\n />\n </ButtonGroup>\n </Footer>\n ) : undefined}\n </Form>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqEA,SAAOsC,WAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,OAAA;EAGEG,KAAAnC,uBAAuBgC,MAAKI,IAInC,IAHE,oBAAC,kBAAD,EAAiB,GAAMJ,MAAiC,CAAA,IAExD,oBAAC,kBAAD,EAAiB,GAAMA,MAA+B,CAAA;EACvDC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OAJME;AAIN;AAGH,SAASE,iBAAuCL,OAA+B;CAC7E;CAGA,IAAI,EACFM,IACAC,MACAH,MACAI,eACAC,WACAC,UACAC,gBACAC,gBACAC,aACAC,eACAC,cACAC,oBACAC,YACAC,WACAC,SACAC,iBACA5B,UACAN,QACAI,WACAH,aACAC,aACAC,UACAE,OACA8B,MACAC,WACA,GAAGC,gBACDvB;CAEJ,CAACI,QAAQjC,QAAQiC,IAAI;CAErB,MAAM,EAAEoB,MAAM/D,QAAQ;CACtB,MAAM,EAAEgE,YAAYrD,iBAAiB;CAErC,SAASqB,iBAAiB;EACxBgC,UAAU;EACVhB,YAAY;EAEZ,IAAI,CAACpB,UAEHqC,iBAAiB;GACftB,MAAMuB,YAAY;EACpB,GAAG,GAAG;CAEV;CAEA,OACE,qBAAC,QAAD;EACE,IAAI,GAAGrB,MAAM,GAAE;EACTe;EACKC;EACX,GAAIC;EAJN,UAAA,CAME,oBAAC,QAAD,EAAA,UACE,oBAACQ,QAAD;GAAO,UAAA;GAAUxC,UAAAA;EAAa,CAAA,EACxB,CAAA,GAQR,qBAACyC,OAAD;GACE,IAAI1B,MAAM;GACJF;GACAG;GACSC;GACFK;GACEC;GACDC;GACMC;GACRC;GACDC;GACFC;GACQC;GACjB,UAAU,OAAOQ,SAAS;IACxB,MAAMlB,WAAWkB,IAAI;IAErBH,UAAU;IAEV,IAAI,CAACpC,UAEHqC,iBAAiB;KACftB,KAAKuB,YAAY;IACnB,GAAG,GAAG;GAEV;GACgBhB;GACAC;GA1BlB,UAAA,CA4BE,oBAAC,SAAD,EAAA,UACG,OAAOpB,aAAa,aAAaA,SAASC,cAAc,IAAID,SACtD,CAAA,GAER,CAACF,YACA,oBAAC,QAAD,EAAA,UACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC2C,eAAD;IACE,IAAI,GAAG3B,MAAM,GAAE;IACf,OAAOpB,SAAS,WAAW2C,KAAAA;IAC3B,GAAIxD,sBACFc,aACAqC,EAAE,qBAAqB,QAAQ,CACjC;GAAE,CAAA,GAEJ,oBAAC,QAAD;IACE,IAAI,GAAGlB,MAAM,GAAE;IACf,SAASb;IACT,GAAIpB,sBACFe,aACAoC,EAAE,qBAAqB,QAAQ,CACjC;GAAE,CAAA,CAEO,EAAA,CAAA,EACP,CAAA,IACNK,KAAAA,CACA;EACA,CAAA,CAAA;;AAEZ"}
1
+ {"version":3,"file":"DialogForm.js","names":["useEffect","useI18n","Button","ButtonGroup","Content","Footer","Header","Title","isModernFormController","Form","SubmitButton","useForm","useDialogContext","withDefaultButtonText","CubeDialogProps","Dialog","ModernDialogForm","ReactElement","CubeButtonProps","CubeFormProps","ModernFormProps","CubeSubmitButtonProps","FieldTypes","CubeDialogFormProps","Omit","T","danger","submitProps","cancelProps","preserve","confirmDismiss","noActions","title","children","onLocalDismiss","CubeDialogFormRef","open","close","ModernDialogFormProps","width","DialogForm","props","$","_c","t0","form","LegacyDialogForm","qa","name","defaultValues","onDismiss","onSubmit","onSubmitFailed","onValuesChange","labelStyles","labelPosition","requiredMark","necessityIndicator","isReadOnly","isInvalid","isValid","validateTrigger","size","closeIcon","dialogProps","t","onClose","registerUnsavedChanges","getDirtyFieldNames","some","isFieldTouched","setTimeout","resetFields","data","undefined","_c","Title","Form","SubmitButton"],"sources":["../../../../src/components/overlays/Dialog/DialogForm.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useI18n } from '../../../i18n';\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 { Title } from '../../content/Title';\nimport { isModernFormController } from '../../form/Form/backend';\nimport { Form } from '../../form/Form/Form';\nimport { SubmitButton } from '../../form/Form/SubmitButton/SubmitButton';\nimport { useForm } from '../../form/Form/use-form';\n\nimport { useDialogContext } from './context';\nimport { withDefaultButtonText } from './default-button-text';\nimport { CubeDialogProps, Dialog } from './Dialog';\nimport { ModernDialogForm } from './ModernDialogForm';\n\nimport type { ReactElement } from 'react';\nimport type { CubeButtonProps } from '../../actions/Button/Button';\nimport type { CubeFormProps } from '../../form/Form/Form';\nimport type { ModernFormProps } from '../../form/Form/ModernFormRoot';\nimport type { CubeSubmitButtonProps } from '../../form/Form/SubmitButton/SubmitButton';\nimport type { FieldTypes } from '../../form/Form/types';\n\nexport interface CubeDialogFormProps<T extends FieldTypes = FieldTypes>\n extends\n Omit<CubeDialogProps, 'children'>,\n Omit<CubeFormProps<T>, 'role' | 'children' | 'width'> {\n /** Whether the submit button has a `danger` theme */\n danger?: boolean;\n /** Properties for submit button. Use `children` to change text. */\n submitProps?: Omit<CubeButtonProps, 'form'>;\n /** Properties for cancel button. Use `children` to change text. */\n cancelProps?: CubeButtonProps;\n /** Preserve form values after submission or dismissal. */\n preserve?: boolean;\n /**\n * Whether Escape, an outside click and the close button ask \"Discard\n * changes?\" before they close the dialog. Unset, they ask while a field the\n * user edited differs from its default, unless `preserve` is set. An\n * explicit `confirmDismiss` on the `DialogTrigger` or `DialogContainer` wins.\n */\n confirmDismiss?: boolean;\n /** Whether to hide action button so developer can manually specify them */\n noActions?: boolean;\n /** The title of the dialog */\n title?: string;\n /** Children nodes or render function */\n children?:\n | CubeFormProps['children']\n | ((onLocalDismiss: () => void) => CubeFormProps['children']);\n}\n\nexport interface CubeDialogFormRef {\n open: () => void;\n close: () => void;\n}\n\n/**\n * DialogForms are a specific type of Dialog. They contain forms to fill.\n */\nexport interface ModernDialogFormProps<T extends FieldTypes = FieldTypes>\n extends\n Omit<CubeDialogFormProps<T>, keyof CubeFormProps<T> | 'submitProps'>,\n Omit<ModernFormProps<T>, 'role' | 'children' | 'width'> {\n width?: CubeDialogProps['width'];\n children?: CubeDialogFormProps<T>['children'];\n submitProps?: Omit<CubeSubmitButtonProps<T>, 'form'>;\n}\n\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: CubeDialogFormProps<T>,\n): ReactElement;\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: ModernDialogFormProps<T>,\n): ReactElement;\nexport function DialogForm<T extends FieldTypes = FieldTypes>(\n props: CubeDialogFormProps<T> | ModernDialogFormProps<T>,\n): ReactElement {\n return isModernFormController(props.form) ? (\n <ModernDialogForm {...(props as ModernDialogFormProps<T>)} />\n ) : (\n <LegacyDialogForm {...(props as CubeDialogFormProps<T>)} />\n );\n}\n\nfunction LegacyDialogForm<T extends FieldTypes>(props: CubeDialogFormProps<T>) {\n 'use no memo';\n // Legacy form state is mutable; preserve its render-time reads until migration.\n\n let {\n qa,\n name,\n form,\n defaultValues,\n onDismiss,\n onSubmit,\n onSubmitFailed,\n onValuesChange,\n labelStyles,\n labelPosition,\n requiredMark,\n necessityIndicator,\n isReadOnly,\n isInvalid,\n isValid,\n validateTrigger,\n children,\n danger,\n noActions,\n submitProps,\n cancelProps,\n preserve,\n confirmDismiss,\n title,\n size,\n closeIcon,\n ...dialogProps\n } = props;\n\n [form] = useForm(form);\n\n const { t } = useI18n();\n const { onClose, registerUnsavedChanges } = useDialogContext();\n\n // Escape, an outside click and the close button ask before they discard\n // what the user typed: fields they edited away from their defaults. A form\n // filled from code is not an edit. `preserve` keeps the values anyway.\n useEffect(\n () =>\n registerUnsavedChanges?.(\n () =>\n confirmDismiss ??\n (!preserve &&\n form\n .getDirtyFieldNames()\n .some((name) => form.isFieldTouched(name))),\n ),\n [registerUnsavedChanges, form, preserve, confirmDismiss],\n );\n\n function onLocalDismiss() {\n onClose?.();\n onDismiss?.();\n\n if (!preserve) {\n // let animations finish before resetting the form\n setTimeout(() => {\n form?.resetFields();\n }, 250);\n }\n }\n\n return (\n <Dialog\n qa={`${qa || ''}Dialog`}\n size={size}\n closeIcon={closeIcon}\n {...dialogProps}\n >\n <Header>\n <Title ellipsis>{title}</Title>\n </Header>\n {/*\n The form wraps BOTH slots rather than sitting inside `Content`, so the\n actions can live in a pinned `Footer` while the body scrolls. They still\n have to be inside the `<form>` for submit to work, which is why the form\n is the outer one of the two (CUB-4920). A form placed directly in a\n `Dialog` lays itself out as the dialog's column (see `FormElement`).\n */}\n <Form<T>\n qa={qa || 'DialogForm'}\n form={form}\n name={name}\n defaultValues={defaultValues}\n labelStyles={labelStyles}\n labelPosition={labelPosition}\n requiredMark={requiredMark}\n necessityIndicator={necessityIndicator}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n validateTrigger={validateTrigger}\n onSubmit={async (data) => {\n await onSubmit?.(data);\n\n onClose?.();\n\n if (!preserve) {\n // let animations finish before resetting the form\n setTimeout(() => {\n form.resetFields();\n }, 250);\n }\n }}\n onSubmitFailed={onSubmitFailed}\n onValuesChange={onValuesChange}\n >\n <Content>\n {typeof children === 'function' ? children(onLocalDismiss) : children}\n </Content>\n\n {!noActions ? (\n <Footer>\n <ButtonGroup>\n <SubmitButton\n qa={`${qa || ''}SubmitButton`}\n theme={danger ? 'danger' : undefined}\n {...withDefaultButtonText(\n submitProps,\n t('dialogForm.submit', 'Submit'),\n )}\n />\n <Button\n qa={`${qa || ''}CancelButton`}\n onPress={onLocalDismiss}\n {...withDefaultButtonText(\n cancelProps,\n t('dialogForm.cancel', 'Cancel'),\n )}\n />\n </ButtonGroup>\n </Footer>\n ) : undefined}\n </Form>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA8EA,SAAOwC,WAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAD,OAAA;EAGEG,KAAApC,uBAAuBiC,MAAKI,IAInC,IAHE,oBAAC,kBAAD,EAAiB,GAAMJ,MAAiC,CAAA,IAExD,oBAAC,kBAAD,EAAiB,GAAMA,MAA+B,CAAA;EACvDC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OAJME;AAIN;AAGH,SAASE,iBAAuCL,OAA+B;CAC7E;CAGA,IAAI,EACFM,IACAC,MACAH,MACAI,eACAC,WACAC,UACAC,gBACAC,gBACAC,aACAC,eACAC,cACAC,oBACAC,YACAC,WACAC,SACAC,iBACA5B,UACAP,QACAK,WACAJ,aACAC,aACAC,UACAC,gBACAE,OACA8B,MACAC,WACA,GAAGC,gBACDvB;CAEJ,CAACI,QAAQlC,QAAQkC,IAAI;CAErB,MAAM,EAAEoB,MAAMhE,QAAQ;CACtB,MAAM,EAAEiE,SAASC,2BAA2BvD,iBAAiB;CAK7DZ,gBAEImE,+BAEIrC,mBACC,CAACD,YACAgB,KACGuB,mBAAmB,CAAC,CACpBC,MAAMrB,WAASH,KAAKyB,eAAetB,MAAI,CAAC,EACjD,GACF;EAACmB;EAAwBtB;EAAMhB;EAAUC;CAAc,CACzD;CAEA,SAASI,iBAAiB;EACxBgC,UAAU;EACVhB,YAAY;EAEZ,IAAI,CAACrB,UAEH0C,iBAAiB;GACf1B,MAAM2B,YAAY;EACpB,GAAG,GAAG;CAEV;CAEA,OACE,qBAAC,QAAD;EACE,IAAI,GAAGzB,MAAM,GAAE;EACTe;EACKC;EACX,GAAIC;EAJN,UAAA,CAME,oBAAC,QAAD,EAAA,UACE,oBAACY,QAAD;GAAO,UAAA;GAAU5C,UAAAA;EAAa,CAAA,EACxB,CAAA,GAQR,qBAAC6C,OAAD;GACE,IAAI9B,MAAM;GACJF;GACAG;GACSC;GACFK;GACEC;GACDC;GACMC;GACRC;GACDC;GACFC;GACQC;GACjB,UAAU,OAAOY,SAAS;IACxB,MAAMtB,WAAWsB,IAAI;IAErBP,UAAU;IAEV,IAAI,CAACrC,UAEH0C,iBAAiB;KACf1B,KAAK2B,YAAY;IACnB,GAAG,GAAG;GAEV;GACgBpB;GACAC;GA1BlB,UAAA,CA4BE,oBAAC,SAAD,EAAA,UACG,OAAOpB,aAAa,aAAaA,SAASC,cAAc,IAAID,SACtD,CAAA,GAER,CAACF,YACA,oBAAC,QAAD,EAAA,UACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC+C,eAAD;IACE,IAAI,GAAG/B,MAAM,GAAE;IACf,OAAOrB,SAAS,WAAWgD,KAAAA;IAC3B,GAAI7D,sBACFc,aACAsC,EAAE,qBAAqB,QAAQ,CACjC;GAAE,CAAA,GAEJ,oBAAC,QAAD;IACE,IAAI,GAAGlB,MAAM,GAAE;IACf,SAASb;IACT,GAAIrB,sBACFe,aACAqC,EAAE,qBAAqB,QAAQ,CACjC;GAAE,CAAA,CAEO,EAAA,CAAA,EACP,CAAA,IACNS,KAAAA,CACA;EACA,CAAA,CAAA;;AAEZ"}
@@ -32,6 +32,14 @@ export interface CubeDialogTriggerProps extends Omit<OverlayTriggerProps, 'type'
32
32
  isDismissable?: boolean;
33
33
  /** Whether pressing the escape key to close the dialog should be disabled. */
34
34
  isKeyboardDismissDisabled?: boolean;
35
+ /**
36
+ * Whether Escape, an outside click and the close button ask "Discard
37
+ * changes?" before they close the dialog. Unset, they ask while a form
38
+ * inside (a `DialogForm`, or a modern `Form`) has unsaved edits. Explicit
39
+ * actions (submit, Cancel, the `close` function) never ask, and a popover
40
+ * never does: it closes on its own in more ways than these.
41
+ */
42
+ confirmDismiss?: boolean;
35
43
  /** The screen breakpoint for the mobile type */
36
44
  mobileViewport?: number;
37
45
  /** The style map for the overlay **/
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
@@ -9,10 +9,12 @@ import { Tray as _Tray } from "../Modal/Tray.js";
9
9
  import { Popover as _Popover } from "../Modal/Popover.js";
10
10
  import { isOwnActionsPress } from "../../actions/actions-run.js";
11
11
  import { DialogContext } from "./context.js";
12
+ import { DiscardChangesDialog, useDismissConfirmation } from "./use-dismiss-confirmation.js";
13
+ import { DialogContainer } from "./DialogContainer.js";
12
14
  import { useDialogOpenSync } from "./use-dialog-open-sync.js";
13
15
  import { c } from "react/compiler-runtime";
14
16
  import { Fragment, useEffect, useMemo, useRef } from "react";
15
- import { jsx, jsxs } from "react/jsx-runtime";
17
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
16
18
  import { useOverlayPosition, useOverlayTrigger } from "react-aria";
17
19
  import { useMediaQuery } from "@react-spectrum/utils";
18
20
  import { useOverlayTriggerState } from "react-stately";
@@ -24,7 +26,7 @@ import { PressResponder } from "@react-aria/interactions";
24
26
  * positioning of the Dialog.
25
27
  */
26
28
  function DialogTrigger(props) {
27
- let { children, type = "modal", mobileType = type, hideArrow, targetRef, onDismiss, isDismissable = true, isKeyboardDismissDisabled, styles, mobileViewport = 700, hideOnClose, shouldCloseOnInteractOutside, shouldRestoreFocus = true, ...positionProps } = props;
29
+ let { children, type = "modal", mobileType = type, hideArrow, targetRef, onDismiss, isDismissable = true, isKeyboardDismissDisabled, confirmDismiss, styles, mobileViewport = 700, hideOnClose, shouldCloseOnInteractOutside, shouldRestoreFocus = true, ...positionProps } = props;
28
30
  if (!Array.isArray(children) || children.length > 2) throw new Error("DialogTrigger must have exactly 2 children");
29
31
  let [trigger, content] = children;
30
32
  if (useMediaQuery(`(max-width: ${mobileViewport}px)`)) {
@@ -63,12 +65,19 @@ function DialogTrigger(props) {
63
65
  if ((wasOpen.current || isExiting.current) && type !== "popover" && type !== "tray") console.warn("CubeUIKit: A DialogTrigger unmounted while open. This is likely due to being placed within a trigger that unmounts or inside a conditional. Consider using a DialogContainer instead.");
64
66
  };
65
67
  }, []);
66
- function onClose(action, fromAction = false) {
67
- if (isDismissable || fromAction) {
68
- onDismiss && onDismiss(action);
69
- state.close();
70
- }
68
+ const { requestDismiss, registerUnsavedChanges, confirmationProps } = useDismissConfirmation(type === "popover" ? false : confirmDismiss, state.isOpen);
69
+ function close(action) {
70
+ onDismiss && onDismiss(action);
71
+ state.close();
72
+ }
73
+ function onClose(action_0, fromAction = false) {
74
+ if (fromAction) close(action_0);
75
+ else if (isDismissable) requestDismiss(() => close(action_0));
71
76
  }
77
+ const confirmation = confirmationProps && /* @__PURE__ */ jsx(DialogContainer, {
78
+ ...confirmationProps,
79
+ children: /* @__PURE__ */ jsx(DiscardChangesDialog, {})
80
+ });
72
81
  if (type === "popover") return /* @__PURE__ */ jsx(PopoverTrigger, {
73
82
  ...positionProps,
74
83
  hideOnClose,
@@ -117,7 +126,7 @@ function DialogTrigger(props) {
117
126
  });
118
127
  }
119
128
  };
120
- return /* @__PURE__ */ jsx(DialogTriggerBase, {
129
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(DialogTriggerBase, {
121
130
  type,
122
131
  state,
123
132
  isDismissable,
@@ -127,8 +136,10 @@ function DialogTrigger(props) {
127
136
  syncTriggerRef,
128
137
  overlayRef: syncOverlayRef,
129
138
  shouldRestoreFocus,
139
+ requestDismiss,
140
+ registerUnsavedChanges,
130
141
  onClose
131
- });
142
+ }), confirmation] });
132
143
  }
133
144
  function PopoverTrigger(allProps) {
134
145
  const $ = c(66);
@@ -370,12 +381,14 @@ function DialogTriggerBase(props) {
370
381
  useLayoutEffect$1(() => {
371
382
  if (props.syncTriggerRef) props.syncTriggerRef.current = ref.current ?? null;
372
383
  });
373
- let { type, state, onClose, isDismissable, dialogProps = {}, triggerProps = {}, overlay, trigger, shouldRestoreFocus = true } = props;
384
+ let { type, state, onClose, isDismissable, dialogProps = {}, triggerProps = {}, overlay, trigger, shouldRestoreFocus = true, requestDismiss, registerUnsavedChanges } = props;
374
385
  let context = {
375
386
  type,
376
387
  onClose: (action) => onClose?.(action, true),
377
388
  isDismissable,
378
389
  isOpen: state.isOpen,
390
+ requestDismiss,
391
+ registerUnsavedChanges,
379
392
  shouldRestoreFocus,
380
393
  ...dialogProps
381
394
  };
@@ -1 +1 @@
1
- {"version":3,"file":"DialogTrigger.js","names":["PressResponder","useMediaQuery","Styles","Fragment","ReactElement","RefObject","useEffect","useMemo","useRef","OverlayTriggerProps","Placement","PositionProps","useOverlayPosition","useOverlayTrigger","OverlayTriggerState","useOverlayTriggerState","useEvent","generateRandomId","useCombinedRefs","useLayoutEffect","usePopoverSync","isOwnActionsPress","Modal","Popover","Tray","WithCloseBehavior","DialogContext","useDialogOpenSync","CubeDialogClose","close","CubeDialogTriggerProps","Omit","children","state","type","mobileType","placement","hideArrow","targetRef","HTMLElement","isDismissable","isKeyboardDismissDisabled","mobileViewport","styles","shouldCloseOnInteractOutside","element","Element","onDismiss","action","isOpen","onOpenChange","defaultOpen","shouldFlip","shouldUpdatePosition","containerPadding","shouldRestoreFocus","DialogTrigger","props","hideOnClose","positionProps","Array","isArray","length","Error","trigger","content","isMobile","wasOpen","isExiting","onExiting","current","onExited","dialogSyncId","syncTriggerRef","syncOverlayRef","isPopoverFlavored","menuId","onClose","triggerRef","containerRef","dismissOnInnerButtonPress","closeOnPeerOpen","emits","closes","overlayRef","console","warn","fromAction","renderOverlay","PopoverTrigger","allProps","$","_c","keepOpenOnScroll","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","triggerType","t15","anchorRef","offset","crossOffset","overlayProps","popoverProps","arrowProps","updatePosition","overlayTriggerState","Symbol","for","triggerProps","undefined","ref","triggerPropsWithRef","el","ownTrigger","popoverTriggerEl","closest","setTimeout","contains","resolveShouldCloseOnInteractOutside","style","overlay","DialogTriggerBase","wasOpenRef","dialogProps","context","hasFocusMovedOutsideDialog","activeElement","document","body","isConnected","focus","triggerExtraProps","toggle","Modal","Tray","_c","Popover"],"sources":["../../../../src/components/overlays/Dialog/DialogTrigger.tsx"],"sourcesContent":["import { PressResponder } from '@react-aria/interactions';\nimport { useMediaQuery } from '@react-spectrum/utils';\nimport { Styles } from '@tenphi/tasty';\nimport {\n Fragment,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport {\n OverlayTriggerProps,\n Placement,\n PositionProps,\n useOverlayPosition,\n useOverlayTrigger,\n} from 'react-aria';\nimport { OverlayTriggerState, useOverlayTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { useCombinedRefs, useLayoutEffect } from '../../../utils/react/index';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { isOwnActionsPress } from '../../actions/actions-run';\nimport { Modal, Popover, Tray, WithCloseBehavior } from '../Modal';\n\nimport { DialogContext } from './context';\nimport { useDialogOpenSync } from './use-dialog-open-sync';\n\nexport type CubeDialogClose = (close: () => void) => ReactElement;\n\nexport interface CubeDialogTriggerProps\n extends Omit<OverlayTriggerProps, 'type'>, PositionProps, WithCloseBehavior {\n /** The Dialog and its trigger element. See the DialogTrigger [Content section](#content) for more information on what to provide as children. */\n children: [\n ReactElement | ((state: OverlayTriggerState) => ReactElement),\n CubeDialogClose | ReactElement,\n ];\n /**\n * The type of Dialog that should be rendered. See the DialogTrigger [types section](#dialog-types) for an explanation on each.\n * @default 'modal'\n */\n type?:\n | 'modal'\n | 'popover'\n | 'tray'\n | 'fullscreen'\n | 'fullscreenTakeover'\n | 'panel';\n /** The type of Dialog rendered on mobile, defaulting to `type`. See DialogTrigger [types section](#dialog-types) for an explanation on each. */\n mobileType?:\n | 'modal'\n | 'tray'\n | 'fullscreen'\n | 'fullscreenTakeover'\n | 'panel'\n | 'popover';\n placement?: Placement;\n /**\n * Has no effect: popovers render no arrow.\n * @deprecated Popovers never render an arrow, so there is nothing to hide.\n */\n hideArrow?: boolean;\n /** 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. */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Whether passive dismissal (Escape or an outside click) can close the dialog. Explicit dialog actions can still close it.\n * 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`.\n */\n isDismissable?: boolean;\n /** Whether pressing the escape key to close the dialog should be disabled. */\n isKeyboardDismissDisabled?: boolean;\n /** The screen breakpoint for the mobile type */\n mobileViewport?: number;\n /** The style map for the overlay **/\n styles?: Styles;\n shouldCloseOnInteractOutside?: (element: Element) => boolean;\n onDismiss?: (action?: string) => void;\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n defaultOpen?: boolean;\n shouldFlip?: boolean;\n shouldUpdatePosition?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /**\n * Whether focus returns to the trigger when the dialog closes. Defaults to\n * `true`.\n *\n * The restore is skipped automatically whenever the action that closed the\n * dialog has already moved focus somewhere else, so an action that opens a\n * panel/dialog/inline editor and focuses it needs nothing here. Pass `false`\n * for the remaining case: a surface that claims focus *later* than the\n * dialog's own restore (after an async load, an entry animation, or a\n * `requestAnimationFrame`), where the trigger would otherwise take focus\n * first and produce a visible flash.\n */\n shouldRestoreFocus?: boolean;\n}\n\n/**\n * DialogTrigger serves as a wrapper around a Dialog and its associated trigger, linking the Dialog's\n * open state with the trigger's press state. Additionally, it allows you to customize the type and\n * positioning of the Dialog.\n */\nexport function DialogTrigger(props: CubeDialogTriggerProps) {\n let {\n children,\n type = 'modal',\n mobileType = type,\n hideArrow,\n targetRef,\n onDismiss,\n isDismissable = true,\n isKeyboardDismissDisabled,\n styles,\n mobileViewport = 700,\n hideOnClose,\n shouldCloseOnInteractOutside,\n shouldRestoreFocus = true,\n ...positionProps\n } = props;\n\n if (!Array.isArray(children) || children.length > 2) {\n throw new Error('DialogTrigger must have exactly 2 children');\n }\n // if a function is passed as the second child, it won't appear in toArray\n let [trigger, content] = children;\n\n // Apply the mobile type at the configured breakpoint.\n let isMobile = useMediaQuery(`(max-width: ${mobileViewport}px)`);\n if (isMobile) {\n // handle cases where desktop popovers need a close button for the mobile modal view\n if (type !== 'modal' && mobileType === 'modal') {\n isDismissable = true;\n }\n\n type = mobileType;\n }\n\n let state = useOverlayTriggerState(props);\n\n if (typeof trigger === 'function') {\n trigger = trigger(state);\n }\n\n let wasOpen = useRef(false);\n let isExiting = useRef(false);\n let onExiting = () => (isExiting.current = true);\n let onExited = () => (isExiting.current = false);\n\n wasOpen.current = state.isOpen;\n\n // Shared identity + refs for `usePopoverSync`. Allocating here (rather than\n // inside the branch-specific sub-trees) keeps a single sync registration for\n // the lifetime of the trigger, even when `type` flips between popover and\n // modal at the mobile breakpoint. The refs are then threaded into the\n // appropriate branch so existing positioning / useOverlayTrigger hooks keep\n // their original ref targets and `usePopoverSync`'s `contains()` check has a\n // real DOM node to query.\n const dialogSyncId = useMemo(() => generateRandomId(), []);\n const syncTriggerRef = useRef<HTMLElement | null>(null);\n const syncOverlayRef = useRef<HTMLElement | null>(null);\n\n // Only popover-type Dialogs participate in the \"press inside dismisses\n // me\" / \"peer popover opening dismisses me\" behaviours: modals, trays,\n // fullscreen and panel Dialogs are persistent workspaces and must not be\n // yanked closed via the EventBus (which would bypass `isDismissable` and\n // call `state.close()` directly). Non-popover types DO still EMIT\n // `popover:open`, so opening a modal correctly dismisses peer popovers.\n //\n // A popover that is not dismissable does not listen to `popover:open`: a\n // peer popover leaves it open, as any other outside press does. A modal,\n // tray, fullscreen or panel Dialog opening still closes it, through\n // `useDialogOpenSync` below.\n const isPopoverFlavored = type === 'popover';\n usePopoverSync({\n menuId: dialogSyncId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: syncTriggerRef,\n containerRef: syncOverlayRef,\n dismissOnInnerButtonPress: isPopoverFlavored,\n closeOnPeerOpen: isPopoverFlavored && isDismissable,\n });\n useDialogOpenSync({\n emits: !isPopoverFlavored,\n closes: isPopoverFlavored && !isDismissable,\n state,\n triggerRef: syncTriggerRef,\n overlayRef: syncOverlayRef,\n });\n\n useEffect(() => {\n return () => {\n if (\n (wasOpen.current || isExiting.current) &&\n type !== 'popover' &&\n type !== 'tray'\n ) {\n console.warn(\n 'CubeUIKit: A DialogTrigger unmounted while open. This is likely due to being placed within a trigger that unmounts or inside a conditional. Consider using a DialogContainer instead.',\n );\n }\n };\n }, []);\n\n function onClose(action, fromAction = false) {\n if (isDismissable || fromAction) {\n onDismiss && onDismiss(action);\n state.close();\n }\n }\n\n if (type === 'popover') {\n return (\n <PopoverTrigger\n {...positionProps}\n hideOnClose={hideOnClose}\n state={state}\n styles={styles}\n targetRef={targetRef}\n trigger={trigger}\n content={content}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n hideArrow={hideArrow}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n shouldRestoreFocus={shouldRestoreFocus}\n syncTriggerRef={syncTriggerRef}\n syncOverlayRef={syncOverlayRef}\n triggerType={type}\n onClose={onClose}\n />\n );\n }\n\n let renderOverlay = () => {\n switch (type) {\n case 'panel':\n case 'fullscreen':\n case 'fullscreenTakeover':\n case 'modal':\n return (\n <Modal\n ref={syncOverlayRef}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n isDismissable={isDismissable}\n type={type}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n styles={styles}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={onClose}\n onExiting={onExiting}\n onExited={onExited}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Modal>\n );\n case 'tray':\n return (\n <Tray\n ref={syncOverlayRef}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n styles={styles}\n onClose={onClose}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Tray>\n );\n }\n };\n\n return (\n <DialogTriggerBase\n type={type}\n state={state}\n isDismissable={isDismissable}\n trigger={trigger}\n overlay={renderOverlay()}\n hideOnClose={hideOnClose}\n syncTriggerRef={syncTriggerRef}\n overlayRef={syncOverlayRef}\n shouldRestoreFocus={shouldRestoreFocus}\n onClose={onClose}\n />\n );\n}\n\nfunction PopoverTrigger(allProps) {\n let {\n state,\n styles,\n targetRef,\n trigger,\n content,\n hideArrow,\n onClose,\n isDismissable,\n isKeyboardDismissDisabled,\n hideOnClose,\n shouldCloseOnInteractOutside,\n shouldRestoreFocus,\n keepOpenOnScroll,\n syncTriggerRef,\n syncOverlayRef,\n triggerType,\n ...props\n } = allProps;\n\n let triggerRef = useRef<HTMLButtonElement>(null);\n let overlayRef = useRef<HTMLDivElement>(null);\n // What the popover is positioned against, and closes on scroll with.\n let anchorRef = targetRef || triggerRef;\n\n // Mirror the trigger/overlay DOM nodes into the parent-owned sync refs.\n //\n // We deliberately do NOT use `useCombinedRefs` here: that hook returns a\n // brand new internal ref and propagates to the passed refs via a regular\n // `useEffect` (post-commit). `useOverlayPosition` below reads\n // `triggerRef.current` in its own layout effect during the SAME commit, so\n // if `triggerRef` only receives the DOM node via a delayed effect, the\n // first measurement sees `null` and the popover positions at the document\n // origin until something forces a re-measure.\n //\n // Keeping `triggerRef`/`overlayRef` as the direct React refs preserves\n // synchronous assignment for `useOverlayPosition`. The sync refs are only\n // ever read inside `popover:open` handlers, which fire via setTimeout(0),\n // so a layout-effect mirror is more than fast enough.\n useLayoutEffect(() => {\n if (syncTriggerRef) {\n syncTriggerRef.current = targetRef?.current ?? triggerRef.current ?? null;\n }\n if (syncOverlayRef) {\n syncOverlayRef.current = overlayRef.current ?? null;\n }\n });\n\n let {\n overlayProps: popoverProps,\n placement,\n arrowProps,\n updatePosition,\n } = useOverlayPosition({\n targetRef: anchorRef,\n overlayRef: overlayRef,\n placement: props.placement,\n containerPadding: props.containerPadding,\n offset: props.offset ?? 8,\n crossOffset: props.crossOffset,\n shouldFlip: props.shouldFlip,\n shouldUpdatePosition: props.shouldUpdatePosition,\n isOpen: state.isOpen,\n });\n\n let overlayTriggerState = state;\n\n if (keepOpenOnScroll) {\n overlayTriggerState = { ...state, close: updatePosition };\n }\n\n // Registers the close (or, with `keepOpenOnScroll`, the reposition) that\n // `useOverlayPosition` runs when the anchor scrolls. It is looked up by the\n // anchor element, so it has to be registered there: with `targetRef` the\n // trigger ref is never attached, and the popover stayed open while its\n // anchor scrolled away.\n let { triggerProps, overlayProps } = useOverlayTrigger(\n { type: 'dialog' },\n overlayTriggerState,\n anchorRef,\n );\n\n let triggerPropsWithRef = {\n ...triggerProps,\n ref: targetRef ? undefined : triggerRef,\n };\n\n // Mirror the Select/ComboBox/MenuTrigger pattern: when an outside click lands\n // on ANOTHER popover trigger, return `false` so react-aria's `useOverlay`\n // does NOT `stopPropagation()` the click. The click then reaches that trigger,\n // its popover opens, and `usePopoverSync` closes this one via the EventBus.\n // Without this, react-aria swallows every outside click and a single click on\n // a sibling trigger can't open it while this popover is open.\n const resolveShouldCloseOnInteractOutside = useEvent(\n (el: Element): boolean => {\n // The caller's own predicate is asked FIRST, so an explicit \"keep me open\n // for this element\" wins over every automatic behaviour below (CUB-4113).\n // It used to be consulted last, which made the prop inert for every\n // `Button` / `ItemButton`: those carry `data-popover-dismiss`, so the\n // auto-dismiss branch matched and closed the popover before the predicate\n // was ever asked.\n //\n // Asked before every lookup below, not just inside the \"outside any\n // trigger\" branch: a trigger can own interactive controls of its own, and\n // those used to be decided without the predicate ever being asked.\n //\n // React Aria hands over the element the pointer landed on — for a\n // `Button` that is the label inside it, not the `<button>` — so a\n // predicate that guards an element has to use `contains()` rather than an\n // identity check.\n if (shouldCloseOnInteractOutside && !shouldCloseOnInteractOutside(el)) {\n return false;\n }\n\n const ownTrigger = targetRef?.current ?? triggerRef.current;\n\n // A press on our OWN trigger's actions run — an `ItemButton` row's\n // `actions`, a picker's clear button — is not a press outside. The run is\n // rendered as a sibling of the trigger (see `ItemActionsWrapper`), so the\n // `contains` checks below cannot recognise it and we dismissed instead,\n // which cost the action its press: the first press on `Reset` while the\n // popover was open only closed the popover and never ran.\n if (isOwnActionsPress(el, ownTrigger)) return false;\n\n const popoverTriggerEl = el.closest('[data-popover-trigger]');\n if (!popoverTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss`. Schedule the close after the click finishes so\n // the control's `onPress` runs first instead of losing the click to\n // useOverlay's stopPropagation.\n if (el.closest('[data-popover-dismiss]')) {\n setTimeout(() => state.close(), 0);\n return false;\n }\n return true;\n }\n // Clicking our own trigger again should dismiss us.\n if (popoverTriggerEl === ownTrigger || ownTrigger?.contains(el))\n return true;\n // Another popover's trigger: let the click through so it can open.\n return false;\n },\n );\n\n let overlay = (\n <Popover\n ref={overlayRef}\n styles={styles}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={popoverProps.style}\n placement={placement ?? undefined}\n arrowProps={arrowProps}\n // Not dismissable: an outside press is left alone entirely, so it\n // reaches the control it landed on and nothing below is asked.\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n hideArrow={hideArrow}\n shouldCloseOnInteractOutside={resolveShouldCloseOnInteractOutside}\n onClose={onClose}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Popover>\n );\n\n return (\n <DialogTriggerBase\n type=\"popover\"\n state={state}\n triggerProps={triggerPropsWithRef}\n dialogProps={overlayProps}\n trigger={trigger}\n overlay={overlay}\n overlayRef={overlayRef}\n isDismissable={isDismissable}\n shouldRestoreFocus={shouldRestoreFocus}\n onClose={onClose}\n />\n );\n}\n\nfunction DialogTriggerBase(props: any) {\n const ref = useCombinedRefs<HTMLElement>(props.ref);\n const wasOpenRef = useRef(false);\n const overlayRef: RefObject<HTMLElement | null> | undefined =\n props.overlayRef;\n\n // Mirror the press-responder DOM node into the parent's sync trigger ref.\n // Done via `useLayoutEffect` rather than threading through `useCombinedRefs`\n // for consistency with `PopoverTrigger` (see comment there) — keeps the\n // sync-ref population deterministic regardless of branch.\n useLayoutEffect(() => {\n if (props.syncTriggerRef) {\n props.syncTriggerRef.current = ref.current ?? null;\n }\n });\n\n let {\n type,\n state,\n onClose,\n isDismissable,\n dialogProps = {},\n triggerProps = {},\n overlay,\n trigger,\n shouldRestoreFocus = true,\n } = props;\n\n let context = {\n type,\n // Explicit dialog actions can close even when passive dismissal is disabled.\n onClose: (action?: string) => onClose?.(action, true),\n isDismissable,\n isOpen: state.isOpen,\n // Reaches `Dialog`'s `FocusScope`, which owns the restore for\n // popover-type dialogs (`Dialog` itself, for a retained one). `useDialog`\n // filters it out of the DOM props.\n shouldRestoreFocus,\n ...dialogProps,\n };\n\n // Whether focus has been claimed by something outside the closing dialog —\n // the signal that an action handed focus off and the trigger must not take\n // it back. Same rule as `MenuTrigger` (see CUB-3962): an action that opens\n // a panel, another dialog or an inline editor focuses that surface, and\n // restoring here would undo the hand-off.\n //\n // Focus still inside the overlay means nobody claimed it (the pressed\n // control keeps focus while the overlay plays its ~350ms exit animation),\n // and focus on `<body>` or on a detached node means the focused element\n // went away with the dialog. Both belong back on the trigger.\n const hasFocusMovedOutsideDialog = useEvent(() => {\n const activeElement = document.activeElement;\n\n if (!activeElement || activeElement === document.body) return false;\n if (!activeElement.isConnected) return false;\n\n return !(\n overlayRef?.current?.contains(activeElement) ||\n ref.current?.contains(activeElement)\n );\n });\n\n // Restore focus manually when the dialog closes.\n //\n // Live for modal/tray/fullscreen/panel types only: in the popover branch\n // `triggerProps` carries its own `ref`, which overrides the `ref={ref}` on\n // `PressResponder` below, so `ref.current` stays null and this is a no-op.\n // Popovers get their restore from `Dialog`'s own `<FocusScope restoreFocus>`\n // instead, or from `Dialog` at the end of the exit when `hideOnClose` keeps\n // that scope mounted; both decline to restore when focus moved elsewhere.\n useEffect(() => {\n if (!state.isOpen && wasOpenRef.current) {\n wasOpenRef.current = false;\n if (!shouldRestoreFocus) return;\n if (hasFocusMovedOutsideDialog()) return;\n ref.current?.focus();\n } else if (state.isOpen) {\n wasOpenRef.current = true;\n }\n }, [state.isOpen, shouldRestoreFocus, hasFocusMovedOutsideDialog]);\n\n // Mark popover-type DialogTrigger children with `data-popover-trigger` so\n // `Button` / `ItemButton`'s default dismiss-on-press behaviour treats them\n // as popover triggers (skips the dismiss). Modal/tray/fullscreen children\n // intentionally stay UNMARKED — when a modal-type DialogTrigger lives\n // inside a popover footer, pressing it should dismiss the parent popover\n // (matching the \"modal takes over\" native UX).\n const triggerExtraProps =\n type === 'popover' ? { 'data-popover-trigger': '' } : {};\n\n return (\n <Fragment>\n <PressResponder\n ref={ref}\n {...triggerProps}\n {...triggerExtraProps}\n isPressed={\n state.isOpen &&\n type !== 'modal' &&\n type !== 'fullscreen' &&\n type !== 'fullscreenTakeover'\n }\n onPress={state.toggle}\n >\n {trigger}\n </PressResponder>\n <DialogContext.Provider value={context}>{overlay}</DialogContext.Provider>\n </Fragment>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DialogTrigger.js","names":["PressResponder","useMediaQuery","Styles","Fragment","ReactElement","RefObject","useEffect","useMemo","useRef","OverlayTriggerProps","Placement","PositionProps","useOverlayPosition","useOverlayTrigger","OverlayTriggerState","useOverlayTriggerState","useEvent","generateRandomId","useCombinedRefs","useLayoutEffect","usePopoverSync","isOwnActionsPress","Modal","Popover","Tray","WithCloseBehavior","DialogContext","DialogContainer","useDialogOpenSync","DiscardChangesDialog","useDismissConfirmation","CubeDialogClose","close","CubeDialogTriggerProps","Omit","children","state","type","mobileType","placement","hideArrow","targetRef","HTMLElement","isDismissable","isKeyboardDismissDisabled","confirmDismiss","mobileViewport","styles","shouldCloseOnInteractOutside","element","Element","onDismiss","action","isOpen","onOpenChange","defaultOpen","shouldFlip","shouldUpdatePosition","containerPadding","shouldRestoreFocus","DialogTrigger","props","hideOnClose","positionProps","Array","isArray","length","Error","trigger","content","isMobile","wasOpen","isExiting","onExiting","current","onExited","dialogSyncId","syncTriggerRef","syncOverlayRef","isPopoverFlavored","menuId","onClose","triggerRef","containerRef","dismissOnInnerButtonPress","closeOnPeerOpen","emits","closes","overlayRef","console","warn","requestDismiss","registerUnsavedChanges","confirmationProps","fromAction","confirmation","renderOverlay","PopoverTrigger","allProps","$","_c","keepOpenOnScroll","t0","t1","t2","t3","t4","t5","t6","t7","t8","t9","t10","t11","t12","t13","t14","triggerType","t15","anchorRef","offset","crossOffset","overlayProps","popoverProps","arrowProps","updatePosition","overlayTriggerState","Symbol","for","triggerProps","undefined","ref","triggerPropsWithRef","el","ownTrigger","popoverTriggerEl","closest","setTimeout","contains","resolveShouldCloseOnInteractOutside","style","overlay","DialogTriggerBase","wasOpenRef","dialogProps","context","hasFocusMovedOutsideDialog","activeElement","document","body","isConnected","focus","triggerExtraProps","toggle","Modal","Tray","_c","Popover"],"sources":["../../../../src/components/overlays/Dialog/DialogTrigger.tsx"],"sourcesContent":["import { PressResponder } from '@react-aria/interactions';\nimport { useMediaQuery } from '@react-spectrum/utils';\nimport { Styles } from '@tenphi/tasty';\nimport {\n Fragment,\n ReactElement,\n RefObject,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport {\n OverlayTriggerProps,\n Placement,\n PositionProps,\n useOverlayPosition,\n useOverlayTrigger,\n} from 'react-aria';\nimport { OverlayTriggerState, useOverlayTriggerState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { generateRandomId } from '../../../utils/random';\nimport { useCombinedRefs, useLayoutEffect } from '../../../utils/react/index';\nimport { usePopoverSync } from '../../../utils/react/usePopoverSync';\nimport { isOwnActionsPress } from '../../actions/actions-run';\nimport { Modal, Popover, Tray, WithCloseBehavior } from '../Modal';\n\nimport { DialogContext } from './context';\nimport { DialogContainer } from './DialogContainer';\nimport { useDialogOpenSync } from './use-dialog-open-sync';\nimport {\n DiscardChangesDialog,\n useDismissConfirmation,\n} from './use-dismiss-confirmation';\n\nexport type CubeDialogClose = (close: () => void) => ReactElement;\n\nexport interface CubeDialogTriggerProps\n extends Omit<OverlayTriggerProps, 'type'>, PositionProps, WithCloseBehavior {\n /** The Dialog and its trigger element. See the DialogTrigger [Content section](#content) for more information on what to provide as children. */\n children: [\n ReactElement | ((state: OverlayTriggerState) => ReactElement),\n CubeDialogClose | ReactElement,\n ];\n /**\n * The type of Dialog that should be rendered. See the DialogTrigger [types section](#dialog-types) for an explanation on each.\n * @default 'modal'\n */\n type?:\n | 'modal'\n | 'popover'\n | 'tray'\n | 'fullscreen'\n | 'fullscreenTakeover'\n | 'panel';\n /** The type of Dialog rendered on mobile, defaulting to `type`. See DialogTrigger [types section](#dialog-types) for an explanation on each. */\n mobileType?:\n | 'modal'\n | 'tray'\n | 'fullscreen'\n | 'fullscreenTakeover'\n | 'panel'\n | 'popover';\n placement?: Placement;\n /**\n * Has no effect: popovers render no arrow.\n * @deprecated Popovers never render an arrow, so there is nothing to hide.\n */\n hideArrow?: boolean;\n /** 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. */\n targetRef?: RefObject<HTMLElement | null>;\n /**\n * Whether passive dismissal (Escape or an outside click) can close the dialog. Explicit dialog actions can still close it.\n * 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`.\n */\n isDismissable?: boolean;\n /** Whether pressing the escape key to close the dialog should be disabled. */\n isKeyboardDismissDisabled?: boolean;\n /**\n * Whether Escape, an outside click and the close button ask \"Discard\n * changes?\" before they close the dialog. Unset, they ask while a form\n * inside (a `DialogForm`, or a modern `Form`) has unsaved edits. Explicit\n * actions (submit, Cancel, the `close` function) never ask, and a popover\n * never does: it closes on its own in more ways than these.\n */\n confirmDismiss?: boolean;\n /** The screen breakpoint for the mobile type */\n mobileViewport?: number;\n /** The style map for the overlay **/\n styles?: Styles;\n shouldCloseOnInteractOutside?: (element: Element) => boolean;\n onDismiss?: (action?: string) => void;\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n defaultOpen?: boolean;\n shouldFlip?: boolean;\n shouldUpdatePosition?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /**\n * Whether focus returns to the trigger when the dialog closes. Defaults to\n * `true`.\n *\n * The restore is skipped automatically whenever the action that closed the\n * dialog has already moved focus somewhere else, so an action that opens a\n * panel/dialog/inline editor and focuses it needs nothing here. Pass `false`\n * for the remaining case: a surface that claims focus *later* than the\n * dialog's own restore (after an async load, an entry animation, or a\n * `requestAnimationFrame`), where the trigger would otherwise take focus\n * first and produce a visible flash.\n */\n shouldRestoreFocus?: boolean;\n}\n\n/**\n * DialogTrigger serves as a wrapper around a Dialog and its associated trigger, linking the Dialog's\n * open state with the trigger's press state. Additionally, it allows you to customize the type and\n * positioning of the Dialog.\n */\nexport function DialogTrigger(props: CubeDialogTriggerProps) {\n let {\n children,\n type = 'modal',\n mobileType = type,\n hideArrow,\n targetRef,\n onDismiss,\n isDismissable = true,\n isKeyboardDismissDisabled,\n confirmDismiss,\n styles,\n mobileViewport = 700,\n hideOnClose,\n shouldCloseOnInteractOutside,\n shouldRestoreFocus = true,\n ...positionProps\n } = props;\n\n if (!Array.isArray(children) || children.length > 2) {\n throw new Error('DialogTrigger must have exactly 2 children');\n }\n // if a function is passed as the second child, it won't appear in toArray\n let [trigger, content] = children;\n\n // Apply the mobile type at the configured breakpoint.\n let isMobile = useMediaQuery(`(max-width: ${mobileViewport}px)`);\n if (isMobile) {\n // handle cases where desktop popovers need a close button for the mobile modal view\n if (type !== 'modal' && mobileType === 'modal') {\n isDismissable = true;\n }\n\n type = mobileType;\n }\n\n let state = useOverlayTriggerState(props);\n\n if (typeof trigger === 'function') {\n trigger = trigger(state);\n }\n\n let wasOpen = useRef(false);\n let isExiting = useRef(false);\n let onExiting = () => (isExiting.current = true);\n let onExited = () => (isExiting.current = false);\n\n wasOpen.current = state.isOpen;\n\n // Shared identity + refs for `usePopoverSync`. Allocating here (rather than\n // inside the branch-specific sub-trees) keeps a single sync registration for\n // the lifetime of the trigger, even when `type` flips between popover and\n // modal at the mobile breakpoint. The refs are then threaded into the\n // appropriate branch so existing positioning / useOverlayTrigger hooks keep\n // their original ref targets and `usePopoverSync`'s `contains()` check has a\n // real DOM node to query.\n const dialogSyncId = useMemo(() => generateRandomId(), []);\n const syncTriggerRef = useRef<HTMLElement | null>(null);\n const syncOverlayRef = useRef<HTMLElement | null>(null);\n\n // Only popover-type Dialogs participate in the \"press inside dismisses\n // me\" / \"peer popover opening dismisses me\" behaviours: modals, trays,\n // fullscreen and panel Dialogs are persistent workspaces and must not be\n // yanked closed via the EventBus (which would bypass `isDismissable` and\n // call `state.close()` directly). Non-popover types DO still EMIT\n // `popover:open`, so opening a modal correctly dismisses peer popovers.\n //\n // A popover that is not dismissable does not listen to `popover:open`: a\n // peer popover leaves it open, as any other outside press does. A modal,\n // tray, fullscreen or panel Dialog opening still closes it, through\n // `useDialogOpenSync` below.\n const isPopoverFlavored = type === 'popover';\n usePopoverSync({\n menuId: dialogSyncId,\n isOpen: state.isOpen,\n onClose: () => state.close(),\n triggerRef: syncTriggerRef,\n containerRef: syncOverlayRef,\n dismissOnInnerButtonPress: isPopoverFlavored,\n closeOnPeerOpen: isPopoverFlavored && isDismissable,\n });\n useDialogOpenSync({\n emits: !isPopoverFlavored,\n closes: isPopoverFlavored && !isDismissable,\n state,\n triggerRef: syncTriggerRef,\n overlayRef: syncOverlayRef,\n });\n\n useEffect(() => {\n return () => {\n if (\n (wasOpen.current || isExiting.current) &&\n type !== 'popover' &&\n type !== 'tray'\n ) {\n console.warn(\n 'CubeUIKit: A DialogTrigger unmounted while open. This is likely due to being placed within a trigger that unmounts or inside a conditional. Consider using a DialogContainer instead.',\n );\n }\n };\n }, []);\n\n const { requestDismiss, registerUnsavedChanges, confirmationProps } =\n useDismissConfirmation(\n type === 'popover' ? false : confirmDismiss,\n state.isOpen,\n );\n\n function close(action?: string) {\n onDismiss && onDismiss(action);\n state.close();\n }\n\n // Explicit dialog actions close at once. A passive dismissal (Escape or an\n // outside click) needs `isDismissable`, and asks first while the dialog\n // holds unsaved edits.\n function onClose(action, fromAction = false) {\n if (fromAction) close(action);\n else if (isDismissable) requestDismiss(() => close(action));\n }\n\n const confirmation = confirmationProps && (\n <DialogContainer {...confirmationProps}>\n <DiscardChangesDialog />\n </DialogContainer>\n );\n\n if (type === 'popover') {\n return (\n <PopoverTrigger\n {...positionProps}\n hideOnClose={hideOnClose}\n state={state}\n styles={styles}\n targetRef={targetRef}\n trigger={trigger}\n content={content}\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n hideArrow={hideArrow}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n shouldRestoreFocus={shouldRestoreFocus}\n syncTriggerRef={syncTriggerRef}\n syncOverlayRef={syncOverlayRef}\n triggerType={type}\n onClose={onClose}\n />\n );\n }\n\n let renderOverlay = () => {\n switch (type) {\n case 'panel':\n case 'fullscreen':\n case 'fullscreenTakeover':\n case 'modal':\n return (\n <Modal\n ref={syncOverlayRef}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n isDismissable={isDismissable}\n type={type}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n styles={styles}\n shouldCloseOnInteractOutside={shouldCloseOnInteractOutside}\n onClose={onClose}\n onExiting={onExiting}\n onExited={onExited}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Modal>\n );\n case 'tray':\n return (\n <Tray\n ref={syncOverlayRef}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n styles={styles}\n onClose={onClose}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Tray>\n );\n }\n };\n\n return (\n <>\n <DialogTriggerBase\n type={type}\n state={state}\n isDismissable={isDismissable}\n trigger={trigger}\n overlay={renderOverlay()}\n hideOnClose={hideOnClose}\n syncTriggerRef={syncTriggerRef}\n overlayRef={syncOverlayRef}\n shouldRestoreFocus={shouldRestoreFocus}\n requestDismiss={requestDismiss}\n registerUnsavedChanges={registerUnsavedChanges}\n onClose={onClose}\n />\n {confirmation}\n </>\n );\n}\n\nfunction PopoverTrigger(allProps) {\n let {\n state,\n styles,\n targetRef,\n trigger,\n content,\n hideArrow,\n onClose,\n isDismissable,\n isKeyboardDismissDisabled,\n hideOnClose,\n shouldCloseOnInteractOutside,\n shouldRestoreFocus,\n keepOpenOnScroll,\n syncTriggerRef,\n syncOverlayRef,\n triggerType,\n ...props\n } = allProps;\n\n let triggerRef = useRef<HTMLButtonElement>(null);\n let overlayRef = useRef<HTMLDivElement>(null);\n // What the popover is positioned against, and closes on scroll with.\n let anchorRef = targetRef || triggerRef;\n\n // Mirror the trigger/overlay DOM nodes into the parent-owned sync refs.\n //\n // We deliberately do NOT use `useCombinedRefs` here: that hook returns a\n // brand new internal ref and propagates to the passed refs via a regular\n // `useEffect` (post-commit). `useOverlayPosition` below reads\n // `triggerRef.current` in its own layout effect during the SAME commit, so\n // if `triggerRef` only receives the DOM node via a delayed effect, the\n // first measurement sees `null` and the popover positions at the document\n // origin until something forces a re-measure.\n //\n // Keeping `triggerRef`/`overlayRef` as the direct React refs preserves\n // synchronous assignment for `useOverlayPosition`. The sync refs are only\n // ever read inside `popover:open` handlers, which fire via setTimeout(0),\n // so a layout-effect mirror is more than fast enough.\n useLayoutEffect(() => {\n if (syncTriggerRef) {\n syncTriggerRef.current = targetRef?.current ?? triggerRef.current ?? null;\n }\n if (syncOverlayRef) {\n syncOverlayRef.current = overlayRef.current ?? null;\n }\n });\n\n let {\n overlayProps: popoverProps,\n placement,\n arrowProps,\n updatePosition,\n } = useOverlayPosition({\n targetRef: anchorRef,\n overlayRef: overlayRef,\n placement: props.placement,\n containerPadding: props.containerPadding,\n offset: props.offset ?? 8,\n crossOffset: props.crossOffset,\n shouldFlip: props.shouldFlip,\n shouldUpdatePosition: props.shouldUpdatePosition,\n isOpen: state.isOpen,\n });\n\n let overlayTriggerState = state;\n\n if (keepOpenOnScroll) {\n overlayTriggerState = { ...state, close: updatePosition };\n }\n\n // Registers the close (or, with `keepOpenOnScroll`, the reposition) that\n // `useOverlayPosition` runs when the anchor scrolls. It is looked up by the\n // anchor element, so it has to be registered there: with `targetRef` the\n // trigger ref is never attached, and the popover stayed open while its\n // anchor scrolled away.\n let { triggerProps, overlayProps } = useOverlayTrigger(\n { type: 'dialog' },\n overlayTriggerState,\n anchorRef,\n );\n\n let triggerPropsWithRef = {\n ...triggerProps,\n ref: targetRef ? undefined : triggerRef,\n };\n\n // Mirror the Select/ComboBox/MenuTrigger pattern: when an outside click lands\n // on ANOTHER popover trigger, return `false` so react-aria's `useOverlay`\n // does NOT `stopPropagation()` the click. The click then reaches that trigger,\n // its popover opens, and `usePopoverSync` closes this one via the EventBus.\n // Without this, react-aria swallows every outside click and a single click on\n // a sibling trigger can't open it while this popover is open.\n const resolveShouldCloseOnInteractOutside = useEvent(\n (el: Element): boolean => {\n // The caller's own predicate is asked FIRST, so an explicit \"keep me open\n // for this element\" wins over every automatic behaviour below (CUB-4113).\n // It used to be consulted last, which made the prop inert for every\n // `Button` / `ItemButton`: those carry `data-popover-dismiss`, so the\n // auto-dismiss branch matched and closed the popover before the predicate\n // was ever asked.\n //\n // Asked before every lookup below, not just inside the \"outside any\n // trigger\" branch: a trigger can own interactive controls of its own, and\n // those used to be decided without the predicate ever being asked.\n //\n // React Aria hands over the element the pointer landed on — for a\n // `Button` that is the label inside it, not the `<button>` — so a\n // predicate that guards an element has to use `contains()` rather than an\n // identity check.\n if (shouldCloseOnInteractOutside && !shouldCloseOnInteractOutside(el)) {\n return false;\n }\n\n const ownTrigger = targetRef?.current ?? triggerRef.current;\n\n // A press on our OWN trigger's actions run — an `ItemButton` row's\n // `actions`, a picker's clear button — is not a press outside. The run is\n // rendered as a sibling of the trigger (see `ItemActionsWrapper`), so the\n // `contains` checks below cannot recognise it and we dismissed instead,\n // which cost the action its press: the first press on `Reset` while the\n // popover was open only closed the popover and never ran.\n if (isOwnActionsPress(el, ownTrigger)) return false;\n\n const popoverTriggerEl = el.closest('[data-popover-trigger]');\n if (!popoverTriggerEl) {\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss`. Schedule the close after the click finishes so\n // the control's `onPress` runs first instead of losing the click to\n // useOverlay's stopPropagation.\n if (el.closest('[data-popover-dismiss]')) {\n setTimeout(() => state.close(), 0);\n return false;\n }\n return true;\n }\n // Clicking our own trigger again should dismiss us.\n if (popoverTriggerEl === ownTrigger || ownTrigger?.contains(el))\n return true;\n // Another popover's trigger: let the click through so it can open.\n return false;\n },\n );\n\n let overlay = (\n <Popover\n ref={overlayRef}\n styles={styles}\n hideOnClose={hideOnClose}\n isOpen={state.isOpen}\n // oxlint-disable-next-line tasty/no-style-prop -- React Aria's overlay positioning computes these coordinates\n style={popoverProps.style}\n placement={placement ?? undefined}\n arrowProps={arrowProps}\n // Not dismissable: an outside press is left alone entirely, so it\n // reaches the control it landed on and nothing below is asked.\n isDismissable={isDismissable}\n isKeyboardDismissDisabled={isKeyboardDismissDisabled}\n hideArrow={hideArrow}\n shouldCloseOnInteractOutside={resolveShouldCloseOnInteractOutside}\n onClose={onClose}\n >\n {typeof content === 'function' ? content(state.close) : content}\n </Popover>\n );\n\n return (\n <DialogTriggerBase\n type=\"popover\"\n state={state}\n triggerProps={triggerPropsWithRef}\n dialogProps={overlayProps}\n trigger={trigger}\n overlay={overlay}\n overlayRef={overlayRef}\n isDismissable={isDismissable}\n shouldRestoreFocus={shouldRestoreFocus}\n onClose={onClose}\n />\n );\n}\n\nfunction DialogTriggerBase(props: any) {\n const ref = useCombinedRefs<HTMLElement>(props.ref);\n const wasOpenRef = useRef(false);\n const overlayRef: RefObject<HTMLElement | null> | undefined =\n props.overlayRef;\n\n // Mirror the press-responder DOM node into the parent's sync trigger ref.\n // Done via `useLayoutEffect` rather than threading through `useCombinedRefs`\n // for consistency with `PopoverTrigger` (see comment there) — keeps the\n // sync-ref population deterministic regardless of branch.\n useLayoutEffect(() => {\n if (props.syncTriggerRef) {\n props.syncTriggerRef.current = ref.current ?? null;\n }\n });\n\n let {\n type,\n state,\n onClose,\n isDismissable,\n dialogProps = {},\n triggerProps = {},\n overlay,\n trigger,\n shouldRestoreFocus = true,\n requestDismiss,\n registerUnsavedChanges,\n } = props;\n\n let context = {\n type,\n // Explicit dialog actions can close even when passive dismissal is disabled.\n onClose: (action?: string) => onClose?.(action, true),\n isDismissable,\n isOpen: state.isOpen,\n requestDismiss,\n registerUnsavedChanges,\n // Reaches `Dialog`'s `FocusScope`, which owns the restore for\n // popover-type dialogs (`Dialog` itself, for a retained one). `useDialog`\n // filters it out of the DOM props.\n shouldRestoreFocus,\n ...dialogProps,\n };\n\n // Whether focus has been claimed by something outside the closing dialog —\n // the signal that an action handed focus off and the trigger must not take\n // it back. Same rule as `MenuTrigger` (see CUB-3962): an action that opens\n // a panel, another dialog or an inline editor focuses that surface, and\n // restoring here would undo the hand-off.\n //\n // Focus still inside the overlay means nobody claimed it (the pressed\n // control keeps focus while the overlay plays its ~350ms exit animation),\n // and focus on `<body>` or on a detached node means the focused element\n // went away with the dialog. Both belong back on the trigger.\n const hasFocusMovedOutsideDialog = useEvent(() => {\n const activeElement = document.activeElement;\n\n if (!activeElement || activeElement === document.body) return false;\n if (!activeElement.isConnected) return false;\n\n return !(\n overlayRef?.current?.contains(activeElement) ||\n ref.current?.contains(activeElement)\n );\n });\n\n // Restore focus manually when the dialog closes.\n //\n // Live for modal/tray/fullscreen/panel types only: in the popover branch\n // `triggerProps` carries its own `ref`, which overrides the `ref={ref}` on\n // `PressResponder` below, so `ref.current` stays null and this is a no-op.\n // Popovers get their restore from `Dialog`'s own `<FocusScope restoreFocus>`\n // instead, or from `Dialog` at the end of the exit when `hideOnClose` keeps\n // that scope mounted; both decline to restore when focus moved elsewhere.\n useEffect(() => {\n if (!state.isOpen && wasOpenRef.current) {\n wasOpenRef.current = false;\n if (!shouldRestoreFocus) return;\n if (hasFocusMovedOutsideDialog()) return;\n ref.current?.focus();\n } else if (state.isOpen) {\n wasOpenRef.current = true;\n }\n }, [state.isOpen, shouldRestoreFocus, hasFocusMovedOutsideDialog]);\n\n // Mark popover-type DialogTrigger children with `data-popover-trigger` so\n // `Button` / `ItemButton`'s default dismiss-on-press behaviour treats them\n // as popover triggers (skips the dismiss). Modal/tray/fullscreen children\n // intentionally stay UNMARKED — when a modal-type DialogTrigger lives\n // inside a popover footer, pressing it should dismiss the parent popover\n // (matching the \"modal takes over\" native UX).\n const triggerExtraProps =\n type === 'popover' ? { 'data-popover-trigger': '' } : {};\n\n return (\n <Fragment>\n <PressResponder\n ref={ref}\n {...triggerProps}\n {...triggerExtraProps}\n isPressed={\n state.isOpen &&\n type !== 'modal' &&\n type !== 'fullscreen' &&\n type !== 'fullscreenTakeover'\n }\n onPress={state.toggle}\n >\n {trigger}\n </PressResponder>\n <DialogContext.Provider value={context}>{overlay}</DialogContext.Provider>\n </Fragment>\n );\n}\n"],"mappings":"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"}