neo.mjs 8.27.0 → 8.28.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='8.27.0'
23
+ * @member {String} version='8.28.0'
24
24
  */
25
- version: '8.27.0'
25
+ version: '8.28.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-03-01",
19
+ "datePublished": "2025-03-02",
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 : 'v8.27.0'
110
+ html : 'v8.28.0'
111
111
  }]
112
112
  }],
113
113
  /**
@@ -51,10 +51,10 @@ class MainContainer extends Container {
51
51
  items: [
52
52
  {ntype: 'component', cls: ['portal-home-progress']},
53
53
  MainNeo,
54
- Features,
55
54
  Helix,
56
55
  Colors,
57
56
  How,
57
+ Features,
58
58
  AfterMath
59
59
  ],
60
60
  /**
@@ -36,7 +36,7 @@ class AfterMath extends BaseContainer {
36
36
  tag : 'ul',
37
37
 
38
38
  html: `
39
- <li>To learn more about Neo.mjs please read the <a href="#/learn">Learning Section</a> or browse the <a href="#/blog">Blog</a></li>
39
+ <li>To learn more about Neo.mjs please dive into the <a href="#/learn">Learning Section</a> or browse the <a href="#/blog">Blog</a></li>
40
40
  <li>To arrange a demo or to talk to an engineer email <a href="mailto:info@neomjs.com">info@neomjs.com</a></li>
41
41
  <li>For help starting a project email <a href="mailto:services@neomjs.com">services@neomjs.com</a></li>
42
42
  <li>For questions about private training email <a href="mailto:training@neomjs.com">training@neomjs.com</a></li>
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='8.27.0'
23
+ * @member {String} version='8.28.0'
24
24
  */
25
- version: '8.27.0'
25
+ version: '8.28.0'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "8.27.0",
3
+ "version": "8.28.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -25,6 +25,7 @@
25
25
  font-size : min(max(4.5vw, 30px), 44px);
26
26
  line-height: 1em;
27
27
  margin : 0;
28
+ text-align : start;
28
29
  }
29
30
 
30
31
  h2.neo-h2 {
@@ -32,6 +33,7 @@
32
33
  font-weight: 600;
33
34
  line-height: 1em;
34
35
  margin : 0;
36
+ text-align : start;
35
37
  }
36
38
 
