neo.mjs 6.20.1 → 6.22.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 (151) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/colors/view/HeaderToolbar.mjs +7 -3
  3. package/apps/covid/view/MainContainerController.mjs +6 -6
  4. package/apps/covid/view/TableContainer.mjs +5 -3
  5. package/apps/covid/view/country/Gallery.mjs +6 -4
  6. package/apps/form/view/ViewportModel.mjs +2 -2
  7. package/apps/portal/index.html +23 -1
  8. package/apps/portal/view/HeaderToolbar.mjs +2 -2
  9. package/apps/portal/view/Viewport.mjs +3 -1
  10. package/apps/portal/view/ViewportController.mjs +10 -0
  11. package/apps/portal/view/about/Container.mjs +44 -0
  12. package/apps/portal/view/about/MemberContainer.mjs +191 -0
  13. package/apps/portal/view/home/MainContainer.mjs +9 -2
  14. package/apps/portal/view/home/parts/AfterMath.mjs +12 -8
  15. package/apps/portal/view/home/parts/Colors.mjs +8 -2
  16. package/apps/portal/view/home/parts/Features.mjs +50 -83
  17. package/apps/portal/view/home/parts/Helix.mjs +8 -2
  18. package/apps/portal/view/home/parts/MainNeo.mjs +17 -5
  19. package/apps/portal/view/learn/ContentView.mjs +18 -4
  20. package/apps/realworld/api/Base.mjs +5 -5
  21. package/apps/realworld/view/MainContainerController.mjs +19 -17
  22. package/apps/realworld2/api/Base.mjs +5 -5
  23. package/apps/realworld2/view/MainContainerController.mjs +11 -11
  24. package/apps/realworld2/view/article/Gallery.mjs +6 -4
  25. package/apps/sharedcovid/view/MainContainerController.mjs +11 -12
  26. package/apps/sharedcovid/view/TableContainer.mjs +7 -5
  27. package/apps/sharedcovid/view/country/Gallery.mjs +6 -4
  28. package/apps/shareddialog/view/MainContainerController.mjs +5 -5
  29. package/buildScripts/webpack/json/myApps.template.json +1 -2
  30. package/docs/app/view/classdetails/MembersList.mjs +8 -8
  31. package/docs/app/view/classdetails/SourceViewComponent.mjs +6 -6
  32. package/docs/app/view/classdetails/TutorialComponent.mjs +9 -9
  33. package/examples/ServiceWorker.mjs +2 -2
  34. package/examples/component/coronaGallery/CountryGallery.mjs +6 -4
  35. package/examples/component/helix/Viewport.mjs +2 -2
  36. package/examples/list/circle/MainContainer.mjs +7 -7
  37. package/examples/preloadingAssets/view/MainContainerController.mjs +5 -5
  38. package/package.json +5 -5
  39. package/resources/data/deck/learnneo/pages/GuideEvents.md +2 -4
  40. package/resources/data/deck/learnneo/pages/WhyNeo-Features.md +46 -0
  41. package/resources/data/deck/learnneo/pages/WhyNeo-Intro.md +5 -6
  42. package/resources/data/deck/learnneo/pages/WhyNeo-Multi-Window.md +1 -1
  43. package/resources/data/deck/learnneo/tree.json +3 -2
  44. package/resources/fonts/GT-Planar-Regular.otf +0 -0
  45. package/resources/images/logo/neo_logo_favicon.svg +16 -0
  46. package/resources/images/team/tobiu.png +0 -0
  47. package/resources/scss/src/apps/colors/HeaderToolbar.scss +23 -1
  48. package/resources/scss/src/apps/colors/Viewport.scss +10 -0
  49. package/resources/scss/src/apps/portal/HeaderToolbar.scss +7 -7
  50. package/resources/scss/src/apps/portal/Viewport.scss +10 -0
  51. package/resources/scss/src/apps/portal/about/Container.scss +4 -0
  52. package/resources/scss/src/apps/portal/about/MemberContainer.scss +70 -0
  53. package/resources/scss/src/apps/portal/home/FooterContainer.scss +12 -0
  54. package/resources/scss/src/apps/portal/home/parts/BaseContainer.scss +16 -16
  55. package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +62 -7
  56. package/resources/scss/src/apps/portal/learn/ContentView.scss +1 -0
  57. package/resources/scss/src/apps/portal/learn/PageContainer.scss +6 -0
  58. package/resources/scss/src/code/LivePreview.scss +4 -1
  59. package/resources/scss/src/layout/Cube.scss +3 -3
  60. package/resources/scss/src/plugin/Resizable.scss +12 -19
  61. package/resources/scss/theme-neo-light/dialog/Base.scss +12 -2
  62. package/src/DefaultConfig.mjs +2 -2
  63. package/src/calendar/view/MainContainer.mjs +10 -10
  64. package/src/calendar/view/SettingsContainer.mjs +10 -10
  65. package/src/calendar/view/YearComponent.mjs +2 -2
  66. package/src/calendar/view/calendars/List.mjs +2 -2
  67. package/src/calendar/view/month/Component.mjs +4 -4
  68. package/src/calendar/view/week/Component.mjs +2 -2
  69. package/src/calendar/view/week/plugin/DragDrop.mjs +4 -4
  70. package/src/code/LivePreview.mjs +92 -6
  71. package/src/component/Base.mjs +3 -3
  72. package/src/component/Circle.mjs +5 -5
  73. package/src/component/DateSelector.mjs +4 -4
  74. package/src/component/Gallery.mjs +8 -8
  75. package/src/component/Helix.mjs +15 -12
  76. package/src/component/Toast.mjs +1 -1
  77. package/src/component/wrapper/AmChart.mjs +2 -2
  78. package/src/component/wrapper/CesiumJS.mjs +2 -2
  79. package/src/component/wrapper/GoogleMaps.mjs +2 -2
  80. package/src/component/wrapper/MonacoEditor.mjs +3 -3
  81. package/src/core/Observable.mjs +2 -2
  82. package/src/data/Store.mjs +2 -2
  83. package/src/dialog/Base.mjs +44 -14
  84. package/src/draggable/DragZone.mjs +4 -4
  85. package/src/draggable/list/DragZone.mjs +4 -4
  86. package/src/draggable/tab/header/toolbar/SortZone.mjs +2 -2
  87. package/src/draggable/toolbar/DragZone.mjs +4 -4
  88. package/src/draggable/toolbar/SortZone.mjs +3 -3
  89. package/src/form/field/ComboBox.mjs +3 -2
  90. package/src/form/field/FileUpload.mjs +3 -3
  91. package/src/form/field/Text.mjs +2 -2
  92. package/src/form/field/TextArea.mjs +2 -2
  93. package/src/grid/Container.mjs +2 -2
  94. package/src/layout/Cube.mjs +1 -3
  95. package/src/list/plugin/Animate.mjs +23 -23
  96. package/src/main/DomAccess.mjs +1 -1
  97. package/src/main/DomEvents.mjs +14 -5
  98. package/src/main/addon/AmCharts.mjs +2 -2
  99. package/src/main/addon/MapboxGL.mjs +4 -4
  100. package/src/manager/DomEvent.mjs +2 -2
  101. package/src/manager/Focus.mjs +2 -2
  102. package/src/manager/Toast.mjs +6 -4
  103. package/src/manager/rpc/Message.mjs +2 -2
  104. package/src/plugin/Resizable.mjs +11 -3
  105. package/src/selection/HelixModel.mjs +3 -3
  106. package/src/tab/Strip.mjs +4 -4
  107. package/src/table/Container.mjs +4 -4
  108. package/src/util/Logger.mjs +6 -4
  109. package/src/worker/App.mjs +2 -2
  110. package/src/worker/Manager.mjs +3 -2
  111. package/apps/website/Overwrites.mjs +0 -16
  112. package/apps/website/app.mjs +0 -7
  113. package/apps/website/data/blog.json +0 -769
  114. package/apps/website/data/docs.json +0 -29
  115. package/apps/website/data/examples_devmode.json +0 -173
  116. package/apps/website/data/examples_dist_dev.json +0 -164
  117. package/apps/website/data/examples_dist_prod.json +0 -164
  118. package/apps/website/index.html +0 -11
  119. package/apps/website/model/BlogPost.mjs +0 -60
  120. package/apps/website/model/Example.mjs +0 -48
  121. package/apps/website/neo-config.json +0 -7
  122. package/apps/website/store/BlogPosts.mjs +0 -39
  123. package/apps/website/store/Examples.mjs +0 -35
  124. package/apps/website/view/HeaderContainer.mjs +0 -72
  125. package/apps/website/view/MainContainer.mjs +0 -95
  126. package/apps/website/view/MainContainerController.mjs +0 -230
  127. package/apps/website/view/blog/Container.mjs +0 -50
  128. package/apps/website/view/blog/List.mjs +0 -171
  129. package/apps/website/view/examples/List.mjs +0 -124
  130. package/apps/website/view/examples/TabContainer.mjs +0 -66
  131. package/apps/website/view/home/DeveloperIntroComponent.mjs +0 -266
  132. package/apps/website/view/home/ExecutiveIntroComponent.mjs +0 -291
  133. package/apps/website/view/home/TabContainer.mjs +0 -56
  134. package/resources/scss/src/apps/website/HeaderContainer.scss +0 -136
  135. package/resources/scss/src/apps/website/MainContainer.scss +0 -25
  136. package/resources/scss/src/apps/website/blog/Container.scss +0 -18
  137. package/resources/scss/src/apps/website/blog/List.scss +0 -183
  138. package/resources/scss/src/apps/website/examples/List.scss +0 -157
  139. package/resources/scss/src/apps/website/home/TabContainer.scss +0 -117
  140. package/resources/scss/theme-dark/apps/website/HeaderContainer.scss +0 -5
  141. package/resources/scss/theme-dark/apps/website/MainContainer.scss +0 -4
  142. package/resources/scss/theme-dark/apps/website/blog/Container.scss +0 -3
  143. package/resources/scss/theme-dark/apps/website/home/TabContainer.scss +0 -4
  144. package/resources/scss/theme-light/apps/website/HeaderContainer.scss +0 -5
  145. package/resources/scss/theme-light/apps/website/MainContainer.scss +0 -4
  146. package/resources/scss/theme-light/apps/website/blog/Container.scss +0 -3
  147. package/resources/scss/theme-light/apps/website/home/TabContainer.scss +0 -4
  148. package/resources/scss/theme-neo-light/apps/website/HeaderContainer.scss +0 -5
  149. package/resources/scss/theme-neo-light/apps/website/MainContainer.scss +0 -4
  150. package/resources/scss/theme-neo-light/apps/website/blog/Container.scss +0 -3
  151. package/resources/scss/theme-neo-light/apps/website/home/TabContainer.scss +0 -4
