@cube-dev/ui-kit 0.180.0 → 0.181.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 (661) hide show
  1. package/dist/CHANGELOG.md +14 -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 +3 -3
  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/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/actions-run.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.js +2 -2
  59. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  60. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  61. package/dist/components/content/Layout/GridLayout.js +1 -1
  62. package/dist/components/content/Layout/Layout.js +1 -1
  63. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  65. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  66. package/dist/components/content/Layout/LayoutContent.js +1 -1
  67. package/dist/components/content/Layout/LayoutContext.js +1 -1
  68. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  69. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  70. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  71. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutPane.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanel.js +2 -2
  74. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  76. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  77. package/dist/components/content/Layout/index.js +1 -1
  78. package/dist/components/content/Layout/utils.js +1 -1
  79. package/dist/components/content/Paragraph.js +1 -1
  80. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  81. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  82. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  83. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  84. package/dist/components/content/Result/Result.js +1 -1
  85. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  86. package/dist/components/content/Tag/Tag.js +1 -1
  87. package/dist/components/content/Text.js +1 -1
  88. package/dist/components/content/TextItem/TextItem.js +1 -1
  89. package/dist/components/content/Title.js +1 -1
  90. package/dist/components/content/Tree/Tree.js +1 -1
  91. package/dist/components/content/Tree/TreeNode.js +1 -1
  92. package/dist/components/content/Tree/styled.js +1 -1
  93. package/dist/components/content/Tree/tree-index.js +1 -1
  94. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  95. package/dist/components/content/Tree/use-load-data.js +1 -1
  96. package/dist/components/content/highlightText.js +1 -1
  97. package/dist/components/content/use-auto-tooltip.js +1 -1
  98. package/dist/components/data/DataTable/DataTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  104. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  105. package/dist/components/data/TableBase/RowCollection.js +1 -1
  106. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  107. package/dist/components/data/TableBase/TableRow.js +1 -1
  108. package/dist/components/data/TableBase/TableView.js +1 -1
  109. package/dist/components/data/TableBase/column-menu.js +1 -1
  110. package/dist/components/data/TableBase/column-tint.js +1 -1
  111. package/dist/components/data/TableBase/row-menu.js +1 -1
  112. package/dist/components/data/TableBase/styled.js +1 -1
  113. package/dist/components/data/TableBase/table-tree.js +1 -1
  114. package/dist/components/data/TableBase/types.js +1 -1
  115. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  116. package/dist/components/data/TableBase/use-column-order.js +1 -1
  117. package/dist/components/data/TableBase/use-container-width.js +1 -1
  118. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  119. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  120. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  121. package/dist/components/data/TableBase/use-table-search.js +1 -1
  122. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  123. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  124. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  125. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  126. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  127. package/dist/components/fields/Checkbox/Checkbox.d.ts +3 -1
  128. package/dist/components/fields/Checkbox/Checkbox.js +4 -5
  129. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  130. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -1
  131. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  132. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  133. package/dist/components/fields/Checkbox/context.js +1 -1
  134. package/dist/components/fields/ColorInput/ColorInput.d.ts +1 -1
  135. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  136. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  137. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +1 -1
  138. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  139. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  140. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  141. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +1 -1
  142. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  143. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  144. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -1
  145. package/dist/components/fields/ComboBox/ComboBox.js +8 -2
  146. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  147. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  148. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  149. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  150. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -1
  151. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  152. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  153. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
  155. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  159. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  160. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  161. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -1
  162. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  163. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  164. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +4 -1
  165. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  167. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  168. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  169. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  171. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  173. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  174. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  175. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  178. package/dist/components/fields/DatePicker/period.js +1 -1
  179. package/dist/components/fields/DatePicker/props.js +1 -1
  180. package/dist/components/fields/DatePicker/utils.js +1 -1
  181. package/dist/components/fields/FileInput/FileInput.d.ts +4 -1
  182. package/dist/components/fields/FileInput/FileInput.js +38 -29
  183. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  184. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  185. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  186. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  187. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +1 -1
  188. package/dist/components/fields/FilterPicker/FilterPicker.js +8 -5
  189. package/dist/components/fields/FilterPicker/FilterPicker.js.map +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.d.ts +1 -1
  193. package/dist/components/fields/ListBox/ListBox.js +5 -3
  194. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  195. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  196. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  197. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  198. package/dist/components/fields/NumberInput/NumberInput.d.ts +3 -1
  199. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  200. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  201. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  202. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  203. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  204. package/dist/components/fields/Picker/Picker.js +8 -5
  205. package/dist/components/fields/Picker/Picker.js.map +1 -1
  206. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  207. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  208. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  209. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  210. package/dist/components/fields/RadioGroup/context.js +1 -1
  211. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  212. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  213. package/dist/components/fields/Select/Select.d.ts +1 -1
  214. package/dist/components/fields/Select/Select.js +16 -2
  215. package/dist/components/fields/Select/Select.js.map +1 -1
  216. package/dist/components/fields/Slider/Gradation.js +1 -1
  217. package/dist/components/fields/Slider/HueSlider.js +1 -1
  218. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  219. package/dist/components/fields/Slider/Slider.js +1 -1
  220. package/dist/components/fields/Slider/SliderBase.js +1 -1
  221. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  222. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  223. package/dist/components/fields/Slider/elements.js +1 -1
  224. package/dist/components/fields/Slider/index.js +1 -1
  225. package/dist/components/fields/Slider/types.d.ts +1 -1
  226. package/dist/components/fields/Switch/Switch.d.ts +3 -1
  227. package/dist/components/fields/Switch/Switch.js +1 -1
  228. package/dist/components/fields/Switch/Switch.js.map +1 -1
  229. package/dist/components/fields/TextArea/TextArea.d.ts +2 -0
  230. package/dist/components/fields/TextArea/TextArea.js +1 -1
  231. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  232. package/dist/components/fields/TextInput/TextInput.d.ts +4 -1
  233. package/dist/components/fields/TextInput/TextInput.js +1 -1
  234. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  235. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  236. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  237. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  238. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  239. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +1 -1
  240. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  241. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  242. package/dist/components/fields/TriggerActions.js +1 -1
  243. package/dist/components/fields/color/ColorPanel.js +1 -1
  244. package/dist/components/fields/color/channels.js +1 -1
  245. package/dist/components/fields/color/color.js +1 -1
  246. package/dist/components/fields/color/context.js +1 -1
  247. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  248. package/dist/components/form/Form/Field.d.ts +2 -0
  249. package/dist/components/form/Form/Field.js +1 -1
  250. package/dist/components/form/Form/Field.js.map +1 -1
  251. package/dist/components/form/Form/Form.js +1 -1
  252. package/dist/components/form/Form/ModernFormRoot.d.ts +9 -4
  253. package/dist/components/form/Form/ModernFormRoot.js +13 -6
  254. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  255. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +1 -1
  256. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  257. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +3 -1
  258. package/dist/components/form/Form/SubmitButton/SubmitButton.js +2 -2
  259. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  260. package/dist/components/form/Form/SubmitError.d.ts +8 -2
  261. package/dist/components/form/Form/SubmitError.js +11 -4
  262. package/dist/components/form/Form/SubmitError.js.map +1 -1
  263. package/dist/components/form/Form/backend.js +1 -1
  264. package/dist/components/form/Form/index.d.ts +12 -8
  265. package/dist/components/form/Form/index.js +4 -2
  266. package/dist/components/form/Form/index.js.map +1 -1
  267. package/dist/components/form/Form/modern/actions.js +27 -9
  268. package/dist/components/form/Form/modern/actions.js.map +1 -1
  269. package/dist/components/form/Form/modern/context.d.ts +3 -0
  270. package/dist/components/form/Form/modern/context.js +1 -1
  271. package/dist/components/form/Form/modern/controller.d.ts +19 -8
  272. package/dist/components/form/Form/modern/controller.js +15 -4
  273. package/dist/components/form/Form/modern/controller.js.map +1 -1
  274. package/dist/components/form/Form/modern/field-binding.js +23 -5
  275. package/dist/components/form/Form/modern/field-binding.js.map +1 -1
  276. package/dist/components/form/Form/modern/field.d.ts +30 -0
  277. package/dist/components/form/Form/modern/field.js +23 -0
  278. package/dist/components/form/Form/modern/field.js.map +1 -0
  279. package/dist/components/form/Form/modern/path-types.d.ts +5 -1
  280. package/dist/components/form/Form/modern/react.d.ts +7 -2
  281. package/dist/components/form/Form/modern/react.js +21 -3
  282. package/dist/components/form/Form/modern/react.js.map +1 -1
  283. package/dist/components/form/Form/modern/read-types.d.ts +11 -0
  284. package/dist/components/form/Form/modern/store.js +82 -19
  285. package/dist/components/form/Form/modern/store.js.map +1 -1
  286. package/dist/components/form/Form/modern/types.d.ts +39 -23
  287. package/dist/components/form/Form/modern/validation.d.ts +2 -1
  288. package/dist/components/form/Form/modern/validation.js +4 -4
  289. package/dist/components/form/Form/modern/validation.js.map +1 -1
  290. package/dist/components/form/Form/modern/values.js +16 -2
  291. package/dist/components/form/Form/modern/values.js.map +1 -1
  292. package/dist/components/form/Form/use-field/types.d.ts +1 -1
  293. package/dist/components/form/Form/use-field/use-field-binding.js +12 -8
  294. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
  295. package/dist/components/form/Form/use-field/use-field-props.d.ts +3 -1
  296. package/dist/components/form/Form/use-field/use-field-props.js +16 -5
  297. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  298. package/dist/components/form/Form/use-field/use-field.d.ts +3 -1
  299. package/dist/components/form/Form/use-field/use-field.js +1 -1
  300. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  301. package/dist/components/form/Form/use-form.d.ts +1 -1
  302. package/dist/components/form/Form/use-form.js +1 -1
  303. package/dist/components/form/Form/validation.js +1 -1
  304. package/dist/components/form/Label.js +1 -1
  305. package/dist/components/form/index.d.ts +6 -5
  306. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  307. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  308. package/dist/components/form/validation/use-validation-props.js +1 -1
  309. package/dist/components/form/wrapper.js +1 -1
  310. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  311. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  312. package/dist/components/layout/Board/Board.js +1 -1
  313. package/dist/components/layout/Board/BoardProvider.js +1 -1
  314. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  315. package/dist/components/layout/Board/Widget.js +1 -1
  316. package/dist/components/layout/Board/WidgetHost.js +1 -1
  317. package/dist/components/layout/Board/board-context.js +1 -1
  318. package/dist/components/layout/Board/board-store.js +1 -1
  319. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  320. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  321. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  322. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  323. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  324. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  325. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  326. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  327. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  328. package/dist/components/layout/Board/index.js +1 -1
  329. package/dist/components/layout/Board/responsive-utils.js +1 -1
  330. package/dist/components/layout/Board/use-board-layout.js +1 -1
  331. package/dist/components/layout/Board/use-board-registry.js +1 -1
  332. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  333. package/dist/components/layout/Board/use-board-selection.js +1 -1
  334. package/dist/components/layout/Flex.js +1 -1
  335. package/dist/components/layout/Flow.js +1 -1
  336. package/dist/components/layout/Grid.js +1 -1
  337. package/dist/components/layout/Panel.js +1 -1
  338. package/dist/components/layout/Prefix.js +1 -1
  339. package/dist/components/layout/ResizablePanel.js +1 -1
  340. package/dist/components/layout/Space.js +1 -1
  341. package/dist/components/layout/Suffix.js +1 -1
  342. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  343. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  344. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  345. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  346. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  347. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  348. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  349. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  350. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  351. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  352. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  353. package/dist/components/navigation/Tabs/styled.js +1 -1
  354. package/dist/components/navigation/Tabs/types.js +1 -1
  355. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  356. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  357. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  358. package/dist/components/other/Calendar/Calendar.js +1 -1
  359. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  360. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  361. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  362. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  363. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  364. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  365. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  366. package/dist/components/other/Calendar/styled.js +1 -1
  367. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  368. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  369. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  370. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  371. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  372. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  373. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  374. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  375. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  376. package/dist/components/overlays/Dialog/context.js +1 -1
  377. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  378. package/dist/components/overlays/Modal/Modal.js +1 -1
  379. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  380. package/dist/components/overlays/Modal/Overlay.js +8 -2
  381. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  382. package/dist/components/overlays/Modal/Popover.js +4 -2
  383. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  384. package/dist/components/overlays/Modal/Tray.js +1 -1
  385. package/dist/components/overlays/Modal/Underlay.js +1 -1
  386. package/dist/components/overlays/Notifications/Notification.js +1 -1
  387. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  388. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  389. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  390. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  391. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  392. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  393. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  394. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  395. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  396. package/dist/components/overlays/Notifications/index.js +1 -1
  397. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  398. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  399. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  400. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  401. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  402. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  403. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  404. package/dist/components/overlays/Toast/index.js +1 -1
  405. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  406. package/dist/components/overlays/Toast/useToast.js +1 -1
  407. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  408. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  409. package/dist/components/overlays/Tooltip/TooltipTrigger.js +12 -2
  410. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  411. package/dist/components/overlays/Tooltip/context.js +1 -1
  412. package/dist/components/portal/Portal.js +1 -1
  413. package/dist/components/portal/PortalProvider.js +1 -1
  414. package/dist/components/portal/usePortal.js +1 -1
  415. package/dist/components/shared/DraggableCollection.js +1 -1
  416. package/dist/components/shared/InvalidIcon.js +1 -1
  417. package/dist/components/shared/ValidIcon.js +1 -1
  418. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  419. package/dist/components/status/Spin/Cube.js +1 -1
  420. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  421. package/dist/components/status/Spin/Spin.js +1 -1
  422. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  423. package/dist/data/item-themes.js +1 -1
  424. package/dist/data/themes.js +1 -1
  425. package/dist/eslint-plugin/defaults.generated.js +1 -1
  426. package/dist/eslint-plugin/index.js +1 -1
  427. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  428. package/dist/i18n/I18nProvider.js +1 -1
  429. package/dist/i18n/createFormatter.js +1 -1
  430. package/dist/i18n/index.js +1 -1
  431. package/dist/i18n/instance.js +1 -1
  432. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  433. package/dist/i18n/locales/en-US/uikit.js +1 -1
  434. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  435. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  436. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  437. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  438. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  439. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  440. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  441. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  442. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  443. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  444. package/dist/i18n/locales.js +1 -1
  445. package/dist/i18n/useFormatter.js +1 -1
  446. package/dist/i18n/useI18n.js +1 -1
  447. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  448. package/dist/icons/AdjustmentsIcon.js +1 -1
  449. package/dist/icons/AiIcon.js +1 -1
  450. package/dist/icons/AreaChartIcon.js +1 -1
  451. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  452. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  453. package/dist/icons/BackwardIcon.js +1 -1
  454. package/dist/icons/BarChartIcon.js +1 -1
  455. package/dist/icons/BellFilledIcon.js +1 -1
  456. package/dist/icons/BellIcon.js +1 -1
  457. package/dist/icons/BooleanIcon.js +1 -1
  458. package/dist/icons/CalendarEditIcon.js +1 -1
  459. package/dist/icons/CalendarIcon.js +1 -1
  460. package/dist/icons/CaretDownIcon.js +1 -1
  461. package/dist/icons/CaretUpIcon.js +1 -1
  462. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  463. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  464. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  465. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  466. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  467. package/dist/icons/ChartBarLineIcon.js +1 -1
  468. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  469. package/dist/icons/ChartBarStackedIcon.js +1 -1
  470. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  471. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  472. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  473. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  474. package/dist/icons/ChartBubbleIcon.js +1 -1
  475. package/dist/icons/ChartDonut2Icon.js +1 -1
  476. package/dist/icons/ChartFunnelIcon.js +1 -1
  477. package/dist/icons/ChartHeatmapIcon.js +1 -1
  478. package/dist/icons/ChartKPIIcon.js +1 -1
  479. package/dist/icons/ChartPie2Icon.js +1 -1
  480. package/dist/icons/ChartScatterIcon.js +1 -1
  481. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  482. package/dist/icons/CheckCircleIcon.js +1 -1
  483. package/dist/icons/CheckIcon.js +1 -1
  484. package/dist/icons/CircleFilledIcon.js +1 -1
  485. package/dist/icons/ClearIcon.js +1 -1
  486. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  487. package/dist/icons/CloseCircleIcon.js +1 -1
  488. package/dist/icons/CloseIcon.js +1 -1
  489. package/dist/icons/CodeIcon.js +1 -1
  490. package/dist/icons/ColumnTotalIcon.js +1 -1
  491. package/dist/icons/CopyIcon.js +1 -1
  492. package/dist/icons/CountIcon.js +1 -1
  493. package/dist/icons/CubeIcon.js +1 -1
  494. package/dist/icons/CubePauseIcon.js +1 -1
  495. package/dist/icons/CubePlayIcon.js +1 -1
  496. package/dist/icons/CurrencyDollarIcon.js +1 -1
  497. package/dist/icons/DangerIcon.js +1 -1
  498. package/dist/icons/DashboardIcon.js +1 -1
  499. package/dist/icons/DatabaseIcon.js +1 -1
  500. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  501. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  502. package/dist/icons/DirectionIcon.js +1 -1
  503. package/dist/icons/DonutIcon.js +1 -1
  504. package/dist/icons/DownIcon.js +1 -1
  505. package/dist/icons/EditIcon.js +1 -1
  506. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  507. package/dist/icons/ExclamationCircleIcon.js +1 -1
  508. package/dist/icons/ExclamationIcon.js +1 -1
  509. package/dist/icons/EyeIcon.js +1 -1
  510. package/dist/icons/EyeInvisibleIcon.js +1 -1
  511. package/dist/icons/FilterIcon.js +1 -1
  512. package/dist/icons/FolderFilledIcon.js +1 -1
  513. package/dist/icons/FolderIcon.js +1 -1
  514. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  515. package/dist/icons/FolderOpenIcon.js +1 -1
  516. package/dist/icons/ForwardIcon.js +1 -1
  517. package/dist/icons/GripVerticalIcon.js +1 -1
  518. package/dist/icons/HierarchyIcon.js +1 -1
  519. package/dist/icons/HierarchyOpenIcon.js +1 -1
  520. package/dist/icons/Icon.js +1 -1
  521. package/dist/icons/InfoCircleIcon.js +1 -1
  522. package/dist/icons/InfoIcon.js +1 -1
  523. package/dist/icons/KeyIcon.js +1 -1
  524. package/dist/icons/LeftIcon.js +1 -1
  525. package/dist/icons/LineChartIcon.js +1 -1
  526. package/dist/icons/LoadingIcon.js +1 -1
  527. package/dist/icons/LockFilledIcon.js +1 -1
  528. package/dist/icons/LockIcon.js +1 -1
  529. package/dist/icons/MoreIcon.js +1 -1
  530. package/dist/icons/NotAllowedIcon.js +1 -1
  531. package/dist/icons/Number123Icon.js +1 -1
  532. package/dist/icons/NumberIcon.js +1 -1
  533. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  534. package/dist/icons/PauseCircleIcon.js +1 -1
  535. package/dist/icons/PauseIcon.js +1 -1
  536. package/dist/icons/PercentageIcon.js +1 -1
  537. package/dist/icons/PieChartIcon.js +1 -1
  538. package/dist/icons/PipetteIcon.js +1 -1
  539. package/dist/icons/PlayCircleIcon.js +1 -1
  540. package/dist/icons/PlayIcon.js +1 -1
  541. package/dist/icons/PlusIcon.js +1 -1
  542. package/dist/icons/ProgressBarIcon.js +1 -1
  543. package/dist/icons/ReloadIcon.js +1 -1
  544. package/dist/icons/ReportIcon.js +1 -1
  545. package/dist/icons/ReturnIcon.js +1 -1
  546. package/dist/icons/RightIcon.js +1 -1
  547. package/dist/icons/RowTotalsIcon.js +1 -1
  548. package/dist/icons/SchemeIcon.js +1 -1
  549. package/dist/icons/SearchIcon.js +1 -1
  550. package/dist/icons/SemanticQueryIcon.js +1 -1
  551. package/dist/icons/SettingsIcon.js +1 -1
  552. package/dist/icons/ShieldFilledIcon.js +1 -1
  553. package/dist/icons/ShieldIcon.js +1 -1
  554. package/dist/icons/SlashIcon.js +1 -1
  555. package/dist/icons/SparklesIcon.js +1 -1
  556. package/dist/icons/SqlIcon.js +1 -1
  557. package/dist/icons/StatsIcon.js +1 -1
  558. package/dist/icons/StopIcon.js +1 -1
  559. package/dist/icons/StringIcon.js +1 -1
  560. package/dist/icons/SubtotalsIcon.js +1 -1
  561. package/dist/icons/SwitchIcon.js +1 -1
  562. package/dist/icons/TableIcon.js +1 -1
  563. package/dist/icons/ThumbsDownIcon.js +1 -1
  564. package/dist/icons/ThumbsUpIcon.js +1 -1
  565. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  566. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  567. package/dist/icons/ThunderboltIcon.js +1 -1
  568. package/dist/icons/TimeIcon.js +1 -1
  569. package/dist/icons/TrashIcon.js +1 -1
  570. package/dist/icons/UnlockIcon.js +1 -1
  571. package/dist/icons/UpIcon.js +1 -1
  572. package/dist/icons/UserGroupIcon.js +1 -1
  573. package/dist/icons/UserIcon.js +1 -1
  574. package/dist/icons/UserLockIcon.js +1 -1
  575. package/dist/icons/ViewIcon.js +1 -1
  576. package/dist/icons/WarningFilledIcon.js +1 -1
  577. package/dist/icons/WarningIcon.js +1 -1
  578. package/dist/icons/wrap-icon.js +1 -1
  579. package/dist/index.d.ts +7 -5
  580. package/dist/index.js +2 -2
  581. package/dist/probe/canonicalize.js +1 -1
  582. package/dist/probe/css.js +1 -1
  583. package/dist/probe/index.js +1 -1
  584. package/dist/provider.js +1 -1
  585. package/dist/providers/TrackingProvider.js +1 -1
  586. package/dist/providers/navigationAdapter.default.js +1 -1
  587. package/dist/shared/form.d.ts +13 -5
  588. package/dist/tokens/all-tokens.js +1 -1
  589. package/dist/tokens/base.js +1 -1
  590. package/dist/tokens/color-seed.js +1 -1
  591. package/dist/tokens/color-theme.js +1 -1
  592. package/dist/tokens/colors.js +1 -1
  593. package/dist/tokens/layout.js +1 -1
  594. package/dist/tokens/lazy-styles.js +1 -1
  595. package/dist/tokens/legacy-color.js +1 -1
  596. package/dist/tokens/palette-config.js +1 -1
  597. package/dist/tokens/palette.js +1 -1
  598. package/dist/tokens/resolve.js +1 -1
  599. package/dist/tokens/shadows.js +1 -1
  600. package/dist/tokens/sizes.js +1 -1
  601. package/dist/tokens/spacing.js +1 -1
  602. package/dist/tokens/typography.js +1 -1
  603. package/dist/utils/ResizeSensor.js +1 -1
  604. package/dist/utils/colors.js +1 -1
  605. package/dist/utils/dotize.js +1 -1
  606. package/dist/utils/is-dev-env.js +1 -1
  607. package/dist/utils/modules.js +1 -1
  608. package/dist/utils/promise.js +1 -1
  609. package/dist/utils/raf.js +1 -1
  610. package/dist/utils/random.js +1 -1
  611. package/dist/utils/range.js +1 -1
  612. package/dist/utils/react/RenderCache.js +1 -1
  613. package/dist/utils/react/Slots.js +1 -1
  614. package/dist/utils/react/chain.js +1 -1
  615. package/dist/utils/react/disabledProps.js +1 -1
  616. package/dist/utils/react/escapePropagation.js +39 -0
  617. package/dist/utils/react/escapePropagation.js.map +1 -0
  618. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  619. package/dist/utils/react/index.js +1 -1
  620. package/dist/utils/react/interactions.js +1 -1
  621. package/dist/utils/react/isTextOnly.js +1 -1
  622. package/dist/utils/react/mapProps.js +1 -1
  623. package/dist/utils/react/mergeProps.js +1 -1
  624. package/dist/utils/react/nullableValue.js +1 -1
  625. package/dist/utils/react/programmaticFocus.js +58 -0
  626. package/dist/utils/react/programmaticFocus.js.map +1 -0
  627. package/dist/utils/react/resolveIcon.js +1 -1
  628. package/dist/utils/react/sharedStore.js +1 -1
  629. package/dist/utils/react/useBufferedValue.js +1 -1
  630. package/dist/utils/react/useCombinedRefs.js +1 -1
  631. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  632. package/dist/utils/react/useEventBus.js +1 -1
  633. package/dist/utils/react/useId.js +1 -1
  634. package/dist/utils/react/useIsDarwin.js +1 -1
  635. package/dist/utils/react/useKeySymbols.js +1 -1
  636. package/dist/utils/react/useLayoutEffect.js +1 -1
  637. package/dist/utils/react/useLocalStorage.js +1 -1
  638. package/dist/utils/react/useMergeStyles.js +1 -1
  639. package/dist/utils/react/useOverlayEscapeGuard.js +41 -0
  640. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -0
  641. package/dist/utils/react/usePopoverSync.js +1 -1
  642. package/dist/utils/react/useQaProps.js +1 -1
  643. package/dist/utils/react/useScheme.js +1 -1
  644. package/dist/utils/react/useViewportSize.js +1 -1
  645. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  646. package/dist/utils/selection.js +1 -1
  647. package/dist/utils/styles.js +1 -1
  648. package/dist/utils/tree.js +1 -1
  649. package/dist/utils/warnings.js +1 -1
  650. package/dist/version.js +2 -2
  651. package/docs/CreateComponent.md +1 -1
  652. package/docs/FieldProperties.md +25 -13
  653. package/docs/Usage.md +17 -31
  654. package/docs/components/fields/FileInput.md +4 -0
  655. package/docs/components/form/Field.md +2 -2
  656. package/docs/components/form/Form.md +13 -39
  657. package/docs/components/form/FormInstance.md +5 -9
  658. package/docs/components/form/ModernForm.md +269 -0
  659. package/docs/modern-form-guide.md +269 -0
  660. package/docs/modern-form-migration.md +20 -59
  661. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
