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,14 +1,38 @@
1
- import BaseComponent from "../BaseComponent";
2
- import HasEventEmitter from "../../core/utils/HasEventEmitter";
3
- import HasItems from "../$traits/has-items/HasItems";
4
- import MenuGroup from "./MenuGroup";
5
- import HasMenuItem from "./HasMenuItem";
6
- import { $ } from '../../core/data/Observable'
7
-
1
+ import BaseComponent from '../BaseComponent';
2
+ import HasEventEmitter from '../../core/utils/HasEventEmitter';
3
+ import HasItems from '../$traits/has-items/HasItems';
4
+ import MenuGroup from './MenuGroup';
5
+ import HasMenuItem from './HasMenuItem';
6
+ import { $ } from '../../core/data/Observable';
7
+
8
+ /**
9
+ * Navigation or action menu. Supports horizontal/vertical/inline orientation, keyboard navigation, nested groups, active item tracking.
10
+ *
11
+ *
12
+ * @example
13
+ * const menu = new Menu()
14
+ * .vertical()
15
+ * .closeOnSelect(true)
16
+ * .keyboardLoop(true)
17
+ * .item('Dashboard', () => navigate('/dashboard'))
18
+ * .item('Settings', () => navigate('/settings'))
19
+ * .separator()
20
+ * .group('Reports', ReportIcon(), (group) => {
21
+ * group.item('Monthly').item('Annual');
22
+ * })
23
+ * .onItemClick((item, e) => console.log(item));
24
+ *
25
+ * Menu.use((description, instance) => {
26
+ * return Nav({ class: 'menu' }, description.items);
27
+ * });
28
+ *
29
+ * @constructor
30
+ * @param {GlobalAttributes} [props]
31
+ */
8
32
  export default function Menu(props = {}) {
9
33
 
10
34
  if(!(this instanceof Menu)) {
11
- return new Menu(props)
35
+ return new Menu(props);
12
36
  }
13
37
 
14
38
  BaseComponent.call(this, props);
@@ -26,7 +50,7 @@ export default function Menu(props = {}) {
26
50
  menuActive: $(null),
27
51
  isMenuActivated: $(false),
28
52
  compact: $(null),
29
- props
53
+ props,
30
54
  };
31
55
 
32
56
  }
@@ -36,82 +60,137 @@ BaseComponent.use(Menu, HasItems, HasEventEmitter, HasMenuItem);
36
60
 
37
61
  Menu.defaultTemplate = null;
38
62
 
63
+ /**
64
+ * Registers the render template for Menu.
65
+ * @param {(description: {
66
+ * items: Observable<Array<MenuItem|MenuGroup|MenuDivider>>,
67
+ * render: ((desc: *, instance: Menu) => NdChild)|null,
68
+ * orientation: 'horizontal'|'vertical'|'inline',
69
+ * closeOnSelect: boolean,
70
+ * keyboardLoop: boolean,
71
+ * activeItem: Observable<MenuItem|null>,
72
+ * active: ((item: MenuItem) => boolean)|null,
73
+ * compactThreshold: number,
74
+ * clickFirst: boolean,
75
+ * props: GlobalAttributes,
76
+ * }, instance: Menu) => NdChild} template
77
+ */
39
78
  Menu.use = function(template) {
40
79
  Menu.defaultTemplate = template;
41
80
  };
42
81
 
43
- // Menu.prototype.$originalBuild = Menu.prototype.$build;
44
- // Menu.prototype.$build = function() {
45
- // const activeSource = (typeof this.$description.active === 'function') ? this.$description.active() : this.$description.active;
46
- // if(activeSource.__$Observable) {
47
- // activeSource.subscribe((a) => {
48
- // console.log('Subscribe', a);
49
- // // Todo: update active element
50
- // });
51
- // }
52
- // return this.$originalBuild();
53
- // };
54
-
82
+ /**
83
+ * @param {(data: *) => *} resolver
84
+ * @returns {this}
85
+ */
55
86
  Menu.prototype.dataResolver = function(resolver) {
56
87
  this.$description.dataResolver = resolver;
57
88
  return this;
58
89
  };
59
90
 
91
+ /**
92
+ * @param {NdChild} title
93
+ * @returns {this}
94
+ */
60
95
  Menu.prototype.title = function(title) {
61
96
  this.$description.title = title;
62
97
  return this;
63
98
  };
64
99
 