@@ -8,6 +8,12 @@
8
8
  margin-top : 3rem;
9
9
  padding : 0 3rem;
10
10
 
11
+ @media (max-width: 600px) {
12
+ margin-bottom: 1rem;
13
+ margin-top : 1rem;
14
+ padding : 0 1rem;
15
+ }
16
+
11
17
  .neo-button {
12
18
  flex : 1 !important;
13
19
  height : 75px;
@@ -1,5 +1,8 @@
1
1
  .neo-code-live-preview {
2
- margin-bottom: 2em;
2
+ margin-bottom : 2em;
3
+ transition-duration : .3s;
4
+ transition-property : height, left, top, width;
5
+ transition-timing-function: ease-out;
3
6
 
4
7
  .live-preview-container {
5
8
  border-radius: calc(var(--cmp-tab-strip-height) + var(--cmp-button-borderradius));
@@ -18,9 +18,9 @@
18
18
  --rot-y: 0deg;
19
19
  --rot-z: 0deg;
20
20
 
21
- --side-x: 300px;
22
- --side-y: 300px;
23
- --side-z: 300px;
21
+ --side-x: 0;
22
+ --side-y: 0;
23
+ --side-z: 0;
24
24
 
25
25
  background-color : transparent;
26
26
  height : var(--side-y);
@@ -1,7 +1,3 @@
1
- // font awesome does not have grip handles for corners.
2
- // using the th icon with a clip-path.
3
- // similar to: https://github.com/FortAwesome/Font-Awesome/issues/645#issuecomment-361663544
4
-
5
1
  .neo-resizable {
6
2
  align-items : center;
7
3
  color : #bbb;
@@ -42,13 +38,12 @@
42
38
  cursor: sw-resize;
43
39
  left : 0;
44
40
  height: 1em;
45
- width : 1.05em;
41
+ width : 1em;
46
42
 
47
43
  &::after {
48
- clip-path: polygon(100% 0,70% 0,70% 35%,35% 35%,35% 66%,0 66%,0 100%,100% 100%);
49
- content : "\f00a";
44
+ content : "\f101";
50
45
  font-size: 1em;
51
- transform: rotate(90deg);
46
+ transform: rotate(135deg);
52
47
  }
53
48
  }
54
49
 
@@ -57,12 +52,12 @@
57
52
  cursor: se-resize;
58
53
  right : 0;
59
54
  height: 1em;
60
- width : 1.05em;
55
+ width : 1em;
61
56
 
62
57
  &::after {
63
- clip-path: polygon(100% 0,70% 0,70% 35%,35% 35%,35% 66%,0 66%,0 100%,100% 100%);
64
- content : "\f00a";
58
+ content : "\f101";
65
59
  font-size: 1em;
60
+ transform: rotate(45deg);
66
61
  }
67
62
  }
68
63
 
@@ -86,13 +81,12 @@
86
81
  left : 0;
87
82
  top : 0;
88
83
  height: 1em;
89
- width : 1.05em;
84
+ width : 1em;
90
85
 
91
86
  &::after {
92
- clip-path: polygon(100% 0,70% 0,70% 35%,35% 35%,35% 66%,0 66%,0 100%,100% 100%);
93
- content : "\f00a";
87
+ content : "\f101";
94
88
  font-size: 1em;
95
- transform: rotate(180deg);
89
+ transform: rotate(-135deg);
96
90
  }
97
91
  }
98
92
 
@@ -101,13 +95,12 @@
101
95
  right : 0;
102
96
  top : 0;
103
97
  height: 1em;
104
- width : 1.05em;
98
+ width : 1em;
105
99
 
106
100
  &::after {
107
- clip-path: polygon(100% 0,70% 0,70% 35%,35% 35%,35% 66%,0 66%,0 100%,100% 100%);
108
- content : "\f00a";
101
+ content : "\f101";
109
102
  font-size: 1em;
110
- transform: rotate(270deg);
103
+ transform: rotate(-45deg);
111
104
  }
112
105
  }
