@cube-dev/ui-kit 0.0.0-canary-266381a → 0.0.0-canary-367446a

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 (583) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.js +1 -1
  18. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  19. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  20. package/dist/components/actions/ButtonSplit/context.js +1 -1
  21. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  22. package/dist/components/actions/CommandMenu/styled.js +1 -1
  23. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  24. package/dist/components/actions/ItemActionContext.js +1 -1
  25. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/actions-run.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.js +1 -1
  59. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  77. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  78. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  79. package/dist/components/content/Layout/index.js +1 -1
  80. package/dist/components/content/Layout/utils.js +1 -1
  81. package/dist/components/content/Paragraph.js +1 -1
  82. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  83. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  84. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  85. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  86. package/dist/components/content/Result/Result.js +1 -1
  87. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  88. package/dist/components/content/Tag/Tag.js +1 -1
  89. package/dist/components/content/Text.js +1 -1
  90. package/dist/components/content/TextItem/TextItem.js +1 -1
  91. package/dist/components/content/Title.js +1 -1
  92. package/dist/components/content/Tree/Tree.js +1 -1
  93. package/dist/components/content/Tree/TreeNode.js +1 -1
  94. package/dist/components/content/Tree/styled.js +1 -1
  95. package/dist/components/content/Tree/tree-index.js +1 -1
  96. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  97. package/dist/components/content/Tree/use-load-data.js +1 -1
  98. package/dist/components/content/highlightText.js +1 -1
  99. package/dist/components/content/use-auto-tooltip.js +1 -1
  100. package/dist/components/data/DataTable/DataTable.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  106. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  107. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  108. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  109. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  110. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  111. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  112. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  113. package/dist/components/data/TableBase/RowCollection.js +1 -1
  114. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  115. package/dist/components/data/TableBase/TableRow.js +1 -1
  116. package/dist/components/data/TableBase/TableView.js +1 -1
  117. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  118. package/dist/components/data/TableBase/column-header.js +1 -1
  119. package/dist/components/data/TableBase/column-menu.js +1 -1
  120. package/dist/components/data/TableBase/column-styles.js +1 -1
  121. package/dist/components/data/TableBase/column-tint.js +1 -1
  122. package/dist/components/data/TableBase/row-menu.js +1 -1
  123. package/dist/components/data/TableBase/styled.js +1 -1
  124. package/dist/components/data/TableBase/table-tree.js +1 -1
  125. package/dist/components/data/TableBase/types.js +1 -1
  126. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  127. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  128. package/dist/components/data/TableBase/use-column-order.js +1 -1
  129. package/dist/components/data/TableBase/use-column-window.js +1 -1
  130. package/dist/components/data/TableBase/use-container-width.js +1 -1
  131. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  132. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  133. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  134. package/dist/components/data/TableBase/use-table-search.js +1 -1
  135. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  136. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  137. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  138. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  139. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  140. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  141. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  142. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  143. package/dist/components/fields/Checkbox/context.js +1 -1
  144. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  145. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  146. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  147. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  148. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  149. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  150. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  151. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  152. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  153. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  155. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  159. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  160. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  161. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  162. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  163. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  164. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  165. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  167. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  168. package/dist/components/fields/DatePicker/period.js +1 -1
  169. package/dist/components/fields/DatePicker/props.js +1 -1
  170. package/dist/components/fields/DatePicker/utils.js +1 -1
  171. package/dist/components/fields/FileInput/FileInput.js +1 -1
  172. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  173. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  174. package/dist/components/fields/Input/Input.js +1 -1
  175. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  176. package/dist/components/fields/ListBox/ListBox.js +1 -1
  177. package/dist/components/fields/ListBox/optionId.js +1 -1
  178. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  179. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  180. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  181. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  182. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  183. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  184. package/dist/components/fields/Picker/Picker.js +1 -1
  185. package/dist/components/fields/RadioGroup/Radio.d.ts +4 -4
  186. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  187. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  188. package/dist/components/fields/RadioGroup/context.js +1 -1
  189. package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -2
  190. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  191. package/dist/components/fields/SearchInput/SearchInput.js +2 -2
  192. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  193. package/dist/components/fields/Select/Select.js +1 -1
  194. package/dist/components/fields/Slider/Gradation.js +1 -1
  195. package/dist/components/fields/Slider/HueSlider.js +1 -1
  196. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  197. package/dist/components/fields/Slider/Slider.js +1 -1
  198. package/dist/components/fields/Slider/SliderBase.js +1 -1
  199. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  200. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  201. package/dist/components/fields/Slider/elements.js +1 -1
  202. package/dist/components/fields/Slider/index.js +1 -1
  203. package/dist/components/fields/Switch/Switch.js +1 -1
  204. package/dist/components/fields/TagInput/TagInput.js +335 -329
  205. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  206. package/dist/components/fields/TagInput/TagList.js +1 -1
  207. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  208. package/dist/components/fields/TagInput/useTagError.js +1 -1
  209. package/dist/components/fields/TextArea/TextArea.js +1 -1
  210. package/dist/components/fields/TextInput/TextInput.js +1 -1
  211. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  212. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  213. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  214. package/dist/components/fields/TriggerActions.js +1 -1
  215. package/dist/components/fields/color/ColorPanel.js +1 -1
  216. package/dist/components/fields/color/channels.js +1 -1
  217. package/dist/components/fields/color/color.js +1 -1
  218. package/dist/components/fields/color/context.js +1 -1
  219. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  220. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  221. package/dist/components/form/Form/Field.js +1 -1
  222. package/dist/components/form/Form/Form.js +1 -1
  223. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  224. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  225. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  226. package/dist/components/form/Form/SubmitError.js +1 -1
  227. package/dist/components/form/Form/backend.js +1 -1
  228. package/dist/components/form/Form/index.js +1 -1
  229. package/dist/components/form/Form/modern/actions.js +1 -1
  230. package/dist/components/form/Form/modern/context.js +1 -1
  231. package/dist/components/form/Form/modern/controller.js +1 -1
  232. package/dist/components/form/Form/modern/field-binding.js +1 -1
  233. package/dist/components/form/Form/modern/field.js +1 -1
  234. package/dist/components/form/Form/modern/react.js +1 -1
  235. package/dist/components/form/Form/modern/store.js +1 -1
  236. package/dist/components/form/Form/modern/validation.js +1 -1
  237. package/dist/components/form/Form/modern/values.js +1 -1
  238. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  239. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  240. package/dist/components/form/Form/use-field/use-field-props.js +26 -22
  241. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  242. package/dist/components/form/Form/use-field/use-field.js +1 -1
  243. package/dist/components/form/Form/use-form.js +1 -1
  244. package/dist/components/form/Form/validation.js +1 -1
  245. package/dist/components/form/Label.js +1 -1
  246. package/dist/components/form/field-chrome.js +30 -10
  247. package/dist/components/form/field-chrome.js.map +1 -1
  248. package/dist/components/form/index.d.ts +1 -1
  249. package/dist/components/form/legacy-tooltip.js +1 -1
  250. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  251. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  252. package/dist/components/form/validation/use-validation-props.js +1 -1
  253. package/dist/components/form/wrapper.d.ts +15 -4
  254. package/dist/components/form/wrapper.js +16 -6
  255. package/dist/components/form/wrapper.js.map +1 -1
  256. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  257. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  258. package/dist/components/layout/Flex.js +1 -1
  259. package/dist/components/layout/Flow.js +1 -1
  260. package/dist/components/layout/Grid.js +1 -1
  261. package/dist/components/layout/Panel.js +1 -1
  262. package/dist/components/layout/Prefix.js +1 -1
  263. package/dist/components/layout/ResizablePanel.js +1 -1
  264. package/dist/components/layout/Space.js +1 -1
  265. package/dist/components/layout/Suffix.js +1 -1
  266. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  267. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  268. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  269. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  270. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  271. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  272. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  273. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  274. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  275. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  276. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  277. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  278. package/dist/components/navigation/Tabs/styled.js +1 -1
  279. package/dist/components/navigation/Tabs/types.js +1 -1
  280. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  281. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  282. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  283. package/dist/components/other/Calendar/Calendar.js +1 -1
  284. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  285. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  286. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  287. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  288. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  289. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  290. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  291. package/dist/components/other/Calendar/styled.js +1 -1
  292. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  293. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  294. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  295. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.d.ts +15 -4
  296. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +83 -14
  297. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  298. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  299. package/dist/components/overlays/AlertDialog/types.d.ts +2 -1
  300. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  301. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  302. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  303. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  304. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  305. package/dist/components/overlays/Dialog/context.js +1 -1
  306. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  307. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  308. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  309. package/dist/components/overlays/Modal/Modal.js +1 -1
  310. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  311. package/dist/components/overlays/Modal/Overlay.js +1 -1
  312. package/dist/components/overlays/Modal/Popover.js +1 -1
  313. package/dist/components/overlays/Modal/Tray.js +1 -1
  314. package/dist/components/overlays/Modal/Underlay.js +1 -1
  315. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  316. package/dist/components/overlays/Notifications/Notification.js +1 -1
  317. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  318. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  319. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  320. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  321. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  322. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  323. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  324. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  325. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  326. package/dist/components/overlays/Notifications/index.js +1 -1
  327. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  328. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  329. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  330. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  331. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  332. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  333. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  334. package/dist/components/overlays/Toast/index.js +1 -1
  335. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  336. package/dist/components/overlays/Toast/useToast.js +1 -1
  337. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  338. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  339. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  340. package/dist/components/overlays/Tooltip/context.js +1 -1
  341. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  342. package/dist/components/portal/Portal.js +1 -1
  343. package/dist/components/portal/PortalProvider.js +1 -1
  344. package/dist/components/portal/usePortal.js +1 -1
  345. package/dist/components/shared/DraggableCollection.js +1 -1
  346. package/dist/components/shared/InvalidIcon.js +1 -1
  347. package/dist/components/shared/ValidIcon.js +1 -1
  348. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  349. package/dist/components/status/Spin/Cube.js +1 -1
  350. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  351. package/dist/components/status/Spin/Spin.js +1 -1
  352. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  353. package/dist/data/item-themes.js +1 -1
  354. package/dist/data/themes.js +1 -1
  355. package/dist/eslint-plugin/defaults.generated.js +1 -1
  356. package/dist/eslint-plugin/index.js +1 -1
  357. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  358. package/dist/i18n/I18nProvider.js +1 -1
  359. package/dist/i18n/createFormatter.js +1 -1
  360. package/dist/i18n/index.js +1 -1
  361. package/dist/i18n/instance.js +1 -1
  362. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  363. package/dist/i18n/locales/en-US/uikit.js +1 -1
  364. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  365. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  366. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  367. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  368. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  369. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  370. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  371. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  372. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  373. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  374. package/dist/i18n/locales.js +1 -1
  375. package/dist/i18n/namespace.js +1 -1
  376. package/dist/i18n/useFormatter.js +1 -1
  377. package/dist/i18n/useI18n.js +1 -1
  378. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  379. package/dist/icons/AdjustmentsIcon.js +1 -1
  380. package/dist/icons/AiIcon.js +1 -1
  381. package/dist/icons/AreaChartIcon.js +1 -1
  382. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  383. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  384. package/dist/icons/BackwardIcon.js +1 -1
  385. package/dist/icons/BarChartIcon.js +1 -1
  386. package/dist/icons/BellFilledIcon.js +1 -1
  387. package/dist/icons/BellIcon.js +1 -1
  388. package/dist/icons/BooleanIcon.js +1 -1
  389. package/dist/icons/CalendarEditIcon.js +1 -1
  390. package/dist/icons/CalendarIcon.js +1 -1
  391. package/dist/icons/CaretDownIcon.js +1 -1
  392. package/dist/icons/CaretUpIcon.js +1 -1
  393. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  394. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  395. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  396. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  397. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  398. package/dist/icons/ChartBarLineIcon.js +1 -1
  399. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  400. package/dist/icons/ChartBarStackedIcon.js +1 -1
  401. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  402. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  403. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  404. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  405. package/dist/icons/ChartBubbleIcon.js +1 -1
  406. package/dist/icons/ChartDonut2Icon.js +1 -1
  407. package/dist/icons/ChartFunnelIcon.js +1 -1
  408. package/dist/icons/ChartHeatmapIcon.js +1 -1
  409. package/dist/icons/ChartKPIIcon.js +1 -1
  410. package/dist/icons/ChartPie2Icon.js +1 -1
  411. package/dist/icons/ChartScatterIcon.js +1 -1
  412. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  413. package/dist/icons/CheckCircleIcon.js +1 -1
  414. package/dist/icons/CheckIcon.js +1 -1
  415. package/dist/icons/CircleFilledIcon.js +1 -1
  416. package/dist/icons/ClearIcon.js +1 -1
  417. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  418. package/dist/icons/CloseCircleIcon.js +1 -1
  419. package/dist/icons/CloseIcon.js +1 -1
  420. package/dist/icons/CodeIcon.js +1 -1
  421. package/dist/icons/ColumnTotalIcon.js +1 -1
  422. package/dist/icons/CopyIcon.js +1 -1
  423. package/dist/icons/CountIcon.js +1 -1
  424. package/dist/icons/CubeIcon.js +1 -1
  425. package/dist/icons/CubePauseIcon.js +1 -1
  426. package/dist/icons/CubePlayIcon.js +1 -1
  427. package/dist/icons/CurrencyDollarIcon.js +1 -1
  428. package/dist/icons/DangerIcon.js +1 -1
  429. package/dist/icons/DashboardIcon.js +1 -1
  430. package/dist/icons/DatabaseIcon.js +1 -1
  431. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  432. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  433. package/dist/icons/DirectionIcon.js +1 -1
  434. package/dist/icons/DonutIcon.js +1 -1
  435. package/dist/icons/DownIcon.js +1 -1
  436. package/dist/icons/EditIcon.js +1 -1
  437. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  438. package/dist/icons/ExclamationCircleIcon.js +1 -1
  439. package/dist/icons/ExclamationIcon.js +1 -1
  440. package/dist/icons/EyeIcon.js +1 -1
  441. package/dist/icons/EyeInvisibleIcon.js +1 -1
  442. package/dist/icons/FilterIcon.js +1 -1
  443. package/dist/icons/FolderFilledIcon.js +1 -1
  444. package/dist/icons/FolderIcon.js +1 -1
  445. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  446. package/dist/icons/FolderOpenIcon.js +1 -1
  447. package/dist/icons/ForwardIcon.js +1 -1
  448. package/dist/icons/GripVerticalIcon.js +1 -1
  449. package/dist/icons/HierarchyIcon.js +1 -1
  450. package/dist/icons/HierarchyOpenIcon.js +1 -1
  451. package/dist/icons/Icon.js +1 -1
  452. package/dist/icons/InfoCircleIcon.js +1 -1
  453. package/dist/icons/InfoIcon.js +1 -1
  454. package/dist/icons/KeyIcon.js +1 -1
  455. package/dist/icons/LeftIcon.js +1 -1
  456. package/dist/icons/LineChartIcon.js +1 -1
  457. package/dist/icons/LoadingIcon.js +1 -1
  458. package/dist/icons/LockFilledIcon.js +1 -1
  459. package/dist/icons/LockIcon.js +1 -1
  460. package/dist/icons/MoreIcon.js +1 -1
  461. package/dist/icons/NotAllowedIcon.js +1 -1
  462. package/dist/icons/Number123Icon.js +1 -1
  463. package/dist/icons/NumberIcon.js +1 -1
  464. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  465. package/dist/icons/PauseCircleIcon.js +1 -1
  466. package/dist/icons/PauseIcon.js +1 -1
  467. package/dist/icons/PercentageIcon.js +1 -1
  468. package/dist/icons/PieChartIcon.js +1 -1
  469. package/dist/icons/PipetteIcon.js +1 -1
  470. package/dist/icons/PlayCircleIcon.js +1 -1
  471. package/dist/icons/PlayIcon.js +1 -1
  472. package/dist/icons/PlusIcon.js +1 -1
  473. package/dist/icons/ProgressBarIcon.js +1 -1
  474. package/dist/icons/ReloadIcon.js +1 -1
  475. package/dist/icons/ReportIcon.js +1 -1
  476. package/dist/icons/ReturnIcon.js +1 -1
  477. package/dist/icons/RightIcon.js +1 -1
  478. package/dist/icons/RowTotalsIcon.js +1 -1
  479. package/dist/icons/SchemeIcon.js +1 -1
  480. package/dist/icons/SearchIcon.js +1 -1
  481. package/dist/icons/SemanticQueryIcon.js +1 -1
  482. package/dist/icons/SettingsIcon.js +1 -1
  483. package/dist/icons/ShieldFilledIcon.js +1 -1
  484. package/dist/icons/ShieldIcon.js +1 -1
  485. package/dist/icons/SlashIcon.js +1 -1
  486. package/dist/icons/SparklesIcon.js +1 -1
  487. package/dist/icons/SqlIcon.js +1 -1
  488. package/dist/icons/StatsIcon.js +1 -1
  489. package/dist/icons/StopIcon.js +1 -1
  490. package/dist/icons/StringIcon.js +1 -1
  491. package/dist/icons/SubtotalsIcon.js +1 -1
  492. package/dist/icons/SwitchIcon.js +1 -1
  493. package/dist/icons/TableIcon.js +1 -1
  494. package/dist/icons/ThumbsDownIcon.js +1 -1
  495. package/dist/icons/ThumbsUpIcon.js +1 -1
  496. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  497. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  498. package/dist/icons/ThunderboltIcon.js +1 -1
  499. package/dist/icons/TimeIcon.js +1 -1
  500. package/dist/icons/TrashIcon.js +1 -1
  501. package/dist/icons/UnlockIcon.js +1 -1
  502. package/dist/icons/UpIcon.js +1 -1
  503. package/dist/icons/UserGroupIcon.js +1 -1
  504. package/dist/icons/UserIcon.js +1 -1
  505. package/dist/icons/UserLockIcon.js +1 -1
  506. package/dist/icons/ViewIcon.js +1 -1
  507. package/dist/icons/WarningFilledIcon.js +1 -1
  508. package/dist/icons/WarningIcon.js +1 -1
  509. package/dist/icons/wrap-icon.js +1 -1
  510. package/dist/index.d.ts +2 -2
  511. package/dist/index.js +3 -3
  512. package/dist/probe/canonicalize.js +1 -1
  513. package/dist/probe/css.js +1 -1
  514. package/dist/probe/index.js +1 -1
  515. package/dist/provider.js +1 -1
  516. package/dist/providers/TrackingProvider.js +1 -1
  517. package/dist/providers/navigation-url.js +1 -1
  518. package/dist/providers/navigationAdapter.default.js +1 -1
  519. package/dist/providers/use-navigation.js +1 -1
  520. package/dist/shared/form.d.ts +13 -11
  521. package/dist/tokens/all-tokens.js +1 -1
  522. package/dist/tokens/base.js +1 -1
  523. package/dist/tokens/color-seed.js +1 -1
  524. package/dist/tokens/color-theme.js +1 -1
  525. package/dist/tokens/colors.js +1 -1
  526. package/dist/tokens/layout.js +1 -1
  527. package/dist/tokens/lazy-styles.js +1 -1
  528. package/dist/tokens/legacy-color.js +1 -1
  529. package/dist/tokens/palette-config.js +1 -1
  530. package/dist/tokens/palette.js +1 -1
  531. package/dist/tokens/resolve.js +1 -1
  532. package/dist/tokens/shadows.js +1 -1
  533. package/dist/tokens/sizes.js +1 -1
  534. package/dist/tokens/spacing.js +1 -1
  535. package/dist/tokens/typography.js +1 -1
  536. package/dist/utils/ResizeSensor.js +1 -1
  537. package/dist/utils/colors.js +1 -1
  538. package/dist/utils/dotize.js +1 -1
  539. package/dist/utils/is-dev-env.js +1 -1
  540. package/dist/utils/modules.js +1 -1
  541. package/dist/utils/promise.js +1 -1
  542. package/dist/utils/raf.js +1 -1
  543. package/dist/utils/random.js +1 -1
  544. package/dist/utils/range.js +1 -1
  545. package/dist/utils/react/RenderCache.js +1 -1
  546. package/dist/utils/react/Slots.js +1 -1
  547. package/dist/utils/react/chain.js +1 -1
  548. package/dist/utils/react/disabledProps.js +1 -1
  549. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  550. package/dist/utils/react/index.js +1 -1
  551. package/dist/utils/react/interactions.js +1 -1
  552. package/dist/utils/react/isTextOnly.js +1 -1
  553. package/dist/utils/react/mapProps.js +1 -1
  554. package/dist/utils/react/mergeProps.js +1 -1
  555. package/dist/utils/react/nullableValue.js +1 -1
  556. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  557. package/dist/utils/react/programmaticFocus.js +1 -1
  558. package/dist/utils/react/resolveIcon.js +1 -1
  559. package/dist/utils/react/sharedStore.js +1 -1
  560. package/dist/utils/react/useBufferedValue.js +1 -1
  561. package/dist/utils/react/useCombinedRefs.js +1 -1
  562. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  563. package/dist/utils/react/useEventBus.js +1 -1
  564. package/dist/utils/react/useId.js +1 -1
  565. package/dist/utils/react/useIsDarwin.js +1 -1
  566. package/dist/utils/react/useKeySymbols.js +1 -1
  567. package/dist/utils/react/useLayoutEffect.js +1 -1
  568. package/dist/utils/react/useLocalStorage.js +1 -1
  569. package/dist/utils/react/useMergeStyles.js +1 -1
  570. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  571. package/dist/utils/react/usePopoverSync.js +1 -1
  572. package/dist/utils/react/useQaProps.js +1 -1
  573. package/dist/utils/react/useScheme.js +1 -1
  574. package/dist/utils/react/useViewportSize.js +1 -1
  575. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  576. package/dist/utils/selection.js +1 -1
  577. package/dist/utils/styles.js +1 -1
  578. package/dist/utils/tree.js +1 -1
  579. package/dist/utils/warnings.js +1 -1
  580. package/dist/version.js +2 -2
  581. package/docs/FieldProperties.md +3 -3
  582. package/docs/components/overlays/AlertDialog.md +38 -4
  583. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","names":["DOMRef","FocusableRef","BaseProps","ReactElement","RefObject","FieldBaseProps","FormBaseProps","mergeProps","FieldWrapper","warnAboutLegacyTooltip","WrapWithFieldProps","Omit","wrapWithField","component","ref","HTMLElement","props","T","forceField","label","extra","labelPosition","labelStyles","isRequired","isOptional","isDisabled","necessityIndicator","message","messageStyles","description","errorMessage","isInvalid","isValid","labelProps","fieldProps","fieldStyles","requiredMark","labelTooltip","isHidden","labelSuffix","mergedFieldProps","styles","mergedLabelProps","id","_id","fieldPropsWithoutId","Component","controlId"],"sources":["../../../src/components/form/wrapper.tsx"],"sourcesContent":["import { DOMRef, FocusableRef } from '@react-types/shared';\nimport { BaseProps } from '@tenphi/tasty';\nimport { ReactElement, RefObject } from 'react';\n\nimport { FieldBaseProps, FormBaseProps } from '../../shared/index';\nimport { mergeProps } from '../../utils/react/index';\n\nimport { FieldWrapper } from './FieldWrapper/index';\nimport { warnAboutLegacyTooltip } from './legacy-tooltip';\n\n// `children` is intentionally omitted: the input is passed as `component`, never through props.\ninterface WrapWithFieldProps\n extends FieldBaseProps,\n Omit<BaseProps, 'children'>,\n FormBaseProps {}\n\n/**\n * Wraps an input with the field chrome (label, description, message) when it has a `label` or `forceField`.\n * `useFieldProps` sets `forceField` for a field without a label that is passed a description or a message, unless it is `isBare`.\n * Only the field wrapper props are forwarded, so callers can pass their whole props object as is.\n */\nexport function wrapWithField<T extends WrapWithFieldProps>(\n component: ReactElement,\n ref: RefObject<unknown> | FocusableRef<HTMLElement> | DOMRef<HTMLElement>,\n props: T,\n) {\n let {\n forceField,\n label,\n extra,\n labelPosition = 'top',\n labelStyles,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n labelProps,\n fieldProps,\n fieldStyles,\n requiredMark = true,\n labelTooltip,\n isHidden,\n labelSuffix,\n } = props;\n\n if (!label && !forceField) {\n return component;\n }\n\n warnAboutLegacyTooltip(props);\n\n // Merge fieldStyles as shorthand for fieldProps.styles (fieldStyles takes priority)\n const mergedFieldProps = fieldStyles\n ? mergeProps(fieldProps, { styles: fieldStyles })\n : fieldProps;\n\n // Merge labelStyles as shorthand for labelProps.styles (labelStyles takes priority)\n const mergedLabelProps = labelStyles\n ? mergeProps(labelProps, { styles: labelStyles })\n : labelProps;\n\n // Remove id from fieldProps to avoid duplication (id should be on the input element, not the field wrapper)\n const { id: _id, ...fieldPropsWithoutId } = (mergedFieldProps as any) || {};\n\n return (\n <FieldWrapper\n {...{\n label,\n extra,\n labelPosition,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n labelProps: mergedLabelProps,\n fieldProps: fieldPropsWithoutId,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n requiredMark,\n labelTooltip,\n isHidden,\n labelSuffix,\n Component: component,\n // Where the description and message ids come from; see\n // `useFieldDescribedBy`, which points the control at them.\n controlId: props.id,\n ref,\n }}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAgBY,cACdC,WACAC,KACAE,OACA;CACA,IAAI,EACFE,YACAC,OACAC,OACAC,gBAAgB,OAChBC,aACAC,YACAC,YACAC,YACAC,oBACAC,SACAC,eACAC,aACAC,cACAC,WACAC,SACAC,YACAC,YACAC,aACAC,eAAe,MACfC,cACAC,UACAC,gBACEvB;AAEJ,KAAI,CAACG,SAAS,CAACD,WACb,QAAOL;AAGTJ,wBAAuBO,MAAM;CAG7B,MAAMwB,mBAAmBL,cACrB5B,WAAW2B,YAAY,EAAEO,QAAQN,aAAa,CAAC,GAC/CD;CAGJ,MAAMQ,mBAAmBpB,cACrBf,WAAW0B,YAAY,EAAEQ,QAAQnB,aAAa,CAAC,GAC/CW;CAGJ,MAAM,EAAEU,IAAIC,KAAK,GAAGC,wBAAyBL,oBAA4B,EAAE;AAE3E,QACE,oBAAC;EAEGrB;EACAC;EACAC;EACAE;EACAC;EACAC;EACAC;EACAO,YAAYS;EACZR,YAAYW;EACZlB;EACAC;EACAC;EACAC;EACAC;EACAC;EACAI;EACAC;EACAC;EACAC;EACAO,WAAWjC;EAGXkC,WAAW/B,MAAM2B;EACjB7B;GAEF"}
