neo.mjs 5.13.2 → 5.13.4

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='5.13.2'
23
+ * @member {String} version='5.13.4'
24
24
  */
25
- version: '5.13.2'
25
+ version: '5.13.4'
26
26
  }
27
27
 
28
28
  /**
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='5.13.2'
23
+ * @member {String} version='5.13.4'
24
24
  */
25
- version: '5.13.2'
25
+ version: '5.13.4'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "5.13.2",
3
+ "version": "5.13.4",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -24,7 +24,7 @@
24
24
 
25
25
  .neo-textfield-input {
26
26
  border-color: v(textfield-border-color-active);
27
- outline : v(textfield-outline-active);
27
+ outline : v(textfield-outline-active) !important; // important is needed, since the default &:focus selector would get a prio
28
28
  }
29
29
  }
30
30
 
@@ -236,12 +236,12 @@ const DefaultConfig = {
236
236
  useVdomWorker: true,
237
237
  /**
238
238
  * buildScripts/injectPackageVersion.mjs will update this value
239
- * @default '5.13.2'
239
+ * @default '5.13.4'
240
240
  * @memberOf! module:Neo
241
241
  * @name config.version
242
242
  * @type String
243
243
  */
244
- version: '5.13.2'
244
+ version: '5.13.4'
245
245
  };
246
246
 
247
247
  Object.assign(DefaultConfig, {
@@ -257,7 +257,8 @@ class Base extends Component {
257
257
  floating : true,
258
258
  hidden : true,
259
259
  items : value,
260
- parentComponent: me
260
+ parentComponent: me,
261
+ style : {left: '-5000px', top: '-5000px'}
261
262
  })
262
263
  })
263
264
  }
package/src/menu/List.mjs CHANGED
@@ -342,15 +342,49 @@ class List extends BaseList {
342
342
  onItemClick(node, data) {
343
343
  super.onItemClick(node, data);
344
344
 
345
- let me = this;
345
+ let me = this,
346
+ record = data.record;
346
347
 
347
- data.record.handler?.call(me, data);
348
+ record.handler?.call(me, record);
348
349
 
349
- if (me.hideOnLeafItemClick && !data.record.items) {
350
+ if (me.hideOnLeafItemClick && !record.items) {
350
351
  me.unmount()
351
352
  }
352
353
  }
353
354
 
355
+ /**
356
+ * @param {String} nodeId
357
+ */
358
+ onKeyDownEnter(nodeId) {
359
+ if (nodeId) {
360
+ let me = this,
361
+ recordId = me.getItemRecordId(nodeId),
362
+ record = me.store.get(recordId),
363
+ submenu;
364
+
365
+ record.handler?.call(me, record);
366
+
367
+ if (me.hideOnLeafItemClick && !record.items) {
368
+ me.unmount()
369
+ }
370
+
371
+ if (record.items) {
372
+ submenu = me.subMenuMap[me.getMenuMapId(recordId)];
373
+
374
+ if (submenu) {
375
+ me.toggleSubMenu(nodeId, record)
376
+ }
377
+ }
378
+ }
379
+ }
380
+
381
+ /**
382
+ * @param {Object} data
383
+ */
384
+ onKeyDownEscape(data) {
385
+ this.floating && this.unmount()
386
+ }
387
+
354
388
  /**
355
389
  * @param {String[]} items
356
390
  */
@@ -415,6 +449,22 @@ class List extends BaseList {
415
449
  });
416
450
  }
417
451
 
452
+ /**
453
+ * @param {String} nodeId
454
+ * @param {Object} record
455
+ */
456
+ toggleSubMenu(nodeId, record) {
457
+ let me = this,
458
+ recordId = record[me.getKeyProperty()],
459
+ submenu = me.subMenuMap[me.getMenuMapId(recordId)];
460
+
461
+ if (!submenu?.mounted) {
462
+ me.showSubMenu(nodeId, record)
463
+ } else {
464
+ me.hideSubMenu()
465
+ }
466
+ }
467
+
418
468
  /**
419
469
  *
420
470
  */
@@ -70,14 +70,12 @@ class CircleModel extends Model {
70
70
  id = me.id,
71
71
  view = me.view;
72
72
 
73
- if (view.keys) {
74
- view.keys._keys.push(
75
- {fn: 'onKeyDownLeft' ,key: 'Down' ,scope: id},
76
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
77
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
78
- {fn: 'onKeyDownRight' ,key: 'Up' ,scope: id}
79
- );
80
- }
73
+ view.keys?._keys.push(
74
+ {fn: 'onKeyDownLeft' ,key: 'Down' ,scope: id},
75
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
76
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
77
+ {fn: 'onKeyDownRight' ,key: 'Up' ,scope: id}
78
+ );
81
79
  }
82
80
 
