@cube-dev/ui-kit 0.203.0 → 0.205.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (614) hide show
  1. package/dist/CHANGELOG.md +22 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/actions-run.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  61. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  62. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  63. package/dist/components/content/Layout/GridLayout.js +1 -1
  64. package/dist/components/content/Layout/Layout.js +1 -1
  65. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  66. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  67. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  68. package/dist/components/content/Layout/LayoutContent.js +1 -1
  69. package/dist/components/content/Layout/LayoutContext.js +1 -1
  70. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  71. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  72. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  73. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutPane.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanel.js +2 -2
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/checked-keys.js +1 -1
  96. package/dist/components/content/Tree/rowId.js +1 -1
  97. package/dist/components/content/Tree/styled.js +1 -1
  98. package/dist/components/content/Tree/tree-index.js +1 -1
  99. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  100. package/dist/components/content/Tree/use-load-data.js +1 -1
  101. package/dist/components/content/highlightText.js +1 -1
  102. package/dist/components/content/use-auto-tooltip.js +1 -1
  103. package/dist/components/data/DataTable/DataTable.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  109. package/dist/components/data/ItemTable/item-table-sections.js +1 -1
  110. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  111. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  112. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  113. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  114. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  115. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  116. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  117. package/dist/components/data/TableBase/RowCollection.js +1 -1
  118. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  119. package/dist/components/data/TableBase/TableRow.js +1 -1
  120. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  121. package/dist/components/data/TableBase/TableView.js +1 -1
  122. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  123. package/dist/components/data/TableBase/column-header.js +1 -1
  124. package/dist/components/data/TableBase/column-menu.js +1 -1
  125. package/dist/components/data/TableBase/column-styles.js +1 -1
  126. package/dist/components/data/TableBase/column-tint.js +1 -1
  127. package/dist/components/data/TableBase/row-menu.js +1 -1
  128. package/dist/components/data/TableBase/styled.js +1 -1
  129. package/dist/components/data/TableBase/table-body-sections.js +1 -1
  130. package/dist/components/data/TableBase/table-tree.js +1 -1
  131. package/dist/components/data/TableBase/types.js +1 -1
  132. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  133. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  134. package/dist/components/data/TableBase/use-column-order.js +1 -1
  135. package/dist/components/data/TableBase/use-column-window.js +1 -1
  136. package/dist/components/data/TableBase/use-container-width.js +1 -1
  137. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  138. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  139. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  140. package/dist/components/data/TableBase/use-table-search.js +1 -1
  141. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  142. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  143. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  144. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  145. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  146. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  147. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  148. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  149. package/dist/components/fields/Checkbox/context.js +1 -1
  150. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  151. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  152. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  153. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  154. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  155. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  156. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  157. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  158. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  159. package/dist/components/fields/DatePicker/CalendarPopover.js +281 -0
  160. package/dist/components/fields/DatePicker/CalendarPopover.js.map +1 -0
  161. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  162. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  163. package/dist/components/fields/DatePicker/DatePicker.js +26 -24
  164. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  166. package/dist/components/fields/DatePicker/DatePickerElement.js +4 -2
  167. package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
  168. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  169. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  170. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +10 -0
  171. package/dist/components/fields/DatePicker/DateRangePicker.js +143 -65
  172. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  173. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +172 -165
  174. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  175. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  179. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  181. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  182. package/dist/components/fields/DatePicker/period.js +1 -1
  183. package/dist/components/fields/DatePicker/props.js +1 -1
  184. package/dist/components/fields/DatePicker/utils.js +1 -1
  185. package/dist/components/fields/FileInput/FileInput.js +1 -1
  186. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  187. package/dist/components/fields/FilterListBox/styled.js +1 -1
  188. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  189. package/dist/components/fields/FilterPicker/FilterTree.js +1 -1
  190. package/dist/components/fields/Input/Input.js +1 -1
  191. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  192. package/dist/components/fields/ListBox/ListBox.js +1 -1
  193. package/dist/components/fields/ListBox/optionId.js +1 -1
  194. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  195. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  196. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  197. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  198. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  199. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  200. package/dist/components/fields/Picker/Picker.js +1 -1
  201. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  202. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  203. package/dist/components/fields/RadioGroup/context.js +1 -1
  204. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  205. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  206. package/dist/components/fields/Select/Select.js +1 -1
  207. package/dist/components/fields/Slider/Gradation.js +1 -1
  208. package/dist/components/fields/Slider/HueSlider.js +1 -1
  209. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  210. package/dist/components/fields/Slider/Slider.js +1 -1
  211. package/dist/components/fields/Slider/SliderBase.js +1 -1
  212. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  213. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  214. package/dist/components/fields/Slider/elements.js +1 -1
  215. package/dist/components/fields/Slider/index.js +1 -1
  216. package/dist/components/fields/Switch/Switch.js +1 -1
  217. package/dist/components/fields/TagInput/TagInput.js +1 -1
  218. package/dist/components/fields/TagInput/TagList.js +1 -1
  219. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  220. package/dist/components/fields/TagInput/useTagError.js +1 -1
  221. package/dist/components/fields/TextArea/TextArea.js +1 -1
  222. package/dist/components/fields/TextInput/TextInput.js +1 -1
  223. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  224. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  225. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  226. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  227. package/dist/components/fields/TriggerActions.js +1 -1
  228. package/dist/components/fields/color/ColorPanel.js +1 -1
  229. package/dist/components/fields/color/channels.js +1 -1
  230. package/dist/components/fields/color/color.js +1 -1
  231. package/dist/components/fields/color/context.js +1 -1
  232. package/dist/components/fields/option-origin-press.js +1 -1
  233. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  234. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  235. package/dist/components/form/Form/Field.js +1 -1
  236. package/dist/components/form/Form/Form.js +1 -1
  237. package/dist/components/form/Form/ModernFormRoot.js +198 -174
  238. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  239. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  240. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  241. package/dist/components/form/Form/SubmitError.js +1 -1
  242. package/dist/components/form/Form/backend.js +1 -1
  243. package/dist/components/form/Form/index.js +1 -1
  244. package/dist/components/form/Form/modern/actions.js +1 -1
  245. package/dist/components/form/Form/modern/context.js +1 -1
  246. package/dist/components/form/Form/modern/controller.js +1 -1
  247. package/dist/components/form/Form/modern/field-binding.js +1 -1
  248. package/dist/components/form/Form/modern/field.js +1 -1
  249. package/dist/components/form/Form/modern/react.js +1 -1
  250. package/dist/components/form/Form/modern/store.js +34 -3
  251. package/dist/components/form/Form/modern/store.js.map +1 -1
  252. package/dist/components/form/Form/modern/types.d.ts +5 -0
  253. package/dist/components/form/Form/modern/validation.js +1 -1
  254. package/dist/components/form/Form/modern/values.js +1 -1
  255. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  256. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  257. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  258. package/dist/components/form/Form/use-field/use-field.js +1 -1
  259. package/dist/components/form/Form/use-form.js +1 -1
  260. package/dist/components/form/Form/validation.js +1 -1
  261. package/dist/components/form/Label.js +1 -1
  262. package/dist/components/form/field-chrome.js +1 -1
  263. package/dist/components/form/field-layout.js +1 -1
  264. package/dist/components/form/legacy-tooltip.js +1 -1
  265. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  266. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  267. package/dist/components/form/validation/use-validation-props.js +1 -1
  268. package/dist/components/form/wrapper.js +1 -1
  269. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  270. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  271. package/dist/components/layout/Flex.js +1 -1
  272. package/dist/components/layout/Flow.js +1 -1
  273. package/dist/components/layout/Grid.js +1 -1
  274. package/dist/components/layout/Panel.js +1 -1
  275. package/dist/components/layout/Prefix.js +1 -1
  276. package/dist/components/layout/ResizablePanel.js +1 -1
  277. package/dist/components/layout/Space.js +1 -1
  278. package/dist/components/layout/Suffix.js +1 -1
  279. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  280. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  281. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  282. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  283. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  284. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  285. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  286. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  287. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  288. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  289. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  290. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  291. package/dist/components/navigation/Tabs/styled.js +1 -1
  292. package/dist/components/navigation/Tabs/types.js +1 -1
  293. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  294. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  295. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  296. package/dist/components/other/Calendar/Calendar.js +1 -1
  297. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  298. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  299. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  300. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  301. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  302. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  303. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  304. package/dist/components/other/Calendar/styled.js +1 -1
  305. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  306. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  307. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  308. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  309. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +2 -2
  310. package/dist/components/overlays/AlertDialog/types.d.ts +1 -1
  311. package/dist/components/overlays/Dialog/Dialog.js +9 -4
  312. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  313. package/dist/components/overlays/Dialog/DialogContainer.d.ts +7 -0
  314. package/dist/components/overlays/Dialog/DialogContainer.js +61 -32
  315. package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
  316. package/dist/components/overlays/Dialog/DialogForm.d.ts +7 -0
  317. package/dist/components/overlays/Dialog/DialogForm.js +10 -3
  318. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  319. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +8 -0
  320. package/dist/components/overlays/Dialog/DialogTrigger.js +24 -11
  321. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  322. package/dist/components/overlays/Dialog/ModernDialogForm.js +178 -172
  323. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  324. package/dist/components/overlays/Dialog/context.js +1 -1
  325. package/dist/components/overlays/Dialog/context.js.map +1 -1
  326. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  327. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  328. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  329. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  330. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +220 -0
  331. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js.map +1 -0
  332. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  333. package/dist/components/overlays/Modal/Modal.js +1 -1
  334. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  335. package/dist/components/overlays/Modal/Overlay.js +1 -1
  336. package/dist/components/overlays/Modal/Popover.js +1 -1
  337. package/dist/components/overlays/Modal/Tray.js +1 -1
  338. package/dist/components/overlays/Modal/Underlay.js +1 -1
  339. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  340. package/dist/components/overlays/Notifications/Notification.js +1 -1
  341. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  342. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  343. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  344. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  345. package/dist/components/overlays/Notifications/OverlayContainer.js +6 -3
  346. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  347. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  348. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  349. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  350. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  351. package/dist/components/overlays/Notifications/index.js +1 -1
  352. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  353. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  354. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  355. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  356. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  357. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  358. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  359. package/dist/components/overlays/Toast/index.js +1 -1
  360. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  361. package/dist/components/overlays/Toast/useToast.js +1 -1
  362. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  363. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  364. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  365. package/dist/components/overlays/Tooltip/context.js +1 -1
  366. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  367. package/dist/components/portal/Portal.js +1 -1
  368. package/dist/components/portal/PortalProvider.js +1 -1
  369. package/dist/components/portal/usePortal.js +1 -1
  370. package/dist/components/shared/DraggableCollection.js +1 -1
  371. package/dist/components/shared/InvalidIcon.js +1 -1
  372. package/dist/components/shared/ValidIcon.js +1 -1
  373. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  374. package/dist/components/status/Spin/Cube.js +1 -1
  375. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  376. package/dist/components/status/Spin/Spin.js +1 -1
  377. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  378. package/dist/data/item-themes.js +1 -1
  379. package/dist/data/themes.js +1 -1
  380. package/dist/eslint-plugin/defaults.generated.js +1 -1
  381. package/dist/eslint-plugin/index.js +1 -1
  382. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  383. package/dist/i18n/I18nProvider.js +1 -1
  384. package/dist/i18n/createFormatter.js +1 -1
  385. package/dist/i18n/index.js +1 -1
  386. package/dist/i18n/instance.js +1 -1
  387. package/dist/i18n/locales/de-DE/uikit.js +12 -3
  388. package/dist/i18n/locales/en-US/uikit.js +12 -3
  389. package/dist/i18n/locales/en-US/uikit.json.d.ts +12 -4
  390. package/dist/i18n/locales/es-ES/uikit.js +12 -3
  391. package/dist/i18n/locales/es-MX/uikit.js +12 -3
  392. package/dist/i18n/locales/fr-FR/uikit.js +12 -3
  393. package/dist/i18n/locales/it-IT/uikit.js +12 -3
  394. package/dist/i18n/locales/ja-JP/uikit.js +12 -3
  395. package/dist/i18n/locales/nb-NO/uikit.js +12 -3
  396. package/dist/i18n/locales/pt-BR/uikit.js +12 -3
  397. package/dist/i18n/locales/pt-PT/uikit.js +12 -3
  398. package/dist/i18n/locales/sv-SE/uikit.js +12 -3
  399. package/dist/i18n/locales/vi-VN/uikit.js +12 -3
  400. package/dist/i18n/locales.js +1 -1
  401. package/dist/i18n/namespace.js +1 -1
  402. package/dist/i18n/useFormatter.js +1 -1
  403. package/dist/i18n/useI18n.js +1 -1
  404. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  405. package/dist/icons/AdjustmentsIcon.js +1 -1
  406. package/dist/icons/AiIcon.js +1 -1
  407. package/dist/icons/AreaChartIcon.js +1 -1
  408. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  409. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  410. package/dist/icons/BackwardIcon.js +1 -1
  411. package/dist/icons/BarChartIcon.js +1 -1
  412. package/dist/icons/BellFilledIcon.js +1 -1
  413. package/dist/icons/BellIcon.js +1 -1
  414. package/dist/icons/BooleanIcon.js +1 -1
  415. package/dist/icons/CalendarEditIcon.js +1 -1
  416. package/dist/icons/CalendarIcon.js +1 -1
  417. package/dist/icons/CaretDownIcon.js +1 -1
  418. package/dist/icons/CaretUpIcon.js +1 -1
  419. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  420. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  421. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  422. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  423. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  424. package/dist/icons/ChartBarLineIcon.js +1 -1
  425. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  426. package/dist/icons/ChartBarStackedIcon.js +1 -1
  427. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  428. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  429. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  430. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  431. package/dist/icons/ChartBubbleIcon.js +1 -1
  432. package/dist/icons/ChartDonut2Icon.js +1 -1
  433. package/dist/icons/ChartFunnelIcon.js +1 -1
  434. package/dist/icons/ChartHeatmapIcon.js +1 -1
  435. package/dist/icons/ChartKPIIcon.js +1 -1
  436. package/dist/icons/ChartPie2Icon.js +1 -1
  437. package/dist/icons/ChartScatterIcon.js +1 -1
  438. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  439. package/dist/icons/CheckCircleIcon.js +1 -1
  440. package/dist/icons/CheckIcon.js +1 -1
  441. package/dist/icons/CircleFilledIcon.js +1 -1
  442. package/dist/icons/ClearIcon.js +1 -1
  443. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  444. package/dist/icons/CloseCircleIcon.js +1 -1
  445. package/dist/icons/CloseIcon.js +1 -1
  446. package/dist/icons/CodeIcon.js +1 -1
  447. package/dist/icons/ColumnTotalIcon.js +1 -1
  448. package/dist/icons/CopyIcon.js +1 -1
  449. package/dist/icons/CountIcon.js +1 -1
  450. package/dist/icons/CubeIcon.js +1 -1
  451. package/dist/icons/CubePauseIcon.js +1 -1
  452. package/dist/icons/CubePlayIcon.js +1 -1
  453. package/dist/icons/CurrencyDollarIcon.js +1 -1
  454. package/dist/icons/DangerIcon.js +1 -1
  455. package/dist/icons/DashboardIcon.js +1 -1
  456. package/dist/icons/DatabaseIcon.js +1 -1
  457. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  458. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  459. package/dist/icons/DirectionIcon.js +1 -1
  460. package/dist/icons/DonutIcon.js +1 -1
  461. package/dist/icons/DownIcon.js +1 -1
  462. package/dist/icons/EditIcon.js +1 -1
  463. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  464. package/dist/icons/ExclamationCircleIcon.js +1 -1
  465. package/dist/icons/ExclamationIcon.js +1 -1
  466. package/dist/icons/EyeIcon.js +1 -1
  467. package/dist/icons/EyeInvisibleIcon.js +1 -1
  468. package/dist/icons/FilterIcon.js +1 -1
  469. package/dist/icons/FolderFilledIcon.js +1 -1
  470. package/dist/icons/FolderIcon.js +1 -1
  471. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  472. package/dist/icons/FolderOpenIcon.js +1 -1
  473. package/dist/icons/ForwardIcon.js +1 -1
  474. package/dist/icons/GripVerticalIcon.js +1 -1
  475. package/dist/icons/HierarchyIcon.js +1 -1
  476. package/dist/icons/HierarchyOpenIcon.js +1 -1
  477. package/dist/icons/Icon.js +1 -1
  478. package/dist/icons/InfoCircleIcon.js +1 -1
  479. package/dist/icons/InfoIcon.js +1 -1
  480. package/dist/icons/KeyIcon.js +1 -1
  481. package/dist/icons/LeftIcon.js +1 -1
  482. package/dist/icons/LineChartIcon.js +1 -1
  483. package/dist/icons/LoadingIcon.js +1 -1
  484. package/dist/icons/LockFilledIcon.js +1 -1
  485. package/dist/icons/LockIcon.js +1 -1
  486. package/dist/icons/MoreIcon.js +1 -1
  487. package/dist/icons/NotAllowedIcon.js +1 -1
  488. package/dist/icons/Number123Icon.js +1 -1
  489. package/dist/icons/NumberIcon.js +1 -1
  490. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  491. package/dist/icons/PauseCircleIcon.js +1 -1
  492. package/dist/icons/PauseIcon.js +1 -1
  493. package/dist/icons/PercentageIcon.js +1 -1
  494. package/dist/icons/PieChartIcon.js +1 -1
  495. package/dist/icons/PipetteIcon.js +1 -1
  496. package/dist/icons/PlayCircleIcon.js +1 -1
  497. package/dist/icons/PlayIcon.js +1 -1
  498. package/dist/icons/PlusIcon.js +1 -1
  499. package/dist/icons/ProgressBarIcon.js +1 -1
  500. package/dist/icons/ReloadIcon.js +1 -1
  501. package/dist/icons/ReportIcon.js +1 -1
  502. package/dist/icons/ReturnIcon.js +1 -1
  503. package/dist/icons/RightIcon.js +1 -1
  504. package/dist/icons/RowTotalsIcon.js +1 -1
  505. package/dist/icons/SchemeIcon.js +1 -1
  506. package/dist/icons/SearchIcon.js +1 -1
  507. package/dist/icons/SemanticQueryIcon.js +1 -1
  508. package/dist/icons/SettingsIcon.js +1 -1
  509. package/dist/icons/ShieldFilledIcon.js +1 -1
  510. package/dist/icons/ShieldIcon.js +1 -1
  511. package/dist/icons/SlashIcon.js +1 -1
  512. package/dist/icons/SparklesIcon.js +1 -1
  513. package/dist/icons/SqlIcon.js +1 -1
  514. package/dist/icons/StatsIcon.js +1 -1
  515. package/dist/icons/StopIcon.js +1 -1
  516. package/dist/icons/StringIcon.js +1 -1
  517. package/dist/icons/SubtotalsIcon.js +1 -1
  518. package/dist/icons/SwitchIcon.js +1 -1
  519. package/dist/icons/TableIcon.js +1 -1
  520. package/dist/icons/ThumbsDownIcon.js +1 -1
  521. package/dist/icons/ThumbsUpIcon.js +1 -1
  522. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  523. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  524. package/dist/icons/ThunderboltIcon.js +1 -1
  525. package/dist/icons/TimeIcon.js +1 -1
  526. package/dist/icons/TrashIcon.js +1 -1
  527. package/dist/icons/UnlockIcon.js +1 -1
  528. package/dist/icons/UpIcon.js +1 -1
  529. package/dist/icons/UserGroupIcon.js +1 -1
  530. package/dist/icons/UserIcon.js +1 -1
  531. package/dist/icons/UserLockIcon.js +1 -1
  532. package/dist/icons/ViewIcon.js +1 -1
  533. package/dist/icons/WarningFilledIcon.js +1 -1
  534. package/dist/icons/WarningIcon.js +1 -1
  535. package/dist/icons/wrap-icon.js +1 -1
  536. package/dist/index.js +2 -2
  537. package/dist/probe/canonicalize.js +1 -1
  538. package/dist/probe/css.js +1 -1
  539. package/dist/probe/index.js +1 -1
  540. package/dist/provider.js +1 -1
  541. package/dist/providers/TrackingProvider.js +1 -1
  542. package/dist/providers/navigation-url.js +1 -1
  543. package/dist/providers/navigationAdapter.default.js +1 -1
  544. package/dist/providers/use-navigation.js +1 -1
  545. package/dist/tokens/all-tokens.js +1 -1
  546. package/dist/tokens/base.js +1 -1
  547. package/dist/tokens/color-seed.js +1 -1
  548. package/dist/tokens/color-theme.js +1 -1
  549. package/dist/tokens/colors.js +1 -1
  550. package/dist/tokens/layout.js +1 -1
  551. package/dist/tokens/lazy-styles.js +1 -1
  552. package/dist/tokens/legacy-color.js +1 -1
  553. package/dist/tokens/palette-config.js +1 -1
  554. package/dist/tokens/palette.js +1 -1
  555. package/dist/tokens/resolve.js +1 -1
  556. package/dist/tokens/shadows.js +1 -1
  557. package/dist/tokens/sizes.js +1 -1
  558. package/dist/tokens/spacing.js +1 -1
  559. package/dist/tokens/typography.js +1 -1
  560. package/dist/utils/ResizeSensor.js +1 -1
  561. package/dist/utils/colors.js +1 -1
  562. package/dist/utils/dotize.js +1 -1
  563. package/dist/utils/is-dev-env.js +1 -1
  564. package/dist/utils/modules.js +1 -1
  565. package/dist/utils/promise.js +1 -1
  566. package/dist/utils/raf.js +1 -1
  567. package/dist/utils/random.js +1 -1
  568. package/dist/utils/range.js +1 -1
  569. package/dist/utils/react/RenderCache.js +1 -1
  570. package/dist/utils/react/Slots.js +1 -1
  571. package/dist/utils/react/chain.js +1 -1
  572. package/dist/utils/react/disabledProps.js +1 -1
  573. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  574. package/dist/utils/react/index.js +1 -1
  575. package/dist/utils/react/interactions.js +1 -1
  576. package/dist/utils/react/isTextOnly.js +1 -1
  577. package/dist/utils/react/mapProps.js +1 -1
  578. package/dist/utils/react/mergeProps.js +1 -1
  579. package/dist/utils/react/nullableValue.js +1 -1
  580. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  581. package/dist/utils/react/programmaticFocus.js +1 -1
  582. package/dist/utils/react/resolveIcon.js +1 -1
  583. package/dist/utils/react/sharedStore.js +1 -1
  584. package/dist/utils/react/useBufferedValue.js +1 -1
  585. package/dist/utils/react/useCombinedRefs.js +1 -1
  586. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  587. package/dist/utils/react/useEventBus.js +1 -1
  588. package/dist/utils/react/useId.js +1 -1
  589. package/dist/utils/react/useIsDarwin.js +1 -1
  590. package/dist/utils/react/useKeySymbols.js +1 -1
  591. package/dist/utils/react/useLayoutEffect.js +1 -1
  592. package/dist/utils/react/useLocalStorage.js +1 -1
  593. package/dist/utils/react/useMergeStyles.js +1 -1
  594. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  595. package/dist/utils/react/usePopoverSync.js +1 -1
  596. package/dist/utils/react/useQaProps.js +1 -1
  597. package/dist/utils/react/useScheme.js +1 -1
  598. package/dist/utils/react/useViewportSize.js +1 -1
  599. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  600. package/dist/utils/selection.js +1 -1
  601. package/dist/utils/styles.js +1 -1
  602. package/dist/utils/tree.js +1 -1
  603. package/dist/utils/warnings.js +1 -1
  604. package/dist/version.js +2 -2
  605. package/docs/components/form/Form.md +2 -0
  606. package/docs/components/form/ModernForm.md +5 -1
  607. package/docs/components/overlays/Dialog.md +2 -2
  608. package/docs/components/overlays/DialogContainer.md +1 -0
  609. package/docs/components/overlays/DialogForm.md +3 -1
  610. package/docs/components/overlays/DialogTrigger.md +31 -1
  611. package/docs/components/overlays/Notifications.md +17 -0
  612. package/docs/components/overlays/Toast.md +1 -1
  613. package/docs/modern-form-guide.md +5 -1
  614. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { normalizePath } from "./values.js";