4
+ import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
4
5
  import { useEvent } from "../../../_internal/hooks/use-event.js";
5
6
  import { Provider, useProviderProps } from "../../../provider.js";
6
7
  import { useValidationProps } from "../validation/use-validation-props.js";
@@ -14,10 +15,14 @@ import { jsx } from "react/jsx-runtime";
14
15
  //#region src/components/form/Form/ModernFormRoot.tsx
15
16
  const EMPTY_LEGACY_CONTEXT = {};
16
17
  function ModernFormRoot(props, ref) {
17
- const { form, qa, name, children, orientation = "vertical", labelPosition: authoredLabelPosition, labelWidth: authoredLabelWidth, labelStyles, necessityIndicator, validateTrigger, requiredMark = true, showValid, isDisabled, isReadOnly, isInvalid, isValid, defaultValues, onSubmit, onSubmitFailed, onValuesChange, ...otherProps } = useValidationProps(useProviderProps(props));
18
+ const { form, qa, name, children, orientation = "vertical", labelPosition: authoredLabelPosition, labelWidth: authoredLabelWidth, labelStyles, necessityIndicator, validateTrigger, requiredMark = true, showValid, isDisabled, isReadOnly, isInvalid, isValid, defaultValues, onSubmit, onSubmitFailed, onValuesChange, submitValues = "active", ...otherProps } = useValidationProps(useProviderProps(props));
18
19
  const labelPosition = authoredLabelPosition ?? (orientation === "horizontal" ? "side" : "top");
19
20
  const labelWidth = authoredLabelWidth ?? (orientation === "horizontal" ? "auto" : void 0);
20
- const { store } = getControllerInternals(form, "<Form>");
21
+ const internals = getControllerInternals(form, "<Form>");
22
+ const { store } = internals;
23
+ const rootRef = useRef(null);
24
+ const mergedRef = useMemo(() => mergeRefs(ref, rootRef), [ref]);
25
+ useLayoutEffect$1(() => internals.bindRootElement(rootRef.current), [internals]);
21
26
  if (defaultValues !== void 0) throw new Error("A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.");
22
27
  const binding = useRef(void 0);
23
28
  useLayoutEffect$1(() => {
@@ -38,9 +43,10 @@ function ModernFormRoot(props, ref) {
38
43
  const handleSubmit = useEvent((event) => {
39
44
  event.preventDefault();
40
45
  event.stopPropagation();
41
- form.submit();
46
+ form.submit({ include: submitValues });
42
47
  });
43
48
  const handleReset = useEvent((event) => {
49
+ event.stopPropagation();
44
50
  otherProps.onReset?.(event);
45
51
  if (!event.defaultPrevented) {
46
52
  event.preventDefault();
@@ -70,7 +76,7 @@ function ModernFormRoot(props, ref) {
70
76
  if (labelWidth) styles["$label-width"] = labelWidth;
71
77
  return /* @__PURE__ */ jsx(FormElement, {
72
78
  ...filterBaseProps(otherProps, { propNames: formPropNames }),
73
- ref,
79
+ ref: mergedRef,
74
80
  qa,
75
81
  noValidate: true,
76
82
  styles,
@@ -80,7 +86,8 @@ function ModernFormRoot(props, ref) {
80
86
  horizontal: orientation === "horizontal"
81
87
  },
82
88
  onSubmit: otherProps.action == null ? handleSubmit : void 0,
83
- onReset: otherProps.action == null ? handleReset : otherProps.onReset,
89
+ onReset: otherProps.action == null ? void 0 : otherProps.onReset,
90
+ onResetCapture: otherProps.action == null ? handleReset : void 0,
84
91
  children: /* @__PURE__ */ jsx(FormContext.Provider, {
85
92
  value: EMPTY_LEGACY_CONTEXT,
86
93
  children: /* @__PURE__ */ jsx(ModernControllerContext.Provider, {
@@ -1 +1 @@
1
- {"version":3,"file":"ModernFormRoot.js","names":[],"sources":["../../../../src/components/form/Form/ModernFormRoot.tsx"],"sourcesContent":["import { CONTAINER_STYLES, filterBaseProps } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { Provider, useProviderProps } from '../../../provider';\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\nimport { extractStyles } from '../../../utils/styles';\nimport { useValidationProps } from '../validation/use-validation-props';\n\nimport {\n FormContext,\n FormElement,\n FormPresentationContext,\n formPropNames,\n} from './Form';\nimport { ModernControllerContext } from './modern/context';\nimport { getControllerInternals } from './modern/controller';\n\nimport type { FormEvent, ReactElement, Ref } from 'react';\nimport type { CubeFormProps, FormPresentationContextValue } from './Form';\nimport type { FormController } from './modern/controller';\nimport type { CallbackBinding, FormCallbacks } from './modern/types';\n\n/** Modern root owns callback bindings; subscriptions stay in descendants. */\nexport interface ModernFormProps<T extends object = Record<string, unknown>>\n extends Omit<\n CubeFormProps<T>,\n 'form' | 'defaultValues' | 'onSubmit' | 'onSubmitFailed' | 'onValuesChange'\n > {\n form: FormController<T>;\n defaultValues?: never;\n onReset?: (event: FormEvent<HTMLFormElement>) => void;\n onSubmit?: FormCallbacks<T>['onSubmit'];\n onSubmitFailed?: FormCallbacks<T>['onSubmitFailed'];\n onValuesChange?: FormCallbacks<T>['onValuesChange'];\n}\n\nconst EMPTY_LEGACY_CONTEXT = {};\n\nfunction ModernFormRoot<T extends object>(\n props: ModernFormProps<T>,\n ref: Ref<HTMLFormElement>,\n): ReactElement {\n const resolved = useValidationProps(useProviderProps(props));\n const {\n form,\n qa,\n name,\n children,\n orientation = 'vertical',\n labelPosition: authoredLabelPosition,\n labelWidth: authoredLabelWidth,\n labelStyles,\n necessityIndicator,\n validateTrigger,\n requiredMark = true,\n showValid,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n defaultValues,\n onSubmit,\n onSubmitFailed,\n onValuesChange,\n ...otherProps\n } = resolved;\n const labelPosition =\n authoredLabelPosition ?? (orientation === 'horizontal' ? 'side' : 'top');\n const labelWidth =\n authoredLabelWidth ?? (orientation === 'horizontal' ? 'auto' : undefined);\n const { store } = getControllerInternals(form, '<Form>');\n if (defaultValues !== undefined) {\n throw new Error(\n 'A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.',\n );\n }\n const binding = useRef<CallbackBinding<T> | undefined>(undefined);\n useLayoutEffect(() => {\n const token = store.bindCallbacks({});\n binding.current = token;\n return () => {\n token.release();\n if (binding.current === token) binding.current = undefined;\n };\n }, [store]);\n useLayoutEffect(() => {\n binding.current?.update({\n ...(onSubmit === undefined ? {} : { onSubmit }),\n ...(onSubmitFailed === undefined ? {} : { onSubmitFailed }),\n ...(onValuesChange === undefined ? {} : { onValuesChange }),\n });\n });\n const handleSubmit = useEvent((event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n event.stopPropagation();\n void form.submit();\n });\n const handleReset = useEvent((event: FormEvent<HTMLFormElement>) => {\n otherProps.onReset?.(event);\n if (!event.defaultPrevented) {\n event.preventDefault();\n form.reset();\n }\n });\n const presentation = useMemo<FormPresentationContextValue>(\n () => ({\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n idPrefix: name,\n }),\n [\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n name,\n ],\n );\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n if (labelWidth) styles['$label-width'] = labelWidth;\n\n return (\n <FormElement\n {...filterBaseProps(otherProps, { propNames: formPropNames })}\n ref={ref}\n qa={qa}\n noValidate\n styles={styles}\n mods={{\n 'has-sider': labelPosition === 'side',\n 'has-split': labelPosition === 'split',\n horizontal: orientation === 'horizontal',\n }}\n onSubmit={otherProps.action == null ? handleSubmit : undefined}\n onReset={otherProps.action == null ? handleReset : otherProps.onReset}\n >\n <FormContext.Provider value={EMPTY_LEGACY_CONTEXT}>\n <ModernControllerContext.Provider value={form}>\n <FormPresentationContext.Provider value={presentation}>\n <Provider\n insideForm\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n >\n {children}\n </Provider>\n </FormPresentationContext.Provider>\n </ModernControllerContext.Provider>\n </FormContext.Provider>\n </FormElement>\n );\n}\n\nconst _ModernFormRoot = forwardRef(ModernFormRoot) as unknown as <\n T extends object,\n>(\n props: ModernFormProps<T> & { ref?: Ref<HTMLFormElement> },\n) => ReactElement;\n\n(_ModernFormRoot as any).displayName = 'ModernFormRoot';\n\nexport { _ModernFormRoot as ModernFormRoot };\n"],"mappings":";;;;;;;;;;;;;;AAqCA,MAAM,uBAAuB,EAAE;AAE/B,SAAS,eACP,OACA,KACc;CAEd,MAAM,EACJ,MACA,IACA,MACA,UACA,cAAc,YACd,eAAe,uBACf,YAAY,oBACZ,aACA,oBACA,iBACA,eAAe,MACf,WACA,YACA,YACA,WACA,SACA,eACA,UACA,gBACA,gBACA,GAAG,eAtBY,mBAAmB,iBAAiB,MAAM,CAAC;CAwB5D,MAAM,gBACJ,0BAA0B,gBAAgB,eAAe,SAAS;CACpE,MAAM,aACJ,uBAAuB,gBAAgB,eAAe,SAAS;CACjE,MAAM,EAAE,UAAU,uBAAuB,MAAM,SAAS;AACxD,KAAI,kBAAkB,OACpB,OAAM,IAAI,MACR,gHACD;CAEH,MAAM,UAAU,OAAuC,OAAU;AACjE,yBAAsB;EACpB,MAAM,QAAQ,MAAM,cAAc,EAAE,CAAC;AACrC,UAAQ,UAAU;AAClB,eAAa;AACX,SAAM,SAAS;AACf,OAAI,QAAQ,YAAY,MAAO,SAAQ,UAAU;;IAElD,CAAC,MAAM,CAAC;AACX,yBAAsB;AACpB,UAAQ,SAAS,OAAO;GACtB,GAAI,aAAa,SAAY,EAAE,GAAG,EAAE,UAAU;GAC9C,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC1D,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC3D,CAAC;GACF;CACF,MAAM,eAAe,UAAU,UAAsC;AACnE,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AACvB,EAAK,KAAK,QAAQ;GAClB;CACF,MAAM,cAAc,UAAU,UAAsC;AAClE,aAAW,UAAU,MAAM;AAC3B,MAAI,CAAC,MAAM,kBAAkB;AAC3B,SAAM,gBAAgB;AACtB,QAAK,OAAO;;GAEd;CACF,MAAM,eAAe,eACZ;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACX,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,cAAc,YAAY,iBAAiB;AAC1D,KAAI,WAAY,QAAO,kBAAkB;AAEzC,QACE,oBAAC;EACC,GAAI,gBAAgB,YAAY,EAAE,WAAW,eAAe,CAAC;EACxD;EACD;EACJ;EACQ;EACR,MAAM;GACJ,aAAa,kBAAkB;GAC/B,aAAa,kBAAkB;GAC/B,YAAY,gBAAgB;GAC7B;EACD,UAAU,WAAW,UAAU,OAAO,eAAe;EACrD,SAAS,WAAW,UAAU,OAAO,cAAc,WAAW;YAE9D,oBAAC,YAAY;GAAS,OAAO;aAC3B,oBAAC,wBAAwB;IAAS,OAAO;cACvC,oBAAC,wBAAwB;KAAS,OAAO;eACvC,oBAAC;MACC;MACY;MACA;MACD;MACF;MAER;OACQ;MACsB;KACF;IACd;GACX;;AAIlB,MAAM,kBAAkB,WAAW,eAAe;AAMlD,AAAC,gBAAwB,cAAc"}
1
+ {"version":3,"file":"ModernFormRoot.js","names":[],"sources":["../../../../src/components/form/Form/ModernFormRoot.tsx"],"sourcesContent":["import { CONTAINER_STYLES, filterBaseProps } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\nimport { Provider, useProviderProps } from '../../../provider';\nimport { mergeRefs } from '../../../utils/react/useCombinedRefs';\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\nimport { extractStyles } from '../../../utils/styles';\nimport { useValidationProps } from '../validation/use-validation-props';\n\nimport {\n FormContext,\n FormElement,\n FormPresentationContext,\n formPropNames,\n} from './Form';\nimport { ModernControllerContext } from './modern/context';\nimport { getControllerInternals } from './modern/controller';\n\nimport type { FormEvent, ReactElement, ReactNode, Ref } from 'react';\nimport type { CubeFormProps, FormPresentationContextValue } from './Form';\nimport type { FormController } from './modern/controller';\nimport type { CallbackBinding, FormCallbacks } from './modern/types';\n\n/** Modern root owns callback bindings; subscriptions stay in descendants. */\nexport interface ModernFormProps<T extends object = Record<string, unknown>>\n extends Omit<\n CubeFormProps<T>,\n 'form' | 'defaultValues' | 'onSubmit' | 'onSubmitFailed' | 'onValuesChange'\n > {\n form: FormController<T>;\n defaultValues?: never;\n /** Runs before a controller reset; preventDefault cancels the reset, including nested controls. */\n onReset?: (event: FormEvent<HTMLFormElement>) => void;\n /** Reserved for controller reset interception. Use onReset to cancel. */\n onResetCapture?: never;\n onSubmit?: FormCallbacks<T, ReactNode>['onSubmit'];\n onSubmitFailed?: FormCallbacks<T, ReactNode>['onSubmitFailed'];\n onValuesChange?: FormCallbacks<T, ReactNode>['onValuesChange'];\n /** Payload selection for native submission, including Enter and external buttons. */\n submitValues?: 'active' | 'all';\n}\n\nconst EMPTY_LEGACY_CONTEXT = {};\n\nfunction ModernFormRoot<T extends object>(\n props: ModernFormProps<T>,\n ref: Ref<HTMLFormElement>,\n): ReactElement {\n const resolved = useValidationProps(useProviderProps(props));\n const {\n form,\n qa,\n name,\n children,\n orientation = 'vertical',\n labelPosition: authoredLabelPosition,\n labelWidth: authoredLabelWidth,\n labelStyles,\n necessityIndicator,\n validateTrigger,\n requiredMark = true,\n showValid,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n defaultValues,\n onSubmit,\n onSubmitFailed,\n onValuesChange,\n submitValues = 'active',\n ...otherProps\n } = resolved;\n const labelPosition =\n authoredLabelPosition ?? (orientation === 'horizontal' ? 'side' : 'top');\n const labelWidth =\n authoredLabelWidth ?? (orientation === 'horizontal' ? 'auto' : undefined);\n const internals = getControllerInternals(form, '<Form>');\n const { store } = internals;\n const rootRef = useRef<HTMLFormElement>(null);\n const mergedRef = useMemo(() => mergeRefs(ref, rootRef), [ref]);\n useLayoutEffect(\n () => internals.bindRootElement(rootRef.current),\n [internals],\n );\n if (defaultValues !== undefined) {\n throw new Error(\n 'A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.',\n );\n }\n const binding = useRef<CallbackBinding<T, ReactNode> | undefined>(undefined);\n useLayoutEffect(() => {\n const token = store.bindCallbacks({});\n binding.current = token;\n return () => {\n token.release();\n if (binding.current === token) binding.current = undefined;\n };\n }, [store]);\n useLayoutEffect(() => {\n binding.current?.update({\n ...(onSubmit === undefined ? {} : { onSubmit }),\n ...(onSubmitFailed === undefined ? {} : { onSubmitFailed }),\n ...(onValuesChange === undefined ? {} : { onValuesChange }),\n });\n });\n const handleSubmit = useEvent((event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n event.stopPropagation();\n void form.submit({ include: submitValues });\n });\n const handleReset = useEvent((event: FormEvent<HTMLFormElement>) => {\n // React Aria's native reset listeners do not honor preventDefault. Handle\n // controller resets in capture, before they can write mount-time defaults.\n event.stopPropagation();\n otherProps.onReset?.(event);\n if (!event.defaultPrevented) {\n event.preventDefault();\n form.reset();\n }\n });\n const presentation = useMemo<FormPresentationContextValue>(\n () => ({\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n idPrefix: name,\n }),\n [\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n name,\n ],\n );\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n if (labelWidth) styles['$label-width'] = labelWidth;\n\n return (\n <FormElement\n {...filterBaseProps(otherProps, { propNames: formPropNames })}\n ref={mergedRef}\n qa={qa}\n noValidate\n styles={styles}\n mods={{\n 'has-sider': labelPosition === 'side',\n 'has-split': labelPosition === 'split',\n horizontal: orientation === 'horizontal',\n }}\n onSubmit={otherProps.action == null ? handleSubmit : undefined}\n onReset={otherProps.action == null ? undefined : otherProps.onReset}\n onResetCapture={otherProps.action == null ? handleReset : undefined}\n >\n <FormContext.Provider value={EMPTY_LEGACY_CONTEXT}>\n <ModernControllerContext.Provider value={form}>\n <FormPresentationContext.Provider value={presentation}>\n <Provider\n insideForm\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n >\n {children}\n </Provider>\n </FormPresentationContext.Provider>\n </ModernControllerContext.Provider>\n </FormContext.Provider>\n </FormElement>\n );\n}\n\nconst _ModernFormRoot = forwardRef(ModernFormRoot) as unknown as <\n T extends object,\n>(\n props: ModernFormProps<T> & { ref?: Ref<HTMLFormElement> },\n) => ReactElement;\n\n(_ModernFormRoot as any).displayName = 'ModernFormRoot';\n\nexport { _ModernFormRoot as ModernFormRoot };\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAM,uBAAuB,EAAE;AAE/B,SAAS,eACP,OACA,KACc;CAEd,MAAM,EACJ,MACA,IACA,MACA,UACA,cAAc,YACd,eAAe,uBACf,YAAY,oBACZ,aACA,oBACA,iBACA,eAAe,MACf,WACA,YACA,YACA,WACA,SACA,eACA,UACA,gBACA,gBACA,eAAe,UACf,GAAG,eAvBY,mBAAmB,iBAAiB,MAAM,CAAC;CAyB5D,MAAM,gBACJ,0BAA0B,gBAAgB,eAAe,SAAS;CACpE,MAAM,aACJ,uBAAuB,gBAAgB,eAAe,SAAS;CACjE,MAAM,YAAY,uBAAuB,MAAM,SAAS;CACxD,MAAM,EAAE,UAAU;CAClB,MAAM,UAAU,OAAwB,KAAK;CAC7C,MAAM,YAAY,cAAc,UAAU,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC;AAC/D,yBACQ,UAAU,gBAAgB,QAAQ,QAAQ,EAChD,CAAC,UAAU,CACZ;AACD,KAAI,kBAAkB,OACpB,OAAM,IAAI,MACR,gHACD;CAEH,MAAM,UAAU,OAAkD,OAAU;AAC5E,yBAAsB;EACpB,MAAM,QAAQ,MAAM,cAAc,EAAE,CAAC;AACrC,UAAQ,UAAU;AAClB,eAAa;AACX,SAAM,SAAS;AACf,OAAI,QAAQ,YAAY,MAAO,SAAQ,UAAU;;IAElD,CAAC,MAAM,CAAC;AACX,yBAAsB;AACpB,UAAQ,SAAS,OAAO;GACtB,GAAI,aAAa,SAAY,EAAE,GAAG,EAAE,UAAU;GAC9C,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC1D,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC3D,CAAC;GACF;CACF,MAAM,eAAe,UAAU,UAAsC;AACnE,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AACvB,EAAK,KAAK,OAAO,EAAE,SAAS,cAAc,CAAC;GAC3C;CACF,MAAM,cAAc,UAAU,UAAsC;AAGlE,QAAM,iBAAiB;AACvB,aAAW,UAAU,MAAM;AAC3B,MAAI,CAAC,MAAM,kBAAkB;AAC3B,SAAM,gBAAgB;AACtB,QAAK,OAAO;;GAEd;CACF,MAAM,eAAe,eACZ;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACX,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,cAAc,YAAY,iBAAiB;AAC1D,KAAI,WAAY,QAAO,kBAAkB;AAEzC,QACE,oBAAC;EACC,GAAI,gBAAgB,YAAY,EAAE,WAAW,eAAe,CAAC;EAC7D,KAAK;EACD;EACJ;EACQ;EACR,MAAM;GACJ,aAAa,kBAAkB;GAC/B,aAAa,kBAAkB;GAC/B,YAAY,gBAAgB;GAC7B;EACD,UAAU,WAAW,UAAU,OAAO,eAAe;EACrD,SAAS,WAAW,UAAU,OAAO,SAAY,WAAW;EAC5D,gBAAgB,WAAW,UAAU,OAAO,cAAc;YAE1D,oBAAC,YAAY;GAAS,OAAO;aAC3B,oBAAC,wBAAwB;IAAS,OAAO;cACvC,oBAAC,wBAAwB;KAAS,OAAO;eACvC,oBAAC;MACC;MACY;MACA;MACD;MACF;MAER;OACQ;MACsB;KACF;IACd;GACX;;AAIlB,MAAM,kBAAkB,WAAW,eAAe;AAMlD,AAAC,gBAAwB,cAAc"}
@@ -1,7 +1,7 @@
1
1
 
2
+ import { FormController } from "../modern/controller.js";
2
3
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
4
  import { FieldTypes } from "../types.js";
4
- import { FormController } from "../modern/controller.js";
5
5
  import { CubeFormInstance } from "../use-form.js";
6
6
  import * as react from "react";
7
7
  import * as _react_types_shared0 from "@react-types/shared";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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 { useProviderProps } from "../../../../provider.js";
@@ -1,7 +1,7 @@
1
1
 
2
+ import { FormController } from "../modern/controller.js";
2
3
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
4
  import { FieldTypes } from "../types.js";
4
- import { FormController } from "../modern/controller.js";
5
5
  import { CubeFormInstance } from "../use-form.js";
6
6
  import * as react from "react";
7
7
  import * as _react_types_shared0 from "@react-types/shared";
@@ -9,6 +9,8 @@ import * as _react_types_shared0 from "@react-types/shared";
9
9
  //#region src/components/form/Form/SubmitButton/SubmitButton.d.ts
10
10
  interface CubeSubmitButtonProps<T extends FieldTypes = FieldTypes> extends CubeButtonProps {
11
11
  form?: CubeFormInstance<T> | FormController<T>;
12
+ /** Modern forms: disable after validation fails. Defaults to false so submit can show errors. */
13
+ disableOnInvalid?: boolean;
12
14
  }
13
15
  declare const _SubmitButton: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
14
16
  //#endregion
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../../provider.js";
3
3
  import { Button } from "../../../actions/Button/Button.js";
4
4
  import { isModernFormController } from "../backend.js";
@@ -13,7 +13,7 @@ function LegacySubmitButton(props, ref) {
13
13
  props = useFormProps(props);
14
14
  const { isDisabled: isContextDisabled } = providerProps;
15
15
  props = useFormProps(props);
16
- const { form, isDisabled, ...otherProps } = props;
16
+ const { form, isDisabled, disableOnInvalid: _disableOnInvalid, ...otherProps } = props;
17
17
  const isSomethingDisabled = isDisabled || isContextDisabled;
18
18
  return /* @__PURE__ */ jsx(Button, {
19
19
  ref,
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitButton.js","names":[],"sources":["../../../../../src/components/form/Form/SubmitButton/SubmitButton.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { forwardRef } from 'react';\n\nimport { useProviderProps } from '../../../../provider';\nimport { Button, CubeButtonProps } from '../../../actions/Button/Button';\nimport { isModernFormController } from '../backend';\nimport { useFormProps } from '../Form';\nimport { ModernSubmitButton } from '../modern/actions';\nimport { FieldTypes } from '../types';\nimport { CubeFormInstance } from '../use-form';\n\nimport type { FormController } from '../modern/controller';\n\nexport interface CubeSubmitButtonProps<T extends FieldTypes = FieldTypes>\n extends CubeButtonProps {\n form?: CubeFormInstance<T> | FormController<T>;\n}\n\nfunction LegacySubmitButton(\n props: Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n },\n ref: FocusableRef<HTMLElement>,\n) {\n const providerProps = useProviderProps({} as CubeButtonProps);\n\n props = useFormProps(props);\n\n const { isDisabled: isContextDisabled } = providerProps;\n\n props = useFormProps(props);\n\n const { form, isDisabled, ...otherProps } = props;\n const isSomethingDisabled = isDisabled || isContextDisabled;\n\n return (\n <Button\n ref={ref}\n type=\"primary\"\n htmlType=\"submit\"\n isLoading={form?.isSubmitting}\n isDisabled={\n isSomethingDisabled || form?.isSubmitting ? true : form?.isInvalid\n }\n {...otherProps}\n />\n );\n}\n\nfunction SubmitButton(\n props: CubeSubmitButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const resolved = useFormProps(props);\n if (isModernFormController(resolved.form)) {\n return (\n <ModernSubmitButton\n {...resolved}\n form={resolved.form as FormController}\n buttonRef={ref}\n />\n );\n }\n return (\n <LegacySubmitButtonWithRef\n {...(props as Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n })}\n ref={ref}\n />\n );\n}\n\nconst LegacySubmitButtonWithRef = forwardRef(LegacySubmitButton);\nconst _SubmitButton = forwardRef(SubmitButton);\n\n_SubmitButton.displayName = 'SubmitButton';\n\nexport { _SubmitButton as SubmitButton };\n"],"mappings":";;;;;;;;;;AAkBA,SAAS,mBACP,OAGA,KACA;CACA,MAAM,gBAAgB,iBAAiB,EAAE,CAAoB;AAE7D,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,YAAY,sBAAsB;AAE1C,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,MAAM,YAAY,GAAG,eAAe;CAC5C,MAAM,sBAAsB,cAAc;AAE1C,QACE,oBAAC;EACM;EACL,MAAK;EACL,UAAS;EACT,WAAW,MAAM;EACjB,YACE,uBAAuB,MAAM,eAAe,OAAO,MAAM;EAE3D,GAAI;GACJ;;AAIN,SAAS,aACP,OACA,KACA;CACA,MAAM,WAAW,aAAa,MAAM;AACpC,KAAI,uBAAuB,SAAS,KAAK,CACvC,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,SAAS;EACf,WAAW;GACX;AAGN,QACE,oBAAC;EACC,GAAK;EAGA;GACL;;AAIN,MAAM,4BAA4B,WAAW,mBAAmB;AAChE,MAAM,gBAAgB,WAAW,aAAa;AAE9C,cAAc,cAAc"}
1
+ {"version":3,"file":"SubmitButton.js","names":[],"sources":["../../../../../src/components/form/Form/SubmitButton/SubmitButton.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { forwardRef } from 'react';\n\nimport { useProviderProps } from '../../../../provider';\nimport { Button, CubeButtonProps } from '../../../actions/Button/Button';\nimport { isModernFormController } from '../backend';\nimport { useFormProps } from '../Form';\nimport { ModernSubmitButton } from '../modern/actions';\nimport { FieldTypes } from '../types';\nimport { CubeFormInstance } from '../use-form';\n\nimport type { FormController } from '../modern/controller';\n\nexport interface CubeSubmitButtonProps<T extends FieldTypes = FieldTypes>\n extends CubeButtonProps {\n form?: CubeFormInstance<T> | FormController<T>;\n /** Modern forms: disable after validation fails. Defaults to false so submit can show errors. */\n disableOnInvalid?: boolean;\n}\n\nfunction LegacySubmitButton(\n props: Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n },\n ref: FocusableRef<HTMLElement>,\n) {\n const providerProps = useProviderProps({} as CubeButtonProps);\n\n props = useFormProps(props);\n\n const { isDisabled: isContextDisabled } = providerProps;\n\n props = useFormProps(props);\n\n const {\n form,\n isDisabled,\n disableOnInvalid: _disableOnInvalid,\n ...otherProps\n } = props;\n const isSomethingDisabled = isDisabled || isContextDisabled;\n\n return (\n <Button\n ref={ref}\n type=\"primary\"\n htmlType=\"submit\"\n isLoading={form?.isSubmitting}\n isDisabled={\n isSomethingDisabled || form?.isSubmitting ? true : form?.isInvalid\n }\n {...otherProps}\n />\n );\n}\n\nfunction SubmitButton(\n props: CubeSubmitButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const resolved = useFormProps(props);\n if (isModernFormController(resolved.form)) {\n return (\n <ModernSubmitButton\n {...resolved}\n form={resolved.form as FormController}\n buttonRef={ref}\n />\n );\n }\n return (\n <LegacySubmitButtonWithRef\n {...(props as Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n })}\n ref={ref}\n />\n );\n}\n\nconst LegacySubmitButtonWithRef = forwardRef(LegacySubmitButton);\nconst _SubmitButton = forwardRef(SubmitButton);\n\n_SubmitButton.displayName = 'SubmitButton';\n\nexport { _SubmitButton as SubmitButton };\n"],"mappings":";;;;;;;;;;AAoBA,SAAS,mBACP,OAGA,KACA;CACA,MAAM,gBAAgB,iBAAiB,EAAE,CAAoB;AAE7D,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,YAAY,sBAAsB;AAE1C,SAAQ,aAAa,MAAM;CAE3B,MAAM,EACJ,MACA,YACA,kBAAkB,mBAClB,GAAG,eACD;CACJ,MAAM,sBAAsB,cAAc;AAE1C,QACE,oBAAC;EACM;EACL,MAAK;EACL,UAAS;EACT,WAAW,MAAM;EACjB,YACE,uBAAuB,MAAM,eAAe,OAAO,MAAM;EAE3D,GAAI;GACJ;;AAIN,SAAS,aACP,OACA,KACA;CACA,MAAM,WAAW,aAAa,MAAM;AACpC,KAAI,uBAAuB,SAAS,KAAK,CACvC,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,SAAS;EACf,WAAW;GACX;AAGN,QACE,oBAAC;EACC,GAAK;EAGA;GACL;;AAIN,MAAM,4BAA4B,WAAW,mBAAmB;AAChE,MAAM,gBAAgB,WAAW,aAAa;AAE9C,cAAc,cAAc"}
@@ -1,13 +1,19 @@
1
1
 
2
+ import { FormController } from "./modern/controller.js";
2
3
  import { CubeAlertProps } from "../../content/Alert/types.js";
3
4
  import "../../content/Alert/index.js";
4
5
  import * as react from "react";
6
+ import { ReactNode } from "react";
5
7
 
6
8
  //#region src/components/form/Form/SubmitError.d.ts
9
+ interface CubeSubmitErrorProps extends CubeAlertProps {
10
+ form?: FormController<any>;
11
+ renderError?: (error: unknown) => ReactNode;
12
+ }
7
13
  /**
8
14
  * An alert that shows a form error message received from the onSubmit callback.
9
15
  */
10
- declare const _SubmitError: react.ForwardRefExoticComponent<CubeAlertProps & react.RefAttributes<HTMLDivElement>>;
16
+ declare const _SubmitError: react.ForwardRefExoticComponent<CubeSubmitErrorProps & react.RefAttributes<HTMLDivElement>>;
11
17
  //#endregion
12
- export { _SubmitError };
18
+ export { CubeSubmitErrorProps, _SubmitError };
13
19
  //# sourceMappingURL=SubmitError.d.ts.map
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { ModernControllerContext } from "./modern/context.js";
4
4
  import { FormContext } from "./Form.js";
@@ -8,9 +8,15 @@ import { forwardRef, isValidElement, useContext } from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
 
10
10
  //#region src/components/form/Form/SubmitError.tsx
11
- function ErrorAlert({ submitError, ...props }, ref) {
11
+ function ErrorAlert({ submitError, renderError, ...props }, ref) {
12
12
  const { t } = useI18n();
13
13
  if (!submitError) return null;
14
+ if (renderError) return /* @__PURE__ */ jsx(Alert, {
15
+ ref,
16
+ theme: "danger",
17
+ ...props,
18
+ children: renderError(submitError)
19
+ });
14
20
  if (!isValidElement(submitError) && typeof submitError !== "string") submitError = t("form.internalError", "Internal error");
15
21
  return /* @__PURE__ */ jsx(Alert, {
16
22
  ref,
@@ -28,8 +34,9 @@ function ModernSubmitError({ form, alertRef, ...props }) {
28
34
  submitError
29
35
  });
30
36
  }
31
- function SubmitError(props, ref) {
32
- const modern = useContext(ModernControllerContext);
37
+ function SubmitError({ form, ...props }, ref) {
38
+ const context = useContext(ModernControllerContext);
39
+ const modern = form ?? context;
33
40
  const legacy = useContext(FormContext);
34
41
  return modern ? /* @__PURE__ */ jsx(ModernSubmitError, {
35
42
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"SubmitError.js","names":[],"sources":["../../../../src/components/form/Form/SubmitError.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactNode,\n useContext,\n} from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { Alert, CubeAlertProps } from '../../content/Alert/index';\n\nimport { FormContext } from './Form';\nimport { ModernControllerContext } from './modern/context';\nimport { useFormSelector } from './modern/react';\n\nimport type { FormController } from './modern/controller';\n\ntype SubmitErrorContextProps = {\n submitError?: unknown;\n};\n\nfunction ErrorAlert(\n { submitError, ...props }: CubeAlertProps & SubmitErrorContextProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { t } = useI18n();\n\n if (!submitError) {\n return null;\n }\n\n if (\n !isValidElement(submitError as ReactNode) &&\n typeof submitError !== 'string'\n ) {\n submitError = t('form.internalError', 'Internal error');\n }\n\n return (\n <Alert ref={ref} theme=\"danger\" {...props}>\n {submitError as ReactNode}\n </Alert>\n );\n}\n\nconst ForwardedErrorAlert = forwardRef(ErrorAlert);\n\nfunction ModernSubmitError({\n form,\n alertRef,\n ...props\n}: CubeAlertProps & {\n form: FormController<any>;\n alertRef: ForwardedRef<HTMLDivElement>;\n}) {\n const submitError = useFormSelector(form, (state) => state.submitError);\n return (\n <ForwardedErrorAlert {...props} ref={alertRef} submitError={submitError} />\n );\n}\n\nfunction SubmitError(props: CubeAlertProps, ref: ForwardedRef<HTMLDivElement>) {\n const modern = useContext(ModernControllerContext);\n const legacy = useContext(FormContext) as SubmitErrorContextProps;\n return modern ? (\n <ModernSubmitError {...props} form={modern} alertRef={ref} />\n ) : (\n <ForwardedErrorAlert\n {...props}\n ref={ref}\n submitError={legacy.submitError}\n />\n );\n}\n\n/**\n * An alert that shows a form error message received from the onSubmit callback.\n */\nconst _SubmitError = forwardRef(SubmitError);\n\n_SubmitError.displayName = 'SubmitError';\n\nexport { _SubmitError as SubmitError };\n"],"mappings":";;;;;;;;;;AAqBA,SAAS,WACP,EAAE,aAAa,GAAG,SAClB,KACA;CACA,MAAM,EAAE,MAAM,SAAS;AAEvB,KAAI,CAAC,YACH,QAAO;AAGT,KACE,CAAC,eAAe,YAAyB,IACzC,OAAO,gBAAgB,SAEvB,eAAc,EAAE,sBAAsB,iBAAiB;AAGzD,QACE,oBAAC;EAAW;EAAK,OAAM;EAAS,GAAI;YACjC;GACK;;AAIZ,MAAM,sBAAsB,WAAW,WAAW;AAElD,SAAS,kBAAkB,EACzB,MACA,UACA,GAAG,SAIF;CACD,MAAM,cAAc,gBAAgB,OAAO,UAAU,MAAM,YAAY;AACvE,QACE,oBAAC;EAAoB,GAAI;EAAO,KAAK;EAAuB;GAAe;;AAI/E,SAAS,YAAY,OAAuB,KAAmC;CAC7E,MAAM,SAAS,WAAW,wBAAwB;CAClD,MAAM,SAAS,WAAW,YAAY;AACtC,QAAO,SACL,oBAAC;EAAkB,GAAI;EAAO,MAAM;EAAQ,UAAU;GAAO,GAE7D,oBAAC;EACC,GAAI;EACC;EACL,aAAa,OAAO;GACpB;;;;;AAON,MAAM,eAAe,WAAW,YAAY;AAE5C,aAAa,cAAc"}
1
+ {"version":3,"file":"SubmitError.js","names":[],"sources":["../../../../src/components/form/Form/SubmitError.tsx"],"sourcesContent":["import {\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactNode,\n useContext,\n} from 'react';\n\nimport { useI18n } from '../../../i18n';\nimport { Alert, CubeAlertProps } from '../../content/Alert/index';\n\nimport { FormContext } from './Form';\nimport { ModernControllerContext } from './modern/context';\nimport { useFormSelector } from './modern/react';\n\nimport type { FormController } from './modern/controller';\n\ntype SubmitErrorContextProps = {\n submitError?: unknown;\n};\n\nexport interface CubeSubmitErrorProps extends CubeAlertProps {\n form?: FormController<any>;\n renderError?: (error: unknown) => ReactNode;\n}\n\nfunction ErrorAlert(\n {\n submitError,\n renderError,\n ...props\n }: CubeSubmitErrorProps & SubmitErrorContextProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { t } = useI18n();\n\n if (!submitError) {\n return null;\n }\n\n if (renderError)\n return (\n <Alert ref={ref} theme=\"danger\" {...props}>\n {renderError(submitError)}\n </Alert>\n );\n\n if (\n !isValidElement(submitError as ReactNode) &&\n typeof submitError !== 'string'\n ) {\n submitError = t('form.internalError', 'Internal error');\n }\n\n return (\n <Alert ref={ref} theme=\"danger\" {...props}>\n {submitError as ReactNode}\n </Alert>\n );\n}\n\nconst ForwardedErrorAlert = forwardRef(ErrorAlert);\n\nfunction ModernSubmitError({\n form,\n alertRef,\n ...props\n}: CubeSubmitErrorProps & {\n form: FormController<any>;\n alertRef: ForwardedRef<HTMLDivElement>;\n}) {\n const submitError = useFormSelector(form, (state) => state.submitError);\n return (\n <ForwardedErrorAlert {...props} ref={alertRef} submitError={submitError} />\n );\n}\n\nfunction SubmitError(\n { form, ...props }: CubeSubmitErrorProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const context = useContext(ModernControllerContext);\n const modern = form ?? context;\n const legacy = useContext(FormContext) as SubmitErrorContextProps;\n return modern ? (\n <ModernSubmitError {...props} form={modern} alertRef={ref} />\n ) : (\n <ForwardedErrorAlert\n {...props}\n ref={ref}\n submitError={legacy.submitError}\n />\n );\n}\n\n/**\n * An alert that shows a form error message received from the onSubmit callback.\n */\nconst _SubmitError = forwardRef(SubmitError);\n\n_SubmitError.displayName = 'SubmitError';\n\nexport { _SubmitError as SubmitError };\n"],"mappings":";;;;;;;;;;AA0BA,SAAS,WACP,EACE,aACA,aACA,GAAG,SAEL,KACA;CACA,MAAM,EAAE,MAAM,SAAS;AAEvB,KAAI,CAAC,YACH,QAAO;AAGT,KAAI,YACF,QACE,oBAAC;EAAW;EAAK,OAAM;EAAS,GAAI;YACjC,YAAY,YAAY;GACnB;AAGZ,KACE,CAAC,eAAe,YAAyB,IACzC,OAAO,gBAAgB,SAEvB,eAAc,EAAE,sBAAsB,iBAAiB;AAGzD,QACE,oBAAC;EAAW;EAAK,OAAM;EAAS,GAAI;YACjC;GACK;;AAIZ,MAAM,sBAAsB,WAAW,WAAW;AAElD,SAAS,kBAAkB,EACzB,MACA,UACA,GAAG,SAIF;CACD,MAAM,cAAc,gBAAgB,OAAO,UAAU,MAAM,YAAY;AACvE,QACE,oBAAC;EAAoB,GAAI;EAAO,KAAK;EAAuB;GAAe;;AAI/E,SAAS,YACP,EAAE,MAAM,GAAG,SACX,KACA;CACA,MAAM,UAAU,WAAW,wBAAwB;CACnD,MAAM,SAAS,QAAQ;CACvB,MAAM,SAAS,WAAW,YAAY;AACtC,QAAO,SACL,oBAAC;EAAkB,GAAI;EAAO,MAAM;EAAQ,UAAU;GAAO,GAE7D,oBAAC;EACC,GAAI;EACC;EACL,aAAa,OAAO;GACpB;;;;;AAON,MAAM,eAAe,WAAW,YAAY;AAE5C,aAAa,cAAc"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  //#region src/components/form/Form/backend.ts
3
3
  /**
4
4
  * Nominal branding for the two Form backends (modernization plan §5.1).
@@ -1,10 +1,12 @@
1
1
 
2
2
  import { FormPath } from "./modern/values.js";
3
- import { ModernValidationContext } from "./modern/validation.js";
4
- import { FieldTypes, Fields } from "./types.js";
5
3
  import { FormValueAtPath } from "./modern/path-types.js";
4
+ import { FormReadValue, FormValues } from "./modern/read-types.js";
5
+ import { ModernValidationContext } from "./modern/validation.js";
6
6
  import { FormChange, ModernSubmitContext, SetValueOptions } from "./modern/types.js";
7
- import { FormController, ModernFieldValidationResult, ModernFormState, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions } from "./modern/controller.js";
7
+ import { FormController, ModernFieldState, ModernFieldValidationResult, ModernFormState, ModernSubmitFailure, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions } from "./modern/controller.js";
8
+ import { FormField, FormFieldContext, FormFieldOptions } from "./modern/field.js";
9
+ import { FieldTypes, Fields } from "./types.js";
8
10
  import { CubeFormInstance, useForm } from "./use-form.js";
9
11
  import { ModernFormProps } from "./ModernFormRoot.js";
10
12
  import { CubeFormProps, FormContext, FormRootComponent, FormScopeMask, useFormProps } from "./Form.js";
@@ -12,12 +14,10 @@ import { CubeSubmitButtonProps, _SubmitButton } from "./SubmitButton/SubmitButto
12
14
  import "./SubmitButton/index.js";
13
15
  import { CubeResetButtonProps, _ResetButton } from "./ResetButton/ResetButton.js";
14
16
  import "./ResetButton/index.js";
15
- import { CubeAlertProps } from "../../content/Alert/types.js";
16
- import "../../content/Alert/index.js";
17
+ import { CubeSubmitErrorProps, _SubmitError } from "./SubmitError.js";
17
18
  import { Field } from "./Field.js";
18
19
  import { useFormControllerContext } from "./modern/context.js";
19
- import { FormSelectorOptions, FormSubscribe, FormSubscribeProps, useFormController, useFormSelector } from "./modern/react.js";
20
- import { _SubmitError } from "./SubmitError.js";
20
+ import { FormSelectorOptions, FormSubscribe, FormSubscribeProps, useFormController, useFormFieldState, useFormSelector, useFormValue } from "./modern/react.js";
21
21
  import { FieldReturnValue, UseFieldProps } from "./use-field/types.js";
22
22
  import { UseFieldParams, useField } from "./use-field/use-field.js";
23
23
  import { UseFieldPropsParams, useFieldProps } from "./use-field/use-field-props.js";
@@ -34,6 +34,8 @@ declare const Form: FormRootComponent & {
34
34
  useForm: typeof useForm;
35
35
  useController: typeof useFormController;
36
36
  useSelector: typeof useFormSelector;
37
+ useValue: typeof useFormValue;
38
+ useFieldState: typeof useFormFieldState;
37
39
  Subscribe: typeof FormSubscribe;
38
40
  useControllerContext: typeof useFormControllerContext;
39
41
  } & {
@@ -41,11 +43,13 @@ declare const Form: FormRootComponent & {
41
43
  useForm: typeof useForm;
42
44
  useController: typeof useFormController;
43
45
  useSelector: typeof useFormSelector;
46
+ useValue: typeof useFormValue;
47
+ useFieldState: typeof useFormFieldState;
44
48
  Subscribe: typeof FormSubscribe;
45
49
  useControllerContext: typeof useFormControllerContext;
46
50
  Submit: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
47
51
  Reset: react.ForwardRefExoticComponent<Omit<CubeResetButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
48
- SubmitError: react.ForwardRefExoticComponent<CubeAlertProps & react.RefAttributes<HTMLDivElement>>;
52
+ SubmitError: react.ForwardRefExoticComponent<CubeSubmitErrorProps & react.RefAttributes<HTMLDivElement>>;
49
53
  };
50
54
  //#endregion
51
55
  export { Form };
@@ -1,11 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useFormControllerContext } from "./modern/context.js";
3
3
  import { useForm } from "./use-form.js";
4
4
  import { FormContext, FormScopeMask, _Form, useFormProps } from "./Form.js";
5
5
  import { useField } from "./use-field/use-field.js";
6
6
  import { useFieldProps } from "./use-field/use-field-props.js";
7
7
  import { Field } from "./Field.js";
8
- import { FormSubscribe, useFormController, useFormSelector } from "./modern/react.js";
8
+ import { FormSubscribe, useFormController, useFormFieldState, useFormSelector, useFormValue } from "./modern/react.js";
9
9
  import { _ResetButton } from "./ResetButton/ResetButton.js";
10
10
  import { _SubmitButton } from "./SubmitButton/SubmitButton.js";
11
11
  import { _SubmitError } from "./SubmitError.js";
@@ -16,6 +16,8 @@ const Form = Object.assign(_Form, {
16
16
  useForm,
17
17
  useController: useFormController,
18
18
  useSelector: useFormSelector,
19
+ useValue: useFormValue,
20
+ useFieldState: useFormFieldState,
19
21
  Subscribe: FormSubscribe,
20
22
  useControllerContext: useFormControllerContext,
21
23
  Submit: _SubmitButton,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SubmitButton","ResetButton"],"sources":["../../../../src/components/form/Form/index.ts"],"sourcesContent":["import { CubeAlertProps } from '../../content/Alert/index';\n\nimport { Field } from './Field';\nimport {\n Form as _Form,\n FormContext,\n FormScopeMask,\n useFormProps,\n} from './Form';\nimport { useFormControllerContext } from './modern/context';\nimport {\n FormSubscribe,\n useFormController,\n useFormSelector,\n} from './modern/react';\nimport { ResetButton } from './ResetButton';\nimport { SubmitButton } from './SubmitButton';\nimport { SubmitError } from './SubmitError';\nimport { useForm } from './use-form';\n\nconst Form = Object.assign(\n _Form as typeof _Form & {\n Item: typeof Field;\n SubmitError: typeof SubmitError;\n Submit: typeof SubmitButton;\n Reset: typeof ResetButton;\n useForm: typeof useForm;\n useController: typeof useFormController;\n useSelector: typeof useFormSelector;\n Subscribe: typeof FormSubscribe;\n useControllerContext: typeof useFormControllerContext;\n },\n {\n Item: Field,\n useForm,\n useController: useFormController,\n useSelector: useFormSelector,\n Subscribe: FormSubscribe,\n useControllerContext: useFormControllerContext,\n Submit: SubmitButton,\n Reset: ResetButton,\n SubmitError,\n },\n);\n\nexport * from './SubmitError';\nexport * from './SubmitButton';\nexport * from './ResetButton';\nexport * from './use-field';\nexport { useFormProps, Form, Field, useForm, FormContext, FormScopeMask };\nexport type { CubeFormProps } from './Form';\nexport type { ModernFormProps } from './ModernFormRoot';\nexport type {\n FormController,\n ModernFormState,\n UseFormControllerOptions,\n ModernValidationRule,\n ModernValidationResult,\n ModernFieldValidationResult,\n ModernSubmitResult,\n} from './modern/controller';\nexport type { FormSelectorOptions, FormSubscribeProps } from './modern/react';\nexport type {\n FormChange,\n SetValueOptions,\n ModernSubmitContext,\n} from './modern/types';\nexport type { ModernValidationContext } from './modern/validation';\nexport type { FormPath } from './modern/values';\nexport type { FormValueAtPath } from './modern/path-types';\nexport type { CubeFormInstance } from './use-form';\nexport type { FieldTypes, Fields } from './types';\nexport type { CubeAlertProps as CubeSubmitErrorProps };\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,OAAO,OAAO,OAClB,OAWA;CACE,MAAM;CACN;CACA,eAAe;CACf,aAAa;CACb,WAAW;CACX,sBAAsB;CACtB,QAAQA;CACR,OAAOC;CACP;CACD,CACF"}
1
+ {"version":3,"file":"index.js","names":["SubmitButton","ResetButton"],"sources":["../../../../src/components/form/Form/index.ts"],"sourcesContent":["import { Field } from './Field';\nimport {\n Form as _Form,\n FormContext,\n FormScopeMask,\n useFormProps,\n} from './Form';\nimport { useFormControllerContext } from './modern/context';\nimport {\n FormSubscribe,\n useFormController,\n useFormFieldState,\n useFormSelector,\n useFormValue,\n} from './modern/react';\nimport { ResetButton } from './ResetButton';\nimport { SubmitButton } from './SubmitButton';\nimport { SubmitError } from './SubmitError';\nimport { useForm } from './use-form';\n\nconst Form = Object.assign(\n _Form as typeof _Form & {\n Item: typeof Field;\n SubmitError: typeof SubmitError;\n Submit: typeof SubmitButton;\n Reset: typeof ResetButton;\n useForm: typeof useForm;\n useController: typeof useFormController;\n useSelector: typeof useFormSelector;\n useValue: typeof useFormValue;\n useFieldState: typeof useFormFieldState;\n Subscribe: typeof FormSubscribe;\n useControllerContext: typeof useFormControllerContext;\n },\n {\n Item: Field,\n useForm,\n useController: useFormController,\n useSelector: useFormSelector,\n useValue: useFormValue,\n useFieldState: useFormFieldState,\n Subscribe: FormSubscribe,\n useControllerContext: useFormControllerContext,\n Submit: SubmitButton,\n Reset: ResetButton,\n SubmitError,\n },\n);\n\nexport * from './SubmitError';\nexport * from './SubmitButton';\nexport * from './ResetButton';\nexport * from './use-field';\nexport { useFormProps, Form, Field, useForm, FormContext, FormScopeMask };\nexport type { CubeFormProps } from './Form';\nexport type { ModernFormProps } from './ModernFormRoot';\nexport type {\n FormController,\n ModernFormState,\n ModernFieldState,\n ModernSubmitFailure,\n UseFormControllerOptions,\n ModernValidationRule,\n ModernValidationResult,\n ModernFieldValidationResult,\n ModernSubmitResult,\n} from './modern/controller';\nexport type { FormSelectorOptions, FormSubscribeProps } from './modern/react';\nexport type {\n FormChange,\n SetValueOptions,\n ModernSubmitContext,\n} from './modern/types';\nexport type { ModernValidationContext } from './modern/validation';\nexport type { FormPath } from './modern/values';\nexport type { FormValueAtPath } from './modern/path-types';\nexport type { CubeFormInstance } from './use-form';\nexport type { FieldTypes, Fields } from './types';\n\nexport type {\n FormField,\n FormFieldOptions,\n FormFieldContext,\n} from './modern/field';\nexport type { FormReadValue, FormValues } from './modern/read-types';\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,OAAO,OAAO,OAClB,OAaA;CACE,MAAM;CACN;CACA,eAAe;CACf,aAAa;CACb,UAAU;CACV,eAAe;CACf,WAAW;CACX,sBAAsB;CACtB,QAAQA;CACR,OAAOC;CACP;CACD,CACF"}
@@ -1,38 +1,56 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
3
3
  import { useProviderProps } from "../../../../provider.js";
4
4
  import { Button } from "../../../actions/Button/Button.js";
5
+ import { getControllerInternals } from "./controller.js";
5
6
  import { useFormSelector } from "./react.js";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
8
9
  //#region src/components/form/Form/modern/actions.tsx
9
- function ModernSubmitButton({ form, buttonRef, ...props }) {
10
+ function ModernSubmitButton({ form, buttonRef, onClick, disableOnInvalid = false, ...props }) {
10
11
  const { isDisabled: contextDisabled } = useProviderProps({});
11
12
  const submitting = useFormSelector(form, (state) => state.isSubmitting);
12
13
  const invalid = useFormSelector(form, (state) => state.isInvalid);
14
+ const click = useEvent((event) => {
15
+ onClick?.(event);
16
+ if (event.defaultPrevented) return;
17
+ const root = getControllerInternals(form, "<Form.Submit>").getRootElement();
18
+ const button = event.currentTarget;
19
+ if (root && button.form === root && button.type === "submit") return;
20
+ event.preventDefault();
21
+ if (root?.isConnected) root.requestSubmit();
22
+ else form.submit();
23
+ });
13
24
  return /* @__PURE__ */ jsx(Button, {
14
25
  ref: buttonRef,
15
26
  type: "primary",
16
27
  htmlType: "submit",
17
28
  isLoading: submitting,
18
29
  ...props,
19
- isDisabled: contextDisabled || props.isDisabled || submitting || invalid
30
+ onClick: click,
31
+ isDisabled: contextDisabled || props.isDisabled || submitting || disableOnInvalid && invalid
20
32
  });
21
33
  }
22
- function ModernResetButton({ form, buttonRef, onPress, ...props }) {
34
+ function ModernResetButton({ form, buttonRef, onClick, ...props }) {
23
35
  const { isDisabled: contextDisabled } = useProviderProps({});
24
- const disabled = useFormSelector(form, (state) => state.isSubmitting || !state.isTouched);
36
+ const canReset = useFormSelector(form, (state) => state.canReset);
25
37
  const reset = useEvent((event) => {
26
- form.reset();
27
- onPress?.(event);
38
+ onClick?.(event);
39
+ if (event.defaultPrevented) return;
40
+ const root = getControllerInternals(form, "<Form.Reset>").getRootElement();
41
+ const button = event.currentTarget;
42
+ if (root && button.form === root && button.type === "reset") return;
43
+ event.preventDefault();
44
+ if (root?.isConnected) root.reset();
45
+ else form.reset();
28
46
  });
29
47
  return /* @__PURE__ */ jsx(Button, {
30
48
  ref: buttonRef,
31
49
  type: "primary",
32
50
  htmlType: "button",
33
51
  ...props,
34
- onPress: reset,
35
- isDisabled: contextDisabled || props.isDisabled || disabled
52
+ onClick: reset,
53
+ isDisabled: contextDisabled || props.isDisabled || !canReset
36
54
  });
37
55
  }
38
56
 
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","names":[],"sources":["../../../../../src/components/form/Form/modern/actions.tsx"],"sourcesContent":["import { useEvent } from '../../../../_internal/hooks/use-event';\nimport { useProviderProps } from '../../../../provider';\nimport { Button } from '../../../actions/Button/Button';\n\nimport { useFormSelector } from './react';\n\nimport type { FocusableRef } from '@react-types/shared';\nimport type { CubeButtonProps } from '../../../actions/Button/Button';\nimport type { FormController } from './controller';\n\nexport function ModernSubmitButton({\n form,\n buttonRef,\n ...props\n}: CubeButtonProps & {\n form: FormController<any>;\n buttonRef: FocusableRef<HTMLElement>;\n}) {\n const { isDisabled: contextDisabled } = useProviderProps(\n {} as CubeButtonProps,\n );\n const submitting = useFormSelector(form, (state) => state.isSubmitting);\n const invalid = useFormSelector(form, (state) => state.isInvalid);\n return (\n <Button\n ref={buttonRef}\n type=\"primary\"\n htmlType=\"submit\"\n isLoading={submitting}\n {...props}\n isDisabled={contextDisabled || props.isDisabled || submitting || invalid}\n />\n );\n}\n\nexport function ModernResetButton({\n form,\n buttonRef,\n onPress,\n ...props\n}: CubeButtonProps & {\n form: FormController<any>;\n buttonRef: FocusableRef<HTMLElement>;\n}) {\n const { isDisabled: contextDisabled } = useProviderProps(\n {} as CubeButtonProps,\n );\n const disabled = useFormSelector(\n form,\n (state) => state.isSubmitting || !state.isTouched,\n );\n const reset = useEvent((event) => {\n form.reset();\n onPress?.(event);\n });\n return (\n <Button\n ref={buttonRef}\n type=\"primary\"\n htmlType=\"button\"\n {...props}\n onPress={reset}\n isDisabled={contextDisabled || props.isDisabled || disabled}\n />\n );\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,mBAAmB,EACjC,MACA,WACA,GAAG,SAIF;CACD,MAAM,EAAE,YAAY,oBAAoB,iBACtC,EAAE,CACH;CACD,MAAM,aAAa,gBAAgB,OAAO,UAAU,MAAM,aAAa;CACvE,MAAM,UAAU,gBAAgB,OAAO,UAAU,MAAM,UAAU;AACjE,QACE,oBAAC;EACC,KAAK;EACL,MAAK;EACL,UAAS;EACT,WAAW;EACX,GAAI;EACJ,YAAY,mBAAmB,MAAM,cAAc,cAAc;GACjE;;AAIN,SAAgB,kBAAkB,EAChC,MACA,WACA,SACA,GAAG,SAIF;CACD,MAAM,EAAE,YAAY,oBAAoB,iBACtC,EAAE,CACH;CACD,MAAM,WAAW,gBACf,OACC,UAAU,MAAM,gBAAgB,CAAC,MAAM,UACzC;CACD,MAAM,QAAQ,UAAU,UAAU;AAChC,OAAK,OAAO;AACZ,YAAU,MAAM;GAChB;AACF,QACE,oBAAC;EACC,KAAK;EACL,MAAK;EACL,UAAS;EACT,GAAI;EACJ,SAAS;EACT,YAAY,mBAAmB,MAAM,cAAc;GACnD"}
1
+ {"version":3,"file":"actions.js","names":[],"sources":["../../../../../src/components/form/Form/modern/actions.tsx"],"sourcesContent":["import { useEvent } from '../../../../_internal/hooks/use-event';\nimport { useProviderProps } from '../../../../provider';\nimport { Button } from '../../../actions/Button/Button';\n\nimport { getControllerInternals } from './controller';\nimport { useFormSelector } from './react';\n\nimport type { FocusableRef } from '@react-types/shared';\nimport type { MouseEvent } from 'react';\nimport type { CubeButtonProps } from '../../../actions/Button/Button';\nimport type { FormController } from './controller';\n\nexport function ModernSubmitButton({\n form,\n buttonRef,\n onClick,\n disableOnInvalid = false,\n ...props\n}: CubeButtonProps & {\n form: FormController<any>;\n buttonRef: FocusableRef<HTMLElement>;\n disableOnInvalid?: boolean;\n}) {\n const { isDisabled: contextDisabled } = useProviderProps(\n {} as CubeButtonProps,\n );\n const submitting = useFormSelector(form, (state) => state.isSubmitting);\n const invalid = useFormSelector(form, (state) => state.isInvalid);\n const click = useEvent((event: MouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n const root = getControllerInternals(form, '<Form.Submit>').getRootElement();\n const button = event.currentTarget as HTMLButtonElement;\n if (root && button.form === root && button.type === 'submit') return;\n event.preventDefault();\n if (root?.isConnected) root.requestSubmit();\n else void form.submit();\n });\n return (\n <Button\n ref={buttonRef}\n type=\"primary\"\n htmlType=\"submit\"\n isLoading={submitting}\n {...props}\n onClick={click}\n isDisabled={\n contextDisabled ||\n props.isDisabled ||\n submitting ||\n (disableOnInvalid && invalid)\n }\n />\n );\n}\n\nexport function ModernResetButton({\n form,\n buttonRef,\n onClick,\n ...props\n}: CubeButtonProps & {\n form: FormController<any>;\n buttonRef: FocusableRef<HTMLElement>;\n}) {\n const { isDisabled: contextDisabled } = useProviderProps(\n {} as CubeButtonProps,\n );\n const canReset = useFormSelector(form, (state) => state.canReset);\n const reset = useEvent((event: MouseEvent<HTMLElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n const root = getControllerInternals(form, '<Form.Reset>').getRootElement();\n const button = event.currentTarget as HTMLButtonElement;\n if (root && button.form === root && button.type === 'reset') return;\n event.preventDefault();\n if (root?.isConnected) root.reset();\n else form.reset();\n });\n return (\n <Button\n ref={buttonRef}\n type=\"primary\"\n htmlType=\"button\"\n {...props}\n onClick={reset}\n isDisabled={contextDisabled || props.isDisabled || !canReset}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,mBAAmB,EACjC,MACA,WACA,SACA,mBAAmB,OACnB,GAAG,SAKF;CACD,MAAM,EAAE,YAAY,oBAAoB,iBACtC,EAAE,CACH;CACD,MAAM,aAAa,gBAAgB,OAAO,UAAU,MAAM,aAAa;CACvE,MAAM,UAAU,gBAAgB,OAAO,UAAU,MAAM,UAAU;CACjE,MAAM,QAAQ,UAAU,UAAmC;AACzD,YAAU,MAAM;AAChB,MAAI,MAAM,iBAAkB;EAC5B,MAAM,OAAO,uBAAuB,MAAM,gBAAgB,CAAC,gBAAgB;EAC3E,MAAM,SAAS,MAAM;AACrB,MAAI,QAAQ,OAAO,SAAS,QAAQ,OAAO,SAAS,SAAU;AAC9D,QAAM,gBAAgB;AACtB,MAAI,MAAM,YAAa,MAAK,eAAe;MACtC,CAAK,KAAK,QAAQ;GACvB;AACF,QACE,oBAAC;EACC,KAAK;EACL,MAAK;EACL,UAAS;EACT,WAAW;EACX,GAAI;EACJ,SAAS;EACT,YACE,mBACA,MAAM,cACN,cACC,oBAAoB;GAEvB;;AAIN,SAAgB,kBAAkB,EAChC,MACA,WACA,SACA,GAAG,SAIF;CACD,MAAM,EAAE,YAAY,oBAAoB,iBACtC,EAAE,CACH;CACD,MAAM,WAAW,gBAAgB,OAAO,UAAU,MAAM,SAAS;CACjE,MAAM,QAAQ,UAAU,UAAmC;AACzD,YAAU,MAAM;AAChB,MAAI,MAAM,iBAAkB;EAC5B,MAAM,OAAO,uBAAuB,MAAM,eAAe,CAAC,gBAAgB;EAC1E,MAAM,SAAS,MAAM;AACrB,MAAI,QAAQ,OAAO,SAAS,QAAQ,OAAO,SAAS,QAAS;AAC7D,QAAM,gBAAgB;AACtB,MAAI,MAAM,YAAa,MAAK,OAAO;MAC9B,MAAK,OAAO;GACjB;AACF,QACE,oBAAC;EACC,KAAK;EACL,MAAK;EACL,UAAS;EACT,GAAI;EACJ,SAAS;EACT,YAAY,mBAAmB,MAAM,cAAc,CAAC;GACpD"}
@@ -1,5 +1,8 @@
1
1
 
2
+ import "./read-types.js";
3
+ import "./types.js";
2
4
  import { FormController } from "./controller.js";
5
+ import "./field.js";
3
6
  import "react";
4
7
 
5
8
  //#region src/components/form/Form/modern/context.d.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/form/Form/modern/context.ts
@@ -1,23 +1,34 @@
1
1
 
2
+ import { FORM_BACKEND } from "../backend.js";
2
3
  import { FormPath } from "./values.js";
4
+ import { CheckedFormDependencies, CheckedFormPath, FormValueAtPath } from "./path-types.js";
5
+ import { FormReadValue } from "./read-types.js";
3
6
  import { ModernValidationRule as ModernValidationRule$1 } from "./validation.js";
4
- import { FormValueAtPath } from "./path-types.js";
5
- import { FormState, FormStore, FormStoreOptions, ModernFieldValidationResult as ModernFieldValidationResult$1, ModernSubmitResult as ModernSubmitResult$1, ModernValidationResult as ModernValidationResult$1, SetValueOptions } from "./types.js";
6
- import { FORM_BACKEND } from "../backend.js";
7
+ import { FieldState, FormState, FormStore, FormStoreOptions, ModernFieldValidationResult as ModernFieldValidationResult$1, ModernSubmitFailure as ModernSubmitFailure$1, ModernSubmitResult as ModernSubmitResult$1, ModernValidationResult as ModernValidationResult$1, SetValueOptions } from "./types.js";
8
+ import { FormField, FormFieldOptions } from "./field.js";
7
9
  import { ReactNode } from "react";
8
10
 
9
11
  //#region src/components/form/Form/modern/controller.d.ts
10
12
  type ModernValidationRule = ModernValidationRule$1<ReactNode>;
11
13
  type ModernValidationResult = ModernValidationResult$1<ReactNode>;
12
14
  type ModernFieldValidationResult = ModernFieldValidationResult$1<ReactNode>;
15
+ type ModernSubmitFailure = ModernSubmitFailure$1<ReactNode>;
16
+ type ModernFieldState<Value = unknown> = Omit<FieldState<ReactNode>, 'value' | 'defaultValue'> & {
17
+ readonly value: FormReadValue<Value> | undefined;
18
+ readonly defaultValue: FormReadValue<Value> | undefined;
19
+ };
13
20
  type ModernSubmitResult = ModernSubmitResult$1<ReactNode>;
14
21
  type ModernFormState<T extends object = Record<string, unknown>> = FormState<T, ReactNode>;
15
- type UseFormControllerOptions<T extends object = Record<string, unknown>> = FormStoreOptions<T>;
22
+ type UseFormControllerOptions<T extends object = Record<string, unknown>> = FormStoreOptions<T, ReactNode>;
16
23
  /** Public commands; registration and pipeline state tokens stay internal. */
17
- type FormController<T extends object = Record<string, unknown>> = Readonly<Pick<FormStore<T, ReactNode>, typeof FORM_BACKEND | 'validate' | 'submit' | 'blur' | 'getSnapshot' | 'getFieldSnapshot' | 'getValues' | 'getActiveValues' | 'subscribe' | 'setValues' | 'batch' | 'setDefaultValues' | 'adoptDefaultValues' | 'reset' | 'touch' | 'setFieldErrors' | 'clearFieldErrors' | 'setSubmitError' | 'clearSubmitError'> & {
18
- getValue<const Path extends FormPath>(path: Path): FormValueAtPath<T, Path> | undefined;
19
- setValue<const Path extends FormPath>(path: Path, value: FormValueAtPath<T, NoInfer<Path>> | undefined, options?: SetValueOptions): void;
24
+ type FormController<T extends object = Record<string, unknown>> = Readonly<Pick<FormStore<T, ReactNode>, typeof FORM_BACKEND | 'validate' | 'submit' | 'blur' | 'getSnapshot' | 'getValues' | 'getActiveValues' | 'subscribe' | 'setValues' | 'batch' | 'setDefaultValues' | 'adoptDefaultValues' | 'reset' | 'touch' | 'setFieldErrors' | 'clearFieldErrors' | 'setSubmitError' | 'clearSubmitError'> & {
25
+ getFieldSnapshot<const Path extends FormPath>(path: CheckedFormPath<T, Path>): ModernFieldState<FormValueAtPath<T, Path>> | undefined;
26
+ getValue<const Path extends FormPath>(path: CheckedFormPath<T, Path>): FormReadValue<FormValueAtPath<T, Path>> | undefined;
27
+ setValue<const Path extends FormPath>(path: CheckedFormPath<T, Path>, value: FormValueAtPath<T, NoInfer<Path>> | undefined, options?: SetValueOptions): void;
28
+ field<const Path extends FormPath, const Dependencies extends readonly FormPath[] = readonly FormPath[]>(path: CheckedFormPath<T, Path>, options?: FormFieldOptions<T, FormValueAtPath<T, NoInfer<Path>>> & {
29
+ dependsOn?: Dependencies & CheckedFormDependencies<T, Dependencies>;
30
+ }): FormField<FormValueAtPath<T, Path>>;
20
31
  }>;
21
32
  //#endregion
22
- export { FormController, ModernFieldValidationResult, ModernFormState, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions };
33
+ export { FormController, ModernFieldState, ModernFieldValidationResult, ModernFormState, ModernSubmitFailure, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions };
23
34
  //# sourceMappingURL=controller.d.ts.map
@@ -1,5 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { FORM_BACKEND, isModernFormController } from "../backend.js";
3
+ import { createFormField } from "./field.js";
3
4
  import { createFormStore } from "./store.js";
4
5
 
5
6
  //#region src/components/form/Form/modern/controller.ts
@@ -8,11 +9,19 @@ const CONTROLLER_STORE = Symbol.for("@cube-dev/ui-kit/form-controller-store");
8
9
  function createFormController(options) {
9
10
  const store = createFormStore(options);
10
11
  const serverSnapshot = store.getSnapshot();
12
+ let rootElement;
11
13
  const internals = {
12
14
  store,
13
- getServerSnapshot: () => serverSnapshot
15
+ getServerSnapshot: () => serverSnapshot,
16
+ getRootElement: () => rootElement,
17
+ bindRootElement(element) {
18
+ rootElement = element ?? void 0;
19
+ return () => {
20
+ if (rootElement === element) rootElement = void 0;
21
+ };
22
+ }
14
23
  };
15
- return Object.freeze({
24
+ const controller = Object.freeze({
16
25
  [FORM_BACKEND]: "modern",
17
26
  [CONTROLLER_STORE]: internals,
18
27
  validate: store.validate,
@@ -34,8 +43,10 @@ function createFormController(options) {
34
43
  setFieldErrors: store.setFieldErrors,
35
44
  clearFieldErrors: store.clearFieldErrors,
36
45
  setSubmitError: store.setSubmitError,
37
- clearSubmitError: store.clearSubmitError
46
+ clearSubmitError: store.clearSubmitError,
47
+ field: (path, config) => createFormField(controller, path, config)
38
48
  });
49
+ return controller;
39
50
  }
40
51
  function getControllerInternals(controller, receiver) {
41
52
  const internals = isModernFormController(controller) ? controller[CONTROLLER_STORE] : void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","names":[],"sources":["../../../../../src/components/form/Form/modern/controller.ts"],"sourcesContent":["import { FORM_BACKEND, isModernFormController } from '../backend';\n\nimport { createFormStore } from './store';\n\nimport type { ReactNode } from 'react';\nimport type { FormValueAtPath } from './path-types';\nimport type {\n FormState,\n FormStore,\n FormStoreOptions,\n SetValueOptions,\n ModernFieldValidationResult as StoreFieldValidationResult,\n ModernSubmitResult as StoreSubmitResult,\n ModernValidationResult as StoreValidationResult,\n} from './types';\nimport type { ModernValidationRule as StoreValidationRule } from './validation';\nimport type { FormPath } from './values';\n\nexport type ModernValidationRule = StoreValidationRule<ReactNode>;\nexport type ModernValidationResult = StoreValidationResult<ReactNode>;\nexport type ModernFieldValidationResult = StoreFieldValidationResult<ReactNode>;\nexport type ModernSubmitResult = StoreSubmitResult<ReactNode>;\n\nexport type ModernFormState<T extends object = Record<string, unknown>> =\n FormState<T, ReactNode>;\n\nexport type UseFormControllerOptions<\n T extends object = Record<string, unknown>,\n> = FormStoreOptions<T>;\n\n/** Public commands; registration and pipeline state tokens stay internal. */\nexport type FormController<T extends object = Record<string, unknown>> =\n Readonly<\n Pick<\n FormStore<T, ReactNode>,\n | typeof FORM_BACKEND\n | 'validate'\n | 'submit'\n | 'blur'\n | 'getSnapshot'\n | 'getFieldSnapshot'\n | 'getValues'\n | 'getActiveValues'\n | 'subscribe'\n | 'setValues'\n | 'batch'\n | 'setDefaultValues'\n | 'adoptDefaultValues'\n | 'reset'\n | 'touch'\n | 'setFieldErrors'\n | 'clearFieldErrors'\n | 'setSubmitError'\n | 'clearSubmitError'\n > & {\n getValue<const Path extends FormPath>(\n path: Path,\n ): FormValueAtPath<T, Path> | undefined;\n setValue<const Path extends FormPath>(\n path: Path,\n value: FormValueAtPath<T, NoInfer<Path>> | undefined,\n options?: SetValueOptions,\n ): void;\n }\n >;\n\n// Symbol.for also lets two copies of the kit share a controller, just as the\n// backend brand does. This symbol and the store are not package exports.\nconst CONTROLLER_STORE = Symbol.for('@cube-dev/ui-kit/form-controller-store');\n\ninterface ControllerInternals<T extends object> {\n store: FormStore<T, ReactNode>;\n getServerSnapshot(): ModernFormState<T>;\n}\n\n/** Pure allocation for the creation hook; no listeners or external effects. */\nexport function createFormController<T extends object>(\n options?: UseFormControllerOptions<T>,\n): FormController<T> {\n const store = createFormStore<T, ReactNode>(options);\n const serverSnapshot = store.getSnapshot();\n const internals: ControllerInternals<T> = {\n store,\n getServerSnapshot: () => serverSnapshot,\n };\n return Object.freeze({\n [FORM_BACKEND]: 'modern' as const,\n [CONTROLLER_STORE]: internals,\n validate: store.validate,\n submit: store.submit,\n blur: store.blur,\n getSnapshot: store.getSnapshot,\n getFieldSnapshot: store.getFieldSnapshot,\n getValue: store.getValue,\n getValues: store.getValues,\n getActiveValues: store.getActiveValues,\n subscribe: store.subscribe,\n setValue: store.setValue,\n setValues: store.setValues,\n batch: store.batch,\n setDefaultValues: store.setDefaultValues,\n adoptDefaultValues: store.adoptDefaultValues,\n reset: store.reset,\n touch: store.touch,\n setFieldErrors: store.setFieldErrors,\n clearFieldErrors: store.clearFieldErrors,\n setSubmitError: store.setSubmitError,\n clearSubmitError: store.clearSubmitError,\n }) as FormController<T>;\n}\n\nexport function getControllerInternals<T extends object>(\n controller: FormController<T>,\n receiver: string,\n): ControllerInternals<T> {\n const internals = isModernFormController(controller)\n ? (controller as unknown as Record<symbol, ControllerInternals<T>>)[\n CONTROLLER_STORE\n ]\n : undefined;\n if (!internals) {\n throw new Error(\n `${receiver} requires a modern form controller created by Form.useController(). Legacy Form instances and bare backend brands are not supported.`,\n );\n }\n return internals;\n}\n"],"mappings":";;;;;AAoEA,MAAM,mBAAmB,OAAO,IAAI,yCAAyC;;AAQ7E,SAAgB,qBACd,SACmB;CACnB,MAAM,QAAQ,gBAA8B,QAAQ;CACpD,MAAM,iBAAiB,MAAM,aAAa;CAC1C,MAAM,YAAoC;EACxC;EACA,yBAAyB;EAC1B;AACD,QAAO,OAAO,OAAO;GAClB,eAAe;GACf,mBAAmB;EACpB,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,MAAM,MAAM;EACZ,aAAa,MAAM;EACnB,kBAAkB,MAAM;EACxB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,iBAAiB,MAAM;EACvB,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,kBAAkB,MAAM;EACxB,oBAAoB,MAAM;EAC1B,OAAO,MAAM;EACb,OAAO,MAAM;EACb,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACxB,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACzB,CAAC;;AAGJ,SAAgB,uBACd,YACA,UACwB;CACxB,MAAM,YAAY,uBAAuB,WAAW,GAC/C,WACC,oBAEF;AACJ,KAAI,CAAC,UACH,OAAM,IAAI,MACR,GAAG,SAAS,sIACb;AAEH,QAAO"}
1
+ {"version":3,"file":"controller.js","names":[],"sources":["../../../../../src/components/form/Form/modern/controller.ts"],"sourcesContent":["import { FORM_BACKEND, isModernFormController } from '../backend';\n\nimport { createFormField } from './field';\nimport { createFormStore } from './store';\n\nimport type { ReactNode } from 'react';\nimport type { FormField, FormFieldOptions } from './field';\nimport type {\n CheckedFormDependencies,\n CheckedFormPath,\n FormValueAtPath,\n} from './path-types';\nimport type { FormReadValue } from './read-types';\nimport type {\n FieldState,\n FormState,\n FormStore,\n FormStoreOptions,\n SetValueOptions,\n ModernFieldValidationResult as StoreFieldValidationResult,\n ModernSubmitFailure as StoreSubmitFailure,\n ModernSubmitResult as StoreSubmitResult,\n ModernValidationResult as StoreValidationResult,\n} from './types';\nimport type { ModernValidationRule as StoreValidationRule } from './validation';\nimport type { FormPath } from './values';\n\nexport type ModernValidationRule = StoreValidationRule<ReactNode>;\nexport type ModernValidationResult = StoreValidationResult<ReactNode>;\nexport type ModernFieldValidationResult = StoreFieldValidationResult<ReactNode>;\nexport type ModernSubmitFailure = StoreSubmitFailure<ReactNode>;\nexport type ModernFieldState<Value = unknown> = Omit<\n FieldState<ReactNode>,\n 'value' | 'defaultValue'\n> & {\n readonly value: FormReadValue<Value> | undefined;\n readonly defaultValue: FormReadValue<Value> | undefined;\n};\n\nexport type ModernSubmitResult = StoreSubmitResult<ReactNode>;\n\nexport type ModernFormState<T extends object = Record<string, unknown>> =\n FormState<T, ReactNode>;\n\nexport type UseFormControllerOptions<\n T extends object = Record<string, unknown>,\n> = FormStoreOptions<T, ReactNode>;\n\n/** Public commands; registration and pipeline state tokens stay internal. */\nexport type FormController<T extends object = Record<string, unknown>> =\n Readonly<\n Pick<\n FormStore<T, ReactNode>,\n | typeof FORM_BACKEND\n | 'validate'\n | 'submit'\n | 'blur'\n | 'getSnapshot'\n | 'getValues'\n | 'getActiveValues'\n | 'subscribe'\n | 'setValues'\n | 'batch'\n | 'setDefaultValues'\n | 'adoptDefaultValues'\n | 'reset'\n | 'touch'\n | 'setFieldErrors'\n | 'clearFieldErrors'\n | 'setSubmitError'\n | 'clearSubmitError'\n > & {\n getFieldSnapshot<const Path extends FormPath>(\n path: CheckedFormPath<T, Path>,\n ): ModernFieldState<FormValueAtPath<T, Path>> | undefined;\n getValue<const Path extends FormPath>(\n path: CheckedFormPath<T, Path>,\n ): FormReadValue<FormValueAtPath<T, Path>> | undefined;\n setValue<const Path extends FormPath>(\n path: CheckedFormPath<T, Path>,\n value: FormValueAtPath<T, NoInfer<Path>> | undefined,\n options?: SetValueOptions,\n ): void;\n field<\n const Path extends FormPath,\n const Dependencies extends readonly FormPath[] = readonly FormPath[],\n >(\n path: CheckedFormPath<T, Path>,\n options?: FormFieldOptions<T, FormValueAtPath<T, NoInfer<Path>>> & {\n dependsOn?: Dependencies & CheckedFormDependencies<T, Dependencies>;\n },\n ): FormField<FormValueAtPath<T, Path>>;\n }\n >;\n\n// Symbol.for also lets two copies of the kit share a controller, just as the\n// backend brand does. This symbol and the store are not package exports.\nconst CONTROLLER_STORE = Symbol.for('@cube-dev/ui-kit/form-controller-store');\n\ninterface ControllerInternals<T extends object> {\n store: FormStore<T, ReactNode>;\n getServerSnapshot(): ModernFormState<T>;\n getRootElement(): HTMLFormElement | undefined;\n bindRootElement(element: HTMLFormElement | null): () => void;\n}\n\n/** Pure allocation for the creation hook; no listeners or external effects. */\nexport function createFormController<T extends object>(\n options?: UseFormControllerOptions<T>,\n): FormController<T> {\n const store = createFormStore<T, ReactNode>(options);\n const serverSnapshot = store.getSnapshot();\n let rootElement: HTMLFormElement | undefined;\n const internals: ControllerInternals<T> = {\n store,\n getServerSnapshot: () => serverSnapshot,\n getRootElement: () => rootElement,\n bindRootElement(element) {\n rootElement = element ?? undefined;\n return () => {\n if (rootElement === element) rootElement = undefined;\n };\n },\n };\n const controller = Object.freeze({\n [FORM_BACKEND]: 'modern' as const,\n [CONTROLLER_STORE]: internals,\n validate: store.validate,\n submit: store.submit,\n blur: store.blur,\n getSnapshot: store.getSnapshot,\n getFieldSnapshot: store.getFieldSnapshot,\n getValue: store.getValue,\n getValues: store.getValues,\n getActiveValues: store.getActiveValues,\n subscribe: store.subscribe,\n setValue: store.setValue,\n setValues: store.setValues,\n batch: store.batch,\n setDefaultValues: store.setDefaultValues,\n adoptDefaultValues: store.adoptDefaultValues,\n reset: store.reset,\n touch: store.touch,\n setFieldErrors: store.setFieldErrors,\n clearFieldErrors: store.clearFieldErrors,\n setSubmitError: store.setSubmitError,\n clearSubmitError: store.clearSubmitError,\n field: (path: FormPath, config?: FormFieldOptions<T, unknown>) =>\n createFormField(controller, path, config),\n }) as FormController<T>;\n return controller;\n}\n\nexport function getControllerInternals<T extends object>(\n controller: FormController<T>,\n receiver: string,\n): ControllerInternals<T> {\n const internals = isModernFormController(controller)\n ? (controller as unknown as Record<symbol, ControllerInternals<T>>)[\n CONTROLLER_STORE\n ]\n : undefined;\n if (!internals) {\n throw new Error(\n `${receiver} requires a modern form controller created by Form.useController(). Legacy Form instances and bare backend brands are not supported.`,\n );\n }\n return internals;\n}\n"],"mappings":";;;;;;AAiGA,MAAM,mBAAmB,OAAO,IAAI,yCAAyC;;AAU7E,SAAgB,qBACd,SACmB;CACnB,MAAM,QAAQ,gBAA8B,QAAQ;CACpD,MAAM,iBAAiB,MAAM,aAAa;CAC1C,IAAI;CACJ,MAAM,YAAoC;EACxC;EACA,yBAAyB;EACzB,sBAAsB;EACtB,gBAAgB,SAAS;AACvB,iBAAc,WAAW;AACzB,gBAAa;AACX,QAAI,gBAAgB,QAAS,eAAc;;;EAGhD;CACD,MAAM,aAAa,OAAO,OAAO;GAC9B,eAAe;GACf,mBAAmB;EACpB,UAAU,MAAM;EAChB,QAAQ,MAAM;EACd,MAAM,MAAM;EACZ,aAAa,MAAM;EACnB,kBAAkB,MAAM;EACxB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,iBAAiB,MAAM;EACvB,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,kBAAkB,MAAM;EACxB,oBAAoB,MAAM;EAC1B,OAAO,MAAM;EACb,OAAO,MAAM;EACb,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACxB,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACxB,QAAQ,MAAgB,WACtB,gBAAgB,YAAY,MAAM,OAAO;EAC5C,CAAC;AACF,QAAO;;AAGT,SAAgB,uBACd,YACA,UACwB;CACxB,MAAM,YAAY,uBAAuB,WAAW,GAC/C,WACC,oBAEF;AACJ,KAAI,CAAC,UACH,OAAM,IAAI,MACR,GAAG,SAAS,sIACb;AAEH,QAAO"}