neo.mjs 6.18.2 → 6.19.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 (108) hide show
  1. package/README.md +28 -214
  2. package/apps/ServiceWorker.mjs +2 -2
  3. package/apps/colors/view/ViewportController.mjs +7 -3
  4. package/apps/portal/data/blog.json +13 -0
  5. package/apps/portal/view/HeaderToolbar.mjs +2 -2
  6. package/apps/portal/view/Viewport.mjs +4 -2
  7. package/apps/portal/view/ViewportController.mjs +89 -8
  8. package/apps/portal/view/blog/Container.mjs +8 -8
  9. package/apps/portal/view/blog/List.mjs +6 -6
  10. package/apps/portal/view/home/MainContainer.mjs +9 -10
  11. package/apps/portal/view/home/parts/BaseContainer.mjs +8 -1
  12. package/apps/portal/view/home/parts/Colors.mjs +4 -4
  13. package/apps/portal/view/home/parts/Helix.mjs +2 -2
  14. package/apps/portal/view/home/parts/How.mjs +3 -3
  15. package/apps/portal/view/home/parts/MainNeo.mjs +6 -7
  16. package/apps/portal/view/home/parts/References.mjs +88 -0
  17. package/apps/portal/view/learn/ContentView.mjs +3 -1
  18. package/apps/portal/view/learn/MainContainer.mjs +3 -2
  19. package/apps/portal/view/learn/MainContainerController.mjs +11 -0
  20. package/apps/portal/view/learn/PageContainer.mjs +5 -3
  21. package/apps/portal/view/services/Component.mjs +73 -0
  22. package/apps/website/data/blog.json +13 -0
  23. package/examples/ServiceWorker.mjs +2 -2
  24. package/examples/component/carousel/MainContainer.mjs +42 -33
  25. package/examples/layout/cube/MainContainer.mjs +217 -0
  26. package/examples/layout/cube/app.mjs +6 -0
  27. package/examples/layout/cube/index.html +11 -0
  28. package/examples/layout/cube/neo-config.json +6 -0
  29. package/package.json +7 -7
  30. package/resources/data/deck/learnneo/pages/2023-10-14T19-25-08-153Z.md +2 -2
  31. package/resources/data/deck/learnneo/pages/ComponentModels.md +6 -6
  32. package/resources/data/deck/learnneo/pages/ComponentsAndContainers.md +10 -10
  33. package/resources/data/deck/learnneo/pages/Config.md +6 -6
  34. package/resources/data/deck/learnneo/pages/CustomComponents.md +4 -4
  35. package/resources/data/deck/learnneo/pages/DescribingTheUI.md +4 -4
  36. package/resources/data/deck/learnneo/pages/Earthquakes-01-goals.md +32 -0
  37. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-01-generate-a-workspace.md +47 -0
  38. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-02-generate-the-starter-app.md +150 -0
  39. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-03-debugging.md +136 -0
  40. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-04-fetch-data.md +146 -0
  41. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-05-refactor-the-table.md +146 -0
  42. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-06-use-a-view-model.md +301 -0
  43. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-07-use-the-google-maps-addon.md +175 -0
  44. package/resources/data/deck/learnneo/pages/Earthquakes-Lab-08-events.md +38 -0
  45. package/resources/data/deck/learnneo/pages/Earthquakes.md +10 -10
  46. package/resources/data/deck/learnneo/pages/Events.md +7 -7
  47. package/resources/data/deck/learnneo/pages/Extending.md +7 -7
  48. package/resources/data/deck/learnneo/pages/Glossary.md +0 -0
  49. package/resources/data/deck/learnneo/pages/GuideEvents.md +97 -19
  50. package/resources/data/deck/learnneo/pages/GuideViewModels.md +21 -21
  51. package/resources/data/deck/learnneo/pages/References.md +8 -8
  52. package/resources/data/deck/learnneo/pages/TestLivePreview.md +5 -4
  53. package/resources/data/deck/learnneo/pages/TodoList.md +9 -9
  54. package/resources/data/deck/learnneo/pages/Welcome.md +3 -3
  55. package/resources/data/deck/learnneo/pages/WhyNeo-Multi-Window.md +2 -2
  56. package/resources/data/deck/learnneo/pages/WhyNeo-Speed.md +2 -2
  57. package/resources/data/deck/learnneo/tree.json +2 -1
  58. package/resources/images/apps/portal/neo-references.png +0 -0
  59. package/resources/scss/src/apps/portal/HeaderToolbar.scss +0 -46
  60. package/resources/scss/src/apps/portal/Viewport.scss +16 -1
  61. package/resources/scss/src/apps/portal/blog/Container.scss +7 -7
  62. package/resources/scss/src/apps/portal/blog/List.scss +20 -16
  63. package/resources/scss/src/apps/portal/home/parts/BaseContainer.scss +33 -4
  64. package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +4 -5
  65. package/resources/scss/src/apps/portal/home/parts/References.scss +46 -0
  66. package/resources/scss/src/apps/portal/learn/ContentTreeList.scss +20 -0
  67. package/resources/scss/src/apps/portal/learn/ContentView.scss +4 -0
  68. package/resources/scss/src/apps/portal/learn/MainContainer.scss +1 -1
  69. package/resources/scss/src/apps/portal/learn/PageContainer.scss +22 -16
  70. package/resources/scss/src/apps/portal/services/Component.scss +20 -0
  71. package/resources/scss/src/{apps/portal/learn → code}/LivePreview.scss +1 -1
  72. package/resources/scss/src/component/Carousel.scss +21 -0
  73. package/resources/scss/src/component/Helix.scss +1 -2
  74. package/resources/scss/src/examples/layout/cube/MainContainer.scss +7 -0
  75. package/resources/scss/src/layout/Cube.scss +80 -0
  76. package/resources/scss/src/tab/Container.scss +10 -10
  77. package/resources/scss/theme-neo-light/apps/portal/blog/Container.scss +3 -0
  78. package/resources/scss/theme-neo-light/form/field/Search.scss +1 -1
  79. package/resources/scss/theme-neo-light/tooltip/Base.scss +1 -1
  80. package/src/DefaultConfig.mjs +2 -2
  81. package/src/Main.mjs +15 -1
  82. package/src/Neo.mjs +14 -3
  83. package/{apps/portal/view/learn → src/code}/LivePreview.mjs +43 -27
  84. package/src/component/Base.mjs +18 -1
  85. package/src/container/Base.mjs +3 -1
  86. package/src/dialog/Base.mjs +1 -2
  87. package/src/layout/Base.mjs +43 -6
  88. package/src/layout/Card.mjs +21 -59
  89. package/src/layout/Cube.mjs +428 -0
  90. package/src/layout/Fit.mjs +9 -38
  91. package/src/layout/Flexbox.mjs +16 -17
  92. package/src/layout/Form.mjs +13 -70
  93. package/src/layout/Grid.mjs +6 -18
  94. package/src/main/addon/ResizeObserver.mjs +18 -2
  95. package/src/main/mixin/DeltaUpdates.mjs +16 -3
  96. package/src/util/Array.mjs +36 -0
  97. package/src/vdom/Helper.mjs +328 -445
  98. package/src/vdom/VNode.mjs +12 -1
  99. package/test/siesta/siesta.js +16 -1
  100. package/test/siesta/tests/VdomCalendar.mjs +2111 -37
  101. package/test/siesta/tests/VdomHelper.mjs +283 -47
  102. package/test/siesta/tests/vdom/Advanced.mjs +367 -0
  103. package/test/siesta/tests/vdom/layout/Cube.mjs +189 -0
  104. package/test/siesta/tests/vdom/table/Container.mjs +133 -0
  105. package/apps/portal/view/home/parts/HelloWorld.mjs +0 -83
  106. package/apps/portal/view/home/preview/PageCodeContainer.mjs +0 -55
  107. package/resources/scss/src/apps/portal/home/preview/PageCodeContainer.scss +0 -115
  108. package/resources/scss/theme-neo-light/apps/portal/learn/ContentTreeList.scss +0 -23