83
81
  /**
@@ -88,14 +86,12 @@ class CircleModel extends Model {
88
86
  id = me.id,
89
87
  view = me.view;
90
88
 
91
- if (view.keys) {
92
- view.keys.removeKeys([
93
- {fn: 'onKeyDownLeft' ,key: 'Down' ,scope: id},
94
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
95
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
96
- {fn: 'onKeyDownRight' ,key: 'Up' ,scope: id}
97
- ]);
98
- }
89
+ view.keys?.removeKeys([
90
+ {fn: 'onKeyDownLeft' ,key: 'Down' ,scope: id},
91
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
92
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
93
+ {fn: 'onKeyDownRight' ,key: 'Up' ,scope: id}
94
+ ]);
99
95
 
100
96
  super.unregister();
101
97
  }
@@ -141,14 +141,12 @@ class DateSelectorModel extends Model {
141
141
  scope = {scope: me.id},
142
142
  view = me.view;
143
143
 
144
- if (view.keys) {
145
- view.keys._keys.push(
146
- {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
147
- {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
148
- {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
149
- {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
150
- );
151
- }
144
+ view.keys?._keys.push(
145
+ {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
146
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
147
+ {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
148
+ {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
149
+ );
152
150
  }
153
151
 
154
152
  /**
@@ -159,14 +157,12 @@ class DateSelectorModel extends Model {
159
157
  scope = {scope: me.id},
160
158
  view = me.view;
161
159
 
162
- if (view.keys) {
163
- view.keys.removeKeys([
164
- {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
165
- {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
166
- {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
167
- {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
168
- ]);
169
- }
160
+ view.keys?.removeKeys([
161
+ {fn: 'onKeyDownDown' ,key: 'Down' ,...scope},
162
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,...scope},
163
+ {fn: 'onKeyDownRight' ,key: 'Right' ,...scope},
164
+ {fn: 'onKeyDownUp' ,key: 'Up' ,...scope}
165
+ ]);
170
166
 
171
167
  super.unregister();
172
168
  }
@@ -210,14 +210,12 @@ class GalleryModel extends Model {
210
210
  scope : me
211
211
  });
212
212
 
213
- if (view.keys) {
214
- view.keys._keys.push(
215
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
216
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
217
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
218
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
219
- );
220
- }
213
+ view.keys?._keys.push(
214
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
215
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
216
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
217
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
218
+ );
221
219
  }
222
220
 
223
221
  /**
@@ -286,14 +284,12 @@ class GalleryModel extends Model {
286
284
  id = me.id,
287
285
  view = me.view;
288
286
 
289
- if (view.keys) {
290
- view.keys.removeKeys([
291
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
292
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
293
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
294
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
295
- ]);
296
- }
287
+ view.keys?.removeKeys([
288
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
289
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
290
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
291
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
292
+ ]);
297
293
 
298
294
  super.unregister();
299
295
  }
@@ -206,14 +206,12 @@ class HelixModel extends Model {
206
206
  scope : me
207
207
  });
208
208
 
209
- if (view.keys) {
210
- view.keys._keys.push(
211
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
212
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
213
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
214
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
215
- );
216
- }
209
+ view.keys?._keys.push(
210
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
211
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
212
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
213
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
214
+ );
217
215
  }
218
216
 
219
217
  /**
@@ -290,14 +288,12 @@ class HelixModel extends Model {
290
288
  id = me.id,
291
289
  view = me.view;
292
290
 
293
- if (view.keys) {
294
- view.keys.removeKeys([
295
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
296
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
297
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
298
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
299
- ]);
300
- }
291
+ view.keys?.removeKeys([
292
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
293
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
294
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
295
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
296
+ ]);
301
297
 
302
298
  super.unregister();
303
299
  }
@@ -38,6 +38,12 @@ class ListModel extends Model {
38
38
  !view.disableSelection && view.onKeyDownEnter?.(this.getSelection()[0]);
39
39
  }
40
40
 
41
+ /**
42
+ * Placeholder method to get overridden by class extension list menu.ListModel
43
+ * @param {Object} data
44
+ */
45
+ onKeyDownEscape(data) {}
46
+
41
47
  /**
42
48
  * @param {Object} data
43
49
  */
@@ -136,11 +142,12 @@ class ListModel extends Model {
136
142
  view = me.view;
137
143
 
138
144
  view.keys?._keys.push(
139
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
140
- {fn: 'onKeyDownEnter' ,key: 'Enter' ,scope: id},
141
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
142
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
143
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
145
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
146
+ {fn: 'onKeyDownEnter' ,key: 'Enter' ,scope: id},
147
+ {fn: 'onKeyDownEscape' ,key: 'Escape' ,scope: id},
148
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
149
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
150
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
144
151
  );
145
152
  }
146
153
 