113
106
  }
@@ -1,6 +1,16 @@
1
1
  :root .neo-theme-neo-light { // .neo-dialog
2
2
  --dialog-border-color: #ddd;
3
3
  --dialog-box-shadow : 0 5px 10px rgba(0,0,0,.4);
4
- --dialog-header-color: #1c60a0;
5
- --dialog-icon-color : #1c60a0;
4
+ --dialog-header-color: var(--purple-500);
5
+ --dialog-icon-color : var(--purple-500);
6
+
7
+ .neo-dialog {
8
+ .neo-header-toolbar {
9
+ .neo-button {
10
+ background-color: transparent;
11
+ height : unset;
12
+ min-width : unset;
13
+ }
14
+ }
15
+ }
6
16
  }
@@ -260,12 +260,12 @@ const DefaultConfig = {
260
260
  useVdomWorker: true,
261
261
  /**
262
262
  * buildScripts/injectPackageVersion.mjs will update this value
263
- * @default '6.20.1'
263
+ * @default '6.22.0'
264
264
  * @memberOf! module:Neo
265
265
  * @name config.version
266
266
  * @type String
267
267
  */
268
- version: '6.20.1'
268
+ version: '6.22.0'
269
269
  };
270
270
 
271
271
  Object.assign(DefaultConfig, {
@@ -235,9 +235,9 @@ class MainContainer extends Container {
235
235
  } else {
236
236
  me.createSettingsContainer(true).then(() => {
237
237
  // short delay to ensure the vnode already exists
238
- setTimeout(() => {
238
+ me.timeout(50).then(() => {
239
239
  me.items[1].items[2].expand()
240
- }, 50)
240
+ })
241
241
  })
242
242
  }
243
243
  } else {
@@ -264,10 +264,10 @@ class MainContainer extends Container {
264
264
  me.promiseUpdate().then(() => {
265
265
  sideBar.mounted = true;
266
266
 
267
- setTimeout(() => {
267
+ me.timeout(50).then(() => {
268
268
  style.marginLeft = '0px';
269
- sideBar.style = style;
270
- }, 50)
269
+ sideBar.style = style
270
+ })
271
271
  })
272
272
  } else {
273
273
  style.marginLeft = `-${me.sideBarWidth}px`;
@@ -275,13 +275,13 @@ class MainContainer extends Container {
275
275
  sideBar._vdom.style = style; // silent update
276
276
 
277
277
  me.promiseUpdate().then(() => {
278
- setTimeout(() => {
278
+ me.timeout(400).then(() => {
279
279
  sideBar.vdom.removeDom = true;
280
280
  sideBar.update();
281
281
 
282
282
  sideBar.mounted = false
283
- }, 400)
284
- });
283
+ })
284
+ })
285
285
  }
286
286
  }
