native-document 1.0.164 → 1.0.166

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 (398) hide show
  1. package/components.d.ts +2 -0
  2. package/devtools/widget.js +1 -1
  3. package/dist/native-document.components.min.js +11074 -2735
  4. package/dist/native-document.dev.js +2269 -392
  5. package/dist/native-document.dev.js.map +1 -1
  6. package/dist/native-document.min.js +1 -1
  7. package/eslint.config.js +28 -33
  8. package/i18n.js +1 -1
  9. package/i18n.ts +2 -0
  10. package/index.js +4 -1
  11. package/package.json +3 -2
  12. package/src/components/$traits/has-draggable/HasDraggable.d.ts +4 -0
  13. package/src/components/$traits/has-draggable/HasDraggable.js +13 -0
  14. package/src/components/$traits/has-items/HasItems.d.ts +9 -0
  15. package/src/components/$traits/has-items/HasItems.js +6 -6
  16. package/src/components/$traits/has-position/HasFullPosition.d.ts +14 -0
  17. package/src/components/$traits/has-position/HasFullPosition.js +44 -0
  18. package/src/components/$traits/has-position/HasPosition.d.ts +7 -0
  19. package/src/components/$traits/has-position/HasPosition.js +23 -1
  20. package/src/components/$traits/has-resizable/HasResizable.d.ts +13 -0
  21. package/src/components/$traits/has-resizable/HasResizable.js +9 -0
  22. package/src/components/$traits/has-validation/HasValidation.d.ts +17 -0
  23. package/src/components/$traits/has-validation/HasValidation.js +54 -7
  24. package/src/components/BaseComponent.d.ts +32 -0
  25. package/src/components/BaseComponent.js +65 -9
  26. package/src/components/accordion/Accordion.js +39 -14
  27. package/src/components/accordion/AccordionItem.js +45 -14
  28. package/src/components/accordion/index.js +2 -2
  29. package/src/components/accordion/types/Accordion.d.ts +47 -0
  30. package/src/components/accordion/types/AccordionItem.d.ts +48 -0
  31. package/src/components/alert/Alert.js +70 -38
  32. package/src/components/alert/index.js +2 -2
  33. package/src/components/alert/types/Alert.d.ts +62 -0
  34. package/src/components/avatar/Avatar.js +49 -12
  35. package/src/components/avatar/AvatarGroup.js +50 -2
  36. package/src/components/avatar/index.js +2 -2
  37. package/src/components/avatar/types/Avatar.d.ts +74 -0
  38. package/src/components/avatar/types/AvatarGroup.d.ts +32 -0
  39. package/src/components/badge/Badge.js +125 -5
  40. package/src/components/badge/index.js +2 -2
  41. package/src/components/badge/types/Badge.d.ts +51 -0
  42. package/src/components/breadcrumb/BreadCrumb.js +61 -5
  43. package/src/components/breadcrumb/index.js +2 -2
  44. package/src/components/breadcrumb/types/BreadCrumb.d.ts +42 -0
  45. package/src/components/button/Button.js +164 -9
  46. package/src/components/button/index.js +1 -1
  47. package/src/components/button/types/Button.d.ts +62 -0
  48. package/src/components/card/Card.js +128 -10
  49. package/src/components/card/index.js +3 -3
  50. package/src/components/card/types/Card.d.ts +42 -0
  51. package/src/components/context-menu/ContextMenu.js +49 -5
  52. package/src/components/context-menu/ContextMenuGroup.js +15 -2
  53. package/src/components/context-menu/ContextMenuItem.js +14 -2
  54. package/src/components/context-menu/index.js +5 -5
  55. package/src/components/context-menu/types/ContextMenu.d.ts +30 -0
  56. package/src/components/context-menu/types/ContextMenuGroup.d.ts +18 -0
  57. package/src/components/context-menu/types/ContextMenuItem.d.ts +18 -0
  58. package/src/components/divider/Divider.js +120 -4
  59. package/src/components/divider/index.js +3 -3
  60. package/src/components/divider/types/Divider.d.ts +55 -0
  61. package/src/components/dropdown/Dropdown.js +239 -16
  62. package/src/components/dropdown/DropdownDivider.js +22 -2
  63. package/src/components/dropdown/DropdownGroup.js +44 -5
  64. package/src/components/dropdown/DropdownItem.js +76 -3
  65. package/src/components/dropdown/DropdownTrigger.js +49 -20
  66. package/src/components/dropdown/helpers.js +1 -1
  67. package/src/components/dropdown/index.js +6 -6
  68. package/src/components/dropdown/types/Dropdown.d.ts +88 -0
  69. package/src/components/dropdown/types/DropdownDivider.d.ts +20 -0
  70. package/src/components/dropdown/types/DropdownGroup.d.ts +25 -0
  71. package/src/components/dropdown/types/DropdownItem.d.ts +41 -0
  72. package/src/components/dropdown/types/DropdownTrigger.d.ts +32 -0
  73. package/src/components/form/FormControl.js +156 -13
  74. package/src/components/form/field/Field.js +172 -9
  75. package/src/components/form/field/FieldCollection.js +116 -12
  76. package/src/components/form/field/types/AutocompleteField.js +92 -2
  77. package/src/components/form/field/types/CheckboxField.js +43 -2
  78. package/src/components/form/field/types/CheckboxGroupField.js +83 -6
  79. package/src/components/form/field/types/ColorField.js +56 -3
  80. package/src/components/form/field/types/DateField.js +155 -4
  81. package/src/components/form/field/types/EmailField.js +54 -4
  82. package/src/components/form/field/types/FileField.js +140 -6
  83. package/src/components/form/field/types/HiddenField.js +27 -1
  84. package/src/components/form/field/types/ImageField.js +82 -3
  85. package/src/components/form/field/types/NumberField.js +97 -4
  86. package/src/components/form/field/types/PasswordField.js +103 -7
  87. package/src/components/form/field/types/RadioField.js +75 -4
  88. package/src/components/form/field/types/RangeField.js +67 -1
  89. package/src/components/form/field/types/SearchField.js +41 -2
  90. package/src/components/form/field/types/SelectField.js +133 -4
  91. package/src/components/form/field/types/StringField.js +91 -2
  92. package/src/components/form/field/types/TelField.js +55 -4
  93. package/src/components/form/field/types/TextAreaField.js +76 -2
  94. package/src/components/form/field/types/TimeField.js +120 -5
  95. package/src/components/form/field/types/UrlField.js +59 -4
  96. package/src/components/form/field/types/file-field-mode/FileAvatarMode.js +83 -4
  97. package/src/components/form/field/types/file-field-mode/FileDropzoneMode.js +61 -3
  98. package/src/components/form/field/types/file-field-mode/FileItemPreview.js +79 -3
  99. package/src/components/form/field/types/file-field-mode/FileNativeMode.js +24 -2
  100. package/src/components/form/field/types/file-field-mode/FileUploadButtonMode.js +64 -3
  101. package/src/components/form/field/types/file-field-mode/FileWallMode.js +56 -3
  102. package/src/components/form/index.js +28 -28
  103. package/src/components/form/types/Field.d.ts +73 -0
  104. package/src/components/form/types/FieldCollection.d.ts +53 -0
  105. package/src/components/form/types/FormControl.d.ts +64 -0
  106. package/src/components/form/types/fields/AutocompleteField.d.ts +48 -0
  107. package/src/components/form/types/fields/CheckboxField.d.ts +33 -0
  108. package/src/components/form/types/fields/CheckboxGroupField.d.ts +49 -0
  109. package/src/components/form/types/fields/ColorField.d.ts +37 -0
  110. package/src/components/form/types/fields/DateField.d.ts +70 -0
  111. package/src/components/form/types/fields/EmailField.d.ts +35 -0
  112. package/src/components/form/types/fields/FileAvatarMode.d.ts +46 -0
  113. package/src/components/form/types/fields/FileDropzoneMode.d.ts +28 -0
  114. package/src/components/form/types/fields/FileField.d.ts +56 -0
  115. package/src/components/form/types/fields/FileItemPreview.d.ts +35 -0
  116. package/src/components/form/types/fields/FileNativeMode.d.ts +21 -0
  117. package/src/components/form/types/fields/FileUploadButtonMode.d.ts +34 -0
  118. package/src/components/form/types/fields/FileWallMode.d.ts +32 -0
  119. package/src/components/form/types/fields/HiddenField.d.ts +26 -0
  120. package/src/components/form/types/fields/ImageField.d.ts +45 -0
  121. package/src/components/form/types/fields/NumberField.d.ts +48 -0
  122. package/src/components/form/types/fields/PasswordField.d.ts +46 -0
  123. package/src/components/form/types/fields/RadioField.d.ts +48 -0
  124. package/src/components/form/types/fields/RangeField.d.ts +44 -0
  125. package/src/components/form/types/fields/SearchField.d.ts +34 -0
  126. package/src/components/form/types/fields/SelectField.d.ts +71 -0
  127. package/src/components/form/types/fields/StringField.d.ts +48 -0
  128. package/src/components/form/types/fields/TelField.d.ts +37 -0
  129. package/src/components/form/types/fields/TextAreaField.d.ts +44 -0
  130. package/src/components/form/types/fields/TimeField.d.ts +51 -0
  131. package/src/components/form/types/fields/UrlField.d.ts +35 -0
  132. package/src/components/form/validation/Validation.js +54 -54
  133. package/src/components/index.d.ts +160 -0
  134. package/src/components/list/List.js +99 -15
  135. package/src/components/list/ListGroup.js +58 -8
  136. package/src/components/list/ListItem.js +79 -18
  137. package/src/components/list/index.js +5 -5
  138. package/src/components/list/types/List.d.ts +43 -0
  139. package/src/components/list/types/ListGroup.d.ts +37 -0
  140. package/src/components/list/types/ListItem.d.ts +42 -0
  141. package/src/components/menu/HasMenuItem.js +55 -6
  142. package/src/components/menu/Menu.js +113 -22
  143. package/src/components/menu/MenuDivider.js +18 -2
  144. package/src/components/menu/MenuGroup.js +61 -6
  145. package/src/components/menu/MenuItem.js +95 -11
  146. package/src/components/menu/MenuLink.js +27 -2
  147. package/src/components/menu/index.js +6 -6
  148. package/src/components/menu/types/Menu.d.ts +60 -0
  149. package/src/components/menu/types/MenuDivider.d.ts +19 -0
  150. package/src/components/menu/types/MenuGroup.d.ts +44 -0
  151. package/src/components/menu/types/MenuItem.d.ts +46 -0
  152. package/src/components/menu/types/MenuLink.d.ts +16 -0
  153. package/src/components/modal/Modal.js +258 -17
  154. package/src/components/modal/index.js +3 -3
  155. package/src/components/modal/types/Modal.d.ts +94 -0
  156. package/src/components/pagination/Pagination.js +155 -7
  157. package/src/components/pagination/index.js +3 -3
  158. package/src/components/pagination/types/Pagination.d.ts +68 -0
  159. package/src/components/popover/Popover.js +198 -11
  160. package/src/components/popover/PopoverFooter.js +33 -9
  161. package/src/components/popover/PopoverHeader.js +33 -8
  162. package/src/components/popover/index.js +4 -4
  163. package/src/components/popover/types/Popover.d.ts +83 -0
  164. package/src/components/popover/types/PopoverFooter.d.ts +24 -0
  165. package/src/components/popover/types/PopoverHeader.d.ts +26 -0
  166. package/src/components/progress/Progress.js +182 -13
  167. package/src/components/progress/index.js +3 -3
  168. package/src/components/progress/types/Progress.d.ts +77 -0
  169. package/src/components/skeleton/Skeleton.js +117 -49
  170. package/src/components/skeleton/index.js +3 -3
  171. package/src/components/skeleton/types/Skeleton.d.ts +55 -0
  172. package/src/components/slider/Slider.js +207 -10
  173. package/src/components/slider/index.js +2 -2
  174. package/src/components/slider/types/Slider.d.ts +82 -0
  175. package/src/components/spacer/Spacer.js +11 -2
  176. package/src/components/spacer/index.js +2 -2
  177. package/src/components/spacer/types/Spacer.d.ts +19 -0
  178. package/src/components/spinner/Spinner.js +180 -9
  179. package/src/components/spinner/index.js +3 -3
  180. package/src/components/spinner/types/Spinner.d.ts +71 -0
  181. package/src/components/splitter/Splitter.js +76 -13
  182. package/src/components/splitter/SplitterGutter.js +67 -5
  183. package/src/components/splitter/SplitterPanel.js +69 -2
  184. package/src/components/splitter/index.js +5 -5
  185. package/src/components/splitter/types/Splitter.d.ts +38 -0
  186. package/src/components/splitter/types/SplitterGutter.d.ts +38 -0
  187. package/src/components/splitter/types/SplitterPanel.d.ts +41 -0
  188. package/src/components/stacks/AbsoluteStack.js +23 -3
  189. package/src/components/stacks/FixedStack.js +23 -3
  190. package/src/components/stacks/HStack.js +24 -3
  191. package/src/components/stacks/PositionStack.js +111 -3
  192. package/src/components/stacks/RelativeStack.js +23 -3
  193. package/src/components/stacks/Stack.js +73 -2
  194. package/src/components/stacks/VStack.js +24 -4
  195. package/src/components/stacks/index.js +7 -7
  196. package/src/components/stacks/types/AbsoluteStack.d.ts +16 -0
  197. package/src/components/stacks/types/FixedStack.d.ts +16 -0
  198. package/src/components/stacks/types/HStack.d.ts +16 -0
  199. package/src/components/stacks/types/PositionStack.d.ts +54 -0
  200. package/src/components/stacks/types/RelativeStack.d.ts +17 -0
  201. package/src/components/stacks/types/Stack.d.ts +39 -0
  202. package/src/components/stacks/types/VStack.d.ts +16 -0
  203. package/src/components/stepper/Stepper.js +152 -12
  204. package/src/components/stepper/StepperStep.js +104 -3
  205. package/src/components/stepper/index.js +4 -4
  206. package/src/components/stepper/types/Stepper.d.ts +68 -0
  207. package/src/components/stepper/types/StepperStep.d.ts +54 -0
  208. package/src/components/switch/Switch.js +143 -6
  209. package/src/components/switch/index.js +1 -1
  210. package/src/components/switch/types/Switch.d.ts +55 -0
  211. package/src/components/table/Column.js +105 -6
  212. package/src/components/table/ColumnGroup.js +48 -3
  213. package/src/components/table/DataTable.js +256 -19
  214. package/src/components/table/SimpleTable.js +58 -4
  215. package/src/components/table/index.js +2 -2
  216. package/src/components/table/types/Column.d.ts +49 -0
  217. package/src/components/table/types/ColumnGroup.d.ts +28 -0
  218. package/src/components/table/types/DataTable.d.ts +97 -0
  219. package/src/components/table/types/SimpleTable.d.ts +40 -0
  220. package/src/components/tabs/Tabs.js +192 -5
  221. package/src/components/tabs/index.js +3 -3
  222. package/src/components/tabs/types/Tabs.d.ts +78 -0
  223. package/src/components/toast/Toast.js +133 -5
  224. package/src/components/toast/index.js +3 -3
  225. package/src/components/toast/types/Toast.d.ts +57 -0
  226. package/src/components/toast/types/ToastError.d.ts +7 -0
  227. package/src/components/toast/types/ToastInfo.d.ts +7 -0
  228. package/src/components/toast/types/ToastSuccess.d.ts +7 -0
  229. package/src/components/toast/types/ToastWarning.d.ts +7 -0
  230. package/src/components/tooltip/Tooltip.js +157 -13
  231. package/src/components/tooltip/index.js +2 -2
  232. package/src/components/tooltip/prototypes.js +1 -1
  233. package/src/components/tooltip/types/Tooltip.d.ts +65 -0
  234. package/src/core/data/MemoryManager.js +2 -2
  235. package/src/core/data/Observable.js +15 -18
  236. package/src/core/data/ObservableArray.js +118 -46
  237. package/src/core/data/ObservableChecker.js +2 -2
  238. package/src/core/data/ObservableItem.js +135 -21
  239. package/src/core/data/ObservableObject.js +126 -35
  240. package/src/core/data/ObservableResource.js +113 -3
  241. package/src/core/data/Store.js +142 -26
  242. package/src/core/data/observable-helpers/observable.is-to.js +196 -1
  243. package/src/core/data/observable-helpers/observable.prototypes.js +33 -8
  244. package/src/core/elements/anchor/anchor-with-sentinel.js +23 -2
  245. package/src/core/elements/anchor/anchor.js +16 -7
  246. package/src/core/elements/anchor/one-child-anchor-overwriting.js +2 -2
  247. package/src/core/elements/content-formatter.js +1 -1
  248. package/src/core/elements/control/for-each-array.js +9 -9
  249. package/src/core/elements/control/for-each.js +14 -14
  250. package/src/core/elements/control/show-if.js +11 -11
  251. package/src/core/elements/control/show-when.js +5 -5
  252. package/src/core/elements/control/switch.js +14 -14
  253. package/src/core/elements/description-list.js +1 -1
  254. package/src/core/elements/form.js +2 -2
  255. package/src/core/elements/fragment.js +1 -1
  256. package/src/core/elements/html5-semantics.js +1 -1
  257. package/src/core/elements/img.js +3 -3
  258. package/src/core/elements/interactive.js +1 -1
  259. package/src/core/elements/list.js +1 -1
  260. package/src/core/elements/medias.js +1 -1
  261. package/src/core/elements/meta-data.js +1 -1
  262. package/src/core/elements/svg.js +1 -1
  263. package/src/core/elements/table.js +1 -1
  264. package/src/core/errors/ArgTypesError.js +1 -1
  265. package/src/core/utils/HasEventEmitter.js +36 -2
  266. package/src/core/utils/args-types.js +9 -9
  267. package/src/core/utils/cache.js +1 -1
  268. package/src/core/utils/callback-handler.js +29 -0
  269. package/src/core/utils/debug-manager.js +6 -6
  270. package/src/core/utils/events.js +139 -139
  271. package/src/core/utils/filters/date.js +84 -3
  272. package/src/core/utils/filters/standard.js +136 -11
  273. package/src/core/utils/filters/strings.js +34 -2
  274. package/src/core/utils/filters/utils.js +40 -4
  275. package/src/core/utils/formatters.js +4 -4
  276. package/src/core/utils/helpers.js +39 -7
  277. package/src/core/utils/localstorage.js +11 -11
  278. package/src/core/utils/memoize.js +56 -3
  279. package/src/core/utils/plugins-manager.js +3 -3
  280. package/src/core/utils/property-accumulator.js +6 -6
  281. package/src/core/utils/prototypes.js +26 -1
  282. package/src/core/utils/shortcut-manager.js +2 -2
  283. package/src/core/utils/validator.js +8 -8
  284. package/src/core/wrappers/AttributesWrapper.js +32 -22
  285. package/src/core/wrappers/DocumentObserver.js +3 -3
  286. package/src/core/wrappers/ElementCreator.js +5 -5
  287. package/src/core/wrappers/HtmlElementWrapper.js +38 -12
  288. package/src/core/wrappers/NDElement.js +328 -22
  289. package/src/core/wrappers/NdPrototype.js +60 -16
  290. package/src/core/wrappers/SingletonView.js +50 -2
  291. package/src/core/wrappers/SvgElementWrapper.js +1 -1
  292. package/src/core/wrappers/constants.js +35 -2
  293. package/src/core/wrappers/prototypes/attributes-extensions.js +7 -7
  294. package/src/core/wrappers/prototypes/nd-element-extensions.js +72 -6
  295. package/src/core/wrappers/prototypes/nd-element.transition.extensions.js +42 -2
  296. package/src/core/wrappers/template-cloner/NodeCloner.js +53 -8
  297. package/src/core/wrappers/template-cloner/TemplateCloner.js +75 -6
  298. package/src/core/wrappers/template-cloner/attributes-hydrator.js +58 -2
  299. package/src/core/wrappers/template-cloner/utils.js +42 -6
  300. package/src/fetch/NativeFetch.js +3 -3
  301. package/src/i18n/bin/scan.js +6 -6
  302. package/src/i18n/index.d.ts +2 -0
  303. package/src/i18n/service/I18nService.d.ts +27 -0
  304. package/src/i18n/service/I18nService.js +5 -5
  305. package/src/i18n/service/functions.d.ts +22 -0
  306. package/src/i18n/service/functions.js +2 -2
  307. package/src/router/Route.js +3 -3
  308. package/src/router/RouteGroupHelper.js +2 -2
  309. package/src/router/Router.js +15 -15
  310. package/src/router/RouterComponent.js +33 -7
  311. package/src/router/link.js +4 -4
  312. package/src/router/modes/HashRouter.js +2 -2
  313. package/src/router/modes/HistoryRouter.js +2 -2
  314. package/src/router/modes/MemoryRouter.js +1 -1
  315. package/src/ui/components/accordion/AccordionItemRender.js +3 -3
  316. package/src/ui/components/accordion/AccordionRender.js +1 -1
  317. package/src/ui/components/alert/AlertRender.js +10 -10
  318. package/src/ui/components/avatar/avata-group/AvatarGroupRender.js +1 -1
  319. package/src/ui/components/avatar/avatar/AvatarRender.js +1 -1
  320. package/src/ui/components/breadcrumb/BreadcrumbRender.js +2 -2
  321. package/src/ui/components/button/ButtonRender.js +1 -1
  322. package/src/ui/components/contextmenu/ContextmenuRender.js +5 -5
  323. package/src/ui/components/dropdown/DropdownRender.js +8 -8
  324. package/src/ui/components/dropdown/group/DropdownGroupRender.js +2 -2
  325. package/src/ui/components/dropdown/item/DropdownItemRender.js +1 -1
  326. package/src/ui/components/form/FieldCollectionRender.js +2 -2
  327. package/src/ui/components/form/FormControlRender.js +5 -5
  328. package/src/ui/components/form/fields/AutocompleteFieldRender.js +3 -3
  329. package/src/ui/components/form/fields/CheckboxFieldRender.js +1 -1
  330. package/src/ui/components/form/fields/CheckboxGroupFieldRender.js +1 -1
  331. package/src/ui/components/form/fields/DateFieldRender.js +7 -7
  332. package/src/ui/components/form/fields/EmailFieldRender.js +1 -1
  333. package/src/ui/components/form/fields/FieldRender.js +4 -4
  334. package/src/ui/components/form/fields/FileFieldRender.js +1 -1
  335. package/src/ui/components/form/fields/PasswordFieldRender.js +2 -2
  336. package/src/ui/components/form/fields/RadioFieldRender.js +1 -1
  337. package/src/ui/components/form/fields/RangeFieldRender.js +1 -1
  338. package/src/ui/components/form/fields/SelectFieldRender.js +2 -2
  339. package/src/ui/components/form/fields/SliderFieldRender.js +6 -6
  340. package/src/ui/components/form/fields/StringFieldRender.js +1 -1
  341. package/src/ui/components/form/fields/TelFieldRender.js +1 -1
  342. package/src/ui/components/form/fields/TextAreaFieldRender.js +1 -1
  343. package/src/ui/components/form/fields/TimeFieldRender.js +3 -3
  344. package/src/ui/components/form/fields/UrlFieldRender.js +1 -1
  345. package/src/ui/components/form/file-upload-mode/FileAvatarModeRender.js +1 -1
  346. package/src/ui/components/form/file-upload-mode/FileDropzoneModeRender.js +2 -2
  347. package/src/ui/components/form/file-upload-mode/FileUploadButtonModeRender.js +2 -2
  348. package/src/ui/components/form/file-upload-mode/FileWallModeRender.js +1 -1
  349. package/src/ui/components/form/helpers.js +8 -8
  350. package/src/ui/components/form/index.js +27 -27
  351. package/src/ui/components/menu/MenuDividerRender.js +1 -1
  352. package/src/ui/components/menu/MenuGroupRender.js +3 -3
  353. package/src/ui/components/menu/MenuItemRender.js +2 -2
  354. package/src/ui/components/menu/MenuLinkRender.js +3 -3
  355. package/src/ui/components/menu/helpers.js +4 -4
  356. package/src/ui/components/modal/ModalRender.js +4 -4
  357. package/src/ui/components/pagination/PaginationRender.js +9 -9
  358. package/src/ui/components/popover/PopoverRender.js +7 -7
  359. package/src/ui/components/progress/ProgressRender.js +12 -12
  360. package/src/ui/components/skeleton/SkeletonRender.js +56 -0
  361. package/src/ui/components/splitter/SplitterGutterRender.js +1 -1
  362. package/src/ui/components/splitter/SplitterPanelRender.js +2 -2
  363. package/src/ui/components/stacks/PositionStackRender.js +1 -1
  364. package/src/ui/components/stacks/StackRender.js +1 -1
  365. package/src/ui/components/stacks/absolute-stack/AbsoluteStackRender.js +1 -1
  366. package/src/ui/components/stacks/fixed-stack/FixedStackRender.js +1 -1
  367. package/src/ui/components/stacks/h-stack/HStackRender.js +1 -1
  368. package/src/ui/components/stacks/index.js +5 -5
  369. package/src/ui/components/stacks/relative-stack/RelativeStackRender.js +1 -1
  370. package/src/ui/components/stacks/v-stack/VStackRender.js +1 -1
  371. package/src/ui/components/stepper/StepperRender.js +2 -2
  372. package/src/ui/components/stepper/StepperStepRender.js +4 -4
  373. package/src/ui/components/switch/SwitchRender.js +4 -4
  374. package/src/ui/components/table/data-table/DataTableRender.js +5 -5
  375. package/src/ui/components/table/data-table/bulk-actions.js +7 -7
  376. package/src/ui/components/table/data-table/pagination.js +6 -6
  377. package/src/ui/components/table/data-table/tables.js +25 -25
  378. package/src/ui/components/table/data-table/toolbar.js +3 -3
  379. package/src/ui/components/table/simple-table/SimpleTableRender.js +8 -8
  380. package/src/ui/components/tabs/TabsRender.js +11 -11
  381. package/src/ui/components/toast/ToastRender.js +3 -3
  382. package/src/ui/components/tooltip/TooltipRender.js +1 -1
  383. package/src/ui/index.js +36 -36
  384. package/types/elements.d.ts +163 -1037
  385. package/types/forms.d.ts +16 -20
  386. package/types/globals.d.ts +543 -0
  387. package/types/images.d.ts +2 -2
  388. package/types/observable-resource.d.ts +3 -0
  389. package/types/property-accumulator.d.ts +4 -4
  390. package/types/store.d.ts +26 -2
  391. package/types/validator.ts +3 -3
  392. package/ui.js +1 -0
  393. package/src/components/form/field/DefaultRender.js +0 -77
  394. package/src/components/form/field/FieldFactory.js +0 -107
  395. package/src/components/skeleton/SkeletonCard.js +0 -0
  396. package/src/components/skeleton/SkeletonList.js +0 -0
  397. package/src/components/skeleton/SkeletonParagraph.js +0 -0
  398. package/src/components/skeleton/SkeletonTable.js +0 -0