@@ -167,11 +174,12 @@ class ListModel extends Model {
167
174
  view = me.view;
168
175
 
169
176
  view.keys?.removeKeys([
170
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
171
- {fn: 'onKeyDownEnter' ,key: 'Enter' ,scope: id},
172
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
173
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
174
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
177
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
178
+ {fn: 'onKeyDownEnter' ,key: 'Enter' ,scope: id},
179
+ {fn: 'onKeyDownEscape' ,key: 'Escape' ,scope: id},
180
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
181
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
182
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
175
183
  ]);
176
184
 
177
185
  super.unregister();
@@ -18,6 +18,13 @@ class ListModel extends BaseListModel {
18
18
  ntype: 'selection-menu-listmodel'
19
19
  }
20
20
 
21
+ /**
22
+ * @param {Object} data
23
+ */
24
+ onKeyDownEscape(data) {
25
+ this.view.onKeyDownEscape(data)
26
+ }
27
+
21
28
  /**
22
29
  * @param {Object} data
23
30
  */
@@ -145,14 +145,12 @@ class CellModel extends Model {
145
145
  id = me.id,
146
146
  view = me.view;
147
147
 
148
- if (view.keys) {
149
- view.keys._keys.push(
150
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
151
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
152
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
153
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
154
- );
155
- }
148
+ view.keys?._keys.push(
149
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
150
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
151
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
152
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
153
+ );
156
154
  }
157
155
 
158
156
  /**
@@ -163,14 +161,12 @@ class CellModel extends Model {
163
161
  id = me.id,
164
162
  view = me.view;
165
163
 
166
- if (view.keys) {
167
- view.keys.removeKeys([
168
- {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
169
- {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
170
- {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
171
- {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
172
- ]);
173
- }
164
+ view.keys?.removeKeys([
165
+ {fn: 'onKeyDownDown' ,key: 'Down' ,scope: id},
166
+ {fn: 'onKeyDownLeft' ,key: 'Left' ,scope: id},
167
+ {fn: 'onKeyDownRight' ,key: 'Right' ,scope: id},
168
+ {fn: 'onKeyDownUp' ,key: 'Up' ,scope: id}
169
+ ]);
174
170
 
175
171
  super.unregister();
176
172
  }
@@ -139,17 +139,10 @@ class ColumnModel extends Model {
139
139
  id = me.id,
140
140
  view = me.view;
141
141
 
142
- if (view.keys) {
143
- view.keys._keys.push({
144
- fn : 'onKeyDownLeft',
145
- key : 'Left',
146
- scope: id
147
- }, {
148
- fn : 'onKeyDownRight',
149
- key : 'Right',
150
- scope: id
151
- });
152
- }
142
+ view.keys?._keys.push(
143
+ {fn: 'onKeyDownLeft', key: 'Left', scope: id},
144
+ {fn: 'onKeyDownRight', key: 'Right', scope: id}
145
+ );
153
146
  }
154
147
 
155
148
 
@@ -161,17 +154,10 @@ class ColumnModel extends Model {
161
154
  id = me.id,
162
155
  view = me.view;
163
156
 
164
- if (view.keys) {
165
- view.keys.removeKeys([{
166
- fn : 'onKeyDownLeft',
167
- key : 'Left',
168
- scope: id
169
- }, {
170
- fn : 'onKeyDownRight',
171
- key : 'Right',
172
- scope: id
173
- }]);
174
- }
157
+ view.keys?.removeKeys([
158
+ {fn: 'onKeyDownLeft', key: 'Left', scope: id},
159
+ {fn: 'onKeyDownRight', key: 'Right', scope: id}
160
+ ]);
175
161
 
176
162
  super.unregister();
177
163
  }
@@ -148,15 +148,10 @@ class RowModel extends Model {
148
148
  let id = this.id,
149
149
  view = this.view;
150
150
 
151
- view.keys?._keys.push({
152
- fn : 'onKeyDownDown',
153
- key : 'Down',
154
- scope: id
155
- }, {
156
- fn : 'onKeyDownUp',
157
- key : 'Up',
158
- scope: id
159
- });
151
+ view.keys?._keys.push(
152
+ {fn: 'onKeyDownDown', key: 'Down', scope: id},
153
+ {fn: 'onKeyDownUp', key: 'Up', scope: id}
154
+ );
160
155
  }
161
156
 
162
157
  /**
@@ -166,15 +161,10 @@ class RowModel extends Model {
166
161
  let id = this.id,
167
162
  view = this.view;
168
163
 
169
- view.keys?.removeKeys([{
170
- fn : 'onKeyDownDown',
171
- key : 'Down',
172
- scope: id
173
- }, {
174
- fn : 'onKeyDownUp',
175
- key : 'Up',
176
- scope: id
177
- }]);
164
+ view.keys?.removeKeys([
165
+ {fn: 'onKeyDownDown', key: 'Down', scope: id},
166
+ {fn: 'onKeyDownUp', key: 'Up', scope: id}
167
+ ]);
178
168
 
179
169
  super.unregister();
180
170
  }
@@ -62,7 +62,7 @@ class View extends Component {
62
62
  vdom = me.vdom,
63
63
  cellConfig, rendererOutput;
64
64
 
65
- if (fieldValue === undefined) {
65
+ if (fieldValue === null || fieldValue === undefined) {
66
66
  fieldValue = ''
67
67
  }
68
68