neo.mjs 7.6.0 → 7.8.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 (65) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/portal/index.html +1 -1
  3. package/apps/portal/neo-config.json +1 -0
  4. package/apps/portal/resources/data/examples_devmode.json +20 -21
  5. package/apps/portal/resources/data/examples_dist_dev.json +19 -20
  6. package/apps/portal/resources/data/examples_dist_prod.json +19 -20
  7. package/apps/portal/view/ViewportController.mjs +20 -4
  8. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  9. package/apps/portal/view/learn/{ContentView.mjs → ContentComponent.mjs} +98 -38
  10. package/apps/portal/view/learn/CubeLayoutButton.mjs +77 -0
  11. package/apps/portal/view/learn/MainContainerController.mjs +1 -0
  12. package/apps/portal/view/learn/PageContainer.mjs +4 -4
  13. package/apps/shareddialog/view/DemoDialog.mjs +2 -10
  14. package/apps/shareddialog/view/MainContainerController.mjs +137 -126
  15. package/buildScripts/webpack/json/myApps.template.json +1 -1
  16. package/examples/ServiceWorker.mjs +2 -2
  17. package/package.json +3 -3
  18. package/resources/data/deck/learnneo/pages/Welcome.md +1 -1
  19. package/resources/data/deck/learnneo/pages/benefits/FormsEngine.md +1 -1
  20. package/resources/data/deck/learnneo/pages/guides/PortalApp.md +35 -0
  21. package/resources/data/deck/learnneo/tree.json +1 -0
  22. package/resources/scss/src/apps/colors/TableContainer.scss +11 -9
  23. package/resources/scss/src/apps/portal/blog/List.scss +1 -0
  24. package/resources/scss/src/apps/portal/examples/List.scss +1 -0
  25. package/resources/scss/src/apps/portal/services/Component.scss +7 -8
  26. package/resources/scss/theme-dark/apps/docs/classdetails/MembersList.scss +3 -1
  27. package/resources/scss/theme-dark/button/Base.scss +3 -1
  28. package/resources/scss/theme-dark/list/Base.scss +3 -1
  29. package/resources/scss/theme-dark/table/header/Button.scss +3 -1
  30. package/resources/scss/theme-dark/tree/List.scss +3 -1
  31. package/resources/scss/theme-light/apps/covid/HeaderContainer.scss +6 -4
  32. package/resources/scss/theme-light/apps/docs/classdetails/MembersList.scss +3 -1
  33. package/resources/scss/theme-light/button/Base.scss +3 -1
  34. package/resources/scss/theme-light/grid/View.scss +8 -6
  35. package/resources/scss/theme-light/list/Base.scss +6 -4
  36. package/resources/scss/theme-light/table/View.scss +8 -6
  37. package/resources/scss/theme-light/table/header/Button.scss +3 -1
  38. package/resources/scss/theme-neo-light/apps/covid/HeaderContainer.scss +6 -4
  39. package/resources/scss/theme-neo-light/apps/docs/classdetails/MembersList.scss +3 -1
  40. package/resources/scss/theme-neo-light/design-tokens/Core.scss +11 -9
  41. package/resources/scss/theme-neo-light/grid/View.scss +8 -6
  42. package/resources/scss/theme-neo-light/table/View.scss +8 -6
  43. package/resources/scss/theme-neo-light/table/header/Button.scss +3 -1
  44. package/src/DefaultConfig.mjs +2 -2
  45. package/src/collection/Base.mjs +4 -3
  46. package/src/container/Base.mjs +12 -7
  47. package/src/draggable/DragProxyComponent.mjs +10 -20
  48. package/src/main/addon/Navigator.mjs +34 -32
  49. package/src/main/addon/WindowPosition.mjs +13 -15
  50. package/src/plugin/Resizable.mjs +20 -11
  51. package/src/tab/Container.mjs +5 -1
  52. package/src/table/View.mjs +2 -2
  53. package/test/siesta/siesta.js +1 -0
  54. package/test/siesta/tests/ManagerInstance.mjs +35 -0
  55. package/apps/krausest/README.md +0 -3
  56. package/apps/krausest/TableCollection.mjs +0 -46
  57. package/apps/krausest/app.mjs +0 -8
  58. package/apps/krausest/css/currentStyle.css +0 -2
  59. package/apps/krausest/css/main.css +0 -26
  60. package/apps/krausest/index.html +0 -12
  61. package/apps/krausest/neo-config.json +0 -10
  62. package/apps/krausest/view/MainComponent.mjs +0 -122
  63. package/apps/krausest/view/MainComponentController.mjs +0 -33
  64. package/apps/krausest/view/TableComponent.mjs +0 -152
  65. /package/resources/scss/src/apps/portal/learn/{ContentView.scss → ContentComponent.scss} +0 -0
