neo.mjs 6.18.1 → 6.18.3

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 (63) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/colors/view/HeaderToolbar.mjs +6 -6
  3. package/apps/portal/view/HeaderToolbar.mjs +1 -2
  4. package/apps/portal/view/home/MainContainer.mjs +21 -21
  5. package/apps/portal/view/home/parts/AfterMath.mjs +19 -16
  6. package/apps/portal/view/home/parts/BaseContainer.mjs +38 -0
  7. package/apps/portal/view/home/parts/Colors.mjs +15 -15
  8. package/apps/portal/view/home/parts/Features.mjs +6 -6
  9. package/apps/portal/view/home/parts/Helix.mjs +9 -12
  10. package/apps/portal/view/home/parts/How.mjs +8 -8
  11. package/apps/portal/view/home/parts/MainNeo.mjs +14 -12
  12. package/apps/portal/view/learn/ContentView.mjs +3 -1
  13. package/examples/ServiceWorker.mjs +2 -2
  14. package/examples/model/dialog/EditUserDialog.mjs +1 -8
  15. package/package.json +4 -4
  16. package/resources/data/deck/learnneo/pages/2023-10-14T19-25-08-153Z.md +2 -2
  17. package/resources/data/deck/learnneo/pages/ComponentModels.md +6 -6
  18. package/resources/data/deck/learnneo/pages/ComponentsAndContainers.md +10 -10
  19. package/resources/data/deck/learnneo/pages/Config.md +6 -6
  20. package/resources/data/deck/learnneo/pages/CustomComponents.md +4 -4
  21. package/resources/data/deck/learnneo/pages/DescribingTheUI.md +4 -4
  22. package/resources/data/deck/learnneo/pages/Earthquakes.md +2 -2
  23. package/resources/data/deck/learnneo/pages/Events.md +7 -7
  24. package/resources/data/deck/learnneo/pages/Extending.md +7 -7
  25. package/resources/data/deck/learnneo/pages/GuideEvents.md +17 -18
  26. package/resources/data/deck/learnneo/pages/GuideViewModels.md +444 -0
  27. package/resources/data/deck/learnneo/pages/References.md +8 -8
  28. package/resources/data/deck/learnneo/pages/TestLivePreview.md +5 -4
  29. package/resources/data/deck/learnneo/pages/TodoList.md +9 -9
  30. package/resources/data/deck/learnneo/pages/Welcome.md +3 -3
  31. package/resources/data/deck/learnneo/pages/WhyNeo-Multi-Window.md +2 -2
  32. package/resources/data/deck/learnneo/pages/WhyNeo-Speed.md +2 -2
  33. package/resources/data/deck/learnneo/tree.json +1 -0
  34. package/resources/scss/src/apps/portal/HeaderToolbar.scss +1 -47
  35. package/resources/scss/src/apps/portal/home/MainContainer.scss +0 -32
  36. package/resources/scss/src/apps/portal/home/parts/BaseContainer.scss +56 -0
  37. package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +3 -1
  38. package/resources/scss/src/apps/portal/learn/ContentTreeList.scss +1 -1
  39. package/resources/scss/src/calendar/view/EditEventContainer.scss +1 -1
  40. package/resources/scss/src/calendar/view/calendars/List.scss +1 -1
  41. package/resources/scss/src/{apps/portal/learn → code}/LivePreview.scss +1 -1
  42. package/resources/scss/src/component/Helix.scss +1 -2
  43. package/resources/scss/src/dialog/Base.scss +1 -6
  44. package/resources/scss/theme-dark/dialog/Base.scss +1 -0
  45. package/resources/scss/theme-light/dialog/Base.scss +1 -0
  46. package/resources/scss/theme-neo-light/Global.scss +13 -11
  47. package/resources/scss/theme-neo-light/dialog/Base.scss +1 -0
  48. package/src/DefaultConfig.mjs +2 -2
  49. package/src/button/Base.mjs +3 -2
  50. package/src/calendar/view/EditEventContainer.mjs +1 -1
  51. package/{apps/portal/view/learn → src/code}/LivePreview.mjs +43 -27
  52. package/src/component/Base.mjs +1 -6
  53. package/src/controller/Base.mjs +5 -5
  54. package/src/dialog/Base.mjs +23 -45
  55. package/src/form/field/Color.mjs +5 -5
  56. package/src/main/addon/ResizeObserver.mjs +18 -2
  57. package/src/selection/DateSelectorModel.mjs +2 -2
  58. package/src/util/HashHistory.mjs +45 -12
  59. package/src/worker/Base.mjs +15 -8
  60. package/apps/portal/view/home/parts/HelloWorld.mjs +0 -85
  61. package/apps/portal/view/home/preview/PageCodeContainer.mjs +0 -55
  62. package/resources/scss/src/apps/portal/Viewport.scss +0 -3
  63. package/resources/scss/src/apps/portal/home/preview/PageCodeContainer.scss +0 -115