37
39
  .page-live-preview {
@@ -263,12 +263,12 @@ const DefaultConfig = {
263
263
  useVdomWorker: true,
264
264
  /**
265
265
  * buildScripts/injectPackageVersion.mjs will update this value
266
- * @default '8.27.0'
266
+ * @default '8.28.0'
267
267
  * @memberOf! module:Neo
268
268
  * @name config.version
269
269
  * @type String
270
270
  */
271
- version: '8.27.0'
271
+ version: '8.28.0'
272
272
  };
273
273
 
274
274
  Object.assign(DefaultConfig, {
package/src/grid/View.mjs CHANGED
@@ -154,12 +154,12 @@ class GridView extends Component {
154
154
  }
155
155
 
156
156
  /**
157
- * @member {String[]} selectedRows
157
+ * @member {String[]} selectedCells
158
158
  */
159
159
  get selectedCells() {
160
160
  let {selectionModel} = this;
161
161
 
162
- if (selectionModel.ntype.includes('cell')) {
162
+ if (selectionModel.ntype?.includes('cell')) {
163
163
  return selectionModel.items
164
164
  }
165
165
 
@@ -176,6 +176,10 @@ class GridView extends Component {
176
176
  return selectionModel.items
177
177
  }
178
178
 
179
+ if (selectionModel.ntype?.includes('row')) {
180
+ return selectionModel.selectedRows
181
+ }
182
+
179
183
  return []
180
184
  }
181
185
 
@@ -438,7 +442,7 @@ class GridView extends Component {
438
442
  }
439
443
 
440
444
  if (me.selectionModel?.selectedColumns?.includes(dataField)) {
441
- NeoArray.add(cellCls, 'neo-selected')
445
+ NeoArray.add(cellCls, me.selectionModel.selectedColumnCellCls || 'neo-selected')
442
446
  }
443
447
 
444
448
  cellConfig = {
@@ -567,9 +571,9 @@ class GridView extends Component {
567
571
  }
568
572
 
569
573
  /**
570
- *
574
+ * @param {Boolean} silent=false
571
575
  */
572
- createViewData() {
576
+ createViewData(silent=false) {
573
577
  let me = this,
574
578
  {mountedRows, store} = me,
575
579
  rows = [],
@@ -597,7 +601,7 @@ class GridView extends Component {
597
601
  me.parent.isLoading = false;
598
602
 
599
603
  me.updateScrollHeight(true); // silent
600
- me.update()
604
+ !silent && me.update()
601
605
  }
602
606
 
603
607
  /**
@@ -1,5 +1,4 @@
1
1
  import CellModel from './CellModel.mjs';
2
- import VDomUtil from '../../util/VDom.mjs';
3
2
 
4
3
  /**
5
4
  * @class Neo.selection.grid.CellColumnModel
@@ -28,25 +27,10 @@ class CellColumnModel extends CellModel {
28
27
  */
29
28
  selectedColumnCellCls: 'selected-column-cell',
30
29
  /**
31
- * @member {String[]} selectedColumnCellIds=[]
32
- * @protected
30
+ * Storing the column dataFields
31
+ * @member {String[]} selectedColumns=[]
33
32
  */
34
- selectedColumnCellIds: []
35
- }
36
-
37
- /**
38
- * @param {Boolean} [silent] true to prevent a vdom update
39
- */
40
- deselectAllCells(silent) {
41
- let me = this,
42
- cellIds = [...me.selectedColumnCellIds],
43
- {view} = me
44
-
45
- cellIds.forEach(cellId => {
46
- me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls)
47
- });
48
-
49
- !silent && view.update()
33
+ selectedColumns: []
50
34
  }
51
35
 
52
36
  /**
@@ -55,16 +39,11 @@ class CellColumnModel extends CellModel {
55
39
  onCellClick(data) {
56
40
  let me = this,
57
41
  {view} = me,
58
- cellId = data.data.currentTarget,
59
- columnNodeIds, dataField, index;
42
+ cellId = data.data.currentTarget;
60
43
 
61
44
  if (cellId) {
62
- dataField = view.getDataField(cellId);
63
- index = view.getColumn(dataField, true);
64
- columnNodeIds = VDomUtil.getColumnNodesIds(view.vdom.cn[0], index);
65
-
66
- me.deselectAllCells(true);
67
- me.select(columnNodeIds, me.selectedColumnCellIds, me.selectedColumnCellCls)
45
+ me.selectedColumns = [view.getDataField(cellId)];
46
+ view.createViewData(true)
68
47
  }
69
48
 
70
49
  super.onCellClick(data)
@@ -76,10 +55,10 @@ class CellColumnModel extends CellModel {
76
55
  onNavKeyColumn(step) {
77
56
  let me = this,
78
57
  {dataFields, view} = me,
79
- columnNodeIds, currentColumn, index;
58
+ currentColumn, index;
80
59
 
81
60
  if (me.hasSelection()) {
82
- currentColumn = view.getDataField(me.items[0])
61
+ currentColumn = me.selectedColumns[0]
83
62
  } else {
84
63
  currentColumn = dataFields[0]
85
64
  }
@@ -90,10 +69,9 @@ class CellColumnModel extends CellModel {
90
69
  index += dataFields.length
91
70
  }
92
71
 
93
- columnNodeIds = VDomUtil.getColumnNodesIds(view.vdom.cn[0], index);
72
+ me.selectedColumns = [dataFields[index]];
94
73
 
95
- me.deselectAllCells(true);
96
- me.select(columnNodeIds, me.selectedColumnCellIds, me.selectedColumnCellCls);
74
+ view.createViewData(true);
97
75
 
98
76
  super.onNavKeyColumn(step)
99
77
  }
@@ -102,7 +80,9 @@ class CellColumnModel extends CellModel {
102
80
  *
103
81
  */
104
82
  unregister() {
105
- this.deselectAllCells();
83
+ this.selectedColumns = [];
84
+ this.view.createViewData();
85
+
106
86
  super.unregister()
107
87
  }
108
88
  }
@@ -1,5 +1,4 @@
1
1
  import CellRowModel from './CellRowModel.mjs';
2
- import VDomUtil from '../../util/VDom.mjs';
3
2
 
4
3
  /**
5
4
  * @class Neo.selection.grid.CellColumnRowModel
@@ -28,25 +27,10 @@ class CellColumnRowModel extends CellRowModel {
28
27
  */
29
28
  selectedColumnCellCls: 'selected-column-cell',
30
29
  /**
31
- * @member {String[]} selectedColumnCellIds=[]
32
- * @protected
30
+ * Storing the column dataFields
31
+ * @member {String[]} selectedColumns=[]
33
32
  */
34
- selectedColumnCellIds: []
35
- }
36
-
37
- /**
38
- * @param {Boolean} [silent] true to prevent a vdom update
39
- */
40
- deselectAllCells(silent) {
41
- let me = this,
42
- cellIds = [...me.selectedColumnCellIds],
43
- {view} = me;
44
-
45
- cellIds.forEach(cellId => {
46
- me.deselect(cellId, true, me.selectedColumnCellIds, me.selectedColumnCellCls)
47
- });
48
-
49
- !silent && view.update()
33
+ selectedColumns: []
50
34
  }
51
35
 
52
36
  /**
@@ -55,16 +39,11 @@ class CellColumnRowModel extends CellRowModel {
55
39
  onCellClick(data) {
56
40
  let me = this,
57
41
  {view} = me,
58
- cellId = data.data.currentTarget,
59
- columnNodeIds, dataField, index;
42
+ cellId = data.data.currentTarget;
60
43
 
61
44
  if (cellId) {
62
- dataField = view.getDataField(cellId);
63
- index = view.getColumn(dataField, true);
64
- columnNodeIds = VDomUtil.getColumnNodesIds(view.vdom.cn[0], index);
65
-
66
- me.deselectAllCells(true);
67
- me.select(columnNodeIds, me.selectedColumnCellIds, me.selectedColumnCellCls)
45
+ me.selectedColumns = [view.getDataField(cellId)];
46
+ view.createViewData(true)
68
47
  }
69
48
 
70
49
  super.onCellClick(data)
@@ -76,10 +55,10 @@ class CellColumnRowModel extends CellRowModel {
76
55
  onNavKeyColumn(step) {
77
56
  let me = this,
78
57
  {dataFields, view} = me,
79
- columnNodeIds, currentColumn, index;
58
+ currentColumn, index;
80
59
 
81
60
  if (me.hasSelection()) {
82
- currentColumn = view.getDataField(me.items[0])
61
+ currentColumn = me.selectedColumns[0]
83
62
  } else {
84
63
  currentColumn = dataFields[0]
85
64
  }
@@ -90,10 +69,9 @@ class CellColumnRowModel extends CellRowModel {
90
69
  index += dataFields.length
91
70
  }
92
71
 
93
- columnNodeIds = VDomUtil.getColumnNodesIds(view.vdom.cn[0], index);
72
+ me.selectedColumns = [dataFields[index]];
94
73
 
95
- me.deselectAllCells(true);
96
- me.select(columnNodeIds, me.selectedColumnCellIds, me.selectedColumnCellCls);
74
+ view.createViewData(true);
97
75
 
98
76
  super.onNavKeyColumn(step)
99
77
  }
@@ -102,7 +80,7 @@ class CellColumnRowModel extends CellRowModel {
102
80
  *
103
81
  */
104
82
  unregister() {
105
- this.deselectAllCells();
83
+ this.selectedColumns = [];
106
84
  super.unregister()
107
85
  }
108
86
  }
@@ -1,5 +1,4 @@
1
1
  import CellModel from './CellModel.mjs';
2
- import NeoArray from '../../util/Array.mjs';
3
2
 
4
3
  /**
5
4
  * @class Neo.selection.grid.CellRowModel
@@ -23,46 +22,11 @@ class CellRowModel extends CellModel {
23
22
  */
24
23
  cls: 'neo-selection-cellrowmodel',
25
24
  /**
26
- * @member {String[]} selectedRowIds=[]
25
+ * Storing the node ids
26
+ * @member {String[]} selectedRows=[]
27
27
  * @protected
28
28
  */
29
- selectedRowIds: []
30
- }
31
-
32
- /**
33
- * @param {Boolean} [silent] true to prevent a vdom update
34
- */
35
- deselectAllRows(silent) {
36
- let me = this,
37
- rowIds = [...me.selectedRowIds],
38
- {view} = me;
39
-
40
- rowIds.forEach(rowId => {
41
- me.deselectRow(rowId, true)
42
- });
43
-
44
- !silent && view.update()
45
- }
46
-
47
- /**
48
- * @param {String} rowId
49
- * @param {Boolean} [silent] true to prevent a vdom update
50
- */
51
- deselectRow(rowId, silent) {
52
- let me = this,
53
- {view} = me,
54
- node = view.getVdomChild(rowId),
55
- cls;
56
-
57
- if (node) {
58
- cls = node.cls || [];
59
- NeoArray.remove(cls, me.selectedCls);
60
- node.cls = cls
61
- }
62
-
63
- NeoArray.remove(me.selectedRowIds, rowId);
64
-
65
- !silent && view.update()
29
+ selectedRows: []
66
30
  }
67
31
 
68
32
  /**
@@ -70,12 +34,13 @@ class CellRowModel extends CellModel {
70
34
  */
71
35
  onCellClick(data) {
72
36
  let me = this,
73
- record = me.view.getRecord(data.data.currentTarget),
74
- rowId = me.view.getRowId(record);
37
+ {view} = me,
38
+ record = view.getRecord(data.data.currentTarget),
39
+ rowId = view.getRowId(record);
75
40
 
76
41
  if (rowId) {
77
- me.deselectAllRows(true);
78
- me.selectRow(rowId)
42
+ me.selectedRows = [rowId];
43
+ view.createViewData(true)
79
44
  }
80
45
 
81
46
  super.onCellClick(data)
@@ -85,13 +50,11 @@ class CellRowModel extends CellModel {
85
50
  * @param {Number} step
86
51
  */
87
52
  onNavKeyRow(step) {
88
- super.onNavKeyRow(step);
89
-
90
53
  let me = this,
91
54
  {view} = me,
92
55
  {store} = view,
93
56
  countRecords = store.getCount(),
94
- rowId = me.selectedRowIds[0] || view.getRowId(store.getAt(0)),
57
+ rowId = me.selectedRows[0] || view.getRowId(store.getAt(0)),
95
58
  record = view.getRecord(rowId),
96
59
  index = store.indexOf(record),
97
60
  newIndex = (index + step) % countRecords,
@@ -104,37 +67,20 @@ class CellRowModel extends CellModel {
104
67
  id = view.getRowId(store.getAt(newIndex));
105
68
 
106
69
  if (id) {
107
- me.deselectAllRows(true);
108
- me.selectRow(id)
70
+ me.selectedRows = [id];
71
+ view.createViewData(true)
109
72
  }
110
- }
111
73
 
112
- /**
113
- * @param {String} id
114
- * @param {Boolean} [silent]
115
- */
116
- selectRow(id, silent) {
117
- let me = this,
118
- {view} = me,
119
- vdomNode = id && view.getVdomChild(id),
120
- cls;
121
-
122
- if (vdomNode) {
123
- cls = vdomNode.cls || [];
124
- NeoArray.add(cls, me.selectedCls);
125
- vdomNode.cls = cls;
126
-
127
- me.selectedRowIds.push(id)
128
- }
129
-
130
- !silent && view.update()
74
+ super.onNavKeyRow(step)
131
75
  }
132
76
 
133
77
  /**
134
78
  *
135
79
  */
136
80
  unregister() {
137
- this.deselectAllRows();
81
+ this.selectedRows = [];
82
+ this.view.createViewData();
83
+
138
84
  super.unregister()
139
85
  }
140
86
  }
@@ -1,5 +1,4 @@
1
1
  import BaseModel from './BaseModel.mjs';
2
- import VDomUtil from '../../util/VDom.mjs';
3
2
 
4
3
  /**
5
4
  * @class Neo.selection.grid.ColumnModel
@@ -23,6 +22,7 @@ class ColumnModel extends BaseModel {
23
22
  */
24
23
  cls: 'neo-selection-columnmodel',
25
24
  /**
25
+ * Storing the column dataFields
26
26
  * @member {String[]} selectedColumns=[]
27
27
  */
28
28
  selectedColumns: []
@@ -89,7 +89,7 @@ class ColumnModel extends BaseModel {
89
89
  onNavKeyColumn(step) {
90
90
  let me = this,
91
91
  {dataFields, view} = me,
92
- currentColumn, index;
92
+ currentColumn, currentIndex, index;
93
93
 
94
94
  if (me.hasSelection()) {
95
95
  currentColumn = me.selectedColumns[0]
@@ -97,14 +97,18 @@ class ColumnModel extends BaseModel {
97
97
  currentColumn = dataFields[0]
98
98
  }
99
99
 
100
- index = (dataFields.indexOf(currentColumn) + step) % dataFields.length;
100
+ currentIndex = dataFields.indexOf(currentColumn);
101
+ index = (currentIndex + step) % dataFields.length;
101
102
 
102
103
  while (index < 0) {
103
104
  index += dataFields.length
104
105
  }
105
106
 
106
107
  me.selectedColumns = [dataFields[index]];
107
- view.createViewData()
108
+
109
+ view.createViewData();
110
+
111
+ view.parent.scrollByColumns(currentIndex, step)
108
112
  }
109
113
 
110
114
  /**
@@ -125,7 +129,11 @@ class ColumnModel extends BaseModel {
125
129
  *
126
130
  */
127
131
  unregister() {
128
- let {id, view} = this;
132
+ let me = this,
133
+ {id, view} = me;
134
+
135
+ me.selectedColumns = [];
136
+ me.view.createViewData();
129
137
 
130
138
  view.keys?.removeKeys([
131
139
  {fn: 'onKeyDownLeft', key: 'Left', scope: id},
@@ -547,21 +547,18 @@ class App extends Base {
547
547
  * @param {String} [data.priority] optionally pass 'important'
548
548
  * @param {String} data.theme=Neo.config.themes[0]
549
549
  * @param {String} data.value
550
+ * @param {Number} data.windowId
550
551
  * @returns {Promise<any>}
551
552
  */
552
- setCssVariable(data) {
553
- let addon = Neo.main?.addon?.Stylesheet,
554
- theme = Neo.config.themes?.[0];
553
+ async setCssVariable(data) {
554
+ let Stylesheet = await this.getAddon('Stylesheet', data.windowId),
555
+ theme = data.theme || Neo.config.themes?.[0];
555
556
 
556
- if (!addon) {
557
- return Promise.reject('Neo.main.addon.Stylesheet not imported')
558
- } else {
559
- if (theme.startsWith('neo-')) {
560
- theme = theme.substring(4)
561
- }
562
-
563
- return addon.setCssVariable({theme, ...data})
557
+ if (theme.startsWith('neo-')) {
558
+ theme = theme.substring(4)
564
559
  }
560
+
561
+ return Stylesheet.setCssVariable({theme, ...data})
565
562
  }
566
563
  }
567
564