neo.mjs 10.0.0-beta.5 → 10.0.0

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 (491) hide show
  1. package/.github/RELEASE_NOTES/v10.0.0-beta.1.md +20 -0
  2. package/.github/RELEASE_NOTES/v10.0.0-beta.2.md +73 -0
  3. package/.github/RELEASE_NOTES/v10.0.0-beta.3.md +39 -0
  4. package/.github/RELEASE_NOTES/v10.0.0-beta.5.md +70 -0
  5. package/.github/RELEASE_NOTES/v10.0.0-beta.6.md +48 -0
  6. package/.github/RELEASE_NOTES/v10.0.0.md +52 -0
  7. package/.github/epic-functional-components.md +498 -0
  8. package/.github/ticket-asymmetric-vdom-updates.md +122 -0
  9. package/README.md +0 -3
  10. package/ServiceWorker.mjs +2 -2
  11. package/apps/colors/store/Colors.mjs +1 -0
  12. package/apps/colors/view/GridContainer.mjs +3 -0
  13. package/apps/colors/view/HeaderToolbar.mjs +2 -0
  14. package/apps/colors/view/Viewport.mjs +3 -0
  15. package/apps/covid/view/FooterContainer.mjs +3 -0
  16. package/apps/covid/view/GalleryContainer.mjs +2 -0
  17. package/apps/covid/view/GalleryContainerController.mjs +1 -0
  18. package/apps/covid/view/HeaderContainer.mjs +2 -0
  19. package/apps/covid/view/HelixContainer.mjs +2 -0
  20. package/apps/covid/view/HelixContainerController.mjs +1 -0
  21. package/apps/covid/view/MainContainer.mjs +3 -0
  22. package/apps/covid/view/TableContainer.mjs +3 -0
  23. package/apps/covid/view/TableContainerController.mjs +1 -0
  24. package/apps/covid/view/WorldMapContainer.mjs +2 -0
  25. package/apps/covid/view/country/Gallery.mjs +3 -0
  26. package/apps/covid/view/country/Helix.mjs +8 -0
  27. package/apps/covid/view/country/HistoricalDataTable.mjs +1 -0
  28. package/apps/covid/view/country/Table.mjs +2 -0
  29. package/apps/covid/view/mapboxGl/Component.mjs +1 -0
  30. package/apps/covid/view/mapboxGl/Container.mjs +2 -0
  31. package/apps/email/EPIC_PLAN.md +58 -0
  32. package/apps/email/neo-config.json +2 -2
  33. package/apps/email/store/Emails.mjs +11 -1
  34. package/apps/email/view/ComposeView.mjs +44 -0
  35. package/apps/email/view/MainView.mjs +89 -0
  36. package/apps/email/view/Viewport.mjs +4 -33
  37. package/apps/email/view/ViewportStateProvider.mjs +3 -3
  38. package/apps/form/store/SideNav.mjs +1 -0
  39. package/apps/form/view/FormContainer.mjs +1 -0
  40. package/apps/form/view/FormPageContainer.mjs +2 -0
  41. package/apps/form/view/SideNavList.mjs +1 -0
  42. package/apps/form/view/Viewport.mjs +3 -0
  43. package/apps/portal/childapps/preview/MainContainer.mjs +1 -0
  44. package/apps/portal/index.html +1 -1
  45. package/apps/portal/store/BlogPosts.mjs +2 -0
  46. package/apps/portal/store/Content.mjs +1 -0
  47. package/apps/portal/store/ContentSections.mjs +1 -0
  48. package/apps/portal/store/Examples.mjs +1 -0
  49. package/apps/portal/view/HeaderToolbar.mjs +1 -0
  50. package/apps/portal/view/Viewport.mjs +5 -0
  51. package/apps/portal/view/ViewportController.mjs +11 -3
  52. package/apps/portal/view/about/Container.mjs +2 -0
  53. package/apps/portal/view/about/MemberContainer.mjs +7 -0
  54. package/apps/portal/view/blog/Container.mjs +2 -0
  55. package/apps/portal/view/blog/List.mjs +2 -0
  56. package/apps/portal/view/examples/List.mjs +29 -19
  57. package/apps/portal/view/examples/TabContainer.mjs +4 -0
  58. package/apps/portal/view/home/ContentBox.mjs +3 -0
  59. package/apps/portal/view/home/FeatureSection.mjs +8 -0
  60. package/apps/portal/view/home/FooterContainer.mjs +4 -1
  61. package/apps/portal/view/home/MainContainer.mjs +2 -0
  62. package/apps/portal/view/home/parts/AfterMath.mjs +2 -0
  63. package/apps/portal/view/home/parts/BaseContainer.mjs +1 -0
  64. package/apps/portal/view/home/parts/Colors.mjs +4 -0
  65. package/apps/portal/view/home/parts/Features.mjs +2 -0
  66. package/apps/portal/view/home/parts/Helix.mjs +5 -0
  67. package/apps/portal/view/home/parts/How.mjs +4 -0
  68. package/apps/portal/view/home/parts/MainNeo.mjs +1 -0
  69. package/apps/portal/view/home/parts/References.mjs +2 -0
  70. package/apps/portal/view/learn/ContentComponent.mjs +11 -5
  71. package/apps/portal/view/learn/ContentTreeList.mjs +2 -0
  72. package/apps/portal/view/learn/CubeLayoutButton.mjs +1 -0
  73. package/apps/portal/view/learn/MainContainer.mjs +4 -0
  74. package/apps/portal/view/learn/PageContainer.mjs +2 -0
  75. package/apps/portal/view/learn/PageSectionsContainer.mjs +3 -0
  76. package/apps/portal/view/learn/PageSectionsList.mjs +1 -0
  77. package/apps/portal/view/services/Component.mjs +1 -0
  78. package/apps/realworld/api/Base.mjs +1 -0
  79. package/apps/realworld/view/HeaderComponent.mjs +4 -0
  80. package/apps/realworld/view/HomeComponent.mjs +7 -0
  81. package/apps/realworld/view/MainContainer.mjs +2 -0
  82. package/apps/realworld/view/MainContainerController.mjs +2 -0
  83. package/apps/realworld/view/article/CommentComponent.mjs +3 -0
  84. package/apps/realworld/view/article/Component.mjs +17 -10
  85. package/apps/realworld/view/article/CreateCommentComponent.mjs +2 -0
  86. package/apps/realworld/view/article/CreateComponent.mjs +5 -0
  87. package/apps/realworld/view/article/PreviewComponent.mjs +9 -0
  88. package/apps/realworld/view/article/TagListComponent.mjs +2 -0
  89. package/apps/realworld/view/user/ProfileComponent.mjs +7 -0
  90. package/apps/realworld/view/user/SettingsComponent.mjs +5 -0
  91. package/apps/realworld/view/user/SignUpComponent.mjs +3 -0
  92. package/apps/realworld2/api/Base.mjs +1 -0
  93. package/apps/realworld2/view/FooterComponent.mjs +1 -0
  94. package/apps/realworld2/view/HeaderToolbar.mjs +3 -0
  95. package/apps/realworld2/view/HomeContainer.mjs +1 -0
  96. package/apps/realworld2/view/MainContainer.mjs +2 -0
  97. package/apps/realworld2/view/MainContainerController.mjs +1 -0
  98. package/apps/realworld2/view/article/Helix.mjs +1 -0
  99. package/apps/realworld2/view/article/PreviewComponent.mjs +9 -0
  100. package/apps/realworld2/view/article/PreviewList.mjs +1 -0
  101. package/apps/realworld2/view/article/TagListComponent.mjs +2 -0
  102. package/apps/route/view/CenterContainer.mjs +1 -0
  103. package/apps/route/view/MainView.mjs +1 -0
  104. package/apps/sharedcovid/childapps/sharedcovidchart/MainContainer.mjs +1 -0
  105. package/apps/sharedcovid/childapps/sharedcovidgallery/MainContainer.mjs +1 -0
  106. package/apps/sharedcovid/childapps/sharedcovidhelix/MainContainer.mjs +1 -0
  107. package/apps/sharedcovid/childapps/sharedcovidmap/MainContainer.mjs +1 -0
  108. package/apps/sharedcovid/view/FooterContainer.mjs +3 -0
  109. package/apps/sharedcovid/view/GalleryContainer.mjs +2 -0
  110. package/apps/sharedcovid/view/GalleryContainerController.mjs +1 -0
  111. package/apps/sharedcovid/view/HeaderContainer.mjs +2 -0
  112. package/apps/sharedcovid/view/HelixContainer.mjs +2 -0
  113. package/apps/sharedcovid/view/HelixContainerController.mjs +1 -0
  114. package/apps/sharedcovid/view/MainContainer.mjs +3 -0
  115. package/apps/sharedcovid/view/TableContainer.mjs +3 -0
  116. package/apps/sharedcovid/view/TableContainerController.mjs +1 -0
  117. package/apps/sharedcovid/view/WorldMapContainer.mjs +2 -0
  118. package/apps/sharedcovid/view/country/Gallery.mjs +3 -0
  119. package/apps/sharedcovid/view/country/Helix.mjs +8 -0
  120. package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -0
  121. package/apps/sharedcovid/view/country/Table.mjs +2 -0
  122. package/apps/sharedcovid/view/mapboxGl/Component.mjs +1 -0
  123. package/apps/sharedcovid/view/mapboxGl/Container.mjs +2 -0
  124. package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +2 -0
  125. package/apps/shareddialog/view/DemoDialog.mjs +2 -0
  126. package/apps/shareddialog/view/MainContainer.mjs +2 -0
  127. package/apps/shareddialog/view/MainContainerController.mjs +1 -0
  128. package/buildScripts/addReactiveTags.mjs +191 -0
  129. package/buildScripts/checkReactiveTags.mjs +160 -0
  130. package/docs/app/store/Api.mjs +1 -0
  131. package/docs/app/store/Examples.mjs +1 -0
  132. package/docs/app/view/ApiTreeList.mjs +1 -0
  133. package/docs/app/view/ContentTabContainer.mjs +2 -0
  134. package/docs/app/view/ExamplesTreeList.mjs +2 -0
  135. package/docs/app/view/HeaderContainer.mjs +3 -0
  136. package/docs/app/view/MainContainer.mjs +5 -0
  137. package/docs/app/view/classdetails/HeaderComponent.mjs +1 -0
  138. package/docs/app/view/classdetails/MainContainer.mjs +3 -0
  139. package/docs/app/view/classdetails/MembersList.mjs +5 -0
  140. package/docs/app/view/classdetails/SourceViewComponent.mjs +2 -0
  141. package/examples/ConfigurationViewport.mjs +14 -8
  142. package/examples/calendar/weekview/MainContainer.mjs +4 -0
  143. package/examples/component/coronaGallery/CountryGallery.mjs +2 -0
  144. package/examples/component/coronaGallery/CountryStore.mjs +1 -0
  145. package/examples/component/coronaGallery/Viewport.mjs +3 -0
  146. package/examples/component/coronaGallery/ViewportController.mjs +1 -0
  147. package/examples/component/coronaHelix/CountryHelix.mjs +7 -0
  148. package/examples/component/coronaHelix/MainContainer.mjs +1 -0
  149. package/examples/component/gallery/ImageStore.mjs +1 -0
  150. package/examples/component/helix/ImageStore.mjs +1 -0
  151. package/examples/component/helix/Viewport.mjs +3 -0
  152. package/examples/component/helix/ViewportController.mjs +1 -0
  153. package/examples/component/multiWindowCoronaGallery/childapp/Viewport.mjs +1 -0
  154. package/examples/component/multiWindowHelix/childapp/Viewport.mjs +1 -0
  155. package/examples/component/wrapper/googleMaps/MapComponent.mjs +2 -0
  156. package/examples/core/config/MainContainer.mjs +2 -0
  157. package/examples/dialog/DemoDialog.mjs +2 -0
  158. package/examples/dialog/MainContainer.mjs +1 -0
  159. package/examples/form/field/color/MainStore.mjs +1 -0
  160. package/examples/functional/button/base/MainContainer.mjs +207 -0
  161. package/examples/functional/button/base/app.mjs +6 -0
  162. package/examples/functional/button/base/index.html +11 -0
  163. package/examples/functional/button/base/neo-config.json +6 -0
  164. package/examples/functional/defineComponent/Component.mjs +18 -0
  165. package/examples/functional/defineComponent/MainContainer.mjs +41 -0
  166. package/examples/functional/defineComponent/app.mjs +6 -0
  167. package/examples/functional/defineComponent/index.html +11 -0
  168. package/examples/functional/defineComponent/neo-config.json +6 -0
  169. package/examples/functional/hostComponent/Component.mjs +32 -0
  170. package/examples/functional/hostComponent/MainContainer.mjs +48 -0
  171. package/examples/functional/hostComponent/app.mjs +6 -0
  172. package/examples/functional/hostComponent/index.html +11 -0
  173. package/examples/functional/hostComponent/neo-config.json +6 -0
  174. package/examples/grid/animatedRowSorting/Viewport.mjs +1 -1
  175. package/examples/grid/bigData/ControlsContainer.mjs +3 -0
  176. package/examples/grid/bigData/GridContainer.mjs +4 -2
  177. package/examples/grid/bigData/MainContainer.mjs +2 -0
  178. package/examples/grid/bigData/MainModel.mjs +1 -0
  179. package/examples/grid/bigData/MainStore.mjs +3 -0
  180. package/examples/grid/cellEditing/MainContainer.mjs +1 -1
  181. package/examples/grid/container/MainContainer.mjs +1 -1
  182. package/examples/grid/covid/GridContainer.mjs +3 -0
  183. package/examples/grid/covid/MainContainer.mjs +2 -0
  184. package/examples/grid/covid/Store.mjs +1 -0
  185. package/examples/grid/nestedRecordFields/EditUserDialog.mjs +3 -0
  186. package/examples/grid/nestedRecordFields/Viewport.mjs +3 -1
  187. package/examples/list/animate/List.mjs +4 -0
  188. package/examples/list/animate/MainContainer.mjs +2 -0
  189. package/examples/list/circle/MainStore.mjs +1 -0
  190. package/examples/list/color/MainStore.mjs +1 -0
  191. package/examples/preloadingAssets/view/MainContainer.mjs +2 -0
  192. package/examples/stateProvider/advanced/MainContainer.mjs +1 -0
  193. package/examples/stateProvider/dialog/EditUserDialog.mjs +2 -0
  194. package/examples/stateProvider/dialog/MainContainer.mjs +1 -0
  195. package/examples/stateProvider/extendedClass/MainContainer.mjs +2 -0
  196. package/examples/stateProvider/inline/MainContainer.mjs +1 -0
  197. package/examples/stateProvider/inlineNoStateProvider/MainContainer.mjs +1 -0
  198. package/examples/stateProvider/inlineNoStateProvider/MainContainerController.mjs +2 -0
  199. package/examples/stateProvider/multiWindow/EditUserDialog.mjs +3 -0
  200. package/examples/stateProvider/multiWindow/MainContainer.mjs +1 -0
  201. package/examples/stateProvider/multiWindow/Viewport.mjs +1 -0
  202. package/examples/stateProvider/nestedData/MainContainer.mjs +1 -0
  203. package/examples/stateProvider/table/MainContainer.mjs +1 -0
  204. package/examples/table/covid/MainContainer.mjs +2 -0
  205. package/examples/table/covid/Store.mjs +1 -0
  206. package/examples/table/covid/TableContainer.mjs +3 -0
  207. package/examples/table/nestedRecordFields/EditUserDialog.mjs +3 -0
  208. package/examples/table/nestedRecordFields/Viewport.mjs +1 -0
  209. package/examples/todoList/version1/MainComponent.mjs +1 -1
  210. package/examples/toolbar/breadcrumb/view/MainContainer.mjs +2 -0
  211. package/examples/toolbar/paging/store/Users.mjs +1 -0
  212. package/examples/toolbar/paging/view/AddUserDialog.mjs +3 -0
  213. package/examples/toolbar/paging/view/MainContainer.mjs +3 -0
  214. package/examples/treeAccordion/MainContainer.mjs +2 -2
  215. package/examples/worker/task/MainContainer.mjs +1 -0
  216. package/learn/Glossary.md +1 -0
  217. package/learn/UsingTheseTopics.md +1 -0
  218. package/learn/benefits/ConfigSystem.md +2 -0
  219. package/learn/benefits/Effort.md +1 -0
  220. package/learn/benefits/Features.md +1 -0
  221. package/learn/benefits/FormsEngine.md +1 -0
  222. package/learn/benefits/FourEnvironments.md +2 -0
  223. package/learn/benefits/Introduction.md +2 -0
  224. package/learn/benefits/MultiWindow.md +3 -1
  225. package/learn/benefits/OffTheMainThread.md +2 -0
  226. package/learn/benefits/Quick.md +2 -0
  227. package/learn/benefits/RPCLayer.md +2 -0
  228. package/learn/benefits/Speed.md +2 -0
  229. package/learn/blog/v10-deep-dive-functional-components.md +293 -0
  230. package/learn/blog/v10-deep-dive-reactivity.md +522 -0
  231. package/learn/blog/v10-deep-dive-state-provider.md +432 -0
  232. package/learn/blog/v10-deep-dive-vdom-revolution.md +194 -0
  233. package/learn/blog/v10-post1-love-story.md +383 -0
  234. package/learn/comparisons/NeoVsAngular.md +90 -0
  235. package/learn/comparisons/NeoVsExtJs.md +178 -0
  236. package/learn/comparisons/NeoVsNextJs.md +124 -0
  237. package/learn/comparisons/NeoVsReact.md +95 -0
  238. package/learn/comparisons/NeoVsSolid.md +78 -0
  239. package/learn/comparisons/NeoVsVue.md +92 -0
  240. package/learn/comparisons/Overview.md +46 -0
  241. package/learn/gettingstarted/ComponentModels.md +2 -0
  242. package/learn/gettingstarted/Config.md +2 -0
  243. package/learn/gettingstarted/DescribingTheUI.md +2 -0
  244. package/learn/gettingstarted/Events.md +2 -0
  245. package/learn/gettingstarted/Extending.md +2 -0
  246. package/learn/gettingstarted/References.md +2 -0
  247. package/learn/gettingstarted/Setup.md +3 -2
  248. package/learn/gettingstarted/Workspaces.md +2 -0
  249. package/learn/guides/datahandling/Collections.md +1 -0
  250. package/learn/guides/datahandling/Records.md +1 -0
  251. package/learn/guides/datahandling/StateProviders.md +130 -16
  252. package/learn/guides/datahandling/Tables.md +1 -1
  253. package/learn/guides/fundamentals/ConfigSystemDeepDive.md +1 -0
  254. package/learn/guides/fundamentals/DeclarativeComponentTreesVsImperativeVdom.md +2 -0
  255. package/learn/guides/fundamentals/DeclarativeVDOMWithEffects.md +10 -8
  256. package/learn/guides/fundamentals/ExtendingNeoClasses.md +1 -0
  257. package/learn/guides/fundamentals/InstanceLifecycle.md +3 -1
  258. package/learn/guides/fundamentals/MainThreadAddons.md +2 -0
  259. package/learn/guides/specificfeatures/Mixins.md +3 -1
  260. package/learn/guides/specificfeatures/MultiWindow.md +3 -1
  261. package/learn/guides/specificfeatures/PortalApp.md +2 -0
  262. package/learn/guides/uibuildingblocks/ComponentsAndContainers.md +2 -0
  263. package/learn/guides/uibuildingblocks/CustomComponents.md +2 -0
  264. package/learn/guides/uibuildingblocks/Layouts.md +2 -0
  265. package/learn/guides/uibuildingblocks/WorkingWithVDom.md +28 -2
  266. package/learn/guides/userinteraction/Forms.md +2 -0
  267. package/learn/guides/userinteraction/events/CustomEvents.md +2 -1
  268. package/learn/guides/userinteraction/events/DomEvents.md +2 -0
  269. package/learn/javascript/ClassFeatures.md +4 -3
  270. package/learn/javascript/Classes.md +10 -13
  271. package/learn/javascript/Overrides.md +10 -6
  272. package/learn/javascript/Super.md +12 -8
  273. package/learn/tree.json +71 -64
  274. package/learn/tutorials/Earthquakes.md +2 -0
  275. package/learn/tutorials/RSP.md +3 -1
  276. package/learn/tutorials/TodoList.md +103 -7
  277. package/package.json +8 -6
  278. package/resources/scss/src/apps/email/ComposeView.scss +16 -0
  279. package/resources/scss/src/apps/email/MainView.scss +5 -0
  280. package/resources/scss/src/apps/portal/learn/ContentComponent.scss +5 -4
  281. package/src/DefaultConfig.mjs +12 -2
  282. package/src/Main.mjs +1 -0
  283. package/src/Neo.mjs +219 -166
  284. package/src/Xhr.mjs +1 -0
  285. package/src/button/Base.mjs +13 -0
  286. package/src/button/Effect.mjs +16 -2
  287. package/src/button/Split.mjs +2 -0
  288. package/src/calendar/store/Calendars.mjs +1 -0
  289. package/src/calendar/store/Colors.mjs +1 -0
  290. package/src/calendar/store/Events.mjs +1 -0
  291. package/src/calendar/view/DayComponent.mjs +2 -0
  292. package/src/calendar/view/EditEventContainer.mjs +4 -1
  293. package/src/calendar/view/MainContainer.mjs +13 -0
  294. package/src/calendar/view/MainContainerStateProvider.mjs +14 -28
  295. package/src/calendar/view/SettingsContainer.mjs +1 -0
  296. package/src/calendar/view/YearComponent.mjs +16 -0
  297. package/src/calendar/view/calendars/ColorsList.mjs +2 -0
  298. package/src/calendar/view/calendars/Container.mjs +2 -0
  299. package/src/calendar/view/calendars/EditContainer.mjs +1 -0
  300. package/src/calendar/view/month/Component.mjs +11 -0
  301. package/src/calendar/view/settings/GeneralContainer.mjs +1 -0
  302. package/src/calendar/view/settings/MonthContainer.mjs +1 -0
  303. package/src/calendar/view/settings/WeekContainer.mjs +1 -0
  304. package/src/calendar/view/settings/YearContainer.mjs +1 -0
  305. package/src/calendar/view/week/Component.mjs +15 -1
  306. package/src/calendar/view/week/TimeAxisComponent.mjs +4 -0
  307. package/src/code/LivePreview.mjs +51 -23
  308. package/src/collection/Base.mjs +7 -10
  309. package/src/collection/Filter.mjs +6 -0
  310. package/src/collection/Sorter.mjs +3 -0
  311. package/src/component/Abstract.mjs +412 -0
  312. package/src/component/Base.mjs +48 -1077
  313. package/src/component/Canvas.mjs +1 -0
  314. package/src/component/Chip.mjs +4 -0
  315. package/src/component/Circle.mjs +14 -0
  316. package/src/component/Clock.mjs +4 -0
  317. package/src/component/DateSelector.mjs +12 -0
  318. package/src/component/Gallery.mjs +11 -0
  319. package/src/component/Helix.mjs +24 -0
  320. package/src/component/Label.mjs +1 -0
  321. package/src/component/Legend.mjs +3 -0
  322. package/src/component/MagicMoveText.mjs +4 -0
  323. package/src/component/Progress.mjs +3 -0
  324. package/src/component/Splitter.mjs +3 -0
  325. package/src/component/StatusBadge.mjs +6 -0
  326. package/src/component/Timer.mjs +4 -0
  327. package/src/component/Toast.mjs +6 -0
  328. package/src/component/Video.mjs +1 -0
  329. package/src/component/mwc/Button.mjs +7 -0
  330. package/src/component/mwc/TextField.mjs +9 -0
  331. package/src/component/wrapper/AmChart.mjs +2 -0
  332. package/src/component/wrapper/GoogleMaps.mjs +3 -0
  333. package/src/component/wrapper/MapboxGL.mjs +5 -0
  334. package/src/component/wrapper/MonacoEditor.mjs +12 -0
  335. package/src/container/Accordion.mjs +2 -0
  336. package/src/container/Base.mjs +7 -3
  337. package/src/container/Panel.mjs +1 -0
  338. package/src/container/Viewport.mjs +1 -0
  339. package/src/controller/Application.mjs +1 -0
  340. package/src/controller/Base.mjs +1 -0
  341. package/src/controller/Component.mjs +1 -0
  342. package/src/core/Base.mjs +86 -33
  343. package/src/core/Compare.mjs +4 -7
  344. package/src/core/Config.mjs +65 -52
  345. package/src/core/Effect.mjs +86 -24
  346. package/src/core/EffectManager.mjs +117 -8
  347. package/src/core/IdGenerator.mjs +13 -44
  348. package/src/core/Observable.mjs +69 -65
  349. package/src/data/Model.mjs +2 -0
  350. package/src/data/Store.mjs +7 -0
  351. package/src/data/connection/WebSocket.mjs +2 -0
  352. package/src/date/DayViewComponent.mjs +2 -0
  353. package/src/date/SelectorContainer.mjs +14 -0
  354. package/src/dialog/Base.mjs +8 -0
  355. package/src/draggable/DragZone.mjs +5 -0
  356. package/src/draggable/tree/DragZone.mjs +1 -0
  357. package/src/filter/BooleanContainer.mjs +2 -0
  358. package/src/filter/NumberContainer.mjs +3 -0
  359. package/src/filter/ToggleOperatorsButton.mjs +2 -0
  360. package/src/form/Fieldset.mjs +6 -0
  361. package/src/form/field/Base.mjs +7 -0
  362. package/src/form/field/CheckBox.mjs +18 -0
  363. package/src/form/field/Chip.mjs +1 -0
  364. package/src/form/field/ComboBox.mjs +8 -0
  365. package/src/form/field/Country.mjs +1 -0
  366. package/src/form/field/Currency.mjs +2 -0
  367. package/src/form/field/Date.mjs +4 -0
  368. package/src/form/field/Display.mjs +1 -0
  369. package/src/form/field/Email.mjs +1 -0
  370. package/src/form/field/FileUpload.mjs +7 -0
  371. package/src/form/field/Hidden.mjs +1 -0
  372. package/src/form/field/Number.mjs +7 -0
  373. package/src/form/field/Password.mjs +1 -0
  374. package/src/form/field/Phone.mjs +3 -0
  375. package/src/form/field/Picker.mjs +2 -0
  376. package/src/form/field/Radio.mjs +1 -0
  377. package/src/form/field/Range.mjs +3 -0
  378. package/src/form/field/Search.mjs +2 -0
  379. package/src/form/field/Text.mjs +43 -5
  380. package/src/form/field/TextArea.mjs +7 -0
  381. package/src/form/field/Time.mjs +6 -0
  382. package/src/form/field/Url.mjs +3 -0
  383. package/src/form/field/ZipCode.mjs +2 -0
  384. package/src/form/field/trigger/Base.mjs +3 -0
  385. package/src/form/field/trigger/Clear.mjs +2 -0
  386. package/src/form/field/trigger/CopyToClipboard.mjs +2 -0
  387. package/src/form/field/trigger/Date.mjs +1 -0
  388. package/src/form/field/trigger/Picker.mjs +1 -0
  389. package/src/form/field/trigger/Search.mjs +1 -0
  390. package/src/form/field/trigger/SpinDown.mjs +2 -0
  391. package/src/form/field/trigger/SpinUp.mjs +1 -0
  392. package/src/form/field/trigger/Time.mjs +2 -0
  393. package/src/functional/_export.mjs +6 -0
  394. package/src/functional/button/Base.mjs +384 -0
  395. package/src/functional/component/Base.mjs +405 -0
  396. package/src/functional/defineComponent.mjs +102 -0
  397. package/src/functional/useConfig.mjs +52 -0
  398. package/src/functional/useEvent.mjs +43 -0
  399. package/src/grid/Body.mjs +20 -1
  400. package/src/grid/Container.mjs +50 -60
  401. package/src/grid/ScrollManager.mjs +2 -0
  402. package/src/grid/VerticalScrollbar.mjs +2 -0
  403. package/src/grid/column/Base.mjs +2 -0
  404. package/src/grid/header/Button.mjs +7 -0
  405. package/src/grid/header/Toolbar.mjs +6 -0
  406. package/src/grid/plugin/AnimateRows.mjs +2 -0
  407. package/src/layout/Base.mjs +3 -0
  408. package/src/layout/Card.mjs +1 -0
  409. package/src/layout/Cube.mjs +18 -4
  410. package/src/layout/Fit.mjs +1 -0
  411. package/src/layout/Flexbox.mjs +7 -0
  412. package/src/layout/Form.mjs +2 -0
  413. package/src/layout/Grid.mjs +1 -0
  414. package/src/layout/HBox.mjs +1 -0
  415. package/src/layout/VBox.mjs +1 -0
  416. package/src/list/Base.mjs +13 -0
  417. package/src/list/Chip.mjs +1 -0
  418. package/src/list/Circle.mjs +2 -0
  419. package/src/list/Color.mjs +1 -0
  420. package/src/list/plugin/Animate.mjs +2 -0
  421. package/src/main/DeltaUpdates.mjs +1 -0
  422. package/src/main/DomEvents.mjs +2 -0
  423. package/src/main/addon/CloneNode.mjs +1 -0
  424. package/src/main/addon/Cookie.mjs +1 -0
  425. package/src/main/addon/GoogleMaps.mjs +1 -0
  426. package/src/main/addon/LocalStorage.mjs +1 -0
  427. package/src/main/addon/MapboxGL.mjs +1 -0
  428. package/src/main/addon/Markdown.mjs +1 -0
  429. package/src/main/addon/Navigator.mjs +1 -0
  430. package/src/main/addon/Popover.mjs +1 -0
  431. package/src/main/addon/Stylesheet.mjs +1 -0
  432. package/src/main/addon/WindowPosition.mjs +1 -0
  433. package/src/manager/Component.mjs +0 -71
  434. package/src/manager/VDomUpdate.mjs +320 -0
  435. package/src/menu/List.mjs +6 -0
  436. package/src/menu/Model.mjs +1 -0
  437. package/src/menu/Panel.mjs +3 -0
  438. package/src/menu/Store.mjs +1 -0
  439. package/src/mixin/DomEvents.mjs +130 -0
  440. package/src/mixin/VdomLifecycle.mjs +670 -0
  441. package/src/plugin/Base.mjs +1 -0
  442. package/src/plugin/Resizable.mjs +2 -0
  443. package/src/selection/Model.mjs +15 -18
  444. package/src/selection/grid/BaseModel.mjs +1 -0
  445. package/src/sitemap/Component.mjs +1 -0
  446. package/src/state/Provider.mjs +129 -87
  447. package/src/state/createHierarchicalDataProxy.mjs +39 -25
  448. package/src/tab/Container.mjs +6 -0
  449. package/src/tab/Strip.mjs +1 -0
  450. package/src/tab/header/Button.mjs +2 -0
  451. package/src/tab/header/EffectButton.mjs +2 -0
  452. package/src/tab/header/Toolbar.mjs +1 -0
  453. package/src/table/Body.mjs +3 -0
  454. package/src/table/Container.mjs +10 -0
  455. package/src/table/header/Button.mjs +8 -0
  456. package/src/table/header/Toolbar.mjs +5 -0
  457. package/src/table/plugin/CellEditing.mjs +1 -0
  458. package/src/toolbar/Base.mjs +4 -0
  459. package/src/toolbar/Breadcrumb.mjs +3 -0
  460. package/src/toolbar/Paging.mjs +5 -0
  461. package/src/tooltip/Base.mjs +2 -0
  462. package/src/tree/List.mjs +3 -0
  463. package/src/util/HashHistory.mjs +1 -0
  464. package/src/util/KeyNavigation.mjs +2 -0
  465. package/src/util/Matrix.mjs +1 -0
  466. package/src/util/VDom.mjs +18 -5
  467. package/src/util/VNode.mjs +7 -1
  468. package/src/util/vdom/TreeBuilder.mjs +105 -0
  469. package/src/vdom/Helper.mjs +35 -23
  470. package/src/vdom/VNode.mjs +4 -6
  471. package/src/worker/App.mjs +1 -0
  472. package/src/worker/Base.mjs +2 -0
  473. package/src/worker/Manager.mjs +2 -0
  474. package/src/worker/ServiceBase.mjs +6 -1
  475. package/src/worker/mixin/RemoteMethodAccess.mjs +1 -6
  476. package/test/siesta/siesta.js +17 -2
  477. package/test/siesta/tests/VdomCalendar.mjs +19 -15
  478. package/test/siesta/tests/VdomHelper.mjs +7 -7
  479. package/test/siesta/tests/classic/Button.mjs +113 -0
  480. package/test/siesta/tests/core/Effect.mjs +10 -14
  481. package/test/siesta/tests/core/EffectBatching.mjs +72 -79
  482. package/test/siesta/tests/functional/Button.mjs +113 -0
  483. package/test/siesta/tests/state/ProviderNestedDataConfigs.mjs +314 -0
  484. package/test/siesta/tests/state/createHierarchicalDataProxy.mjs +42 -55
  485. package/test/siesta/tests/vdom/Advanced.mjs +14 -8
  486. package/test/siesta/tests/vdom/VdomAsymmetricUpdates.mjs +366 -0
  487. package/test/siesta/tests/vdom/VdomRealWorldUpdates.mjs +249 -0
  488. package/test/siesta/tests/vdom/layout/Cube.mjs +11 -7
  489. package/test/siesta/tests/vdom/table/Container.mjs +9 -5
  490. package/learn/javascript/NewNode.md +0 -31
  491. package/src/core/EffectBatchManager.mjs +0 -68
