neo.mjs 6.9.6 → 6.9.8

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 (103) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/learnneo/neo-config.json +6 -5
  3. package/apps/learnneo/store/Content.mjs +52 -2
  4. package/apps/learnneo/view/home/ContentTreeList.mjs +32 -4
  5. package/apps/learnneo/view/home/MainContainer.mjs +17 -29
  6. package/apps/learnneo/view/home/MainContainerController.mjs +28 -19
  7. package/apps/learnneo/view/home/MainContainerModel.mjs +35 -0
  8. package/docs/app/view/MainContainerController.mjs +12 -0
  9. package/examples/ServiceWorker.mjs +2 -2
  10. package/examples/button/base/neo-config.json +2 -1
  11. package/examples/form/field/textarea/MainContainer.mjs +7 -1
  12. package/package.json +1 -1
  13. package/resources/data/learnneo/p/2023-10-01T18-29-19-158Z.md +102 -0
  14. package/resources/data/learnneo/p/2023-10-07T19-18-28-517Z.md +110 -0
  15. package/resources/data/learnneo/p/2023-10-08T20-20-07-934Z.md +75 -0
  16. package/resources/data/learnneo/p/2023-10-08T20-20-37-336Z.md +29 -0
  17. package/resources/data/learnneo/p/2023-10-08T20-37-30-658Z.md +0 -0
  18. package/resources/data/learnneo/p/2023-10-08T21-58-25-809Z.md +68 -0
  19. package/resources/data/learnneo/p/2023-10-08T22-22-11-013Z.md +0 -0
  20. package/resources/data/learnneo/p/2023-10-14T19-25-08-153Z.md +124 -0
  21. package/resources/data/learnneo/pages/whyneo.md +4 -0
  22. package/resources/data/learnneo/t.json +130 -0
  23. package/resources/data/learnneo/tree.json +27 -0
  24. package/resources/deck/whyneo.md +80 -0
  25. package/resources/images/Neo_Vector.svg +3 -0
  26. package/resources/scss/src/apps/learnneo/Viewport.scss +63 -0
  27. package/resources/scss/src/apps/newwebsite/MainContainer.css +33 -0
  28. package/resources/scss/theme-neo-light/Global.scss +7 -0
  29. package/resources/scss/theme-neo-light/apps/covid/HeaderContainer.scss +10 -0
  30. package/resources/scss/theme-neo-light/apps/covid/country/Gallery.scss +7 -0
  31. package/resources/scss/theme-neo-light/apps/covid/country/Helix.scss +8 -0
  32. package/resources/scss/theme-neo-light/apps/covid/country/LineChartComponent.scss +3 -0
  33. package/resources/scss/theme-neo-light/apps/docs/ContentTabContainer.scss +4 -0
  34. package/resources/scss/theme-neo-light/apps/docs/HeaderContainer.scss +10 -0
  35. package/resources/scss/theme-neo-light/apps/docs/MainContainer.scss +3 -0
  36. package/resources/scss/theme-neo-light/apps/docs/classdetails/HeaderComponent.scss +4 -0
  37. package/resources/scss/theme-neo-light/apps/docs/classdetails/MembersList.scss +17 -0
  38. package/resources/scss/theme-neo-light/apps/docs/classdetails/TutorialComponent.scss +4 -0
  39. package/resources/scss/theme-neo-light/apps/website/HeaderContainer.scss +5 -0
  40. package/resources/scss/theme-neo-light/apps/website/MainContainer.scss +4 -0
  41. package/resources/scss/theme-neo-light/apps/website/blog/Container.scss +3 -0
  42. package/resources/scss/theme-neo-light/apps/website/home/TabContainer.scss +4 -0
  43. package/resources/scss/theme-neo-light/button/Base.scss +117 -0
  44. package/resources/scss/theme-neo-light/calendar/view/EditEventContainer.scss +5 -0
  45. package/resources/scss/theme-neo-light/calendar/view/MainContainer.scss +23 -0
  46. package/resources/scss/theme-neo-light/calendar/view/SettingsContainer.scss +3 -0
  47. package/resources/scss/theme-neo-light/calendar/view/YearComponent.scss +10 -0
  48. package/resources/scss/theme-neo-light/calendar/view/calendars/EditContainer.scss +5 -0
  49. package/resources/scss/theme-neo-light/calendar/view/calendars/List.scss +3 -0
  50. package/resources/scss/theme-neo-light/calendar/view/month/Component.scss +10 -0
  51. package/resources/scss/theme-neo-light/calendar/view/week/Component.scss +13 -0
  52. package/resources/scss/theme-neo-light/component/Base.scss +6 -0
  53. package/resources/scss/theme-neo-light/component/BoxLabel.scss +5 -0
  54. package/resources/scss/theme-neo-light/component/Chip.scss +14 -0
  55. package/resources/scss/theme-neo-light/component/DateSelector.scss +24 -0
  56. package/resources/scss/theme-neo-light/component/Process.scss +9 -0
  57. package/resources/scss/theme-neo-light/component/Progress.scss +3 -0
  58. package/resources/scss/theme-neo-light/component/Splitter.scss +5 -0
  59. package/resources/scss/theme-neo-light/component/StatusBadge.scss +19 -0
  60. package/resources/scss/theme-neo-light/component/Timer.scss +6 -0
  61. package/resources/scss/theme-neo-light/component/Toast.scss +9 -0
  62. package/resources/scss/theme-neo-light/component/Video.scss +4 -0
  63. package/resources/scss/theme-neo-light/container/Accordion.scss +5 -0
  64. package/resources/scss/theme-neo-light/container/AccordionItem.scss +10 -0
  65. package/resources/scss/theme-neo-light/container/Base.scss +4 -0
  66. package/resources/scss/theme-neo-light/container/Panel.scss +5 -0
  67. package/resources/scss/theme-neo-light/container/Viewport.scss +3 -0
  68. package/resources/scss/theme-neo-light/design-tokens/Components.scss +3 -0
  69. package/resources/scss/theme-neo-light/dialog/Base.scss +5 -0
  70. package/resources/scss/theme-neo-light/examples/ConfigurationPanel.scss +3 -0
  71. package/resources/scss/theme-neo-light/examples/calendar/basic/MainContainer.scss +4 -0
  72. package/resources/scss/theme-neo-light/form/Fieldset.scss +6 -0
  73. package/resources/scss/theme-neo-light/form/field/CheckBox.scss +8 -0
  74. package/resources/scss/theme-neo-light/form/field/FileUpload.scss +12 -0
  75. package/resources/scss/theme-neo-light/form/field/Picker.scss +5 -0
  76. package/resources/scss/theme-neo-light/form/field/Range.scss +4 -0
  77. package/resources/scss/theme-neo-light/form/field/Search.scss +3 -0
  78. package/resources/scss/theme-neo-light/form/field/Select.scss +9 -0
  79. package/resources/scss/theme-neo-light/form/field/Switch.scss +17 -0
  80. package/resources/scss/theme-neo-light/form/field/Text.scss +32 -0
  81. package/resources/scss/theme-neo-light/form/field/trigger/Base.scss +6 -0
  82. package/resources/scss/theme-neo-light/form/field/trigger/Time.scss +4 -0
  83. package/resources/scss/theme-neo-light/grid/Container.scss +7 -0
  84. package/resources/scss/theme-neo-light/grid/View.scss +13 -0
  85. package/resources/scss/theme-neo-light/grid/header/Button.scss +6 -0
  86. package/resources/scss/theme-neo-light/list/Base.scss +12 -0
  87. package/resources/scss/theme-neo-light/menu/List.scss +21 -0
  88. package/resources/scss/theme-neo-light/menu/Panel.scss +3 -0
  89. package/resources/scss/theme-neo-light/tab/Container.scss +3 -0
  90. package/resources/scss/theme-neo-light/tab/Strip.scss +5 -0
  91. package/resources/scss/theme-neo-light/tab/header/Button.scss +30 -0
  92. package/resources/scss/theme-neo-light/table/Container.scss +10 -0
  93. package/resources/scss/theme-neo-light/table/View.scss +13 -0
  94. package/resources/scss/theme-neo-light/table/header/Button.scss +7 -0
  95. package/resources/scss/theme-neo-light/toolbar/Base.scss +4 -0
  96. package/resources/scss/theme-neo-light/tree/List.scss +4 -0
  97. package/src/DefaultConfig.mjs +2 -2
  98. package/src/form/field/FileUpload.mjs +10 -8
  99. package/src/form/field/Text.mjs +2 -2
  100. package/src/form/field/TextArea.mjs +52 -0
  101. package/src/main/DomAccess.mjs +23 -0
  102. package/src/main/addon/HighlightJS.mjs +35 -10
  103. package/src/vdom/Helper.mjs +2 -1
