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
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.20.1'
23
+ * @member {String} version='6.22.0'
24
24
  */
25
- version: '6.20.1'
25
+ version: '6.22.0'
26
26
  }
27
27
 
28
28
  /**
@@ -15,9 +15,9 @@ class HeaderToolbar extends Toolbar {
15
15
  */
16
16
  className: 'Colors.view.HeaderToolbar',
17
17
  /**
18
- * @member {String[]} cls=['portal-header-toolbar']
18
+ * @member {String[]} cls=['colors-header-toolbar']
19
19
  */
20
- cls: ['portal-header-toolbar'],
20
+ cls: ['colors-header-toolbar'],
21
21
  /**
22
22
  * @member {Object} layout={ntype:'hbox',align:'stretch',wrap:'wrap'}
23
23
  */
@@ -64,7 +64,11 @@ class HeaderToolbar extends Toolbar {
64
64
  listeners : {change: 'onChangeAmountRows'},
65
65
  store : ['5', '10', '15', '20'],
66
66
  width : 90
67
- }, '->', {
67
+ }, {
68
+ ntype: 'component',
69
+ cls : ['header-spacer'],
70
+ flex : 1
71
+ }, {
68
72
  handler : 'onDetachTableButtonClick',
69
73
  iconCls : 'fas fa-table',
70
74
  reference: 'detach-table-button',
@@ -186,11 +186,11 @@ class MainContainerController extends ComponentController {
186
186
  .catch(err => console.log('Can’t access ' + me.apiSummaryUrl, err))
187
187
  .then(data => me.applySummaryData(data));
188
188
 
189
- setTimeout(() => {
189
+ me.timeout(2000).then(() => {
190
190
  if (!me.summaryData) {
191
- me.onLoadSummaryDataFail();
191
+ me.onLoadSummaryDataFail()
192
192
  }
193
- }, 2000);
193
+ })
194
194
  }
195
195
 
196
196
  /**
@@ -261,11 +261,11 @@ class MainContainerController extends ComponentController {
261
261
  me.activeMainTabIndex = activeIndex;
262
262
 
263
263
  if (!activeView) {
264
- setTimeout(() => {
264
+ me.timeout(10).then(() => {
265
265
  me.onHashChange(value, oldValue);
266
- }, 10);
266
+ });
267
267
 
268
- return;
268
+ return
269
269
  }
270
270
 
271
271
  me.getModel().setData({
@@ -178,9 +178,11 @@ class TableContainer extends Container {
178
178
  * @protected
179
179
  */
180
180
  afterSetCountryRecord(value, oldValue) {
181
- setTimeout(() => {
182
- this.controller.onCountryChange(value);
183
- }, this.isConstructed ? 0 : 50);
181
+ let me = this;
182
+
183
+ me.timeout(me.isConstructed ? 0 : 50).then(() => {
184
+ me.controller.onCountryChange(value)
185
+ })
184
186
  }
185
187
  }
186
188
 
@@ -162,10 +162,12 @@ class CountryGallery extends Gallery {
162
162
  onStoreLoad(items) {
163
163
  super.onStoreLoad(items);
164
164
 
165
- setTimeout(() => {
166
- this.selectOnMount = true;
167
- this.afterSetMounted(true, false);
168
- }, 400);
165
+ let me = this;
166
+
167
+ me.timeout(400).then(() => {
168
+ me.selectOnMount = true;
169
+ me.afterSetMounted(true, false)
170
+ })
169
171
  }
170
172
  }
171
173
 
@@ -82,9 +82,9 @@ class ViewportModel extends Component {
82
82
  if (page instanceof Neo.core.Base) {
83
83
  page.setValues(me.formData, true);
84
84
  } else {
85
- setTimeout(() => {
85
+ me.timeout(30).then(() => {
86
86
  me.onDataPropertyChange(key, value, oldValue)
87
- }, 30)
87
+ })
88
88
  }
89
89
  }
90
90
  }
@@ -3,7 +3,29 @@
3
3
  <head>
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1">
5
5
  <meta charset="UTF-8">
