neo.mjs 7.16.0 → 8.0.0-alpha.1
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.
- package/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/view/ViewportController.mjs +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/realworld/view/HomeComponent.mjs +13 -14
- package/apps/realworld/view/user/ProfileComponent.mjs +1 -1
- package/apps/realworld/view/user/SignUpComponent.mjs +1 -2
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/table/container/MainContainer.mjs +17 -12
- package/examples/table/nestedRecordFields/MainContainer.mjs +3 -1
- package/examples/todoList/version1/MainComponent.mjs +1 -1
- package/package.json +5 -5
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +8 -8
- package/src/calendar/view/SettingsContainer.mjs +4 -0
- package/src/calendar/view/calendars/ColorsList.mjs +6 -6
- package/src/calendar/view/calendars/Container.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +6 -2
- package/src/calendar/view/month/Component.mjs +1 -1
- package/src/calendar/view/week/Component.mjs +7 -7
- package/src/calendar/view/week/EventDragZone.mjs +1 -1
- package/src/calendar/view/week/TimeAxisComponent.mjs +2 -2
- package/src/calendar/view/week/plugin/DragDrop.mjs +3 -3
- package/src/collection/Base.mjs +4 -3
- package/src/component/Base.mjs +81 -36
- package/src/component/Circle.mjs +1 -3
- package/src/component/DateSelector.mjs +1 -1
- package/src/container/Accordion.mjs +1 -1
- package/src/container/Base.mjs +18 -6
- package/src/core/Base.mjs +10 -9
- package/src/draggable/list/DragZone.mjs +1 -1
- package/src/draggable/toolbar/DragZone.mjs +1 -1
- package/src/draggable/toolbar/SortZone.mjs +1 -1
- package/src/draggable/tree/DragZone.mjs +1 -1
- package/src/form/Fieldset.mjs +2 -0
- package/src/form/field/Color.mjs +4 -4
- package/src/form/field/ComboBox.mjs +2 -2
- package/src/form/field/Date.mjs +2 -1
- package/src/form/field/Picker.mjs +2 -1
- package/src/form/field/Text.mjs +8 -8
- package/src/layout/Card.mjs +1 -0
- package/src/list/Chip.mjs +3 -2
- package/src/list/Circle.mjs +2 -1
- package/src/list/Component.mjs +5 -0
- package/src/manager/Component.mjs +158 -4
- package/src/manager/DomEvent.mjs +2 -2
- package/src/menu/List.mjs +3 -4
- package/src/menu/Panel.mjs +1 -1
- package/src/selection/Model.mjs +1 -1
- package/src/selection/grid/BaseModel.mjs +61 -0
- package/src/selection/grid/CellColumnModel.mjs +2 -2
- package/src/selection/grid/CellColumnRowModel.mjs +2 -2
- package/src/selection/grid/CellModel.mjs +4 -4
- package/src/selection/grid/CellRowModel.mjs +9 -3
- package/src/selection/grid/ColumnModel.mjs +15 -26
- package/src/selection/grid/RowModel.mjs +15 -25
- package/src/selection/table/BaseModel.mjs +61 -0
- package/src/selection/table/CellColumnModel.mjs +2 -2
- package/src/selection/table/CellColumnRowModel.mjs +2 -2
- package/src/selection/table/CellModel.mjs +4 -4
- package/src/selection/table/CellRowModel.mjs +9 -3
- package/src/selection/table/ColumnModel.mjs +7 -8
- package/src/selection/table/RowModel.mjs +7 -7
- package/src/table/Container.mjs +1 -0
- package/src/table/View.mjs +102 -80
- package/src/table/header/Button.mjs +3 -5
- package/src/table/header/Toolbar.mjs +1 -0
- package/src/tree/List.mjs +1 -1
- package/src/util/VDom.mjs +42 -11
- package/src/util/VNode.mjs +33 -11
- package/src/vdom/Helper.mjs +36 -16
- package/src/vdom/VNode.mjs +1 -1
package/src/util/VNode.mjs
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
import Base
|
1
|
+
import Base from '../core/Base.mjs';
|
2
|
+
import ComponentManager from '../manager/Component.mjs';
|
2
3
|
|
3
4
|
/**
|
4
5
|
* @class Neo.util.VNode
|
@@ -25,6 +26,8 @@ class VNode extends Base {
|
|
25
26
|
* {Object} vnode
|
26
27
|
*/
|
27
28
|
static findChildVnode(vnode, opts, index, parentNode) {
|
29
|
+
vnode = VNode.getVnode(vnode);
|
30
|
+
|
28
31
|
index = index || 0;
|
29
32
|
opts = typeof opts !== 'string' ? opts : {id: opts};
|
30
33
|
|
@@ -112,6 +115,8 @@ class VNode extends Base {
|
|
112
115
|
* @returns {Object|null} child vnode or null
|
113
116
|
*/
|
114
117
|
static findChildVnodeById(vnode, id) {
|
118
|
+
vnode = VNode.getVnode(vnode);
|
119
|
+
|
115
120
|
let childNodes = vnode.childNodes || [],
|
116
121
|
i = 0,
|
117
122
|
len = childNodes.length,
|
@@ -122,7 +127,7 @@ class VNode extends Base {
|
|
122
127
|
}
|
123
128
|
|
124
129
|
for (; i < len; i++) {
|
125
|
-
childNode = childNodes[i];
|
130
|
+
childNode = VNode.getVnode(childNodes[i]);
|
126
131
|
|
127
132
|
if (childNode.id === id) {
|
128
133
|
return childNode
|
@@ -139,25 +144,38 @@ class VNode extends Base {
|
|
139
144
|
}
|
140
145
|
|
141
146
|
/**
|
142
|
-
* Get the ids of all child nodes of the given vnode
|
143
|
-
* @param vnode
|
144
|
-
* @param [childIds=[]
|
145
|
-
* @returns {
|
147
|
+
* Get the ids of all child nodes of the given vnode, excluding component references
|
148
|
+
* @param {Object} vnode
|
149
|
+
* @param {String[]} childIds=[]
|
150
|
+
* @returns {String[]} childIds
|
146
151
|
*/
|
147
152
|
static getChildIds(vnode, childIds=[]) {
|
148
|
-
let childNodes = vnode
|
153
|
+
let childNodes = vnode?.childNodes || [];
|
149
154
|
|
150
155
|
childNodes.forEach(childNode => {
|
151
|
-
if (childNode.id) {
|
156
|
+
if (childNode.id && !childNode.componentId) {
|
152
157
|
childIds.push(childNode.id)
|
153
158
|
}
|
154
159
|
|
155
|
-
|
160
|
+
VNode.getChildIds(childNode, childIds)
|
156
161
|
});
|
157
162
|
|
158
163
|
return childIds
|
159
164
|
}
|
160
165
|
|
166
|
+
/**
|
167
|
+
* Convenience shortcut using manager.Component to replace vnode references if needed
|
168
|
+
* @param {Object} vnode
|
169
|
+
* @returns {Object}
|
170
|
+
*/
|
171
|
+
static getVnode(vnode) {
|
172
|
+
if (vnode.componentId) {
|
173
|
+
vnode = ComponentManager.get(vnode.componentId).vnode
|
174
|
+
}
|
175
|
+
|
176
|
+
return vnode
|
177
|
+
}
|
178
|
+
|
161
179
|
/**
|
162
180
|
* Removes a child vnode inside a vnode tree by a given id
|
163
181
|
* @param {Object} vnode
|
@@ -165,6 +183,8 @@ class VNode extends Base {
|
|
165
183
|
* @returns {Boolean} true in case the node was found and removed
|
166
184
|
*/
|
167
185
|
static removeChildVnode(vnode, id) {
|
186
|
+
vnode = VNode.getVnode(vnode);
|
187
|
+
|
168
188
|
let childNodes = vnode.childNodes || [],
|
169
189
|
i = 0,
|
170
190
|
len = childNodes.length,
|
@@ -175,7 +195,7 @@ class VNode extends Base {
|
|
175
195
|
}
|
176
196
|
|
177
197
|
for (; i < len; i++) {
|
178
|
-
childNode = childNodes[i];
|
198
|
+
childNode = VNode.getVnode(childNodes[i]);
|
179
199
|
|
180
200
|
if (childNode.id === id) {
|
181
201
|
childNodes.splice(i, 1);
|
@@ -198,6 +218,8 @@ class VNode extends Base {
|
|
198
218
|
* @returns {Boolean} true in case the node was found and replaced
|
199
219
|
*/
|
200
220
|
static replaceChildVnode(vnode, id, newChildVnode) {
|
221
|
+
vnode = VNode.getVnode(vnode);
|
222
|
+
|
201
223
|
let childNodes = vnode.childNodes || [],
|
202
224
|
i = 0,
|
203
225
|
len = childNodes.length,
|
@@ -208,7 +230,7 @@ class VNode extends Base {
|
|
208
230
|
}
|
209
231
|
|
210
232
|
for (; i < len; i++) {
|
211
|
-
childNode = childNodes[i];
|
233
|
+
childNode = VNode.getVnode(childNodes[i]);
|
212
234
|
|
213
235
|
if (childNode.id === id) {
|
214
236
|
childNodes[i] = newChildVnode;
|
package/src/vdom/Helper.mjs
CHANGED
@@ -132,6 +132,10 @@ class Helper extends Base {
|
|
132
132
|
let {deltas, oldVnode, vnode, vnodeMap} = config,
|
133
133
|
attributes, delta, value, keys, styles, add, remove;
|
134
134
|
|
135
|
+
if (oldVnode.componentId && (oldVnode.id === vnode.id || oldVnode.componentId === vnode.id)) {
|
136
|
+
return deltas
|
137
|
+
}
|
138
|
+
|
135
139
|
if (vnode.vtype === 'text' && vnode.innerHTML !== oldVnode.innerHTML) {
|
136
140
|
deltas.default.push({
|
137
141
|
action : 'updateVtext',
|
@@ -233,7 +237,7 @@ class Helper extends Base {
|
|
233
237
|
*/
|
234
238
|
createDeltas(config) {
|
235
239
|
let {deltas={default: [], remove: []}, oldVnode, vnode} = config,
|
236
|
-
oldVnodeId = oldVnode?.id,
|
240
|
+
oldVnodeId = oldVnode?.id || oldVnode?.componentId,
|
237
241
|
vnodeId = vnode?.id;
|
238
242
|
|
239
243
|
// Edge case: setting `removeDom: true` on a top-level vdom node
|
@@ -259,7 +263,7 @@ class Helper extends Base {
|
|
259
263
|
indexDelta = 0,
|
260
264
|
insertDelta = 0,
|
261
265
|
len = Math.max(childNodes.length, oldChildNodes.length),
|
262
|
-
childNode, nodeInNewTree, oldChildNode;
|
266
|
+
childNode, nodeInNewTree, oldChildNode, oldChildNodeId;
|
263
267
|
|
264
268
|
me.compareAttributes({deltas, oldVnode, vnode, vnodeMap});
|
265
269
|
|
@@ -285,7 +289,8 @@ class Helper extends Base {
|
|
285
289
|
}
|
286
290
|
|
287
291
|
if (oldChildNode) {
|
288
|
-
|
292
|
+
oldChildNodeId = oldChildNode.id || oldChildNode.componentId;
|
293
|
+
nodeInNewTree = vnodeMap.get(oldChildNodeId);
|
289
294
|
|
290
295
|
// Remove node, if no longer inside the new tree
|
291
296
|
if (!nodeInNewTree) {
|
@@ -310,7 +315,7 @@ class Helper extends Base {
|
|
310
315
|
me.insertNode({deltas, index: i + insertDelta, oldVnodeMap, vnode: childNode, vnodeMap});
|
311
316
|
}
|
312
317
|
|
313
|
-
if (oldChildNode && vnodeId === vnodeMap.get(
|
318
|
+
if (oldChildNode && vnodeId === vnodeMap.get(oldChildNodeId)?.parentNode.id) {
|
314
319
|
len++;
|
315
320
|
}
|
316
321
|
}
|
@@ -432,6 +437,15 @@ class Helper extends Base {
|
|
432
437
|
* @returns {Object|Neo.vdom.VNode|null}
|
433
438
|
*/
|
434
439
|
createVnode(opts) {
|
440
|
+
// do not create vnode instances for component reference objects
|
441
|
+
if (opts.componentId) {
|
442
|
+
if (!opts.id) {
|
443
|
+
opts.id = opts.componentId
|
444
|
+
}
|
445
|
+
|
446
|
+
return opts
|
447
|
+
}
|
448
|
+
|
435
449
|
if (opts.removeDom === true) {
|
436
450
|
return null
|
437
451
|
}
|
@@ -516,11 +530,10 @@ class Helper extends Base {
|
|
516
530
|
hasUnit = value != parseInt(value);
|
517
531
|
node.style[key] = value + (hasUnit ? '' : 'px');
|
518
532
|
break
|
533
|
+
case 'componentId':
|
519
534
|
case 'id':
|
520
|
-
node.id = value;
|
521
|
-
break
|
522
535
|
case 'static':
|
523
|
-
node
|
536
|
+
node[key] = value;
|
524
537
|
break
|
525
538
|
case 'style':
|
526
539
|
style = node.style;
|
@@ -557,13 +570,17 @@ class Helper extends Base {
|
|
557
570
|
*/
|
558
571
|
createVnodeMap(config) {
|
559
572
|
let {vnode, parentNode=null, index=0, map=new Map()} = config,
|
560
|
-
id
|
573
|
+
id;
|
561
574
|
|
562
|
-
|
575
|
+
if (vnode) {
|
576
|
+
id = vnode.id || vnode.componentId;
|
563
577
|
|
564
|
-
|
565
|
-
|
566
|
-
|
578
|
+
map.set(id, {id, index, parentNode, vnode});
|
579
|
+
|
580
|
+
vnode.childNodes?.forEach((childNode, index) => {
|
581
|
+
this.createVnodeMap({vnode: childNode, parentNode: vnode, index, map})
|
582
|
+
});
|
583
|
+
}
|
567
584
|
|
568
585
|
return map
|
569
586
|
}
|
@@ -588,7 +605,7 @@ class Helper extends Base {
|
|
588
605
|
if (currentNode) {
|
589
606
|
movedNodes.set(id, vnodeMap.get(id))
|
590
607
|
} else {
|
591
|
-
vnode.childNodes
|
608
|
+
vnode.childNodes?.forEach(childNode => {
|
592
609
|
if (childNode.vtype !== 'text') {
|
593
610
|
this.findMovedNodes({movedNodes, oldVnodeMap, vnode: childNode, vnodeMap})
|
594
611
|
}
|
@@ -677,9 +694,12 @@ class Helper extends Base {
|
|
677
694
|
* @param {Neo.vdom.VNode} config.oldVnode
|
678
695
|
* @param {Map} config.oldVnodeMap
|
679
696
|
*/
|
680
|
-
removeNode(
|
681
|
-
|
682
|
-
|
697
|
+
removeNode({deltas, oldVnode, oldVnodeMap}) {
|
698
|
+
if (oldVnode.componentId && !oldVnode.id) {
|
699
|
+
oldVnode.id = oldVnode.componentId
|
700
|
+
}
|
701
|
+
|
702
|
+
let delta = {action: 'removeNode', id: oldVnode.id},
|
683
703
|
{parentNode} = oldVnodeMap.get(oldVnode.id);
|
684
704
|
|
685
705
|
if (oldVnode.vtype === 'text') {
|