@cube-dev/ui-kit 0.0.0-canary-b59dbf7 → 0.0.0-canary-23d9994

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 (571) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.js +1 -1
  18. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  19. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  20. package/dist/components/actions/ButtonSplit/context.js +1 -1
  21. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  22. package/dist/components/actions/CommandMenu/styled.js +1 -1
  23. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  24. package/dist/components/actions/ItemActionContext.js +1 -1
  25. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/actions-run.js +1 -1
  37. package/dist/components/actions/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +1 -1
  41. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  42. package/dist/components/content/Alert/Alert.js +1 -1
  43. package/dist/components/content/Alert/use-alert.js +1 -1
  44. package/dist/components/content/Avatar/Avatar.js +1 -1
  45. package/dist/components/content/Badge/Badge.js +1 -1
  46. package/dist/components/content/Card/Card.js +1 -1
  47. package/dist/components/content/Content.js +1 -1
  48. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  49. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  50. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  51. package/dist/components/content/Divider.js +1 -1
  52. package/dist/components/content/Footer.js +1 -1
  53. package/dist/components/content/Header.js +1 -1
  54. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  55. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  56. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  57. package/dist/components/content/Item/Item.js +1 -1
  58. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  59. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  60. package/dist/components/content/Layout/GridLayout.js +1 -1
  61. package/dist/components/content/Layout/Layout.js +1 -1
  62. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  63. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  64. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  65. package/dist/components/content/Layout/LayoutContent.js +1 -1
  66. package/dist/components/content/Layout/LayoutContext.js +1 -1
  67. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  68. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  69. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  70. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  71. package/dist/components/content/Layout/LayoutPane.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  75. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  76. package/dist/components/content/Layout/index.js +1 -1
  77. package/dist/components/content/Layout/utils.js +1 -1
  78. package/dist/components/content/Paragraph.js +1 -1
  79. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  80. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  81. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  82. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  83. package/dist/components/content/Result/Result.js +1 -1
  84. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  85. package/dist/components/content/Tag/Tag.js +1 -1
  86. package/dist/components/content/Text.js +1 -1
  87. package/dist/components/content/TextItem/TextItem.js +1 -1
  88. package/dist/components/content/Title.js +1 -1
  89. package/dist/components/content/Tree/Tree.js +1 -1
  90. package/dist/components/content/Tree/TreeNode.js +1 -1
  91. package/dist/components/content/Tree/styled.js +1 -1
  92. package/dist/components/content/Tree/tree-index.js +1 -1
  93. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  94. package/dist/components/content/Tree/use-load-data.js +1 -1
  95. package/dist/components/content/highlightText.js +1 -1
  96. package/dist/components/content/use-auto-tooltip.js +1 -1
  97. package/dist/components/data/DataTable/DataTable.js +1 -1
  98. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  103. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  104. package/dist/components/data/TableBase/RowCollection.js +1 -1
  105. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  106. package/dist/components/data/TableBase/TableRow.js +1 -1
  107. package/dist/components/data/TableBase/TableView.js +1 -1
  108. package/dist/components/data/TableBase/column-menu.js +1 -1
  109. package/dist/components/data/TableBase/column-tint.js +1 -1
  110. package/dist/components/data/TableBase/row-menu.js +1 -1
  111. package/dist/components/data/TableBase/styled.js +1 -1
  112. package/dist/components/data/TableBase/table-tree.js +1 -1
  113. package/dist/components/data/TableBase/types.js +1 -1
  114. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  115. package/dist/components/data/TableBase/use-column-order.js +1 -1
  116. package/dist/components/data/TableBase/use-container-width.js +1 -1
  117. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  118. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  119. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  120. package/dist/components/data/TableBase/use-table-search.js +1 -1
  121. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  122. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  123. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  124. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  125. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  126. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  127. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  128. package/dist/components/fields/Checkbox/context.js +1 -1
  129. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  130. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  131. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  132. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  133. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  134. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  135. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  136. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  137. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  138. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  139. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  140. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  141. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  142. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  144. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  145. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  146. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  147. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  148. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  149. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  150. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  151. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  152. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  153. package/dist/components/fields/DatePicker/period.js +1 -1
  154. package/dist/components/fields/DatePicker/props.js +1 -1
  155. package/dist/components/fields/DatePicker/utils.js +1 -1
  156. package/dist/components/fields/FileInput/FileInput.js +1 -1
  157. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  158. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  159. package/dist/components/fields/Input/Input.js +1 -1
  160. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  161. package/dist/components/fields/ListBox/ListBox.js +1 -1
  162. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  163. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  164. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  165. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  166. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  167. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  168. package/dist/components/fields/Picker/Picker.js +1 -1
  169. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  170. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  171. package/dist/components/fields/RadioGroup/context.js +1 -1
  172. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  173. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  174. package/dist/components/fields/Select/Select.js +1 -1
  175. package/dist/components/fields/Slider/Gradation.js +1 -1
  176. package/dist/components/fields/Slider/HueSlider.js +1 -1
  177. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  178. package/dist/components/fields/Slider/Slider.js +1 -1
  179. package/dist/components/fields/Slider/SliderBase.js +1 -1
  180. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  181. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  182. package/dist/components/fields/Slider/elements.js +1 -1
  183. package/dist/components/fields/Slider/index.js +1 -1
  184. package/dist/components/fields/Switch/Switch.js +1 -1
  185. package/dist/components/fields/TextArea/TextArea.js +1 -1
  186. package/dist/components/fields/TextInput/TextInput.js +1 -1
  187. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  188. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  189. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  190. package/dist/components/fields/TriggerActions.js +1 -1
  191. package/dist/components/fields/color/ColorPanel.js +1 -1
  192. package/dist/components/fields/color/channels.js +1 -1
  193. package/dist/components/fields/color/color.js +1 -1
  194. package/dist/components/fields/color/context.js +1 -1
  195. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  196. package/dist/components/form/Form/Field.js +1 -1
  197. package/dist/components/form/Form/Form.d.ts +2 -1
  198. package/dist/components/form/Form/Form.js +29 -21
  199. package/dist/components/form/Form/Form.js.map +1 -1
  200. package/dist/components/form/Form/ModernFormRoot.d.ts +17 -0
  201. package/dist/components/form/Form/ModernFormRoot.js +71 -11
  202. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  203. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  204. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  205. package/dist/components/form/Form/SubmitError.js +1 -1
  206. package/dist/components/form/Form/backend.d.ts +8 -4
  207. package/dist/components/form/Form/backend.js +4 -5
  208. package/dist/components/form/Form/backend.js.map +1 -1
  209. package/dist/components/form/Form/index.d.ts +14 -0
  210. package/dist/components/form/Form/index.js +7 -1
  211. package/dist/components/form/Form/index.js.map +1 -1
  212. package/dist/components/form/Form/modern/context.d.ts +9 -0
  213. package/dist/components/form/Form/modern/context.js +14 -0
  214. package/dist/components/form/Form/modern/context.js.map +1 -0
  215. package/dist/components/form/Form/modern/controller.d.ts +13 -0
  216. package/dist/components/form/Form/modern/controller.js +45 -0
  217. package/dist/components/form/Form/modern/controller.js.map +1 -0
  218. package/dist/components/form/Form/modern/react.d.ts +21 -0
  219. package/dist/components/form/Form/modern/react.js +27 -0
  220. package/dist/components/form/Form/modern/react.js.map +1 -0
  221. package/dist/components/form/Form/modern/store.js +572 -0
  222. package/dist/components/form/Form/modern/store.js.map +1 -0
  223. package/dist/components/form/Form/modern/types.d.ts +115 -0
  224. package/dist/components/form/Form/modern/values.d.ts +7 -0
  225. package/dist/components/form/Form/modern/values.js +144 -0
  226. package/dist/components/form/Form/modern/values.js.map +1 -0
  227. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  228. package/dist/components/form/Form/use-field/use-field.js +1 -1
  229. package/dist/components/form/Form/use-form.js +1 -1
  230. package/dist/components/form/Form/validation.js +1 -1
  231. package/dist/components/form/Label.js +1 -1
  232. package/dist/components/form/index.d.ts +5 -0
  233. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  234. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  235. package/dist/components/form/validation/use-validation-props.js +1 -1
  236. package/dist/components/form/wrapper.js +1 -1
  237. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  238. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  239. package/dist/components/layout/Board/Board.js +1 -1
  240. package/dist/components/layout/Board/BoardProvider.js +1 -1
  241. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  242. package/dist/components/layout/Board/Widget.js +1 -1
  243. package/dist/components/layout/Board/WidgetHost.js +1 -1
  244. package/dist/components/layout/Board/board-context.js +1 -1
  245. package/dist/components/layout/Board/board-store.js +1 -1
  246. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  247. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  248. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  249. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  250. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  251. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  252. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  253. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  254. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  255. package/dist/components/layout/Board/index.js +1 -1
  256. package/dist/components/layout/Board/responsive-utils.js +1 -1
  257. package/dist/components/layout/Board/use-board-layout.js +1 -1
  258. package/dist/components/layout/Board/use-board-registry.js +1 -1
  259. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  260. package/dist/components/layout/Board/use-board-selection.js +1 -1
  261. package/dist/components/layout/Flex.js +1 -1
  262. package/dist/components/layout/Flow.js +1 -1
  263. package/dist/components/layout/Grid.js +1 -1
  264. package/dist/components/layout/Panel.js +1 -1
  265. package/dist/components/layout/Prefix.js +1 -1
  266. package/dist/components/layout/ResizablePanel.js +1 -1
  267. package/dist/components/layout/Space.js +1 -1
  268. package/dist/components/layout/Suffix.js +1 -1
  269. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  270. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  271. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  272. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  273. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  274. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  275. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  276. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  277. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  278. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  279. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  280. package/dist/components/navigation/Tabs/styled.js +1 -1
  281. package/dist/components/navigation/Tabs/types.js +1 -1
  282. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  283. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  284. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  285. package/dist/components/other/Calendar/Calendar.js +1 -1
  286. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  287. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  288. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  289. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  290. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  291. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  292. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  293. package/dist/components/other/Calendar/styled.js +1 -1
  294. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  295. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  296. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  297. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  298. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  299. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  300. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  301. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  302. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  303. package/dist/components/overlays/Dialog/context.js +1 -1
  304. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  305. package/dist/components/overlays/Modal/Modal.js +1 -1
  306. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  307. package/dist/components/overlays/Modal/Overlay.js +1 -1
  308. package/dist/components/overlays/Modal/Popover.js +1 -1
  309. package/dist/components/overlays/Modal/Tray.js +1 -1
  310. package/dist/components/overlays/Modal/Underlay.js +1 -1
  311. package/dist/components/overlays/Notifications/Notification.js +1 -1
  312. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  313. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  314. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  315. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  316. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  317. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  318. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  319. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  320. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  321. package/dist/components/overlays/Notifications/index.js +1 -1
  322. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  323. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  324. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  325. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  326. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  327. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  328. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  329. package/dist/components/overlays/Toast/index.js +1 -1
  330. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  331. package/dist/components/overlays/Toast/useToast.js +1 -1
  332. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  333. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  334. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  335. package/dist/components/overlays/Tooltip/context.js +1 -1
  336. package/dist/components/portal/Portal.js +1 -1
  337. package/dist/components/portal/PortalProvider.js +1 -1
  338. package/dist/components/portal/usePortal.js +1 -1
  339. package/dist/components/shared/DraggableCollection.js +1 -1
  340. package/dist/components/shared/InvalidIcon.js +1 -1
  341. package/dist/components/shared/ValidIcon.js +1 -1
  342. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  343. package/dist/components/status/Spin/Cube.js +1 -1
  344. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  345. package/dist/components/status/Spin/Spin.js +1 -1
  346. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  347. package/dist/data/item-themes.js +1 -1
  348. package/dist/data/themes.js +1 -1
  349. package/dist/eslint-plugin/defaults.generated.js +1 -1
  350. package/dist/eslint-plugin/index.js +1 -1
  351. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  352. package/dist/i18n/I18nProvider.js +1 -1
  353. package/dist/i18n/createFormatter.js +1 -1
  354. package/dist/i18n/index.js +1 -1
  355. package/dist/i18n/instance.js +1 -1
  356. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  357. package/dist/i18n/locales/en-US/uikit.js +1 -1
  358. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  359. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  360. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  361. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  362. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  363. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  364. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  365. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  366. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  367. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  368. package/dist/i18n/locales.js +1 -1
  369. package/dist/i18n/useFormatter.js +1 -1
  370. package/dist/i18n/useI18n.js +1 -1
  371. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  372. package/dist/icons/AdjustmentsIcon.js +1 -1
  373. package/dist/icons/AiIcon.js +1 -1
  374. package/dist/icons/AreaChartIcon.js +1 -1
  375. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  376. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  377. package/dist/icons/BackwardIcon.js +1 -1
  378. package/dist/icons/BarChartIcon.js +1 -1
  379. package/dist/icons/BellFilledIcon.js +1 -1
  380. package/dist/icons/BellIcon.js +1 -1
  381. package/dist/icons/BooleanIcon.js +1 -1
  382. package/dist/icons/CalendarEditIcon.js +1 -1
  383. package/dist/icons/CalendarIcon.js +1 -1
  384. package/dist/icons/CaretDownIcon.js +1 -1
  385. package/dist/icons/CaretUpIcon.js +1 -1
  386. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  387. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  388. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  389. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  390. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  391. package/dist/icons/ChartBarLineIcon.js +1 -1
  392. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  393. package/dist/icons/ChartBarStackedIcon.js +1 -1
  394. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  395. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  396. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  397. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  398. package/dist/icons/ChartBubbleIcon.js +1 -1
  399. package/dist/icons/ChartDonut2Icon.js +1 -1
  400. package/dist/icons/ChartFunnelIcon.js +1 -1
  401. package/dist/icons/ChartHeatmapIcon.js +1 -1
  402. package/dist/icons/ChartKPIIcon.js +1 -1
  403. package/dist/icons/ChartPie2Icon.js +1 -1
  404. package/dist/icons/ChartScatterIcon.js +1 -1
  405. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  406. package/dist/icons/CheckCircleIcon.js +1 -1
  407. package/dist/icons/CheckIcon.js +1 -1
  408. package/dist/icons/CircleFilledIcon.js +1 -1
  409. package/dist/icons/ClearIcon.js +1 -1
  410. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  411. package/dist/icons/CloseCircleIcon.js +1 -1
  412. package/dist/icons/CloseIcon.js +1 -1
  413. package/dist/icons/CodeIcon.js +1 -1
  414. package/dist/icons/ColumnTotalIcon.js +1 -1
  415. package/dist/icons/CopyIcon.js +1 -1
  416. package/dist/icons/CountIcon.js +1 -1
  417. package/dist/icons/CubeIcon.js +1 -1
  418. package/dist/icons/CubePauseIcon.js +1 -1
  419. package/dist/icons/CubePlayIcon.js +1 -1
  420. package/dist/icons/CurrencyDollarIcon.js +1 -1
  421. package/dist/icons/DangerIcon.js +1 -1
  422. package/dist/icons/DashboardIcon.js +1 -1
  423. package/dist/icons/DatabaseIcon.js +1 -1
  424. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  425. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  426. package/dist/icons/DirectionIcon.js +1 -1
  427. package/dist/icons/DonutIcon.js +1 -1
  428. package/dist/icons/DownIcon.js +1 -1
  429. package/dist/icons/EditIcon.js +1 -1
  430. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  431. package/dist/icons/ExclamationCircleIcon.js +1 -1
  432. package/dist/icons/ExclamationIcon.js +1 -1
  433. package/dist/icons/EyeIcon.js +1 -1
  434. package/dist/icons/EyeInvisibleIcon.js +1 -1
  435. package/dist/icons/FilterIcon.js +1 -1
  436. package/dist/icons/FolderFilledIcon.js +1 -1
  437. package/dist/icons/FolderIcon.js +1 -1
  438. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  439. package/dist/icons/FolderOpenIcon.js +1 -1
  440. package/dist/icons/ForwardIcon.js +1 -1
  441. package/dist/icons/GripVerticalIcon.js +1 -1
  442. package/dist/icons/HierarchyIcon.js +1 -1
  443. package/dist/icons/HierarchyOpenIcon.js +1 -1
  444. package/dist/icons/Icon.js +1 -1
  445. package/dist/icons/InfoCircleIcon.js +1 -1
  446. package/dist/icons/InfoIcon.js +1 -1
  447. package/dist/icons/KeyIcon.js +1 -1
  448. package/dist/icons/LeftIcon.js +1 -1
  449. package/dist/icons/LineChartIcon.js +1 -1
  450. package/dist/icons/LoadingIcon.js +1 -1
  451. package/dist/icons/LockFilledIcon.js +1 -1
  452. package/dist/icons/LockIcon.js +1 -1
  453. package/dist/icons/MoreIcon.js +1 -1
  454. package/dist/icons/NotAllowedIcon.js +1 -1
  455. package/dist/icons/Number123Icon.js +1 -1
  456. package/dist/icons/NumberIcon.js +1 -1
  457. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  458. package/dist/icons/PauseCircleIcon.js +1 -1
  459. package/dist/icons/PauseIcon.js +1 -1
  460. package/dist/icons/PercentageIcon.js +1 -1
  461. package/dist/icons/PieChartIcon.js +1 -1
  462. package/dist/icons/PipetteIcon.js +1 -1
  463. package/dist/icons/PlayCircleIcon.js +1 -1
  464. package/dist/icons/PlayIcon.js +1 -1
  465. package/dist/icons/PlusIcon.js +1 -1
  466. package/dist/icons/ProgressBarIcon.js +1 -1
  467. package/dist/icons/ReloadIcon.js +1 -1
  468. package/dist/icons/ReportIcon.js +1 -1
  469. package/dist/icons/ReturnIcon.js +1 -1
  470. package/dist/icons/RightIcon.js +1 -1
  471. package/dist/icons/RowTotalsIcon.js +1 -1
  472. package/dist/icons/SchemeIcon.js +1 -1
  473. package/dist/icons/SearchIcon.js +1 -1
  474. package/dist/icons/SemanticQueryIcon.js +1 -1
  475. package/dist/icons/SettingsIcon.js +1 -1
  476. package/dist/icons/ShieldFilledIcon.js +1 -1
  477. package/dist/icons/ShieldIcon.js +1 -1
  478. package/dist/icons/SlashIcon.js +1 -1
  479. package/dist/icons/SparklesIcon.js +1 -1
  480. package/dist/icons/SqlIcon.js +1 -1
  481. package/dist/icons/StatsIcon.js +1 -1
  482. package/dist/icons/StopIcon.js +1 -1
  483. package/dist/icons/StringIcon.js +1 -1
  484. package/dist/icons/SubtotalsIcon.js +1 -1
  485. package/dist/icons/SwitchIcon.js +1 -1
  486. package/dist/icons/TableIcon.js +1 -1
  487. package/dist/icons/ThumbsDownIcon.js +1 -1
  488. package/dist/icons/ThumbsUpIcon.js +1 -1
  489. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  490. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  491. package/dist/icons/ThunderboltIcon.js +1 -1
  492. package/dist/icons/TimeIcon.js +1 -1
  493. package/dist/icons/TrashIcon.js +1 -1
  494. package/dist/icons/UnlockIcon.js +1 -1
  495. package/dist/icons/UpIcon.js +1 -1
  496. package/dist/icons/UserGroupIcon.js +1 -1
  497. package/dist/icons/UserIcon.js +1 -1
  498. package/dist/icons/UserLockIcon.js +1 -1
  499. package/dist/icons/ViewIcon.js +1 -1
  500. package/dist/icons/WarningFilledIcon.js +1 -1
  501. package/dist/icons/WarningIcon.js +1 -1
  502. package/dist/icons/wrap-icon.js +1 -1
  503. package/dist/index.d.ts +6 -1
  504. package/dist/index.js +1 -1
  505. package/dist/probe/canonicalize.js +1 -1
  506. package/dist/probe/css.js +1 -1
  507. package/dist/probe/index.js +1 -1
  508. package/dist/provider.js +1 -1
  509. package/dist/providers/TrackingProvider.js +1 -1
  510. package/dist/providers/navigationAdapter.default.js +1 -1
  511. package/dist/tokens/all-tokens.js +1 -1
  512. package/dist/tokens/base.js +1 -1
  513. package/dist/tokens/color-seed.js +1 -1
  514. package/dist/tokens/color-theme.js +1 -1
  515. package/dist/tokens/colors.js +1 -1
  516. package/dist/tokens/layout.js +1 -1
  517. package/dist/tokens/lazy-styles.js +1 -1
  518. package/dist/tokens/legacy-color.js +1 -1
  519. package/dist/tokens/palette-config.js +1 -1
  520. package/dist/tokens/palette.js +1 -1
  521. package/dist/tokens/resolve.js +1 -1
  522. package/dist/tokens/shadows.js +1 -1
  523. package/dist/tokens/sizes.js +1 -1
  524. package/dist/tokens/spacing.js +1 -1
  525. package/dist/tokens/typography.js +1 -1
  526. package/dist/utils/ResizeSensor.js +1 -1
  527. package/dist/utils/colors.js +1 -1
  528. package/dist/utils/dotize.js +1 -1
  529. package/dist/utils/is-dev-env.js +1 -1
  530. package/dist/utils/modules.js +1 -1
  531. package/dist/utils/promise.js +1 -1
  532. package/dist/utils/raf.js +1 -1
  533. package/dist/utils/random.js +1 -1
  534. package/dist/utils/range.js +1 -1
  535. package/dist/utils/react/RenderCache.js +1 -1
  536. package/dist/utils/react/Slots.js +1 -1
  537. package/dist/utils/react/chain.js +1 -1
  538. package/dist/utils/react/disabledProps.js +1 -1
  539. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  540. package/dist/utils/react/index.js +1 -1
  541. package/dist/utils/react/interactions.js +1 -1
  542. package/dist/utils/react/isTextOnly.js +1 -1
  543. package/dist/utils/react/mapProps.js +1 -1
  544. package/dist/utils/react/mergeProps.js +1 -1
  545. package/dist/utils/react/nullableValue.js +1 -1
  546. package/dist/utils/react/resolveIcon.js +1 -1
  547. package/dist/utils/react/sharedStore.js +1 -1
  548. package/dist/utils/react/useBufferedValue.js +1 -1
  549. package/dist/utils/react/useCombinedRefs.js +1 -1
  550. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  551. package/dist/utils/react/useEventBus.js +1 -1
  552. package/dist/utils/react/useId.js +1 -1
  553. package/dist/utils/react/useIsDarwin.js +1 -1
  554. package/dist/utils/react/useKeySymbols.js +1 -1
  555. package/dist/utils/react/useLayoutEffect.js +1 -1
  556. package/dist/utils/react/useLocalStorage.js +1 -1
  557. package/dist/utils/react/useMergeStyles.js +1 -1
  558. package/dist/utils/react/usePopoverSync.js +1 -1
  559. package/dist/utils/react/useQaProps.js +1 -1
  560. package/dist/utils/react/useScheme.js +1 -1
  561. package/dist/utils/react/useViewportSize.js +1 -1
  562. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  563. package/dist/utils/selection.js +1 -1
  564. package/dist/utils/styles.js +1 -1
  565. package/dist/utils/tree.js +1 -1
  566. package/dist/utils/warnings.js +1 -1
  567. package/dist/version.js +2 -2
  568. package/docs/CreateComponent.md +2 -0
  569. package/docs/Usage.md +2 -0
  570. package/docs/components/form/Form.md +31 -0
  571. package/package.json +4 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b59dbf7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
