@cube-dev/ui-kit 0.180.0 → 0.181.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/dist/CHANGELOG.md +14 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +3 -3
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/actions-run.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.js +2 -2
  59. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  60. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  61. package/dist/components/content/Layout/GridLayout.js +1 -1
  62. package/dist/components/content/Layout/Layout.js +1 -1
  63. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  65. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  66. package/dist/components/content/Layout/LayoutContent.js +1 -1
  67. package/dist/components/content/Layout/LayoutContext.js +1 -1
  68. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  69. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  70. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  71. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutPane.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanel.js +2 -2
  74. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  76. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  77. package/dist/components/content/Layout/index.js +1 -1
  78. package/dist/components/content/Layout/utils.js +1 -1
  79. package/dist/components/content/Paragraph.js +1 -1
  80. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  81. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  82. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  83. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  84. package/dist/components/content/Result/Result.js +1 -1
  85. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  86. package/dist/components/content/Tag/Tag.js +1 -1
  87. package/dist/components/content/Text.js +1 -1
  88. package/dist/components/content/TextItem/TextItem.js +1 -1
  89. package/dist/components/content/Title.js +1 -1
  90. package/dist/components/content/Tree/Tree.js +1 -1
  91. package/dist/components/content/Tree/TreeNode.js +1 -1
  92. package/dist/components/content/Tree/styled.js +1 -1
  93. package/dist/components/content/Tree/tree-index.js +1 -1
  94. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  95. package/dist/components/content/Tree/use-load-data.js +1 -1
  96. package/dist/components/content/highlightText.js +1 -1
  97. package/dist/components/content/use-auto-tooltip.js +1 -1
  98. package/dist/components/data/DataTable/DataTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  104. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  105. package/dist/components/data/TableBase/RowCollection.js +1 -1
  106. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  107. package/dist/components/data/TableBase/TableRow.js +1 -1
  108. package/dist/components/data/TableBase/TableView.js +1 -1
  109. package/dist/components/data/TableBase/column-menu.js +1 -1
  110. package/dist/components/data/TableBase/column-tint.js +1 -1
  111. package/dist/components/data/TableBase/row-menu.js +1 -1
  112. package/dist/components/data/TableBase/styled.js +1 -1
  113. package/dist/components/data/TableBase/table-tree.js +1 -1
  114. package/dist/components/data/TableBase/types.js +1 -1
  115. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  116. package/dist/components/data/TableBase/use-column-order.js +1 -1
  117. package/dist/components/data/TableBase/use-container-width.js +1 -1
  118. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  119. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  120. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  121. package/dist/components/data/TableBase/use-table-search.js +1 -1
  122. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  123. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  124. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  125. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  126. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  127. package/dist/components/fields/Checkbox/Checkbox.d.ts +3 -1
  128. package/dist/components/fields/Checkbox/Checkbox.js +4 -5
  129. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  130. package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -1
  131. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  132. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  133. package/dist/components/fields/Checkbox/context.js +1 -1
  134. package/dist/components/fields/ColorInput/ColorInput.d.ts +1 -1
  135. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  136. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  137. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +1 -1
  138. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  139. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  140. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  141. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +1 -1
  142. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  143. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  144. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -1
  145. package/dist/components/fields/ComboBox/ComboBox.js +8 -2
  146. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  147. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  148. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  149. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  150. package/dist/components/fields/DatePicker/DateInput.d.ts +1 -1
  151. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  152. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  153. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -1
  155. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  159. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  160. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  161. package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -1
  162. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  163. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  164. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +4 -1
  165. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  167. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  168. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  169. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  171. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -1
  173. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  174. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  175. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  178. package/dist/components/fields/DatePicker/period.js +1 -1
  179. package/dist/components/fields/DatePicker/props.js +1 -1
  180. package/dist/components/fields/DatePicker/utils.js +1 -1
  181. package/dist/components/fields/FileInput/FileInput.d.ts +4 -1
  182. package/dist/components/fields/FileInput/FileInput.js +38 -29
  183. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  184. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  185. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  186. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  187. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +1 -1
  188. package/dist/components/fields/FilterPicker/FilterPicker.js +8 -5
  189. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  190. package/dist/components/fields/Input/Input.js +1 -1
  191. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  192. package/dist/components/fields/ListBox/ListBox.d.ts +1 -1
  193. package/dist/components/fields/ListBox/ListBox.js +5 -3
  194. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  195. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  196. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  197. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  198. package/dist/components/fields/NumberInput/NumberInput.d.ts +3 -1
  199. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  200. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  201. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  202. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  203. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  204. package/dist/components/fields/Picker/Picker.js +8 -5
  205. package/dist/components/fields/Picker/Picker.js.map +1 -1
  206. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  207. package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -1
  208. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  209. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  210. package/dist/components/fields/RadioGroup/context.js +1 -1
  211. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  212. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  213. package/dist/components/fields/Select/Select.d.ts +1 -1
  214. package/dist/components/fields/Select/Select.js +16 -2
  215. package/dist/components/fields/Select/Select.js.map +1 -1
  216. package/dist/components/fields/Slider/Gradation.js +1 -1
  217. package/dist/components/fields/Slider/HueSlider.js +1 -1
  218. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  219. package/dist/components/fields/Slider/Slider.js +1 -1
  220. package/dist/components/fields/Slider/SliderBase.js +1 -1
  221. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  222. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  223. package/dist/components/fields/Slider/elements.js +1 -1
  224. package/dist/components/fields/Slider/index.js +1 -1
  225. package/dist/components/fields/Slider/types.d.ts +1 -1
  226. package/dist/components/fields/Switch/Switch.d.ts +3 -1
  227. package/dist/components/fields/Switch/Switch.js +1 -1
  228. package/dist/components/fields/Switch/Switch.js.map +1 -1
  229. package/dist/components/fields/TextArea/TextArea.d.ts +2 -0
  230. package/dist/components/fields/TextArea/TextArea.js +1 -1
  231. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  232. package/dist/components/fields/TextInput/TextInput.d.ts +4 -1
  233. package/dist/components/fields/TextInput/TextInput.js +1 -1
  234. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  235. package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -1
  236. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  237. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  238. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  239. package/dist/components/fields/TextInputMapper/TextInputMapper.d.ts +1 -1
  240. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  241. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  242. package/dist/components/fields/TriggerActions.js +1 -1
  243. package/dist/components/fields/color/ColorPanel.js +1 -1
  244. package/dist/components/fields/color/channels.js +1 -1
  245. package/dist/components/fields/color/color.js +1 -1
  246. package/dist/components/fields/color/context.js +1 -1
  247. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  248. package/dist/components/form/Form/Field.d.ts +2 -0
  249. package/dist/components/form/Form/Field.js +1 -1
  250. package/dist/components/form/Form/Field.js.map +1 -1
  251. package/dist/components/form/Form/Form.js +1 -1
  252. package/dist/components/form/Form/ModernFormRoot.d.ts +9 -4
  253. package/dist/components/form/Form/ModernFormRoot.js +13 -6
  254. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  255. package/dist/components/form/Form/ResetButton/ResetButton.d.ts +1 -1
  256. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  257. package/dist/components/form/Form/SubmitButton/SubmitButton.d.ts +3 -1
  258. package/dist/components/form/Form/SubmitButton/SubmitButton.js +2 -2
  259. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  260. package/dist/components/form/Form/SubmitError.d.ts +8 -2
  261. package/dist/components/form/Form/SubmitError.js +11 -4
  262. package/dist/components/form/Form/SubmitError.js.map +1 -1
  263. package/dist/components/form/Form/backend.js +1 -1
  264. package/dist/components/form/Form/index.d.ts +12 -8
  265. package/dist/components/form/Form/index.js +4 -2
  266. package/dist/components/form/Form/index.js.map +1 -1
  267. package/dist/components/form/Form/modern/actions.js +27 -9
  268. package/dist/components/form/Form/modern/actions.js.map +1 -1
  269. package/dist/components/form/Form/modern/context.d.ts +3 -0
  270. package/dist/components/form/Form/modern/context.js +1 -1
  271. package/dist/components/form/Form/modern/controller.d.ts +19 -8
  272. package/dist/components/form/Form/modern/controller.js +15 -4
  273. package/dist/components/form/Form/modern/controller.js.map +1 -1
  274. package/dist/components/form/Form/modern/field-binding.js +23 -5
  275. package/dist/components/form/Form/modern/field-binding.js.map +1 -1
  276. package/dist/components/form/Form/modern/field.d.ts +30 -0
  277. package/dist/components/form/Form/modern/field.js +23 -0
  278. package/dist/components/form/Form/modern/field.js.map +1 -0
  279. package/dist/components/form/Form/modern/path-types.d.ts +5 -1
  280. package/dist/components/form/Form/modern/react.d.ts +7 -2
  281. package/dist/components/form/Form/modern/react.js +21 -3
  282. package/dist/components/form/Form/modern/react.js.map +1 -1
  283. package/dist/components/form/Form/modern/read-types.d.ts +11 -0
  284. package/dist/components/form/Form/modern/store.js +82 -19
  285. package/dist/components/form/Form/modern/store.js.map +1 -1
  286. package/dist/components/form/Form/modern/types.d.ts +39 -23
  287. package/dist/components/form/Form/modern/validation.d.ts +2 -1
  288. package/dist/components/form/Form/modern/validation.js +4 -4
  289. package/dist/components/form/Form/modern/validation.js.map +1 -1
  290. package/dist/components/form/Form/modern/values.js +16 -2
  291. package/dist/components/form/Form/modern/values.js.map +1 -1
  292. package/dist/components/form/Form/use-field/types.d.ts +1 -1
  293. package/dist/components/form/Form/use-field/use-field-binding.js +12 -8
  294. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
  295. package/dist/components/form/Form/use-field/use-field-props.d.ts +3 -1
  296. package/dist/components/form/Form/use-field/use-field-props.js +16 -5
  297. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  298. package/dist/components/form/Form/use-field/use-field.d.ts +3 -1
  299. package/dist/components/form/Form/use-field/use-field.js +1 -1
  300. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  301. package/dist/components/form/Form/use-form.d.ts +1 -1
  302. package/dist/components/form/Form/use-form.js +1 -1
  303. package/dist/components/form/Form/validation.js +1 -1
  304. package/dist/components/form/Label.js +1 -1
  305. package/dist/components/form/index.d.ts +6 -5
  306. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  307. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  308. package/dist/components/form/validation/use-validation-props.js +1 -1
  309. package/dist/components/form/wrapper.js +1 -1
  310. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  311. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  312. package/dist/components/layout/Board/Board.js +1 -1
  313. package/dist/components/layout/Board/BoardProvider.js +1 -1
  314. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  315. package/dist/components/layout/Board/Widget.js +1 -1
  316. package/dist/components/layout/Board/WidgetHost.js +1 -1
  317. package/dist/components/layout/Board/board-context.js +1 -1
  318. package/dist/components/layout/Board/board-store.js +1 -1
  319. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  320. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  321. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  322. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  323. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  324. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  325. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  326. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  327. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  328. package/dist/components/layout/Board/index.js +1 -1
  329. package/dist/components/layout/Board/responsive-utils.js +1 -1
  330. package/dist/components/layout/Board/use-board-layout.js +1 -1
  331. package/dist/components/layout/Board/use-board-registry.js +1 -1
  332. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  333. package/dist/components/layout/Board/use-board-selection.js +1 -1
  334. package/dist/components/layout/Flex.js +1 -1
  335. package/dist/components/layout/Flow.js +1 -1
  336. package/dist/components/layout/Grid.js +1 -1
  337. package/dist/components/layout/Panel.js +1 -1
  338. package/dist/components/layout/Prefix.js +1 -1
  339. package/dist/components/layout/ResizablePanel.js +1 -1
  340. package/dist/components/layout/Space.js +1 -1
  341. package/dist/components/layout/Suffix.js +1 -1
  342. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  343. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  344. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  345. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  346. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  347. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  348. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  349. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  350. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  351. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  352. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  353. package/dist/components/navigation/Tabs/styled.js +1 -1
  354. package/dist/components/navigation/Tabs/types.js +1 -1
  355. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  356. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  357. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  358. package/dist/components/other/Calendar/Calendar.js +1 -1
  359. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  360. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  361. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  362. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  363. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  364. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  365. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  366. package/dist/components/other/Calendar/styled.js +1 -1
  367. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  368. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  369. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  370. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  371. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  372. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  373. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  374. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  375. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  376. package/dist/components/overlays/Dialog/context.js +1 -1
  377. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  378. package/dist/components/overlays/Modal/Modal.js +1 -1
  379. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  380. package/dist/components/overlays/Modal/Overlay.js +8 -2
  381. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  382. package/dist/components/overlays/Modal/Popover.js +4 -2
  383. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  384. package/dist/components/overlays/Modal/Tray.js +1 -1
  385. package/dist/components/overlays/Modal/Underlay.js +1 -1
  386. package/dist/components/overlays/Notifications/Notification.js +1 -1
  387. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  388. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  389. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  390. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  391. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  392. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  393. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  394. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  395. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  396. package/dist/components/overlays/Notifications/index.js +1 -1
  397. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  398. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  399. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  400. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  401. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  402. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  403. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  404. package/dist/components/overlays/Toast/index.js +1 -1
  405. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  406. package/dist/components/overlays/Toast/useToast.js +1 -1
  407. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  408. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  409. package/dist/components/overlays/Tooltip/TooltipTrigger.js +12 -2
  410. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  411. package/dist/components/overlays/Tooltip/context.js +1 -1
  412. package/dist/components/portal/Portal.js +1 -1
  413. package/dist/components/portal/PortalProvider.js +1 -1
  414. package/dist/components/portal/usePortal.js +1 -1
  415. package/dist/components/shared/DraggableCollection.js +1 -1
  416. package/dist/components/shared/InvalidIcon.js +1 -1
  417. package/dist/components/shared/ValidIcon.js +1 -1
  418. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  419. package/dist/components/status/Spin/Cube.js +1 -1
  420. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  421. package/dist/components/status/Spin/Spin.js +1 -1
  422. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  423. package/dist/data/item-themes.js +1 -1
  424. package/dist/data/themes.js +1 -1
  425. package/dist/eslint-plugin/defaults.generated.js +1 -1
  426. package/dist/eslint-plugin/index.js +1 -1
  427. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  428. package/dist/i18n/I18nProvider.js +1 -1
  429. package/dist/i18n/createFormatter.js +1 -1
  430. package/dist/i18n/index.js +1 -1
  431. package/dist/i18n/instance.js +1 -1
  432. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  433. package/dist/i18n/locales/en-US/uikit.js +1 -1
  434. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  435. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  436. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  437. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  438. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  439. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  440. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  441. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  442. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  443. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  444. package/dist/i18n/locales.js +1 -1
  445. package/dist/i18n/useFormatter.js +1 -1
  446. package/dist/i18n/useI18n.js +1 -1
  447. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  448. package/dist/icons/AdjustmentsIcon.js +1 -1
  449. package/dist/icons/AiIcon.js +1 -1
  450. package/dist/icons/AreaChartIcon.js +1 -1
  451. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  452. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  453. package/dist/icons/BackwardIcon.js +1 -1
  454. package/dist/icons/BarChartIcon.js +1 -1
  455. package/dist/icons/BellFilledIcon.js +1 -1
  456. package/dist/icons/BellIcon.js +1 -1
  457. package/dist/icons/BooleanIcon.js +1 -1
  458. package/dist/icons/CalendarEditIcon.js +1 -1
  459. package/dist/icons/CalendarIcon.js +1 -1
  460. package/dist/icons/CaretDownIcon.js +1 -1
  461. package/dist/icons/CaretUpIcon.js +1 -1
  462. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  463. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  464. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  465. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  466. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  467. package/dist/icons/ChartBarLineIcon.js +1 -1
  468. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  469. package/dist/icons/ChartBarStackedIcon.js +1 -1
  470. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  471. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  472. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  473. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  474. package/dist/icons/ChartBubbleIcon.js +1 -1
  475. package/dist/icons/ChartDonut2Icon.js +1 -1
  476. package/dist/icons/ChartFunnelIcon.js +1 -1
  477. package/dist/icons/ChartHeatmapIcon.js +1 -1
  478. package/dist/icons/ChartKPIIcon.js +1 -1
  479. package/dist/icons/ChartPie2Icon.js +1 -1
  480. package/dist/icons/ChartScatterIcon.js +1 -1
  481. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  482. package/dist/icons/CheckCircleIcon.js +1 -1
  483. package/dist/icons/CheckIcon.js +1 -1
  484. package/dist/icons/CircleFilledIcon.js +1 -1
  485. package/dist/icons/ClearIcon.js +1 -1
  486. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  487. package/dist/icons/CloseCircleIcon.js +1 -1
  488. package/dist/icons/CloseIcon.js +1 -1
  489. package/dist/icons/CodeIcon.js +1 -1
  490. package/dist/icons/ColumnTotalIcon.js +1 -1
  491. package/dist/icons/CopyIcon.js +1 -1
  492. package/dist/icons/CountIcon.js +1 -1
  493. package/dist/icons/CubeIcon.js +1 -1
  494. package/dist/icons/CubePauseIcon.js +1 -1
  495. package/dist/icons/CubePlayIcon.js +1 -1
  496. package/dist/icons/CurrencyDollarIcon.js +1 -1
  497. package/dist/icons/DangerIcon.js +1 -1
  498. package/dist/icons/DashboardIcon.js +1 -1
  499. package/dist/icons/DatabaseIcon.js +1 -1
  500. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  501. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  502. package/dist/icons/DirectionIcon.js +1 -1
  503. package/dist/icons/DonutIcon.js +1 -1
  504. package/dist/icons/DownIcon.js +1 -1
  505. package/dist/icons/EditIcon.js +1 -1
  506. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  507. package/dist/icons/ExclamationCircleIcon.js +1 -1
  508. package/dist/icons/ExclamationIcon.js +1 -1
  509. package/dist/icons/EyeIcon.js +1 -1
  510. package/dist/icons/EyeInvisibleIcon.js +1 -1
  511. package/dist/icons/FilterIcon.js +1 -1
  512. package/dist/icons/FolderFilledIcon.js +1 -1
  513. package/dist/icons/FolderIcon.js +1 -1
  514. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  515. package/dist/icons/FolderOpenIcon.js +1 -1
  516. package/dist/icons/ForwardIcon.js +1 -1
  517. package/dist/icons/GripVerticalIcon.js +1 -1
  518. package/dist/icons/HierarchyIcon.js +1 -1
  519. package/dist/icons/HierarchyOpenIcon.js +1 -1
  520. package/dist/icons/Icon.js +1 -1
  521. package/dist/icons/InfoCircleIcon.js +1 -1
  522. package/dist/icons/InfoIcon.js +1 -1
  523. package/dist/icons/KeyIcon.js +1 -1
  524. package/dist/icons/LeftIcon.js +1 -1
  525. package/dist/icons/LineChartIcon.js +1 -1
  526. package/dist/icons/LoadingIcon.js +1 -1
  527. package/dist/icons/LockFilledIcon.js +1 -1
  528. package/dist/icons/LockIcon.js +1 -1
  529. package/dist/icons/MoreIcon.js +1 -1
  530. package/dist/icons/NotAllowedIcon.js +1 -1
  531. package/dist/icons/Number123Icon.js +1 -1
  532. package/dist/icons/NumberIcon.js +1 -1
  533. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  534. package/dist/icons/PauseCircleIcon.js +1 -1
  535. package/dist/icons/PauseIcon.js +1 -1
  536. package/dist/icons/PercentageIcon.js +1 -1
  537. package/dist/icons/PieChartIcon.js +1 -1
  538. package/dist/icons/PipetteIcon.js +1 -1
  539. package/dist/icons/PlayCircleIcon.js +1 -1
  540. package/dist/icons/PlayIcon.js +1 -1
  541. package/dist/icons/PlusIcon.js +1 -1
  542. package/dist/icons/ProgressBarIcon.js +1 -1
  543. package/dist/icons/ReloadIcon.js +1 -1
  544. package/dist/icons/ReportIcon.js +1 -1
  545. package/dist/icons/ReturnIcon.js +1 -1
  546. package/dist/icons/RightIcon.js +1 -1
  547. package/dist/icons/RowTotalsIcon.js +1 -1
  548. package/dist/icons/SchemeIcon.js +1 -1
  549. package/dist/icons/SearchIcon.js +1 -1
  550. package/dist/icons/SemanticQueryIcon.js +1 -1
  551. package/dist/icons/SettingsIcon.js +1 -1
  552. package/dist/icons/ShieldFilledIcon.js +1 -1
  553. package/dist/icons/ShieldIcon.js +1 -1
  554. package/dist/icons/SlashIcon.js +1 -1
  555. package/dist/icons/SparklesIcon.js +1 -1
  556. package/dist/icons/SqlIcon.js +1 -1
  557. package/dist/icons/StatsIcon.js +1 -1
  558. package/dist/icons/StopIcon.js +1 -1
  559. package/dist/icons/StringIcon.js +1 -1
  560. package/dist/icons/SubtotalsIcon.js +1 -1
  561. package/dist/icons/SwitchIcon.js +1 -1
  562. package/dist/icons/TableIcon.js +1 -1
  563. package/dist/icons/ThumbsDownIcon.js +1 -1
  564. package/dist/icons/ThumbsUpIcon.js +1 -1
  565. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  566. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  567. package/dist/icons/ThunderboltIcon.js +1 -1
  568. package/dist/icons/TimeIcon.js +1 -1
  569. package/dist/icons/TrashIcon.js +1 -1
  570. package/dist/icons/UnlockIcon.js +1 -1
  571. package/dist/icons/UpIcon.js +1 -1
  572. package/dist/icons/UserGroupIcon.js +1 -1
  573. package/dist/icons/UserIcon.js +1 -1
  574. package/dist/icons/UserLockIcon.js +1 -1
  575. package/dist/icons/ViewIcon.js +1 -1
  576. package/dist/icons/WarningFilledIcon.js +1 -1
  577. package/dist/icons/WarningIcon.js +1 -1
  578. package/dist/icons/wrap-icon.js +1 -1
  579. package/dist/index.d.ts +7 -5
  580. package/dist/index.js +2 -2
  581. package/dist/probe/canonicalize.js +1 -1
  582. package/dist/probe/css.js +1 -1
  583. package/dist/probe/index.js +1 -1
  584. package/dist/provider.js +1 -1
  585. package/dist/providers/TrackingProvider.js +1 -1
  586. package/dist/providers/navigationAdapter.default.js +1 -1
  587. package/dist/shared/form.d.ts +13 -5
  588. package/dist/tokens/all-tokens.js +1 -1
  589. package/dist/tokens/base.js +1 -1
  590. package/dist/tokens/color-seed.js +1 -1
  591. package/dist/tokens/color-theme.js +1 -1
  592. package/dist/tokens/colors.js +1 -1
  593. package/dist/tokens/layout.js +1 -1
  594. package/dist/tokens/lazy-styles.js +1 -1
  595. package/dist/tokens/legacy-color.js +1 -1
  596. package/dist/tokens/palette-config.js +1 -1
  597. package/dist/tokens/palette.js +1 -1
  598. package/dist/tokens/resolve.js +1 -1
  599. package/dist/tokens/shadows.js +1 -1
  600. package/dist/tokens/sizes.js +1 -1
  601. package/dist/tokens/spacing.js +1 -1
  602. package/dist/tokens/typography.js +1 -1
  603. package/dist/utils/ResizeSensor.js +1 -1
  604. package/dist/utils/colors.js +1 -1
  605. package/dist/utils/dotize.js +1 -1
  606. package/dist/utils/is-dev-env.js +1 -1
  607. package/dist/utils/modules.js +1 -1
  608. package/dist/utils/promise.js +1 -1
  609. package/dist/utils/raf.js +1 -1
  610. package/dist/utils/random.js +1 -1
  611. package/dist/utils/range.js +1 -1
  612. package/dist/utils/react/RenderCache.js +1 -1
  613. package/dist/utils/react/Slots.js +1 -1
  614. package/dist/utils/react/chain.js +1 -1
  615. package/dist/utils/react/disabledProps.js +1 -1
  616. package/dist/utils/react/escapePropagation.js +39 -0
  617. package/dist/utils/react/escapePropagation.js.map +1 -0
  618. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  619. package/dist/utils/react/index.js +1 -1
  620. package/dist/utils/react/interactions.js +1 -1
  621. package/dist/utils/react/isTextOnly.js +1 -1
  622. package/dist/utils/react/mapProps.js +1 -1
  623. package/dist/utils/react/mergeProps.js +1 -1
  624. package/dist/utils/react/nullableValue.js +1 -1
  625. package/dist/utils/react/programmaticFocus.js +58 -0
  626. package/dist/utils/react/programmaticFocus.js.map +1 -0
  627. package/dist/utils/react/resolveIcon.js +1 -1
  628. package/dist/utils/react/sharedStore.js +1 -1
  629. package/dist/utils/react/useBufferedValue.js +1 -1
  630. package/dist/utils/react/useCombinedRefs.js +1 -1
  631. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  632. package/dist/utils/react/useEventBus.js +1 -1
  633. package/dist/utils/react/useId.js +1 -1
  634. package/dist/utils/react/useIsDarwin.js +1 -1
  635. package/dist/utils/react/useKeySymbols.js +1 -1
  636. package/dist/utils/react/useLayoutEffect.js +1 -1
  637. package/dist/utils/react/useLocalStorage.js +1 -1
  638. package/dist/utils/react/useMergeStyles.js +1 -1
  639. package/dist/utils/react/useOverlayEscapeGuard.js +41 -0
  640. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -0
  641. package/dist/utils/react/usePopoverSync.js +1 -1
  642. package/dist/utils/react/useQaProps.js +1 -1
  643. package/dist/utils/react/useScheme.js +1 -1
  644. package/dist/utils/react/useViewportSize.js +1 -1
  645. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  646. package/dist/utils/selection.js +1 -1
  647. package/dist/utils/styles.js +1 -1
  648. package/dist/utils/tree.js +1 -1
  649. package/dist/utils/warnings.js +1 -1
  650. package/dist/version.js +2 -2
  651. package/docs/CreateComponent.md +1 -1
  652. package/docs/FieldProperties.md +25 -13
  653. package/docs/Usage.md +17 -31
  654. package/docs/components/fields/FileInput.md +4 -0
  655. package/docs/components/form/Field.md +2 -2
  656. package/docs/components/form/Form.md +13 -39
  657. package/docs/components/form/FormInstance.md +5 -9
  658. package/docs/components/form/ModernForm.md +269 -0
  659. package/docs/modern-form-guide.md +269 -0
  660. package/docs/modern-form-migration.md +20 -59
  661. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  //#region src/utils/react/forwardRefWithGenerics.tsx
3
3
  /**
4
4
  * A helper for creating forwardRef components with generic types.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { getDisabledElementProps, omitActivationEventProps } from "./disabledProps.js";
4
4
  import { forwardRefWithGenerics } from "./forwardRefWithGenerics.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useState } from "react";
3
3
  import { useFocus, useFocusVisible } from "react-aria";
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.181.0 | Cube Dev Team */
2
2
  import { Children, isValidElement } from "react";
3
3
 
4
4
  //#region src/utils/react/isTextOnly.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  //#region src/utils/react/mapProps.ts
3
3
  /** Converts AriaButtonProps to CubeButtonProps */
4
4
  function ariaToCubeButtonProps(props) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { mergeIds } from "./useId.js";
4
4
  import { mergeStyles } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  //#region src/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.180.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.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { isDevEnv } from "../is-dev-env.js";
4
4
  import { useSyncExternalStore } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { 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.180.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.180.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.180.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.180.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.180.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.180.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.180.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.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useCallback, useSyncExternalStore } from "react";
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.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.180.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.180.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.180.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.180.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.180.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.180.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.180.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.180.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.180.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,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.180.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.181.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.180.0";
3
+ const VERSION = "0.181.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.
@@ -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,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