@cube-dev/ui-kit 0.179.0 → 0.180.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 (640) 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.d.ts +1 -0
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/actions-run.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.js +1 -1
  89. package/dist/components/content/TextItem/TextItem.js +1 -1
  90. package/dist/components/content/Title.js +1 -1
  91. package/dist/components/content/Tree/Tree.js +1 -1
  92. package/dist/components/content/Tree/TreeNode.js +1 -1
  93. package/dist/components/content/Tree/styled.js +1 -1
  94. package/dist/components/content/Tree/tree-index.js +1 -1
  95. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  96. package/dist/components/content/Tree/use-load-data.js +1 -1
  97. package/dist/components/content/highlightText.js +1 -1
  98. package/dist/components/content/use-auto-tooltip.js +1 -1
  99. package/dist/components/data/DataTable/DataTable.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  105. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  106. package/dist/components/data/TableBase/RowCollection.js +1 -1
  107. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  108. package/dist/components/data/TableBase/TableRow.js +1 -1
  109. package/dist/components/data/TableBase/TableView.js +1 -1
  110. package/dist/components/data/TableBase/column-menu.js +1 -1
  111. package/dist/components/data/TableBase/column-tint.js +1 -1
  112. package/dist/components/data/TableBase/row-menu.js +1 -1
  113. package/dist/components/data/TableBase/styled.d.ts +2 -1
  114. package/dist/components/data/TableBase/styled.js +1 -1
  115. package/dist/components/data/TableBase/table-tree.js +1 -1
  116. package/dist/components/data/TableBase/types.js +1 -1
  117. package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
  118. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  119. package/dist/components/data/TableBase/use-column-order.js +1 -1
  120. package/dist/components/data/TableBase/use-container-width.js +1 -1
  121. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  122. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  123. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  124. package/dist/components/data/TableBase/use-table-search.js +1 -1
  125. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  126. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  127. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  128. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  129. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  130. package/dist/components/fields/Checkbox/Checkbox.d.ts +7 -0
  131. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  132. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  133. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -1
  134. package/dist/components/fields/Checkbox/CheckboxGroup.js +3 -3
  135. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  136. package/dist/components/fields/Checkbox/context.js +1 -1
  137. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  138. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  139. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  140. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  141. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  142. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  143. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  144. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  145. package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
  146. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  147. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -1
  148. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  149. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  150. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  151. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
  152. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  153. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  154. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  155. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  159. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +1 -1
  160. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  161. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  162. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +1 -1
  163. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  164. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  165. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  167. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  168. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  169. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  171. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  172. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  173. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  175. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  176. package/dist/components/fields/DatePicker/period.js +1 -1
  177. package/dist/components/fields/DatePicker/props.js +1 -1
  178. package/dist/components/fields/DatePicker/utils.js +1 -1
  179. package/dist/components/fields/FileInput/FileInput.d.ts +2 -0
  180. package/dist/components/fields/FileInput/FileInput.js +1 -1
  181. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  182. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  183. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  184. package/dist/components/fields/Input/Input.js +1 -1
  185. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  186. package/dist/components/fields/ListBox/ListBox.js +1 -1
  187. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  188. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
  189. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  190. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
  191. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  192. package/dist/components/fields/NumberInput/NumberInput.d.ts +1 -1
  193. package/dist/components/fields/NumberInput/NumberInput.js +3 -3
  194. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  195. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  196. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  197. package/dist/components/fields/Picker/Picker.js +1 -1
  198. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  199. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  200. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  201. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  202. package/dist/components/fields/RadioGroup/context.js +1 -1
  203. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  204. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  205. package/dist/components/fields/Select/Select.js +1 -1
  206. package/dist/components/fields/Slider/Gradation.js +1 -1
  207. package/dist/components/fields/Slider/HueSlider.js +1 -1
  208. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  209. package/dist/components/fields/Slider/Slider.js +1 -1
  210. package/dist/components/fields/Slider/SliderBase.js +2 -2
  211. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  212. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  213. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  214. package/dist/components/fields/Slider/elements.js +1 -1
  215. package/dist/components/fields/Slider/index.js +1 -1
  216. package/dist/components/fields/Slider/types.d.ts +1 -1
  217. package/dist/components/fields/Switch/Switch.d.ts +2 -0
  218. package/dist/components/fields/Switch/Switch.js +1 -1
  219. package/dist/components/fields/Switch/Switch.js.map +1 -1
  220. package/dist/components/fields/TextArea/TextArea.js +1 -1
  221. package/dist/components/fields/TextInput/TextInput.js +1 -1
  222. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  223. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  224. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  225. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  226. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  227. package/dist/components/fields/TriggerActions.js +1 -1
  228. package/dist/components/fields/color/ColorPanel.js +1 -1
  229. package/dist/components/fields/color/channels.js +1 -1
  230. package/dist/components/fields/color/color.js +1 -1
  231. package/dist/components/fields/color/context.js +1 -1
  232. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  233. package/dist/components/form/Form/Field.js +1 -1
  234. package/dist/components/form/Form/Form.d.ts +38 -2
  235. package/dist/components/form/Form/Form.js +86 -16
  236. package/dist/components/form/Form/Form.js.map +1 -1
  237. package/dist/components/form/Form/ModernFormRoot.d.ts +19 -0
  238. package/dist/components/form/Form/ModernFormRoot.js +108 -0
  239. package/dist/components/form/Form/ModernFormRoot.js.map +1 -0
  240. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +2 -1
  241. package/dist/components/form/Form/ResetButton/ResetButton.js +17 -2
  242. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  243. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +2 -1
  244. package/dist/components/form/Form/SubmitButton/SubmitButton.js +17 -2
  245. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  246. package/dist/components/form/Form/SubmitError.js +26 -3
  247. package/dist/components/form/Form/SubmitError.js.map +1 -1
  248. package/dist/components/form/Form/backend.d.ts +25 -0
  249. package/dist/components/form/Form/backend.js +30 -0
  250. package/dist/components/form/Form/backend.js.map +1 -0
  251. package/dist/components/form/Form/index.d.ts +18 -4
  252. package/dist/components/form/Form/index.js +8 -2
  253. package/dist/components/form/Form/index.js.map +1 -1
  254. package/dist/components/form/Form/modern/actions.js +41 -0
  255. package/dist/components/form/Form/modern/actions.js.map +1 -0
  256. package/dist/components/form/Form/modern/context.d.ts +9 -0
  257. package/dist/components/form/Form/modern/context.js +14 -0
  258. package/dist/components/form/Form/modern/context.js.map +1 -0
  259. package/dist/components/form/Form/modern/controller.d.ts +23 -0
  260. package/dist/components/form/Form/modern/controller.js +48 -0
  261. package/dist/components/form/Form/modern/controller.js.map +1 -0
  262. package/dist/components/form/Form/modern/field-binding.js +41 -0
  263. package/dist/components/form/Form/modern/field-binding.js.map +1 -0
  264. package/dist/components/form/Form/modern/path-types.d.ts +12 -0
  265. package/dist/components/form/Form/modern/react.d.ts +21 -0
  266. package/dist/components/form/Form/modern/react.js +27 -0
  267. package/dist/components/form/Form/modern/react.js.map +1 -0
  268. package/dist/components/form/Form/modern/store.js +813 -0
  269. package/dist/components/form/Form/modern/store.js.map +1 -0
  270. package/dist/components/form/Form/modern/types.d.ts +173 -0
  271. package/dist/components/form/Form/modern/validation.d.ts +27 -0
  272. package/dist/components/form/Form/modern/validation.js +41 -0
  273. package/dist/components/form/Form/modern/validation.js.map +1 -0
  274. package/dist/components/form/Form/modern/values.d.ts +7 -0
  275. package/dist/components/form/Form/modern/values.js +144 -0
  276. package/dist/components/form/Form/modern/values.js.map +1 -0
  277. package/dist/components/form/Form/use-field/types.d.ts +4 -1
  278. package/dist/components/form/Form/use-field/use-field-binding.js +93 -0
  279. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -0
  280. package/dist/components/form/Form/use-field/use-field-props.d.ts +12 -1
  281. package/dist/components/form/Form/use-field/use-field-props.js +67 -50
  282. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  283. package/dist/components/form/Form/use-field/use-field.d.ts +6 -0
  284. package/dist/components/form/Form/use-field/use-field.js +47 -22
  285. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  286. package/dist/components/form/Form/use-form.d.ts +4 -1
  287. package/dist/components/form/Form/use-form.js +6 -2
  288. package/dist/components/form/Form/use-form.js.map +1 -1
  289. package/dist/components/form/Form/validation.js +2 -2
  290. package/dist/components/form/Label.js +1 -1
  291. package/dist/components/form/index.d.ts +8 -1
  292. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  293. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  294. package/dist/components/form/validation/use-validation-props.js +1 -1
  295. package/dist/components/form/wrapper.js +1 -1
  296. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  297. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  298. package/dist/components/layout/Board/Board.js +1 -1
  299. package/dist/components/layout/Board/BoardProvider.js +1 -1
  300. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  301. package/dist/components/layout/Board/Widget.js +1 -1
  302. package/dist/components/layout/Board/WidgetHost.js +1 -1
  303. package/dist/components/layout/Board/board-context.js +1 -1
  304. package/dist/components/layout/Board/board-store.js +1 -1
  305. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  306. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  307. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  308. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  309. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  310. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  311. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  312. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  313. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  314. package/dist/components/layout/Board/index.js +1 -1
  315. package/dist/components/layout/Board/responsive-utils.js +1 -1
  316. package/dist/components/layout/Board/use-board-layout.js +1 -1
  317. package/dist/components/layout/Board/use-board-registry.js +1 -1
  318. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  319. package/dist/components/layout/Board/use-board-selection.js +1 -1
  320. package/dist/components/layout/Flex.js +1 -1
  321. package/dist/components/layout/Flow.js +1 -1
  322. package/dist/components/layout/Grid.js +1 -1
  323. package/dist/components/layout/Panel.js +1 -1
  324. package/dist/components/layout/Prefix.js +1 -1
  325. package/dist/components/layout/ResizablePanel.js +1 -1
  326. package/dist/components/layout/Space.js +1 -1
  327. package/dist/components/layout/Suffix.js +1 -1
  328. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  329. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  330. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  331. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  332. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  333. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  334. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  335. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  336. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  337. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  338. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  339. package/dist/components/navigation/Tabs/styled.js +1 -1
  340. package/dist/components/navigation/Tabs/types.js +1 -1
  341. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  342. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  343. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  344. package/dist/components/other/Calendar/Calendar.js +1 -1
  345. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  346. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  347. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  348. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  349. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  350. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  351. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  352. package/dist/components/other/Calendar/styled.js +1 -1
  353. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  354. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  355. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  356. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  357. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  358. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  359. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  360. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  361. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  362. package/dist/components/overlays/Dialog/context.js +1 -1
  363. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  364. package/dist/components/overlays/Modal/Modal.d.ts +2 -1
  365. package/dist/components/overlays/Modal/Modal.js +1 -1
  366. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  367. package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
  368. package/dist/components/overlays/Modal/Overlay.js +1 -1
  369. package/dist/components/overlays/Modal/Popover.js +1 -1
  370. package/dist/components/overlays/Modal/Tray.js +1 -1
  371. package/dist/components/overlays/Modal/Underlay.js +1 -1
  372. package/dist/components/overlays/Modal/types.d.ts +1 -0
  373. package/dist/components/overlays/Notifications/Notification.js +1 -1
  374. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  375. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  376. package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
  377. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  378. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  379. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  380. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  381. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  382. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  383. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  384. package/dist/components/overlays/Notifications/index.js +1 -1
  385. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  386. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  387. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  388. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  389. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  390. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  391. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  392. package/dist/components/overlays/Toast/index.js +1 -1
  393. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  394. package/dist/components/overlays/Toast/useToast.js +1 -1
  395. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  396. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  397. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  398. package/dist/components/overlays/Tooltip/context.js +1 -1
  399. package/dist/components/portal/Portal.js +1 -1
  400. package/dist/components/portal/PortalProvider.d.ts +2 -0
  401. package/dist/components/portal/PortalProvider.js +1 -1
  402. package/dist/components/portal/index.d.ts +1 -0
  403. package/dist/components/portal/usePortal.js +1 -1
  404. package/dist/components/shared/DraggableCollection.js +1 -1
  405. package/dist/components/shared/InvalidIcon.js +1 -1
  406. package/dist/components/shared/ValidIcon.js +1 -1
  407. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  408. package/dist/components/status/Spin/Cube.js +1 -1
  409. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  410. package/dist/components/status/Spin/Spin.js +1 -1
  411. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  412. package/dist/data/item-themes.js +1 -1
  413. package/dist/data/themes.js +1 -1
  414. package/dist/eslint-plugin/defaults.generated.js +1 -1
  415. package/dist/eslint-plugin/index.js +1 -1
  416. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  417. package/dist/i18n/I18nProvider.js +1 -1
  418. package/dist/i18n/createFormatter.js +1 -1
  419. package/dist/i18n/index.js +1 -1
  420. package/dist/i18n/instance.js +1 -1
  421. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  422. package/dist/i18n/locales/en-US/uikit.js +1 -1
  423. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  424. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  425. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  426. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  427. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  428. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  429. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  430. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  431. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  432. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  433. package/dist/i18n/locales.js +1 -1
  434. package/dist/i18n/useFormatter.js +1 -1
  435. package/dist/i18n/useI18n.js +1 -1
  436. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  437. package/dist/icons/AdjustmentsIcon.js +1 -1
  438. package/dist/icons/AiIcon.js +1 -1
  439. package/dist/icons/AreaChartIcon.js +1 -1
  440. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  441. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  442. package/dist/icons/BackwardIcon.js +1 -1
  443. package/dist/icons/BarChartIcon.js +1 -1
  444. package/dist/icons/BellFilledIcon.js +1 -1
  445. package/dist/icons/BellIcon.js +1 -1
  446. package/dist/icons/BooleanIcon.js +1 -1
  447. package/dist/icons/CalendarEditIcon.js +1 -1
  448. package/dist/icons/CalendarIcon.js +1 -1
  449. package/dist/icons/CaretDownIcon.js +1 -1
  450. package/dist/icons/CaretUpIcon.js +1 -1
  451. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  452. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  453. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  454. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  455. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  456. package/dist/icons/ChartBarLineIcon.js +1 -1
  457. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  458. package/dist/icons/ChartBarStackedIcon.js +1 -1
  459. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  460. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  461. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  462. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  463. package/dist/icons/ChartBubbleIcon.js +1 -1
  464. package/dist/icons/ChartDonut2Icon.js +1 -1
  465. package/dist/icons/ChartFunnelIcon.js +1 -1
  466. package/dist/icons/ChartHeatmapIcon.js +1 -1
  467. package/dist/icons/ChartKPIIcon.js +1 -1
  468. package/dist/icons/ChartPie2Icon.js +1 -1
  469. package/dist/icons/ChartScatterIcon.js +1 -1
  470. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  471. package/dist/icons/CheckCircleIcon.js +1 -1
  472. package/dist/icons/CheckIcon.js +1 -1
  473. package/dist/icons/CircleFilledIcon.js +1 -1
  474. package/dist/icons/ClearIcon.js +1 -1
  475. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  476. package/dist/icons/CloseCircleIcon.js +1 -1
  477. package/dist/icons/CloseIcon.js +1 -1
  478. package/dist/icons/CodeIcon.js +1 -1
  479. package/dist/icons/ColumnTotalIcon.js +1 -1
  480. package/dist/icons/CopyIcon.js +1 -1
  481. package/dist/icons/CountIcon.js +1 -1
  482. package/dist/icons/CubeIcon.js +1 -1
  483. package/dist/icons/CubePauseIcon.js +1 -1
  484. package/dist/icons/CubePlayIcon.js +1 -1
  485. package/dist/icons/CurrencyDollarIcon.js +1 -1
  486. package/dist/icons/DangerIcon.js +1 -1
  487. package/dist/icons/DashboardIcon.js +1 -1
  488. package/dist/icons/DatabaseIcon.js +1 -1
  489. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  490. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  491. package/dist/icons/DirectionIcon.js +1 -1
  492. package/dist/icons/DonutIcon.js +1 -1
  493. package/dist/icons/DownIcon.js +1 -1
  494. package/dist/icons/EditIcon.js +1 -1
  495. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  496. package/dist/icons/ExclamationCircleIcon.js +1 -1
  497. package/dist/icons/ExclamationIcon.js +1 -1
  498. package/dist/icons/EyeIcon.js +1 -1
  499. package/dist/icons/EyeInvisibleIcon.js +1 -1
  500. package/dist/icons/FilterIcon.js +1 -1
  501. package/dist/icons/FolderFilledIcon.js +1 -1
  502. package/dist/icons/FolderIcon.js +1 -1
  503. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  504. package/dist/icons/FolderOpenIcon.js +1 -1
  505. package/dist/icons/ForwardIcon.js +1 -1
  506. package/dist/icons/GripVerticalIcon.js +1 -1
  507. package/dist/icons/HierarchyIcon.js +1 -1
  508. package/dist/icons/HierarchyOpenIcon.js +1 -1
  509. package/dist/icons/Icon.js +1 -1
  510. package/dist/icons/InfoCircleIcon.js +1 -1
  511. package/dist/icons/InfoIcon.js +1 -1
  512. package/dist/icons/KeyIcon.js +1 -1
  513. package/dist/icons/LeftIcon.js +1 -1
  514. package/dist/icons/LineChartIcon.js +1 -1
  515. package/dist/icons/LoadingIcon.js +1 -1
  516. package/dist/icons/LockFilledIcon.js +1 -1
  517. package/dist/icons/LockIcon.js +1 -1
  518. package/dist/icons/MoreIcon.js +1 -1
  519. package/dist/icons/NotAllowedIcon.js +1 -1
  520. package/dist/icons/Number123Icon.js +1 -1
  521. package/dist/icons/NumberIcon.js +1 -1
  522. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  523. package/dist/icons/PauseCircleIcon.js +1 -1
  524. package/dist/icons/PauseIcon.js +1 -1
  525. package/dist/icons/PercentageIcon.js +1 -1
  526. package/dist/icons/PieChartIcon.js +1 -1
  527. package/dist/icons/PipetteIcon.js +1 -1
  528. package/dist/icons/PlayCircleIcon.js +1 -1
  529. package/dist/icons/PlayIcon.js +1 -1
  530. package/dist/icons/PlusIcon.js +1 -1
  531. package/dist/icons/ProgressBarIcon.js +1 -1
  532. package/dist/icons/ReloadIcon.js +1 -1
  533. package/dist/icons/ReportIcon.js +1 -1
  534. package/dist/icons/ReturnIcon.js +1 -1
  535. package/dist/icons/RightIcon.js +1 -1
  536. package/dist/icons/RowTotalsIcon.js +1 -1
  537. package/dist/icons/SchemeIcon.js +1 -1
  538. package/dist/icons/SearchIcon.js +1 -1
  539. package/dist/icons/SemanticQueryIcon.js +1 -1
  540. package/dist/icons/SettingsIcon.js +1 -1
  541. package/dist/icons/ShieldFilledIcon.js +1 -1
  542. package/dist/icons/ShieldIcon.js +1 -1
  543. package/dist/icons/SlashIcon.js +1 -1
  544. package/dist/icons/SparklesIcon.js +1 -1
  545. package/dist/icons/SqlIcon.js +1 -1
  546. package/dist/icons/StatsIcon.js +1 -1
  547. package/dist/icons/StopIcon.js +1 -1
  548. package/dist/icons/StringIcon.js +1 -1
  549. package/dist/icons/SubtotalsIcon.js +1 -1
  550. package/dist/icons/SwitchIcon.js +1 -1
  551. package/dist/icons/TableIcon.js +1 -1
  552. package/dist/icons/ThumbsDownIcon.js +1 -1
  553. package/dist/icons/ThumbsUpIcon.js +1 -1
  554. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  555. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  556. package/dist/icons/ThunderboltIcon.js +1 -1
  557. package/dist/icons/TimeIcon.js +1 -1
  558. package/dist/icons/TrashIcon.js +1 -1
  559. package/dist/icons/UnlockIcon.js +1 -1
  560. package/dist/icons/UpIcon.js +1 -1
  561. package/dist/icons/UserGroupIcon.js +1 -1
  562. package/dist/icons/UserIcon.js +1 -1
  563. package/dist/icons/UserLockIcon.js +1 -1
  564. package/dist/icons/ViewIcon.js +1 -1
  565. package/dist/icons/WarningFilledIcon.js +1 -1
  566. package/dist/icons/WarningIcon.js +1 -1
  567. package/dist/icons/wrap-icon.js +1 -1
  568. package/dist/index.d.ts +10 -3
  569. package/dist/index.js +3 -3
  570. package/dist/probe/canonicalize.js +1 -1
  571. package/dist/probe/css.js +1 -1
  572. package/dist/probe/index.js +1 -1
  573. package/dist/provider.js +1 -1
  574. package/dist/providers/TrackingProvider.js +1 -1
  575. package/dist/providers/navigationAdapter.default.js +1 -1
  576. package/dist/shared/form.d.ts +16 -2
  577. package/dist/shared/index.d.ts +1 -1
  578. package/dist/tokens/all-tokens.js +1 -1
  579. package/dist/tokens/base.js +1 -1
  580. package/dist/tokens/color-seed.js +1 -1
  581. package/dist/tokens/color-theme.js +1 -1
  582. package/dist/tokens/colors.js +1 -1
  583. package/dist/tokens/layout.js +1 -1
  584. package/dist/tokens/lazy-styles.js +1 -1
  585. package/dist/tokens/legacy-color.js +1 -1
  586. package/dist/tokens/palette-config.js +1 -1
  587. package/dist/tokens/palette.js +1 -1
  588. package/dist/tokens/resolve.js +1 -1
  589. package/dist/tokens/shadows.js +1 -1
  590. package/dist/tokens/sizes.js +1 -1
  591. package/dist/tokens/spacing.js +1 -1
  592. package/dist/tokens/typography.js +1 -1
  593. package/dist/utils/ResizeSensor.js +1 -1
  594. package/dist/utils/colors.js +1 -1
  595. package/dist/utils/dotize.js +1 -1
  596. package/dist/utils/is-dev-env.js +1 -1
  597. package/dist/utils/modules.js +1 -1
  598. package/dist/utils/promise.js +1 -1
  599. package/dist/utils/raf.js +1 -1
  600. package/dist/utils/random.js +1 -1
  601. package/dist/utils/range.js +1 -1
  602. package/dist/utils/react/RenderCache.js +1 -1
  603. package/dist/utils/react/Slots.js +1 -1
  604. package/dist/utils/react/chain.js +1 -1
  605. package/dist/utils/react/disabledProps.js +1 -1
  606. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  607. package/dist/utils/react/index.js +1 -1
  608. package/dist/utils/react/interactions.js +1 -1
  609. package/dist/utils/react/isTextOnly.js +1 -1
  610. package/dist/utils/react/mapProps.js +1 -1
  611. package/dist/utils/react/mergeProps.js +1 -1
  612. package/dist/utils/react/nullableValue.js +1 -1
  613. package/dist/utils/react/resolveIcon.js +1 -1
  614. package/dist/utils/react/sharedStore.js +1 -1
  615. package/dist/utils/react/useBufferedValue.js +1 -1
  616. package/dist/utils/react/useCombinedRefs.js +1 -1
  617. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  618. package/dist/utils/react/useEventBus.js +1 -1
  619. package/dist/utils/react/useId.js +1 -1
  620. package/dist/utils/react/useIsDarwin.js +1 -1
  621. package/dist/utils/react/useKeySymbols.js +1 -1
  622. package/dist/utils/react/useLayoutEffect.js +1 -1
  623. package/dist/utils/react/useLocalStorage.js +1 -1
  624. package/dist/utils/react/useMergeStyles.js +1 -1
  625. package/dist/utils/react/usePopoverSync.js +1 -1
  626. package/dist/utils/react/useQaProps.js +1 -1
  627. package/dist/utils/react/useScheme.js +1 -1
  628. package/dist/utils/react/useViewportSize.js +1 -1
  629. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  630. package/dist/utils/selection.js +1 -1
  631. package/dist/utils/styles.js +1 -1
  632. package/dist/utils/tree.js +1 -1
  633. package/dist/utils/warnings.js +1 -1
  634. package/dist/version.js +3 -3
  635. package/docs/CreateComponent.md +4 -0
  636. package/docs/Usage.md +2 -0
  637. package/docs/components/form/Form.md +51 -1
  638. package/docs/modern-form-migration.md +104 -0
  639. package/docs/modern-form-typecheck.md +35 -0
  640. package/package.json +12 -3
