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.
- package/ServiceWorker.mjs +2 -2
- package/apps/colors/view/GridContainer.mjs +1 -1
- package/apps/covid/view/AttributionComponent.mjs +1 -1
- package/apps/covid/view/HeaderContainer.mjs +6 -6
- package/apps/covid/view/MainContainerController.mjs +5 -5
- package/apps/covid/view/TableContainerController.mjs +1 -1
- package/apps/covid/view/country/Gallery.mjs +13 -13
- package/apps/covid/view/country/Helix.mjs +13 -13
- package/apps/covid/view/country/HistoricalDataTable.mjs +1 -1
- package/apps/email/view/Viewport.mjs +2 -2
- package/apps/form/view/SideNavList.mjs +1 -1
- package/apps/portal/index.html +1 -1
- package/apps/portal/resources/data/examples_devmode.json +26 -27
- package/apps/portal/resources/data/examples_dist_dev.json +26 -27
- package/apps/portal/resources/data/examples_dist_esm.json +25 -26
- package/apps/portal/resources/data/examples_dist_prod.json +26 -27
- package/apps/portal/view/HeaderToolbar.mjs +3 -3
- package/apps/portal/view/about/Container.mjs +2 -2
- package/apps/portal/view/about/MemberContainer.mjs +3 -3
- package/apps/portal/view/blog/List.mjs +7 -7
- package/apps/portal/view/examples/List.mjs +4 -4
- package/apps/portal/view/home/ContentBox.mjs +2 -2
- package/apps/portal/view/home/FeatureSection.mjs +3 -3
- package/apps/portal/view/home/FooterContainer.mjs +7 -7
- package/apps/portal/view/home/parts/AfterMath.mjs +3 -3
- package/apps/portal/view/home/parts/MainNeo.mjs +3 -3
- package/apps/portal/view/home/parts/References.mjs +6 -6
- package/apps/portal/view/learn/ContentComponent.mjs +102 -111
- package/apps/portal/view/learn/PageSectionsContainer.mjs +1 -1
- package/apps/portal/view/learn/PageSectionsList.mjs +2 -2
- package/apps/portal/view/services/Component.mjs +16 -16
- package/apps/realworld/view/FooterComponent.mjs +1 -1
- package/apps/realworld/view/HeaderComponent.mjs +8 -8
- package/apps/realworld/view/HomeComponent.mjs +6 -6
- package/apps/realworld/view/article/CommentComponent.mjs +4 -4
- package/apps/realworld/view/article/Component.mjs +14 -14
- package/apps/realworld/view/article/CreateCommentComponent.mjs +3 -3
- package/apps/realworld/view/article/CreateComponent.mjs +3 -3
- package/apps/realworld/view/article/PreviewComponent.mjs +1 -1
- package/apps/realworld/view/article/TagListComponent.mjs +2 -2
- package/apps/realworld/view/user/ProfileComponent.mjs +8 -8
- package/apps/realworld/view/user/SettingsComponent.mjs +4 -4
- package/apps/realworld/view/user/SignUpComponent.mjs +4 -4
- package/apps/realworld2/view/FooterComponent.mjs +1 -1
- package/apps/realworld2/view/HomeContainer.mjs +3 -3
- package/apps/realworld2/view/article/DetailsContainer.mjs +1 -1
- package/apps/realworld2/view/article/PreviewComponent.mjs +7 -7
- package/apps/realworld2/view/article/TagListComponent.mjs +2 -2
- package/apps/realworld2/view/user/ProfileContainer.mjs +1 -1
- package/apps/route/view/center/CardAdministration.mjs +2 -2
- package/apps/route/view/center/CardAdministrationDenied.mjs +1 -1
- package/apps/route/view/center/CardContact.mjs +2 -2
- package/apps/route/view/center/CardHome.mjs +1 -1
- package/apps/route/view/center/CardSection1.mjs +1 -1
- package/apps/route/view/center/CardSection2.mjs +1 -1
- package/apps/sharedcovid/view/AttributionComponent.mjs +1 -1
- package/apps/sharedcovid/view/HeaderContainer.mjs +6 -6
- package/apps/sharedcovid/view/MainContainerController.mjs +5 -5
- package/apps/sharedcovid/view/TableContainerController.mjs +1 -1
- package/apps/sharedcovid/view/country/Gallery.mjs +13 -13
- package/apps/sharedcovid/view/country/Helix.mjs +13 -13
- package/apps/sharedcovid/view/country/HistoricalDataTable.mjs +1 -1
- package/apps/shareddialog/childapps/shareddialog2/view/MainContainer.mjs +1 -1
- package/apps/shareddialog/view/MainContainer.mjs +1 -1
- package/buildScripts/createApp.mjs +2 -2
- package/examples/table/cellEditing/MainContainer.mjs +1 -1
- package/examples/table/container/MainContainer.mjs +3 -3
- package/examples/table/nestedRecordFields/Viewport.mjs +6 -6
- package/examples/tableFiltering/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer.mjs +1 -1
- package/examples/tablePerformance/MainContainer2.mjs +1 -1
- package/examples/tablePerformance/MainContainer3.mjs +2 -2
- package/examples/tableStore/MainContainer.mjs +2 -2
- package/learn/Glossary.md +261 -0
- package/learn/UsingTheseTopics.md +2 -2
- package/learn/benefits/ConfigSystem.md +538 -28
- package/learn/benefits/Effort.md +47 -2
- package/learn/benefits/Features.md +50 -32
- package/learn/benefits/FormsEngine.md +68 -38
- package/learn/benefits/MultiWindow.md +33 -7
- package/learn/benefits/OffTheMainThread.md +2 -2
- package/learn/benefits/Quick.md +45 -12
- package/learn/benefits/RPCLayer.md +75 -0
- package/learn/benefits/Speed.md +16 -11
- package/learn/gettingstarted/ComponentModels.md +4 -4
- package/learn/gettingstarted/Config.md +6 -6
- package/learn/gettingstarted/DescribingTheUI.md +4 -4
- package/learn/gettingstarted/Events.md +6 -6
- package/learn/gettingstarted/Extending.md +4 -4
- package/learn/gettingstarted/References.md +6 -6
- package/learn/gettingstarted/Workspaces.md +6 -6
- package/learn/guides/ApplicationBootstrap.md +26 -26
- package/learn/guides/ComponentsAndContainers.md +12 -12
- package/learn/guides/ConfigSystemDeepDive.md +280 -0
- package/learn/guides/CustomComponents.md +2 -2
- package/learn/guides/DeclarativeComponentTreesVsImperativeVdom.md +17 -17
- package/learn/guides/InstanceLifecycle.md +295 -1
- package/learn/guides/MainThreadAddons.md +475 -0
- package/learn/guides/PortalApp.md +2 -2
- package/learn/guides/StateProviders.md +12 -12
- package/learn/guides/WorkingWithVDom.md +14 -14
- package/learn/guides/events/CustomEvents.md +16 -16
- package/learn/guides/events/DomEvents.md +12 -12
- package/learn/javascript/ClassFeatures.md +3 -2
- package/learn/javascript/Classes.md +8 -8
- package/learn/javascript/NewNode.md +4 -4
- package/learn/javascript/Overrides.md +8 -8
- package/learn/javascript/Super.md +10 -8
- package/learn/tree.json +52 -51
- package/learn/tutorials/Earthquakes.md +54 -57
- package/learn/tutorials/TodoList.md +4 -4
- package/package.json +2 -2
- package/resources/scss/src/apps/portal/learn/ContentComponent.scss +12 -0
- package/resources/scss/src/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/src/table/plugin/CellEditing.scss +1 -1
- package/resources/scss/theme-dark/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-light/table/{View.scss → Body.scss} +1 -1
- package/resources/scss/theme-neo-light/Global.scss +1 -2
- package/resources/scss/theme-neo-light/table/{View.scss → Body.scss} +1 -1
- package/src/DefaultConfig.mjs +2 -2
- package/src/Main.mjs +8 -7
- package/src/Neo.mjs +16 -2
- package/src/button/Base.mjs +2 -2
- package/src/calendar/view/SettingsContainer.mjs +2 -2
- package/src/calendar/view/YearComponent.mjs +9 -9
- package/src/calendar/view/calendars/ColorsList.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +1 -1
- package/src/calendar/view/month/Component.mjs +15 -15
- package/src/calendar/view/week/Component.mjs +12 -12
- package/src/calendar/view/week/EventDragZone.mjs +4 -4
- package/src/calendar/view/week/TimeAxisComponent.mjs +3 -3
- package/src/component/Base.mjs +17 -2
- package/src/component/Carousel.mjs +2 -2
- package/src/component/Chip.mjs +3 -3
- package/src/component/Circle.mjs +2 -2
- package/src/component/DateSelector.mjs +8 -8
- package/src/component/Helix.mjs +1 -1
- package/src/component/Label.mjs +3 -18
- package/src/component/Legend.mjs +3 -3
- package/src/component/MagicMoveText.mjs +6 -14
- package/src/component/Process.mjs +3 -3
- package/src/component/Progress.mjs +1 -1
- package/src/component/StatusBadge.mjs +2 -2
- package/src/component/Timer.mjs +2 -2
- package/src/component/Toast.mjs +5 -3
- package/src/container/AccordionItem.mjs +2 -2
- package/src/container/Base.mjs +1 -1
- package/src/core/Base.mjs +77 -14
- package/src/core/Util.mjs +14 -2
- package/src/date/DayViewComponent.mjs +2 -2
- package/src/date/SelectorContainer.mjs +1 -1
- package/src/draggable/grid/header/toolbar/SortZone.mjs +21 -21
- package/src/draggable/table/header/toolbar/SortZone.mjs +1 -1
- package/src/form/field/CheckBox.mjs +4 -4
- package/src/form/field/FileUpload.mjs +25 -39
- package/src/form/field/Range.mjs +1 -1
- package/src/form/field/Text.mjs +3 -3
- package/src/form/field/TextArea.mjs +2 -3
- package/src/grid/Body.mjs +8 -5
- package/src/grid/_export.mjs +1 -1
- package/src/list/Color.mjs +2 -2
- package/src/main/DeltaUpdates.mjs +157 -98
- package/src/main/addon/AmCharts.mjs +61 -84
- package/src/main/addon/Base.mjs +161 -42
- package/src/main/addon/GoogleMaps.mjs +9 -16
- package/src/main/addon/HighlightJS.mjs +2 -13
- package/src/main/addon/IntersectionObserver.mjs +21 -21
- package/src/main/addon/MonacoEditor.mjs +32 -64
- package/src/manager/ClassHierarchy.mjs +114 -0
- package/src/menu/List.mjs +1 -1
- package/src/plugin/Popover.mjs +2 -2
- package/src/sitemap/Component.mjs +1 -1
- package/src/table/{View.mjs → Body.mjs} +25 -22
- package/src/table/Container.mjs +43 -43
- package/src/table/_export.mjs +2 -2
- package/src/table/plugin/CellEditing.mjs +19 -19
- package/src/tooltip/Base.mjs +1 -6
- package/src/tree/Accordion.mjs +3 -3
- package/src/vdom/Helper.mjs +19 -22
- package/src/worker/App.mjs +1 -2
- package/src/worker/Base.mjs +7 -5
- package/src/worker/Canvas.mjs +2 -3
- package/src/worker/Data.mjs +5 -7
- package/src/worker/Task.mjs +2 -3
- package/src/worker/VDom.mjs +3 -4
- package/src/worker/mixin/RemoteMethodAccess.mjs +5 -2
- package/learn/guides/MainThreadAddonExample.md +0 -15
- 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
|
-
|
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.
|
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.
|
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.
|
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 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.
|
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').
|
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 — all integrated within a single app — is a unique feature of Neo.mjs!
|
43
43
|
|
44
|
-
|
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
|
-
|
60
|
+
```
|
61
61
|
|
62
62
|
---
|
63
63
|
|