@cube-dev/ui-kit 0.179.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/dist/CHANGELOG.md +28 -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 +3 -3
  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 +2 -2
  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 +2 -2
  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 +10 -1
  131. package/dist/components/fields/Checkbox/Checkbox.js +4 -5
  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.d.ts +1 -1
  138. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  139. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  140. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +1 -1
  141. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  142. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  143. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  144. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +1 -1
  145. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  146. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  147. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -1
  148. package/dist/components/fields/ComboBox/ComboBox.js +8 -2
  149. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  150. package/dist/components/fields/CommandTextArea/CommandTextArea.js +2 -2
  151. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  152. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  153. package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
  154. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  155. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -1
  156. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  157. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  158. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  159. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
  160. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  161. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  162. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  163. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  164. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  166. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  167. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -1
  168. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  169. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  170. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +4 -1
  171. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  173. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  175. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  177. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  179. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  180. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  181. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  182. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  183. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  184. package/dist/components/fields/DatePicker/period.js +1 -1
  185. package/dist/components/fields/DatePicker/props.js +1 -1
  186. package/dist/components/fields/DatePicker/utils.js +1 -1
  187. package/dist/components/fields/FileInput/FileInput.d.ts +6 -1
  188. package/dist/components/fields/FileInput/FileInput.js +38 -29
  189. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  190. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  191. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  192. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  193. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +1 -1
  194. package/dist/components/fields/FilterPicker/FilterPicker.js +8 -5
  195. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  196. package/dist/components/fields/Input/Input.js +1 -1
  197. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  198. package/dist/components/fields/ListBox/ListBox.d.ts +1 -1
  199. package/dist/components/fields/ListBox/ListBox.js +5 -3
  200. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  201. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  202. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
  203. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  204. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
  205. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  206. package/dist/components/fields/NumberInput/NumberInput.d.ts +3 -1
  207. package/dist/components/fields/NumberInput/NumberInput.js +3 -3
  208. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  209. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  210. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  211. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  212. package/dist/components/fields/Picker/Picker.js +8 -5
  213. package/dist/components/fields/Picker/Picker.js.map +1 -1
  214. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  215. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  216. package/dist/components/fields/RadioGroup/RadioGroup.js +3 -3
  217. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  218. package/dist/components/fields/RadioGroup/context.js +1 -1
  219. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  220. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  221. package/dist/components/fields/Select/Select.d.ts +1 -1
  222. package/dist/components/fields/Select/Select.js +16 -2
  223. package/dist/components/fields/Select/Select.js.map +1 -1
  224. package/dist/components/fields/Slider/Gradation.js +1 -1
  225. package/dist/components/fields/Slider/HueSlider.js +1 -1
  226. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  227. package/dist/components/fields/Slider/Slider.js +1 -1
  228. package/dist/components/fields/Slider/SliderBase.js +2 -2
  229. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  230. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  231. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  232. package/dist/components/fields/Slider/elements.js +1 -1
  233. package/dist/components/fields/Slider/index.js +1 -1
  234. package/dist/components/fields/Slider/types.d.ts +1 -1
  235. package/dist/components/fields/Switch/Switch.d.ts +5 -1
  236. package/dist/components/fields/Switch/Switch.js +1 -1
  237. package/dist/components/fields/Switch/Switch.js.map +1 -1
  238. package/dist/components/fields/TextArea/TextArea.d.ts +2 -0
  239. package/dist/components/fields/TextArea/TextArea.js +1 -1
  240. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  241. package/dist/components/fields/TextInput/TextInput.d.ts +4 -1
  242. package/dist/components/fields/TextInput/TextInput.js +1 -1
  243. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  244. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  245. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  246. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  247. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  248. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +1 -1
  249. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  250. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  251. package/dist/components/fields/TriggerActions.js +1 -1
  252. package/dist/components/fields/color/ColorPanel.js +1 -1
  253. package/dist/components/fields/color/channels.js +1 -1
  254. package/dist/components/fields/color/color.js +1 -1
  255. package/dist/components/fields/color/context.js +1 -1
  256. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  257. package/dist/components/form/Form/Field.d.ts +2 -0
  258. package/dist/components/form/Form/Field.js +1 -1
  259. package/dist/components/form/Form/Field.js.map +1 -1
  260. package/dist/components/form/Form/Form.d.ts +38 -2
  261. package/dist/components/form/Form/Form.js +86 -16
  262. package/dist/components/form/Form/Form.js.map +1 -1
  263. package/dist/components/form/Form/ModernFormRoot.d.ts +24 -0
  264. package/dist/components/form/Form/ModernFormRoot.js +115 -0
  265. package/dist/components/form/Form/ModernFormRoot.js.map +1 -0
  266. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +2 -1
  267. package/dist/components/form/Form/ResetButton/ResetButton.js +17 -2
  268. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  269. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +4 -1
  270. package/dist/components/form/Form/SubmitButton/SubmitButton.js +18 -3
  271. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  272. package/dist/components/form/Form/SubmitError.d.ts +8 -2
  273. package/dist/components/form/Form/SubmitError.js +33 -3
  274. package/dist/components/form/Form/SubmitError.js.map +1 -1
  275. package/dist/components/form/Form/backend.d.ts +25 -0
  276. package/dist/components/form/Form/backend.js +30 -0
  277. package/dist/components/form/Form/backend.js.map +1 -0
  278. package/dist/components/form/Form/index.d.ts +26 -8
  279. package/dist/components/form/Form/index.js +10 -2
  280. package/dist/components/form/Form/index.js.map +1 -1
  281. package/dist/components/form/Form/modern/actions.js +59 -0
  282. package/dist/components/form/Form/modern/actions.js.map +1 -0
  283. package/dist/components/form/Form/modern/context.d.ts +12 -0
  284. package/dist/components/form/Form/modern/context.js +14 -0
  285. package/dist/components/form/Form/modern/context.js.map +1 -0
  286. package/dist/components/form/Form/modern/controller.d.ts +34 -0
  287. package/dist/components/form/Form/modern/controller.js +59 -0
  288. package/dist/components/form/Form/modern/controller.js.map +1 -0
  289. package/dist/components/form/Form/modern/field-binding.js +59 -0
  290. package/dist/components/form/Form/modern/field-binding.js.map +1 -0
  291. package/dist/components/form/Form/modern/field.d.ts +30 -0
  292. package/dist/components/form/Form/modern/field.js +23 -0
  293. package/dist/components/form/Form/modern/field.js.map +1 -0
  294. package/dist/components/form/Form/modern/path-types.d.ts +16 -0
  295. package/dist/components/form/Form/modern/react.d.ts +26 -0
  296. package/dist/components/form/Form/modern/react.js +45 -0
  297. package/dist/components/form/Form/modern/react.js.map +1 -0
  298. package/dist/components/form/Form/modern/read-types.d.ts +11 -0
  299. package/dist/components/form/Form/modern/store.js +876 -0
  300. package/dist/components/form/Form/modern/store.js.map +1 -0
  301. package/dist/components/form/Form/modern/types.d.ts +189 -0
  302. package/dist/components/form/Form/modern/validation.d.ts +28 -0
  303. package/dist/components/form/Form/modern/validation.js +41 -0
  304. package/dist/components/form/Form/modern/validation.js.map +1 -0
  305. package/dist/components/form/Form/modern/values.d.ts +7 -0
  306. package/dist/components/form/Form/modern/values.js +158 -0
  307. package/dist/components/form/Form/modern/values.js.map +1 -0
  308. package/dist/components/form/Form/use-field/types.d.ts +4 -1
  309. package/dist/components/form/Form/use-field/use-field-binding.js +97 -0
  310. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -0
  311. package/dist/components/form/Form/use-field/use-field-props.d.ts +14 -1
  312. package/dist/components/form/Form/use-field/use-field-props.js +80 -52
  313. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  314. package/dist/components/form/Form/use-field/use-field.d.ts +9 -1
  315. package/dist/components/form/Form/use-field/use-field.js +47 -22
  316. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  317. package/dist/components/form/Form/use-form.d.ts +4 -1
  318. package/dist/components/form/Form/use-form.js +6 -2
  319. package/dist/components/form/Form/use-form.js.map +1 -1
  320. package/dist/components/form/Form/validation.js +2 -2
  321. package/dist/components/form/Label.js +1 -1
  322. package/dist/components/form/index.d.ts +11 -3
  323. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  324. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  325. package/dist/components/form/validation/use-validation-props.js +1 -1
  326. package/dist/components/form/wrapper.js +1 -1
  327. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  328. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  329. package/dist/components/layout/Board/Board.js +1 -1
  330. package/dist/components/layout/Board/BoardProvider.js +1 -1
  331. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  332. package/dist/components/layout/Board/Widget.js +1 -1
  333. package/dist/components/layout/Board/WidgetHost.js +1 -1
  334. package/dist/components/layout/Board/board-context.js +1 -1
  335. package/dist/components/layout/Board/board-store.js +1 -1
  336. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  337. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  338. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  339. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  340. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  341. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  342. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  343. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  344. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  345. package/dist/components/layout/Board/index.js +1 -1
  346. package/dist/components/layout/Board/responsive-utils.js +1 -1
  347. package/dist/components/layout/Board/use-board-layout.js +1 -1
  348. package/dist/components/layout/Board/use-board-registry.js +1 -1
  349. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  350. package/dist/components/layout/Board/use-board-selection.js +1 -1
  351. package/dist/components/layout/Flex.js +1 -1
  352. package/dist/components/layout/Flow.js +1 -1
  353. package/dist/components/layout/Grid.js +1 -1
  354. package/dist/components/layout/Panel.js +1 -1
  355. package/dist/components/layout/Prefix.js +1 -1
  356. package/dist/components/layout/ResizablePanel.js +1 -1
  357. package/dist/components/layout/Space.js +1 -1
  358. package/dist/components/layout/Suffix.js +1 -1
  359. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  360. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  361. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  362. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  363. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  364. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  365. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  366. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  367. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  368. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  369. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  370. package/dist/components/navigation/Tabs/styled.js +1 -1
  371. package/dist/components/navigation/Tabs/types.js +1 -1
  372. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  373. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  374. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  375. package/dist/components/other/Calendar/Calendar.js +1 -1
  376. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  377. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  378. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  379. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  380. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  381. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  382. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  383. package/dist/components/other/Calendar/styled.js +1 -1
  384. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  385. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  386. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  387. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  388. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  389. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  390. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  391. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  392. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  393. package/dist/components/overlays/Dialog/context.js +1 -1
  394. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  395. package/dist/components/overlays/Modal/Modal.d.ts +2 -1
  396. package/dist/components/overlays/Modal/Modal.js +1 -1
  397. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  398. package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
  399. package/dist/components/overlays/Modal/Overlay.js +8 -2
  400. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  401. package/dist/components/overlays/Modal/Popover.js +4 -2
  402. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  403. package/dist/components/overlays/Modal/Tray.js +1 -1
  404. package/dist/components/overlays/Modal/Underlay.js +1 -1
  405. package/dist/components/overlays/Modal/types.d.ts +1 -0
  406. package/dist/components/overlays/Notifications/Notification.js +1 -1
  407. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  408. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  409. package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
  410. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  411. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  412. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  413. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  414. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  415. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  416. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  417. package/dist/components/overlays/Notifications/index.js +1 -1
  418. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  419. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  420. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  421. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  422. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  423. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  424. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  425. package/dist/components/overlays/Toast/index.js +1 -1
  426. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  427. package/dist/components/overlays/Toast/useToast.js +1 -1
  428. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  429. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  430. package/dist/components/overlays/Tooltip/TooltipTrigger.js +12 -2
  431. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  432. package/dist/components/overlays/Tooltip/context.js +1 -1
  433. package/dist/components/portal/Portal.js +1 -1
  434. package/dist/components/portal/PortalProvider.d.ts +2 -0
  435. package/dist/components/portal/PortalProvider.js +1 -1
  436. package/dist/components/portal/index.d.ts +1 -0
  437. package/dist/components/portal/usePortal.js +1 -1
  438. package/dist/components/shared/DraggableCollection.js +1 -1
  439. package/dist/components/shared/InvalidIcon.js +1 -1
  440. package/dist/components/shared/ValidIcon.js +1 -1
  441. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  442. package/dist/components/status/Spin/Cube.js +1 -1
  443. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  444. package/dist/components/status/Spin/Spin.js +1 -1
  445. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  446. package/dist/data/item-themes.js +1 -1
  447. package/dist/data/themes.js +1 -1
  448. package/dist/eslint-plugin/defaults.generated.js +1 -1
  449. package/dist/eslint-plugin/index.js +1 -1
  450. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  451. package/dist/i18n/I18nProvider.js +1 -1
  452. package/dist/i18n/createFormatter.js +1 -1
  453. package/dist/i18n/index.js +1 -1
  454. package/dist/i18n/instance.js +1 -1
  455. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  456. package/dist/i18n/locales/en-US/uikit.js +1 -1
  457. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  458. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  459. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  460. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  461. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  462. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  463. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  464. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  465. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  466. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  467. package/dist/i18n/locales.js +1 -1
  468. package/dist/i18n/useFormatter.js +1 -1
  469. package/dist/i18n/useI18n.js +1 -1
  470. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  471. package/dist/icons/AdjustmentsIcon.js +1 -1
  472. package/dist/icons/AiIcon.js +1 -1
  473. package/dist/icons/AreaChartIcon.js +1 -1
  474. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  475. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  476. package/dist/icons/BackwardIcon.js +1 -1
  477. package/dist/icons/BarChartIcon.js +1 -1
  478. package/dist/icons/BellFilledIcon.js +1 -1
  479. package/dist/icons/BellIcon.js +1 -1
  480. package/dist/icons/BooleanIcon.js +1 -1
  481. package/dist/icons/CalendarEditIcon.js +1 -1
  482. package/dist/icons/CalendarIcon.js +1 -1
  483. package/dist/icons/CaretDownIcon.js +1 -1
  484. package/dist/icons/CaretUpIcon.js +1 -1
  485. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  486. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  487. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  488. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  489. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  490. package/dist/icons/ChartBarLineIcon.js +1 -1
  491. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  492. package/dist/icons/ChartBarStackedIcon.js +1 -1
  493. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  494. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  495. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  496. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  497. package/dist/icons/ChartBubbleIcon.js +1 -1
  498. package/dist/icons/ChartDonut2Icon.js +1 -1
  499. package/dist/icons/ChartFunnelIcon.js +1 -1
  500. package/dist/icons/ChartHeatmapIcon.js +1 -1
  501. package/dist/icons/ChartKPIIcon.js +1 -1
  502. package/dist/icons/ChartPie2Icon.js +1 -1
  503. package/dist/icons/ChartScatterIcon.js +1 -1
  504. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  505. package/dist/icons/CheckCircleIcon.js +1 -1
  506. package/dist/icons/CheckIcon.js +1 -1
  507. package/dist/icons/CircleFilledIcon.js +1 -1
  508. package/dist/icons/ClearIcon.js +1 -1
  509. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  510. package/dist/icons/CloseCircleIcon.js +1 -1
  511. package/dist/icons/CloseIcon.js +1 -1
  512. package/dist/icons/CodeIcon.js +1 -1
  513. package/dist/icons/ColumnTotalIcon.js +1 -1
  514. package/dist/icons/CopyIcon.js +1 -1
  515. package/dist/icons/CountIcon.js +1 -1
  516. package/dist/icons/CubeIcon.js +1 -1
  517. package/dist/icons/CubePauseIcon.js +1 -1
  518. package/dist/icons/CubePlayIcon.js +1 -1
  519. package/dist/icons/CurrencyDollarIcon.js +1 -1
  520. package/dist/icons/DangerIcon.js +1 -1
  521. package/dist/icons/DashboardIcon.js +1 -1
  522. package/dist/icons/DatabaseIcon.js +1 -1
  523. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  524. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  525. package/dist/icons/DirectionIcon.js +1 -1
  526. package/dist/icons/DonutIcon.js +1 -1
  527. package/dist/icons/DownIcon.js +1 -1
  528. package/dist/icons/EditIcon.js +1 -1
  529. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  530. package/dist/icons/ExclamationCircleIcon.js +1 -1
  531. package/dist/icons/ExclamationIcon.js +1 -1
  532. package/dist/icons/EyeIcon.js +1 -1
  533. package/dist/icons/EyeInvisibleIcon.js +1 -1
  534. package/dist/icons/FilterIcon.js +1 -1
  535. package/dist/icons/FolderFilledIcon.js +1 -1
  536. package/dist/icons/FolderIcon.js +1 -1
  537. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  538. package/dist/icons/FolderOpenIcon.js +1 -1
  539. package/dist/icons/ForwardIcon.js +1 -1
  540. package/dist/icons/GripVerticalIcon.js +1 -1
  541. package/dist/icons/HierarchyIcon.js +1 -1
  542. package/dist/icons/HierarchyOpenIcon.js +1 -1
  543. package/dist/icons/Icon.js +1 -1
  544. package/dist/icons/InfoCircleIcon.js +1 -1
  545. package/dist/icons/InfoIcon.js +1 -1
  546. package/dist/icons/KeyIcon.js +1 -1
  547. package/dist/icons/LeftIcon.js +1 -1
  548. package/dist/icons/LineChartIcon.js +1 -1
  549. package/dist/icons/LoadingIcon.js +1 -1
  550. package/dist/icons/LockFilledIcon.js +1 -1
  551. package/dist/icons/LockIcon.js +1 -1
  552. package/dist/icons/MoreIcon.js +1 -1
  553. package/dist/icons/NotAllowedIcon.js +1 -1
  554. package/dist/icons/Number123Icon.js +1 -1
  555. package/dist/icons/NumberIcon.js +1 -1
  556. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  557. package/dist/icons/PauseCircleIcon.js +1 -1
  558. package/dist/icons/PauseIcon.js +1 -1
  559. package/dist/icons/PercentageIcon.js +1 -1
  560. package/dist/icons/PieChartIcon.js +1 -1
  561. package/dist/icons/PipetteIcon.js +1 -1
  562. package/dist/icons/PlayCircleIcon.js +1 -1
  563. package/dist/icons/PlayIcon.js +1 -1
  564. package/dist/icons/PlusIcon.js +1 -1
  565. package/dist/icons/ProgressBarIcon.js +1 -1
  566. package/dist/icons/ReloadIcon.js +1 -1
  567. package/dist/icons/ReportIcon.js +1 -1
  568. package/dist/icons/ReturnIcon.js +1 -1
  569. package/dist/icons/RightIcon.js +1 -1
  570. package/dist/icons/RowTotalsIcon.js +1 -1
  571. package/dist/icons/SchemeIcon.js +1 -1
  572. package/dist/icons/SearchIcon.js +1 -1
  573. package/dist/icons/SemanticQueryIcon.js +1 -1
  574. package/dist/icons/SettingsIcon.js +1 -1
  575. package/dist/icons/ShieldFilledIcon.js +1 -1
  576. package/dist/icons/ShieldIcon.js +1 -1
  577. package/dist/icons/SlashIcon.js +1 -1
  578. package/dist/icons/SparklesIcon.js +1 -1
  579. package/dist/icons/SqlIcon.js +1 -1
  580. package/dist/icons/StatsIcon.js +1 -1
  581. package/dist/icons/StopIcon.js +1 -1
  582. package/dist/icons/StringIcon.js +1 -1
  583. package/dist/icons/SubtotalsIcon.js +1 -1
  584. package/dist/icons/SwitchIcon.js +1 -1
  585. package/dist/icons/TableIcon.js +1 -1
  586. package/dist/icons/ThumbsDownIcon.js +1 -1
  587. package/dist/icons/ThumbsUpIcon.js +1 -1
  588. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  589. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  590. package/dist/icons/ThunderboltIcon.js +1 -1
  591. package/dist/icons/TimeIcon.js +1 -1
  592. package/dist/icons/TrashIcon.js +1 -1
  593. package/dist/icons/UnlockIcon.js +1 -1
  594. package/dist/icons/UpIcon.js +1 -1
  595. package/dist/icons/UserGroupIcon.js +1 -1
  596. package/dist/icons/UserIcon.js +1 -1
  597. package/dist/icons/UserLockIcon.js +1 -1
  598. package/dist/icons/ViewIcon.js +1 -1
  599. package/dist/icons/WarningFilledIcon.js +1 -1
  600. package/dist/icons/WarningIcon.js +1 -1
  601. package/dist/icons/wrap-icon.js +1 -1
  602. package/dist/index.d.ts +13 -4
  603. package/dist/index.js +4 -4
  604. package/dist/probe/canonicalize.js +1 -1
  605. package/dist/probe/css.js +1 -1
  606. package/dist/probe/index.js +1 -1
  607. package/dist/provider.js +1 -1
  608. package/dist/providers/TrackingProvider.js +1 -1
  609. package/dist/providers/navigationAdapter.default.js +1 -1
  610. package/dist/shared/form.d.ts +28 -6
  611. package/dist/shared/index.d.ts +1 -1
  612. package/dist/tokens/all-tokens.js +1 -1
  613. package/dist/tokens/base.js +1 -1
  614. package/dist/tokens/color-seed.js +1 -1
  615. package/dist/tokens/color-theme.js +1 -1
  616. package/dist/tokens/colors.js +1 -1
  617. package/dist/tokens/layout.js +1 -1
  618. package/dist/tokens/lazy-styles.js +1 -1
  619. package/dist/tokens/legacy-color.js +1 -1
  620. package/dist/tokens/palette-config.js +1 -1
  621. package/dist/tokens/palette.js +1 -1
  622. package/dist/tokens/resolve.js +1 -1
  623. package/dist/tokens/shadows.js +1 -1
  624. package/dist/tokens/sizes.js +1 -1
  625. package/dist/tokens/spacing.js +1 -1
  626. package/dist/tokens/typography.js +1 -1
  627. package/dist/utils/ResizeSensor.js +1 -1
  628. package/dist/utils/colors.js +1 -1
  629. package/dist/utils/dotize.js +1 -1
  630. package/dist/utils/is-dev-env.js +1 -1
  631. package/dist/utils/modules.js +1 -1
  632. package/dist/utils/promise.js +1 -1
  633. package/dist/utils/raf.js +1 -1
  634. package/dist/utils/random.js +1 -1
  635. package/dist/utils/range.js +1 -1
  636. package/dist/utils/react/RenderCache.js +1 -1
  637. package/dist/utils/react/Slots.js +1 -1
  638. package/dist/utils/react/chain.js +1 -1
  639. package/dist/utils/react/disabledProps.js +1 -1
  640. package/dist/utils/react/escapePropagation.js +39 -0
  641. package/dist/utils/react/escapePropagation.js.map +1 -0
  642. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  643. package/dist/utils/react/index.js +1 -1
  644. package/dist/utils/react/interactions.js +1 -1
  645. package/dist/utils/react/isTextOnly.js +1 -1
  646. package/dist/utils/react/mapProps.js +1 -1
  647. package/dist/utils/react/mergeProps.js +1 -1
  648. package/dist/utils/react/nullableValue.js +1 -1
  649. package/dist/utils/react/programmaticFocus.js +58 -0
  650. package/dist/utils/react/programmaticFocus.js.map +1 -0
  651. package/dist/utils/react/resolveIcon.js +1 -1
  652. package/dist/utils/react/sharedStore.js +1 -1
  653. package/dist/utils/react/useBufferedValue.js +1 -1
  654. package/dist/utils/react/useCombinedRefs.js +1 -1
  655. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  656. package/dist/utils/react/useEventBus.js +1 -1
  657. package/dist/utils/react/useId.js +1 -1
  658. package/dist/utils/react/useIsDarwin.js +1 -1
  659. package/dist/utils/react/useKeySymbols.js +1 -1
  660. package/dist/utils/react/useLayoutEffect.js +1 -1
  661. package/dist/utils/react/useLocalStorage.js +1 -1
  662. package/dist/utils/react/useMergeStyles.js +1 -1
  663. package/dist/utils/react/useOverlayEscapeGuard.js +41 -0
  664. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -0
  665. package/dist/utils/react/usePopoverSync.js +1 -1
  666. package/dist/utils/react/useQaProps.js +1 -1
  667. package/dist/utils/react/useScheme.js +1 -1
  668. package/dist/utils/react/useViewportSize.js +1 -1
  669. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  670. package/dist/utils/selection.js +1 -1
  671. package/dist/utils/styles.js +1 -1
  672. package/dist/utils/tree.js +1 -1
  673. package/dist/utils/warnings.js +1 -1
  674. package/dist/version.js +3 -3
  675. package/docs/CreateComponent.md +4 -0
  676. package/docs/FieldProperties.md +25 -13
  677. package/docs/Usage.md +17 -29
  678. package/docs/components/fields/FileInput.md +4 -0
  679. package/docs/components/form/Field.md +2 -2
  680. package/docs/components/form/Form.md +26 -2
  681. package/docs/components/form/FormInstance.md +5 -9
  682. package/docs/components/form/ModernForm.md +269 -0
  683. package/docs/modern-form-guide.md +269 -0
  684. package/docs/modern-form-migration.md +65 -0
  685. package/docs/modern-form-typecheck.md +35 -0
  686. package/package.json +12 -3