@@ -0,0 +1,108 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
+ import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
4
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
5
+ import { Provider, useProviderProps } from "../../../provider.js";
6
+ import { useValidationProps } from "../validation/use-validation-props.js";
7
+ import { ModernControllerContext } from "./modern/context.js";
8
+ import { getControllerInternals } from "./modern/controller.js";
9
+ import { FormContext, FormElement, FormPresentationContext, formPropNames } from "./Form.js";
10
+ import { CONTAINER_STYLES, filterBaseProps } from "@tenphi/tasty";
11
+ import { forwardRef, useMemo, useRef } from "react";
12
+ import { jsx } from "react/jsx-runtime";
13
+
14
+ //#region src/components/form/Form/ModernFormRoot.tsx
15
+ const EMPTY_LEGACY_CONTEXT = {};
16
+ 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 labelPosition = authoredLabelPosition ?? (orientation === "horizontal" ? "side" : "top");
19
+ const labelWidth = authoredLabelWidth ?? (orientation === "horizontal" ? "auto" : void 0);
20
+ const { store } = getControllerInternals(form, "<Form>");
21
+ if (defaultValues !== void 0) throw new Error("A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.");
22
+ const binding = useRef(void 0);
23
+ useLayoutEffect$1(() => {
24
+ const token = store.bindCallbacks({});
25
+ binding.current = token;
26
+ return () => {
27
+ token.release();
28
+ if (binding.current === token) binding.current = void 0;
29
+ };
30
+ }, [store]);
31
+ useLayoutEffect$1(() => {
32
+ binding.current?.update({
33
+ ...onSubmit === void 0 ? {} : { onSubmit },
34
+ ...onSubmitFailed === void 0 ? {} : { onSubmitFailed },
35
+ ...onValuesChange === void 0 ? {} : { onValuesChange }
36
+ });
37
+ });
38
+ const handleSubmit = useEvent((event) => {
39
+ event.preventDefault();
40
+ event.stopPropagation();
41
+ form.submit();
42
+ });
43
+ const handleReset = useEvent((event) => {
44
+ otherProps.onReset?.(event);
45
+ if (!event.defaultPrevented) {
46
+ event.preventDefault();
47
+ form.reset();
48
+ }
49
+ });
50
+ const presentation = useMemo(() => ({
51
+ labelPosition,
52
+ labelStyles,
53
+ orientation,
54
+ necessityIndicator,
55
+ validateTrigger,
56
+ requiredMark,
57
+ showValid,
58
+ idPrefix: name
59
+ }), [
60
+ labelPosition,
61
+ labelStyles,
62
+ orientation,
63
+ necessityIndicator,
64
+ validateTrigger,
65
+ requiredMark,
66
+ showValid,
67
+ name
68
+ ]);
69
+ const styles = extractStyles(otherProps, CONTAINER_STYLES);
70
+ if (labelWidth) styles["$label-width"] = labelWidth;
71
+ return /* @__PURE__ */ jsx(FormElement, {
72
+ ...filterBaseProps(otherProps, { propNames: formPropNames }),
73
+ ref,
74
+ qa,
75
+ noValidate: true,
76
+ styles,
77
+ mods: {
78
+ "has-sider": labelPosition === "side",
79
+ "has-split": labelPosition === "split",
80
+ horizontal: orientation === "horizontal"
81
+ },
82
+ onSubmit: otherProps.action == null ? handleSubmit : void 0,
83
+ onReset: otherProps.action == null ? handleReset : otherProps.onReset,
84
+ children: /* @__PURE__ */ jsx(FormContext.Provider, {
85
+ value: EMPTY_LEGACY_CONTEXT,
86
+ children: /* @__PURE__ */ jsx(ModernControllerContext.Provider, {
87
+ value: form,
88
+ children: /* @__PURE__ */ jsx(FormPresentationContext.Provider, {
89
+ value: presentation,
90
+ children: /* @__PURE__ */ jsx(Provider, {
91
+ insideForm: true,
92
+ isDisabled,
93
+ isReadOnly,
94
+ isInvalid,
95
+ isValid,
96
+ children
97
+ })
98
+ })
99
+ })
100
+ })
101
+ });
102
+ }
103
+ const _ModernFormRoot = forwardRef(ModernFormRoot);
104
+ _ModernFormRoot.displayName = "ModernFormRoot";
105
+
106
+ //#endregion
107
+ export { _ModernFormRoot };
108
+ //# sourceMappingURL=ModernFormRoot.js.map
@@ -0,0 +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,13 +1,14 @@
1
1
 
