neo.mjs 10.0.0-beta.4 → 10.0.0-beta.6

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 (485) hide show
  1. package/.github/RELEASE_NOTES/v10.0.0-beta.4.md +2 -2
  2. package/.github/RELEASE_NOTES/v10.0.0-beta.5.md +70 -0
  3. package/.github/RELEASE_NOTES/v10.0.0-beta.6.md +48 -0
  4. package/.github/epic-functional-components.md +498 -0
  5. package/.github/ticket-asymmetric-vdom-updates.md +122 -0
  6. package/README.md +0 -3
  7. package/ServiceWorker.mjs +2 -2
  8. package/apps/colors/store/Colors.mjs +1 -0
  9. package/apps/colors/view/GridContainer.mjs +3 -0
  10. package/apps/colors/view/HeaderToolbar.mjs +2 -0
  11. package/apps/colors/view/Viewport.mjs +3 -0
  12. package/apps/covid/view/FooterContainer.mjs +3 -0
  13. package/apps/covid/view/GalleryContainer.mjs +2 -0
  14. package/apps/covid/view/GalleryContainerController.mjs +1 -0
  15. package/apps/covid/view/HeaderContainer.mjs +2 -0
  16. package/apps/covid/view/HelixContainer.mjs +2 -0
  17. package/apps/covid/view/HelixContainerController.mjs +1 -0
  18. package/apps/covid/view/MainContainer.mjs +3 -0
  19. package/apps/covid/view/TableContainer.mjs +3 -0
  20. package/apps/covid/view/TableContainerController.mjs +1 -0
  21. package/apps/covid/view/WorldMapContainer.mjs +2 -0
  22. package/apps/covid/view/country/Gallery.mjs +3 -0
  23. package/apps/covid/view/country/Helix.mjs +8 -0
  24. package/apps/covid/view/country/HistoricalDataTable.mjs +1 -0
  25. package/apps/covid/view/country/Table.mjs +2 -0
  26. package/apps/covid/view/mapboxGl/Component.mjs +1 -0
  27. package/apps/covid/view/mapboxGl/Container.mjs +2 -0
  28. package/apps/email/EPIC_PLAN.md +58 -0
  29. package/apps/email/neo-config.json +2 -2
  30. package/apps/email/store/Emails.mjs +11 -1
  31. package/apps/email/view/ComposeView.mjs +44 -0
  32. package/apps/email/view/MainView.mjs +89 -0
  33. package/apps/email/view/Viewport.mjs +4 -33
  34. package/apps/email/view/ViewportStateProvider.mjs +3 -3
  35. package/apps/form/store/SideNav.mjs +1 -0
  36. package/apps/form/view/FormContainer.mjs +1 -0
  37. package/apps/form/view/FormPageContainer.mjs +2 -0
  38. package/apps/form/view/SideNavList.mjs +1 -0
  39. package/apps/form/view/Viewport.mjs +3 -0
  40. package/apps/portal/childapps/preview/MainContainer.mjs +1 -0
  41. package/apps/portal/index.html +1 -1
  42. package/apps/portal/store/BlogPosts.mjs +2 -0
  43. package/apps/portal/store/Content.mjs +1 -0
  44. package/apps/portal/store/ContentSections.mjs +1 -0
  45. package/apps/portal/store/Examples.mjs +1 -0
  46. package/apps/portal/view/HeaderToolbar.mjs +1 -0
  47. package/apps/portal/view/Viewport.mjs +5 -0
  48. package/apps/portal/view/ViewportController.mjs +8 -2
  49. package/apps/portal/view/about/Container.mjs +2 -0
  50. package/apps/portal/view/about/MemberContainer.mjs +7 -0
  51. package/apps/portal/view/blog/Container.mjs +2 -0
  52. package/apps/portal/view/blog/List.mjs +2 -0
  53. package/apps/portal/view/examples/List.mjs +1 -0
  54. package/apps/portal/view/examples/TabContainer.mjs +4 -0
  55. package/apps/portal/view/home/ContentBox.mjs +3 -0
  56. package/apps/portal/view/home/FeatureSection.mjs +8 -0
  57. package/apps/portal/view/home/FooterContainer.mjs +4 -1
  58. package/apps/portal/view/home/MainContainer.mjs +2 -0
  59. package/apps/portal/view/home/parts/AfterMath.mjs +2 -0
  60. package/apps/portal/view/home/parts/BaseContainer.mjs +1 -0
  61. package/apps/portal/view/home/parts/Colors.mjs +4 -0
  62. package/apps/portal/view/home/parts/Features.mjs +2 -0
  63. package/apps/portal/view/home/parts/Helix.mjs +5 -0
  64. package/apps/portal/view/home/parts/How.mjs +4 -0
  65. package/apps/portal/view/home/parts/MainNeo.mjs +1 -0
  66. package/apps/portal/view/home/parts/References.mjs +2 -0
  67. package/apps/portal/view/learn/ContentComponent.mjs +11 -5
  68. package/apps/portal/view/learn/ContentTreeList.mjs +2 -0
  69. package/apps/portal/view/learn/CubeLayoutButton.mjs +1 -0
  70. package/apps/portal/view/learn/MainContainer.mjs +4 -0
  71. package/apps/portal/view/learn/PageContainer.mjs +2 -0
  72. package/apps/portal/view/learn/PageSectionsContainer.mjs +3 -0
  73. package/apps/portal/view/learn/PageSectionsList.mjs +1 -0
  74. package/apps/portal/view/services/Component.mjs +1 -0
  75. package/apps/realworld/api/Base.mjs +1 -0
  76. package/apps/realworld/view/HeaderComponent.mjs +4 -0
  77. package/apps/realworld/view/HomeComponent.mjs +7 -0
  78. package/apps/realworld/view/MainContainer.mjs +2 -0
  79. package/apps/realworld/view/MainContainerController.mjs +2 -0
  80. package/apps/realworld/view/article/CommentComponent.mjs +3 -0
  81. package/apps/realworld/view/article/Component.mjs +17 -10
  82. package/apps/realworld/view/article/CreateCommentComponent.mjs +2 -0
  83. package/apps/realworld/view/article/CreateComponent.mjs +5 -0
  84. package/apps/realworld/view/article/PreviewComponent.mjs +9 -0
  85. package/apps/realworld/view/article/TagListComponent.mjs +2 -0
  86. package/apps/realworld/view/user/ProfileComponent.mjs +7 -0
  87. package/apps/realworld/view/user/SettingsComponent.mjs +5 -0
  88. package/apps/realworld/view/user/SignUpComponent.mjs +3 -0
  89. package/apps/realworld2/api/Base.mjs +1 -0
  90. package/apps/realworld2/view/FooterComponent.mjs +1 -0
  91. package/apps/realworld2/view/HeaderToolbar.mjs +3 -0
  92. package/apps/realworld2/view/HomeContainer.mjs +1 -0
  93. package/apps/realworld2/view/MainContainer.mjs +2 -0
  94. package/apps/realworld2/view/MainContainerController.mjs +1 -0
  95. package/apps/realworld2/view/article/Helix.mjs +1 -0
  96. package/apps/realworld2/view/article/PreviewComponent.mjs +9 -0
  97. package/apps/realworld2/view/article/PreviewList.mjs +1 -0
  98. package/apps/realworld2/view/article/TagListComponent.mjs +2 -0
  99. package/apps/route/view/CenterContainer.mjs +1 -0
  100. package/apps/route/view/MainView.mjs +1 -0
  101. package/apps/sharedcovid/childapps/sharedcovidchart/MainContainer.mjs +1 -0
  102. package/apps/sharedcovid/childapps/sharedcovidgallery/MainContainer.mjs +1 -0
  103. package/apps/sharedcovid/childapps/sharedcovidhelix/MainContainer.mjs +1 -0
  104. package/apps/sharedcovid/childapps/sharedcovidmap/MainContainer.mjs +1 -0
  105. package/apps/sharedcovid/view/FooterContainer.mjs +3 -0
  106. package/apps/sharedcovid/view/GalleryContainer.mjs +2 -0
  107. package/apps/sharedcovid/view/GalleryContainerController.mjs +1 -0
  108. package/apps/sharedcovid/view/HeaderContainer.mjs +2 -0
  109. package/apps/sharedcovid/view/HelixContainer.mjs +2 -0
  110. package/apps/sharedcovid/view/HelixContainerController.mjs +1 -0
  111. package/apps/sharedcovid/view/MainContainer.mjs +3 -0
  112. package/apps/sharedcovid/view/TableContainer.mjs +3 -0
  113. package/apps/sharedcovid/view/TableContainerController.mjs +1 -0
  114. package/apps/sharedcovid/view/WorldMapContainer.mjs +2 -0
  115. package/apps/sharedcovid/view/country/Gallery.mjs +3 -0
  116. package/apps/sharedcovid/view/country/Helix.mjs +8 -0
  117. package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -0
  118. package/apps/sharedcovid/view/country/Table.mjs +2 -0
  119. package/apps/sharedcovid/view/mapboxGl/Component.mjs +1 -0
  120. package/apps/sharedcovid/view/mapboxGl/Container.mjs +2 -0
  121. package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +2 -0
  122. package/apps/shareddialog/view/DemoDialog.mjs +2 -0
  123. package/apps/shareddialog/view/MainContainer.mjs +2 -0
  124. package/apps/shareddialog/view/MainContainerController.mjs +1 -0
  125. package/buildScripts/addReactiveTags.mjs +191 -0
  126. package/buildScripts/checkReactiveTags.mjs +160 -0
  127. package/docs/app/store/Api.mjs +1 -0
  128. package/docs/app/store/Examples.mjs +1 -0
  129. package/docs/app/view/ApiTreeList.mjs +1 -0
  130. package/docs/app/view/ContentTabContainer.mjs +2 -0
  131. package/docs/app/view/ExamplesTreeList.mjs +2 -0
  132. package/docs/app/view/HeaderContainer.mjs +3 -0
  133. package/docs/app/view/MainContainer.mjs +5 -0
  134. package/docs/app/view/classdetails/HeaderComponent.mjs +1 -0
  135. package/docs/app/view/classdetails/MainContainer.mjs +3 -0
  136. package/docs/app/view/classdetails/MembersList.mjs +5 -0
  137. package/docs/app/view/classdetails/SourceViewComponent.mjs +2 -0
  138. package/examples/ConfigurationViewport.mjs +14 -8
  139. package/examples/button/effect/MainContainer.mjs +207 -0
  140. package/examples/button/effect/app.mjs +6 -0
  141. package/examples/button/effect/index.html +11 -0
  142. package/examples/button/effect/neo-config.json +6 -0
  143. package/examples/calendar/weekview/MainContainer.mjs +4 -0
  144. package/examples/component/coronaGallery/CountryGallery.mjs +2 -0
  145. package/examples/component/coronaGallery/CountryStore.mjs +1 -0
  146. package/examples/component/coronaGallery/Viewport.mjs +3 -0
  147. package/examples/component/coronaGallery/ViewportController.mjs +1 -0
  148. package/examples/component/coronaHelix/CountryHelix.mjs +7 -0
  149. package/examples/component/coronaHelix/MainContainer.mjs +1 -0
  150. package/examples/component/gallery/ImageStore.mjs +1 -0
  151. package/examples/component/helix/ImageStore.mjs +1 -0
  152. package/examples/component/helix/Viewport.mjs +3 -0
  153. package/examples/component/helix/ViewportController.mjs +1 -0
  154. package/examples/component/multiWindowCoronaGallery/childapp/Viewport.mjs +1 -0
  155. package/examples/component/multiWindowHelix/childapp/Viewport.mjs +1 -0
  156. package/examples/component/wrapper/googleMaps/MapComponent.mjs +2 -0
  157. package/examples/core/config/MainContainer.mjs +2 -0
  158. package/examples/dialog/DemoDialog.mjs +2 -0
  159. package/examples/dialog/MainContainer.mjs +1 -0
  160. package/examples/form/field/color/MainStore.mjs +1 -0
  161. package/examples/functional/defineComponent/Component.mjs +18 -0
  162. package/examples/functional/defineComponent/MainContainer.mjs +41 -0
  163. package/examples/functional/defineComponent/app.mjs +6 -0
  164. package/examples/functional/defineComponent/index.html +11 -0
  165. package/examples/functional/defineComponent/neo-config.json +6 -0
  166. package/examples/functional/hostComponent/Component.mjs +32 -0
  167. package/examples/functional/hostComponent/MainContainer.mjs +48 -0
  168. package/examples/functional/hostComponent/app.mjs +6 -0
  169. package/examples/functional/hostComponent/index.html +11 -0
  170. package/examples/functional/hostComponent/neo-config.json +6 -0
  171. package/examples/grid/animatedRowSorting/Viewport.mjs +1 -1
  172. package/examples/grid/bigData/ControlsContainer.mjs +3 -0
  173. package/examples/grid/bigData/GridContainer.mjs +4 -2
  174. package/examples/grid/bigData/MainContainer.mjs +2 -0
  175. package/examples/grid/bigData/MainModel.mjs +1 -0
  176. package/examples/grid/bigData/MainStore.mjs +3 -0
  177. package/examples/grid/cellEditing/MainContainer.mjs +1 -1
  178. package/examples/grid/container/MainContainer.mjs +1 -1
  179. package/examples/grid/covid/GridContainer.mjs +3 -0
  180. package/examples/grid/covid/MainContainer.mjs +2 -0
  181. package/examples/grid/covid/Store.mjs +1 -0
  182. package/examples/grid/nestedRecordFields/EditUserDialog.mjs +3 -0
  183. package/examples/grid/nestedRecordFields/Viewport.mjs +3 -1
  184. package/examples/list/animate/List.mjs +4 -0
  185. package/examples/list/animate/MainContainer.mjs +2 -0
  186. package/examples/list/circle/MainStore.mjs +1 -0
  187. package/examples/list/color/MainStore.mjs +1 -0
  188. package/examples/preloadingAssets/view/MainContainer.mjs +2 -0
  189. package/examples/stateProvider/advanced/MainContainer.mjs +1 -0
  190. package/examples/stateProvider/dialog/EditUserDialog.mjs +2 -0
  191. package/examples/stateProvider/dialog/MainContainer.mjs +1 -0
  192. package/examples/stateProvider/extendedClass/MainContainer.mjs +2 -0
  193. package/examples/stateProvider/inline/MainContainer.mjs +1 -0
  194. package/examples/stateProvider/inlineNoStateProvider/MainContainer.mjs +1 -0
  195. package/examples/stateProvider/inlineNoStateProvider/MainContainerController.mjs +2 -0
  196. package/examples/stateProvider/multiWindow/EditUserDialog.mjs +3 -0
  197. package/examples/stateProvider/multiWindow/MainContainer.mjs +1 -0
  198. package/examples/stateProvider/multiWindow/Viewport.mjs +1 -0
  199. package/examples/stateProvider/nestedData/MainContainer.mjs +1 -0
  200. package/examples/stateProvider/table/MainContainer.mjs +1 -0
  201. package/examples/table/covid/MainContainer.mjs +2 -0
  202. package/examples/table/covid/Store.mjs +1 -0
  203. package/examples/table/covid/TableContainer.mjs +3 -0
  204. package/examples/table/nestedRecordFields/EditUserDialog.mjs +3 -0
  205. package/examples/table/nestedRecordFields/Viewport.mjs +1 -0
  206. package/examples/todoList/version1/MainComponent.mjs +1 -1
  207. package/examples/toolbar/breadcrumb/view/MainContainer.mjs +2 -0
  208. package/examples/toolbar/paging/store/Users.mjs +1 -0
  209. package/examples/toolbar/paging/view/AddUserDialog.mjs +3 -0
  210. package/examples/toolbar/paging/view/MainContainer.mjs +3 -0
  211. package/examples/treeAccordion/MainContainer.mjs +2 -2
  212. package/examples/worker/task/MainContainer.mjs +1 -0
  213. package/learn/Glossary.md +1 -0
  214. package/learn/UsingTheseTopics.md +1 -0
  215. package/learn/benefits/ConfigSystem.md +2 -0
  216. package/learn/benefits/Effort.md +1 -0
  217. package/learn/benefits/Features.md +1 -0
  218. package/learn/benefits/FormsEngine.md +1 -0
  219. package/learn/benefits/FourEnvironments.md +2 -0
  220. package/learn/benefits/Introduction.md +2 -0
  221. package/learn/benefits/MultiWindow.md +3 -1
  222. package/learn/benefits/OffTheMainThread.md +2 -0
  223. package/learn/benefits/Quick.md +2 -0
  224. package/learn/benefits/RPCLayer.md +2 -0
  225. package/learn/benefits/Speed.md +2 -0
  226. package/learn/comparisons/NeoVsAngular.md +90 -0
  227. package/learn/comparisons/NeoVsExtJs.md +178 -0
  228. package/learn/comparisons/NeoVsNextJs.md +124 -0
  229. package/learn/comparisons/NeoVsReact.md +95 -0
  230. package/learn/comparisons/NeoVsSolid.md +78 -0
  231. package/learn/comparisons/NeoVsVue.md +92 -0
  232. package/learn/comparisons/Overview.md +46 -0
  233. package/learn/gettingstarted/ComponentModels.md +2 -0
  234. package/learn/gettingstarted/Config.md +2 -0
  235. package/learn/gettingstarted/DescribingTheUI.md +2 -0
  236. package/learn/gettingstarted/Events.md +2 -0
  237. package/learn/gettingstarted/Extending.md +2 -0
  238. package/learn/gettingstarted/References.md +2 -0
  239. package/learn/gettingstarted/Setup.md +3 -2
  240. package/learn/gettingstarted/Workspaces.md +2 -0
  241. package/learn/guides/datahandling/Collections.md +1 -0
  242. package/learn/guides/datahandling/Records.md +1 -0
  243. package/learn/guides/datahandling/StateProviders.md +131 -16
  244. package/learn/guides/datahandling/Tables.md +1 -1
  245. package/learn/guides/fundamentals/ConfigSystemDeepDive.md +1 -0
  246. package/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom.md +2 -0
  247. package/learn/guides/fundamentals/DeclarativeVDOMWithEffects.md +168 -0
  248. package/learn/guides/fundamentals/ExtendingNeoClasses.md +1 -0
  249. package/learn/guides/fundamentals/InstanceLifecycle.md +3 -1
  250. package/learn/guides/fundamentals/MainThreadAddons.md +2 -0
  251. package/learn/guides/specificfeatures/Mixins.md +3 -1
  252. package/learn/guides/specificfeatures/MultiWindow.md +3 -1
  253. package/learn/guides/specificfeatures/PortalApp.md +2 -0
  254. package/learn/guides/uibuildingblocks/ComponentsAndContainers.md +2 -0
  255. package/learn/guides/uibuildingblocks/CustomComponents.md +2 -0
  256. package/learn/guides/uibuildingblocks/Layouts.md +2 -0
  257. package/learn/guides/uibuildingblocks/WorkingWithVDom.md +2 -0
  258. package/learn/guides/userinteraction/Forms.md +2 -0
  259. package/learn/guides/userinteraction/events/CustomEvents.md +2 -1
  260. package/learn/guides/userinteraction/events/DomEvents.md +2 -0
  261. package/learn/javascript/ClassFeatures.md +4 -3
  262. package/learn/javascript/Classes.md +10 -13
  263. package/learn/javascript/Overrides.md +10 -6
  264. package/learn/javascript/Super.md +12 -8
  265. package/learn/tree.json +71 -63
  266. package/learn/tutorials/Earthquakes.md +2 -0
  267. package/learn/tutorials/RSP.md +3 -1
  268. package/learn/tutorials/TodoList.md +103 -7
  269. package/package.json +6 -4
  270. package/resources/scss/src/apps/email/ComposeView.scss +16 -0
  271. package/resources/scss/src/apps/email/MainView.scss +5 -0
  272. package/resources/scss/src/apps/portal/learn/ContentComponent.scss +5 -4
  273. package/src/DefaultConfig.mjs +12 -2
  274. package/src/Main.mjs +1 -0
  275. package/src/Neo.mjs +377 -178
  276. package/src/Xhr.mjs +1 -0
  277. package/src/button/Base.mjs +13 -0
  278. package/src/button/Effect.mjs +449 -0
  279. package/src/button/Split.mjs +2 -0
  280. package/src/calendar/store/Calendars.mjs +1 -0
  281. package/src/calendar/store/Colors.mjs +1 -0
  282. package/src/calendar/store/Events.mjs +1 -0
  283. package/src/calendar/view/DayComponent.mjs +2 -0
  284. package/src/calendar/view/EditEventContainer.mjs +4 -1
  285. package/src/calendar/view/MainContainer.mjs +13 -0
  286. package/src/calendar/view/MainContainerStateProvider.mjs +14 -28
  287. package/src/calendar/view/SettingsContainer.mjs +1 -0
  288. package/src/calendar/view/YearComponent.mjs +16 -0
  289. package/src/calendar/view/calendars/ColorsList.mjs +2 -0
  290. package/src/calendar/view/calendars/Container.mjs +2 -0
  291. package/src/calendar/view/calendars/EditContainer.mjs +1 -0
  292. package/src/calendar/view/month/Component.mjs +11 -0
  293. package/src/calendar/view/settings/GeneralContainer.mjs +1 -0
  294. package/src/calendar/view/settings/MonthContainer.mjs +1 -0
  295. package/src/calendar/view/settings/WeekContainer.mjs +1 -0
  296. package/src/calendar/view/settings/YearContainer.mjs +1 -0
  297. package/src/calendar/view/week/Component.mjs +15 -1
  298. package/src/calendar/view/week/TimeAxisComponent.mjs +4 -0
  299. package/src/code/LivePreview.mjs +51 -23
  300. package/src/collection/Base.mjs +14 -12
  301. package/src/collection/Filter.mjs +6 -0
  302. package/src/collection/Sorter.mjs +3 -0
  303. package/src/component/Base.mjs +156 -802
  304. package/src/component/Canvas.mjs +1 -0
  305. package/src/component/Chip.mjs +4 -0
  306. package/src/component/Circle.mjs +14 -0
  307. package/src/component/Clock.mjs +4 -0
  308. package/src/component/DateSelector.mjs +12 -0
  309. package/src/component/Gallery.mjs +11 -0
  310. package/src/component/Helix.mjs +24 -0
  311. package/src/component/Label.mjs +1 -0
  312. package/src/component/Legend.mjs +3 -0
  313. package/src/component/MagicMoveText.mjs +4 -0
  314. package/src/component/Progress.mjs +3 -0
  315. package/src/component/Splitter.mjs +3 -0
  316. package/src/component/StatusBadge.mjs +6 -0
  317. package/src/component/Timer.mjs +4 -0
  318. package/src/component/Toast.mjs +6 -0
  319. package/src/component/Video.mjs +1 -0
  320. package/src/component/mwc/Button.mjs +7 -0
  321. package/src/component/mwc/TextField.mjs +9 -0
  322. package/src/component/wrapper/AmChart.mjs +2 -0
  323. package/src/component/wrapper/GoogleMaps.mjs +3 -0
  324. package/src/component/wrapper/MapboxGL.mjs +5 -0
  325. package/src/component/wrapper/MonacoEditor.mjs +12 -0
  326. package/src/container/Accordion.mjs +2 -0
  327. package/src/container/Base.mjs +34 -26
  328. package/src/container/Panel.mjs +1 -0
  329. package/src/container/Viewport.mjs +1 -0
  330. package/src/controller/Application.mjs +1 -0
  331. package/src/controller/Base.mjs +1 -0
  332. package/src/controller/Component.mjs +1 -0
  333. package/src/core/Base.mjs +193 -22
  334. package/src/core/Compare.mjs +4 -7
  335. package/src/core/Config.mjs +137 -33
  336. package/src/core/Effect.mjs +193 -0
  337. package/src/core/EffectBatchManager.mjs +67 -0
  338. package/src/core/EffectManager.mjs +60 -0
  339. package/src/core/IdGenerator.mjs +13 -44
  340. package/src/data/Model.mjs +2 -0
  341. package/src/data/Store.mjs +7 -0
  342. package/src/data/connection/WebSocket.mjs +2 -0
  343. package/src/date/DayViewComponent.mjs +2 -0
  344. package/src/date/SelectorContainer.mjs +14 -0
  345. package/src/dialog/Base.mjs +8 -0
  346. package/src/draggable/DragZone.mjs +5 -0
  347. package/src/draggable/tree/DragZone.mjs +1 -0
  348. package/src/filter/BooleanContainer.mjs +2 -0
  349. package/src/filter/NumberContainer.mjs +3 -0
  350. package/src/filter/ToggleOperatorsButton.mjs +2 -0
  351. package/src/form/Fieldset.mjs +6 -0
  352. package/src/form/field/Base.mjs +7 -0
  353. package/src/form/field/CheckBox.mjs +18 -0
  354. package/src/form/field/Chip.mjs +1 -0
  355. package/src/form/field/ComboBox.mjs +8 -0
  356. package/src/form/field/Country.mjs +1 -0
  357. package/src/form/field/Currency.mjs +2 -0
  358. package/src/form/field/Date.mjs +4 -0
  359. package/src/form/field/Display.mjs +1 -0
  360. package/src/form/field/Email.mjs +1 -0
  361. package/src/form/field/FileUpload.mjs +7 -0
  362. package/src/form/field/Hidden.mjs +1 -0
  363. package/src/form/field/Number.mjs +7 -0
  364. package/src/form/field/Password.mjs +1 -0
  365. package/src/form/field/Phone.mjs +3 -0
  366. package/src/form/field/Picker.mjs +2 -0
  367. package/src/form/field/Radio.mjs +1 -0
  368. package/src/form/field/Range.mjs +3 -0
  369. package/src/form/field/Search.mjs +2 -0
  370. package/src/form/field/Text.mjs +32 -0
  371. package/src/form/field/TextArea.mjs +7 -0
  372. package/src/form/field/Time.mjs +6 -0
  373. package/src/form/field/Url.mjs +3 -0
  374. package/src/form/field/ZipCode.mjs +2 -0
  375. package/src/form/field/trigger/Base.mjs +3 -0
  376. package/src/form/field/trigger/Clear.mjs +2 -0
  377. package/src/form/field/trigger/CopyToClipboard.mjs +2 -0
  378. package/src/form/field/trigger/Date.mjs +1 -0
  379. package/src/form/field/trigger/Picker.mjs +1 -0
  380. package/src/form/field/trigger/Search.mjs +1 -0
  381. package/src/form/field/trigger/SpinDown.mjs +2 -0
  382. package/src/form/field/trigger/SpinUp.mjs +1 -0
  383. package/src/form/field/trigger/Time.mjs +2 -0
  384. package/src/functional/_export.mjs +6 -0
  385. package/src/functional/component/Base.mjs +499 -0
  386. package/src/functional/defineComponent.mjs +102 -0
  387. package/src/functional/useConfig.mjs +52 -0
  388. package/src/functional/useEvent.mjs +43 -0
  389. package/src/grid/Body.mjs +20 -1
  390. package/src/grid/Container.mjs +57 -63
  391. package/src/grid/ScrollManager.mjs +2 -0
  392. package/src/grid/VerticalScrollbar.mjs +2 -0
  393. package/src/grid/column/Base.mjs +2 -0
  394. package/src/grid/column/Component.mjs +1 -1
  395. package/src/grid/header/Button.mjs +7 -0
  396. package/src/grid/header/Toolbar.mjs +6 -0
  397. package/src/grid/plugin/AnimateRows.mjs +2 -0
  398. package/src/layout/Base.mjs +3 -0
  399. package/src/layout/Card.mjs +1 -0
  400. package/src/layout/Cube.mjs +11 -1
  401. package/src/layout/Fit.mjs +1 -0
  402. package/src/layout/Flexbox.mjs +7 -0
  403. package/src/layout/Form.mjs +2 -0
  404. package/src/layout/Grid.mjs +1 -0
  405. package/src/layout/HBox.mjs +1 -0
  406. package/src/layout/VBox.mjs +1 -0
  407. package/src/list/Base.mjs +13 -0
  408. package/src/list/Chip.mjs +1 -0
  409. package/src/list/Circle.mjs +2 -0
  410. package/src/list/Color.mjs +1 -0
  411. package/src/list/plugin/Animate.mjs +2 -0
  412. package/src/main/DeltaUpdates.mjs +1 -0
  413. package/src/main/DomEvents.mjs +2 -0
  414. package/src/main/addon/CloneNode.mjs +1 -0
  415. package/src/main/addon/Cookie.mjs +1 -0
  416. package/src/main/addon/GoogleMaps.mjs +1 -0
  417. package/src/main/addon/LocalStorage.mjs +1 -0
  418. package/src/main/addon/MapboxGL.mjs +1 -0
  419. package/src/main/addon/Markdown.mjs +1 -0
  420. package/src/main/addon/Navigator.mjs +1 -0
  421. package/src/main/addon/Popover.mjs +1 -0
  422. package/src/main/addon/Stylesheet.mjs +1 -0
  423. package/src/main/addon/WindowPosition.mjs +1 -0
  424. package/src/manager/Component.mjs +0 -71
  425. package/src/manager/VDomUpdate.mjs +235 -0
  426. package/src/menu/List.mjs +6 -0
  427. package/src/menu/Model.mjs +1 -0
  428. package/src/menu/Panel.mjs +3 -0
  429. package/src/menu/Store.mjs +1 -0
  430. package/src/mixin/DomEvents.mjs +130 -0
  431. package/src/mixin/VdomLifecycle.mjs +667 -0
  432. package/src/plugin/Base.mjs +1 -0
  433. package/src/plugin/Resizable.mjs +2 -0
  434. package/src/selection/Model.mjs +15 -18
  435. package/src/selection/grid/BaseModel.mjs +1 -0
  436. package/src/sitemap/Component.mjs +1 -0
  437. package/src/state/Provider.mjs +376 -457
  438. package/src/state/createHierarchicalDataProxy.mjs +138 -0
  439. package/src/tab/Container.mjs +6 -0
  440. package/src/tab/Strip.mjs +1 -0
  441. package/src/tab/header/Button.mjs +2 -0
  442. package/src/tab/header/EffectButton.mjs +77 -0
  443. package/src/tab/header/Toolbar.mjs +1 -0
  444. package/src/table/Body.mjs +3 -0
  445. package/src/table/Container.mjs +10 -0
  446. package/src/table/header/Button.mjs +8 -0
  447. package/src/table/header/Toolbar.mjs +5 -0
  448. package/src/table/plugin/CellEditing.mjs +1 -0
  449. package/src/toolbar/Base.mjs +4 -0
  450. package/src/toolbar/Breadcrumb.mjs +3 -0
  451. package/src/toolbar/Paging.mjs +5 -0
  452. package/src/tooltip/Base.mjs +2 -0
  453. package/src/tree/List.mjs +3 -0
  454. package/src/util/HashHistory.mjs +1 -0
  455. package/src/util/KeyNavigation.mjs +2 -0
  456. package/src/util/Matrix.mjs +1 -0
  457. package/src/util/VDom.mjs +7 -1
  458. package/src/util/VNode.mjs +7 -1
  459. package/src/util/vdom/TreeBuilder.mjs +129 -0
  460. package/src/vdom/Helper.mjs +44 -33
  461. package/src/vdom/VNode.mjs +5 -7
  462. package/src/worker/App.mjs +1 -5
  463. package/src/worker/Base.mjs +2 -0
  464. package/src/worker/Manager.mjs +2 -0
  465. package/src/worker/ServiceBase.mjs +6 -1
  466. package/test/siesta/siesta.js +36 -1
  467. package/test/siesta/tests/CollectionBase.mjs +10 -10
  468. package/test/siesta/tests/VdomCalendar.mjs +13 -9
  469. package/test/siesta/tests/VdomHelper.mjs +22 -59
  470. package/test/siesta/tests/config/AfterSetConfig.mjs +100 -0
  471. package/test/siesta/tests/{ReactiveConfigs.mjs → config/Basic.mjs} +58 -21
  472. package/test/siesta/tests/config/CircularDependencies.mjs +166 -0
  473. package/test/siesta/tests/config/CustomFunctions.mjs +69 -0
  474. package/test/siesta/tests/config/Hierarchy.mjs +94 -0
  475. package/test/siesta/tests/config/MemoryLeak.mjs +92 -0
  476. package/test/siesta/tests/config/MultiLevelHierarchy.mjs +85 -0
  477. package/test/siesta/tests/core/Effect.mjs +127 -0
  478. package/test/siesta/tests/core/EffectBatching.mjs +310 -0
  479. package/test/siesta/tests/neo/MixinStaticConfig.mjs +138 -0
  480. package/test/siesta/tests/state/Provider.mjs +537 -0
  481. package/test/siesta/tests/state/ProviderNestedDataConfigs.mjs +255 -0
  482. package/test/siesta/tests/state/createHierarchicalDataProxy.mjs +204 -0
  483. package/test/siesta/tests/vdom/VdomAsymmetricUpdates.mjs +366 -0
  484. package/test/siesta/tests/vdom/VdomRealWorldUpdates.mjs +249 -0
  485. package/learn/javascript/NewNode.md +0 -31