@@ -3,12 +3,48 @@ import { FormBaseProps } from "../../../shared/form.js";
3
3
  import "../../../shared/index.js";
4
4
  import { FieldTypes } from "./types.js";
5
5
  import { CubeFormData, CubeFormInstance } from "./use-form.js";
6
+ import { ModernFormProps } from "./ModernFormRoot.js";
6
7
  import { BaseProps, ContainerStyleProps, Styles } from "@tenphi/tasty";
7
8
  import * as react from "react";
8
- import { FormHTMLAttributes, ReactElement, Ref } from "react";
9
+ import { ContextType, FormHTMLAttributes, ReactElement, ReactNode, Ref } from "react";
10
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
9
11
 
10
12
  //#region src/components/form/Form/Form.d.ts
13
+ /**
14
+ * Public legacy context. Its value is the full legacy scope (presentation
15
+ * props, the instance, `submitError`, `idPrefix`) and is part of the exported
16
+ * contract: wrappers outside the kit read it and Radio/Checkbox groups mask it.
17
+ */
11
18
  declare const FormContext: react.Context<{}>;
19
+ /**
20
+ * Scope the inputs below to a new form context. Radio/Checkbox groups use it
21
+ * for their options: they see the group's validation state, but neither the
22
+ * surrounding form's presentation props nor its instance, so a nested `name`
23
+ * never registers as an independent field. Wrappers that used to override
24
+ * `FormContext` directly for the same purpose should render this instead — a
25
+ * bare `FormContext.Provider` no longer masks the presentation context.
26
+ */
27
+ declare function FormScopeMask({
28
+ value,
29
+ children
30
+ }: {
31
+ value: ContextType<typeof FormContext>;
32
+ children?: ReactNode;
33
+ }): react_jsx_runtime0.JSX.Element;
34
+ /** Separate overloads retain contextual callback typing for each backend. */
35
+ interface FormRootComponent {
36
+ <T extends FieldTypes = FieldTypes>(props: CubeFormProps<T> & {
37
+ ref?: Ref<HTMLFormElement>;
38
+ }): ReactElement;
39
+ <T extends FieldTypes = FieldTypes>(props: ModernFormProps<T> & {
40
+ ref?: Ref<HTMLFormElement>;
41
+ }): ReactElement;
42
+ }
43
+ /**
44
+ * Merge order: presentation context, then the legacy `FormContext`, then the
45
+ * props. Under a legacy root the two contexts carry the same presentation
46
+ * values, so the result is exactly `{ ...FormContext, ...props }` as before.
47
+ */
12
48
  declare function useFormProps(props: any): any;