2
2
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
3
  import { FieldTypes } from "../types.js";
4
+ import { FormController } from "../modern/controller.js";
4
5
  import { CubeFormInstance } from "../use-form.js";
5
6
  import * as react from "react";
6
7
  import * as _react_types_shared0 from "@react-types/shared";
7
8
 
8
9
  //#region src/components/form/Form/ResetButton/ResetButton.d.ts
9
10
  interface CubeResetButtonProps<T extends FieldTypes = FieldTypes> extends CubeButtonProps {
10
- form?: CubeFormInstance<T>;
11
+ form?: CubeFormInstance<T> | FormController<T>;
11
12
  }
12
13
  declare const _ResetButton: react.ForwardRefExoticComponent<Omit<CubeResetButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
13
14
  //#endregion
@@ -1,14 +1,16 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.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";
5
5
  import { Button } from "../../../actions/Button/Button.js";
6
+ import { isModernFormController } from "../backend.js";
6
7
  import { useFormProps } from "../Form.js";
8
+ import { ModernResetButton } from "../modern/actions.js";
7
9
  import { forwardRef } from "react";
8
10
  import { jsx } from "react/jsx-runtime";
9
11
 
10
12
  //#region src/components/form/Form/ResetButton/ResetButton.tsx
11
- function ResetButton(props, ref) {
13
+ function LegacyResetButton(props, ref) {
12
14
  const providerProps = useProviderProps({});
13
15
  props = useFormProps(props);
14
16
  const { isDisabled: isContextDisabled } = providerProps;
@@ -30,6 +32,19 @@ function ResetButton(props, ref) {
30
32
  }, otherProps)
31
33
  });