@@ -0,0 +1,133 @@
1
+ import Neo from '../../../../../src/Neo.mjs';
2
+ import * as core from '../../../../../src/core/_export.mjs';
3
+ import VdomHelper from '../../../../../src/vdom/Helper.mjs';
4
+
5
+ let deltas, output, vdom, vnode;
6
+
7
+ StartTest(t => {
8
+ t.it('Remove all Table Rows', t => {
9
+ vdom =
10
+ {id: 'neo-table-container-1', cn: [
11
+ {tag: 'tbody', id: 'neo-table-view-1', cn: [
12
+ {tag: 'tr', id: 'neo-table-row-1'},
13
+ {tag: 'tr', id: 'neo-table-row-2'},
14
+ {tag: 'tr', id: 'neo-table-row-3'},
15
+ {tag: 'tr', id: 'neo-table-row-4'},
16
+ {tag: 'tr', id: 'neo-table-row-5'}
17
+ ]}
18
+ ]};
19
+
20
+ vnode = VdomHelper.create(vdom);
21
+
22
+ vdom =
23
+ {id: 'neo-table-container-1', cn: [
24
+ {tag: 'tbody', id: 'neo-table-view-1', cn: []}
25
+ ]};
26
+
27
+ output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
28
+
29
+ t.is(deltas.length, 1, 'Count deltas equals 1');
30
+
31
+ t.isDeeplyStrict(deltas, [
32
+ {action: 'removeAll', parentId: 'neo-table-view-1'}
33
+ ], 'Deltas got created successfully');
34
+
35
+ t.diag('Revert operation');
36
+
37
+ vdom =
38
+ {id: 'neo-table-container-1', cn: [
39
+ {tag: 'tbody', id: 'neo-table-view-1', cn: [
40
+ {tag: 'tr', id: 'neo-table-row-1'},
41
+ {tag: 'tr', id: 'neo-table-row-2'},
42
+ {tag: 'tr', id: 'neo-table-row-3'},
43
+ {tag: 'tr', id: 'neo-table-row-4'},
44
+ {tag: 'tr', id: 'neo-table-row-5'}
45
+ ]}
46
+ ]};
47
+
48
+ output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
49
+
50
+ t.is(deltas.length, 5, 'Count deltas equals 5');
51
+
52
+ t.isDeeplyStrict(deltas, [
53
+ {action: 'insertNode', index: 0, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-1"></tr>'},
54
+ {action: 'insertNode', index: 1, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-2"></tr>'},
55
+ {action: 'insertNode', index: 2, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-3"></tr>'},
56
+ {action: 'insertNode', index: 3, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-4"></tr>'},
57
+ {action: 'insertNode', index: 4, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-5"></tr>'}
58
+ ], 'Deltas got created successfully');
59
+ });
60
+
61
+ t.it('Remove all Table Rows & move 2 into a different Table', t => {
62
+ vdom =
63
+ {id: 'neo-wrapper-1', cn: [
64
+ {id: 'neo-table-container-1', cn: [
65
+ {tag: 'tbody', id: 'neo-table-view-1', cn: [
66
+ {tag: 'tr', id: 'neo-table-row-1'},
67
+ {tag: 'tr', id: 'neo-table-row-2'},
68
+ {tag: 'tr', id: 'neo-table-row-3'},
69
+ {tag: 'tr', id: 'neo-table-row-4'},
70
+ {tag: 'tr', id: 'neo-table-row-5'}
71
+ ]}
72
+ ]},
73
+ {id: 'neo-table-container-2', cn: [
74
+ {tag: 'tbody', id: 'neo-table-view-2', cn: []}
75
+ ]}
76
+ ]};
77
+
78
+ vnode = VdomHelper.create(vdom);
79
+
80
+ vdom =
81
+ {id: 'neo-wrapper-1', cn: [
82
+ {id: 'neo-table-container-1', cn: [
83
+ {tag: 'tbody', id: 'neo-table-view-1', cn: []}
84
+ ]},
85
+ {id: 'neo-table-container-2', cn: [
86
+ {tag: 'tbody', id: 'neo-table-view-2', cn: [
87
+ {tag: 'tr', id: 'neo-table-row-2'},
88
+ {tag: 'tr', id: 'neo-table-row-4'}
89
+ ]}
90
+ ]}
91
+ ]};
92
+
93
+ output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
94
+
95
+ t.is(deltas.length, 3, 'Count deltas equals 3');
96
+
97
+ t.isDeeplyStrict(deltas, [
98
+ {action: 'moveNode', id: 'neo-table-row-2', index: 0, parentId: 'neo-table-view-2'},
99
+ {action: 'moveNode', id: 'neo-table-row-4', index: 1, parentId: 'neo-table-view-2'},
100
+ {action: 'removeAll', parentId: 'neo-table-view-1'}
101
+ ], 'Deltas got created successfully');
102
+
103
+ t.diag('Revert operation');
104
+
105
+ vdom =
106
+ {id: 'neo-wrapper-1', cn: [
107
+ {id: 'neo-table-container-1', cn: [
108
+ {tag: 'tbody', id: 'neo-table-view-1', cn: [
109
+ {tag: 'tr', id: 'neo-table-row-1'},
110
+ {tag: 'tr', id: 'neo-table-row-2'},
111
+ {tag: 'tr', id: 'neo-table-row-3'},
112
+ {tag: 'tr', id: 'neo-table-row-4'},
113
+ {tag: 'tr', id: 'neo-table-row-5'}
114
+ ]}
115
+ ]},
116
+ {id: 'neo-table-container-2', cn: [
117
+ {tag: 'tbody', id: 'neo-table-view-2', cn: []}
118
+ ]}
119
+ ]};
120
+
121
+ output = VdomHelper.update({vdom, vnode}); deltas = output.deltas; vnode = output.vnode;
122
+
123
+ t.is(deltas.length, 5, 'Count deltas equals 5');
124
+
125
+ t.isDeeplyStrict(deltas, [
126
+ {action: 'insertNode', index: 0, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-1"></tr>'},
127
+ {action: 'moveNode', id: 'neo-table-row-2', index: 1, parentId: 'neo-table-view-1'},
128
+ {action: 'insertNode', index: 2, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-3"></tr>'},
129
+ {action: 'moveNode', id: 'neo-table-row-4', index: 3, parentId: 'neo-table-view-1'},
130
+ {action: 'insertNode', index: 4, parentId: 'neo-table-view-1', outerHTML: '<tr id="neo-table-row-5"></tr>'}
131
+ ], 'Deltas got created successfully');
132
+ });
133
+ });
@@ -1,83 +0,0 @@
1
- import BaseContainer from './BaseContainer.mjs';
2
- import LivePreviewContainer from '../preview/PageCodeContainer.mjs';
3
-
4
- /**
5
- * @class Portal.view.home.parts.HelloWorld
6
- * @extends Portal.view.home.parts.BaseContainer
7
- */
8
- class HelloWorld extends BaseContainer {
9
- static config = {
10
- /**
11
- * @member {String} className='Portal.view.home.parts.HelloWorld'
12
- * @protected
13
- */
14
- className: 'Portal.view.home.parts.HelloWorld',
15
-
16
- cls: ['page', 'hello-world'],
17
- /**
18
- * @member {Object} layout=null
19
- */
20
- // layout: null,
21
-
22
- responsiveConfig: {
23
- oldPhone: {maxWidth: 320},
24
- phone : {maxWidth: 480},
25
- tablet : {maxWidth: 770},
26
- medium : {maxWidth: 840},
27
- large : {minWidth: 841}
28
- },
29
-
30
- responsive: {
31
- medium: {layout: {ntype: 'vbox', align: 'stretch', pack: 'center'}},
32
- large : {layout: {ntype: 'hbox', align: 'stretch', pack: 'center'}}
33
- },
34
- /**
35
- * @member {Object[]} items
36
- */
37
- items: [{
38
- ntype : 'container',
39
- flex : '1',
40
- style : {padding: '2rem'},
41
- layout: {ntype: 'vbox', align: 'center', pack: 'center'},
42
- items : [{
43
- cls : 'neo-h1',
44
- flex: 'none',
45
- html: 'Hello World',
46
- vdom: {tag: 'h1'}
47
- }, {
48
- cls : 'neo-h2',
49
- flex: 'none',
50
- html: 'Your first code snippet',
51
- vdom: {tag: 'h2'}
52
- }, {
53
- cls : 'neo-content',
54
- flex: 'none',
55
- html: 'If you understand these lines, you are ready to start with Neo.mjs',
56
- vdom: {tag: 'p'}
57
- }]
58
- }, {
59
- module: LivePreviewContainer,
60
- flex : 0.8,
61
- value : [
62
- "import Container from '../../../../src/container/Base.mjs';",
63
- "",
64
- "class MainView extends Container {",
65
- " static config = {",
66
- " className: 'Portal.view.MainView',",
67
- " layout : {ntype:'vbox', align:'stretch'},",
68
- " items : [{",
69
- " module: Container,",
70
- " html : 'Hello World'",
71
- " }]",
72
- " }",
73
- "}",
74
- "",
75
- "Neo.setupClass(MainView);"
76
- ].join('\n')
77
- }]
78
- }
79
- }
80
-
81
- Neo.setupClass(HelloWorld);
82
-
83
- export default HelloWorld;
@@ -1,55 +0,0 @@
1
- import Container from '../../../../../src/container/Base.mjs';
2
- import LivePreview from '../../learn/LivePreview.mjs';
3
-
4
- /**
5
- * @class Portal.view.home.preview.PageCodeContainer
6
- * @extends Neo.container.Base
7
- */
8
- class PageCodeContainer extends Container {
9
- static config = {
10
- /**
11
- * @member {String} className='Portal.view.home.preview.PageCodeContainer'
12
- * @protected
13
- */
14
- className: 'Portal.view.home.preview.PageCodeContainer',
15
- /**
16
- * @member {String} ntype='page-code-container'
17
- * @protected
18
- */
19
- ntype: 'page-code-container',
20
- /**
21
- * @member {String[]} cls=['page-code-container']
22
- * @protected
23
- */
24
- cls: ['page-code-container'],
25
- /**
26
- * @member {Object} layout={ntype:'vbox',align:'stretch',pack:'center'}
27
- */
28
- layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
29
- /**
30
- * @member {Object[]} items
31
- */
32
- items : [{
33
- module: LivePreview,
34
- cls : ['live-preview']
35
- }],
36
- /**
37
- * @member {String|null} value_=null
38
- */
39
- value_: null,
40
- }
41
-
42
- /**
43
- * Triggered after the size config got changed
44
- * @param {String|null} value
45
- * @param {String|null} oldValue
46
- * @protected
47
- */
48
- afterSetValue(value, oldValue) {
49
- this.items[0].value = value
50
- }
51
- }
52
-
53
- Neo.setupClass(PageCodeContainer);
54
-
55
- export default PageCodeContainer;
@@ -1,115 +0,0 @@
1
- .page-code-container {
2
- position: relative;
3
- padding: 20px;
4
-
5
- &::before {
6
- position:absolute;
7
- inset: 0;
8
- opacity: .4;
9
- content: "";
10
- background: {
11
- image : url("../../../../../../../../resources/images/logo/neo_logo_secondary.svg");
12
- size: auto 90%;
13
- repeat: no-repeat;
14
- position: center;
15
- }
16
- }
17
-
18
- .live-preview {
19
- opacity: 0.9;
20
-
21
- .live-preview-container {
22
- & > .neo-tab-header-toolbar {
23
- background: var(--sem-color-surface-primary-background);
24
- border-radius: 15px 15px 0 0;
25
- padding-right: 10px;
26
- padding-left: 14px;
27
-
28
- .neo-button-text {
29
- color: slategrey!important;
30
- }
31
-
32
- .pressed {
33
- border-bottom-right-radius: 0;
34
- border-bottom-left-radius: 0;
35
-
36
- .neo-button-text {
37
- color: darkslategrey !important;
38
- }
39
-
40
- .neo-tab-button-indicator {
41
- background-color: darkslategrey;
42
- }
43
- }
44
-
45
- }
46
-
47
- & > .neo-tab-content-container {
48
- .monaco-editor {
49
- .margin, .sticky-widget-line-numbers, .active-line-number {
50
- background: #263238;
51
- color: #cdd3de;
52
- }
53
-
54
- .monaco-editor-background, .sticky-widget-lines-scrollable {
55
- background: #1B2225;
56
- color: #cdd3de;
57
-
58
- // keys
59
- .mtk1 {
60
- color: #CDFF8E;
61
- }
62
-
63
- // class, extends, static
64
- .mtk6 {
65
- color: #8EDCF5;
66
- }
67
-
68
- // numbers
69
- .mtk7 {
70
- color: #D6FF00
71
- }
72
-
73
- // Comment
74
- .mtk8 {
75
- color: #98A8B5;
76
- }
77
-
78
- // strings
79
- .mtk20 {
80
- color: #D6FF00
81
- }
82
-
83
- // Classname: MainView, Container
84
- .mtk22 {
85
- color: #cccccc;
86
- }
87
-
88
- /**
89
- * Cursor
90
- * not used
91
- * - .monaco-mouse-cursor-text
92
- * - .cursors-layer
93
- * - .cursor-line-style
94
- */
95
- .cursor,
96
- .cursor-solid {
97
- background-color: #ffffff;
98
- }
99
-
100
- // not in use
101
- .important {
102
- color: #FFA9A9;
103
- font-style: italic;
104
- }
105
-
106
- // not in use
107
- .id {
108
- color: #F3A5F7;
109
- }
110
- }
111
- }
112
- }
113
- }
114
- }
115
- }
@@ -1,23 +0,0 @@
1
- :root .neo-theme-neo-light { // .covid-header-container
2
- .topics-tree {
3
- &.neo-tree-list {
4
- .neo-list-container {
5
- .neo-list-item {
6
- .neo-list-item-content:before {
7
- content: unset !important;
8
- }
9
-
10
- &.neo-list-folder {
11
- .neo-list-item-content:before {
12
- content: unset !important;
13
- }
14
-
15
- &.neo-folder-open .neo-list-item-content:before {
16
- content: unset !important;
17
- }
18
- }
19
- }
20
- }
21
- }
22
- }
23
- }