13
49
  interface CubeFormProps<T extends FieldTypes = FieldTypes> extends FormBaseProps, BaseProps, ContainerStyleProps, Pick<FormHTMLAttributes<HTMLFormElement>, 'action' | 'autoComplete' | 'encType' | 'method' | 'target'> {
14
50
  /** Form name */
@@ -28,5 +64,5 @@ interface CubeFormProps<T extends FieldTypes = FieldTypes> extends FormBaseProps
28
64
  orientation?: 'vertical' | 'horizontal';
29
65
  }
30
66
  //#endregion
31
- export { CubeFormProps, FormContext, useFormProps };
67
+ export { CubeFormProps, FormContext, FormRootComponent, FormScopeMask, useFormProps };
32
68
  //# sourceMappingURL=Form.d.ts.map
@@ -1,9 +1,12 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { Provider, useProviderProps } from "../../../provider.js";
5
5
  import { useValidationProps } from "../validation/use-validation-props.js";
6
6
  import { timeout } from "../../../utils/promise.js";
7
+ import { isModernFormController } from "./backend.js";
8
+ import { ModernControllerContext } from "./modern/context.js";
9
+ import { _ModernFormRoot } from "./ModernFormRoot.js";
7
10
  import { useForm } from "./use-form.js";
8
11
  import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