@@ -0,0 +1,77 @@
1
+ import Button from '../../../../src/button/Base.mjs';
2
+
3
+ /**
4
+ * @class Portal.view.learn.CubeLayoutButton
5
+ * @extends Neo.button.Base
6
+ */
7
+ class CubeLayoutButton extends Button {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Portal.view.learn.CubeLayoutButton'
11
+ * @protected
12
+ */
13
+ className: 'Portal.view.learn.CubeLayoutButton',
14
+ /**
15
+ * @member {String|null} activeLayout_=null
16
+ */
17
+ activeLayout_: null,
18
+ }
19
+
20
+ /**
21
+ * @member {Object} activateText='Activate Cube-Layout'
22
+ */
23
+ activateText = 'Activate Cube-Layout'
24
+ /**
25
+ * @member {Object} deactivateText='Deactivate Cube-Layout'
26
+ */
27
+ deactivateText = 'Deactivate Cube-Layout'
28
+
29
+ /**
30
+ * @member {Portal.view.ViewportController} viewportController
31
+ */
32
+ get viewportController() {
33
+ return this.getController('viewport-controller')
34
+ }
35
+
36
+ /**
37
+ * @param {Object} config
38
+ */
39
+ construct(config) {
40
+ super.construct(config);
41
+
42
+ let me = this;
43
+
44
+ me.activeLayout = me.viewportController.mainContentLayout;
45
+ me.handler = me.changeLayout.bind(me)
46
+ }
47
+
48
+ /**
49
+ * Triggered after the activeLayout config got changed
50
+ * @param {String|null} value
51
+ * @param {String|null} oldValue
52
+ */
53
+ afterSetActiveLayout(value, oldValue) {
54
+ let me = this;
55
+
56
+ if (value) {
57
+ me.viewportController.mainContentLayout = value;
58
+
59
+ if (value === 'card') {
60
+ me.text = me.activateText
61
+ } else if (value === 'mixed') {
62
+ me.text = me.deactivateText
63
+ }
64
+ }
65
+ }
66
+
67
+ /**
68
+ * @param {Object} data
69
+ */
70
+ changeLayout(data) {
71
+ let me = this;
72
+
73
+ me.activeLayout = me.text === me.activateText ? 'mixed' : 'card'
74
+ }
75
+ }
76
+
77
+ export default Neo.setupClass(CubeLayoutButton);
@@ -1,4 +1,5 @@
1
1
  import Controller from '../../../../src/controller/Component.mjs';
2
+ import CubeLayoutButton from './CubeLayoutButton.mjs'; // required for the Portal App .md file
2
3
  import {getSearchParams} from '../../Util.mjs';
3
4
 
4
5
  /**
@@ -1,6 +1,6 @@
1
- import Container from '../../../../src/container/Base.mjs';
2
- import ContentView from './ContentView.mjs';
3
- import Toolbar from '../../../../src/toolbar/Base.mjs';
1
+ import Container from '../../../../src/container/Base.mjs';
2
+ import ContentComponent from './ContentComponent.mjs';
3
+ import Toolbar from '../../../../src/toolbar/Base.mjs';
4
4
 
5
5
  /**
6
6
  * @class Portal.view.learn.PageContainer
@@ -29,7 +29,7 @@ class PageContainer extends Container {
29
29
  * @member {Object[]} items
30
30
  */
31
31
  items: [{
32
- module : ContentView,
32
+ module : ContentComponent,
33
33
  reference: 'content',
34
34
  listeners: {
35
35
  edit : 'onContentEdit',
@@ -28,6 +28,7 @@ class DemoDialog extends Dialog {
28
28
  * @member {Object} itemDefaults={labelWidth:70}
29
29
  */
30
30
  itemDefaults: {
31
+ flex : 'none',
31
32
  labelWidth: 70
32
33
  },
33
34
  /**
@@ -35,20 +36,11 @@ class DemoDialog extends Dialog {
35
36
  */
36
37
  items: [{
37
38
  module : TextField,
38
- flex : 'none',
39
39
  labelText: 'Field 1'
40
40
  }, {
41
41
  module : TextField,
42
- flex : 'none',
43
42
  labelText: 'Field 2'
44
- }],
45
- /**
46
- * @member {Object} wrapperStyle={height:'40%',width:'40%'}
47
- */
48
- wrapperStyle: {
49
- height: '40%',
50
- width : '40%'
51
- }
43
+ }]
52
44
  }
53
45
  }
