@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
@@ -1,4 +1,4 @@
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
  //#region src/utils/react/nullableValue.ts
3
3
  function castNullableStringValue(props) {
4
4
  return castNullableField(props, ["value", "defaultValue"], "string", (v) => String(v));
@@ -0,0 +1,58 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
+ //#region src/utils/react/programmaticFocus.ts
3
+ /**
4
+ * Telling focus the user moved from focus a component moved for them.
5
+ *
6
+ * Handing focus back to a trigger after its overlay closes is not the same
7
+ * event as a user tabbing onto that trigger, but the DOM cannot tell them
8
+ * apart: `.focus()` produces an ordinary focus event, and the modality is
9
+ * still "keyboard" from whatever the user just did, so anything keyed off
10
+ * focus-visible treats it as a deliberate arrival. A trigger's tooltip pops up
11
+ * unasked — and then absorbs the user's next `Escape` from its own
12
+ * document-level listener (CUB-4839).
13
+ *
14
+ * Two mechanisms, because restoration reaches us two ways:
15
+ *
16
+ * - `focusProgrammatically` for restores WE perform. `focus()` dispatches
17
+ * `focus`/`focusin` synchronously, so a flag set around the call is readable
18
+ * by every handler that runs for it and gone immediately afterwards. Exact,
19
+ * with no window to tune.
20
+ *
21
+ * - `markFocusRestoreWindow` for restores React Aria performs. A `FocusScope`
22
+ * restores on unmount, from inside React's own commit, and offers no hook to
23
+ * wrap — so an overlay that is closing declares the window instead. Coarser
24
+ * on purpose: it can only make a tooltip skip one arrival that lands while
25
+ * an overlay is going away, which is the case it exists for.
26
+ */
27
+ let depth = 0;
28
+ let restoreWindowEndsAt = 0;
29
+ /**
30
+ * Focus `element` without the UI reading it as the user arriving there.
31
+ */
32
+ function focusProgrammatically(element, options) {
33
+ if (!element) return;
34
+ depth++;
35
+ try {
36
+ element.focus(options);
37
+ } finally {
38
+ depth--;
39
+ }
40
+ }
41
+ /**
42
+ * Declare that focus is about to be restored by machinery we cannot wrap, for
43
+ * roughly `duration` ms. Called by a closing overlay.
44
+ */
45
+ function markFocusRestoreWindow(duration) {
46
+ restoreWindowEndsAt = Math.max(restoreWindowEndsAt, Date.now() + duration);
47
+ }
48
+ /**
49
+ * Whether the focus being handled right now is a restoration rather than the
50
+ * user arriving. Only meaningful inside a focus handler.
51
+ */
52
+ function isFocusRestoration() {
53
+ return depth > 0 || Date.now() < restoreWindowEndsAt;
54
+ }
55
+
56
+ //#endregion
57
+ export { focusProgrammatically, isFocusRestoration, markFocusRestoreWindow };
58
+ //# sourceMappingURL=programmaticFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programmaticFocus.js","names":[],"sources":["../../../src/utils/react/programmaticFocus.ts"],"sourcesContent":["/**\n * Telling focus the user moved from focus a component moved for them.\n *\n * Handing focus back to a trigger after its overlay closes is not the same\n * event as a user tabbing onto that trigger, but the DOM cannot tell them\n * apart: `.focus()` produces an ordinary focus event, and the modality is\n * still \"keyboard\" from whatever the user just did, so anything keyed off\n * focus-visible treats it as a deliberate arrival. A trigger's tooltip pops up\n * unasked — and then absorbs the user's next `Escape` from its own\n * document-level listener (CUB-4839).\n *\n * Two mechanisms, because restoration reaches us two ways:\n *\n * - `focusProgrammatically` for restores WE perform. `focus()` dispatches\n * `focus`/`focusin` synchronously, so a flag set around the call is readable\n * by every handler that runs for it and gone immediately afterwards. Exact,\n * with no window to tune.\n *\n * - `markFocusRestoreWindow` for restores React Aria performs. A `FocusScope`\n * restores on unmount, from inside React's own commit, and offers no hook to\n * wrap — so an overlay that is closing declares the window instead. Coarser\n * on purpose: it can only make a tooltip skip one arrival that lands while\n * an overlay is going away, which is the case it exists for.\n */\nlet depth = 0;\nlet restoreWindowEndsAt = 0;\n\n/**\n * Focus `element` without the UI reading it as the user arriving there.\n */\nexport function focusProgrammatically(\n element: HTMLElement | null | undefined,\n options?: FocusOptions,\n) {\n if (!element) return;\n\n depth++;\n\n try {\n element.focus(options);\n } finally {\n depth--;\n }\n}\n\n/**\n * Declare that focus is about to be restored by machinery we cannot wrap, for\n * roughly `duration` ms. Called by a closing overlay.\n */\nexport function markFocusRestoreWindow(duration: number) {\n restoreWindowEndsAt = Math.max(restoreWindowEndsAt, Date.now() + duration);\n}\n\n/**\n * Whether the focus being handled right now is a restoration rather than the\n * user arriving. Only meaningful inside a focus handler.\n */\nexport function isFocusRestoration() {\n return depth > 0 || Date.now() < restoreWindowEndsAt;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,IAAI,QAAQ;AACZ,IAAI,sBAAsB;;;;AAK1B,SAAgB,sBACd,SACA,SACA;AACA,KAAI,CAAC,QAAS;AAEd;AAEA,KAAI;AACF,UAAQ,MAAM,QAAQ;WACd;AACR;;;;;;;AAQJ,SAAgB,uBAAuB,UAAkB;AACvD,uBAAsB,KAAK,IAAI,qBAAqB,KAAK,KAAK,GAAG,SAAS;;;;;;AAO5E,SAAgB,qBAAqB;AACnC,QAAO,QAAQ,KAAK,KAAK,KAAK,GAAG"}
@@ -1,4 +1,4 @@
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
  //#region src/utils/react/resolveIcon.ts
3
3
  /**
4
4
  * Resolves a dynamic icon prop to its content and slot state.
@@ -1,4 +1,4 @@
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 { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { isDevEnv } from "../is-dev-env.js";
4
4
  import { useSyncExternalStore } from "react";
@@ -1,4 +1,4 @@
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 { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useCallback, useRef, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
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 { useEffect, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useCombinedRefs.ts
@@ -1,4 +1,4 @@
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 { createSharedStore } from "./sharedStore.js";
3
3
  import { useEffect } from "react";
4
4
  import { useFocusVisible } from "react-aria";
@@ -1,4 +1,4 @@
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 React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useEventBus.ts
@@ -1,4 +1,4 @@
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 { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { useSSRSafeId } from "@react-aria/ssr";
@@ -1,4 +1,4 @@
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 { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useIsDarwin.ts
@@ -1,4 +1,4 @@
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 { useIsDarwin } from "./useIsDarwin.js";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
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 * as React$1 from "react";
3
3
 
4
4
  //#region src/utils/react/useLayoutEffect.tsx
@@ -1,4 +1,4 @@
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 { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useCallback, useSyncExternalStore } from "react";
4
4
 
@@ -1,4 +1,4 @@
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 { mergeStyles } from "@tenphi/tasty";
3
3
  import { useMemo } from "react";
4
4
 
@@ -0,0 +1,41 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
+ import { useEvent } from "../../_internal/hooks/use-event.js";
3
+
4
+ //#region src/utils/react/useOverlayEscapeGuard.ts
5
+ /**
6
+ * Stops a CLOSED overlay from answering for `Escape` (CUB-4839).
7
+ *
8
+ * `useOverlay`'s `Escape` handler calls `stopPropagation()` and
9
+ * `preventDefault()` for every `Escape` it sees, and only THEN asks whether
10
+ * this overlay is the topmost one allowed to act on it — unlike
11
+ * `onInteractOutside`, which it gates on `isOpen` up front. An overlay that has
12
+ * already closed therefore consumes the key and does nothing with it, so the
13
+ * `Escape` meant for the Dialog around it closes nothing at all.
14
+ *
15
+ * That is reachable here because our overlays stay mounted for their exit
16
+ * transition while still holding DOM focus: pick an option from a list inside a
17
+ * Dialog and the very next `Escape` lands in the closing list.
18
+ *
19
+ * Passing `useOverlay` an `isKeyboardDismissDisabled` of its own does NOT work,
20
+ * and that is the reason this exists. `DisplayTransition` preserves content
21
+ * across an exit by replaying the children it stored while the overlay was
22
+ * open, so every value that subtree captured — `isKeyboardDismissDisabled`
23
+ * included — stays frozen at its open-state reading for exactly the window
24
+ * this has to guard. `useEvent` gets around it by returning a handler whose
25
+ * identity never changes while its body always runs the latest render's
26
+ * closure, so the frozen copy still sees the current `isOpen`.
27
+ */
28
+ function useOverlayEscapeGuard(overlayProps, isOpen) {
29
+ const onKeyDown = useEvent((event) => {
30
+ if (event.key === "Escape" && !isOpen) return;
31
+ overlayProps.onKeyDown?.(event);
32
+ });
33
+ return {
34
+ ...overlayProps,
35
+ onKeyDown
36
+ };
37
+ }
38
+
39
+ //#endregion
40
+ export { useOverlayEscapeGuard };
41
+ //# sourceMappingURL=useOverlayEscapeGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOverlayEscapeGuard.js","names":[],"sources":["../../../src/utils/react/useOverlayEscapeGuard.ts"],"sourcesContent":["import { useEvent } from '../../_internal';\n\nimport type { DOMAttributes, KeyboardEvent } from 'react';\n\ntype OverlayDOMProps = DOMAttributes<any>;\n\n/**\n * Stops a CLOSED overlay from answering for `Escape` (CUB-4839).\n *\n * `useOverlay`'s `Escape` handler calls `stopPropagation()` and\n * `preventDefault()` for every `Escape` it sees, and only THEN asks whether\n * this overlay is the topmost one allowed to act on it — unlike\n * `onInteractOutside`, which it gates on `isOpen` up front. An overlay that has\n * already closed therefore consumes the key and does nothing with it, so the\n * `Escape` meant for the Dialog around it closes nothing at all.\n *\n * That is reachable here because our overlays stay mounted for their exit\n * transition while still holding DOM focus: pick an option from a list inside a\n * Dialog and the very next `Escape` lands in the closing list.\n *\n * Passing `useOverlay` an `isKeyboardDismissDisabled` of its own does NOT work,\n * and that is the reason this exists. `DisplayTransition` preserves content\n * across an exit by replaying the children it stored while the overlay was\n * open, so every value that subtree captured — `isKeyboardDismissDisabled`\n * included — stays frozen at its open-state reading for exactly the window\n * this has to guard. `useEvent` gets around it by returning a handler whose\n * identity never changes while its body always runs the latest render's\n * closure, so the frozen copy still sees the current `isOpen`.\n */\nexport function useOverlayEscapeGuard<T extends OverlayDOMProps>(\n overlayProps: T,\n isOpen: boolean | undefined,\n): T {\n const onKeyDown = useEvent((event: KeyboardEvent<any>) => {\n // Decline it, so it reaches whoever can actually act on it.\n if (event.key === 'Escape' && !isOpen) return;\n\n overlayProps.onKeyDown?.(event);\n });\n\n return { ...overlayProps, onKeyDown };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,sBACd,cACA,QACG;CACH,MAAM,YAAY,UAAU,UAA8B;AAExD,MAAI,MAAM,QAAQ,YAAY,CAAC,OAAQ;AAEvC,eAAa,YAAY,MAAM;GAC/B;AAEF,QAAO;EAAE,GAAG;EAAc;EAAW"}
@@ -1,4 +1,4 @@
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 { EventBusContext, useEventBus } from "./useEventBus.js";
3
3
  import { useCallback, useContext, useEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
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
  //#region src/utils/react/useQaProps.ts
3
3
  /**
4
4
  * Processes QA props.
@@ -1,4 +1,4 @@
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 { useSyncExternalStore } from "react";
3
3
 
4
4
  //#region src/utils/react/useScheme.ts
@@ -1,4 +1,4 @@
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 { 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.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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.179.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.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,7 +1,7 @@
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
  //#region src/version.ts
3
- const VERSION = "0.179.0";
4
- const TASTY_VERSION = "3.9.1";
3
+ const VERSION = "0.181.0";
4
+ const TASTY_VERSION = "3.9.2";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
7
7
  const tastyVersion = TASTY_VERSION;
@@ -15,6 +15,10 @@ 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`, `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
+
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
+
18
22
  ## Core Concepts
19
23
 
20
24
  ### 1. Base Properties with `filterBaseProps`
@@ -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,42 +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
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.
473
476
 
474
- 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.
475
478
 
476
- - **Get/Set:** `getFieldValue`, `setFieldValue`, `getFieldsValue`, `setFieldsValue`, `getFormData`
477
- - **Validation:** `validateField`, `validateFields`, `resetFieldsValidation`
478
- - **State queries:** `isFieldValid`, `isFieldInvalid`, `isFieldTouched`, `isValid`, `isDirty`
479
- - **Errors:** `getFieldError`, `setFieldError`
479
+ ### Legacy forms
480
480
 
481
- ### Validation Rules
482
-
483
- Async rule-based system. Each rule is an object with one of these properties:
484
-
485
- | Rule | Description |
486
- | --- | --- |
487
- | `required` | Field must have a value |
488
- | `type` | Type check: `email`, `url`, `number`, `integer`, `date`, `hex`, etc. |
489
- | `pattern` | Regex pattern match |
490
- | `min` / `max` | Length or value constraints |
491
- | `enum` | List of allowed values |
492
- | `whitespace` | Must contain non-whitespace content |
493
- | `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.
494
482
 
495
- ### Field Integration
483
+ ### Shared field integration
496
484
 
497
- 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.
@@ -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.
@@ -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,7 +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
+
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.
8
+
9
+ ```tsx
10
+ function EmailForm() {
11
+ const form = Form.useController<{ email: string | null }>({
12
+ defaultValues: { email: null },
13
+ });
14
+
15
+ return (
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>
20
+ </Form>
21
+ );
22
+ }
23
+ ```
24
+
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.
26
+
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.
28
+
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.
6
30
 
7
31
  ## When to Use
8
32
 
@@ -536,7 +560,7 @@ export function ConfirmDeletionDialogForm({ name, onSubmit, onDismiss }) {
536
560
  - `defaultValues` instead of `initialValues`
537
561
  - `onSubmit` can return a promise — the form and submit button show loading state until the promise resolves
538
562
  - Arrays inside form data are not supported
539
- - `preserve` property is not yet implemented
563
+ - `preserve` is supported by modern controllers; it remains unimplemented in the legacy backend
540
564
  - The `Field` component is a virtual wrapper (does not render a DOM element)
541
565
  - Nested properties are handled via field names with `.` dot notation
542
566
  - Does not support `validating` state (but validation rules can be async)
@@ -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