287
287
  }
@@ -299,13 +299,13 @@ class MainContainer extends Container {
299
299
  me.settingsExpanded && me.createSettingsContainer(false);
300
300
 
301
301
  // we need a short delay to ensure the items already got created
302
- setTimeout(() => {
302
+ me.timeout(10).then(() => {
303
303
  me.items[0].items[1].add({
304
304
  handler: me.toggleSettings.bind(me),
305
305
  iconCls: 'fa fa-cog',
306
306
  style : {marginLeft: '10px'}
307
307
  })
308
- }, 10)
308
+ })
309
309
  } else if (!value && oldValue) {
310
310
  // we only need this logic in case we dynamically change the config from true to false
311
311
  me.items[1] .removeLast();
@@ -54,18 +54,18 @@ class SettingsContainer extends Container {
54
54
  style = me.style || {};
55
55
 
56
56
  style.marginRight = `-${width}px`;
57
- me._style = style; // silent update
58
- me._vdom.style = style; // silent update
57
+ me._style = style; // silent update
58
+ me._vdom.style = style; // silent update
59
59
 
60
60
  me.parent.promiseUpdate().then(() => {
61
- setTimeout(() => {
61
+ me.timeout(400).then(() => {
62
62
  me.collapsed = true;
63
63
 
64
64
  me.vdom.removeDom = true;
65
65
  me.update();
66
66
 
67
- me.mounted = false;
68
- }, 400)
67
+ me.mounted = false
68
+ })
69
69
  })
70
70
  }
71
71
 
@@ -149,11 +149,11 @@ class SettingsContainer extends Container {
149
149
  me.collapsed = false;
150
150
  me.mounted = true;
151
151
 
152
- setTimeout(() => {
152
+ me.timeout(50).then(() => {
153
153
  style = me.style || {}
154
154
  style.marginRight = '0px';
155
- me.style = style;
156
- }, 50)
155
+ me.style = style
156
+ })
157
157
  })
