native-document 1.0.165 → 1.0.168

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 (488) hide show
  1. package/.vitepress/config.js +166 -0
  2. package/CHANGELOG.md +153 -0
  3. package/components.d.ts +2 -0
  4. package/components.js +2 -1
  5. package/devtools/widget.js +1 -1
  6. package/dist/native-document.components.min.js +11589 -2983
  7. package/dist/native-document.dev.js +2280 -396
  8. package/dist/native-document.dev.js.map +1 -1
  9. package/dist/native-document.min.js +1 -1
  10. package/docs/advanced-components.md +213 -608
  11. package/docs/anchor.md +173 -312
  12. package/docs/cache.md +95 -803
  13. package/docs/cli.md +179 -0
  14. package/docs/components/accordion.md +172 -0
  15. package/docs/components/alert.md +99 -0
  16. package/docs/components/avatar.md +160 -0
  17. package/docs/components/badge.md +102 -0
  18. package/docs/components/breadcrumb.md +89 -0
  19. package/docs/components/button.md +183 -0
  20. package/docs/components/card.md +69 -0
  21. package/docs/components/context-menu.md +118 -0
  22. package/docs/components/data-table.md +345 -0
  23. package/docs/components/dropdown.md +214 -0
  24. package/docs/components/form/autocomplete-field.md +81 -0
  25. package/docs/components/form/checkbox-field.md +41 -0
  26. package/docs/components/form/checkbox-group-field.md +54 -0
  27. package/docs/components/form/color-field.md +64 -0
  28. package/docs/components/form/date-field.md +92 -0
  29. package/docs/components/form/field-collection.md +63 -0
  30. package/docs/components/form/file-field.md +203 -0
  31. package/docs/components/form/form-control.md +87 -0
  32. package/docs/components/form/image-field.md +90 -0
  33. package/docs/components/form/index.md +115 -0
  34. package/docs/components/form/number-field.md +65 -0
  35. package/docs/components/form/radio-field.md +51 -0
  36. package/docs/components/form/select-field.md +123 -0
  37. package/docs/components/form/slider.md +136 -0
  38. package/docs/components/form/string-field.md +134 -0
  39. package/docs/components/form/textarea-field.md +65 -0
  40. package/docs/components/form-fields.md +372 -0
  41. package/docs/components/getting-started.md +264 -0
  42. package/docs/components/index.md +337 -0
  43. package/docs/components/layout.md +279 -0
  44. package/docs/components/list.md +73 -0
  45. package/docs/components/menu.md +215 -0
  46. package/docs/components/modal.md +156 -0
  47. package/docs/components/pagination.md +95 -0
  48. package/docs/components/popover.md +131 -0
  49. package/docs/components/progress.md +111 -0
  50. package/docs/components/shortcut-manager.md +221 -0
  51. package/docs/components/simple-table.md +107 -0
  52. package/docs/components/skeleton.md +155 -0
  53. package/docs/components/spinner.md +100 -0
  54. package/docs/components/splitter.md +133 -0
  55. package/docs/components/stepper.md +163 -0
  56. package/docs/components/switch.md +113 -0
  57. package/docs/components/tabs.md +153 -0
  58. package/docs/components/toast.md +119 -0
  59. package/docs/components/tooltip.md +151 -0
  60. package/docs/components/traits.md +261 -0
  61. package/docs/conditional-rendering.md +170 -588
  62. package/docs/contributing.md +300 -25
  63. package/docs/core-concepts.md +205 -374
  64. package/docs/elements.md +251 -367
  65. package/docs/extending-native-document-element.md +192 -207
  66. package/docs/filters.md +153 -1122
  67. package/docs/getting-started.md +193 -267
  68. package/docs/i18n.md +241 -0
  69. package/docs/index.md +76 -0
  70. package/docs/lifecycle-events.md +143 -75
  71. package/docs/list-rendering.md +227 -852
  72. package/docs/memory-management.md +134 -47
  73. package/docs/native-document-element.md +337 -186
  74. package/docs/native-fetch.md +99 -630
  75. package/docs/observable-resource.md +364 -0
  76. package/docs/observables.md +592 -526
  77. package/docs/routing.md +244 -653
  78. package/docs/state-management.md +134 -241
  79. package/docs/svg-elements.md +231 -0
  80. package/docs/theming.md +409 -0
  81. package/docs/validation.md +95 -97
  82. package/docs/vitepress-conventions.md +219 -0
  83. package/eslint.config.js +28 -33
  84. package/i18n.js +1 -1
  85. package/i18n.ts +2 -0
  86. package/index.js +3 -0
  87. package/package.json +36 -14
  88. package/readme.md +269 -89
  89. package/src/components/$traits/has-draggable/HasDraggable.d.ts +4 -0
  90. package/src/components/$traits/has-draggable/HasDraggable.js +13 -0
  91. package/src/components/$traits/has-items/HasItems.d.ts +9 -0
  92. package/src/components/$traits/has-items/HasItems.js +6 -6
  93. package/src/components/$traits/has-position/HasFullPosition.d.ts +14 -0
  94. package/src/components/$traits/has-position/HasFullPosition.js +44 -0
  95. package/src/components/$traits/has-position/HasPosition.d.ts +7 -0
  96. package/src/components/$traits/has-position/HasPosition.js +23 -1
  97. package/src/components/$traits/has-resizable/HasResizable.d.ts +13 -0
  98. package/src/components/$traits/has-resizable/HasResizable.js +9 -0
  99. package/src/components/$traits/has-validation/HasValidation.d.ts +17 -0
  100. package/src/components/$traits/has-validation/HasValidation.js +54 -7
  101. package/src/components/BaseComponent.d.ts +32 -0
  102. package/src/components/BaseComponent.js +65 -9
  103. package/src/components/accordion/Accordion.js +39 -14
  104. package/src/components/accordion/AccordionItem.js +45 -14
  105. package/src/components/accordion/index.js +2 -2
  106. package/src/components/accordion/types/Accordion.d.ts +47 -0
  107. package/src/components/accordion/types/AccordionItem.d.ts +48 -0
  108. package/src/components/alert/Alert.js +70 -38
  109. package/src/components/alert/index.js +2 -2
  110. package/src/components/alert/types/Alert.d.ts +62 -0
  111. package/src/components/avatar/Avatar.js +49 -12
  112. package/src/components/avatar/AvatarGroup.js +50 -2
  113. package/src/components/avatar/index.js +2 -2
  114. package/src/components/avatar/types/Avatar.d.ts +74 -0
  115. package/src/components/avatar/types/AvatarGroup.d.ts +32 -0
  116. package/src/components/badge/Badge.js +125 -5
  117. package/src/components/badge/index.js +2 -2
  118. package/src/components/badge/types/Badge.d.ts +51 -0
  119. package/src/components/breadcrumb/BreadCrumb.js +61 -5
  120. package/src/components/breadcrumb/index.js +2 -2
  121. package/src/components/breadcrumb/types/BreadCrumb.d.ts +42 -0
  122. package/src/components/button/Button.js +164 -9
  123. package/src/components/button/index.js +1 -1
  124. package/src/components/button/types/Button.d.ts +62 -0
  125. package/src/components/card/Card.js +204 -32
  126. package/src/components/card/index.js +4 -4
  127. package/src/components/card/types/Card.d.ts +42 -0
  128. package/src/components/context-menu/ContextMenu.js +49 -5
  129. package/src/components/context-menu/ContextMenuGroup.js +15 -2
  130. package/src/components/context-menu/ContextMenuItem.js +14 -2
  131. package/src/components/context-menu/index.js +5 -5
  132. package/src/components/context-menu/types/ContextMenu.d.ts +30 -0
  133. package/src/components/context-menu/types/ContextMenuGroup.d.ts +18 -0
  134. package/src/components/context-menu/types/ContextMenuItem.d.ts +18 -0
  135. package/src/components/divider/Divider.js +120 -4
  136. package/src/components/divider/index.js +3 -3
  137. package/src/components/divider/types/Divider.d.ts +55 -0
  138. package/src/components/dropdown/Dropdown.js +239 -16
  139. package/src/components/dropdown/DropdownDivider.js +22 -2
  140. package/src/components/dropdown/DropdownGroup.js +44 -5
  141. package/src/components/dropdown/DropdownItem.js +76 -3
  142. package/src/components/dropdown/DropdownTrigger.js +49 -20
  143. package/src/components/dropdown/helpers.js +1 -1
  144. package/src/components/dropdown/index.js +6 -6
  145. package/src/components/dropdown/types/Dropdown.d.ts +88 -0
  146. package/src/components/dropdown/types/DropdownDivider.d.ts +20 -0
  147. package/src/components/dropdown/types/DropdownGroup.d.ts +25 -0
  148. package/src/components/dropdown/types/DropdownItem.d.ts +41 -0
  149. package/src/components/dropdown/types/DropdownTrigger.d.ts +32 -0
  150. package/src/components/form/FormControl.js +156 -13
  151. package/src/components/form/field/Field.js +172 -9
  152. package/src/components/form/field/FieldCollection.js +116 -12
  153. package/src/components/form/field/types/AutocompleteField.js +92 -2
  154. package/src/components/form/field/types/CheckboxField.js +43 -2
  155. package/src/components/form/field/types/CheckboxGroupField.js +83 -6
  156. package/src/components/form/field/types/ColorField.js +56 -3
  157. package/src/components/form/field/types/DateField.js +155 -4
  158. package/src/components/form/field/types/EmailField.js +54 -4
  159. package/src/components/form/field/types/FileField.js +140 -6
  160. package/src/components/form/field/types/HiddenField.js +27 -1
  161. package/src/components/form/field/types/ImageField.js +82 -3
  162. package/src/components/form/field/types/NumberField.js +97 -4
  163. package/src/components/form/field/types/PasswordField.js +103 -7
  164. package/src/components/form/field/types/RadioField.js +75 -4
  165. package/src/components/form/field/types/RangeField.js +67 -1
  166. package/src/components/form/field/types/SearchField.js +41 -2
  167. package/src/components/form/field/types/SelectField.js +133 -4
  168. package/src/components/form/field/types/StringField.js +91 -2
  169. package/src/components/form/field/types/TelField.js +55 -4
  170. package/src/components/form/field/types/TextAreaField.js +76 -2
  171. package/src/components/form/field/types/TimeField.js +120 -5
  172. package/src/components/form/field/types/UrlField.js +59 -4
  173. package/src/components/form/field/types/file-field-mode/FileAvatarMode.js +83 -4
  174. package/src/components/form/field/types/file-field-mode/FileDropzoneMode.js +61 -3
  175. package/src/components/form/field/types/file-field-mode/FileItemPreview.js +79 -3
  176. package/src/components/form/field/types/file-field-mode/FileNativeMode.js +24 -2
  177. package/src/components/form/field/types/file-field-mode/FileUploadButtonMode.js +64 -3
  178. package/src/components/form/field/types/file-field-mode/FileWallMode.js +56 -3
  179. package/src/components/form/index.js +28 -28
  180. package/src/components/form/types/Field.d.ts +73 -0
  181. package/src/components/form/types/FieldCollection.d.ts +53 -0
  182. package/src/components/form/types/FormControl.d.ts +64 -0
  183. package/src/components/form/types/fields/AutocompleteField.d.ts +48 -0
  184. package/src/components/form/types/fields/CheckboxField.d.ts +33 -0
  185. package/src/components/form/types/fields/CheckboxGroupField.d.ts +49 -0
  186. package/src/components/form/types/fields/ColorField.d.ts +37 -0
  187. package/src/components/form/types/fields/DateField.d.ts +70 -0
  188. package/src/components/form/types/fields/EmailField.d.ts +35 -0
  189. package/src/components/form/types/fields/FileAvatarMode.d.ts +46 -0
  190. package/src/components/form/types/fields/FileDropzoneMode.d.ts +28 -0
  191. package/src/components/form/types/fields/FileField.d.ts +56 -0
  192. package/src/components/form/types/fields/FileItemPreview.d.ts +35 -0
  193. package/src/components/form/types/fields/FileNativeMode.d.ts +21 -0
  194. package/src/components/form/types/fields/FileUploadButtonMode.d.ts +34 -0
  195. package/src/components/form/types/fields/FileWallMode.d.ts +32 -0
  196. package/src/components/form/types/fields/HiddenField.d.ts +26 -0
  197. package/src/components/form/types/fields/ImageField.d.ts +45 -0
  198. package/src/components/form/types/fields/NumberField.d.ts +48 -0
  199. package/src/components/form/types/fields/PasswordField.d.ts +46 -0
  200. package/src/components/form/types/fields/RadioField.d.ts +48 -0
  201. package/src/components/form/types/fields/RangeField.d.ts +44 -0
  202. package/src/components/form/types/fields/SearchField.d.ts +34 -0
  203. package/src/components/form/types/fields/SelectField.d.ts +71 -0
  204. package/src/components/form/types/fields/StringField.d.ts +48 -0
  205. package/src/components/form/types/fields/TelField.d.ts +37 -0
  206. package/src/components/form/types/fields/TextAreaField.d.ts +44 -0
  207. package/src/components/form/types/fields/TimeField.d.ts +51 -0
  208. package/src/components/form/types/fields/UrlField.d.ts +35 -0
  209. package/src/components/form/validation/Validation.js +54 -54
  210. package/src/components/index.d.ts +160 -0
  211. package/src/components/list/HasListItem.js +171 -0
  212. package/src/components/list/List.js +85 -67
  213. package/src/components/list/ListDivider.js +39 -0
  214. package/src/components/list/ListGroup.js +105 -38
  215. package/src/components/list/ListItem.js +158 -49
  216. package/src/components/list/index.js +8 -6
  217. package/src/components/list/types/List.d.ts +43 -0
  218. package/src/components/list/types/ListGroup.d.ts +37 -0
  219. package/src/components/list/types/ListItem.d.ts +53 -0
  220. package/src/components/menu/HasMenuItem.js +55 -6
  221. package/src/components/menu/Menu.js +113 -22
  222. package/src/components/menu/MenuDivider.js +18 -2
  223. package/src/components/menu/MenuGroup.js +61 -6
  224. package/src/components/menu/MenuItem.js +95 -11
  225. package/src/components/menu/MenuLink.js +27 -2
  226. package/src/components/menu/index.js +6 -6
  227. package/src/components/menu/types/Menu.d.ts +60 -0
  228. package/src/components/menu/types/MenuDivider.d.ts +19 -0
  229. package/src/components/menu/types/MenuGroup.d.ts +44 -0
  230. package/src/components/menu/types/MenuItem.d.ts +46 -0
  231. package/src/components/menu/types/MenuLink.d.ts +16 -0
  232. package/src/components/modal/Modal.js +258 -17
  233. package/src/components/modal/index.js +3 -3
  234. package/src/components/modal/types/Modal.d.ts +94 -0
  235. package/src/components/pagination/Pagination.js +155 -7
  236. package/src/components/pagination/index.js +3 -3
  237. package/src/components/pagination/types/Pagination.d.ts +68 -0
  238. package/src/components/popover/Popover.js +198 -11
  239. package/src/components/popover/PopoverFooter.js +33 -9
  240. package/src/components/popover/PopoverHeader.js +33 -8
  241. package/src/components/popover/index.js +4 -4
  242. package/src/components/popover/types/Popover.d.ts +83 -0
  243. package/src/components/popover/types/PopoverFooter.d.ts +24 -0
  244. package/src/components/popover/types/PopoverHeader.d.ts +26 -0
  245. package/src/components/progress/Progress.js +182 -13
  246. package/src/components/progress/index.js +3 -3
  247. package/src/components/progress/types/Progress.d.ts +77 -0
  248. package/src/components/skeleton/Skeleton.js +117 -49
  249. package/src/components/skeleton/index.js +3 -3
  250. package/src/components/skeleton/types/Skeleton.d.ts +55 -0
  251. package/src/components/slider/Slider.js +207 -10
  252. package/src/components/slider/index.js +2 -2
  253. package/src/components/slider/types/Slider.d.ts +82 -0
  254. package/src/components/spacer/Spacer.js +12 -3
  255. package/src/components/spacer/index.js +2 -2
  256. package/src/components/spacer/types/Spacer.d.ts +19 -0
  257. package/src/components/spinner/Spinner.js +180 -9
  258. package/src/components/spinner/index.js +3 -3
  259. package/src/components/spinner/types/Spinner.d.ts +71 -0
  260. package/src/components/splitter/Splitter.js +76 -13
  261. package/src/components/splitter/SplitterGutter.js +67 -5
  262. package/src/components/splitter/SplitterPanel.js +69 -2
  263. package/src/components/splitter/index.js +5 -5
  264. package/src/components/splitter/types/Splitter.d.ts +38 -0
  265. package/src/components/splitter/types/SplitterGutter.d.ts +38 -0
  266. package/src/components/splitter/types/SplitterPanel.d.ts +41 -0
  267. package/src/components/stacks/AbsoluteStack.js +23 -3
  268. package/src/components/stacks/FixedStack.js +23 -3
  269. package/src/components/stacks/HStack.js +24 -3
  270. package/src/components/stacks/PositionStack.js +111 -3
  271. package/src/components/stacks/RelativeStack.js +23 -3
  272. package/src/components/stacks/Stack.js +73 -2
  273. package/src/components/stacks/VStack.js +24 -4
  274. package/src/components/stacks/index.js +7 -7
  275. package/src/components/stacks/types/AbsoluteStack.d.ts +16 -0
  276. package/src/components/stacks/types/FixedStack.d.ts +16 -0
  277. package/src/components/stacks/types/HStack.d.ts +16 -0
  278. package/src/components/stacks/types/PositionStack.d.ts +54 -0
  279. package/src/components/stacks/types/RelativeStack.d.ts +17 -0
  280. package/src/components/stacks/types/Stack.d.ts +39 -0
  281. package/src/components/stacks/types/VStack.d.ts +16 -0
  282. package/src/components/stepper/Stepper.js +152 -12
  283. package/src/components/stepper/StepperStep.js +104 -3
  284. package/src/components/stepper/index.js +4 -4
  285. package/src/components/stepper/types/Stepper.d.ts +68 -0
  286. package/src/components/stepper/types/StepperStep.d.ts +54 -0
  287. package/src/components/switch/Switch.js +143 -6
  288. package/src/components/switch/index.js +1 -1
  289. package/src/components/switch/types/Switch.d.ts +55 -0
  290. package/src/components/table/Column.js +105 -6
  291. package/src/components/table/ColumnGroup.js +48 -3
  292. package/src/components/table/DataTable.js +256 -19
  293. package/src/components/table/SimpleTable.js +58 -4
  294. package/src/components/table/index.js +2 -2
  295. package/src/components/table/types/Column.d.ts +49 -0
  296. package/src/components/table/types/ColumnGroup.d.ts +28 -0
  297. package/src/components/table/types/DataTable.d.ts +97 -0
  298. package/src/components/table/types/SimpleTable.d.ts +40 -0
  299. package/src/components/tabs/Tabs.js +192 -5
  300. package/src/components/tabs/index.js +3 -3
  301. package/src/components/tabs/types/Tabs.d.ts +78 -0
  302. package/src/components/toast/Toast.js +133 -5
  303. package/src/components/toast/index.js +3 -3
  304. package/src/components/toast/types/Toast.d.ts +57 -0
  305. package/src/components/toast/types/ToastError.d.ts +7 -0
  306. package/src/components/toast/types/ToastInfo.d.ts +7 -0
  307. package/src/components/toast/types/ToastSuccess.d.ts +7 -0
  308. package/src/components/toast/types/ToastWarning.d.ts +7 -0
  309. package/src/components/tooltip/Tooltip.js +157 -13
  310. package/src/components/tooltip/index.js +2 -2
  311. package/src/components/tooltip/prototypes.js +1 -1
  312. package/src/components/tooltip/types/Tooltip.d.ts +65 -0
  313. package/src/core/data/MemoryManager.js +2 -2
  314. package/src/core/data/Observable.js +15 -18
  315. package/src/core/data/ObservableArray.js +118 -46
  316. package/src/core/data/ObservableChecker.js +2 -2
  317. package/src/core/data/ObservableItem.js +135 -21
  318. package/src/core/data/ObservableObject.js +126 -35
  319. package/src/core/data/ObservableResource.js +118 -3
  320. package/src/core/data/Store.js +142 -26
  321. package/src/core/data/observable-helpers/observable.is-to.js +196 -1
  322. package/src/core/data/observable-helpers/observable.prototypes.js +35 -8
  323. package/src/core/elements/anchor/anchor-with-sentinel.js +23 -2
  324. package/src/core/elements/anchor/anchor.js +16 -7
  325. package/src/core/elements/anchor/one-child-anchor-overwriting.js +2 -2
  326. package/src/core/elements/content-formatter.js +1 -1
  327. package/src/core/elements/control/for-each-array.js +9 -9
  328. package/src/core/elements/control/for-each.js +14 -14
  329. package/src/core/elements/control/show-if.js +11 -11
  330. package/src/core/elements/control/show-when.js +5 -5
  331. package/src/core/elements/control/switch.js +14 -14
  332. package/src/core/elements/description-list.js +1 -1
  333. package/src/core/elements/form.js +2 -2
  334. package/src/core/elements/fragment.js +1 -1
  335. package/src/core/elements/html5-semantics.js +1 -1
  336. package/src/core/elements/img.js +3 -3
  337. package/src/core/elements/interactive.js +1 -1
  338. package/src/core/elements/list.js +1 -1
  339. package/src/core/elements/medias.js +1 -1
  340. package/src/core/elements/meta-data.js +1 -1
  341. package/src/core/elements/svg.js +1 -1
  342. package/src/core/elements/table.js +1 -1
  343. package/src/core/errors/ArgTypesError.js +1 -1
  344. package/src/core/utils/HasEventEmitter.js +36 -2
  345. package/src/core/utils/args-types.js +9 -9
  346. package/src/core/utils/cache.js +1 -1
  347. package/src/core/utils/callback-handler.js +29 -0
  348. package/src/core/utils/debug-manager.js +6 -6
  349. package/src/core/utils/events.js +139 -139
  350. package/src/core/utils/filters/date.js +84 -3
  351. package/src/core/utils/filters/standard.js +136 -11
  352. package/src/core/utils/filters/strings.js +34 -2
  353. package/src/core/utils/filters/utils.js +40 -4
  354. package/src/core/utils/formatters.js +4 -4
  355. package/src/core/utils/helpers.js +39 -7
  356. package/src/core/utils/localstorage.js +11 -11
  357. package/src/core/utils/memoize.js +56 -3
  358. package/src/core/utils/plugins-manager.js +3 -3
  359. package/src/core/utils/property-accumulator.js +6 -6
  360. package/src/core/utils/prototypes.js +26 -1
  361. package/src/core/utils/shortcut-manager.js +2 -2
  362. package/src/core/utils/validator.js +8 -8
  363. package/src/core/wrappers/AttributesWrapper.js +32 -22
  364. package/src/core/wrappers/DocumentObserver.js +3 -3
  365. package/src/core/wrappers/ElementCreator.js +5 -5
  366. package/src/core/wrappers/HtmlElementWrapper.js +38 -12
  367. package/src/core/wrappers/NDElement.js +328 -22
  368. package/src/core/wrappers/NdPrototype.js +60 -16
  369. package/src/core/wrappers/SingletonView.js +50 -2
  370. package/src/core/wrappers/SvgElementWrapper.js +1 -1
  371. package/src/core/wrappers/constants.js +35 -2
  372. package/src/core/wrappers/prototypes/attributes-extensions.js +7 -7
  373. package/src/core/wrappers/prototypes/nd-element-extensions.js +72 -6
  374. package/src/core/wrappers/prototypes/nd-element.transition.extensions.js +42 -2
  375. package/src/core/wrappers/template-cloner/NodeCloner.js +53 -8
  376. package/src/core/wrappers/template-cloner/TemplateCloner.js +75 -6
  377. package/src/core/wrappers/template-cloner/attributes-hydrator.js +58 -2
  378. package/src/core/wrappers/template-cloner/utils.js +42 -6
  379. package/src/fetch/NativeFetch.js +3 -3
  380. package/src/i18n/bin/scan.js +6 -6
  381. package/src/i18n/index.d.ts +2 -0
  382. package/src/i18n/service/I18nService.d.ts +27 -0
  383. package/src/i18n/service/I18nService.js +5 -5
  384. package/src/i18n/service/functions.d.ts +22 -0
  385. package/src/i18n/service/functions.js +2 -2
  386. package/src/router/Route.js +3 -3
  387. package/src/router/RouteGroupHelper.js +2 -2
  388. package/src/router/Router.js +15 -15
  389. package/src/router/RouterComponent.js +33 -7
  390. package/src/router/link.js +4 -4
  391. package/src/router/modes/HashRouter.js +2 -2
  392. package/src/router/modes/HistoryRouter.js +2 -2
  393. package/src/router/modes/MemoryRouter.js +1 -1
  394. package/src/ui/components/accordion/AccordionItemRender.js +3 -3
  395. package/src/ui/components/accordion/AccordionRender.js +1 -1
  396. package/src/ui/components/alert/AlertRender.js +10 -10
  397. package/src/ui/components/avatar/avata-group/AvatarGroupRender.js +1 -1
  398. package/src/ui/components/avatar/avatar/AvatarRender.js +1 -1
  399. package/src/ui/components/breadcrumb/BreadcrumbRender.js +2 -2
  400. package/src/ui/components/button/ButtonRender.js +1 -1
  401. package/src/ui/components/card/CardRender.js +133 -0
  402. package/src/ui/components/card/card.css +169 -0
  403. package/src/ui/components/contextmenu/ContextmenuRender.js +6 -6
  404. package/src/ui/components/dropdown/DropdownRender.js +8 -8
  405. package/src/ui/components/dropdown/group/DropdownGroupRender.js +2 -2
  406. package/src/ui/components/dropdown/item/DropdownItemRender.js +1 -1
  407. package/src/ui/components/form/FieldCollectionRender.js +2 -2
  408. package/src/ui/components/form/FormControlRender.js +5 -5
  409. package/src/ui/components/form/fields/AutocompleteFieldRender.js +3 -3
  410. package/src/ui/components/form/fields/CheckboxFieldRender.js +1 -1
  411. package/src/ui/components/form/fields/CheckboxGroupFieldRender.js +1 -1
  412. package/src/ui/components/form/fields/DateFieldRender.js +7 -7
  413. package/src/ui/components/form/fields/EmailFieldRender.js +1 -1
  414. package/src/ui/components/form/fields/FieldRender.js +4 -4
  415. package/src/ui/components/form/fields/FileFieldRender.js +1 -1
  416. package/src/ui/components/form/fields/PasswordFieldRender.js +2 -2
  417. package/src/ui/components/form/fields/RadioFieldRender.js +1 -1
  418. package/src/ui/components/form/fields/RangeFieldRender.js +1 -1
  419. package/src/ui/components/form/fields/SelectFieldRender.js +2 -2
  420. package/src/ui/components/form/fields/SliderFieldRender.js +6 -6
  421. package/src/ui/components/form/fields/StringFieldRender.js +1 -1
  422. package/src/ui/components/form/fields/TelFieldRender.js +1 -1
  423. package/src/ui/components/form/fields/TextAreaFieldRender.js +1 -1
  424. package/src/ui/components/form/fields/TimeFieldRender.js +3 -3
  425. package/src/ui/components/form/fields/UrlFieldRender.js +1 -1
  426. package/src/ui/components/form/file-upload-mode/FileAvatarModeRender.js +1 -1
  427. package/src/ui/components/form/file-upload-mode/FileDropzoneModeRender.js +2 -2
  428. package/src/ui/components/form/file-upload-mode/FileUploadButtonModeRender.js +2 -2
  429. package/src/ui/components/form/file-upload-mode/FileWallModeRender.js +1 -1
  430. package/src/ui/components/form/helpers.js +8 -8
  431. package/src/ui/components/form/index.js +27 -27
  432. package/src/ui/components/list/ListRender.js +18 -0
  433. package/src/ui/components/list/divider/ListDividerRender.js +10 -0
  434. package/src/ui/components/list/divider/list-divider.css +12 -0
  435. package/src/ui/components/list/group/ListGroupRender.js +61 -0
  436. package/src/ui/components/list/group/list-group.css +62 -0
  437. package/src/ui/components/list/item/ListItemRender.js +238 -0
  438. package/src/ui/components/list/item/list-item.css +191 -0
  439. package/src/ui/components/list/list.css +24 -0
  440. package/src/ui/components/menu/MenuDividerRender.js +1 -1
  441. package/src/ui/components/menu/MenuGroupRender.js +3 -3
  442. package/src/ui/components/menu/MenuItemRender.js +2 -2
  443. package/src/ui/components/menu/MenuLinkRender.js +3 -3
  444. package/src/ui/components/menu/helpers.js +4 -4
  445. package/src/ui/components/modal/ModalRender.js +4 -4
  446. package/src/ui/components/pagination/PaginationRender.js +9 -9
  447. package/src/ui/components/popover/PopoverRender.js +7 -7
  448. package/src/ui/components/progress/ProgressRender.js +12 -12
  449. package/src/ui/components/skeleton/SkeletonRender.js +56 -0
  450. package/src/ui/components/spacer/SpacerRender.js +10 -0
  451. package/src/ui/components/splitter/SplitterGutterRender.js +1 -1
  452. package/src/ui/components/splitter/SplitterPanelRender.js +2 -2
  453. package/src/ui/components/stacks/PositionStackRender.js +1 -1
  454. package/src/ui/components/stacks/StackRender.js +1 -1
  455. package/src/ui/components/stacks/absolute-stack/AbsoluteStackRender.js +1 -1
  456. package/src/ui/components/stacks/fixed-stack/FixedStackRender.js +1 -1
  457. package/src/ui/components/stacks/h-stack/HStackRender.js +1 -1
  458. package/src/ui/components/stacks/index.js +5 -5
  459. package/src/ui/components/stacks/relative-stack/RelativeStackRender.js +1 -1
  460. package/src/ui/components/stacks/v-stack/VStackRender.js +1 -1
  461. package/src/ui/components/stepper/StepperRender.js +2 -2
  462. package/src/ui/components/stepper/StepperStepRender.js +4 -4
  463. package/src/ui/components/switch/SwitchRender.js +4 -4
  464. package/src/ui/components/table/data-table/DataTableRender.js +5 -5
  465. package/src/ui/components/table/data-table/bulk-actions.js +7 -7
  466. package/src/ui/components/table/data-table/pagination.js +6 -6
  467. package/src/ui/components/table/data-table/tables.js +25 -25
  468. package/src/ui/components/table/data-table/toolbar.js +3 -3
  469. package/src/ui/components/table/simple-table/SimpleTableRender.js +8 -8
  470. package/src/ui/components/tabs/TabsRender.js +11 -11
  471. package/src/ui/components/toast/ToastRender.js +3 -3
  472. package/src/ui/components/tooltip/TooltipRender.js +1 -1
  473. package/src/ui/index.js +44 -36
  474. package/types/elements.d.ts +163 -1037
  475. package/types/forms.d.ts +16 -20
  476. package/types/globals.d.ts +543 -0
  477. package/types/images.d.ts +2 -2
  478. package/types/observable-resource.d.ts +3 -0
  479. package/types/property-accumulator.d.ts +4 -4
  480. package/types/store.d.ts +26 -2
  481. package/types/validator.ts +3 -3
  482. package/ui.js +1 -0
  483. package/src/components/form/field/DefaultRender.js +0 -77
  484. package/src/components/form/field/FieldFactory.js +0 -107
  485. package/src/components/skeleton/SkeletonList.js +0 -0
  486. package/src/components/skeleton/SkeletonParagraph.js +0 -0
  487. package/src/components/skeleton/SkeletonTable.js +0 -0
  488. /package/{src/components/skeleton/SkeletonCard.js → docs/tutorials/.gitkeep} +0 -0