@@ -1,3 +1,5 @@
1
+ # Super
2
+
1
3
  To call a super-class method use the `super` keyword.
2
4
 
3
5
  ```javascript readonly
@@ -11,7 +13,7 @@ class Mammal extends Base {
11
13
  console.log(`${this.name} is doing something mammals do`)
12
14
  }
13
15
  }
14
- Neo.setupClass(Mammal);
16
+ export default Neo.setupClass(Mammal);
15
17
  ```
16
18
 
17
19
  ```javascript readonly
@@ -20,17 +22,18 @@ class Human extends Mammal {
20
22
  className: 'Simple.example.Human',
21
23
  }
22
24
  doSomething(){
23
- <span style="color:#b91010">super.doSomething();</span>
25
+ super.doSomething();
24
26
  console.log(`${this.name} is doing something humans do`)
25
27
  }
26
28
  }
27
29
 
30
+ Human = Neo.setupClass(Human);
31
+
28
32
  const myPerson = Neo.create(Human, {
29
33
  name: 'Herbert'
30
34
  });
31
- myPerson.doSomething();
32
35
 
33
- Neo.setupClass(Mammal);
36
+ myPerson.doSomething();
34
37
  ```
35
38
 
36
39
  Sometimes you aren't sure if a super class has a method. In that case use the