54
46
 
@@ -2,6 +2,7 @@ import Component from '../../../src/component/Base.mjs';
2
2
  import ComponentController from '../../../src/controller/Component.mjs';
3
3
  import ComponentManager from '../../../src/manager/Component.mjs';
4
4
  import DemoDialog from './DemoDialog.mjs';
5
+ import DragProxyComponent from '../../../src/draggable/DragProxyComponent.mjs';
5
6
  import NeoArray from '../../../src/util/Array.mjs';
6
7
  import Rectangle from '../../../src/util/Rectangle.mjs';
7
8
 
@@ -16,63 +17,53 @@ class MainContainerController extends ComponentController {
16
17
  * @protected
17
18
  */
18
19
  className: 'SharedDialog.view.MainContainerController',
19
- /**
20
- * @member {String[]} connectedApps=[]
21
- */
22
- connectedApps: [],
23
- /**
24
- * @member {String} currentTheme='neo-theme-light'
25
- */
26
- currentTheme: 'neo-theme-light',
27
- /**
28
- * @member {String} dockedWindowAppName='SharedDialog2'
29
- */
30
- dockedWindowAppName: 'SharedDialog2',
31
- /**
32
- * @member {Number|null} dockedWindowId=null
33
- */
34
- dockedWindowId: null,
35
- /**
36
- * @member {Neo.component.Base|null} dockedWindowProxy=null
37
- */
38
- dockedWindowProxy: null,
39
20
  /**
40
21
  * Valid values: bottom, left, right, top
41
22
  * @member {String} dockedWindowSide_='right'
42
23
  */
43
24
  dockedWindowSide_: 'right',
44
- /**
45
- * @member {Number} dockedWindowSize=500
46
- */
47
- dockedWindowSize: 620,
48
- /**
49
- * @member {Object} dialogRect=null
50
- */
51
- dialogRect: null,
52
- /**
53
- * @member {Object} dragStartWindowRect=null
54
- */
55
- dragStartWindowRect: null,
56
- /**
57
- * @member {Number|null} targetWindowSize=0
58
- */
59
- targetWindowSize: 0
60
25
  }
61
26
 
62
27
  /**
63
- * The App worker will receive connect & disconnect events inside the SharedWorkers context
28
+ * @member {String[]} connectedApps=[]
64
29
  */
65
- onConstructed() {
66
- super.onConstructed();
67
-
68
- let me = this;
69
-
70
- Neo.currentWorker.on({
71
- connect : me.onAppConnect,
72
- disconnect: me.onAppDisconnect,
73
- scope : me
74
- })
75
- }
30
+ connectedApps = []
31
+ /**
32
+ * @member {String} currentTheme='neo-theme-light'
33
+ */
34
+ currentTheme = 'neo-theme-light'
35
+ /**
36
+ * @member {String} dockedWindowAppName='SharedDialog2'
37
+ */
38
+ dockedWindowAppName = 'SharedDialog2'
39
+ /**
40
+ * @member {Number|null} dockedWindowId=null
41
+ */
42
+ dockedWindowId = null
43
+ /**
44
+ * @member {Neo.component.Base|null} dockedWindowProxy=null
45
+ */
46
+ dockedWindowProxy = null
47
+ /**
48
+ * @member {Number} dockedWindowSize=500
49
+ */
50
+ dockedWindowSize = 620
51
+ /**
52
+ * @member {Object} dialogRect=null
53
+ */
54
+ dialogRect = null
55
+ /**
56
+ * @member {Object} dragStartWindowRect=null
57
+ */
58
+ dragStartWindowRect = null
59
+ /**
60
+ * @member {String|null} previousTheme=null
61
+ */
62
+ previousTheme = null
63
+ /**
64
+ * @member {Number|null} targetWindowSize=0
65
+ */
66
+ targetWindowSize = 0
76
67
 