@@ -1,8 +1,32 @@
1
- import Field from "../Field";
2
- import {Validation} from "../../validation/Validation";
1
+ import Field from '../../field/Field';
2
+ import {Validation} from '../../validation/Validation';
3
3
  import { $ } from '../../../../core/data/Observable';
4
- import FileItemPreview from "./file-field-mode/FileItemPreview";
4
+ import FileItemPreview from '../../field/types/file-field-mode/FileItemPreview';
5
5
 
6
+ /**
7
+ * File upload field. Supports single/multiple files, MIME type and extension filtering,
8
+ * size validation, file count limits, and multiple display modes (native, dropzone, button, wall, avatar).
9
+ * @example
10
+ * const field = new FileField('documents')
11
+ * .label(Span('Upload documents'))
12
+ * .multiple(true)
13
+ * .accept(['application/pdf', 'image/png'])
14
+ * .maxSize(5 * 1024 * 1024, 'Max 5MB per file')
15
+ * .maxFiles(3, 'Max 3 files')
16
+ * .mode('dropzone')
17
+ * .onFileAdd((file) => console.log('added', file.name))
18
+ * .onFileRemove((file) => console.log('removed', file.name));
19
+ *
20
+ * FileField.use((description, instance) => {
21
+ * // description.accept, description.multiple, description.mode,
22
+ * // description.files — Observable<FileItemPreview[]>, description.fileIcons...
23
+ * return Input({ type: 'file', multiple: description.multiple });
24
+ * });
25
+ *
26
+ * @constructor
27
+ * @param {string} name
28
+ * @param {GlobalAttributes} [props={}]
29
+ */
6
30
  export default function FileField(name, props = {}) {
7
31
  if(!(this instanceof FileField)) {
8
32
  return new FileField(name, props);
@@ -16,12 +40,31 @@ export default function FileField(name, props = {}) {
16
40
  mode: null,
17
41
  files: $.array([]),
18
42
  fileIcons: [],
19
- props
43
+ props,
20
44
  });
21
45
  }