@@ -47,7 +50,7 @@ class Mammal extends Base {
47
50
  console.log(`${this.name} is doing something mammals do`)
48
51
  }
49
52
  }
50
- Neo.setupClass(Mammal);
53
+ export default Neo.setupClass(Mammal);
51
54
  ```
52
55
 
53
56
  ```javascript readonly
@@ -56,15 +59,16 @@ class Human extends Mammal {
56
59
  className: 'Simple.example.Human',
57
60
  }
58
61
  doSomething(){
59
- <span style="color:#b91010">super?.doSomething();</span>
62
+ super.doSomething?.();
60
63
  console.log(`${this.name} is doing something humans do`)
61
64
  }
62
65
  }
63
66
 
67
+ Human = Neo.setupClass(Human);
68
+
64
69
  const myPerson = Neo.create(Human, {
65
70
  name: 'Herbert'
66
71
  });
67
- myPerson.doSomething();
68
72
 
69
- Neo.setupClass(Mammal);
73
+ myPerson.doSomething();
70
74
  ```
package/learn/tree.json CHANGED
@@ -1,65 +1,73 @@
1
1
  {"data": [
2
- {"name": "Using These Topics", "parentId": null, "id": "UsingTheseTopics" },
3
- {"name": "Benefits", "parentId": null, "isLeaf": false, "id": "Benefits"},
4
- {"name": "Introduction ", "parentId": "Benefits", "id": "benefits/Introduction"},
5
- {"name": "Off the Main Thread", "parentId": "Benefits", "id": "benefits/OffTheMainThread"},
6
- {"name": "4 Environments", "parentId": "Benefits", "id": "benefits/FourEnvironments"},
7
- {"name": "Unified Config System", "parentId": "Benefits", "id": "benefits/ConfigSystem"},
8
- {"name": "RPC Layer", "parentId": "Benefits", "id": "benefits/RPCLayer"},
9
- {"name": "Extreme Speed", "parentId": "Benefits", "id": "benefits/Speed"},
10
- {"name": "Multi-Window Applications", "parentId": "Benefits", "id": "benefits/MultiWindow"},
11
- {"name": "Quick Application Development", "parentId": "Benefits", "id": "benefits/Quick"},
12
- {"name": "Complexity and Effort", "parentId": "Benefits", "id": "benefits/Effort"},
13
- {"name": "Forms Engine", "parentId": "Benefits", "id": "benefits/FormsEngine"},
14
- {"name": "Features and Benefits Summary", "parentId": "Benefits", "id": "benefits/Features"},
15
- {"name": "Getting Started", "parentId": null, "isLeaf": false, "id": "GettingStarted", "collapsed": true},
16
- {"name": "Setup", "parentId": "GettingStarted", "id": "gettingstarted/Setup"},
17
- {"name": "Workspaces and Applications", "parentId": "GettingStarted", "id": "gettingstarted/Workspaces"},
18
- {"name": "Describing a View", "parentId": "GettingStarted", "id": "gettingstarted/DescribingTheUI"},
19
- {"name": "Events", "parentId": "GettingStarted", "id": "gettingstarted/Events"},
20
- {"name": "Component References", "parentId": "GettingStarted", "id": "gettingstarted/References"},
21
- {"name": "Extending Classes", "parentId": "GettingStarted", "id": "gettingstarted/Extending"},
22
- {"name": "Config", "parentId": "GettingStarted", "id": "gettingstarted/Config"},
23
- {"name": "Shared Bindable Data", "parentId": "GettingStarted", "id": "gettingstarted/ComponentModels"},
24
- {"name": "Guides", "parentId": null, "isLeaf": false, "id": "guides", "collapsed": true},
25
- {"name": "Fundamentals & Core Concepts", "parentId": "guides", "isLeaf": false, "id": "guides/fundamentals", "collapsed": true},
26
- {"name": "Application Bootstrap", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ApplicationBootstrap"},
27
- {"name": "Instance Lifecycle", "parentId": "guides/fundamentals", "id": "guides/fundamentals/InstanceLifecycle"},
28
- {"name": "Declarative Component Trees VS Imperative Vdom", "parentId": "guides/fundamentals", "id": "guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom"},
29
- {"name": "Config System Deep Dive", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ConfigSystemDeepDive"},
30
- {"name": "Extending Neo Classes", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ExtendingNeoClasses"},
31
- {"name": "Main Thread Addons: Interacting with the Browser", "parentId": "guides/fundamentals", "id": "guides/fundamentals/MainThreadAddons"},
32
- {"name": "UI Building Blocks", "parentId": "guides", "isLeaf": false, "id": "guides/uibuildingblocks", "collapsed": true},
33
- {"name": "Component and Container Basics", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/ComponentsAndContainers"},
34
- {"name": "Layouts", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/Layouts"},
35
- {"name": "Custom Components", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/CustomComponents"},
36
- {"name": "Working with VDom", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/WorkingWithVDom"},
37
- {"name": "Data Handling", "parentId": "guides", "isLeaf": false, "id": "guides/datahandling", "collapsed": true},
38
- {"name": "Collections", "parentId": "guides/datahandling", "id": "guides/datahandling/Collections"},
39
- {"name": "Records", "parentId": "guides/datahandling", "id": "guides/datahandling/Records"},
40
- {"name": "Grids", "parentId": "guides/datahandling", "id": "guides/datahandling/Grids"},
41
- {"name": "Tables (Stores)", "parentId": "guides/datahandling", "id": "guides/datahandling/Tables", "hidden": true},
42
- {"name": "Shared Bindable Data (State Providers)", "parentId": "guides/datahandling", "id": "guides/datahandling/StateProviders"},
43
- {"name": "User Interaction & Advanced Features", "parentId": "guides", "isLeaf": false, "id": "guides/userinteraction", "collapsed": true},
44
- {"name": "User Input (Forms)", "parentId": "guides/userinteraction", "id": "guides/userinteraction/Forms"},
45
- {"name": "Form Fields", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/form_fields"},
46
- {"name": "ComboBox", "parentId": "guides/userinteraction/form_fields", "id": "guides/userinteraction/form_fields/ComboBox"},
47
- {"name": "Events", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/events"},
48
- {"name": "Custom Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/CustomEvents"},
49
- {"name": "DOM Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/DomEvents"},
50
- {"name": "Specific Applications/Features", "parentId": "guides", "isLeaf": false, "id": "guides/SpecificFeatures", "collapsed": true},
51
- {"name": "Multi-Window Applications", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/MultiWindow", "hidden": true},
52
- {"name": "Mixins", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/Mixins", "hidden": true},
53
- {"name": "Portal App", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/PortalApp"},
54
- {"name": "Tutorials", "parentId": null, "isLeaf": false, "id": "Tutorials", "collapsed": true},
55
- {"name": "Rock Scissors Paper", "parentId": "Tutorials", "id": "tutorials/RSP", "hidden": true},
56
- {"name": "Earthquakes", "parentId": "Tutorials", "id": "tutorials/Earthquakes"},
57
- {"name": "Todo List", "parentId": "Tutorials", "id": "tutorials/TodoList"},
58
- {"name": "JavaScript Classes", "parentId": null, "isLeaf": false, "id": "JavaScript", "hidden": true},
59
- {"name": "Classes, Properties, and Methods", "parentId": "JavaScript", "id": "javascript/Classes"},
60
- {"name": "Overriding Methods", "parentId": "JavaScript", "id": "javascript/Overrides"},
61
- {"name": "Other JavaScript Class Features", "parentId": "JavaScript", "id": "javascript/ClassFeatures"},
62
- {"name": "Super", "parentId": "JavaScript", "id": "javascript/Super"},
63
- {"name": "New Node", "parentId": "JavaScript", "id": "javascript/NewNode"},
64
- {"name": "Glossary", "parentId": null, "id": "Glossary"}
2
+ {"name": "Using These Topics", "parentId": null, "id": "UsingTheseTopics" },
3
+ {"name": "Benefits", "parentId": null, "isLeaf": false, "id": "Benefits"},
4
+ {"name": "Introduction", "parentId": "Benefits", "id": "benefits/Introduction"},
5
+ {"name": "Off the Main Thread", "parentId": "Benefits", "id": "benefits/OffTheMainThread"},
6
+ {"name": "4 Environments", "parentId": "Benefits", "id": "benefits/FourEnvironments"},
7
+ {"name": "Unified Config System", "parentId": "Benefits", "id": "benefits/ConfigSystem"},
8
+ {"name": "RPC Layer", "parentId": "Benefits", "id": "benefits/RPCLayer"},
9
+ {"name": "Extreme Speed", "parentId": "Benefits", "id": "benefits/Speed"},
10
+ {"name": "Multi-Window Applications", "parentId": "Benefits", "id": "benefits/MultiWindow"},
11
+ {"name": "Quick Application Development", "parentId": "Benefits", "id": "benefits/Quick"},
12
+ {"name": "Complexity and Effort", "parentId": "Benefits", "id": "benefits/Effort"},
13
+ {"name": "Forms Engine", "parentId": "Benefits", "id": "benefits/FormsEngine"},
14
+ {"name": "Features and Benefits Summary", "parentId": "Benefits", "id": "benefits/Features"},
15
+ {"name": "Comparisons", "parentId": null, "isLeaf": false, "id": "comparisons", "collapsed": true},
16
+ {"name": "Overview", "parentId": "comparisons", "id": "comparisons/Overview"},
17
+ {"name": "Neo.mjs vs React.js", "parentId": "comparisons", "id": "comparisons/NeoVsReact"},
18
+ {"name": "Neo.mjs vs Angular", "parentId": "comparisons", "id": "comparisons/NeoVsAngular"},
19
+ {"name": "Neo.mjs vs Vue.js", "parentId": "comparisons", "id": "comparisons/NeoVsVue"},
20
+ {"name": "Neo.mjs vs Solid.js", "parentId": "comparisons", "id": "comparisons/NeoVsSolid"},
21
+ {"name": "Neo.mjs vs Next.js", "parentId": "comparisons", "id": "comparisons/NeoVsNextJs"},
22
+ {"name": "Neo.mjs vs Ext.js", "parentId": "comparisons", "id": "comparisons/NeoVsExtJs"},
23
+ {"name": "Getting Started", "parentId": null, "isLeaf": false, "id": "GettingStarted", "collapsed": true},
24
+ {"name": "Setup", "parentId": "GettingStarted", "id": "gettingstarted/Setup"},
25
+ {"name": "Workspaces and Applications", "parentId": "GettingStarted", "id": "gettingstarted/Workspaces"},
26
+ {"name": "Describing a View", "parentId": "GettingStarted", "id": "gettingstarted/DescribingTheUI"},
27
+ {"name": "Events", "parentId": "GettingStarted", "id": "gettingstarted/Events"},
28
+ {"name": "Component References", "parentId": "GettingStarted", "id": "gettingstarted/References"},
29
+ {"name": "Extending Classes", "parentId": "GettingStarted", "id": "gettingstarted/Extending"},
30
+ {"name": "Config", "parentId": "GettingStarted", "id": "gettingstarted/Config"},
31
+ {"name": "Shared Bindable Data", "parentId": "GettingStarted", "id": "gettingstarted/ComponentModels"},
32
+ {"name": "Guides", "parentId": null, "isLeaf": false, "id": "guides", "collapsed": true},
33
+ {"name": "Fundamentals & Core Concepts", "parentId": "guides", "isLeaf": false, "id": "guides/fundamentals", "collapsed": true},
34
+ {"name": "Application Bootstrap", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ApplicationBootstrap"},
35
+ {"name": "Instance Lifecycle", "parentId": "guides/fundamentals", "id": "guides/fundamentals/InstanceLifecycle"},
36
+ {"name": "Declarative Component Trees VS Imperative Vdom", "parentId": "guides/fundamentals", "id": "guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom"},
37
+ {"name": "Declarative VDOM with Effects", "parentId": "guides/fundamentals", "id": "guides/fundamentals/DeclarativeVDOMWithEffects"},
38
+ {"name": "Config System Deep Dive", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ConfigSystemDeepDive"},
39
+ {"name": "Extending Neo Classes", "parentId": "guides/fundamentals", "id": "guides/fundamentals/ExtendingNeoClasses"},
40
+ {"name": "Main Thread Addons", "parentId": "guides/fundamentals", "id": "guides/fundamentals/MainThreadAddons"},
41
+ {"name": "UI Building Blocks", "parentId": "guides", "isLeaf": false, "id": "guides/uibuildingblocks", "collapsed": true},
42
+ {"name": "Component and Container Basics", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/ComponentsAndContainers"},
43
+ {"name": "Layouts", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/Layouts"},
44
+ {"name": "Custom Components", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/CustomComponents"},
45
+ {"name": "Working with VDom", "parentId": "guides/uibuildingblocks", "id": "guides/uibuildingblocks/WorkingWithVDom"},
46
+ {"name": "Data Handling", "parentId": "guides", "isLeaf": false, "id": "guides/datahandling", "collapsed": true},
47
+ {"name": "Collections", "parentId": "guides/datahandling", "id": "guides/datahandling/Collections"},
48
+ {"name": "Records", "parentId": "guides/datahandling", "id": "guides/datahandling/Records"},
49
+ {"name": "Grids", "parentId": "guides/datahandling", "id": "guides/datahandling/Grids"},
50
+ {"name": "Tables (Stores)", "parentId": "guides/datahandling", "id": "guides/datahandling/Tables", "hidden": true},
51
+ {"name": "Shared Bindable Data (State Providers)", "parentId": "guides/datahandling", "id": "guides/datahandling/StateProviders"},
52
+ {"name": "User Interaction & Advanced Features", "parentId": "guides", "isLeaf": false, "id": "guides/userinteraction", "collapsed": true},
53
+ {"name": "User Input (Forms)", "parentId": "guides/userinteraction", "id": "guides/userinteraction/Forms"},
54
+ {"name": "Form Fields", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/form_fields"},
55
+ {"name": "ComboBox", "parentId": "guides/userinteraction/form_fields", "id": "guides/userinteraction/form_fields/ComboBox"},
56
+ {"name": "Events", "parentId": "guides/userinteraction", "isLeaf": false, "id": "guides/userinteraction/events"},
57
+ {"name": "Custom Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/CustomEvents"},
58
+ {"name": "DOM Events", "parentId": "guides/userinteraction/events", "id": "guides/userinteraction/events/DomEvents"},
59
+ {"name": "Specific Applications/Features", "parentId": "guides", "isLeaf": false, "id": "guides/specificfeatures", "collapsed": true},
60
+ {"name": "Multi-Window Applications", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/MultiWindow", "hidden": true},
61
+ {"name": "Mixins", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/Mixins", "hidden": true},
62
+ {"name": "Portal App", "parentId": "guides/specificfeatures", "id": "guides/specificfeatures/PortalApp"},
63
+ {"name": "Tutorials", "parentId": null, "isLeaf": false, "id": "Tutorials", "collapsed": true},
64
+ {"name": "Rock Scissors Paper", "parentId": "Tutorials", "id": "tutorials/RSP", "hidden": true},
65
+ {"name": "Earthquakes", "parentId": "Tutorials", "id": "tutorials/Earthquakes"},
66
+ {"name": "Todo List", "parentId": "Tutorials", "id": "tutorials/TodoList"},
67
+ {"name": "JavaScript Classes", "parentId": null, "isLeaf": false, "id": "JavaScript", "collapsed": true},
68
+ {"name": "Classes, Properties, and Methods", "parentId": "JavaScript", "id": "javascript/Classes"},
69
+ {"name": "Overriding Methods", "parentId": "JavaScript", "id": "javascript/Overrides"},
70
+ {"name": "Other JavaScript Class Features", "parentId": "JavaScript", "id": "javascript/ClassFeatures"},
71
+ {"name": "Super", "parentId": "JavaScript", "id": "javascript/Super"},
72
+ {"name": "Glossary", "parentId": null, "id": "Glossary"}
65
73
  ]}
@@ -1,3 +1,5 @@
1
+ # Earthquakes
2
+
1
3
  In this topic you'll create an application that fetches data on earthquakes in Iceland,
2
4
  and show the information in two views: a table, and a map.
3
5
 
@@ -1 +1,3 @@
1
- ### todo: Rock Scissors Paper
1
+ # Rock Scissors Paper
2
+
3
+ todo: Rock Scissors Paper
@@ -1,7 +1,15 @@
1
- ## HTML Style
1
+ # Todo List
2
2
 
3
- In case you did not work with neo yet, but come from a more HTML driven ecosystem,
4
- you could achieve the task in a similar way.
3
+ This tutorial guides you through creating the same simple Todo List application using three different coding styles
4
+ available in Neo.mjs. This will help you understand the flexibility of the framework and choose the approach that best
5
+ fits your project or personal preference.
6
+
7
+ ## 1. HTML Style
8
+
9
+ This first version demonstrates how you can build a component in a way that might feel familiar if you have a background
10
+ in traditional HTML and JavaScript. It directly constructs and manipulates a `vdom` (Virtual DOM) object that mirrors an
11
+ HTML structure. Event handling is set up manually using DOM listeners. This approach offers fine-grained control and is
12
+ useful for understanding the fundamentals of Neo.mjs's vdom system.
5
13
 
6
14
  ```javascript live-preview
