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,10 +1,27 @@
1
- import BaseComponent from "../../BaseComponent";
2
- import HasEventEmitter from "../../../core/utils/HasEventEmitter";
3
- import HasValidation from "../../$traits/has-validation/HasValidation";
4
- import { $ } from "../../../core/data/Observable";
5
- import Validator from "../../../core/utils/validator";
6
- import NativeDocumentError from "../../../core/errors/NativeDocumentError";
1
+ import BaseComponent from '../../BaseComponent';
2
+ import HasEventEmitter from '../../../core/utils/HasEventEmitter';
3
+ import HasValidation from '../../$traits/has-validation/HasValidation';
4
+ import { $ } from '../../../core/data/Observable';
5
+ import Validator from '../../../core/utils/validator';
6
+ import NativeDocumentError from '../../../core/errors/NativeDocumentError';
7
7
 
8
+ /**
9
+ * Repeatable field group. Allows adding/removing instances dynamically with validation rules on the collection (min/max count).
10
+ *
11
+ *
12
+ * @example
13
+ * const phones = new FieldCollection('phones')
14
+ * .fields((fields, index) =>
15
+ * new Field(\`phones[\${index}]\`, 'tel').label(Span(\`Phone \${index + 1}\`))
16
+ * )
17
+ * .renderAdd(() => Button(Span('+ Add phone')))
18
+ * .min(1, 'At least one phone is required')
19
+ * .max(5, 'Maximum 5 phones allowed');
20
+ *
21
+ * @constructor
22
+ * @param {string} [name]
23
+ * @param {GlobalAttributes} [props={}]
24
+ */
8
25
  export default function FieldCollection(name, props = {}) {
9
26
  if(!(this instanceof FieldCollection)) {
10
27
  return new FieldCollection(name, props);
@@ -25,11 +42,11 @@ export default function FieldCollection(name, props = {}) {
25
42
  renderItem: null,
26
43
  renderAdd: null,
27
44
  transition: null,
28
- props
45
+ props,
29
46
  };
30
47
 
31
48
  this.$description.value.interceptMutations((items) =>
32
- items.map(item => Validator.isObservable(item) ? item : $.object(item))
49
+ items.map(item => Validator.isObservable(item) ? item : $.object(item)),
33
50
  );
34
51
  }
35
52
 
@@ -39,10 +56,29 @@ BaseComponent.use(FieldCollection, HasValidation);
39
56
 
40
57
  FieldCollection.defaultTemplate = null;
41
58
 
59
+ /**
60
+ * Registers the render template for FieldCollection.
61
+ * @param {(description: {
62
+ * name: string,
63
+ * value: Observable<*[]>,
64
+ * hasErrors: Observable<boolean>,
65
+ * errors: Observable<string[]>,
66
+ * defaultItem: *,
67
+ * fieldBuilder: ((fields: FieldCollection, index: number) => NdChild)|null,
68
+ * renderItem: ((item: *, index: number) => NdChild)|null,
69
+ * renderAdd: (() => NdChild)|null,
70
+ * transition: string|null,
71
+ * props: GlobalAttributes,
72
+ * }, instance: FieldCollection) => NdChild} template
73
+ */
42
74
  FieldCollection.use = function(template) {
43
75
  FieldCollection.defaultTemplate = template;
44
76
  };
45
77
 
78
+ /**
79
+ * @param {(fields: FieldCollection, index: number) => NdChild} fieldBuilder
80
+ * @returns {this}
81
+ */
46
82
  FieldCollection.prototype.fields = function(fieldBuilder) {
47
83
  if(typeof fieldBuilder !== 'function') {
48
84
  throw new NativeDocumentError('FieldCollection.fields() expects a function');
@@ -51,6 +87,10 @@ FieldCollection.prototype.fields = function(fieldBuilder) {
51
87
  return this;
52
88
  };
53
89
 
90
+ /**
91
+ * @param {*} defaultItem
92
+ * @returns {this}
93
+ */
54
94
  FieldCollection.prototype.data = function(defaultItem) {
55
95
  if(typeof defaultItem !== 'function') {
56
96
  throw new NativeDocumentError('FieldCollection.data() expects a factory function');
@@ -59,26 +99,42 @@ FieldCollection.prototype.data = function(defaultItem) {
59
99
  return this;
60
100
  };
61
101
 
102
+ /**
103
+ * @param {(item: *, index: number) => NdChild} fn
104
+ * @returns {this}
105
+ */
62
106
  FieldCollection.prototype.renderItem = function(fn) {
63
107
  this.$description.renderItem = fn;
64
108
  return this;
65
109
  };
66
110
 
111
+ /**
112
+ * @param {() => NdChild} fn
113
+ * @returns {this}
114
+ */
67
115
  FieldCollection.prototype.renderAdd = function(fn) {
68
116
  this.$description.renderAdd = fn;
69
117
  return this;
70
118
  };
71
119
 
120
+ /**
121
+ * @param {string} transitionName
122
+ * @returns {this}
123
+ */
72
124
  FieldCollection.prototype.transition = function(transitionName) {
73
125
  this.$description.transition = transitionName;
74
126
  return this;
75
127
  };
76
128
 
129
+ /**
130
+ * @param {Observable<*[]>} observable
131
+ * @returns {this}
132
+ */
77
133
  FieldCollection.prototype.model = function(observable) {
78
134
  if(Validator.isObservable(observable)) {
79
135
  this.$description.value = observable;
80
136
  this.$description.value.interceptMutations((items) =>
81
- items.map(item => Validator.isObservable(item) ? item : $.object(item))
137
+ items.map(item => Validator.isObservable(item) ? item : $.object(item)),
82
138
  );
83
139
  return this;
84
140
  }
@@ -86,6 +142,9 @@ FieldCollection.prototype.model = function(observable) {
86
142
  return this;
87
143
  };
88
144
 
145
+ /**
146
+ * @returns {this}
147
+ */
89
148
  FieldCollection.prototype.add = function() {
90
149
  if(!this.$description.fieldBuilder) {
91
150
  throw new NativeDocumentError('FieldCollection: fields() must be defined before add()');
@@ -100,51 +159,87 @@ FieldCollection.prototype.add = function() {
100
159
  return this;
101
160
  };
102
161
 
162
+ /**
163
+ * @param {*} item
164
+ * @returns {this}
165
+ */
103
166
  FieldCollection.prototype.remove = function(item) {
104
167
  this.$description.value.removeItem(item);
105
168
  this.emit('remove', item);
106
169
  return this;
107
170
  };
108
171
 
172
+ /**
173
+ * @returns {this}
174
+ */
109
175
  FieldCollection.prototype.clear = function() {
110
176
  this.$description.value.clear();
111
177
  return this;
112
178
  };
113
179
 
180
+ /**
181
+ * @returns {this}
182
+ */
114
183
  FieldCollection.prototype.reset = function() {
115
184
  this.clear();
116
185
  return this;
117
186
  };
118
187
 
188
+ /**
189
+ * @returns {*[]}
190
+ */
119
191
  FieldCollection.prototype.value = function() {
120
192
  return this.$description.value.map(item =>
121
- Validator.isObservable(item) ? item.val() : item
193
+ Validator.isObservable(item) ? item.val() : item,
122
194
  );
123
195
  };
124
196
 
197
+ /**
198
+ * @returns {number}
199
+ */
125
200
  FieldCollection.prototype.count = function() {
126
201
  return this.$description.value.val().length;
127
202
  };
128
203
 
204
+ /**
205
+ * @returns {boolean}
206
+ */
129
207
  FieldCollection.prototype.isEmpty = function() {
130
208
  return this.$description.value.val().length === 0;
131
209
  };
132
210
 
211
+ /**
212
+ * @param {Function} handler
213
+ * @returns {this}
214
+ */
133
215
  FieldCollection.prototype.onChange = function(handler) {
134
216
  this.on('change', handler);
135
217
  return this;
136
218
  };
137
219
 
220
+ /**
221
+ * @param {Function} handler
222
+ * @returns {this}
223
+ */
138
224
  FieldCollection.prototype.onAdd = function(handler) {
139
225
  this.on('add', handler);
140
226
  return this;
141
227
  };
142
228
 
229
+ /**
230
+ * @param {Function} handler
231
+ * @returns {this}
232
+ */
143
233
  FieldCollection.prototype.onRemove = function(handler) {
144
234
  this.on('remove', handler);
145
235
  return this;
146
236
  };
147
237
 
238
+ /**
239
+ * @param {number} minCount
240
+ * @param {string} [message]
241
+ * @returns {this}
242
+ */
148
243
  FieldCollection.prototype.min = function(minCount, message) {
149
244
  return this.addRule(
150
245
  (values) => ({
@@ -152,10 +247,15 @@ FieldCollection.prototype.min = function(minCount, message) {
152
247
  message: `Minimum ${minCount} item(s) required`,
153
248
  }),
154
249
  [],
155
- message
250
+ message,
156
251
  );
157
252
  };
158
253
 
254
+ /**
255
+ * @param {number} maxCount
256
+ * @param {string} [message]
257
+ * @returns {this}
258
+ */
159
259
  FieldCollection.prototype.max = function(maxCount, message) {
160
260
  return this.addRule(
161
261
  (values) => ({
@@ -163,11 +263,15 @@ FieldCollection.prototype.max = function(maxCount, message) {
163
263
  message: `Maximum ${maxCount} item(s) allowed`,
164
264
  }),
165
265
  [],
166
- message
266
+ message,
167
267
  );
168
268
  };
169
269
 
170
270
  // Override validate
271
+ /**
272
+ * @param {*} [allValues]
273
+ * @returns {{ key: string, errors: string[] }}
274
+ */
171
275
  FieldCollection.prototype.validate = function(allValues) {
172
276
  const errors = [];
173
277
  const rowsValues = this.value();
@@ -1,5 +1,29 @@
1
- import StringField from "./StringField";
1
+ import StringField from '../../field/types/StringField';
2
2
 
3
+ /**
4
+ * Text field with asynchronous autocomplete suggestions. Supports static arrays
5
+ * and async data sources, configurable debounce, min chars, and item rendering.
6
+ * @example
7
+ * const field = new AutocompleteField('city')
8
+ * .label(Span('City'))
9
+ * .source((query) => fetch(\`/api/cities?q=\${query}\`).then(r => r.json()))
10
+ * .minChars(2)
11
+ * .debounce(300)
12
+ * .valueKey('id')
13
+ * .labelKey('name')
14
+ * .renderItem((item) => Div(Span(item.name), Span({ class: 'hint' }, item.country)))
15
+ * .onSelect((item) => console.log('selected', item));
16
+ *
17
+ * AutocompleteField.use((description, instance) => {
18
+ * // description.source, description.minChars, description.debounce,
19
+ * // description.valueKey, description.labelKey, description.renderItem...
20
+ * return Input({ type: 'text', placeholder: description.placeholder });
21
+ * });
22
+ *
23
+ * @constructor
24
+ * @param {string} name
25
+ * @param {GlobalAttributes} [props]
26
+ */
3
27
  export default function AutocompleteField(name, props) {
4
28
  if(!(this instanceof AutocompleteField)) {
5
29
  return new AutocompleteField(name, props);
@@ -20,6 +44,29 @@ export default function AutocompleteField(name, props) {
20
44
 
21
45
  AutocompleteField.defaultTemplate = null;
22
46
 
47
+ /**
48
+ * Registers the render template for AutocompleteField.
49
+ * @param {(description: {
50
+ * name: string,
51
+ * type: 'autocomplete',
52
+ * label: NdChild|null,
53
+ * placeholder: NdChild|null,
54
+ * value: Observable<*>|null,
55
+ * source: *[]|((query: string) => Promise<*[]>)|null,
56
+ * minChars: number,
57
+ * debounce: number,
58
+ * maxResults: number,
59
+ * valueKey: string,
60
+ * labelKey: string,
61
+ * renderItem: ((item: *) => NdChild)|null,
62
+ * disabled: boolean|Observable<boolean>,
63
+ * readonly: boolean|Observable<boolean>,
64
+ * hasErrors: Observable<boolean>,
65
+ * errors: Observable<string[]>,
66
+ * showErrors: Observable<boolean>,
67
+ * props: GlobalAttributes
68
+ * }, instance: AutocompleteField) => NdChild} template
69
+ */
23
70
  AutocompleteField.use = function(template) {
24
71
  AutocompleteField.defaultTemplate = template;
25
72
  };
@@ -28,50 +75,93 @@ AutocompleteField.use = function(template) {
28
75
  AutocompleteField.prototype = Object.create(StringField.prototype);
29
76
  AutocompleteField.prototype.constructor = AutocompleteField;
30
77
 
78
+ /**
79
+ * @param {*[]|((query: string) => Promise<*[]>)} dataSource
80
+ * @returns {this}
81
+ */
31
82
  AutocompleteField.prototype.source = function(dataSource) {
32
83
  this.$description.source = dataSource;
33
84
  return this;
34
85
  };
35
86
 
87
+ /**
88
+ * @param {number} min - Minimum characters before triggering the source
89
+ * @returns {this}
90
+ */
36
91
  AutocompleteField.prototype.minChars = function(min) {
37
92
  this.$description.minChars = min;
38
93
  return this;
39
94
  };
40
95
 
96
+ /**
97
+ * @param {number} ms
98
+ * @returns {this}
99
+ */
41
100
  AutocompleteField.prototype.debounce = function(ms) {
42
101
  this.$description.debounce = ms;
43
102
  return this;
44
103
  };
45
104
 
105
+ /**
106
+ * @param {number} max
107
+ * @returns {this}
108
+ */
46
109
  AutocompleteField.prototype.maxResults = function(max) {
47
110
  this.$description.maxResults = max;
48
111
  return this;
49
112
  };
50
113
 
114
+ /**
115
+ * Validates that the entered value exists in the allowed list.
116
+ * @param {*[]} allowedValues
117
+ * @param {string} [message]
118
+ * @returns {this}
119
+ */
51
120
  AutocompleteField.prototype.oneOf = function(allowedValues, message) {
52
121
  this.$description.rules.push({
53
122
  validate: (value) => {
54
123
  if (!value) return true;
55
124
  return allowedValues.includes(value);
56
125
  },
57
- message: message || `Must be one of: ${allowedValues.join(', ')}`
126
+ message: message || `Must be one of: ${allowedValues.join(', ')}`,
58
127
  });
59
128
  return this;
60
129
  };
61
130
 
131
+ /**
132
+ * Key in the data object used as the field value.
133
+ * @param {string} key
134
+ * @returns {this}
135
+ */
62
136
  AutocompleteField.prototype.valueKey = function(key) {
63
137
  this.$description.valueKey = key;
64
138
  return this;
65
139
  };
66
140
 
141
+ /**
142
+ * Key in the data object used as the display label.
143
+ * @param {string} key
144
+ * @returns {this}
145
+ */
67
146
  AutocompleteField.prototype.labelKey = function(key) {
68
147
  this.$description.labelKey = key;
69
148
  return this;
70
149
  };
150
+
151
+ /**
152
+ * @param {(item: *) => void} handler
153
+ * @returns {this}
154
+ */
71
155
  AutocompleteField.prototype.onSelect = function(handler) {
72
156
  this.on('select', handler);
73
157
  return this;
74
158
  };
159
+
160
+ /**
161
+ * Custom render for each suggestion item in the dropdown.
162
+ * @param {(item: *) => NdChild} callback
163
+ * @returns {this}
164
+ */
75
165
  AutocompleteField.prototype.renderItem = function(callback) {
76
166
  this.$description.renderItem = callback;
77
167
  return this;
@@ -1,6 +1,23 @@
1
- import Field from "../Field";
2
- import Validator from "../../../../core/utils/validator";
1
+ import Field from '../../field/Field';
2
+ import Validator from '../../../../core/utils/validator';
3
3
 
4
+ /**
5
+ * Single checkbox field for boolean values. Supports reactive model binding.
6
+ * @example
7
+ * const field = new CheckboxField('agree')
8
+ * .label(Span('I agree to the terms'))
9
+ * .model(agreeObs)
10
+ * .required('You must agree');
11
+ *
12
+ * CheckboxField.use((description, instance) => {
13
+ * // description.checked — Observable<boolean> or boolean
14
+ * return Input({ type: 'checkbox', checked: description.checked });
15
+ * });
16
+ *
17
+ * @constructor
18
+ * @param {string} name
19
+ * @param {GlobalAttributes} [props]
20
+ */
4
21
  export default function CheckboxField(name, props) {
5
22
  if(!(this instanceof CheckboxField)) {
6
23
  return new CheckboxField(name, props);
@@ -15,6 +32,21 @@ export default function CheckboxField(name, props) {
15
32
 
16
33
  CheckboxField.defaultTemplate = null;
17
34
 
35
+ /**
36
+ * Registers the render template for CheckboxField.
37
+ * @param {(description: {
38
+ * name: string,
39
+ * type: 'checkbox',
40
+ * label: NdChild|null,
41
+ * checked: Observable<boolean>|boolean,
42
+ * disabled: boolean|Observable<boolean>,
43
+ * readonly: boolean|Observable<boolean>,
44
+ * hasErrors: Observable<boolean>,
45
+ * errors: Observable<string[]>,
46
+ * showErrors: Observable<boolean>,
47
+ * props: GlobalAttributes
48
+ * }, instance: CheckboxField) => NdChild} template
49
+ */
18
50
  CheckboxField.use = function(template) {
19
51
  CheckboxField.defaultTemplate = template;
20
52
  };
@@ -22,11 +54,20 @@ CheckboxField.use = function(template) {
22
54
  CheckboxField.prototype = Object.create(Field.prototype);
23
55
  CheckboxField.prototype.constructor = CheckboxField;
24
56
 
57
+ /**
58
+ * Binds the checked state to an observable.
59
+ * @param {Observable<boolean>} observable
60
+ * @returns {this}
61
+ */
25
62
  CheckboxField.prototype.model = function(observable) {
26
63
  this.$description.checked = observable;
27
64
  return this;
28
65
  };
29
66
 
67
+ /**
68
+ * Returns the current checked value (resolves the observable if needed).
69
+ * @returns {boolean}
70
+ */
30
71
  CheckboxField.prototype.checked = function() {
31
72
  const checked = this.$description.checked;
32
73
  if(Validator.isObservable(checked)) {
@@ -1,5 +1,32 @@
1
- import Field from "../Field";
2
-
1
+ import Field from '../../field/Field';
2
+
3
+ /**
4
+ * Group of checkboxes for multi-value selection. Supports vertical/horizontal/grid layout
5
+ * and min/max/exact count validation.
6
+ * @example
7
+ * const field = new CheckboxGroupField('roles')
8
+ * .label(Span('Roles'))
9
+ * .option('admin', Span('Administrator'))
10
+ * .option('editor', Span('Editor'))
11
+ * .option('viewer', Span('Viewer'))
12
+ * .horizontal()
13
+ * .minChecked(1, 'Select at least one role')
14
+ * .maxChecked(2);
15
+ *
16
+ * CheckboxGroupField.use((description, instance) => {
17
+ * // description.options — Array<{ value, label, props }>
18
+ * // description.layout — 'vertical' | 'horizontal' | 'grid'
19
+ * return Div({ class: \`checkbox-group checkbox-group--\${description.layout}\` },
20
+ * ...description.options.map(opt =>
21
+ * Label(Input({ type: 'checkbox', value: opt.value }), opt.label)
22
+ * )
23
+ * );
24
+ * });
25
+ *
26
+ * @constructor
27
+ * @param {string} name
28
+ * @param {GlobalAttributes} [props]
29
+ */
3
30
  export default function CheckboxGroupField(name, props) {
4
31
  if(!(this instanceof CheckboxGroupField)) {
5
32
  return new CheckboxGroupField(name, props);
@@ -11,12 +38,30 @@ export default function CheckboxGroupField(name, props) {
11
38
  options: [],
12
39
  layout: 'vertical',
13
40
  validateOn: 'change',
14
- defaultValue: []
41
+ defaultValue: [],
15
42
  });
16
43
  }
17
44
 
18
45
  CheckboxGroupField.defaultTemplate = null;
19
46
 
47
+ /**
48
+ * Registers the render template for CheckboxGroupField.
49
+ * @param {(description: {
50
+ * name: string,
51
+ * type: 'checkbox-group',
52
+ * label: NdChild|null,
53
+ * options: Array<{ value: *, label: NdChild, props: GlobalAttributes }>,
54
+ * layout: 'vertical'|'horizontal'|'grid',
55
+ * value: Observable<*[]>|null,
56
+ * defaultValue: *[],
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: CheckboxGroupField) => NdChild} template
64
+ */
20
65
  CheckboxGroupField.use = function(template) {
21
66
  CheckboxGroupField.defaultTemplate = template;
22
67
  };
@@ -24,16 +69,30 @@ CheckboxGroupField.use = function(template) {
24
69
  CheckboxGroupField.prototype = Object.create(Field.prototype);
25
70
  CheckboxGroupField.prototype.constructor = CheckboxGroupField;
26
71
 
72
+ /**
73
+ * @param {Array<{ value: *, label: NdChild, props?: GlobalAttributes }>} opts
74
+ * @returns {this}
75
+ */
27
76
  CheckboxGroupField.prototype.options = function(opts) {
28
77
  this.$description.options = opts;
29
78
  return this;
30
79
  };
31
80
 
81
+ /**
82
+ * @param {*} value
83
+ * @param {NdChild} label
84
+ * @param {GlobalAttributes} [props={}]
85
+ * @returns {this}
86
+ */
32
87
  CheckboxGroupField.prototype.option = function(value, label, props = {}) {
33
88
  this.$description.options.push({ value, label, props });
34
89
  return this;
35
90
  };
36
91
 
92
+ /**
93
+ * @param {'vertical'|'horizontal'|'grid'} value
94
+ * @returns {this}
95
+ */
37
96
  CheckboxGroupField.prototype.layout = function(value) {
38
97
  const allowedLayouts = ['vertical', 'horizontal', 'grid'];
39
98
 
@@ -45,50 +104,68 @@ CheckboxGroupField.prototype.layout = function(value) {
45
104
  return this;
46
105
  };
47
106
 
107
+ /** @returns {this} */
48
108
  CheckboxGroupField.prototype.horizontal = function() {
49
109
  this.$description.layout = 'horizontal';
50
110
  return this;
51
111
  };
52
112
 
113
+ /** @returns {this} */
53
114
  CheckboxGroupField.prototype.vertical = function() {
54
115
  this.$description.layout = 'vertical';
55
116
  return this;
56
117
  };
57
118
 
119
+ /** @returns {this} */
58
120
  CheckboxGroupField.prototype.grid = function() {
59
121
  this.$description.layout = 'grid';
60
122
  return this;
61
123
  };
62
124
 
125
+ /**
126
+ * @param {number} min
127
+ * @param {string} [message]
128
+ * @returns {this}
129
+ */
63
130
  CheckboxGroupField.prototype.minChecked = function(min, message) {
64
131
  this.$description.rules.push({
65
132
  validate: (values) => {
66
133
  if (!Array.isArray(values)) return false;
67
134
  return values.length >= min;
68
135
  },
69
- message: message || `At least ${min} option${min > 1 ? 's' : ''} must be selected`
136
+ message: message || `At least ${min} option${min > 1 ? 's' : ''} must be selected`,
70
137
  });
71
138
  return this;
72
139
  };
73
140
 
141
+ /**
142
+ * @param {number} max
143
+ * @param {string} [message]
144
+ * @returns {this}
145
+ */
74
146
  CheckboxGroupField.prototype.maxChecked = function(max, message) {
75
147
  this.$description.rules.push({
76
148
  validate: (values) => {
77
149
  if (!Array.isArray(values)) return false;
78
150
  return values.length <= max;
79
151
  },
80
- message: message || `Maximum ${max} option${max > 1 ? 's' : ''} allowed`
152
+ message: message || `Maximum ${max} option${max > 1 ? 's' : ''} allowed`,
81
153
  });
82
154
  return this;
83
155
  };
84
156
 
157
+ /**
158
+ * @param {number} count
159
+ * @param {string} [message]
160
+ * @returns {this}
161
+ */
85
162
  CheckboxGroupField.prototype.exactChecked = function(count, message) {
86
163
  this.$description.rules.push({
87
164
  validate: (values) => {
88
165
  if (!Array.isArray(values)) return false;
89
166
  return values.length === count;
90
167
  },
91
- message: message || `Exactly ${count} option${count > 1 ? 's' : ''} must be selected`
168
+ message: message || `Exactly ${count} option${count > 1 ? 's' : ''} must be selected`,
92
169
  });
93
170
  return this;
94
171
  };