100
+ /**
101
+ * @param {string} orientation
102
+ * @returns {this}
103
+ */
65
104
  Menu.prototype.orientation = function(orientation) {
66
105
  this.$description.orientation = orientation;
67
106
  return this;
68
107
  };
69
108
 
109
+ /**
110
+ * @returns {this}
111
+ */
70
112
  Menu.prototype.horizontal = function() {
71
113
  this.$description.orientation = 'horizontal';
72
114
  return this;
73
115
  };
74
116
 
117
+ /**
118
+ * @returns {this}
119
+ */
75
120
  Menu.prototype.vertical = function() {
76
121
  this.$description.orientation = 'vertical';
77
122
  return this;
78
123
  };
79
124
 
125
+ /**
126
+ * @returns {this}
127
+ */
80
128
  Menu.prototype.inline = function() {
81
129
  this.$description.orientation = 'inline';
82
130
  return this;
83
131
  };
84
132
 
133
+ /**
134
+ * @param {*} [close]
135
+ * @returns {this}
136
+ */
85
137
  Menu.prototype.closeOnSelect = function(close = true) {
86
138
  this.$description.closeOnSelect = close;
87
139
  return this;
88
140
  };
89
141
 
142
+ /**
143
+ * @param {*} [keyboardLoop]
144
+ * @returns {this}
145
+ */
90
146
  Menu.prototype.keyboardLoop = function(keyboardLoop = true) {
91
147
  this.$description.keyboardLoop = keyboardLoop;
92
148
  return this;
93
149
  };
94
150
 
151
+ /**
152
+ * @param {*} data
153
+ * @returns {this}
154
+ */
95
155
  Menu.prototype.data = function(data) {
96
156
  this.$description.data = data;
97
157
  return this;
98
158
  };
99
159
 
160
+ /**
161
+ * @param {(item: MenuItem) => boolean} callback
162
+ * @returns {this}
163
+ */
100
164
  Menu.prototype.active = function(callback) {
101
165
  this.$description.active = callback;
102
166
  return this;
103
167
  };
104
168
 
169
+ /**
170
+ * @param {(item: MenuItem, event: MouseEvent) => void} handler
171
+ * @returns {this}
172
+ */
105
173
  Menu.prototype.onItemClick = function(handler) {
106
174
  this.on('itemClick', handler);
107
175
  return this;
108
176
  };
109
177
 
178
+ /**
179
+ * @param {(item: MenuItem) => void} handler
180
+ * @returns {this}
181
+ */
110
182
  Menu.prototype.onItemSelect = function(handler) {
111
183
  this.on('itemSelect', handler);
112
184
  return this;
113
185
  };
114
186
 
