neo.mjs 10.0.0-alpha.5 → 10.0.0-beta.2

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 (188) hide show
  1. package/ServiceWorker.mjs +2 -2
  2. package/apps/colors/view/GridContainer.mjs +1 -1
  3. package/apps/covid/view/AttributionComponent.mjs +1 -1
  4. package/apps/covid/view/HeaderContainer.mjs +6 -6
  5. package/apps/covid/view/MainContainerController.mjs +5 -5
  6. package/apps/covid/view/TableContainerController.mjs +1 -1
  7. package/apps/covid/view/country/Gallery.mjs +13 -13
  8. package/apps/covid/view/country/Helix.mjs +13 -13
  9. package/apps/covid/view/country/HistoricalDataTable.mjs +1 -1
  10. package/apps/email/view/Viewport.mjs +2 -2
  11. package/apps/form/view/SideNavList.mjs +1 -1
  12. package/apps/portal/index.html +1 -1
  13. package/apps/portal/resources/data/examples_devmode.json +26 -27
  14. package/apps/portal/resources/data/examples_dist_dev.json +26 -27
  15. package/apps/portal/resources/data/examples_dist_esm.json +25 -26
  16. package/apps/portal/resources/data/examples_dist_prod.json +26 -27
  17. package/apps/portal/view/HeaderToolbar.mjs +3 -3
  18. package/apps/portal/view/about/Container.mjs +2 -2
  19. package/apps/portal/view/about/MemberContainer.mjs +3 -3
  20. package/apps/portal/view/blog/List.mjs +7 -7
  21. package/apps/portal/view/examples/List.mjs +4 -4
  22. package/apps/portal/view/home/ContentBox.mjs +2 -2
  23. package/apps/portal/view/home/FeatureSection.mjs +3 -3
  24. package/apps/portal/view/home/FooterContainer.mjs +7 -7
  25. package/apps/portal/view/home/parts/AfterMath.mjs +3 -3
  26. package/apps/portal/view/home/parts/MainNeo.mjs +3 -3
  27. package/apps/portal/view/home/parts/References.mjs +6 -6
  28. package/apps/portal/view/learn/ContentComponent.mjs +102 -111
  29. package/apps/portal/view/learn/PageSectionsContainer.mjs +1 -1
  30. package/apps/portal/view/learn/PageSectionsList.mjs +2 -2
  31. package/apps/portal/view/services/Component.mjs +16 -16
  32. package/apps/realworld/view/FooterComponent.mjs +1 -1
  33. package/apps/realworld/view/HeaderComponent.mjs +8 -8
  34. package/apps/realworld/view/HomeComponent.mjs +6 -6
  35. package/apps/realworld/view/article/CommentComponent.mjs +4 -4
  36. package/apps/realworld/view/article/Component.mjs +14 -14
  37. package/apps/realworld/view/article/CreateCommentComponent.mjs +3 -3
  38. package/apps/realworld/view/article/CreateComponent.mjs +3 -3
  39. package/apps/realworld/view/article/PreviewComponent.mjs +1 -1
  40. package/apps/realworld/view/article/TagListComponent.mjs +2 -2
  41. package/apps/realworld/view/user/ProfileComponent.mjs +8 -8
  42. package/apps/realworld/view/user/SettingsComponent.mjs +4 -4
  43. package/apps/realworld/view/user/SignUpComponent.mjs +4 -4
  44. package/apps/realworld2/view/FooterComponent.mjs +1 -1
  45. package/apps/realworld2/view/HomeContainer.mjs +3 -3
  46. package/apps/realworld2/view/article/DetailsContainer.mjs +1 -1
  47. package/apps/realworld2/view/article/PreviewComponent.mjs +7 -7
  48. package/apps/realworld2/view/article/TagListComponent.mjs +2 -2
  49. package/apps/realworld2/view/user/ProfileContainer.mjs +1 -1
  50. package/apps/route/view/center/CardAdministration.mjs +2 -2
  51. package/apps/route/view/center/CardAdministrationDenied.mjs +1 -1
  52. package/apps/route/view/center/CardContact.mjs +2 -2
  53. package/apps/route/view/center/CardHome.mjs +1 -1
  54. package/apps/route/view/center/CardSection1.mjs +1 -1
  55. package/apps/route/view/center/CardSection2.mjs +1 -1
  56. package/apps/sharedcovid/view/AttributionComponent.mjs +1 -1
  57. package/apps/sharedcovid/view/HeaderContainer.mjs +6 -6
  58. package/apps/sharedcovid/view/MainContainerController.mjs +5 -5
  59. package/apps/sharedcovid/view/TableContainerController.mjs +1 -1
  60. package/apps/sharedcovid/view/country/Gallery.mjs +13 -13
  61. package/apps/sharedcovid/view/country/Helix.mjs +13 -13
  62. package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -1
  63. package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +1 -1
  64. package/apps/shareddialog/view/MainContainer.mjs +1 -1
  65. package/buildScripts/createApp.mjs +2 -2
  66. package/examples/table/cellEditing/MainContainer.mjs +1 -1
  67. package/examples/table/container/MainContainer.mjs +3 -3
  68. package/examples/table/nestedRecordFields/Viewport.mjs +6 -6
  69. package/examples/tableFiltering/MainContainer.mjs +1 -1
  70. package/examples/tablePerformance/MainContainer.mjs +1 -1
  71. package/examples/tablePerformance/MainContainer2.mjs +1 -1
  72. package/examples/tablePerformance/MainContainer3.mjs +2 -2
  73. package/examples/tableStore/MainContainer.mjs +2 -2
  74. package/learn/Glossary.md +261 -0
  75. package/learn/UsingTheseTopics.md +2 -2
  76. package/learn/benefits/ConfigSystem.md +538 -28
  77. package/learn/benefits/Effort.md +47 -2
  78. package/learn/benefits/Features.md +50 -32
  79. package/learn/benefits/FormsEngine.md +68 -38
  80. package/learn/benefits/MultiWindow.md +33 -7
  81. package/learn/benefits/OffTheMainThread.md +2 -2
  82. package/learn/benefits/Quick.md +45 -12
  83. package/learn/benefits/RPCLayer.md +75 -0
  84. package/learn/benefits/Speed.md +16 -11
  85. package/learn/gettingstarted/ComponentModels.md +4 -4
  86. package/learn/gettingstarted/Config.md +6 -6
  87. package/learn/gettingstarted/DescribingTheUI.md +4 -4
  88. package/learn/gettingstarted/Events.md +6 -6
  89. package/learn/gettingstarted/Extending.md +4 -4
  90. package/learn/gettingstarted/References.md +6 -6
  91. package/learn/gettingstarted/Workspaces.md +6 -6
  92. package/learn/guides/ApplicationBootstrap.md +26 -26
  93. package/learn/guides/ComponentsAndContainers.md +12 -12
  94. package/learn/guides/ConfigSystemDeepDive.md +280 -0
  95. package/learn/guides/CustomComponents.md +2 -2
  96. package/learn/guides/DeclarativeComponentTreesVsImperativeVdom.md +17 -17
  97. package/learn/guides/InstanceLifecycle.md +295 -1
  98. package/learn/guides/MainThreadAddons.md +475 -0
  99. package/learn/guides/PortalApp.md +2 -2
  100. package/learn/guides/StateProviders.md +12 -12
  101. package/learn/guides/WorkingWithVDom.md +14 -14
  102. package/learn/guides/events/CustomEvents.md +16 -16
  103. package/learn/guides/events/DomEvents.md +12 -12
  104. package/learn/javascript/ClassFeatures.md +3 -2
  105. package/learn/javascript/Classes.md +8 -8
  106. package/learn/javascript/NewNode.md +4 -4
  107. package/learn/javascript/Overrides.md +8 -8
  108. package/learn/javascript/Super.md +10 -8
  109. package/learn/tree.json +52 -51
  110. package/learn/tutorials/Earthquakes.md +54 -57
  111. package/learn/tutorials/TodoList.md +4 -4
  112. package/package.json +2 -2
  113. package/resources/scss/src/apps/portal/learn/ContentComponent.scss +12 -0
  114. package/resources/scss/src/table/{View.scss → Body.scss} +1 -1
  115. package/resources/scss/src/table/plugin/CellEditing.scss +1 -1
  116. package/resources/scss/theme-dark/table/{View.scss → Body.scss} +1 -1
  117. package/resources/scss/theme-light/table/{View.scss → Body.scss} +1 -1
  118. package/resources/scss/theme-neo-light/Global.scss +1 -2
  119. package/resources/scss/theme-neo-light/table/{View.scss → Body.scss} +1 -1
  120. package/src/DefaultConfig.mjs +2 -2
  121. package/src/Main.mjs +8 -7
  122. package/src/Neo.mjs +16 -2
  123. package/src/button/Base.mjs +2 -2
  124. package/src/calendar/view/SettingsContainer.mjs +2 -2
  125. package/src/calendar/view/YearComponent.mjs +9 -9
  126. package/src/calendar/view/calendars/ColorsList.mjs +1 -1
  127. package/src/calendar/view/calendars/List.mjs +1 -1
  128. package/src/calendar/view/month/Component.mjs +15 -15
  129. package/src/calendar/view/week/Component.mjs +12 -12
  130. package/src/calendar/view/week/EventDragZone.mjs +4 -4
  131. package/src/calendar/view/week/TimeAxisComponent.mjs +3 -3
  132. package/src/component/Base.mjs +17 -2
  133. package/src/component/Carousel.mjs +2 -2
  134. package/src/component/Chip.mjs +3 -3
  135. package/src/component/Circle.mjs +2 -2
  136. package/src/component/DateSelector.mjs +8 -8
  137. package/src/component/Helix.mjs +1 -1
  138. package/src/component/Label.mjs +3 -18
  139. package/src/component/Legend.mjs +3 -3
  140. package/src/component/MagicMoveText.mjs +6 -14
  141. package/src/component/Process.mjs +3 -3
  142. package/src/component/Progress.mjs +1 -1
  143. package/src/component/StatusBadge.mjs +2 -2
  144. package/src/component/Timer.mjs +2 -2
  145. package/src/component/Toast.mjs +5 -3
  146. package/src/container/AccordionItem.mjs +2 -2
  147. package/src/container/Base.mjs +1 -1
  148. package/src/core/Base.mjs +77 -14
  149. package/src/core/Util.mjs +14 -2
  150. package/src/date/DayViewComponent.mjs +2 -2
  151. package/src/date/SelectorContainer.mjs +1 -1
  152. package/src/draggable/grid/header/toolbar/SortZone.mjs +21 -21
  153. package/src/draggable/table/header/toolbar/SortZone.mjs +1 -1
  154. package/src/form/field/CheckBox.mjs +4 -4
  155. package/src/form/field/FileUpload.mjs +25 -39
  156. package/src/form/field/Range.mjs +1 -1
  157. package/src/form/field/Text.mjs +3 -3
  158. package/src/form/field/TextArea.mjs +2 -3
  159. package/src/grid/Body.mjs +8 -5
  160. package/src/grid/_export.mjs +1 -1
  161. package/src/list/Color.mjs +2 -2
  162. package/src/main/DeltaUpdates.mjs +157 -98
  163. package/src/main/addon/AmCharts.mjs +61 -84
  164. package/src/main/addon/Base.mjs +161 -42
  165. package/src/main/addon/GoogleMaps.mjs +9 -16
  166. package/src/main/addon/HighlightJS.mjs +2 -13
  167. package/src/main/addon/IntersectionObserver.mjs +21 -21
  168. package/src/main/addon/MonacoEditor.mjs +32 -64
  169. package/src/manager/ClassHierarchy.mjs +114 -0
  170. package/src/menu/List.mjs +1 -1
  171. package/src/plugin/Popover.mjs +2 -2
  172. package/src/sitemap/Component.mjs +1 -1
  173. package/src/table/{View.mjs → Body.mjs} +25 -22
  174. package/src/table/Container.mjs +43 -43
  175. package/src/table/_export.mjs +2 -2
  176. package/src/table/plugin/CellEditing.mjs +19 -19
  177. package/src/tooltip/Base.mjs +1 -6
  178. package/src/tree/Accordion.mjs +3 -3
  179. package/src/vdom/Helper.mjs +19 -22
  180. package/src/worker/App.mjs +1 -2
  181. package/src/worker/Base.mjs +7 -5
  182. package/src/worker/Canvas.mjs +2 -3
  183. package/src/worker/Data.mjs +5 -7
  184. package/src/worker/Task.mjs +2 -3
  185. package/src/worker/VDom.mjs +3 -4
  186. package/src/worker/mixin/RemoteMethodAccess.mjs +5 -2
  187. package/learn/guides/MainThreadAddonExample.md +0 -15
  188. package/learn/guides/MainThreadAddonIntro.md +0 -44