@@ -0,0 +1,29 @@
1
+ Neo.mjs uses standard modular JavaScript, so you're free to use other class
2
+ features, like private members.
3
+ <pre class="neo">
4
+ class Human extends Mammal {
5
+ static config = {
6
+ className: 'Simple.example.Human',
7
+ name: 'J. Doe',
8
+ married: false,
9
+ }
10
+ static #privateStaticField = 'foo'
11
+ #privateInstanceField = 'bar'
12
+ #privateInstanceMethod(){
13
+ console.log(`Psst. Don't tell anyone, but ${this.#privateInstanceField} and ${Human.#privateStaticField}`);
14
+ }
15
+ speak(tellSecret){
16
+ console.log(`Hello! My name is ${this.name}. I am ${this.married?'':'not'} married.`);
17
+ if (tellSecret) this.#privateInstanceMethod();
18
+ }
19
+ yodel(){
20
+ console.log('Yodelay hee hoo!');
21
+ }}
22
+
23
+ const myPerson = Neo.create(Human, {
24
+ name: 'Herbert'
25
+ });
26
+ myPerson.speak(true);
27
+
28
+ Neo.applyClassConfig(Human);
29
+ </pre>
@@ -0,0 +1,68 @@
1
+ To call a super-class method use the `super` keyword.
2
+
3
+ <pre class="neo" style="color:gray">
4
+ class Mammal extends Base {
5
+ static config = {
6
+ className: 'Simple.example.Mammal',
7
+
8
+ name: 'Anonymous'
9
+ }
10
+ doSomething(){
11
+ console.log(`${this.name} is doing something mammals do`)
12
+ }
13
+ }
14
+ Neo.applyClassConfig(Mammal);
15
+ </pre>
16
+ <pre class="neo" style="color:gray">
17
+ class Human extends Mammal {
18
+ static config = {
19
+ className: 'Simple.example.Human',
20
+ }
21
+ doSomething(){
22
+ <span style="color:#b91010">super.doSomething();</span>
23
+ console.log(`${this.name} is doing something humans do`)
24
+ }
25
+ }
26
+
27
+ const myPerson = Neo.create(Human, {
28
+ name: 'Herbert'
29
+ });
30
+ myPerson.doSomething();
31
+
32
+ Neo.applyClassConfig(Mammal);
33
+ </pre>
34
+
35
+ Sometimes you aren't sure if a super class has a method. In that case use the
36
+ conditional chaining operator &mdash; `?.`
37
+
38
+ <pre class="neo" style="color:gray">
39
+ class Mammal extends Base {
40
+ static config = {
41
+ className: 'Simple.example.Mammal',
42
+
43
+ name: 'Anonymous'
44
+ }
45
+ doSomething(){
46
+ console.log(`${this.name} is doing something mammals do`)
47
+ }
48
+ }
49
+ Neo.applyClassConfig(Mammal);
50
+ </pre>
51
+ <pre class="neo" style="color:gray">
52
+ class Human extends Mammal {
53
+ static config = {
54
+ className: 'Simple.example.Human',
55
+ }
56
+ doSomething(){
57
+ <span style="color:#b91010">super?.doSomething();</span>
58
+ console.log(`${this.name} is doing something humans do`)
59
+ }
60
+ }
61
+
62
+ const myPerson = Neo.create(Human, {
63
+ name: 'Herbert'
64
+ });
65
+ myPerson.doSomething();
66
+
67
+ Neo.applyClassConfig(Mammal);
68
+ </pre>
@@ -0,0 +1,124 @@
1
+ The purpose of this tutorial is to let you see the structure of a Neo.mjs workspace,
2
+ and the strucure of an application.
3
+
4
+ If you haven't already done it, run `npx neo-app` to create a Neo.mjs workspace.
5
+
6
+ <img src="https://raw.githubusercontent.com/neomjs/pages/main/resources/images/apps/learnneo/NeoWorkspace.png" style="height: 400px;">
7
+
8
+ As you can see, a Neo.mjs workspace is a conventional npm workspace. If you run
9
+ the script `npm run server-start` from the workspace, Neo.mjs launches a web
10
+ serve whose doc root is the workspace.
11
+
12
+ <img src="https://raw.githubusercontent.com/neomjs/pages/main/resources/images/apps/learnneo/ServerRoot.png" style="height: 400px;">
13
+
14
+ If you drill down into the `src` directory you'll see your applications.
15
+ If you drill down into the `docs` directory you'll see the Neo.mjs API docs.
16
+
17
+ In order to discuss the structure of an app, we'll create a simple starter
18
+ app. To do that, run this command from the workspace.
19
+
20
+ `npm run create-app-empty`
21
+
22
+ At the first prompt, name the app `Foo`, and accept the default for everything else.
23
+ The script creates an application structured as follows.
24
+
25
+ <img src="https://raw.githubusercontent.com/neomjs/pages/main/resources/images/apps/learnneo/FooFolder.png" style="height: 400px;">
26
+
27
+ These files are part of the typical structure of a Neo.mjs application. The files `index.html`, `app.mjs`, `neo-config.json`, `view/Viewport.mjs` are rarely modified.
28
+ You will, however, edit the main container, and its associated "controller" and "model",
29
+ as well as create new views, new controllers, etc.
30
+
31
+ Now let's look at a source file. This is the contents of `MainView.mjs`.
32
+
33
+ <pre>
34
+ <code class="javascript">
35
+ import Base from '../../../node_modules/neo.mjs/src/container/Base.mjs';
36
+ import Controller from './MainViewController.mjs';
37
+ import ViewModel from './MainViewModel.mjs';
38
+
39
+ class MainView extends Base {
40
+ static config = {
41
+ className: 'Foo.view.MainView',
42
+
43
+ controller: {module: Controller},
44
+ model: {module: ViewModel},
45
+
46
+ layout: {ntype: 'fit'},
47
+ items: [],
48
+ }
49
+ }
50
+
51
+ Neo.applyClassConfig(MainView);
52
+
53
+ export default MainView;
54
+ </code>
55
+ </pre>
56
+
57
+ Neo.mjs views are composed of components. A component can be a "container", which means it
58
+ visually holds or groups other components, or a regular component, like a button. The main
59
+ view is a container, which you can see because `MainView extends Base`, and `Base` is
60
+ the container base class. The items in a container are configured in the `items:[]`, which
61
+ is empty in this starter code.
62
+
63
+ This view also has a "controller" and "model". We'll talk about those later, but in a nutshell,
64
+ a controller is where event handling and app logic goes, and a model is where you set up shared
65
+ bindable data.
66
+
67
+ We'll go into a lot more depth about view, controllers, and models in other topics, but to let
68
+ you see how a component is configured let's put a button in the container.
69
+
70
+ First, we need to import the class that defines buttons. Then we'll describe the new button in the
71
+ `items:[].`
72
+
73
+ <pre>
74
+ <code class="javascript">
75
+ import Base from '../../../node_modules/neo.mjs/src/container/Base.mjs';
76
+ import Controller from './MainViewController.mjs';
77
+ import ViewModel from './MainViewModel.mjs';
78
+ import Button from '../../../node_modules/neo.mjs/src/button/Base.mjs';
79
+
80
+ class MainView extends Base {
81
+ static config = {
82
+ className: 'Foo.view.MainView',
83
+
84
+ controller: {module: Controller},
85
+ model: {module: ViewModel},
86
+
87
+ layout: {ntype: 'fit'},
88
+ items: [{
89
+ module: Button,
90
+ text: 'Button'
91
+ }],
92
+ }
93
+ }
94
+
95
+ Neo.applyClassConfig(MainView);
96
+
97
+ export default MainView;
98
+ </code>
99
+ </pre>
100
+
101
+ Note the entry in +items:[]+. That's a description of the button that'll be created as the single
102
+ item in our container. In Neo.mjs terms we're _configuring_ the button. Neo.mjs is _declarative_,
103
+ which components and objects are _described_. It's an abstraction. In other words we're saying
104
+ what we want, but not how it's done. We want a button with some text &mdash; how that's done
105
+ isn't important here in the container. A non-declarative approach would be more focused on _how_,
106
+ where you might way "I want a &lt;button> HTML element with its innerHTML set to some value."
107
+
108
+ In another topic you'll learn about the Neo.mjs config system and declaratively describing
109
+ views, controllers, and other things.
110
+
111
+ If you run the +foo+ app you'll see one huge button. That's because the container is configured to
112
+ use the "fit" layout, which means the container is designed to hold one and only one component,
113
+ and that component will take up all available space. We could get a more normal looking button
114
+ by changing the layout.
115
+
116
+ `layout: {type:'vbox', align:'start},`
117
+
118
+ Change that line and look at the running application.
119
+
120
+ Neo.mjs has scores of component classes.
121
+ You can extend them to create your own reusable components and sets of components.
122
+
123
+ Other topics discuss coding applications, how the config system works, controllers,
124
+ and bindable data. However, as long as we're here
@@ -1,3 +1,7 @@
1
+
2
+ #hi
3
+
4
+
1
5
  Neo.mjs is a framework used to create browser-based applications.