77
68
  /**
78
69
  * Triggered after the dockedWindowSide config got changed
@@ -103,7 +94,9 @@ class MainContainerController extends ComponentController {
103
94
  animateTargetId : data.component.id,
104
95
  appName,
105
96
  boundaryContainerId: null,
106
- cls : [me.currentTheme, 'neo-dialog', 'neo-panel', 'neo-container'],
97
+ cls : [me.currentTheme],
98
+ height : 200,
99
+ width : 300,
107
100
  windowId,
108
101
 
109
102
  dragZoneConfig: {
@@ -126,7 +119,7 @@ class MainContainerController extends ComponentController {
126
119
 
127
120
  if (me.dockedWindowProxy) {
128
121
  me.dockedWindowProxy.destroy(true);
129
- me.dockedWindowProxy = null;
122
+ me.dockedWindowProxy = null
130
123
  }
131
124
  }
132
125
 
@@ -169,15 +162,15 @@ class MainContainerController extends ComponentController {
169
162
  } else { // drop the dialog fully into the dragEnd window
170
163
  me.mountDialogInOtherWindow({
171
164
  fullyIncludeIntoWindow: true,
172
- proxyRect : proxyRect
165
+ proxyRect
173
166
  })
174
167
  }
175
168
  }
176
169
 
177
170
  /**
178
- * @param {Boolean} enable
171
+ * @param {Boolean} enable=true
179
172
  */
