neo.mjs 10.0.0-beta.5 → 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 (468) hide show
  1. package/.github/RELEASE_NOTES/v10.0.0-beta.5.md +70 -0
  2. package/.github/RELEASE_NOTES/v10.0.0-beta.6.md +48 -0
  3. package/.github/epic-functional-components.md +498 -0
  4. package/.github/ticket-asymmetric-vdom-updates.md +122 -0
  5. package/README.md +0 -3
  6. package/ServiceWorker.mjs +2 -2
  7. package/apps/colors/store/Colors.mjs +1 -0
  8. package/apps/colors/view/GridContainer.mjs +3 -0
  9. package/apps/colors/view/HeaderToolbar.mjs +2 -0
  10. package/apps/colors/view/Viewport.mjs +3 -0
  11. package/apps/covid/view/FooterContainer.mjs +3 -0
  12. package/apps/covid/view/GalleryContainer.mjs +2 -0
  13. package/apps/covid/view/GalleryContainerController.mjs +1 -0
  14. package/apps/covid/view/HeaderContainer.mjs +2 -0
  15. package/apps/covid/view/HelixContainer.mjs +2 -0
  16. package/apps/covid/view/HelixContainerController.mjs +1 -0
  17. package/apps/covid/view/MainContainer.mjs +3 -0
  18. package/apps/covid/view/TableContainer.mjs +3 -0
  19. package/apps/covid/view/TableContainerController.mjs +1 -0
  20. package/apps/covid/view/WorldMapContainer.mjs +2 -0
  21. package/apps/covid/view/country/Gallery.mjs +3 -0
  22. package/apps/covid/view/country/Helix.mjs +8 -0
  23. package/apps/covid/view/country/HistoricalDataTable.mjs +1 -0
  24. package/apps/covid/view/country/Table.mjs +2 -0
  25. package/apps/covid/view/mapboxGl/Component.mjs +1 -0
  26. package/apps/covid/view/mapboxGl/Container.mjs +2 -0
  27. package/apps/email/EPIC_PLAN.md +58 -0
  28. package/apps/email/neo-config.json +2 -2
  29. package/apps/email/store/Emails.mjs +11 -1
  30. package/apps/email/view/ComposeView.mjs +44 -0
  31. package/apps/email/view/MainView.mjs +89 -0
  32. package/apps/email/view/Viewport.mjs +4 -33
  33. package/apps/email/view/ViewportStateProvider.mjs +3 -3
  34. package/apps/form/store/SideNav.mjs +1 -0
  35. package/apps/form/view/FormContainer.mjs +1 -0
  36. package/apps/form/view/FormPageContainer.mjs +2 -0
  37. package/apps/form/view/SideNavList.mjs +1 -0
  38. package/apps/form/view/Viewport.mjs +3 -0
  39. package/apps/portal/childapps/preview/MainContainer.mjs +1 -0
  40. package/apps/portal/index.html +1 -1
  41. package/apps/portal/store/BlogPosts.mjs +2 -0
  42. package/apps/portal/store/Content.mjs +1 -0
  43. package/apps/portal/store/ContentSections.mjs +1 -0
  44. package/apps/portal/store/Examples.mjs +1 -0
  45. package/apps/portal/view/HeaderToolbar.mjs +1 -0
  46. package/apps/portal/view/Viewport.mjs +5 -0
  47. package/apps/portal/view/ViewportController.mjs +8 -2
  48. package/apps/portal/view/about/Container.mjs +2 -0
  49. package/apps/portal/view/about/MemberContainer.mjs +7 -0
  50. package/apps/portal/view/blog/Container.mjs +2 -0
  51. package/apps/portal/view/blog/List.mjs +2 -0
  52. package/apps/portal/view/examples/List.mjs +1 -0
  53. package/apps/portal/view/examples/TabContainer.mjs +4 -0
  54. package/apps/portal/view/home/ContentBox.mjs +3 -0
  55. package/apps/portal/view/home/FeatureSection.mjs +8 -0
  56. package/apps/portal/view/home/FooterContainer.mjs +4 -1
  57. package/apps/portal/view/home/MainContainer.mjs +2 -0
  58. package/apps/portal/view/home/parts/AfterMath.mjs +2 -0
  59. package/apps/portal/view/home/parts/BaseContainer.mjs +1 -0
  60. package/apps/portal/view/home/parts/Colors.mjs +4 -0
  61. package/apps/portal/view/home/parts/Features.mjs +2 -0
  62. package/apps/portal/view/home/parts/Helix.mjs +5 -0
  63. package/apps/portal/view/home/parts/How.mjs +4 -0
  64. package/apps/portal/view/home/parts/MainNeo.mjs +1 -0
  65. package/apps/portal/view/home/parts/References.mjs +2 -0
  66. package/apps/portal/view/learn/ContentComponent.mjs +11 -5
  67. package/apps/portal/view/learn/ContentTreeList.mjs +2 -0
  68. package/apps/portal/view/learn/CubeLayoutButton.mjs +1 -0
  69. package/apps/portal/view/learn/MainContainer.mjs +4 -0
  70. package/apps/portal/view/learn/PageContainer.mjs +2 -0
  71. package/apps/portal/view/learn/PageSectionsContainer.mjs +3 -0
  72. package/apps/portal/view/learn/PageSectionsList.mjs +1 -0
  73. package/apps/portal/view/services/Component.mjs +1 -0
  74. package/apps/realworld/api/Base.mjs +1 -0
  75. package/apps/realworld/view/HeaderComponent.mjs +4 -0
  76. package/apps/realworld/view/HomeComponent.mjs +7 -0
  77. package/apps/realworld/view/MainContainer.mjs +2 -0
  78. package/apps/realworld/view/MainContainerController.mjs +2 -0
  79. package/apps/realworld/view/article/CommentComponent.mjs +3 -0
  80. package/apps/realworld/view/article/Component.mjs +17 -10
  81. package/apps/realworld/view/article/CreateCommentComponent.mjs +2 -0
  82. package/apps/realworld/view/article/CreateComponent.mjs +5 -0
  83. package/apps/realworld/view/article/PreviewComponent.mjs +9 -0
  84. package/apps/realworld/view/article/TagListComponent.mjs +2 -0
  85. package/apps/realworld/view/user/ProfileComponent.mjs +7 -0
  86. package/apps/realworld/view/user/SettingsComponent.mjs +5 -0
  87. package/apps/realworld/view/user/SignUpComponent.mjs +3 -0
  88. package/apps/realworld2/api/Base.mjs +1 -0
  89. package/apps/realworld2/view/FooterComponent.mjs +1 -0
  90. package/apps/realworld2/view/HeaderToolbar.mjs +3 -0
  91. package/apps/realworld2/view/HomeContainer.mjs +1 -0
  92. package/apps/realworld2/view/MainContainer.mjs +2 -0
  93. package/apps/realworld2/view/MainContainerController.mjs +1 -0
  94. package/apps/realworld2/view/article/Helix.mjs +1 -0
  95. package/apps/realworld2/view/article/PreviewComponent.mjs +9 -0
  96. package/apps/realworld2/view/article/PreviewList.mjs +1 -0
  97. package/apps/realworld2/view/article/TagListComponent.mjs +2 -0
  98. package/apps/route/view/CenterContainer.mjs +1 -0
  99. package/apps/route/view/MainView.mjs +1 -0
  100. package/apps/sharedcovid/childapps/sharedcovidchart/MainContainer.mjs +1 -0
  101. package/apps/sharedcovid/childapps/sharedcovidgallery/MainContainer.mjs +1 -0
  102. package/apps/sharedcovid/childapps/sharedcovidhelix/MainContainer.mjs +1 -0
  103. package/apps/sharedcovid/childapps/sharedcovidmap/MainContainer.mjs +1 -0
  104. package/apps/sharedcovid/view/FooterContainer.mjs +3 -0
  105. package/apps/sharedcovid/view/GalleryContainer.mjs +2 -0
  106. package/apps/sharedcovid/view/GalleryContainerController.mjs +1 -0
  107. package/apps/sharedcovid/view/HeaderContainer.mjs +2 -0
  108. package/apps/sharedcovid/view/HelixContainer.mjs +2 -0
  109. package/apps/sharedcovid/view/HelixContainerController.mjs +1 -0
  110. package/apps/sharedcovid/view/MainContainer.mjs +3 -0
  111. package/apps/sharedcovid/view/TableContainer.mjs +3 -0
  112. package/apps/sharedcovid/view/TableContainerController.mjs +1 -0
  113. package/apps/sharedcovid/view/WorldMapContainer.mjs +2 -0
  114. package/apps/sharedcovid/view/country/Gallery.mjs +3 -0
  115. package/apps/sharedcovid/view/country/Helix.mjs +8 -0
  116. package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -0
  117. package/apps/sharedcovid/view/country/Table.mjs +2 -0
  118. package/apps/sharedcovid/view/mapboxGl/Component.mjs +1 -0
  119. package/apps/sharedcovid/view/mapboxGl/Container.mjs +2 -0
  120. package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +2 -0
  121. package/apps/shareddialog/view/DemoDialog.mjs +2 -0
  122. package/apps/shareddialog/view/MainContainer.mjs +2 -0
  123. package/apps/shareddialog/view/MainContainerController.mjs +1 -0
  124. package/buildScripts/addReactiveTags.mjs +191 -0
  125. package/buildScripts/checkReactiveTags.mjs +160 -0
  126. package/docs/app/store/Api.mjs +1 -0
  127. package/docs/app/store/Examples.mjs +1 -0
  128. package/docs/app/view/ApiTreeList.mjs +1 -0
  129. package/docs/app/view/ContentTabContainer.mjs +2 -0
  130. package/docs/app/view/ExamplesTreeList.mjs +2 -0
  131. package/docs/app/view/HeaderContainer.mjs +3 -0
  132. package/docs/app/view/MainContainer.mjs +5 -0
  133. package/docs/app/view/classdetails/HeaderComponent.mjs +1 -0
  134. package/docs/app/view/classdetails/MainContainer.mjs +3 -0
  135. package/docs/app/view/classdetails/MembersList.mjs +5 -0
  136. package/docs/app/view/classdetails/SourceViewComponent.mjs +2 -0
  137. package/examples/ConfigurationViewport.mjs +14 -8
  138. package/examples/calendar/weekview/MainContainer.mjs +4 -0
  139. package/examples/component/coronaGallery/CountryGallery.mjs +2 -0
  140. package/examples/component/coronaGallery/CountryStore.mjs +1 -0
  141. package/examples/component/coronaGallery/Viewport.mjs +3 -0
  142. package/examples/component/coronaGallery/ViewportController.mjs +1 -0
  143. package/examples/component/coronaHelix/CountryHelix.mjs +7 -0
  144. package/examples/component/coronaHelix/MainContainer.mjs +1 -0
  145. package/examples/component/gallery/ImageStore.mjs +1 -0
  146. package/examples/component/helix/ImageStore.mjs +1 -0
  147. package/examples/component/helix/Viewport.mjs +3 -0
  148. package/examples/component/helix/ViewportController.mjs +1 -0
  149. package/examples/component/multiWindowCoronaGallery/childapp/Viewport.mjs +1 -0
  150. package/examples/component/multiWindowHelix/childapp/Viewport.mjs +1 -0
  151. package/examples/component/wrapper/googleMaps/MapComponent.mjs +2 -0
  152. package/examples/core/config/MainContainer.mjs +2 -0
  153. package/examples/dialog/DemoDialog.mjs +2 -0
  154. package/examples/dialog/MainContainer.mjs +1 -0
  155. package/examples/form/field/color/MainStore.mjs +1 -0
  156. package/examples/functional/defineComponent/Component.mjs +18 -0
  157. package/examples/functional/defineComponent/MainContainer.mjs +41 -0
  158. package/examples/functional/defineComponent/app.mjs +6 -0
  159. package/examples/functional/defineComponent/index.html +11 -0
  160. package/examples/functional/defineComponent/neo-config.json +6 -0
  161. package/examples/functional/hostComponent/Component.mjs +32 -0
  162. package/examples/functional/hostComponent/MainContainer.mjs +48 -0
  163. package/examples/functional/hostComponent/app.mjs +6 -0
  164. package/examples/functional/hostComponent/index.html +11 -0
  165. package/examples/functional/hostComponent/neo-config.json +6 -0
  166. package/examples/grid/animatedRowSorting/Viewport.mjs +1 -1
  167. package/examples/grid/bigData/ControlsContainer.mjs +3 -0
  168. package/examples/grid/bigData/GridContainer.mjs +4 -2
  169. package/examples/grid/bigData/MainContainer.mjs +2 -0
  170. package/examples/grid/bigData/MainModel.mjs +1 -0
  171. package/examples/grid/bigData/MainStore.mjs +3 -0
  172. package/examples/grid/cellEditing/MainContainer.mjs +1 -1
  173. package/examples/grid/container/MainContainer.mjs +1 -1
  174. package/examples/grid/covid/GridContainer.mjs +3 -0
  175. package/examples/grid/covid/MainContainer.mjs +2 -0
  176. package/examples/grid/covid/Store.mjs +1 -0
  177. package/examples/grid/nestedRecordFields/EditUserDialog.mjs +3 -0
  178. package/examples/grid/nestedRecordFields/Viewport.mjs +3 -1
  179. package/examples/list/animate/List.mjs +4 -0
  180. package/examples/list/animate/MainContainer.mjs +2 -0
  181. package/examples/list/circle/MainStore.mjs +1 -0
  182. package/examples/list/color/MainStore.mjs +1 -0
  183. package/examples/preloadingAssets/view/MainContainer.mjs +2 -0
  184. package/examples/stateProvider/advanced/MainContainer.mjs +1 -0
  185. package/examples/stateProvider/dialog/EditUserDialog.mjs +2 -0
  186. package/examples/stateProvider/dialog/MainContainer.mjs +1 -0
  187. package/examples/stateProvider/extendedClass/MainContainer.mjs +2 -0
  188. package/examples/stateProvider/inline/MainContainer.mjs +1 -0
  189. package/examples/stateProvider/inlineNoStateProvider/MainContainer.mjs +1 -0
  190. package/examples/stateProvider/inlineNoStateProvider/MainContainerController.mjs +2 -0
  191. package/examples/stateProvider/multiWindow/EditUserDialog.mjs +3 -0
  192. package/examples/stateProvider/multiWindow/MainContainer.mjs +1 -0
  193. package/examples/stateProvider/multiWindow/Viewport.mjs +1 -0
  194. package/examples/stateProvider/nestedData/MainContainer.mjs +1 -0
  195. package/examples/stateProvider/table/MainContainer.mjs +1 -0
  196. package/examples/table/covid/MainContainer.mjs +2 -0
  197. package/examples/table/covid/Store.mjs +1 -0
  198. package/examples/table/covid/TableContainer.mjs +3 -0
  199. package/examples/table/nestedRecordFields/EditUserDialog.mjs +3 -0
  200. package/examples/table/nestedRecordFields/Viewport.mjs +1 -0
  201. package/examples/todoList/version1/MainComponent.mjs +1 -1
  202. package/examples/toolbar/breadcrumb/view/MainContainer.mjs +2 -0
  203. package/examples/toolbar/paging/store/Users.mjs +1 -0
  204. package/examples/toolbar/paging/view/AddUserDialog.mjs +3 -0
  205. package/examples/toolbar/paging/view/MainContainer.mjs +3 -0
  206. package/examples/treeAccordion/MainContainer.mjs +2 -2
  207. package/examples/worker/task/MainContainer.mjs +1 -0
  208. package/learn/Glossary.md +1 -0
  209. package/learn/UsingTheseTopics.md +1 -0
  210. package/learn/benefits/ConfigSystem.md +2 -0
  211. package/learn/benefits/Effort.md +1 -0
  212. package/learn/benefits/Features.md +1 -0
  213. package/learn/benefits/FormsEngine.md +1 -0
  214. package/learn/benefits/FourEnvironments.md +2 -0
  215. package/learn/benefits/Introduction.md +2 -0
  216. package/learn/benefits/MultiWindow.md +3 -1
  217. package/learn/benefits/OffTheMainThread.md +2 -0
  218. package/learn/benefits/Quick.md +2 -0
  219. package/learn/benefits/RPCLayer.md +2 -0
  220. package/learn/benefits/Speed.md +2 -0
  221. package/learn/comparisons/NeoVsAngular.md +90 -0
  222. package/learn/comparisons/NeoVsExtJs.md +178 -0
  223. package/learn/comparisons/NeoVsNextJs.md +124 -0
  224. package/learn/comparisons/NeoVsReact.md +95 -0
  225. package/learn/comparisons/NeoVsSolid.md +78 -0
  226. package/learn/comparisons/NeoVsVue.md +92 -0
  227. package/learn/comparisons/Overview.md +46 -0
  228. package/learn/gettingstarted/ComponentModels.md +2 -0
  229. package/learn/gettingstarted/Config.md +2 -0
  230. package/learn/gettingstarted/DescribingTheUI.md +2 -0
  231. package/learn/gettingstarted/Events.md +2 -0
  232. package/learn/gettingstarted/Extending.md +2 -0
  233. package/learn/gettingstarted/References.md +2 -0
  234. package/learn/gettingstarted/Setup.md +3 -2
  235. package/learn/gettingstarted/Workspaces.md +2 -0
  236. package/learn/guides/datahandling/Collections.md +1 -0
  237. package/learn/guides/datahandling/Records.md +1 -0
  238. package/learn/guides/datahandling/StateProviders.md +130 -16
  239. package/learn/guides/datahandling/Tables.md +1 -1
  240. package/learn/guides/fundamentals/ConfigSystemDeepDive.md +1 -0
  241. package/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom.md +2 -0
  242. package/learn/guides/fundamentals/DeclarativeVDOMWithEffects.md +10 -8
  243. package/learn/guides/fundamentals/ExtendingNeoClasses.md +1 -0
  244. package/learn/guides/fundamentals/InstanceLifecycle.md +3 -1
  245. package/learn/guides/fundamentals/MainThreadAddons.md +2 -0
  246. package/learn/guides/specificfeatures/Mixins.md +3 -1
  247. package/learn/guides/specificfeatures/MultiWindow.md +3 -1
  248. package/learn/guides/specificfeatures/PortalApp.md +2 -0
  249. package/learn/guides/uibuildingblocks/ComponentsAndContainers.md +2 -0
  250. package/learn/guides/uibuildingblocks/CustomComponents.md +2 -0
  251. package/learn/guides/uibuildingblocks/Layouts.md +2 -0
  252. package/learn/guides/uibuildingblocks/WorkingWithVDom.md +2 -0
  253. package/learn/guides/userinteraction/Forms.md +2 -0
  254. package/learn/guides/userinteraction/events/CustomEvents.md +2 -1
  255. package/learn/guides/userinteraction/events/DomEvents.md +2 -0
  256. package/learn/javascript/ClassFeatures.md +4 -3
  257. package/learn/javascript/Classes.md +10 -13
  258. package/learn/javascript/Overrides.md +10 -6
  259. package/learn/javascript/Super.md +12 -8
  260. package/learn/tree.json +71 -64
  261. package/learn/tutorials/Earthquakes.md +2 -0
  262. package/learn/tutorials/RSP.md +3 -1
  263. package/learn/tutorials/TodoList.md +103 -7
  264. package/package.json +6 -4
  265. package/resources/scss/src/apps/email/ComposeView.scss +16 -0
  266. package/resources/scss/src/apps/email/MainView.scss +5 -0
  267. package/resources/scss/src/apps/portal/learn/ContentComponent.scss +5 -4
  268. package/src/DefaultConfig.mjs +12 -2
  269. package/src/Main.mjs +1 -0
  270. package/src/Neo.mjs +217 -166
  271. package/src/Xhr.mjs +1 -0
  272. package/src/button/Base.mjs +13 -0
  273. package/src/button/Effect.mjs +16 -2
  274. package/src/button/Split.mjs +2 -0
  275. package/src/calendar/store/Calendars.mjs +1 -0
  276. package/src/calendar/store/Colors.mjs +1 -0
  277. package/src/calendar/store/Events.mjs +1 -0
  278. package/src/calendar/view/DayComponent.mjs +2 -0
  279. package/src/calendar/view/EditEventContainer.mjs +4 -1
  280. package/src/calendar/view/MainContainer.mjs +13 -0
  281. package/src/calendar/view/MainContainerStateProvider.mjs +14 -28
  282. package/src/calendar/view/SettingsContainer.mjs +1 -0
  283. package/src/calendar/view/YearComponent.mjs +16 -0
  284. package/src/calendar/view/calendars/ColorsList.mjs +2 -0
  285. package/src/calendar/view/calendars/Container.mjs +2 -0
  286. package/src/calendar/view/calendars/EditContainer.mjs +1 -0
  287. package/src/calendar/view/month/Component.mjs +11 -0
  288. package/src/calendar/view/settings/GeneralContainer.mjs +1 -0
  289. package/src/calendar/view/settings/MonthContainer.mjs +1 -0
  290. package/src/calendar/view/settings/WeekContainer.mjs +1 -0
  291. package/src/calendar/view/settings/YearContainer.mjs +1 -0
  292. package/src/calendar/view/week/Component.mjs +15 -1
  293. package/src/calendar/view/week/TimeAxisComponent.mjs +4 -0
  294. package/src/code/LivePreview.mjs +51 -23
  295. package/src/collection/Base.mjs +7 -10
  296. package/src/collection/Filter.mjs +6 -0
  297. package/src/collection/Sorter.mjs +3 -0
  298. package/src/component/Base.mjs +104 -771
  299. package/src/component/Canvas.mjs +1 -0
  300. package/src/component/Chip.mjs +4 -0
  301. package/src/component/Circle.mjs +14 -0
  302. package/src/component/Clock.mjs +4 -0
  303. package/src/component/DateSelector.mjs +12 -0
  304. package/src/component/Gallery.mjs +11 -0
  305. package/src/component/Helix.mjs +24 -0
  306. package/src/component/Label.mjs +1 -0
  307. package/src/component/Legend.mjs +3 -0
  308. package/src/component/MagicMoveText.mjs +4 -0
  309. package/src/component/Progress.mjs +3 -0
  310. package/src/component/Splitter.mjs +3 -0
  311. package/src/component/StatusBadge.mjs +6 -0
  312. package/src/component/Timer.mjs +4 -0
  313. package/src/component/Toast.mjs +6 -0
  314. package/src/component/Video.mjs +1 -0
  315. package/src/component/mwc/Button.mjs +7 -0
  316. package/src/component/mwc/TextField.mjs +9 -0
  317. package/src/component/wrapper/AmChart.mjs +2 -0
  318. package/src/component/wrapper/GoogleMaps.mjs +3 -0
  319. package/src/component/wrapper/MapboxGL.mjs +5 -0
  320. package/src/component/wrapper/MonacoEditor.mjs +12 -0
  321. package/src/container/Accordion.mjs +2 -0
  322. package/src/container/Base.mjs +7 -3
  323. package/src/container/Panel.mjs +1 -0
  324. package/src/container/Viewport.mjs +1 -0
  325. package/src/controller/Application.mjs +1 -0
  326. package/src/controller/Base.mjs +1 -0
  327. package/src/controller/Component.mjs +1 -0
  328. package/src/core/Base.mjs +55 -3
  329. package/src/core/Compare.mjs +4 -7
  330. package/src/core/Config.mjs +65 -52
  331. package/src/core/Effect.mjs +79 -13
  332. package/src/core/EffectBatchManager.mjs +18 -19
  333. package/src/core/EffectManager.mjs +25 -3
  334. package/src/core/IdGenerator.mjs +13 -44
  335. package/src/data/Model.mjs +2 -0
  336. package/src/data/Store.mjs +7 -0
  337. package/src/data/connection/WebSocket.mjs +2 -0
  338. package/src/date/DayViewComponent.mjs +2 -0
  339. package/src/date/SelectorContainer.mjs +14 -0
  340. package/src/dialog/Base.mjs +8 -0
  341. package/src/draggable/DragZone.mjs +5 -0
  342. package/src/draggable/tree/DragZone.mjs +1 -0
  343. package/src/filter/BooleanContainer.mjs +2 -0
  344. package/src/filter/NumberContainer.mjs +3 -0
  345. package/src/filter/ToggleOperatorsButton.mjs +2 -0
  346. package/src/form/Fieldset.mjs +6 -0
  347. package/src/form/field/Base.mjs +7 -0
  348. package/src/form/field/CheckBox.mjs +18 -0
  349. package/src/form/field/Chip.mjs +1 -0
  350. package/src/form/field/ComboBox.mjs +8 -0
  351. package/src/form/field/Country.mjs +1 -0
  352. package/src/form/field/Currency.mjs +2 -0
  353. package/src/form/field/Date.mjs +4 -0
  354. package/src/form/field/Display.mjs +1 -0
  355. package/src/form/field/Email.mjs +1 -0
  356. package/src/form/field/FileUpload.mjs +7 -0
  357. package/src/form/field/Hidden.mjs +1 -0
  358. package/src/form/field/Number.mjs +7 -0
  359. package/src/form/field/Password.mjs +1 -0
  360. package/src/form/field/Phone.mjs +3 -0
  361. package/src/form/field/Picker.mjs +2 -0
  362. package/src/form/field/Radio.mjs +1 -0
  363. package/src/form/field/Range.mjs +3 -0
  364. package/src/form/field/Search.mjs +2 -0
  365. package/src/form/field/Text.mjs +32 -0
  366. package/src/form/field/TextArea.mjs +7 -0
  367. package/src/form/field/Time.mjs +6 -0
  368. package/src/form/field/Url.mjs +3 -0
  369. package/src/form/field/ZipCode.mjs +2 -0
  370. package/src/form/field/trigger/Base.mjs +3 -0
  371. package/src/form/field/trigger/Clear.mjs +2 -0
  372. package/src/form/field/trigger/CopyToClipboard.mjs +2 -0
  373. package/src/form/field/trigger/Date.mjs +1 -0
  374. package/src/form/field/trigger/Picker.mjs +1 -0
  375. package/src/form/field/trigger/Search.mjs +1 -0
  376. package/src/form/field/trigger/SpinDown.mjs +2 -0
  377. package/src/form/field/trigger/SpinUp.mjs +1 -0
  378. package/src/form/field/trigger/Time.mjs +2 -0
  379. package/src/functional/_export.mjs +6 -0
  380. package/src/functional/component/Base.mjs +499 -0
  381. package/src/functional/defineComponent.mjs +102 -0
  382. package/src/functional/useConfig.mjs +52 -0
  383. package/src/functional/useEvent.mjs +43 -0
  384. package/src/grid/Body.mjs +20 -1
  385. package/src/grid/Container.mjs +50 -60
  386. package/src/grid/ScrollManager.mjs +2 -0
  387. package/src/grid/VerticalScrollbar.mjs +2 -0
  388. package/src/grid/column/Base.mjs +2 -0
  389. package/src/grid/header/Button.mjs +7 -0
  390. package/src/grid/header/Toolbar.mjs +6 -0
  391. package/src/grid/plugin/AnimateRows.mjs +2 -0
  392. package/src/layout/Base.mjs +3 -0
  393. package/src/layout/Card.mjs +1 -0
  394. package/src/layout/Cube.mjs +11 -1
  395. package/src/layout/Fit.mjs +1 -0
  396. package/src/layout/Flexbox.mjs +7 -0
  397. package/src/layout/Form.mjs +2 -0
  398. package/src/layout/Grid.mjs +1 -0
  399. package/src/layout/HBox.mjs +1 -0
  400. package/src/layout/VBox.mjs +1 -0
  401. package/src/list/Base.mjs +13 -0
  402. package/src/list/Chip.mjs +1 -0
  403. package/src/list/Circle.mjs +2 -0
  404. package/src/list/Color.mjs +1 -0
  405. package/src/list/plugin/Animate.mjs +2 -0
  406. package/src/main/DeltaUpdates.mjs +1 -0
  407. package/src/main/DomEvents.mjs +2 -0
  408. package/src/main/addon/CloneNode.mjs +1 -0
  409. package/src/main/addon/Cookie.mjs +1 -0
  410. package/src/main/addon/GoogleMaps.mjs +1 -0
  411. package/src/main/addon/LocalStorage.mjs +1 -0
  412. package/src/main/addon/MapboxGL.mjs +1 -0
  413. package/src/main/addon/Markdown.mjs +1 -0
  414. package/src/main/addon/Navigator.mjs +1 -0
  415. package/src/main/addon/Popover.mjs +1 -0
  416. package/src/main/addon/Stylesheet.mjs +1 -0
  417. package/src/main/addon/WindowPosition.mjs +1 -0
  418. package/src/manager/Component.mjs +0 -71
  419. package/src/manager/VDomUpdate.mjs +235 -0
  420. package/src/menu/List.mjs +6 -0
  421. package/src/menu/Model.mjs +1 -0
  422. package/src/menu/Panel.mjs +3 -0
  423. package/src/menu/Store.mjs +1 -0
  424. package/src/mixin/DomEvents.mjs +130 -0
  425. package/src/mixin/VdomLifecycle.mjs +667 -0
  426. package/src/plugin/Base.mjs +1 -0
  427. package/src/plugin/Resizable.mjs +2 -0
  428. package/src/selection/Model.mjs +15 -18
  429. package/src/selection/grid/BaseModel.mjs +1 -0
  430. package/src/sitemap/Component.mjs +1 -0
  431. package/src/state/Provider.mjs +98 -70
  432. package/src/state/createHierarchicalDataProxy.mjs +39 -25
  433. package/src/tab/Container.mjs +6 -0
  434. package/src/tab/Strip.mjs +1 -0
  435. package/src/tab/header/Button.mjs +2 -0
  436. package/src/tab/header/EffectButton.mjs +2 -0
  437. package/src/tab/header/Toolbar.mjs +1 -0
  438. package/src/table/Body.mjs +3 -0
  439. package/src/table/Container.mjs +10 -0
  440. package/src/table/header/Button.mjs +8 -0
  441. package/src/table/header/Toolbar.mjs +5 -0
  442. package/src/table/plugin/CellEditing.mjs +1 -0
  443. package/src/toolbar/Base.mjs +4 -0
  444. package/src/toolbar/Breadcrumb.mjs +3 -0
  445. package/src/toolbar/Paging.mjs +5 -0
  446. package/src/tooltip/Base.mjs +2 -0
  447. package/src/tree/List.mjs +3 -0
  448. package/src/util/HashHistory.mjs +1 -0
  449. package/src/util/KeyNavigation.mjs +2 -0
  450. package/src/util/Matrix.mjs +1 -0
  451. package/src/util/VDom.mjs +7 -1
  452. package/src/util/VNode.mjs +7 -1
  453. package/src/util/vdom/TreeBuilder.mjs +129 -0
  454. package/src/vdom/Helper.mjs +35 -23
  455. package/src/vdom/VNode.mjs +4 -6
  456. package/src/worker/App.mjs +1 -0
  457. package/src/worker/Base.mjs +2 -0
  458. package/src/worker/Manager.mjs +2 -0
  459. package/src/worker/ServiceBase.mjs +6 -1
  460. package/test/siesta/siesta.js +5 -2
  461. package/test/siesta/tests/VdomCalendar.mjs +13 -9
  462. package/test/siesta/tests/core/Effect.mjs +10 -14
  463. package/test/siesta/tests/core/EffectBatching.mjs +25 -37
  464. package/test/siesta/tests/state/ProviderNestedDataConfigs.mjs +255 -0
  465. package/test/siesta/tests/state/createHierarchicalDataProxy.mjs +42 -55
  466. package/test/siesta/tests/vdom/VdomAsymmetricUpdates.mjs +366 -0
  467. package/test/siesta/tests/vdom/VdomRealWorldUpdates.mjs +249 -0
  468. package/learn/javascript/NewNode.md +0 -31