@@ -1,7 +1,16 @@
1
1
  import Base from './Base.mjs';
2
2
  import NeoArray from '../util/Array.mjs';
3
+ import {isDescriptor} from '../core/ConfigSymbols.mjs';
3
4
  import {resolveCallback} from '../util/Function.mjs';
4
5
 
6
+ /**
7
+ * A unique, non-enumerable key for the internal event map.
8
+ * Using a Symbol prevents property name collisions on the consuming class instance,
9
+ * providing a robust way to manage private state within a mixin.
10
+ * @type {Symbol}
11
+ */
12
+ const eventMapSymbol = Symbol('eventMap');
13
+
5
14
  /**
6
15
  * @class Neo.core.Observable
7
16
  * @extends Neo.core.Base
@@ -19,12 +28,35 @@ class Observable extends Base {
19
28
  */
20
29
  ntype: 'mixin-observable',
21
30
  /**
22
- * @member {Boolean} mixin=true
23
- * @protected
31
+ * A declarative way to assign event listeners to an instance upon creation.
32
+ * The framework processes this config and calls `on()` to populate the
33
+ * internal event registry. This config should not be manipulated directly after
34
+ * instantiation; use `on()` and `un()` instead.
35
+ * @member {Object|null} listeners_
36
+ * @example
37
+ * listeners: {
38
+ * myEvent: 'onMyEvent',
39
+ * otherEvent: {
40
+ * fn: 'onOtherEvent',
41
+ * delay: 100,
42
+ * once: true
43
+ * },
44
+ * scope: this
45
+ * }
46
+ * @reactive
24
47
  */
