@b9g/crank 0.7.0 → 0.7.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/README.md +203 -138
- package/_css.cjs +80 -0
- package/_css.cjs.map +1 -0
- package/_css.d.ts +21 -0
- package/_css.js +76 -0
- package/_css.js.map +1 -0
- package/_utils.cjs +106 -0
- package/_utils.cjs.map +1 -0
- package/_utils.js +99 -0
- package/_utils.js.map +1 -0
- package/async.cjs +0 -1
- package/async.cjs.map +1 -1
- package/async.js +0 -1
- package/async.js.map +1 -1
- package/crank.cjs +37 -133
- package/crank.cjs.map +1 -1
- package/crank.d.ts +255 -3
- package/crank.js +1 -97
- package/crank.js.map +1 -1
- package/dom.cjs +33 -19
- package/dom.cjs.map +1 -1
- package/dom.js +33 -19
- package/dom.js.map +1 -1
- package/html.cjs +5 -3
- package/html.cjs.map +1 -1
- package/html.js +5 -3
- package/html.js.map +1 -1
- package/jsx-runtime.cjs +0 -1
- package/jsx-runtime.cjs.map +1 -1
- package/jsx-runtime.js +0 -1
- package/jsx-runtime.js.map +1 -1
- package/jsx-tag.cjs +0 -1
- package/jsx-tag.cjs.map +1 -1
- package/jsx-tag.js +0 -1
- package/jsx-tag.js.map +1 -1
- package/package.json +2 -2
- package/standalone.cjs +0 -1
- package/standalone.cjs.map +1 -1
- package/standalone.js +0 -1
- package/standalone.js.map +1 -1
- package/umd.js +110 -20
- package/umd.js.map +1 -1
package/dom.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var crank = require('./crank.cjs');
|
|
4
|
-
require('./
|
|
4
|
+
var _css = require('./_css.cjs');
|
|
5
5
|
|
|
6
6
|
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
7
|
+
const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
|
|
7
8
|
function isWritableProperty(element, name) {
|
|
8
9
|
// walk up the object's prototype chain to find the owner
|
|
9
10
|
let propOwner = element;
|
|
@@ -53,6 +54,9 @@ const adapter = {
|
|
|
53
54
|
case "svg":
|
|
54
55
|
xmlns = SVG_NAMESPACE;
|
|
55
56
|
break;
|
|
57
|
+
case "math":
|
|
58
|
+
xmlns = MATHML_NAMESPACE;
|
|
59
|
+
break;
|
|
56
60
|
}
|
|
57
61
|
return props.xmlns || xmlns;
|
|
58
62
|
},
|
|
@@ -63,6 +67,9 @@ const adapter = {
|
|
|
63
67
|
else if (tag.toLowerCase() === "svg") {
|
|
64
68
|
xmlns = SVG_NAMESPACE;
|
|
65
69
|
}
|
|
70
|
+
else if (tag.toLowerCase() === "math") {
|
|
71
|
+
xmlns = MATHML_NAMESPACE;
|
|
72
|
+
}
|
|
66
73
|
return xmlns
|
|
67
74
|
? document.createElementNS(xmlns, tag)
|
|
68
75
|
: document.createElement(tag);
|
|
@@ -95,6 +102,7 @@ const adapter = {
|
|
|
95
102
|
}
|
|
96
103
|
const element = node;
|
|
97
104
|
const isSVG = xmlns === SVG_NAMESPACE;
|
|
105
|
+
const isMathML = xmlns === MATHML_NAMESPACE;
|
|
98
106
|
for (let name in { ...oldProps, ...props }) {
|
|
99
107
|
let value = props[name];
|
|
100
108
|
const oldValue = oldProps ? oldProps[name] : undefined;
|
|
@@ -175,26 +183,30 @@ const adapter = {
|
|
|
175
183
|
style.cssText = "";
|
|
176
184
|
}
|
|
177
185
|
for (const styleName in { ...oldValue, ...value }) {
|
|
186
|
+
const cssName = _css.camelToKebabCase(styleName);
|
|
178
187
|
const styleValue = value && value[styleName];
|
|
179
188
|
if (styleValue == null) {
|
|
180
|
-
if (isHydrating && style.getPropertyValue(
|
|
181
|
-
emitHydrationWarning(name, quietProps, null, style.getPropertyValue(
|
|
189
|
+
if (isHydrating && style.getPropertyValue(cssName) !== "") {
|
|
190
|
+
emitHydrationWarning(name, quietProps, null, style.getPropertyValue(cssName), element, `style.${styleName}`);
|
|
182
191
|
}
|
|
183
|
-
style.removeProperty(
|
|
192
|
+
style.removeProperty(cssName);
|
|
184
193
|
}
|
|
185
|
-
else
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
194
|
+
else {
|
|
195
|
+
const formattedValue = _css.formatStyleValue(cssName, styleValue);
|
|
196
|
+
if (style.getPropertyValue(cssName) !== formattedValue) {
|
|
197
|
+
// TODO: hydration warnings for style props
|
|
198
|
+
//if (isHydrating) {
|
|
199
|
+
// emitHydrationWarning(
|
|
200
|
+
// name,
|
|
201
|
+
// quietProps,
|
|
202
|
+
// formattedValue,
|
|
203
|
+
// style.getPropertyValue(cssName),
|
|
204
|
+
// element,
|
|
205
|
+
// `style.${styleName}`,
|
|
206
|
+
// );
|
|
207
|
+
//}
|
|
208
|
+
style.setProperty(cssName, formattedValue);
|
|
209
|
+
}
|
|
198
210
|
}
|
|
199
211
|
}
|
|
200
212
|
}
|
|
@@ -249,7 +261,7 @@ const adapter = {
|
|
|
249
261
|
.join(" "), hydratingClassName || "", element);
|
|
250
262
|
}
|
|
251
263
|
}
|
|
252
|
-
else if (!isSVG) {
|
|
264
|
+
else if (!isSVG && !isMathML) {
|
|
253
265
|
if (element.className !== value) {
|
|
254
266
|
if (isHydrating) {
|
|
255
267
|
emitHydrationWarning(name, quietProps, value, element.className, element);
|
|
@@ -390,7 +402,9 @@ const adapter = {
|
|
|
390
402
|
if (typeof value === "string") {
|
|
391
403
|
const el = xmlns == null
|
|
392
404
|
? document.createElement("div")
|
|
393
|
-
:
|
|
405
|
+
: xmlns === SVG_NAMESPACE
|
|
406
|
+
? document.createElementNS(xmlns, "svg")
|
|
407
|
+
: document.createElementNS(xmlns, "math");
|
|
394
408
|
el.innerHTML = value;
|
|
395
409
|
nodes = Array.from(el.childNodes);
|
|
396
410
|
}
|
package/dom.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.cjs","sources":["../src/dom.ts"],"sourcesContent":["import {\n\tChildren,\n\tContext,\n\tElementValue,\n\tPortal,\n\tRenderer,\n\tRenderAdapter,\n} from \"./crank.js\";\n\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\n\nfunction isWritableProperty(element: Element, name: string): boolean {\n\t// walk up the object's prototype chain to find the owner\n\tlet propOwner = element;\n\tdo {\n\t\tif (Object.prototype.hasOwnProperty.call(propOwner, name)) {\n\t\t\tbreak;\n\t\t}\n\t} while ((propOwner = Object.getPrototypeOf(propOwner)));\n\n\tif (propOwner === null) {\n\t\treturn false;\n\t}\n\n\t// get the descriptor for the named property and check whether it implies\n\t// that the property is writable\n\tconst descriptor = Object.getOwnPropertyDescriptor(propOwner, name);\n\tif (\n\t\tdescriptor != null &&\n\t\t(descriptor.writable === true || descriptor.set !== undefined)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction emitHydrationWarning(\n\tpropName: string,\n\tquietProps: Set<string> | undefined,\n\texpectedValue: any,\n\tactualValue: any,\n\telement: Element,\n\tdisplayName?: string,\n) {\n\tconst checkName = propName;\n\tconst showName = displayName || propName;\n\tif (!quietProps || !quietProps.has(checkName)) {\n\t\tif (expectedValue === null || expectedValue === false) {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be missing but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t} else if (expectedValue === true || expectedValue === \"\") {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be ${expectedValue === true ? \"present\" : '\"\"'} but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t} else if (\n\t\t\ttypeof window !== \"undefined\" &&\n\t\t\twindow.location &&\n\t\t\tnew URL(expectedValue, window.location.origin).href ===\n\t\t\t\tnew URL(actualValue, window.location.origin).href\n\t\t) {\n\t\t\t// attrs which are URLs will often be resolved to their full\n\t\t\t// href in the DOM, so we squash these errors\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be \"${String(expectedValue)}\" but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport const adapter: Partial<RenderAdapter<Node, string, Element>> = {\n\tscope({\n\t\tscope: xmlns,\n\t\ttag,\n\t\tprops,\n\t}: {\n\t\tscope: string | undefined;\n\t\ttag: string | symbol;\n\t\tprops: Record<string, any>;\n\t}): string | undefined {\n\t\tswitch (tag) {\n\t\t\tcase Portal:\n\t\t\t\t// TODO: read the namespace from the portal root element\n\t\t\t\txmlns = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"svg\":\n\t\t\t\txmlns = SVG_NAMESPACE;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn props.xmlns || xmlns;\n\t},\n\n\tcreate({\n\t\ttag,\n\t\ttagName,\n\t\tscope: xmlns,\n\t}: {\n\t\ttag: string | symbol;\n\t\ttagName: string;\n\t\tscope: string | undefined;\n\t}): Node {\n\t\tif (typeof tag !== \"string\") {\n\t\t\tthrow new Error(`Unknown tag: ${tagName}`);\n\t\t} else if (tag.toLowerCase() === \"svg\") {\n\t\t\txmlns = SVG_NAMESPACE;\n\t\t}\n\n\t\treturn xmlns\n\t\t\t? document.createElementNS(xmlns, tag)\n\t\t\t: document.createElement(tag);\n\t},\n\n\tadopt({\n\t\ttag,\n\t\ttagName,\n\t\tnode,\n\t}: {\n\t\ttag: string | symbol;\n\t\ttagName: string;\n\t\tnode: Node | undefined;\n\t}): Array<Node> | undefined {\n\t\tif (typeof tag !== \"string\" && tag !== Portal) {\n\t\t\tthrow new Error(`Unknown tag: ${tagName}`);\n\t\t}\n\n\t\tif (\n\t\t\tnode === document.body ||\n\t\t\tnode === document.head ||\n\t\t\tnode === document.documentElement ||\n\t\t\tnode === document\n\t\t) {\n\t\t\tconsole.warn(\n\t\t\t\t`Hydrating ${node.nodeName.toLowerCase()} is discouraged as it is destructive and may remove unknown nodes.`,\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tnode == null ||\n\t\t\t(typeof tag === \"string\" &&\n\t\t\t\t(node.nodeType !== Node.ELEMENT_NODE ||\n\t\t\t\t\ttag.toLowerCase() !== (node as Element).tagName.toLowerCase()))\n\t\t) {\n\t\t\tconsole.warn(`Expected <${tagName}> while hydrating but found: `, node);\n\t\t\treturn;\n\t\t}\n\n\t\treturn Array.from(node.childNodes);\n\t},\n\n\tpatch({\n\t\ttagName,\n\t\tnode,\n\t\tprops,\n\t\toldProps,\n\t\tscope: xmlns,\n\t\tcopyProps,\n\t\tquietProps,\n\t\tisHydrating,\n\t}: {\n\t\tnode: Node;\n\t\ttagName: string;\n\t\tprops: Record<string, any>;\n\t\toldProps: Record<string, any> | undefined;\n\t\tscope: string | undefined;\n\t\tcopyProps: Set<string> | undefined;\n\t\tquietProps: Set<string> | undefined;\n\t\tisHydrating: boolean;\n\t}): void {\n\t\tif (node.nodeType !== Node.ELEMENT_NODE) {\n\t\t\tthrow new TypeError(`Cannot patch node: ${String(node)}`);\n\t\t} else if (props.class && props.className) {\n\t\t\tconsole.error(\n\t\t\t\t`Both \"class\" and \"className\" set in props for <${tagName}>. Use one or the other.`,\n\t\t\t);\n\t\t}\n\n\t\tconst element = node as Element;\n\t\tconst isSVG = xmlns === SVG_NAMESPACE;\n\t\tfor (let name in {...oldProps, ...props}) {\n\t\t\tlet value = props[name];\n\t\t\tconst oldValue = oldProps ? oldProps[name] : undefined;\n\t\t\t{\n\t\t\t\tif (copyProps != null && copyProps.has(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// handle prop:name or attr:name properties\n\t\t\t\tconst colonIndex = name.indexOf(\":\");\n\t\t\t\tif (colonIndex !== -1) {\n\t\t\t\t\tconst [ns, name1] = [\n\t\t\t\t\t\tname.slice(0, colonIndex),\n\t\t\t\t\t\tname.slice(colonIndex + 1),\n\t\t\t\t\t];\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\tcase \"prop\":\n\t\t\t\t\t\t\t(node as any)[name1] = value;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase \"attr\":\n\t\t\t\t\t\t\tif (value == null || value === false) {\n\t\t\t\t\t\t\t\tif (isHydrating && element.hasAttribute(name1)) {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\telement.getAttribute(name1),\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telement.removeAttribute(name1);\n\t\t\t\t\t\t\t} else if (value === true) {\n\t\t\t\t\t\t\t\tif (isHydrating && !element.hasAttribute(name1)) {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(name, quietProps, value, null, element);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telement.setAttribute(name1, \"\");\n\t\t\t\t\t\t\t} else if (typeof value !== \"string\") {\n\t\t\t\t\t\t\t\tvalue = String(value);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isHydrating && element.getAttribute(name1) !== value) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\telement.getAttribute(name1),\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\telement.setAttribute(name1, String(value));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\t// TODO: fix hydration warnings for the style prop\n\t\t\t\tcase \"style\": {\n\t\t\t\t\tconst style = (element as HTMLElement | SVGElement).style;\n\t\t\t\t\tif (value == null || value === false) {\n\t\t\t\t\t\tif (isHydrating && style.cssText !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tstyle.cssText,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.removeAttribute(\"style\");\n\t\t\t\t\t} else if (value === true) {\n\t\t\t\t\t\tif (isHydrating && style.cssText !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\tstyle.cssText,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"style\", \"\");\n\t\t\t\t\t} else if (typeof value === \"string\") {\n\t\t\t\t\t\tif (style.cssText !== value) {\n\t\t\t\t\t\t\t// TODO: Fix hydration warnings for styles\n\t\t\t\t\t\t\t//if (isHydrating) {\n\t\t\t\t\t\t\t//\temitHydrationWarning(\n\t\t\t\t\t\t\t//\t\tname,\n\t\t\t\t\t\t\t//\t\tquietProps,\n\t\t\t\t\t\t\t//\t\tvalue,\n\t\t\t\t\t\t\t//\t\tstyle.cssText,\n\t\t\t\t\t\t\t//\t\telement,\n\t\t\t\t\t\t\t//\t);\n\t\t\t\t\t\t\t//}\n\n\t\t\t\t\t\t\tstyle.cssText = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (typeof oldValue === \"string\") {\n\t\t\t\t\t\t\t// if the old value was a string, we need to clear the style\n\t\t\t\t\t\t\t// TODO: only clear the styles enumerated in the old value\n\t\t\t\t\t\t\tstyle.cssText = \"\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const styleName in {...oldValue, ...value}) {\n\t\t\t\t\t\t\tconst styleValue = value && (value as any)[styleName];\n\t\t\t\t\t\t\tif (styleValue == null) {\n\t\t\t\t\t\t\t\tif (isHydrating && style.getPropertyValue(styleName) !== \"\") {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\tstyle.getPropertyValue(styleName),\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t\t`style.${styleName}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstyle.removeProperty(styleName);\n\t\t\t\t\t\t\t} else if (style.getPropertyValue(styleName) !== styleValue) {\n\t\t\t\t\t\t\t\t// TODO: hydration warnings for style props\n\t\t\t\t\t\t\t\t//if (isHydrating) {\n\t\t\t\t\t\t\t\t//\temitHydrationWarning(\n\t\t\t\t\t\t\t\t//\t\tname,\n\t\t\t\t\t\t\t\t//\t\tquietProps,\n\t\t\t\t\t\t\t\t//\t\tstyleValue,\n\t\t\t\t\t\t\t\t//\t\tstyle.getPropertyValue(styleName),\n\t\t\t\t\t\t\t\t//\t\telement,\n\t\t\t\t\t\t\t\t//\t\t`style.${styleName}`,\n\t\t\t\t\t\t\t\t//\t);\n\t\t\t\t\t\t\t\t//}\n\t\t\t\t\t\t\t\tstyle.setProperty(styleName, styleValue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"class\":\n\t\t\t\tcase \"className\":\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tif (isHydrating && element.getAttribute(\"class\") !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"class\", \"\");\n\t\t\t\t\t} else if (value == null) {\n\t\t\t\t\t\tif (isHydrating && element.hasAttribute(\"class\")) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.removeAttribute(\"class\");\n\t\t\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\t\t\t// class={{\"included-class\": true, \"excluded-class\": false}} syntax\n\t\t\t\t\t\tif (typeof oldValue === \"string\") {\n\t\t\t\t\t\t\t// if the old value was a string, we need to clear all classes\n\t\t\t\t\t\t\telement.setAttribute(\"class\", \"\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet shouldIssueWarning = false;\n\t\t\t\t\t\tconst hydratingClasses = isHydrating\n\t\t\t\t\t\t\t? new Set(Array.from(element.classList))\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst hydratingClassName = isHydrating\n\t\t\t\t\t\t\t? element.getAttribute(\"class\")\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tfor (const className in {...oldValue, ...value}) {\n\t\t\t\t\t\t\tconst classValue = value && value[className];\n\t\t\t\t\t\t\tif (classValue) {\n\t\t\t\t\t\t\t\telement.classList.add(className);\n\t\t\t\t\t\t\t\tif (hydratingClasses && hydratingClasses.has(className)) {\n\t\t\t\t\t\t\t\t\thydratingClasses.delete(className);\n\t\t\t\t\t\t\t\t} else if (isHydrating) {\n\t\t\t\t\t\t\t\t\tshouldIssueWarning = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telement.classList.remove(className);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tshouldIssueWarning ||\n\t\t\t\t\t\t\t(hydratingClasses && hydratingClasses.size > 0)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tObject.keys(value)\n\t\t\t\t\t\t\t\t\t.filter((k) => value[k])\n\t\t\t\t\t\t\t\t\t.join(\" \"),\n\t\t\t\t\t\t\t\thydratingClassName || \"\",\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!isSVG) {\n\t\t\t\t\t\tif (element.className !== value) {\n\t\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\telement.className,\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telement.className = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (element.getAttribute(\"class\") !== value) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"class\", value as string);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"innerHTML\":\n\t\t\t\t\tif (value !== oldValue) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.innerHTML,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.innerHTML = value as any;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tname[0] === \"o\" &&\n\t\t\t\t\t\tname[1] === \"n\" &&\n\t\t\t\t\t\tname[2] === name[2].toUpperCase() &&\n\t\t\t\t\t\ttypeof value === \"function\"\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Support React-style event names (onClick, onChange, etc.)\n\t\t\t\t\t\tname = name.toLowerCase();\n\t\t\t\t\t}\n\n\t\t\t\t\t// try to set the property directly\n\t\t\t\t\tif (\n\t\t\t\t\t\tname in element &&\n\t\t\t\t\t\t// boolean properties will coerce strings, but sometimes they map to\n\t\t\t\t\t\t// enumerated attributes, where truthy strings (\"false\", \"no\") map to\n\t\t\t\t\t\t// falsy properties, so we force using setAttribute.\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\ttypeof value === \"string\" &&\n\t\t\t\t\t\t\ttypeof (element as any)[name] === \"boolean\"\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tisWritableProperty(element, name)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ((element as any)[name] !== value || oldValue === undefined) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisHydrating &&\n\t\t\t\t\t\t\t\ttypeof (element as any)[name] === \"string\" &&\n\t\t\t\t\t\t\t\t(element as any)[name] !== value\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t(element as any)[name],\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// if the property is writable, assign it directly\n\t\t\t\t\t\t\t(element as any)[name] = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t} else if (value == null || value === false) {\n\t\t\t\t\t\tif (isHydrating && element.hasAttribute(name)) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(name),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.removeAttribute(name);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (typeof value !== \"string\") {\n\t\t\t\t\t\tvalue = String(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.getAttribute(name) !== value) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(name),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.setAttribute(name, value as any);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tarrange({\n\t\ttag,\n\t\tnode,\n\t\tprops,\n\t\tchildren,\n\t}: {\n\t\ttag: string | symbol;\n\t\tnode: Node;\n\t\tprops: Record<string, any>;\n\t\tchildren: Array<Node>;\n\t}): void {\n\t\tif (tag === Portal && (node == null || typeof node.nodeType !== \"number\")) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`<Portal> root is not a node. Received: ${String(node)}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!(\"innerHTML\" in props)) {\n\t\t\tlet oldChild = node.firstChild;\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tconst newChild = children[i];\n\t\t\t\tif (oldChild === newChild) {\n\t\t\t\t\t// the child is already in the right place, so we can skip it\n\t\t\t\t\toldChild = oldChild.nextSibling;\n\t\t\t\t} else {\n\t\t\t\t\tnode.insertBefore(newChild, oldChild);\n\t\t\t\t\tif (\n\t\t\t\t\t\ttag !== Portal &&\n\t\t\t\t\t\toldChild &&\n\t\t\t\t\t\ti + 1 < children.length &&\n\t\t\t\t\t\toldChild !== children[i + 1]\n\t\t\t\t\t) {\n\t\t\t\t\t\toldChild = oldChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove({\n\t\tnode,\n\t\tparentNode,\n\t\tisNested,\n\t}: {\n\t\tnode: Node;\n\t\tparentNode: Node;\n\t\tisNested: boolean;\n\t}): void {\n\t\tif (!isNested && node.parentNode === parentNode) {\n\t\t\tparentNode.removeChild(node);\n\t\t}\n\t},\n\n\ttext({\n\t\tvalue,\n\t\toldNode,\n\t\thydrationNodes,\n\t}: {\n\t\tvalue: string;\n\t\thydrationNodes: Array<Node> | undefined;\n\t\toldNode: Node | undefined;\n\t}): Node {\n\t\tif (hydrationNodes != null) {\n\t\t\tlet node = hydrationNodes.shift();\n\t\t\tif (!node || node.nodeType !== Node.TEXT_NODE) {\n\t\t\t\tconsole.warn(`Expected \"${value}\" while hydrating but found:`, node);\n\t\t\t} else {\n\t\t\t\t// value is a text node, check if it matches the expected text\n\t\t\t\tconst textData = (node as Text).data;\n\t\t\t\tif (textData.length > value.length) {\n\t\t\t\t\tif (textData.startsWith(value)) {\n\t\t\t\t\t\t// the text node is longer than the expected text, so we\n\t\t\t\t\t\t// reuse the existing text node, but truncate it and unshift the rest\n\t\t\t\t\t\t(node as Text).data = value;\n\t\t\t\t\t\thydrationNodes.unshift(\n\t\t\t\t\t\t\tdocument.createTextNode(textData.slice(value.length)),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t}\n\t\t\t\t} else if (textData === value) {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\t// We log textData and not node because node will be mutated\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Expected \"${value}\" while hydrating but found:`,\n\t\t\t\t\ttextData,\n\t\t\t\t);\n\t\t\t\toldNode = node;\n\t\t\t}\n\t\t}\n\n\t\tif (oldNode != null) {\n\t\t\tif ((oldNode as Text).data !== value) {\n\t\t\t\t(oldNode as Text).data = value;\n\t\t\t}\n\n\t\t\treturn oldNode;\n\t\t}\n\n\t\treturn document.createTextNode(value);\n\t},\n\n\traw({\n\t\tvalue,\n\t\tscope: xmlns,\n\t\thydrationNodes,\n\t}: {\n\t\tvalue: string | Node;\n\t\tscope: string | undefined;\n\t\thydrationNodes: Array<Node> | undefined;\n\t}): ElementValue<Node> {\n\t\tlet nodes: Array<Node>;\n\t\tif (typeof value === \"string\") {\n\t\t\tconst el =\n\t\t\t\txmlns == null\n\t\t\t\t\t? document.createElement(\"div\")\n\t\t\t\t\t: document.createElementNS(xmlns, \"svg\");\n\t\t\tel.innerHTML = value;\n\t\t\tnodes = Array.from(el.childNodes);\n\t\t} else {\n\t\t\tnodes = value == null ? [] : Array.isArray(value) ? [...value] : [value];\n\t\t}\n\n\t\tif (hydrationNodes != null) {\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tconst node = nodes[i];\n\t\t\t\t// check if node is equal to the next node in the hydration array\n\t\t\t\tconst hydrationNode = hydrationNodes.shift();\n\t\t\t\tif (\n\t\t\t\t\thydrationNode &&\n\t\t\t\t\ttypeof hydrationNode === \"object\" &&\n\t\t\t\t\ttypeof hydrationNode.nodeType === \"number\" &&\n\t\t\t\t\tnode.isEqualNode(hydrationNode as Node)\n\t\t\t\t) {\n\t\t\t\t\tnodes[i] = hydrationNode as Node;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Expected <Raw value=\"${String(value)}\"> while hydrating but found:`,\n\t\t\t\t\t\thydrationNode,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes.length === 0\n\t\t\t? undefined\n\t\t\t: nodes.length === 1\n\t\t\t\t? nodes[0]\n\t\t\t\t: nodes;\n\t},\n};\n\nexport class DOMRenderer extends Renderer<Node, string, Element> {\n\tconstructor() {\n\t\tsuper(adapter);\n\t}\n\n\trender(\n\t\tchildren: Children,\n\t\troot: Element,\n\t\tctx?: Context,\n\t): Promise<ElementValue<Node>> | ElementValue<Node> {\n\t\tvalidateRoot(root);\n\t\treturn super.render(children, root, ctx);\n\t}\n\n\thydrate(\n\t\tchildren: Children,\n\t\troot: Element,\n\t\tctx?: Context,\n\t): Promise<ElementValue<Node>> | ElementValue<Node> {\n\t\tvalidateRoot(root);\n\t\treturn super.hydrate(children, root, ctx);\n\t}\n}\n\nfunction validateRoot(root: unknown): asserts root is Element {\n\tif (\n\t\troot == null ||\n\t\t(typeof root === \"object\" && typeof (root as any).nodeType !== \"number\")\n\t) {\n\t\tthrow new TypeError(`Render root is not a node. Received: ${String(root)}`);\n\t} else if ((root as Node).nodeType !== Node.ELEMENT_NODE) {\n\t\tthrow new TypeError(\n\t\t\t`Render root must be an element node. Received: ${String(root)}`,\n\t\t);\n\t}\n}\n\nexport const renderer = new DOMRenderer();\n\ndeclare global {\n\tmodule Crank {\n\t\tinterface EventMap extends GlobalEventHandlersEventMap {}\n\t}\n}\n"],"names":["Portal","Renderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dom.cjs","sources":["../src/dom.ts"],"sourcesContent":["import {\n\tChildren,\n\tContext,\n\tElementValue,\n\tPortal,\n\tRenderer,\n\tRenderAdapter,\n} from \"./crank.js\";\nimport {camelToKebabCase, formatStyleValue} from \"./_css.js\";\n\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nconst MATHML_NAMESPACE = \"http://www.w3.org/1998/Math/MathML\";\n\nfunction isWritableProperty(element: Element, name: string): boolean {\n\t// walk up the object's prototype chain to find the owner\n\tlet propOwner = element;\n\tdo {\n\t\tif (Object.prototype.hasOwnProperty.call(propOwner, name)) {\n\t\t\tbreak;\n\t\t}\n\t} while ((propOwner = Object.getPrototypeOf(propOwner)));\n\n\tif (propOwner === null) {\n\t\treturn false;\n\t}\n\n\t// get the descriptor for the named property and check whether it implies\n\t// that the property is writable\n\tconst descriptor = Object.getOwnPropertyDescriptor(propOwner, name);\n\tif (\n\t\tdescriptor != null &&\n\t\t(descriptor.writable === true || descriptor.set !== undefined)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction emitHydrationWarning(\n\tpropName: string,\n\tquietProps: Set<string> | undefined,\n\texpectedValue: any,\n\tactualValue: any,\n\telement: Element,\n\tdisplayName?: string,\n) {\n\tconst checkName = propName;\n\tconst showName = displayName || propName;\n\tif (!quietProps || !quietProps.has(checkName)) {\n\t\tif (expectedValue === null || expectedValue === false) {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be missing but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t} else if (expectedValue === true || expectedValue === \"\") {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be ${expectedValue === true ? \"present\" : '\"\"'} but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t} else if (\n\t\t\ttypeof window !== \"undefined\" &&\n\t\t\twindow.location &&\n\t\t\tnew URL(expectedValue, window.location.origin).href ===\n\t\t\t\tnew URL(actualValue, window.location.origin).href\n\t\t) {\n\t\t\t// attrs which are URLs will often be resolved to their full\n\t\t\t// href in the DOM, so we squash these errors\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t`Expected \"${showName}\" to be \"${String(expectedValue)}\" but found ${String(actualValue)} while hydrating:`,\n\t\t\t\telement,\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport const adapter: Partial<RenderAdapter<Node, string, Element>> = {\n\tscope({\n\t\tscope: xmlns,\n\t\ttag,\n\t\tprops,\n\t}: {\n\t\tscope: string | undefined;\n\t\ttag: string | symbol;\n\t\tprops: Record<string, any>;\n\t}): string | undefined {\n\t\tswitch (tag) {\n\t\t\tcase Portal:\n\t\t\t\t// TODO: read the namespace from the portal root element\n\t\t\t\txmlns = undefined;\n\t\t\t\tbreak;\n\t\t\tcase \"svg\":\n\t\t\t\txmlns = SVG_NAMESPACE;\n\t\t\t\tbreak;\n\t\t\tcase \"math\":\n\t\t\t\txmlns = MATHML_NAMESPACE;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn props.xmlns || xmlns;\n\t},\n\n\tcreate({\n\t\ttag,\n\t\ttagName,\n\t\tscope: xmlns,\n\t}: {\n\t\ttag: string | symbol;\n\t\ttagName: string;\n\t\tscope: string | undefined;\n\t}): Node {\n\t\tif (typeof tag !== \"string\") {\n\t\t\tthrow new Error(`Unknown tag: ${tagName}`);\n\t\t} else if (tag.toLowerCase() === \"svg\") {\n\t\t\txmlns = SVG_NAMESPACE;\n\t\t} else if (tag.toLowerCase() === \"math\") {\n\t\t\txmlns = MATHML_NAMESPACE;\n\t\t}\n\n\t\treturn xmlns\n\t\t\t? document.createElementNS(xmlns, tag)\n\t\t\t: document.createElement(tag);\n\t},\n\n\tadopt({\n\t\ttag,\n\t\ttagName,\n\t\tnode,\n\t}: {\n\t\ttag: string | symbol;\n\t\ttagName: string;\n\t\tnode: Node | undefined;\n\t}): Array<Node> | undefined {\n\t\tif (typeof tag !== \"string\" && tag !== Portal) {\n\t\t\tthrow new Error(`Unknown tag: ${tagName}`);\n\t\t}\n\n\t\tif (\n\t\t\tnode === document.body ||\n\t\t\tnode === document.head ||\n\t\t\tnode === document.documentElement ||\n\t\t\tnode === document\n\t\t) {\n\t\t\tconsole.warn(\n\t\t\t\t`Hydrating ${node.nodeName.toLowerCase()} is discouraged as it is destructive and may remove unknown nodes.`,\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tnode == null ||\n\t\t\t(typeof tag === \"string\" &&\n\t\t\t\t(node.nodeType !== Node.ELEMENT_NODE ||\n\t\t\t\t\ttag.toLowerCase() !== (node as Element).tagName.toLowerCase()))\n\t\t) {\n\t\t\tconsole.warn(`Expected <${tagName}> while hydrating but found: `, node);\n\t\t\treturn;\n\t\t}\n\n\t\treturn Array.from(node.childNodes);\n\t},\n\n\tpatch({\n\t\ttagName,\n\t\tnode,\n\t\tprops,\n\t\toldProps,\n\t\tscope: xmlns,\n\t\tcopyProps,\n\t\tquietProps,\n\t\tisHydrating,\n\t}: {\n\t\tnode: Node;\n\t\ttagName: string;\n\t\tprops: Record<string, any>;\n\t\toldProps: Record<string, any> | undefined;\n\t\tscope: string | undefined;\n\t\tcopyProps: Set<string> | undefined;\n\t\tquietProps: Set<string> | undefined;\n\t\tisHydrating: boolean;\n\t}): void {\n\t\tif (node.nodeType !== Node.ELEMENT_NODE) {\n\t\t\tthrow new TypeError(`Cannot patch node: ${String(node)}`);\n\t\t} else if (props.class && props.className) {\n\t\t\tconsole.error(\n\t\t\t\t`Both \"class\" and \"className\" set in props for <${tagName}>. Use one or the other.`,\n\t\t\t);\n\t\t}\n\n\t\tconst element = node as Element;\n\t\tconst isSVG = xmlns === SVG_NAMESPACE;\n\t\tconst isMathML = xmlns === MATHML_NAMESPACE;\n\t\tfor (let name in {...oldProps, ...props}) {\n\t\t\tlet value = props[name];\n\t\t\tconst oldValue = oldProps ? oldProps[name] : undefined;\n\t\t\t{\n\t\t\t\tif (copyProps != null && copyProps.has(name)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// handle prop:name or attr:name properties\n\t\t\t\tconst colonIndex = name.indexOf(\":\");\n\t\t\t\tif (colonIndex !== -1) {\n\t\t\t\t\tconst [ns, name1] = [\n\t\t\t\t\t\tname.slice(0, colonIndex),\n\t\t\t\t\t\tname.slice(colonIndex + 1),\n\t\t\t\t\t];\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\tcase \"prop\":\n\t\t\t\t\t\t\t(node as any)[name1] = value;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\tcase \"attr\":\n\t\t\t\t\t\t\tif (value == null || value === false) {\n\t\t\t\t\t\t\t\tif (isHydrating && element.hasAttribute(name1)) {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\telement.getAttribute(name1),\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telement.removeAttribute(name1);\n\t\t\t\t\t\t\t} else if (value === true) {\n\t\t\t\t\t\t\t\tif (isHydrating && !element.hasAttribute(name1)) {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(name, quietProps, value, null, element);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telement.setAttribute(name1, \"\");\n\t\t\t\t\t\t\t} else if (typeof value !== \"string\") {\n\t\t\t\t\t\t\t\tvalue = String(value);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isHydrating && element.getAttribute(name1) !== value) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\telement.getAttribute(name1),\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\telement.setAttribute(name1, String(value));\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (name) {\n\t\t\t\t// TODO: fix hydration warnings for the style prop\n\t\t\t\tcase \"style\": {\n\t\t\t\t\tconst style = (element as HTMLElement | SVGElement).style;\n\t\t\t\t\tif (value == null || value === false) {\n\t\t\t\t\t\tif (isHydrating && style.cssText !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tstyle.cssText,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.removeAttribute(\"style\");\n\t\t\t\t\t} else if (value === true) {\n\t\t\t\t\t\tif (isHydrating && style.cssText !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\tstyle.cssText,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"style\", \"\");\n\t\t\t\t\t} else if (typeof value === \"string\") {\n\t\t\t\t\t\tif (style.cssText !== value) {\n\t\t\t\t\t\t\t// TODO: Fix hydration warnings for styles\n\t\t\t\t\t\t\t//if (isHydrating) {\n\t\t\t\t\t\t\t//\temitHydrationWarning(\n\t\t\t\t\t\t\t//\t\tname,\n\t\t\t\t\t\t\t//\t\tquietProps,\n\t\t\t\t\t\t\t//\t\tvalue,\n\t\t\t\t\t\t\t//\t\tstyle.cssText,\n\t\t\t\t\t\t\t//\t\telement,\n\t\t\t\t\t\t\t//\t);\n\t\t\t\t\t\t\t//}\n\n\t\t\t\t\t\t\tstyle.cssText = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (typeof oldValue === \"string\") {\n\t\t\t\t\t\t\t// if the old value was a string, we need to clear the style\n\t\t\t\t\t\t\t// TODO: only clear the styles enumerated in the old value\n\t\t\t\t\t\t\tstyle.cssText = \"\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const styleName in {...oldValue, ...value}) {\n\t\t\t\t\t\t\tconst cssName = camelToKebabCase(styleName);\n\t\t\t\t\t\t\tconst styleValue = value && (value as any)[styleName];\n\t\t\t\t\t\t\tif (styleValue == null) {\n\t\t\t\t\t\t\t\tif (isHydrating && style.getPropertyValue(cssName) !== \"\") {\n\t\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\tstyle.getPropertyValue(cssName),\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t\t`style.${styleName}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstyle.removeProperty(cssName);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst formattedValue = formatStyleValue(cssName, styleValue);\n\t\t\t\t\t\t\t\tif (style.getPropertyValue(cssName) !== formattedValue) {\n\t\t\t\t\t\t\t\t\t// TODO: hydration warnings for style props\n\t\t\t\t\t\t\t\t\t//if (isHydrating) {\n\t\t\t\t\t\t\t\t\t//\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\t//\t\tname,\n\t\t\t\t\t\t\t\t\t//\t\tquietProps,\n\t\t\t\t\t\t\t\t\t//\t\tformattedValue,\n\t\t\t\t\t\t\t\t\t//\t\tstyle.getPropertyValue(cssName),\n\t\t\t\t\t\t\t\t\t//\t\telement,\n\t\t\t\t\t\t\t\t\t//\t\t`style.${styleName}`,\n\t\t\t\t\t\t\t\t\t//\t);\n\t\t\t\t\t\t\t\t\t//}\n\t\t\t\t\t\t\t\t\tstyle.setProperty(cssName, formattedValue);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"class\":\n\t\t\t\tcase \"className\":\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tif (isHydrating && element.getAttribute(\"class\") !== \"\") {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"class\", \"\");\n\t\t\t\t\t} else if (value == null) {\n\t\t\t\t\t\tif (isHydrating && element.hasAttribute(\"class\")) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.removeAttribute(\"class\");\n\t\t\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\t\t\t// class={{\"included-class\": true, \"excluded-class\": false}} syntax\n\t\t\t\t\t\tif (typeof oldValue === \"string\") {\n\t\t\t\t\t\t\t// if the old value was a string, we need to clear all classes\n\t\t\t\t\t\t\telement.setAttribute(\"class\", \"\");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet shouldIssueWarning = false;\n\t\t\t\t\t\tconst hydratingClasses = isHydrating\n\t\t\t\t\t\t\t? new Set(Array.from(element.classList))\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst hydratingClassName = isHydrating\n\t\t\t\t\t\t\t? element.getAttribute(\"class\")\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\t\tfor (const className in {...oldValue, ...value}) {\n\t\t\t\t\t\t\tconst classValue = value && value[className];\n\t\t\t\t\t\t\tif (classValue) {\n\t\t\t\t\t\t\t\telement.classList.add(className);\n\t\t\t\t\t\t\t\tif (hydratingClasses && hydratingClasses.has(className)) {\n\t\t\t\t\t\t\t\t\thydratingClasses.delete(className);\n\t\t\t\t\t\t\t\t} else if (isHydrating) {\n\t\t\t\t\t\t\t\t\tshouldIssueWarning = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telement.classList.remove(className);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tshouldIssueWarning ||\n\t\t\t\t\t\t\t(hydratingClasses && hydratingClasses.size > 0)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tObject.keys(value)\n\t\t\t\t\t\t\t\t\t.filter((k) => value[k])\n\t\t\t\t\t\t\t\t\t.join(\" \"),\n\t\t\t\t\t\t\t\thydratingClassName || \"\",\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!isSVG && !isMathML) {\n\t\t\t\t\t\tif (element.className !== value) {\n\t\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\telement.className,\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telement.className = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (element.getAttribute(\"class\") !== value) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(\"class\"),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.setAttribute(\"class\", value as string);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"innerHTML\":\n\t\t\t\t\tif (value !== oldValue) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.innerHTML,\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telement.innerHTML = value as any;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: {\n\t\t\t\t\tif (\n\t\t\t\t\t\tname[0] === \"o\" &&\n\t\t\t\t\t\tname[1] === \"n\" &&\n\t\t\t\t\t\tname[2] === name[2].toUpperCase() &&\n\t\t\t\t\t\ttypeof value === \"function\"\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Support React-style event names (onClick, onChange, etc.)\n\t\t\t\t\t\tname = name.toLowerCase();\n\t\t\t\t\t}\n\n\t\t\t\t\t// try to set the property directly\n\t\t\t\t\tif (\n\t\t\t\t\t\tname in element &&\n\t\t\t\t\t\t// boolean properties will coerce strings, but sometimes they map to\n\t\t\t\t\t\t// enumerated attributes, where truthy strings (\"false\", \"no\") map to\n\t\t\t\t\t\t// falsy properties, so we force using setAttribute.\n\t\t\t\t\t\t!(\n\t\t\t\t\t\t\ttypeof value === \"string\" &&\n\t\t\t\t\t\t\ttypeof (element as any)[name] === \"boolean\"\n\t\t\t\t\t\t) &&\n\t\t\t\t\t\tisWritableProperty(element, name)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ((element as any)[name] !== value || oldValue === undefined) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tisHydrating &&\n\t\t\t\t\t\t\t\ttypeof (element as any)[name] === \"string\" &&\n\t\t\t\t\t\t\t\t(element as any)[name] !== value\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t(element as any)[name],\n\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// if the property is writable, assign it directly\n\t\t\t\t\t\t\t(element as any)[name] = value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (value === true) {\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t} else if (value == null || value === false) {\n\t\t\t\t\t\tif (isHydrating && element.hasAttribute(name)) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(name),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.removeAttribute(name);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (typeof value !== \"string\") {\n\t\t\t\t\t\tvalue = String(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (element.getAttribute(name) !== value) {\n\t\t\t\t\t\tif (isHydrating) {\n\t\t\t\t\t\t\temitHydrationWarning(\n\t\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\t\tquietProps,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\telement.getAttribute(name),\n\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telement.setAttribute(name, value as any);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tarrange({\n\t\ttag,\n\t\tnode,\n\t\tprops,\n\t\tchildren,\n\t}: {\n\t\ttag: string | symbol;\n\t\tnode: Node;\n\t\tprops: Record<string, any>;\n\t\tchildren: Array<Node>;\n\t}): void {\n\t\tif (tag === Portal && (node == null || typeof node.nodeType !== \"number\")) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`<Portal> root is not a node. Received: ${String(node)}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!(\"innerHTML\" in props)) {\n\t\t\tlet oldChild = node.firstChild;\n\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\tconst newChild = children[i];\n\t\t\t\tif (oldChild === newChild) {\n\t\t\t\t\t// the child is already in the right place, so we can skip it\n\t\t\t\t\toldChild = oldChild.nextSibling;\n\t\t\t\t} else {\n\t\t\t\t\tnode.insertBefore(newChild, oldChild);\n\t\t\t\t\tif (\n\t\t\t\t\t\ttag !== Portal &&\n\t\t\t\t\t\toldChild &&\n\t\t\t\t\t\ti + 1 < children.length &&\n\t\t\t\t\t\toldChild !== children[i + 1]\n\t\t\t\t\t) {\n\t\t\t\t\t\toldChild = oldChild.nextSibling;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove({\n\t\tnode,\n\t\tparentNode,\n\t\tisNested,\n\t}: {\n\t\tnode: Node;\n\t\tparentNode: Node;\n\t\tisNested: boolean;\n\t}): void {\n\t\tif (!isNested && node.parentNode === parentNode) {\n\t\t\tparentNode.removeChild(node);\n\t\t}\n\t},\n\n\ttext({\n\t\tvalue,\n\t\toldNode,\n\t\thydrationNodes,\n\t}: {\n\t\tvalue: string;\n\t\thydrationNodes: Array<Node> | undefined;\n\t\toldNode: Node | undefined;\n\t}): Node {\n\t\tif (hydrationNodes != null) {\n\t\t\tlet node = hydrationNodes.shift();\n\t\t\tif (!node || node.nodeType !== Node.TEXT_NODE) {\n\t\t\t\tconsole.warn(`Expected \"${value}\" while hydrating but found:`, node);\n\t\t\t} else {\n\t\t\t\t// value is a text node, check if it matches the expected text\n\t\t\t\tconst textData = (node as Text).data;\n\t\t\t\tif (textData.length > value.length) {\n\t\t\t\t\tif (textData.startsWith(value)) {\n\t\t\t\t\t\t// the text node is longer than the expected text, so we\n\t\t\t\t\t\t// reuse the existing text node, but truncate it and unshift the rest\n\t\t\t\t\t\t(node as Text).data = value;\n\t\t\t\t\t\thydrationNodes.unshift(\n\t\t\t\t\t\t\tdocument.createTextNode(textData.slice(value.length)),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t}\n\t\t\t\t} else if (textData === value) {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\n\t\t\t\t// We log textData and not node because node will be mutated\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Expected \"${value}\" while hydrating but found:`,\n\t\t\t\t\ttextData,\n\t\t\t\t);\n\t\t\t\toldNode = node;\n\t\t\t}\n\t\t}\n\n\t\tif (oldNode != null) {\n\t\t\tif ((oldNode as Text).data !== value) {\n\t\t\t\t(oldNode as Text).data = value;\n\t\t\t}\n\n\t\t\treturn oldNode;\n\t\t}\n\n\t\treturn document.createTextNode(value);\n\t},\n\n\traw({\n\t\tvalue,\n\t\tscope: xmlns,\n\t\thydrationNodes,\n\t}: {\n\t\tvalue: string | Node;\n\t\tscope: string | undefined;\n\t\thydrationNodes: Array<Node> | undefined;\n\t}): ElementValue<Node> {\n\t\tlet nodes: Array<Node>;\n\t\tif (typeof value === \"string\") {\n\t\t\tconst el =\n\t\t\t\txmlns == null\n\t\t\t\t\t? document.createElement(\"div\")\n\t\t\t\t\t: xmlns === SVG_NAMESPACE\n\t\t\t\t\t\t? document.createElementNS(xmlns, \"svg\")\n\t\t\t\t\t\t: document.createElementNS(xmlns, \"math\");\n\t\t\tel.innerHTML = value;\n\t\t\tnodes = Array.from(el.childNodes);\n\t\t} else {\n\t\t\tnodes = value == null ? [] : Array.isArray(value) ? [...value] : [value];\n\t\t}\n\n\t\tif (hydrationNodes != null) {\n\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\tconst node = nodes[i];\n\t\t\t\t// check if node is equal to the next node in the hydration array\n\t\t\t\tconst hydrationNode = hydrationNodes.shift();\n\t\t\t\tif (\n\t\t\t\t\thydrationNode &&\n\t\t\t\t\ttypeof hydrationNode === \"object\" &&\n\t\t\t\t\ttypeof hydrationNode.nodeType === \"number\" &&\n\t\t\t\t\tnode.isEqualNode(hydrationNode as Node)\n\t\t\t\t) {\n\t\t\t\t\tnodes[i] = hydrationNode as Node;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Expected <Raw value=\"${String(value)}\"> while hydrating but found:`,\n\t\t\t\t\t\thydrationNode,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn nodes.length === 0\n\t\t\t? undefined\n\t\t\t: nodes.length === 1\n\t\t\t\t? nodes[0]\n\t\t\t\t: nodes;\n\t},\n};\n\nexport class DOMRenderer extends Renderer<Node, string, Element> {\n\tconstructor() {\n\t\tsuper(adapter);\n\t}\n\n\trender(\n\t\tchildren: Children,\n\t\troot: Element,\n\t\tctx?: Context,\n\t): Promise<ElementValue<Node>> | ElementValue<Node> {\n\t\tvalidateRoot(root);\n\t\treturn super.render(children, root, ctx);\n\t}\n\n\thydrate(\n\t\tchildren: Children,\n\t\troot: Element,\n\t\tctx?: Context,\n\t): Promise<ElementValue<Node>> | ElementValue<Node> {\n\t\tvalidateRoot(root);\n\t\treturn super.hydrate(children, root, ctx);\n\t}\n}\n\nfunction validateRoot(root: unknown): asserts root is Element {\n\tif (\n\t\troot == null ||\n\t\t(typeof root === \"object\" && typeof (root as any).nodeType !== \"number\")\n\t) {\n\t\tthrow new TypeError(`Render root is not a node. Received: ${String(root)}`);\n\t} else if ((root as Node).nodeType !== Node.ELEMENT_NODE) {\n\t\tthrow new TypeError(\n\t\t\t`Render root must be an element node. Received: ${String(root)}`,\n\t\t);\n\t}\n}\n\nexport const renderer = new DOMRenderer();\n\ndeclare global {\n\tmodule Crank {\n\t\tinterface EventMap extends GlobalEventHandlersEventMap {}\n\t}\n}\n"],"names":["Portal","camelToKebabCase","formatStyleValue","Renderer"],"mappings":"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"}
|
package/dom.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/// <reference types="dom.d.ts" />
|
|
2
2
|
import { Renderer, Portal } from './crank.js';
|
|
3
|
-
import './
|
|
3
|
+
import { camelToKebabCase, formatStyleValue } from './_css.js';
|
|
4
4
|
|
|
5
5
|
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
6
|
+
const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
|
|
6
7
|
function isWritableProperty(element, name) {
|
|
7
8
|
// walk up the object's prototype chain to find the owner
|
|
8
9
|
let propOwner = element;
|
|
@@ -52,6 +53,9 @@ const adapter = {
|
|
|
52
53
|
case "svg":
|
|
53
54
|
xmlns = SVG_NAMESPACE;
|
|
54
55
|
break;
|
|
56
|
+
case "math":
|
|
57
|
+
xmlns = MATHML_NAMESPACE;
|
|
58
|
+
break;
|
|
55
59
|
}
|
|
56
60
|
return props.xmlns || xmlns;
|
|
57
61
|
},
|
|
@@ -62,6 +66,9 @@ const adapter = {
|
|
|
62
66
|
else if (tag.toLowerCase() === "svg") {
|
|
63
67
|
xmlns = SVG_NAMESPACE;
|
|
64
68
|
}
|
|
69
|
+
else if (tag.toLowerCase() === "math") {
|
|
70
|
+
xmlns = MATHML_NAMESPACE;
|
|
71
|
+
}
|
|
65
72
|
return xmlns
|
|
66
73
|
? document.createElementNS(xmlns, tag)
|
|
67
74
|
: document.createElement(tag);
|
|
@@ -94,6 +101,7 @@ const adapter = {
|
|
|
94
101
|
}
|
|
95
102
|
const element = node;
|
|
96
103
|
const isSVG = xmlns === SVG_NAMESPACE;
|
|
104
|
+
const isMathML = xmlns === MATHML_NAMESPACE;
|
|
97
105
|
for (let name in { ...oldProps, ...props }) {
|
|
98
106
|
let value = props[name];
|
|
99
107
|
const oldValue = oldProps ? oldProps[name] : undefined;
|
|
@@ -174,26 +182,30 @@ const adapter = {
|
|
|
174
182
|
style.cssText = "";
|
|
175
183
|
}
|
|
176
184
|
for (const styleName in { ...oldValue, ...value }) {
|
|
185
|
+
const cssName = camelToKebabCase(styleName);
|
|
177
186
|
const styleValue = value && value[styleName];
|
|
178
187
|
if (styleValue == null) {
|
|
179
|
-
if (isHydrating && style.getPropertyValue(
|
|
180
|
-
emitHydrationWarning(name, quietProps, null, style.getPropertyValue(
|
|
188
|
+
if (isHydrating && style.getPropertyValue(cssName) !== "") {
|
|
189
|
+
emitHydrationWarning(name, quietProps, null, style.getPropertyValue(cssName), element, `style.${styleName}`);
|
|
181
190
|
}
|
|
182
|
-
style.removeProperty(
|
|
191
|
+
style.removeProperty(cssName);
|
|
183
192
|
}
|
|
184
|
-
else
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
else {
|
|
194
|
+
const formattedValue = formatStyleValue(cssName, styleValue);
|
|
195
|
+
if (style.getPropertyValue(cssName) !== formattedValue) {
|
|
196
|
+
// TODO: hydration warnings for style props
|
|
197
|
+
//if (isHydrating) {
|
|
198
|
+
// emitHydrationWarning(
|
|
199
|
+
// name,
|
|
200
|
+
// quietProps,
|
|
201
|
+
// formattedValue,
|
|
202
|
+
// style.getPropertyValue(cssName),
|
|
203
|
+
// element,
|
|
204
|
+
// `style.${styleName}`,
|
|
205
|
+
// );
|
|
206
|
+
//}
|
|
207
|
+
style.setProperty(cssName, formattedValue);
|
|
208
|
+
}
|
|
197
209
|
}
|
|
198
210
|
}
|
|
199
211
|
}
|
|
@@ -248,7 +260,7 @@ const adapter = {
|
|
|
248
260
|
.join(" "), hydratingClassName || "", element);
|
|
249
261
|
}
|
|
250
262
|
}
|
|
251
|
-
else if (!isSVG) {
|
|
263
|
+
else if (!isSVG && !isMathML) {
|
|
252
264
|
if (element.className !== value) {
|
|
253
265
|
if (isHydrating) {
|
|
254
266
|
emitHydrationWarning(name, quietProps, value, element.className, element);
|
|
@@ -389,7 +401,9 @@ const adapter = {
|
|
|
389
401
|
if (typeof value === "string") {
|
|
390
402
|
const el = xmlns == null
|
|
391
403
|
? document.createElement("div")
|
|
392
|
-
:
|
|
404
|
+
: xmlns === SVG_NAMESPACE
|
|
405
|
+
? document.createElementNS(xmlns, "svg")
|
|
406
|
+
: document.createElementNS(xmlns, "math");
|
|
393
407
|
el.innerHTML = value;
|
|
394
408
|
nodes = Array.from(el.childNodes);
|
|
395
409
|
}
|