2
  import { useProviderProps } from "../../../../provider.js";
3
3
  import { Button } from "../../../actions/Button/Button.js";
4
4
  import { useFormProps } from "../Form.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b59dbf7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { FormContext } from "./Form.js";
4
4
  import { Alert } from "../../content/Alert/Alert.js";
@@ -1,4 +1,6 @@
1
1
 
2
+ import { FormController } from "./modern/controller.js";
3
+
2
4
  //#region src/components/form/Form/backend.d.ts
3
5
  /**
4
6
  * Nominal branding for the two Form backends (modernization plan §5.1).
@@ -8,14 +10,16 @@
8
10
  * kind, the `<Form>` facade dispatches on it before any backend hook runs, and
9
11
  * the legacy field adapter refuses a controller it cannot bind.
10
12
  *
11
- * Phase 3 ships the shell only. No modern creator is exported, so a modern
12
- * controller cannot be constructed by consumers yet; every modern branch ends
13
- * in `modernBackendUnavailableError` until the modern backend lands.
13
+ * The modern creator and selectors are available. Field binding and submission
14
+ * orchestration remain separate migration phases.
14
15
  */
15
16
  declare const FORM_BACKEND: unique symbol;
16
17
  interface LegacyFormBrand {
17
18
  readonly [FORM_BACKEND]: 'legacy';
18
19
  }