25
- mixin: true
48
+ listeners_: {
49
+ [isDescriptor]: true,
50
+ merge : 'deep',
51
+ value : {}
52
+ }
26
53
  }
27
54
 
55
+ /**
56
+ * @member {Object} [eventMapSymbol]
57
+ * @private
58
+ */
59
+
28
60
  /**
29
61
  * @param {Object|String} name
30
62
  * @param {Object} [opts]
@@ -101,6 +133,12 @@ class Observable extends Base {
101
133
  }
102
134
 
103
135
  if (!nameObject) {
136
+ // LAZY INITIALIZATION: The key to a robust mixin.
137
+ // This ensures the private internal listener store exists on the instance.
138
+ // `eventMapSymbol` is the *actual* registry of handler arrays, and is
139
+ // intentionally separate from the public `listeners_` config.
140
+ me[eventMapSymbol] ??= {};
141
+
104
142
  eventConfig = {fn: listener, id: eventId || Neo.getId('event')};
105
143
 
106
144
  if (data) {eventConfig.data = data}
@@ -108,7 +146,7 @@ class Observable extends Base {
108
146
  if (once) {eventConfig.once = once}
109
147
  if (scope) {eventConfig.scope = scope}
110
148
 
111
- if (existing = me.listeners?.[name]) {
149
+ if ((existing = me[eventMapSymbol][name])) {
112
150
  existing.forEach(cfg => {
113
151
  if (cfg.id === eventId || (cfg.fn === listener && cfg.scope === scope)) {
114
152
  console.error('Duplicate event handler attached:', name, me)
@@ -123,7 +161,7 @@ class Observable extends Base {
123
161
  existing.push(eventConfig)
124
162
  }
125
163
  } else {
126
- me.listeners[name] = [eventConfig]
164
+ me[eventMapSymbol][name] = [eventConfig] // Use the private eventMapSymbol registry
127
165
  }
128
166
 
129
167
  return eventConfig.id
@@ -132,6 +170,25 @@ class Observable extends Base {
132
170
  return null
133
171
  }
134
172
 
173
+ /**
174
+ * This hook is the bridge between the declarative `listeners_` config and the
175
+ * imperative `on()`/`un()` methods. It's called automatically by the framework
176
+ * whenever the `listeners` config property is changed.
177
+ * @param {Object} value The new listeners object
178
+ * @param {Object} oldValue The old listeners object
179
+ * @protected
180
+ */
181
+ afterSetListeners(value, oldValue) {
182
+ // Unregister any listeners from the old config object
183
+ if (oldValue && Object.keys(oldValue).length > 0) {
184
+ this.un(oldValue)
185
+ }
186
+ // Register all listeners from the new config object
187
+ if (value && Object.keys(value).length > 0) {
188
+ this.on(value)
189
+ }
190
+ }
191
+
135
192
  /**
136
193
  * Call the passed function, or a function by *name* which exists in the passed scope's
137
194
  * or this component's ownership chain.
@@ -164,7 +221,7 @@ class Observable extends Base {
164
221
  fire(name) {
165
222
  let me = this,
166
223
  args = [].slice.call(arguments, 1),
167
- listeners = me.listeners,
224
+ listeners = me[eventMapSymbol], // Always use the private, structured registry for firing events.
168
225
  delay, handler, handlers, i, len;
169
226
 
170
227
  if (listeners && listeners[name]) {
@@ -203,50 +260,6 @@ class Observable extends Base {
203
260
  }
204
261
  }
205
262
 
206
- /**
207
- * @param {Object} config
208
- */
209
- initObservable(config) {
210
- let me = this,
211
- proto = me.__proto__,
212
- ctor = proto.constructor,
213
- listeners;
214
-
215
- if (config.listeners) {
216
- me.listeners = config.listeners;
217
- delete config.listeners
218
- }
219
-
220
- listeners = me.listeners;
221
-
222
- me.listeners = {};
223
-
224
- if (listeners) {
225
- if (Neo.isObject(listeners)) {
226
- listeners = {...listeners}
227
- }
228
-
229
- me.addListener(listeners);
230
- }
231
-
232
- while (proto?.constructor.isClass) {
233
- ctor = proto.constructor;
234
-
235
- if (ctor.observable && !ctor.listeners) {
236
- Object.assign(ctor, {
237
- addListener : me.addListener,
238
- fire : me.fire,
239
- listeners : {},
240
- on : me.on,
241
- removeListener: me.removeListener,
242
- un : me.un
243
- })
244
- }
245
-
246
- proto = proto.__proto__
247
- }
248
- }
249
-
250
263
  /**
251
264
  * Alias for addListener
252
265
  * @param {Object|String} name
@@ -287,6 +300,9 @@ class Observable extends Base {
287
300
  let me = this,
288
301
  i, len, listener, listeners, match;
289
302
 
303
+ // LAZY INITIALIZATION: Ensure the internal listener store exists.
304
+ me[eventMapSymbol] ??= {};
305
+
290
306
  if (Neo.isFunction(eventId)) {
291
307
  me.removeListener({[name]: eventId, scope});
292
308
  return
@@ -299,7 +315,7 @@ class Observable extends Base {
299
315
  }
300
316
 
301
317
  Object.entries(name).forEach(([key, value]) => {
302
- listeners = me.listeners[key] || [];
318
+ listeners = me[eventMapSymbol][key] || [];
303
319
  i = 0;
304
320
  len = listeners.length;
305
321
 
@@ -314,9 +330,9 @@ class Observable extends Base {
314
330
  break
315
331
  }
316
332
  }
317
- });
333
+ })
318
334
  } else if (Neo.isString(eventId)) {
319
- listeners = me.listeners[name];
335
+ listeners = me[eventMapSymbol][name];
320
336
  match = false;
321
337
 
322
338
  listeners.forEach((eventConfig, idx) => {
@@ -331,18 +347,6 @@ class Observable extends Base {
331
347
  }
332
348
  }
333
349
 
334
- // removeAllListeners: function(name) {
335
-
336
- // },
337
-
338
- // suspendListeners: function(queue) {
339
-
340
- // },
341
-
342
- // resumeListeners: function() {
343
-
344
- // }
345
-
346
350
  /**
347
351
  * Alias for removeListener
348
352
  * @param {Object|String} name
@@ -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
  }
@@ -33,6 +33,7 @@ class NumberContainer extends Container {
33
33
  fieldModule: Number,
34
34
  /**
35
35
  * @member {Object} layout={ntype: 'hbox', align: 'stretch'}
36
+ * @reactive
36
37
  */