6
- <title>neo.mjs</title>
6
+ <title>Neo.mjs</title>
7
+ <meta name="description" content="Neo.mjs provides a new approach for building feature-rich web applications. Increase productivity by leveraging a vast component library and harness the power of multi-threading for extreme real-time performance.">
8
+ <meta name="robots" content="index, follow">
9
+ <script type="application/ld+json">
10
+ {
11
+ "@context": "http://schema.org",
12
+ "@type": "SoftwareApplication",
13
+ "name": "Neo.mjs",
14
+ "url": "https://neomjs.com/",
15
+ "author": {
16
+ "@type": "Organization",
17
+ "name": "Neo.mjs"
18
+ },
19
+ "datePublished": "2024-07-27",
20
+ "publisher": {
21
+ "@type": "Organization",
22
+ "name": "Neo.mjs"
23
+ },
24
+ "applicationCategory": "JavaScript Framework",
25
+ "downloadUrl": "https://github.com/neomjs/neo"
26
+ }
27
+ </script>
28
+ <link rel="icon" href="../../resources/images/logo/neo_logo_favicon.svg">
7
29
  <link
8
30
  href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;0,8..60,600;0,8..60,700;1,8..60,400;1,8..60,500;1,8..60,600;1,8..60,700&display=swap"
9
31
  rel="stylesheet">
@@ -12,9 +12,9 @@ class HeaderToolbar extends Base {
12
12
  */
13
13
  className: 'Portal.view.HeaderToolbar',
14
14
  /**
15
- * @member {String[]} cls=['learnneo-header-toolbar']
15
+ * @member {String[]} cls=['portal-header-toolbar']
16
16
  */
17
- cls: ['learnneo-header-toolbar'],
17
+ cls: ['portal-header-toolbar'],
18
18
  /**
19
19
  * @member {Object} itemDefaults
20
20
  */
@@ -40,6 +40,7 @@ class Viewport extends BaseViewport {
40
40
  flex : 'none'
41
41
  }, {
42
42
  module : Container,
43
+ cls : ['portal-main-content'],
43
44
  reference: 'main-content',
44
45
 
45
46
  // The layout will get assigned inside ViewportController
@@ -49,7 +50,8 @@ class Viewport extends BaseViewport {
49
50
  {module: () => import('./learn/MainContainer.mjs')},
50
51
  {module: () => import('./blog/Container.mjs')},
51
52
  {module: () => import('../../../docs/app/view/MainContainer.mjs')},
52
- {module: () => import('./services/Component.mjs')}
53
+ {module: () => import('./services/Component.mjs')},
54
+ {module: () => import('./about/Container.mjs')}
53
55
  ]
54
56
  }],
55
57
  /**
@@ -42,6 +42,7 @@ class ViewportController extends Controller {
42
42
  * @member {Object} routes
43
43
  */
