@solidjs/web 2.0.0-beta.13 → 2.0.0-beta.15
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/dist/dev.cjs +246 -89
- package/dist/dev.js +242 -89
- package/dist/server.cjs +41 -1
- package/dist/server.js +32 -1
- package/dist/web.cjs +246 -89
- package/dist/web.js +242 -89
- package/package.json +3 -3
- package/types/client.d.ts +25 -12
- package/types/jsx-properties.d.ts +1 -0
- package/types/jsx.d.ts +55 -9
- package/types/server.d.ts +26 -7
- package/types-cjs/client.d.cts +25 -12
- package/types-cjs/jsx-properties.d.cts +1 -0
- package/types-cjs/jsx.d.cts +55 -9
- package/types-cjs/server.d.cts +26 -7
package/dist/web.cjs
CHANGED
|
@@ -31,6 +31,8 @@ const DOMWithState = {
|
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
const ChildProperties = /*#__PURE__*/new Set(["innerHTML", "textContent", "innerText", "children"]);
|
|
34
|
+
const $$SLOT = /*#__PURE__*/Symbol("slot");
|
|
35
|
+
const $$HOST = /*#__PURE__*/Symbol("host");
|
|
34
36
|
const DelegatedEvents = /*#__PURE__*/new Set(["beforeinput", "click", "dblclick", "contextmenu", "focusin", "focusout", "input", "keydown", "keyup", "mousedown", "mousemove", "mouseout", "mouseover", "mouseup", "pointerdown", "pointermove", "pointerout", "pointerover", "pointerup", "touchend", "touchmove", "touchstart"]);
|
|
35
37
|
const SVGElements = /*#__PURE__*/new Set([
|
|
36
38
|
"altGlyph", "altGlyphDef", "altGlyphItem", "animate", "animateColor", "animateMotion", "animateTransform", "circle", "clipPath", "color-profile", "cursor", "defs", "desc", "ellipse", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "filter", "font", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignObject", "g", "glyph", "glyphRef", "hkern", "image", "line", "linearGradient", "marker", "mask", "metadata", "missing-glyph", "mpath", "path", "pattern", "polygon", "polyline", "radialGradient", "rect",
|
|
@@ -64,14 +66,18 @@ const effect = (fn, effectFn, options) => solidJs.createRenderEffect(fn, effectF
|
|
|
64
66
|
} : transparentOptions);
|
|
65
67
|
const memo = fn => solidJs.createMemo(() => fn(), syncOptions);
|
|
66
68
|
|
|
67
|
-
function reconcileArrays(parentNode, a, b) {
|
|
69
|
+
function reconcileArrays(parentNode, a, b, marker) {
|
|
68
70
|
let bLength = b.length,
|
|
69
71
|
aEnd = a.length,
|
|
70
72
|
bEnd = bLength,
|
|
71
73
|
aStart = 0,
|
|
72
74
|
bStart = 0,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
tail = a[aEnd - 1],
|
|
76
|
+
tailTag = tail[$$SLOT],
|
|
77
|
+
after = tail.parentNode === parentNode && (!tailTag || tailTag === marker) ? tail.nextSibling : marker || null,
|
|
78
|
+
map = null,
|
|
79
|
+
anchor,
|
|
80
|
+
anchorTag;
|
|
75
81
|
while (aStart < aEnd || bStart < bEnd) {
|
|
76
82
|
if (a[aStart] === b[bStart]) {
|
|
77
83
|
aStart++;
|
|
@@ -83,20 +89,43 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
83
89
|
bEnd--;
|
|
84
90
|
}
|
|
85
91
|
if (aEnd === aStart) {
|
|
86
|
-
|
|
87
|
-
|
|
92
|
+
let node;
|
|
93
|
+
if (bEnd < bLength) {
|
|
94
|
+
if (bStart) {
|
|
95
|
+
const prev = b[bStart - 1];
|
|
96
|
+
const prevTag = prev[$$SLOT];
|
|
97
|
+
node = prev.parentNode === parentNode && (!prevTag || prevTag === marker) ? prev.nextSibling : after;
|
|
98
|
+
} else node = b[bEnd - bStart];
|
|
99
|
+
} else node = after;
|
|
100
|
+
while (bStart < bEnd) {
|
|
101
|
+
const n = b[bStart++];
|
|
102
|
+
parentNode.insertBefore(n, node);
|
|
103
|
+
if (marker) n[$$SLOT] = marker;
|
|
104
|
+
}
|
|
88
105
|
} else if (bEnd === bStart) {
|
|
89
106
|
while (aStart < aEnd) {
|
|
90
|
-
|
|
91
|
-
|
|
107
|
+
const n = a[aStart++];
|
|
108
|
+
if (!map || !map.has(n)) {
|
|
109
|
+
const tag = n[$$SLOT];
|
|
110
|
+
if (n.parentNode === parentNode && (!tag || tag === marker)) n.remove();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
} else if ((anchor = a[aStart]) === b[bEnd - 1] && b[bStart] === a[aEnd - 1] && anchor.parentNode === parentNode && (!(anchorTag = anchor[$$SLOT]) || anchorTag === marker)) {
|
|
114
|
+
if (marker) {
|
|
115
|
+
do {
|
|
116
|
+
const n = a[--aEnd];
|
|
117
|
+
parentNode.insertBefore(n, anchor);
|
|
118
|
+
n[$$SLOT] = marker;
|
|
119
|
+
bStart++;
|
|
120
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
121
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
122
|
+
} else {
|
|
123
|
+
do {
|
|
124
|
+
parentNode.insertBefore(a[--aEnd], anchor);
|
|
125
|
+
bStart++;
|
|
126
|
+
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
127
|
+
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
92
128
|
}
|
|
93
|
-
} else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
|
|
94
|
-
const anchor = a[aStart];
|
|
95
|
-
do {
|
|
96
|
-
parentNode.insertBefore(a[--aEnd], anchor);
|
|
97
|
-
bStart++;
|
|
98
|
-
if (aStart >= aEnd - 1 || bStart >= bEnd) break;
|
|
99
|
-
} while (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]);
|
|
100
129
|
} else {
|
|
101
130
|
if (!map) {
|
|
102
131
|
map = new Map();
|
|
@@ -114,33 +143,63 @@ function reconcileArrays(parentNode, a, b) {
|
|
|
114
143
|
sequence++;
|
|
115
144
|
}
|
|
116
145
|
if (sequence > index - bStart) {
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
146
|
+
const head = a[aStart];
|
|
147
|
+
const headTag = head[$$SLOT];
|
|
148
|
+
const node = head.parentNode === parentNode && (!headTag || headTag === marker) ? head : after;
|
|
149
|
+
while (bStart < index) {
|
|
150
|
+
const n = b[bStart++];
|
|
151
|
+
parentNode.insertBefore(n, node);
|
|
152
|
+
if (marker) n[$$SLOT] = marker;
|
|
153
|
+
}
|
|
154
|
+
} else {
|
|
155
|
+
const oldNode = a[aStart++];
|
|
156
|
+
const newNode = b[bStart++];
|
|
157
|
+
const oldTag = oldNode[$$SLOT];
|
|
158
|
+
if (oldNode.parentNode === parentNode && (!oldTag || oldTag === marker)) {
|
|
159
|
+
parentNode.replaceChild(newNode, oldNode);
|
|
160
|
+
} else {
|
|
161
|
+
parentNode.insertBefore(newNode, after);
|
|
162
|
+
}
|
|
163
|
+
if (marker) newNode[$$SLOT] = marker;
|
|
164
|
+
}
|
|
120
165
|
} else aStart++;
|
|
121
|
-
} else
|
|
166
|
+
} else {
|
|
167
|
+
const n = a[aStart++];
|
|
168
|
+
const nTag = n[$$SLOT];
|
|
169
|
+
if (n.parentNode === parentNode && (!nTag || nTag === marker)) n.remove();
|
|
170
|
+
}
|
|
122
171
|
}
|
|
123
172
|
}
|
|
124
173
|
}
|
|
125
174
|
|
|
126
|
-
const $$
|
|
175
|
+
const $$EVENT_OWNER = "_$DX_EVENT_OWNER";
|
|
127
176
|
const INNER_OWNED = {};
|
|
177
|
+
const delegatedEvents = new Set();
|
|
178
|
+
const delegatedContainers = new Map();
|
|
128
179
|
function render$1(code, element, init, options = {}) {
|
|
129
180
|
let disposer;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
181
|
+
registerDelegatedRoot(element);
|
|
182
|
+
try {
|
|
183
|
+
solidJs.createRoot(dispose => {
|
|
184
|
+
disposer = dispose;
|
|
185
|
+
if (element === document) {
|
|
186
|
+
const tree = code();
|
|
187
|
+
effect(() => solidJs.flatten(tree), () => {});
|
|
188
|
+
} else {
|
|
189
|
+
const tree = code();
|
|
190
|
+
insert(element, () => tree, element.firstChild ? null : undefined, init, options.insertOptions);
|
|
191
|
+
}
|
|
192
|
+
}, {
|
|
193
|
+
id: options.renderId
|
|
194
|
+
});
|
|
195
|
+
} catch (err) {
|
|
196
|
+
if (disposer) disposer();
|
|
197
|
+
unregisterDelegatedRoot(element);
|
|
198
|
+
throw err;
|
|
199
|
+
}
|
|
142
200
|
return () => {
|
|
143
201
|
disposer();
|
|
202
|
+
unregisterDelegatedRoot(element);
|
|
144
203
|
element.textContent = "";
|
|
145
204
|
};
|
|
146
205
|
}
|
|
@@ -154,20 +213,66 @@ function template(html, flag) {
|
|
|
154
213
|
const fn = flag === 1 ? bypassGuard => document.importNode(node || (node = create(html, bypassGuard, flag)), true) : bypassGuard => (node || (node = create(html, bypassGuard, flag))).cloneNode(true);
|
|
155
214
|
return fn;
|
|
156
215
|
}
|
|
157
|
-
function delegateEvents(eventNames
|
|
158
|
-
const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());
|
|
216
|
+
function delegateEvents(eventNames) {
|
|
159
217
|
for (let i = 0, l = eventNames.length; i < l; i++) {
|
|
160
218
|
const name = eventNames[i];
|
|
161
|
-
if (!
|
|
162
|
-
|
|
163
|
-
|
|
219
|
+
if (!delegatedEvents.has(name)) {
|
|
220
|
+
delegatedEvents.add(name);
|
|
221
|
+
delegatedContainers.forEach((state, container) => attachDelegatedEvent(name, container, state));
|
|
164
222
|
}
|
|
165
223
|
}
|
|
166
224
|
}
|
|
167
|
-
function
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
225
|
+
function registerDelegatedRoot(root) {
|
|
226
|
+
const state = registerDelegatedContainer(root, root);
|
|
227
|
+
if (state) state.roots = (state.roots || 0) + 1;
|
|
228
|
+
}
|
|
229
|
+
function unregisterDelegatedRoot(root) {
|
|
230
|
+
const state = delegatedContainers.get(root);
|
|
231
|
+
if (state) state.roots > 1 ? state.roots-- : delete state.roots;
|
|
232
|
+
unregisterDelegatedContainer(root, root);
|
|
233
|
+
}
|
|
234
|
+
function registerDelegatedContainer(container, owner = container) {
|
|
235
|
+
if (!container || !owner) return;
|
|
236
|
+
let state = delegatedContainers.get(container);
|
|
237
|
+
if (!state) delegatedContainers.set(container, state = {
|
|
238
|
+
owners: new Map(),
|
|
239
|
+
handlers: new Map()
|
|
240
|
+
});
|
|
241
|
+
state.owners.set(owner, (state.owners.get(owner) || 0) + 1);
|
|
242
|
+
delegatedEvents.forEach(name => attachDelegatedEvent(name, container, state));
|
|
243
|
+
return state;
|
|
244
|
+
}
|
|
245
|
+
function unregisterDelegatedContainer(container, owner = container) {
|
|
246
|
+
const state = delegatedContainers.get(container);
|
|
247
|
+
if (!state) return;
|
|
248
|
+
const count = state.owners.get(owner);
|
|
249
|
+
if (count > 1) state.owners.set(owner, count - 1);else state.owners.delete(owner);
|
|
250
|
+
if (state.owners.size) return;
|
|
251
|
+
state.handlers.forEach((handler, name) => container.removeEventListener(name, handler));
|
|
252
|
+
delegatedContainers.delete(container);
|
|
253
|
+
}
|
|
254
|
+
function attachDelegatedEvent(name, container, state) {
|
|
255
|
+
if (state.handlers.has(name)) return;
|
|
256
|
+
const handler = e => eventHandler(e, container, state);
|
|
257
|
+
state.handlers.set(name, handler);
|
|
258
|
+
container.addEventListener(name, handler);
|
|
259
|
+
}
|
|
260
|
+
function getDelegatedRoot(node) {
|
|
261
|
+
while (node) {
|
|
262
|
+
if (delegatedContainers.get(node)?.roots) return node;
|
|
263
|
+
node = node._$host || node.parentNode || node.host;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function findOwner(target, state) {
|
|
267
|
+
let node = target;
|
|
268
|
+
let distance = 0;
|
|
269
|
+
while (node) {
|
|
270
|
+
if (state.owners.has(node)) return {
|
|
271
|
+
owner: node,
|
|
272
|
+
distance
|
|
273
|
+
};
|
|
274
|
+
distance++;
|
|
275
|
+
node = node._$host || node.parentNode || node.host;
|
|
171
276
|
}
|
|
172
277
|
}
|
|
173
278
|
function setProperty(node, name, value) {
|
|
@@ -212,7 +317,7 @@ function className(node, value, prev) {
|
|
|
212
317
|
node.classList.add(key);
|
|
213
318
|
}
|
|
214
319
|
}
|
|
215
|
-
function
|
|
320
|
+
function addEvent(node, name, handler, delegate) {
|
|
216
321
|
if (delegate) {
|
|
217
322
|
if (Array.isArray(handler)) {
|
|
218
323
|
node[`$$${name}`] = handler[0];
|
|
@@ -279,6 +384,7 @@ function ref(fn, element) {
|
|
|
279
384
|
}
|
|
280
385
|
function insert(parent, accessor, marker, initial, options) {
|
|
281
386
|
const multi = marker !== undefined;
|
|
387
|
+
const host = options && options.host;
|
|
282
388
|
if (multi && !initial) initial = [];
|
|
283
389
|
if (isHydrating(parent)) {
|
|
284
390
|
if (!multi && initial === undefined && parent) initial = [...parent.childNodes];
|
|
@@ -292,7 +398,11 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
292
398
|
}
|
|
293
399
|
if (typeof accessor !== "function") {
|
|
294
400
|
accessor = normalize(accessor, initial, multi, true);
|
|
295
|
-
if (typeof accessor !== "function")
|
|
401
|
+
if (typeof accessor !== "function") {
|
|
402
|
+
insertExpression(parent, accessor, initial, marker);
|
|
403
|
+
host && tagHost(accessor, host);
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
296
406
|
}
|
|
297
407
|
if (multi && initial.length === 0) {
|
|
298
408
|
const placeholder = document.createTextNode("");
|
|
@@ -306,6 +416,7 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
306
416
|
effect(() => normalize(value, current, multi), inner => {
|
|
307
417
|
insertExpression(parent, inner, current, marker);
|
|
308
418
|
current = inner;
|
|
419
|
+
host && tagHost(current, host);
|
|
309
420
|
}, prev !== undefined && !(options && options.schedule) ? {
|
|
310
421
|
...options,
|
|
311
422
|
schedule: true
|
|
@@ -315,6 +426,7 @@ function insert(parent, accessor, marker, initial, options) {
|
|
|
315
426
|
if (value === INNER_OWNED) return;
|
|
316
427
|
insertExpression(parent, value, current, marker);
|
|
317
428
|
current = value;
|
|
429
|
+
host && tagHost(current, host);
|
|
318
430
|
}, options);
|
|
319
431
|
}
|
|
320
432
|
function assign(node, props, skipChildren, prevProps = {}, skipRef = false) {
|
|
@@ -462,7 +574,17 @@ function runHydrationEvents() {
|
|
|
462
574
|
const [el, e] = events[0];
|
|
463
575
|
if (!completed.has(el)) return;
|
|
464
576
|
events.shift();
|
|
465
|
-
|
|
577
|
+
let match;
|
|
578
|
+
for (const [container, state] of delegatedContainers) {
|
|
579
|
+
if (!state.handlers.has(e.type)) continue;
|
|
580
|
+
const entry = findOwner(e.target, state);
|
|
581
|
+
if (entry && (!match || entry.distance < match.distance)) match = {
|
|
582
|
+
container,
|
|
583
|
+
state,
|
|
584
|
+
distance: entry.distance
|
|
585
|
+
};
|
|
586
|
+
}
|
|
587
|
+
if (match) eventHandler(e, match.container, match.state);
|
|
466
588
|
}
|
|
467
589
|
if (solidJs.sharedConfig.done) {
|
|
468
590
|
solidJs.sharedConfig.events = _$HY.events = null;
|
|
@@ -517,7 +639,7 @@ function assignProp(node, prop, value, prev, skipRef, nodeName) {
|
|
|
517
639
|
node.removeEventListener(name, h);
|
|
518
640
|
}
|
|
519
641
|
if (delegate || value) {
|
|
520
|
-
|
|
642
|
+
addEvent(node, name, value, delegate);
|
|
521
643
|
delegate && delegateEvents([name]);
|
|
522
644
|
}
|
|
523
645
|
} else if (hasNamespace && prop.slice(0, 5) === "prop:" || ChildProperties.has(prop) || DOMWithState[nodeName]?.[prop]) {
|
|
@@ -529,14 +651,18 @@ function assignProp(node, prop, value, prev, skipRef, nodeName) {
|
|
|
529
651
|
}
|
|
530
652
|
return value;
|
|
531
653
|
}
|
|
532
|
-
function eventHandler(e) {
|
|
654
|
+
function eventHandler(e, container, state) {
|
|
533
655
|
if (solidJs.sharedConfig.registry && solidJs.sharedConfig.events) {
|
|
534
656
|
if (solidJs.sharedConfig.events.find(([el, ev]) => ev === e)) return;
|
|
535
657
|
}
|
|
658
|
+
if (e[$$EVENT_OWNER]) return;
|
|
659
|
+
const owner = state && (state.owners.size === 1 && state.owners.has(container) ? container : findOwner(e.target, state)?.owner);
|
|
660
|
+
if (state && !owner) return;
|
|
661
|
+
e[$$EVENT_OWNER] = owner || true;
|
|
536
662
|
let node = e.target;
|
|
537
663
|
const key = `$$${e.type}`;
|
|
538
664
|
const oriTarget = e.target;
|
|
539
|
-
const
|
|
665
|
+
const boundary = owner || container || e.currentTarget;
|
|
540
666
|
const retarget = value => Object.defineProperty(e, "target", {
|
|
541
667
|
configurable: true,
|
|
542
668
|
value
|
|
@@ -552,29 +678,34 @@ function eventHandler(e) {
|
|
|
552
678
|
return true;
|
|
553
679
|
};
|
|
554
680
|
const walkUpTree = () => {
|
|
555
|
-
while (handleNode()
|
|
681
|
+
while (handleNode()) {
|
|
682
|
+
if (node === boundary || node.parentNode === boundary) break;
|
|
683
|
+
node = node._$host || node.parentNode || node.host;
|
|
684
|
+
}
|
|
556
685
|
};
|
|
557
686
|
Object.defineProperty(e, "currentTarget", {
|
|
558
687
|
configurable: true,
|
|
559
688
|
get() {
|
|
560
|
-
return node || document;
|
|
689
|
+
return node || boundary || document;
|
|
561
690
|
}
|
|
562
691
|
});
|
|
563
692
|
if (e.composedPath) {
|
|
564
693
|
const path = e.composedPath();
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
694
|
+
if (path.length) {
|
|
695
|
+
retarget(path[0]);
|
|
696
|
+
for (let i = 0; i < path.length; i++) {
|
|
697
|
+
node = path[i];
|
|
698
|
+
if (!handleNode()) break;
|
|
699
|
+
if (node._$host) {
|
|
700
|
+
node = node._$host;
|
|
701
|
+
walkUpTree();
|
|
702
|
+
break;
|
|
703
|
+
}
|
|
704
|
+
if (node === boundary || node.parentNode === boundary) {
|
|
705
|
+
break;
|
|
706
|
+
}
|
|
576
707
|
}
|
|
577
|
-
}
|
|
708
|
+
} else walkUpTree();
|
|
578
709
|
}
|
|
579
710
|
else walkUpTree();
|
|
580
711
|
retarget(oriTarget);
|
|
@@ -594,9 +725,14 @@ function insertExpression(parent, value, current, marker) {
|
|
|
594
725
|
} else if (value.nodeType) {
|
|
595
726
|
if (Array.isArray(current)) {
|
|
596
727
|
cleanChildren(parent, current, multi ? marker : null, value);
|
|
597
|
-
} else if (current
|
|
728
|
+
} else if (current && current.nodeType) {
|
|
729
|
+
current.parentNode === parent ? parent.replaceChild(value, current) : parent.appendChild(value);
|
|
730
|
+
} else if (current && parent.firstChild) {
|
|
731
|
+
parent.replaceChild(value, parent.firstChild);
|
|
732
|
+
} else {
|
|
598
733
|
parent.appendChild(value);
|
|
599
|
-
}
|
|
734
|
+
}
|
|
735
|
+
if (marker) value[$$SLOT] = marker;
|
|
600
736
|
} else if (Array.isArray(value)) {
|
|
601
737
|
const currentArray = current && Array.isArray(current);
|
|
602
738
|
if (value.length === 0) {
|
|
@@ -604,7 +740,7 @@ function insertExpression(parent, value, current, marker) {
|
|
|
604
740
|
} else if (currentArray) {
|
|
605
741
|
if (current.length === 0) {
|
|
606
742
|
appendNodes(parent, value, marker);
|
|
607
|
-
} else reconcileArrays(parent, current, value);
|
|
743
|
+
} else reconcileArrays(parent, current, value, marker);
|
|
608
744
|
} else {
|
|
609
745
|
current && cleanChildren(parent);
|
|
610
746
|
appendNodes(parent, value);
|
|
@@ -628,8 +764,23 @@ function normalize(value, current, multi, doNotUnwrap) {
|
|
|
628
764
|
}
|
|
629
765
|
return value;
|
|
630
766
|
}
|
|
767
|
+
function tagHost(value, host) {
|
|
768
|
+
if (Array.isArray(value)) {
|
|
769
|
+
for (let i = 0, len = value.length; i < len; i++) tagHost(value[i], host);
|
|
770
|
+
} else if (value && value.nodeType && value[$$HOST] !== host) {
|
|
771
|
+
value[$$HOST] = host;
|
|
772
|
+
Object.defineProperty(value, "_$host", {
|
|
773
|
+
get: host,
|
|
774
|
+
configurable: true
|
|
775
|
+
});
|
|
776
|
+
}
|
|
777
|
+
}
|
|
631
778
|
function appendNodes(parent, array, marker = null) {
|
|
632
|
-
for (let i = 0, len = array.length; i < len; i++)
|
|
779
|
+
for (let i = 0, len = array.length; i < len; i++) {
|
|
780
|
+
const n = array[i];
|
|
781
|
+
parent.insertBefore(n, marker);
|
|
782
|
+
if (marker) n[$$SLOT] = marker;
|
|
783
|
+
}
|
|
633
784
|
}
|
|
634
785
|
function cleanChildren(parent, current, marker, replacement) {
|
|
635
786
|
if (marker === undefined) return parent.textContent = "";
|
|
@@ -638,11 +789,13 @@ function cleanChildren(parent, current, marker, replacement) {
|
|
|
638
789
|
for (let i = current.length - 1; i >= 0; i--) {
|
|
639
790
|
const el = current[i];
|
|
640
791
|
if (replacement !== el) {
|
|
641
|
-
const
|
|
642
|
-
|
|
792
|
+
const tag = el[$$SLOT];
|
|
793
|
+
const owns = el.parentNode === parent && (!tag || tag === marker);
|
|
794
|
+
if (replacement && !inserted && !i) owns ? parent.replaceChild(replacement, el) : parent.insertBefore(replacement, marker);else if (owns) el.remove();
|
|
643
795
|
} else inserted = true;
|
|
644
796
|
}
|
|
645
797
|
} else if (replacement) parent.insertBefore(replacement, marker);
|
|
798
|
+
if (replacement && marker) replacement[$$SLOT] = marker;
|
|
646
799
|
}
|
|
647
800
|
function gatherHydratable(element, root) {
|
|
648
801
|
const templates = element.querySelectorAll(`*[_hk]`);
|
|
@@ -704,12 +857,20 @@ function Portal(props) {
|
|
|
704
857
|
const treeMarker = document.createTextNode(""),
|
|
705
858
|
startMarker = document.createTextNode(""),
|
|
706
859
|
endMarker = document.createTextNode(""),
|
|
707
|
-
mount = () =>
|
|
708
|
-
|
|
709
|
-
solidJs.createRenderEffect(
|
|
860
|
+
mount = () => props.mount || document.body,
|
|
861
|
+
content = solidJs.createMemo(() => [startMarker, props.children]);
|
|
862
|
+
solidJs.createRenderEffect(
|
|
863
|
+
() => [mount(), content(), solidJs.getOwner()], ([, c, owner]) => {
|
|
864
|
+
const m = solidJs.untrack(mount);
|
|
710
865
|
m.appendChild(endMarker);
|
|
711
|
-
|
|
866
|
+
const dispose = solidJs.runWithOwner(owner, () => solidJs.createRoot(d => {
|
|
867
|
+
insert(m, c, endMarker, undefined, {
|
|
868
|
+
host: () => treeMarker.parentNode
|
|
869
|
+
});
|
|
870
|
+
return d;
|
|
871
|
+
}));
|
|
712
872
|
return () => {
|
|
873
|
+
dispose();
|
|
713
874
|
let c = startMarker;
|
|
714
875
|
while (c && c !== endMarker) {
|
|
715
876
|
const n = c.nextSibling;
|
|
@@ -717,6 +878,15 @@ function Portal(props) {
|
|
|
717
878
|
c = n;
|
|
718
879
|
}
|
|
719
880
|
};
|
|
881
|
+
}, {
|
|
882
|
+
schedule: true
|
|
883
|
+
});
|
|
884
|
+
solidJs.createEffect(mount, () => {
|
|
885
|
+
const m = solidJs.untrack(mount);
|
|
886
|
+
const ownerRoot = getDelegatedRoot(treeMarker);
|
|
887
|
+
if (!ownerRoot || ownerRoot.contains(m)) return;
|
|
888
|
+
registerDelegatedContainer(m, ownerRoot);
|
|
889
|
+
return () => unregisterDelegatedContainer(m, ownerRoot);
|
|
720
890
|
});
|
|
721
891
|
return treeMarker;
|
|
722
892
|
}
|
|
@@ -747,23 +917,6 @@ function createElement(tagName, is = undefined) {
|
|
|
747
917
|
is
|
|
748
918
|
});
|
|
749
919
|
}
|
|
750
|
-
function createElementProxy(el, marker) {
|
|
751
|
-
return new Proxy(el, {
|
|
752
|
-
get(target, prop) {
|
|
753
|
-
if (prop === "appendChild" || prop === "insertBefore") {
|
|
754
|
-
return (...args) => {
|
|
755
|
-
Object.defineProperty(args[0], "_$host", {
|
|
756
|
-
get: () => marker.parentNode,
|
|
757
|
-
configurable: true
|
|
758
|
-
});
|
|
759
|
-
target[prop](...args);
|
|
760
|
-
};
|
|
761
|
-
}
|
|
762
|
-
const value = Reflect.get(target, prop);
|
|
763
|
-
return typeof value === "function" ? value.bind(target) : value;
|
|
764
|
-
}
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
920
|
|
|
768
921
|
Object.defineProperty(exports, "Errored", {
|
|
769
922
|
enumerable: true,
|
|
@@ -831,11 +984,10 @@ exports.RawTextElements = RawTextElements;
|
|
|
831
984
|
exports.RequestContext = RequestContext;
|
|
832
985
|
exports.SVGElements = SVGElements;
|
|
833
986
|
exports.VoidElements = VoidElements;
|
|
834
|
-
exports.
|
|
987
|
+
exports.addEvent = addEvent;
|
|
835
988
|
exports.applyRef = applyRef;
|
|
836
989
|
exports.assign = assign;
|
|
837
990
|
exports.className = className;
|
|
838
|
-
exports.clearDelegatedEvents = clearDelegatedEvents;
|
|
839
991
|
exports.delegateEvents = delegateEvents;
|
|
840
992
|
exports.dynamic = dynamic;
|
|
841
993
|
exports.dynamicProperty = dynamicProperty;
|
|
@@ -843,6 +995,7 @@ exports.effect = effect;
|
|
|
843
995
|
exports.escape = escape;
|
|
844
996
|
exports.generateHydrationScript = voidFn;
|
|
845
997
|
exports.getAssets = voidFn;
|
|
998
|
+
exports.getDelegatedRoot = getDelegatedRoot;
|
|
846
999
|
exports.getFirstChild = getFirstChild;
|
|
847
1000
|
exports.getHydrationKey = getHydrationKey;
|
|
848
1001
|
exports.getNextElement = getNextElement;
|
|
@@ -857,6 +1010,8 @@ exports.isServer = isServer;
|
|
|
857
1010
|
exports.memo = memo;
|
|
858
1011
|
exports.mergeProps = mergeProps;
|
|
859
1012
|
exports.ref = ref;
|
|
1013
|
+
exports.registerDelegatedContainer = registerDelegatedContainer;
|
|
1014
|
+
exports.registerDelegatedRoot = registerDelegatedRoot;
|
|
860
1015
|
exports.render = render;
|
|
861
1016
|
exports.renderToStream = renderToStream;
|
|
862
1017
|
exports.renderToString = renderToString;
|
|
@@ -876,4 +1031,6 @@ exports.ssrHydrationKey = ssrHydrationKey;
|
|
|
876
1031
|
exports.ssrStyle = ssrStyle;
|
|
877
1032
|
exports.style = style;
|
|
878
1033
|
exports.template = template;
|
|
1034
|
+
exports.unregisterDelegatedContainer = unregisterDelegatedContainer;
|
|
1035
|
+
exports.unregisterDelegatedRoot = unregisterDelegatedRoot;
|
|
879
1036
|
exports.useAssets = voidFn;
|