20
+ interface ModernFormBrand {
21
+ readonly [FORM_BACKEND]: 'modern';
22
+ }
19
23
  //#endregion
20
- export { FORM_BACKEND, LegacyFormBrand };
24
+ export { FORM_BACKEND, LegacyFormBrand, ModernFormBrand };
21
25
  //# sourceMappingURL=backend.d.ts.map
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b59dbf7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
2
  //#region src/components/form/Form/backend.ts
3
3
  /**
4
4
  * Nominal branding for the two Form backends (modernization plan §5.1).
@@ -8,9 +8,8 @@
8
8
  * kind, the `<Form>` facade dispatches on it before any backend hook runs, and
9
9
  * the legacy field adapter refuses a controller it cannot bind.
10
10
  *
11
- * Phase 3 ships the shell only. No modern creator is exported, so a modern
12
- * controller cannot be constructed by consumers yet; every modern branch ends
13
- * in `modernBackendUnavailableError` until the modern backend lands.
11
+ * The modern creator and selectors are available. Field binding and submission
12
+ * orchestration remain separate migration phases.
14
13
  */
15
14
  const FORM_BACKEND = Symbol.for("@cube-dev/ui-kit/form-backend");
16
15
  /**
@@ -23,7 +22,7 @@ function isModernFormController(value) {
23
22
  return !!value && typeof value === "object" && value[FORM_BACKEND] === "modern";
24
23
  }
25
24
  function modernBackendUnavailableError(receiver) {
26
- return /* @__PURE__ */ new Error(`${receiver} received a modern form controller, but the modern Form backend is not available in this version of @cube-dev/ui-kit. Create forms with Form.useForm() for now.`);
25
+ return /* @__PURE__ */ new Error(`${receiver} received a modern form controller, but this legacy API does not support modern controllers. Modern input binding is not available yet; use Form.useForm() for bound inputs.`);
27
26
  }