3
3
  //#region src/components/form/Form/modern/field.ts
4
4
  function createFormField(form, path, options = {}) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../../utils/react/useLayoutEffect.js";
3
3
  import { ModernControllerContext } from "./context.js";
4
4
  import { getFieldKey, normalizePath, readPath } from "./values.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { FORM_BACKEND } from "../backend.js";
3
3
  import { createValueSnapshotter, defineValue, formValueEqual, freezeContainer, getFieldKey, hasPath, isPlainObject, normalizePath, pathValueChanged, readPath, readonlySet, sameMembers, writePath } from "./values.js";
4
4
  import { rulesSignature, runRules } from "./validation.js";
@@ -94,6 +94,8 @@ function createFormStore(inputOptions = {}) {
94
94
  explicit,
95
95
  registrations: /* @__PURE__ */ new Set(),
96
96
  touched: false,
97
+ edited: false,
98
+ userWrites: 0,
97
99
  errors: EMPTY_ERRORS,
98
100
  status: "unvalidated",
99
101
  validationRevision: 0
@@ -292,6 +294,10 @@ function createFormStore(inputOptions = {}) {
292
294
  invalidateRelated(record.path, previous, config);
293
295
  }
294
296
  if (config.touch ?? config.source === "user") record.touched = true;
297
+ if (config.source === "user") {
298
+ record.edited = true;
299
+ record.userWrites++;
300
+ }
295
301
  if (changed && (config.notify ?? config.source === "user")) event([record.name], "set", config.source);
296
302
  return changed;
297
303
  }
@@ -403,6 +409,7 @@ function createFormStore(inputOptions = {}) {
403
409
  const previous = values;
404
410
  values = writePath(values, record.path, void 0, true);
405
411
  record.touched = false;
412
+ record.edited = false;
406
413
  invalidateRelated(record.path, previous, { validate: "auto" });
407
414
  if (!hasPath(defaults, record.path)) records.delete(record.name);
408
415
  };
@@ -435,9 +442,11 @@ function createFormStore(inputOptions = {}) {
435
442
  for (const record of records.values()) {
436
443
  invalidate(record);
437
444
  record.touched = false;
445
+ record.edited = false;
438
446
  }
439
447
  event(Array.from(records.keys()), "defaults");
440
448
  }
449
+ spendCleanEdits();
441
450
  });
442
451
  }
443
452
  function adoptDefaultValues(next, config = {}) {
@@ -464,8 +473,21 @@ function createFormStore(inputOptions = {}) {
464
473
  if (changed) names.push(record.name);
465
474
  }
466
475
  event(names, "adopt");
476
+ spendCleanEdits();
467
477
  });
468
478
  }