32
34
  }
35
+ function ResetButton(props, ref) {
36
+ const resolved = useFormProps(props);
37
+ if (isModernFormController(resolved.form)) return /* @__PURE__ */ jsx(ModernResetButton, {
38
+ ...resolved,
39
+ form: resolved.form,
40
+ buttonRef: ref
41
+ });
42
+ return /* @__PURE__ */ jsx(LegacyResetButtonWithRef, {
43
+ ...props,
44
+ ref
45
+ });
46
+ }
47
+ const LegacyResetButtonWithRef = forwardRef(LegacyResetButton);
33
48
  const _ResetButton = forwardRef(ResetButton);
34
49
  _ResetButton.displayName = "ResetButton";
35
50
 
@@ -1 +1 @@
1
- {"version":3,"file":"ResetButton.js","names":[],"sources":["../../../../../src/components/form/Form/ResetButton/ResetButton.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { forwardRef } from 'react';\n\nimport { useEvent } from '../../../../_internal/index';\nimport { useProviderProps } from '../../../../provider';\nimport { mergeProps } from '../../../../utils/react/index';\nimport { Button, CubeButtonProps } from '../../../actions/Button/Button';\nimport { useFormProps } from '../Form';\nimport { FieldTypes } from '../types';\nimport { CubeFormInstance } from '../use-form';\n\nexport interface CubeResetButtonProps<T extends FieldTypes = FieldTypes>\n extends CubeButtonProps {\n form?: CubeFormInstance<T>;\n}\n\nfunction ResetButton(\n props: CubeResetButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const providerProps = useProviderProps({} as CubeButtonProps);\n\n props = useFormProps(props);\n\n const { isDisabled: isContextDisabled } = providerProps;\n const { form, isDisabled, ...otherProps } = props;\n\n const onPress = useEvent(() => {\n // Use setTimeout to avoid conflict with onBlur handlers\n setTimeout(() => {\n form?.resetFields();\n });\n });\n\n const isSomethingDisabled = isDisabled || isContextDisabled;\n\n return (\n <Button\n ref={ref}\n type=\"primary\"\n htmlType=\"reset\"\n isDisabled={form?.isSubmitting || !form?.isTouched}\n {...mergeProps(\n {\n onPress,\n isDisabled: isSomethingDisabled\n ? true\n : form?.isSubmitting || !form?.isTouched,\n },\n otherProps,\n )}\n />\n );\n}\n\nconst _ResetButton = forwardRef(ResetButton);\n\n_ResetButton.displayName = 'ResetButton';\n\nexport { _ResetButton as ResetButton };\n"],"mappings":";;;;;;;;;;AAgBA,SAAS,YACP,OACA,KACA;CACA,MAAM,gBAAgB,iBAAiB,EAAE,CAAoB;AAE7D,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,YAAY,sBAAsB;CAC1C,MAAM,EAAE,MAAM,YAAY,GAAG,eAAe;CAE5C,MAAM,UAAU,eAAe;AAE7B,mBAAiB;AACf,SAAM,aAAa;IACnB;GACF;CAEF,MAAM,sBAAsB,cAAc;AAE1C,QACE,oBAAC;EACM;EACL,MAAK;EACL,UAAS;EACT,YAAY,MAAM,gBAAgB,CAAC,MAAM;EACzC,GAAI,WACF;GACE;GACA,YAAY,sBACR,OACA,MAAM,gBAAgB,CAAC,MAAM;GAClC,EACD,WACD;GACD;;AAIN,MAAM,eAAe,WAAW,YAAY;AAE5C,aAAa,cAAc"}
1
+ {"version":3,"file":"ResetButton.js","names":[],"sources":["../../../../../src/components/form/Form/ResetButton/ResetButton.tsx"],"sourcesContent":["import { FocusableRef } from '@react-types/shared';\nimport { forwardRef } from 'react';\n\nimport { useEvent } from '../../../../_internal/index';\nimport { useProviderProps } from '../../../../provider';\nimport { mergeProps } from '../../../../utils/react/index';\nimport { Button, CubeButtonProps } from '../../../actions/Button/Button';\nimport { isModernFormController } from '../backend';\nimport { useFormProps } from '../Form';\nimport { ModernResetButton } from '../modern/actions';\nimport { FieldTypes } from '../types';\nimport { CubeFormInstance } from '../use-form';\n\nimport type { FormController } from '../modern/controller';\n\nexport interface CubeResetButtonProps<T extends FieldTypes = FieldTypes>\n extends CubeButtonProps {\n form?: CubeFormInstance<T> | FormController<T>;\n}\n\nfunction LegacyResetButton(\n props: Omit<CubeResetButtonProps, '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 const { form, isDisabled, ...otherProps } = props;\n\n const onPress = useEvent(() => {\n // Use setTimeout to avoid conflict with onBlur handlers\n setTimeout(() => {\n form?.resetFields();\n });\n });\n\n const isSomethingDisabled = isDisabled || isContextDisabled;\n\n return (\n <Button\n ref={ref}\n type=\"primary\"\n htmlType=\"reset\"\n isDisabled={form?.isSubmitting || !form?.isTouched}\n {...mergeProps(\n {\n onPress,\n isDisabled: isSomethingDisabled\n ? true\n : form?.isSubmitting || !form?.isTouched,\n },\n otherProps,\n )}\n />\n );\n}\n\nfunction ResetButton(\n props: CubeResetButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const resolved = useFormProps(props);\n if (isModernFormController(resolved.form)) {\n return (\n <ModernResetButton\n {...resolved}\n form={resolved.form as FormController}\n buttonRef={ref}\n />\n );\n }\n return (\n <LegacyResetButtonWithRef\n {...(props as Omit<CubeResetButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n })}\n ref={ref}\n />\n );\n}\n\nconst LegacyResetButtonWithRef = forwardRef(LegacyResetButton);\nconst _ResetButton = forwardRef(ResetButton);\n\n_ResetButton.displayName = 'ResetButton';\n\nexport { _ResetButton as ResetButton };\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAS,kBACP,OAGA,KACA;CACA,MAAM,gBAAgB,iBAAiB,EAAE,CAAoB;AAE7D,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,YAAY,sBAAsB;CAC1C,MAAM,EAAE,MAAM,YAAY,GAAG,eAAe;CAE5C,MAAM,UAAU,eAAe;AAE7B,mBAAiB;AACf,SAAM,aAAa;IACnB;GACF;CAEF,MAAM,sBAAsB,cAAc;AAE1C,QACE,oBAAC;EACM;EACL,MAAK;EACL,UAAS;EACT,YAAY,MAAM,gBAAgB,CAAC,MAAM;EACzC,GAAI,WACF;GACE;GACA,YAAY,sBACR,OACA,MAAM,gBAAgB,CAAC,MAAM;GAClC,EACD,WACD;GACD;;AAIN,SAAS,YACP,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,2BAA2B,WAAW,kBAAkB;AAC9D,MAAM,eAAe,WAAW,YAAY;AAE5C,aAAa,cAAc"}
@@ -1,13 +1,14 @@
1
1
 
2
2
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
3
  import { FieldTypes } from "../types.js";
4
+ import { FormController } from "../modern/controller.js";
4
5
  import { CubeFormInstance } from "../use-form.js";
5
6
  import * as react from "react";
6
7
  import * as _react_types_shared0 from "@react-types/shared";
7
8
 
8
9
  //#region src/components/form/Form/SubmitButton/SubmitButton.d.ts
9
10
  interface CubeSubmitButtonProps<T extends FieldTypes = FieldTypes> extends CubeButtonProps {
10
- form?: CubeFormInstance<T>;
11
+ form?: CubeFormInstance<T> | FormController<T>;
11
12
  }
12
13
  declare const _SubmitButton: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
13
14
  //#endregion
@@ -1,12 +1,14 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../../provider.js";
3
3
  import { Button } from "../../../actions/Button/Button.js";
4
+ import { isModernFormController } from "../backend.js";
4
5
  import { useFormProps } from "../Form.js";
6
+ import { ModernSubmitButton } from "../modern/actions.js";
5
7
  import { forwardRef } from "react";
6
8
  import { jsx } from "react/jsx-runtime";
7
9
 
8
10
  //#region src/components/form/Form/SubmitButton/SubmitButton.tsx
9
- function SubmitButton(props, ref) {
11
+ function LegacySubmitButton(props, ref) {
10
12
  const providerProps = useProviderProps({});
11
13
  props = useFormProps(props);
12
14
  const { isDisabled: isContextDisabled } = providerProps;
@@ -22,6 +24,19 @@ function SubmitButton(props, ref) {
22
24
  ...otherProps
23
25
  });
24
26
  }
27
+ function SubmitButton(props, ref) {
28
+ const resolved = useFormProps(props);
29
+ if (isModernFormController(resolved.form)) return /* @__PURE__ */ jsx(ModernSubmitButton, {
30
+ ...resolved,
31
+ form: resolved.form,
32
+ buttonRef: ref
33
+ });
34
+ return /* @__PURE__ */ jsx(LegacySubmitButtonWithRef, {
35
+ ...props,
36
+ ref
37
+ });
38
+ }
39
+ const LegacySubmitButtonWithRef = forwardRef(LegacySubmitButton);
25
40
  const _SubmitButton = forwardRef(SubmitButton);
26
41
  _SubmitButton.displayName = "SubmitButton";
27
42
 
@@ -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 { useFormProps } from '../Form';\nimport { FieldTypes } from '../types';\nimport { CubeFormInstance } from '../use-form';\n\nexport interface CubeSubmitButtonProps<T extends FieldTypes = FieldTypes>\n extends CubeButtonProps {\n form?: CubeFormInstance<T>;\n}\n\nfunction SubmitButton(\n props: CubeSubmitButtonProps,\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\nconst _SubmitButton = forwardRef(SubmitButton);\n\n_SubmitButton.displayName = 'SubmitButton';\n\nexport { _SubmitButton as SubmitButton };\n"],"mappings":";;;;;;;;AAcA,SAAS,aACP,OACA,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,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}\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,13 +1,14 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
+ import { ModernControllerContext } from "./modern/context.js";
3
4
  import { FormContext } from "./Form.js";
5
+ import { useFormSelector } from "./modern/react.js";
4
6
  import { Alert } from "../../content/Alert/Alert.js";
5
7
  import { forwardRef, isValidElement, useContext } from "react";
6
8
  import { jsx } from "react/jsx-runtime";
7
9
 
8
10
  //#region src/components/form/Form/SubmitError.tsx
9
- function SubmitError(props, ref) {
10
- let { submitError } = useContext(FormContext);
11
+ function ErrorAlert({ submitError, ...props }, ref) {
11
12
  const { t } = useI18n();
12
13
  if (!submitError) return null;
13
14
  if (!isValidElement(submitError) && typeof submitError !== "string") submitError = t("form.internalError", "Internal error");
@@ -18,6 +19,28 @@ function SubmitError(props, ref) {
18
19
  children: submitError
19
20
  });
20
21
  }
22
+ const ForwardedErrorAlert = forwardRef(ErrorAlert);
23
+ function ModernSubmitError({ form, alertRef, ...props }) {
24
+ const submitError = useFormSelector(form, (state) => state.submitError);
25
+ return /* @__PURE__ */ jsx(ForwardedErrorAlert, {
26
+ ...props,
27
+ ref: alertRef,
28
+ submitError
29
+ });
30
+ }
31
+ function SubmitError(props, ref) {
32
+ const modern = useContext(ModernControllerContext);
33
+ const legacy = useContext(FormContext);
34
+ return modern ? /* @__PURE__ */ jsx(ModernSubmitError, {
35
+ ...props,
36
+ form: modern,
37
+ alertRef: ref
38
+ }) : /* @__PURE__ */ jsx(ForwardedErrorAlert, {
39
+ ...props,
40
+ ref,
41
+ submitError: legacy.submitError
42
+ });
43
+ }
21
44
  /**
22
45
  * An alert that shows a form error message received from the onSubmit callback.
23
46
  */
@@ -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';\n\ntype SubmitErrorContextProps = {\n submitError?: unknown;\n};\n\nfunction SubmitError(props: CubeAlertProps, ref: ForwardedRef<HTMLDivElement>) {\n let { submitError } = useContext(FormContext) as SubmitErrorContextProps;\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\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":";;;;;;;;AAiBA,SAAS,YAAY,OAAuB,KAAmC;CAC7E,IAAI,EAAE,gBAAgB,WAAW,YAAY;CAC7C,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;;;;;AAOZ,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\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"}
@@ -0,0 +1,25 @@
1
+
2
+ import { FormController } from "./modern/controller.js";
3
+
4
+ //#region src/components/form/Form/backend.d.ts
5
+ /**
6
+ * Nominal branding for the two Form backends (modernization plan §5.1).
7
+ *
8
+ * The legacy engine (`CubeFormInstance`) and the modern controller are not
9
+ * structurally interchangeable: each carries this symbol with its backend
10
+ * kind, the `<Form>` facade dispatches on it before any backend hook runs, and
11
+ * the legacy field adapter refuses a controller it cannot bind.
12
+ *
13
+ * Modern controllers support creation, selectors, fields, validation, and submission.
14
+ * Legacy-only APIs reject them explicitly.
15
+ */
16
+ declare const FORM_BACKEND: unique symbol;
17
+ interface LegacyFormBrand {
18
+ readonly [FORM_BACKEND]: 'legacy';
19
+ }
20
+ interface ModernFormBrand {
21
+ readonly [FORM_BACKEND]: 'modern';
22
+ }
23
+ //#endregion
24
+ export { FORM_BACKEND, LegacyFormBrand, ModernFormBrand };
25
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1,30 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
+ //#region src/components/form/Form/backend.ts
3
+ /**
4
+ * Nominal branding for the two Form backends (modernization plan §5.1).
5
+ *
6
+ * The legacy engine (`CubeFormInstance`) and the modern controller are not
7
+ * structurally interchangeable: each carries this symbol with its backend
8
+ * kind, the `<Form>` facade dispatches on it before any backend hook runs, and
9
+ * the legacy field adapter refuses a controller it cannot bind.
10
+ *
11
+ * Modern controllers support creation, selectors, fields, validation, and submission.
12
+ * Legacy-only APIs reject them explicitly.
13
+ */
14
+ const FORM_BACKEND = Symbol.for("@cube-dev/ui-kit/form-backend");
15
+ /**
16
+ * Only a modern brand is ever checked. Anything else — a branded legacy
17
+ * instance, but also an unbranded object — counts as legacy on purpose: Cloud
18
+ * narrows form props to structural types and its tests pass plain mocks, and
19
+ * the legacy engine has always accepted them.
20
+ */
21
+ function isModernFormController(value) {
22
+ return !!value && typeof value === "object" && value[FORM_BACKEND] === "modern";
23
+ }
24
+ function modernBackendUnavailableError(receiver) {
25
+ return /* @__PURE__ */ new Error(`${receiver} received a modern form controller, but this legacy API does not support modern controllers. Use named inputs or useFieldProps with a modern controller; Form.Item and Form.useForm() remain legacy-only.`);
26
+ }
27
+
28
+ //#endregion
29
+ export { FORM_BACKEND, isModernFormController, modernBackendUnavailableError };
30
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","names":[],"sources":["../../../../src/components/form/Form/backend.ts"],"sourcesContent":["/**\n * Nominal branding for the two Form backends (modernization plan §5.1).\n *\n * The legacy engine (`CubeFormInstance`) and the modern controller are not\n * structurally interchangeable: each carries this symbol with its backend\n * kind, the `<Form>` facade dispatches on it before any backend hook runs, and\n * the legacy field adapter refuses a controller it cannot bind.\n *\n * Modern controllers support creation, selectors, fields, validation, and submission.\n * Legacy-only APIs reject them explicitly.\n */\nexport const FORM_BACKEND: unique symbol = Symbol.for(\n '@cube-dev/ui-kit/form-backend',\n);\n\nexport interface LegacyFormBrand {\n readonly [FORM_BACKEND]: 'legacy';\n}\n\nexport interface ModernFormBrand {\n readonly [FORM_BACKEND]: 'modern';\n}\n\nexport type { FormController } from './modern/controller';\n\n/**\n * Only a modern brand is ever checked. Anything else — a branded legacy\n * instance, but also an unbranded object — counts as legacy on purpose: Cloud\n * narrows form props to structural types and its tests pass plain mocks, and\n * the legacy engine has always accepted them.\n */\nexport function isModernFormController(\n value: unknown,\n): value is ModernFormBrand {\n return (\n !!value &&\n typeof value === 'object' &&\n (value as Record<PropertyKey, unknown>)[FORM_BACKEND] === 'modern'\n );\n}\n\nexport function modernBackendUnavailableError(receiver: string): Error {\n return new Error(\n `${receiver} received a modern form controller, but this legacy API does not support modern controllers. Use named inputs or useFieldProps with a modern controller; Form.Item and Form.useForm() remain legacy-only.`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,MAAa,eAA8B,OAAO,IAChD,gCACD;;;;;;;AAkBD,SAAgB,uBACd,OAC0B;AAC1B,QACE,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAAuC,kBAAkB;;AAI9D,SAAgB,8BAA8B,UAAyB;AACrE,wBAAO,IAAI,MACT,GAAG,SAAS,2MACb"}
@@ -1,7 +1,13 @@
1
1
 
2
+ import { FormPath } from "./modern/values.js";
3
+ import { ModernValidationContext } from "./modern/validation.js";
2
4
  import { FieldTypes, Fields } from "./types.js";
5
+ import { FormValueAtPath } from "./modern/path-types.js";
6
+ import { FormChange, ModernSubmitContext, SetValueOptions } from "./modern/types.js";
7
+ import { FormController, ModernFieldValidationResult, ModernFormState, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions } from "./modern/controller.js";
3
8
  import { CubeFormInstance, useForm } from "./use-form.js";
4
- import { CubeFormProps, FormContext, useFormProps } from "./Form.js";
9
+ import { ModernFormProps } from "./ModernFormRoot.js";
10
+ import { CubeFormProps, FormContext, FormRootComponent, FormScopeMask, useFormProps } from "./Form.js";
5
11
  import { CubeSubmitButtonProps, _SubmitButton } from "./SubmitButton/SubmitButton.js";
6
12
  import "./SubmitButton/index.js";
7
13
  import { CubeResetButtonProps, _ResetButton } from "./ResetButton/ResetButton.js";
@@ -9,6 +15,8 @@ import "./ResetButton/index.js";
9
15
  import { CubeAlertProps } from "../../content/Alert/types.js";
10
16
  import "../../content/Alert/index.js";
11
17
  import { Field } from "./Field.js";
18
+ import { useFormControllerContext } from "./modern/context.js";
19
+ import { FormSelectorOptions, FormSubscribe, FormSubscribeProps, useFormController, useFormSelector } from "./modern/react.js";
12
20
  import { _SubmitError } from "./SubmitError.js";
13
21
  import { FieldReturnValue, UseFieldProps } from "./use-field/types.js";
14
22
  import { UseFieldParams, useField } from "./use-field/use-field.js";
@@ -18,17 +26,23 @@ import * as react from "react";
18
26
  import * as _react_types_shared0 from "@react-types/shared";
19
27
 
20
28
  //#region src/components/form/Form/index.d.ts
21
- declare const Form: (<T extends FieldTypes>(props: CubeFormProps<T> & {
22
- ref?: react.Ref<HTMLFormElement>;
23
- }) => react.ReactElement) & {
29
+ declare const Form: FormRootComponent & {
24
30
  Item: typeof Field;
25
31
  SubmitError: typeof _SubmitError;
26
32
  Submit: typeof _SubmitButton;
27
33
  Reset: typeof _ResetButton;
28
34
  useForm: typeof useForm;
35
+ useController: typeof useFormController;
36
+ useSelector: typeof useFormSelector;
37
+ Subscribe: typeof FormSubscribe;
38
+ useControllerContext: typeof useFormControllerContext;
29
39
  } & {
30
40
  Item: typeof Field;
31
41
  useForm: typeof useForm;
42
+ useController: typeof useFormController;
43
+ useSelector: typeof useFormSelector;
44
+ Subscribe: typeof FormSubscribe;
45
+ useControllerContext: typeof useFormControllerContext;
32
46
  Submit: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
33
47
  Reset: react.ForwardRefExoticComponent<Omit<CubeResetButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
34
48
  SubmitError: react.ForwardRefExoticComponent<CubeAlertProps & react.RefAttributes<HTMLDivElement>>;
@@ -1,9 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
+ import { useFormControllerContext } from "./modern/context.js";
2
3
  import { useForm } from "./use-form.js";
3
- import { FormContext, _Form, useFormProps } from "./Form.js";
4
+ import { FormContext, FormScopeMask, _Form, useFormProps } from "./Form.js";
4
5
  import { useField } from "./use-field/use-field.js";
5
6
  import { useFieldProps } from "./use-field/use-field-props.js";
6
7
  import { Field } from "./Field.js";
8
+ import { FormSubscribe, useFormController, useFormSelector } from "./modern/react.js";
7
9
  import { _ResetButton } from "./ResetButton/ResetButton.js";
8
10
  import { _SubmitButton } from "./SubmitButton/SubmitButton.js";
9
11
  import { _SubmitError } from "./SubmitError.js";
@@ -12,6 +14,10 @@ import { _SubmitError } from "./SubmitError.js";
12
14
  const Form = Object.assign(_Form, {
13
15
  Item: Field,
14
16
  useForm,
17
+ useController: useFormController,
18
+ useSelector: useFormSelector,
19
+ Subscribe: FormSubscribe,
20
+ useControllerContext: useFormControllerContext,
15
21
  Submit: _SubmitButton,
16
22
  Reset: _ResetButton,
17
23
  SubmitError: _SubmitError
@@ -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 { Form as _Form, FormContext, useFormProps } from './Form';\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 },\n {\n Item: Field,\n useForm,\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 };\nexport type { CubeFormProps } from './Form';\nexport type { CubeFormInstance } from './use-form';\nexport type { FieldTypes, Fields } from './types';\nexport type { CubeAlertProps as CubeSubmitErrorProps };\n"],"mappings":";;;;;;;;;;;AASA,MAAM,OAAO,OAAO,OAClB,OAOA;CACE,MAAM;CACN;CACA,QAAQA;CACR,OAAOC;CACP;CACD,CACF"}
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"}
@@ -0,0 +1,41 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
+ import { useEvent } from "../../../../_internal/hooks/use-event.js";
3
+ import { useProviderProps } from "../../../../provider.js";
4
+ import { Button } from "../../../actions/Button/Button.js";
5
+ import { useFormSelector } from "./react.js";
6
+ import { jsx } from "react/jsx-runtime";
7
+
8
+ //#region src/components/form/Form/modern/actions.tsx
9
+ function ModernSubmitButton({ form, buttonRef, ...props }) {
10
+ const { isDisabled: contextDisabled } = useProviderProps({});
11
+ const submitting = useFormSelector(form, (state) => state.isSubmitting);
12
+ const invalid = useFormSelector(form, (state) => state.isInvalid);
13
+ return /* @__PURE__ */ jsx(Button, {
14
+ ref: buttonRef,
15
+ type: "primary",
16
+ htmlType: "submit",
17
+ isLoading: submitting,
18
+ ...props,
19
+ isDisabled: contextDisabled || props.isDisabled || submitting || invalid
20
+ });
21
+ }
22
+ function ModernResetButton({ form, buttonRef, onPress, ...props }) {
23
+ const { isDisabled: contextDisabled } = useProviderProps({});
24
+ const disabled = useFormSelector(form, (state) => state.isSubmitting || !state.isTouched);
25
+ const reset = useEvent((event) => {
26
+ form.reset();
27
+ onPress?.(event);
28
+ });
29
+ return /* @__PURE__ */ jsx(Button, {
30
+ ref: buttonRef,
31
+ type: "primary",
32
+ htmlType: "button",
33
+ ...props,
34
+ onPress: reset,
35
+ isDisabled: contextDisabled || props.isDisabled || disabled
36
+ });
37
+ }
38
+
39
+ //#endregion
40
+ export { ModernResetButton, ModernSubmitButton };
41
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +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"}
@@ -0,0 +1,9 @@
1
+
2
+ import { FormController } from "./controller.js";
3
+ import "react";
4
+
5
+ //#region src/components/form/Form/modern/context.d.ts
6
+ declare function useFormControllerContext<T extends object = Record<string, unknown>>(): FormController<T>;
7
+ //#endregion
8
+ export { useFormControllerContext };
9
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1,14 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
2
+ import { createContext, useContext } from "react";
3
+
4
+ //#region src/components/form/Form/modern/context.ts
5
+ const ModernControllerContext = createContext(null);
6
+ function useFormControllerContext() {
7
+ const controller = useContext(ModernControllerContext);
8
+ if (!controller) throw new Error("Form.useControllerContext() requires a modern <Form> root. Legacy forms and FormScopeMask do not provide a modern controller.");
9
+ return controller;
10
+ }
11
+
12
+ //#endregion
13
+ export { ModernControllerContext, useFormControllerContext };
14
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../../src/components/form/Form/modern/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { FormController } from './controller';\n\nexport const ModernControllerContext =\n createContext<FormController<any> | null>(null);\n\nexport function useFormControllerContext<\n T extends object = Record<string, unknown>,\n>(): FormController<T> {\n const controller = useContext(ModernControllerContext);\n if (!controller) {\n throw new Error(\n 'Form.useControllerContext() requires a modern <Form> root. Legacy forms and FormScopeMask do not provide a modern controller.',\n );\n }\n return controller;\n}\n"],"mappings":";;;;AAIA,MAAa,0BACX,cAA0C,KAAK;AAEjD,SAAgB,2BAEO;CACrB,MAAM,aAAa,WAAW,wBAAwB;AACtD,KAAI,CAAC,WACH,OAAM,IAAI,MACR,gIACD;AAEH,QAAO"}
@@ -0,0 +1,23 @@
1
+
2
+ import { FormPath } from "./values.js";
3
+ 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 { ReactNode } from "react";
8
+
9
+ //#region src/components/form/Form/modern/controller.d.ts
10
+ type ModernValidationRule = ModernValidationRule$1<ReactNode>;
11
+ type ModernValidationResult = ModernValidationResult$1<ReactNode>;
12
+ type ModernFieldValidationResult = ModernFieldValidationResult$1<ReactNode>;
13
+ type ModernSubmitResult = ModernSubmitResult$1<ReactNode>;
14
+ type ModernFormState<T extends object = Record<string, unknown>> = FormState<T, ReactNode>;
15
+ type UseFormControllerOptions<T extends object = Record<string, unknown>> = FormStoreOptions<T>;
16
+ /** 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;
20
+ }>;
21
+ //#endregion
22
+ export { FormController, ModernFieldValidationResult, ModernFormState, ModernSubmitResult, ModernValidationResult, ModernValidationRule, UseFormControllerOptions };
23
+ //# sourceMappingURL=controller.d.ts.map