9
12
  import { createContext, forwardRef, useContext, useRef } from "react";
@@ -11,7 +14,34 @@ import { jsx } from "react/jsx-runtime";
11
14
  import { useObjectRef } from "@react-aria/utils";
12
15
 
13
16
  //#region src/components/form/Form/Form.tsx
17
+ /**
18
+ * Public legacy context. Its value is the full legacy scope (presentation
19
+ * props, the instance, `submitError`, `idPrefix`) and is part of the exported
20
+ * contract: wrappers outside the kit read it and Radio/Checkbox groups mask it.
21
+ */
14
22
  const FormContext = createContext({});
23
+ const EMPTY_PRESENTATION = {};
24
+ const FormPresentationContext = createContext(EMPTY_PRESENTATION);
25
+ /**
26
+ * Scope the inputs below to a new form context. Radio/Checkbox groups use it
27
+ * for their options: they see the group's validation state, but neither the
28
+ * surrounding form's presentation props nor its instance, so a nested `name`
29
+ * never registers as an independent field. Wrappers that used to override
30
+ * `FormContext` directly for the same purpose should render this instead — a
31
+ * bare `FormContext.Provider` no longer masks the presentation context.
32
+ */
33
+ function FormScopeMask({ value, children }) {
34
+ return /* @__PURE__ */ jsx(ModernControllerContext.Provider, {
35
+ value: null,
36
+ children: /* @__PURE__ */ jsx(FormPresentationContext.Provider, {
37
+ value: EMPTY_PRESENTATION,
38
+ children: /* @__PURE__ */ jsx(FormContext.Provider, {
39
+ value,
40
+ children
41
+ })
42
+ })
43
+ });
44
+ }
15
45
  const FormElement = tasty({
16
46
  as: "form",
17
47
  qa: "Form",
@@ -32,9 +62,19 @@ const FormElement = tasty({
32
62
  "$label-width": "25x"
33
63
  }
34
64
  });
65
+ /**
66
+ * Merge order: presentation context, then the legacy `FormContext`, then the
67
+ * props. Under a legacy root the two contexts carry the same presentation
68
+ * values, so the result is exactly `{ ...FormContext, ...props }` as before.
69
+ */
35
70
  function useFormProps(props) {
71
+ const presentation = useContext(FormPresentationContext);
72
+ const ctx = useContext(FormContext);
73
+ const modern = useContext(ModernControllerContext);
36
74
  return {
37
- ...useContext(FormContext),
75
+ ...presentation,
76
+ ...modern ? { form: modern } : {},
77
+ ...ctx,
38
78
  ...props
39
79
  };
40
80
  }
@@ -45,7 +85,11 @@ const formPropNames = new Set([
45
85
  "method",
46
86
  "target"
47
87
  ]);
48
- function Form(props, ref) {
88
+ /**
89
+ * The legacy backend's root: the current engine under an internal name. Its
90
+ * role is compatibility; see `legacy-contract/README.md` for what is frozen.
91
+ */
92
+ function LegacyFormRoot(props, ref) {
49
93
  props = useValidationProps(useProviderProps(props));
50
94
  let { qa, name, children, labelPosition, orientation, necessityIndicator, isDisabled, isReadOnly, isInvalid, isValid, labelStyles, validateTrigger, showValid, defaultValues, onValuesChange, requiredMark = true, form, labelWidth, onSubmit, onSubmitFailed, ...otherProps } = props;
51
95
  const defaultValuesRef = useRef(defaultValues);
@@ -93,7 +137,7 @@ function Form(props, ref) {
93
137
  let styles = extractStyles(otherProps, CONTAINER_STYLES);
94
138
  if (labelWidth) styles["$label-width"] = labelWidth;
95
139
  let domRef = useObjectRef(ref);
96
- let ctx = {
140
+ const presentation = {
97
141
  labelPosition,
98
142
  labelStyles,
99
143
  orientation,
@@ -101,10 +145,13 @@ function Form(props, ref) {
101
145
  validateTrigger,
102
146
  requiredMark,
103
147
  showValid,
104
- form,
105
- submitError: form.submitError,
106
148
  idPrefix: name
107
149
  };
150
+ let ctx = {
151
+ ...presentation,
152
+ form,
153
+ submitError: form.submitError
154
+ };
108
155
  if (firstRunRef.current && form) {
109
156
  if (defaultValues) {
110
157
  form.setInitialFieldsValue(defaultValues);
@@ -128,19 +175,42 @@ function Form(props, ref) {
128
175
  horizontal: isHorizontal
129
176
  },
130
177
  onSubmit: onSubmitCallback,
131
- children: /* @__PURE__ */ jsx(FormContext.Provider, {
132
- value: ctx,
133
- children: /* @__PURE__ */ jsx(Provider, {
134
- insideForm: true,
135
- isDisabled,
136
- isReadOnly,
137
- isInvalid,
138
- isValid,
139
- children
178
+ children: /* @__PURE__ */ jsx(ModernControllerContext.Provider, {
179
+ value: null,
180
+ children: /* @__PURE__ */ jsx(FormPresentationContext.Provider, {
181
+ value: presentation,
182
+ children: /* @__PURE__ */ jsx(FormContext.Provider, {
183
+ value: ctx,
184
+ children: /* @__PURE__ */ jsx(Provider, {
185
+ insideForm: true,
186
+ isDisabled,
187
+ isReadOnly,
188
+ isInvalid,
189
+ isValid,
190
+ children
191
+ })
192
+ })
140
193
  })
141
194
  })
142
195
  });
143
196
  }
197
+ const _LegacyFormRoot = forwardRef(LegacyFormRoot);
198
+ _LegacyFormRoot.displayName = "LegacyFormRoot";
199
+ /**
200
+ * The `<Form>` facade. It chooses the root by the brand of the `form` prop
201
+ * before any backend hook runs. Without an explicit modern controller it is
202
+ * the legacy root, so existing `<Form>` and `Form.useForm()` keep their behavior.
203
+ */
204
+ function Form(props, ref) {
205
+ if (isModernFormController(props.form)) return /* @__PURE__ */ jsx(_ModernFormRoot, {
206
+ ...props,
207
+ ref
208
+ });
209
+ return /* @__PURE__ */ jsx(_LegacyFormRoot, {
210
+ ...props,
211
+ ref
212
+ });
213
+ }
144
214
  /**
145
215
  * Forms allow users to enter data that can be submitted while providing alignment and styling for form fields.
146
216
  */
@@ -148,5 +218,5 @@ const _Form = forwardRef(Form);
148
218
  _Form.displayName = "Form";
149
219
 
150
220
  //#endregion
151
- export { FormContext, _Form, useFormProps };
221
+ export { FormContext, FormElement, FormPresentationContext, FormScopeMask, _Form, formPropNames, useFormProps };
152
222
  //# sourceMappingURL=Form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","names":[],"sources":["../../../../src/components/form/Form/Form.tsx"],"sourcesContent":["import { useObjectRef } from '@react-aria/utils';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n createContext,\n FormHTMLAttributes,\n forwardRef,\n ReactElement,\n ReactNode,\n Ref,\n useContext,\n useRef,\n} from 'react';\n\nimport { Provider, useProviderProps } from '../../../provider';\nimport { FormBaseProps } from '../../../shared/index';\nimport { timeout } from '../../../utils/promise';\nimport { useCombinedRefs } from '../../../utils/react/index';\nimport { extractStyles } from '../../../utils/styles';\nimport { useValidationProps } from '../validation/index';\n\nimport { FieldTypes } from './types';\nimport { CubeFormData, CubeFormInstance, useForm } from './use-form';\n\nexport const FormContext = createContext({});\n\nconst FormElement = tasty({\n as: 'form',\n qa: 'Form',\n styles: {\n display: {\n '': 'block',\n horizontal: 'flex',\n },\n flow: {\n '': 'column',\n horizontal: 'row',\n },\n placeItems: {\n '': 'initial',\n horizontal: 'center',\n },\n gap: '2x',\n '$label-width': '25x',\n },\n});\n\nexport function useFormProps(props) {\n const ctx = useContext(FormContext);\n\n return { ...ctx, ...props };\n}\n\nconst formPropNames = new Set([\n 'action',\n 'autoComplete',\n 'encType',\n 'method',\n 'target',\n]);\n\nexport interface CubeFormProps<T extends FieldTypes = FieldTypes>\n extends FormBaseProps,\n BaseProps,\n ContainerStyleProps,\n Pick<\n FormHTMLAttributes<HTMLFormElement>,\n 'action' | 'autoComplete' | 'encType' | 'method' | 'target'\n > {\n /** Form name */\n name?: string;\n /** Default field values */\n defaultValues?: Partial<T>;\n /** Trigger when any value of the Field is changed */\n onValuesChange?: CubeFormInstance<T>['onValuesChange'];\n /** Trigger on form submit and success */\n onSubmit?: CubeFormInstance<T>['onSubmit'];\n /** Trigger on form submit and failed */\n onSubmitFailed?: (any?) => void | Promise<any>;\n /** Set form instance created by useForm */\n form?: CubeFormInstance<T, CubeFormData<T>>;\n /** The size of the side area with labels. Only for `labelPosition=\"side\"` */\n labelWidth?: Styles['width'];\n orientation?: 'vertical' | 'horizontal';\n}\n\nfunction Form<T extends FieldTypes>(\n props: CubeFormProps<T>,\n ref: Ref<HTMLFormElement>,\n) {\n props = useValidationProps(useProviderProps(props));\n let {\n qa,\n name,\n children,\n labelPosition,\n orientation,\n necessityIndicator,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n labelStyles,\n validateTrigger,\n showValid,\n defaultValues,\n onValuesChange,\n requiredMark = true,\n form,\n labelWidth,\n onSubmit,\n onSubmitFailed,\n ...otherProps\n } = props;\n const defaultValuesRef = useRef(defaultValues);\n const firstRunRef = useRef(true);\n const isHorizontal = orientation === 'horizontal';\n\n if (!orientation) {\n orientation = 'vertical';\n }\n\n if (!labelPosition) {\n labelPosition = isHorizontal ? 'side' : 'top';\n }\n\n if (!labelWidth) {\n labelWidth = isHorizontal ? 'auto' : undefined;\n }\n\n ref = useCombinedRefs(ref);\n\n let onSubmitCallback;\n\n if ((onSubmit || onSubmitFailed) && !otherProps.action) {\n onSubmitCallback = async (e) => {\n if (e && e?.preventDefault) {\n e && e?.preventDefault && e?.preventDefault();\n e && e?.stopPropagation && e?.stopPropagation();\n\n if (e.nativeEvent) {\n const evt = e.nativeEvent;\n\n if (\n evt.submitter &&\n evt.submitter.getAttribute('type') !== 'submit'\n ) {\n return;\n }\n }\n }\n\n if (!form || form.isSubmitting) return;\n\n form.submitError = null;\n form.setSubmitting(true);\n\n try {\n try {\n await form.validateFields();\n } catch (e) {\n form?.setSubmitting(false);\n\n return;\n }\n\n await timeout();\n await onSubmit?.(form.getFormData());\n } catch (e) {\n await timeout();\n\n // errors are shown\n form.submitError = e as ReactNode;\n // transfer errors to the callback\n onSubmitFailed?.(e);\n\n if (e instanceof Error) {\n throw e;\n }\n } finally {\n form?.setSubmitting(false);\n }\n\n // output data from form directly\n // onSubmit(Object.fromEntries(new FormData(e.target).entries()));\n };\n }\n\n [form] = useForm<T>(form, ref && ref.current, {\n onSubmit: onSubmitCallback,\n onValuesChange,\n });\n\n let styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n if (labelWidth) {\n styles['$label-width'] = labelWidth;\n }\n\n let domRef = useObjectRef(ref);\n\n let ctx = {\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n form,\n submitError: form.submitError,\n idPrefix: name,\n };\n\n if (firstRunRef.current && form) {\n if (defaultValues) {\n form.setInitialFieldsValue(defaultValues);\n form.resetFields(undefined, true);\n firstRunRef.current = false;\n }\n }\n\n if (defaultValuesRef.current !== defaultValues) {\n form?.setInitialFieldsValue(defaultValues ?? {});\n defaultValuesRef.current = defaultValues;\n }\n\n return (\n <FormElement\n {...filterBaseProps(otherProps, { propNames: formPropNames })}\n ref={domRef}\n noValidate\n qa={qa}\n styles={styles}\n mods={{\n 'has-sider': labelPosition === 'side',\n 'has-split': labelPosition === 'split',\n horizontal: isHorizontal,\n }}\n onSubmit={onSubmitCallback}\n >\n <FormContext.Provider value={ctx}>\n <Provider\n insideForm={true}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n >\n {children}\n </Provider>\n </FormContext.Provider>\n </FormElement>\n );\n}\n\n/**\n * Forms allow users to enter data that can be submitted while providing alignment and styling for form fields.\n */\nconst _Form = forwardRef(Form) as unknown as <T extends FieldTypes>(\n props: CubeFormProps<T> & { ref?: Ref<HTMLFormElement> },\n) => ReactElement;\n\n(_Form as any).displayName = 'Form';\n\nexport { _Form as Form };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","names":["ModernFormRoot"],"sources":["../../../../src/components/form/Form/Form.tsx"],"sourcesContent":["import { useObjectRef } from '@react-aria/utils';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ContextType,\n createContext,\n FormHTMLAttributes,\n forwardRef,\n ReactElement,\n ReactNode,\n Ref,\n useContext,\n useRef,\n} from 'react';\n\nimport { Provider, useProviderProps } from '../../../provider';\nimport { FormBaseProps } from '../../../shared/index';\nimport { timeout } from '../../../utils/promise';\nimport { useCombinedRefs } from '../../../utils/react/index';\nimport { extractStyles } from '../../../utils/styles';\nimport { useValidationProps } from '../validation/index';\n\nimport { isModernFormController } from './backend';\nimport { ModernControllerContext } from './modern/context';\nimport { ModernFormRoot } from './ModernFormRoot';\nimport { FieldTypes } from './types';\nimport { CubeFormData, CubeFormInstance, useForm } from './use-form';\n\nimport type { ModernFormProps } from './ModernFormRoot';\n\n/**\n * Public legacy context. Its value is the full legacy scope (presentation\n * props, the instance, `submitError`, `idPrefix`) and is part of the exported\n * contract: wrappers outside the kit read it and Radio/Checkbox groups mask it.\n */\nexport const FormContext = createContext({});\n\n/**\n * Presentation and configuration that any root — legacy or modern — hands to\n * the fields below it. Backend-neutral by construction: no instance in here.\n */\nexport interface FormPresentationContextValue {\n labelPosition?: FormBaseProps['labelPosition'];\n labelStyles?: FormBaseProps['labelStyles'];\n orientation?: 'vertical' | 'horizontal';\n necessityIndicator?: FormBaseProps['necessityIndicator'];\n validateTrigger?: FormBaseProps['validateTrigger'];\n requiredMark?: boolean;\n showValid?: boolean;\n idPrefix?: string;\n}\n\nconst EMPTY_PRESENTATION: FormPresentationContextValue = {};\n\nexport const FormPresentationContext =\n createContext<FormPresentationContextValue>(EMPTY_PRESENTATION);\n\n/**\n * Scope the inputs below to a new form context. Radio/Checkbox groups use it\n * for their options: they see the group's validation state, but neither the\n * surrounding form's presentation props nor its instance, so a nested `name`\n * never registers as an independent field. Wrappers that used to override\n * `FormContext` directly for the same purpose should render this instead — a\n * bare `FormContext.Provider` no longer masks the presentation context.\n */\nexport function FormScopeMask({\n value,\n children,\n}: {\n value: ContextType<typeof FormContext>;\n children?: ReactNode;\n}) {\n return (\n <ModernControllerContext.Provider value={null}>\n <FormPresentationContext.Provider value={EMPTY_PRESENTATION}>\n <FormContext.Provider value={value}>{children}</FormContext.Provider>\n </FormPresentationContext.Provider>\n </ModernControllerContext.Provider>\n );\n}\n\n/** Separate overloads retain contextual callback typing for each backend. */\nexport interface FormRootComponent {\n <T extends FieldTypes = FieldTypes>(\n props: CubeFormProps<T> & { ref?: Ref<HTMLFormElement> },\n ): ReactElement;\n <T extends FieldTypes = FieldTypes>(\n props: ModernFormProps<T> & { ref?: Ref<HTMLFormElement> },\n ): ReactElement;\n}\n\nexport const FormElement = tasty({\n as: 'form',\n qa: 'Form',\n styles: {\n display: {\n '': 'block',\n horizontal: 'flex',\n },\n flow: {\n '': 'column',\n horizontal: 'row',\n },\n placeItems: {\n '': 'initial',\n horizontal: 'center',\n },\n gap: '2x',\n '$label-width': '25x',\n },\n});\n\n/**\n * Merge order: presentation context, then the legacy `FormContext`, then the\n * props. Under a legacy root the two contexts carry the same presentation\n * values, so the result is exactly `{ ...FormContext, ...props }` as before.\n */\nexport function useFormProps(props) {\n const presentation = useContext(FormPresentationContext);\n const ctx = useContext(FormContext);\n const modern = useContext(ModernControllerContext);\n\n return {\n ...presentation,\n ...(modern ? { form: modern } : {}),\n ...ctx,\n ...props,\n };\n}\n\nexport const formPropNames = new Set([\n 'action',\n 'autoComplete',\n 'encType',\n 'method',\n 'target',\n]);\n\nexport interface CubeFormProps<T extends FieldTypes = FieldTypes>\n extends FormBaseProps,\n BaseProps,\n ContainerStyleProps,\n Pick<\n FormHTMLAttributes<HTMLFormElement>,\n 'action' | 'autoComplete' | 'encType' | 'method' | 'target'\n > {\n /** Form name */\n name?: string;\n /** Default field values */\n defaultValues?: Partial<T>;\n /** Trigger when any value of the Field is changed */\n onValuesChange?: CubeFormInstance<T>['onValuesChange'];\n /** Trigger on form submit and success */\n onSubmit?: CubeFormInstance<T>['onSubmit'];\n /** Trigger on form submit and failed */\n onSubmitFailed?: (any?) => void | Promise<any>;\n /** Set form instance created by useForm */\n form?: CubeFormInstance<T, CubeFormData<T>>;\n /** The size of the side area with labels. Only for `labelPosition=\"side\"` */\n labelWidth?: Styles['width'];\n orientation?: 'vertical' | 'horizontal';\n}\n\n/**\n * The legacy backend's root: the current engine under an internal name. Its\n * role is compatibility; see `legacy-contract/README.md` for what is frozen.\n */\nfunction LegacyFormRoot<T extends FieldTypes>(\n props: CubeFormProps<T>,\n ref: Ref<HTMLFormElement>,\n) {\n props = useValidationProps(useProviderProps(props));\n let {\n qa,\n name,\n children,\n labelPosition,\n orientation,\n necessityIndicator,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n labelStyles,\n validateTrigger,\n showValid,\n defaultValues,\n onValuesChange,\n requiredMark = true,\n form,\n labelWidth,\n onSubmit,\n onSubmitFailed,\n ...otherProps\n } = props;\n const defaultValuesRef = useRef(defaultValues);\n const firstRunRef = useRef(true);\n const isHorizontal = orientation === 'horizontal';\n\n if (!orientation) {\n orientation = 'vertical';\n }\n\n if (!labelPosition) {\n labelPosition = isHorizontal ? 'side' : 'top';\n }\n\n if (!labelWidth) {\n labelWidth = isHorizontal ? 'auto' : undefined;\n }\n\n ref = useCombinedRefs(ref);\n\n let onSubmitCallback;\n\n if ((onSubmit || onSubmitFailed) && !otherProps.action) {\n onSubmitCallback = async (e) => {\n if (e && e?.preventDefault) {\n e && e?.preventDefault && e?.preventDefault();\n e && e?.stopPropagation && e?.stopPropagation();\n\n if (e.nativeEvent) {\n const evt = e.nativeEvent;\n\n if (\n evt.submitter &&\n evt.submitter.getAttribute('type') !== 'submit'\n ) {\n return;\n }\n }\n }\n\n if (!form || form.isSubmitting) return;\n\n form.submitError = null;\n form.setSubmitting(true);\n\n try {\n try {\n await form.validateFields();\n } catch (e) {\n form?.setSubmitting(false);\n\n return;\n }\n\n await timeout();\n await onSubmit?.(form.getFormData());\n } catch (e) {\n await timeout();\n\n // errors are shown\n form.submitError = e as ReactNode;\n // transfer errors to the callback\n onSubmitFailed?.(e);\n\n if (e instanceof Error) {\n throw e;\n }\n } finally {\n form?.setSubmitting(false);\n }\n\n // output data from form directly\n // onSubmit(Object.fromEntries(new FormData(e.target).entries()));\n };\n }\n\n [form] = useForm<T>(form, ref && ref.current, {\n onSubmit: onSubmitCallback,\n onValuesChange,\n });\n\n let styles = extractStyles(otherProps, CONTAINER_STYLES);\n\n if (labelWidth) {\n styles['$label-width'] = labelWidth;\n }\n\n let domRef = useObjectRef(ref);\n\n const presentation: FormPresentationContextValue = {\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n idPrefix: name,\n };\n\n let ctx = {\n ...presentation,\n form,\n submitError: form.submitError,\n };\n\n if (firstRunRef.current && form) {\n if (defaultValues) {\n form.setInitialFieldsValue(defaultValues);\n form.resetFields(undefined, true);\n firstRunRef.current = false;\n }\n }\n\n if (defaultValuesRef.current !== defaultValues) {\n form?.setInitialFieldsValue(defaultValues ?? {});\n defaultValuesRef.current = defaultValues;\n }\n\n return (\n <FormElement\n {...filterBaseProps(otherProps, { propNames: formPropNames })}\n ref={domRef}\n noValidate\n qa={qa}\n styles={styles}\n mods={{\n 'has-sider': labelPosition === 'side',\n 'has-split': labelPosition === 'split',\n horizontal: isHorizontal,\n }}\n onSubmit={onSubmitCallback}\n >\n <ModernControllerContext.Provider value={null}>\n <FormPresentationContext.Provider value={presentation}>\n <FormContext.Provider value={ctx}>\n <Provider\n insideForm={true}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n >\n {children}\n </Provider>\n </FormContext.Provider>\n </FormPresentationContext.Provider>\n </ModernControllerContext.Provider>\n </FormElement>\n );\n}\n\nconst _LegacyFormRoot = forwardRef(LegacyFormRoot) as unknown as <\n T extends FieldTypes,\n>(\n props: CubeFormProps<T> & { ref?: Ref<HTMLFormElement> },\n) => ReactElement;\n\n(_LegacyFormRoot as any).displayName = 'LegacyFormRoot';\n\n/**\n * The `<Form>` facade. It chooses the root by the brand of the `form` prop\n * before any backend hook runs. Without an explicit modern controller it is\n * the legacy root, so existing `<Form>` and `Form.useForm()` keep their behavior.\n */\nfunction Form<T extends FieldTypes>(\n props: CubeFormProps<T> | ModernFormProps<T>,\n ref: Ref<HTMLFormElement>,\n) {\n if (isModernFormController(props.form)) {\n return <ModernFormRoot {...(props as ModernFormProps<T>)} ref={ref} />;\n }\n\n return <_LegacyFormRoot {...(props as CubeFormProps<T>)} ref={ref} />;\n}\n\n/**\n * Forms allow users to enter data that can be submitted while providing alignment and styling for form fields.\n */\nconst _Form = forwardRef(Form) as unknown as FormRootComponent;\n\n(_Form as any).displayName = 'Form';\n\nexport { _Form as Form, _LegacyFormRoot as LegacyFormRoot };\n"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+
2
+ import { FormCallbacks } from "./modern/types.js";
3
+ import { FormController } from "./modern/controller.js";
4
+ import { CubeFormProps } from "./Form.js";
5
+ import { FormEvent, ReactElement, ReactNode, Ref } from "react";
6
+
7
+ //#region src/components/form/Form/ModernFormRoot.d.ts
8
+ /** Modern root owns callback bindings; subscriptions stay in descendants. */
9
+ interface ModernFormProps<T extends object = Record<string, unknown>> extends Omit<CubeFormProps<T>, 'form' | 'defaultValues' | 'onSubmit' | 'onSubmitFailed' | 'onValuesChange'> {
10
+ form: FormController<T>;
11
+ defaultValues?: never;
12
+ /** Runs before a controller reset; preventDefault cancels the reset, including nested controls. */
13
+ onReset?: (event: FormEvent<HTMLFormElement>) => void;
14
+ /** Reserved for controller reset interception. Use onReset to cancel. */
15
+ onResetCapture?: never;
16
+ onSubmit?: FormCallbacks<T, ReactNode>['onSubmit'];
17
+ onSubmitFailed?: FormCallbacks<T, ReactNode>['onSubmitFailed'];
18
+ onValuesChange?: FormCallbacks<T, ReactNode>['onValuesChange'];
19
+ /** Payload selection for native submission, including Enter and external buttons. */
20
+ submitValues?: 'active' | 'all';
21
+ }
22
+ //#endregion
23
+ export { ModernFormProps };
24
+ //# sourceMappingURL=ModernFormRoot.d.ts.map
@@ -0,0 +1,115 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
+ import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
4
+ import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
5
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
6
+ import { Provider, useProviderProps } from "../../../provider.js";
7
+ import { useValidationProps } from "../validation/use-validation-props.js";
8
+ import { ModernControllerContext } from "./modern/context.js";
9
+ import { getControllerInternals } from "./modern/controller.js";
10
+ import { FormContext, FormElement, FormPresentationContext, formPropNames } from "./Form.js";
11
+ import { CONTAINER_STYLES, filterBaseProps } from "@tenphi/tasty";
12
+ import { forwardRef, useMemo, useRef } from "react";
13
+ import { jsx } from "react/jsx-runtime";
14
+
15
+ //#region src/components/form/Form/ModernFormRoot.tsx
16
+ const EMPTY_LEGACY_CONTEXT = {};
17
+ function ModernFormRoot(props, ref) {
18
+ const { form, qa, name, children, orientation = "vertical", labelPosition: authoredLabelPosition, labelWidth: authoredLabelWidth, labelStyles, necessityIndicator, validateTrigger, requiredMark = true, showValid, isDisabled, isReadOnly, isInvalid, isValid, defaultValues, onSubmit, onSubmitFailed, onValuesChange, submitValues = "active", ...otherProps } = useValidationProps(useProviderProps(props));
19
+ const labelPosition = authoredLabelPosition ?? (orientation === "horizontal" ? "side" : "top");
20
+ const labelWidth = authoredLabelWidth ?? (orientation === "horizontal" ? "auto" : void 0);
21
+ const internals = getControllerInternals(form, "<Form>");
22
+ const { store } = internals;
23
+ const rootRef = useRef(null);
24
+ const mergedRef = useMemo(() => mergeRefs(ref, rootRef), [ref]);
25
+ useLayoutEffect$1(() => internals.bindRootElement(rootRef.current), [internals]);
26
+ if (defaultValues !== void 0) throw new Error("A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.");
27
+ const binding = useRef(void 0);
28
+ useLayoutEffect$1(() => {
29
+ const token = store.bindCallbacks({});
30
+ binding.current = token;
31
+ return () => {
32
+ token.release();
33
+ if (binding.current === token) binding.current = void 0;
34
+ };
35
+ }, [store]);
36
+ useLayoutEffect$1(() => {
37
+ binding.current?.update({
38
+ ...onSubmit === void 0 ? {} : { onSubmit },
39
+ ...onSubmitFailed === void 0 ? {} : { onSubmitFailed },
40
+ ...onValuesChange === void 0 ? {} : { onValuesChange }
41
+ });
42
+ });
43
+ const handleSubmit = useEvent((event) => {
44
+ event.preventDefault();
45
+ event.stopPropagation();
46
+ form.submit({ include: submitValues });
47
+ });
48
+ const handleReset = useEvent((event) => {
49
+ event.stopPropagation();
50
+ otherProps.onReset?.(event);
51
+ if (!event.defaultPrevented) {
52
+ event.preventDefault();
53
+ form.reset();
54
+ }
55
+ });
56
+ const presentation = useMemo(() => ({
57
+ labelPosition,
58
+ labelStyles,
59
+ orientation,
60
+ necessityIndicator,
61
+ validateTrigger,
62
+ requiredMark,
63
+ showValid,
64
+ idPrefix: name
65
+ }), [
66
+ labelPosition,
67
+ labelStyles,
68
+ orientation,
69
+ necessityIndicator,
70
+ validateTrigger,
71
+ requiredMark,
72
+ showValid,
73
+ name
74
+ ]);
75
+ const styles = extractStyles(otherProps, CONTAINER_STYLES);
76
+ if (labelWidth) styles["$label-width"] = labelWidth;
77
+ return /* @__PURE__ */ jsx(FormElement, {
78
+ ...filterBaseProps(otherProps, { propNames: formPropNames }),
79
+ ref: mergedRef,
80
+ qa,
81
+ noValidate: true,
82
+ styles,
83
+ mods: {
84
+ "has-sider": labelPosition === "side",
85
+ "has-split": labelPosition === "split",
86
+ horizontal: orientation === "horizontal"
87
+ },
88
+ onSubmit: otherProps.action == null ? handleSubmit : void 0,
89
+ onReset: otherProps.action == null ? void 0 : otherProps.onReset,
90
+ onResetCapture: otherProps.action == null ? handleReset : void 0,
91
+ children: /* @__PURE__ */ jsx(FormContext.Provider, {
92
+ value: EMPTY_LEGACY_CONTEXT,
93
+ children: /* @__PURE__ */ jsx(ModernControllerContext.Provider, {
94
+ value: form,
95
+ children: /* @__PURE__ */ jsx(FormPresentationContext.Provider, {
96
+ value: presentation,
97
+ children: /* @__PURE__ */ jsx(Provider, {
98
+ insideForm: true,
99
+ isDisabled,
100
+ isReadOnly,
101
+ isInvalid,
102
+ isValid,
103
+ children
104
+ })
105
+ })
106
+ })
107
+ })
108
+ });
109
+ }
110
+ const _ModernFormRoot = forwardRef(ModernFormRoot);
111
+ _ModernFormRoot.displayName = "ModernFormRoot";
112
+
113
+ //#endregion
114
+ export { _ModernFormRoot };
115
+ //# 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 { mergeRefs } from '../../../utils/react/useCombinedRefs';\nimport { useLayoutEffect } from '../../../utils/react/useLayoutEffect';\nimport { extractStyles } from '../../../utils/styles';\nimport { useValidationProps } from '../validation/use-validation-props';\n\nimport {\n FormContext,\n FormElement,\n FormPresentationContext,\n formPropNames,\n} from './Form';\nimport { ModernControllerContext } from './modern/context';\nimport { getControllerInternals } from './modern/controller';\n\nimport type { FormEvent, ReactElement, ReactNode, Ref } from 'react';\nimport type { CubeFormProps, FormPresentationContextValue } from './Form';\nimport type { FormController } from './modern/controller';\nimport type { CallbackBinding, FormCallbacks } from './modern/types';\n\n/** Modern root owns callback bindings; subscriptions stay in descendants. */\nexport interface ModernFormProps<T extends object = Record<string, unknown>>\n extends Omit<\n CubeFormProps<T>,\n 'form' | 'defaultValues' | 'onSubmit' | 'onSubmitFailed' | 'onValuesChange'\n > {\n form: FormController<T>;\n defaultValues?: never;\n /** Runs before a controller reset; preventDefault cancels the reset, including nested controls. */\n onReset?: (event: FormEvent<HTMLFormElement>) => void;\n /** Reserved for controller reset interception. Use onReset to cancel. */\n onResetCapture?: never;\n onSubmit?: FormCallbacks<T, ReactNode>['onSubmit'];\n onSubmitFailed?: FormCallbacks<T, ReactNode>['onSubmitFailed'];\n onValuesChange?: FormCallbacks<T, ReactNode>['onValuesChange'];\n /** Payload selection for native submission, including Enter and external buttons. */\n submitValues?: 'active' | 'all';\n}\n\nconst EMPTY_LEGACY_CONTEXT = {};\n\nfunction ModernFormRoot<T extends object>(\n props: ModernFormProps<T>,\n ref: Ref<HTMLFormElement>,\n): ReactElement {\n const resolved = useValidationProps(useProviderProps(props));\n const {\n form,\n qa,\n name,\n children,\n orientation = 'vertical',\n labelPosition: authoredLabelPosition,\n labelWidth: authoredLabelWidth,\n labelStyles,\n necessityIndicator,\n validateTrigger,\n requiredMark = true,\n showValid,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n defaultValues,\n onSubmit,\n onSubmitFailed,\n onValuesChange,\n submitValues = 'active',\n ...otherProps\n } = resolved;\n const labelPosition =\n authoredLabelPosition ?? (orientation === 'horizontal' ? 'side' : 'top');\n const labelWidth =\n authoredLabelWidth ?? (orientation === 'horizontal' ? 'auto' : undefined);\n const internals = getControllerInternals(form, '<Form>');\n const { store } = internals;\n const rootRef = useRef<HTMLFormElement>(null);\n const mergedRef = useMemo(() => mergeRefs(ref, rootRef), [ref]);\n useLayoutEffect(\n () => internals.bindRootElement(rootRef.current),\n [internals],\n );\n if (defaultValues !== undefined) {\n throw new Error(\n 'A modern <Form> does not accept defaultValues. Seed Form.useController() or use an explicit defaults command.',\n );\n }\n const binding = useRef<CallbackBinding<T, ReactNode> | undefined>(undefined);\n useLayoutEffect(() => {\n const token = store.bindCallbacks({});\n binding.current = token;\n return () => {\n token.release();\n if (binding.current === token) binding.current = undefined;\n };\n }, [store]);\n useLayoutEffect(() => {\n binding.current?.update({\n ...(onSubmit === undefined ? {} : { onSubmit }),\n ...(onSubmitFailed === undefined ? {} : { onSubmitFailed }),\n ...(onValuesChange === undefined ? {} : { onValuesChange }),\n });\n });\n const handleSubmit = useEvent((event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n event.stopPropagation();\n void form.submit({ include: submitValues });\n });\n const handleReset = useEvent((event: FormEvent<HTMLFormElement>) => {\n // React Aria's native reset listeners do not honor preventDefault. Handle\n // controller resets in capture, before they can write mount-time defaults.\n event.stopPropagation();\n otherProps.onReset?.(event);\n if (!event.defaultPrevented) {\n event.preventDefault();\n form.reset();\n }\n });\n const presentation = useMemo<FormPresentationContextValue>(\n () => ({\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n idPrefix: name,\n }),\n [\n labelPosition,\n labelStyles,\n orientation,\n necessityIndicator,\n validateTrigger,\n requiredMark,\n showValid,\n name,\n ],\n );\n const styles = extractStyles(otherProps, CONTAINER_STYLES);\n if (labelWidth) styles['$label-width'] = labelWidth;\n\n return (\n <FormElement\n {...filterBaseProps(otherProps, { propNames: formPropNames })}\n ref={mergedRef}\n qa={qa}\n noValidate\n styles={styles}\n mods={{\n 'has-sider': labelPosition === 'side',\n 'has-split': labelPosition === 'split',\n horizontal: orientation === 'horizontal',\n }}\n onSubmit={otherProps.action == null ? handleSubmit : undefined}\n onReset={otherProps.action == null ? undefined : otherProps.onReset}\n onResetCapture={otherProps.action == null ? handleReset : undefined}\n >\n <FormContext.Provider value={EMPTY_LEGACY_CONTEXT}>\n <ModernControllerContext.Provider value={form}>\n <FormPresentationContext.Provider value={presentation}>\n <Provider\n insideForm\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n >\n {children}\n </Provider>\n </FormPresentationContext.Provider>\n </ModernControllerContext.Provider>\n </FormContext.Provider>\n </FormElement>\n );\n}\n\nconst _ModernFormRoot = forwardRef(ModernFormRoot) as unknown as <\n T extends object,\n>(\n props: ModernFormProps<T> & { ref?: Ref<HTMLFormElement> },\n) => ReactElement;\n\n(_ModernFormRoot as any).displayName = 'ModernFormRoot';\n\nexport { _ModernFormRoot as ModernFormRoot };\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAM,uBAAuB,EAAE;AAE/B,SAAS,eACP,OACA,KACc;CAEd,MAAM,EACJ,MACA,IACA,MACA,UACA,cAAc,YACd,eAAe,uBACf,YAAY,oBACZ,aACA,oBACA,iBACA,eAAe,MACf,WACA,YACA,YACA,WACA,SACA,eACA,UACA,gBACA,gBACA,eAAe,UACf,GAAG,eAvBY,mBAAmB,iBAAiB,MAAM,CAAC;CAyB5D,MAAM,gBACJ,0BAA0B,gBAAgB,eAAe,SAAS;CACpE,MAAM,aACJ,uBAAuB,gBAAgB,eAAe,SAAS;CACjE,MAAM,YAAY,uBAAuB,MAAM,SAAS;CACxD,MAAM,EAAE,UAAU;CAClB,MAAM,UAAU,OAAwB,KAAK;CAC7C,MAAM,YAAY,cAAc,UAAU,KAAK,QAAQ,EAAE,CAAC,IAAI,CAAC;AAC/D,yBACQ,UAAU,gBAAgB,QAAQ,QAAQ,EAChD,CAAC,UAAU,CACZ;AACD,KAAI,kBAAkB,OACpB,OAAM,IAAI,MACR,gHACD;CAEH,MAAM,UAAU,OAAkD,OAAU;AAC5E,yBAAsB;EACpB,MAAM,QAAQ,MAAM,cAAc,EAAE,CAAC;AACrC,UAAQ,UAAU;AAClB,eAAa;AACX,SAAM,SAAS;AACf,OAAI,QAAQ,YAAY,MAAO,SAAQ,UAAU;;IAElD,CAAC,MAAM,CAAC;AACX,yBAAsB;AACpB,UAAQ,SAAS,OAAO;GACtB,GAAI,aAAa,SAAY,EAAE,GAAG,EAAE,UAAU;GAC9C,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC1D,GAAI,mBAAmB,SAAY,EAAE,GAAG,EAAE,gBAAgB;GAC3D,CAAC;GACF;CACF,MAAM,eAAe,UAAU,UAAsC;AACnE,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AACvB,EAAK,KAAK,OAAO,EAAE,SAAS,cAAc,CAAC;GAC3C;CACF,MAAM,cAAc,UAAU,UAAsC;AAGlE,QAAM,iBAAiB;AACvB,aAAW,UAAU,MAAM;AAC3B,MAAI,CAAC,MAAM,kBAAkB;AAC3B,SAAM,gBAAgB;AACtB,QAAK,OAAO;;GAEd;CACF,MAAM,eAAe,eACZ;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACX,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CACD,MAAM,SAAS,cAAc,YAAY,iBAAiB;AAC1D,KAAI,WAAY,QAAO,kBAAkB;AAEzC,QACE,oBAAC;EACC,GAAI,gBAAgB,YAAY,EAAE,WAAW,eAAe,CAAC;EAC7D,KAAK;EACD;EACJ;EACQ;EACR,MAAM;GACJ,aAAa,kBAAkB;GAC/B,aAAa,kBAAkB;GAC/B,YAAY,gBAAgB;GAC7B;EACD,UAAU,WAAW,UAAU,OAAO,eAAe;EACrD,SAAS,WAAW,UAAU,OAAO,SAAY,WAAW;EAC5D,gBAAgB,WAAW,UAAU,OAAO,cAAc;YAE1D,oBAAC,YAAY;GAAS,OAAO;aAC3B,oBAAC,wBAAwB;IAAS,OAAO;cACvC,oBAAC,wBAAwB;KAAS,OAAO;eACvC,oBAAC;MACC;MACY;MACA;MACD;MACF;MAER;OACQ;MACsB;KACF;IACd;GACX;;AAIlB,MAAM,kBAAkB,WAAW,eAAe;AAMlD,AAAC,gBAAwB,cAAc"}
@@ -1,4 +1,5 @@
1
1
 
2
+ import { FormController } from "../modern/controller.js";
2
3
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
4
  import { FieldTypes } from "../types.js";
4
5
  import { CubeFormInstance } from "../use-form.js";
@@ -7,7 +8,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.181.0 | Cube Dev Team */
2
2
  import { mergeProps } from "../../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../../_internal/hooks/use-event.js";
4
4
  import { useProviderProps } from "../../../../provider.js";
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,4 +1,5 @@
1
1
 
2
+ import { FormController } from "../modern/controller.js";
2
3
  import { CubeButtonProps } from "../../../actions/Button/Button.js";
3
4
  import { FieldTypes } from "../types.js";
4
5
  import { CubeFormInstance } from "../use-form.js";
@@ -7,7 +8,9 @@ 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>;
12
+ /** Modern forms: disable after validation fails. Defaults to false so submit can show errors. */
13
+ disableOnInvalid?: boolean;
11
14
  }
12
15
  declare const _SubmitButton: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
13
16
  //#endregion
@@ -1,17 +1,19 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../../provider.js";
3
3
  import { Button } from "../../../actions/Button/Button.js";
4
+ 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;
13
15
  props = useFormProps(props);
14
- const { form, isDisabled, ...otherProps } = props;
16
+ const { form, isDisabled, disableOnInvalid: _disableOnInvalid, ...otherProps } = props;
15
17
  const isSomethingDisabled = isDisabled || isContextDisabled;
16
18
  return /* @__PURE__ */ jsx(Button, {
17
19
  ref,
@@ -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 /** Modern forms: disable after validation fails. Defaults to false so submit can show errors. */\n disableOnInvalid?: boolean;\n}\n\nfunction LegacySubmitButton(\n props: Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n },\n ref: FocusableRef<HTMLElement>,\n) {\n const providerProps = useProviderProps({} as CubeButtonProps);\n\n props = useFormProps(props);\n\n const { isDisabled: isContextDisabled } = providerProps;\n\n props = useFormProps(props);\n\n const {\n form,\n isDisabled,\n disableOnInvalid: _disableOnInvalid,\n ...otherProps\n } = props;\n const isSomethingDisabled = isDisabled || isContextDisabled;\n\n return (\n <Button\n ref={ref}\n type=\"primary\"\n htmlType=\"submit\"\n isLoading={form?.isSubmitting}\n isDisabled={\n isSomethingDisabled || form?.isSubmitting ? true : form?.isInvalid\n }\n {...otherProps}\n />\n );\n}\n\nfunction SubmitButton(\n props: CubeSubmitButtonProps,\n ref: FocusableRef<HTMLElement>,\n) {\n const resolved = useFormProps(props);\n if (isModernFormController(resolved.form)) {\n return (\n <ModernSubmitButton\n {...resolved}\n form={resolved.form as FormController}\n buttonRef={ref}\n />\n );\n }\n return (\n <LegacySubmitButtonWithRef\n {...(props as Omit<CubeSubmitButtonProps, 'form'> & {\n form?: CubeFormInstance<FieldTypes>;\n })}\n ref={ref}\n />\n );\n}\n\nconst LegacySubmitButtonWithRef = forwardRef(LegacySubmitButton);\nconst _SubmitButton = forwardRef(SubmitButton);\n\n_SubmitButton.displayName = 'SubmitButton';\n\nexport { _SubmitButton as SubmitButton };\n"],"mappings":";;;;;;;;;;AAoBA,SAAS,mBACP,OAGA,KACA;CACA,MAAM,gBAAgB,iBAAiB,EAAE,CAAoB;AAE7D,SAAQ,aAAa,MAAM;CAE3B,MAAM,EAAE,YAAY,sBAAsB;AAE1C,SAAQ,aAAa,MAAM;CAE3B,MAAM,EACJ,MACA,YACA,kBAAkB,mBAClB,GAAG,eACD;CACJ,MAAM,sBAAsB,cAAc;AAE1C,QACE,oBAAC;EACM;EACL,MAAK;EACL,UAAS;EACT,WAAW,MAAM;EACjB,YACE,uBAAuB,MAAM,eAAe,OAAO,MAAM;EAE3D,GAAI;GACJ;;AAIN,SAAS,aACP,OACA,KACA;CACA,MAAM,WAAW,aAAa,MAAM;AACpC,KAAI,uBAAuB,SAAS,KAAK,CACvC,QACE,oBAAC;EACC,GAAI;EACJ,MAAM,SAAS;EACf,WAAW;GACX;AAGN,QACE,oBAAC;EACC,GAAK;EAGA;GACL;;AAIN,MAAM,4BAA4B,WAAW,mBAAmB;AAChE,MAAM,gBAAgB,WAAW,aAAa;AAE9C,cAAc,cAAc"}
@@ -1,13 +1,19 @@
1
1
 
2
+ import { FormController } from "./modern/controller.js";
2
3
  import { CubeAlertProps } from "../../content/Alert/types.js";
3
4
  import "../../content/Alert/index.js";
4
5
  import * as react from "react";
6
+ import { ReactNode } from "react";
5
7
 
6
8
  //#region src/components/form/Form/SubmitError.d.ts
9
+ interface CubeSubmitErrorProps extends CubeAlertProps {
10
+ form?: FormController<any>;
11
+ renderError?: (error: unknown) => ReactNode;
12
+ }
7
13
  /**
8
14
  * An alert that shows a form error message received from the onSubmit callback.
9
15
  */
10
- declare const _SubmitError: react.ForwardRefExoticComponent<CubeAlertProps & react.RefAttributes<HTMLDivElement>>;
16
+ declare const _SubmitError: react.ForwardRefExoticComponent<CubeSubmitErrorProps & react.RefAttributes<HTMLDivElement>>;
11
17
  //#endregion
12
- export { _SubmitError };
18
+ export { CubeSubmitErrorProps, _SubmitError };
13
19
  //# sourceMappingURL=SubmitError.d.ts.map