158
158
  }
159
159
 
@@ -178,10 +178,10 @@ class SettingsContainer extends Container {
178
178
  if (Neo.typeOf(mainContainer[`${container.flag}Component`]) !== 'NeoInstance') {
179
179
  listenerId = mainContainer.on('cardLoaded', () => {
180
180
  mainContainer.un('cardLoaded', listenerId);
181
- setTimeout(() => {container.createContent();}, 30)
181
+ me.timeout(30).then(() => {container.createContent()})
182
182
  })
183
183
  } else {
184
- setTimeout(() => {container.createContent();}, 30)
184
+ me.timeout(30).then(() => {container.createContent()})
185
185
  }
186
186
  }
187
187
 
@@ -517,10 +517,10 @@ class YearComponent extends Component {
517
517
  vdom.cn[0].cn[0].style.transform = `translateY(${y}px)`;
518
518
  me.update();
519
519
 
520
- setTimeout(() => {
520
+ me.timeout(300).then(() => {
521
521
  vdom.cn[0] = vdom.cn[0].cn[0].cn[scrollFromTop ? 1 : 0];
522
522
  me.triggerVdomUpdate()
523
- }, 300)
523
+ })
524
524
  })
525
525
  })
526
526
  }
@@ -97,9 +97,9 @@ class List extends ComponentList {
97
97
  onClick(data) {
98
98
  // The click even arrives before the CheckBox onInputValueChange() gets triggered.
99
99
  // We need a short delay to ensure the vdom of the list item contains the new checked state
100
- setTimeout(() => {
100
+ this.timeout(20).then(() => {
101
101
  super.onClick(data)
102
- }, 20);
102
+ });
103
103
 
104
104
  if (data.path[0].cls.includes('neo-edit-icon')) {
105
105
  let me = this,
@@ -309,10 +309,10 @@ class Component extends BaseComponent {
309
309
  if (value) {
310
310
  if (me.needsEventUpdate) {
311
311
  me.createContent();
312
- me.needsEventUpdate = false;
312
+ me.needsEventUpdate = false
313
313
  }
314
314
 
315
- setTimeout(() => {
315
+ me.timeout(100).then(() => {
316
316
  me.getDomRect([me.vdom.cn[1].id, me.vdom.cn[0].id]).then(data => {
317
317
  me.headerHeight = data[1].height;
318
318
 
@@ -320,9 +320,9 @@ class Component extends BaseComponent {
320
320
  direction: 'top',
321
321
  id : me.vdom.cn[1].id,
322
322
  value : data[0].height - data[1].height
323
- });
323
+ })
324
324
  })
325
- }, 100)
325
+ })
326
326
  }
327
327
  }