187
+ /**
188
+ * @param {NdChild} label
189
+ * @param {NdChild} icon
190
+ * @param {(group: MenuGroup) => void} builder
191
+ * @param {GlobalAttributes} [props={}]
192
+ * @returns {this}
193
+ */
115
194
  Menu.prototype.group = function(label, icon, builder, props = {}) {
116
195
  const group = new MenuGroup(label, props);
117
196
  group.icon(icon);
@@ -119,17 +198,29 @@ Menu.prototype.group = function(label, icon, builder, props = {}) {
119
198
  return this.add(group);
120
199
  };
121
200
 
201
+ /**
202
+ * @param {string} key
203
+ * @returns {MenuItem|undefined}
204
+ */
122
205
  Menu.prototype.getItem = function(key) {
123
206
  return this.$description.items.find(
124
- item => item.$description.key === key || item.$description.label === key
207
+ item => item.$description.key === key || item.$description.label === key,
125
208
  );
126
209
  };
127
210
 
211
+ /**
212
+ * @param {number} [width]
213
+ * @returns {this}
214
+ */
128
215
  Menu.prototype.compactThreshold = function(width = 60) {
129
216
  this.$description.compactThreshold = width;
130
217
  return this;
131
218
  };
132
219
 
220
+ /**
221
+ * @param {*} [mode]
222
+ * @returns {this}
223
+ */
133
224
  Menu.prototype.clickFirst = function(mode = true) {
134
225
  this.$description.clickFirst = mode;
135
226
  return this;
@@ -1,13 +1,23 @@
1
- import BaseComponent from "../BaseComponent";
1
+ import BaseComponent from '../BaseComponent';
2
2
 
3
3
 
4
+ /**
5
+ * Visual separator between items or groups in a Menu.
6
+ *
7
+ *
8
+ * @example
9
+ * menu.item('Edit').separator().item('Delete');
10
+ *
11
+ * @constructor
12
+ * @param {GlobalAttributes} [props]
13
+ */
4
14
  export default function MenuDivider(props = {}) {
5
15
  if(!(this instanceof MenuDivider)) {
6
16
  return new MenuDivider(props);
7
17
  }
8
18
 
9
19
  this.$description = {
10
- props
20
+ props,
11
21
  };
12
22
  }
13
23
 
@@ -16,6 +26,12 @@ BaseComponent.extends(MenuDivider);
16
26
 
17
27
  MenuDivider.defaultTemplate = null;
18
28
 
29
+ /**
30
+ * Registers the render template for MenuDivider.
31
+ * @param {(description: {
32
+ * props: GlobalAttributes,
33
+ * }, instance: MenuDivider) => NdChild} template
34
+ */
19
35
  MenuDivider.use = function(template) {
20
36
  MenuDivider.defaultTemplate = template;
21
37
  };
@@ -1,10 +1,24 @@
1
- import BaseComponent from "../BaseComponent";
2
- import HasItems from "../$traits/has-items/HasItems";
3
- import MenuDivider from "./MenuDivider";
4
- import HasMenuItem from "./HasMenuItem";
1
+ import BaseComponent from '../BaseComponent';
2
+ import HasItems from '../$traits/has-items/HasItems';
3
+ import MenuDivider from './MenuDivider';
4
+ import HasMenuItem from './HasMenuItem';
5
5
  import { $ } from '../../core/data/Observable';
6
6
 
7
-
7
+ /**
8
+ * A collapsible group of MenuItems inside a Menu. Can hold items, dividers, and nested groups.
9
+ *
10
+ *
11
+ * @example
12
+ * const group = new MenuGroup(Span('Settings'))
13
+ * .icon(SettingsIcon())
14
+ * .collapsable(true)
15
+ * .collapsed(false)
16
+ * .item('Profile').item('Security').divider().item('Billing');
17
+ *
18
+ * @constructor
19
+ * @param {NdChild} label
20
+ * @param {GlobalAttributes} [props={}]
21
+ */
8
22
  export default function MenuGroup(label, props = {}) {
9
23
  if(!(this instanceof MenuGroup)) {
10
24
  return new MenuGroup(label, props);
@@ -23,7 +37,7 @@ export default function MenuGroup(label, props = {}) {
23
37
  visibility: $(true),
24
38
  collapsableOpenedIcon: null,
25
39
  collapsableClosedIcon: null,
26
- props
40
+ props,
27
41
  };
28
42
  }
29
43
 
@@ -31,6 +45,22 @@ HasMenuItem.components.MenuGroup = MenuGroup;
31
45
 
32
46
  MenuGroup.defaultTemplate = null;
33
47
 
48
+ /**
49
+ * Registers the render template for MenuGroup.
50
+ * @param {(description: {
51
+ * icon: NdChild|null,
52
+ * label: NdChild,
53
+ * data: *|null,
54
+ * items: Observable<Array<MenuItem|MenuDivider>>,
55
+ * render: ((desc: *, instance: MenuGroup) => NdChild)|null,
56
+ * collapsable: boolean,
57
+ * collapsed: boolean|null,
58
+ * visibility: Observable<boolean>,
59
+ * collapsableOpenedIcon: NdChild|null,
60
+ * collapsableClosedIcon: NdChild|null,
61
+ * props: GlobalAttributes,
62
+ * }, instance: MenuGroup) => NdChild} template
63
+ */
34
64
  MenuGroup.use = function(template) {
35
65
  MenuGroup.defaultTemplate = template;
36
66
  };
@@ -38,16 +68,30 @@ MenuGroup.use = function(template) {
38
68
  BaseComponent.extends(MenuGroup);
39
69
  BaseComponent.use(MenuGroup, HasItems, HasMenuItem);
40
70
 
71
+ /**
72
+ * @param {*} data
73
+ * @returns {this}
74
+ */
41
75
  MenuGroup.prototype.data = function(data) {
42
76
  this.$description.data = data;
43
77
  return this;
44
78
  };
45
79
 
80
+ /**
81
+ * @param {NdChild} icon
82
+ * @returns {this}
83
+ */
46
84
  MenuGroup.prototype.icon = function(icon) {
47
85
  this.$description.icon = icon;
48
86
  return this;
49
87
  };
50
88
 
89
+ /**
90
+ * @param {boolean} [mode=true]
91
+ * @param {NdChild} [openedIcon]
92
+ * @param {NdChild} [closedIcon]
93
+ * @returns {this}
94
+ */
51
95
  MenuGroup.prototype.collapsable = function(mode = true, openedIcon, closedIcon) {
52
96
  this.$description.collapsable = mode;
53
97
  this.$description.collapsed = this.$description.collapsed || $(true);
@@ -56,15 +100,26 @@ MenuGroup.prototype.collapsable = function(mode = true, openedIcon, closedIcon)
56
100
  return this;
57
101
  };
58
102
 
103
+ /**
104
+ * @param {*} [mode]
105
+ * @returns {this}
106
+ */
59
107
  MenuGroup.prototype.collapsed = function(mode = true) {
60
108
  this.$description.collapsed.set(mode);
61
109
  return this;
62
110
  };
63
111
 
112
+ /**
113
+ * @returns {this}
114
+ */
64
115
  MenuGroup.prototype.divider = function() {
65
116
  return this.item(new MenuDivider());
66
117
  };
67
118
 
119
+ /**
120
+ * @param {boolean|Observable<boolean>} mode
121
+ * @returns {this}
122
+ */
68
123
  MenuGroup.prototype.visibility = function(mode) {
69
124
  this.$description.visibility = BaseComponent.obs(mode);
70
125
  return this;
@@ -1,13 +1,33 @@
1
- import BaseComponent from "../BaseComponent";
2
- import HasItems from "../$traits/has-items/HasItems";
3
- import MenuDivider from "./MenuDivider";
4
- import MenuGroup from "./MenuGroup";
5
- import HasMenuItem from "./HasMenuItem";
1
+ import BaseComponent from '../BaseComponent';
2
+ import HasItems from '../$traits/has-items/HasItems';
3
+ import MenuDivider from './MenuDivider';
4
+ import MenuGroup from './MenuGroup';
5
+ import HasMenuItem from './HasMenuItem';
6
6
  import { $ } from '../../core/data/Observable';
7
- import HasEventEmitter from "../../core/utils/HasEventEmitter";
8
-
9
- const EMPTY_PROPS = {}
10
-
7
+ import HasEventEmitter from '../../core/utils/HasEventEmitter';
8
+
9
+ const EMPTY_PROPS = {};
10
+
11
+ /**
12
+ * A single clickable or selectable item in a Menu. Supports icon, label, shortcut, trailing slot, disabled and selected states.
13
+ *
14
+ *
15
+ * @example
16
+ * const item = new MenuItem()
17
+ * .label(Span('Delete'))
18
+ * .icon(TrashIcon())
19
+ * .shortcut(Span('Del'))
20
+ * .disabled(false)
21
+ * .value('delete')
22
+ * .divider();
23
+ *
24
+ * MenuItem.use((description, instance) => {
25
+ * return Li(description.icon, description.label, description.shortcut);
26
+ * });
27
+ *
28
+ * @constructor
29
+ * @param {GlobalAttributes} [props]
30
+ */
11
31
  export default function MenuItem(props = {}) {
12
32
  if(!(this instanceof MenuItem)) {
13
33
  return new MenuItem(props || EMPTY_PROPS);
@@ -29,13 +49,31 @@ export default function MenuItem(props = {}) {
29
49
  render: null,
30
50
  trailing: null,
31
51
  visibility: null,
32
- props
52
+ props,
33
53
  };
34
54
 
35
55
  }
36
56
 
37
57
  MenuItem.defaultTemplate = null;
38
58
 
59
+ /**
60
+ * Registers the render template for MenuItem.
61
+ * @param {(description: {
62
+ * key: string|null,
63
+ * action: string|Record<string, *>|null,
64
+ * label: NdChild|null,
65
+ * icon: NdChild|null,
66
+ * shortcut: NdChild|null,
67
+ * disabled: Observable<boolean>|boolean|null,
68
+ * selected: Observable<boolean>|boolean|null,
69
+ * value: *,
70
+ * data: *|null,
71
+ * render: ((desc: *, instance: MenuItem) => NdChild)|null,
72
+ * trailing: NdChild|null,
73
+ * visibility: Observable<boolean>|null,
74
+ * props: GlobalAttributes,
75
+ * }, instance: MenuItem) => NdChild} template
76
+ */
39
77
  MenuItem.use = function(template) {
40
78
  MenuItem.defaultTemplate = template;
41
79
  };
@@ -45,61 +83,107 @@ BaseComponent.use(MenuItem, HasItems, HasEventEmitter, HasMenuItem);
45
83
 
46
84
  HasMenuItem.components.MenuItem = MenuItem;
47
85
 
48
-
86
+ /**
87
+ * @param {NdChild} label
88
+ * @returns {this}
89
+ */
49
90
  MenuItem.prototype.label = function(label) {
50
91
  this.$description.label = label;
51
92
  return this;
52
93
  };
53
94
 
95
+ /**
96
+ * @param {NdChild} icon
97
+ * @returns {this}
98
+ */
54
99
  MenuItem.prototype.icon = function(icon) {
55
100
  this.$description.icon = icon;
56
101
  return this;
57
102
  };
58
103
 
104
+ /**
105
+ * @param {NdChild} trailing
106
+ * @returns {this}
107
+ */
59
108
  MenuItem.prototype.trailing = function(trailing) {
60
109
  this.$description.trailing = trailing;
61
110
  return this;
62
111
  };
63
112
 
113
+ /**
114
+ * @param {NdChild} shortcut
115
+ * @returns {this}
116
+ */
64
117
  MenuItem.prototype.shortcut = function(shortcut) {
65
118
  this.$description.shortcut = shortcut;
66
119
  return this;
67
120
  };
68
121
 
122
+ /**
123
+ * @param {boolean|Observable<boolean>} [disabled=true]
124
+ * @returns {this}
125
+ */
69
126
  MenuItem.prototype.disabled = function(disabled = true) {
70
127
  this.$description.disabled = BaseComponent.obs(disabled);
71
128
  return this;
72
129
  };
73
130
 
131
+ /**
132
+ * @param {boolean|Observable<boolean>} [selected=true]
133
+ * @returns {this}
134
+ */
74
135
  MenuItem.prototype.selected = function(selected = true) {
75
136
  this.$description.selected = BaseComponent.obs(selected);
76
137
  return this;
77
138
  };
78
139
 
140
+ /**
141
+ * @param {number} value
142
+ * @returns {*}
143
+ */
79
144
  MenuItem.prototype.value = function(value) {
80
145
  this.$description.value = value;
81
146
  return this;
82
147
  };
83
148
 
149
+ /**
150
+ * @param {*} action
151
+ * @returns {this}
152
+ */
84
153
  MenuItem.prototype.action = function(action) {
85
154
  this.$description.action = action;
86
155
  return this;
87
156
  };
88
157
 
158
+ /**
159
+ * @param {*} data
160
+ * @returns {this}
161
+ */
89
162
  MenuItem.prototype.data = function(data) {
90
163
  this.$description.data = data;
91
164
  return this;
92
165
  };
93
166
 
167
+ /**
168
+ * @returns {this}
169
+ */
94
170
  MenuItem.prototype.divider = function() {
95
171
  return this.item(new MenuDivider());
96
172
  };
97
173
 
174
+ /**
175
+ * @param {string} key
176
+ * @returns {this}
177
+ */
98
178
  MenuItem.prototype.key = function(key) {
99
179
  this.$description.key = key;
100
180
  return this;
101
181
  };
102
182
 
183
+ /**
184
+ * @param {boolean|Observable<boolean>} mode
185
+ * @returns {this}
186
+ */
103
187
  MenuItem.prototype.visibility = function(mode) {
104
188
  this.$description.visibility = BaseComponent.obs(mode);
105
189
  return this;
@@ -1,7 +1,21 @@
1
- import MenuItem from "./MenuItem";
2
- import HasMenuItem from "./HasMenuItem";
1
+ import MenuItem from './MenuItem';
2
+ import HasMenuItem from './HasMenuItem';
3
3
 
4
4
 
5
+ /**
6
+ * A MenuItem that renders as an anchor (<a>). Inherits all MenuItem methods and adds target control.
7
+ *
8
+ *
9
+ * @example
10
+ * const link = new MenuLink()
11
+ * .label(Span('Docs'))
12
+ * .href('https://docs.example.com')
13
+ * .target('_blank')
14
+ * .icon(ExternalLinkIcon());
15
+ *
16
+ * @constructor
17
+ * @param {GlobalAttributes} [props]
18
+ */
5
19
  export default function MenuLink(props = {}) {
6
20
  if(!(this instanceof MenuLink)) {
7
21
  return new MenuLink(props);
@@ -16,10 +30,21 @@ HasMenuItem.components.MenuLink = MenuLink;
16
30
 
17
31
  MenuLink.defaultTemplate = null;
18
32
 
33
+ /**
34
+ * Registers the render template for MenuLink.
35
+ * @param {(description: {
36
+ * [key: string]: *
37
+ * }, instance: MenuLink) => NdChild} template
38
+ */
19
39
  MenuLink.use = function(template) {
20
40
  MenuLink.defaultTemplate = template;
21
41
  };
22
42
 
43
+ /**
44
+ *
45
+ * @param {*} target
46
+ * @returns {this}
47
+ */
23
48
  MenuLink.prototype.target = function (target) {
24
49
  this.$description.target = target;
25
50
  return this;
@@ -1,8 +1,8 @@
1
- import Menu from "./Menu";
2
- import MenuItem from "./MenuItem";
3
- import MenuGroup from "./MenuGroup";
4
- import MenuDivider from "./MenuDivider";
5
- import MenuLink from "./MenuLink";
1
+ import Menu from './Menu';
2
+ import MenuItem from './MenuItem';
3
+ import MenuGroup from './MenuGroup';
4
+ import MenuDivider from './MenuDivider';
5
+ import MenuLink from './MenuLink';
6
6
 
7
7
 
8
8
  export {
@@ -10,5 +10,5 @@ export {
10
10
  MenuItem,
11
11
  MenuGroup,
12
12
  MenuDivider,
13
- MenuLink
13
+ MenuLink,
14
14
  };
@@ -0,0 +1,60 @@
1
+ import type { ValidChild } from '../../../../types/elements';
2
+ import type { ObservableItem } from '../../../../types/observable';
3
+ import type { BaseComponent } from '../../BaseComponent';
4
+ import type { MenuItemInterface } from './MenuItem';
5
+ import type { MenuGroupInterface } from './MenuGroup';
6
+ import type { MenuLinkInterface } from './MenuLink';
7
+ import type { MenuDividerInterface } from './MenuDivider';
8
+ import type { GlobalAttributes } from '../../../../types/globals';
9
+
10
+ export type MenuDescription = {
11
+ items: ObservableItem<Array<MenuItemInterface | MenuGroupInterface | MenuDividerInterface>>;
12
+ render: ((desc: MenuDescription, instance: MenuInterface) => ValidChild) | null;
13
+ orientation: 'horizontal' | 'vertical' | 'inline';
14
+ closeOnSelect: boolean;
15
+ keyboardLoop: boolean;
16
+ activeItem: ObservableItem<MenuItemInterface | null>;
17
+ active: ((item: MenuItemInterface) => boolean) | null;
18
+ compactThreshold: number;
19
+ clickFirst: boolean;
20
+ props: GlobalAttributes;
21
+ };
22
+
23
+ export interface MenuInterface extends BaseComponent {
24
+ dataResolver(resolver: (data: unknown) => unknown): this;
25
+ title(title: ValidChild): this;
26
+ orientation(orientation: 'horizontal' | 'vertical' | 'inline'): this;
27
+ horizontal(): this;
28
+ vertical(): this;
29
+ inline(): this;
30
+ closeOnSelect(close?: boolean): this;
31
+ keyboardLoop(keyboardLoop?: boolean): this;
32
+ data(data: unknown): this;
33
+ active(callback: (item: MenuItemInterface) => boolean): this;
34
+ onItemClick(handler: (item: MenuItemInterface, event: MouseEvent) => void): this;
35
+ onItemSelect(handler: (item: MenuItemInterface) => void): this;
36
+ group(label: ValidChild, icon: ValidChild, builder: (group: MenuGroupInterface) => void, props?: Record<string, unknown>): this;
37
+ getItem(key: string): MenuItemInterface | undefined;
38
+ compactThreshold(width?: number): this;
39
+ clickFirst(mode?: boolean): this;
40
+ item(label: ValidChild, ...args: unknown[]): this;
41
+ link(label: ValidChild, ...args: unknown[]): this;
42
+ separator(): this;
43
+ divider(): this;
44
+ add(item: MenuItemInterface | MenuGroupInterface | MenuLinkInterface | MenuDividerInterface): this;
45
+ getDepth(): number;
46
+ getRoot(): unknown;
47
+ onClicked(): this;
48
+ onHovered(): this;
49
+ render(template: (description: MenuDescription, instance: MenuInterface) => ValidChild): this;
50
+ }
51
+
52
+
53
+ export declare function Menu(props?: Record<string, unknown>): MenuInterface;
54
+ export declare namespace Menu {
55
+
56
+
57
+ function use(template: (description: MenuDescription, instance: MenuInterface) => ValidChild): void;
58
+
59
+
60
+ }