1
+ {"version":3,"file":"wrapper.js","names":["DOMRef","FocusableRef","BaseProps","ReactElement","RefObject","FieldBaseProps","FormBaseProps","mergeProps","warnAboutForceField","FieldWrapper","warnAboutLegacyTooltip","WrapWithFieldProps","Omit","hasFieldChrome","rendersFieldChrome","props","label","forceField","wrapWithField","component","ref","HTMLElement","T","extra","labelPosition","labelStyles","isRequired","isOptional","isDisabled","necessityIndicator","message","messageStyles","description","errorMessage","isInvalid","isValid","labelProps","fieldProps","fieldStyles","requiredMark","labelTooltip","isHidden","labelSuffix","mergedFieldProps","styles","mergedLabelProps","id","_id","fieldPropsWithoutId","Component","controlId"],"sources":["../../../src/components/form/wrapper.tsx"],"sourcesContent":["import { DOMRef, FocusableRef } from '@react-types/shared';\nimport { BaseProps } from '@tenphi/tasty';\nimport { ReactElement, RefObject } from 'react';\n\nimport { FieldBaseProps, FormBaseProps } from '../../shared/index';\nimport { mergeProps } from '../../utils/react/index';\n\nimport { warnAboutForceField } from './field-chrome';\nimport { FieldWrapper } from './FieldWrapper/index';\nimport { warnAboutLegacyTooltip } from './legacy-tooltip';\n\n// `children` is intentionally omitted: the input is passed as `component`, never through props.\ninterface WrapWithFieldProps\n extends FieldBaseProps,\n Omit<BaseProps, 'children'>,\n FormBaseProps {\n /**\n * Set by `useFieldProps` for a field without a `label` that still renders\n * the field chrome — see `asksForFieldChrome`. Not a prop of any input.\n */\n hasFieldChrome?: boolean;\n}\n\n/**\n * Whether `wrapWithField` renders the field chrome for these props: a `label`,\n * the chrome `useFieldProps` asked for, or the deprecated `forceField`.\n */\nexport function rendersFieldChrome(props: object) {\n const { label, hasFieldChrome, forceField } = props as WrapWithFieldProps;\n\n return !!label || !!hasFieldChrome || !!forceField;\n}\n\n/**\n * Wraps an input with the field chrome (label, description, message) when it has a `label`, or when `useFieldProps` asks\n * for it on a field without one (`hasFieldChrome`): one bound to a form, or passed a description or a message, and not `isBare`.\n * Only the field wrapper props are forwarded, so callers can pass their whole props object as is.\n */\nexport function wrapWithField<T extends WrapWithFieldProps>(\n component: ReactElement,\n ref: RefObject<unknown> | FocusableRef<HTMLElement> | DOMRef<HTMLElement>,\n props: T,\n) {\n let {\n label,\n extra,\n labelPosition = 'top',\n labelStyles,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n labelProps,\n fieldProps,\n fieldStyles,\n requiredMark = true,\n labelTooltip,\n isHidden,\n labelSuffix,\n } = props;\n\n warnAboutForceField(props);\n\n if (!rendersFieldChrome(props)) {\n return component;\n }\n\n warnAboutLegacyTooltip(props);\n\n // Merge fieldStyles as shorthand for fieldProps.styles (fieldStyles takes priority)\n const mergedFieldProps = fieldStyles\n ? mergeProps(fieldProps, { styles: fieldStyles })\n : fieldProps;\n\n // Merge labelStyles as shorthand for labelProps.styles (labelStyles takes priority)\n const mergedLabelProps = labelStyles\n ? mergeProps(labelProps, { styles: labelStyles })\n : labelProps;\n\n // Remove id from fieldProps to avoid duplication (id should be on the input element, not the field wrapper)\n const { id: _id, ...fieldPropsWithoutId } = (mergedFieldProps as any) || {};\n\n return (\n <FieldWrapper\n {...{\n label,\n extra,\n labelPosition,\n isRequired,\n isOptional,\n isDisabled,\n necessityIndicator,\n labelProps: mergedLabelProps,\n fieldProps: fieldPropsWithoutId,\n message,\n messageStyles,\n description,\n errorMessage,\n isInvalid,\n isValid,\n requiredMark,\n labelTooltip,\n isHidden,\n labelSuffix,\n Component: component,\n // Where the description and message ids come from; see\n // `useFieldDescribedBy`, which points the control at them.\n controlId: props.id,\n ref,\n }}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;AA2BA,SAAgBc,mBAAmBC,OAAe;CAChD,MAAM,EAAEC,OAAOH,gBAAgBI,eAAeF;AAE9C,QAAO,CAAC,CAACC,SAAS,CAAC,CAACH,kBAAkB,CAAC,CAACI;;;;;;;AAQ1C,SAAgBC,cACdC,WACAC,KACAL,OACA;CACA,IAAI,EACFC,OACAO,OACAC,gBAAgB,OAChBC,aACAC,YACAC,YACAC,YACAC,oBACAC,SACAC,eACAC,aACAC,cACAC,WACAC,SACAC,YACAC,YACAC,aACAC,eAAe,MACfC,cACAC,UACAC,gBACE3B;AAEJP,qBAAoBO,MAAM;AAE1B,KAAI,CAACD,mBAAmBC,MAAM,CAC5B,QAAOI;AAGTT,wBAAuBK,MAAM;CAG7B,MAAM4B,mBAAmBL,cACrB/B,WAAW8B,YAAY,EAAEO,QAAQN,aAAa,CAAC,GAC/CD;CAGJ,MAAMQ,mBAAmBpB,cACrBlB,WAAW6B,YAAY,EAAEQ,QAAQnB,aAAa,CAAC,GAC/CW;CAGJ,MAAM,EAAEU,IAAIC,KAAK,GAAGC,wBAAyBL,oBAA4B,EAAE;AAE3E,QACE,oBAAC;EAEG3B;EACAO;EACAC;EACAE;EACAC;EACAC;EACAC;EACAO,YAAYS;EACZR,YAAYW;EACZlB;EACAC;EACAC;EACAC;EACAC;EACAC;EACAI;EACAC;EACAC;EACAC;EACAO,WAAW9B;EAGX+B,WAAWnC,MAAM+B;EACjB1B;GAEF"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useCallback, useLayoutEffect, useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { DisplayTransition } from "../DisplayTransition/DisplayTransition.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { isValidElement, useCallback, useLayoutEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { BASE_STYLES, BLOCK_STYLES, COLOR_STYLES, DIMENSION_STYLES, OUTER_STYLES, tasty } from "@tenphi/tasty";
4
4
  import { forwardRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useLayoutEffect as useLayoutEffect$1 } from "../../utils/react/useLayoutEffect.js";
4
4
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
3
3
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
4
4
  import { useEvent } from "../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useControlledState } from "@react-stately/utils";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { createContext, useContext } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { DraggableCollection } from "../../shared/DraggableCollection.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { DropIndicatorElement } from "./styled.js";
3
3
  import { useTabsContext } from "./TabsContext.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { TabPanelElement } from "./styled.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect, useMemo, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { CloseIcon } from "../../../icons/CloseIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useEvent } from "../../../_internal/hooks/use-event.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { _ItemButton } from "../../actions/ItemButton/ItemButton.js";
3
3
  import { useOptionalTabsContext } from "./TabsContext.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { createContext, useContext } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/popover-placement.ts
3
3
  /**
4
4
  * Maps the parent Tabs `placement` to the popover placement for menus and
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { _Item } from "../../content/Item/Item.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  //#region src/components/navigation/Tabs/types.ts
3
3
  /**
4
4
  * Size mapping for radio type tabs.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { chainRaf } from "../../../utils/raf.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { _Title } from "../../content/Title.js";
4
4
  import { Card } from "../../content/Card/Card.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { getWeekNumber } from "../../fields/DatePicker/period.js";
3
3
  import { CalendarCell } from "./CalendarCell.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { _Title } from "../../content/Title.js";
3
3
  import { Space } from "../../layout/Space.js";
4
4
  import { RightIcon } from "../../../icons/RightIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { CalendarElement } from "./styled.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { getQuarter } from "../../fields/DatePicker/period.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { CALENDAR_CELL_STYLES } from "./styled.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { useLayoutEffect, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../provider.js";
3
3
  import { CalendarPanel } from "./CalendarPanel.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { tasty } from "@tenphi/tasty";
3
3
 
4
4
  //#region src/components/other/Calendar/styled.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { Icon } from "../../../icons/Icon.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { mergeStyles, tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { wrapIcon } from "../../../icons/wrap-icon.js";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { Paragraph } from "../../content/Paragraph.js";
4
4
  import { _Title } from "../../content/Title.js";
@@ -6,14 +6,18 @@ import "react";
6
6
  interface AlertDialogApi {
7
7
  /**
8
8
  * Opens the dialog. Resolves with the action the user picked. Rejects with
9
- * `undefined` when the dialog closes without one (Cancel, dismissal or an
10
- * aborted `cancelToken`), and with an `Error` when it cannot open. A cancel
11
- * is not reported as an unhandled rejection when the promise is ignored.
9
+ * `undefined` when the dialog closes without one (Cancel, dismissal, an
10
+ * aborted `cancelToken` or the unmount of the component that opened it),
11
+ * and with an `Error` when it cannot open. A cancel is not reported as an
12
+ * unhandled rejection when the promise is ignored.
12
13
  */
13
14
  open: (dialogProps: DialogProps, params?: AlertDialogApiParams) => Promise<AlertDialogResolveStatus>;
14
15
  }
15
16
  interface AlertDialogApiParams {
16
- /** Closes the dialog when aborted, which settles it as a cancel. */
17
+ /**
18
+ * Closes the dialog when aborted, which settles it as a cancel. A confirm or
19
+ * secondary action that is running finishes first.
20
+ */
17
21
  cancelToken?: AbortSignal;
18
22
  }
19
23
  /**
@@ -26,6 +30,13 @@ interface AlertDialogApiParams {
26
30
  * with `undefined` on a cancel. A caller that runs everything in the callbacks
27
31
  * can ignore it: an ignored cancel is not reported as an unhandled rejection.
28
32
  *
33
+ * A dialog belongs to the component that calls this hook: when that component
34
+ * unmounts, its dialog closes as a cancel, so no callback runs against a
35
+ * component that is gone. Call the hook in a component that stays mounted
36
+ * while the dialog is open, such as the one that renders a menu, not in the
37
+ * menu item that closes it. A confirm or secondary action that is running
38
+ * finishes first.
39
+ *
29
40
  * ***Important*** only one alert dialog can be open at a time: `open` rejects
30
41
  * with an `Error` while another one is open. A dialog that is already closing
31
42
  * gives way.
@@ -1,7 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { AlertDialogZone } from "./AlertDialogZone.js";
3
3
  import { c } from "react/compiler-runtime";
4
- import { createContext, useContext, useRef, useState } from "react";
4
+ import { createContext, useContext, useLayoutEffect, useRef, useState } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import invariant from "tiny-invariant";
7
7
 
@@ -49,11 +49,9 @@ function AlertDialogApiProvider(props) {
49
49
  const id = useRef(0);
50
50
  let t0;
51
51
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
52
- t0 = { open: (dialogProps, t1) => {
53
- const params = t1 === void 0 ? {} : t1;
52
+ t0 = { open: (dialogProps, signals) => {
54
53
  const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } = dialogProps;
55
- const { cancelToken } = params;
56
- if (cancelToken?.aborted) {
54
+ if (signals.some(_temp)) {
57
55
  onCancel?.();
58
56
  return ignoreUnhandled(Promise.reject(void 0));
59
57
  }
@@ -74,11 +72,18 @@ function AlertDialogApiProvider(props) {
74
72
  status
75
73
  } : current?.id === currentId ? null : current);
76
74
  };
77
- const onAbort = () => currentDialog.meta.reject(void 0);
75
+ let isAbortedWhilePending = false;
76
+ const onAbort = () => {
77
+ if (pending) {
78
+ isAbortedWhilePending = true;
79
+ return;
80
+ }
81
+ currentDialog.meta.reject(void 0);
82
+ };
78
83
  const close = () => {
79
84
  if (currentDialog.meta.isClosed) return false;
80
85
  currentDialog.meta.isClosed = true;
81
- cancelToken?.removeEventListener("abort", onAbort);
86
+ for (const signal_0 of signals) signal_0.removeEventListener("abort", onAbort);
82
87
  setOpenedDialog((currentState) => currentState?.meta.id !== currentId ? currentState : {
83
88
  props: currentState.props,
84
89
  meta: {
@@ -123,9 +128,10 @@ function AlertDialogApiProvider(props) {
123
128
  }, (error) => {
124
129
  setPending(null);
125
130
  reportActionError(error);
131
+ if (isAbortedWhilePending) currentDialog.meta.reject(void 0);
126
132
  });
127
133
  };
128
- cancelToken?.addEventListener("abort", onAbort, { once: true });
134
+ for (const signal_1 of signals) signal_1.addEventListener("abort", onAbort, { once: true });
129
135
  currentDialog.props = {
130
136
  ...restProps,
131
137
  onDismiss: (action) => {
@@ -145,7 +151,7 @@ function AlertDialogApiProvider(props) {
145
151
  } };
146
152
  $[0] = t0;
147
153
  } else t0 = $[0];
148
- const api = t0;
154
+ const opener = t0;
149
155
  let t1;
150
156
  if ($[1] !== openedDialog || $[2] !== pendingAction) {
151
157
  t1 = /* @__PURE__ */ jsx(AlertDialogZone, {
@@ -159,7 +165,7 @@ function AlertDialogApiProvider(props) {
159
165
  let t2;
160
166
  if ($[4] !== props.children || $[5] !== t1) {
161
167
  t2 = /* @__PURE__ */ jsxs(DialogApiContext.Provider, {
162
- value: api,
168
+ value: opener,
163
169
  children: [t1, props.children]
164
170
  });
165
171
  $[4] = props.children;
@@ -178,6 +184,13 @@ function AlertDialogApiProvider(props) {
178
184
  * with `undefined` on a cancel. A caller that runs everything in the callbacks
179
185
  * can ignore it: an ignored cancel is not reported as an unhandled rejection.
180
186
  *
187
+ * A dialog belongs to the component that calls this hook: when that component
188
+ * unmounts, its dialog closes as a cancel, so no callback runs against a
189
+ * component that is gone. Call the hook in a component that stays mounted
190
+ * while the dialog is open, such as the one that renders a menu, not in the
191
+ * menu item that closes it. A confirm or secondary action that is running
192
+ * finishes first.
193
+ *
181
194
  * ***Important*** only one alert dialog can be open at a time: `open` rejects
182
195
  * with an `Error` while another one is open. A dialog that is already closing
183
196
  * gives way.
@@ -213,10 +226,66 @@ function AlertDialogApiProvider(props) {
213
226
  * // Later, e.g. when the approval arrives:
214
227
  * controllerRef.current?.abort();
215
228
  */
229
+ function _temp(signal) {
230
+ return signal.aborted;
231
+ }
216
232
  function useAlertDialogAPI() {
217
- const api = useContext(DialogApiContext);
218
- invariant(api !== null, "You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component");
219
- return api;
233
+ const $ = c(5);
234
+ const opener = useContext(DialogApiContext);
235
+ invariant(opener !== null, "You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component");
236
+ let t0;
237
+ if ($[0] !== opener) {
238
+ t0 = () => createDialogOwner(opener);
239
+ $[0] = opener;
240
+ $[1] = t0;
241
+ } else t0 = $[1];
242
+ const [owner] = useState(t0);
243
+ let t1;
244
+ let t2;
245
+ if ($[2] !== owner) {
246
+ t1 = () => owner.attach();
247
+ t2 = [owner];
248
+ $[2] = owner;
249
+ $[3] = t1;
250
+ $[4] = t2;
251
+ } else {
252
+ t1 = $[3];
253
+ t2 = $[4];
254
+ }
255
+ useLayoutEffect(t1, t2);
256
+ return owner.api;
257
+ }
258
+ /**
259
+ * One `useAlertDialogAPI` caller's `open`, whose dialogs close when the
260
+ * caller unmounts. Its identity is the caller's for good: callers put `open`
261
+ * in effect dependencies.
262
+ */
263
+ function createDialogOwner(opener) {
264
+ let lifetime = null;
265
+ let isUnmounted = false;
266
+ const api = { open: (dialogProps, params = {}) => {
267
+ let owner;
268
+ if (isUnmounted) owner = AbortSignal.abort();
269
+ else {
270
+ lifetime ??= new AbortController();
271
+ owner = lifetime.signal;
272
+ }
273
+ const { cancelToken } = params;
274
+ return opener.open(dialogProps, cancelToken ? [owner, cancelToken] : [owner]);
275
+ } };
276
+ /** The effect setup. Its cleanup closes the dialogs the caller opened. */
277
+ const attach = () => {
278
+ isUnmounted = false;
279
+ return () => {
280
+ isUnmounted = true;
281
+ lifetime?.abort();
282
+ lifetime = null;
283
+ };
284
+ };
285
+ return {
286
+ api,
287
+ attach
288
+ };
220
289
  }
221
290
 
222
291
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"AlertDialogApiProvider.js","names":["createContext","useContext","useMemo","useRef","useState","invariant","AlertDialogZone","AlertDialogResolveStatus","Dialog","DialogProps","DialogApiContext","AlertDialogApi","open","dialogProps","params","AlertDialogApiParams","Promise","cancelToken","AbortSignal","isThenable","value","PromiseLike","then","runHandler","handler","undefined","error","reject","runActionHandlers","handlers","pending","map","filter","length","all","ignoreUnhandled","promise","T","catch","reportActionError","globalThis","reportError","setTimeout","PendingAction","id","status","AlertDialogApiProvider","props","$","_c","openedDialog","setOpenedDialog","pendingAction","setPendingAction","t0","Symbol","for","t1","onDismiss","onConfirm","onSecondary","onCancel","restProps","aborted","currentId","current","currentDialog","meta","isClosed","isVisible","setPending","onAbort","close","removeEventListener","currentState","currentState_0","resolvePromise","rejectPromise","resolve","status_0","reason","act","status_1","onPress","result","addEventListener","once","action","openedDialog_0","Error","api","t2","children","useAlertDialogAPI"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialogApiProvider.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, useRef, useState } from 'react';\nimport invariant from 'tiny-invariant';\n\nimport { AlertDialogZone } from './AlertDialogZone';\nimport { AlertDialogResolveStatus, Dialog, DialogProps } from './types';\n\nconst DialogApiContext = createContext<AlertDialogApi | null>(null);\n\nexport interface AlertDialogApi {\n /**\n * Opens the dialog. Resolves with the action the user picked. Rejects with\n * `undefined` when the dialog closes without one (Cancel, dismissal or an\n * aborted `cancelToken`), and with an `Error` when it cannot open. A cancel\n * is not reported as an unhandled rejection when the promise is ignored.\n */\n open: (\n dialogProps: DialogProps,\n params?: AlertDialogApiParams,\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nexport interface AlertDialogApiParams {\n /** Closes the dialog when aborted, which settles it as a cancel. */\n cancelToken?: AbortSignal;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then === 'function';\n}\n\n/** Runs an action handler, turning a throw into a rejected promise. */\nfunction runHandler(handler: (() => unknown) | undefined): unknown {\n if (!handler) return undefined;\n\n try {\n return handler();\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\n/**\n * Runs the button's `onPress` and the dialog's callback for the same action.\n * Returns a promise when either does, so the dialog waits for both.\n */\nfunction runActionHandlers(handlers: ((() => unknown) | undefined)[]) {\n const pending = handlers.map(runHandler).filter(isThenable);\n\n return pending.length ? Promise.all(pending) : undefined;\n}\n\n/** A cancel rejection nobody listens to is not an error worth reporting. */\nfunction ignoreUnhandled<T>(promise: Promise<T>) {\n promise.catch(() => {});\n\n return promise;\n}\n\n/** Reports a failed action handler without throwing into the press. */\nfunction reportActionError(error: unknown) {\n if (typeof globalThis.reportError === 'function') {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n });\n }\n}\n\n/**\n * The dialog whose action handler is still running, and which action.\n * @internal\n */\nexport interface PendingAction {\n id: number;\n status: AlertDialogResolveStatus;\n}\n\n/**\n * @internal Do not use it in your code!\n */\nexport function AlertDialogApiProvider(props) {\n const [openedDialog, setOpenedDialog] = useState<Dialog | null>(null);\n const [pendingAction, setPendingAction] = useState<PendingAction | null>(\n null,\n );\n const id = useRef(0);\n\n // A context value: callers put `open` in effect dependencies, so its\n // identity has to stay the same.\n const api = useMemo<AlertDialogApi>(\n () => ({\n open: (dialogProps, params = {}) => {\n const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } =\n dialogProps;\n const { cancelToken } = params;\n\n // An aborted signal is a cancel: it settles before anything opens.\n if (cancelToken?.aborted) {\n onCancel?.();\n\n return ignoreUnhandled(Promise.reject(undefined));\n }\n\n const currentId = ++id.current;\n const currentDialog = {\n props: null,\n meta: { id: currentId, isClosed: false, isVisible: true },\n } as unknown as Dialog;\n // Set while an action handler's promise runs: the dialog stays open.\n let pending: AlertDialogResolveStatus | null = null;\n\n const setPending = (status: AlertDialogResolveStatus | null) => {\n pending = status;\n setPendingAction((current) =>\n status\n ? { id: currentId, status }\n : current?.id === currentId\n ? null\n : current,\n );\n };\n\n // Aborting is a cancel, so it settles the promise the way Cancel does.\n const onAbort = () => currentDialog.meta.reject(undefined);\n\n const close = () => {\n if (currentDialog.meta.isClosed) return false;\n\n currentDialog.meta.isClosed = true;\n cancelToken?.removeEventListener('abort', onAbort);\n\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId\n ? currentState\n : {\n props: currentState.props,\n meta: { ...currentState.meta, isVisible: false },\n },\n );\n\n setTimeout(\n () =>\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId ? currentState : null,\n ),\n 300,\n );\n\n return true;\n };\n\n let resolvePromise!: (status: AlertDialogResolveStatus) => void;\n let rejectPromise!: (reason: unknown) => void;\n\n currentDialog.meta.promise = new Promise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n\n currentDialog.meta.resolve = (status) => {\n if (close()) resolvePromise(status);\n };\n\n // A rejection without a reason is a cancel: the Cancel button, a\n // dismissal, an aborted `cancelToken` or `content` calling `reject()`.\n // Anything else is a failure.\n currentDialog.meta.reject = (reason) => {\n if (!close()) return;\n\n if (reason !== undefined) {\n rejectPromise(reason);\n\n return;\n }\n\n ignoreUnhandled(currentDialog.meta.promise);\n rejectPromise(undefined);\n onCancel?.();\n };\n\n // The confirm and secondary buttons: run the handlers, and settle\n // once they have finished. A handler that throws or rejects keeps the\n // dialog open for another try.\n currentDialog.meta.act = (status, onPress) => {\n const result = runActionHandlers([\n onPress,\n status === 'confirm' ? onConfirm : onSecondary,\n ]);\n\n if (!isThenable(result)) {\n currentDialog.meta.resolve(status);\n\n return;\n }\n\n setPending(status);\n\n result.then(\n () => {\n setPending(null);\n\n if (currentDialog.meta.isClosed) return;\n\n currentDialog.meta.resolve(status);\n // The press's own dismissal was held back while it ran.\n onDismiss?.(status);\n },\n (error) => {\n setPending(null);\n reportActionError(error);\n },\n );\n };\n\n cancelToken?.addEventListener('abort', onAbort, { once: true });\n\n currentDialog.props = {\n ...restProps,\n // Called with the action's name by the action buttons, and without\n // one by Escape and a click outside.\n onDismiss: (action) => {\n if (pending) return;\n\n onDismiss?.(action);\n currentDialog.meta.reject(undefined);\n },\n };\n\n setOpenedDialog((openedDialog) => {\n // Another dialog is open, so this one can't be. One that is only\n // animating out gives way: its cleanup checks the id, so it leaves\n // the new dialog alone.\n if (openedDialog !== null && !openedDialog.meta.isClosed) {\n currentDialog.meta.reject(\n new Error(\n \"Another dialog is already opened. It's a bad practice to open more than one <AlertDialog /> at the same time\",\n ),\n );\n\n return openedDialog;\n }\n\n return currentDialog;\n });\n\n return currentDialog.meta.promise;\n },\n }),\n [],\n );\n\n return (\n <DialogApiContext.Provider value={api}>\n <AlertDialogZone\n openedDialog={openedDialog}\n pendingAction={pendingAction}\n />\n {props.children}\n </DialogApiContext.Provider>\n );\n}\n\n/**\n * Hook gives the ability to open `<AlertDialog />` imperatively.\n *\n * Pass the action as `onConfirm`. If it returns a promise, the dialog waits\n * for it with the button loading, and stays open if it fails.\n *\n * The returned promise resolves with the action the user picked and rejects\n * with `undefined` on a cancel. A caller that runs everything in the callbacks\n * can ignore it: an ignored cancel is not reported as an unhandled rejection.\n *\n * ***Important*** only one alert dialog can be open at a time: `open` rejects\n * with an `Error` while another one is open. A dialog that is already closing\n * gives way.\n *\n * @example running the action from the dialog.\n * const { open } = useAlertDialogAPI();\n *\n * const onPress = () => {\n * open({\n * title: 'Delete the item?',\n * danger: true,\n * actions: { confirm: { children: 'Delete' }, cancel: true },\n * onConfirm: () => deleteItem(),\n * });\n * };\n *\n * return <Button onPress={onPress}>Delete</Button>\n *\n * @example closing the dialog from code with a cancel token.\n * const { open } = useAlertDialogAPI();\n * const controllerRef = useRef<AbortController | null>(null);\n *\n * const onPress = () => {\n * // A signal stays aborted, so every dialog needs a fresh controller.\n * controllerRef.current = new AbortController();\n *\n * open(\n * { title: 'Waiting for approval', actions: { confirm: { children: 'Hide' } } },\n * { cancelToken: controllerRef.current.signal },\n * );\n * };\n *\n * // Later, e.g. when the approval arrives:\n * controllerRef.current?.abort();\n */\nexport function useAlertDialogAPI(): AlertDialogApi {\n const api = useContext(DialogApiContext);\n\n invariant(\n api !== null,\n \"You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component\",\n );\n\n return api;\n}\n"],"mappings":";;;;;;;;AAMA,MAAMU,mBAAmBV,cAAqC,KAAK;AAoBnE,SAASmB,WAAWC,OAA+C;AACjE,QAAO,CAAC,CAACA,SAAS,OAAQA,MAA+BE,SAAS;;;AAIpE,SAASC,WAAWC,SAA+C;AACjE,KAAI,CAACA,QAAS,QAAOC;AAErB,KAAI;AACF,SAAOD,SAAS;UACTE,OAAO;AACd,SAAOV,QAAQW,OAAOD,MAAM;;;;;;;AAQhC,SAASE,kBAAkBC,UAA2C;CACpE,MAAMC,UAAUD,SAASE,IAAIR,WAAW,CAACS,OAAOb,WAAW;AAE3D,QAAOW,QAAQG,SAASjB,QAAQkB,IAAIJ,QAAQ,GAAGL;;;AAIjD,SAASU,gBAAmBC,SAAqB;AAC/CA,SAAQE,YAAY,GAAG;AAEvB,QAAOF;;;AAIT,SAASG,kBAAkBb,OAAgB;AACzC,KAAI,OAAOc,WAAWC,gBAAgB,WACpCD,YAAWC,YAAYf,MAAM;KAE7BgB,kBAAiB;AACf,QAAMhB;GACN;;;;;AAgBN,SAAOoB,uBAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,CAAAC,cAAAC,mBAAwC/C,SAAwB,KAAK;CACrE,MAAA,CAAAgD,eAAAC,oBAA0CjD,SACxC,KACD;CACD,MAAAwC,KAAWzC,OAAO,EAAE;CAAC,IAAAmD;AAAA,KAAAN,EAAA,OAAAO,OAAAC,IAAA,4BAAA,EAAA;AAKZF,OAAA,EAAA1C,OACCC,aAAA4C,OAAA;GAAc,MAAA3C,SAAA2C,OAAAhC,SAAA,EAAW,GAAXgC;GAClB,MAAA,EAAAC,WAAAC,WAAAC,aAAAC,UAAA,GAAAC,cACEjD;GACF,MAAA,EAAAI,gBAAwBH;AAGxB,OAAIG,aAAW8C,SAAS;AACtBF,gBAAY;AAAA,WAEL1B,gBAAgBnB,QAAOW,OAAQF,OAAU,CAAC;;GAGnD,MAAAuC,YAAoBpB,GAAEqB,UAAFrB,GAAEqB,UAAQ;GAC9B,MAAAC,gBAAsB;IAAAnB,OACb;IAAIoB,MACL;KAAAvB,IAAMoB;KAASI,UAAY;KAAKC,WAAa;KAAK;IACzD;GAED,IAAAvC,UAA+C;GAE/C,MAAAwC,cAAmBzB,WAAA;AACjBf,cAAUe;AACVQ,sBAAiBY,YACfpB,SAAA;KAAAD,IACUoB;KAASnB;KAGN,GAFToB,SAAOrB,OAASoB,YAAhB,OAAAC,QAGL;;GAIH,MAAAM,gBAAsBL,cAAaC,KAAKxC,OAAQF,OAAU;GAE1D,MAAA+C,cAAc;AACZ,QAAIN,cAAaC,KAAKC,SAAS,QAAS;AAExCF,kBAAaC,KAAKC,WAAY;AAC9BnD,iBAAWwD,oBAAsB,SAASF,QAAQ;AAElDpB,qBAAgBuB,iBACdA,cAAYP,KAASvB,OAAKoB,YAA1BU,eAAA;KAAA3B,OAGa2B,aAAY3B;KAAMoB,MACnB;MAAA,GAAKO,aAAYP;MAAKE,WAAa;MAAM;KAEvD,CAAC;AAED3B,qBAEIS,iBAAgBwB,mBACdD,gBAAYP,KAASvB,OAAKoB,YAA1BW,iBAAA,KACD,EACH,IACD;AAAA,WAEM;;GAGLC,IAAAA;GACAC,IAAAA;AAEJX,iBAAaC,KAAK/B,UAAW,IAAIpB,SAAQ8D,SAAAnD,WAAA;AACvCiD,qBAAiBE;AACjBD,oBAAgBlD;KAFQ;AAK1BuC,iBAAaC,KAAKW,WAAWC,aAAA;AAC3B,QAAIP,OAAO,CAAEI,gBAAe/B,SAAO;;AAMrCqB,iBAAaC,KAAKxC,UAAUqD,WAAA;AAC1B,QAAI,CAACR,OAAO,CAAA;AAEZ,QAAIQ,WAAWvD,QAAS;AACtBoD,mBAAcG,OAAO;AAAA;;AAKvB7C,oBAAgB+B,cAAaC,KAAK/B,QAAS;AAC3CyC,kBAAcpD,OAAU;AACxBoC,gBAAY;;AAMdK,iBAAaC,KAAKc,OAAOC,UAAAC,YAAA;IACvB,MAAAC,SAAexD,kBAAkB,CAC/BuD,SACAtC,aAAW,YAAXc,YAAAC,YACD,CAAC;AAEF,QAAI,CAACzC,WAAWiE,OAAO,EAAA;AACrBlB,mBAAaC,KAAKW,QAASjC,SAAO;AAAA;;AAKpCyB,eAAWzB,SAAO;AAElBuC,WAAM9D,WACJ;AACEgD,gBAAW,KAAK;AAEhB,SAAIJ,cAAaC,KAAKC,SAAS;AAE/BF,mBAAaC,KAAKW,QAASjC,SAAO;AAElCa,iBAAYb,SAAO;QAErBnB,UAAA;AACE4C,gBAAW,KAAK;AAChB/B,uBAAkBb,MAAM;MAE3B;;AAGHT,gBAAWoE,iBAAmB,SAASd,SAAS,EAAAe,MAAQ,MAAM,CAAC;AAE/DpB,iBAAanB,QAAS;IAAA,GACjBe;IAASJ,YAGD6B,WAAA;AACT,SAAIzD,QAAO;AAEX4B,iBAAY6B,OAAO;AACnBrB,mBAAaC,KAAKxC,OAAQF,OAAU;;IARrB;AAYnB0B,oBAAgBqC,mBAAA;AAId,QAAItC,mBAAiB,QAAjB,CAA0BA,eAAYiB,KAAKC,UAAS;AACtDF,mBAAaC,KAAKxC,uBAChB,IAAI8D,MACF,+GAEJ,CAAC;AAAA,YAEMvC;;AACR,WAEMgB;KACP;AAAA,UAEKA,cAAaC,KAAK/B;KAE5B;AAAAY,IAAA,KAAAM;OAAAA,MAAAN,EAAA;CA9JH,MAAA0C,MACSpC;CA+JP,IAAAG;AAAA,KAAAT,EAAA,OAAAE,gBAAAF,EAAA,OAAAI,eAAA;AAIEK,OAAA,oBAAC;GACeP;GACCE;IACf;AAAAJ,IAAA,KAAAE;AAAAF,IAAA,KAAAI;AAAAJ,IAAA,KAAAS;OAAAA,MAAAT,EAAA;CAAA,IAAA2C;AAAA,KAAA3C,EAAA,OAAAD,MAAA6C,YAAA5C,EAAA,OAAAS,IAAA;AAJJkC,OAAA,qBAAA,iBAAA;GAAkCD,OAAAA;cAChCjC,IAICV,MAAK6C;IACoB;AAAA5C,IAAA,KAAAD,MAAA6C;AAAA5C,IAAA,KAAAS;AAAAT,IAAA,KAAA2C;OAAAA,MAAA3C,EAAA;AAAA,QAN5B2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDJ,SAAOE,oBAAA;CACL,MAAAH,MAAYzF,WAAWS,iBAAiB;AAExCL,WACEqF,QAAQ,MACR,4HACD;AAAA,QAEMA"}
1
+ {"version":3,"file":"AlertDialogApiProvider.js","names":["createContext","useContext","useLayoutEffect","useMemo","useRef","useState","invariant","AlertDialogZone","AlertDialogResolveStatus","Dialog","DialogProps","AlertDialogOpener","open","dialogProps","signals","AbortSignal","Promise","DialogApiContext","AlertDialogApi","params","AlertDialogApiParams","cancelToken","isThenable","value","PromiseLike","then","runHandler","handler","undefined","error","reject","runActionHandlers","handlers","pending","map","filter","length","all","ignoreUnhandled","promise","T","catch","reportActionError","globalThis","reportError","setTimeout","PendingAction","id","status","AlertDialogApiProvider","props","$","_c","openedDialog","setOpenedDialog","pendingAction","setPendingAction","t0","Symbol","for","onDismiss","onConfirm","onSecondary","onCancel","restProps","some","_temp","currentId","current","currentDialog","meta","isClosed","isVisible","setPending","isAbortedWhilePending","onAbort","close","signal_0","signal","removeEventListener","currentState","currentState_0","resolvePromise","rejectPromise","resolve","status_0","reason","act","status_1","onPress","result","signal_1","addEventListener","once","action","openedDialog_0","Error","opener","t1","t2","children","aborted","useAlertDialogAPI","createDialogOwner","owner","attach","api","lifetime","AbortController","isUnmounted","abort"],"sources":["../../../../src/components/overlays/AlertDialog/AlertDialogApiProvider.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport invariant from 'tiny-invariant';\n\nimport { AlertDialogZone } from './AlertDialogZone';\nimport { AlertDialogResolveStatus, Dialog, DialogProps } from './types';\n\n/**\n * The provider's own `open`. A dialog closes, as a cancel, when any of its\n * signals aborts: the caller's `cancelToken`, and the one that ends with the\n * component that opened it.\n */\ninterface AlertDialogOpener {\n open: (\n dialogProps: DialogProps,\n signals: AbortSignal[],\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nconst DialogApiContext = createContext<AlertDialogOpener | null>(null);\n\nexport interface AlertDialogApi {\n /**\n * Opens the dialog. Resolves with the action the user picked. Rejects with\n * `undefined` when the dialog closes without one (Cancel, dismissal, an\n * aborted `cancelToken` or the unmount of the component that opened it),\n * and with an `Error` when it cannot open. A cancel is not reported as an\n * unhandled rejection when the promise is ignored.\n */\n open: (\n dialogProps: DialogProps,\n params?: AlertDialogApiParams,\n ) => Promise<AlertDialogResolveStatus>;\n}\n\nexport interface AlertDialogApiParams {\n /**\n * Closes the dialog when aborted, which settles it as a cancel. A confirm or\n * secondary action that is running finishes first.\n */\n cancelToken?: AbortSignal;\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then === 'function';\n}\n\n/** Runs an action handler, turning a throw into a rejected promise. */\nfunction runHandler(handler: (() => unknown) | undefined): unknown {\n if (!handler) return undefined;\n\n try {\n return handler();\n } catch (error) {\n return Promise.reject(error);\n }\n}\n\n/**\n * Runs the button's `onPress` and the dialog's callback for the same action.\n * Returns a promise when either does, so the dialog waits for both.\n */\nfunction runActionHandlers(handlers: ((() => unknown) | undefined)[]) {\n const pending = handlers.map(runHandler).filter(isThenable);\n\n return pending.length ? Promise.all(pending) : undefined;\n}\n\n/** A cancel rejection nobody listens to is not an error worth reporting. */\nfunction ignoreUnhandled<T>(promise: Promise<T>) {\n promise.catch(() => {});\n\n return promise;\n}\n\n/** Reports a failed action handler without throwing into the press. */\nfunction reportActionError(error: unknown) {\n if (typeof globalThis.reportError === 'function') {\n globalThis.reportError(error);\n } else {\n setTimeout(() => {\n throw error;\n });\n }\n}\n\n/**\n * The dialog whose action handler is still running, and which action.\n * @internal\n */\nexport interface PendingAction {\n id: number;\n status: AlertDialogResolveStatus;\n}\n\n/**\n * @internal Do not use it in your code!\n */\nexport function AlertDialogApiProvider(props) {\n const [openedDialog, setOpenedDialog] = useState<Dialog | null>(null);\n const [pendingAction, setPendingAction] = useState<PendingAction | null>(\n null,\n );\n const id = useRef(0);\n\n // A context value that never changes: each `useAlertDialogAPI` caller\n // keeps the one it first saw.\n const opener = useMemo<AlertDialogOpener>(\n () => ({\n open: (dialogProps, signals) => {\n const { onDismiss, onConfirm, onSecondary, onCancel, ...restProps } =\n dialogProps;\n\n // An aborted signal is a cancel: it settles before anything opens.\n if (signals.some((signal) => signal.aborted)) {\n onCancel?.();\n\n return ignoreUnhandled(Promise.reject(undefined));\n }\n\n const currentId = ++id.current;\n const currentDialog = {\n props: null,\n meta: { id: currentId, isClosed: false, isVisible: true },\n } as unknown as Dialog;\n // Set while an action handler's promise runs: the dialog stays open.\n let pending: AlertDialogResolveStatus | null = null;\n\n const setPending = (status: AlertDialogResolveStatus | null) => {\n pending = status;\n setPendingAction((current) =>\n status\n ? { id: currentId, status }\n : current?.id === currentId\n ? null\n : current,\n );\n };\n\n // Set by an abort that came while an action ran.\n let isAbortedWhilePending = false;\n\n // Aborting is a cancel, so it settles the promise the way Cancel does.\n // A running action finishes first, as it does on Escape: cut short, a\n // delete that went through would be reported as cancelled.\n const onAbort = () => {\n if (pending) {\n isAbortedWhilePending = true;\n\n return;\n }\n\n currentDialog.meta.reject(undefined);\n };\n\n const close = () => {\n if (currentDialog.meta.isClosed) return false;\n\n currentDialog.meta.isClosed = true;\n\n for (const signal of signals) {\n signal.removeEventListener('abort', onAbort);\n }\n\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId\n ? currentState\n : {\n props: currentState.props,\n meta: { ...currentState.meta, isVisible: false },\n },\n );\n\n setTimeout(\n () =>\n setOpenedDialog((currentState) =>\n currentState?.meta.id !== currentId ? currentState : null,\n ),\n 300,\n );\n\n return true;\n };\n\n let resolvePromise!: (status: AlertDialogResolveStatus) => void;\n let rejectPromise!: (reason: unknown) => void;\n\n currentDialog.meta.promise = new Promise((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n\n currentDialog.meta.resolve = (status) => {\n if (close()) resolvePromise(status);\n };\n\n // A rejection without a reason is a cancel: the Cancel button, a\n // dismissal, an aborted signal or `content` calling `reject()`.\n // Anything else is a failure.\n currentDialog.meta.reject = (reason) => {\n if (!close()) return;\n\n if (reason !== undefined) {\n rejectPromise(reason);\n\n return;\n }\n\n ignoreUnhandled(currentDialog.meta.promise);\n rejectPromise(undefined);\n onCancel?.();\n };\n\n // The confirm and secondary buttons: run the handlers, and settle\n // once they have finished. A handler that throws or rejects keeps the\n // dialog open for another try, unless it was aborted meanwhile.\n currentDialog.meta.act = (status, onPress) => {\n const result = runActionHandlers([\n onPress,\n status === 'confirm' ? onConfirm : onSecondary,\n ]);\n\n if (!isThenable(result)) {\n currentDialog.meta.resolve(status);\n\n return;\n }\n\n setPending(status);\n\n result.then(\n () => {\n setPending(null);\n\n if (currentDialog.meta.isClosed) return;\n\n currentDialog.meta.resolve(status);\n // The press's own dismissal was held back while it ran.\n onDismiss?.(status);\n },\n (error) => {\n setPending(null);\n reportActionError(error);\n\n if (isAbortedWhilePending) currentDialog.meta.reject(undefined);\n },\n );\n };\n\n for (const signal of signals) {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n\n currentDialog.props = {\n ...restProps,\n // Called with the action's name by the action buttons, and without\n // one by Escape and a click outside.\n onDismiss: (action) => {\n if (pending) return;\n\n onDismiss?.(action);\n currentDialog.meta.reject(undefined);\n },\n };\n\n setOpenedDialog((openedDialog) => {\n // Another dialog is open, so this one can't be. One that is only\n // animating out gives way: its cleanup checks the id, so it leaves\n // the new dialog alone.\n if (openedDialog !== null && !openedDialog.meta.isClosed) {\n currentDialog.meta.reject(\n new Error(\n \"Another dialog is already opened. It's a bad practice to open more than one <AlertDialog /> at the same time\",\n ),\n );\n\n return openedDialog;\n }\n\n return currentDialog;\n });\n\n return currentDialog.meta.promise;\n },\n }),\n [],\n );\n\n return (\n <DialogApiContext.Provider value={opener}>\n <AlertDialogZone\n openedDialog={openedDialog}\n pendingAction={pendingAction}\n />\n {props.children}\n </DialogApiContext.Provider>\n );\n}\n\n/**\n * Hook gives the ability to open `<AlertDialog />` imperatively.\n *\n * Pass the action as `onConfirm`. If it returns a promise, the dialog waits\n * for it with the button loading, and stays open if it fails.\n *\n * The returned promise resolves with the action the user picked and rejects\n * with `undefined` on a cancel. A caller that runs everything in the callbacks\n * can ignore it: an ignored cancel is not reported as an unhandled rejection.\n *\n * A dialog belongs to the component that calls this hook: when that component\n * unmounts, its dialog closes as a cancel, so no callback runs against a\n * component that is gone. Call the hook in a component that stays mounted\n * while the dialog is open, such as the one that renders a menu, not in the\n * menu item that closes it. A confirm or secondary action that is running\n * finishes first.\n *\n * ***Important*** only one alert dialog can be open at a time: `open` rejects\n * with an `Error` while another one is open. A dialog that is already closing\n * gives way.\n *\n * @example running the action from the dialog.\n * const { open } = useAlertDialogAPI();\n *\n * const onPress = () => {\n * open({\n * title: 'Delete the item?',\n * danger: true,\n * actions: { confirm: { children: 'Delete' }, cancel: true },\n * onConfirm: () => deleteItem(),\n * });\n * };\n *\n * return <Button onPress={onPress}>Delete</Button>\n *\n * @example closing the dialog from code with a cancel token.\n * const { open } = useAlertDialogAPI();\n * const controllerRef = useRef<AbortController | null>(null);\n *\n * const onPress = () => {\n * // A signal stays aborted, so every dialog needs a fresh controller.\n * controllerRef.current = new AbortController();\n *\n * open(\n * { title: 'Waiting for approval', actions: { confirm: { children: 'Hide' } } },\n * { cancelToken: controllerRef.current.signal },\n * );\n * };\n *\n * // Later, e.g. when the approval arrives:\n * controllerRef.current?.abort();\n */\nexport function useAlertDialogAPI(): AlertDialogApi {\n const opener = useContext(DialogApiContext);\n\n invariant(\n opener !== null,\n \"You can't use DialogApi outside of <Root /> component. Please, check if your component is descendant of <Root/> component\",\n );\n\n const [owner] = useState(() => createDialogOwner(opener));\n\n // A layout effect, so it is in place before any passive effect calls `open`.\n useLayoutEffect(() => owner.attach(), [owner]);\n\n return owner.api;\n}\n\n/**\n * One `useAlertDialogAPI` caller's `open`, whose dialogs close when the\n * caller unmounts. Its identity is the caller's for good: callers put `open`\n * in effect dependencies.\n */\nfunction createDialogOwner(opener: AlertDialogOpener) {\n // Aborted on unmount. Made on first use, so a StrictMode remount, which\n // runs the cleanup once, gets a fresh one.\n let lifetime: AbortController | null = null;\n let isUnmounted = false;\n\n const api: AlertDialogApi = {\n open: (dialogProps, params = {}) => {\n let owner: AbortSignal;\n\n if (isUnmounted) {\n // A late call, after an `await`, from a caller that is gone.\n owner = AbortSignal.abort();\n } else {\n lifetime ??= new AbortController();\n owner = lifetime.signal;\n }\n\n const { cancelToken } = params;\n\n return opener.open(\n dialogProps,\n cancelToken ? [owner, cancelToken] : [owner],\n );\n },\n };\n\n /** The effect setup. Its cleanup closes the dialogs the caller opened. */\n const attach = () => {\n isUnmounted = false;\n\n return () => {\n isUnmounted = true;\n lifetime?.abort();\n lifetime = null;\n };\n };\n\n return { api, attach };\n}\n"],"mappings":";;;;;;;;AAyBA,MAAMiB,mBAAmBjB,cAAwC,KAAK;AAwBtE,SAASsB,WAAWC,OAA+C;AACjE,QAAO,CAAC,CAACA,SAAS,OAAQA,MAA+BE,SAAS;;;AAIpE,SAASC,WAAWC,SAA+C;AACjE,KAAI,CAACA,QAAS,QAAOC;AAErB,KAAI;AACF,SAAOD,SAAS;UACTE,OAAO;AACd,SAAOb,QAAQc,OAAOD,MAAM;;;;;;;AAQhC,SAASE,kBAAkBC,UAA2C;CACpE,MAAMC,UAAUD,SAASE,IAAIR,WAAW,CAACS,OAAOb,WAAW;AAE3D,QAAOW,QAAQG,SAASpB,QAAQqB,IAAIJ,QAAQ,GAAGL;;;AAIjD,SAASU,gBAAmBC,SAAqB;AAC/CA,SAAQE,YAAY,GAAG;AAEvB,QAAOF;;;AAIT,SAASG,kBAAkBb,OAAgB;AACzC,KAAI,OAAOc,WAAWC,gBAAgB,WACpCD,YAAWC,YAAYf,MAAM;KAE7BgB,kBAAiB;AACf,QAAMhB;GACN;;;;;AAgBN,SAAOoB,uBAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,CAAAC,cAAAC,mBAAwCjD,SAAwB,KAAK;CACrE,MAAA,CAAAkD,eAAAC,oBAA0CnD,SACxC,KACD;CACD,MAAA0C,KAAW3C,OAAO,EAAE;CAAC,IAAAqD;AAAA,KAAAN,EAAA,OAAAO,OAAAC,IAAA,4BAAA,EAAA;AAKZF,OAAA,EAAA7C,OACCC,aAAAC,YAAA;GACJ,MAAA,EAAA8C,WAAAC,WAAAC,aAAAC,UAAA,GAAAC,cACEnD;AAGF,OAAIC,QAAOmD,KAAMC,MAA2B,EAAA;AAC1CH,gBAAY;AAAA,WAELzB,gBAAgBtB,QAAOc,OAAQF,OAAU,CAAC;;GAGnD,MAAAuC,YAAoBpB,GAAEqB,UAAFrB,GAAEqB,UAAQ;GAC9B,MAAAC,gBAAsB;IAAAnB,OACb;IAAIoB,MACL;KAAAvB,IAAMoB;KAASI,UAAY;KAAKC,WAAa;KAAK;IACzD;GAED,IAAAvC,UAA+C;GAE/C,MAAAwC,cAAmBzB,WAAA;AACjBf,cAAUe;AACVQ,sBAAiBY,YACfpB,SAAA;KAAAD,IACUoB;KAASnB;KAGN,GAFToB,SAAOrB,OAASoB,YAAhB,OAAAC,QAGL;;GAIH,IAAAM,wBAA4B;GAK5B,MAAAC,gBAAgB;AACd,QAAI1C,SAAO;AACTyC,6BAAwBA;AAAH;;AAKvBL,kBAAaC,KAAKxC,OAAQF,OAAU;;GAGtC,MAAAgD,cAAc;AACZ,QAAIP,cAAaC,KAAKC,SAAS,QAAS;AAExCF,kBAAaC,KAAKC,WAAY;AAE9B,SAAK,MAAAM,YAAgB/D,QACnBgE,UAAMC,oBAAqB,SAASJ,QAAQ;AAG9CrB,qBAAgB0B,iBACdA,cAAYV,KAASvB,OAAKoB,YAA1Ba,eAAA;KAAA9B,OAGa8B,aAAY9B;KAAMoB,MACnB;MAAA,GAAKU,aAAYV;MAAKE,WAAa;MAAM;KAEvD,CAAC;AAED3B,qBAEIS,iBAAgB2B,mBACdD,gBAAYV,KAASvB,OAAKoB,YAA1Bc,iBAAA,KACD,EACH,IACD;AAAA,WAEM;;GAGLC,IAAAA;GACAC,IAAAA;AAEJd,iBAAaC,KAAK/B,UAAW,IAAIvB,SAAQoE,SAAAtD,WAAA;AACvCoD,qBAAiBE;AACjBD,oBAAgBrD;KAFQ;AAK1BuC,iBAAaC,KAAKc,WAAWC,aAAA;AAC3B,QAAIT,OAAO,CAAEM,gBAAelC,SAAO;;AAMrCqB,iBAAaC,KAAKxC,UAAUwD,WAAA;AAC1B,QAAI,CAACV,OAAO,CAAA;AAEZ,QAAIU,WAAW1D,QAAS;AACtBuD,mBAAcG,OAAO;AAAA;;AAKvBhD,oBAAgB+B,cAAaC,KAAK/B,QAAS;AAC3C4C,kBAAcvD,OAAU;AACxBmC,gBAAY;;AAMdM,iBAAaC,KAAKiB,OAAOC,UAAAC,YAAA;IACvB,MAAAC,SAAe3D,kBAAkB,CAC/B0D,SACAzC,aAAW,YAAXa,YAAAC,YACD,CAAC;AAEF,QAAI,CAACxC,WAAWoE,OAAO,EAAA;AACrBrB,mBAAaC,KAAKc,QAASpC,SAAO;AAAA;;AAKpCyB,eAAWzB,SAAO;AAElB0C,WAAMjE,WACJ;AACEgD,gBAAW,KAAK;AAEhB,SAAIJ,cAAaC,KAAKC,SAAS;AAE/BF,mBAAaC,KAAKc,QAASpC,SAAO;AAElCY,iBAAYZ,SAAO;QAErBnB,UAAA;AACE4C,gBAAW,KAAK;AAChB/B,uBAAkBb,MAAM;AAExB,SAAI6C,sBAAuBL,eAAaC,KAAKxC,OAAQF,OAAU;MAElE;;AAGH,QAAK,MAAA+D,YAAgB7E,QACnBgE,UAAMc,iBAAkB,SAASjB,SAAS,EAAAkB,MAAQ,MAAM,CAAC;AAG3DxB,iBAAanB,QAAS;IAAA,GACjBc;IAASJ,YAGDkC,WAAA;AACT,SAAI7D,QAAO;AAEX2B,iBAAYkC,OAAO;AACnBzB,mBAAaC,KAAKxC,OAAQF,OAAU;;IARrB;AAYnB0B,oBAAgByC,mBAAA;AAId,QAAI1C,mBAAiB,QAAjB,CAA0BA,eAAYiB,KAAKC,UAAS;AACtDF,mBAAaC,KAAKxC,uBAChB,IAAIkE,MACF,+GAEJ,CAAC;AAAA,YAEM3C;;AACR,WAEMgB;KACP;AAAA,UAEKA,cAAaC,KAAK/B;KAE5B;AAAAY,IAAA,KAAAM;OAAAA,MAAAN,EAAA;CAjLH,MAAA8C,SACSxC;CAkLP,IAAAyC;AAAA,KAAA/C,EAAA,OAAAE,gBAAAF,EAAA,OAAAI,eAAA;AAIE2C,OAAA,oBAAC;GACe7C;GACCE;IACf;AAAAJ,IAAA,KAAAE;AAAAF,IAAA,KAAAI;AAAAJ,IAAA,KAAA+C;OAAAA,MAAA/C,EAAA;CAAA,IAAAgD;AAAA,KAAAhD,EAAA,OAAAD,MAAAkD,YAAAjD,EAAA,OAAA+C,IAAA;AAJJC,OAAA,qBAAA,iBAAA;GAAkCF,OAAAA;cAChCC,IAIChD,MAAKkD;IACoB;AAAAjD,IAAA,KAAAD,MAAAkD;AAAAjD,IAAA,KAAA+C;AAAA/C,IAAA,KAAAgD;OAAAA,MAAAhD,EAAA;AAAA,QAN5BgD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA/LG,SAAAjC,MAAAY,QAAA;AAAA,QAgB8BA,OAAMuB;;AA6O3C,SAAOC,oBAAA;CAAA,MAAAnD,IAAAC,EAAA,EAAA;CACL,MAAA6C,SAAehG,WAAWgB,iBAAiB;AAE3CX,WACE2F,WAAW,MACX,4HACD;CAAA,IAAAxC;AAAA,KAAAN,EAAA,OAAA8C,QAAA;AAEwBxC,aAAM8C,kBAAkBN,OAAO;AAAA9C,IAAA,KAAA8C;AAAA9C,IAAA,KAAAM;OAAAA,MAAAN,EAAA;CAAxD,MAAA,CAAAqD,SAAgBnG,SAASoD,GAAgC;CAAC,IAAAyC;CAAA,IAAAC;AAAA,KAAAhD,EAAA,OAAAqD,OAAA;AAG1CN,aAAMM,MAAKC,QAAS;AAAEN,OAAA,CAACK,MAAM;AAAArD,IAAA,KAAAqD;AAAArD,IAAA,KAAA+C;AAAA/C,IAAA,KAAAgD;QAAA;AAAAD,OAAA/C,EAAA;AAAAgD,OAAAhD,EAAA;;AAA7CjD,iBAAgBgG,IAAsBC,GAAQ;AAAA,QAEvCK,MAAKE;;;;;;;AAQd,SAASH,kBAAkBN,QAA2B;CAGpD,IAAIU,WAAmC;CACvC,IAAIE,cAAc;CAElB,MAAMH,MAAsB,EAC1B9F,OAAOC,aAAaM,SAAS,EAAE,KAAK;EAClC,IAAIqF;AAEJ,MAAIK,YAEFL,SAAQzF,YAAY+F,OAAO;OACtB;AACLH,gBAAa,IAAIC,iBAAiB;AAClCJ,WAAQG,SAAS7B;;EAGnB,MAAM,EAAEzD,gBAAgBF;AAExB,SAAO8E,OAAOrF,KACZC,aACAQ,cAAc,CAACmF,OAAOnF,YAAY,GAAG,CAACmF,MACxC,CAAC;IAEJ;;CAGD,MAAMC,eAAe;AACnBI,gBAAc;AAEd,eAAa;AACXA,iBAAc;AACdF,aAAUG,OAAO;AACjBH,cAAW;;;AAIf,QAAO;EAAED;EAAKD;EAAQ"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-266381a | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-367446a | Cube Dev Team */
2
2
  import { Portal } from "../../portal/Portal.js";
3
3
  import { DialogContainer } from "../Dialog/DialogContainer.js";
4
4
  import { _AlertDialog } from "./AlertDialog.js";