@@ -8,7 +8,6 @@ import Observable from '../core/Observable.mjs';
8
8
  */
9
9
  class HashHistory extends Base {
10
10
  /**
11
- * True automatically applies the core.Observable mixin
12
11
  * @member {Boolean} observable=true
13
12
  * @static
14
13
  */
@@ -16,7 +15,7 @@ class HashHistory extends Base {
16
15
 
17
16
  static config = {
18
17
  /**
19
- * @member {String} className='Neo.util.ClassSystem'
18
+ * @member {String} className='Neo.util.HashHistory'
20
19
  * @protected
21
20
  */
22
21
  className: 'Neo.util.HashHistory',
@@ -31,24 +30,54 @@ class HashHistory extends Base {
31
30
  */
32
31
  maxItems: 50,
33
32
  /**
34
- * @member {Array} stack=[]
33
+ * Storing one stack per windowId
34
+ * @member {Object} stacks={}
35
35
  * @protected
36
36
  */
37
- stack: []
37
+ stacks: {}
38
38
  }
39
39
 
40
40
  /**
41
+ * Convenience shortcut
42
+ * @param {Number} [windowId]
41
43
  * @returns {Object}
42
44
  */
43
- first() {
44
- return this.stack[0] || null
45
+ first(windowId) {
46
+ return this.getAt(0, windowId)
45
47
  }
46
48
 
47
49
  /**
50
+ * @param {Number} index
51
+ * @param {Number} [windowId]
48
52
  * @returns {Number}
49
53
  */
50
- getCount() {
51
- return this.stack.length
54
+ getAt(index, windowId) {
55
+ return this.getStack(windowId)[index]
56
+ }
57
+
58
+ /**
59
+ * @param {Number} [windowId]
60
+ * @returns {Number}
61
+ */
62
+ getCount(windowId) {
63
+ return this.getStack(windowId).length
64
+ }
65
+
66
+ /**
67
+ * @param {Number} [windowId]
68
+ * @returns {Number}
69
+ */
70
+ getStack(windowId) {
71
+ let me = this,
72
+ {stacks} = me,
73
+ stackId = windowId || Object.keys(stacks)[0],
74
+ stack = stacks[stackId];
75
+
76
+ if (!stack) {
77
+ stacks[stackId] = stack = []
78
+ }
79
+
80
+ return stack
52
81
  }
53
82
 
54
83
  /**
@@ -59,10 +88,12 @@ class HashHistory extends Base {
59
88
  * @param {Number} data.windowId
60
89
  */
61
90
  push(data) {
62
- let me = this,
63
- {stack} = me;
91
+ let me = this,
92
+ {windowId} = data,
93
+ stack = me.getStack(windowId);
64
94
 
65
95
  if (stack[0]?.hashString !== data.hashString) {
96
+ delete data[windowId];
66
97
  stack.unshift(data);
67
98
 
68
99
  if (stack.length > me.maxItems) {
@@ -74,10 +105,12 @@ class HashHistory extends Base {
74
105
  }
75
106
 
76
107
  /**
108
+ * Convenience shortcut
109
+ * @param {Number} [windowId]
77
110
  * @returns {Object}
78
111
  */
79
- second() {
80
- return this.stack[1] || null
112
+ second(windowId) {
113
+ return this.getAt(0, windowId)
81
114
  }
82
115
  }
83
116
 
@@ -252,9 +252,14 @@ class Base extends CoreBase {
252
252
 
253
253
  return new Promise(function(resolve, reject) {
254
254
  let message = me.sendMessage(dest, opts, transfer),
255
- msgId = message.id;
255
+ msgId = message?.id;
256
256
 
257
- me.promises[msgId] = {reject, resolve}
257
+ if (!msgId) {
258
+ // a window got closed and the message port no longer exist (SharedWorkers)
259
+ reject()
260
+ } else {
261
+ me.promises[msgId] = {reject, resolve}
262
+ }
258
263
  })
259
264
  }
260
265
 
@@ -282,22 +287,24 @@ class Base extends CoreBase {
282
287
  port = me.getPort({id: opts.port}).port
283
288
  } else if (opts.windowId) {
284
289
  portObject = me.getPort({windowId: opts.windowId});
285
- port = portObject.port;
290
+ port = portObject?.port;
286
291
 
287
- opts.port = portObject.id
292
+ opts.port = portObject?.id
288
293
  } else if (opts.appName) {
289
294
  portObject = me.getPort({appName: opts.appName});
290
- port = portObject.port;
295
+ port = portObject?.port;
291
296
 
292
- opts.port = portObject.id
297
+ opts.port = portObject?.id
293
298
  } else {
294
299
  port = me.ports[0].port
295
300
  }
296
301
  }
297
302
 
298
- message = new Message(opts);
303
+ if (port) {
304
+ message = new Message(opts);
305
+ port.postMessage(message, transfer);
306
+ }
299
307
 
300
- port.postMessage(message, transfer);
301
308
  return message
302
309
  }
303
310
  }
@@ -1,85 +0,0 @@
1
- import Container from '../../../../../src/container/Base.mjs';
2
- import LivePreviewContainer from '../preview/PageCodeContainer.mjs';
3
-
4
- /**
5
- * @class Portal.view.home.parts.HelloWorld
6
- * @extends Neo.container.Base
7
- */
8
- class HelloWorld extends Container {
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
- /**
36
- * @member {Object[]} items
37
- */
38
- items: [{
39
- module: Container,
40
- flex : '1',
41
- style : {padding: '2rem'},
42
- layout: {ntype: 'vbox', align: 'center', pack: 'center'},
43
- items : [{
44
- cls : 'neo-h1',
45
- id : 'neo-hello-world-h1',
46
- flex: 'none',
47
- html: 'Hello World',
48
- vdom: {tag: 'h1'}
49
- }, {
50
- cls : 'neo-h2',
51
- flex: 'none',
52
- html: 'Your first code snippet',
53
- vdom: {tag: 'h2'}
54
- }, {
55
- cls : 'neo-content',
56
- flex: 'none',
57
- html: 'If you understand these lines, you are ready to start with Neo.mjs',
58
- vdom: {tag: 'p'}
59
- }]
60
- }, {
61
- module: LivePreviewContainer,
62
- flex: 0.8,
63
- value : [
64
- "import Container from '../../../../src/container/Base.mjs';",
65
- "",
66
- "class MainView extends Container {",
67
- " static config = {",
68
- " className: 'Portal.view.MainView',",
69
- " layout : {ntype:'vbox', align:'stretch'},",
70
- " items : [{",
71
- " module: Container,",
72
- " html : 'Hello World'",
73
- " }]",
74
- " }",
75
- "}",
76
- "",
77
- "Neo.setupClass(MainView);"
78
- ].join('\n')
79
- }]
80
- }
81
- }
82
-
83
- Neo.setupClass(HelloWorld);
84
-
85
- 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,3 +0,0 @@
1
- .learnneo-viewport {
2
-
3
- }
@@ -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
- }