180
- enableOpenDialogButtons(enable) {
173
+ enableOpenDialogButtons(enable=true) {
181
174
  this.getOpenDialogButtons().forEach(button => {
182
175
  button.disabled = !enable
183
176
  })
@@ -194,9 +187,7 @@ class MainContainerController extends ComponentController {
194
187
  *
195
188
  */
196
189
  getOpenDialogButtons() {
197
- return ComponentManager.find({
198
- flag: 'open-dialog-button'
199
- })
190
+ return ComponentManager.find({flag: 'open-dialog-button'})
200
191
  }
201
192
 
202
193
  /**
@@ -219,9 +210,8 @@ class MainContainerController extends ComponentController {
219
210
  * @return {{left: String, top: String}}
220
211
  */
221
212
  getProxyPosition(proxyRect, side, fullyIncludeIntoWindow=false) {
222
- let me = this,
223
- dragStartWindowRect = me.dragStartWindowRect,
224
- targetWindowSize = me.targetWindowSize,
213
+ let me = this,
214
+ {dragStartWindowRect, targetWindowSize} = me,
225
215
  left, top;
226
216
 
227
217
  switch(side) {
@@ -260,14 +250,16 @@ class MainContainerController extends ComponentController {
260
250
  */
261
251
  mountDialogInOtherWindow(data) {
262
252
  let me = this,
263
- appName = me.component.appName,
253
+ {appName, windowId} = me.component,
264
254
  dialog = me.dialog,
265
255
  dragEndWindowAppName = me.dockedWindowAppName,
256
+ dragEndWindowId = me.dockedWindowId,
266
257
  side = me.dockedWindowSide,
267
- proxyPosition, wrapperStyle;
258
+ needsSwitch, proxyPosition, wrapperStyle;
268
259
 
269
260
  if (dialog.appName === dragEndWindowAppName) {
270
- dragEndWindowAppName = me.component.appName;
261
+ dragEndWindowAppName = appName;
262
+ dragEndWindowId = windowId;
271
263
  side = me.getOppositeSide(me.dockedWindowSide)
272
264
  }
273
265
 
@@ -278,9 +270,10 @@ class MainContainerController extends ComponentController {
278
270
  // we need a delay to ensure dialog.Base: onDragEnd() is done.
279
271
  // we could use the dragEnd event of the dragZone instead.
280
272
  me.timeout(70).then(() => {
281
- dialog.appName = dialog.appName === dragEndWindowAppName ? appName : dragEndWindowAppName;
273
+ needsSwitch = dialog.appName === dragEndWindowAppName;
282
274
 
283
- // todo: windowI
275
+ dialog.appName = needsSwitch ? appName : dragEndWindowAppName;
276
+ dialog.windowId = needsSwitch ? windowId : dragEndWindowId;
284
277
 
285
278
  me.getOpenDialogButtons().forEach(button => {
286
279
  if (button.appName === dialog.appName) {
@@ -307,16 +300,16 @@ class MainContainerController extends ComponentController {
307
300
  * @param {Number} data.windowId
308
301
  */
309
302
  onAppConnect(data) {
310
- let me = this,
311
- name = data.appName;
303
+ let me = this,
304
+ {appName, windowId} = data;
312
305
 
313
- NeoArray.add(me.connectedApps, name);
306
+ NeoArray.add(me.connectedApps, appName);
314
307
 
315
- if (name !== 'SharedDialog' && me.currentTheme !== 'neo-theme-light') {
316
- me.switchThemeForApp(name, me.currentTheme)
308
+ if (appName !== 'SharedDialog' && me.currentTheme !== 'neo-theme-light') {
309
+ me.switchThemeForApp(windowId)
317
310
  }
318
311
 
319
- if (name === me.dockedWindowAppName) {
312
+ if (appName === me.dockedWindowAppName) {
320
313
  me.dockedWindowId = data.windowId;
321
314
  me.getOpenDockedWindowButton().disabled = true
322
315
  }
@@ -329,29 +322,46 @@ class MainContainerController extends ComponentController {
329
322
  * @param {String} data.appName
330
323
  */
331
324
  onAppDisconnect(data) {
332
- let me = this,
333
- name = data.appName;
325
+ let me = this,
326
+ {connectedApps, dialog, windowId} = me,
327
+ name = data.appName;
334
328
 
335
329
  if (name === 'SharedDialog') {
336
330
  // we want to close all popup windows, which equals to all connected apps minus the main app
337
- NeoArray.remove(me.connectedApps, 'SharedDialog');
331
+ NeoArray.remove(connectedApps, 'SharedDialog');
338
332
 
339
333
  Neo.Main.windowClose({
340
- names: me.connectedApps
334
+ names: connectedApps,
335
+ windowId
341
336
  })
342
- } else {
343
- NeoArray.remove(me.connectedApps, name);
337
+ } if (name === me.dockedWindowAppName) {
338
+ NeoArray.remove(connectedApps, name);
344
339
 
345
- Neo.main.addon.WindowPosition.unregisterWindow({
346
- name: name
347
- })
348
- }
340
+ Neo.main.addon.WindowPosition.unregisterWindow({name, windowId});
341
+
342
+ if (dialog && dialog.windowId !== windowId) {
343
+ me.enableOpenDialogButtons()
344
+ }
349
345
 
350
- if (name === me.dockedWindowAppName) {
351
346
  me.getOpenDockedWindowButton().disabled = false
352
347
  }
353
348
  }
354
349
 
350
+ /**
351
+ * The App worker will receive connect & disconnect events inside the SharedWorkers context
352
+ */
353
+ onConstructed() {
354
+ super.onConstructed();
355
+
356
+ let me = this;
357
+
358
+ Neo.currentWorker.on({
359
+ connect : me.onAppConnect,
360
+ disconnect: me.onAppDisconnect,
361
+ scope : me
362
+ })
363
+ }
364
+
355
365
  /**
356
366
  * @param {Object} data
357
367
  */
@@ -363,16 +373,15 @@ class MainContainerController extends ComponentController {
363
373
  *
364
374
  */
365
375
  onDialogClose() {
366
- this.enableOpenDialogButtons(true)
376
+ this.enableOpenDialogButtons(true);
377
+ this.dialog = null
367
378
  }
368
379
 
369
380
  /**
370
381
  * @param {Object} data
371
382
  */
372
383
  onDockedPositionChange(data) {
373
- if (data.value === true) {
374
- this.dockedWindowSide = data.component.value
375
- }
384
+ this.dockedWindowSide = data.value
376
385
  }
377
386
 
378
387
  /**
@@ -380,11 +389,10 @@ class MainContainerController extends ComponentController {
380
389
  */
381
390
  onDragEnd(data) {
382
391
  if (this.hasDockedWindow()) {
383
- let me = this,
384
- dialog = me.dialog,
385
- dragStartWindowRect = me.dragStartWindowRect,
386
- proxyRect = Rectangle.moveTo(me.dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
387
- side = me.dockedWindowSide;
392
+ let me = this,
393
+ {dialog, dragStartWindowRect} = me,
394
+ proxyRect = Rectangle.moveTo(me.dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
395
+ side = me.dockedWindowSide;
388
396
 
389
397
  if (dialog.appName === me.dockedWindowAppName) {
390
398
  side = me.getOppositeSide(me.dockedWindowSide)
@@ -392,7 +400,6 @@ class MainContainerController extends ComponentController {
392
400
 
393
401
  if (Rectangle.leavesSide(dragStartWindowRect, proxyRect, side)) {
394
402
  if (Rectangle.excludes(dragStartWindowRect, proxyRect)) {
395
- console.log('mountDialogInOtherWindow');
396
403
  me.mountDialogInOtherWindow({proxyRect})
397
404
  } else {
398
405
  me.dropDialogBetweenWindows(proxyRect)
@@ -407,7 +414,7 @@ class MainContainerController extends ComponentController {
407
414
  onDragMove(data) {
408
415
  if (this.hasDockedWindow()) {
409
416
  let me = this,
410
- {dialogRect, dragStartWindowRect, dockedWindowAppName, dockedWindowId} = me,
417
+ {dialogRect, dragStartWindowRect, dockedWindowAppName, dockedWindowId} = me,
411
418
  proxyRect = Rectangle.moveTo(dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
412
419
  side = me.dockedWindowSide,
413
420
  proxyPosition, vdom;
@@ -435,19 +442,20 @@ class MainContainerController extends ComponentController {
435
442
  });
436
443
 
437
444
  me.dockedWindowProxy = Neo.create({
438
- module : Component,
439
- appName : dockedWindowAppName,
440
- autoMount : true,
441
- autoRender: true,
442
- cls : ['neo-dialog', 'neo-dragproxy'],
443
- parentId : 'document.body',
444
- vdom : vdom,
445
- windowId : dockedWindowId
445
+ module : DragProxyComponent,
446
+ appName : dockedWindowAppName,
447
+ cls : ['neo-dialog', 'neo-panel', 'neo-container'],
448
+ moveInMainThread: false,
449
+ vdom : vdom,
450
+ windowId : dockedWindowId
446
451
  });
447
- console.log(me.windowId, dockedWindowId);
452
+
448
453
  // The other window has most likely not loaded The dialog JS module yet,
449
454
  // but the drag proxy is using some CSS rules of it.
455
+ // todo: a new helper method to parse an existing instance based on its cmp tree for theme files
450
456
  Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.dialog.Base.prototype);
457
+ Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.form.field.Text.prototype);
458
+ Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.form.field.trigger.Clear.prototype);
451
459
  Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.draggable.DragProxyComponent.prototype)
452
460
  } else {
453
461
  me.updateDockedWindowProxyStyle({
@@ -467,7 +475,7 @@ console.log(me.windowId, dockedWindowId);
467
475
  onDragStart(data) {
468
476
  if (this.hasDockedWindow()) {
469
477
  let me = this,
470
- appName = me.component.appName,
478
+ {appName} = me.component,
471
479
  dockedHorizontal = me.dockedWindowSide === 'left' || me.dockedWindowSide === 'right';
472
480
 
473
481
  me.dialogRect = data.dragElementRect;
@@ -508,35 +516,37 @@ console.log(me.windowId, dockedWindowId);
508
516
  * @param {Object} handlerData
509
517
  */
510
518
  openDockedWindow(handlerData) {
511
- Neo.Main.getWindowData().then(data => {
519
+ let {windowId} = this;
520
+
521
+ Neo.Main.getWindowData({windowId}).then(data => {
512
522
  let me = this,
513
523
  dock = me.dockedWindowSide,
514
524
  size = me.dockedWindowSize,
515
525
  height, left, top, width;
516
526
 
517
- switch (dock) {
527
+ switch(dock) {
518
528
  case 'bottom':
519
529
  height = size;
520
530
  left = data.screenLeft;
521
- top = data.outerHeight + data.screenTop - 52;
531
+ top = data.outerHeight + data.screenTop - 62;
522
532
  width = data.outerWidth;
523
533
  break
524
534
  case 'left':
525
- height = data.outerHeight - 78;
535
+ height = data.outerHeight - 86;
526
536
  left = data.screenLeft - size;
527
- top = data.screenTop + 28;
537
+ top = data.screenTop + 24;
528
538
  width = size;
529
539
  break
530
540
  case 'right':
531
- height = data.outerHeight - 78;
541
+ height = data.outerHeight - 86;
532
542
  left = data.outerWidth + data.screenLeft;
533
- top = data.screenTop + 28;
543
+ top = data.screenTop + 24;
534
544
  width = size;
535
545
  break
536
546
  case 'top':
537
547
  height = size;
538
548
  left = data.screenLeft;
539
- top = data.screenTop - size + 28;
549
+ top = data.screenTop - size + 24;
540
550
  width = data.outerWidth;
541
551
  break
542
552
  }
@@ -544,13 +554,15 @@ console.log(me.windowId, dockedWindowId);
544
554
  Neo.Main.windowOpen({
545
555
  url : 'childapps/shareddialog2/index.html',
546
556
  windowFeatures: `height=${height},left=${left},top=${top},width=${width}`,
557
+ windowId,
547
558
  windowName : me.dockedWindowAppName
548
559
  });
549
560
 
550
561
  Neo.main.addon.WindowPosition.registerWindow({
551
- dock: dock,
562
+ dock,
552
563
  name: me.dockedWindowAppName,
553
- size: size
564
+ size,
565
+ windowId
554
566
  })
555
567
  })
556
568
  }
@@ -574,35 +586,34 @@ console.log(me.windowId, dockedWindowId);
574
586
  theme = 'neo-theme-light';
575
587
  }
576
588
 
589
+ me.previousTheme = me.currentTheme;
590
+ me.currentTheme = theme;
591
+
577
592
  me.connectedApps.forEach(appName => {
578
- me.switchThemeForApp(appName, theme)
593
+ me.switchThemeForApp(Neo.apps[appName].windowId)
579
594
  });
580
595
 
581
- button.set({
582
- iconCls: iconCls,
583
- text : buttonText
584
- });
596
+ button.set({iconCls, text: buttonText});
585
597
 
586
598
  if (dialog) {
587
599
  cls = dialog.cls;
588
600
 
589
- NeoArray.removeAdd(cls, me.currentTheme, theme);
601
+ NeoArray.removeAdd(cls, me.previousTheme, me.currentTheme);
590
602
 
591
603
  dialog.cls = cls
592
604
  }
593
-
594
- me.currentTheme = theme
595
605
  }
596
606
 
597
607
  /**
598
- * @param {String} appName
599
- * @param {String} theme
608
+ * @param {Number} windowId
600
609
  */
601
- switchThemeForApp(appName, theme) {
610
+ switchThemeForApp(windowId) {
611
+ let {currentTheme, previousTheme} = this;
612
+
602
613
  Neo.main.DomAccess.setBodyCls({
603
- appName: appName,
604
- add : [theme],
605
- remove : [this.currentTheme]
614
+ add : [currentTheme],
615
+ remove : previousTheme ? [previousTheme]: [],
616
+ windowId
606
617
  })
607
618
  }
608
619
 
@@ -4,10 +4,10 @@
4
4
  "Covid",
5
5
  "Docs",
6
6
  "Form",
7
- "Krausest",
8
7
  "Portal",
9
8
  "RealWorld",
10
9
  "RealWorld2",
10
+ "Route",
11
11
  "SharedCovid",
12
12
  "SharedDialog"
13
13
  ]
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='7.6.0'
23
+ * @member {String} version='7.8.0'
24
24
  */
25
- version: '7.6.0'
25
+ version: '7.8.0'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "7.6.0",
3
+ "version": "7.8.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -54,13 +54,13 @@
54
54
  "envinfo": "^7.14.0",
55
55
  "fs-extra": "^11.2.0",
56
56
  "highlightjs-line-numbers.js": "^2.8.0",
57
- "inquirer": "^10.2.2",
57
+ "inquirer": "^11.0.2",
58
58
  "marked": "^14.1.2",
59
59
  "monaco-editor": "0.50.0",
60
60
  "neo-jsdoc": "1.0.1",
61
61
  "neo-jsdoc-x": "1.0.5",
62
62
  "postcss": "^8.4.47",
63
- "sass": "^1.78.0",
63
+ "sass": "^1.79.3",
64
64
  "siesta-lite": "5.5.2",
65
65
  "url": "^0.11.4",
66
66
  "webpack": "^5.94.0",
@@ -3,7 +3,7 @@ Welcome to Neo.mjs! This set of topics contains information to help you use Neo.
3
3
 
4
4
  ## Topics
5
5
 
6
- ### Why Neo?
6
+ ### Benefits
7
7
 
8
8
  Describes technical and business reasons for using Neo.mjs
9
9