479
+ function spendCleanEdits() {
480
+ for (const record of records.values()) if (record.edited && !dirty(record)) record.edited = false;
481
+ }
482
+ function snapshotSubmission(include) {
483
+ return {
484
+ payload: include === "all" ? values : activeValues(),
485
+ userWrites: new Map(Array.from(records.values(), (record) => [record, record.userWrites]))
486
+ };
487
+ }
488
+ function spendSubmittedEdits({ payload, userWrites }) {
489
+ for (const record of records.values()) if (record.edited && hasPath(payload, record.path) && userWrites.get(record) === record.userWrites) record.edited = false;
490
+ }
469
491
  function reset(config = {}) {
470
492
  batch(() => {
471
493
  if (Object.hasOwn(config, "values")) replaceDefaults(config.values ?? {});
@@ -474,6 +496,7 @@ function createFormStore(inputOptions = {}) {
474
496
  for (const record of records.values()) {
475
497
  invalidate(record);
476
498
  record.touched = false;
499
+ record.edited = false;
477
500
  if (!record.registrations.size && !hasPath(values, record.path)) records.delete(record.name);
478
501
  }
479
502
  const previous = submission;
@@ -737,8 +760,9 @@ function createFormStore(inputOptions = {}) {
737
760
  }
738
761
  return;
739
762
  }
763
+ const submitted = snapshotSubmission(include);
740
764
  try {
741
- await callbacks.onSubmit?.(include === "all" ? values : activeValues(), {
765
+ await callbacks.onSubmit?.(submitted.payload, {
742
766
  include,
743
767
  signal: token.signal
744
768
  });
@@ -762,6 +786,7 @@ function createFormStore(inputOptions = {}) {
762
786
  };
763
787
  }
764
788
  if (!settled) {
789
+ if (result.status === "submitted") spendSubmittedEdits(submitted);
765
790
  token.complete(result.status === "failed" ? { error: result.error } : void 0);
766
791
  finish(result);
767
792
  if (result.status === "submitted" && binding === owner) try {
@@ -855,9 +880,15 @@ function createFormStore(inputOptions = {}) {
855
880
  reset,
856
881
  touch(path, touched = true) {
857
882
  batch(() => {
858
- ensure(path).touched = touched;
883
+ const record = ensure(path);
884
+ record.touched = touched;
885
+ if (!touched) record.edited = false;
859
886
  });
860
887
  },
888
+ hasUserEdits() {
889
+ for (const record of records.values()) if (record.edited && dirty(record)) return true;
890
+ return false;
891
+ },
861
892
  setFieldErrors,
862
893
  clearFieldErrors: (path) => setFieldErrors(path, EMPTY_ERRORS),
863
894
  startValidation,
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","names":["FORM_BACKEND","rulesSignature","runRules","createValueSnapshotter","defineValue","formValueEqual","freezeContainer","getFieldKey","hasPath","isPlainObject","normalizePath","pathValueChanged","readonlySet","readPath","sameMembers","writePath","FormValues","CallbackBinding","FieldState","FormCallbacks","FormChange","FormState","FormStore","FormStoreOptions","ModernFieldValidationResult","ModernSubmitResult","ModernValidationResult","RegistrationOptions","RegistrationToken","SetValueOptions","SubmissionToken","ValidationToken","FormPath","PreparedRegistration","Omit","ErrorValue","dependsOn","Registration","options","signature","order","defaultConsidered","FieldRecord","name","path","explicit","registrations","Set","owner","fieldDefault","value","touched","errors","status","validationRevision","validation","AbortController","reads","Map","readsAll","EMPTY_ERRORS","Object","freeze","EMPTY_OBJECT","EMPTY_FIELDS","create","Readonly","Record","related","a","b","slice","Math","min","length","every","key","index","sameDependencies","is","samePaths","ActivePath","terminal","children","projectActive","previous","result","Array","isArray","child","hasOwn","Reflect","get","createFormStore","inputOptions","T","ownValue","records","listeners","notify","values","defaultValues","defaults","submitError","submission","binding","callbacks","onSubmitted","depth","notifying","disposed","pending","changes","cancellations","state","activeValues","fields","dirtyFields","touchedFields","isDirty","isTouched","isValid","isInvalid","isValidating","isSubmitting","canReset","undefined","revision","assertLive","Error","report","error","onListenerError","console","reportError","developmentError","message","process","env","NODE_ENV","onDevelopmentError","ensure","normalized","record","set","dirty","isEqual","invalidate","keepErrors","controller","add","cancelPending","from","delete","abort","dependencyChanged","some","validationReadChanged","invalidateRelated","config","dependency","fieldChanged","revalidate","size","validate","validateTrigger","validateRecord","tree","node","buildSnapshot","dirtyNames","touchedNames","activeCount","validCount","invalid","validating","resettable","field","defaultValue","active","registrationCount","defineProperty","enumerable","next","flush","events","published","listener","has","resolveCallbacks","onValuesChange","change","names","flatMap","event","source","kind","Promise","resolve","catch","batch","fn","push","write","changed","touch","setValue","prepared","setValues","Partial","entries","map","const","checked","prepareRegistration","deps","rules","rule","enum","seed","registration","register","hashFunctions","rulesKey","released","update","validationChanged","validationDelay","errorPolicy","hasNewDefault","preserve","release","deferValueRemoval","sort","removeValue","queueMicrotask","replaceDefaults","keys","forEach","setDefaultValues","currentValues","replace","adoptDefaultValues","when","preserveDirty","candidates","preserved","filter","exists","saved","reset","setFieldErrors","copied","startValidation","current","signal","aborted","complete","cancel","startSubmission","immediate","parentSignal","AbortSignal","stale","token","committed","validationValues","timer","ReturnType","setTimeout","settled","finish","clearTimeout","removeEventListener","addEventListener","once","run","getValue","getValues","delay","paths","targets","runs","revisions","all","then","results","cancelSubmission","bindCallbacks","own","submit","include","reason","pendingValidation","validatedRecords","changedSinceValidation","fromEntries","onSubmitFailed","onSubmit","failure","subscribe","entry","dispose","clear","getSnapshot","getFieldSnapshot","getActiveValues","subscribeSelector","selector","snapshot","Selected","selected","updateCallbacks","blur","clearFieldErrors","setSubmitError","clearSubmitError","debug","listenerCount","reduce","count"],"sources":["../../../../../src/components/form/Form/modern/store.ts"],"sourcesContent":["import { FORM_BACKEND } from '../backend';\n\nimport { rulesSignature, runRules } from './validation';\nimport {\n createValueSnapshotter,\n defineValue,\n formValueEqual,\n freezeContainer,\n getFieldKey,\n hasPath,\n isPlainObject,\n normalizePath,\n pathValueChanged,\n readonlySet,\n readPath,\n sameMembers,\n writePath,\n} from './values';\n\nimport type { FormValues } from './read-types';\nimport type {\n CallbackBinding,\n FieldState,\n FormCallbacks,\n FormChange,\n FormState,\n FormStore,\n FormStoreOptions,\n ModernFieldValidationResult,\n ModernSubmitResult,\n ModernValidationResult,\n RegistrationOptions,\n RegistrationToken,\n SetValueOptions,\n SubmissionToken,\n ValidationToken,\n} from './types';\nimport type { FormPath } from './values';\n\ninterface PreparedRegistration<ErrorValue> extends Omit<\n RegistrationOptions<ErrorValue>,\n 'dependsOn'\n> {\n readonly dependsOn?: readonly (readonly string[])[];\n}\n\ninterface Registration<ErrorValue> {\n options: PreparedRegistration<ErrorValue>;\n signature: string;\n order: number;\n defaultConsidered: boolean;\n}\n\ninterface FieldRecord<ErrorValue> {\n name: string;\n path: readonly string[];\n /** Defaults create aggregate metadata; explicit commands/fields own guards. */\n explicit: boolean;\n registrations: Set<Registration<ErrorValue>>;\n owner?: Registration<ErrorValue>;\n fieldDefault?: { value: unknown };\n touched: boolean;\n errors: readonly ErrorValue[];\n status: FieldState['status'];\n validationRevision: number;\n validation?: AbortController;\n reads?: Map<string, readonly string[]>;\n readsAll?: boolean;\n}\n\nconst EMPTY_ERRORS = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});\nconst EMPTY_FIELDS = Object.freeze(Object.create(null)) as Readonly<\n Record<string, never>\n>;\n\nfunction related(a: readonly string[], b: readonly string[]): boolean {\n return a\n .slice(0, Math.min(a.length, b.length))\n .every((key, index) => key === b[index]);\n}\n\nfunction sameDependencies(\n a: readonly unknown[] = [],\n b: readonly unknown[] = [],\n) {\n return (\n a.length === b.length &&\n a.every((value, index) => Object.is(value, b[index]))\n );\n}\n\nfunction samePaths(\n a: readonly (readonly string[])[] = [],\n b: readonly (readonly string[])[] = [],\n) {\n return (\n a.length === b.length &&\n a.every((path, index) => sameDependencies(path, b[index]))\n );\n}\n\ninterface ActivePath {\n terminal: boolean;\n children: Map<string, ActivePath>;\n}\n\n/** Only traverse path ancestors; a field's value (even cyclic data) is a leaf. */\nfunction projectActive(\n value: unknown,\n path: ActivePath,\n previous: unknown,\n): unknown {\n if (path.terminal) return value;\n const result: Record<string, unknown> | unknown[] = Array.isArray(value)\n ? []\n : {};\n if (isPlainObject(value) || Array.isArray(value)) {\n for (const [key, child] of path.children) {\n if (!Object.hasOwn(value, key)) continue;\n defineValue(\n result,\n key,\n projectActive(\n Reflect.get(value, key),\n child,\n readPath(previous, [key]),\n ),\n );\n }\n }\n return formValueEqual(result, previous) ? previous : freezeContainer(result);\n}\n\n/**\n * Framework-neutral store, registration ownership, and async pipelines.\n * Not exported from the package; React receives the public command facade.\n */\nexport function createFormStore<\n T extends object = Record<string, unknown>,\n ErrorValue = unknown,\n>(\n inputOptions: FormStoreOptions<T, ErrorValue> = {},\n): FormStore<T, ErrorValue> {\n const options = { ...inputOptions };\n const ownValue = createValueSnapshotter();\n const records = new Map<string, FieldRecord<ErrorValue>>();\n // Subscription identity belongs to the registration, not to the callback.\n const listeners = new Set<{ notify: () => void }>();\n let values: object = ownValue(options.defaultValues ?? {});\n let defaults = values;\n let submitError: unknown;\n let submission: AbortController | undefined;\n let binding:\n | { callbacks: FormCallbacks<T, ErrorValue>; onSubmitted?: () => void }\n | undefined;\n let order = 0;\n let depth = 0;\n let notifying = false;\n let disposed = false;\n let pending = false;\n let changes: FormChange[] = [];\n const cancellations = new Set<AbortController>();\n\n let state: FormState<T, ErrorValue> = Object.freeze({\n values: values as FormValues<T>,\n defaultValues: defaults as FormValues<T>,\n activeValues: EMPTY_OBJECT as FormValues<T>,\n fields: EMPTY_FIELDS,\n dirtyFields: readonlySet<string>([]),\n touchedFields: readonlySet<string>([]),\n isDirty: false,\n isTouched: false,\n isValid: false,\n isInvalid: false,\n isValidating: false,\n isSubmitting: false,\n canReset: false,\n submitError: undefined,\n revision: 0,\n });\n\n function assertLive() {\n if (disposed) throw new Error('Cannot use a disposed modern form store.');\n }\n\n function report(error: unknown) {\n try {\n if (options.onListenerError) options.onListenerError(error);\n else console.error('[form-store] Listener failed', error);\n } catch (reportError) {\n // An error reporter must not break delivery to the remaining listeners.\n console.error('[form-store] Error reporter failed', reportError);\n }\n }\n\n function developmentError(message: string) {\n if (process.env.NODE_ENV === 'production') return;\n try {\n if (options.onDevelopmentError) options.onDevelopmentError(message);\n else console.error(`[form-store] ${message}`);\n } catch (error) {\n report(error);\n }\n }\n\n function ensure(path: FormPath, explicit = true): FieldRecord<ErrorValue> {\n const normalized = normalizePath(path);\n const name = getFieldKey(normalized);\n let record = records.get(name);\n if (!record) {\n record = {\n name,\n path: normalized,\n explicit,\n registrations: new Set(),\n touched: false,\n errors: EMPTY_ERRORS,\n status: 'unvalidated',\n validationRevision: 0,\n };\n records.set(name, record);\n }\n record.explicit ||= explicit;\n return record;\n }\n\n function dirty(record: FieldRecord<ErrorValue>): boolean {\n return (\n hasPath(values, record.path) &&\n !(record.owner?.options.isEqual ?? formValueEqual)(\n readPath(values, record.path),\n readPath(defaults, record.path),\n )\n );\n }\n\n function invalidate(record: FieldRecord<ErrorValue>, keepErrors = false) {\n const controller = record.validation;\n record.validation = undefined;\n record.reads = undefined;\n record.readsAll = false;\n record.validationRevision++;\n record.status = 'unvalidated';\n if (!keepErrors) record.errors = EMPTY_ERRORS;\n // Abort handlers are user code. Deliver them after the complete snapshot\n // publishes, so they cannot interleave writes with the command cancelling\n // them (or resurrect a token that command later overwrites).\n if (controller) cancellations.add(controller);\n }\n\n function cancelPending() {\n for (const controller of Array.from(cancellations)) {\n cancellations.delete(controller);\n controller.abort();\n }\n }\n\n function dependencyChanged(\n record: FieldRecord<ErrorValue>,\n previous: object,\n ) {\n return (\n record.owner?.options.dependsOn?.some((path) =>\n pathValueChanged(previous, values, path),\n ) ?? false\n );\n }\n\n function validationReadChanged(\n record: FieldRecord<ErrorValue>,\n previous: object,\n ) {\n if (!record.validation) return false;\n if (record.readsAll && previous !== values) return true;\n for (const path of record.reads?.values() ?? []) {\n if (pathValueChanged(previous, values, path)) return true;\n }\n return false;\n }\n\n function invalidateRelated(\n path: readonly string[],\n previous: object,\n config?: SetValueOptions,\n ) {\n for (const record of records.values()) {\n const dependency = dependencyChanged(record, previous);\n const fieldChanged =\n related(path, record.path) ||\n pathValueChanged(previous, values, record.path);\n if (\n fieldChanged ||\n dependency ||\n validationReadChanged(record, previous)\n ) {\n const revalidate =\n (fieldChanged || dependency) &&\n !!config &&\n !!record.registrations.size &&\n (config.validate === 'always' ||\n (config.validate !== 'never' &&\n (record.owner?.options.validateTrigger === 'onChange' ||\n !!record.errors.length ||\n (dependency && record.status !== 'unvalidated'))));\n invalidate(record, revalidate);\n if (revalidate) void validateRecord(record, false);\n }\n }\n }\n\n function activeValues(): object {\n const tree: ActivePath = { terminal: false, children: new Map() };\n // A registered parent includes its complete object, including inactive\n // descendants. Register only the leaves to submit only those leaves.\n for (const record of records.values()) {\n if (!record.registrations.size || !hasPath(values, record.path)) continue;\n let node = tree;\n for (const key of record.path) {\n let child = node.children.get(key);\n if (!child) {\n child = { terminal: false, children: new Map() };\n node.children.set(key, child);\n }\n node = child;\n }\n node.terminal = true;\n }\n return projectActive(values, tree, state.activeValues) as object;\n }\n\n function buildSnapshot(): FormState<T, ErrorValue> {\n const fields: Record<string, FieldState<ErrorValue>> = Object.create(null);\n const dirtyNames = new Set<string>();\n const touchedNames = new Set<string>();\n let activeCount = 0;\n let validCount = 0;\n let invalid = false;\n let validating = false;\n let resettable = submitError != null;\n for (const record of records.values()) {\n const field: FieldState<ErrorValue> = {\n name: record.name,\n value: readPath(values, record.path),\n defaultValue: readPath(defaults, record.path),\n errors: record.errors,\n status: record.status,\n touched: record.touched,\n dirty: dirty(record),\n active: record.registrations.size > 0,\n registrationCount: record.registrations.size,\n validationRevision: record.validationRevision,\n };\n const previous = state.fields[record.name];\n Object.defineProperty(fields, record.name, {\n value: formValueEqual(field, previous)\n ? previous\n : Object.freeze(field),\n enumerable: true,\n });\n if (field.dirty) dirtyNames.add(record.name);\n if (field.touched) touchedNames.add(record.name);\n resettable ||=\n field.dirty ||\n field.touched ||\n !!field.errors.length ||\n field.status !== 'unvalidated';\n if (field.active) {\n activeCount++;\n if (field.status === 'valid') validCount++;\n invalid ||= field.status === 'invalid';\n validating ||= field.status === 'validating';\n }\n }\n const next: FormState<T, ErrorValue> = {\n values: values as FormValues<T>,\n defaultValues: defaults as FormValues<T>,\n activeValues: activeValues() as FormValues<T>,\n fields: formValueEqual(fields, state.fields)\n ? state.fields\n : Object.freeze(fields),\n dirtyFields: sameMembers(dirtyNames, state.dirtyFields)\n ? state.dirtyFields\n : readonlySet(dirtyNames),\n touchedFields: sameMembers(touchedNames, state.touchedFields)\n ? state.touchedFields\n : readonlySet(touchedNames),\n isDirty: dirtyNames.size > 0,\n isTouched: touchedNames.size > 0,\n isValid: activeCount > 0 && validCount === activeCount,\n isInvalid: invalid,\n isValidating: validating,\n isSubmitting: !!submission,\n canReset: !submission && resettable,\n submitError,\n revision: state.revision,\n };\n if (formValueEqual(next, state)) return state;\n return Object.freeze({ ...next, revision: state.revision + 1 });\n }\n\n function flush() {\n if (depth || notifying || disposed) return;\n notifying = true;\n try {\n while ((pending || cancellations.size) && !disposed) {\n pending = false;\n const events = changes;\n changes = [];\n const previous = state;\n state = buildSnapshot();\n const published = state;\n if (state !== previous) {\n for (const listener of Array.from(listeners)) {\n if (!listeners.has(listener)) continue;\n try {\n listener.notify();\n } catch (error) {\n report(error);\n }\n }\n }\n if (events.length && !disposed && resolveCallbacks().onValuesChange) {\n // One callback per transaction; names are unioned, user source wins,\n // and the final command supplies the transaction's kind.\n const change: FormChange = Object.freeze({\n names: Object.freeze(\n Array.from(new Set(events.flatMap((event) => event.names))),\n ),\n source: events.some((event) => event.source === 'user')\n ? 'user'\n : 'program',\n kind: events[events.length - 1].kind,\n });\n try {\n const result = resolveCallbacks().onValuesChange?.(\n published.values,\n change,\n );\n if (result) Promise.resolve(result).catch(report);\n } catch (error) {\n report(error);\n }\n }\n cancelPending();\n }\n } finally {\n notifying = false;\n }\n }\n\n function batch(fn: () => void) {\n assertLive();\n depth++;\n try {\n fn();\n } finally {\n depth--;\n pending = true;\n flush();\n }\n }\n\n function event(\n names: string[],\n kind: FormChange['kind'],\n source: FormChange['source'] = 'program',\n ) {\n if (names.length) changes.push({ names, kind, source });\n }\n\n function write(\n path: FormPath,\n value: unknown,\n config: SetValueOptions = {},\n ): boolean {\n const normalized = normalizePath(path);\n const previous = values;\n const next = writePath(values, normalized, ownValue(value));\n const record = ensure(normalized);\n const changed = next !== values;\n if (changed) {\n values = next;\n invalidateRelated(record.path, previous, config);\n }\n if (config.touch ?? config.source === 'user') record.touched = true;\n if (changed && (config.notify ?? config.source === 'user')) {\n event([record.name], 'set', config.source);\n }\n return changed;\n }\n\n function setValue(path: FormPath, value: unknown, config?: SetValueOptions) {\n // Validate paths before entering a transaction (no partial invalid writes).\n const normalized = normalizePath(path);\n const prepared = { ...config };\n batch(() => {\n write(normalized, value, prepared);\n });\n }\n\n function setValues(next: Partial<T>, config?: SetValueOptions) {\n assertLive();\n const prepared = { ...config };\n const entries = Object.entries(next).map(\n ([name, value]) => [normalizePath(name), ownValue(value)] as const,\n );\n // Copying input or an invalid array-length write can throw. Check every\n // value/path before the first write, including when inside an outer batch.\n let checked = values;\n for (const [path, value] of entries)\n checked = writePath(checked, path, value);\n batch(() => {\n for (const [path, value] of entries) write(path, value, prepared);\n });\n }\n\n function prepareRegistration(\n path: FormPath,\n config: RegistrationOptions<ErrorValue>,\n ): PreparedRegistration<ErrorValue> {\n const prepared = {\n ...config,\n deps: config.deps ? Object.freeze([...config.deps]) : undefined,\n dependsOn: config.dependsOn?.map((dependency) =>\n Object.freeze(normalizePath(dependency)),\n ),\n rules: config.rules?.map((rule) =>\n Object.freeze({\n ...rule,\n ...(rule.enum ? { enum: Object.freeze([...rule.enum]) } : {}),\n }),\n ),\n };\n if (Object.hasOwn(prepared, 'defaultValue')) {\n prepared.defaultValue = ownValue(prepared.defaultValue);\n const normalized = normalizePath(path);\n if (!hasPath(values, normalized) && !hasPath(defaults, normalized)) {\n writePath(values, normalized, prepared.defaultValue);\n writePath(defaults, normalized, prepared.defaultValue);\n }\n }\n return prepared;\n }\n\n function seed(\n record: FieldRecord<ErrorValue>,\n registration: Registration<ErrorValue>,\n ) {\n if (\n registration.defaultConsidered ||\n !Object.hasOwn(registration.options, 'defaultValue')\n )\n return;\n registration.defaultConsidered = true;\n const value = ownValue(registration.options.defaultValue);\n if (!hasPath(values, record.path) && !hasPath(defaults, record.path)) {\n const previous = values;\n values = writePath(values, record.path, value);\n defaults = writePath(defaults, record.path, value);\n record.fieldDefault = { value };\n invalidateRelated(record.path, previous);\n } else if (\n record.fieldDefault &&\n record.registrations.size > 1 &&\n !formValueEqual(record.fieldDefault.value, value)\n ) {\n developmentError(\n `Field \"${record.name}\" registered with conflicting defaultValue; the first default is kept.`,\n );\n }\n }\n\n function register(\n path: FormPath,\n config: RegistrationOptions<ErrorValue> = {},\n ): RegistrationToken<ErrorValue> {\n assertLive();\n const normalized = normalizePath(path);\n const prepared = prepareRegistration(normalized, config);\n const signature = rulesSignature(prepared.rules, {\n hashFunctions: prepared.rulesKey === undefined,\n });\n const record = ensure(normalized);\n const registration: Registration<ErrorValue> = {\n options: prepared,\n signature,\n order: ++order,\n defaultConsidered: false,\n };\n let released = false;\n batch(() => {\n record.registrations.add(registration);\n record.owner = registration;\n seed(record, registration);\n invalidate(record);\n });\n return Object.freeze({\n name: record.name,\n get released() {\n return released || disposed;\n },\n update(next: RegistrationOptions<ErrorValue>) {\n if (released || disposed) return;\n const prepared = prepareRegistration(record.path, next);\n const signature = rulesSignature(prepared.rules, {\n hashFunctions: prepared.rulesKey === undefined,\n });\n const validationChanged =\n registration.signature !== signature ||\n registration.options.rulesKey !== prepared.rulesKey ||\n !sameDependencies(registration.options.deps, prepared.deps) ||\n !samePaths(registration.options.dependsOn, prepared.dependsOn) ||\n registration.options.validationDelay !== prepared.validationDelay ||\n registration.options.validateTrigger !== prepared.validateTrigger ||\n registration.options.errorPolicy !== prepared.errorPolicy;\n const hasNewDefault =\n !registration.defaultConsidered &&\n Object.hasOwn(prepared, 'defaultValue');\n if (\n !hasNewDefault &&\n !validationChanged &&\n (registration.options.preserve ?? true) ===\n (prepared.preserve ?? true) &&\n registration.options.isEqual === prepared.isEqual\n ) {\n // Keep the latest closures/messages without invalidating equivalent rules.\n registration.options = prepared;\n return;\n }\n batch(() => {\n registration.options = prepared;\n registration.signature = signature;\n registration.order = ++order;\n // Only an ownership change invalidates; equivalent options pushed\n // after every React commit must not cause a publication loop.\n const revalidate =\n validationChanged && record.status !== 'unvalidated';\n if (record.owner !== registration || validationChanged)\n invalidate(record, revalidate);\n record.owner = registration;\n seed(record, registration);\n if (revalidate) void validateRecord(record, false);\n });\n },\n release(config: { deferValueRemoval?: boolean } = {}) {\n if (released || disposed) return;\n released = true;\n batch(() => {\n record.registrations.delete(registration);\n if (record.owner === registration) {\n record.owner = Array.from(record.registrations).sort(\n (a, b) => b.order - a.order,\n )[0];\n invalidate(record);\n }\n if (!record.registrations.size) {\n if (registration.options.preserve === false) {\n const removeValue = () => {\n const previous = values;\n values = writePath(values, record.path, undefined, true);\n record.touched = false;\n invalidateRelated(record.path, previous, { validate: 'auto' });\n if (!hasPath(defaults, record.path))\n records.delete(record.name);\n };\n if (config.deferValueRemoval) {\n // Unregister and abort immediately. Only destructive retention\n // cleanup waits one microtask, allowing Strict Mode's effect\n // replay to reconnect without losing the current value.\n const revision = record.validationRevision;\n queueMicrotask(() => {\n if (\n !disposed &&\n records.get(record.name) === record &&\n !record.registrations.size &&\n record.validationRevision === revision\n )\n batch(removeValue);\n });\n } else removeValue();\n }\n if (\n !hasPath(values, record.path) &&\n !hasPath(defaults, record.path)\n )\n records.delete(record.name);\n }\n });\n },\n });\n }\n\n function replaceDefaults(next: Partial<T>) {\n const entries = Object.keys(next);\n entries.forEach((name) => normalizePath(name));\n defaults = ownValue(next);\n for (const name of entries) ensure(name, false);\n for (const record of records.values()) record.fieldDefault = undefined;\n }\n\n function setDefaultValues(\n next: Partial<T>,\n config: { currentValues?: 'preserve' | 'replace' } = {},\n ) {\n const replace = config.currentValues === 'replace';\n batch(() => {\n replaceDefaults(next);\n if (replace) {\n values = defaults;\n for (const record of records.values()) {\n invalidate(record);\n record.touched = false;\n }\n event(Array.from(records.keys()), 'defaults');\n }\n });\n }\n\n function adoptDefaultValues(\n next: Partial<T>,\n config: {\n when?: 'untouched' | 'clean' | 'always';\n preserveDirty?: boolean;\n } = {},\n ) {\n const when = config.when ?? 'untouched';\n const preserveDirty = config.preserveDirty ?? false;\n batch(() => {\n // Retain edits at the narrowest guarded field path. This also protects a\n // nested edited leaf when the server replaces its containing object.\n const candidates = Array.from(records.values());\n const preserved = candidates\n .filter((record) => {\n // An implicitly tracked parent must not shield untouched siblings\n // when an explicit nested field is the actual edited control.\n if (\n !record.explicit &&\n candidates.some(\n (child) =>\n child.explicit &&\n child.path.length > record.path.length &&\n related(record.path, child.path),\n )\n )\n return false;\n return (\n (when === 'untouched' && record.touched) ||\n (when === 'clean' && dirty(record)) ||\n (preserveDirty && dirty(record))\n );\n })\n .map((record) => ({\n path: record.path,\n exists: hasPath(values, record.path),\n value: readPath(values, record.path),\n }));\n const previous = values;\n replaceDefaults(next);\n values = defaults;\n for (const saved of preserved.sort(\n (a, b) => a.path.length - b.path.length,\n )) {\n values = writePath(values, saved.path, saved.value, !saved.exists);\n }\n const names: string[] = [];\n for (const record of records.values()) {\n const changed = pathValueChanged(previous, values, record.path);\n if (\n changed ||\n dependencyChanged(record, previous) ||\n validationReadChanged(record, previous)\n )\n invalidate(record);\n if (changed) names.push(record.name);\n }\n event(names, 'adopt');\n });\n }\n\n function reset(config: { values?: Partial<T> } = {}) {\n batch(() => {\n if (Object.hasOwn(config, 'values')) replaceDefaults(config.values ?? {});\n values = defaults;\n const names = Array.from(records.keys());\n for (const record of records.values()) {\n invalidate(record);\n record.touched = false;\n if (!record.registrations.size && !hasPath(values, record.path))\n records.delete(record.name);\n }\n const previous = submission;\n submission = undefined;\n submitError = undefined;\n if (previous) cancellations.add(previous);\n event(names, 'reset');\n });\n }\n\n function setFieldErrors(path: FormPath, errors: readonly ErrorValue[]) {\n assertLive();\n const copied = errors.length ? Object.freeze([...errors]) : EMPTY_ERRORS;\n batch(() => {\n const record = ensure(path);\n const status = copied.length ? 'invalid' : 'valid';\n if (record.status === status && formValueEqual(record.errors, copied))\n return;\n invalidate(record);\n record.errors = copied;\n record.status = status;\n });\n }\n\n function startValidation(path: FormPath): ValidationToken<ErrorValue> {\n assertLive();\n const record = records.get(getFieldKey(path));\n if (!record?.registrations.size)\n throw new Error('Only active form fields can validate.');\n const controller = new AbortController();\n batch(() => {\n invalidate(record, true);\n record.validation = controller;\n record.status = 'validating';\n });\n const current = () =>\n !disposed &&\n record.validation === controller &&\n !controller.signal.aborted;\n return Object.freeze({\n signal: controller.signal,\n complete(errors: readonly ErrorValue[]) {\n if (!current()) return false;\n const copied = errors.length\n ? Object.freeze([...errors])\n : EMPTY_ERRORS;\n batch(() => {\n record.validation = undefined;\n record.reads = undefined;\n record.readsAll = false;\n record.errors = copied;\n record.status = copied.length ? 'invalid' : 'valid';\n });\n return true;\n },\n cancel() {\n if (current())\n batch(() => {\n invalidate(record, true);\n });\n },\n });\n }\n\n function startSubmission(): SubmissionToken | undefined {\n assertLive();\n if (submission) return undefined;\n const controller = new AbortController();\n batch(() => {\n submission = controller;\n submitError = undefined;\n });\n return Object.freeze({\n signal: controller.signal,\n complete(result?: { error: unknown }) {\n if (disposed || submission !== controller || controller.signal.aborted)\n return false;\n const error = result?.error;\n batch(() => {\n submission = undefined;\n submitError = error;\n });\n return true;\n },\n });\n }\n\n function validateRecord(\n record: FieldRecord<ErrorValue>,\n immediate: boolean,\n parentSignal?: AbortSignal,\n ): Promise<ModernFieldValidationResult<ErrorValue>> {\n const result = (errors: readonly ErrorValue[], stale = false) => ({\n name: record.name,\n errors,\n isValid: !stale && !errors.length,\n stale,\n });\n if (parentSignal?.aborted)\n return Promise.resolve(result(EMPTY_ERRORS, true));\n const config = record.owner?.options;\n const rules = config?.rules ?? [];\n const token = startValidation(record.path);\n const revision = record.validationRevision;\n if (token.signal.aborted || parentSignal?.aborted) {\n token.cancel();\n return Promise.resolve(result(EMPTY_ERRORS, true));\n }\n if (!rules.length) {\n record.reads = undefined;\n record.readsAll = false;\n const committed = token.complete(EMPTY_ERRORS);\n return Promise.resolve(\n result(\n EMPTY_ERRORS,\n !committed || record.validationRevision !== revision,\n ),\n );\n }\n const validationValues = values;\n const reads = new Map<string, readonly string[]>();\n record.reads = reads;\n record.readsAll = false;\n const value = readPath(validationValues, record.path);\n return new Promise((resolve) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let settled = false;\n const finish = (errors: readonly ErrorValue[], stale: boolean) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n token.signal.removeEventListener('abort', abort);\n parentSignal?.removeEventListener('abort', cancel);\n resolve(result(errors, stale));\n };\n const abort = () => finish(EMPTY_ERRORS, true);\n const cancel = () => token.cancel();\n token.signal.addEventListener('abort', abort, { once: true });\n parentSignal?.addEventListener('abort', cancel, { once: true });\n const run = async () => {\n timer = undefined;\n const errors = await runRules(\n value,\n rules,\n {\n name: record.name,\n signal: token.signal,\n getValue: (path) => {\n const normalized = normalizePath(path);\n if (!settled && !token.signal.aborted) {\n reads.set(getFieldKey(normalized), normalized);\n if (pathValueChanged(validationValues, values, normalized))\n token.cancel();\n }\n return readPath(validationValues, normalized);\n },\n getValues: () => {\n if (!settled && !token.signal.aborted) {\n record.readsAll = true;\n if (values !== validationValues) token.cancel();\n }\n return validationValues as FormValues<T>;\n },\n },\n config?.errorPolicy ?? options.errorPolicy ?? 'first',\n );\n if (!settled) {\n const committed = token.complete(errors);\n finish(\n Object.freeze(errors),\n !committed ||\n record.validationRevision !== revision ||\n !!parentSignal?.aborted,\n );\n }\n };\n const delay = immediate ? 0 : (config?.validationDelay ?? 0);\n if (delay > 0) timer = setTimeout(() => void run(), delay);\n else void run();\n });\n }\n\n function validate(\n paths?: readonly FormPath[],\n config: { immediate?: boolean; signal?: AbortSignal } = {},\n ): Promise<ModernValidationResult<ErrorValue>> {\n assertLive();\n const targets = paths\n ? Array.from(new Set(paths.map(getFieldKey))).map((key) =>\n records.get(key),\n )\n : Array.from(records.values());\n const active = targets.filter(\n (record): record is FieldRecord<ErrorValue> =>\n !!record?.registrations.size,\n );\n let runs: Promise<ModernFieldValidationResult<ErrorValue>>[] = [];\n let revisions: number[] = [];\n batch(() => {\n runs = active.map((record) =>\n validateRecord(record, config.immediate ?? true, config.signal),\n );\n // Capture before publishing: a synchronous subscriber can edit/reset.\n revisions = active.map((record) => record.validationRevision);\n });\n return Promise.all(runs).then((results) => {\n const fields = results.map((result, index) => {\n const record = active[index];\n return record.validationRevision === revisions[index] &&\n !!record.registrations.size &&\n !config.signal?.aborted\n ? result\n : { ...result, stale: true, isValid: false };\n });\n return {\n fields,\n stale: fields.some((field) => field.stale) || !!config.signal?.aborted,\n isValid: !!fields.length && fields.every((field) => field.isValid),\n };\n });\n }\n\n function resolveCallbacks(): FormCallbacks<T, ErrorValue> {\n return { ...options, ...binding?.callbacks };\n }\n\n function cancelSubmission() {\n batch(() => {\n if (submission) cancellations.add(submission);\n submission = undefined;\n });\n }\n\n function bindCallbacks(\n callbacks: FormCallbacks<T, ErrorValue>,\n onSubmitted?: () => void,\n ): CallbackBinding<T, ErrorValue> {\n assertLive();\n if (binding)\n developmentError(\n 'A second Form root owns this controller; the newest callback binding wins.',\n );\n const own = { callbacks: { ...callbacks }, onSubmitted };\n binding = own;\n let released = false;\n return Object.freeze({\n update(next: FormCallbacks<T, ErrorValue>) {\n if (!released && !disposed && binding === own)\n own.callbacks = { ...next };\n },\n release() {\n if (released || disposed) return;\n released = true;\n if (binding === own) {\n binding = undefined;\n cancelSubmission();\n }\n },\n });\n }\n\n async function submit(\n config: { include?: 'active' | 'all' } = {},\n ): Promise<ModernSubmitResult<ErrorValue>> {\n const token = startSubmission();\n if (!token) return { status: 'ignored', reason: 'submitting' };\n const include = config.include ?? 'active';\n // Cancellation settles promptly even if a validator or callback ignores its signal.\n return new Promise((resolve) => {\n let settled = false;\n const finish = (result: ModernSubmitResult<ErrorValue>) => {\n if (settled) return;\n settled = true;\n token.signal.removeEventListener('abort', abort);\n resolve(result);\n };\n const abort = () => finish({ status: 'stale' });\n token.signal.addEventListener('abort', abort, { once: true });\n if (token.signal.aborted) {\n abort();\n return;\n }\n const run = async () => {\n const pendingValidation = validate(undefined, { signal: token.signal });\n const validatedRecords = Array.from(records.values()).filter(\n (record) => record.registrations.size,\n );\n const revisions = validatedRecords.map(\n (record) => record.validationRevision,\n );\n const validation = await pendingValidation;\n if (settled) return;\n const changedSinceValidation =\n validatedRecords.length !== validation.fields.length ||\n validatedRecords.length !==\n Array.from(records.values()).filter(\n (record) => record.registrations.size,\n ).length ||\n validatedRecords.some(\n (record, index) =>\n !record.registrations.size ||\n record.validationRevision !== revisions[index],\n );\n if (validation.stale || changedSinceValidation) {\n token.complete();\n finish({ status: 'stale' });\n return;\n }\n const owner = binding;\n const callbacks = resolveCallbacks();\n let result: ModernSubmitResult<ErrorValue>;\n if (!validation.isValid) {\n const errors = Object.fromEntries(\n validation.fields\n .filter((field) => !field.isValid)\n .map((field) => [field.name, field.errors]),\n );\n result = { status: 'invalid', errors: Object.freeze(errors) };\n try {\n await callbacks.onSubmitFailed?.({\n status: 'invalid',\n errors: Object.freeze(errors),\n });\n } catch (error) {\n report(error);\n }\n if (!settled) {\n token.complete();\n finish(result);\n }\n return;\n }\n try {\n await callbacks.onSubmit?.(\n (include === 'all' ? values : activeValues()) as FormValues<T>,\n { include, signal: token.signal },\n );\n result = { status: 'submitted' };\n } catch (error) {\n if (settled) return;\n // Keep the guard active while failure callbacks run.\n batch(() => {\n submitError = error;\n });\n try {\n await callbacks.onSubmitFailed?.({ status: 'failed', error });\n } catch (failure) {\n report(failure);\n }\n result = { status: 'failed', error };\n }\n if (!settled) {\n token.complete(\n result.status === 'failed' ? { error: result.error } : undefined,\n );\n finish(result);\n // Finish before a wrapper closes/unmounts its root. Closing must not\n // turn a successful submission into a stale result.\n if (result.status === 'submitted' && binding === owner) {\n try {\n owner?.onSubmitted?.();\n } catch (error) {\n report(error);\n }\n }\n }\n };\n void run().catch((error) => {\n if (!settled) {\n token.complete({ error });\n finish({ status: 'failed', error });\n }\n });\n });\n }\n\n function subscribe(listener: () => void) {\n assertLive();\n const entry = { notify: listener };\n listeners.add(entry);\n return () => {\n listeners.delete(entry);\n };\n }\n\n function dispose() {\n if (disposed) return;\n disposed = true;\n listeners.clear();\n binding = undefined;\n changes = [];\n pending = false;\n for (const record of records.values()) {\n record.registrations.clear();\n record.owner = undefined;\n invalidate(record);\n }\n const previous = submission;\n submission = undefined;\n if (previous) cancellations.add(previous);\n state = buildSnapshot();\n records.clear();\n cancelPending();\n }\n\n for (const name of Object.keys(values)) ensure(name, false);\n state = buildSnapshot();\n\n return Object.freeze({\n [FORM_BACKEND]: 'modern' as const,\n getSnapshot: () => state,\n getFieldSnapshot: (path: FormPath) => state.fields[getFieldKey(path)],\n getValue: (path: FormPath) => readPath(values, normalizePath(path)),\n getValues: () => values as FormValues<T>,\n getActiveValues: () => activeValues() as FormValues<T>,\n subscribe,\n subscribeSelector<Selected>(\n selector: (snapshot: FormState<T, ErrorValue>) => Selected,\n listener: (value: Selected, previous: Selected) => void,\n isEqual: (a: Selected, b: Selected) => boolean = Object.is,\n ) {\n let selected = selector(state);\n return subscribe(() => {\n const next = selector(state);\n if (isEqual(selected, next)) return;\n const previous = selected;\n selected = next;\n listener(next, previous);\n });\n },\n register,\n validate,\n submit,\n bindCallbacks,\n cancelSubmission,\n updateCallbacks(callbacks: FormCallbacks<T, ErrorValue>) {\n options.onSubmit = callbacks.onSubmit;\n options.onSubmitFailed = callbacks.onSubmitFailed;\n options.onValuesChange = callbacks.onValuesChange;\n },\n blur(path: FormPath) {\n const record = records.get(getFieldKey(path));\n if (!record?.registrations.size) return;\n batch(() => {\n record.touched = true;\n if ((record.owner?.options.validateTrigger ?? 'onBlur') === 'onBlur')\n void validateRecord(record, false);\n });\n },\n setValue,\n setValues,\n batch,\n setDefaultValues,\n adoptDefaultValues,\n reset,\n touch(path: FormPath, touched = true) {\n batch(() => {\n ensure(path).touched = touched;\n });\n },\n setFieldErrors,\n clearFieldErrors: (path: FormPath) => setFieldErrors(path, EMPTY_ERRORS),\n startValidation,\n startSubmission,\n setSubmitError(error: unknown) {\n batch(() => {\n submitError = error;\n });\n },\n clearSubmitError() {\n batch(() => {\n submitError = undefined;\n });\n },\n dispose,\n debug: Object.freeze({\n listenerCount: () => listeners.size,\n registrationCount: () =>\n Array.from(records.values()).reduce(\n (count, record) => count + record.registrations.size,\n 0,\n ),\n }),\n }) as FormStore<T, ErrorValue>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"store.js","names":["FORM_BACKEND","rulesSignature","runRules","createValueSnapshotter","defineValue","formValueEqual","freezeContainer","getFieldKey","hasPath","isPlainObject","normalizePath","pathValueChanged","readonlySet","readPath","sameMembers","writePath","FormValues","CallbackBinding","FieldState","FormCallbacks","FormChange","FormState","FormStore","FormStoreOptions","ModernFieldValidationResult","ModernSubmitResult","ModernValidationResult","RegistrationOptions","RegistrationToken","SetValueOptions","SubmissionToken","ValidationToken","FormPath","PreparedRegistration","Omit","ErrorValue","dependsOn","Registration","options","signature","order","defaultConsidered","FieldRecord","name","path","explicit","registrations","Set","owner","fieldDefault","value","touched","edited","userWrites","errors","status","validationRevision","validation","AbortController","reads","Map","readsAll","EMPTY_ERRORS","Object","freeze","EMPTY_OBJECT","EMPTY_FIELDS","create","Readonly","Record","related","a","b","slice","Math","min","length","every","key","index","sameDependencies","is","samePaths","ActivePath","terminal","children","projectActive","previous","result","Array","isArray","child","hasOwn","Reflect","get","createFormStore","inputOptions","T","ownValue","records","listeners","notify","values","defaultValues","defaults","submitError","submission","binding","callbacks","onSubmitted","depth","notifying","disposed","pending","changes","cancellations","state","activeValues","fields","dirtyFields","touchedFields","isDirty","isTouched","isValid","isInvalid","isValidating","isSubmitting","canReset","undefined","revision","assertLive","Error","report","error","onListenerError","console","reportError","developmentError","message","process","env","NODE_ENV","onDevelopmentError","ensure","normalized","record","set","dirty","isEqual","invalidate","keepErrors","controller","add","cancelPending","from","delete","abort","dependencyChanged","some","validationReadChanged","invalidateRelated","config","dependency","fieldChanged","revalidate","size","validate","validateTrigger","validateRecord","tree","node","buildSnapshot","dirtyNames","touchedNames","activeCount","validCount","invalid","validating","resettable","field","defaultValue","active","registrationCount","defineProperty","enumerable","next","flush","events","published","listener","has","resolveCallbacks","onValuesChange","change","names","flatMap","event","source","kind","Promise","resolve","catch","batch","fn","push","write","changed","touch","setValue","prepared","setValues","Partial","entries","map","const","checked","prepareRegistration","deps","rules","rule","enum","seed","registration","register","hashFunctions","rulesKey","released","update","validationChanged","validationDelay","errorPolicy","hasNewDefault","preserve","release","deferValueRemoval","sort","removeValue","queueMicrotask","replaceDefaults","keys","forEach","setDefaultValues","currentValues","replace","spendCleanEdits","adoptDefaultValues","when","preserveDirty","candidates","preserved","filter","exists","saved","snapshotSubmission","include","payload","spendSubmittedEdits","ReturnType","reset","setFieldErrors","copied","startValidation","current","signal","aborted","complete","cancel","startSubmission","immediate","parentSignal","AbortSignal","stale","token","committed","validationValues","timer","setTimeout","settled","finish","clearTimeout","removeEventListener","addEventListener","once","run","getValue","getValues","delay","paths","targets","runs","revisions","all","then","results","cancelSubmission","bindCallbacks","own","submit","reason","pendingValidation","validatedRecords","changedSinceValidation","fromEntries","onSubmitFailed","submitted","onSubmit","failure","subscribe","entry","dispose","clear","getSnapshot","getFieldSnapshot","getActiveValues","subscribeSelector","selector","snapshot","Selected","selected","updateCallbacks","blur","hasUserEdits","clearFieldErrors","setSubmitError","clearSubmitError","debug","listenerCount","reduce","count"],"sources":["../../../../../src/components/form/Form/modern/store.ts"],"sourcesContent":["import { FORM_BACKEND } from '../backend';\n\nimport { rulesSignature, runRules } from './validation';\nimport {\n createValueSnapshotter,\n defineValue,\n formValueEqual,\n freezeContainer,\n getFieldKey,\n hasPath,\n isPlainObject,\n normalizePath,\n pathValueChanged,\n readonlySet,\n readPath,\n sameMembers,\n writePath,\n} from './values';\n\nimport type { FormValues } from './read-types';\nimport type {\n CallbackBinding,\n FieldState,\n FormCallbacks,\n FormChange,\n FormState,\n FormStore,\n FormStoreOptions,\n ModernFieldValidationResult,\n ModernSubmitResult,\n ModernValidationResult,\n RegistrationOptions,\n RegistrationToken,\n SetValueOptions,\n SubmissionToken,\n ValidationToken,\n} from './types';\nimport type { FormPath } from './values';\n\ninterface PreparedRegistration<ErrorValue> extends Omit<\n RegistrationOptions<ErrorValue>,\n 'dependsOn'\n> {\n readonly dependsOn?: readonly (readonly string[])[];\n}\n\ninterface Registration<ErrorValue> {\n options: PreparedRegistration<ErrorValue>;\n signature: string;\n order: number;\n defaultConsidered: boolean;\n}\n\ninterface FieldRecord<ErrorValue> {\n name: string;\n path: readonly string[];\n /** Defaults create aggregate metadata; explicit commands/fields own guards. */\n explicit: boolean;\n registrations: Set<Registration<ErrorValue>>;\n owner?: Registration<ErrorValue>;\n fieldDefault?: { value: unknown };\n touched: boolean;\n /** A user write changed it; a blur, `touch()` or a programmatic set never does. */\n edited: boolean;\n /** Counts user writes, so a submit can tell one that came after its payload. */\n userWrites: number;\n errors: readonly ErrorValue[];\n status: FieldState['status'];\n validationRevision: number;\n validation?: AbortController;\n reads?: Map<string, readonly string[]>;\n readsAll?: boolean;\n}\n\nconst EMPTY_ERRORS = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});\nconst EMPTY_FIELDS = Object.freeze(Object.create(null)) as Readonly<\n Record<string, never>\n>;\n\nfunction related(a: readonly string[], b: readonly string[]): boolean {\n return a\n .slice(0, Math.min(a.length, b.length))\n .every((key, index) => key === b[index]);\n}\n\nfunction sameDependencies(\n a: readonly unknown[] = [],\n b: readonly unknown[] = [],\n) {\n return (\n a.length === b.length &&\n a.every((value, index) => Object.is(value, b[index]))\n );\n}\n\nfunction samePaths(\n a: readonly (readonly string[])[] = [],\n b: readonly (readonly string[])[] = [],\n) {\n return (\n a.length === b.length &&\n a.every((path, index) => sameDependencies(path, b[index]))\n );\n}\n\ninterface ActivePath {\n terminal: boolean;\n children: Map<string, ActivePath>;\n}\n\n/** Only traverse path ancestors; a field's value (even cyclic data) is a leaf. */\nfunction projectActive(\n value: unknown,\n path: ActivePath,\n previous: unknown,\n): unknown {\n if (path.terminal) return value;\n const result: Record<string, unknown> | unknown[] = Array.isArray(value)\n ? []\n : {};\n if (isPlainObject(value) || Array.isArray(value)) {\n for (const [key, child] of path.children) {\n if (!Object.hasOwn(value, key)) continue;\n defineValue(\n result,\n key,\n projectActive(\n Reflect.get(value, key),\n child,\n readPath(previous, [key]),\n ),\n );\n }\n }\n return formValueEqual(result, previous) ? previous : freezeContainer(result);\n}\n\n/**\n * Framework-neutral store, registration ownership, and async pipelines.\n * Not exported from the package; React receives the public command facade.\n */\nexport function createFormStore<\n T extends object = Record<string, unknown>,\n ErrorValue = unknown,\n>(\n inputOptions: FormStoreOptions<T, ErrorValue> = {},\n): FormStore<T, ErrorValue> {\n const options = { ...inputOptions };\n const ownValue = createValueSnapshotter();\n const records = new Map<string, FieldRecord<ErrorValue>>();\n // Subscription identity belongs to the registration, not to the callback.\n const listeners = new Set<{ notify: () => void }>();\n let values: object = ownValue(options.defaultValues ?? {});\n let defaults = values;\n let submitError: unknown;\n let submission: AbortController | undefined;\n let binding:\n | { callbacks: FormCallbacks<T, ErrorValue>; onSubmitted?: () => void }\n | undefined;\n let order = 0;\n let depth = 0;\n let notifying = false;\n let disposed = false;\n let pending = false;\n let changes: FormChange[] = [];\n const cancellations = new Set<AbortController>();\n\n let state: FormState<T, ErrorValue> = Object.freeze({\n values: values as FormValues<T>,\n defaultValues: defaults as FormValues<T>,\n activeValues: EMPTY_OBJECT as FormValues<T>,\n fields: EMPTY_FIELDS,\n dirtyFields: readonlySet<string>([]),\n touchedFields: readonlySet<string>([]),\n isDirty: false,\n isTouched: false,\n isValid: false,\n isInvalid: false,\n isValidating: false,\n isSubmitting: false,\n canReset: false,\n submitError: undefined,\n revision: 0,\n });\n\n function assertLive() {\n if (disposed) throw new Error('Cannot use a disposed modern form store.');\n }\n\n function report(error: unknown) {\n try {\n if (options.onListenerError) options.onListenerError(error);\n else console.error('[form-store] Listener failed', error);\n } catch (reportError) {\n // An error reporter must not break delivery to the remaining listeners.\n console.error('[form-store] Error reporter failed', reportError);\n }\n }\n\n function developmentError(message: string) {\n if (process.env.NODE_ENV === 'production') return;\n try {\n if (options.onDevelopmentError) options.onDevelopmentError(message);\n else console.error(`[form-store] ${message}`);\n } catch (error) {\n report(error);\n }\n }\n\n function ensure(path: FormPath, explicit = true): FieldRecord<ErrorValue> {\n const normalized = normalizePath(path);\n const name = getFieldKey(normalized);\n let record = records.get(name);\n if (!record) {\n record = {\n name,\n path: normalized,\n explicit,\n registrations: new Set(),\n touched: false,\n edited: false,\n userWrites: 0,\n errors: EMPTY_ERRORS,\n status: 'unvalidated',\n validationRevision: 0,\n };\n records.set(name, record);\n }\n record.explicit ||= explicit;\n return record;\n }\n\n function dirty(record: FieldRecord<ErrorValue>): boolean {\n return (\n hasPath(values, record.path) &&\n !(record.owner?.options.isEqual ?? formValueEqual)(\n readPath(values, record.path),\n readPath(defaults, record.path),\n )\n );\n }\n\n function invalidate(record: FieldRecord<ErrorValue>, keepErrors = false) {\n const controller = record.validation;\n record.validation = undefined;\n record.reads = undefined;\n record.readsAll = false;\n record.validationRevision++;\n record.status = 'unvalidated';\n if (!keepErrors) record.errors = EMPTY_ERRORS;\n // Abort handlers are user code. Deliver them after the complete snapshot\n // publishes, so they cannot interleave writes with the command cancelling\n // them (or resurrect a token that command later overwrites).\n if (controller) cancellations.add(controller);\n }\n\n function cancelPending() {\n for (const controller of Array.from(cancellations)) {\n cancellations.delete(controller);\n controller.abort();\n }\n }\n\n function dependencyChanged(\n record: FieldRecord<ErrorValue>,\n previous: object,\n ) {\n return (\n record.owner?.options.dependsOn?.some((path) =>\n pathValueChanged(previous, values, path),\n ) ?? false\n );\n }\n\n function validationReadChanged(\n record: FieldRecord<ErrorValue>,\n previous: object,\n ) {\n if (!record.validation) return false;\n if (record.readsAll && previous !== values) return true;\n for (const path of record.reads?.values() ?? []) {\n if (pathValueChanged(previous, values, path)) return true;\n }\n return false;\n }\n\n function invalidateRelated(\n path: readonly string[],\n previous: object,\n config?: SetValueOptions,\n ) {\n for (const record of records.values()) {\n const dependency = dependencyChanged(record, previous);\n const fieldChanged =\n related(path, record.path) ||\n pathValueChanged(previous, values, record.path);\n if (\n fieldChanged ||\n dependency ||\n validationReadChanged(record, previous)\n ) {\n const revalidate =\n (fieldChanged || dependency) &&\n !!config &&\n !!record.registrations.size &&\n (config.validate === 'always' ||\n (config.validate !== 'never' &&\n (record.owner?.options.validateTrigger === 'onChange' ||\n !!record.errors.length ||\n (dependency && record.status !== 'unvalidated'))));\n invalidate(record, revalidate);\n if (revalidate) void validateRecord(record, false);\n }\n }\n }\n\n function activeValues(): object {\n const tree: ActivePath = { terminal: false, children: new Map() };\n // A registered parent includes its complete object, including inactive\n // descendants. Register only the leaves to submit only those leaves.\n for (const record of records.values()) {\n if (!record.registrations.size || !hasPath(values, record.path)) continue;\n let node = tree;\n for (const key of record.path) {\n let child = node.children.get(key);\n if (!child) {\n child = { terminal: false, children: new Map() };\n node.children.set(key, child);\n }\n node = child;\n }\n node.terminal = true;\n }\n return projectActive(values, tree, state.activeValues) as object;\n }\n\n function buildSnapshot(): FormState<T, ErrorValue> {\n const fields: Record<string, FieldState<ErrorValue>> = Object.create(null);\n const dirtyNames = new Set<string>();\n const touchedNames = new Set<string>();\n let activeCount = 0;\n let validCount = 0;\n let invalid = false;\n let validating = false;\n let resettable = submitError != null;\n for (const record of records.values()) {\n const field: FieldState<ErrorValue> = {\n name: record.name,\n value: readPath(values, record.path),\n defaultValue: readPath(defaults, record.path),\n errors: record.errors,\n status: record.status,\n touched: record.touched,\n dirty: dirty(record),\n active: record.registrations.size > 0,\n registrationCount: record.registrations.size,\n validationRevision: record.validationRevision,\n };\n const previous = state.fields[record.name];\n Object.defineProperty(fields, record.name, {\n value: formValueEqual(field, previous)\n ? previous\n : Object.freeze(field),\n enumerable: true,\n });\n if (field.dirty) dirtyNames.add(record.name);\n if (field.touched) touchedNames.add(record.name);\n resettable ||=\n field.dirty ||\n field.touched ||\n !!field.errors.length ||\n field.status !== 'unvalidated';\n if (field.active) {\n activeCount++;\n if (field.status === 'valid') validCount++;\n invalid ||= field.status === 'invalid';\n validating ||= field.status === 'validating';\n }\n }\n const next: FormState<T, ErrorValue> = {\n values: values as FormValues<T>,\n defaultValues: defaults as FormValues<T>,\n activeValues: activeValues() as FormValues<T>,\n fields: formValueEqual(fields, state.fields)\n ? state.fields\n : Object.freeze(fields),\n dirtyFields: sameMembers(dirtyNames, state.dirtyFields)\n ? state.dirtyFields\n : readonlySet(dirtyNames),\n touchedFields: sameMembers(touchedNames, state.touchedFields)\n ? state.touchedFields\n : readonlySet(touchedNames),\n isDirty: dirtyNames.size > 0,\n isTouched: touchedNames.size > 0,\n isValid: activeCount > 0 && validCount === activeCount,\n isInvalid: invalid,\n isValidating: validating,\n isSubmitting: !!submission,\n canReset: !submission && resettable,\n submitError,\n revision: state.revision,\n };\n if (formValueEqual(next, state)) return state;\n return Object.freeze({ ...next, revision: state.revision + 1 });\n }\n\n function flush() {\n if (depth || notifying || disposed) return;\n notifying = true;\n try {\n while ((pending || cancellations.size) && !disposed) {\n pending = false;\n const events = changes;\n changes = [];\n const previous = state;\n state = buildSnapshot();\n const published = state;\n if (state !== previous) {\n for (const listener of Array.from(listeners)) {\n if (!listeners.has(listener)) continue;\n try {\n listener.notify();\n } catch (error) {\n report(error);\n }\n }\n }\n if (events.length && !disposed && resolveCallbacks().onValuesChange) {\n // One callback per transaction; names are unioned, user source wins,\n // and the final command supplies the transaction's kind.\n const change: FormChange = Object.freeze({\n names: Object.freeze(\n Array.from(new Set(events.flatMap((event) => event.names))),\n ),\n source: events.some((event) => event.source === 'user')\n ? 'user'\n : 'program',\n kind: events[events.length - 1].kind,\n });\n try {\n const result = resolveCallbacks().onValuesChange?.(\n published.values,\n change,\n );\n if (result) Promise.resolve(result).catch(report);\n } catch (error) {\n report(error);\n }\n }\n cancelPending();\n }\n } finally {\n notifying = false;\n }\n }\n\n function batch(fn: () => void) {\n assertLive();\n depth++;\n try {\n fn();\n } finally {\n depth--;\n pending = true;\n flush();\n }\n }\n\n function event(\n names: string[],\n kind: FormChange['kind'],\n source: FormChange['source'] = 'program',\n ) {\n if (names.length) changes.push({ names, kind, source });\n }\n\n function write(\n path: FormPath,\n value: unknown,\n config: SetValueOptions = {},\n ): boolean {\n const normalized = normalizePath(path);\n const previous = values;\n const next = writePath(values, normalized, ownValue(value));\n const record = ensure(normalized);\n const changed = next !== values;\n if (changed) {\n values = next;\n invalidateRelated(record.path, previous, config);\n }\n if (config.touch ?? config.source === 'user') record.touched = true;\n if (config.source === 'user') {\n record.edited = true;\n record.userWrites++;\n }\n if (changed && (config.notify ?? config.source === 'user')) {\n event([record.name], 'set', config.source);\n }\n return changed;\n }\n\n function setValue(path: FormPath, value: unknown, config?: SetValueOptions) {\n // Validate paths before entering a transaction (no partial invalid writes).\n const normalized = normalizePath(path);\n const prepared = { ...config };\n batch(() => {\n write(normalized, value, prepared);\n });\n }\n\n function setValues(next: Partial<T>, config?: SetValueOptions) {\n assertLive();\n const prepared = { ...config };\n const entries = Object.entries(next).map(\n ([name, value]) => [normalizePath(name), ownValue(value)] as const,\n );\n // Copying input or an invalid array-length write can throw. Check every\n // value/path before the first write, including when inside an outer batch.\n let checked = values;\n for (const [path, value] of entries)\n checked = writePath(checked, path, value);\n batch(() => {\n for (const [path, value] of entries) write(path, value, prepared);\n });\n }\n\n function prepareRegistration(\n path: FormPath,\n config: RegistrationOptions<ErrorValue>,\n ): PreparedRegistration<ErrorValue> {\n const prepared = {\n ...config,\n deps: config.deps ? Object.freeze([...config.deps]) : undefined,\n dependsOn: config.dependsOn?.map((dependency) =>\n Object.freeze(normalizePath(dependency)),\n ),\n rules: config.rules?.map((rule) =>\n Object.freeze({\n ...rule,\n ...(rule.enum ? { enum: Object.freeze([...rule.enum]) } : {}),\n }),\n ),\n };\n if (Object.hasOwn(prepared, 'defaultValue')) {\n prepared.defaultValue = ownValue(prepared.defaultValue);\n const normalized = normalizePath(path);\n if (!hasPath(values, normalized) && !hasPath(defaults, normalized)) {\n writePath(values, normalized, prepared.defaultValue);\n writePath(defaults, normalized, prepared.defaultValue);\n }\n }\n return prepared;\n }\n\n function seed(\n record: FieldRecord<ErrorValue>,\n registration: Registration<ErrorValue>,\n ) {\n if (\n registration.defaultConsidered ||\n !Object.hasOwn(registration.options, 'defaultValue')\n )\n return;\n registration.defaultConsidered = true;\n const value = ownValue(registration.options.defaultValue);\n if (!hasPath(values, record.path) && !hasPath(defaults, record.path)) {\n const previous = values;\n values = writePath(values, record.path, value);\n defaults = writePath(defaults, record.path, value);\n record.fieldDefault = { value };\n invalidateRelated(record.path, previous);\n } else if (\n record.fieldDefault &&\n record.registrations.size > 1 &&\n !formValueEqual(record.fieldDefault.value, value)\n ) {\n developmentError(\n `Field \"${record.name}\" registered with conflicting defaultValue; the first default is kept.`,\n );\n }\n }\n\n function register(\n path: FormPath,\n config: RegistrationOptions<ErrorValue> = {},\n ): RegistrationToken<ErrorValue> {\n assertLive();\n const normalized = normalizePath(path);\n const prepared = prepareRegistration(normalized, config);\n const signature = rulesSignature(prepared.rules, {\n hashFunctions: prepared.rulesKey === undefined,\n });\n const record = ensure(normalized);\n const registration: Registration<ErrorValue> = {\n options: prepared,\n signature,\n order: ++order,\n defaultConsidered: false,\n };\n let released = false;\n batch(() => {\n record.registrations.add(registration);\n record.owner = registration;\n seed(record, registration);\n invalidate(record);\n });\n return Object.freeze({\n name: record.name,\n get released() {\n return released || disposed;\n },\n update(next: RegistrationOptions<ErrorValue>) {\n if (released || disposed) return;\n const prepared = prepareRegistration(record.path, next);\n const signature = rulesSignature(prepared.rules, {\n hashFunctions: prepared.rulesKey === undefined,\n });\n const validationChanged =\n registration.signature !== signature ||\n registration.options.rulesKey !== prepared.rulesKey ||\n !sameDependencies(registration.options.deps, prepared.deps) ||\n !samePaths(registration.options.dependsOn, prepared.dependsOn) ||\n registration.options.validationDelay !== prepared.validationDelay ||\n registration.options.validateTrigger !== prepared.validateTrigger ||\n registration.options.errorPolicy !== prepared.errorPolicy;\n const hasNewDefault =\n !registration.defaultConsidered &&\n Object.hasOwn(prepared, 'defaultValue');\n if (\n !hasNewDefault &&\n !validationChanged &&\n (registration.options.preserve ?? true) ===\n (prepared.preserve ?? true) &&\n registration.options.isEqual === prepared.isEqual\n ) {\n // Keep the latest closures/messages without invalidating equivalent rules.\n registration.options = prepared;\n return;\n }\n batch(() => {\n registration.options = prepared;\n registration.signature = signature;\n registration.order = ++order;\n // Only an ownership change invalidates; equivalent options pushed\n // after every React commit must not cause a publication loop.\n const revalidate =\n validationChanged && record.status !== 'unvalidated';\n if (record.owner !== registration || validationChanged)\n invalidate(record, revalidate);\n record.owner = registration;\n seed(record, registration);\n if (revalidate) void validateRecord(record, false);\n });\n },\n release(config: { deferValueRemoval?: boolean } = {}) {\n if (released || disposed) return;\n released = true;\n batch(() => {\n record.registrations.delete(registration);\n if (record.owner === registration) {\n record.owner = Array.from(record.registrations).sort(\n (a, b) => b.order - a.order,\n )[0];\n invalidate(record);\n }\n if (!record.registrations.size) {\n if (registration.options.preserve === false) {\n const removeValue = () => {\n const previous = values;\n values = writePath(values, record.path, undefined, true);\n record.touched = false;\n record.edited = false;\n invalidateRelated(record.path, previous, { validate: 'auto' });\n if (!hasPath(defaults, record.path))\n records.delete(record.name);\n };\n if (config.deferValueRemoval) {\n // Unregister and abort immediately. Only destructive retention\n // cleanup waits one microtask, allowing Strict Mode's effect\n // replay to reconnect without losing the current value.\n const revision = record.validationRevision;\n queueMicrotask(() => {\n if (\n !disposed &&\n records.get(record.name) === record &&\n !record.registrations.size &&\n record.validationRevision === revision\n )\n batch(removeValue);\n });\n } else removeValue();\n }\n if (\n !hasPath(values, record.path) &&\n !hasPath(defaults, record.path)\n )\n records.delete(record.name);\n }\n });\n },\n });\n }\n\n function replaceDefaults(next: Partial<T>) {\n const entries = Object.keys(next);\n entries.forEach((name) => normalizePath(name));\n defaults = ownValue(next);\n for (const name of entries) ensure(name, false);\n for (const record of records.values()) record.fieldDefault = undefined;\n }\n\n function setDefaultValues(\n next: Partial<T>,\n config: { currentValues?: 'preserve' | 'replace' } = {},\n ) {\n const replace = config.currentValues === 'replace';\n batch(() => {\n replaceDefaults(next);\n if (replace) {\n values = defaults;\n for (const record of records.values()) {\n invalidate(record);\n record.touched = false;\n record.edited = false;\n }\n event(Array.from(records.keys()), 'defaults');\n }\n spendCleanEdits();\n });\n }\n\n function adoptDefaultValues(\n next: Partial<T>,\n config: {\n when?: 'untouched' | 'clean' | 'always';\n preserveDirty?: boolean;\n } = {},\n ) {\n const when = config.when ?? 'untouched';\n const preserveDirty = config.preserveDirty ?? false;\n batch(() => {\n // Retain edits at the narrowest guarded field path. This also protects a\n // nested edited leaf when the server replaces its containing object.\n const candidates = Array.from(records.values());\n const preserved = candidates\n .filter((record) => {\n // An implicitly tracked parent must not shield untouched siblings\n // when an explicit nested field is the actual edited control.\n if (\n !record.explicit &&\n candidates.some(\n (child) =>\n child.explicit &&\n child.path.length > record.path.length &&\n related(record.path, child.path),\n )\n )\n return false;\n return (\n (when === 'untouched' && record.touched) ||\n (when === 'clean' && dirty(record)) ||\n (preserveDirty && dirty(record))\n );\n })\n .map((record) => ({\n path: record.path,\n exists: hasPath(values, record.path),\n value: readPath(values, record.path),\n }));\n const previous = values;\n replaceDefaults(next);\n values = defaults;\n for (const saved of preserved.sort(\n (a, b) => a.path.length - b.path.length,\n )) {\n values = writePath(values, saved.path, saved.value, !saved.exists);\n }\n const names: string[] = [];\n for (const record of records.values()) {\n const changed = pathValueChanged(previous, values, record.path);\n if (\n changed ||\n dependencyChanged(record, previous) ||\n validationReadChanged(record, previous)\n )\n invalidate(record);\n if (changed) names.push(record.name);\n }\n event(names, 'adopt');\n spendCleanEdits();\n });\n }\n\n // A new baseline that matches what the user typed, or replaces it, spends\n // the edit: a later set from code is not the user's.\n function spendCleanEdits() {\n for (const record of records.values()) {\n if (record.edited && !dirty(record)) record.edited = false;\n }\n }\n\n // What a submit carried, and how many user writes each field had then.\n function snapshotSubmission(include: 'active' | 'all') {\n return {\n payload: include === 'all' ? values : activeValues(),\n userWrites: new Map(\n Array.from(records.values(), (record) => [record, record.userWrites]),\n ),\n };\n }\n\n // A successful submit saved what it carried, so those fields hold no unsaved\n // edits until the user changes them again. A field the user changed while\n // the request ran, or one the payload left out, keeps its edit. A value the\n // code wrote meanwhile (a normalized one, say) is not the user's.\n function spendSubmittedEdits({\n payload,\n userWrites,\n }: ReturnType<typeof snapshotSubmission>) {\n for (const record of records.values()) {\n if (\n record.edited &&\n hasPath(payload, record.path) &&\n userWrites.get(record) === record.userWrites\n )\n record.edited = false;\n }\n }\n\n function reset(config: { values?: Partial<T> } = {}) {\n batch(() => {\n if (Object.hasOwn(config, 'values')) replaceDefaults(config.values ?? {});\n values = defaults;\n const names = Array.from(records.keys());\n for (const record of records.values()) {\n invalidate(record);\n record.touched = false;\n record.edited = false;\n if (!record.registrations.size && !hasPath(values, record.path))\n records.delete(record.name);\n }\n const previous = submission;\n submission = undefined;\n submitError = undefined;\n if (previous) cancellations.add(previous);\n event(names, 'reset');\n });\n }\n\n function setFieldErrors(path: FormPath, errors: readonly ErrorValue[]) {\n assertLive();\n const copied = errors.length ? Object.freeze([...errors]) : EMPTY_ERRORS;\n batch(() => {\n const record = ensure(path);\n const status = copied.length ? 'invalid' : 'valid';\n if (record.status === status && formValueEqual(record.errors, copied))\n return;\n invalidate(record);\n record.errors = copied;\n record.status = status;\n });\n }\n\n function startValidation(path: FormPath): ValidationToken<ErrorValue> {\n assertLive();\n const record = records.get(getFieldKey(path));\n if (!record?.registrations.size)\n throw new Error('Only active form fields can validate.');\n const controller = new AbortController();\n batch(() => {\n invalidate(record, true);\n record.validation = controller;\n record.status = 'validating';\n });\n const current = () =>\n !disposed &&\n record.validation === controller &&\n !controller.signal.aborted;\n return Object.freeze({\n signal: controller.signal,\n complete(errors: readonly ErrorValue[]) {\n if (!current()) return false;\n const copied = errors.length\n ? Object.freeze([...errors])\n : EMPTY_ERRORS;\n batch(() => {\n record.validation = undefined;\n record.reads = undefined;\n record.readsAll = false;\n record.errors = copied;\n record.status = copied.length ? 'invalid' : 'valid';\n });\n return true;\n },\n cancel() {\n if (current())\n batch(() => {\n invalidate(record, true);\n });\n },\n });\n }\n\n function startSubmission(): SubmissionToken | undefined {\n assertLive();\n if (submission) return undefined;\n const controller = new AbortController();\n batch(() => {\n submission = controller;\n submitError = undefined;\n });\n return Object.freeze({\n signal: controller.signal,\n complete(result?: { error: unknown }) {\n if (disposed || submission !== controller || controller.signal.aborted)\n return false;\n const error = result?.error;\n batch(() => {\n submission = undefined;\n submitError = error;\n });\n return true;\n },\n });\n }\n\n function validateRecord(\n record: FieldRecord<ErrorValue>,\n immediate: boolean,\n parentSignal?: AbortSignal,\n ): Promise<ModernFieldValidationResult<ErrorValue>> {\n const result = (errors: readonly ErrorValue[], stale = false) => ({\n name: record.name,\n errors,\n isValid: !stale && !errors.length,\n stale,\n });\n if (parentSignal?.aborted)\n return Promise.resolve(result(EMPTY_ERRORS, true));\n const config = record.owner?.options;\n const rules = config?.rules ?? [];\n const token = startValidation(record.path);\n const revision = record.validationRevision;\n if (token.signal.aborted || parentSignal?.aborted) {\n token.cancel();\n return Promise.resolve(result(EMPTY_ERRORS, true));\n }\n if (!rules.length) {\n record.reads = undefined;\n record.readsAll = false;\n const committed = token.complete(EMPTY_ERRORS);\n return Promise.resolve(\n result(\n EMPTY_ERRORS,\n !committed || record.validationRevision !== revision,\n ),\n );\n }\n const validationValues = values;\n const reads = new Map<string, readonly string[]>();\n record.reads = reads;\n record.readsAll = false;\n const value = readPath(validationValues, record.path);\n return new Promise((resolve) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let settled = false;\n const finish = (errors: readonly ErrorValue[], stale: boolean) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n token.signal.removeEventListener('abort', abort);\n parentSignal?.removeEventListener('abort', cancel);\n resolve(result(errors, stale));\n };\n const abort = () => finish(EMPTY_ERRORS, true);\n const cancel = () => token.cancel();\n token.signal.addEventListener('abort', abort, { once: true });\n parentSignal?.addEventListener('abort', cancel, { once: true });\n const run = async () => {\n timer = undefined;\n const errors = await runRules(\n value,\n rules,\n {\n name: record.name,\n signal: token.signal,\n getValue: (path) => {\n const normalized = normalizePath(path);\n if (!settled && !token.signal.aborted) {\n reads.set(getFieldKey(normalized), normalized);\n if (pathValueChanged(validationValues, values, normalized))\n token.cancel();\n }\n return readPath(validationValues, normalized);\n },\n getValues: () => {\n if (!settled && !token.signal.aborted) {\n record.readsAll = true;\n if (values !== validationValues) token.cancel();\n }\n return validationValues as FormValues<T>;\n },\n },\n config?.errorPolicy ?? options.errorPolicy ?? 'first',\n );\n if (!settled) {\n const committed = token.complete(errors);\n finish(\n Object.freeze(errors),\n !committed ||\n record.validationRevision !== revision ||\n !!parentSignal?.aborted,\n );\n }\n };\n const delay = immediate ? 0 : (config?.validationDelay ?? 0);\n if (delay > 0) timer = setTimeout(() => void run(), delay);\n else void run();\n });\n }\n\n function validate(\n paths?: readonly FormPath[],\n config: { immediate?: boolean; signal?: AbortSignal } = {},\n ): Promise<ModernValidationResult<ErrorValue>> {\n assertLive();\n const targets = paths\n ? Array.from(new Set(paths.map(getFieldKey))).map((key) =>\n records.get(key),\n )\n : Array.from(records.values());\n const active = targets.filter(\n (record): record is FieldRecord<ErrorValue> =>\n !!record?.registrations.size,\n );\n let runs: Promise<ModernFieldValidationResult<ErrorValue>>[] = [];\n let revisions: number[] = [];\n batch(() => {\n runs = active.map((record) =>\n validateRecord(record, config.immediate ?? true, config.signal),\n );\n // Capture before publishing: a synchronous subscriber can edit/reset.\n revisions = active.map((record) => record.validationRevision);\n });\n return Promise.all(runs).then((results) => {\n const fields = results.map((result, index) => {\n const record = active[index];\n return record.validationRevision === revisions[index] &&\n !!record.registrations.size &&\n !config.signal?.aborted\n ? result\n : { ...result, stale: true, isValid: false };\n });\n return {\n fields,\n stale: fields.some((field) => field.stale) || !!config.signal?.aborted,\n isValid: !!fields.length && fields.every((field) => field.isValid),\n };\n });\n }\n\n function resolveCallbacks(): FormCallbacks<T, ErrorValue> {\n return { ...options, ...binding?.callbacks };\n }\n\n function cancelSubmission() {\n batch(() => {\n if (submission) cancellations.add(submission);\n submission = undefined;\n });\n }\n\n function bindCallbacks(\n callbacks: FormCallbacks<T, ErrorValue>,\n onSubmitted?: () => void,\n ): CallbackBinding<T, ErrorValue> {\n assertLive();\n if (binding)\n developmentError(\n 'A second Form root owns this controller; the newest callback binding wins.',\n );\n const own = { callbacks: { ...callbacks }, onSubmitted };\n binding = own;\n let released = false;\n return Object.freeze({\n update(next: FormCallbacks<T, ErrorValue>) {\n if (!released && !disposed && binding === own)\n own.callbacks = { ...next };\n },\n release() {\n if (released || disposed) return;\n released = true;\n if (binding === own) {\n binding = undefined;\n cancelSubmission();\n }\n },\n });\n }\n\n async function submit(\n config: { include?: 'active' | 'all' } = {},\n ): Promise<ModernSubmitResult<ErrorValue>> {\n const token = startSubmission();\n if (!token) return { status: 'ignored', reason: 'submitting' };\n const include = config.include ?? 'active';\n // Cancellation settles promptly even if a validator or callback ignores its signal.\n return new Promise((resolve) => {\n let settled = false;\n const finish = (result: ModernSubmitResult<ErrorValue>) => {\n if (settled) return;\n settled = true;\n token.signal.removeEventListener('abort', abort);\n resolve(result);\n };\n const abort = () => finish({ status: 'stale' });\n token.signal.addEventListener('abort', abort, { once: true });\n if (token.signal.aborted) {\n abort();\n return;\n }\n const run = async () => {\n const pendingValidation = validate(undefined, { signal: token.signal });\n const validatedRecords = Array.from(records.values()).filter(\n (record) => record.registrations.size,\n );\n const revisions = validatedRecords.map(\n (record) => record.validationRevision,\n );\n const validation = await pendingValidation;\n if (settled) return;\n const changedSinceValidation =\n validatedRecords.length !== validation.fields.length ||\n validatedRecords.length !==\n Array.from(records.values()).filter(\n (record) => record.registrations.size,\n ).length ||\n validatedRecords.some(\n (record, index) =>\n !record.registrations.size ||\n record.validationRevision !== revisions[index],\n );\n if (validation.stale || changedSinceValidation) {\n token.complete();\n finish({ status: 'stale' });\n return;\n }\n const owner = binding;\n const callbacks = resolveCallbacks();\n let result: ModernSubmitResult<ErrorValue>;\n if (!validation.isValid) {\n const errors = Object.fromEntries(\n validation.fields\n .filter((field) => !field.isValid)\n .map((field) => [field.name, field.errors]),\n );\n result = { status: 'invalid', errors: Object.freeze(errors) };\n try {\n await callbacks.onSubmitFailed?.({\n status: 'invalid',\n errors: Object.freeze(errors),\n });\n } catch (error) {\n report(error);\n }\n if (!settled) {\n token.complete();\n finish(result);\n }\n return;\n }\n const submitted = snapshotSubmission(include);\n try {\n await callbacks.onSubmit?.(submitted.payload as FormValues<T>, {\n include,\n signal: token.signal,\n });\n result = { status: 'submitted' };\n } catch (error) {\n if (settled) return;\n // Keep the guard active while failure callbacks run.\n batch(() => {\n submitError = error;\n });\n try {\n await callbacks.onSubmitFailed?.({ status: 'failed', error });\n } catch (failure) {\n report(failure);\n }\n result = { status: 'failed', error };\n }\n if (!settled) {\n if (result.status === 'submitted') spendSubmittedEdits(submitted);\n token.complete(\n result.status === 'failed' ? { error: result.error } : undefined,\n );\n finish(result);\n // Finish before a wrapper closes/unmounts its root. Closing must not\n // turn a successful submission into a stale result.\n if (result.status === 'submitted' && binding === owner) {\n try {\n owner?.onSubmitted?.();\n } catch (error) {\n report(error);\n }\n }\n }\n };\n void run().catch((error) => {\n if (!settled) {\n token.complete({ error });\n finish({ status: 'failed', error });\n }\n });\n });\n }\n\n function subscribe(listener: () => void) {\n assertLive();\n const entry = { notify: listener };\n listeners.add(entry);\n return () => {\n listeners.delete(entry);\n };\n }\n\n function dispose() {\n if (disposed) return;\n disposed = true;\n listeners.clear();\n binding = undefined;\n changes = [];\n pending = false;\n for (const record of records.values()) {\n record.registrations.clear();\n record.owner = undefined;\n invalidate(record);\n }\n const previous = submission;\n submission = undefined;\n if (previous) cancellations.add(previous);\n state = buildSnapshot();\n records.clear();\n cancelPending();\n }\n\n for (const name of Object.keys(values)) ensure(name, false);\n state = buildSnapshot();\n\n return Object.freeze({\n [FORM_BACKEND]: 'modern' as const,\n getSnapshot: () => state,\n getFieldSnapshot: (path: FormPath) => state.fields[getFieldKey(path)],\n getValue: (path: FormPath) => readPath(values, normalizePath(path)),\n getValues: () => values as FormValues<T>,\n getActiveValues: () => activeValues() as FormValues<T>,\n subscribe,\n subscribeSelector<Selected>(\n selector: (snapshot: FormState<T, ErrorValue>) => Selected,\n listener: (value: Selected, previous: Selected) => void,\n isEqual: (a: Selected, b: Selected) => boolean = Object.is,\n ) {\n let selected = selector(state);\n return subscribe(() => {\n const next = selector(state);\n if (isEqual(selected, next)) return;\n const previous = selected;\n selected = next;\n listener(next, previous);\n });\n },\n register,\n validate,\n submit,\n bindCallbacks,\n cancelSubmission,\n updateCallbacks(callbacks: FormCallbacks<T, ErrorValue>) {\n options.onSubmit = callbacks.onSubmit;\n options.onSubmitFailed = callbacks.onSubmitFailed;\n options.onValuesChange = callbacks.onValuesChange;\n },\n blur(path: FormPath) {\n const record = records.get(getFieldKey(path));\n if (!record?.registrations.size) return;\n batch(() => {\n record.touched = true;\n if ((record.owner?.options.validateTrigger ?? 'onBlur') === 'onBlur')\n void validateRecord(record, false);\n });\n },\n setValue,\n setValues,\n batch,\n setDefaultValues,\n adoptDefaultValues,\n reset,\n touch(path: FormPath, touched = true) {\n batch(() => {\n const record = ensure(path);\n record.touched = touched;\n if (!touched) record.edited = false;\n });\n },\n hasUserEdits() {\n for (const record of records.values()) {\n if (record.edited && dirty(record)) return true;\n }\n return false;\n },\n setFieldErrors,\n clearFieldErrors: (path: FormPath) => setFieldErrors(path, EMPTY_ERRORS),\n startValidation,\n startSubmission,\n setSubmitError(error: unknown) {\n batch(() => {\n submitError = error;\n });\n },\n clearSubmitError() {\n batch(() => {\n submitError = undefined;\n });\n },\n dispose,\n debug: Object.freeze({\n listenerCount: () => listeners.size,\n registrationCount: () =>\n Array.from(records.values()).reduce(\n (count, record) => count + record.registrations.size,\n 0,\n ),\n }),\n }) as FormStore<T, ErrorValue>;\n}\n"],"mappings":"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"}
@@ -173,6 +173,11 @@ export interface FormStore<T extends object = Record<string, unknown>, ErrorValu
173
173
  values?: Partial<T>;
174
174
  }): void;
175
175
  touch(path: FormPath, touched?: boolean): void;
176
+ /**
177
+ * Whether a field the user changed through its input still differs from its
178
+ * default. A blur, `touch()` or a programmatic set alone never counts.
179
+ */
180
+ hasUserEdits(): boolean;
176
181
  setFieldErrors(path: FormPath, errors: readonly ErrorValue[]): void;
177
182
  clearFieldErrors(path: FormPath): void;
178
183
  startValidation(path: FormPath): ValidationToken<ErrorValue>;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { applyRule } from "../validation.js";
3
3
  //#region src/components/form/Form/modern/validation.ts
4
4
  /** Compare constraints and function source; captures still need deps/rulesKey. */
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  //#region src/components/form/Form/modern/values.ts
3
3
  const ownedContainers = /* @__PURE__ */ new WeakSet();
4
4
  function freezeContainer(value) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  //#region src/components/form/Form/reset-unbound-controls.ts
3
3
  /**
4
4
  * Both form roots cancel a native reset, because the browser would put a bound
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../../utils/react/useLayoutEffect.js";
3
3
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
4
4
  import { isModernFormController } from "../backend.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
4
4
  import { warn } from "../../../../utils/warnings.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../../utils/react/useLayoutEffect.js";
3
3
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
4
4
  import { useIsFirstRender } from "../../../../_internal/hooks/use-is-first-render.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { FORM_BACKEND, isModernFormController, modernBackendUnavailableError } from "./backend.js";
3
3
  import { applyRules } from "./validation.js";
4
4
  import { dotizeConvert } from "../../../utils/dotize.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { validate } from "email-validator";
3
3
  import validUrl from "valid-url";
4
4
  //#region src/components/form/Form/validation.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../utils/styles.js";
3
3
  import { useProviderProps } from "../../provider.js";
4
4
  import { useI18n } from "../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { warn } from "../../utils/warnings.js";
3
3
  //#region src/components/form/field-chrome.ts
4
4
  /** Empty slot values suppress content; numeric zero is still text. */
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { extractStyles, mergeStyleLayers } from "../../utils/styles.js";
3
3
  import { mergeProps } from "../../utils/react/mergeProps.js";
4
4
  import { rendersFieldChrome } from "./wrapper.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { warn } from "../../utils/warnings.js";
3
3
  //#region src/components/form/legacy-tooltip.ts
4
4
  let hasWarnedAboutLegacyTooltip = false;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { LoadingIcon } from "../../../icons/LoadingIcon.js";
3
3
  import { hasValidationState } from "./resolve-validation-props.js";
4
4
  import { InvalidIcon } from "../../shared/InvalidIcon.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  //#region src/components/form/validation/resolve-validation-props.ts
3
3
  /**
4
4
  * Normalizes the validation props of a field into a pair of booleans.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.203.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
2
2
  import { useWarn } from "../../../_internal/hooks/use-warn.js";
3
3
  import { resolveValidationProps } from "./resolve-validation-props.js";
4
4
  import { c } from "react/compiler-runtime";