@@ -1,7 +1,36 @@
1
- import BaseComponent from "../../../../BaseComponent";
2
- import HasEventEmitter from "../../../../../core/utils/HasEventEmitter";
1
+ import BaseComponent from '../../../../BaseComponent';
2
+ import HasEventEmitter from '../../../../../core/utils/HasEventEmitter';
3
3
  import { $ } from '../../../../../core/data/Observable';
4
4
 
5
+ /**
6
+ * Represents a single file in a FileField upload list.
7
+ * Tracks upload status, progress, and error state reactively.
8
+ * Used internally by FileField modes to display per-file feedback.
9
+ * @example
10
+ * const preview = new FileItemPreview(file)
11
+ * .uploading()
12
+ * .progress(45)
13
+ * .done()
14
+ * .onClick((file, e) => console.log('clicked', file.name))
15
+ * .onRemove((file) => fileField.removeFile(file));
16
+ *
17
+ * FileItemPreview.use((description, instance) => {
18
+ * // description.file — File object
19
+ * // description.status — Observable<'idle'|'uploading'|'done'|'error'>
20
+ * // description.progress — Observable<number> (0-100)
21
+ * // description.error — Observable<string|null>
22
+ * return Div({ class: 'file-preview' },
23
+ * Span(description.file.name),
24
+ * ShowIf(description.status.isEqualTo('uploading'), () =>
25
+ * Div({ class: 'progress' }, Span(description.progress))
26
+ * ),
27
+ * );
28
+ * });
29
+ *
30
+ * @constructor
31
+ * @param {File} file
32
+ * @param {GlobalAttributes} [props={}]
33
+ */
5
34
  export default function FileItemPreview(file, props = {}) {
6
35
  if(!(this instanceof FileItemPreview)) {
7
36
  return new FileItemPreview(file, props);
@@ -14,7 +43,7 @@ export default function FileItemPreview(file, props = {}) {
14
43
  status: $('idle'),
15
44
  progress: $(0),
16
45
  error: $(null),
17
- props
46
+ props,
18
47
  };
19
48
  }
20
49
 
@@ -23,51 +52,98 @@ BaseComponent.use(FileItemPreview, HasEventEmitter);
23
52
 
24
53
  FileItemPreview.defaultTemplate = null;
25
54
 
55
+ /**
56
+ * Registers the render template for FileItemPreview.
57
+ * @param {(description: {
58
+ * file: File|null,
59
+ * status: Observable<'idle'|'uploading'|'done'|'error'>,
60
+ * progress: Observable<number>,
61
+ * error: Observable<string|null>,
62
+ * props: GlobalAttributes
63
+ * }, instance: FileItemPreview) => NdChild} template
64
+ */
26
65
  FileItemPreview.use = function(template) {
27
66
  FileItemPreview.defaultTemplate = template;
28
67
  };
29
68
 
69
+ /**
70
+ * Returns the File object associated with this preview.
71
+ * @returns {File}
72
+ */
30
73
  FileItemPreview.prototype.file = function() {
31
74
  return this.$description.file;
32
75
  };
33
76
 
77
+ /**
78
+ * @param {'idle'|'uploading'|'done'|'error'} status
79
+ * @returns {this}
80
+ */
34
81
  FileItemPreview.prototype.status = function(status) {
35
82
  this.$description.status.set(status);
36
83
  return this;
37
84
  };
38
85
 
86
+ /**
87
+ * @param {number} value - Upload progress from 0 to 100
88
+ * @returns {this}
89
+ */
39
90
  FileItemPreview.prototype.progress = function(value) {
40
91
  this.$description.progress.set(value);
41
92
  return this;
42
93
  };
43
94
 
95
+ /**
96
+ * Sets an error message and transitions status to 'error'.
97
+ * @param {string} message
98
+ * @returns {this}
99
+ */
44
100
  FileItemPreview.prototype.error = function(message) {
45
101
  this.$description.error.set(message);
46
102
  this.$description.status.set('error');
47
103
  return this;
48
104
  };
49
105
 
106
+ /**
107
+ * Marks the upload as done and sets progress to 100.
108
+ * @returns {this}
109
+ */
50
110
  FileItemPreview.prototype.done = function() {
51
111
  this.$description.status.set('done');
52
112
  this.$description.progress.set(100);
53
113
  return this;
54
114
  };
55
115
 
116
+ /**
117
+ * Transitions status to 'uploading'.
118
+ * @returns {this}
119
+ */
56
120
  FileItemPreview.prototype.uploading = function() {
57
121
  this.$description.status.set('uploading');
58
122
  return this;
59
123
  };
60
124
 
125
+ /**
126
+ * @param {(file: File, event: MouseEvent) => void} handler
127
+ * @returns {this}
128
+ */
61
129
  FileItemPreview.prototype.onClick = function(handler) {
62
130
  this.on('click', handler);
63
131
  return this;
64
132
  };
65
133
 
134
+ /**
135
+ * @param {(file: File) => void} handler
136
+ * @returns {this}
137
+ */
66
138
  FileItemPreview.prototype.onRemove = function(handler) {
67
139
  this.on('remove', handler);
68
140
  return this;
69
141
  };
70
142
 
143
+ /**
144
+ * @param {(file: File) => void} handler
145
+ * @returns {this}
146
+ */
71
147
  FileItemPreview.prototype.onReplace = function(handler) {
72
148
  this.on('replace', handler);
73
149
  return this;
@@ -1,5 +1,21 @@
1
- import BaseComponent from "../../../../BaseComponent";
1
+ import BaseComponent from '../../../../BaseComponent';
2
2
 
3
+ /**
4
+ * Native browser file input mode for FileField.
5
+ * Renders a standard <input type="file"> with no custom UI.
6
+ * Useful when browser defaults are sufficient or as a baseline.
7
+ * @example
8
+ * new FileField('document')
9
+ * .mode('native');
10
+ *
11
+ * FileNativeMode.use((description, instance) => {
12
+ * // description.props
13
+ * return Input({ type: 'file' });
14
+ * });
15
+ *
16
+ * @constructor
17
+ * @param {GlobalAttributes} [props={}]
18
+ */
3
19
  export default function FileNativeMode(props = {}) {
4
20
  if(!(this instanceof FileNativeMode)) {
5
21
  return new FileNativeMode(props);
@@ -8,7 +24,7 @@ export default function FileNativeMode(props = {}) {
8
24
  BaseComponent.call(this, props);
9
25
 
10
26
  this.$description = {
11
- props
27
+ props,
12
28
  };
13
29
  }
14
30
 
@@ -16,6 +32,12 @@ BaseComponent.extends(FileNativeMode);
16
32
 
17
33
  FileNativeMode.defaultTemplate = null;
18
34
 
35
+ /**
36
+ * Registers the render template for FileNativeMode.
37
+ * @param {(description: {
38
+ * props: GlobalAttributes
39
+ * }, instance: FileNativeMode) => NdChild} template
40
+ */
19
41
  FileNativeMode.use = function(template) {
20
42
  FileNativeMode.defaultTemplate = template;
21
43
  };
@@ -1,6 +1,28 @@
1
- import BaseComponent from "../../../../BaseComponent";
2
- import HasEventEmitter from "../../../../../core/utils/HasEventEmitter";
1
+ import BaseComponent from '../../../../BaseComponent';
2
+ import HasEventEmitter from '../../../../../core/utils/HasEventEmitter';
3
3
 
4
+ /**
5
+ * Button-triggered file upload mode for FileField.
6
+ * Renders a button to open the file picker and a list of uploaded files below it.
7
+ * Each file is represented by a FileItemPreview instance.
8
+ * @example
9
+ * new FileField('attachments')
10
+ * .mode('button')
11
+ * .multiple(true);
12
+ *
13
+ * FileUploadButtonMode.use((description, instance) => {
14
+ * // description.buttonLabel, description.buttonIcon,
15
+ * // description.showProgress, description.renderItem,
16
+ * // description.renderButton, description.renderList
17
+ * return Div({ class: 'upload-button' },
18
+ * Button(description.buttonLabel),
19
+ * Div({ class: 'file-list' }),
20
+ * );
21
+ * });
22
+ *
23
+ * @constructor
24
+ * @param {GlobalAttributes} [props={}]
25
+ */
4
26
  export default function FileUploadButtonMode(props = {}) {
5
27
  if(!(this instanceof FileUploadButtonMode)) {
6
28
  return new FileUploadButtonMode(props);
@@ -15,7 +37,7 @@ export default function FileUploadButtonMode(props = {}) {
15
37
  renderItem: null,
16
38
  renderButton: null,
17
39
  renderList: null,
18
- props
40
+ props,
19
41
  };
20
42
  }
21
43
 
@@ -24,35 +46,74 @@ BaseComponent.use(FileUploadButtonMode, HasEventEmitter);
24
46
 
25
47
  FileUploadButtonMode.defaultTemplate = null;
26
48
 
49
+ /**
50
+ * Registers the render template for FileUploadButtonMode.
51
+ * @param {(description: {
52
+ * buttonLabel: NdChild,
53
+ * buttonIcon: NdChild|null,
54
+ * showProgress: boolean,
55
+ * renderItem: ((file: File, preview: FileItemPreview) => NdChild)|null,
56
+ * renderButton: ((desc: *, instance: FileUploadButtonMode) => NdChild)|null,
57
+ * renderList: ((files: File[]) => NdChild)|null,
58
+ * props: GlobalAttributes
59
+ * }, instance: FileUploadButtonMode) => NdChild} template
60
+ */
27
61
  FileUploadButtonMode.use = function(template) {
28
62
  FileUploadButtonMode.defaultTemplate = template;
29
63
  };
30
64
 
65
+ /**
66
+ * @param {NdChild} label
67
+ * @returns {this}
68
+ */
31
69
  FileUploadButtonMode.prototype.buttonLabel = function(label) {
32
70
  this.$description.buttonLabel = label;
33
71
  return this;
34
72
  };
35
73
 
74
+ /**
75
+ * @param {NdChild} icon
76
+ * @returns {this}
77
+ */
36
78
  FileUploadButtonMode.prototype.buttonIcon = function(icon) {
37
79
  this.$description.buttonIcon = icon;
38
80
  return this;
39
81
  };
40
82
 
83
+ /**
84
+ * @param {boolean} [enabled=true]
85
+ * @returns {this}
86
+ */
41
87
  FileUploadButtonMode.prototype.showProgress = function(enabled = true) {
42
88
  this.$description.showProgress = enabled;
43
89
  return this;
44
90
  };
45
91
 
92
+ /**
93
+ * Custom render for each uploaded file row.
94
+ * @param {(file: File, preview: FileItemPreview) => NdChild} fn
95
+ * @returns {this}
96
+ */
46
97
  FileUploadButtonMode.prototype.renderItem = function(fn) {
47
98
  this.$description.renderItem = fn;
48
99
  return this;
49
100
  };
50
101
 
102
+ /**
103
+ * Custom render for the upload button itself.
104
+ * @param {(desc: *, instance: FileUploadButtonMode) => NdChild} fn
105
+ * @returns {this}
106
+ */
51
107
  FileUploadButtonMode.prototype.renderButton = function(fn) {
52
108
  this.$description.renderButton = fn;
53
109
  return this;
54
110
  };
55
111
 
112
+ /**
113
+ * Custom render for the entire file list.
114
+ * @param {(files: File[]) => NdChild} fn
115
+ * @returns {this}
116
+ */
56
117
  FileUploadButtonMode.prototype.renderList = function(fn) {
57
118
  this.$description.renderList = fn;
58
119
  return this;
@@ -1,6 +1,25 @@
1
- import BaseComponent from "../../../../BaseComponent";
2
- import HasEventEmitter from "../../../../../core/utils/HasEventEmitter";
1
+ import BaseComponent from '../../../../BaseComponent';
2
+ import HasEventEmitter from '../../../../../core/utils/HasEventEmitter';
3
3
 
4
+ /**
5
+ * Grid/wall layout mode for FileField.
6
+ * Displays uploaded files as a grid of cells with a fixed cell size,
7
+ * plus an "Add" cell at the end to trigger new uploads.
8
+ * Ideal for image galleries and media libraries.
9
+ * @example
10
+ * new FileField('gallery')
11
+ * .mode('wall')
12
+ * .multiple(true);
13
+ *
14
+ * FileWallMode.use((description, instance) => {
15
+ * // description.cellSize, description.addLabel, description.addIcon,
16
+ * // description.renderCell, description.renderAdd
17
+ * return Div({ class: 'wall', style: { gridTemplateColumns: \`repeat(auto-fill, \${description.cellSize}px)\` } });
18
+ * });
19
+ *
20
+ * @constructor
21
+ * @param {GlobalAttributes} [props={}]
22
+ */
4
23
  export default function FileWallMode(props = {}) {
5
24
  if(!(this instanceof FileWallMode)) {
6
25
  return new FileWallMode(props);
@@ -14,7 +33,7 @@ export default function FileWallMode(props = {}) {
14
33
  addIcon: null,
15
34
  renderCell: null,
16
35
  renderAdd: null,
17
- props
36
+ props,
18
37
  };
19
38
  }
20
39
 
@@ -23,30 +42,64 @@ BaseComponent.use(FileWallMode, HasEventEmitter);
23
42
 
24
43
  FileWallMode.defaultTemplate = null;
25
44
 
45
+ /**
46
+ * Registers the render template for FileWallMode.
47
+ * @param {(description: {
48
+ * cellSize: string|number,
49
+ * addLabel: NdChild,
50
+ * addIcon: NdChild|null,
51
+ * renderCell: ((file: File, preview: FileItemPreview) => NdChild)|null,
52
+ * renderAdd: (() => NdChild)|null,
53
+ * props: GlobalAttributes
54
+ * }, instance: FileWallMode) => NdChild} template
55
+ */
26
56
  FileWallMode.use = function(template) {
27
57
  FileWallMode.defaultTemplate = template;
28
58
  };
29
59
 
60
+
61
+ /**
62
+ * @param {string|number} size - Cell size in pixels or CSS value
63
+ * @returns {this}
64
+ */
30
65
  FileWallMode.prototype.cellSize = function(size) {
31
66
  this.$description.cellSize = size;
32
67
  return this;
33
68
  };
34
69
 
70
+ /**
71
+ * @param {NdChild} label
72
+ * @returns {this}
73
+ */
35
74
  FileWallMode.prototype.addLabel = function(label) {
36
75
  this.$description.addLabel = label;
37
76
  return this;
38
77
  };
39
78
 
79
+ /**
80
+ * @param {NdChild} icon
81
+ * @returns {this}
82
+ */
40
83
  FileWallMode.prototype.addIcon = function(icon) {
41
84
  this.$description.addIcon = icon;
42
85
  return this;
43
86
  };
44
87
 
88
+ /**
89
+ * Custom render for each file cell.
90
+ * @param {(file: File, preview: FileItemPreview) => NdChild} fn
91
+ * @returns {this}
92
+ */
45
93
  FileWallMode.prototype.renderCell = function(fn) {
46
94
  this.$description.renderCell = fn;
47
95
  return this;
48
96
  };
49
97
 
98
+ /**
99
+ * Custom render for the "Add" cell.
100
+ * @param {() => NdChild} fn
101
+ * @returns {this}
102
+ */
50
103
  FileWallMode.prototype.renderAdd = function(fn) {
51
104
  this.$description.renderAdd = fn;
52
105
  return this;
@@ -1,30 +1,30 @@
1
- import Field from "./field/Field";
2
- import FormControl from "./FormControl";
3
- import StringField from "./field/types/StringField";
4
- import EmailField from "./field/types/EmailField";
5
- import PasswordField from "./field/types/PasswordField";
6
- import NumberField from "./field/types/NumberField";
7
- import TextAreaField from "./field/types/TextAreaField";
8
- import CheckboxField from "./field/types/CheckboxField";
9
- import RadioField from "./field/types/RadioField";
10
- import SelectField from "./field/types/SelectField";
11
- import HiddenField from "./field/types/HiddenField";
12
- import FileField from "./field/types/FileField";
13
- import DateField from "./field/types/DateField";
14
- import TimeField from "./field/types/TimeField";
15
- import TelField from "./field/types/TelField";
16
- import UrlField from "./field/types/UrlField";
17
- import ColorField from "./field/types/ColorField";
18
- import RangeField from "./field/types/RangeField";
19
- import ImageField from "./field/types/ImageField";
20
- import CheckboxGroupField from "./field/types/CheckboxGroupField";
21
- import AutocompleteField from "./field/types/AutocompleteField";
22
- import FieldCollection from "./field/FieldCollection";
23
- import FileNativeMode from "./field/types/file-field-mode/FileNativeMode";
24
- import FileDropzoneMode from "./field/types/file-field-mode/FileDropzoneMode";
25
- import FileUploadButtonMode from "./field/types/file-field-mode/FileUploadButtonMode";
26
- import FileWallMode from "./field/types/file-field-mode/FileWallMode";
27
- import FileAvatarMode from "./field/types/file-field-mode/FileAvatarMode";
1
+ import Field from './field/Field';
2
+ import FormControl from './FormControl';
3
+ import StringField from './field/types/StringField';
4
+ import EmailField from './field/types/EmailField';
5
+ import PasswordField from './field/types/PasswordField';
6
+ import NumberField from './field/types/NumberField';
7
+ import TextAreaField from './field/types/TextAreaField';
8
+ import CheckboxField from './field/types/CheckboxField';
9
+ import RadioField from './field/types/RadioField';
10
+ import SelectField from './field/types/SelectField';
11
+ import HiddenField from './field/types/HiddenField';
12
+ import FileField from './field/types/FileField';
13
+ import DateField from './field/types/DateField';
14
+ import TimeField from './field/types/TimeField';
15
+ import TelField from './field/types/TelField';
16
+ import UrlField from './field/types/UrlField';
17
+ import ColorField from './field/types/ColorField';
18
+ import RangeField from './field/types/RangeField';
19
+ import ImageField from './field/types/ImageField';
20
+ import CheckboxGroupField from './field/types/CheckboxGroupField';
21
+ import AutocompleteField from './field/types/AutocompleteField';
22
+ import FieldCollection from './field/FieldCollection';
23
+ import FileNativeMode from './field/types/file-field-mode/FileNativeMode';
24
+ import FileDropzoneMode from './field/types/file-field-mode/FileDropzoneMode';
25
+ import FileUploadButtonMode from './field/types/file-field-mode/FileUploadButtonMode';
26
+ import FileWallMode from './field/types/file-field-mode/FileWallMode';
27
+ import FileAvatarMode from './field/types/file-field-mode/FileAvatarMode';
28
28
 
29
29
  // import './field/FieldFactory';
30
30
 
@@ -58,4 +58,4 @@ export {
58
58
  FileUploadButtonMode,
59
59
  FileDropzoneMode,
60
60
 
61
- }
61
+ };
@@ -0,0 +1,73 @@
1
+ import type { ValidChild } from '../../../../types/elements';
2
+ import type { ObservableItem } from '../../../../types/observable';
3
+ import type { BaseComponent } from '../../BaseComponent';
4
+ import type { HasValidation } from '../../$traits/has-validation/HasValidation';
5
+
6
+ export type FieldDescription = {
7
+ name: string;
8
+ type: string;
9
+ key: string;
10
+ label: ValidChild | null;
11
+ placeholder: ValidChild | null;
12
+ help: ValidChild | null;
13
+ defaultValue: unknown;
14
+ disabled: boolean | ObservableItem<boolean>;
15
+ readonly: boolean | ObservableItem<boolean>;
16
+ rules: Array<{ fn: Function; params: unknown; message: string }>;
17
+ clearErrorOn: string;
18
+ validateOn: string;
19
+ value: ObservableItem | null;
20
+ clearable: boolean | ObservableItem<boolean> | null;
21
+ hasErrors: ObservableItem<boolean>;
22
+ errors: ObservableItem<string[]>;
23
+ showErrors: ObservableItem<boolean>;
24
+ render: ((desc: FieldDescription, instance: FieldInterface) => ValidChild) | null;
25
+ clearButtonIcon: ValidChild | null;
26
+ focus: ObservableItem<boolean>;
27
+ isDirty: ObservableItem<boolean>;
28
+ };
29
+
30
+ export interface FieldInterface extends BaseComponent, HasValidation {
31
+ forceShowErrors(forceValue: boolean): void;
32
+ key(key: string): this;
33
+ suffix(suffix: string): this;
34
+ field(): HTMLElement | DocumentFragment;
35
+ input(callback: (input: HTMLElement) => void): this;
36
+ model(observable: ObservableItem): this;
37
+ bind(observable: ObservableItem): this;
38
+ errors(errors: ObservableItem<string[]>): this;
39
+ type(type: string): this;
40
+ default(defaultValue: unknown): this;
41
+ label(text: ValidChild): this;
42
+ help(text: ValidChild): this;
43
+ hint(text: ValidChild): this;
44
+ placeholder(text: ValidChild): this;
45
+ disabled(disabled?: boolean | ObservableItem<boolean>): this;
46
+ readonly(readonly?: boolean | ObservableItem<boolean>): this;
47
+ value(): any;
48
+ setValue(newValue: unknown): this;
49
+ wrapperProps(wrapperProps: Record<string, string|number|ObservableItem>): this;
50
+ inputProps(inputProps: Record<string, string|number|ObservableItem>): this;
51
+ labelProps(labelProps: Record<string, string|number|ObservableItem>): this;
52
+ errorProps(errorProps: Record<string, string|number|ObservableItem>): this;
53
+ hintProps(hintProps: Record<string, string|number|ObservableItem>): this;
54
+ focus(): this;
55
+ blur(): this;
56
+ leading(content: ValidChild): this;
57
+ trailing(content: ValidChild): this;
58
+ bottom(content: ValidChild): this;
59
+ clearable(mode?: boolean | ObservableItem<boolean>): this;
60
+ clearButtonIcon(clearButtonIcon: ValidChild): this;
61
+ reset(): this;
62
+ render(template: (description: FieldDescription, instance: FieldInterface) => ValidChild): this;
63
+ }
64
+
65
+
66
+ export declare function Field(name: string, type?: string, props?: Record<string, string|number|ObservableItem>): FieldInterface;
67
+ export declare namespace Field {
68
+
69
+
70
+ function use(template: (description: FieldDescription, instance: FieldInterface) => ValidChild): void;
71
+
72
+
73
+ }
@@ -0,0 +1,53 @@
1
+ import type { ValidChild } from '../../../../types/elements';
2
+ import type { ObservableItem } from '../../../../types/observable';
3
+ import type { BaseComponent } from '../../BaseComponent';
4
+ import type { HasValidation } from '../../$traits/has-validation/HasValidation';
5
+ import type { FieldInterface } from './Field';
6
+ import type { GlobalAttributes } from '../../../../types/globals';
7
+
8
+ export type FieldCollectionDescription = {
9
+ name: string;
10
+ value: ObservableItem<unknown[]>;
11
+ rules: Array<{ fn: Function; params: unknown; message: string }>;
12
+ hasErrors: ObservableItem<boolean>;
13
+ errors: ObservableItem<string[]>;
14
+ showErrors: ObservableItem<boolean>;
15
+ defaultItem: unknown;
16
+ fieldBuilder: ((fields: FieldCollectionInterface, index: number) => ValidChild) | null;
17
+ renderItem: ((item: unknown, index: number) => ValidChild) | null;
18
+ renderAdd: (() => ValidChild) | null;
19
+ transition: string | null;
20
+ props: GlobalAttributes;
21
+ };
22
+
23
+ export interface FieldCollectionInterface extends BaseComponent, HasValidation {
24
+ fields(fieldBuilder: (fields: FieldCollectionInterface, index: number) => ValidChild): this;
25
+ data(defaultItem: unknown): this;
26
+ renderItem(fn: (item: unknown, index: number) => ValidChild): this;
27
+ renderAdd(fn: () => ValidChild): this;
28
+ transition(transitionName: string): this;
29
+ model(observable: ObservableItem<unknown[]>): this;
30
+ add(): void;
31
+ remove(item: unknown): this;
32
+ clear(): this;
33
+ reset(): this;
34
+ value(): unknown[];
35
+ count(): number;
36
+ isEmpty(): boolean;
37
+ onChange(handler: () => void): this;
38
+ onAdd(handler: () => void): this;
39
+ onRemove(handler: (item: unknown) => void): this;
40
+ min(minCount: number, message?: string): this;
41
+ max(maxCount: number, message?: string): this;
42
+ render(template: (description: FieldCollectionDescription, instance: FieldCollectionInterface) => ValidChild): this;
43
+ }
44
+
45
+
46
+ export declare function FieldCollection(name?: string, props?: Record<string, unknown>): FieldCollectionInterface;
47
+ export declare namespace FieldCollection {
48
+
49
+
50
+ function use(template: (description: FieldCollectionDescription, instance: FieldCollectionInterface) => ValidChild): void;
51
+
52
+
53
+ }
@@ -0,0 +1,64 @@
1
+ import type { ValidChild } from '../../../../types/elements';
2
+ import type { ObservableItem } from '../../../../types/observable';
3
+ import type { BaseComponent } from '../../BaseComponent';
4
+ import type { FieldInterface } from './Field';
5
+ import type { GlobalAttributes } from '../../../../types/globals';
6
+
7
+ export type FormControlDescription = {
8
+ data: unknown | null;
9
+ fieldBuilder: ((form: FormControlInterface) => void) | null;
10
+ layout: ((fields: Record<string, FieldInterface>) => ValidChild) | null;
11
+ errorsMode: 'dispatch' | 'inline' | 'summary' | 'none';
12
+ errorsPosition: 'top' | 'bottom';
13
+ errorsMapper: Record<string, string> | null;
14
+ renderErrors: ((errors: Record<string, string[]>) => ValidChild) | null;
15
+ submitting: ObservableItem<boolean>;
16
+ errors: ObservableItem<Record<string, string[]> | null>;
17
+ isDirty: ObservableItem<boolean>;
18
+ isValid: ObservableItem<boolean>;
19
+ props: GlobalAttributes;
20
+ };
21
+
22
+ export interface FormControlInterface extends BaseComponent {
23
+ fields(fieldBuilder: (form: FormControlInterface) => void): this;
24
+ get(fieldName: string): FieldInterface | null;
25
+ layout(layoutCallback: (fields: Record<string, FieldInterface>) => ValidChild): this;
26
+ errorsMode(mode: 'inline' | 'summary' | 'none'): this;
27
+ dispatchErrors(mapper?: Record<string, string> | null): this;
28
+ summarizeErrors(): Record<string, string[]>;
29
+ dispatchAndSummarize(mapper?: Record<string, string> | null): this;
30
+ errorsPosition(position: 'top' | 'bottom'): this;
31
+ errorsAtTop(): this;
32
+ errorsAtBottom(): this;
33
+ renderErrors(renderFn: (errors: Record<string, string[]>) => ValidChild): this;
34
+ reset(): this;
35
+ resetField(name: string): this;
36
+ submit(event?: Event): this;
37
+ trigger(...fieldNames: string[]): this;
38
+ disable(fieldName?: string | null): this;
39
+ enable(fieldName?: string | null): this;
40
+ values(): Record<string, unknown>;
41
+ watch(fieldName: string, handler: (value: unknown, field: FieldInterface) => void): this;
42
+ onSubmit(callback: (values: Record<string, unknown>, form: FormControlInterface) => void | Promise<void>): this;
43
+ onPreventSubmit(callback: (event: Event) => void): this;
44
+ onDebouncedSubmit(callback: (values: Record<string, unknown>) => void, delay?: number): this;
45
+ onSuccess(callback: (values: Record<string, unknown>) => void): this;
46
+ onError(callback: (errors: Record<string, string[]>) => void): this;
47
+ onChange(callback: () => void): this;
48
+ onReset(callback: () => void): this;
49
+ onBeforeSubmit(callback: () => void): this;
50
+ onAfterSubmit(callback: () => void): this;
51
+ onValidationError(callback: (errors: Record<string, string[]>) => void): this;
52
+ render(template: (description: FormControlDescription, instance: FormControlInterface) => ValidChild): this;
53
+ }
54
+
55
+
56
+ export declare function FormControl(props?: Record<string, unknown>): FormControlInterface;
57
+ export declare namespace FormControl {
58
+
59
+
60
+ function use(template: (description: FormControlDescription, instance: FormControlInterface) => ValidChild): void;
61
+ function create(props?: Record<string, unknown>): FormControlInterface;
62
+
63
+
64
+ }