7
15
  import Component from '../component/Base.mjs';
@@ -67,9 +75,9 @@ class MainComponent extends Component {
67
75
  tag: 'li',
68
76
  cn : [
69
77
  {tag: 'span', cls, style: {cursor: 'pointer', width: '20px'}},
70
- {vtype: 'text', html: item.text}
78
+ {vtype: 'text', text: item.text}
71
79
  ]
72
- });
80
+ })
73
81
  });
74
82
 
75
83
  me.update()
@@ -112,9 +120,96 @@ class MainComponent extends Component {
112
120
  MainComponent = Neo.setupClass(MainComponent);
113
121
  ```
114
122
 
115
- ## Neo Style
123
+ ## 2. Functional Style
124
+
125
+ This second version showcases a more modern and concise way to build components using a functional approach. It
126
+ leverages hooks like `useConfig` for state management and `useEvent` for handling DOM events, resulting in more
127
+ declarative and readable code. This style is heavily inspired by concepts like React Hooks and is ideal for creating
128
+ self-contained, stateful components with minimal boilerplate.
129
+
130
+ ```javascript live-preview
131
+ import {defineComponent, useConfig, useEvent} from '../functional/_export.mjs';
132
+
133
+ let MainContainer = defineComponent({
134
+ config: {
135
+ className: 'Neo.examples.todoList.version3.MainContainer'
136
+ },
137
+ createVdom() {
138
+ const [items, setItems] = useConfig([
139
+ {id: 1, done: true, text: 'Todo Item 1'},
140
+ {id: 2, done: false, text: 'Todo Item 2'},
141
+ {id: 3, done: false, text: 'Todo Item 3'}
142
+ ]);
143
+
144
+ const [inputValue, setInputValue] = useConfig('');
145
+ const [inputVdomValue, setInputVdomValue] = useConfig('');
146
+
147
+ useEvent('click', data => {
148
+ if (inputValue) {
149
+ const newItem = {
150
+ id : (items.length > 0 ? Math.max(...items.map(i => i.id)) : 0) + 1,
151
+ done: false,
152
+ text: inputValue
153
+ };
154
+ setItems([...items, newItem]);
155
+ setInputValue('');
156
+ setInputVdomValue('');
157
+ }
158
+ }, '.todo-add-button');
159
+
160
+ useEvent('click', data => {
161
+ const liNode = data.path[1];
162
+ const clickedItemId = parseInt(liNode.data.id);
163
+
164
+ setItems(items => items.map(item =>
165
+ item.id === clickedItemId ? {...item, done: !item.done} : item
166
+ ));
167
+ }, '.todo-item');
168
+
169
+ useEvent('input', data => {
170
+ setInputValue(data.value);
171
+ setInputVdomValue(undefined);
172
+ }, '.todo-input');
173
+
174
+ return {
175
+ style: {border: '1px solid #000', margin: '20px', padding: '10px', maxWidth: '300px'},
176
+ cn: [
177
+ {tag: 'h3', html: 'Todo List'},
178
+ {tag: 'ol', cn: items.map(item => ({
179
+ tag : 'li',
180
+ 'data-id': item.id,
181
+ cn : [
182
+ {
183
+ tag : 'span',
184
+ cls : ['todo-item', item.done ? 'fa fa-check' : 'far fa-square'],
185
+ style: {cursor: 'pointer', width: '20px', marginRight: '5px'}
186
+ },
187
+ {vtype: 'text', html: item.text}
188
+ ]
189
+ }))},
190
+ {cn: [{
191
+ tag: 'input',
192
+ cls: ['todo-input'],
193
+ value: inputVdomValue
194
+ }, {
195
+ tag: 'button',
196
+ cls: ['todo-add-button'],
197
+ html: 'Add Item',
198
+ style: {marginLeft: '1em'}
199
+ }]}
200
+ ]
201
+ };
202
+ }
203
+ });
204
+ ```
205
+
206
+ ## 3. Classic Neo Style
116
207
 
117
- content
208
+ This final version illustrates the classic, object-oriented approach to building UIs in Neo.mjs. It separates concerns
209
+ by using dedicated classes for different parts of the application: a `Store` to manage the data, a `Model` to define
210
+ the data structure, and `Container` with child components (`List`, `Toolbar`, `TextField`) to create the view.
211
+ This powerful, structured approach is well-suited for larger, more complex applications where a clear separation of data,
212
+ logic, and presentation is beneficial.
118
213
 
119
214
  ```javascript live-preview
120
215
  import Container from '../container/Base.mjs';
@@ -229,3 +324,4 @@ class MainContainer extends Container {
229
324
 
230
325
  MainContainer = Neo.setupClass(MainContainer);
231
326
  ```
327
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name" : "neo.mjs",
3
- "version" : "10.0.0-beta.4",
3
+ "version" : "10.0.0-beta.6",
4
4
  "description" : "Neo.mjs: The multi-threaded UI framework for building ultra-fast, desktop-like web applications with uncompromised responsiveness, inherent security, and a transpilation-free dev mode.",
5
5
  "type" : "module",
6
6
  "repository" : {
@@ -12,11 +12,13 @@
12
12
  },
13
13
  "scripts" : {
14
14
  "add-config" : "node ./buildScripts/addConfig.mjs",
15
+ "add-reactive-tags" : "node ./buildScripts/addReactiveTags.mjs",
15
16
  "build-all" : "node ./buildScripts/buildAll.mjs -f -n",
16
17
  "build-all-questions" : "node ./buildScripts/buildAll.mjs -f",
17
18
  "build-es-modules" : "node ./buildScripts/buildESModules.mjs",
18
19
  "build-themes" : "node ./buildScripts/buildThemes.mjs -f",
19
20
  "build-threads" : "node ./buildScripts/webpack/buildThreads.mjs -f",
21
+ "check-reactive-tags" : "node ./buildScripts/checkReactiveTags.mjs",
20
22
  "convert-design-tokens" : "node ./buildScripts/convertDesignTokens.mjs",
21
23
  "create-app" : "node ./buildScripts/createApp.mjs",
22
24
  "create-app-minimal" : "node ./buildScripts/createAppMinimal.mjs",
@@ -81,13 +83,13 @@
81
83
  "chalk" : "^5.4.1",
82
84
  "clean-webpack-plugin" : "^4.0.0",
83
85
  "commander" : "^14.0.0",
84
- "cssnano" : "^7.0.7",
86
+ "cssnano" : "^7.1.0",
85
87
  "envinfo" : "^7.14.0",
86
88
  "fs-extra" : "^11.3.0",
87
89
  "highlightjs-line-numbers.js" : "^2.9.0",
88
90
  "html-minifier-terser" : "^7.2.0",
89
91
  "inquirer" : "^12.7.0",
90
- "marked" : "^16.0.0",
92
+ "marked" : "^16.1.1",
91
93
  "monaco-editor" : "0.50.0",
92
94
  "neo-jsdoc" : "1.0.1",
93
95
  "neo-jsdoc-x" : "1.0.5",
@@ -96,7 +98,7 @@
96
98
  "siesta-lite" : "5.5.2",
97
99
  "terser" : "^5.43.1",
98
100
  "url" : "^0.11.4",
99
- "webpack" : "^5.99.9",
101
+ "webpack" : "^5.100.2",
100
102
  "webpack-cli" : "^6.0.1",
101
103
  "webpack-dev-server" : "^5.2.2",
102
104
  "webpack-hook-plugin" : "^1.0.7",
@@ -0,0 +1,16 @@
1
+ .email-compose-view {
2
+ align-items : stretch;
3
+ background-color: #323232;
4
+ border : 1px solid #ccc;
5
+ box-shadow : 0 4px 8px rgba(0,0,0,0.1);
6
+ display : flex;
7
+ flex-direction : column;
8
+ justify-content : center;
9
+ left : 50%;
10
+ padding : 20px;
11
+ position : absolute;
12
+ top : 50%;
13
+ transform : translate(-50%, -50%);
14
+ width : 600px;
15
+ z-index : 1000
16
+ }
@@ -0,0 +1,5 @@
1
+ .email-main-view {
2
+ display: flex;
3
+ flex : 1 1 auto;
4
+ height : 100%;
5
+ }
@@ -106,10 +106,11 @@
106
106
  }
107
107
 
108
108
  pre[data-javascript] {
109
- border : thin solid lightgray;
110
- border-radius: 4px;
111
- overflow-x : scroll;
112
- padding : 12px;
109
+ border : thin solid lightgray;
110
+ border-radius : 4px;
111
+ letter-spacing: 0;
112
+ overflow-x : scroll;
113
+ padding : 12px;
113
114
  }
114
115
 
115
116
  summary::-webkit-details-marker {
@@ -192,6 +192,16 @@ const DefaultConfig = {
192
192
  * @type Boolean
193
193
  */
194
194
  unitTestMode: false,
195
+ /**
196
+ * When unitTestMode is true, this flag can be enabled to allow VDOM-related
197
+ * operations like render() and update() to proceed. This is useful for integration-style
198
+ * tests that need to verify component lifecycle and DOM output.
199
+ * @default false
200
+ * @memberOf! module:Neo
201
+ * @name config.allowVdomUpdatesInTests
202
+ * @type Boolean
203
+ */
204
+ allowVdomUpdatesInTests: false,
195
205
  /**
196
206
  * Experimental flag if an offscreen canvas worker should get created.
197
207
  * @default false
@@ -289,12 +299,12 @@ const DefaultConfig = {
289
299
  useVdomWorker: true,
290
300
  /**
291
301
  * buildScripts/injectPackageVersion.mjs will update this value
292
- * @default '10.0.0-beta.4'
302
+ * @default '10.0.0-beta.6'
293
303
  * @memberOf! module:Neo
294
304
  * @name config.version
295
305
  * @type String
296
306
  */
297
- version: '10.0.0-beta.4'
307
+ version: '10.0.0-beta.6'
298
308
  };
299
309
 
300
310
  Object.assign(DefaultConfig, {
package/src/Main.mjs CHANGED
@@ -10,6 +10,7 @@ import WorkerManager from './worker/Manager.mjs';
10
10
  /**
11
11
  * @class Neo.Main
12
12
  * @extends Neo.core.Base
13
+ * @mixes Neo.core.Observable
13
14
  * @singleton
14
15
  */
15
16
  class Main extends core.Base {