328
328
 
@@ -769,7 +769,7 @@ class Component extends BaseComponent {
769
769
 
770
770
  // we need a short delay to move the event rendering into the next animation frame.
771
771
  // Details: https://github.com/neomjs/neo/issues/2216
772
- setTimeout(() => {me.updateEvents(false, columnsBuffer + columnsVisible, me.totalColumns)}, 50);
772
+ me.timeout(50).then(() => {me.updateEvents(false, columnsBuffer + columnsVisible, me.totalColumns)});
773
773
 
774
774
  scrollValue = -width
775
775
  }
@@ -793,7 +793,7 @@ class Component extends BaseComponent {
793
793
 
794
794
  // we need a short delay to move the event rendering into the next animation frame.
795
795
  // Details: https://github.com/neomjs/neo/issues/2216
796
- setTimeout(() => {me.updateEvents(false, 0, columnsBuffer)}, 50);
796
+ me.timeout(50).then(() => {me.updateEvents(false, 0, columnsBuffer)});
797
797
 
798
798
  scrollValue = width
799
799
  }
@@ -213,7 +213,7 @@ class DragDrop extends Base {
213
213
  me[newRecordSymbol] = record;
214
214
 
215
215
  // wait until the new event got mounted
216
- setTimeout(() => {
216
+ me.timeout(50).then(() => {
217
217
  eventId = owner.getEventId(record.id);
218
218
  dragElement = VDomUtil.findVdomChild(owner.vdom, eventId).vdom;
219
219
 
@@ -227,13 +227,13 @@ class DragDrop extends Base {
227
227
  owner.getPlugin(me.resizablePluginType).onDragStart(data);
228
228
  eventDragZone.dragStart(data);
229
229
 
230
- setTimeout(() => {
230
+ me.timeout(50).then(() => {
231
231
  me.isDragging && Neo.applyDeltas(me.appName, {
232
232
  id : eventId,
233
233
  style: {opacity: 0}
234
234
  })
235
- }, 50)
236
- }, 50)
235
+ })
236
+ })
237
237
  }
238
238
  }
239
239
 
