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
@@ -0,0 +1,193 @@
1
+ import Config from './Config.mjs';
2
+ import EffectManager from './EffectManager.mjs';
3
+ import EffectBatchManager from './EffectBatchManager.mjs';
4
+ import IdGenerator from './IdGenerator.mjs';
5
+
6
+ /**
7
+ * Creates a reactive effect that automatically tracks its dependencies and re-runs when any of them change.
8
+ * This is a lightweight, plain JavaScript class for performance.
9
+ * It serves as a core reactive primitive, enabling automatic and dynamic dependency tracking.
10
+ * @class Neo.core.Effect
11
+ */
12
+ class Effect {
13
+ /**
14
+ * The optional component id this effect belongs to.
15
+ * @member {String|null} componentId=null
16
+ */
17
+ componentId = null
18
+ /**
19
+ * A Map containing Config instances as keys and their cleanup functions as values.
20
+ * @member {Map} dependencies=new Map()
21
+ * @protected
22
+ */
23
+ dependencies = new Map()
24
+ /**
25
+ * The function to execute.
26
+ * @member {Function|null} _fn=null
27
+ */
28
+ _fn = null
29
+ /**
30
+ * The unique identifier for this effect instance.
31
+ * @member {String|null}
32
+ */
33
+ id = IdGenerator.getId('effect')
34
+ /**
35
+ * @member {Boolean}
36
+ * @protected
37
+ */
38
+ isDestroyed = false
39
+ /**
40
+ * @member {Neo.core.Config}
41
+ * @protected
42
+ */
43
+ isRunning = null
44
+
45
+ /**
46
+ * @member fn
47
+ */
48
+ get fn() {
49
+ return this._fn
50
+ }
51
+ set fn(value) {
52
+ this._fn = value;
53
+ // Assigning a new function to `fn` automatically triggers a re-run.
54
+ // This ensures that the effect immediately re-evaluates its dependencies
55
+ // based on the new function's logic, clearing old dependencies and establishing new ones.
56
+ this.run()
57
+ }
58
+
59
+ /**
60
+ * @param {Function|Object} fn - The function to execute, or a config object for the effect.
61
+ * @param {Function} [fn.fn] - The function to execute for the effect (if the first argument is an object).
62
+ * @param {String} [fn.componentId] - The component id this effect belongs to.
63
+ * @param {Boolean} [fn.lazy=false] - If true, the effect will not run immediately upon creation.
64
+ * @param {Object|Object[]} [fn.subscriber] - A single subscriber or an array of subscribers for the isRunning config.
65
+ * @param {Object} [options={}] - Optional. Used if the first argument is a function, this object contains the options.
66
+ * @example
67
+ * // Signature 1: Function and Options
68
+ * const myEffect = new Effect(() => console.log('Run'), {lazy: true});
69
+ * @example
70
+ * // Signature 2: Single Config Object
71
+ * const myEffect = new Effect({fn: () => console.log('Run'), lazy: true});
72
+ */
73
+ constructor(fn, options={}) {
74
+ const me = this;
75
+
76
+ // This single statement handles both (fn, options) and ({...}) signatures
77
+ // by normalizing them into a single object that we can destructure.
78
+ const {
79
+ fn: effectFn,
80
+ componentId,
81
+ lazy = false,
82
+ subscriber
83
+ } = (typeof fn === 'function') ? { ...options, fn } : (fn || {});
84
+
85
+ if (componentId) {
86
+ me.componentId = componentId
87
+ }
88
+
89
+ me.isRunning = new Config(false);
90
+
91
+ // The subscriber(s) must be added *before* the first run is triggered.
92
+ // This is critical for consumers like functional components, which need to process
93
+ // the initial VDOM synchronously within the constructor lifecycle.
94
+ if (subscriber) {
95
+ // A concise way to handle both single and array subscribers.
96
+ [].concat(subscriber).forEach(sub => me.isRunning.subscribe(sub))
97
+ }
98
+
99
+ // If lazy, just store the function without running it.
100
+ // Otherwise, use the setter to trigger the initial run.
101
+ if (lazy) {
102
+ me._fn = effectFn
103
+ } else {
104
+ me.fn = effectFn
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Cleans up all subscriptions and destroys the effect.
110
+ */
111
+ destroy() {
112
+ const me = this;
113
+
114
+ me.dependencies.forEach(cleanup => cleanup());
115
+ me.dependencies.clear();
116
+ me.isDestroyed = true
117
+ }
118
+
119
+ /**
120
+ * Executes the effect function, tracking its dependencies.
121
+ * This is called automatically on creation and whenever a dependency changes.
122
+ * The dynamic re-tracking ensures the effect always reflects its current dependencies,
123
+ * even if the logic within `fn` changes conditionally.
124
+ * @protected
125
+ */
126
+ run() {
127
+ const me = this;
128
+
129
+ EffectManager.pause(); // Pause dependency tracking for isRunning.get()
130
+ if (me.isDestroyed || me.isRunning.get()) {
131
+ EffectManager.resume(); // Resume if we return early
132
+ return
133
+ }
134
+
135
+ if (EffectBatchManager.isBatchActive()) {
136
+ EffectBatchManager.queueEffect(me);
137
+ return
138
+ }
139
+
140
+ me.isRunning.set(true);
141
+
142
+ me.dependencies.forEach(cleanup => cleanup());
143
+ me.dependencies.clear();
144
+
145
+ EffectManager.push(me);
146
+ EffectManager.resume();
147
+
148
+ try {
149
+ me.fn()
150
+ } finally {
151
+ EffectManager.pop();
152
+ EffectManager.pause(); // Pause dependency tracking for isRunning.set(false)
153
+ me.isRunning.set(false);
154
+ EffectManager.resume() // Resume after isRunning.set(false)
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Adds a `Neo.core.Config` instance as a dependency for this effect.
160
+ * @param {Neo.core.Config} config The config instance to subscribe to.
161
+ * @protected
162
+ */
163
+ addDependency(config) {
164
+ const me = this;
165
+
166
+ // Only add if not already a dependency. Map uses strict equality (===) for object keys.
167
+ if (!me.dependencies.has(config)) {
168
+ const cleanup = config.subscribe({
169
+ id: me.id,
170
+ fn: me.run.bind(me)
171
+ });
172
+
173
+ me.dependencies.set(config, cleanup)
174
+ }
175
+ }
176
+ }
177
+
178
+ Neo.core ??= {};
179
+
180
+ if (!Neo.core.Effect) {
181
+ Neo.core.Effect = Effect;
182
+
183
+ /**
184
+ * Factory shortcut to create a new Neo.core.Effect instance.
185
+ * @function Neo.effect
186
+ * @param {Function|Object} fn - The function to execute, or a config object for the effect.
187
+ * @param {Object} [options] - Optional. Used if the first argument is a function.
188
+ * @returns {Neo.core.Effect}
189
+ */
190
+ Neo.effect = (fn, options) => new Effect(fn, options)
191
+ }
192
+
193
+ export default Neo.core.Effect;
@@ -0,0 +1,67 @@
1
+ /**
2
+ * A singleton manager responsible for batching `Neo.core.Effect` executions.
3
+ * This ensures that effects triggered by multiple config changes within a single
4
+ * synchronous operation (e.g., `Neo.core.Base#set()`) are executed only once
5
+ * per batch, after all changes have been applied.
6
+ * @class Neo.core.EffectBatchManager
7
+ * @singleton
8
+ */
9
+ const EffectBatchManager = {
10
+ /**
11
+ * The current count of active batch operations.
12
+ * Incremented by `startBatch()`, decremented by `endBatch()`.
13
+ * @member {Number} batchCount=0
14
+ */
15
+ batchCount: 0,
16
+ /**
17
+ * A Set of `Neo.core.Effect` instances that are pending execution within the current batch.
18
+ * @member {Set<Neo.core.Effect>} pendingEffects=new Set()
19
+ */
20
+ pendingEffects: new Set(),
21
+
22
+ /**
23
+ * Decrements the batch counter. If `batchCount` reaches 0, all queued effects
24
+ * are executed and the `pendingEffects` Set is cleared.
25
+ */
26
+ endBatch() {
27
+ const me = this;
28
+
29
+ me.batchCount--;
30
+
31
+ if (me.batchCount === 0) {
32
+ const effectsToRun = [...me.pendingEffects]; // Create a snapshot
33
+ me.pendingEffects.clear();
34
+
35
+ effectsToRun.forEach(effect => {
36
+ effect.run()
37
+ })
38
+ }
39
+ },
40
+
41
+ /**
42
+ * Checks if there is an active batch operation.
43
+ * @returns {Boolean}
44
+ */
45
+ isBatchActive() {
46
+ return this.batchCount > 0
47
+ },
48
+
49
+ /**
50
+ * Queues an effect for execution at the end of the current batch.
51
+ * If the effect is already queued, it will not be added again.
52
+ * @param {Neo.core.Effect} effect The effect to queue.
53
+ */
54
+ queueEffect(effect) {
55
+ this.pendingEffects.add(effect)
56
+ },
57
+
58
+ /**
59
+ * Increments the batch counter. When `batchCount` is greater than 0,
60
+ * effects will be queued instead of running immediately.
61
+ */
62
+ startBatch() {
63
+ this.batchCount++
64
+ }
65
+ };
66
+
67
+ export default Neo.gatekeep(EffectBatchManager, 'Neo.core.EffectBatchManager');
@@ -0,0 +1,60 @@
1
+ /**
2
+ * A singleton manager to track the currently running effect.
3
+ * This allows reactive properties to know which effect to subscribe to.
4
+ * @class Neo.core.EffectManager
5
+ * @singleton
6
+ */
7
+ const EffectManager = {
8
+ effectStack: [],
9
+ isPaused : false,
10
+
11
+ /**
12
+ * Adds a `Neo.core.Config` instance as a dependency for the currently active effect.
13
+ * This method checks if the EffectManager is paused before adding the dependency.
14
+ * @param {Neo.core.Config} config The config instance to add as a dependency.
15
+ */
16
+ addDependency(config) {
17
+ !this.isPaused && this.getActiveEffect()?.addDependency(config)
18
+ },
19
+
20
+ /**
21
+ * Returns the effect currently at the top of the stack (i.e., the one currently running).
22
+ * @returns {Neo.core.Effect|null}
23
+ */
24
+ getActiveEffect() {
25
+ return this.effectStack[this.effectStack.length - 1]
26
+ },
27
+
28
+ /**
29
+ * Pauses dependency tracking for effects. While paused, calls to `addDependency` will be ignored.
30
+ */
31
+ pause() {
32
+ this.isPaused = true;
33
+ },
34
+
35
+ /**
36
+ * Pops the current effect from the stack, returning to the previous effect (if any).
37
+ * @returns {Neo.core.Effect|null}
38
+ */
39
+ pop() {
40
+ return this.effectStack.pop()
41
+ },
42
+
43
+ /**
44
+ * Pushes an effect onto the stack, marking it as the currently running effect.
45
+ * @param {Neo.core.Effect} effect The effect to push.
46
+ */
47
+ push(effect) {
48
+ this.effectStack.push(effect)
49
+ },
50
+
51
+ /**
52
+ * Resumes dependency tracking for effects.
53
+ */
54
+ resume() {
55
+ this.isPaused = false;
56
+ }
57
+ };
58
+
59
+ export default Neo.gatekeep(EffectManager, 'Neo.core.EffectManager');
60
+
@@ -1,44 +1,17 @@
1
1
  /**
2
- * This class gets used by core.Base, so it can not extend it.
3
- * It could get simplified to just being an object (needs to manually get put into the Neo namespace in this case).
4
- * @class Neo.core.IdGenerator
5
- * @singleton
2
+ * Provides a singleton utility for generating unique IDs.
3
+ * @namespace Neo.core.IdGenerator
6
4
  */
7
- class IdGenerator {
8
- static config = {
9
- /**
10
- * @member {String} className='Neo.core.IdGenerator'
11
- * @protected
12
- */
13
- className: 'Neo.core.IdGenerator',
14
- /**
15
- * @member {String} ntype='id-generator'
16
- * @protected
17
- */
18
- ntype: 'id-generator',
19
- /**
20
- * The default prefix for neo instance ids
21
- * @member {String} base='neo-'
22
- */
23
- base: 'neo-',
24
- /**
25
- * @member {Boolean} singleton='true
26
- * @protected
27
- */
28
- singleton: true
29
- }
30
-
5
+ const IdGenerator = {
31
6
  /**
32
- * @param config
7
+ * The default prefix for neo instance ids
8
+ * @member {String} base='neo-'
33
9
  */
34
- construct(config) {
35
- let me = this;
36
-
37
- me.idCounter = {};
38
-
39
- // alias
40
- Neo.getId = me.getId.bind(me);
41
- }
10
+ base: 'neo-',
11
+ /**
12
+ * @member {Object} idCounter={}
13
+ */
14
+ idCounter: {},
42
15
 
43
16
  /**
44
17
  * @param name
@@ -55,12 +28,8 @@ class IdGenerator {
55
28
 
56
29
  return me.base + (name === 'neo' ? '' : name + '-') + count;
57
30
  }
58
-
59
- init() {}
60
-
61
- onAfterConstructed() {}
62
-
63
- onConstructed() {}
64
31
  }
65
32
 
66
- export default Neo.setupClass(IdGenerator);
33
+ export default Neo.gatekeep(IdGenerator, 'Neo.core.IdGenerator', () => {
34
+ Neo.getId = IdGenerator.getId.bind(IdGenerator);
35
+ });
@@ -19,10 +19,12 @@ class Model extends Base {
19
19
  ntype: 'model',
20
20
  /**
21
21
  * @member {Object[]|null} fields_=null
22
+ * @reactive
22
23
  */
23
24
  fields_: null,
24
25
  /**
25
26
  * @member {String} keyProperty_='id'
27
+ * @reactive
26
28
  */
27
29
  keyProperty_: 'id',
28
30
  /**
@@ -7,6 +7,7 @@ import RecordFactory from './RecordFactory.mjs';
7
7
  /**
8
8
  * @class Neo.data.Store
9
9
  * @extends Neo.collection.Base
10
+ * @mixes Neo.core.Observable
10
11
  */
11
12
  class Store extends Base {
12
13
  /**
@@ -42,6 +43,7 @@ class Store extends Base {
42
43
  * @example
43
44
  * api: 'MyApp.backend.UserService'
44
45
  * @member {Object|String|null} api_=null
46
+ * @reactive
45
47
  */
46
48
  api_: null,
47
49
  /**
@@ -50,14 +52,17 @@ class Store extends Base {
50
52
  autoLoad: false,
51
53
  /**
52
54
  * @member {Number} currentPage_=1
55
+ * @reactive
53
56
  */
54
57
  currentPage_: 1,
55
58
  /**
56
59
  * @member {Array|null} data_=null
60
+ * @reactive
57
61
  */
58
62
  data_: null,
59
63
  /**
60
64
  * @member {Array|null} initialData_=null
65
+ * @reactive
61
66
  */
62
67
  initialData_: null,
63
68
  /**
@@ -74,11 +79,13 @@ class Store extends Base {
74
79
  isLoading: false,
75
80
  /**
76
81
  * @member {Neo.data.Model} model_=null
82
+ * @reactive
77
83
  */
78
84
  model_: null,
79
85
  /**
80
86
  * Use a value of 0 to not limit the pageSize
81
87
  * @member {Number} pageSize_=0
88
+ * @reactive
82
89
  */
83
90
  pageSize_: 0,
84
91
  /**
@@ -5,6 +5,7 @@ import Observable from '../../core/Observable.mjs';
5
5
  /**
6
6
  * @class Neo.data.connection.WebSocket
7
7
  * @extends Neo.core.Base
8
+ * @mixes Neo.core.Observable
8
9
  */
9
10
  class Socket extends Base {
10
11
  /**
@@ -28,6 +29,7 @@ class Socket extends Base {
28
29
  /**
29
30
  * @member {WebSocket|null} socket_=null
30
31
  * @protected
32
+ * @reactive
31
33
  */
32
34
  socket_: null
33
35
  }
@@ -41,6 +41,7 @@ class DayViewComponent extends Base {
41
41
  /**
42
42
  * @member {Date|null} currentDate_=null
43
43
  * @protected
44
+ * @reactive
44
45
  */
45
46
  currentDate_: null,
46
47
  /**
@@ -51,6 +52,7 @@ class DayViewComponent extends Base {
51
52
  /**
52
53
  * 0-6 => Sun-Sat
53
54
  * @member {Number} weekStartDay_=0
55
+ * @reactive
54
56
  */
55
57
  weekStartDay_: 0,
56
58
  /**
@@ -40,6 +40,7 @@ class SelectorContainer extends Container {
40
40
  * Date object created on the value config
41
41
  * @member {Date|null} currentDate_=null
42
42
  * @protected
43
+ * @reactive
43
44
  */
44
45
  currentDate_: null,
45
46
  /**
@@ -50,17 +51,20 @@ class SelectorContainer extends Container {
50
51
  * The format of the column headers.
51
52
  * Valid values are: narrow, short & long
52
53
  * @member {String} dayNameFormat_='short'
54
+ * @reactive
53
55
  */
54
56
  dayNameFormat_: 'short',
55
57
  /**
56
58
  * @member {Intl.DateTimeFormat|null} intlFormatDay_=null
57
59
  * @protected
60
+ * @reactive
58
61
  */
59
62
  intlFormatDay_: null,
60
63
  /**
61
64
  * Internal flag to prevent changing the date while change animations are still running
62
65
  * @member {Boolean} isUpdating_=false
63
66
  * @protected
67
+ * @reactive
64
68
  */
65
69
  isUpdating_: false,
66
70
  /**
@@ -104,14 +108,17 @@ class SelectorContainer extends Container {
104
108
  keys: {},
105
109
  /**
106
110
  * @member {String} locale_=Neo.config.locale
111
+ * @reactive
107
112
  */
108
113
  locale_: Neo.config.locale,
109
114
  /**
110
115
  * @member {String|null} maxValue_=null
116
+ * @reactive
111
117
  */
112
118
  maxValue_: null,
113
119
  /**
114
120
  * @member {String|null} minValue_=null
121
+ * @reactive
115
122
  */
116
123
  minValue_: null,
117
124
  /**
@@ -129,24 +136,29 @@ class SelectorContainer extends Container {
129
136
  /**
130
137
  * Either pass a selection.Model module, an instance or a config object
131
138
  * @member {Object|Neo.selection.Model} selectionModel_=null
139
+ * @reactive
132
140
  */
133
141
  selectionModel_: null,
134
142
  /**
135
143
  * True to show inner cell & header cell borders
136
144
  * @member {Boolean} showCellBorders_=true
145
+ * @reactive
137
146
  */
138
147
  showCellBorders_: false,
139
148
  /**
140
149
  * True to show the days of the previous or next month (not selectable)
141
150
  * @member {Boolean} showDisabledDays_=true
151
+ * @reactive
142
152
  */
143
153
  showDisabledDays_: true,
144
154
  /**
145
155
  * @member {Boolean} showWeekends_=true
156
+ * @reactive
146
157
  */
147
158
  showWeekends_: true,
148
159
  /**
149
160
  * @member {Neo.state.Provider} stateProvider=SelectorContainerStateProvider
161
+ * @reactive
150
162
  */
151
163
  stateProvider: SelectorContainerStateProvider,
152
164
  /**
@@ -156,11 +168,13 @@ class SelectorContainer extends Container {
156
168
  useAnimations: true,
157
169
  /**
158
170
  * @member {String} value_=DateUtil.convertToyyyymmdd(new Date())
171
+ * @reactive
159
172
  */
160
173
  value_: DateUtil.convertToyyyymmdd(todayDate),
161
174
  /**
162
175
  * 0-6 => Sun-Sat
163
176
  * @member {Number} weekStartDay_=0
177
+ * @reactive
164
178
  */
165
179
  weekStartDay_: 0
166
180
  }
@@ -35,6 +35,7 @@ class Dialog extends Panel {
35
35
  animateOnDragEnd: false,
36
36
  /**
37
37
  * @member {String|null} animateTargetId_=null
38
+ * @reactive
38
39
  */
39
40
  animateTargetId_: null,
40
41
  /**
@@ -68,6 +69,7 @@ class Dialog extends Panel {
68
69
  closeAction: 'close',
69
70
  /**
70
71
  * @member {Boolean} draggable_=true
72
+ * @reactive
71
73
  */
72
74
  draggable_: true,
73
75
  /**
@@ -102,6 +104,7 @@ class Dialog extends Panel {
102
104
  isDragging: false,
103
105
  /**
104
106
  * @member {Object} keys={Escape:'onKeyDownEscape'}
107
+ * @reactive
105
108
  */
106
109
  keys: {
107
110
  Escape: 'onKeyDownEscape'
@@ -112,6 +115,7 @@ class Dialog extends Panel {
112
115
  maximizeCls: 'far fa-window-maximize',
113
116
  /**
114
117
  * @member {Boolean} maximized_=false
118
+ * @reactive
115
119
  */
116
120
  maximized_: false,
117
121
  /**
@@ -120,10 +124,12 @@ class Dialog extends Panel {
120
124
  minimizeCls: 'far fa-window-minimize',
121
125
  /**
122
126
  * @member {Boolean} modal_=false
127
+ * @reactive
123
128
  */
124
129
  modal_: false,
125
130
  /**
126
131
  * @member {Boolean} resizable_=true
132
+ * @reactive
127
133
  */
128
134
  resizable_: true,
129
135
  /**
@@ -132,12 +138,14 @@ class Dialog extends Panel {
132
138
  resizablePluginConfig: null,
133
139
  /**
134
140
  * @member {String|null} title_=null
141
+ * @reactive
135
142
  */
136
143
  title_: null,
137
144
  /**
138
145
  * Set to `true` to have tabbing wrap within this Dialog.
139
146
  * Should be used with `modal`.
140
147
  * @member {Boolean} trapFocus_=false
148
+ * @reactive
141
149
  */
142
150
  trapFocus_: false
143
151
  }
@@ -7,6 +7,7 @@ import VDomUtil from '../util/VDom.mjs';
7
7
  /**
8
8
  * @class Neo.draggable.DragZone
9
9
  * @extends Neo.core.Base
10
+ * @mixes Neo.core.Observable
10
11
  */
11
12
  class DragZone extends Base {
12
13
  /**
@@ -42,6 +43,7 @@ class DragZone extends Base {
42
43
  /**
43
44
  * The name of the App this instance belongs to
44
45
  * @member {String|null} appName_=null
46
+ * @reactive
45
47
  */
46
48
  appName_: null,
47
49
  /**
@@ -85,6 +87,7 @@ class DragZone extends Base {
85
87
  dragProxy: null,
86
88
  /**
87
89
  * @member {Object|null} dragProxyConfig_=null
90
+ * @reactive
88
91
  */
89
92
  dragProxyConfig_: null,
90
93
  /**
@@ -135,6 +138,7 @@ class DragZone extends Base {
135
138
  owner: null,
136
139
  /**
137
140
  * @member {String} proxyParentId_='document.body'
141
+ * @reactive
138
142
  */
139
143
  proxyParentId_: 'document.body',
140
144
  /**
@@ -156,6 +160,7 @@ class DragZone extends Base {
156
160
  useProxyWrapper: true,
157
161
  /**
158
162
  * @member {Number|null} windowId_=null
163
+ * @reactive
159
164
  */
160
165
  windowId_: null
161
166
  }
@@ -27,6 +27,7 @@ class DragZone extends BaseDragZone {
27
27
  /**
28
28
  * Limit drag&drop to leaf nodes => excluding folders
29
29
  * @member {Boolean} leafNodesOnly_=true
30
+ * @reactive
30
31
  */
31
32
  leafNodesOnly_: false
32
33
  }
@@ -23,6 +23,7 @@ class BooleanContainer extends Container {
23
23
  baseCls: ['neo-filter-booleancontainer'],
24
24
  /**
25
25
  * @member {Object} layout={ntype: 'hbox', align: 'center'}
26
+ * @reactive
26
27
  */
27
28
  layout: {ntype: 'hbox', align: 'center'},
28
29
  /**
@@ -32,6 +33,7 @@ class BooleanContainer extends Container {
32
33
  radioConfig: null,
33
34
  /**
34
35
  * @member {Boolean|null} value_=null
36
+ * @reactive
35
37
  */
36
38
  value_: null
37
39
  }