28
27
 
29
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","names":[],"sources":["../../../../src/components/form/Form/backend.ts"],"sourcesContent":["/**\n * Nominal branding for the two Form backends (modernization plan §5.1).\n *\n * The legacy engine (`CubeFormInstance`) and the modern controller are not\n * structurally interchangeable: each carries this symbol with its backend\n * kind, the `<Form>` facade dispatches on it before any backend hook runs, and\n * the legacy field adapter refuses a controller it cannot bind.\n *\n * Phase 3 ships the shell only. No modern creator is exported, so a modern\n * controller cannot be constructed by consumers yet; every modern branch ends\n * in `modernBackendUnavailableError` until the modern backend lands.\n */\nexport const FORM_BACKEND: unique symbol = Symbol.for(\n '@cube-dev/ui-kit/form-backend',\n);\n\nexport interface LegacyFormBrand {\n readonly [FORM_BACKEND]: 'legacy';\n}\n\nexport interface ModernFormBrand {\n readonly [FORM_BACKEND]: 'modern';\n}\n\n/**\n * The modern controller as the shell knows it: the brand and nothing else.\n * The store, selectors, commands and the values type parameter arrive with\n * the modern backend.\n */\nexport type FormController = ModernFormBrand;\n\n/**\n * Only a modern brand is ever checked. Anything else — a branded legacy\n * instance, but also an unbranded object — counts as legacy on purpose: Cloud\n * narrows form props to structural types and its tests pass plain mocks, and\n * the legacy engine has always accepted them.\n */\nexport function isModernFormController(\n value: unknown,\n): value is FormController {\n return (\n !!value &&\n typeof value === 'object' &&\n (value as Record<PropertyKey, unknown>)[FORM_BACKEND] === 'modern'\n );\n}\n\nexport function modernBackendUnavailableError(receiver: string): Error {\n return new Error(\n `${receiver} received a modern form controller, but the modern Form backend is not available in this version of @cube-dev/ui-kit. Create forms with Form.useForm() for now.`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAYA,MAAa,eAA8B,OAAO,IAChD,gCACD;;;;;;;AAuBD,SAAgB,uBACd,OACyB;AACzB,QACE,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAAuC,kBAAkB;;AAI9D,SAAgB,8BAA8B,UAAyB;AACrE,wBAAO,IAAI,MACT,GAAG,SAAS,iKACb"}
1
+ {"version":3,"file":"backend.js","names":[],"sources":["../../../../src/components/form/Form/backend.ts"],"sourcesContent":["/**\n * Nominal branding for the two Form backends (modernization plan §5.1).\n *\n * The legacy engine (`CubeFormInstance`) and the modern controller are not\n * structurally interchangeable: each carries this symbol with its backend\n * kind, the `<Form>` facade dispatches on it before any backend hook runs, and\n * the legacy field adapter refuses a controller it cannot bind.\n *\n * The modern creator and selectors are available. Field binding and submission\n * orchestration remain separate migration phases.\n */\nexport const FORM_BACKEND: unique symbol = Symbol.for(\n '@cube-dev/ui-kit/form-backend',\n);\n\nexport interface LegacyFormBrand {\n readonly [FORM_BACKEND]: 'legacy';\n}\n\nexport interface ModernFormBrand {\n readonly [FORM_BACKEND]: 'modern';\n}\n\nexport type { FormController } from './modern/controller';\n\n/**\n * Only a modern brand is ever checked. Anything else — a branded legacy\n * instance, but also an unbranded object — counts as legacy on purpose: Cloud\n * narrows form props to structural types and its tests pass plain mocks, and\n * the legacy engine has always accepted them.\n */\nexport function isModernFormController(\n value: unknown,\n): value is ModernFormBrand {\n return (\n !!value &&\n typeof value === 'object' &&\n (value as Record<PropertyKey, unknown>)[FORM_BACKEND] === 'modern'\n );\n}\n\nexport function modernBackendUnavailableError(receiver: string): Error {\n return new Error(\n `${receiver} received a modern form controller, but this legacy API does not support modern controllers. Modern input binding is not available yet; use Form.useForm() for bound inputs.`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAWA,MAAa,eAA8B,OAAO,IAChD,gCACD;;;;;;;AAkBD,SAAgB,uBACd,OAC0B;AAC1B,QACE,CAAC,CAAC,SACF,OAAO,UAAU,YAChB,MAAuC,kBAAkB;;AAI9D,SAAgB,8BAA8B,UAAyB;AACrE,wBAAO,IAAI,MACT,GAAG,SAAS,8KACb"}
@@ -1,6 +1,10 @@
1
1
 
2
2
  import { FieldTypes, Fields } from "./types.js";
3
+ import { FormPath } from "./modern/values.js";
4
+ import { FormChange, SetValueOptions } from "./modern/types.js";
5
+ import { FormController, ModernFormState, UseFormControllerOptions } from "./modern/controller.js";
3
6
  import { CubeFormInstance, useForm } from "./use-form.js";
7
+ import { ModernFormProps } from "./ModernFormRoot.js";
4
8
  import { CubeFormProps, FormContext, FormRootComponent, FormScopeMask, useFormProps } from "./Form.js";
5
9
  import { CubeSubmitButtonProps, _SubmitButton } from "./SubmitButton/SubmitButton.js";
6
10
  import "./SubmitButton/index.js";
@@ -9,6 +13,8 @@ import "./ResetButton/index.js";
9
13
  import { CubeAlertProps } from "../../content/Alert/types.js";
10
14
  import "../../content/Alert/index.js";
11
15
  import { Field } from "./Field.js";
16
+ import { useFormControllerContext } from "./modern/context.js";
17
+ import { FormSelectorOptions, FormSubscribe, FormSubscribeProps, useFormController, useFormSelector } from "./modern/react.js";
12
18
  import { _SubmitError } from "./SubmitError.js";
13
19
  import { FieldReturnValue, UseFieldProps } from "./use-field/types.js";
14
20
  import { UseFieldParams, useField } from "./use-field/use-field.js";
@@ -24,9 +30,17 @@ declare const Form: FormRootComponent & {
24
30
  Submit: typeof _SubmitButton;
25
31
  Reset: typeof _ResetButton;
26
32
  useForm: typeof useForm;
33
+ useController: typeof useFormController;
34
+ useSelector: typeof useFormSelector;
35
+ Subscribe: typeof FormSubscribe;
36
+ useControllerContext: typeof useFormControllerContext;
27
37
  } & {
28
38
  Item: typeof Field;
29
39
  useForm: typeof useForm;
40
+ useController: typeof useFormController;
41
+ useSelector: typeof useFormSelector;
42
+ Subscribe: typeof FormSubscribe;
43
+ useControllerContext: typeof useFormControllerContext;
30
44
  Submit: react.ForwardRefExoticComponent<Omit<CubeSubmitButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
31
45
  Reset: react.ForwardRefExoticComponent<Omit<CubeResetButtonProps<FieldTypes>, "ref"> & react.RefAttributes<_react_types_shared0.FocusableRefValue<HTMLElement, HTMLElement>>>;
32
46
  SubmitError: react.ForwardRefExoticComponent<CubeAlertProps & react.RefAttributes<HTMLDivElement>>;
@@ -1,9 +1,11 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-b59dbf7 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
+ import { useFormControllerContext } from "./modern/context.js";
2
3
  import { useForm } from "./use-form.js";
3
4
  import { FormContext, FormScopeMask, _Form, useFormProps } from "./Form.js";
4
5
  import { useField } from "./use-field/use-field.js";
5
6
  import { useFieldProps } from "./use-field/use-field-props.js";
6
7
  import { Field } from "./Field.js";
8
+ import { FormSubscribe, useFormController, useFormSelector } from "./modern/react.js";
7
9
  import { _ResetButton } from "./ResetButton/ResetButton.js";
8
10
  import { _SubmitButton } from "./SubmitButton/SubmitButton.js";
9
11
  import { _SubmitError } from "./SubmitError.js";
@@ -12,6 +14,10 @@ import { _SubmitError } from "./SubmitError.js";
12
14
  const Form = Object.assign(_Form, {
13
15
  Item: Field,
14
16
  useForm,
17
+ useController: useFormController,
18
+ useSelector: useFormSelector,
19
+ Subscribe: FormSubscribe,
20
+ useControllerContext: useFormControllerContext,
15
21
  Submit: _SubmitButton,
16
22
  Reset: _ResetButton,
17
23
  SubmitError: _SubmitError
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SubmitButton","ResetButton"],"sources":["../../../../src/components/form/Form/index.ts"],"sourcesContent":["import { CubeAlertProps } from '../../content/Alert/index';\n\nimport { Field } from './Field';\nimport {\n Form as _Form,\n FormContext,\n FormScopeMask,\n useFormProps,\n} from './Form';\nimport { ResetButton } from './ResetButton';\nimport { SubmitButton } from './SubmitButton';\nimport { SubmitError } from './SubmitError';\nimport { useForm } from './use-form';\n\nconst Form = Object.assign(\n _Form as typeof _Form & {\n Item: typeof Field;\n SubmitError: typeof SubmitError;\n Submit: typeof SubmitButton;\n Reset: typeof ResetButton;\n useForm: typeof useForm;\n },\n {\n Item: Field,\n useForm,\n Submit: SubmitButton,\n Reset: ResetButton,\n SubmitError,\n },\n);\n\nexport * from './SubmitError';\nexport * from './SubmitButton';\nexport * from './ResetButton';\nexport * from './use-field';\nexport { useFormProps, Form, Field, useForm, FormContext, FormScopeMask };\nexport type { CubeFormProps } from './Form';\nexport type { CubeFormInstance } from './use-form';\nexport type { FieldTypes, Fields } from './types';\nexport type { CubeAlertProps as CubeSubmitErrorProps };\n"],"mappings":";;;;;;;;;;;AAcA,MAAM,OAAO,OAAO,OAClB,OAOA;CACE,MAAM;CACN;CACA,QAAQA;CACR,OAAOC;CACP;CACD,CACF"}
1
+ {"version":3,"file":"index.js","names":["SubmitButton","ResetButton"],"sources":["../../../../src/components/form/Form/index.ts"],"sourcesContent":["import { CubeAlertProps } from '../../content/Alert/index';\n\nimport { Field } from './Field';\nimport {\n Form as _Form,\n FormContext,\n FormScopeMask,\n useFormProps,\n} from './Form';\nimport { useFormControllerContext } from './modern/context';\nimport {\n FormSubscribe,\n useFormController,\n useFormSelector,\n} from './modern/react';\nimport { ResetButton } from './ResetButton';\nimport { SubmitButton } from './SubmitButton';\nimport { SubmitError } from './SubmitError';\nimport { useForm } from './use-form';\n\nconst Form = Object.assign(\n _Form as typeof _Form & {\n Item: typeof Field;\n SubmitError: typeof SubmitError;\n Submit: typeof SubmitButton;\n Reset: typeof ResetButton;\n useForm: typeof useForm;\n useController: typeof useFormController;\n useSelector: typeof useFormSelector;\n Subscribe: typeof FormSubscribe;\n useControllerContext: typeof useFormControllerContext;\n },\n {\n Item: Field,\n useForm,\n useController: useFormController,\n useSelector: useFormSelector,\n Subscribe: FormSubscribe,\n useControllerContext: useFormControllerContext,\n Submit: SubmitButton,\n Reset: ResetButton,\n SubmitError,\n },\n);\n\nexport * from './SubmitError';\nexport * from './SubmitButton';\nexport * from './ResetButton';\nexport * from './use-field';\nexport { useFormProps, Form, Field, useForm, FormContext, FormScopeMask };\nexport type { CubeFormProps } from './Form';\nexport type { ModernFormProps } from './ModernFormRoot';\nexport type {\n FormController,\n ModernFormState,\n UseFormControllerOptions,\n} from './modern/controller';\nexport type { FormSelectorOptions, FormSubscribeProps } from './modern/react';\nexport type { FormChange, SetValueOptions } from './modern/types';\nexport type { FormPath } from './modern/values';\nexport type { CubeFormInstance } from './use-form';\nexport type { FieldTypes, Fields } from './types';\nexport type { CubeAlertProps as CubeSubmitErrorProps };\n"],"mappings":";;;;;;;;;;;;;AAoBA,MAAM,OAAO,OAAO,OAClB,OAWA;CACE,MAAM;CACN;CACA,eAAe;CACf,aAAa;CACb,WAAW;CACX,sBAAsB;CACtB,QAAQA;CACR,OAAOC;CACP;CACD,CACF"}
@@ -0,0 +1,9 @@
1
+
2
+ import { FormController } from "./controller.js";
3
+ import "react";
4
+
5
+ //#region src/components/form/Form/modern/context.d.ts
6
+ declare function useFormControllerContext<T extends object = Record<string, unknown>>(): FormController<T>;
7
+ //#endregion
8
+ export { useFormControllerContext };
9
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1,14 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
+ import { createContext, useContext } from "react";
3
+
4
+ //#region src/components/form/Form/modern/context.ts
5
+ const ModernControllerContext = createContext(null);
6
+ function useFormControllerContext() {
7
+ const controller = useContext(ModernControllerContext);
8
+ if (!controller) throw new Error("Form.useControllerContext() requires a modern <Form> root. Legacy forms and FormScopeMask do not provide a modern controller.");
9
+ return controller;
10
+ }
11
+
12
+ //#endregion
13
+ export { ModernControllerContext, useFormControllerContext };
14
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../../src/components/form/Form/modern/context.ts"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nimport type { FormController } from './controller';\n\nexport const ModernControllerContext =\n createContext<FormController<any> | null>(null);\n\nexport function useFormControllerContext<\n T extends object = Record<string, unknown>,\n>(): FormController<T> {\n const controller = useContext(ModernControllerContext);\n if (!controller) {\n throw new Error(\n 'Form.useControllerContext() requires a modern <Form> root. Legacy forms and FormScopeMask do not provide a modern controller.',\n );\n }\n return controller;\n}\n"],"mappings":";;;;AAIA,MAAa,0BACX,cAA0C,KAAK;AAEjD,SAAgB,2BAEO;CACrB,MAAM,aAAa,WAAW,wBAAwB;AACtD,KAAI,CAAC,WACH,OAAM,IAAI,MACR,gIACD;AAEH,QAAO"}
@@ -0,0 +1,13 @@
1
+
2
+ import { FormState, FormStore, FormStoreOptions } from "./types.js";
3
+ import { FORM_BACKEND } from "../backend.js";
4
+ import { ReactNode } from "react";
5
+
6
+ //#region src/components/form/Form/modern/controller.d.ts
7
+ type ModernFormState<T extends object = Record<string, unknown>> = FormState<T, ReactNode>;
8
+ type UseFormControllerOptions<T extends object = Record<string, unknown>> = FormStoreOptions<T>;
9
+ /** Public commands; registration and pipeline state tokens stay internal. */
10
+ type FormController<T extends object = Record<string, unknown>> = Readonly<Pick<FormStore<T, ReactNode>, typeof FORM_BACKEND | 'getSnapshot' | 'getFieldSnapshot' | 'getValue' | 'getValues' | 'getActiveValues' | 'subscribe' | 'setValue' | 'setValues' | 'batch' | 'setDefaultValues' | 'adoptDefaultValues' | 'reset' | 'touch' | 'setFieldErrors' | 'clearFieldErrors' | 'setSubmitError' | 'clearSubmitError'>>;
11
+ //#endregion
12
+ export { FormController, ModernFormState, UseFormControllerOptions };
13
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1,45 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
+ import { FORM_BACKEND, isModernFormController } from "../backend.js";
3
+ import { createFormStore } from "./store.js";
4
+
5
+ //#region src/components/form/Form/modern/controller.ts
6
+ const CONTROLLER_STORE = Symbol.for("@cube-dev/ui-kit/form-controller-store");
7
+ /** Pure allocation for the creation hook; no listeners or external effects. */
8
+ function createFormController(options) {
9
+ const store = createFormStore(options);
10
+ const serverSnapshot = store.getSnapshot();
11
+ const internals = {
12
+ store,
13
+ getServerSnapshot: () => serverSnapshot
14
+ };
15
+ return Object.freeze({
16
+ [FORM_BACKEND]: "modern",
17
+ [CONTROLLER_STORE]: internals,
18
+ getSnapshot: store.getSnapshot,
19
+ getFieldSnapshot: store.getFieldSnapshot,
20
+ getValue: store.getValue,
21
+ getValues: store.getValues,
22
+ getActiveValues: store.getActiveValues,
23
+ subscribe: store.subscribe,
24
+ setValue: store.setValue,
25
+ setValues: store.setValues,
26
+ batch: store.batch,
27
+ setDefaultValues: store.setDefaultValues,
28
+ adoptDefaultValues: store.adoptDefaultValues,
29
+ reset: store.reset,
30
+ touch: store.touch,
31
+ setFieldErrors: store.setFieldErrors,
32
+ clearFieldErrors: store.clearFieldErrors,
33
+ setSubmitError: store.setSubmitError,
34
+ clearSubmitError: store.clearSubmitError
35
+ });
36
+ }
37
+ function getControllerInternals(controller, receiver) {
38
+ const internals = isModernFormController(controller) ? controller[CONTROLLER_STORE] : void 0;
39
+ if (!internals) throw new Error(`${receiver} requires a modern form controller created by Form.useController(). Legacy Form instances and bare backend brands are not supported.`);
40
+ return internals;
41
+ }
42
+
43
+ //#endregion
44
+ export { createFormController, getControllerInternals };
45
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","names":[],"sources":["../../../../../src/components/form/Form/modern/controller.ts"],"sourcesContent":["import { FORM_BACKEND, isModernFormController } from '../backend';\n\nimport { createFormStore } from './store';\n\nimport type { ReactNode } from 'react';\nimport type { FormState, FormStore, FormStoreOptions } from './types';\n\nexport type ModernFormState<T extends object = Record<string, unknown>> =\n FormState<T, ReactNode>;\n\nexport type UseFormControllerOptions<\n T extends object = Record<string, unknown>,\n> = FormStoreOptions<T>;\n\n/** Public commands; registration and pipeline state tokens stay internal. */\nexport type FormController<T extends object = Record<string, unknown>> =\n Readonly<\n Pick<\n FormStore<T, ReactNode>,\n | typeof FORM_BACKEND\n | 'getSnapshot'\n | 'getFieldSnapshot'\n | 'getValue'\n | 'getValues'\n | 'getActiveValues'\n | 'subscribe'\n | 'setValue'\n | 'setValues'\n | 'batch'\n | 'setDefaultValues'\n | 'adoptDefaultValues'\n | 'reset'\n | 'touch'\n | 'setFieldErrors'\n | 'clearFieldErrors'\n | 'setSubmitError'\n | 'clearSubmitError'\n >\n >;\n\n// Symbol.for also lets two copies of the kit share a controller, just as the\n// backend brand does. This symbol and the store are not package exports.\nconst CONTROLLER_STORE = Symbol.for('@cube-dev/ui-kit/form-controller-store');\n\ninterface ControllerInternals<T extends object> {\n store: FormStore<T, ReactNode>;\n getServerSnapshot(): ModernFormState<T>;\n}\n\n/** Pure allocation for the creation hook; no listeners or external effects. */\nexport function createFormController<T extends object>(\n options?: UseFormControllerOptions<T>,\n): FormController<T> {\n const store = createFormStore<T, ReactNode>(options);\n const serverSnapshot = store.getSnapshot();\n const internals: ControllerInternals<T> = {\n store,\n getServerSnapshot: () => serverSnapshot,\n };\n return Object.freeze({\n [FORM_BACKEND]: 'modern' as const,\n [CONTROLLER_STORE]: internals,\n getSnapshot: store.getSnapshot,\n getFieldSnapshot: store.getFieldSnapshot,\n getValue: store.getValue,\n getValues: store.getValues,\n getActiveValues: store.getActiveValues,\n subscribe: store.subscribe,\n setValue: store.setValue,\n setValues: store.setValues,\n batch: store.batch,\n setDefaultValues: store.setDefaultValues,\n adoptDefaultValues: store.adoptDefaultValues,\n reset: store.reset,\n touch: store.touch,\n setFieldErrors: store.setFieldErrors,\n clearFieldErrors: store.clearFieldErrors,\n setSubmitError: store.setSubmitError,\n clearSubmitError: store.clearSubmitError,\n });\n}\n\nexport function getControllerInternals<T extends object>(\n controller: FormController<T>,\n receiver: string,\n): ControllerInternals<T> {\n const internals = isModernFormController(controller)\n ? (controller as unknown as Record<symbol, ControllerInternals<T>>)[\n CONTROLLER_STORE\n ]\n : undefined;\n if (!internals) {\n throw new Error(\n `${receiver} requires a modern form controller created by Form.useController(). Legacy Form instances and bare backend brands are not supported.`,\n );\n }\n return internals;\n}\n"],"mappings":";;;;;AA0CA,MAAM,mBAAmB,OAAO,IAAI,yCAAyC;;AAQ7E,SAAgB,qBACd,SACmB;CACnB,MAAM,QAAQ,gBAA8B,QAAQ;CACpD,MAAM,iBAAiB,MAAM,aAAa;CAC1C,MAAM,YAAoC;EACxC;EACA,yBAAyB;EAC1B;AACD,QAAO,OAAO,OAAO;GAClB,eAAe;GACf,mBAAmB;EACpB,aAAa,MAAM;EACnB,kBAAkB,MAAM;EACxB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,iBAAiB,MAAM;EACvB,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,OAAO,MAAM;EACb,kBAAkB,MAAM;EACxB,oBAAoB,MAAM;EAC1B,OAAO,MAAM;EACb,OAAO,MAAM;EACb,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACxB,gBAAgB,MAAM;EACtB,kBAAkB,MAAM;EACzB,CAAC;;AAGJ,SAAgB,uBACd,YACA,UACwB;CACxB,MAAM,YAAY,uBAAuB,WAAW,GAC/C,WACC,oBAEF;AACJ,KAAI,CAAC,UACH,OAAM,IAAI,MACR,GAAG,SAAS,sIACb;AAEH,QAAO"}
@@ -0,0 +1,21 @@
1
+
2
+ import { FormController, ModernFormState, UseFormControllerOptions } from "./controller.js";
3
+ import { ReactNode } from "react";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/form/Form/modern/react.d.ts
7
+ declare function useFormController<T extends object = Record<string, unknown>>(options?: UseFormControllerOptions<T>): FormController<T>;
8
+ interface FormSelectorOptions<Selected> {
9
+ isEqual?: (previous: Selected, next: Selected) => boolean;
10
+ }
11
+ declare function useFormSelector<T extends object, Selected>(controller: FormController<T>, selector: (state: ModernFormState<T>) => Selected, options?: FormSelectorOptions<Selected>): Selected;
12
+ interface FormSubscribeProps<T extends object, Selected> extends FormSelectorOptions<Selected> {
13
+ /** Omit to use modern context. An explicit undefined detaches from context. */
14
+ form?: FormController<T>;
15
+ selector: (state: ModernFormState<T>) => Selected;
16
+ children: (selected: Selected) => ReactNode;
17
+ }
18
+ declare function FormSubscribe<T extends object = Record<string, unknown>, Selected = unknown>(props: FormSubscribeProps<T, Selected>): react_jsx_runtime0.JSX.Element;
19
+ //#endregion
20
+ export { FormSelectorOptions, FormSubscribe, FormSubscribeProps, useFormController, useFormSelector };
21
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1,27 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-23d9994 | Cube Dev Team */
2
+ import { ModernControllerContext } from "./context.js";
3
+ import { createFormController, getControllerInternals } from "./controller.js";
4
+ import { useContext, useState } from "react";
5
+ import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
6
+ import { useSyncExternalStoreWithSelector } from "use-sync-external-store/with-selector.js";
7
+
8
+ //#region src/components/form/Form/modern/react.tsx
9
+ function useFormController(options) {
10
+ const [controller] = useState(() => createFormController(options));
11
+ return controller;
12
+ }
13
+ function useFormSelector(controller, selector, options) {
14
+ const { getServerSnapshot } = getControllerInternals(controller, "Form.useSelector()");
15
+ return useSyncExternalStoreWithSelector(controller.subscribe, controller.getSnapshot, getServerSnapshot, selector, options?.isEqual);
16
+ }
17
+ function FormSubscribe(props) {
18
+ const fromContext = useContext(ModernControllerContext);
19
+ const controller = Object.hasOwn(props, "form") ? props.form : fromContext;
20
+ if (!controller) throw new Error("<Form.Subscribe> requires a modern form prop or a modern <Form> root.");
21
+ const selected = useFormSelector(controller, props.selector, { isEqual: props.isEqual });
22
+ return /* @__PURE__ */ jsx(Fragment$1, { children: props.children(selected) });
23
+ }
24
+
25
+ //#endregion
26
+ export { FormSubscribe, useFormController, useFormSelector };
27
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","names":[],"sources":["../../../../../src/components/form/Form/modern/react.tsx"],"sourcesContent":["import { useContext, useState } from 'react';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js';\n\nimport { ModernControllerContext } from './context';\nimport { createFormController, getControllerInternals } from './controller';\n\nimport type { ReactNode } from 'react';\nimport type {\n FormController,\n ModernFormState,\n UseFormControllerOptions,\n} from './controller';\n\nexport function useFormController<T extends object = Record<string, unknown>>(\n options?: UseFormControllerOptions<T>,\n): FormController<T> {\n // Initial options seed synchronously. A new options object never resets the\n // controller, and the creator does not subscribe its owner to form changes.\n const [controller] = useState(() => createFormController(options));\n // Do not dispose from effect cleanup: Strict Mode and hidden React trees\n // reconnect effects while preserving state. Subscriptions own their cleanup;\n // the controller has no external resources and is collected with its owner.\n return controller;\n}\n\nexport interface FormSelectorOptions<Selected> {\n isEqual?: (previous: Selected, next: Selected) => boolean;\n}\n\nexport function useFormSelector<T extends object, Selected>(\n controller: FormController<T>,\n selector: (state: ModernFormState<T>) => Selected,\n options?: FormSelectorOptions<Selected>,\n): Selected {\n const { getServerSnapshot } = getControllerInternals(\n controller,\n 'Form.useSelector()',\n );\n return useSyncExternalStoreWithSelector(\n controller.subscribe,\n controller.getSnapshot,\n getServerSnapshot,\n selector,\n options?.isEqual,\n );\n}\n\nexport interface FormSubscribeProps<T extends object, Selected>\n extends FormSelectorOptions<Selected> {\n /** Omit to use modern context. An explicit undefined detaches from context. */\n form?: FormController<T>;\n selector: (state: ModernFormState<T>) => Selected;\n children: (selected: Selected) => ReactNode;\n}\n\nexport function FormSubscribe<\n T extends object = Record<string, unknown>,\n Selected = unknown,\n>(props: FormSubscribeProps<T, Selected>) {\n const fromContext = useContext(ModernControllerContext);\n const controller = Object.hasOwn(props, 'form') ? props.form : fromContext;\n if (!controller) {\n throw new Error(\n '<Form.Subscribe> requires a modern form prop or a modern <Form> root.',\n );\n }\n const selected = useFormSelector(controller, props.selector, {\n isEqual: props.isEqual,\n });\n return <>{props.children(selected)}</>;\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,kBACd,SACmB;CAGnB,MAAM,CAAC,cAAc,eAAe,qBAAqB,QAAQ,CAAC;AAIlE,QAAO;;AAOT,SAAgB,gBACd,YACA,UACA,SACU;CACV,MAAM,EAAE,sBAAsB,uBAC5B,YACA,qBACD;AACD,QAAO,iCACL,WAAW,WACX,WAAW,aACX,mBACA,UACA,SAAS,QACV;;AAWH,SAAgB,cAGd,OAAwC;CACxC,MAAM,cAAc,WAAW,wBAAwB;CACvD,MAAM,aAAa,OAAO,OAAO,OAAO,OAAO,GAAG,MAAM,OAAO;AAC/D,KAAI,CAAC,WACH,OAAM,IAAI,MACR,wEACD;CAEH,MAAM,WAAW,gBAAgB,YAAY,MAAM,UAAU,EAC3D,SAAS,MAAM,SAChB,CAAC;AACF,QAAO,4CAAG,MAAM,SAAS,SAAS,GAAI"}