37
38
  layout: {ntype: 'hbox', align: 'stretch'},
38
39
  /**
@@ -42,10 +43,12 @@ class NumberContainer extends Container {
42
43
  fieldConfig: null,
43
44
  /**
44
45
  * @member {String|null} operator_=null
46
+ * @reactive
45
47
  */
46
48
  operator_: null,
47
49
  /**
48
50
  * @member {Boolean|null} value_=null
51
+ * @reactive
49
52
  */
50
53
  value_: null
51
54
  }
@@ -19,10 +19,12 @@ class ToggleOperatorsButton extends Button {
19
19
  ntype: 'filter-toggleoperatorsbutton',
20
20
  /**
21
21
  * @member {String[]} operators_=['===', '>', '<']
22
+ * @reactive
22
23
  */
23
24
  operators_: ['===', '>', '<'],
24
25
  /**
25
26
  * @member {String|null} value_=null
27
+ * @reactive
26
28
  */
27
29
  value_: null
28
30
  }
@@ -24,14 +24,17 @@ class Fieldset extends FormContainer {
24
24
  baseCls: ['neo-fieldset'],
25
25
  /**
26
26
  * @member {Boolean} collapsed_=false,
27
+ * @reactive
27
28
  */
28
29
  collapsed_: false,
29
30
  /**
30
31
  * @member {Boolean} collapsible_=true,
32
+ * @reactive
31
33
  */
32
34
  collapsible_: true,
33
35
  /**
34
36
  * @member {Boolean} disableItemsOnCollapse_=true,
37
+ * @reactive
35
38
  */
36
39
  disableItemsOnCollapse_: true,
37
40
  /**
@@ -41,10 +44,12 @@ class Fieldset extends FormContainer {
41
44
  hasLabelClickListener: false,
42
45
  /**
43
46
  * @member {String} iconClsChecked_='far fa-check'
47
+ * @reactive
44
48
  */
45
49
  iconClsChecked_: 'far fa-check',
46
50
  /**
47
51
  * @member {String} iconClsUnchecked_='far fa-square'
52
+ * @reactive
48
53
  */
49
54
  iconClsUnchecked_: 'far fa-square',
50
55
  /**
@@ -64,6 +69,7 @@ class Fieldset extends FormContainer {
64
69
  legendConfig: null,
65
70
  /**
66
71
  * @member {String} title_=''
72
+ * @reactive
67
73
  */
68
74
  title_: '',
69
75
  /**
@@ -31,24 +31,29 @@ class Field extends Component {
31
31
  * Form groups can get set on any parent component level.
32
32
  * An alternative way for using dots in field names.
33
33
  * @member {String|null} formGroup_=null
34
+ * @reactive
34
35
  */
35
36
  formGroup_: null,
36
37
  /**
37
38
  * @member {Object|null} keys={}
39
+ * @reactive
38
40
  */
39
41
  keys: {},
40
42
  /**
41
43
  * True indicates that a user has interacted with the form field
42
44
  * @member {Boolean} isTouched_=false
45
+ * @reactive
43
46
  */
44
47
  isTouched_: false,
45
48
  /**
46
49
  * Event name which sets isTouched to true. Valid options are 'focusEnter' & 'focusLeave'
47
50
  * @member {String} isTouched_=false
51
+ * @reactive
48
52
  */
49
53
  isTouchedEvent_: 'focusLeave',
50
54
  /**
51
55
  * @member {String|null} name_=null
56
+ * @reactive
52
57
  */
53
58
  name_: null,
54
59
  /**
@@ -57,6 +62,7 @@ class Field extends Component {
57
62
  * & accessibility though, so the default got set to true.
58
63
  * Feel free to change it to false to keep the DOM minimal.
59
64
  * @member {Boolean} renderName_=true
65
+ * @reactive
60
66
  */
61
67
  renderName_: true,
62
68
  /**
@@ -67,6 +73,7 @@ class Field extends Component {
67
73
  renderPath: true,
68
74
  /**
69
75
  * @member {*} value_=null
76
+ * @reactive
70
77
  */
71
78
  value_: null
72
79
  }