@fluixi/dom 1.0.0-alpha.83 → 1.0.0-alpha.85
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/cdn/dom-client.cjs +1427 -1
- package/dist/cdn/dom-client.d.ts +2 -2
- package/dist/cdn/dom-client.global.js +2 -1
- package/dist/cdn/dom-client.js +3 -3
- package/dist/cdn/dom-client.mjs +1430 -1
- package/dist/cdn/dom.cjs +3127 -1
- package/dist/cdn/dom.d.ts +2 -2
- package/dist/cdn/dom.global.js +2 -1
- package/dist/cdn/dom.js +4 -4
- package/dist/cdn/dom.mjs +3133 -1
- package/dist/index.cjs +3155 -1
- package/dist/index.js +2 -2
- package/dist/index.mjs +3149 -1
- package/dist/lib/component/index.cjs +128 -1
- package/dist/lib/component/index.mjs +105 -1
- package/dist/lib/component/modifiers.cjs +126 -1
- package/dist/lib/component/modifiers.d.ts +12 -0
- package/dist/lib/component/modifiers.d.ts.map +1 -1
- package/dist/lib/component/modifiers.js +12 -84
- package/dist/lib/component/modifiers.mjs +105 -1
- package/dist/lib/dom/delegate.cjs +60 -1
- package/dist/lib/dom/delegate.js +1 -1
- package/dist/lib/dom/delegate.mjs +39 -1
- package/dist/lib/dom/dynamic-element.cjs +949 -1
- package/dist/lib/dom/dynamic-element.d.ts +3 -3
- package/dist/lib/dom/dynamic-element.js +2 -2
- package/dist/lib/dom/dynamic-element.mjs +928 -1
- package/dist/lib/dom/hydration-state.cjs +93 -1
- package/dist/lib/dom/hydration-state.d.ts +1 -1
- package/dist/lib/dom/hydration-state.js +1 -1
- package/dist/lib/dom/hydration-state.mjs +72 -1
- package/dist/lib/dom/hydration.cjs +685 -1
- package/dist/lib/dom/hydration.js +8 -8
- package/dist/lib/dom/hydration.mjs +664 -1
- package/dist/lib/dom/index.cjs +2040 -1
- package/dist/lib/dom/index.js +1 -1
- package/dist/lib/dom/index.mjs +2020 -1
- package/dist/lib/dom/integration.cjs +71 -1
- package/dist/lib/dom/integration.js +3 -3
- package/dist/lib/dom/integration.mjs +51 -1
- package/dist/lib/dom/island.cjs +790 -1
- package/dist/lib/dom/island.d.ts +1 -1
- package/dist/lib/dom/island.js +11 -11
- package/dist/lib/dom/island.mjs +769 -1
- package/dist/lib/dom/runtime.cjs +1432 -1
- package/dist/lib/dom/runtime.d.ts +60 -17
- package/dist/lib/dom/runtime.d.ts.map +1 -1
- package/dist/lib/dom/runtime.js +122 -79
- package/dist/lib/dom/runtime.mjs +1414 -1
- package/dist/lib/dom/server/fx-data.cjs +53 -1
- package/dist/lib/dom/server/fx-data.d.ts +5 -5
- package/dist/lib/dom/server/fx-data.js +6 -6
- package/dist/lib/dom/server/fx-data.mjs +32 -1
- package/dist/lib/dom/server/host.cjs +66 -1
- package/dist/lib/dom/server/host.d.ts +6 -0
- package/dist/lib/dom/server/host.d.ts.map +1 -1
- package/dist/lib/dom/server/host.js +7 -1
- package/dist/lib/dom/server/host.mjs +45 -1
- package/dist/lib/dom/server/index.cjs +759 -1
- package/dist/lib/dom/server/index.d.ts +1 -1
- package/dist/lib/dom/server/index.js +1 -1
- package/dist/lib/dom/server/index.mjs +743 -1
- package/dist/lib/dom/server/nodes.cjs +302 -1
- package/dist/lib/dom/server/nodes.d.ts +2 -2
- package/dist/lib/dom/server/nodes.d.ts.map +1 -1
- package/dist/lib/dom/server/nodes.js +4 -4
- package/dist/lib/dom/server/nodes.mjs +279 -1
- package/dist/lib/dom/server/parse-template.cjs +395 -1
- package/dist/lib/dom/server/parse-template.d.ts +1 -1
- package/dist/lib/dom/server/parse-template.js +4 -4
- package/dist/lib/dom/server/parse-template.mjs +372 -1
- package/dist/lib/dom/server/render.cjs +691 -1
- package/dist/lib/dom/server/render.d.ts +9 -1
- package/dist/lib/dom/server/render.d.ts.map +1 -1
- package/dist/lib/dom/server/render.js +23 -15
- package/dist/lib/dom/server/render.mjs +677 -1
- package/dist/lib/dom/server/request-context.cjs +110 -1
- package/dist/lib/dom/server/request-context.d.ts +29 -9
- package/dist/lib/dom/server/request-context.d.ts.map +1 -1
- package/dist/lib/dom/server/request-context.js +28 -8
- package/dist/lib/dom/server/request-context.mjs +89 -1
- package/dist/lib/dom/server/serialize.cjs +187 -1
- package/dist/lib/dom/server/serialize.js +3 -3
- package/dist/lib/dom/server/serialize.mjs +164 -1
- package/dist/lib/dom/server-renderer.cjs +760 -1
- package/dist/lib/dom/server-renderer.js +1 -1
- package/dist/lib/dom/server-renderer.mjs +745 -1
- package/dist/lib/dom/types.cjs +18 -1
- package/dist/lib/dom/utils.cjs +381 -1
- package/dist/lib/dom/utils.d.ts +1 -88
- package/dist/lib/dom/utils.d.ts.map +1 -1
- package/dist/lib/dom/utils.js +2 -99
- package/dist/lib/dom/utils.mjs +361 -1
- package/dist/lib/dom/versions.cjs +60 -1
- package/dist/lib/dom/versions.d.ts +3 -3
- package/dist/lib/dom/versions.d.ts.map +1 -1
- package/dist/lib/dom/versions.js +17 -5
- package/dist/lib/dom/versions.mjs +37 -1
- package/dist/lib/element/attributes.cjs +19 -1
- package/dist/lib/element/attributes.d.ts +7 -7
- package/dist/lib/element/attributes.js +1 -1
- package/dist/lib/element/attributes.mjs +1 -0
- package/dist/lib/element/index.cjs +19 -1
- package/dist/lib/element/index.mjs +1 -0
- package/dist/lib/element/types.cjs +18 -1
- package/dist/lib/element/types.d.ts +4 -5
- package/dist/lib/element/types.d.ts.map +1 -1
- package/dist/lib/element/types.js +0 -1
- package/dist/lib/flow/class-map.cjs +38 -1
- package/dist/lib/flow/class-map.d.ts +3 -3
- package/dist/lib/flow/class-map.js +2 -2
- package/dist/lib/flow/class-map.mjs +17 -1
- package/dist/lib/flow/client-only.cjs +57 -1
- package/dist/lib/flow/client-only.d.ts +4 -4
- package/dist/lib/flow/client-only.js +3 -3
- package/dist/lib/flow/client-only.mjs +36 -1
- package/dist/lib/flow/dynamic.cjs +53 -1
- package/dist/lib/flow/dynamic.d.ts +2 -2
- package/dist/lib/flow/dynamic.js +3 -3
- package/dist/lib/flow/dynamic.mjs +32 -1
- package/dist/lib/flow/error-boundary.cjs +43 -1
- package/dist/lib/flow/error-boundary.d.ts +2 -2
- package/dist/lib/flow/error-boundary.js +3 -3
- package/dist/lib/flow/error-boundary.mjs +22 -1
- package/dist/lib/flow/for.cjs +66 -1
- package/dist/lib/flow/for.d.ts +9 -9
- package/dist/lib/flow/for.d.ts.map +1 -1
- package/dist/lib/flow/for.js +2 -2
- package/dist/lib/flow/for.mjs +45 -1
- package/dist/lib/flow/index-flow.cjs +67 -1
- package/dist/lib/flow/index-flow.d.ts +5 -5
- package/dist/lib/flow/index-flow.js +4 -4
- package/dist/lib/flow/index-flow.mjs +46 -1
- package/dist/lib/flow/index.cjs +805 -1
- package/dist/lib/flow/index.mjs +792 -1
- package/dist/lib/flow/portal.cjs +538 -1
- package/dist/lib/flow/portal.mjs +519 -1
- package/dist/lib/flow/show.cjs +81 -1
- package/dist/lib/flow/show.d.ts +1 -1
- package/dist/lib/flow/show.d.ts.map +1 -1
- package/dist/lib/flow/show.js +4 -115
- package/dist/lib/flow/show.mjs +67 -1
- package/dist/lib/flow/style-map.cjs +43 -1
- package/dist/lib/flow/style-map.d.ts +3 -3
- package/dist/lib/flow/style-map.js +3 -3
- package/dist/lib/flow/style-map.mjs +22 -1
- package/dist/lib/flow/switch.cjs +91 -1
- package/dist/lib/flow/switch.d.ts +3 -3
- package/dist/lib/flow/switch.d.ts.map +1 -1
- package/dist/lib/flow/switch.js +6 -6
- package/dist/lib/flow/switch.mjs +70 -1
- package/dist/lib/flow/utils.cjs +44 -1
- package/dist/lib/flow/utils.d.ts +1 -1
- package/dist/lib/flow/utils.js +1 -1
- package/dist/lib/flow/utils.mjs +23 -1
- package/dist/lib/html.cjs +32 -1
- package/dist/lib/html.d.ts +6 -6
- package/dist/lib/html.js +5 -5
- package/dist/lib/html.mjs +11 -1
- package/dist/lib/index.cjs +3104 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +2 -3
- package/dist/lib/index.mjs +3097 -1
- package/dist/lib/shared/types.cjs +18 -1
- package/dist/lib/shared/types.d.ts +8 -8
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/version.generated.cjs +26 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +2 -2
- package/dist/version.generated.mjs +5 -1
- package/package.json +7 -6
- package/dist/lib/jsx/control-flow/flow.cjs +0 -1
- package/dist/lib/jsx/control-flow/flow.d.ts +0 -2
- package/dist/lib/jsx/control-flow/flow.d.ts.map +0 -1
- package/dist/lib/jsx/control-flow/flow.js +0 -627
- package/dist/lib/jsx/control-flow/flow.mjs +0 -0
- package/dist/lib/jsx/control-flow/for-flow.cjs +0 -1
- package/dist/lib/jsx/control-flow/for-flow.d.ts +0 -2
- package/dist/lib/jsx/control-flow/for-flow.d.ts.map +0 -1
- package/dist/lib/jsx/control-flow/for-flow.js +0 -1
- package/dist/lib/jsx/control-flow/for-flow.mjs +0 -0
|
@@ -1 +1,302 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/dom/server/nodes.ts
|
|
21
|
+
var nodes_exports = {};
|
|
22
|
+
__export(nodes_exports, {
|
|
23
|
+
NODE_COMMENT: () => NODE_COMMENT,
|
|
24
|
+
NODE_ELEMENT: () => NODE_ELEMENT,
|
|
25
|
+
NODE_TEXT: () => NODE_TEXT,
|
|
26
|
+
ServerComment: () => ServerComment,
|
|
27
|
+
ServerElement: () => ServerElement,
|
|
28
|
+
ServerNode: () => ServerNode,
|
|
29
|
+
ServerRaw: () => ServerRaw,
|
|
30
|
+
ServerStyle: () => ServerStyle,
|
|
31
|
+
ServerText: () => ServerText,
|
|
32
|
+
isServerNodeValue: () => isServerNodeValue
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(nodes_exports);
|
|
35
|
+
|
|
36
|
+
// src/lib/dom/server/host.ts
|
|
37
|
+
var SERVER_NODE = /* @__PURE__ */ Symbol.for("fluixi.server-node");
|
|
38
|
+
var STATE = /* @__PURE__ */ Symbol.for("fluixi.dom.server-host");
|
|
39
|
+
var realm = globalThis;
|
|
40
|
+
var state = realm[STATE] ??= {
|
|
41
|
+
server: typeof document === "undefined",
|
|
42
|
+
nodes: null
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// src/lib/dom/server/nodes.ts
|
|
46
|
+
var NODE_ELEMENT = 1;
|
|
47
|
+
var NODE_TEXT = 3;
|
|
48
|
+
var NODE_COMMENT = 8;
|
|
49
|
+
var _a;
|
|
50
|
+
_a = SERVER_NODE;
|
|
51
|
+
var ServerNode = class {
|
|
52
|
+
constructor() {
|
|
53
|
+
// Brand the host.ts guards check for (lets them skip an instanceof on these classes).
|
|
54
|
+
this[_a] = true;
|
|
55
|
+
this.parentNode = null;
|
|
56
|
+
this.childNodes = [];
|
|
57
|
+
}
|
|
58
|
+
get firstChild() {
|
|
59
|
+
return this.childNodes[0] ?? null;
|
|
60
|
+
}
|
|
61
|
+
get lastChild() {
|
|
62
|
+
return this.childNodes[this.childNodes.length - 1] ?? null;
|
|
63
|
+
}
|
|
64
|
+
get nextSibling() {
|
|
65
|
+
const p = this.parentNode;
|
|
66
|
+
if (!p) return null;
|
|
67
|
+
const i = p.childNodes.indexOf(this);
|
|
68
|
+
return i >= 0 ? p.childNodes[i + 1] ?? null : null;
|
|
69
|
+
}
|
|
70
|
+
get previousSibling() {
|
|
71
|
+
const p = this.parentNode;
|
|
72
|
+
if (!p) return null;
|
|
73
|
+
const i = p.childNodes.indexOf(this);
|
|
74
|
+
return i > 0 ? p.childNodes[i - 1] ?? null : null;
|
|
75
|
+
}
|
|
76
|
+
get parentElement() {
|
|
77
|
+
return this.parentNode;
|
|
78
|
+
}
|
|
79
|
+
appendChild(child) {
|
|
80
|
+
if (child.parentNode) child.parentNode.removeChild(child);
|
|
81
|
+
child.parentNode = this;
|
|
82
|
+
this.childNodes.push(child);
|
|
83
|
+
return child;
|
|
84
|
+
}
|
|
85
|
+
insertBefore(child, ref) {
|
|
86
|
+
if (ref == null) return this.appendChild(child);
|
|
87
|
+
if (child.parentNode) child.parentNode.removeChild(child);
|
|
88
|
+
const i = this.childNodes.indexOf(ref);
|
|
89
|
+
child.parentNode = this;
|
|
90
|
+
if (i < 0) this.childNodes.push(child);
|
|
91
|
+
else this.childNodes.splice(i, 0, child);
|
|
92
|
+
return child;
|
|
93
|
+
}
|
|
94
|
+
removeChild(child) {
|
|
95
|
+
const i = this.childNodes.indexOf(child);
|
|
96
|
+
if (i >= 0) this.childNodes.splice(i, 1);
|
|
97
|
+
child.parentNode = null;
|
|
98
|
+
return child;
|
|
99
|
+
}
|
|
100
|
+
replaceChild(next, old) {
|
|
101
|
+
const i = this.childNodes.indexOf(old);
|
|
102
|
+
if (i >= 0) {
|
|
103
|
+
if (next.parentNode) next.parentNode.removeChild(next);
|
|
104
|
+
next.parentNode = this;
|
|
105
|
+
this.childNodes[i] = next;
|
|
106
|
+
old.parentNode = null;
|
|
107
|
+
}
|
|
108
|
+
return old;
|
|
109
|
+
}
|
|
110
|
+
// Event listeners are inert on the server.
|
|
111
|
+
addEventListener() {
|
|
112
|
+
}
|
|
113
|
+
removeEventListener() {
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var ServerText = class _ServerText extends ServerNode {
|
|
117
|
+
constructor(value) {
|
|
118
|
+
super();
|
|
119
|
+
this.nodeType = NODE_TEXT;
|
|
120
|
+
this.data = value;
|
|
121
|
+
}
|
|
122
|
+
get nodeValue() {
|
|
123
|
+
return this.data;
|
|
124
|
+
}
|
|
125
|
+
set nodeValue(v) {
|
|
126
|
+
this.data = v == null ? "" : String(v);
|
|
127
|
+
}
|
|
128
|
+
get textContent() {
|
|
129
|
+
return this.data;
|
|
130
|
+
}
|
|
131
|
+
set textContent(v) {
|
|
132
|
+
this.data = v == null ? "" : String(v);
|
|
133
|
+
}
|
|
134
|
+
cloneNode() {
|
|
135
|
+
return new _ServerText(this.data);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
var ServerRaw = class _ServerRaw extends ServerNode {
|
|
139
|
+
constructor(html) {
|
|
140
|
+
super();
|
|
141
|
+
this.nodeType = NODE_ELEMENT;
|
|
142
|
+
this.rawOuterHTML = html;
|
|
143
|
+
}
|
|
144
|
+
get textContent() {
|
|
145
|
+
return this.rawOuterHTML.replace(/<[^>]*>/g, "");
|
|
146
|
+
}
|
|
147
|
+
cloneNode() {
|
|
148
|
+
return new _ServerRaw(this.rawOuterHTML);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
var ServerComment = class _ServerComment extends ServerNode {
|
|
152
|
+
constructor(value) {
|
|
153
|
+
super();
|
|
154
|
+
this.nodeType = NODE_COMMENT;
|
|
155
|
+
this.data = value;
|
|
156
|
+
}
|
|
157
|
+
get nodeValue() {
|
|
158
|
+
return this.data;
|
|
159
|
+
}
|
|
160
|
+
set nodeValue(v) {
|
|
161
|
+
this.data = v == null ? "" : String(v);
|
|
162
|
+
}
|
|
163
|
+
cloneNode() {
|
|
164
|
+
return new _ServerComment(this.data);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
var ServerStyle = class {
|
|
168
|
+
constructor() {
|
|
169
|
+
// declared keys are stored as own props; cssText holds a raw string blob.
|
|
170
|
+
this.cssText = "";
|
|
171
|
+
}
|
|
172
|
+
setProperty(name, value) {
|
|
173
|
+
this[name] = value;
|
|
174
|
+
}
|
|
175
|
+
removeProperty(name) {
|
|
176
|
+
delete this[name];
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
var ServerClassList = class {
|
|
180
|
+
constructor(el) {
|
|
181
|
+
this.el = el;
|
|
182
|
+
}
|
|
183
|
+
list() {
|
|
184
|
+
const c = this.el.getAttribute("class");
|
|
185
|
+
return c ? c.split(/\s+/).filter(Boolean) : [];
|
|
186
|
+
}
|
|
187
|
+
write(arr) {
|
|
188
|
+
if (arr.length) this.el.setAttribute("class", arr.join(" "));
|
|
189
|
+
else this.el.removeAttribute("class");
|
|
190
|
+
}
|
|
191
|
+
add(...names) {
|
|
192
|
+
const arr = this.list();
|
|
193
|
+
for (const n of names) if (!arr.includes(n)) arr.push(n);
|
|
194
|
+
this.write(arr);
|
|
195
|
+
}
|
|
196
|
+
remove(...names) {
|
|
197
|
+
this.write(this.list().filter((c) => !names.includes(c)));
|
|
198
|
+
}
|
|
199
|
+
contains(name) {
|
|
200
|
+
return this.list().includes(name);
|
|
201
|
+
}
|
|
202
|
+
toggle(name, force) {
|
|
203
|
+
const has = this.contains(name);
|
|
204
|
+
const on = force === void 0 ? !has : force;
|
|
205
|
+
if (on) this.add(name);
|
|
206
|
+
else this.remove(name);
|
|
207
|
+
return on;
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
var ServerElement = class _ServerElement extends ServerNode {
|
|
211
|
+
constructor(tag, isSVG = false) {
|
|
212
|
+
super();
|
|
213
|
+
this.nodeType = NODE_ELEMENT;
|
|
214
|
+
this.attributes = /* @__PURE__ */ new Map();
|
|
215
|
+
this.style = new ServerStyle();
|
|
216
|
+
this.classList = new ServerClassList(this);
|
|
217
|
+
/** raw HTML set via innerHTML: emitted verbatim, bypassing childNodes. */
|
|
218
|
+
this.rawHTML = null;
|
|
219
|
+
this.localName = tag.toLowerCase();
|
|
220
|
+
this.tagName = isSVG ? tag : tag.toUpperCase();
|
|
221
|
+
this.isSVG = isSVG;
|
|
222
|
+
this.namespaceURI = isSVG ? "http://www.w3.org/2000/svg" : null;
|
|
223
|
+
}
|
|
224
|
+
setAttribute(name, value) {
|
|
225
|
+
this.attributes.set(name, String(value));
|
|
226
|
+
}
|
|
227
|
+
removeAttribute(name) {
|
|
228
|
+
this.attributes.delete(name);
|
|
229
|
+
}
|
|
230
|
+
getAttribute(name) {
|
|
231
|
+
return this.attributes.has(name) ? this.attributes.get(name) : null;
|
|
232
|
+
}
|
|
233
|
+
hasAttribute(name) {
|
|
234
|
+
return this.attributes.has(name);
|
|
235
|
+
}
|
|
236
|
+
get id() {
|
|
237
|
+
return this.getAttribute("id") ?? "";
|
|
238
|
+
}
|
|
239
|
+
set id(v) {
|
|
240
|
+
if (v == null) this.removeAttribute("id");
|
|
241
|
+
else this.setAttribute("id", v);
|
|
242
|
+
}
|
|
243
|
+
// JSX_PROPERTIES: className/value/checked/selected/innerHTML/innerText/
|
|
244
|
+
// textContent/indeterminate/htmlFor flow through setProperty (element[k]=v).
|
|
245
|
+
get className() {
|
|
246
|
+
return this.getAttribute("class") ?? "";
|
|
247
|
+
}
|
|
248
|
+
set className(v) {
|
|
249
|
+
if (v == null) this.removeAttribute("class");
|
|
250
|
+
else this.setAttribute("class", v);
|
|
251
|
+
}
|
|
252
|
+
get htmlFor() {
|
|
253
|
+
return this.getAttribute("for") ?? "";
|
|
254
|
+
}
|
|
255
|
+
set htmlFor(v) {
|
|
256
|
+
if (v == null) this.removeAttribute("for");
|
|
257
|
+
else this.setAttribute("for", v);
|
|
258
|
+
}
|
|
259
|
+
set value(v) {
|
|
260
|
+
if (v == null) this.removeAttribute("value");
|
|
261
|
+
else this.setAttribute("value", String(v));
|
|
262
|
+
}
|
|
263
|
+
set checked(v) {
|
|
264
|
+
if (v) this.setAttribute("checked", "");
|
|
265
|
+
else this.removeAttribute("checked");
|
|
266
|
+
}
|
|
267
|
+
set selected(v) {
|
|
268
|
+
if (v) this.setAttribute("selected", "");
|
|
269
|
+
else this.removeAttribute("selected");
|
|
270
|
+
}
|
|
271
|
+
// indeterminate is a live-only DOM property with no HTML serialization.
|
|
272
|
+
set indeterminate(_v) {
|
|
273
|
+
}
|
|
274
|
+
get textContent() {
|
|
275
|
+
return this.childNodes.map((c) => c.textContent ?? "").join("");
|
|
276
|
+
}
|
|
277
|
+
set textContent(v) {
|
|
278
|
+
for (const c of this.childNodes) c.parentNode = null;
|
|
279
|
+
this.childNodes = [];
|
|
280
|
+
this.rawHTML = null;
|
|
281
|
+
if (v != null && v !== "") this.appendChild(new ServerText(String(v)));
|
|
282
|
+
}
|
|
283
|
+
set innerText(v) {
|
|
284
|
+
this.textContent = v;
|
|
285
|
+
}
|
|
286
|
+
set innerHTML(v) {
|
|
287
|
+
for (const c of this.childNodes) c.parentNode = null;
|
|
288
|
+
this.childNodes = [];
|
|
289
|
+
this.rawHTML = v == null ? "" : String(v);
|
|
290
|
+
}
|
|
291
|
+
cloneNode(deep = false) {
|
|
292
|
+
const el = new _ServerElement(this.localName, this.isSVG);
|
|
293
|
+
el.attributes = new Map(this.attributes);
|
|
294
|
+
el.style.cssText = this.style.cssText;
|
|
295
|
+
el.rawHTML = this.rawHTML;
|
|
296
|
+
if (deep) for (const c of this.childNodes) el.appendChild(c.cloneNode(true));
|
|
297
|
+
return el;
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
function isServerNodeValue(x) {
|
|
301
|
+
return x instanceof ServerNode;
|
|
302
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Server node model
|
|
2
|
+
* Server node model, a minimal, serialization-oriented stand-in for the DOM
|
|
3
3
|
* Node/Element API that @fluixi/dom's runtime calls. Under server mode the leaf
|
|
4
4
|
* factories (createNativeElement/createTextNode/createMarker) return these
|
|
5
5
|
* instead of real DOM nodes, so insert/spread/Show/For run unchanged and the
|
|
@@ -92,7 +92,7 @@ export declare class ServerElement extends ServerNode {
|
|
|
92
92
|
attributes: Map<string, string>;
|
|
93
93
|
style: ServerStyle;
|
|
94
94
|
classList: ServerClassList;
|
|
95
|
-
/** raw HTML set via innerHTML
|
|
95
|
+
/** raw HTML set via innerHTML: emitted verbatim, bypassing childNodes. */
|
|
96
96
|
rawHTML: string | null;
|
|
97
97
|
constructor(tag: string, isSVG?: boolean);
|
|
98
98
|
setAttribute(name: string, value: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/nodes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../../src/lib/dom/server/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Server node model
|
|
2
|
+
* Server node model, a minimal, serialization-oriented stand-in for the DOM
|
|
3
3
|
* Node/Element API that @fluixi/dom's runtime calls. Under server mode the leaf
|
|
4
4
|
* factories (createNativeElement/createTextNode/createMarker) return these
|
|
5
5
|
* instead of real DOM nodes, so insert/spread/Show/For run unchanged and the
|
|
@@ -18,7 +18,7 @@ export const NODE_ELEMENT = 1;
|
|
|
18
18
|
export const NODE_TEXT = 3;
|
|
19
19
|
export const NODE_COMMENT = 8;
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
|
-
// Base node
|
|
21
|
+
// Base node, the linked-tree mechanics insert() relies on.
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
export class ServerNode {
|
|
24
24
|
// Brand the host.ts guards check for (lets them skip an instanceof on these classes).
|
|
@@ -209,7 +209,7 @@ class ServerClassList {
|
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
// ---------------------------------------------------------------------------
|
|
212
|
-
// Element
|
|
212
|
+
// Element: attributes + the JSX_PROPERTIES properties + style/classList.
|
|
213
213
|
// ---------------------------------------------------------------------------
|
|
214
214
|
export class ServerElement extends ServerNode {
|
|
215
215
|
nodeType = NODE_ELEMENT;
|
|
@@ -220,7 +220,7 @@ export class ServerElement extends ServerNode {
|
|
|
220
220
|
attributes = new Map();
|
|
221
221
|
style = new ServerStyle();
|
|
222
222
|
classList = new ServerClassList(this);
|
|
223
|
-
/** raw HTML set via innerHTML
|
|
223
|
+
/** raw HTML set via innerHTML: emitted verbatim, bypassing childNodes. */
|
|
224
224
|
rawHTML = null;
|
|
225
225
|
constructor(tag, isSVG = false) {
|
|
226
226
|
super();
|
|
@@ -1 +1,279 @@
|
|
|
1
|
-
|
|
1
|
+
// src/lib/dom/server/host.ts
|
|
2
|
+
var SERVER_NODE = /* @__PURE__ */ Symbol.for("fluixi.server-node");
|
|
3
|
+
var STATE = /* @__PURE__ */ Symbol.for("fluixi.dom.server-host");
|
|
4
|
+
var realm = globalThis;
|
|
5
|
+
var state = realm[STATE] ??= {
|
|
6
|
+
server: typeof document === "undefined",
|
|
7
|
+
nodes: null
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// src/lib/dom/server/nodes.ts
|
|
11
|
+
var NODE_ELEMENT = 1;
|
|
12
|
+
var NODE_TEXT = 3;
|
|
13
|
+
var NODE_COMMENT = 8;
|
|
14
|
+
var _a;
|
|
15
|
+
_a = SERVER_NODE;
|
|
16
|
+
var ServerNode = class {
|
|
17
|
+
constructor() {
|
|
18
|
+
// Brand the host.ts guards check for (lets them skip an instanceof on these classes).
|
|
19
|
+
this[_a] = true;
|
|
20
|
+
this.parentNode = null;
|
|
21
|
+
this.childNodes = [];
|
|
22
|
+
}
|
|
23
|
+
get firstChild() {
|
|
24
|
+
return this.childNodes[0] ?? null;
|
|
25
|
+
}
|
|
26
|
+
get lastChild() {
|
|
27
|
+
return this.childNodes[this.childNodes.length - 1] ?? null;
|
|
28
|
+
}
|
|
29
|
+
get nextSibling() {
|
|
30
|
+
const p = this.parentNode;
|
|
31
|
+
if (!p) return null;
|
|
32
|
+
const i = p.childNodes.indexOf(this);
|
|
33
|
+
return i >= 0 ? p.childNodes[i + 1] ?? null : null;
|
|
34
|
+
}
|
|
35
|
+
get previousSibling() {
|
|
36
|
+
const p = this.parentNode;
|
|
37
|
+
if (!p) return null;
|
|
38
|
+
const i = p.childNodes.indexOf(this);
|
|
39
|
+
return i > 0 ? p.childNodes[i - 1] ?? null : null;
|
|
40
|
+
}
|
|
41
|
+
get parentElement() {
|
|
42
|
+
return this.parentNode;
|
|
43
|
+
}
|
|
44
|
+
appendChild(child) {
|
|
45
|
+
if (child.parentNode) child.parentNode.removeChild(child);
|
|
46
|
+
child.parentNode = this;
|
|
47
|
+
this.childNodes.push(child);
|
|
48
|
+
return child;
|
|
49
|
+
}
|
|
50
|
+
insertBefore(child, ref) {
|
|
51
|
+
if (ref == null) return this.appendChild(child);
|
|
52
|
+
if (child.parentNode) child.parentNode.removeChild(child);
|
|
53
|
+
const i = this.childNodes.indexOf(ref);
|
|
54
|
+
child.parentNode = this;
|
|
55
|
+
if (i < 0) this.childNodes.push(child);
|
|
56
|
+
else this.childNodes.splice(i, 0, child);
|
|
57
|
+
return child;
|
|
58
|
+
}
|
|
59
|
+
removeChild(child) {
|
|
60
|
+
const i = this.childNodes.indexOf(child);
|
|
61
|
+
if (i >= 0) this.childNodes.splice(i, 1);
|
|
62
|
+
child.parentNode = null;
|
|
63
|
+
return child;
|
|
64
|
+
}
|
|
65
|
+
replaceChild(next, old) {
|
|
66
|
+
const i = this.childNodes.indexOf(old);
|
|
67
|
+
if (i >= 0) {
|
|
68
|
+
if (next.parentNode) next.parentNode.removeChild(next);
|
|
69
|
+
next.parentNode = this;
|
|
70
|
+
this.childNodes[i] = next;
|
|
71
|
+
old.parentNode = null;
|
|
72
|
+
}
|
|
73
|
+
return old;
|
|
74
|
+
}
|
|
75
|
+
// Event listeners are inert on the server.
|
|
76
|
+
addEventListener() {
|
|
77
|
+
}
|
|
78
|
+
removeEventListener() {
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
var ServerText = class _ServerText extends ServerNode {
|
|
82
|
+
constructor(value) {
|
|
83
|
+
super();
|
|
84
|
+
this.nodeType = NODE_TEXT;
|
|
85
|
+
this.data = value;
|
|
86
|
+
}
|
|
87
|
+
get nodeValue() {
|
|
88
|
+
return this.data;
|
|
89
|
+
}
|
|
90
|
+
set nodeValue(v) {
|
|
91
|
+
this.data = v == null ? "" : String(v);
|
|
92
|
+
}
|
|
93
|
+
get textContent() {
|
|
94
|
+
return this.data;
|
|
95
|
+
}
|
|
96
|
+
set textContent(v) {
|
|
97
|
+
this.data = v == null ? "" : String(v);
|
|
98
|
+
}
|
|
99
|
+
cloneNode() {
|
|
100
|
+
return new _ServerText(this.data);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
var ServerRaw = class _ServerRaw extends ServerNode {
|
|
104
|
+
constructor(html) {
|
|
105
|
+
super();
|
|
106
|
+
this.nodeType = NODE_ELEMENT;
|
|
107
|
+
this.rawOuterHTML = html;
|
|
108
|
+
}
|
|
109
|
+
get textContent() {
|
|
110
|
+
return this.rawOuterHTML.replace(/<[^>]*>/g, "");
|
|
111
|
+
}
|
|
112
|
+
cloneNode() {
|
|
113
|
+
return new _ServerRaw(this.rawOuterHTML);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var ServerComment = class _ServerComment extends ServerNode {
|
|
117
|
+
constructor(value) {
|
|
118
|
+
super();
|
|
119
|
+
this.nodeType = NODE_COMMENT;
|
|
120
|
+
this.data = value;
|
|
121
|
+
}
|
|
122
|
+
get nodeValue() {
|
|
123
|
+
return this.data;
|
|
124
|
+
}
|
|
125
|
+
set nodeValue(v) {
|
|
126
|
+
this.data = v == null ? "" : String(v);
|
|
127
|
+
}
|
|
128
|
+
cloneNode() {
|
|
129
|
+
return new _ServerComment(this.data);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
var ServerStyle = class {
|
|
133
|
+
constructor() {
|
|
134
|
+
// declared keys are stored as own props; cssText holds a raw string blob.
|
|
135
|
+
this.cssText = "";
|
|
136
|
+
}
|
|
137
|
+
setProperty(name, value) {
|
|
138
|
+
this[name] = value;
|
|
139
|
+
}
|
|
140
|
+
removeProperty(name) {
|
|
141
|
+
delete this[name];
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
var ServerClassList = class {
|
|
145
|
+
constructor(el) {
|
|
146
|
+
this.el = el;
|
|
147
|
+
}
|
|
148
|
+
list() {
|
|
149
|
+
const c = this.el.getAttribute("class");
|
|
150
|
+
return c ? c.split(/\s+/).filter(Boolean) : [];
|
|
151
|
+
}
|
|
152
|
+
write(arr) {
|
|
153
|
+
if (arr.length) this.el.setAttribute("class", arr.join(" "));
|
|
154
|
+
else this.el.removeAttribute("class");
|
|
155
|
+
}
|
|
156
|
+
add(...names) {
|
|
157
|
+
const arr = this.list();
|
|
158
|
+
for (const n of names) if (!arr.includes(n)) arr.push(n);
|
|
159
|
+
this.write(arr);
|
|
160
|
+
}
|
|
161
|
+
remove(...names) {
|
|
162
|
+
this.write(this.list().filter((c) => !names.includes(c)));
|
|
163
|
+
}
|
|
164
|
+
contains(name) {
|
|
165
|
+
return this.list().includes(name);
|
|
166
|
+
}
|
|
167
|
+
toggle(name, force) {
|
|
168
|
+
const has = this.contains(name);
|
|
169
|
+
const on = force === void 0 ? !has : force;
|
|
170
|
+
if (on) this.add(name);
|
|
171
|
+
else this.remove(name);
|
|
172
|
+
return on;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
var ServerElement = class _ServerElement extends ServerNode {
|
|
176
|
+
constructor(tag, isSVG = false) {
|
|
177
|
+
super();
|
|
178
|
+
this.nodeType = NODE_ELEMENT;
|
|
179
|
+
this.attributes = /* @__PURE__ */ new Map();
|
|
180
|
+
this.style = new ServerStyle();
|
|
181
|
+
this.classList = new ServerClassList(this);
|
|
182
|
+
/** raw HTML set via innerHTML: emitted verbatim, bypassing childNodes. */
|
|
183
|
+
this.rawHTML = null;
|
|
184
|
+
this.localName = tag.toLowerCase();
|
|
185
|
+
this.tagName = isSVG ? tag : tag.toUpperCase();
|
|
186
|
+
this.isSVG = isSVG;
|
|
187
|
+
this.namespaceURI = isSVG ? "http://www.w3.org/2000/svg" : null;
|
|
188
|
+
}
|
|
189
|
+
setAttribute(name, value) {
|
|
190
|
+
this.attributes.set(name, String(value));
|
|
191
|
+
}
|
|
192
|
+
removeAttribute(name) {
|
|
193
|
+
this.attributes.delete(name);
|
|
194
|
+
}
|
|
195
|
+
getAttribute(name) {
|
|
196
|
+
return this.attributes.has(name) ? this.attributes.get(name) : null;
|
|
197
|
+
}
|
|
198
|
+
hasAttribute(name) {
|
|
199
|
+
return this.attributes.has(name);
|
|
200
|
+
}
|
|
201
|
+
get id() {
|
|
202
|
+
return this.getAttribute("id") ?? "";
|
|
203
|
+
}
|
|
204
|
+
set id(v) {
|
|
205
|
+
if (v == null) this.removeAttribute("id");
|
|
206
|
+
else this.setAttribute("id", v);
|
|
207
|
+
}
|
|
208
|
+
// JSX_PROPERTIES: className/value/checked/selected/innerHTML/innerText/
|
|
209
|
+
// textContent/indeterminate/htmlFor flow through setProperty (element[k]=v).
|
|
210
|
+
get className() {
|
|
211
|
+
return this.getAttribute("class") ?? "";
|
|
212
|
+
}
|
|
213
|
+
set className(v) {
|
|
214
|
+
if (v == null) this.removeAttribute("class");
|
|
215
|
+
else this.setAttribute("class", v);
|
|
216
|
+
}
|
|
217
|
+
get htmlFor() {
|
|
218
|
+
return this.getAttribute("for") ?? "";
|
|
219
|
+
}
|
|
220
|
+
set htmlFor(v) {
|
|
221
|
+
if (v == null) this.removeAttribute("for");
|
|
222
|
+
else this.setAttribute("for", v);
|
|
223
|
+
}
|
|
224
|
+
set value(v) {
|
|
225
|
+
if (v == null) this.removeAttribute("value");
|
|
226
|
+
else this.setAttribute("value", String(v));
|
|
227
|
+
}
|
|
228
|
+
set checked(v) {
|
|
229
|
+
if (v) this.setAttribute("checked", "");
|
|
230
|
+
else this.removeAttribute("checked");
|
|
231
|
+
}
|
|
232
|
+
set selected(v) {
|
|
233
|
+
if (v) this.setAttribute("selected", "");
|
|
234
|
+
else this.removeAttribute("selected");
|
|
235
|
+
}
|
|
236
|
+
// indeterminate is a live-only DOM property with no HTML serialization.
|
|
237
|
+
set indeterminate(_v) {
|
|
238
|
+
}
|
|
239
|
+
get textContent() {
|
|
240
|
+
return this.childNodes.map((c) => c.textContent ?? "").join("");
|
|
241
|
+
}
|
|
242
|
+
set textContent(v) {
|
|
243
|
+
for (const c of this.childNodes) c.parentNode = null;
|
|
244
|
+
this.childNodes = [];
|
|
245
|
+
this.rawHTML = null;
|
|
246
|
+
if (v != null && v !== "") this.appendChild(new ServerText(String(v)));
|
|
247
|
+
}
|
|
248
|
+
set innerText(v) {
|
|
249
|
+
this.textContent = v;
|
|
250
|
+
}
|
|
251
|
+
set innerHTML(v) {
|
|
252
|
+
for (const c of this.childNodes) c.parentNode = null;
|
|
253
|
+
this.childNodes = [];
|
|
254
|
+
this.rawHTML = v == null ? "" : String(v);
|
|
255
|
+
}
|
|
256
|
+
cloneNode(deep = false) {
|
|
257
|
+
const el = new _ServerElement(this.localName, this.isSVG);
|
|
258
|
+
el.attributes = new Map(this.attributes);
|
|
259
|
+
el.style.cssText = this.style.cssText;
|
|
260
|
+
el.rawHTML = this.rawHTML;
|
|
261
|
+
if (deep) for (const c of this.childNodes) el.appendChild(c.cloneNode(true));
|
|
262
|
+
return el;
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
function isServerNodeValue(x) {
|
|
266
|
+
return x instanceof ServerNode;
|
|
267
|
+
}
|
|
268
|
+
export {
|
|
269
|
+
NODE_COMMENT,
|
|
270
|
+
NODE_ELEMENT,
|
|
271
|
+
NODE_TEXT,
|
|
272
|
+
ServerComment,
|
|
273
|
+
ServerElement,
|
|
274
|
+
ServerNode,
|
|
275
|
+
ServerRaw,
|
|
276
|
+
ServerStyle,
|
|
277
|
+
ServerText,
|
|
278
|
+
isServerNodeValue
|
|
279
|
+
};
|