native-document 1.0.16 → 1.0.17-1.2

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 (680) hide show
  1. package/.npmrc.example +1 -0
  2. package/.vitepress/config.js +166 -0
  3. package/CHANGELOG.md +223 -0
  4. package/cdn.js +19 -0
  5. package/components.d.ts +2 -0
  6. package/components.js +32 -0
  7. package/devtools/ComponentRegistry.js +113 -0
  8. package/devtools/index.js +8 -0
  9. package/devtools/plugin/dev-tools-plugin.js +15 -0
  10. package/devtools/transformers/nd-vite-devtools.js +55 -0
  11. package/devtools/transformers/src/transformComponentForHrm.js +73 -0
  12. package/devtools/transformers/src/transformJsFile.js +9 -0
  13. package/devtools/transformers/src/utils.js +79 -0
  14. package/devtools/transformers/templates/hrm.hook.template.js +46 -0
  15. package/devtools/transformers/templates/hrm.orbservable.hook.template.js +76 -0
  16. package/devtools/widget/Widget.js +49 -0
  17. package/devtools/widget/widget.css +81 -0
  18. package/devtools/widget.js +23 -0
  19. package/dist/native-document.components.min.css +1 -0
  20. package/dist/native-document.components.min.js +23873 -0
  21. package/dist/native-document.dev.js +8464 -1515
  22. package/dist/native-document.dev.js.map +1 -0
  23. package/dist/native-document.devtools.min.js +1 -0
  24. package/dist/native-document.min.js +1 -1
  25. package/docs/advanced-components.md +419 -0
  26. package/docs/anchor.md +181 -257
  27. package/docs/cache.md +180 -0
  28. package/docs/cli.md +179 -0
  29. package/docs/components/accordion.md +172 -0
  30. package/docs/components/alert.md +99 -0
  31. package/docs/components/avatar.md +160 -0
  32. package/docs/components/badge.md +102 -0
  33. package/docs/components/breadcrumb.md +89 -0
  34. package/docs/components/button.md +183 -0
  35. package/docs/components/card.md +69 -0
  36. package/docs/components/context-menu.md +118 -0
  37. package/docs/components/data-table.md +345 -0
  38. package/docs/components/dropdown.md +214 -0
  39. package/docs/components/form/autocomplete-field.md +81 -0
  40. package/docs/components/form/checkbox-field.md +41 -0
  41. package/docs/components/form/checkbox-group-field.md +54 -0
  42. package/docs/components/form/color-field.md +64 -0
  43. package/docs/components/form/date-field.md +92 -0
  44. package/docs/components/form/field-collection.md +63 -0
  45. package/docs/components/form/file-field.md +203 -0
  46. package/docs/components/form/form-control.md +87 -0
  47. package/docs/components/form/image-field.md +90 -0
  48. package/docs/components/form/index.md +115 -0
  49. package/docs/components/form/number-field.md +65 -0
  50. package/docs/components/form/radio-field.md +51 -0
  51. package/docs/components/form/select-field.md +123 -0
  52. package/docs/components/form/slider.md +136 -0
  53. package/docs/components/form/string-field.md +134 -0
  54. package/docs/components/form/textarea-field.md +65 -0
  55. package/docs/components/form-fields.md +372 -0
  56. package/docs/components/getting-started.md +264 -0
  57. package/docs/components/icons.md +321 -0
  58. package/docs/components/index.md +337 -0
  59. package/docs/components/layout.md +279 -0
  60. package/docs/components/list.md +73 -0
  61. package/docs/components/menu.md +215 -0
  62. package/docs/components/modal.md +156 -0
  63. package/docs/components/pagination.md +95 -0
  64. package/docs/components/popover.md +131 -0
  65. package/docs/components/progress.md +111 -0
  66. package/docs/components/shortcut-manager.md +221 -0
  67. package/docs/components/simple-table.md +107 -0
  68. package/docs/components/skeleton.md +155 -0
  69. package/docs/components/spinner.md +100 -0
  70. package/docs/components/splitter.md +133 -0
  71. package/docs/components/stepper.md +163 -0
  72. package/docs/components/switch.md +113 -0
  73. package/docs/components/tabs.md +153 -0
  74. package/docs/components/toast.md +119 -0
  75. package/docs/components/tooltip.md +151 -0
  76. package/docs/components/traits.md +261 -0
  77. package/docs/conditional-rendering.md +177 -502
  78. package/docs/contributing.md +300 -25
  79. package/docs/core-concepts.md +207 -366
  80. package/docs/elements.md +266 -254
  81. package/docs/extending-native-document-element.md +259 -0
  82. package/docs/filters.md +247 -0
  83. package/docs/getting-started.md +195 -257
  84. package/docs/i18n.md +241 -0
  85. package/docs/index.md +76 -0
  86. package/docs/lifecycle-events.md +146 -67
  87. package/docs/list-rendering.md +240 -460
  88. package/docs/memory-management.md +135 -46
  89. package/docs/native-document-element.md +487 -0
  90. package/docs/native-fetch.md +213 -0
  91. package/docs/observable-resource.md +364 -0
  92. package/docs/observables.md +690 -357
  93. package/docs/routing.md +246 -646
  94. package/docs/state-management.md +213 -306
  95. package/docs/svg-elements.md +231 -0
  96. package/docs/theming.md +409 -0
  97. package/docs/tutorials/.gitkeep +0 -0
  98. package/docs/validation.md +98 -91
  99. package/docs/vitepress-conventions.md +219 -0
  100. package/elements.d.ts +7 -0
  101. package/elements.js +3 -4
  102. package/eslint.config.js +35 -0
  103. package/i18n.js +1 -0
  104. package/i18n.ts +2 -0
  105. package/index.d.ts +21 -0
  106. package/index.def.js +1086 -0
  107. package/index.js +19 -13
  108. package/package.json +65 -8
  109. package/readme.md +296 -93
  110. package/rollup.config.js +52 -3
  111. package/router.d.ts +7 -0
  112. package/router.js +0 -0
  113. package/src/components/$traits/has-draggable/HasDraggable.d.ts +4 -0
  114. package/src/components/$traits/has-draggable/HasDraggable.js +82 -0
  115. package/src/components/$traits/has-draggable/has-draggable.css +8 -0
  116. package/src/components/$traits/has-items/HasItems.d.ts +9 -0
  117. package/src/components/$traits/has-items/HasItems.js +64 -0
  118. package/src/components/$traits/has-position/HasFullPosition.d.ts +14 -0
  119. package/src/components/$traits/has-position/HasFullPosition.js +95 -0
  120. package/src/components/$traits/has-position/HasPosition.d.ts +7 -0
  121. package/src/components/$traits/has-position/HasPosition.js +45 -0
  122. package/src/components/$traits/has-resizable/HasResizable.d.ts +13 -0
  123. package/src/components/$traits/has-resizable/HasResizable.js +122 -0
  124. package/src/components/$traits/has-resizable/has-resizable.css +121 -0
  125. package/src/components/$traits/has-validation/HasValidation.d.ts +17 -0
  126. package/src/components/$traits/has-validation/HasValidation.js +133 -0
  127. package/src/components/BaseComponent.d.ts +32 -0
  128. package/src/components/BaseComponent.js +289 -0
  129. package/src/components/accordion/Accordion.js +269 -0
  130. package/src/components/accordion/AccordionItem.js +234 -0
  131. package/src/components/accordion/index.js +7 -0
  132. package/src/components/accordion/types/Accordion.d.ts +47 -0
  133. package/src/components/accordion/types/AccordionItem.d.ts +48 -0
  134. package/src/components/alert/Alert.js +354 -0
  135. package/src/components/alert/index.js +6 -0
  136. package/src/components/alert/types/Alert.d.ts +62 -0
  137. package/src/components/avatar/Avatar.js +431 -0
  138. package/src/components/avatar/AvatarGroup.js +98 -0
  139. package/src/components/avatar/index.js +7 -0
  140. package/src/components/avatar/types/Avatar.d.ts +74 -0
  141. package/src/components/avatar/types/AvatarGroup.d.ts +32 -0
  142. package/src/components/badge/Badge.js +246 -0
  143. package/src/components/badge/index.js +6 -0
  144. package/src/components/badge/types/Badge.d.ts +51 -0
  145. package/src/components/base-component.css +0 -0
  146. package/src/components/breadcrumb/BreadCrumb.js +142 -0
  147. package/src/components/breadcrumb/index.js +5 -0
  148. package/src/components/breadcrumb/types/BreadCrumb.d.ts +42 -0
  149. package/src/components/button/Button.js +321 -0
  150. package/src/components/button/index.js +5 -0
  151. package/src/components/button/types/Button.d.ts +62 -0
  152. package/src/components/card/Card.js +283 -0
  153. package/src/components/card/index.js +5 -0
  154. package/src/components/card/types/Card.d.ts +42 -0
  155. package/src/components/context-menu/ContextMenu.js +129 -0
  156. package/src/components/context-menu/ContextMenuGroup.js +31 -0
  157. package/src/components/context-menu/ContextMenuItem.js +30 -0
  158. package/src/components/context-menu/index.js +10 -0
  159. package/src/components/context-menu/types/ContextMenu.d.ts +30 -0
  160. package/src/components/context-menu/types/ContextMenuGroup.d.ts +18 -0
  161. package/src/components/context-menu/types/ContextMenuItem.d.ts +18 -0
  162. package/src/components/divider/Divider.js +258 -0
  163. package/src/components/divider/index.js +6 -0
  164. package/src/components/divider/types/Divider.d.ts +55 -0
  165. package/src/components/dropdown/Dropdown.js +532 -0
  166. package/src/components/dropdown/DropdownDivider.js +46 -0
  167. package/src/components/dropdown/DropdownGroup.js +84 -0
  168. package/src/components/dropdown/DropdownItem.js +151 -0
  169. package/src/components/dropdown/DropdownTrigger.js +94 -0
  170. package/src/components/dropdown/helpers.js +53 -0
  171. package/src/components/dropdown/index.js +13 -0
  172. package/src/components/dropdown/types/Dropdown.d.ts +88 -0
  173. package/src/components/dropdown/types/DropdownDivider.d.ts +20 -0
  174. package/src/components/dropdown/types/DropdownGroup.d.ts +25 -0
  175. package/src/components/dropdown/types/DropdownItem.d.ts +41 -0
  176. package/src/components/dropdown/types/DropdownTrigger.d.ts +32 -0
  177. package/src/components/form/FormControl.js +499 -0
  178. package/src/components/form/field/Field.js +420 -0
  179. package/src/components/form/field/FieldCollection.js +292 -0
  180. package/src/components/form/field/types/AutocompleteField.js +168 -0
  181. package/src/components/form/field/types/CheckboxField.js +77 -0
  182. package/src/components/form/field/types/CheckboxGroupField.js +171 -0
  183. package/src/components/form/field/types/ColorField.js +102 -0
  184. package/src/components/form/field/types/DateField.js +315 -0
  185. package/src/components/form/field/types/EmailField.js +104 -0
  186. package/src/components/form/field/types/FileField.js +276 -0
  187. package/src/components/form/field/types/HiddenField.js +44 -0
  188. package/src/components/form/field/types/ImageField.js +138 -0
  189. package/src/components/form/field/types/NumberField.js +177 -0
  190. package/src/components/form/field/types/PasswordField.js +200 -0
  191. package/src/components/form/field/types/RadioField.js +145 -0
  192. package/src/components/form/field/types/RangeField.js +117 -0
  193. package/src/components/form/field/types/SearchField.js +66 -0
  194. package/src/components/form/field/types/SelectField.js +247 -0
  195. package/src/components/form/field/types/StringField.js +148 -0
  196. package/src/components/form/field/types/TelField.js +98 -0
  197. package/src/components/form/field/types/TextAreaField.js +142 -0
  198. package/src/components/form/field/types/TimeField.js +215 -0
  199. package/src/components/form/field/types/UrlField.js +115 -0
  200. package/src/components/form/field/types/file-field-mode/FileAvatarMode.js +183 -0
  201. package/src/components/form/field/types/file-field-mode/FileDropzoneMode.js +117 -0
  202. package/src/components/form/field/types/file-field-mode/FileItemPreview.js +150 -0
  203. package/src/components/form/field/types/file-field-mode/FileNativeMode.js +43 -0
  204. package/src/components/form/field/types/file-field-mode/FileUploadButtonMode.js +120 -0
  205. package/src/components/form/field/types/file-field-mode/FileWallMode.js +106 -0
  206. package/src/components/form/index.js +61 -0
  207. package/src/components/form/merge +0 -0
  208. package/src/components/form/types/Field.d.ts +73 -0
  209. package/src/components/form/types/FieldCollection.d.ts +53 -0
  210. package/src/components/form/types/FormControl.d.ts +64 -0
  211. package/src/components/form/types/fields/AutocompleteField.d.ts +48 -0
  212. package/src/components/form/types/fields/CheckboxField.d.ts +33 -0
  213. package/src/components/form/types/fields/CheckboxGroupField.d.ts +49 -0
  214. package/src/components/form/types/fields/ColorField.d.ts +37 -0
  215. package/src/components/form/types/fields/DateField.d.ts +70 -0
  216. package/src/components/form/types/fields/EmailField.d.ts +35 -0
  217. package/src/components/form/types/fields/FileAvatarMode.d.ts +46 -0
  218. package/src/components/form/types/fields/FileDropzoneMode.d.ts +28 -0
  219. package/src/components/form/types/fields/FileField.d.ts +56 -0
  220. package/src/components/form/types/fields/FileItemPreview.d.ts +35 -0
  221. package/src/components/form/types/fields/FileNativeMode.d.ts +21 -0
  222. package/src/components/form/types/fields/FileUploadButtonMode.d.ts +34 -0
  223. package/src/components/form/types/fields/FileWallMode.d.ts +32 -0
  224. package/src/components/form/types/fields/HiddenField.d.ts +26 -0
  225. package/src/components/form/types/fields/ImageField.d.ts +45 -0
  226. package/src/components/form/types/fields/NumberField.d.ts +48 -0
  227. package/src/components/form/types/fields/PasswordField.d.ts +46 -0
  228. package/src/components/form/types/fields/RadioField.d.ts +48 -0
  229. package/src/components/form/types/fields/RangeField.d.ts +44 -0
  230. package/src/components/form/types/fields/SearchField.d.ts +34 -0
  231. package/src/components/form/types/fields/SelectField.d.ts +71 -0
  232. package/src/components/form/types/fields/StringField.d.ts +48 -0
  233. package/src/components/form/types/fields/TelField.d.ts +37 -0
  234. package/src/components/form/types/fields/TextAreaField.d.ts +44 -0
  235. package/src/components/form/types/fields/TimeField.d.ts +51 -0
  236. package/src/components/form/types/fields/UrlField.d.ts +35 -0
  237. package/src/components/form/utils.js +17 -0
  238. package/src/components/form/validation/Validation.js +565 -0
  239. package/src/components/icon/Icon.js +108 -0
  240. package/src/components/icon/icon-getters.js +142 -0
  241. package/src/components/icon/icons.js +171 -0
  242. package/src/components/icon/index.js +17 -0
  243. package/src/components/icon/types/Icon.d.ts +191 -0
  244. package/src/components/index.d.ts +165 -0
  245. package/src/components/list/HasListItem.js +171 -0
  246. package/src/components/list/List.js +125 -0
  247. package/src/components/list/ListDivider.js +39 -0
  248. package/src/components/list/ListGroup.js +135 -0
  249. package/src/components/list/ListItem.js +213 -0
  250. package/src/components/list/index.js +12 -0
  251. package/src/components/list/types/List.d.ts +56 -0
  252. package/src/components/list/types/ListDivider.ts +16 -0
  253. package/src/components/list/types/ListGroup.d.ts +59 -0
  254. package/src/components/list/types/ListItem.d.ts +52 -0
  255. package/src/components/menu/HasMenuItem.js +182 -0
  256. package/src/components/menu/Menu.js +230 -0
  257. package/src/components/menu/MenuDivider.js +38 -0
  258. package/src/components/menu/MenuGroup.js +127 -0
  259. package/src/components/menu/MenuItem.js +191 -0
  260. package/src/components/menu/MenuLink.js +52 -0
  261. package/src/components/menu/index.js +14 -0
  262. package/src/components/menu/types/Menu.d.ts +60 -0
  263. package/src/components/menu/types/MenuDivider.d.ts +19 -0
  264. package/src/components/menu/types/MenuGroup.d.ts +44 -0
  265. package/src/components/menu/types/MenuItem.d.ts +46 -0
  266. package/src/components/menu/types/MenuLink.d.ts +16 -0
  267. package/src/components/modal/Modal.js +528 -0
  268. package/src/components/modal/index.js +5 -0
  269. package/src/components/modal/types/Modal.d.ts +94 -0
  270. package/src/components/pagination/Pagination.js +412 -0
  271. package/src/components/pagination/index.js +5 -0
  272. package/src/components/pagination/types/Pagination.d.ts +68 -0
  273. package/src/components/popover/Popover.js +460 -0
  274. package/src/components/popover/PopoverFooter.js +62 -0
  275. package/src/components/popover/PopoverHeader.js +69 -0
  276. package/src/components/popover/index.js +10 -0
  277. package/src/components/popover/types/Popover.d.ts +83 -0
  278. package/src/components/popover/types/PopoverFooter.d.ts +24 -0
  279. package/src/components/popover/types/PopoverHeader.d.ts +26 -0
  280. package/src/components/progress/Progress.js +406 -0
  281. package/src/components/progress/index.js +6 -0
  282. package/src/components/progress/types/Progress.d.ts +77 -0
  283. package/src/components/skeleton/Skeleton.js +232 -0
  284. package/src/components/skeleton/index.js +6 -0
  285. package/src/components/skeleton/types/Skeleton.d.ts +55 -0
  286. package/src/components/slider/Slider.js +407 -0
  287. package/src/components/slider/index.js +5 -0
  288. package/src/components/slider/types/Slider.d.ts +82 -0
  289. package/src/components/spacer/Spacer.js +28 -0
  290. package/src/components/spacer/index.js +5 -0
  291. package/src/components/spacer/types/Spacer.d.ts +19 -0
  292. package/src/components/spinner/Spinner.js +351 -0
  293. package/src/components/spinner/index.js +5 -0
  294. package/src/components/spinner/types/Spinner.d.ts +71 -0
  295. package/src/components/splitter/Splitter.js +165 -0
  296. package/src/components/splitter/SplitterGutter.js +146 -0
  297. package/src/components/splitter/SplitterPanel.js +144 -0
  298. package/src/components/splitter/index.js +10 -0
  299. package/src/components/splitter/types/Splitter.d.ts +38 -0
  300. package/src/components/splitter/types/SplitterGutter.d.ts +38 -0
  301. package/src/components/splitter/types/SplitterPanel.d.ts +41 -0
  302. package/src/components/stacks/AbsoluteStack.js +54 -0
  303. package/src/components/stacks/FixedStack.js +54 -0
  304. package/src/components/stacks/HStack.js +55 -0
  305. package/src/components/stacks/PositionStack.js +255 -0
  306. package/src/components/stacks/RelativeStack.js +54 -0
  307. package/src/components/stacks/Stack.js +167 -0
  308. package/src/components/stacks/VStack.js +56 -0
  309. package/src/components/stacks/index.js +21 -0
  310. package/src/components/stacks/types/AbsoluteStack.d.ts +16 -0
  311. package/src/components/stacks/types/FixedStack.d.ts +16 -0
  312. package/src/components/stacks/types/HStack.d.ts +16 -0
  313. package/src/components/stacks/types/PositionStack.d.ts +54 -0
  314. package/src/components/stacks/types/RelativeStack.d.ts +17 -0
  315. package/src/components/stacks/types/Stack.d.ts +39 -0
  316. package/src/components/stacks/types/VStack.d.ts +16 -0
  317. package/src/components/stepper/Stepper.js +462 -0
  318. package/src/components/stepper/StepperStep.js +242 -0
  319. package/src/components/stepper/index.js +8 -0
  320. package/src/components/stepper/types/Stepper.d.ts +68 -0
  321. package/src/components/stepper/types/StepperStep.d.ts +54 -0
  322. package/src/components/switch/Switch.js +267 -0
  323. package/src/components/switch/index.js +6 -0
  324. package/src/components/switch/types/Switch.d.ts +55 -0
  325. package/src/components/table/Column.js +212 -0
  326. package/src/components/table/ColumnGroup.js +90 -0
  327. package/src/components/table/DataTable.js +721 -0
  328. package/src/components/table/SimpleTable.js +140 -0
  329. package/src/components/table/index.js +7 -0
  330. package/src/components/table/types/Column.d.ts +49 -0
  331. package/src/components/table/types/ColumnGroup.d.ts +28 -0
  332. package/src/components/table/types/DataTable.d.ts +97 -0
  333. package/src/components/table/types/SimpleTable.d.ts +40 -0
  334. package/src/components/tabs/Tabs.js +396 -0
  335. package/src/components/tabs/index.js +6 -0
  336. package/src/components/tabs/types/Tabs.d.ts +78 -0
  337. package/src/components/toast/Toast.js +263 -0
  338. package/src/components/toast/ToastError.js +0 -0
  339. package/src/components/toast/ToastInfo.js +0 -0
  340. package/src/components/toast/ToastSuccess.js +0 -0
  341. package/src/components/toast/ToastWarning.js +0 -0
  342. package/src/components/toast/index.js +5 -0
  343. package/src/components/toast/types/Toast.d.ts +57 -0
  344. package/src/components/toast/types/ToastError.d.ts +7 -0
  345. package/src/components/toast/types/ToastInfo.d.ts +7 -0
  346. package/src/components/toast/types/ToastSuccess.d.ts +7 -0
  347. package/src/components/toast/types/ToastWarning.d.ts +7 -0
  348. package/src/components/tooltip/Tooltip.js +360 -0
  349. package/src/components/tooltip/index.js +5 -0
  350. package/src/components/tooltip/prototypes.js +6 -0
  351. package/src/components/tooltip/types/Tooltip.d.ts +65 -0
  352. package/src/{data → core/data}/MemoryManager.js +2 -3
  353. package/src/core/data/Observable.js +227 -0
  354. package/src/core/data/ObservableArray.js +522 -0
  355. package/src/core/data/ObservableChecker.js +39 -0
  356. package/src/core/data/ObservableItem.js +611 -0
  357. package/src/core/data/ObservableObject.js +274 -0
  358. package/src/core/data/ObservableResource.js +315 -0
  359. package/src/core/data/ObservableWhen.js +54 -0
  360. package/src/core/data/Store.js +520 -0
  361. package/src/core/data/observable-helpers/observable.is-to.js +390 -0
  362. package/src/core/data/observable-helpers/observable.prototypes.js +145 -0
  363. package/src/core/elements/anchor/anchor-with-sentinel.js +66 -0
  364. package/src/core/elements/anchor/anchor.js +210 -0
  365. package/src/core/elements/anchor/one-child-anchor-overwriting.js +66 -0
  366. package/src/core/elements/content-formatter.js +183 -0
  367. package/src/core/elements/control/for-each-array.js +292 -0
  368. package/src/{elements → core/elements}/control/for-each.js +42 -23
  369. package/src/core/elements/control/show-if.js +94 -0
  370. package/src/core/elements/control/show-when.js +54 -0
  371. package/src/core/elements/control/switch.js +141 -0
  372. package/src/core/elements/description-list.js +19 -0
  373. package/src/core/elements/form.js +255 -0
  374. package/src/core/elements/fragment.js +8 -0
  375. package/src/core/elements/html5-semantics.js +55 -0
  376. package/src/core/elements/img.js +59 -0
  377. package/src/{elements → core/elements}/index.js +4 -4
  378. package/src/core/elements/interactive.js +25 -0
  379. package/src/core/elements/list.js +37 -0
  380. package/src/core/elements/medias.js +37 -0
  381. package/src/core/elements/meta-data.js +43 -0
  382. package/src/core/elements/svg.js +61 -0
  383. package/src/core/elements/table.js +73 -0
  384. package/src/{errors → core/errors}/ArgTypesError.js +1 -1
  385. package/src/{errors → core/errors}/NativeDocumentError.js +0 -0
  386. package/src/core/utils/HasEventEmitter.js +85 -0
  387. package/src/core/utils/args-types.js +140 -0
  388. package/src/core/utils/cache.js +5 -0
  389. package/src/core/utils/callback-handler.js +50 -0
  390. package/src/core/utils/debug-manager.js +40 -0
  391. package/src/core/utils/events.js +148 -0
  392. package/src/core/utils/filters/date.js +178 -0
  393. package/src/core/utils/filters/index.js +4 -0
  394. package/src/core/utils/filters/standard.js +263 -0
  395. package/src/core/utils/filters/strings.js +67 -0
  396. package/src/core/utils/filters/utils.js +77 -0
  397. package/src/core/utils/formatters.js +90 -0
  398. package/src/core/utils/helpers.js +144 -0
  399. package/src/core/utils/localstorage.js +57 -0
  400. package/src/core/utils/memoize.js +115 -0
  401. package/src/core/utils/plugins-manager.js +81 -0
  402. package/src/core/utils/property-accumulator.js +72 -0
  403. package/src/core/utils/prototypes.js +44 -0
  404. package/src/core/utils/shortcut-manager.js +242 -0
  405. package/src/{utils → core/utils}/validator.js +58 -22
  406. package/src/core/wrappers/AttributesWrapper.js +196 -0
  407. package/src/core/wrappers/DocumentObserver.js +182 -0
  408. package/src/core/wrappers/ElementCreator.js +117 -0
  409. package/src/core/wrappers/HtmlElementWrapper.js +117 -0
  410. package/src/core/wrappers/NDElement.js +635 -0
  411. package/src/core/wrappers/NdPrototype.js +233 -0
  412. package/src/core/wrappers/SingletonView.js +99 -0
  413. package/src/core/wrappers/SvgElementWrapper.js +15 -0
  414. package/src/core/wrappers/TemplateBinding.js +7 -0
  415. package/src/core/wrappers/constants.js +66 -0
  416. package/src/core/wrappers/prototypes/attributes-extensions.js +24 -0
  417. package/src/core/wrappers/prototypes/bind-class-extensions.js +0 -0
  418. package/src/core/wrappers/prototypes/nd-element-extensions.js +125 -0
  419. package/src/core/wrappers/prototypes/nd-element.transition.extensions.js +127 -0
  420. package/src/core/wrappers/template-cloner/NodeCloner.js +209 -0
  421. package/src/core/wrappers/template-cloner/TemplateCloner.js +192 -0
  422. package/src/core/wrappers/template-cloner/attributes-hydrator.js +142 -0
  423. package/src/core/wrappers/template-cloner/utils.js +173 -0
  424. package/src/fetch/NativeFetch.js +89 -0
  425. package/src/i18n/bin/scan.js +132 -0
  426. package/src/i18n/index.d.ts +2 -0
  427. package/src/i18n/service/I18nService.d.ts +27 -0
  428. package/src/i18n/service/I18nService.js +46 -0
  429. package/src/i18n/service/functions.d.ts +22 -0
  430. package/src/i18n/service/functions.js +29 -0
  431. package/src/router/Route.js +33 -8
  432. package/src/router/RouteGroupHelper.js +10 -2
  433. package/src/router/Router.js +63 -22
  434. package/src/router/RouterComponent.js +114 -6
  435. package/src/{errors → router/errors}/RouterError.js +0 -1
  436. package/src/router/link.js +8 -9
  437. package/src/router/modes/HashRouter.js +2 -2
  438. package/src/router/modes/HistoryRouter.js +2 -3
  439. package/src/router/modes/MemoryRouter.js +1 -1
  440. package/src/ui/components/accordion/AccordionItemRender.js +85 -0
  441. package/src/ui/components/accordion/AccordionRender.js +35 -0
  442. package/src/ui/components/accordion/accordion.css +121 -0
  443. package/src/ui/components/alert/AlertRender.js +87 -0
  444. package/src/ui/components/alert/alert.css +163 -0
  445. package/src/ui/components/avatar/avata-group/AvatarGroupRender.js +50 -0
  446. package/src/ui/components/avatar/avata-group/avatar-group.css +38 -0
  447. package/src/ui/components/avatar/avatar/AvatarRender.js +87 -0
  448. package/src/ui/components/avatar/avatar/avatar.css +189 -0
  449. package/src/ui/components/badge/BadgeRender.js +25 -0
  450. package/src/ui/components/badge/badge.css +168 -0
  451. package/src/ui/components/breadcrumb/BreadcrumbRender.js +52 -0
  452. package/src/ui/components/breadcrumb/breadcrumb.css +55 -0
  453. package/src/ui/components/button/ButtonRender.js +68 -0
  454. package/src/ui/components/button/button.css +296 -0
  455. package/src/ui/components/card/CardRender.js +133 -0
  456. package/src/ui/components/card/card.css +169 -0
  457. package/src/ui/components/contextmenu/ContextmenuRender.js +70 -0
  458. package/src/ui/components/contextmenu/contextmenu.css +36 -0
  459. package/src/ui/components/divider/DividerRender.js +70 -0
  460. package/src/ui/components/divider/divider.css +70 -0
  461. package/src/ui/components/dropdown/DropdownRender.js +95 -0
  462. package/src/ui/components/dropdown/divider/DropdownDividerRender.js +9 -0
  463. package/src/ui/components/dropdown/divider/dropdown-divider.css +0 -0
  464. package/src/ui/components/dropdown/dropdown.css +179 -0
  465. package/src/ui/components/dropdown/group/DropdownGroupRender.js +23 -0
  466. package/src/ui/components/dropdown/group/dropdown-group.css +0 -0
  467. package/src/ui/components/dropdown/item/DropdownItemRender.js +34 -0
  468. package/src/ui/components/dropdown/item/dropdown-item.css +0 -0
  469. package/src/ui/components/form/FieldCollectionRender.js +114 -0
  470. package/src/ui/components/form/FormControlRender.js +85 -0
  471. package/src/ui/components/form/field-collection.css +55 -0
  472. package/src/ui/components/form/fields/AutocompleteFieldRender.js +143 -0
  473. package/src/ui/components/form/fields/CheckboxFieldRender.js +63 -0
  474. package/src/ui/components/form/fields/CheckboxGroupFieldRender.js +96 -0
  475. package/src/ui/components/form/fields/ColorFieldRender.js +30 -0
  476. package/src/ui/components/form/fields/DateFieldRender.js +155 -0
  477. package/src/ui/components/form/fields/EmailFieldRender.js +5 -0
  478. package/src/ui/components/form/fields/FieldRender.js +118 -0
  479. package/src/ui/components/form/fields/FileFieldRender.js +41 -0
  480. package/src/ui/components/form/fields/HiddenFieldRender.js +13 -0
  481. package/src/ui/components/form/fields/ImageFieldRender.js +0 -0
  482. package/src/ui/components/form/fields/NumberFieldRender.js +52 -0
  483. package/src/ui/components/form/fields/PasswordFieldRender.js +65 -0
  484. package/src/ui/components/form/fields/RadioFieldRender.js +81 -0
  485. package/src/ui/components/form/fields/RangeFieldRender.js +126 -0
  486. package/src/ui/components/form/fields/SelectFieldRender.js +253 -0
  487. package/src/ui/components/form/fields/SliderFieldRender.js +362 -0
  488. package/src/ui/components/form/fields/StringFieldRender.js +6 -0
  489. package/src/ui/components/form/fields/TelFieldRender.js +6 -0
  490. package/src/ui/components/form/fields/TextAreaFieldRender.js +96 -0
  491. package/src/ui/components/form/fields/TimeFieldRender.js +142 -0
  492. package/src/ui/components/form/fields/UrlFieldRender.js +6 -0
  493. package/src/ui/components/form/fields/date-field.css +32 -0
  494. package/src/ui/components/form/fields/field.css +402 -0
  495. package/src/ui/components/form/fields/file-field.css +79 -0
  496. package/src/ui/components/form/fields/password-field.css +50 -0
  497. package/src/ui/components/form/fields/range-field.css +120 -0
  498. package/src/ui/components/form/fields/slider.css +195 -0
  499. package/src/ui/components/form/file-upload-mode/FileAvatarModeRender.js +143 -0
  500. package/src/ui/components/form/file-upload-mode/FileDropzoneModeRender.js +108 -0
  501. package/src/ui/components/form/file-upload-mode/FileNativeModeRender.js +22 -0
  502. package/src/ui/components/form/file-upload-mode/FileUploadButtonModeRender.js +89 -0
  503. package/src/ui/components/form/file-upload-mode/FileWallModeRender.js +90 -0
  504. package/src/ui/components/form/file-upload-mode/file-avatar-mode.css +139 -0
  505. package/src/ui/components/form/file-upload-mode/file-dropzone-mode.css +88 -0
  506. package/src/ui/components/form/file-upload-mode/file-upload-button-mode.css +44 -0
  507. package/src/ui/components/form/file-upload-mode/file-wall-mode.css +88 -0
  508. package/src/ui/components/form/form-control.css +40 -0
  509. package/src/ui/components/form/helpers.js +111 -0
  510. package/src/ui/components/form/index.js +27 -0
  511. package/src/ui/components/icon/material/MaterialIconRender.js +71 -0
  512. package/src/ui/components/icon/material/material.css +15 -0
  513. package/src/ui/components/icon/material/material.map.js +170 -0
  514. package/src/ui/components/icon/phosphor/PhosphorIconRender.js +71 -0
  515. package/src/ui/components/icon/phosphor/phosphor.css +17 -0
  516. package/src/ui/components/icon/phosphor/phosphor.map.js +165 -0
  517. package/src/ui/components/icon/tabler/TablerIconRender.js +58 -0
  518. package/src/ui/components/icon/tabler/tabler.css +14 -0
  519. package/src/ui/components/icon/tabler/tabler.map.js +165 -0
  520. package/src/ui/components/list/ListRender.js +18 -0
  521. package/src/ui/components/list/divider/ListDividerRender.js +10 -0
  522. package/src/ui/components/list/divider/list-divider.css +12 -0
  523. package/src/ui/components/list/group/ListGroupRender.js +61 -0
  524. package/src/ui/components/list/group/list-group.css +62 -0
  525. package/src/ui/components/list/item/ListItemRender.js +242 -0
  526. package/src/ui/components/list/item/list-item.css +191 -0
  527. package/src/ui/components/list/list.css +24 -0
  528. package/src/ui/components/menu/MenuDividerRender.js +12 -0
  529. package/src/ui/components/menu/MenuGroupRender.js +59 -0
  530. package/src/ui/components/menu/MenuItemRender.js +65 -0
  531. package/src/ui/components/menu/MenuLinkRender.js +66 -0
  532. package/src/ui/components/menu/MenuRender.js +27 -0
  533. package/src/ui/components/menu/helpers.js +122 -0
  534. package/src/ui/components/menu/menu.css +308 -0
  535. package/src/ui/components/modal/ModalRender.js +124 -0
  536. package/src/ui/components/modal/modal.css +156 -0
  537. package/src/ui/components/pagination/PaginationRender.js +112 -0
  538. package/src/ui/components/pagination/pagination.css +63 -0
  539. package/src/ui/components/popover/PopoverRender.js +233 -0
  540. package/src/ui/components/popover/popover.css +139 -0
  541. package/src/ui/components/progress/ProgressRender.js +177 -0
  542. package/src/ui/components/progress/progress.css +197 -0
  543. package/src/ui/components/skeleton/SkeletonRender.js +138 -0
  544. package/src/ui/components/skeleton/skeleton.css +154 -0
  545. package/src/ui/components/spacer/SpacerRender.js +10 -0
  546. package/src/ui/components/spinner/SpinnerRender.js +50 -0
  547. package/src/ui/components/spinner/spinner.css +152 -0
  548. package/src/ui/components/splitter/SplitterGutterRender.js +98 -0
  549. package/src/ui/components/splitter/SplitterPanelRender.js +42 -0
  550. package/src/ui/components/splitter/SplitterRender.js +77 -0
  551. package/src/ui/components/splitter/splitter.css +128 -0
  552. package/src/ui/components/stacks/PositionStackRender.js +39 -0
  553. package/src/ui/components/stacks/StackRender.js +41 -0
  554. package/src/ui/components/stacks/absolute-stack/AbsoluteStackRender.js +5 -0
  555. package/src/ui/components/stacks/fixed-stack/FixedStackRender.js +5 -0
  556. package/src/ui/components/stacks/h-stack/HStackRender.js +7 -0
  557. package/src/ui/components/stacks/h-stack/h-stack.css +4 -0
  558. package/src/ui/components/stacks/index.js +5 -0
  559. package/src/ui/components/stacks/position-stack.css +62 -0
  560. package/src/ui/components/stacks/relative-stack/RelativeStackRender.js +7 -0
  561. package/src/ui/components/stacks/relative-stack/relative-stack.css +3 -0
  562. package/src/ui/components/stacks/stack.css +78 -0
  563. package/src/ui/components/stacks/v-stack/VStackRender.js +6 -0
  564. package/src/ui/components/stacks/v-stack/v-stack.css +4 -0
  565. package/src/ui/components/stepper/StepperRender.js +72 -0
  566. package/src/ui/components/stepper/StepperStepRender.js +74 -0
  567. package/src/ui/components/stepper/stepper.css +359 -0
  568. package/src/ui/components/switch/SwitchRender.js +86 -0
  569. package/src/ui/components/switch/switch.css +143 -0
  570. package/src/ui/components/table/data-table/DataTableRender.js +54 -0
  571. package/src/ui/components/table/data-table/bulk-actions.js +34 -0
  572. package/src/ui/components/table/data-table/data-table.css +246 -0
  573. package/src/ui/components/table/data-table/pagination.js +56 -0
  574. package/src/ui/components/table/data-table/tables.js +368 -0
  575. package/src/ui/components/table/data-table/toolbar.js +67 -0
  576. package/src/ui/components/table/simple-table/SimpleTableRender.js +205 -0
  577. package/src/ui/components/table/simple-table/simple-table.css +50 -0
  578. package/src/ui/components/tabs/TabsRender.js +226 -0
  579. package/src/ui/components/tabs/tabs.css +253 -0
  580. package/src/ui/components/toast/ToastRender.js +103 -0
  581. package/src/ui/components/toast/toast.css +201 -0
  582. package/src/ui/components/tooltip/TooltipRender.js +8 -0
  583. package/src/ui/components/tooltip/tooltip.css +113 -0
  584. package/src/ui/index.js +52 -0
  585. package/src/ui/theme.js +0 -0
  586. package/src/ui/theme.scss +1 -0
  587. package/src/ui/tokens/animation.scss +36 -0
  588. package/src/ui/tokens/colors-dark.scss +58 -0
  589. package/src/ui/tokens/colors.scss +54 -0
  590. package/src/ui/tokens/components.scss +32 -0
  591. package/src/ui/tokens/fonts.scss +57 -0
  592. package/src/ui/tokens/glass.scss +10 -0
  593. package/src/ui/tokens/index.scss +38 -0
  594. package/src/ui/tokens/layouts.scss +228 -0
  595. package/src/ui/tokens/opacity.scss +21 -0
  596. package/src/ui/tokens/others.scss +11 -0
  597. package/src/ui/tokens/radius.scss +6 -0
  598. package/src/ui/tokens/reset.scss +51 -0
  599. package/src/ui/tokens/shadows.scss +29 -0
  600. package/src/ui/tokens/spacings.scss +13 -0
  601. package/src/ui/tokens/vars.scss +35 -0
  602. package/src/ui/tokens/viewports.scss +30 -0
  603. package/src/ui/utils/aria.js +19 -0
  604. package/tests/integration/ui/attributes-wrapper.test.js +177 -0
  605. package/tests/integration/ui/for-each-array.test.js +167 -0
  606. package/tests/integration/ui/lifecycle.test.js +146 -0
  607. package/tests/integration/ui/show-if.test.js +168 -0
  608. package/tests/unit/core/observable-array.test.js +404 -0
  609. package/tests/unit/core/observable-item.test.js +428 -0
  610. package/tests/unit/core/observable-object.test.js +239 -0
  611. package/tests/unit/core/observable-resource.test.js +323 -0
  612. package/tests/unit/core/store.test.js +347 -0
  613. package/tests/unit/router/route-matching.test.js +169 -0
  614. package/tests/unit/router/router-guards.test.js +189 -0
  615. package/tests/unit/utils/cache.test.js +120 -0
  616. package/tests/unit/utils/filters.test.js +394 -0
  617. package/types/args-types.d.ts +58 -0
  618. package/types/control-flow.d.ts +62 -0
  619. package/types/elements.d.ts +231 -0
  620. package/types/filters/dates.d.ts +43 -0
  621. package/types/filters/index.d.ts +4 -0
  622. package/types/filters/standard.d.ts +70 -0
  623. package/types/filters/strings.d.ts +21 -0
  624. package/types/filters/types.d.ts +20 -0
  625. package/types/forms.d.ts +84 -0
  626. package/types/globals.d.ts +543 -0
  627. package/types/images.d.ts +23 -0
  628. package/types/localStorage.ts +102 -0
  629. package/types/memoize.d.ts +26 -0
  630. package/types/native-fetch.d.ts +72 -0
  631. package/types/nd-element.d.ts +407 -0
  632. package/types/observable-resource.d.ts +3 -0
  633. package/types/observable.d.ts +227 -0
  634. package/types/plugins-manager.d.ts +65 -0
  635. package/types/polyfill.d.ts +18 -0
  636. package/types/property-accumulator.d.ts +33 -0
  637. package/types/router.d.ts +85 -0
  638. package/types/service.d.ts +23 -0
  639. package/types/singleton.d.ts +19 -0
  640. package/types/store.d.ts +63 -0
  641. package/types/template-cloner.ts +43 -0
  642. package/types/validator.ts +66 -0
  643. package/ui.js +1 -0
  644. package/utils.d.ts +4 -0
  645. package/utils.js +12 -0
  646. package/vitest.config.js +15 -0
  647. package/src/data/Observable.js +0 -55
  648. package/src/data/ObservableChecker.js +0 -39
  649. package/src/data/ObservableItem.js +0 -195
  650. package/src/data/Store.js +0 -74
  651. package/src/data/observable-helpers/array.js +0 -74
  652. package/src/data/observable-helpers/batch.js +0 -22
  653. package/src/data/observable-helpers/computed.js +0 -28
  654. package/src/data/observable-helpers/object.js +0 -111
  655. package/src/elements/anchor.js +0 -129
  656. package/src/elements/content-formatter.js +0 -32
  657. package/src/elements/control/for-each-array.js +0 -280
  658. package/src/elements/control/show-if.js +0 -79
  659. package/src/elements/control/switch.js +0 -98
  660. package/src/elements/description-list.js +0 -5
  661. package/src/elements/form.js +0 -71
  662. package/src/elements/html5-semantics.js +0 -12
  663. package/src/elements/img.js +0 -45
  664. package/src/elements/interactive.js +0 -7
  665. package/src/elements/list.js +0 -10
  666. package/src/elements/medias.js +0 -8
  667. package/src/elements/meta-data.js +0 -9
  668. package/src/elements/table.js +0 -14
  669. package/src/utils/args-types.js +0 -100
  670. package/src/utils/debug-manager.js +0 -31
  671. package/src/utils/helpers.js +0 -60
  672. package/src/utils/plugins-manager.js +0 -12
  673. package/src/utils/prototypes.js +0 -45
  674. package/src/wrappers/AttributesWrapper.js +0 -144
  675. package/src/wrappers/DocumentObserver.js +0 -80
  676. package/src/wrappers/ElementCreator.js +0 -114
  677. package/src/wrappers/HtmlElementEventsWrapper.js +0 -64
  678. package/src/wrappers/HtmlElementWrapper.js +0 -50
  679. package/src/wrappers/NdPrototype.js +0 -106
  680. package/src/wrappers/constants.js +0 -2