@@ -44,6 +44,10 @@ class LivePreview extends Container {
44
44
  * @member {Boolean} disableRunSource=false
45
45
  */
46
46
  disableRunSource: false,
47
+ /**
48
+ * @member {Boolean} enableFullscreen=true
49
+ */
50
+ enableFullscreen: true,
47
51
  /**
48
52
  * @member {Number} height=400
49
53
  */
@@ -127,6 +131,71 @@ class LivePreview extends Container {
127
131
  return this.beforeSetEnumValue(value, oldValue, 'activeView')
128
132
  }
129
133
 
134
+ /**
135
+ * @param {Object} data
136
+ */
137
+ async collapseExpand(data) {
138
+ let me = this,
139
+ button = data.component,
140
+ collapse = button.iconCls === 'fas fa-compress',
141
+ {vdom} = me,
142
+ rect;
143
+
144
+ if (collapse) {
145
+ button.iconCls = 'fas fa-expand';
146
+
147
+ rect = me.collapseRect;
148
+
149
+ delete me.collapseRect;
150
+
151
+ Object.assign(vdom.style, {
152
+ height : rect.height + 'px',
153
+ left : rect.x + 'px',
154
+ top : rect.y + 'px',
155
+ width : rect.width + 'px'
156
+ });
157
+
158
+ me.update();
159
+
160
+ await me.timeout(300);
161
+
162
+ Object.assign(vdom.style, {
163
+ position: null,
164
+ zIndex : null
165
+ })
166
+ } else {
167
+ button.iconCls = 'fas fa-compress';
168
+
169
+ rect = await me.getDomRect();
170
+
171
+ me.collapseRect = rect;
172
+
173
+ vdom.style = vdom.style || {};
174
+
175
+ Object.assign(vdom.style, {
176
+ height : rect.height + 'px',
177
+ left : rect.x + 'px',
178
+ position: 'fixed',
179
+ top : rect.y + 'px',
180
+ width : rect.width + 'px',
181
+ zIndex : 100
182
+ });
183
+
184
+ me.update();
185
+
186
+ await me.timeout(50);
187
+
188
+ Object.assign(vdom.style, {
189
+ height: '100%',
190
+ left : 0,
191
+ top : 0,
192
+ width : '100%'
193
+ })
194
+ }
195
+
196
+ me.update()
197
+ }
198
+
130
199
  /**
131
200
  *
132
201
  */
@@ -269,12 +338,15 @@ class LivePreview extends Container {
269
338
  * @param {Number} data.value
270
339
  */
271
340
  onActiveIndexChange(data) {
341
+ let me = this,
342
+ hidden = data.value !== 1;
343
+
272
344
  if (data.item.reference === 'preview') {
273
- this.doRunSource()
345
+ me.doRunSource()
274
346
  }
275
347
 
276
- this.getReference('popout-window-button').hidden = data.value !== 1
277
- this.disableRunSource = false;
348
+ me.getReference('popout-window-button').hidden = hidden
349
+ me.disableRunSource = false;
278
350
  }
279
351
 
280
352
  /**
@@ -284,18 +356,32 @@ class LivePreview extends Container {
284
356
  super.onConstructed();
285
357
 
286
358
  let me = this,
359
+ items = [],
287
360
  {tabContainer} = me;
288
361
 
289
- // we want to add a normal (non-header) button
290
- tabContainer.getTabBar().add({
362
+ if (me.enableFullscreen) {
363
+ items.push({
364
+ handler: me.collapseExpand.bind(me),
365
+ iconCls: 'fas fa-expand',
366
+ ui : 'ghost'
367
+ })
368
+ }
369
+
370
+ items.push({
291
371
  handler : me.popoutPreview.bind(me),
292
372
  hidden : tabContainer.activeIndex !== 1,
293
373
  iconCls : 'far fa-window-maximize',
294
374
  reference: 'popout-window-button',
295
- style : {marginLeft: 'auto'},
296
375
  ui : 'ghost'
297
376
  });
298
377
 
378
+ items[0].style = {marginLeft: 'auto'};
379
+
380
+ // we want to add a normal (non-header) button
381
+ tabContainer.getTabBar().add(items);
382
+
383
+ tabContainer.getTabBar().update();
384
+
299
385
  tabContainer.on('activeIndexChange', me.onActiveIndexChange, me);
300
386
 
301
387
  // changing the activeView initially will not trigger our onActiveIndexChange() logic
@@ -816,9 +816,9 @@ class Base extends CoreBase {
816
816
 
817
817
  if (me.domListeners?.length > 0) {
818
818
  // todo: the main thread reply of mount arrives after pushing the task into the queue which does not ensure the dom is mounted
819
- setTimeout(() => {
819
+ me.timeout(150).then(() => {
820
820
  DomEventManager.mountDomListeners(me)
821
- }, 150)
821
+ })
822
822
  }
823
823
 
824
824
  me.doResolveUpdateCache();
@@ -1798,7 +1798,7 @@ class Base extends CoreBase {
1798
1798
  }
1799
1799
 
1800
1800
  if (timeout) {
1801
- setTimeout(removeFn, timeout)
1801
+ me.timeout(timeout).then(removeFn)
1802
1802
  } else {
1803
1803
  removeFn()
1804
1804
  }
@@ -244,10 +244,10 @@ class Circle extends Component {
244
244
  } else {
245
245
  me.updateItemOpacity(0, true, value);
246
246
 
247
- setTimeout(() => {
247
+ me.timeout(300).then(() => {
248
248
  frontEl.cn.splice(value + 2);
249
249
  me.update()
250
- }, 300);
250
+ })
251
251
  }
252
252
 
253
253
  me.updateItemPositions(true);
@@ -596,13 +596,13 @@ class Circle extends Component {
596
596
  }).then(data => {
597
597
  me.store.items = data.json.data;
598
598
 
599
- setTimeout(() => {
599
+ me.timeout(100).then(() => {
600
600
  me.updateTitle();
601
601
  me.createItems()
602
- }, 100)
602
+ })
603
603
  }).catch(err => {
604
604
  console.log('Error for Neo.Xhr.request', err, me.id)
605
- });
605
+ })
606
606
  }
607
607
 
608
608
  /**
@@ -454,11 +454,11 @@ class DateSelector extends Component {
454
454
  me.updateHeaderMonthTransitionCallback(headerMonthOpts);
455
455
  me.update();
456
456
 
457
- setTimeout(() => {
457
+ me.timeout(300).then(() => {
458
458
  me.changeMonthWrapperCallback(slideDirection);
459
459
  me.updateHeaderMonthWrapperCallback(headerMonthOpts);
460
460
  me.triggerVdomUpdate()
461
- }, 300)
461
+ })
462
462
  })
463
463
  })
464
464
  } else {
@@ -538,10 +538,10 @@ class DateSelector extends Component {
538
538
  vdom.cn[1].cn[0].style.transform = `translateY(${y}px)`;
539
539
  me.update();
540
540
 
541
- setTimeout(() => {
541
+ me.timeout(300).then(() => {
542
542
  vdom.cn[1] = vdom.cn[1].cn[0].cn[scrollFromTop ? 1 : 0];
543
543
  me.triggerVdomUpdate()
544
- }, 300)
544
+ })
545
545
  })
546
546
  })
547
547
  } else {
@@ -256,7 +256,7 @@ class Gallery extends Component {
256
256
  if (value) {
257
257
  me.focusOnMount && me.focus(me.id);
258
258
 
259
- setTimeout(() => {
259
+ me.timeout(300).then(() => {
260
260
  Neo.currentWorker.promiseMessage('main', {
261
261
  action : 'readDom',
262
262
  appName : me.appName,
@@ -280,7 +280,7 @@ class Gallery extends Component {
280
280
  selectionModel.select(key)
281
281
  }
282
282
  })
283
- }, 300)
283
+ })
284
284
  } else {
285
285
  selectionModel.items = []
286
286
  }
@@ -302,19 +302,19 @@ class Gallery extends Component {
302
302
  if (me.rendered) {
303
303
  me.refreshImageReflection();
304
304
 
305
- setTimeout(() => {
305
+ me.timeout(50).then(() => {
306
306
  for (; i < len; i++) {
307
307
  view.cn[i].style.transform = me.getItemTransform(i)
308
308
  }
309
309
 
310
310
  me.update();
311
311
 
312
- setTimeout(() => {
312
+ me.timeout(500).then(() => {
313
313
  let sm = me.selectionModel;
314
314
 
315
315
  sm.hasSelection() && me.onSelectionChange(sm.items)
316
- }, 500)
317
- }, 50)
316
+ })
317
+ })
318
318
  }
319
319
  }
320
320
  }
@@ -695,9 +695,9 @@ class Gallery extends Component {
695
695
  view.cn = newCn;
696
696
  me.update();
697
697
 
698
- setTimeout(() => {
698
+ me.timeout(50).then(() => {
699
699
  me.afterSetOrderByRow(me.orderByRow, !me.orderByRow)
700
- }, 50)
700
+ })
701
701
  }
702
702
  }
703
703
  }