44
44
  routes: {
45
+ '/about-us' : 'onAboutUsRoute',
45
46
  '/blog' : 'onBlogRoute',
46
47
  '/docs' : 'onDocsRoute',
47
48
  '/home' : 'onHomeRoute',
@@ -83,6 +84,15 @@ class ViewportController extends Controller {
83
84
  return this.beforeSetEnumValue(value, oldValue, 'mainContentLayout')
84
85
  }
85
86
 
87
+ /**
88
+ * @param {Object} params
89
+ * @param {Object} value
90
+ * @param {Object} oldValue
91
+ */
92
+ onAboutUsRoute(params, value, oldValue) {
93
+ this.setMainContentIndex(5)
94
+ }
95
+
86
96
  /**
87
97
  * @param {Object} data
88
98
  * @param {String} data.appName
@@ -0,0 +1,44 @@
1
+ import Base from '../../../../src/container/Base.mjs';
2
+ import MemberContainer from './MemberContainer.mjs';
3
+
4
+ /**
5
+ * @class Portal.view.about.Container
6
+ * @extends Neo.container.Base
7
+ */
8
+ class Container extends Base {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Portal.view.about.Container'
12
+ * @protected
13
+ */
14
+ className: 'Portal.view.about.Container',
15
+ /**
16
+ * @member {String[]} cls=['portal-about-container']
17
+ */
18
+ cls: ['portal-about-container'],
19
+ /**
20
+ * @member {Object[]} items
21
+ */
22
+ items: [{
23
+ html: 'Meet the Team',
24
+ tag : 'h1'
25
+ }, {
26
+ module : MemberContainer,
27
+ location : 'Germany',
28
+ name : 'Tobias Uhlig',
29
+ picture : 'tobiu.png',
30
+ profileGitHub : 'https://github.com/tobiu',
31
+ profileLinkedIn: 'https://www.linkedin.com/in/tobiasuhlig/',
32
+ profileX : 'https://x.com/UhligTobias',
33
+ teamRole : 'Co-Founder & Core Team Member'
34
+ }],
35
+ /**
36
+ * @member {Object} layout={ntype:'vbox',align:'start'}
37
+ */
38
+ layout: {ntype: 'vbox', align: 'start'}
39
+ }
40
+ }
41
+
42
+ Neo.setupClass(Container);
43
+
44
+ export default Container;
@@ -0,0 +1,191 @@
1
+ import Container from '../../../../src/container/Base.mjs';
2
+ import Toolbar from '../../../../src/toolbar/Base.mjs';
3
+
4
+ /**
5
+ * @class Portal.view.about.MemberContainer
6
+ * @extends Neo.container.Base
7
+ */
8
+ class MemberContainer extends Container {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Portal.view.about.MemberContainer'
12
+ * @protected
13
+ */
14
+ className: 'Portal.view.about.MemberContainer',
15
+ /**
16
+ * @member {String[]} cls=['portal-about-member-container']
17
+ */
18
+ cls: ['portal-about-member-container'],
19
+ /**
20
+ * @member {String|null} location_=null
21
+ */
22
+ location_: null,
23
+ /**
24
+ * @member {String|null} name_=null
25
+ */
26
+ name_: null,
27
+ /**
28
+ * @member {String|null} picture_=null
29
+ */
30
+ picture_: null,
31
+ /**
32
+ * @member {String|null} profileGitHub_=null
33
+ */
34
+ profileGitHub_: null,
35
+ /**
36
+ * @member {String|null} profileLinkedIn_=null
37
+ */
38
+ profileLinkedIn_: null,
39
+ /**
40
+ * @member {String|null} profileX_=null
41
+ */
42
+ profileX_: null,
43
+ /**
44
+ * @member {String|null} teamRole_=null
45
+ */
46
+ teamRole_: null,
47
+ /**
48
+ * @member {Object[]} items
49
+ */
50
+ items: [{
51
+ module : Toolbar,
52
+ cls : ['portal-profiles'],
53
+ itemDefaults: {ntype: 'button', ui: 'ghost'},
54
+
55
+ items: [{
56
+ iconCls: 'portal-profile fa-brands fa-github'
57
+ }, {
58
+ iconCls: 'portal-profile fa-brands fa-linkedin'
59
+ }, {
60
+ iconCls: 'portal-profile fa-brands fa-x-twitter'
61
+ }]
62
+ }, {
63
+ cls : ['portal-profile-component'],
64
+ vdom:
65
+ {cn: [
66
+ {tag: 'img', cls: ['portal-profile-picture']},
67
+ {cls: ['portal-profile-content'], cn: [
68
+ {tag: 'h2', cls: ['portal-profile-name']},
69
+ {cls: ['portal-profile-role']},
70
+ {cn: [
71
+ {tag: 'i', cls: ['portal-profile-location']},
72
+ {vtype: 'text'}
73
+ ]}
74
+ ]}
75
+ ]}
76
+ }]
77
+ }
78
+
79
+ /**
80
+ * Triggered after the location config got changed
81
+ * @param {String|null} value
82
+ * @param {String|null} oldValue
83
+ * @protected
84
+ */
85
+ afterSetLocation(value, oldValue) {
86
+ if (value) {
87
+ let item = this.items[1];
88
+
89
+ item.vdom.cn[1].cn[2].cn[1].html = value;
90
+ item.update?.()
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Triggered after the name config got changed
96
+ * @param {String|null} value
97
+ * @param {String|null} oldValue
98
+ * @protected
99
+ */
100
+ afterSetName(value, oldValue) {
101
+ if (value) {
102
+ let item = this.items[1];
103
+
104
+ item.vdom.cn[1].cn[0].html = value;
105
+ item.update?.()
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Triggered after the picture config got changed
111
+ * @param {String|null} value
112
+ * @param {String|null} oldValue
113
+ * @protected
114
+ */
115
+ afterSetPicture(value, oldValue) {
116
+ if (value) {
117
+ let item = this.items[1];
118
+
119
+ item.vdom.cn[0].src = '../../../resources/images/team/' + value;
120
+ item.update?.()
121
+ }
122
+ }
123
+
124
+ /**
125
+ * Triggered after the profileGitHub config got changed
126
+ * @param {String|null} value
127
+ * @param {String|null} oldValue
128
+ * @protected
129
+ */
130
+ afterSetProfileGitHub(value, oldValue) {
131
+ this.updateProfileButton(this.items[0].items[0], value)
132
+ }
133
+
134
+ /**
135
+ * Triggered after the profileLinkedIn config got changed
136
+ * @param {String|null} value
137
+ * @param {String|null} oldValue
138
+ * @protected
139
+ */
140
+ afterSetProfileLinkedIn(value, oldValue) {
141
+ this.updateProfileButton(this.items[0].items[1], value)
142
+ }
143
+
144
+ /**
145
+ * Triggered after the profileX config got changed
146
+ * @param {String|null} value
147
+ * @param {String|null} oldValue
148
+ * @protected
149
+ */
150
+ afterSetProfileX(value, oldValue) {
151
+ this.updateProfileButton(this.items[0].items[2], value)
152
+ }
153
+
154
+ /**
155
+ * Triggered after the teamRole config got changed
156
+ * @param {String|null} value
157
+ * @param {String|null} oldValue
158
+ * @protected
159
+ */
160
+ afterSetTeamRole(value, oldValue) {
161
+ if (value) {
162
+ let item = this.items[1];
163
+
164
+ item.vdom.cn[1].cn[1].html = value;
165
+ item.update?.()
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Depending on the lifecycle, we will either pass a button instance or a config object
171
+ * @param {Neo.button.Base|Object} button
172
+ * @param {String|null} url
173
+ * @protected
174
+ */
175
+ updateProfileButton(button, url) {
176
+ if (button.set) {
177
+ button.set({
178
+ hidden: !url,
179
+ url
180
+ })
181
+ } else {
182
+ // initial values
183
+ button.hidden = !url;
184
+ button.url = url;
185
+ }
186
+ }
187
+ }
188
+
189
+ Neo.setupClass(MemberContainer);
190
+
191
+ export default MemberContainer;
@@ -28,6 +28,7 @@ class MainContainer extends Container {
28
28
  */
29
29
  domListeners: [{
30
30
  intersect(data) {
31
+ this.activePartsId = data.targetId;
31
32
  Neo.getComponent(data.targetId)?.activate?.()
32
33
  },
33
34
  scroll(event) {
@@ -53,6 +54,12 @@ class MainContainer extends Container {
53
54
  scrollable: true
54
55
  }
55
56
 
57
+ /**
58
+ * Internal flag containing the id of the currently visible parts item
59
+ * @member {String|null} activePartsId=null
60
+ */
61
+ activePartsId = null
62
+
56
63
  /**
57
64
  * Triggered after the mounted config got changed
58
65
  * @param {Boolean} value
@@ -65,7 +72,7 @@ class MainContainer extends Container {
65
72
  let me = this,
66
73
  {id, windowId} = me;
67
74
 
68
- value && setTimeout(() => {
75
+ value && me.timeout(50).then(() => {
69
76
  Neo.main.addon.IntersectionObserver.register({
70
77
  callback : 'isVisible',
71
78
  id,
@@ -74,7 +81,7 @@ class MainContainer extends Container {
74
81
  threshold: 1.0,
75
82
  windowId
76
83
  })
77
- }, 50)
84
+ })
78
85
  }
79
86
  }
80
87
 
@@ -28,18 +28,22 @@ class AfterMath extends BaseContainer {
28
28
  }, {
29
29
  cls : ['neo-h1'],
30
30
  flex: 'none',
31
- html: 'Additional Stuff',
31
+ html: 'Next Steps',
32
32
  tag : 'h1'
33
- }, {
34
- cls : ['neo-h2'],
35
- flex: 'none',
36
- html: 'More to come here',
37
- tag : 'h2'
38
33
  }, {
39
34
  cls : ['neo-content'],
40
35
  flex: 'none',
41
- html: 'Lorem Ipsum',
42
- tag : 'p'
36
+ html: `
37
+ <p>
38
+ To learn more about Neo.mjs please read <a href="#/learn">the Learning Section</a> or browse <a href="#/blog">the blog</a>.
39
+ </p>
40
+ <p>
41
+ To arrange a demo or to talk to an engineer email <a href="mailto:info@neomjs.com">info@neomjs.com</a>.
42
+ <br>For help starting a project email <a href="mailto:services@neomjs.com">services@neomjs.com</a>.
43
+ <br>For questions about private training email <a href="mailto:training@neomjs.com">training@neomjs.com</a>.
44
+ </p>
45
+ `,
46
+ tag : 'div'
43
47
  }, {
44
48
  flex: 1
45
49
  }, {
@@ -89,8 +89,14 @@ class Colors extends BaseContainer {
89
89
  *
90
90
  */
91
91
  async activate() {
92
- await this.timeout(1000);
93
- this.getReference('live-preview').activeView = 'preview'
92
+ let me = this,
93
+ {parent} = me;
94
+
95
+ await me.timeout(1000);
96
+
97
+ if (parent.activePartsId === me.id && parent.mounted) {
98
+ me.getReference('live-preview').activeView = 'preview'
99
+ }
94
100
  }
95
101
  }
96
102