@@ -115,7 +115,7 @@ class MainContainer extends ConfigurationViewport {
115
115
  id : 'myTableStoreContainer',
116
116
  store: MainStore,
117
117
 
118
- viewConfig: {
118
+ bodyConfig: {
119
119
  selectionModel: CellModel
120
120
  },
121
121
 
@@ -139,7 +139,7 @@ class MainContainer extends ConfigurationViewport {
139
139
  text : 'Edit'
140
140
  }));
141
141
 
142
- me.view.updateDepth = -1;
142
+ me.body.updateDepth = -1;
143
143
 
144
144
  return button.createVdomReference()
145
145
  }
@@ -168,7 +168,7 @@ class MainContainer extends ConfigurationViewport {
168
168
  }
169
169
  }));
170
170
 
171
- me.view.updateDepth = -1;
171
+ me.body.updateDepth = -1;
172
172
 
173
173
  return button.createVdomReference()
174
174
  }
@@ -40,17 +40,17 @@ class Viewport extends BaseViewport {
40
40
  module: TableContainer,
41
41
  bind : {store : 'stores.mainStore'},
42
42
 
43
+ bodyConfig: {
44
+ highlightModifiedCells: true
45
+ },
46
+
43
47
  columns: [
44
48
  {dataField: 'user.firstname', text: 'Firstname'},
45
49
  {dataField: 'user.lastname', text: 'Lastname'},
46
50
  {dataField: 'githubId', text: 'Github Id'},
47
51
  {dataField: 'country', text: 'Country', renderer: 'up.countryRenderer'},
48
52
  {dataField: 'edit', text: 'Edit Action', renderer: 'up.editRenderer'}
49
- ],
50
-
51
- viewConfig: {
52
- highlightModifiedCells: true
53
- }
53
+ ]
54
54
  }]