22
46
 
23
47
  FileField.defaultTemplate = null;
24
48
 
49
+ /**
50
+ * Registers the render template for FileField.
51
+ * @param {(description: {
52
+ * name: string,
53
+ * type: 'file',
54
+ * label: NdChild|null,
55
+ * accept: string|null,
56
+ * multiple: boolean,
57
+ * mode: 'native'|'dropzone'|'button'|'wall'|'avatar'|null,
58
+ * files: Observable<FileItemPreview[]>,
59
+ * fileIcons: Array<(file: File) => NdChild>,
60
+ * disabled: boolean|Observable<boolean>,
61
+ * readonly: boolean|Observable<boolean>,
62
+ * hasErrors: Observable<boolean>,
63
+ * errors: Observable<string[]>,
64
+ * showErrors: Observable<boolean>,
65
+ * props: GlobalAttributes
66
+ * }, instance: FileField) => NdChild} template
67
+ */
25
68
  FileField.use = function(template) {
26
69
  FileField.defaultTemplate = template;
27
70
  };
@@ -29,60 +72,120 @@ FileField.use = function(template) {
29
72
  FileField.prototype = Object.create(Field.prototype);
30
73
  FileField.prototype.constructor = FileField;
31
74
 
75
+ /**
76
+ * @param {string|string[]} mimeTypes
77
+ * @returns {this}
78
+ */
32
79
  FileField.prototype.accept = function(mimeTypes) {
33
80
  this.$description.accept = Array.isArray(mimeTypes) ? mimeTypes.join(',') : mimeTypes;
34
81
  return this;
35
82
  };
36
83
 
84
+ /**
85
+ * @param {boolean} [enabled=true]
86
+ * @returns {this}
87
+ */
37
88
  FileField.prototype.multiple = function(enabled = true) {
38
89
  this.$description.multiple = enabled;
39
90
  return this;
40
91
  };
41
92
 
93
+ /**
94
+ * @param {'native'|'dropzone'|'button'|'wall'|'avatar'} mode
95
+ * @returns {this}
96
+ */
42
97
  FileField.prototype.mode = function(mode) {
43
98
  this.$description.mode = mode;
44
99
  return this;
45
100
  };
46
101
 
102
+ /**
103
+ * @param {number} bytes
104
+ * @param {string} [message]
105
+ * @returns {this}
106
+ */
47
107
  FileField.prototype.maxSize = function(bytes, message) {
48
108
  return this.addRule(Validation.maxFileSize, [bytes], message);
49
109
  };
50
110
 
111
+ /**
112
+ * @param {number} bytes
113
+ * @param {string} [message]
114
+ * @returns {this}
115
+ */
51
116
  FileField.prototype.minSize = function(bytes, message) {
52
117
  return this.addRule(Validation.minFileSize, [bytes], message);
53
118
  };
54
119
 
120
+ /**
121
+ * @param {string[]} types - e.g. ['image/png', 'application/pdf']
122
+ * @param {string} [message]
123
+ * @returns {this}
124
+ */
55
125
  FileField.prototype.mimeTypes = function(types, message) {
56
126
  return this.addRule(Validation.mimeTypes, [types], message);
57
127
  };
58
128
 
129
+ /**
130
+ * @param {string[]} extensions - e.g. ['.pdf', '.docx']
131
+ * @param {string} [message]
132
+ * @returns {this}
133
+ */
59
134
  FileField.prototype.extensions = function(extensions, message) {
60
135
  return this.addRule(Validation.extensions, [extensions], message);
61
136
  };
62
137
 
138
+ /**
139
+ * @param {number} max
140
+ * @param {string} [message]
141
+ * @returns {this}
142
+ */
63
143
  FileField.prototype.maxFiles = function(max, message) {
64
144
  return this.addRule(Validation.maxFiles, [max], message);
65
145
  };
66
146
 
147
+ /**
148
+ * @param {number} min
149
+ * @param {string} [message]
150
+ * @returns {this}
151
+ */
67
152
  FileField.prototype.minFiles = function(min, message) {
68
153
  return this.addRule(Validation.minFiles, [min], message);
69
154
  };
70
155
 
156
+ /**
157
+ * @param {(file: File) => void} handler
158
+ * @returns {this}
159
+ */
71
160
  FileField.prototype.onFileAdd = function(handler) {
72
161
  this.on('fileAdd', handler);
73
162
  return this;
74
163
  };
75
164
 
165
+ /**
166
+ * @param {() => void} handler
167
+ * @returns {this}
168
+ */
76
169
  FileField.prototype.onReset = function(handler) {
77
170
  this.on('reset', handler);
78
171
  return this;
79
172
  };
80
173
 
174
+ /**
175
+ * @param {(file: File) => void} handler
176
+ * @returns {this}
177
+ */
81
178
  FileField.prototype.onFileRemove = function(handler) {
82
179
  this.on('fileRemove', handler);
83
180
  return this;
84
181
  };
85
182
 
183
+ /**
184
+ * Adds a single file and optionally triggers a value update.
185
+ * @param {File} file
186
+ * @param {boolean} [update=true]
187
+ * @returns {this}
188
+ */
86
189
  FileField.prototype.addFile = function(file, update = true) {
87
190
  const item = new FileItemPreview(file);
88
191
  this.$description.files.push(item);
@@ -91,11 +194,21 @@ FileField.prototype.addFile = function(file, update = true) {
91
194
  return this;
92
195
  };
93
196
 
197
+ /**
198
+ * Replaces all current files with the given list.
199
+ * @param {File[]} files
200
+ * @returns {this}
201
+ */
94
202
  FileField.prototype.setFiles = function(files) {
95
203
  this.$description.files.clear();
96
204
  this.addFiles(files);
97
205
  return this;
98
- }
206
+ };
207
+
208
+ /**
209
+ * @param {File[]} files
210
+ * @returns {this}
211
+ */
99
212
  FileField.prototype.addFiles = function(files) {
100
213
  if (!Array.isArray(files)) {
101
214
  throw new Error('addFiles expects an array of files');
@@ -113,6 +226,10 @@ FileField.prototype.$update = function() {
113
226
  this.validate();
114
227
  };
115
228
 
229
+ /**
230
+ * @param {File} file
231
+ * @returns {this}
232
+ */
116
233
  FileField.prototype.removeFile = function(file) {
117
234
  this.$description.files.remove(file);
118
235
  this.emit('fileRemove', file);
@@ -120,10 +237,17 @@ FileField.prototype.removeFile = function(file) {
120
237
  return this;
121
238
  };
122
239
 
240
+ /**
241
+ * @returns {File[]}
242
+ */
123
243
  FileField.prototype.getFiles = function() {
124
244
  return this.$description.files.val();
125
245
  };
126
246
 
247
+ /**
248
+ * Clears all files and emits the reset event.
249
+ * @returns {this}
250
+ */
127
251
  FileField.prototype.reset = function() {
128
252
  this.$description.files.clear();
129
253
  this.emit('reset');
@@ -131,12 +255,22 @@ FileField.prototype.reset = function() {
131
255
  return this;
132
256
  };
133
257
 
258
+ /**
259
+ * Adds a custom icon resolver for a specific file.
260
+ * @param {(file: File) => NdChild} desc
261
+ * @returns {this}
262
+ */
134
263
  FileField.prototype.fileIcon = function(desc) {
135
264
  this.$description.fileIcons.push(desc);
136
265
  return this;
137
266
  };
138
267
 
268
+ /**
269
+ * Sets icon resolvers by file extension or MIME type.
270
+ * @param {Record<string, NdChild>} icons
271
+ * @returns {this}
272
+ */
139
273
  FileField.prototype.fileIcons = function(icons) {
140
274
  this.$description.fileIcons = icons;
141
275
  return this;
142
- }
276
+ };
@@ -1,5 +1,21 @@
1
- import Field from "../Field";
1
+ import Field from '../../field/Field';
2
2
 
3
+ /**
4
+ * Hidden field for carrying form values that are not displayed to the user.
5
+ * Participates in FormControl validation and value collection.
6
+ * @example
7
+ * const field = new HiddenField('userId')
8
+ * .model(userIdObs);
9
+ *
10
+ * HiddenField.use((description, instance) => {
11
+ * // description.name, description.value
12
+ * return Input({ type: 'hidden', name: description.name });
13
+ * });
14
+ *
15
+ * @constructor
16
+ * @param {string} name
17
+ * @param {GlobalAttributes} [props]
18
+ */
3
19
  export default function HiddenField(name, props) {
4
20
  if(!(this instanceof HiddenField)) {
5
21
  return new HiddenField(name, props);
@@ -10,6 +26,16 @@ export default function HiddenField(name, props) {
10
26
 
11
27
  HiddenField.defaultTemplate = null;
12
28
 
29
+ /**
30
+ * Registers the render template for HiddenField.
31
+ * @param {(description: {
32
+ * name: string,
33
+ * type: 'hidden',
34
+ * value: Observable<*>|null,
35
+ * defaultValue: *,
36
+ * props: GlobalAttributes
37
+ * }, instance: HiddenField) => NdChild} template
38
+ */
13
39
  HiddenField.use = function(template) {
14
40
  HiddenField.defaultTemplate = template;
15
41
  };
@@ -1,6 +1,29 @@
1
- import FileField from "./FileField";
2
- import {Validation} from "../../validation/Validation";
1
+ import FileField from '../../field/types/FileField';
2
+ import {Validation} from '../../validation/Validation';
3
3
 
4
+ /**
5
+ * Image upload field. Extends FileField with image-specific validation:
6
+ * dimensions, aspect ratio, max dimensions, min dimensions, and crop mode.
7
+ * Automatically restricts accepted MIME types to jpeg, png, gif, webp.
8
+ * @example
9
+ * const field = new ImageField('avatar')
10
+ * .label(Span('Profile picture'))
11
+ * .maxSize(2 * 1024 * 1024, 'Max 2MB')
12
+ * .maxDimensions(1200, 1200, 'Max 1200x1200px')
13
+ * .aspectRatio(1, 'Must be square')
14
+ * .crop(true)
15
+ * .required();
16
+ *
17
+ * ImageField.use((description, instance) => {
18
+ * // description.maxWidth, description.maxHeight, description.crop,
19
+ * // description.files, description.multiple, description.accept...
20
+ * return Input({ type: 'file', accept: 'image/*' });
21
+ * });
22
+ *
23
+ * @constructor
24
+ * @param {string} name
25
+ * @param {GlobalAttributes} [props]
26
+ */
4
27
  export default function ImageField(name, props) {
5
28
  if(!(this instanceof ImageField)) {
6
29
  return new ImageField(name, props);
@@ -11,7 +34,7 @@ export default function ImageField(name, props) {
11
34
  Object.assign(this.$description, {
12
35
  maxWidth: null,
13
36
  maxHeight: null,
14
- crop: false
37
+ crop: false,
15
38
  });
16
39
 
17
40
  // Auto-apply image mime types
@@ -20,6 +43,27 @@ export default function ImageField(name, props) {
20
43
 
21
44
  ImageField.defaultTemplate = null;
22
45
 
46
+ /**
47
+ * Registers the render template for ImageField.
48
+ * @param {(description: {
49
+ * name: string,
50
+ * type: 'image',
51
+ * label: NdChild|null,
52
+ * accept: string,
53
+ * multiple: boolean,
54
+ * mode: string|null,
55
+ * files: Observable<FileItemPreview[]>,
56
+ * maxWidth: number|null,
57
+ * maxHeight: number|null,
58
+ * crop: boolean,
59
+ * disabled: boolean|Observable<boolean>,
60
+ * readonly: boolean|Observable<boolean>,
61
+ * hasErrors: Observable<boolean>,
62
+ * errors: Observable<string[]>,
63
+ * showErrors: Observable<boolean>,
64
+ * props: GlobalAttributes
65
+ * }, instance: ImageField) => NdChild} template
66
+ */
23
67
  ImageField.use = function(template) {
24
68
  ImageField.defaultTemplate = template;
25
69
  };
@@ -27,33 +71,68 @@ ImageField.use = function(template) {
27
71
  ImageField.prototype = Object.create(FileField.prototype);
28
72
  ImageField.prototype.constructor = ImageField;
29
73
 
74
+ /**
75
+ * @param {number} width - Max width in pixels
76
+ * @returns {this}
77
+ */
30
78
  ImageField.prototype.maxWidth = function(width) {
31
79
  this.$description.maxWidth = width;
32
80
  return this;
33
81
  };
34
82
 
83
+ /**
84
+ * @param {number} height - Max height in pixels
85
+ * @returns {this}
86
+ */
35
87
  ImageField.prototype.maxHeight = function(height) {
36
88
  this.$description.maxHeight = height;
37
89
  return this;
38
90
  };
39
91
 
92
+ /**
93
+ * @param {boolean} [enabled=true]
94
+ * @returns {this}
95
+ */
40
96
  ImageField.prototype.crop = function(enabled = true) {
41
97
  this.$description.crop = enabled;
42
98
  return this;
43
99
  };
44
100
 
101
+ /**
102
+ * @param {number} width
103
+ * @param {number} height
104
+ * @param {string} [message]
105
+ * @returns {this}
106
+ */
45
107
  ImageField.prototype.dimensions = function(width, height, message) {
46
108
  return this.addRule(Validation.dimensions, [width, height], message);
47
109
  };
48
110
 
111
+ /**
112
+ * @param {number} width
113
+ * @param {number} height
114
+ * @param {string} [message]
115
+ * @returns {this}
116
+ */
49
117
  ImageField.prototype.maxDimensions = function(width, height, message) {
50
118
  return this.addRule(Validation.maxDimensions, [width, height], message);
51
119
  };
52
120
 
121
+ /**
122
+ * @param {number} width
123
+ * @param {number} height
124
+ * @param {string} [message]
125
+ * @returns {this}
126
+ */
53
127
  ImageField.prototype.minDimensions = function(width, height, message) {
54
128
  return this.addRule(Validation.minDimensions, [width, height], message);
55
129
  };
56
130
 
131
+ /**
132
+ * @param {number} ratio - e.g. 1 for square, 16/9 for widescreen
133
+ * @param {string} [message]
134
+ * @returns {this}
135
+ */
57
136
  ImageField.prototype.aspectRatio = function(ratio, message) {
58
137
  return this.addRule(Validation.aspectRatio, [ratio], message);
59
138
  };
@@ -1,6 +1,29 @@
1
- import {Validation} from "../../validation/Validation";
2
- import Field from "../Field";
3
-
1
+ import {Validation} from '../../validation/Validation';
2
+ import Field from '../../field/Field';
3
+
4
+ /**
5
+ * Numeric input field. Supports min/max/between validation, integer, positive/negative,
6
+ * multipleOf, decimal precision, step, and prefix/suffix display.
7
+ * @example
8
+ * const field = new NumberField('price')
9
+ * .label(Span('Price'))
10
+ * .min(0, 'Must be positive')
11
+ * .max(9999)
12
+ * .decimals(2)
13
+ * .prefix(Span('€'))
14
+ * .required();
15
+ *
16
+ * NumberField.use((description, instance) => {
17
+ * // description.name, description.step, description.decimals,
18
+ * // description.prefix, description.suffix, description.value...
19
+ * return Input({ type: 'number', step: description.step ?? 1 });
20
+ * });
21
+ *
22
+ * @constructor
23
+ * @param {string} name
24
+ * @param {string} [type='number']
25
+ * @param {GlobalAttributes} [props={}]
26
+ */
4
27
  export default function NumberField(name, type = 'number', props = {}) {
5
28
  if(!(this instanceof NumberField)) {
6
29
  return new NumberField(name, type, props);
@@ -19,6 +42,26 @@ export default function NumberField(name, type = 'number', props = {}) {
19
42
 
20
43
  NumberField.defaultTemplate = null;
21
44
 
45
+ /**
46
+ * Registers the render template for NumberField.
47
+ * @param {(description: {
48
+ * name: string,
49
+ * type: string,
50
+ * label: NdChild|null,
51
+ * placeholder: NdChild|null,
52
+ * value: Observable<number>|null,
53
+ * step: number|null,
54
+ * decimals: number|null,
55
+ * prefix: NdChild|null,
56
+ * suffix: NdChild|null,
57
+ * disabled: boolean|Observable<boolean>,
58
+ * readonly: boolean|Observable<boolean>,
59
+ * hasErrors: Observable<boolean>,
60
+ * errors: Observable<string[]>,
61
+ * showErrors: Observable<boolean>,
62
+ * props: GlobalAttributes
63
+ * }, instance: NumberField) => NdChild} template
64
+ */
22
65
  NumberField.use = function(template) {
23
66
  NumberField.defaultTemplate = template;
24
67
  };
@@ -26,58 +69,108 @@ NumberField.use = function(template) {
26
69
  NumberField.prototype = Object.create(Field.prototype);
27
70
  NumberField.prototype.constructor = NumberField;
28
71
 
72
+ /**
73
+ * @param {number} min
74
+ * @param {string} [message]
75
+ * @returns {this}
76
+ */
29
77
  NumberField.prototype.min = function(min, message) {
30
78
  return this.addRule(Validation.min, [min], message);
31
79
  };
32
80
 
81
+ /**
82
+ * @param {number} max
83
+ * @param {string} [message]
84
+ * @returns {this}
85
+ */
33
86
  NumberField.prototype.max = function(max, message) {
34
87
  return this.addRule(Validation.max, [max], message);
35
88
  };
36
89
 
90
+ /**
91
+ * @param {number} min
92
+ * @param {number} max
93
+ * @param {string} [message]
94
+ * @returns {this}
95
+ */
37
96
  NumberField.prototype.between = function(min, max, message) {
38
97
  return this.addRule(Validation.between, [min, max], message);
39
98
  };
40
99
 
100
+ /**
101
+ * @param {string} [message]
102
+ * @returns {this}
103
+ */
41
104
  NumberField.prototype.integer = function(message) {
42
105
  return this.addRule(Validation.integer, [], message);
43
106
  };
44
107
 
108
+ /**
109
+ * @param {string} [message]
110
+ * @returns {this}
111
+ */
45
112
  NumberField.prototype.positive = function(message) {
46
113
  return this.addRule(Validation.positive, [], message);
47
114
  };
48
115
 
116
+ /** Alias for positive() */
49
117
  NumberField.prototype.unsigned = NumberField.prototype.positive;
50
118
 
119
+ /**
120
+ * @param {string} [message]
121
+ * @returns {this}
122
+ */
51
123
  NumberField.prototype.negative = function(message) {
52
124
  return this.addRule(Validation.negative, [], message);
53
125
  };
54
126
 
127
+ /**
128
+ * @param {number} n
129
+ * @param {string} [message]
130
+ * @returns {this}
131
+ */
55
132
  NumberField.prototype.multipleOf = function(n, message) {
56
133
  this.$description.rules.push({
57
134
  validate: (value) => {
58
135
  if (!value && value !== 0) return true;
59
136
  return Number(value) % n === 0;
60
137
  },
61
- message: message || `Must be a multiple of ${n}`
138
+ message: message || `Must be a multiple of ${n}`,
62
139
  });
63
140
  return this;
64
141
  };
65
142
 
143
+ /**
144
+ * @param {number} value
145
+ * @returns {this}
146
+ */
66
147
  NumberField.prototype.step = function(value) {
67
148
  this.$description.step = value;
68
149
  return this;
69
150
  };
70
151
 
152
+ /**
153
+ * @param {number} [value=2]
154
+ * @returns {this}
155
+ */
71
156
  NumberField.prototype.decimals = function(value = 2) {
72
157
  this.$description.decimals = value;
73
158
  return this;
74
159
  };
75
160
 
161
+ /**
162
+ * @param {NdChild} text
163
+ * @returns {this}
164
+ */
76
165
  NumberField.prototype.prefix = function(text) {
77
166
  this.$description.prefix = text;
78
167
  return this;
79
168
  };
80
169
 
170
+ /**
171
+ * @param {NdChild} text
172
+ * @returns {this}
173
+ */
81
174
  NumberField.prototype.suffix = function(text) {
82
175
  this.$description.suffix = text;
83
176
  return this;