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
@@ -13,14 +13,17 @@ class Helix extends FeatureSection {
13
13
  className: 'Portal.view.home.parts.Helix',
14
14
  /**
15
15
  * @member {String[]} cls=['portal-home-parts-helix']
16
+ * @reactive
16
17
  */
17
18
  cls: ['portal-home-parts-helix'],
18
19
  /**
19
20
  * @member {String} headline='Extreme Speed'
21
+ * @reactive
20
22
  */
21
23
  headline: 'Extreme Speed',
22
24
  /**
23
25
  * @member {String} learnMoreRoute='#/learn/WhyNeo-Speed'
26
+ * @reactive
24
27
  */
25
28
  learnMoreRoute: '#/learn/WhyNeo-Speed',
26
29
  /**
@@ -50,10 +53,12 @@ class Helix extends FeatureSection {
50
53
  ].join(''),
51
54
  /**
52
55
  * @member {String} subHeadline='40,000 Updates /s'
56
+ * @reactive
53
57
  */
54
58
  subHeadline: '40,000 Updates /s',
55
59
  /**
56
60
  * @member {String} textContainerPosition='end'
61
+ * @reactive
57
62
  */
58
63
  textContainerPosition: 'end'
59
64
  }
@@ -13,6 +13,7 @@ class How extends FeatureSection {
13
13
  className: 'Portal.view.home.parts.How',
14
14
  /**
15
15
  * @member {String[]} cls=['portal-home-parts-how']
16
+ * @reactive
16
17
  */
17
18
  cls: ['portal-home-parts-how'],
18
19
  /**
@@ -30,10 +31,12 @@ class How extends FeatureSection {
30
31
  }],
31
32
  /**
32
33
  * @member {String} headline='How?'
34
+ * @reactive
33
35
  */
34
36
  headline: 'How?',
35
37
  /**
36
38
  * @member {String} learnMoreRoute='#/learn/benefits.OffTheMainThread'
39
+ * @reactive
37
40
  */
38
41
  learnMoreRoute: '#/learn/benefits.OffTheMainThread',
39
42
  /**
@@ -47,6 +50,7 @@ class How extends FeatureSection {
47
50
  ].join(''),
48
51
  /**
49
52
  * @member {String} subHeadline='How does Neo.mjs do it?'
53
+ * @reactive
50
54
  */
51
55
  subHeadline: 'How does Neo.mjs do it?'
52
56
  }
