neo.mjs 9.3.0 → 9.5.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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='9.3.0'
23
+ * @member {String} version='9.5.0'
24
24
  */
25
- version: '9.3.0'
25
+ version: '9.5.0'
26
26
  }
27
27
 
28
28
  /**
@@ -16,7 +16,7 @@
16
16
  "@type": "Organization",
17
17
  "name": "Neo.mjs"
18
18
  },
19
- "datePublished": "2025-05-23",
19
+ "datePublished": "2025-05-25",
20
20
  "publisher": {
21
21
  "@type": "Organization",
22
22
  "name": "Neo.mjs"
@@ -107,7 +107,7 @@ class FooterContainer extends Container {
107
107
  }, {
108
108
  module: Component,
109
109
  cls : ['neo-version'],
110
- html : 'v9.3.0'
110
+ html : 'v9.5.0'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='9.3.0'
23
+ * @member {String} version='9.5.0'
24
24
  */
25
- version: '9.3.0'
25
+ version: '9.5.0'
26
26
  }
27
27
 
28
28
  /**
@@ -0,0 +1,49 @@
1
+ import BaseViewport from '../../../src/container/Viewport.mjs';
2
+ import Button from '../../../src/button/Base.mjs';
3
+
4
+ /**
5
+ * @class Neo.examples.serverside.gridContainer.Viewport
6
+ * @extends Neo.container.Viewport
7
+ */
8
+ class Viewport extends BaseViewport {
9
+ static config = {
10
+ className: 'Neo.examples.serverside.gridContainer.Viewport',
11
+ cls : ['neo-serverside-gridcontainer-viewport'],
12
+ layout : 'base',
13
+
14
+ items: [{
15
+ ntype : 'container',
16
+ cls : 'neo-serverside-gridcontainer-content',
17
+ layout : 'fit',
18
+ reference: 'container'
19
+ }, {
20
+ module : Button,
21
+ handler: 'up.onLoadGridContainerButtonClick',
22
+ style : {marginTop: '1em'},
23
+ text : 'Load Grid Container'
24
+ }]
25
+ }
26
+
27
+ /**
28
+ * @param {Object} data
29
+ * @returns {Promise<void>}
30
+ */
31
+ async onLoadGridContainerButtonClick(data) {
32
+ data.component.disabled = true;
33
+
34
+ let items = await this.loadItems('../../examples/serverside/gridContainer/resources/data/grid-container.json');
35
+
36
+ this.getReference('container').add(items)
37
+ }
38
+
39
+ /**
40
+ * @param {Object} data
41
+ * @param {String} data.value
42
+ * @returns {String}
43
+ */
44
+ rendererGithubId({value}) {
45
+ return `<i class='fa-brands fa-github'></i> ${value}`
46
+ }
47
+ }
48
+
49
+ export default Neo.setupClass(Viewport);
@@ -0,0 +1,6 @@
1
+ import Viewport from './Viewport.mjs';
2
+
3
+ export const onStart = () => Neo.app({
4
+ mainView: Viewport,
5
+ name : 'Neo.examples.serverside.gridContainer'
6
+ });
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <meta charset="UTF-8">
6
+ <title>Neo.mjs - Load Grid Container</title>
7
+ </head>
8
+ <body>
9
+ <script src="../../../src/MicroLoader.mjs" type="module"></script>
10
+ </body>
11
+ </html>
@@ -0,0 +1,7 @@
1
+ {
2
+ "appPath" : "examples/serverside/gridContainer/app.mjs",
3
+ "basePath" : "../../../",
4
+ "environment": "development",
5
+ "mainPath" : "./Main.mjs",
6
+ "themes" : ["neo-theme-dark"]
7
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "modules": [
3
+ "src/grid/Container.mjs"
4
+ ],
5
+
6
+ "items": [{
7
+ "className": "Neo.grid.Container",
8
+ "store" : {
9
+ "keyProperty": "githubId",
10
+
11
+ "model" : {
12
+ "fields": [{
13
+ "name": "country",
14
+ "type": "String"
15
+ }, {
16
+ "name": "firstname",
17
+ "type": "String"
18
+ }, {
19
+ "name": "githubId",
20
+ "type": "String"
21
+ }, {
22
+ "name": "lastname",
23
+ "type": "String"
24
+ }]
25
+ },
26
+
27
+ "data": [{
28
+ "country" : "Germany",
29
+ "firstname": "Tobias",
30
+ "githubId" : "tobiu",
31
+ "lastname" : "Uhlig"
32
+ }, {
33
+ "country" : "USA",
34
+ "firstname": "Rich",
35
+ "githubId" : "rwaters",
36
+ "lastname" : "Waters"
37
+ }, {
38
+ "country" : "Germany",
39
+ "firstname": "Nils",
40
+ "githubId" : "mrsunshine",
41
+ "lastname" : "Dehl"
42
+ }, {
43
+ "country" : "USA",
44
+ "firstname": "Gerard",
45
+ "githubId" : "camtnbikerrwc",
46
+ "lastname" : "Horan"
47
+ }, {
48
+ "country" : "Slovakia",
49
+ "firstname": "Jozef",
50
+ "githubId" : "jsakalos",
51
+ "lastname" : "Sakalos"
52
+ }, {
53
+ "country" : "Germany",
54
+ "firstname": "Bastian",
55
+ "githubId" : "bhaustein",
56
+ "lastname" : "Haustein"
57
+ }]
58
+ },
59
+
60
+ "columnDefaults": {
61
+ "width": 200
62
+ },
63
+
64
+ "columns": [
65
+ {"dataField": "firstname", "text": "Firstname"},
66
+ {"dataField": "lastname", "text": "Lastname"},
67
+ {"dataField": "githubId", "text": "Github Id", "renderer": "up.rendererGithubId"},
68
+ {"dataField": "country", "text": "Country"}
69
+ ],
70
+
71
+ "wrapperStyle": {
72
+ "height": "250px"
73
+ }
74
+ }]
75
+ }
@@ -30,10 +30,9 @@ class Viewport extends BaseViewport {
30
30
  async onLoadItemsButtonClick(data) {
31
31
  data.component.disabled = true;
32
32
 
33
- let response = await fetch('../../examples/serverside/toolbarItems/resources/data/toolbar-items.json'),
34
- remoteData = await response.json();
33
+ let items = await this.loadItems('../../examples/serverside/toolbarItems/resources/data/toolbar-items.json');
35
34
 
36
- this.getReference('toolbar').add(remoteData.items)
35
+ this.getReference('toolbar').add(items)
37
36
  }
38
37
  }
