@cube-dev/ui-kit 0.180.0 → 0.182.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 (676) hide show
  1. package/dist/CHANGELOG.md +38 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +5 -3
  19. package/dist/components/actions/Button/Button.js.map +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +6 -4
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/actions-run.js +1 -1
  40. package/dist/components/actions/index.js +1 -1
  41. package/dist/components/actions/use-action.js +1 -1
  42. package/dist/components/actions/use-anchored-menu.js +1 -1
  43. package/dist/components/actions/use-context-menu.js +1 -1
  44. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  45. package/dist/components/content/Alert/Alert.js +1 -1
  46. package/dist/components/content/Alert/use-alert.js +1 -1
  47. package/dist/components/content/Avatar/Avatar.js +1 -1
  48. package/dist/components/content/Badge/Badge.js +1 -1
  49. package/dist/components/content/Card/Card.js +1 -1
  50. package/dist/components/content/Content.js +1 -1
  51. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  52. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  53. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  54. package/dist/components/content/Divider.js +1 -1
  55. package/dist/components/content/Footer.js +1 -1
  56. package/dist/components/content/Header.js +1 -1
  57. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  58. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  59. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  60. package/dist/components/content/Item/Item.js +8 -6
  61. package/dist/components/content/Item/Item.js.map +1 -1
  62. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  63. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  64. package/dist/components/content/Layout/GridLayout.js +1 -1
  65. package/dist/components/content/Layout/Layout.js +1 -1
  66. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  67. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  68. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  69. package/dist/components/content/Layout/LayoutContent.js +1 -1
  70. package/dist/components/content/Layout/LayoutContext.js +1 -1
  71. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  72. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  73. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  74. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutPane.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanel.js +2 -2
  77. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/styled.js +1 -1
  96. package/dist/components/content/Tree/tree-index.js +1 -1
  97. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  98. package/dist/components/content/Tree/use-load-data.js +1 -1
  99. package/dist/components/content/highlightText.js +1 -1
  100. package/dist/components/content/use-auto-tooltip.js +1 -1
  101. package/dist/components/data/DataTable/DataTable.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  107. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  108. package/dist/components/data/TableBase/RowCollection.js +1 -1
  109. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  110. package/dist/components/data/TableBase/TableRow.js +1 -1
  111. package/dist/components/data/TableBase/TableView.js +1 -1
  112. package/dist/components/data/TableBase/column-menu.js +1 -1
  113. package/dist/components/data/TableBase/column-tint.js +1 -1
  114. package/dist/components/data/TableBase/row-menu.js +1 -1
  115. package/dist/components/data/TableBase/styled.js +1 -1
  116. package/dist/components/data/TableBase/table-tree.js +1 -1
  117. package/dist/components/data/TableBase/types.js +1 -1
  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 +3 -1
  131. package/dist/components/fields/Checkbox/Checkbox.js +15 -9
  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 +1 -1
  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.d.ts +21 -1
  151. package/dist/components/fields/CommandTextArea/CommandTextArea.js +26 -7
  152. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  153. package/dist/components/fields/CommandTextArea/caretPosition.js +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 +6 -3
  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/DatePickerSegment.js +1 -1
  166. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -1
  167. package/dist/components/fields/DatePicker/DateRangePicker.js +6 -3
  168. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  169. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +4 -1
  170. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +6 -3
  171. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  172. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  173. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  174. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  175. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  176. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  178. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  179. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  180. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  181. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  182. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  183. package/dist/components/fields/DatePicker/period.js +1 -1
  184. package/dist/components/fields/DatePicker/props.js +1 -1
  185. package/dist/components/fields/DatePicker/utils.js +1 -1
  186. package/dist/components/fields/FileInput/FileInput.d.ts +4 -1
  187. package/dist/components/fields/FileInput/FileInput.js +38 -29
  188. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  189. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  190. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  191. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  192. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +3 -1
  193. package/dist/components/fields/FilterPicker/FilterPicker.js +10 -6
  194. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  195. package/dist/components/fields/Input/Input.js +1 -1
  196. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  197. package/dist/components/fields/ListBox/ListBox.d.ts +1 -1
  198. package/dist/components/fields/ListBox/ListBox.js +5 -3
  199. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  200. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  201. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  202. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  203. package/dist/components/fields/NumberInput/NumberInput.d.ts +3 -1
  204. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  205. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  206. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  207. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  208. package/dist/components/fields/Picker/Picker.d.ts +3 -1
  209. package/dist/components/fields/Picker/Picker.js +10 -6
  210. package/dist/components/fields/Picker/Picker.js.map +1 -1
  211. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  212. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  213. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  214. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  215. package/dist/components/fields/RadioGroup/context.js +1 -1
  216. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  217. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  218. package/dist/components/fields/Select/Select.d.ts +3 -1
  219. package/dist/components/fields/Select/Select.js +20 -3
  220. package/dist/components/fields/Select/Select.js.map +1 -1
  221. package/dist/components/fields/Slider/Gradation.js +1 -1
  222. package/dist/components/fields/Slider/HueSlider.js +1 -1
  223. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  224. package/dist/components/fields/Slider/Slider.js +1 -1
  225. package/dist/components/fields/Slider/SliderBase.js +1 -1
  226. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  227. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  228. package/dist/components/fields/Slider/elements.js +1 -1
  229. package/dist/components/fields/Slider/index.js +1 -1
  230. package/dist/components/fields/Slider/types.d.ts +1 -1
  231. package/dist/components/fields/Switch/Switch.d.ts +3 -1
  232. package/dist/components/fields/Switch/Switch.js +1 -1
  233. package/dist/components/fields/Switch/Switch.js.map +1 -1
  234. package/dist/components/fields/TextArea/TextArea.d.ts +2 -0
  235. package/dist/components/fields/TextArea/TextArea.js +1 -1
  236. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  237. package/dist/components/fields/TextInput/TextInput.d.ts +4 -1
  238. package/dist/components/fields/TextInput/TextInput.js +1 -1
  239. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  240. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  241. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  242. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  243. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  244. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +1 -1
  245. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  246. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  247. package/dist/components/fields/TriggerActions.js +1 -1
  248. package/dist/components/fields/color/ColorPanel.js +1 -1
  249. package/dist/components/fields/color/channels.js +1 -1
  250. package/dist/components/fields/color/color.js +1 -1
  251. package/dist/components/fields/color/context.js +1 -1
  252. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  253. package/dist/components/form/Form/Field.d.ts +2 -0
  254. package/dist/components/form/Form/Field.js +1 -1
  255. package/dist/components/form/Form/Field.js.map +1 -1
  256. package/dist/components/form/Form/Form.js +1 -1
  257. package/dist/components/form/Form/ModernFormRoot.d.ts +9 -4
  258. package/dist/components/form/Form/ModernFormRoot.js +13 -6
  259. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  260. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +1 -1
  261. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  262. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +3 -1
  263. package/dist/components/form/Form/SubmitButton/SubmitButton.js +2 -2
  264. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  265. package/dist/components/form/Form/SubmitError.d.ts +8 -2
  266. package/dist/components/form/Form/SubmitError.js +11 -4
  267. package/dist/components/form/Form/SubmitError.js.map +1 -1
  268. package/dist/components/form/Form/backend.js +1 -1
  269. package/dist/components/form/Form/index.d.ts +12 -8
  270. package/dist/components/form/Form/index.js +4 -2
  271. package/dist/components/form/Form/index.js.map +1 -1
  272. package/dist/components/form/Form/modern/actions.js +27 -9
  273. package/dist/components/form/Form/modern/actions.js.map +1 -1
  274. package/dist/components/form/Form/modern/context.d.ts +3 -0
  275. package/dist/components/form/Form/modern/context.js +1 -1
  276. package/dist/components/form/Form/modern/controller.d.ts +19 -8
  277. package/dist/components/form/Form/modern/controller.js +15 -4
  278. package/dist/components/form/Form/modern/controller.js.map +1 -1
  279. package/dist/components/form/Form/modern/field-binding.js +23 -5
  280. package/dist/components/form/Form/modern/field-binding.js.map +1 -1
  281. package/dist/components/form/Form/modern/field.d.ts +30 -0
  282. package/dist/components/form/Form/modern/field.js +23 -0
  283. package/dist/components/form/Form/modern/field.js.map +1 -0
  284. package/dist/components/form/Form/modern/path-types.d.ts +5 -1
  285. package/dist/components/form/Form/modern/react.d.ts +7 -2
  286. package/dist/components/form/Form/modern/react.js +21 -3
  287. package/dist/components/form/Form/modern/react.js.map +1 -1
  288. package/dist/components/form/Form/modern/read-types.d.ts +11 -0
  289. package/dist/components/form/Form/modern/store.js +82 -19
  290. package/dist/components/form/Form/modern/store.js.map +1 -1
  291. package/dist/components/form/Form/modern/types.d.ts +39 -23
  292. package/dist/components/form/Form/modern/validation.d.ts +2 -1
  293. package/dist/components/form/Form/modern/validation.js +4 -4
  294. package/dist/components/form/Form/modern/validation.js.map +1 -1
  295. package/dist/components/form/Form/modern/values.js +16 -2
  296. package/dist/components/form/Form/modern/values.js.map +1 -1
  297. package/dist/components/form/Form/use-field/types.d.ts +1 -1
  298. package/dist/components/form/Form/use-field/use-field-binding.js +12 -8
  299. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
  300. package/dist/components/form/Form/use-field/use-field-props.d.ts +3 -1
  301. package/dist/components/form/Form/use-field/use-field-props.js +16 -5
  302. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  303. package/dist/components/form/Form/use-field/use-field.d.ts +3 -1
  304. package/dist/components/form/Form/use-field/use-field.js +1 -1
  305. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  306. package/dist/components/form/Form/use-form.d.ts +1 -1
  307. package/dist/components/form/Form/use-form.js +1 -1
  308. package/dist/components/form/Form/validation.js +1 -1
  309. package/dist/components/form/Label.js +1 -1
  310. package/dist/components/form/index.d.ts +6 -5
  311. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  312. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  313. package/dist/components/form/validation/use-validation-props.js +1 -1
  314. package/dist/components/form/wrapper.js +1 -1
  315. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  316. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  317. package/dist/components/layout/Board/Board.js +1 -1
  318. package/dist/components/layout/Board/BoardProvider.js +1 -1
  319. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  320. package/dist/components/layout/Board/Widget.js +1 -1
  321. package/dist/components/layout/Board/WidgetHost.js +1 -1
  322. package/dist/components/layout/Board/board-context.js +1 -1
  323. package/dist/components/layout/Board/board-store.js +1 -1
  324. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  325. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  326. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  327. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  328. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  329. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  330. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  331. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  332. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  333. package/dist/components/layout/Board/index.js +1 -1
  334. package/dist/components/layout/Board/responsive-utils.js +1 -1
  335. package/dist/components/layout/Board/use-board-layout.js +1 -1
  336. package/dist/components/layout/Board/use-board-registry.js +1 -1
  337. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  338. package/dist/components/layout/Board/use-board-selection.js +1 -1
  339. package/dist/components/layout/Flex.js +1 -1
  340. package/dist/components/layout/Flow.js +1 -1
  341. package/dist/components/layout/Grid.js +1 -1
  342. package/dist/components/layout/Panel.js +1 -1
  343. package/dist/components/layout/Prefix.js +1 -1
  344. package/dist/components/layout/ResizablePanel.js +1 -1
  345. package/dist/components/layout/Space.js +1 -1
  346. package/dist/components/layout/Suffix.js +1 -1
  347. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  348. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  349. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  350. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  351. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  352. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  353. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  354. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  355. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  356. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  357. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  358. package/dist/components/navigation/Tabs/styled.js +1 -1
  359. package/dist/components/navigation/Tabs/types.js +1 -1
  360. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  361. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  362. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  363. package/dist/components/other/Calendar/Calendar.js +1 -1
  364. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  365. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  366. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  367. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  368. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  369. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  370. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  371. package/dist/components/other/Calendar/styled.js +1 -1
  372. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  373. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  374. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  375. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  376. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  377. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  378. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  379. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  380. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  381. package/dist/components/overlays/Dialog/context.js +1 -1
  382. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  383. package/dist/components/overlays/Modal/Modal.js +1 -1
  384. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  385. package/dist/components/overlays/Modal/Overlay.js +8 -2
  386. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  387. package/dist/components/overlays/Modal/Popover.js +4 -2
  388. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  389. package/dist/components/overlays/Modal/Tray.js +1 -1
  390. package/dist/components/overlays/Modal/Underlay.js +1 -1
  391. package/dist/components/overlays/Notifications/Notification.js +1 -1
  392. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  393. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  394. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  395. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  396. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  397. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  398. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  399. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  400. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  401. package/dist/components/overlays/Notifications/index.js +1 -1
  402. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  403. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  404. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  405. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  406. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  407. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  408. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  409. package/dist/components/overlays/Toast/index.js +1 -1
  410. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  411. package/dist/components/overlays/Toast/useToast.js +1 -1
  412. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  413. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  414. package/dist/components/overlays/Tooltip/TooltipTrigger.js +12 -2
  415. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  416. package/dist/components/overlays/Tooltip/context.js +1 -1
  417. package/dist/components/portal/Portal.js +1 -1
  418. package/dist/components/portal/PortalProvider.js +1 -1
  419. package/dist/components/portal/usePortal.js +1 -1
  420. package/dist/components/shared/DraggableCollection.js +1 -1
  421. package/dist/components/shared/InvalidIcon.js +1 -1
  422. package/dist/components/shared/ValidIcon.js +1 -1
  423. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  424. package/dist/components/status/Spin/Cube.js +1 -1
  425. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  426. package/dist/components/status/Spin/Spin.js +1 -1
  427. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  428. package/dist/data/item-themes.js +1 -1
  429. package/dist/data/themes.js +1 -1
  430. package/dist/eslint-plugin/defaults.generated.js +4 -3
  431. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  432. package/dist/eslint-plugin/index.js +1 -1
  433. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  434. package/dist/i18n/I18nProvider.js +1 -1
  435. package/dist/i18n/createFormatter.js +1 -1
  436. package/dist/i18n/index.js +1 -1
  437. package/dist/i18n/instance.js +1 -1
  438. package/dist/i18n/locales/de-DE/uikit.js +5 -2
  439. package/dist/i18n/locales/en-US/uikit.js +5 -2
  440. package/dist/i18n/locales/en-US/uikit.json.d.ts +15 -5
  441. package/dist/i18n/locales/es-ES/uikit.js +5 -2
  442. package/dist/i18n/locales/es-MX/uikit.js +5 -2
  443. package/dist/i18n/locales/fr-FR/uikit.js +5 -2
  444. package/dist/i18n/locales/it-IT/uikit.js +5 -2
  445. package/dist/i18n/locales/ja-JP/uikit.js +5 -2
  446. package/dist/i18n/locales/nb-NO/uikit.js +5 -2
  447. package/dist/i18n/locales/pt-BR/uikit.js +5 -2
  448. package/dist/i18n/locales/pt-PT/uikit.js +5 -2
  449. package/dist/i18n/locales/sv-SE/uikit.js +5 -2
  450. package/dist/i18n/locales/vi-VN/uikit.js +5 -2
  451. package/dist/i18n/locales.js +1 -1
  452. package/dist/i18n/useFormatter.js +1 -1
  453. package/dist/i18n/useI18n.js +1 -1
  454. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  455. package/dist/icons/AdjustmentsIcon.js +1 -1
  456. package/dist/icons/AiIcon.js +1 -1
  457. package/dist/icons/AreaChartIcon.js +1 -1
  458. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  459. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  460. package/dist/icons/BackwardIcon.js +1 -1
  461. package/dist/icons/BarChartIcon.js +1 -1
  462. package/dist/icons/BellFilledIcon.js +1 -1
  463. package/dist/icons/BellIcon.js +1 -1
  464. package/dist/icons/BooleanIcon.js +1 -1
  465. package/dist/icons/CalendarEditIcon.js +1 -1
  466. package/dist/icons/CalendarIcon.js +1 -1
  467. package/dist/icons/CaretDownIcon.js +1 -1
  468. package/dist/icons/CaretUpIcon.js +1 -1
  469. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  470. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  471. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  472. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  473. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  474. package/dist/icons/ChartBarLineIcon.js +1 -1
  475. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  476. package/dist/icons/ChartBarStackedIcon.js +1 -1
  477. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  478. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  479. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  480. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  481. package/dist/icons/ChartBubbleIcon.js +1 -1
  482. package/dist/icons/ChartDonut2Icon.js +1 -1
  483. package/dist/icons/ChartFunnelIcon.js +1 -1
  484. package/dist/icons/ChartHeatmapIcon.js +1 -1
  485. package/dist/icons/ChartKPIIcon.js +1 -1
  486. package/dist/icons/ChartPie2Icon.js +1 -1
  487. package/dist/icons/ChartScatterIcon.js +1 -1
  488. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  489. package/dist/icons/CheckCircleIcon.js +1 -1
  490. package/dist/icons/CheckIcon.js +1 -1
  491. package/dist/icons/CircleFilledIcon.js +1 -1
  492. package/dist/icons/ClearIcon.js +1 -1
  493. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  494. package/dist/icons/CloseCircleIcon.js +1 -1
  495. package/dist/icons/CloseIcon.js +1 -1
  496. package/dist/icons/CodeIcon.js +1 -1
  497. package/dist/icons/ColumnTotalIcon.js +1 -1
  498. package/dist/icons/CopyIcon.js +1 -1
  499. package/dist/icons/CountIcon.js +1 -1
  500. package/dist/icons/CubeIcon.js +1 -1
  501. package/dist/icons/CubePauseIcon.js +1 -1
  502. package/dist/icons/CubePlayIcon.js +1 -1
  503. package/dist/icons/CurrencyDollarIcon.js +1 -1
  504. package/dist/icons/DangerIcon.js +1 -1
  505. package/dist/icons/DashboardIcon.js +1 -1
  506. package/dist/icons/DatabaseIcon.js +1 -1
  507. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  508. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  509. package/dist/icons/DirectionIcon.js +1 -1
  510. package/dist/icons/DonutIcon.js +1 -1
  511. package/dist/icons/DownIcon.js +1 -1
  512. package/dist/icons/EditIcon.js +1 -1
  513. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  514. package/dist/icons/ExclamationCircleIcon.js +1 -1
  515. package/dist/icons/ExclamationIcon.js +1 -1
  516. package/dist/icons/EyeIcon.js +1 -1
  517. package/dist/icons/EyeInvisibleIcon.js +1 -1
  518. package/dist/icons/FilterIcon.js +1 -1
  519. package/dist/icons/FolderFilledIcon.js +1 -1
  520. package/dist/icons/FolderIcon.js +1 -1
  521. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  522. package/dist/icons/FolderOpenIcon.js +1 -1
  523. package/dist/icons/ForwardIcon.js +1 -1
  524. package/dist/icons/GripVerticalIcon.js +1 -1
  525. package/dist/icons/HierarchyIcon.js +1 -1
  526. package/dist/icons/HierarchyOpenIcon.js +1 -1
  527. package/dist/icons/Icon.js +1 -1
  528. package/dist/icons/InfoCircleIcon.js +1 -1
  529. package/dist/icons/InfoIcon.js +1 -1
  530. package/dist/icons/KeyIcon.js +1 -1
  531. package/dist/icons/LeftIcon.js +1 -1
  532. package/dist/icons/LineChartIcon.js +1 -1
  533. package/dist/icons/LoadingIcon.js +1 -1
  534. package/dist/icons/LockFilledIcon.js +1 -1
  535. package/dist/icons/LockIcon.js +1 -1
  536. package/dist/icons/MoreIcon.js +1 -1
  537. package/dist/icons/NotAllowedIcon.js +1 -1
  538. package/dist/icons/Number123Icon.js +1 -1
  539. package/dist/icons/NumberIcon.js +1 -1
  540. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  541. package/dist/icons/PauseCircleIcon.js +1 -1
  542. package/dist/icons/PauseIcon.js +1 -1
  543. package/dist/icons/PercentageIcon.js +1 -1
  544. package/dist/icons/PieChartIcon.js +1 -1
  545. package/dist/icons/PipetteIcon.js +1 -1
  546. package/dist/icons/PlayCircleIcon.js +1 -1
  547. package/dist/icons/PlayIcon.js +1 -1
  548. package/dist/icons/PlusIcon.js +1 -1
  549. package/dist/icons/ProgressBarIcon.js +1 -1
  550. package/dist/icons/ReloadIcon.js +1 -1
  551. package/dist/icons/ReportIcon.js +1 -1
  552. package/dist/icons/ReturnIcon.js +1 -1
  553. package/dist/icons/RightIcon.js +1 -1
  554. package/dist/icons/RowTotalsIcon.js +1 -1
  555. package/dist/icons/SchemeIcon.js +1 -1
  556. package/dist/icons/SearchIcon.js +1 -1
  557. package/dist/icons/SemanticQueryIcon.js +1 -1
  558. package/dist/icons/SettingsIcon.js +1 -1
  559. package/dist/icons/ShieldFilledIcon.js +1 -1
  560. package/dist/icons/ShieldIcon.js +1 -1
  561. package/dist/icons/SlashIcon.js +1 -1
  562. package/dist/icons/SparklesIcon.js +1 -1
  563. package/dist/icons/SqlIcon.js +1 -1
  564. package/dist/icons/StatsIcon.js +1 -1
  565. package/dist/icons/StopIcon.js +1 -1
  566. package/dist/icons/StringIcon.js +1 -1
  567. package/dist/icons/SubtotalsIcon.js +1 -1
  568. package/dist/icons/SwitchIcon.js +1 -1
  569. package/dist/icons/TableIcon.js +1 -1
  570. package/dist/icons/ThumbsDownIcon.js +1 -1
  571. package/dist/icons/ThumbsUpIcon.js +1 -1
  572. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  573. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  574. package/dist/icons/ThunderboltIcon.js +1 -1
  575. package/dist/icons/TimeIcon.js +1 -1
  576. package/dist/icons/TrashIcon.js +1 -1
  577. package/dist/icons/UnlockIcon.js +1 -1
  578. package/dist/icons/UpIcon.js +1 -1
  579. package/dist/icons/UserGroupIcon.js +1 -1
  580. package/dist/icons/UserIcon.js +1 -1
  581. package/dist/icons/UserLockIcon.js +1 -1
  582. package/dist/icons/ViewIcon.js +1 -1
  583. package/dist/icons/WarningFilledIcon.js +1 -1
  584. package/dist/icons/WarningIcon.js +1 -1
  585. package/dist/icons/wrap-icon.js +1 -1
  586. package/dist/index.d.ts +7 -5
  587. package/dist/index.js +2 -2
  588. package/dist/probe/canonicalize.js +1 -1
  589. package/dist/probe/css.js +1 -1
  590. package/dist/probe/index.js +1 -1
  591. package/dist/provider.js +1 -1
  592. package/dist/providers/TrackingProvider.js +1 -1
  593. package/dist/providers/navigationAdapter.default.js +1 -1
  594. package/dist/shared/form.d.ts +13 -5
  595. package/dist/tokens/all-tokens.js +1 -1
  596. package/dist/tokens/base.js +2 -2
  597. package/dist/tokens/base.js.map +1 -1
  598. package/dist/tokens/color-seed.js +1 -1
  599. package/dist/tokens/color-theme.js +1 -1
  600. package/dist/tokens/colors.js +1 -1
  601. package/dist/tokens/layout.js +1 -1
  602. package/dist/tokens/lazy-styles.js +1 -1
  603. package/dist/tokens/legacy-color.js +1 -1
  604. package/dist/tokens/palette-config.js +1 -1
  605. package/dist/tokens/palette.js +1 -1
  606. package/dist/tokens/resolve.js +1 -1
  607. package/dist/tokens/shadows.js +1 -1
  608. package/dist/tokens/sizes.js +1 -1
  609. package/dist/tokens/spacing.js +1 -1
  610. package/dist/tokens/typography.js +1 -1
  611. package/dist/utils/ResizeSensor.js +1 -1
  612. package/dist/utils/colors.js +1 -1
  613. package/dist/utils/dotize.js +1 -1
  614. package/dist/utils/is-dev-env.js +1 -1
  615. package/dist/utils/modules.js +1 -1
  616. package/dist/utils/promise.js +1 -1
  617. package/dist/utils/raf.js +1 -1
  618. package/dist/utils/random.js +1 -1
  619. package/dist/utils/range.js +1 -1
  620. package/dist/utils/react/RenderCache.js +1 -1
  621. package/dist/utils/react/Slots.js +1 -1
  622. package/dist/utils/react/chain.js +1 -1
  623. package/dist/utils/react/disabledProps.js +1 -1
  624. package/dist/utils/react/escapePropagation.js +39 -0
  625. package/dist/utils/react/escapePropagation.js.map +1 -0
  626. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  627. package/dist/utils/react/index.js +1 -1
  628. package/dist/utils/react/interactions.js +1 -1
  629. package/dist/utils/react/isTextOnly.js +1 -1
  630. package/dist/utils/react/mapProps.js +1 -1
  631. package/dist/utils/react/mergeProps.js +1 -1
  632. package/dist/utils/react/nullableValue.js +1 -1
  633. package/dist/utils/react/programmaticFocus.js +58 -0
  634. package/dist/utils/react/programmaticFocus.js.map +1 -0
  635. package/dist/utils/react/resolveIcon.js +1 -1
  636. package/dist/utils/react/sharedStore.js +1 -1
  637. package/dist/utils/react/useBufferedValue.js +1 -1
  638. package/dist/utils/react/useCombinedRefs.js +1 -1
  639. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  640. package/dist/utils/react/useEventBus.js +1 -1
  641. package/dist/utils/react/useId.js +1 -1
  642. package/dist/utils/react/useIsDarwin.js +1 -1
  643. package/dist/utils/react/useKeySymbols.js +1 -1
  644. package/dist/utils/react/useLayoutEffect.js +1 -1
  645. package/dist/utils/react/useLocalStorage.js +1 -1
  646. package/dist/utils/react/useMergeStyles.js +1 -1
  647. package/dist/utils/react/useOverlayEscapeGuard.js +41 -0
  648. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -0
  649. package/dist/utils/react/usePopoverSync.js +1 -1
  650. package/dist/utils/react/useQaProps.js +1 -1
  651. package/dist/utils/react/useScheme.js +1 -1
  652. package/dist/utils/react/useViewportSize.js +1 -1
  653. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  654. package/dist/utils/selection.js +1 -1
  655. package/dist/utils/styles.js +1 -1
  656. package/dist/utils/tree.js +1 -1
  657. package/dist/utils/warnings.js +1 -1
  658. package/dist/version.js +2 -2
  659. package/docs/CreateComponent.md +1 -1
  660. package/docs/FieldProperties.md +25 -13
  661. package/docs/Usage.md +17 -31
  662. package/docs/components/actions/Button.md +1 -1
  663. package/docs/components/content/Item.md +19 -0
  664. package/docs/components/fields/CommandTextArea.md +3 -1
  665. package/docs/components/fields/FileInput.md +4 -0
  666. package/docs/components/fields/FilterPicker.md +1 -0
  667. package/docs/components/fields/Picker.md +1 -0
  668. package/docs/components/fields/Select.md +1 -0
  669. package/docs/components/form/Field.md +2 -2
  670. package/docs/components/form/Form.md +13 -39
  671. package/docs/components/form/FormInstance.md +5 -9
  672. package/docs/components/form/ModernForm.md +269 -0
  673. package/docs/components/overlays/Dialog.md +26 -0
  674. package/docs/modern-form-guide.md +269 -0
  675. package/docs/modern-form-migration.md +20 -59
  676. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  import { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useViewportSize.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  import { isValidElement } from "react";
3
3
  import { isFragment } from "react-is";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  //#region src/utils/selection.ts
3
3
  /**
4
4
  * Deduplicate/toggle keys in a selection: if a key appears twice it is
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  //#region src/utils/styles.ts
3
3
  /**
4
4
  * Split properties into style and non-style properties.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  //#region src/utils/tree.ts
3
3
  function toFlatTree(tree, includingFolders) {
4
4
  return tree.reduce((result, node) => {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  import { isDevEnvOrTest } from "./is-dev-env.js";
3
3
 
4
4
  //#region src/utils/warnings.ts
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.180.0";
3
+ const VERSION = "0.182.0";
4
4
  const TASTY_VERSION = "3.9.2";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
@@ -15,7 +15,7 @@ Creating a component involves several optional but recommended elements:
15
15
 
16
16
  Everything is optional - you can create simplified components without all features, but exported UI Kit components should be feature-rich and consistent.
17
17
 
18
- Form-aware inputs use `useFieldProps` for both legacy instances and modern controllers. Map the control’s value API with `valuePropsMapper` and pass the resolved props to `wrapWithField`. The hook owns modern registration after commit, narrow subscriptions, cleanup, and unique accessible ids. Do not register during render, call the legacy adapter directly, or wrap a modern control in `Form.Item`. Modern validation options (`rules`, `rulesKey`, `validationDelay`, `validateTrigger`, `errorPolicy`) flow through the same hook. Validators receive an AbortSignal and return or reject with a message; use `rulesKey` for changed closure dependencies. See [Form](./components/form/Form.md) for the integration contract.
18
+ Form-aware inputs use `useFieldProps` for both legacy instances and modern controllers. Map the control’s value API with `valuePropsMapper` and pass the resolved props to `wrapWithField`. The hook owns modern registration after commit, narrow subscriptions, cleanup, and unique accessible ids. Do not register during render, call the legacy adapter directly, or wrap a modern control in `Form.Item`. Modern validation options (`rules`, `deps`, `dependsOn`, `rulesKey`, `validationDelay`, `validateTrigger`, `errorPolicy`) flow through the same hook. Validators receive an AbortSignal and return or reject with a message; use `deps` for external closure inputs and `dependsOn` for form paths that trigger revalidation. `rulesKey` explicitly versions functions and skips source comparison while declarative constraints remain reactive. Extend `FieldBaseProps<Value>` to constrain typed modern descriptors to accepted model values, including `null | undefined` when supported even if change callbacks emit only non-null values; `useFieldProps` resolves descriptors and strips them before DOM forwarding. Descriptor options override only the input options they explicitly supply; put custom validation and structural rules together on the descriptor. See [Form](./components/form/Form.md) for the integration contract.
19
19
 
20
20
  The [compiled custom-control example](https://github.com/cube-js/cube-ui-kit/blob/main/typecheck/consumer/modern-form-examples.tsx) shows explicit DOM forwarding, async validation, and default adoption. Shared input rule props accept existing legacy validators; use `ModernValidationRule` for strict modern success/error return types, and adapt legacy validators that resolve data before migrating them.
21
21
 
@@ -4,11 +4,16 @@ All input components in UI Kit (`TextInput`, `Select`, `ComboBox`, `Checkbox`, `
4
4
 
5
5
  When used inside a [Form](./components/form/Form.md), these properties are automatically inherited from the form context and can be overridden at the field level.
6
6
 
7
+ For modern forms, follow the [use-case guide](./components/form/ModernForm.md). Bind with `name` and put validation options on the input, or choose `field={form.field(path, options)}` for model-aware type checking and validator inference. Keep presentation props on the input. These binding styles are alternatives; descriptors are not required for nested data.
8
+
7
9
  ## Identity & Form Integration
8
10
 
9
- - **`name`** `string` — Field name for form data binding. Required when used within a Form.
10
- - **`form`** `CubeFormInstance` — Form instance. Automatically provided when inside a Form context. Pass it explicitly to link an input to a form it is not nested in, or to override the surrounding form.
11
- - **`defaultValue`** `any` — Default value for the field in uncontrolled mode.
11
+ - **`field`** `FormField<Value>` — Typed modern binding created by `form.field(path, options)`. Supports nested paths and takes precedence over `form` and `name`. Built-in bindings accept `null` and `undefined` alongside their normal model value; display fallbacks do not replace stored nulls.
12
+ - **`name`** `string | readonly (string | number)[]` — Field name when a descriptor is not supplied. Modern forms accept literal strings or nested tuple paths, such as `['users', 0, 'email']`. Legacy forms accept strings only and retain dot notation.
13
+ - **`form`** `CubeFormInstance | FormController<T>` — Legacy instance or modern controller. Automatically provided when inside a Form context. Pass it explicitly to link an input to a form it is not nested in, or to override the surrounding form.
14
+ - **`defaultValue`** `any` — Initial field value. Modern controller values/defaults take precedence, including explicit `null` and `undefined`.
15
+ - **`preserve`** `boolean` (modern default: `true`) — Retain the value after the last input for this field unmounts.
16
+ - **`isEqual`** `(previous, next) => boolean` — Modern field dirty-value comparator.
12
17
  - **`id`** `string` — Unique ID for the field element.
13
18
  - **`idPrefix`** `string` — ID prefix to avoid collisions between multiple forms.
14
19
 
@@ -67,6 +72,10 @@ When used inside a [Form](./components/form/Form.md), these properties are autom
67
72
  - **`rules`** `ValidationRule[]` — Array of validation rules for the field.
68
73
  - **`validateTrigger`** `'onBlur' | 'onChange' | 'onSubmit'` — When to trigger validation.
69
74
  - **`validationDelay`** `number` — Debounce delay in milliseconds before running validation.
75
+ - **`deps`** `readonly unknown[]` — Modern validator inputs captured from outside the form. Compared with `Object.is`; changes invalidate prior validation.
76
+ - **`dependsOn`** `readonly FormPath[]` — Modern form paths that trigger revalidation, including conditional reads. Validator reads only cancel in-flight work.
77
+ - **`rulesKey`** `string` — Manual modern function revision. Skips validator/transform source comparison; declarative constraints are always compared. Update it when a function or its captures change.
78
+ - **`errorPolicy`** `'first' | 'all'` — Modern rule error collection policy, inherited from the controller by default.
70
79
  - **`showValid`** `boolean` — Whether to show the valid state icon after successful validation.
71
80
  - **`errorMessage`** `ReactNode` — Error message always displayed in danger state, regardless of validation state.
72
81
  - **`message`** `ReactNode` — _(deprecated)_ Use `errorMessage` for errors and `description` for help text.
@@ -87,34 +96,37 @@ The `rules` prop accepts an array of rule objects. Built-in validators include:
87
96
  - **`enum`** `any[]` — Value must be one of the allowed values.
88
97
  - **`whitespace`** `boolean` — Value must contain non-whitespace characters.
89
98
  - **`message`** `string` — Custom error message for the rule.
90
- - **`validator`** `(rule, value) => Promise<string | void>` — Custom async validation function.
99
+ - **`validator`** `(rule, value, context) => result` — Custom rule function. In modern forms, return an error or throw/reject to fail; `undefined`, `null`, and an empty string succeed. The context provides `signal`, `name`, `getValue`, and `getValues`. Prefer descriptor `validate(value, context)` for an ordinary custom check with an inferred value type. Legacy validators retain their existing contract.
91
100
 
92
- ```jsx
101
+ ```tsx
93
102
  <TextInput
94
- name="email"
103
+ field={form.field('email', {
104
+ rules: [{ type: 'email', message: 'Enter a valid email' }],
105
+ })}
95
106
  label="Email Address"
96
107
  isRequired
97
- rules={[
98
- { required: true, message: 'Email is required' },
99
- { type: 'email', message: 'Enter a valid email' },
100
- ]}
101
108
  />
102
109
  ```
103
110
 
104
111
  ## Usage Example
105
112
 
106
- ```jsx
113
+ ```tsx
107
114
  import { Form, TextInput, Select } from '@cube-dev/ui-kit';
108
115
 
109
116
  function ExampleForm() {
117
+ const form = Form.useController<{
118
+ name: string;
119
+ role: 'admin' | 'member' | null;
120
+ }>({ defaultValues: { name: '', role: null } });
121
+
110
122
  return (
111
- <Form defaultValues={{ name: '', role: undefined }}>
123
+ <Form form={form}>
112
124
  <TextInput
113
125
  name="name"
126
+ rules={[{ min: 2 }]}
114
127
  label="Full Name"
115
128
  description="As it appears on your ID"
116
129
  isRequired
117
- rules={[{ required: true, min: 2 }]}
118
130
  />
119
131
 
120
132
  <Select
package/docs/Usage.md CHANGED
@@ -456,44 +456,30 @@ DataTable also accepts nested column definitions for already-shaped pivot result
456
456
 
457
457
  ## Form System
458
458
 
459
- ### Form Component
459
+ ### Modern forms
460
460
 
461
- `<Form>` wraps a native `<form>` and provides validation context:
461
+ For a new modern form, create a typed controller, put defaults on the controller, and bind inputs with `name`. Modern names accept strings and nested tuples; `field` is an optional typed binding:
462
462
 
463
- ```jsx
464
- const [form] = useForm();
465
-
466
- <Form form={form} onSubmit={(data) => save(data)}>
467
- <TextInput name="email" label="Email" rules={[{ required: true }, { type: 'email' }]} />
468
- <SubmitButton>Save</SubmitButton>
463
+ ```tsx
464
+ const form = Form.useController<{ email: string | null }>({
465
+ defaultValues: { email: null },
466
+ });
467
+
468
+ <Form form={form} onSubmit={(values, { signal }) => save(values, signal)}>
469
+ <TextInput name="email" label="Email" isRequired />
470
+ <Form.SubmitError />
471
+ <Form.Submit>Save</Form.Submit>
469
472
  </Form>
470
473
  ```
471
474
 
472
- ### useForm Hook
473
-
474
- `Form.useController()` is the explicit modern alternative. Its creator does not subscribe; use `Form.useSelector(controller, selector, { isEqual })` or `<Form.Subscribe>` for reactive reads, and `Form.useControllerContext()` for descendant access. Named UI Kit inputs bind to modern controllers through commit-time registration and per-field subscriptions. Custom controls use `useFieldProps`; `Form.Item` remains legacy-only. Modern rules support cancellation, delayed validation, and ReactNode errors. Root callbacks and `Form.Submit`, `Form.Reset`, and `Form.SubmitError` use the modern pipeline; native action forms keep browser submission. Known keys and nested tuple commands infer their value types; dynamic paths stay supported. See the [Form documentation](./components/form/Form.md) for scope, defaults, and SSR contracts, and the [migration checklist](https://github.com/cube-js/cube-ui-kit/blob/main/docs/modern-form-migration.md) before converting an existing form.
475
+ Inputs subscribe to their own values and errors. For other reactive UI, use `Form.useValue(form, path)` for one value, `Form.useFieldState(form, path)` for field metadata, or a selector for derived state. `<Form.Subscribe>` keeps an inline region's subscription separate from its parent. Keep imperative getters in handlers and effects.
475
476
 
476
- Returns a `CubeFormInstance` with:
477
+ [Modern Form](./components/form/ModernForm.md) explains which API to choose for server data, nullable values, nested fields, conditional sections, cross-field and remote validation, errors, and external actions. Use that guide for implementation recipes and the [migration checklist](https://github.com/cube-js/cube-ui-kit/blob/main/docs/modern-form-migration.md) when converting an existing form.
477
478
 
478
- - **Get/Set:** `getFieldValue`, `setFieldValue`, `getFieldsValue`, `setFieldsValue`, `getFormData`
479
- - **Validation:** `validateField`, `validateFields`, `resetFieldsValidation`
480
- - **State queries:** `isFieldValid`, `isFieldInvalid`, `isFieldTouched`, `isValid`, `isDirty`
481
- - **Errors:** `getFieldError`, `setFieldError`
479
+ ### Legacy forms
482
480
 
483
- ### Validation Rules
484
-
485
- Async rule-based system. Each rule is an object with one of these properties:
486
-
487
- | Rule | Description |
488
- | --- | --- |
489
- | `required` | Field must have a value |
490
- | `type` | Type check: `email`, `url`, `number`, `integer`, `date`, `hex`, etc. |
491
- | `pattern` | Regex pattern match |
492
- | `min` / `max` | Length or value constraints |
493
- | `enum` | List of allowed values |
494
- | `whitespace` | Must contain non-whitespace content |
495
- | `validator` | Custom async function: `(rule, value) => Promise<void>` |
481
+ `Form.useForm()` and roots without a modern controller keep the legacy backend. `DialogForm` and `Form.Item` still use this contract. See [Form](./components/form/Form.md) and [FormInstance](./components/form/FormInstance.md) for legacy instance methods, defaults, and dot notation.
496
482
 
497
- ### Field Integration
483
+ ### Shared field integration
498
484
 
499
- Fields with a `name` prop inside `<Form>` automatically register with the form instance — no `<Field>` wrapper needed. The `useFieldProps` hook handles this internally.
485
+ Built-in inputs have field support; they do not need a `Field` wrapper. Modern `name` and `field` bindings, and legacy string `name` bindings, connect through `useFieldProps`. Custom controls use that hook and `wrapWithField`. [Field Properties](./FieldProperties.md) documents shared labels, validation, state, and presentation props.
@@ -227,7 +227,7 @@ A disabled button keeps showing its tooltip. Browsers stop dispatching mouse eve
227
227
  ### ARIA Properties
228
228
 
229
229
  - `aria-label`, `aria-labelledby` – Accessible name.
230
- - `aria-pressed` – Managed automatically when `isSelected` is used.
230
+ - `aria-pressed` – Derived from `isSelected`. Not emitted when the button renders as a link (`to`) or when the call site sets its own `role` — a button acting as a tab or an option wants `aria-selected` / `aria-current` instead. An explicit `aria-pressed` always wins.
231
231
  - `aria-disabled` – Announces the disabled state whenever the native `disabled` attribute cannot be used: on links, and on buttons that carry a tooltip.
232
232
  - Additional ARIA attributes supported by React Aria's `useButton`.
233
233
 
@@ -70,6 +70,25 @@ These properties allow direct style application without using the `styles` prop:
70
70
  - **Color:** `color`, `fill`, `fade`, `image`
71
71
  - **Flow:** `flow`, `place`, `placeItems`, `placeContent`, `alignItems`, `alignContent`, `justifyItems`, `justifyContent`, `align`, `justify`, `gap`, `columnGap`, `rowGap`, `gridColumns`, `gridRows`, `gridTemplate`, `gridAreas`
72
72
 
73
+ ### Spacing Tokens
74
+
75
+ `Item` lays its slots out on a grid with no gap, and `Label` drops its own inline padding whenever there is start or end content. A `prefix` or `suffix` therefore renders flush against the label by default, which is what most content wants — a checkbox, a kbd chip, a badge and a count are all boxes that already carry their own presence, and a gap on top of one reads as too much.
76
+
77
+ A **bare glyph** is the case that needs spacing: it sits flush, while the same glyph in the `icon` slot looks spaced because that slot centres it inside a `$size`-wide square. Two tokens control it, both `0` by default:
78
+
79
+ | Token | Controls |
80
+ | ------------- | ----------------------------------------------- |
81
+ | `$prefix-gap` | Space between the `Prefix` slot and the `Label` |
82
+ | `$suffix-gap` | Space between the `Label` and the `Suffix` slot |
83
+
84
+ ```jsx
85
+ <Item styles={{ '$prefix-gap': '1x' }} prefix={<MemberIcon />}>
86
+ Revenue
87
+ </Item>
88
+ ```
89
+
90
+ Set them on the item rather than overriding `Prefix` / `Suffix` padding directly — those slots carry state maps that drop the outer gutter next to an icon or an actions run, and a flat `padding` override silently replaces them.
91
+
73
92
  ### Modifiers
74
93
 
75
94
  The `mods` property accepts the following modifiers:
@@ -25,7 +25,9 @@ Choose a different component when the interaction has another outcome:
25
25
  - **`items`** `Iterable<T>` — Data-driven option source (alternative to JSX children).
26
26
  - **`children`** `ReactNode | ((item) => ReactElement)` — Static items or a render function (same shape as `ComboBox` / `ListBox`).
27
27
  - **`filter`** `(textValue, query) => boolean | false` — Custom filter. Pass `false` to disable internal filtering (e.g. server-side).
28
- - **`onCommand`** `(key, item) => void` — Fired when the user picks a command. The option's `textValue` is inserted into the textarea regardless.
28
+ - **`onCommand`** `(key, item) => void` — Fired when the user picks a command. The option's `textValue` is inserted into the textarea regardless. `item.start` / `item.end` locate the insertion in the value passed to `onChange`, so a consumer can anchor its own record to the pick instead of searching the new value for the inserted text.
29
+ - **`onOpenChange`** `(isOpen: boolean) => void` — Fired when the suggestion popover opens or closes. Use it when the field needs its own `Enter` behaviour: `onKeyDown` runs before the component's own handling, so this is how you tell "pick the focused option" from "submit".
30
+ - **`onActiveTokenChange`** `(token: ActiveToken | null) => void` — Fired when the active trigger token changes, with the component's own caret-aware scan result. `null` once the caret leaves a token.
29
31
  - **`insertSpaceAfter`** `boolean` (default: `true`) — Insert a trailing space after the chosen command.
30
32
  - **`disabledKeys`** `Iterable<Key>` — Keys of disabled options.
31
33
  - **`direction`** `'top' | 'bottom'` (default: `'top'`) — Popover placement. Chat inputs usually want `top`.
@@ -87,6 +87,10 @@ The `mods` property accepts the following modifiers you can override:
87
87
  />
88
88
  ```
89
89
 
90
+ ### Form Values and Resets
91
+
92
+ When bound to a legacy or modern form, resetting updates the displayed filename and clears any obsolete native file selection. This also allows choosing the same file again. A nonempty string value can display a filename, but it cannot restore file bytes; the user must select the file again. With `type="text"`, the form stores the file's text content.
93
+
90
94
  ### With Validation
91
95
 
92
96
  Pass `isValid` or `isInvalid` to tint the border and show the matching state icon.
@@ -31,6 +31,7 @@ Choose a different component when the interaction has another shape:
31
31
  - **`selectionMode`** `'single' | 'multiple'` (default: `single`) — Selection mode for the picker
32
32
  - **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow entering custom values that are not present in the predefined options
33
33
  - **`isClearable`** `boolean` (default: `false`) — Whether the filter picker is clearable using a clear button in the rightIcon slot
34
+ - **`clearLabel`** `string` — Accessible name for the built-in clear button. Defaults to a localized "Clear value".
34
35
  - **`isLoadingItems`** `boolean` (default: `false`) — Whether items are currently loading. Shows a loading spinner in the search input suffix inside the popover. Unlike `isLoading`, does not disable the trigger.
35
36
  - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
36
37
  - **`disabledKeys`** `Key[]` — Array of keys for disabled items
@@ -48,6 +48,7 @@ Choose a different component when the interaction has another shape:
48
48
  - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
49
49
  - **`disabledKeys`** `Key[]` — Array of keys for disabled items
50
50
  - **`isClearable`** `boolean` (default: `false`) — Whether the picker shows a clear button when a selection is made
51
+ - **`clearLabel`** `string` — Accessible name for the built-in clear button. Defaults to a localized "Clear value".
51
52
  - **`onClear`** `() => void` — Callback called when the clear button is pressed
52
53
  - **`actions`** `ReactNode` — Custom actions rendered inside the trigger, to the left of the built-in clear button and dropdown caret
53
54
  - **`sortSelectedToTop`** `boolean` — Sort selected items to the top when the popover opens (only works with `items` prop)
@@ -38,6 +38,7 @@ Choose a different component when the interaction has another shape:
38
38
  - **`size`** `string` (default: `medium`) — Size of the select component
39
39
  - **`direction`** `string` (default: `bottom`) — Preferred direction for the dropdown menu
40
40
  - **`isClearable`** `boolean` (default: `false`) — Whether the select is clearable using a clear button in the rightIcon slot
41
+ - **`clearLabel`** `string` — Accessible name for the built-in clear button. Defaults to a localized "Clear value".
41
42
  - **`actions`** `ReactNode` — Custom actions rendered inside the trigger, to the left of the built-in clear button and dropdown caret
42
43
  - **`shouldFlip`** `boolean` (default: `true`) — Whether dropdown should flip to fit in viewport
43
44
  - **`overlayOffset`** `number` (default: `8`) — Distance between select and dropdown in pixels
@@ -1,12 +1,12 @@
1
1
  # Field
2
2
 
3
- The Field component is a **legacy wrapper** for form inputs that provides field-specific styling and behavior. **In modern usage, all input components have built-in field support**, so you should pass field properties directly to input components instead of using the Field wrapper.
3
+ The Field component is a **legacy wrapper** for form inputs that provides field-specific styling and behavior. Built-in input components already provide field support on both backends, so pass field properties directly to them. For custom controls in a modern controller form, use `useFieldProps` and `wrapWithField` as described in [Modern Form](./ModernForm.md#implement-a-reusable-custom-control); `Field` / `Form.Item` does not support that backend.
4
4
 
5
5
  ## When to Use
6
6
 
7
7
  - **❌ Don't use** for regular input components (TextInput, Select, etc.) - they have built-in field support
8
8
  - **✅ Use only** when wrapping read-only content to make it appear as a form field
9
- - **✅ Use only** when wrapping custom components that don't have built-in field support
9
+ - **✅ Use only** when wrapping custom components in legacy forms that don't have built-in field support
10
10
 
11
11
  ## Component
12
12
 
@@ -2,57 +2,31 @@
2
2
 
3
3
  Forms allow users to enter data that can be submitted while providing alignment and styling for form fields. The Form component provides structure, validation, and state management for user input through a collection of input components with built-in field support.
4
4
 
5
- The form system is inspired by AntD Forms and [rc-field-form](https://field-form-react-component.vercel.app/) with a similar API.
5
+ ## Choose the form API
6
6
 
7
- ## Modern controller and subscriptions (migration preview)
8
-
9
- The [per-form migration guide](https://github.com/cube-js/cube-ui-kit/blob/main/docs/modern-form-migration.md) covers backend selection, rollback, active versus retained values, async defaults, and custom controls. Its [public API examples](https://github.com/cube-js/cube-ui-kit/blob/main/typecheck/consumer/modern-form-examples.tsx) compile against the built package declarations. Existing legacy forms need no API changes when upgrading.
10
-
11
- `Form.useForm()` and forms without an explicit modern controller continue to use the legacy backend described below. `Form.useController<T>()` creates a stable modern controller with immutable snapshots. Its initial options are captured once: changing `defaultValues` or callbacks in a later options object does not reconfigure it. Use `reset({ values })`, `setDefaultValues()`, or `adoptDefaultValues()` for later data.
7
+ For new modern forms, follow [Modern Form](./ModernForm.md): typed bindings, loading server data, conditional sections, validation, subscriptions, and submission. The guide recommends one starting point for each case and explains when the alternatives are useful.
12
8
 
13
9
  ```tsx
14
- function AmountPreview() {
15
- const form = Form.useController({ defaultValues: { amount: 10 } });
10
+ function EmailForm() {
11
+ const form = Form.useController<{ email: string | null }>({
12
+ defaultValues: { email: null },
13
+ });
16
14
 
17
15
  return (
18
- <Form form={form}>
19
- <NumberInput name="amount" label="Amount" />
20
- <button type="button" onClick={() => form.setValue('amount', 20)}>
21
- Set amount
22
- </button>
23
- <Form.Subscribe selector={(state) => state.values.amount}>
24
- {(amount) => <output>{String(amount)}</output>}
25
- </Form.Subscribe>
16
+ <Form form={form} onSubmit={(values, { signal }) => save(values, signal)}>
17
+ <TextInput name="email" label="Email" isRequired />
18
+ <Form.SubmitError />
19
+ <Form.Submit>Save</Form.Submit>
26
20
  </Form>
27
21
  );
28
22
  }
29
23
  ```
30
24
 
31
- The creator does not subscribe its owner. `Form.useSelector(form, selector, { isEqual })` subscribes the calling component; `Form.Subscribe` subscribes only its render-prop subtree. Equality defaults to `Object.is`. Selectors and equality functions must be pure. Use an `isEqual` function when returning a fresh object and equivalent results should retain their identity. Controller, selector, and equality changes are supported without stale subscriptions.
32
-
33
- `Form.Subscribe` accepts `form`, `selector`, optional `isEqual`, and a `children(selected)` render function. Omit `form` to use the surrounding modern root; an explicit controller takes precedence, while explicit `form={undefined}` detaches and reports a missing-controller error. `Form.useControllerContext<T>()` reads a modern root explicitly. These context APIs reject legacy roots, missing roots, and `FormScopeMask`; an explicit modern controller can still be used outside a root.
34
-
35
- Use selectors for render-time state. `getValue`, `getValues`, `getActiveValues`, `getFieldSnapshot`, and `getSnapshot` are imperative reads; `subscribe` supports imperative observers. `values` contains retained data and `activeValues` contains registered fields. Commands include `setValue`, `setValues`, `batch`, `touch`, the defaults/reset commands, and explicit field/submit error setters. String paths are literal names; tuples such as `['rows', 0, 'amount']` address nested data. `setValue` accepts `{ source, touch, notify, validate }`; programmatic changes do not touch or notify `onValuesChange` unless requested, while user changes do both by default. The creation-time `onValuesChange(values, change)` callback receives retained values and `{ names, source, kind }`.
36
-
37
- Named UI Kit inputs bind to the modern controller automatically; `<TextInput name="email" form={form} />` also works outside a root. Inputs subscribe only to their own value, errors, and validation status. Custom controls use `useFieldProps` and `wrapWithField`; `Form.Item` stays legacy-only. Controller values and defaults win over field defaults, including explicit `undefined` and `null`. Duplicate fields share a value but receive unique accessible ids. Groups register once and keep their options detached.
38
-
39
- `getValue` and `setValue` infer value types for known literal keys, nested tuples, and array indices without enumerating every path in the model. Unknown or dynamic paths use `unknown`; strings containing dots remain literal keys. Use an explicit `Form.useController<Model>()` model when defaults are partial or narrower than the intended values. `FormValueAtPath<Model, Path>` exports the same lookup type. The modern declaration surface requires TypeScript 5.4 or newer.
40
-
41
- Removing a field removes it from `activeValues` immediately and retains its value by default. Use `preserve={false}` to remove its retained value after cleanup; the baseline remains available to reset. Changing a name or controller releases the old registration. Explicit `form={undefined}` detaches an input. `Form.Submit`, `Form.Reset`, and `Form.SubmitError` subscribe to modern state. Modern roots reject `defaultValues`; seed the creator or use a defaults command. Legacy wrappers such as `DialogForm` keep legacy-only types.
42
-
43
- ### Modern validation and submission
44
-
45
- Use `rules`, `isRequired`, `validateTrigger`, and `validationDelay` on named inputs. Modern validators receive `(rule, value, { name, signal, getValue, getValues })` and return an error message (including a ReactNode), or throw/reject; `undefined`, `null`, and an empty string mean success. The abort signal lets a validator cancel its own network work. Superseded validation settles with `stale: true` even if a validator ignores the signal, and late results cannot replace current errors.
46
-
47
- `form.validate()` validates active fields immediately; `form.validate(['email'])` selects literal names and `form.validate([['users', 0, 'email']])` selects a nested path. `{ immediate: false }` honors field delays. `form.blur(name)` touches the field and runs an on-blur rule. No-rule fields become valid synchronously. The form is valid only when at least one field is active and every active field is valid. Existing errors stay visible during revalidation; an edit that does not revalidate clears them. `setValue` and `setValues` accept `validate: 'auto' | 'always' | 'never'`: auto revalidates on-change fields or fields showing errors. Once an on-blur field becomes valid, subsequent edits await its next blur.
48
-
49
- `errorPolicy: 'first' | 'all'` controls rule-order errors (default `first`), on the creator or individual field. Equivalent inline rules do not restart validation: primitive rule values, RegExp source/flags, and function source text form the signature; messages do not. Supply a changing `rulesKey` when a validator captures a dependency that changes without changing its source text. The latest updated duplicate registration owns its rules and trigger.
50
-
51
- `<Form onSubmit={save} onSubmitFailed={report} onValuesChange={changed}>` binds the current callbacks after commit. A callback changed to `undefined` falls back to the creator's initial callback. Unmount releases only that root's binding and cancels its pending submission. Use one owning root per controller; duplicate roots report a development error and the newest binding wins.
25
+ `name` is sufficient to bind an input. Modern forms also accept `name={['user', 'email']}` for nested data; `field={form.field(path)}` is optional and adds model-aware type checking and validator inference.
52
26
 
53
- `form.submit()` validates and submits `activeValues`; `form.submit({ include: 'all' })` includes retained values deliberately. `onSubmit(values, { include, signal })` may return a promise. Concurrent submissions return `{ status: 'ignored', reason: 'submitting' }`; other results are `submitted`, `invalid` with an error map, `failed` with an error, or `stale` after cancellation. Validation failures call `onSubmitFailed` without setting `submitError`; submission failures set it. Submit start and reset clear `submitError`; ordinary edits keep it. Explicit error commands remain available. A modern root without `action` prevents navigation and routes submission to the controller. A native `action`/`method` form preserves browser submission and bypasses the controller pipeline.
27
+ `Form.useForm()` and roots without a modern controller keep the legacy backend. Existing forms need no API changes when upgrading. Use the [migration checklist](https://github.com/cube-js/cube-ui-kit/blob/main/docs/modern-form-migration.md) before converting one; `DialogForm` and `Form.Item` still require legacy forms.
54
28
 
55
- For SSR, seed the controller with the same serializable `defaultValues` on server and client. Server rendering and initial hydration select the cached creation snapshot; after hydration, subscribers catch up to current client state. Prepare server data before creating the controller. Each mount owns a separate controller, and subscriptions clean up on unmount; Strict Mode effect replay does not dispose live controllers.
29
+ **The reference and examples below describe the legacy backend.** Its instance methods, root `defaultValues`, and dot-separated paths do not apply to modern controllers. Shared layout and field presentation props work with both backends. See [Modern Form](./ModernForm.md) for modern defaults and commands.
56
30
 
57
31
  ## When to Use
58
32
 
@@ -1,4 +1,6 @@
1
- # FormInstance
1
+ # FormInstance (legacy)
2
+
3
+ This page describes `Form.useForm()` and `CubeFormInstance`. New modern forms use `Form.useController<Model>()`; see [Modern Form](./ModernForm.md) for its commands and recipes. The methods and dot notation below are legacy-only.
2
4
 
3
5
  The `CubeFormInstance` is the core form management class that provides programmatic control over form state, validation, and data handling. It serves as the central API for interacting with form fields, managing validation states, and handling form submission workflows.
4
6
 
@@ -16,13 +18,7 @@ function MyComponent() {
16
18
  }
17
19
  ```
18
20
 
19
- Alternatively, you can create an instance directly:
20
-
21
- ```tsx
22
- import { CubeFormInstance } from '@cube-dev/ui-kit';
23
-
24
- const formInstance = new CubeFormInstance();
25
- ```
21
+ `CubeFormInstance` is exported as a type for wrapper props and references. Use the hook to create a React form; the package does not export its constructor as a runtime API.
26
22
 
27
23
  ## Field Management
28
24
 
@@ -295,7 +291,7 @@ type CubeFieldData<Name extends string, Value> = {
295
291
 
296
292
  ## Best Practices
297
293
 
298
- 1. **Always use the `useForm` hook** in React components rather than creating instances manually
294
+ 1. **For legacy forms, use the `useForm` hook** in React components rather than creating instances manually
299
295
  2. **Handle async validation errors** appropriately using try-catch blocks
300
296
  3. **Set initial values early** in the component lifecycle to avoid field state inconsistencies
301
297
  4. **Use dot notation** for nested object structures instead of managing complex object hierarchies manually