package/src/list/Base.mjs CHANGED
@@ -22,6 +22,7 @@ class List extends Component {
22
22
  ntype: 'list',
23
23
  /**
24
24
  * @member {Boolean} animate_=false
25
+ * @reactive
25
26
  */
26
27
  animate_: false,
27
28
  /**
@@ -41,6 +42,7 @@ class List extends Component {
41
42
  disabledField: 'disabled',
42
43
  /**
43
44
  * @member {Boolean} disableSelection_=false
45
+ * @reactive
44
46
  */
45
47
  disableSelection_: false,
46
48
  /**
@@ -49,6 +51,7 @@ class List extends Component {
49
51
  displayField: 'name',
50
52
  /**
51
53
  * @member {Boolean} draggable_=false
54
+ * @reactive
52
55
  */
53
56
  draggable_: false,
54
57
  /**
@@ -63,12 +66,14 @@ class List extends Component {
63
66
  * Keeps track of the focussed item index and allows bindings and programmatic changes.
64
67
  * You can either pass the index or the related record
65
68
  * @member {Number|Object|null} focusIndex_=null
69
+ * @reactive
66
70
  */
67
71
  focusIndex_: null,
68
72
  /**
69
73
  * In case we are using list item headers and want to bind list item indexes to e.g. a card layout
70
74
  * for e.g. a sidenav, this config comes in handy.
71
75
  * @member {Number|null} headerlessSelectedIndex_=null
76
+ * @reactive
72
77
  */
73
78
  headerlessSelectedIndex_: null,
74
79
  /**
@@ -82,6 +87,7 @@ class List extends Component {
82
87
  /**
83
88
  * Defaults to px
84
89
  * @member {Number|null} itemHeight_=null
90
+ * @reactive
85
91
  */
86
92
  itemHeight_: null,
87
93
  /**
@@ -92,6 +98,7 @@ class List extends Component {
92
98
  /**
93
99
  * Defaults to px
94
100
  * @member {Number|null} itemWidth_=null
101
+ * @reactive
95
102
  */
96
103
  itemWidth_: null,
97
104
  /**
@@ -117,11 +124,13 @@ class List extends Component {
117
124
  /**
118
125
  * Keeps track of the selected item index and allows bindings and programmatic changes
119
126
  * @member {Number|null} selectedIndex_=null
127
+ * @reactive
120
128
  */
121
129
  selectedIndex_: null,
122
130
  /**
123
131
  * Either pass a selection.Model module, an instance or a config object
124
132
  * @member {Object|Neo.selection.Model} selectionModel_=null
133
+ * @reactive
125
134
  */
126
135
  selectionModel_: null,
127
136
  /**
@@ -136,21 +145,25 @@ class List extends Component {
136
145
  silentSelect: false,
137
146
  /**
138
147
  * @member {Neo.data.Store|null} store_=null
148
+ * @reactive
139
149
  */
140
150
  store_: null,
141
151
  /**
142
152
  * True will add a checkbox in front of each list item
143
153
  * @member {Boolean} stacked_=true
154
+ * @reactive
144
155
  */
145
156
  useCheckBoxes_: false,
146
157
  /**
147
158
  * Setting this config to true will switch to dl, dt & dd tags instead of using ul & li.
148
159
  * Use the {Boolean} model field isHeader.
149
160
  * @member {Boolean} useHeaders_=false
161
+ * @reactive
150
162
  */
151
163
  useHeaders_: false,
152
164
  /**
153
165
  * @member {Boolean} useWrapperNode_=false
166
+ * @reactive
154
167
  */
155
168
  useWrapperNode_: false,
156
169
  /**
package/src/list/Chip.mjs CHANGED
@@ -41,6 +41,7 @@ class Chip extends ComponentList {
41
41
  /**
42
42
  * True will flex each list item horizontally
43
43
  * @member {Boolean} stacked_=true
44
+ * @reactive
44
45
  */
45
46
  stacked_: true,
46
47
  /**
@@ -30,11 +30,13 @@ class Circle extends ComponentList {
30
30
  /**
31
31
  * Defaults to px
32
32
  * @member {Number|null} itemHeight=300
33
+ * @reactive
33
34
  */
34
35
  itemHeight: 300,
35
36
  /**
36
37
  * Defaults to px
37
38
  * @member {Number|null} itemWidth=300
39
+ * @reactive
38
40
  */
39
41
  itemWidth: 300,
40
42
  /**
@@ -23,6 +23,7 @@ class Color extends List {
23
23
  /**
24
24
  * The data.Model field which contains the color value
25
25
  * @member {String} colorField_='name'
26
+ * @reactive
26
27
  */
27
28
  colorField_: 'name',
28
29
  /**
@@ -47,12 +47,14 @@ class Animate extends Base {
47
47
  /**
48
48
  * Time in ms. Please ensure to match the CSS based value, in case you change the default.
49
49
  * @member {Number} transitionDuration_=500
50
+ * @reactive
50
51
  */
51
52
  transitionDuration_: 500,
52
53
  /**
53
54
  * The easing used for fadeIn, fadeOut and position changes.
54
55
  * Valid values: 'ease','ease-in','ease-out','ease-in-out','linear'
55
56
  * @member {String} transitionEasing_='ease-in-out'
57
+ * @reactive
56
58
  */
57
59
  transitionEasing_: 'ease-in-out',
58
60
  /**
@@ -41,6 +41,7 @@ class DeltaUpdates extends Base {
41
41
  /**
42
42
  * @member {Boolean} renderCountDeltas_=false
43
43
  * @protected
44
+ * @reactive
44
45
  */
45
46
  renderCountDeltas_: false,
46
47
  /**
@@ -70,6 +70,8 @@ const
70
70
  /**
71
71
  * @class Neo.main.DomEvents
72
72
  * @extends Neo.core.Base
73
+ * @mixes Neo.core.Observable
74
+ * @mixes Neo.main.mixin.TouchDomEvents
73
75
  * @singleton
74
76
  */
75
77
  class DomEvents extends Base {
@@ -23,6 +23,7 @@ class CloneNode extends Base {
23
23
  * Remote method access for other workers
24
24
  * @member {Object} remote={app: [//...]}
25
25
  * @protected
26
+ * @reactive
26
27
  */
27
28
  remote: {
28
29
  app: [
@@ -16,6 +16,7 @@ class Cookie extends Base {
16
16
  * Remote method access for other workers
17
17
  * @member {Object} remote={app: [//...]}
18
18
  * @protected
19
+ * @reactive
19
20
  */
20
21
  remote: {
21
22
  app: [
@@ -6,6 +6,7 @@ import Observable from '../../core/Observable.mjs';
6
6
  /**
7
7
  * @class Neo.main.addon.GoogleMaps
8
8
  * @extends Neo.main.addon.Base
9
+ * @mixes Neo.core.Observable
9
10
  */
10
11
  class GoogleMaps extends Base {
11
12
  /**
@@ -16,6 +16,7 @@ class LocalStorage extends Base {
16
16
  * Remote method access for other workers
17
17
  * @member {Object} remote={app: [//...]}
18
18
  * @protected
19
+ * @reactive
19
20
  */
20
21
  remote: {
21
22
  app: [
@@ -71,6 +71,7 @@ class MapboxGL extends Base {
71
71
  /**
72
72
  * @member {Boolean} scriptsLoaded_=true
73
73
  * @protected
74
+ * @reactive
74
75
  */
75
76
  scriptsLoaded_: false,
76
77
  /**
@@ -20,6 +20,7 @@ class Markdown extends Base {
20
20
  * Remote method access for other workers
21
21
  * @member {Object} remote={app: [//...]}
22
22
  * @protected
23
+ * @reactive
23
24
  */
24
25
  remote: {
25
26
  app: [
@@ -26,6 +26,7 @@ class Navigator extends Base {
26
26
  * Remote method access for other workers
27
27
  * @member {Object} remote={app: [//...]}
28
28
  * @protected
29
+ * @reactive
29
30
  */
30
31
  remote: {
31
32
  app: [
@@ -17,6 +17,7 @@ class Popover extends Base {
17
17
  * Remote method access for other workers
18
18
  * @member {Object} remote={app: [//...]}
19
19
  * @protected
20
+ * @reactive
20
21
  */
21
22
  remote: {
22
23
  app: [
@@ -23,6 +23,7 @@ class Stylesheet extends Base {
23
23
  * Remote method access for other workers
24
24
  * @member {Object} remote={app: [//...]}
25
25
  * @protected
26
+ * @reactive
26
27
  */
27
28
  remote: {
28
29
  app: [
@@ -25,6 +25,7 @@ class WindowPosition extends Base {
25
25
  intervalTime: 20,
26
26
  /**
27
27
  * @member {Boolean} observeResize_=false
28
+ * @reactive
28
29
  */
29
30
  observeResize_: false,
30
31
  /**
@@ -394,77 +394,6 @@ class Component extends Manager {
394
394
  return parents
395
395
  }
396
396
 
397
- /**
398
- * Copies a given vdom tree and replaces child component references with the vdom of their matching components
399
- * @param {Object} vdom
400
- * @param {Number} depth=-1
401
- * The component replacement depth.
402
- * -1 will parse the full tree, 1 top level only, 2 include children, 3 include grandchildren
403
- * @returns {Object}
404
- */
405
- getVdomTree(vdom, depth=-1) {
406
- let output = {...vdom}, // shallow copy
407
- childDepth;
408
-
409
- if (vdom.cn) {
410
- output.cn = [];
411
-
412
- vdom.cn.forEach(item => {
413
- childDepth = depth;
414
-
415
- if (item.componentId) {
416
- childDepth = depth === -1 ? -1 : depth > 1 ? depth-1 : 1;
417
-
418
- if (depth === -1 || depth > 1) {
419
- item = this.get(item.componentId).vdom
420
- }
421
- }
422
-
423
- output.cn.push(this.getVdomTree(item, childDepth))
424
- })
425
- }
426
-
427
- return output
428
- }
429
-
430
- /**
431
- * Copies a given vnode tree and replaces child component references with the vnode of their matching components
432
- * @param {Object} vnode
433
- * @param {Number} depth=-1
434
- * The component replacement depth.
435
- * -1 will parse the full tree, 1 top level only, 2 include children, 3 include grandchildren
436
- * @returns {Object}
437
- */
438
- getVnodeTree(vnode, depth=-1) {
439
- let output = {...vnode}, // shallow copy
440
- childDepth, component;
441
-
442
- if (vnode.childNodes) {
443
- output.childNodes = [];
444
-
445
- vnode.childNodes.forEach(item => {
446
- childDepth = depth;
447
-
448
- if (item.componentId) {
449
- childDepth = depth === -1 ? -1 : depth > 1 ? depth-1 : 1;
450
-
451
- if (depth === -1 || depth > 1) {
452
- component = this.get(item.componentId);
453
-
454
- // keep references in case there is no vnode (cmp not mounted)
455
- if (component?.vnode) {
456
- item = component.vnode
457
- }
458
- }
459
- }
460
-
461
- output.childNodes.push(this.getVnodeTree(item, childDepth))
462
- })
463
- }
464
-
465
- return output
466
- }
467
-
468
397
  /**
469
398
  * Check if the component had a property of any value somewhere in the Prototype chain
470
399
  *
@@ -0,0 +1,235 @@
1
+ import Collection from '../collection/Base.mjs';
2
+
3
+ /**
4
+ * @class Neo.manager.VDomUpdate
5
+ * @extends Neo.collection.Base
6
+ * @singleton
7
+ */
8
+ class VDomUpdate extends Collection {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Neo.manager.VDomUpdate'
12
+ * @protected
13
+ */
14
+ className: 'Neo.manager.VDomUpdate',
15
+ /**
16
+ * @member {Boolean} singleton=true
17
+ * @protected
18
+ */
19
+ singleton: true,
20
+ /**
21
+ * @member {Neo.collection.Base|null} mergedCallbackMap=null
22
+ * @protected
23
+ */
24
+ mergedCallbackMap: null,
25
+ /**
26
+ * @member {Neo.collection.Base|null} postUpdateQueueMap=null
27
+ * @protected
28
+ */
29
+ postUpdateQueueMap: null,
30
+ }
31
+
32
+ /**
33
+ * @member {Map|null} inFlightUpdateMap=null
34
+ * @protected
35
+ */
36
+ inFlightUpdateMap = null;
37
+ /**
38
+ * @member {Map|null} promiseCallbackMap=null
39
+ * @protected
40
+ */
41
+ promiseCallbackMap = null;
42
+
43
+ /**
44
+ * @param {Object} config
45
+ */
46
+ construct(config) {
47
+ super.construct(config);
48
+
49
+ const me = this;
50
+
51
+ me.inFlightUpdateMap = new Map();
52
+ me.mergedCallbackMap = Neo.create(Collection, {keyProperty: 'ownerId'});
53
+ me.postUpdateQueueMap = Neo.create(Collection, {keyProperty: 'ownerId'});
54
+ me.promiseCallbackMap = new Map();
55
+ }
56
+
57
+ /**
58
+ * @param {String} ownerId
59
+ * @param {Function} callback
60
+ */
61
+ addPromiseCallback(ownerId, callback) {
62
+ let me = this;
63
+
64
+ if (!me.promiseCallbackMap.has(ownerId)) {
65
+ me.promiseCallbackMap.set(ownerId, [])
66
+ }
67
+
68
+ me.promiseCallbackMap.get(ownerId).push(callback)
69
+ }
70
+
71
+ /**
72
+ * Registers an update that is currently in-flight to the worker.
73
+ * @param {String} ownerId The ID of the component owning the update.
74
+ * @param {Number} updateDepth The depth of the in-flight update.
75
+ */
76
+ registerInFlightUpdate(ownerId, updateDepth) {
77
+ this.inFlightUpdateMap.set(ownerId, updateDepth);
78
+ }
79
+
80
+ /**
81
+ * Retrieves the update depth for an in-flight update.
82
+ * @param {String} ownerId The ID of the component owning the update.
83
+ * @returns {Number|undefined} The update depth, or undefined if not found.
84
+ */
85
+ getInFlightUpdateDepth(ownerId) {
86
+ return this.inFlightUpdateMap.get(ownerId);
87
+ }
88
+
89
+ /**
90
+ * Unregisters an in-flight update once it has completed.
91
+ * @param {String} ownerId The ID of the component owning the update.
92
+ */
93
+ unregisterInFlightUpdate(ownerId) {
94
+ this.inFlightUpdateMap.delete(ownerId);
95
+ }
96
+
97
+ /**
98
+ * @param {String} ownerId
99
+ * @param {String} childId
100
+ * @param {Number} childUpdateDepth
101
+ * @param {Number} distance
102
+ */
103
+ registerMerged(ownerId, childId, childUpdateDepth, distance) {
104
+ let me = this,
105
+ item = me.mergedCallbackMap.get(ownerId);
106
+
107
+ if (!item) {
108
+ item = {ownerId, children: new Map()};
109
+ me.mergedCallbackMap.add(item);
110
+ }
111
+
112
+ item.children.set(childId, {childUpdateDepth, distance});
113
+ }
114
+
115
+ /**
116
+ * @param {String} ownerId
117
+ * @param {String} childId
118
+ * @param {Function} [resolve]
119
+ */
120
+ registerPostUpdate(ownerId, childId, resolve) {
121
+ let me = this,
122
+ item = me.postUpdateQueueMap.get(ownerId),
123
+ childCallbacks;
124
+
125
+ if (!item) {
126
+ item = {ownerId, children: []};
127
+ me.postUpdateQueueMap.add(item);
128
+ }
129
+
130
+ item.children.push({childId, resolve})
131
+ }
132
+
133
+ /**
134
+ * Calculates the adjusted updateDepth for a parent component based on its merged children.
135
+ * This method is called by the parent component right before it executes its own VDOM update.
136
+ * @param {String} ownerId
137
+ * @returns {Number|null} The adjusted update depth or null if no merged children are found
138
+ */
139
+ getAdjustedUpdateDepth(ownerId) {
140
+ let me = this,
141
+ owner = Neo.getComponent(ownerId),
142
+ item = me.mergedCallbackMap.get(ownerId),
143
+ maxDepth = owner?.updateDepth ?? 1,
144
+ newDepth;
145
+
146
+ if (item) {
147
+ item.children.forEach(value => {
148
+ if (value.childUpdateDepth === -1) {
149
+ newDepth = -1;
150
+ } else {
151
+ // The new depth is the distance to the child plus the child's own required update depth.
152
+ newDepth = value.distance + value.childUpdateDepth;
153
+ }
154
+
155
+ if (newDepth === -1) {
156
+ maxDepth = -1;
157
+ } else if (maxDepth !== -1) {
158
+ maxDepth = Math.max(maxDepth, newDepth);
159
+ }
160
+ });
161
+
162
+ return maxDepth;
163
+ }
164
+
165
+ return null;
166
+ }
167
+
168
+ /**
169
+ * Returns a Set of child IDs that have been merged into a parent's update.
170
+ * @param {String} ownerId The ID of the parent component owning the update.
171
+ * @returns {Set<String>|null} A Set containing the IDs of the merged children, or null.
172
+ */
173
+ getMergedChildIds(ownerId) {
174
+ const item = this.mergedCallbackMap.get(ownerId);
175
+ if (item) {
176
+ return new Set(item.children.keys());
177
+ }
178
+ return null;
179
+ }
180
+
181
+ /**
182
+ * @param {String} ownerId
183
+ * @param {Object} [data]
184
+ */
185
+ executeCallbacks(ownerId, data) {
186
+ let me = this,
187
+ item = me.mergedCallbackMap.get(ownerId),
188
+ callbackData = data ? [data] : [];
189
+
190
+ if (item) {
191
+ item.children.forEach((value, key) => {
192
+ me.executePromiseCallbacks(key, ...callbackData)
193
+ });
194
+ me.mergedCallbackMap.remove(item);
195
+ }
196
+
197
+ me.executePromiseCallbacks(ownerId, ...callbackData)
198
+ }
199
+
200
+ /**
201
+ * @param {String} ownerId
202
+ * @param {Object} [data]
203
+ */
204
+ executePromiseCallbacks(ownerId, data) {
205
+ let me = this,
206
+ callbacks = me.promiseCallbackMap.get(ownerId);
207
+
208
+ callbacks?.forEach(callback => callback(data));
209
+ me.promiseCallbackMap.delete(ownerId);
210
+ }
211
+
212
+ /**
213
+ * @param {String} ownerId
214
+ */
215
+ triggerPostUpdates(ownerId) {
216
+ let me = this,
217
+ item = me.postUpdateQueueMap.get(ownerId),
218
+ component;
219
+
220
+ if (item) {
221
+ item.children.forEach(entry => {
222
+ component = Neo.getComponent(entry.childId);
223
+
224
+ if (component) {
225
+ entry.resolve && me.addPromiseCallback(component.id, entry.resolve);
226
+ component.update();
227
+ }
228
+ });
229
+
230
+ me.postUpdateQueueMap.remove(item);
231
+ }
232
+ }
233
+ }
234
+
235
+ export default Neo.setupClass(VDomUpdate);
package/src/menu/List.mjs CHANGED
@@ -41,6 +41,7 @@ class List extends BaseList {
41
41
  /**
42
42
  * Optionally pass menu.Store data directly
43
43
  * @member {Object[]|null} items_=null
44
+ * @reactive
44
45
  */
45
46
  items_: null,
46
47
  /**
@@ -48,6 +49,7 @@ class List extends BaseList {
48
49
  * Sub-menus will bubble focus changes to the top level.
49
50
  * @member {Boolean} menuFocus_=false
50
51
  * @protected
52
+ * @reactive
51
53
  */
52
54
  menuFocus_: false,
53
55
  /**
@@ -72,11 +74,13 @@ class List extends BaseList {
72
74
  /**
73
75
  * Value for the list.Base selectionModel_ config
74
76
  * @member {Neo.selection.menu.ListModel} selectionModel=ListModel
77
+ * @reactive
75
78
  */
76
79
  selectionModel: ListModel,
77
80
  /**
78
81
  * Value for the list.Base store_ config
79
82
  * @member {Neo.menu.Store} store=Store
83
+ * @reactive
80
84
  */
81
85
  store: Store,
82
86
  /**
@@ -94,6 +98,7 @@ class List extends BaseList {
94
98
  /**
95
99
  * We are applying a z-index style which is 1 number higher to each sub-menu
96
100
  * @member {Number} zIndex_=100
101
+ * @reactive
97
102
  */
98
103
  zIndex_: 100,
99
104
  /**
@@ -106,6 +111,7 @@ class List extends BaseList {
106
111
  /**
107
112
  * If the menu is floating, it will anchor itself to the parentRect
108
113
  * @member {Neo.component.Base|null} parentComponent=null
114
+ * @reactive
109
115
  */
110
116
  parentComponent = null
111
117
 
@@ -13,6 +13,7 @@ class Model extends BaseModel {
13
13
  className: 'Neo.menu.Model',
14
14
  /**
15
15
  * @member {String} keyProperty='id'
16
+ * @reactive
16
17
  */
17
18
  keyProperty: 'id',
18
19
  /**
@@ -25,6 +25,7 @@ class Panel extends BasePanel {
25
25
  /**
26
26
  * @member {Neo.menu.List} list_=List
27
27
  * @protected
28
+ * @reactive
28
29
  */
29
30
  list_: List,
30
31
  /**
@@ -35,12 +36,14 @@ class Panel extends BasePanel {
35
36
  /**
36
37
  * Optionally pass menu.Store data directly
37
38
  * @member {Object[]|null} listItems_=null
39
+ * @reactive
38
40
  */
39
41
  listItems_: null,
40
42
  /**
41
43
  * The distance in px between a menu and a child menu
42
44
  * See: https://github.com/neomjs/neo/issues/2569
43
45
  * @member {Number} subMenuGap_=0
46
+ * @reactive
44
47
  */
45
48
  subMenuGap_: 0
46
49
  }
@@ -14,6 +14,7 @@ class Store extends BaseStore {
14
14
  className: 'Neo.menu.Store',
15
15
  /**
16
16
  * @member {Neo.menu.Model} model=Model
17
+ * @reactive
17
18
  */
18
19
  model: Model
19
20
  }