2
6
 
3
7
  Some key features and benefits of Neo.mjs are:
@@ -0,0 +1,130 @@
1
+ {
2
+ "data": [
3
+ {
4
+ "id": "2023-10-01T18-29-19-158Z",
5
+ "parentId": null,
6
+ "isLeaf": true,
7
+ "name": "Why Neo.mjs?"
8
+ },
9
+ {
10
+ "id": "2023-09-26T17-26-15-104Z",
11
+ "parentId": null,
12
+ "isLeaf": false,
13
+ "name": "Getting Started"
14
+ },
15
+ {
16
+ "id": "2023-10-12T12-59-22-082Z",
17
+ "parentId": null,
18
+ "isLeaf": false,
19
+ "name": "Source Files"
20
+ },
21
+ {
22
+ "id": "2023-10-14T19-25-08-153Z",
23
+ "parentId": "2023-10-12T12-59-22-082Z",
24
+ "isLeaf": true,
25
+ "name": "Neo.mjs workspaces"
26
+ },
27
+ {
28
+ "id": "2023-10-08T18-26-31-357Z",
29
+ "parentId": null,
30
+ "isLeaf": false,
31
+ "name": "Class Definitions and Config"
32
+ },
33
+ {
34
+ "id": "2023-10-08T20-39-23-708Z",
35
+ "parentId": "2023-10-08T18-26-31-357Z",
36
+ "isLeaf": false,
37
+ "name": "Class Basics"
38
+ },
39
+ {
40
+ "id": "2023-10-07T19-18-28-517Z",
41
+ "parentId": "2023-10-08T20-39-23-708Z",
42
+ "isLeaf": true,
43
+ "name": "Classes, Properties, and Methods"
44
+ },
45
+ {
46
+ "id": "2023-10-08T20-20-07-934Z",
47
+ "parentId": "2023-10-08T20-39-23-708Z",
48
+ "isLeaf": true,
49
+ "name": "Overriding Methods"
50
+ },
51
+ {
52
+ "id": "2023-10-08T20-20-37-336Z",
53
+ "parentId": "2023-10-08T20-39-23-708Z",
54
+ "isLeaf": true,
55
+ "name": "Other JavaScript Class Features"
56
+ },
57
+ {
58
+ "id": "2023-10-08T21-58-25-809Z",
59
+ "parentId": "2023-10-08T20-39-23-708Z",
60
+ "isLeaf": true,
61
+ "name": "Super"
62
+ },
63
+ {
64
+ "id": "2023-10-08T20-37-30-658Z",
65
+ "parentId": "2023-10-08T18-26-31-357Z",
66
+ "isLeaf": true,
67
+ "name": "The Constructor"
68
+ },
69
+ {
70
+ "id": "2023-10-08T22-22-11-013Z",
71
+ "parentId": "2023-10-08T18-26-31-357Z",
72
+ "isLeaf": true,
73
+ "name": "super"
74
+ },
75
+ {
76
+ "id": "2023-09-25T20-27-55-600Z",
77
+ "parentId": null,
78
+ "isLeaf": false,
79
+ "name": "Config"
80
+ },
81
+ {
82
+ "id": "2023-09-25T20-27-38-129Z",
83
+ "parentId": null,
84
+ "isLeaf": false,
85
+ "name": "Component Basics"
86
+ },
87
+ {
88
+ "id": "2023-09-25T20-28-12-355Z",
89
+ "parentId": null,
90
+ "isLeaf": false,
91
+ "name": "User Input (Forms)"
92
+ },
93
+ {
94
+ "id": "2023-09-25T20-28-33-035Z",
95
+ "parentId": null,
96
+ "isLeaf": false,
97
+ "name": "Data"
98
+ },
99
+ {
100
+ "id": "2023-09-25T20-28-51-807Z",
101
+ "parentId": null,
102
+ "isLeaf": false,
103
+ "name": "Component Models and Binding"
104
+ },
105
+ {
106
+ "id": "2023-09-25T20-29-19-770Z",
107
+ "parentId": null,
108
+ "isLeaf": false,
109
+ "name": "Multi-Window"
110
+ },
111
+ {
112
+ "id": "2023-09-25T20-29-28-307Z",
113
+ "parentId": null,
114
+ "isLeaf": false,
115
+ "name": "Main Thread Add-onss"
116
+ },
117
+ {
118
+ "id": "2023-09-26T17-31-48-754Z",
119
+ "parentId": null,
120
+ "isLeaf": false,
121
+ "name": "Custom Components and vdom"
122
+ },
123
+ {
124
+ "id": "2023-10-16T19-38-29-590Z",
125
+ "parentId": null,
126
+ "isLeaf": false,
127
+ "name": "Mixins"
128
+ }
129
+ ]
130
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "data": [{
3
+ "id" : 1,
4
+ "isLeaf" : true,
5
+ "name" : "Why neo.mjs",
6
+ "parentId": null,
7
+ "path" : "whyneo.md"
8
+ }, {
9
+ "id" : 2,
10
+ "isLeaf" : false,
11
+ "name" : "Class Definitions and Config",
12
+ "parentId": null,
13
+ "path" : null
14
+ }, {
15
+ "id" : 3,
16
+ "isLeaf" : false,
17
+ "name" : "Class Basics",
18
+ "parentId": 2,
19
+ "path" : null
20
+ }, {
21
+ "id" : 4,
22
+ "isLeaf" : true,
23
+ "name" : "Classes, Properties, and Methods",
24
+ "parentId": 3,
25
+ "path" : null
26
+ }]
27
+ }
@@ -0,0 +1,80 @@
1
+
2
+ #hi
3
+
4
+
5
+ Neo.mjs is a framework used to create browser-based applications.
6
+
7
+ Some key features and benefits of Neo.mjs are:
8
+
9
+ <div type="expander" caption="Multi-Threaded">
10
+ <p>
11
+ When a Neo.mjs application starts, the framework spawns three web-workers.
12
+ Web-workers are each run in their own thread. As a result, a typical Neo.mjs application
13
+ has four threads:
14
+ <ol>
15
+ <li>The _main_ thread, where DOM updates are applied
16
+ <li>An _application_ web-worker where normal application locic is run
17
+ <li>A _data_ web-worker were HTTP and socket calls are run
18
+ <li>A _view_ web-worker that manages delta updates
19
+ </ol>
20
+ </div>
21
+
22
+ <div type="expander" caption="Extreme Speed">
23
+ <p>
24
+ The Neo.mjs web-worker proccesses are automatically run in parallel, on separate CPU cores.
25
+ </p>
26
+ <p>
27
+ By contrast, other JavaScript frameworks run in a single thread. That means
28
+ in a typical framework all business logic, data handling, and DOM rendering compete for
29
+ CPU reasources.
30
+ </p>
31
+ <p>
32
+ This means Neo.mjs applications run and render faster. This is
33
+ particularly beneficial for processor- and data-intensive applications,
34
+ and applications that need to rapidly update what's viewed. In testing, Neo.mjs applications
35
+ easily apply over 20,000 DOM updates per second.
36
+ </p>
37
+ <p>
38
+ If the default four threads aren't enough, you're free to launch additional web-worker threads
39
+ to run other specialized logic.
40
+ </p>
41
+ </div>
42
+
43
+ <div type="expander" caption="Quick Application Development">
44
+ <p>
45
+ Neo.js classes let you specify properties in a way that allows code to detect "before" and "after"
46
+ changes. This makes it easy to handle value validation and transformation, and react to changes.
47
+ </p>
48
+ <p>
49
+ Neo.mjs also has elegant yet powerful state management features that make it easy to create shared,
50
+ bindable data. For example, if two components are bound to the same propery, a change to the
51
+ property will automatically be applied to both components.
52
+ </p>
53
+ </div>
54
+
55
+ <div type="expander" caption="Multi-Window Applications">
56
+ <p>
57
+ Neo.mjs applications can also launch as _shared web workers_, which allows you to have a single
58
+ application run in multiple browser windows; those windows could be moved to multiple monitors.
59
+ </p>
60
+ <p>
61
+ For example, you can have a data analysis application with a control panel on one monitor,
62
+ tabular data in another, and charts on another &mdash; all sharing the same data, handling events
63
+ across windows, running seamlessly as a single application.
64
+ </p>
65
+ </div>
66
+
67
+ <div type="expander" caption="Open-Source and Standards-Based">
68
+ <p>
69
+ Neo.mjs is an open-source library. Features needed for the community can be added to the
70
+ library via pull-requests. And since Neo.mjs uses the standard JavaScript class system,
71
+ all Neo.mjs classes can be extended.
72
+ </p>
73
+ <p>
74
+ Neo.mjs uses standard modular JavaScript, so developers don't need to learn non-standard language
75
+ syntax, and there's no need for special pre-compilers or WebPack modules.
76
+ That means fewer dependencies and easier configuration. Furthermore, the use of
77
+ standard JavaScript makes debugging easier: any statement you write while developing your
78
+ applcation can also be run in the debugging console.
79
+ </p>
80
+ </div>
@@ -0,0 +1,3 @@
1
+ <svg width="274" height="178" viewBox="0 0 274 178" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M231.866 178L136.597 82.5858L41.3368 178L0.101562 136.702L136.597 0L273.102 136.702L231.866 178Z" fill="#11F4A1"/>
3
+ </svg>
@@ -0,0 +1,63 @@
1
+ .learn-content {
2
+
3
+ font-size: 13pt;
4
+ letter-spacing: 1px;
5
+
6
+ em,
7
+ i {
8
+ font-family: Palatino, "Times New Roman", serif;
9
+ font-size: 1.07em;
10
+ }
11
+
12
+ p {
13
+ margin: 0.5em 0em 0.7em 0em ;
14
+ }
15
+
16
+ mark {
17
+ background-color: #B8FCE3;
18
+ color: black;
19
+ padding: 0.1em 0.2em;
20
+ }
21
+
22
+ padding: 1em;
23
+
24
+ overflow: scroll;
25
+
26
+ details summary {
27
+ cursor: pointer;
28
+ transition: margin 300ms ease-out;
29
+ }
30
+
31
+ details[open] {
32
+ margin-bottom: 2em;
33
+ }
34
+
35
+ details summary {
36
+ list-style: none;
37
+ color: #555;
38
+ display: flex;
39
+ /* also removes the list marker */
40
+ align-items: center;
41
+ font-weight: bold;
42
+ }
43
+
44
+ details summary::before {
45
+ content: "\f055";
46
+ }
47
+
48
+ details[open] summary::before {
49
+ content: "\f056";
50
+ }
51
+
52
+ details summary::before {
53
+ font-family: var(--fa-style-family, "Font Awesome 6 Free");
54
+ font-weight: var(--fa-style, 900);
55
+ font-size: 1.3em;
56
+ margin: 0.4em 0.4em 0.4em 0;
57
+ color: #c4c4c4;
58
+ }
59
+
60
+ summary::-webkit-details-marker {
61
+ display: none;
62
+ }
63
+ }
@@ -0,0 +1,33 @@
1
+
2
+ .newwebsite-main-container {
3
+ display: flex !important;
4
+ align-items: center !important;
5
+ justify-content: center !important;
6
+ gap: 48px;
7
+ padding: 10% 15% 15% 15%;
8
+ }
9
+
10
+ .button-group {
11
+ display: flex !important;
12
+ flex-direction: row-reverse !important;
13
+ gap: 8px !important;
14
+ }
15
+
16
+ .neo-h1 {
17
+ font-size: 48px;
18
+ font-weight: 600;
19
+ text-align: center;
20
+ }
21
+
22
+ .vector {
23
+ background-image: url("../../../../images/Neo_Vector.svg");
24
+ background-repeat: no-repeat;
25
+ background-size: contain;
26
+ background-position: center center;
27
+ width: 100%;
28
+ height: 150px;
29
+ }
30
+
31
+ .get-started-button {
32
+ cursor: not-allowed !important;
33
+ }
@@ -0,0 +1,7 @@
1
+ :root .neo-theme-neo-light {
2
+ --neo-background-color: #fafafa;
3
+ --neo-color : #000;
4
+ --neo-disabled-opacity: 0.5;
5
+ --neo-font-family : "Helvetica Neue", "Helvetica", "Arial", "Lucida Grande", sans-serif;
6
+ --neo-font-smoothing : antialiased;
7
+ }
@@ -0,0 +1,10 @@
1
+ :root .neo-theme-neo-light { // .covid-header-container
2
+ --covid-header-active-background-color : rgba(100, 181, 246, .65);
3
+ --covid-header-active-color : #{darken(#64b5f6, 20%)};
4
+ --covid-header-cases-background-color : rgba(187, 187, 187, .65);
5
+ --covid-header-cases-color : #{darken(#bbb, 30%)};
6
+ --covid-header-deaths-background-color : rgba(251, 103, 103, .65);
7
+ --covid-header-deaths-color : #{darken(#fb6767, 20%)};
8
+ --covid-header-recovered-background-color: rgba( 40, 218, 111, .65);
9
+ --covid-header-recovered-color : #{darken(#28ca68, 20%)};
10
+ }
@@ -0,0 +1,7 @@
1
+ :root .neo-theme-neo-light { // .neo-gallery.covid-country-gallery
2
+ --covid-gallery-background-color : #fff;
3
+ --covid-gallery-border-color : #ddd;
4
+ --covid-gallery-item-border-color : rgba(73,120,184,.5);
5
+ --covid-gallery-item-border-sides-width : 1px;
6
+ --covid-gallery-item-wrapper-background-color: rgba(73,120,184,.5);
7
+ }
@@ -0,0 +1,8 @@
1
+ :root .neo-theme-neo-light { // .neo-helix.covid-country-helix
2
+ --covid-helix-background-color : #fff;
3
+ --covid-helix-border-color : #ddd;
4
+ --covid-helix-item-border-color : rgba(73,120,184,.5);
5
+ --covid-helix-item-border-sides-width : 1px;
6
+ --covid-helix-item-box-shadow-selected : 0 0 35px #008dff;
7
+ --covid-helix-item-wrapper-background-color: rgba(73,120,184,.5);
8
+ }
@@ -0,0 +1,3 @@
1
+ :root .neo-theme-neo-light { // .covid-line-chart
2
+ --covid-line-chart-background-color: #fff;
3
+ }
@@ -0,0 +1,4 @@
1
+ :root .neo-theme-neo-light { // .docs-content-tabcontainer
2
+ --docs-content-tabcontainer-tab-header-toolbar-background-color : #fff;
3
+ --docs-content-tabcontainer-tab-header-toolbar-glyph-color-hover: red;
4
+ }
@@ -0,0 +1,10 @@
1
+ :root .neo-theme-neo-light { // .neo-docs-header-container
2
+ --docs-header-container-background-color : #fff;
3
+ --docs-header-container-background-image : none;
4
+ --docs-header-container-logo-text-background-clip: text;
5
+ --docs-header-container-logo-text-color : rgba(0,0,0,0.6);
6
+ --docs-header-container-logo-text-font-size : 28px;
7
+ --docs-header-container-logo-text-font-weight : 800;
8
+ --docs-header-container-logo-padding : 10px;
9
+ --docs-header-container-logo-text-shadow : 2px 2px 3px rgba(200,200,200,0.1);
10
+ }
@@ -0,0 +1,3 @@
1
+ :root .neo-theme-neo-light { // .neo-docs-navigation-tab-container
2
+ --docs-navigation-tab-container-background-color: #fff;
3
+ }
@@ -0,0 +1,4 @@
1
+ :root .neo-theme-neo-light { // .neo-docs-classdetails-headercontainer
2
+ --docs-classdetails-headercomponent-background-color: #fff;
3
+ --docs-classdetails-headerpanel-border-right : 1px solid #ddd;
4
+ }
@@ -0,0 +1,17 @@
1
+ :root .neo-theme-neo-light { // .docs-classhierarchy-memberslist
2
+ --docs-classhierarchy-memberslist-background-color : #bbb;
3
+ --docs-memberlist-group-header-background-color : steelblue;
4
+ --docs-memberlist-group-header-color : #fff;
5
+ --docs-param-table-list-item-background-color : #fff;
6
+ --docs-param-table-list-item-background-image : none;
7
+ --docs-param-table-list-item-header-background-clip: none;
8
+ --docs-param-table-list-item-header-text-shadow : none;
9
+ --docs-param-table-list-item-highlight-search-color: red;
10
+ --docs-param-table-source-link-color : #bbb;
11
+ --docs-param-table-source-link-color-hover : #{darken(#1c60a0, 10%)};
12
+ --docs-param-table-thead-background-color : slategray;
13
+ --docs-param-table-thead-background-image : none;
14
+ --docs-param-table-tr-background-clip : none;
15
+ --docs-param-table-tr-color : #fff;
16
+ --docs-param-table-tr-text-shadow : none;
17
+ }
@@ -0,0 +1,4 @@
1
+ :root .neo-theme-neo-light {
2
+ --docs-classdetails-tutorialcomponent-background-color: #fff;
3
+ --docs-classdetails-tutorialcomponent-color : #000;
4
+ }