55
55
  }
56
56
 
@@ -118,7 +118,7 @@ class Viewport extends BaseViewport {
118
118
  windowId
119
119
  }));
120
120
 
121
- me.view.updateDepth = -1;
121
+ me.body.updateDepth = -1;
122
122
 
123
123
  return button.createVdomReference()
124
124
  }
@@ -46,10 +46,10 @@ class MainContainer extends Viewport {
46
46
  }]
47
47
  }, {
48
48
  module : TableContainer,
49
+ bodyConfig : {selectionModel: CellModel},
49
50
  id : 'myTableFilterContainer',
50
51
  showHeaderFilters: true,
51
52
  store : MainStore,
52
- viewConfig : {selectionModel: CellModel},
53
53
  width : '100%',
54
54
  wrapperStyle : {height: '300px'},
55
55
 
@@ -72,8 +72,8 @@ class MainContainer extends Container {
72
72
  }]
73
73
  }, {
74
74
  module : TableContainer,
75
+ bodyConfig: {useRowRecordIds: false},
75
76
  reference : 'table',
76
- viewConfig: {useRowRecordIds: false},
77
77
  width : '100%',
78
78
 
79
79
  columnDefaults: {
@@ -72,8 +72,8 @@ class MainContainer2 extends Container {
72
72
  }]
73
73
  }, {
74
74
  module : TableContainer,
75
+ bodyConfig: {useRowRecordIds: false},
75
76
  reference : 'table',
76
- viewConfig: {useRowRecordIds: false},
77
77
  width : '100%',
78
78
 
79
79
  columnDefaults: {
@@ -72,8 +72,8 @@ class MainContainer3 extends Container {
72
72
  }]
73
73
  }, {
74
74
  module : TableContainer,
75
+ bodyConfig : {useRowRecordIds: false},
75
76
  reference : 'table',
76
- viewConfig : {useRowRecordIds: false},
77
77
  useCustomScrollbars: false,
78
78
  width : '100%',
79
79
 
@@ -146,7 +146,7 @@ class MainContainer3 extends Container {
146
146
  rows = me.getReference('amount-rows-field').value,
147
147
  inputData = me.up('viewport').createRandomData(columns, rows);
148
148
 
149
- table.view.createViewData(inputData)
149
+ table.body.createViewData(inputData)
150
150
  }
151
151
 
152
152
  /**
@@ -151,10 +151,10 @@ class MainContainer extends Viewport {
151
151
  }]
152
152
  }, {
153
153
  module : TableContainer,
154
+ bodyConfig : {selectionModel: CellModel},
154
155
  id : 'myTableStoreContainer',
155
156
  reference : 'table',
156
157
  store : MainStore,
157
- viewConfig : {selectionModel: CellModel},
158
158
  width : '100%',
159
159
  wrapperStyle: {height: '300px'},
160
160
 
@@ -179,7 +179,7 @@ class MainContainer extends Viewport {
179
179
  */
180
180
  updateSelectionModel(data) {
181
181
  if (data.value) {
182
- this.getReference('table').view.selectionModel = {
182
+ this.getReference('table').body.selectionModel = {
183
183
  ntype: data.component.value
184
184
  }
185
185
  }
package/learn/Glossary.md CHANGED
@@ -0,0 +1,261 @@
1
+
2
+ This glossary provides definitions for key terms and concepts used throughout the Neo.mjs documentation. Understanding
3
+ these terms is essential for grasping the framework's unique architecture and capabilities.
4
+
5
+ ## A
6
+
7
+ ### Actor Model
8
+
9
+ A programming paradigm where "actors" are the universal primitives of concurrent computation. In Neo.mjs, this concept
10
+ is applied to web workers, where each worker acts as an independent actor communicating via messages, enabling robust
11
+ multi-threaded applications.
12
+
13
+ ### App Worker
14
+
15
+ The primary Web Worker in Neo.mjs where the majority of your application's logic, components, and business code reside.
16
+ It operates off the main thread, ensuring the UI remains responsive.
17
+
18
+ ### Application Worker being the Main Actor Paradigm
19
+
20
+ A core architectural principle in Neo.mjs where the App Worker is the central hub for application logic and state, rather
21
+ than the main browser thread. This ensures UI responsiveness and efficient resource utilization.
22
+
23
+ ## C
24
+
25
+ ### Canvas Worker
26
+
27
+ A specialized Web Worker in Neo.mjs that can take ownership of an `OffscreenCanvas` DOM node. This allows computationally
28
+ intensive graphics rendering to occur entirely off the main thread, preventing UI blocking.
29
+
30
+ ### Class Config System
31
+
32
+ Neo.mjs's unified, declarative system for defining and managing properties for all classes (components, models,
33
+ controllers, etc.) through a `static config` object. It provides consistency, reactivity, and powerful lifecycle hooks.
34
+
35
+ ### Component Lifecycle
36
+
37
+ The series of well-defined stages an Neo.mjs class instance goes through, from its creation and initialization to its
38
+ destruction. The framework provides hooks (e.g., `construct`, `initAsync`, `destroy`) to tap into these stages.
39
+
40
+ ### Component Library
41
+
42
+ A comprehensive collection of pre-built, production-ready UI components provided by Neo.mjs, designed to be highly
43
+ configurable and performant within the OMT architecture.
44
+
45
+ ### Cross-worker communication
46
+
47
+ The mechanism by which different Web Workers (e.g., App Worker, Main Thread, VDom Worker) exchange messages and data.
48
+ Neo.mjs provides an efficient RPC layer for this.
49
+
50
+ ## D
51
+
52
+ ### Data Store
53
+
54
+ A Neo.mjs class (`Neo.data.Store`) that manages collections of data records. It can be configured declaratively and is
55
+ often used to provide data to UI components like grids.
56
+
57
+ ### Data Worker
58
+
59
+ A specialized Web Worker in Neo.mjs primarily responsible for handling backend communication (e.g., AJAX calls, WebSocket
60
+ messages) and performing data transformations off the main thread.
61
+
62
+ ### Declarative component trees
63
+
64
+ A method of building user interfaces in Neo.mjs by defining the desired structure and properties of components using
65
+ declarative configurations (often JSON-like objects) rather than imperative step-by-step instructions.
66
+
67
+ ### Delta-updates
68
+
69
+ The minimal changes calculated by the VDom Worker (by comparing new and old Virtual DOM trees) that need to be applied
70
+ to the actual browser DOM. Sending only deltas optimizes UI updates.
71
+
72
+ ### dist/development
73
+
74
+ One of Neo.mjs's four environments, representing a traditional "dev mode" with bundled but unminified code and source
75
+ maps. Used for debugging production-specific issues or by developers preferring TypeScript.
76
+
77
+ ### dist/esm
78
+
79
+ One of Neo.mjs's four environments, designed for modern deployment. It preserves the native ES Module structure,
80
+ allowing browsers to load individual module files efficiently via HTTP/2 or HTTP/3.
81
+
82
+ ### dist/production
83
+
84
+ One of Neo.mjs's four environments, providing highly optimized, minified, and thread-specific bundles (using Webpack)
85
+ for maximum compatibility and smallest payload, ideal for broad deployment.
86
+
87
+ ## L
88
+
89
+ ### Lazy-loaded Forms
90
+
91
+ A feature in Neo.mjs forms where form fields or sections are only loaded (but not necessarily mounted to the DOM) when
92
+ they are actually needed, optimizing initial load times for complex forms.
93
+
94
+ ### Lifecycle hooks
95
+
96
+ Methods provided by the Neo.mjs framework that allow developers to execute custom logic at specific points during a
97
+ class instance's lifecycle (e.g., `beforeSet`, `afterSet`, `initAsync`, `destroy`).
98
+
99
+ ## M
100
+
101
+ ### Main Thread
102
+
103
+ The single browser thread responsible for rendering the user interface (DOM), handling user interactions, and executing
104
+ most traditional JavaScript. Neo.mjs aims to keep this thread as idle as possible for maximum responsiveness.
105
+
106
+ ### Main-Thread Addons
107
+
108
+ Libraries or functionalities that require direct access to the browser's Main Thread (e.g., for DOM manipulation or
109
+ specific browser APIs). Neo.mjs provides mechanisms to integrate these while maintaining OMT benefits.
110
+
111
+ ### MicroLoader
112
+
113
+ A lightweight JavaScript file that is the first part of the Neo.mjs framework loaded by the browser. It's responsible
114
+ for fetching the application's configuration and dynamically importing the main thread part of the framework.
115
+
116
+ ### Mixins
117
+
118
+ A mechanism in JavaScript (and utilized by Neo.mjs) to compose classes by injecting properties and methods from other
119
+ classes, promoting code reuse without traditional inheritance. **Currently, Neo.mjs mixins copy methods but do not
120
+ automatically merge `static config` properties from the mixin into the consuming class's `static config`.**
121
+
122
+ ### Multi-threaded architecture
123
+
124
+ The fundamental design of Neo.mjs that leverages Web Workers to distribute application logic and processing across
125
+ multiple CPU cores, ensuring a highly responsive user interface.
126
+
127
+ ### Multi-Window Applications
128
+
129
+ Neo.mjs's native capability to run a single application across multiple browser windows, allowing seamless data and
130
+ state sharing, and enabling complex multi-screen user experiences.
131
+
132
+ ## N
133
+
134
+ ### Native ES modules
135
+
136
+ Modern JavaScript modules that can be directly loaded and executed by browsers without requiring a build step
137
+ (transpilation or bundling). Neo.mjs heavily relies on these for its zero-build development.
138
+
139
+ ### ntype
140
+
141
+ A string alias used in Neo.mjs to declaratively specify the type of a component or class within a configuration object
142
+ (e.g., `ntype: 'button'`, `ntype: 'container'`).
143
+
144
+ ## O
145
+
146
+ ### Observable
147
+
148
+ A mixin (`Neo.core.Observable`) that provides event-driven capabilities to classes that include it. It enables objects
149
+ to emit custom events using the `fire()` method, and allows other objects to subscribe to these events using the `on()`
150
+ (or `addListener()`) method. This mechanism facilitates a publish-subscribe pattern, allowing components and other parts
151
+ of the application to react automatically to specific updates or actions.
152
+
153
+ ### Off the Main Thread (OMT)
154
+
155
+ The core architectural principle of Neo.mjs, where the majority of the application's logic and processing runs in Web
156
+ Workers, separate from the browser's main thread, to ensure UI responsiveness.
157
+
158
+ ## P
159
+
160
+ ### Plugins
161
+
162
+ Extensible modules that can be added to Neo.mjs components to enhance their functionality without modifying their core
163
+ code, promoting modularity and reusability.
164
+
165
+ ### Property lifecycle hooks
166
+
167
+ Specific methods (e.g., `beforeGet`, `beforeSet`, `afterSet`) that are automatically invoked when a Neo.mjs config
168
+ property is accessed or modified, allowing for validation, transformation, or reactive side effects.
169
+
170
+ ## R
171
+
172
+ ### Reactive Config
173
+
174
+ A feature of the Neo.mjs Class Config System where changes to config properties automatically trigger updates in the UI
175
+ or other dependent parts of the application.
176
+
177
+ ### Remote Method Access (RMA)
178
+
179
+ Neo.mjs's mechanism for seamlessly calling methods on objects that reside in different Web Workers, Main Threads
180
+ (especially multiple ones in multi-window applications), or even backend services, abstracting away the complexities of
181
+ cross-context communication.
182
+
183
+ ### RPC Layer
184
+
185
+ Remote Procedure Call layer. In Neo.mjs, this refers to the framework's built-in system for enabling methods to be called
186
+ on objects residing in different execution contexts (e.g., between workers, or to a backend) as if they were local.
187
+
188
+ ### Routing
189
+
190
+ The process of mapping URL hash patterns to specific application states or views. Neo.mjs supports declarative routing
191
+ within its class config system, implemented inside `Neo.controller.Base`.
192
+
193
+ ## S
194
+
195
+ ### Service Worker
196
+
197
+ A type of Web Worker that acts as a programmable proxy between the browser and the network. In Neo.mjs, it's used for
198
+ predictive caching of assets and enabling offline capabilities.
199
+
200
+ ### Shared Web Workers
201
+
202
+ A type of Web Worker that can be accessed by multiple browsing contexts (e.g., multiple browser tabs or windows) from
203
+ the same origin. Neo.mjs leverages these for its multi-window application capabilities.
204
+
205
+ ### Source maps
206
+
207
+ Files that map transpiled or minified code back to its original source code, aiding debugging in environments where the
208
+ deployed code is not directly readable.
209
+
210
+ ### State Management
211
+
212
+ The process of managing and synchronizing the data (state) of an application. Neo.mjs provides elegant features for this,
213
+ including reactive configs, state providers and observable patterns.
214
+
215
+ ### State Provider
216
+
217
+ A Neo.mjs class responsible for managing and providing shared, bindable data (state) across different parts of an
218
+ application. Forms can include their own state providers.
219
+
220
+ ## T
221
+
222
+ ### Task Worker
223
+ A specialized Web Worker in Neo.mjs that can be used to offload specific, computationally expensive tasks that don't fit
224
+ into the other worker categories, ensuring the app worker and main thread remain free.
225
+
226
+ ## U
227
+
228
+ ### Unified Config System
229
+
230
+ See Class Config System.
231
+
232
+ ## V
233
+
234
+ ### Virtual DOM (VDom)
235
+
236
+ An in-memory representation of the actual browser DOM. Neo.mjs uses a lightweight, JSON-like VDom to describe UI
237
+ structures, enabling efficient delta calculations and updates to the real DOM.
238
+
239
+ ### VDom Worker
240
+
241
+ A specialized Web Worker in Neo.mjs responsible for processing Virtual DOM trees, calculating delta updates (diffing)
242
+ between the current and new UI states, and sending these minimal changes to the Main Thread for rendering.
243
+
244
+ ## W
245
+
246
+ ### Web Workers
247
+
248
+ A browser technology that allows scripts to run in background threads, separate from the main execution thread. Neo.mjs
249
+ extensively uses various types of Web Workers to achieve its Off-Main-Thread architecture.
250
+
251
+ ### Webpack
252
+
253
+ A popular open-source JavaScript module bundler. Neo.mjs uses Webpack in its `dist/production` and `dist/development`
254
+ environments to create optimized bundles for deployment.
255
+
256
+ ## Z
257
+
258
+ ### Zero-Build Development
259
+
260
+ A core feature of Neo.mjs that allows developers to run and debug applications directly in the browser using native ES
261
+ modules, without requiring a compilation or bundling step during development.
@@ -41,7 +41,7 @@ You can also launch the preview in a window by going to the Preview tab, then cl
41
41
  icon on the right <span class="far fa-xs fa-window-maximize"></span>. This web site is a Neo.mjs application,
42
42
  and the ability to launch browser windows &mdash; all integrated within a single app &mdash; is a unique feature of Neo.mjs!
43
43
 
44
- <pre data-code-livepreview>
44
+ ```javascript live-preview
45
45
  import Button from '../button/Base.mjs';
46
46
  import Container from '../container/Base.mjs';
47
47
 
@@ -57,7 +57,7 @@ class MainView extends Container {
57
57
  }
58
58
 
59
59
  MainView = Neo.setupClass(MainView);
60
- </pre>
60
+ ```
61
61
 
62
62
  ---
63
63