39
38
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "9.3.0",
3
+ "version": "9.5.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -56,7 +56,7 @@
56
56
  "envinfo": "^7.14.0",
57
57
  "fs-extra": "^11.3.0",
58
58
  "highlightjs-line-numbers.js": "^2.9.0",
59
- "inquirer": "^12.6.1",
59
+ "inquirer": "^12.6.2",
60
60
  "marked": "^15.0.12",
61
61
  "monaco-editor": "0.50.0",
62
62
  "neo-jsdoc": "1.0.1",
@@ -0,0 +1,13 @@
1
+ .neo-viewport.neo-serverside-gridcontainer-viewport {
2
+ padding: 1em;
3
+
4
+ .neo-serverside-gridcontainer-content {
5
+ border: 1px solid #3E63DD;
6
+ height: 250px;
7
+ width : 800px;
8
+
9
+ .fa-github {
10
+ margin-right: .4em;
11
+ }
12
+ }
13
+ }
@@ -263,12 +263,12 @@ const DefaultConfig = {
263
263
  useVdomWorker: true,
264
264
  /**
265
265
  * buildScripts/injectPackageVersion.mjs will update this value
266
- * @default '9.3.0'
266
+ * @default '9.5.0'
267
267
  * @memberOf! module:Neo
268
268
  * @name config.version
269
269
  * @type String
270
270
  */
271
- version: '9.3.0'
271
+ version: '9.5.0'
272
272
  };
273
273
 
274
274
  Object.assign(DefaultConfig, {
@@ -579,6 +579,34 @@ class Container extends Component {
579
579
  return item;
580
580
  }
581
581
 
582
+ /**
583
+ * Load items from a remote endpoint.
584
+ * See: https://github.com/neomjs/neo/tree/dev/examples/serverside
585
+ * The response should return a JSON file in the following format:
586
+ * {"modules": [], "items": []}
587
+ * See: https://github.com/neomjs/neo/blob/dev/examples/serverside/gridContainer/resources/data/grid-container.json
588
+ * It is important to add modules which are not already imported inside your app yet.
589
+ * @param {String} url
590
+ * @returns {Promise<Object[]>}
591
+ */
592
+ async loadItems(url) {
593
+ let response = await fetch(url),
594
+ remoteData = await response.json();
595
+
596
+ if (remoteData.modules?.length > 0) {
597
+ await Promise.all(remoteData.modules.map(modulePath => {
598
+ // Adjust relative URLs
599
+ if (!modulePath.startsWith('http')) {
600
+ modulePath = (Neo.config.environment === 'development' ? '../../' : '../../../../') + modulePath
601
+ }
602
+
603
+ return import(/* webpackIgnore: true */ modulePath)
604
+ }))
605
+ }
606
+
607
+ return remoteData.items
608
+ }
609
+
582
610
  /**
583
611
  *
584
612
  */