package/.npmrc.example ADDED
@@ -0,0 +1 @@
1
+ //registry.npmjs.org/:_authToken=${NPM_TOKEN}
@@ -0,0 +1,166 @@
1
+ import { defineConfig } from 'vitepress'
2
+
3
+ export default defineConfig({
4
+ title: 'NativeDocument',
5
+ description: 'A reactive JavaScript framework that preserves native DOM simplicity without sacrificing modern features',
6
+
7
+ themeConfig: {
8
+ logo: '/logo.svg',
9
+
10
+ nav: [
11
+ { text: 'Guide', link: '/getting-started' },
12
+ { text: 'Components', link: '/components/' },
13
+ { text: 'Utilities', link: '/utils/cache' },
14
+ {
15
+ text: 'v1.0.161',
16
+ items: [
17
+ { text: 'Changelog', link: 'https://github.com/afrocodeur/native-document/releases' },
18
+ { text: 'GitHub', link: 'https://github.com/afrocodeur/native-document' }
19
+ ]
20
+ }
21
+ ],
22
+
23
+ sidebar: {
24
+ '/components/': [
25
+ {
26
+ text: 'Components',
27
+ items: [
28
+ { text: 'Overview', link: '/components/' },
29
+ { text: 'Getting Started', link: '/components/getting-started' },
30
+ { text: 'Traits', link: '/components/traits' },
31
+ ]
32
+ },
33
+ {
34
+ text: 'Layout',
35
+ items: [
36
+ { text: 'Layout', link: '/components/layout' },
37
+ { text: 'Splitter', link: '/components/splitter' },
38
+ ]
39
+ },
40
+ {
41
+ text: 'Display',
42
+ items: [
43
+ { text: 'Alert & Feedback', link: '/components/alert' },
44
+ { text: 'Avatar', link: '/components/avatar' },
45
+ { text: 'Badge', link: '/components/alert' },
46
+ { text: 'Breadcrumb', link: '/components/breadcrumb' },
47
+ { text: 'Tooltip', link: '/components/tooltip' },
48
+ { text: 'Toast', link: '/components/toast' },
49
+ ]
50
+ },
51
+ {
52
+ text: 'Navigation',
53
+ items: [
54
+ { text: 'Menu', link: '/components/menu' },
55
+ { text: 'Tabs', link: '/components/tabs' },
56
+ { text: 'Dropdown', link: '/components/dropdown' },
57
+ { text: 'Context Menu', link: '/components/context-menu' },
58
+ { text: 'Breadcrumb', link: '/components/breadcrumb' },
59
+ ]
60
+ },
61
+ {
62
+ text: 'Overlay',
63
+ items: [
64
+ { text: 'Modal & Popover', link: '/components/modal' },
65
+ ]
66
+ },
67
+ {
68
+ text: 'Data',
69
+ items: [
70
+ { text: 'Data Table', link: '/components/data-table' },
71
+ { text: 'Accordion', link: '/components/accordion' },
72
+ ]
73
+ },
74
+ {
75
+ text: 'Forms',
76
+ items: [
77
+ { text: 'Button', link: '/components/button' },
78
+ { text: 'Form Fields', link: '/components/form-fields' },
79
+ { text: 'Checkbox & Radio', link: '/components/checkbox-radio' },
80
+ { text: 'Select', link: '/components/select' },
81
+ { text: 'File Upload', link: '/components/file' },
82
+ { text: 'Slider & Stepper', link: '/components/slider-stepper' },
83
+ { text: 'Switch', link: '/components/switch' },
84
+ ]
85
+ }
86
+ ],
87
+
88
+ '/utils/': [
89
+ {
90
+ text: 'Utilities',
91
+ items: [
92
+ { text: 'Cache', link: '/utils/cache' },
93
+ { text: 'NativeFetch', link: '/utils/native-fetch' },
94
+ { text: 'Filters', link: '/utils/filters' },
95
+ ]
96
+ }
97
+ ],
98
+
99
+ '/': [
100
+ {
101
+ text: 'Introduction',
102
+ items: [
103
+ { text: 'Getting Started', link: '/getting-started' },
104
+ { text: 'CLI', link: '/cli' },
105
+ { text: 'Core Concepts', link: '/core-concepts' },
106
+ ]
107
+ },
108
+ {
109
+ text: 'Essentials',
110
+ items: [
111
+ { text: 'Observables', link: '/observables' },
112
+ { text: 'Observable Resource', link: '/observable-resource' },
113
+ { text: 'Elements', link: '/elements' },
114
+ { text: 'Conditional Rendering', link: '/conditional-rendering' },
115
+ { text: 'List Rendering', link: '/list-rendering' },
116
+ { text: 'Anchor', link: '/anchor' },
117
+ ]
118
+ },
119
+ {
120
+ text: 'Application',
121
+ items: [
122
+ { text: 'Routing', link: '/routing' },
123
+ { text: 'State Management', link: '/state-management' },
124
+ { text: 'i18n & Formatting', link: '/i18n' },
125
+ { text: 'SVG Elements', link: '/svg-elements' },
126
+ ]
127
+ },
128
+ {
129
+ text: 'NDElement',
130
+ items: [
131
+ { text: 'NDElement', link: '/native-document-element' },
132
+ { text: 'Extending NDElement', link: '/extending-native-document-element' },
133
+ { text: 'Lifecycle Events', link: '/lifecycle-events' },
134
+ { text: 'Advanced Components', link: '/advanced-components' },
135
+ ]
136
+ },
137
+ {
138
+ text: 'Advanced',
139
+ items: [
140
+ { text: 'Args Validation', link: '/validation' },
141
+ { text: 'Memory Management', link: '/memory-management' },
142
+ ]
143
+ },
144
+ {
145
+ text: 'Contributing',
146
+ items: [
147
+ { text: 'Contributing', link: '/contributing' },
148
+ ]
149
+ }
150
+ ]
151
+ },
152
+
153
+ socialLinks: [
154
+ { icon: 'github', link: 'https://github.com/afrocodeur/native-document' }
155
+ ],
156
+
157
+ footer: {
158
+ message: 'Released under the MIT License.',
159
+ copyright: 'Copyright © 2024 AfroCodeur'
160
+ },
161
+
162
+ search: {
163
+ provider: 'local'
164
+ }
165
+ }
166
+ })
package/CHANGELOG.md ADDED
@@ -0,0 +1,223 @@
1
+ # Changelog
2
+
3
+ All notable changes to NativeDocument will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ---
9
+
10
+ ## [Unreleased]
11
+
12
+ ---
13
+
14
+ ## [1.0.170] - 2026-06-10
15
+
16
+ ### Added
17
+
18
+ - Vitest test suite — `vitest.config.js`, happy-dom environment, scripts `test`, `test:watch`, `test:ui`, `test:coverage`
19
+ - 372 tests passing across 13 files — 0 failures, 0 todo
20
+
21
+ #### Unit tests — core
22
+ - `observable-item` — 48 cases: set, val, subscribe, on/off, once, toggle, reset, transform, equals, clone, cleanup, intercept, assocTrigger
23
+ - `observable-array` — 48 cases: push, remove, clear, merge, swap, insertAfter, isIncludes, where, sync, clone, reset, deepSubscribe
24
+ - `observable-object` — 30 cases: constructor, val, get, set, subscribe, keys, observables, reset, clone
25
+ - `observable-resource` — 29 cases: states, fetch, refetch, mutate, abort, race condition, deps, onSuccess, onError, into, apply, destroy
26
+ - `store` — 43 cases: create, createResettable, createComposed, use, follow, reset, delete, group, protected, createPersistent
27
+
28
+ #### Unit tests — router
29
+ - `route-matching` — 26 cases: exact path, params, typed params, custom validators, url(), metadata
30
+ - `router-guards` — 14 cases: middleware execution, group middlewares, subscribe, resolve, currentState
31
+
32
+ #### Unit tests — utils
33
+ - `cache` — 12 cases: singleton, once, memoize
34
+ - `filters` — 60 cases: equals, comparison, inArray, isEmpty, match, and/or/not, custom, string filters, date/time filters
35
+
36
+ #### Integration tests — UI
37
+ - `attributes-wrapper` — 22 cases: string, class map, style, Observable, boolean, aria attributes
38
+ - `show-if` — 16 cases: static boolean, observable, factory child, HideIf, HideIfNot
39
+ - `for-each-array` — 13 cases: static array, push, removeItem, clear, set, swap, index observable, order preservation
40
+ - `lifecycle` — 11 cases: mounted, unmounted, destroy, destroyOnUnmount
41
+
42
+ ### Fixed
43
+
44
+ - `NDElement.prototype.destroy()` — guard against double call when `$element` is already null
45
+ - `NDElement.prototype.destroy()` — disconnect lifecycle observer to prevent callbacks from firing after destroy
46
+
47
+ ---
48
+
49
+ ## [1.0.169] - 2026-06-06
50
+
51
+ ### Added
52
+
53
+ - `Icon` - adapter-based icon system with chainable API (`Icon.search.fill().large()`),
54
+ `Icon.use(renderer, defaultConfigs)`, and 120+ semantic icon names accessible
55
+ via `Icon.{name}` getters
56
+ - `TablerIconRender` - Tabler Icons adapter (outline + fill)
57
+ - `PhosphorIconRender` - Phosphor Icons adapter (thin/light/regular/bold/fill/duotone)
58
+ - `MaterialIconRender` - Google Material Icons adapter (fill/outline/round/sharp/twoTone)
59
+
60
+ ---
61
+
62
+ ## [1.0.167] - 2026-06-06
63
+
64
+ ### Added
65
+
66
+ #### Components
67
+ - `Card` - content container with image, header, footer, actions, variants (elevated, outlined, flat), clickable, hoverable, loading state, horizontal layout, custom renderers (`renderImage`, `renderHeader`, `renderContent`, `renderFooter`, `renderActions`), and fully custom `layout(slots, instance)` function
68
+ - `List` - flexible list with `HasListItem` trait, `from(source, builder)` reactive data binding, `withDivider`, `inset`, `selectable`, `multiSelect`, `selectByClick`, `selectByCheckbox`, `selectInto`
69
+ - `ListItem` - list item with icon, label, subtitle, trailing, disabled, selected, visibility, `isSelectedIcon`, `swipeLeading`, `swipeTrailing` for mobile swipe actions with auto-close on outside click and `stopPropagation` on swipe action clicks
70
+ - `ListGroup` - collapsible group of items with icon, `collapsable(mode, openedIcon, closedIcon)`, `collapsed()`, visibility, and full `HasListItem` API (`.item()`, `.group()`, `.divider()`, `.add()`, `.from()`)
71
+ - `ListDivider` - visual separator between list items
72
+ - `HasListItem` - trait adding `.item()`, `.group()`, `.divider()`, `.add()`, `.from()` to `List` and `ListGroup`
73
+ - `SpacerRender` - render for `Spacer` component (`flex: 1` layout utility)
74
+
75
+ #### UI (renders)
76
+ - `CardRender` + `card.css` - Card renderer with 5 build slots and `layout(slots)` support
77
+ - `ListRender` + `list.css` - `ForEachArray($desc.items)` — items self-render
78
+ - `ListItemRender` + `list-item.css` - reactive checkbox, select indicator, swipe gesture with pointer events, auto-close and stopPropagation
79
+ - `ListGroupRender` + `list-group.css` - collapsible group with reactive chevron via `Switch`
80
+ - `ListDividerRender` + `list-divider.css`
81
+ - `SpacerRender`
82
+
83
+ ### Fixed
84
+ - `Card.use()` was a no-op (empty body) - now correctly assigns `Card.defaultTemplate`
85
+
86
+ ## [1.0.166] - 2026-06-03
87
+
88
+ ### Added
89
+
90
+ #### Core
91
+ - `Observable.resource()` - async data fetching with built-in state machine (`unresolved`, `pending`, `ready`, `refreshing`, `errored`), `AbortController` support, reactive dependencies, debounce, and optimistic `mutate()`
92
+ - `Observable.batch()` - batch multiple state changes into a single computed update, with async support
93
+ - `Observable.useValueProperty(name?)` - define a custom property alias for `$value`
94
+ - `Observable.autoCleanup(enable, options?)` - automatic periodic cleanup of orphaned observables via `WeakRef` and `FinalizationRegistry`
95
+ - `Observable.getById(id)` - retrieve a registered observable by its internal memory ID
96
+ - `observable.intercept(callback)` - transform or abort values before they are set
97
+ - `observable.interceptMutations(callback)` - intercept array and object mutations separately
98
+ - `observable.onCleanup(callback)` - register a callback that runs when the observable is cleaned up
99
+ - `observable.once(predicate, callback)` - single-fire listener triggered by value or condition
100
+ - `observable.deepSubscribe(callback)` - react to changes at any nesting depth
101
+ - `observable.persist(key, options?)` - two-way synchronization with `localStorage`
102
+ - `observable.clone()` - deep clone of the observable's current value
103
+ - `observable.resolve()` - recursively extract plain values from observables and proxies
104
+ - `observable.trigger()` - force notification without changing the value
105
+ - `observable.reset()` - reset to the initial value (requires `{ reset: true }` option)
106
+ - `Observable.computed()` - derived observable that recalculates when dependencies change
107
+ - `Observable.object()` / `Observable.json()` / `Observable.init()` - per-property reactive proxy
108
+ - `Observable.array()` - reactive array with mutating methods (`push`, `pop`, `splice`, `swap`, `merge`, `at`, `count`, `removeItem`, `insertAfter`)
109
+ - `ObservableArray.where()` / `whereSome()` / `whereEvery()` - live reactive filtering
110
+ - `observable.format(type, options?)` - locale-aware value formatting (`currency`, `number`, `percent`, `date`, `time`, `datetime`, `relative`, `plural`, custom)
111
+ - `Observable.setLocale(locale)` - set the reactive locale for all `.format()` calls
112
+ - `Formatters` - extensible formatter registry for custom format types
113
+ - Convenience checkers: `isTruthy()`, `isFalsy()`, `isEmpty()`, `isNotEmpty()`, `isEqualTo()`, `isGreaterThan()`, `isBetween()`, `isStartingWith()`, `isIncludedIn()`, `isHaving()`, and more
114
+ - Convenience transformers: `toUpperCase()`, `toLower()`, `toTrimmed()`, `toLength()`, `toClamped()`, `toPercent()`, `toLiteral()`, `toProperty()`
115
+
116
+ #### NDElement
117
+ - `.nd` proxy on every HTML element - fluent API for events, lifecycle, DOM utilities
118
+ - Auto-generated event methods for all standard DOM events in 4 variants: `onClick`, `onPreventClick`, `onStopClick`, `onPreventStopClick`
119
+ - `.on(name, callback, options)` - generic event with `AbortController` auto-cleanup on unmount
120
+ - `.off(name, callback)` - remove a specific listener
121
+ - `.once(name, callback)` - one-time listener
122
+ - `.emit(name, detail?)` - dispatch a custom event
123
+ - `.attr(name, value)` / `.attrs(attrs)` - reactive attribute binding
124
+ - `.class(map)` / `.style(map)` - reactive class and style binding
125
+ - `.ref(target, name)` - store the native `HTMLElement` reference
126
+ - `.refSelf(target, name)` - store the `NDElement` instance reference
127
+ - `.with(methods)` - add methods to a single element instance (component encapsulation pattern)
128
+ - `NDElement.extend(methods)` - add methods to all NDElement instances globally
129
+ - `.ghostDom(element)` - inject a companion element alongside the returned element
130
+ - `.attach(methodName, hydrator)` - template binding for `useCache` / `useSingleton`
131
+ - `.mounted(callback)` / `.unmounted(callback)` / `.lifecycle({ mounted, unmounted })` - DOM lifecycle hooks
132
+ - `.beforeUnmount(id, asyncCallback)` - async callback before element removal (exit animations)
133
+ - `.destroyOnUnmount()` - automatically call `destroy()` on unmount
134
+ - `.destroy()` - abort internal `AbortController`, clear lifecycle observers
135
+ - `.transition(name)` / `.transitionIn(name)` / `.transitionOut(name)` / `.animate(name)` - CSS transition helpers
136
+ - `.openShadow(css?)` / `.closedShadow(css?)` - Shadow DOM encapsulation
137
+ - `.unmountChildren()` - unmount all child elements
138
+
139
+ #### Elements
140
+ - Wrapper functions for all standard HTML elements (`Div`, `Button`, `Input`, `Form`, `Table`, etc.)
141
+ - `Fragment` - one-time static content grouping via `DocumentFragment`
142
+ - `Anchor` / `NativeDocumentFragment` - dynamic DOM zone delimited by comment markers
143
+ - `ShowIf` / `HideIf` / `HideIfNot` - conditional rendering with optional caching
144
+ - `ShowWhen` - show when an observable matches a specific value
145
+ - `Switch` - binary content toggle
146
+ - `Match` - multi-state rendering with `.nd.add()` / `.nd.remove()` for dynamic states
147
+ - `When` - fluent builder for conditional rendering
148
+ - `ForEach` - keyed list rendering for arrays and objects, with index observable
149
+ - `ForEachArray` - high-performance array rendering with `TemplateCloner`
150
+ - `useCache($binder)` - template cloning with data binding (value, class, style, attr, attach)
151
+ - `useSingleton(view)` - singleton view with named updatable sections
152
+ - Full SVG element set (`SvgSvg`, `SvgCircle`, `SvgRect`, `SvgPath`, etc.) with reactive attributes
153
+ - `classPropertyAccumulator` / `cssPropertyAccumulator` - programmatic class and style builders
154
+
155
+ #### Router
156
+ - `Router.create({ name, mode }, callback)` - multi-mode router (history, hash, memory)
157
+ - Route parameters with validation via `RouteParamPatterns` (built-in: `id`, `uuid`, `slug`, `locale`, `token`, and more)
158
+ - Named routes, route groups with shared middleware and layout, catch-all `{*}`
159
+ - `Router.push()` / `Router.replace()` / `Router.redirectTo()` / `Router.back()` / `Router.forward()`
160
+ - `Link` component with named route resolution and active state
161
+ - Middleware system with `context` and `next()`
162
+ - Multiple named routers with `Router.get(name)` / `Router.routers`
163
+
164
+ #### Store
165
+ - `Store.create()` / `createResettable()` / `createPersistent()` / `createPersistentResettable()` / `createComposed()`
166
+ - `Store.group(name, fn)` - isolated namespace with full Store API
167
+ - `Store.use(name)` - two-way reactive follower
168
+ - `Store.follow(name)` - read-only reactive follower (throws on mutation)
169
+ - `Store.get(name)` - raw observable access
170
+ - `Store.has(name)` / `Store.delete(name)` / `Store.reset(name)`
171
+
172
+ #### Utilities
173
+ - `NativeFetch` - HTTP client with request/response interceptors, automatic JSON, query string, FormData support
174
+ - `Cache.once(fn)` / `Cache.singleton(fn)` / `Cache.memoize(fn)` - lazy init, eager singleton, key-based memoization
175
+ - Filter helpers: `equals`, `greaterThan`, `between`, `includes`, `startsWith`, `match`, `inArray`, `and`, `or`, `not`, `custom`, `dateEquals`, `dateBetween`, `timeBetween`, `dateTimeBetween`, and more
176
+ - `ArgTypes` + `.args()` + `withValidation()` - runtime argument validation (development only)
177
+ - `PluginsManager` - internal event bus for DevTools integration
178
+ - `MemoryManager` - `WeakRef`-based observable registry with `FinalizationRegistry` auto-cleanup
179
+ - `ShortcutManager` - global and context-scoped keyboard shortcuts with OS-aware display
180
+ - `I18nService` - locale management backed by `i18next`, with `tr()` translation helper and `npm run i18n:scan`
181
+
182
+ #### Components (50+)
183
+ - **Layout**: `HStack`, `VStack`, `Row`, `Col`, `AbsoluteStack`, `FixedStack`, `RelativeStack`, `Divider`, `Spacer`, `Splitter` + `SplitterPanel`
184
+ - **Navigation**: `BreadCrumb`, `Menu` + `MenuItem` + `MenuGroup` + `MenuLink` + `MenuDivider`, `Tabs`, `Pagination`, `Stepper` + `StepperStep`
185
+ - **Overlay**: `Modal`, `Popover`, `Dropdown` + `DropdownItem` + `DropdownGroup` + `DropdownTrigger`, `Tooltip`, `ContextMenu`
186
+ - **Feedback**: `Alert`, `Badge`, `Progress`, `Skeleton`, `Spinner`, `Toast`
187
+ - **Data**: `DataTable` + `Column` + `ColumnGroup`, `SimpleTable`, `Accordion` + `AccordionItem`, `List`
188
+ - **Interaction**: `Button`, `Switch`, `Slider`
189
+ - **Media**: `Avatar`, `AvatarGroup`, `Card`
190
+ - **Forms**: `FormControl`, `FieldCollection`, `StringField`, `EmailField`, `PasswordField`, `TelField`, `UrlField`, `HiddenField`, `NumberField`, `RangeField`, `TextAreaField`, `CheckboxField`, `CheckboxGroupField`, `RadioField`, `SelectField`, `AutocompleteField`, `DateField`, `TimeField`, `ColorField`, `SliderField`, `ImageField`, `FileField` (with `FileNativeMode`, `FileDropzoneMode`, `FileUploadButtonMode`, `FileWallMode`, `FileAvatarMode`)
191
+ - **Traits**: `HasEventEmitter`, `HasDraggable`, `HasResizable`, `HasItems`, `HasPosition`, `HasFullPosition`, `HasValidation`
192
+
193
+ #### CLI (`@native-document/cli`)
194
+ - `nd create <name>` - scaffold a complete project with Vite, routing, i18n, and store pre-configured
195
+ - `nd create <name> --feature` - feature-based architecture
196
+ - `nd create:page` / `create:component` / `create:service` / `create:feature` - generators
197
+ - `npm run i18n:scan` - scan source for missing translation keys
198
+
199
+ #### Build
200
+ - Rollup 4 multi-output: CDN IIFE (dev + minified), ESM for bundlers, DevTools bundle
201
+ - `process.env.NODE_ENV` replacement for tree-shaking all debug code in production
202
+ - TypeScript `.d.ts` definitions for all public APIs
203
+
204
+ ---
205
+
206
+ ## How to Read This File
207
+
208
+ Entries use the following categories:
209
+
210
+ - **Added** - new features
211
+ - **Changed** - changes to existing functionality
212
+ - **Deprecated** - features that will be removed in a future release
213
+ - **Removed** - features removed in this release
214
+ - **Fixed** - bug fixes
215
+ - **Security** - vulnerability fixes
216
+
217
+ ---
218
+
219
+ [Unreleased]: https://github.com/afrocodeur/native-document/compare/v1.0.170...HEAD
220
+ [1.0.170]: https://github.com/afrocodeur/native-document/compare/v1.0.169...v1.0.170
221
+ [1.0.169]: https://github.com/afrocodeur/native-document/compare/v1.0.167...v1.0.169
222
+ [1.0.167]: https://github.com/afrocodeur/native-document/compare/v1.0.166...v1.0.167
223
+ [1.0.166]: https://github.com/afrocodeur/native-document/releases/tag/v1.0.166
package/cdn.js ADDED
@@ -0,0 +1,19 @@
1
+ export { default as HtmlElementWrapper, createTextNode } from './src/core/wrappers/HtmlElementWrapper'
2
+ export { ElementCreator } from './src/core/wrappers/ElementCreator';
3
+ export { NDElement } from './src/core/wrappers/NDElement';
4
+ export { TemplateCloner, useCache } from './src/core/wrappers/template-cloner/TemplateCloner';
5
+ export { SingletonView, useSingleton } from './src/core/wrappers/SingletonView';
6
+ export { default as PluginsManager } from './src/core/utils/plugins-manager';
7
+ export { default as Validator } from './src/core/utils/validator';
8
+
9
+ export * from './src/core/utils/property-accumulator';
10
+ export * from './src/core/utils/args-types';
11
+ export * from './src/core/utils/memoize';
12
+ export * from './src/core/data/Observable';
13
+ export * from './src/core/data/Store';
14
+
15
+ import * as elements from './elements';
16
+ import * as router from './router';
17
+ import * as utils from './utils';
18
+
19
+ export { elements, router, utils };
@@ -0,0 +1,2 @@
1
+
2
+ export * from './src/components/index';
package/components.js ADDED
@@ -0,0 +1,32 @@
1
+ export * from './src/components/accordion/index';
2
+ export * from './src/components/alert/index';
3
+ export * from './src/components/avatar/index';
4
+ export * from './src/components/badge/index';
5
+ export * from './src/components/breadcrumb/index';
6
+ export * from './src/components/button/index';
7
+ export * from './src/components/card/index';
8
+ export * from './src/components/context-menu/index';
9
+ export * from './src/components/divider/index';
10
+ export * from './src/components/dropdown/index';
11
+ export * from './src/components/form/index';
12
+ export * from './src/components/list/index';
13
+ export * from './src/components/menu/index';
14
+ export * from './src/components/modal/index';
15
+ export * from './src/components/pagination/index';
16
+ export * from './src/components/popover/index';
17
+ export * from './src/components/progress/index';
18
+ export * from './src/components/skeleton/index';
19
+ export * from './src/components/slider/index';
20
+ export * from './src/components/spinner/index';
21
+ export * from './src/components/splitter/index';
22
+ export * from './src/components/stepper/index';
23
+ export * from './src/components/switch/index';
24
+ export * from './src/components/table/index';
25
+
26
+ export * from './src/components/tabs/index';
27
+ export * from './src/components/toast/index';
28
+ export * from './src/components/tooltip/index';
29
+ export * from './src/components/stacks/index';
30
+ export * from './src/components/spacer/index';
31
+
32
+ export * from './src/components/icon/index';
@@ -0,0 +1,113 @@
1
+ import {Anchor} from "../elements";
2
+ import Validator from "../src/core/utils/validator";
3
+ import DebugManager from "../src/core/utils/debug-manager";
4
+
5
+ const ComponentRegistry = (function() {
6
+ const registry = new Map();
7
+
8
+ const attachLocalExtensions = (instance, factoryInstance) => {
9
+ if(!factoryInstance.$localExtensions) {
10
+ return;
11
+ }
12
+ const extensions = Object.fromEntries(factoryInstance.$localExtensions);
13
+ for(const name in extensions) {
14
+ instance.anchor[name] = function() {
15
+ const result = extensions[name](...arguments);
16
+ if(result === null || result === undefined) {
17
+ return instance.anchor;
18
+ }
19
+ if(Validator.isFragment(result) || Validator.isElement(result) || Validator.isNDElement(result)) {
20
+ instance.anchor.setContent(result);
21
+ return instance.anchor;
22
+ }
23
+ return result;
24
+ };
25
+ }
26
+ instance.anchor.$localExtensions = factoryInstance.$localExtensions;
27
+ instance.extensions = Object.keys(extensions);
28
+ };
29
+
30
+ const wrapper = function(id, factory, metadata, registryItem) {
31
+ const factoryName = factory.name;
32
+
33
+ return function(...args) {
34
+ const firstParam = args[0];
35
+ if(firstParam?.__instance) {
36
+ const instance = firstParam.__instance;
37
+ const newFactoryInstance = factory(...instance.context.args, instance);
38
+
39
+ if(instance.extensions) {
40
+ instance.extensions.forEach((extensionName) => {
41
+ instance.anchor[extensionName] = undefined;
42
+ });
43
+ }
44
+ attachLocalExtensions(instance, newFactoryInstance);
45
+ instance.anchor.setContent(newFactoryInstance);
46
+ return;
47
+ }
48
+ const anchor = Anchor(factoryName);
49
+ const instance = {
50
+ anchor,
51
+ extensions: null,
52
+ context: {
53
+ args,
54
+ states: new Map()
55
+ }
56
+ };
57
+ const factoryInstance = factory(...args, instance);
58
+ anchor.setContent(factoryInstance);
59
+ registryItem.instances.add(instance);
60
+
61
+ attachLocalExtensions(instance, factoryInstance);
62
+ return anchor;
63
+ };
64
+ }
65
+
66
+ return {
67
+ /**
68
+ * @param {string} id
69
+ * @param {Function} factory
70
+ * @param {Object} metadata
71
+ */
72
+ register(id, factory, metadata = {}) {
73
+ if (!registry.has(id)) {
74
+ registry.set(id, {
75
+ factory,
76
+ instances: new Set(),
77
+ metadata,
78
+ states: {},
79
+ version: 0
80
+ });
81
+ }
82
+ return wrapper(id, factory, metadata, registry.get(id));
83
+ },
84
+ update(id, newFactory) {
85
+ const component = registry.get(id);
86
+ if(!component) {
87
+ DebugManager.warn(`[HMR] Component ${id} not found`);
88
+ return;
89
+ }
90
+ DebugManager.log(`[HMR] Updating ${component.instances.size} instance(s) of ${id}`);
91
+ const oldFactory = component.factory;
92
+ component.factory = newFactory;
93
+ component.version++;
94
+ const instances = Array.from(component.instances);
95
+ for (const instance of instances) {
96
+ try {
97
+ this.updateInstance(instance, newFactory);
98
+ } catch (error) {
99
+ console.error('[HMR] Update failed:', error);
100
+ // Rollback
101
+ component.factory = oldFactory;
102
+ component.version--;
103
+ throw error;
104
+ }
105
+ }
106
+ },
107
+ updateInstance(instance, newFactory) {
108
+ return newFactory({ __instance: instance });
109
+ },
110
+ };
111
+ }());
112
+
113
+ export default ComponentRegistry;
@@ -0,0 +1,8 @@
1
+ import NdViteDevtools from "./transformers/nd-vite-devtools.js";
2
+ import transformComponentForHrm from "./transformers/src/transformComponentForHrm.js";
3
+
4
+ export {
5
+ transformComponentForHrm,
6
+ NdViteDevtools,
7
+ };
8
+
@@ -0,0 +1,15 @@
1
+ import {Observable} from "../../src/core/data/Observable";
2
+
3
+ export const DevToolService = {
4
+ createdObservable: Observable(0),
5
+ }
6
+
7
+
8
+ export const DevToolsPlugin = {
9
+ $name: 'DevTools',
10
+ name: 'DevTools',
11
+ onCreateObservable(observable) {
12
+ DevToolService.createdObservable.set((last) => ++last);
13
+ // console.log('Création Capturé', observable.$value);
14
+ }
15
+ };
@@ -0,0 +1,55 @@
1
+ import transformComponentForHrm from "./src/transformComponentForHrm.js";
2
+ import {isFileMustBeModified} from "./src/utils.js";
3
+ import transformJsFile from "./src/transformJsFile.js";
4
+
5
+ export default function NdViteDevtools(options) {
6
+ const {
7
+ include = /\.nd\.js$/,
8
+ preserveState = true
9
+ } = options;
10
+
11
+ return {
12
+ name: 'nd-devtools',
13
+ apply: 'serve',
14
+ enforce: 'post',
15
+
16
+ handleHotUpdate({ file, server, modules }) {
17
+ if (!include.test(file)) {
18
+ if(isFileMustBeModified(file)) {
19
+ return modules.filter(Boolean);
20
+ }
21
+ return;
22
+ }
23
+
24
+ // Notify the browser about the change
25
+ server.ws.send({
26
+ type: 'nd-hmr-file',
27
+ event: 'nd:update',
28
+ data: { file, msg: 'The content has changed' }
29
+ });
30
+
31
+ // We will manage all manually
32
+ return modules.filter(Boolean);
33
+ },
34
+ transform(code, id) {
35
+ if (!include.test(id)) {
36
+ if(isFileMustBeModified(id)) {
37
+ return transformJsFile(id, code, { preserveState });
38
+ }
39
+ return null;
40
+ }
41
+ if (id.includes('node_modules')) return null;
42
+
43
+ try {
44
+ return transformComponentForHrm(id, code, { preserveState });
45
+ } catch (error) {
46
+ console.error(`[NativeDocument] Transform error in ${id}:`, error);
47
+ return null;
48
+ }
49
+ },
50
+
51
+ configResolved() {
52
+ console.log('[NativeDocument] HMR Plugin loaded ✓');
53
+ }
54
+ };
55
+ }