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
@@ -32,15 +32,18 @@ class CheckBox extends Field {
32
32
  baseCls: ['neo-checkboxfield'],
33
33
  /**
34
34
  * @member {Boolean} checked_=false
35
+ * @reactive
35
36
  */
36
37
  checked_: false,
37
38
  /**
38
39
  * @member {String|null} error_=null
40
+ * @reactive
39
41
  */
40
42
  error_: null,
41
43
  /**
42
44
  * Useful for fields inside a css grid where errors should live outside the layout
43
45
  * @member {Boolean} errorPositionAbsolute_=false
46
+ * @reactive
44
47
  */
45
48
  errorPositionAbsolute_: false,
46
49
  /**
@@ -53,10 +56,12 @@ class CheckBox extends Field {
53
56
  errorTextRequired: 'Required',
54
57
  /**
55
58
  * @member {Boolean} groupRequired_=false
59
+ * @reactive
56
60
  */
57
61
  groupRequired_: false,
58
62
  /**
59
63
  * @member {Boolean} hideLabel_=false
64
+ * @reactive
60
65
  */
61
66
  hideLabel_: false,
62
67
  /**
@@ -69,6 +74,7 @@ class CheckBox extends Field {
69
74
  iconClsChecked: ['fas', 'fa-check'],
70
75
  /**
71
76
  * @member {String} inputType_='checkbox'
77
+ * @reactive
72
78
  */
73
79
  inputType_: 'checkbox',
74
80
  /**
@@ -77,45 +83,54 @@ class CheckBox extends Field {
77
83
  labelBaseCls: ['neo-checkbox-label'],
78
84
  /**
79
85
  * @member {String[]} labelCls_=[]
86
+ * @reactive
80
87
  */
81
88
  labelCls_: [],
82
89
  /**
83
90
  * Edge-case config in case we want to render leading content with their own selectors like:
84
91
  * <span class="my-label-id-cls">E10</span> · Firstname
85
92
  * @member {String|null} labelId_=null
93
+ * @reactive
86
94
  */
87
95
  labelId_: null,
88
96
  /**
89
97
  * CSS rules for labelId
90
98
  * @member {String[]} labelIdCls_=[]
99
+ * @reactive
91
100
  */
92
101
  labelIdCls_: [],
93
102
  /**
94
103
  * Separator between labelId & labelText
95
104
  * @member {String} labelIdSeparator_=' · '
105
+ * @reactive
96
106
  */
97
107
  labelIdSeparator_: ' · ',
98
108
  /**
99
109
  * Valid values: 'left', 'top'
100
110
  * @member {String} labelPosition_='left'
111
+ * @reactive
101
112
  */
102
113
  labelPosition_: 'left',
103
114
  /**
104
115
  * @member {String} labelText_='LabelText'
116
+ * @reactive
105
117
  */
106
118
  labelText_: 'LabelText',
107
119
  /**
108
120
  * defaults to px
109
121
  * @member {Number|String} labelWidth_=150
122
+ * @reactive
110
123
  */
111
124
  labelWidth_: 150,
112
125
  /**
113
126
  * @member {Boolean} required_=false
127
+ * @reactive
114
128
  */
115
129
  required_: false,
116
130
  /**
117
131
  * Use case: Set this config to false for all but one item with the same name.
118
132
  * @member {Boolean} showErrorTexts_=true
133
+ * @reactive
119
134
  */
120
135
  showErrorTexts_: true,
121
136
  /**
@@ -129,14 +144,17 @@ class CheckBox extends Field {
129
144
  * Intended to get combined with form.Container: getFormState().
130
145
  * See apps/form as an example.
131
146
  * @member {Boolean} useAlertState_=false
147
+ * @reactive
132
148
  */
133
149
  useAlertState_: false,
134
150
  /**
135
151
  * @member {Boolean|Number|String|null} value=true
152
+ * @reactive
136
153
  */
137
154
  value: true,
138
155
  /**
139
156
  * @member {String|null} valueLabelText_=null
157
+ * @reactive
140
158
  */
141
159
  valueLabelText_: null,
142
160
  /**
@@ -18,6 +18,7 @@ class Chip extends ComboBox {
18
18
  ntype: 'chipfield',
19
19
  /**
20
20
  * @member {Object|null} listConfig={useCheckBoxes: true}
21
+ * @reactive
21
22
  */
22
23
  listConfig: {
23
24
  useCheckBoxes: true
@@ -53,6 +53,7 @@ class ComboBox extends Picker {
53
53
  filterDelay : 50,
54
54
  /**
55
55
  * @member {String} filterOperator_='like'
56
+ * @reactive
56
57
  */
57
58
  filterOperator_: 'like',
58
59
  /**
@@ -81,6 +82,7 @@ class ComboBox extends Picker {
81
82
  list: null,
82
83
  /**
83
84
  * @member {Object|null} listConfig_=null
85
+ * @reactive
84
86
  */
85
87
  listConfig_: null,
86
88
  /**
@@ -90,10 +92,12 @@ class ComboBox extends Picker {
90
92
  pickerHeight: null,
91
93
  /**
92
94
  * @member {String|null} role='combobox'
95
+ * @reactive
93
96
  */
94
97
  role: 'combobox',
95
98
  /**
96
99
  * @member {Neo.data.Store|null} store_=null
100
+ * @reactive
97
101
  */
98
102
  store_: null,
99
103
  /**
@@ -101,16 +105,19 @@ class ComboBox extends Picker {
101
105
  * match the filter string inside the input field.
102
106
  * Valid values: all, filtered
103
107
  * @member {String} triggerAction_='all'
108
+ * @reactive
104
109
  */
105
110
  triggerAction_: 'all',
106
111
  /**
107
112
  * Display the first matching result while typing
108
113
  * @member {Boolean} typeAhead_=true
114
+ * @reactive
109
115
  */
110
116
  typeAhead_: true,
111
117
  /**
112
118
  * Set this config to false, in case typing into the input field should not filter list items
113
119
  * @member {Boolean} useFilter_=true
120
+ * @reactive
114
121
  */
115
122
  useFilter_: true,
116
123
  /**
@@ -122,6 +129,7 @@ class ComboBox extends Picker {
122
129
  /**
123
130
  * Default width to prevent rendering issues.
124
131
  * @member {Number} width=150
132
+ * @reactive
125
133
  */
126
134
  width: 150
127
135
  }
@@ -19,6 +19,7 @@ class Country extends ComboBox {
19
19
  /**
20
20
  * You can either pass a field instance or a field reference
21
21
  * @member {Neo.form.field.Base|String|null} zipCodeField_=null
22
+ * @reactive
22
23
  */
23
24
  zipCodeField_: null
24
25
  }
@@ -18,10 +18,12 @@ class Currency extends Number {
18
18
  ntype: 'currencyfield',
19
19
  /**
20
20
  * @member {Number} maxValue=1000000
21
+ * @reactive
21
22
  */
22
23
  maxValue: 1000000,
23
24
  /**
24
25
  * @member {Number} stepSize=0.01
26
+ * @reactive
25
27
  */
26
28
  stepSize: 0.01
27
29
  }
@@ -48,14 +48,17 @@ class DateField extends Picker {
48
48
  hidePickerOnSelect: false,
49
49
  /**
50
50
  * @member {String} inputType='date'
51
+ * @reactive
51
52
  */
52
53
  inputType: 'date',
53
54
  /**
54
55
  * @member {String|null} maxValue_=null
56
+ * @reactive
55
57
  */
56
58
  maxValue_: null,
57
59
  /**
58
60
  * @member {String|null} minValue_=null
61
+ * @reactive
59
62
  */
60
63
  minValue_: null,
61
64
  /**
@@ -73,6 +76,7 @@ class DateField extends Picker {
73
76
  /**
74
77
  * @member {Object|Object[]} triggers=[{module: DateTrigger}]
75
78
  * @protected
79
+ * @reactive
76
80
  */
77
81
  triggers: [{
78
82
  module: DateTrigger
@@ -24,6 +24,7 @@ class Display extends Text {
24
24
  /**
25
25
  * @member {Boolean} clearable=false
26
26
  * @protected
27
+ * @reactive
27
28
  */
28
29
  clearable: false
29
30
  }
@@ -30,6 +30,7 @@ class Email extends Text {
30
30
  errorTextValidEmail: 'Not a valid email address',
31
31
  /**
32
32
  * @member {String} inputType='email'
33
+ * @reactive
33
34
  */
34
35
  inputType: 'email'
35
36
  }
@@ -102,6 +102,7 @@ class FileUpload extends Field {
102
102
  baseCls: ['neo-file-upload-field'],
103
103
  /**
104
104
  * @member {String[]} cls=['neo-field-empty']
105
+ * @reactive
105
106
  */
106
107
  cls: ['neo-field-empty'],
107
108
  /**
@@ -148,6 +149,7 @@ class FileUpload extends Field {
148
149
 
149
150
  /**
150
151
  * @member {String|null} document_=null
152
+ * @reactive
151
153
  */
152
154
  document_: null,
153
155
 
@@ -211,6 +213,7 @@ class FileUpload extends Field {
211
213
  * by the {@link #member-documentIdParameter}. It defaults to `'documentId'`.
212
214
  *
213
215
  * @member {String|null} downloadUrl_=null
216
+ * @reactive
214
217
  */
215
218
  downloadUrl_: null,
216
219
 
@@ -240,6 +243,7 @@ class FileUpload extends Field {
240
243
  * ```
241
244
  *
242
245
  * @member {String|null} documentStatusUrl_=null
246
+ * @reactive
243
247
  */
244
248
  documentStatusUrl_: null,
245
249
 
@@ -273,6 +277,7 @@ class FileUpload extends Field {
273
277
  * If this service yields an HTTP 200 status, the deletion is taken to have been successful.
274
278
  *
275
279
  * @member {String|null} documentDeleteUrl_=null
280
+ * @reactive
276
281
  */
277
282
  documentDeleteUrl_: null,
278
283
 
@@ -286,6 +291,7 @@ class FileUpload extends Field {
286
291
 
287
292
  /**
288
293
  * @member {String} state_=ready
294
+ * @reactive
289
295
  */
290
296
  state_: 'ready',
291
297
 
@@ -302,6 +308,7 @@ class FileUpload extends Field {
302
308
  /**
303
309
  * The error text to show below the widget
304
310
  * @member {String|null} error_=null
311
+ * @reactive
305
312
  */
306
313
  error_ : null,
307
314
 
@@ -18,6 +18,7 @@ class Hidden extends Field {
18
18
  ntype: 'hiddenfield',
19
19
  /**
20
20
  * @member {Boolean} hidden=true
21
+ * @reactive
21
22
  */
22
23
  hidden: true
23
24
  }
@@ -35,6 +35,7 @@ class Number extends Text {
35
35
  /**
36
36
  * Prevent users from typing specific characters.
37
37
  * @member {String[]|null} disabledChars=['e','E']
38
+ * @reactive
38
39
  */
39
40
  disabledChars: ['e', 'E'],
40
41
  /**
@@ -58,23 +59,28 @@ class Number extends Text {
58
59
  /**
59
60
  * false only allows changing the field using the spin buttons
60
61
  * @member {Boolean} inputEditable_=true
62
+ * @reactive
61
63
  */
62
64
  inputEditable_: true,
63
65
  /**
64
66
  * Value for the inputType_ textfield config
65
67
  * @member {String} inputType='number'
68
+ * @reactive
66
69
  */
67
70
  inputType: 'number',
68
71
  /**
69
72
  * @member {Number} maxValue_=100
73
+ * @reactive
70
74
  */
71
75
  maxValue_: 100,
72
76
  /**
73
77
  * @member {Number} minValue_=0
78
+ * @reactive
74
79
  */
75
80
  minValue_: 0,
76
81
  /**
77
82
  * @member {Number} stepSize_=1
83
+ * @reactive
78
84
  */
79
85
  stepSize_: 1,
80
86
  /**
@@ -84,6 +90,7 @@ class Number extends Text {
84
90
  triggerPosition_: 'right',
85
91
  /**
86
92
  * @member {Boolean} useSpinButtons_=true
93
+ * @reactive
87
94
  */
88
95
  useSpinButtons_: true
89
96
  }
@@ -19,6 +19,7 @@ class Password extends Text {
19
19
  /**
20
20
  * Value for the inputType_ textfield config
21
21
  * @member {String} inputType='password'
22
+ * @reactive
22
23
  */
23
24
  inputType: 'password'
24
25
  }
@@ -24,15 +24,18 @@ class Phone extends Text {
24
24
  errorTextInputPattern: data => `Not a valid phone number`,
25
25
  /**
26
26
  * @member {RegExp|null} inputPattern=/^\+?\(?[0-9]+\)?([\-\s\.]?[/0-9]+)*$/
27
+ * @reactive
27
28
  */
28
29
  inputPattern: /^\+?\(?[0-9]+\)?([\-\s\.]?[/0-9]+)*$/,
29
30
  /**
30
31
  * @member {Boolean} inputPatternDOM=false
32
+ * @reactive
31
33
  */
32
34
  inputPatternDOM: false,
33
35
  /**
34
36
  * Value for the inputType_ textfield config
35
37
  * @member {String} inputType='tel'
38
+ * @reactive
36
39
  */
37
40
  inputType: 'tel'
38
41
  }
@@ -58,6 +58,7 @@ class Picker extends Text {
58
58
  /**
59
59
  * @member {Boolean} pickerIsMounted_=false
60
60
  * @protected
61
+ * @reactive
61
62
  */
62
63
  pickerIsMounted_: false,
63
64
  /**
@@ -79,6 +80,7 @@ class Picker extends Text {
79
80
  /**
80
81
  * @member {Object|Object[]} triggers=[]
81
82
  * @protected
83
+ * @reactive
82
84
  */
83
85
  triggers: [{
84
86
  module: PickerTrigger
@@ -27,6 +27,7 @@ class Radio extends CheckBox {
27
27
  iconCls: ['far', 'fa-circle'],
28
28
  /**
29
29
  * @member {String} inputType='radio'
30
+ * @reactive
30
31
  */
31
32
  inputType: 'radio'
32
33
  }
@@ -31,11 +31,13 @@ class Range extends Number {
31
31
  /**
32
32
  * True shows a clear trigger in case the field has a non empty value.
33
33
  * @member {Boolean} clearable=false
34
+ * @reactive
34
35
  */
35
36
  clearable: false,
36
37
  /**
37
38
  * Value for the inputType_ textfield config
38
39
  * @member {String} inputType='range'
40
+ * @reactive
39
41
  */
40
42
  inputType: 'range',
41
43
  /**
@@ -45,6 +47,7 @@ class Range extends Number {
45
47
  showResultInLabel: false,
46
48
  /**
47
49
  * @member {Array} tickmarks_=[]
50
+ * @reactive
48
51
  */
49
52
  tickmarks_: [],
50
53
  /**
@@ -23,11 +23,13 @@ class Search extends Text {
23
23
  /**
24
24
  * Value for the hideLabel_ textfield config
25
25
  * @member {Boolean} hideLabel=true
26
+ * @reactive
26
27
  */
27
28
  hideLabel: true,
28
29
  /**
29
30
  * Value for the placeholderText_ textfield config
30
31
  * @member {String} placeholderText='Search'
32
+ * @reactive
31
33
  */
32
34
  placeholderText: 'Search'
33
35
  }
@@ -46,6 +46,7 @@ class Text extends Field {
46
46
  autoCapitalize_: 'off',
47
47
  /**
48
48
  * @member {Boolean} autoComplete_=false
49
+ * @reactive
49
50
  */
50
51
  autoComplete_: false,
51
52
  /**
@@ -62,18 +63,21 @@ class Text extends Field {
62
63
  /**
63
64
  * True shows a clear trigger in case the field has a non-empty value.
64
65
  * @member {Boolean} clearable_=true
66
+ * @reactive
65
67
  */
66
68
  clearable_: true,
67
69
  /**
68
70
  * True will reset the field to its initial value config.
69
71
  * Recommended for fields with required: true
70
72
  * @member {Boolean} clearToOriginalValue_=false
73
+ * @reactive
71
74
  */
72
75
  clearToOriginalValue_: false,
73
76
  /**
74
77
  * Prevent users from typing specific characters.
75
78
  * E.g. disabling +-e for NumberFields
76
79
  * @member {String[]|null} disabledChars_=null
80
+ * @reactive
77
81
  */
78
82
  disabledChars_: null,
79
83
  /**
@@ -83,6 +87,7 @@ class Text extends Field {
83
87
  * For example picker fields such as `Date` and `Select` may still have their
84
88
  * values changed by selecting from the picker using keyboard or pointer.
85
89
  * @member {Boolean} editable_=true
90
+ * @reactive
86
91
  */
87
92
  editable_: true,
88
93
  /**
@@ -92,11 +97,13 @@ class Text extends Field {
92
97
  emptyValue: null,
93
98
  /**
94
99
  * @member {String|null} error_=null
100
+ * @reactive
95
101
  */
96
102
  error_: null,
97
103
  /**
98
104
  * Useful for fields inside a css grid where errors should live outside the layout
99
105
  * @member {Boolean} errorPositionAbsolute_=false
106
+ * @reactive
100
107
  */
101
108
  errorPositionAbsolute_: false,
102
109
  /**
@@ -120,10 +127,12 @@ class Text extends Field {
120
127
  errorTextRequired: 'Required',
121
128
  /**
122
129
  * @member {Boolean} hideLabel_=false
130
+ * @reactive
123
131
  */
124
132
  hideLabel_: false,
125
133
  /**
126
134
  * @member {RegExp|null} inputPattern_=null
135
+ * @reactive
127
136
  */
128
137
  inputPattern_: null,
129
138
  /**
@@ -131,14 +140,17 @@ class Text extends Field {
131
140
  * The regex support for input based patterns is not fully there yet, so feel free to disable this feature
132
141
  * if needed (E.g. form.field.Phone).
133
142
  * @member {Boolean} inputPatternDOM_=true
143
+ * @reactive
134
144
  */
135
145
  inputPatternDOM_: true,
136
146
  /**
137
147
  * @member {String} inputType_='text'
148
+ * @reactive
138
149
  */
139
150
  inputType_: 'text',
140
151
  /**
141
152
  * @member {String|null} inputValue_=null
153
+ * @reactive
142
154
  */
143
155
  inputValue_: null,
144
156
  /**
@@ -147,54 +159,65 @@ class Text extends Field {
147
159
  labelBaseCls: ['neo-textfield-label'],
148
160
  /**
149
161
  * @member {String[]} labelCls_=[]
162
+ * @reactive
150
163
  */
151
164
  labelCls_: [],
152
165
  /**
153
166
  * Edge-case config in case we want to render leading content with their own selectors like:
154
167
  * <span class="my-label-id-cls">E10</span> • Firstname
155
168
  * @member {String|null} labelId_=null
169
+ * @reactive
156
170
  */
157
171
  labelId_: null,
158
172
  /**
159
173
  * CSS rules for labelId
160
174
  * @member {String[]} labelIdCls_=[]
175
+ * @reactive
161
176
  */
162
177
  labelIdCls_: [],
163
178
  /**
164
179
  * Separator between labelId & labelText
165
180
  * @member {String} labelIdSeparator_=' · '
181
+ * @reactive
166
182
  */
167
183
  labelIdSeparator_: ' · ',
168
184
  /**
169
185
  * @member {String} labelOptionalText_=' (Optional)'
186
+ * @reactive
170
187
  */
171
188
  labelOptionalText_: ' (Optional)',
172
189
  /**
173
190
  * Valid values: 'bottom', 'inline', 'left', 'right', 'top'
174
191
  * @member {String} labelPosition_='left'
192
+ * @reactive
175
193
  */
176
194
  labelPosition_: 'left',
177
195
  /**
178
196
  * @member {String} labelText_='LabelText'
197
+ * @reactive
179
198
  */
180
199
  labelText_: 'LabelText',
181
200
  /**
182
201
  * defaults to px
183
202
  * @member {Number|String} labelWidth_=150
203
+ * @reactive
184
204
  */
185
205
  labelWidth_: 150,
186
206
  /**
187
207
  * The maximum amount of chars which you can enter into this field
188
208
  * @member {Number|null} maxLength_=null
209
+ * @reactive
189
210
  */
190
211
  maxLength_: null,
191
212
  /**
192
213
  * The minimum amount of chars which you can enter into this field
193
214
  * @member {Number|null} minLength_=null
215
+ * @reactive
194
216
  */
195
217
  minLength_: null,
196
218
  /**
197
219
  * @member {String|null} placeholderText_=null
220
+ * @reactive
198
221
  */
199
222
  placeholderText_: null,
200
223
  /**
@@ -203,19 +226,23 @@ class Text extends Field {
203
226
  * The input field will be read-only and other ways of changing the field's value
204
227
  * (such as by operating pickers) will be disabled.
205
228
  * @member {Boolean} readOnly_=false
229
+ * @reactive
206
230
  */
207
231
  readOnly_: false,
208
232
  /**
209
233
  * @member {Boolean} required_=false
234
+ * @reactive
210
235
  */
211
236
  required_: false,
212
237
  /**
213
238
  * @member {Boolean} showOptionalText_=false
239
+ * @reactive
214
240
  */
215
241
  showOptionalText_: false,
216
242
  /**
217
243
  * null => Follow the element's default behavior for spell checking
218
244
  * @member {Boolean|null} spellCheck_=false
245
+ * @reactive
219
246
  */
220
247
  spellCheck_: false,
221
248
  /**
@@ -224,14 +251,17 @@ class Text extends Field {
224
251
  subLabelBaseCls: ['neo-textfield-sublabel'],
225
252
  /**
226
253
  * @member {String[]} subLabelCls_=[]
254
+ * @reactive
227
255
  */
228
256
  subLabelCls_: [],
229
257
  /**
230
258
  * @member {String} subLabelText_=null
259
+ * @reactive
231
260
  */
232
261
  subLabelText_: null,
233
262
  /**
234
263
  * @member {Object|Object[]|null} triggers_=null
264
+ * @reactive
235
265
  */
236
266
  triggers_: null,
237
267
  /**
@@ -239,6 +269,7 @@ class Text extends Field {
239
269
  * Intended to get combined with form.Container: getFormState().
240
270
  * See apps/form as an example.
241
271
  * @member {Boolean} useAlertState_=false
272
+ * @reactive
242
273
  */
243
274
  useAlertState_: false,
244
275
  /**
@@ -249,6 +280,7 @@ class Text extends Field {
249
280
  /**
250
281
  * get value can be xssProtected and values are escaped
251
282
  * @member {Boolean} xssProtected_=false
283
+ * @reactive
252
284
  */
253
285
  xssProtected_: false,
254
286
  /**
@@ -1359,13 +1391,19 @@ class Text extends Field {
1359
1391
  onInputValueChange(data) {
1360
1392
  let me = this,
1361
1393
  oldValue = me.value,
1362
- inputValue = data.value,
1363
- vnode = VNodeUtil.find(me.vnode, {nodeName: 'input'});
1394
+ inputValue = data.value;
1364
1395
 
1365
- if (vnode) {
1366
- // Update the current state (modified DOM by the user) to enable the delta-updates logic.
1396
+ // Find the VNode for the real input element within the component's vnode tree.
1397
+ const {vnode: inputVNode} = VNodeUtil.find(me.vnode, {nodeName: 'input'}) || {};
1398
+
1399
+ if (inputVNode) {
1400
+ // This is the critical synchronization step. The user's input has changed the
1401
+ // real DOM on the Main Thread. We must manually update our "last known state"
1402
+ // (this.vnode) to match this reality *before* the next diffing cycle runs.
1403
+ // This prevents the framework from sending a redundant delta update that could
1404
+ // overwrite the user's input or cause cursor jumps.
1367
1405
  // Required e.g. for validation -> revert a wrong user input
1368
- vnode.vnode.attributes.value = inputValue
1406
+ inputVNode.attributes.value = inputValue
1369
1407
  }
1370
1408
 
1371
1409
  if (Neo.isString(inputValue)) {