@@ -15,6 +15,7 @@ class MainNeo extends BaseContainer {
15
15
  className: 'Portal.view.home.parts.MainNeo',
16
16
  /**
17
17
  * @member {String[]} cls=['portal-home-main-neo']
18
+ * @reactive
18
19
  */
19
20
  cls: ['portal-home-main-neo'],
20
21
 
@@ -14,10 +14,12 @@ class References extends BaseContainer {
14
14
  className: 'Portal.view.home.parts.References',
15
15
  /**
16
16
  * @member {String} cls='portal-references'
17
+ * @reactive
17
18
  */
18
19
  cls: 'portal-references',
19
20
  /**
20
21
  * @member {Object} layout={ntype:'vbox',align:'stretch',pack:'center'}
22
+ * @reactive
21
23
  */
22
24
  layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
23
25
  /**
@@ -34,10 +34,12 @@ class ContentComponent extends Component {
34
34
  },
35
35
  /**
36
36
  * @member {Object} record_=null
37
+ * @reactive
37
38
  */
38
39
  record_: null,
39
40
  /**
40
41
  * @member {String} tag='article'
42
+ * @reactive
41
43
  */
42
44
  tag: 'article'
43
45
  }
@@ -173,9 +175,8 @@ class ContentComponent extends Component {
173
175
  baseConfigs = {appName, autoMount: true, autoRender: true, parentComponent: me, windowId};
174
176
  data = await fetch(path);
175
177
  content = await data.text();
176
- // Update content sections (modifies markdown content with h2/h3 tags and IDs)
178
+ // Update content sections (modifies markdown content with h1/h2/h3 tags and IDs)
177
179
  content = me.updateContentSectionsStore(content);
178
- content = `<h1 class='neo-h1'>${record.name}</h1>\n${content}`;
179
180
  // Initialize maps for custom components and live previews
180
181
  neoComponents = {};
181
182
  neoDivs = {};
@@ -342,14 +343,19 @@ class ContentComponent extends Component {
342
343
  contentArray.forEach((line, index) => {
343
344
  tag = null;
344
345
 
345
- if (line.startsWith('##') && line.charAt(2) !== '#') {
346
+ if (line.startsWith('#') && line.charAt(1) !== '#') {
347
+ line = line.substring(1).trim();
348
+ tag = 'h1'
349
+ }
350
+
351
+ else if (line.startsWith('##') && line.charAt(2) !== '#') {
346
352
  line = line.substring(2).trim();
347
- tag = 'h2';
353
+ tag = 'h2'
348
354
  }
349
355
 
350
356
  else if (line.startsWith('###') && line.charAt(3) !== '#') {
351
357
  line = line.substring(3).trim();
352
- tag = 'h3';
358
+ tag = 'h3'
353
359
  }
354
360
 
355
361
  if (tag) {
@@ -21,10 +21,12 @@ class ContentTreeList extends TreeList {
21
21
  },
22
22
  /**
23
23
  * @member {String[]} cls=['topics-tree']
24
+ * @reactive
24
25
  */
25
26
  cls: ['topics-tree'],
26
27
  /**
27
28
  * @member {String|null} contentPath_=null
29
+ * @reactive
28
30
  */
29
31
  contentPath_: null,
30
32
  /**
@@ -13,6 +13,7 @@ class CubeLayoutButton extends Button {
13
13
  className: 'Portal.view.learn.CubeLayoutButton',
14
14
  /**
15
15
  * @member {String|null} activeLayout_=null
16
+ * @reactive
16
17
  */
17
18
  activeLayout_: null,
18
19
  }
@@ -19,10 +19,12 @@ class MainContainer extends Container {
19
19
  className: 'Portal.view.learn.MainContainer',
20
20
  /**
21
21
  * @member {String[]} cls=['portal-learn-maincontainer']
22
+ * @reactive
22
23
  */
23
24
  cls: ['portal-learn-maincontainer'],
24
25
  /**
25
26
  * @member {Neo.controller.Component} controller=MainContainerController
27
+ * @reactive
26
28
  */
27
29
  controller: MainContainerController,
28
30
  /**
@@ -61,10 +63,12 @@ class MainContainer extends Container {
61
63
  }],
62
64
  /**
63
65
  * @member {Object} layout={ntype:'hbox',align:'stretch'}
66
+ * @reactive
64
67
  */
65
68
  layout: {ntype: 'hbox', align: 'stretch'},
66
69
  /**
67
70
  * @member {Neo.state.Provider} stateProvider=MainContainerStateProvider
71
+ * @reactive
68
72
  */
69
73
  stateProvider: MainContainerStateProvider
70
74
  }
@@ -60,10 +60,12 @@ class PageContainer extends Container {
60
60
  }],
61
61
  /**
62
62
  * @member {Object} nextPageRecord_=null
63
+ * @reactive
63
64
  */
64
65
  nextPageRecord_: null,
65
66
  /**
66
67
  * @member {Object} previousPageRecord_=null
68
+ * @reactive
67
69
  */
68
70
  previousPageRecord_: null
69
71
  }
@@ -14,6 +14,7 @@ class PageSectionsContainer extends Container {
14
14
  className: 'Portal.view.learn.PageSectionsContainer',
15
15
  /**
16
16
  * @member {String[]} cls=['portal-page-sections-container']
17
+ * @reactive
17
18
  */
18
19
  cls: ['portal-page-sections-container'],
19
20
  /**
@@ -42,10 +43,12 @@ class PageSectionsContainer extends Container {
42
43
  }],
43
44
  /**
44
45
  * @member {Object} layout={ntype:'vbox'}
46
+ * @reactive
45
47
  */
46
48
  layout: {ntype: 'vbox'},
47
49
  /**
48
50
  * @member {String} tag='aside'
51
+ * @reactive
49
52
  */
50
53
  tag: 'aside'
51
54
  }
@@ -19,6 +19,7 @@ class PageSectionsList extends List {
19
19
  },
20
20
  /**
21
21
  * @member {String[]} cls=['portal-page-sections-list','topics-tree']
22
+ * @reactive
22
23
  */
23
24
  cls: ['portal-page-sections-list', 'topics-tree']
24
25
  }
@@ -13,6 +13,7 @@ class Component extends BaseComponent {
13
13
  className: 'Portal.view.services.Component',
14
14
  /**
15
15
  * @member {String[]} cls=['portal-services-component']
16
+ * @reactive
16
17
  */
17
18
  cls: ['portal-services-component'],
18
19
  /**
@@ -31,6 +31,7 @@ class Base extends CoreBase {
31
31
  defaultHeaders: null,
32
32
  /**
33
33
  * @member {Boolean} isReady=false
34
+ * @reactive
34
35
  */
35
36
  isReady: false,
36
37
  /**
@@ -14,6 +14,7 @@ class HeaderComponent extends Component {
14
14
  className: 'RealWorld.view.HeaderComponent',
15
15
  /**
16
16
  * @member {String} activeItem_='home'
17
+ * @reactive
17
18
  */
18
19
  activeItem_: 'home',
19
20
  /**
@@ -22,14 +23,17 @@ class HeaderComponent extends Component {
22
23
  baseCls: ['navbar', 'navbar-light'],
23
24
  /**
24
25
  * @member {Boolean} loggedIn_=false
26
+ * @reactive
25
27
  */
26
28
  loggedIn_: false,
27
29
  /**
28
30
  * @member {String|null} userImage_=null
31
+ * @reactive
29
32
  */
30
33
  userImage_:null,
31
34
  /**
32
35
  * @member {String|null} userName_=null
36
+ * @reactive
33
37
  */
34
38
  userName_: null,
35
39
  /**
@@ -21,6 +21,7 @@ class HomeComponent extends Component {
21
21
  activeTag: null,
22
22
  /**
23
23
  * @member {Object[]|null} articlePreviews_=null
24
+ * @reactive
24
25
  */
25
26
  articlePreviews_: null,
26
27
  /**
@@ -29,14 +30,17 @@ class HomeComponent extends Component {
29
30
  baseCls: ['home-page'],
30
31
  /**
31
32
  * @member {Number} countArticles_=10
33
+ * @reactive
32
34
  */
33
35
  countArticles_: 10,
34
36
  /**
35
37
  * @member {Number} countArticles_=10
38
+ * @reactive
36
39
  */
37
40
  currentPage_: 1,
38
41
  /**
39
42
  * @member {Object[]} feeds_
43
+ * @reactive
40
44
  */
41
45
  feeds_: [
42
46
  {name: 'Your Feed', disabled: true},
@@ -44,10 +48,12 @@ class HomeComponent extends Component {
44
48
  ],
45
49
  /**
46
50
  * @member {Boolean} loggedIn_=false
51
+ * @reactive
47
52
  */
48
53
  loggedIn_: false,
49
54
  /**
50
55
  * @member {Number} pageSize_=10
56
+ * @reactive
51
57
  */
52
58
  pageSize_: 10,
53
59
  /**
@@ -56,6 +62,7 @@ class HomeComponent extends Component {
56
62
  previewComponents: [],
57
63
  /**
58
64
  * @member {RealWorld.view.article.TagListComponent|null} tagList_=null
65
+ * @reactive
59
66
  */
60
67
  tagList_: null,
61
68
  /**
@@ -20,10 +20,12 @@ class MainContainer extends Viewport {
20
20
  baseCls: [],
21
21
  /**
22
22
  * @member {Neo.controller.Component} controller=MainContainerController
23
+ * @reactive
23
24
  */
24
25
  controller: MainContainerController,
25
26
  /**
26
27
  * @member {Object} layout={ntype: 'vbox'}
28
+ * @reactive
27
29
  */
28
30
  layout: {ntype: 'base'},
29
31
 
@@ -31,6 +31,7 @@ class MainContainerController extends ComponentController {
31
31
  articleComponent: null,
32
32
  /**
33
33
  * @member {Number} articlesOffset_=0
34
+ * @reactive
34
35
  */
35
36
  articlesOffset_: 0,
36
37
  /**
@@ -42,6 +43,7 @@ class MainContainerController extends ComponentController {
42
43
  * Stores the current user data after logging in
43
44
  * @member {Object|null} currentUser_=null
44
45
  * @protected
46
+ * @reactive
45
47
  */
46
48
  currentUser_: null,
47
49
  /**
@@ -14,6 +14,7 @@ class CommentComponent extends Component {
14
14
  className: 'RealWorld.view.article.CommentComponent',
15
15
  /**
16
16
  * @member {Object|null} author_=null
17
+ * @reactive
17
18
  */
18
19
  author_: null,
19
20
  /**
@@ -22,6 +23,7 @@ class CommentComponent extends Component {
22
23
  baseCls: ['card'],
23
24
  /**
24
25
  * @member {String|null} body_=null
26
+ * @reactive
25
27
  */
26
28
  body_: null,
27
29
  /**
@@ -30,6 +32,7 @@ class CommentComponent extends Component {
30
32
  commentId: null,
31
33
  /**
32
34
  * @member {String|null} createdAt_=null
35
+ * @reactive
33
36
  */
34
37
  createdAt_: null,
35
38
  /**
@@ -16,6 +16,7 @@ class Component extends BaseComponent {
16
16
  className: 'RealWorld.view.article.Component',
17
17
  /**
18
18
  * @member {Object|null} author_=null
19
+ * @reactive
19
20
  */
20
21
  author_: null,
21
22
  /**
@@ -24,6 +25,7 @@ class Component extends BaseComponent {
24
25
  baseCls: ['article-page'],
25
26
  /**
26
27
  * @member {String|null} body_=null
28
+ * @reactive
27
29
  */
28
30
  body_: null,
29
31
  /**
@@ -38,6 +40,7 @@ class Component extends BaseComponent {
38
40
  commentComponents: [],
39
41
  /**
40
42
  * @member {Object[]|null} comments_=null
43
+ * @reactive
41
44
  */
42
45
  comments_: null,
43
46
  /**
@@ -46,22 +49,27 @@ class Component extends BaseComponent {
46
49
  createCommentComponent: null,
47
50
  /**
48
51
  * @member {String|null} createdAt_=null
52
+ * @reactive
49
53
  */
50
54
  createdAt_: null,
51
55
  /**
52
56
  * @member {Boolean} favorited_=false
57
+ * @reactive
53
58
  */
54
59
  favorited_: false,
55
60
  /**
56
61
  * @member {Number|null} favoritesCount_=null
62
+ * @reactive
57
63
  */
58
64
  favoritesCount_: null,
59
65
  /**
60
66
  * @member {Array|null} tagList_=null
67
+ * @reactive
61
68
  */
62
69
  tagList_: null,
63
70
  /**
64
71
  * @member {String|null} title_=null
72
+ * @reactive
65
73
  */
66
74
  title_: null,
67
75
  /**
@@ -80,7 +88,7 @@ class Component extends BaseComponent {
80
88
  {tag: 'a', cls: ['author'], flag: 'username'},
81
89
  {tag: 'span', cls: ['date'], flag: 'createdAt'}
82
90
  ]},
83
- {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-secondary', 'follow-button'], cn: [
91
+ {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-secondary', 'follow-button'], flag: 'follow-button', cn: [
84
92
  {tag: 'i', flag: 'followIcon'},
85
93
  {vtype: 'text', flag: 'followAuthor'},
86
94
  {vtype: 'text', flag: 'username'}
@@ -93,7 +101,7 @@ class Component extends BaseComponent {
93
101
  {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-primary', 'favorite-button'], flag: 'favorited', cn: [
94
102
  {tag: 'i', cls: ['ion-heart']},
95
103
  {vtype: 'text', html: '&nbsp;'},
96
- {vtype: 'text'},
104
+ {vtype: 'text', flag: 'favorite-text'},
97
105
  {vtype: 'text', text: ' Post '},
98
106
  {tag: 'span', cls: ['counter'], flag: 'favoritesCount'}
99
107
  ]},
@@ -116,7 +124,7 @@ class Component extends BaseComponent {
116
124
  {tag: 'a', cls: ['author'], flag: 'username'},
117
125
  {tag: 'span', cls: ['date'], text: 'January 20th'}
118
126
  ]},
119
- {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-secondary', 'follow-button'], cn: [
127
+ {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-secondary', 'follow-button'], flag: 'follow-button', cn: [
120
128
  {tag: 'i', flag: 'followIcon'},
121
129
  {vtype: 'text', flag: 'followAuthor'},
122
130
  {vtype: 'text', flag: 'username'}
@@ -125,7 +133,7 @@ class Component extends BaseComponent {
125
133
  {tag: 'button', cls: ['btn', 'btn-sm', 'btn-outline-primary', 'favorite-button'], flag: 'favorited', cn: [
126
134
  {tag: 'i', cls: ['ion-heart']},
127
135
  {vtype: 'text', html: '&nbsp;'},
128
- {vtype: 'text'},
136
+ {vtype: 'text', flag: 'favorite-text'},
129
137
  {vtype: 'text', text: ' Post '},
130
138
  {tag: 'span', cls: ['counter'], flag: 'favoritesCount'}
131
139
  ]}
@@ -306,7 +314,7 @@ class Component extends BaseComponent {
306
314
  let me = this;
307
315
 
308
316
  VDomUtil.getFlags(me.vdom, 'favorited').forEach(node => {
309
- node.cn[2].text = value ? 'Unfavorite' : 'Favorite';
317
+ VDomUtil.getByFlag(node, 'favorite-text').text = value ? 'Unfavorite' : 'Favorite';
310
318
 
311
319
  NeoArray.add(node.cls, value ? 'btn-primary' : 'btn-outline-primary');
312
320
  NeoArray.remove(node.cls, value ? 'btn-outline-primary' : 'btn-primary');
@@ -388,7 +396,7 @@ class Component extends BaseComponent {
388
396
  /**
389
397
  *
390
398
  */
391
- onCurrentUserChange() {console.log('### onCurrentUserChange');
399
+ onCurrentUserChange() {
392
400
  let me = this,
393
401
  currentUser = me.getController().currentUser,
394
402
  vdom = me.vdom,
@@ -397,10 +405,9 @@ class Component extends BaseComponent {
397
405
  if (me.author && currentUser) {
398
406
  isCurrentUser = me.author.username === currentUser.username;
399
407
 
400
- vdom.cn[0].cn[0].cn[1].cn[2].removeDom = isCurrentUser; // follow user button
401
- vdom.cn[0].cn[0].cn[1].cn[5].removeDom = isCurrentUser; // favorite post button
402
-
403
- VDomUtil.getByFlag(vdom, 'article-actions').removeDom = isCurrentUser;
408
+ VDomUtil.getFlags(vdom, 'follow-button').forEach(node => node.removeDom = isCurrentUser);
409
+ VDomUtil.getFlags(vdom, 'favorited').forEach(node => node.removeDom = isCurrentUser);
410
+ VDomUtil.getByFlag(vdom, 'article-actions').removeDom = isCurrentUser; // this one is unique
404
411
  VDomUtil.getByFlag(vdom, 'delete-button') .removeDom = !isCurrentUser;
405
412
  VDomUtil.getByFlag(vdom, 'edit-button') .removeDom = !isCurrentUser;
406
413
 
@@ -17,10 +17,12 @@ class CreateCommentComponent extends Component {
17
17
  baseCls: ['card', 'comment-form'],
18
18
  /**
19
19
  * @member {String|null} userImage_=null
20
+ * @reactive
20
21
  */
21
22
  userImage_: null,
22
23
  /**
23
24
  * @member {String|null} userName_=null
25
+ * @reactive
24
26
  */
25
27
  userName_: null,
26
28
  /**
@@ -20,14 +20,17 @@ class CreateComponent extends Component {
20
20
  baseCls: ['editor-page'],
21
21
  /**
22
22
  * @member {String} body_=''
23
+ * @reactive
23
24
  */
24
25
  body_: '',
25
26
  /**
26
27
  * @member {Object[]} errors_=[]
28
+ * @reactive
27
29
  */
28
30
  errors_: [],
29
31
  /**
30
32
  * @member {String} description_=''
33
+ * @reactive
31
34
  */
32
35
  description_: '',
33
36
  /**
@@ -36,10 +39,12 @@ class CreateComponent extends Component {
36
39
  slug: null,
37
40
  /**
38
41
  * @member {String[]} tagList_=[]
42
+ * @reactive
39
43
  */
40
44
  tagList_: [],
41
45
  /**
42
46
  * @member {String} title_=''
47
+ * @reactive
43
48
  */
44
49
  title_: '',
45
50
  /**
@@ -15,6 +15,7 @@ class PreviewComponent extends Component {
15
15
  className: 'RealWorld.view.article.PreviewComponent',
16
16
  /**
17
17
  * @member {String|null} author_=null
18
+ * @reactive
18
19
  */
19
20
  author_: null,
20
21
  /**
@@ -24,34 +25,42 @@ class PreviewComponent extends Component {
24
25
  /**
25
26
  * ISO 8601 timestamp
26
27
  * @member {String|null} createdAt_=null
28
+ * @reactive
27
29
  */
28
30
  createdAt_: null,
29
31
  /**
30
32
  * @member {String|null} description_=null
33
+ * @reactive
31
34
  */
32
35
  description_: null,
33
36
  /**
34
37
  * @member {Boolean} favorited_=false
38
+ * @reactive
35
39
  */
36
40
  favorited_: false,
37
41
  /**
38
42
  * @member {Number|null} favoritesCount_=null
43
+ * @reactive
39
44
  */
40
45
  favoritesCount_: null,
41
46
  /**
42
47
  * @member {String|null} slug_=null
48
+ * @reactive
43
49
  */
44
50
  slug_: null,
45
51
  /**
46
52
  * @member {Array|null} tagList_=null
53
+ * @reactive
47
54
  */
48
55
  tagList_: null,
49
56
  /**
50
57
  * @member {String|null} title_=null
58
+ * @reactive
51
59
  */
52
60
  title_: null,
53
61
  /**
54
62
  * @member {String|null} userImage_=null
63
+ * @reactive
55
64
  */
56
65
  userImage_: null,
57
66
  /**
@@ -20,6 +20,7 @@ class TagListComponent extends Component {
20
20
  className: 'RealWorld.view.article.TagListComponent',
21
21
  /**
22
22
  * @member {String|null} activeTag_
23
+ * @reactive
23
24
  */
24
25
  activeTag_: null,
25
26
  /**
@@ -28,6 +29,7 @@ class TagListComponent extends Component {
28
29
  baseCls: ['col-md-3'],
29
30
  /**
30
31
  * @member {String[]} tags_=[]
32
+ * @reactive
31
33
  */
32
34
  tags_: [],
33
35
  /**
@@ -16,6 +16,7 @@ class ProfileComponent extends Component {
16
16
  className: 'RealWorld.view.user.ProfileComponent',
17
17
  /**
18
18
  * @member {Object[]|null} articlePreviews_=null
19
+ * @reactive
19
20
  */
20
21
  articlePreviews_: null,
21
22
  /**
@@ -24,22 +25,27 @@ class ProfileComponent extends Component {
24
25
  baseCls: ['profile-page'],
25
26
  /**
26
27
  * @member {String|null} bio_=null
28
+ * @reactive
27
29
  */
28
30
  bio_: null,
29
31
  /**
30
32
  * @member {Number} countArticles_=5
33
+ * @reactive
31
34
  */
32
35
  countArticles_: 5,
33
36
  /**
34
37
  * @member {Boolean|null} following_=null
38
+ * @reactive
35
39
  */
36
40
  following_: null,
37
41
  /**
38
42
  * @member {String|null} image_=null
43
+ * @reactive
39
44
  */
40
45
  image_: null,
41
46
  /**
42
47
  * @member {Boolean} myProfile_=false
48
+ * @reactive
43
49
  */
44
50
  myProfile_: false,
45
51
  /**
@@ -48,6 +54,7 @@ class ProfileComponent extends Component {
48
54
  previewComponents: [],
49
55
  /**
50
56
  * @member {String|null} username_=null
57
+ * @reactive
51
58
  */
52
59
  username_: null,
53
60
  /**
@@ -18,22 +18,27 @@ class SettingsComponent extends Component {
18
18
  baseCls: ['settings-page'],
19
19
  /**
20
20
  * @member {String} bio_=null
21
+ * @reactive
21
22
  */
22
23
  bio_: null,
23
24
  /**
24
25
  * @member {String} email_=null
26
+ * @reactive
25
27
  */
26
28
  email_: null,
27
29
  /**
28
30
  * @member {Object[]} errors_=[]
31
+ * @reactive
29
32
  */
30
33
  errors_: [],
31
34
  /**
32
35
  * @member {String} image_=null
36
+ * @reactive
33
37
  */
34
38
  image_: null,
35
39
  /**
36
40
  * @member {String} userName_=null
41
+ * @reactive
37
42
  */
38
43
  userName_: null,
39
44
  /**