microtags 0.0.14 → 0.1.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 +554 -20
- package/dist/build.cjs +412 -0
- package/dist/build.cjs.map +7 -0
- package/dist/build.d.ts +17 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +395 -0
- package/dist/build.js.map +7 -0
- package/dist/builders.d.ts +70 -4
- package/dist/builders.d.ts.map +1 -1
- package/dist/{chunk-CCYWRJW6.js → chunk-46UEUDVX.js} +4 -26
- package/dist/chunk-46UEUDVX.js.map +7 -0
- package/dist/chunk-LS4L5QRD.js +26 -0
- package/dist/chunk-LS4L5QRD.js.map +7 -0
- package/dist/chunk-RKWPTT6P.js +69 -0
- package/dist/chunk-RKWPTT6P.js.map +7 -0
- package/dist/chunk-ZZ4ZLOQY.js +33 -0
- package/dist/chunk-ZZ4ZLOQY.js.map +7 -0
- package/dist/cli.cjs +536 -0
- package/dist/cli.cjs.map +7 -0
- package/dist/context.js +2 -1
- package/dist/esbuild.cjs +451 -0
- package/dist/esbuild.cjs.map +7 -0
- package/dist/esbuild.d.ts +7 -0
- package/dist/esbuild.d.ts.map +1 -0
- package/dist/esbuild.js +434 -0
- package/dist/esbuild.js.map +7 -0
- package/dist/factory.d.ts +7 -1
- package/dist/factory.d.ts.map +1 -1
- package/dist/htm.browser.cjs +591 -0
- package/dist/htm.browser.cjs.map +7 -0
- package/dist/htm.browser.d.ts +30 -0
- package/dist/htm.browser.d.ts.map +1 -0
- package/dist/htm.browser.js +498 -0
- package/dist/htm.browser.js.map +7 -0
- package/dist/htm.browser.min.js +3 -0
- package/dist/htm.browser.min.js.map +7 -0
- package/dist/htm.cjs +284 -0
- package/dist/htm.cjs.map +7 -0
- package/dist/htm.d.ts +14 -0
- package/dist/htm.d.ts.map +1 -0
- package/dist/htm.js +196 -0
- package/dist/htm.js.map +7 -0
- package/dist/htm.min.js +3 -0
- package/dist/htm.min.js.map +7 -0
- package/dist/index.cjs +125 -11
- package/dist/index.cjs.map +2 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +133 -17
- package/dist/index.js.map +2 -2
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +3 -3
- package/dist/meta.json +411 -26
- package/dist/preact-shared.d.ts +61 -0
- package/dist/preact-shared.d.ts.map +1 -0
- package/dist/preact.browser.d.ts +8 -0
- package/dist/preact.browser.d.ts.map +1 -0
- package/dist/preact.browser.js +45 -0
- package/dist/preact.browser.js.map +7 -0
- package/dist/preact.browser.min.js +2 -0
- package/dist/preact.browser.min.js.map +7 -0
- package/dist/preact.cjs +128 -0
- package/dist/preact.cjs.map +7 -0
- package/dist/preact.d.ts +9 -0
- package/dist/preact.d.ts.map +1 -0
- package/dist/preact.js +35 -0
- package/dist/preact.js.map +7 -0
- package/dist/render-support.cjs +86 -0
- package/dist/render-support.cjs.map +7 -0
- package/dist/render-support.d.ts +23 -0
- package/dist/render-support.d.ts.map +1 -0
- package/dist/render-support.js +12 -0
- package/dist/render-support.js.map +7 -0
- package/dist/render-support.min.js +2 -0
- package/dist/render-support.min.js.map +7 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vite.cjs +448 -0
- package/dist/vite.cjs.map +7 -0
- package/dist/vite.d.ts +7 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +429 -0
- package/dist/vite.js.map +7 -0
- package/package.json +92 -13
- package/dist/chunk-CCYWRJW6.js.map +0 -7
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MicrotagElementClass } from './builders.js';
|
|
2
|
+
import type { PropDef } from './types.js';
|
|
3
|
+
type Comp = MicrotagElementClass<Record<string, PropDef>>;
|
|
4
|
+
type VType = string | Comp | ((...a: unknown[]) => unknown);
|
|
5
|
+
interface VNode {
|
|
6
|
+
t: VType;
|
|
7
|
+
p: Record<string, unknown> | null;
|
|
8
|
+
c: unknown[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Opaque, trusted output of the templater. In the browser it describes
|
|
12
|
+
* nodes for `mount`; `String(m)` still yields static HTML.
|
|
13
|
+
*/
|
|
14
|
+
export declare class Markup {
|
|
15
|
+
readonly _n: VNode | unknown[] | null;
|
|
16
|
+
readonly _h: string | null;
|
|
17
|
+
constructor(n: VNode | unknown[] | null, h?: string | null);
|
|
18
|
+
toString(): string;
|
|
19
|
+
}
|
|
20
|
+
export declare function raw(s: string): Markup;
|
|
21
|
+
export declare function h(type: VType, props: Record<string, unknown> | null, ...children: unknown[]): Markup;
|
|
22
|
+
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): Markup;
|
|
23
|
+
/**
|
|
24
|
+
* Turn markup into DOM inside `container`, binding signals and
|
|
25
|
+
* listeners. Returns a function that stops the bindings and removes
|
|
26
|
+
* the listeners, leaving the DOM in place.
|
|
27
|
+
*/
|
|
28
|
+
export declare function mount(container: Element, markup: Markup): () => void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=htm.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htm.browser.d.ts","sourceRoot":"","sources":["../src/htm.browser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAwBzC,KAAK,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AACzD,KAAK,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAC,OAAO,EAAE,KAAK,OAAO,CAAC,CAAA;AAE1D,UAAU,KAAK;IACX,CAAC,EAAC,KAAK,CAAA;IACP,CAAC,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAChC,CAAC,EAAC,OAAO,EAAE,CAAA;CACd;AAKD;;;GAGG;AACH,qBAAa,MAAM;IAEf,QAAQ,CAAC,EAAE,EAAC,KAAK,GAAG,OAAO,EAAE,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,EAAE,EAAC,MAAM,GAAG,IAAI,CAAA;gBACZ,CAAC,EAAC,KAAK,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,GAAC,MAAM,GAAG,IAAW;IAK/D,QAAQ,IAAI,MAAM;CAGrB;AAKD,wBAAgB,GAAG,CAAE,CAAC,EAAC,MAAM,GAAE,MAAM,CAEpC;AAmFD,wBAAgB,CAAC,CACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACpC,GAAG,QAAQ,EAAC,OAAO,EAAE,GACvB,MAAM,CAUP;AAID,wBAAgB,IAAI,CAChB,OAAO,EAAC,oBAAoB,EAC5B,GAAG,MAAM,EAAC,OAAO,EAAE,GACrB,MAAM,CAMP;AA0bD;;;;GAIG;AACH,wBAAgB,KAAK,CAAE,SAAS,EAAC,OAAO,EAAE,MAAM,EAAC,MAAM,GAAE,MAAM,IAAI,CAelE"}
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
import {
|
|
2
|
+
effect,
|
|
3
|
+
effectScope,
|
|
4
|
+
untracked
|
|
5
|
+
} from "./chunk-ZZ4ZLOQY.js";
|
|
6
|
+
import {
|
|
7
|
+
register
|
|
8
|
+
} from "./chunk-RKWPTT6P.js";
|
|
9
|
+
import {
|
|
10
|
+
__name
|
|
11
|
+
} from "./chunk-7QVYU63E.js";
|
|
12
|
+
|
|
13
|
+
// src/htm.browser.ts
|
|
14
|
+
import htm from "htm";
|
|
15
|
+
var _esc = {
|
|
16
|
+
"&": "&",
|
|
17
|
+
'"': """,
|
|
18
|
+
"'": "'",
|
|
19
|
+
"<": "<",
|
|
20
|
+
">": ">"
|
|
21
|
+
};
|
|
22
|
+
function _escHtml(s) {
|
|
23
|
+
return s.replace(/[&"'<>]/g, (c) => _esc[c]);
|
|
24
|
+
}
|
|
25
|
+
__name(_escHtml, "_escHtml");
|
|
26
|
+
var VOID = /* @__PURE__ */ new Set([
|
|
27
|
+
"area",
|
|
28
|
+
"base",
|
|
29
|
+
"br",
|
|
30
|
+
"col",
|
|
31
|
+
"embed",
|
|
32
|
+
"hr",
|
|
33
|
+
"img",
|
|
34
|
+
"input",
|
|
35
|
+
"link",
|
|
36
|
+
"meta",
|
|
37
|
+
"param",
|
|
38
|
+
"source",
|
|
39
|
+
"track",
|
|
40
|
+
"wbr"
|
|
41
|
+
]);
|
|
42
|
+
var _M = /* @__PURE__ */ Symbol.for("microtags.markup");
|
|
43
|
+
var Markup = class {
|
|
44
|
+
static {
|
|
45
|
+
__name(this, "Markup");
|
|
46
|
+
}
|
|
47
|
+
// a node description, or trusted HTML from `raw`
|
|
48
|
+
_n;
|
|
49
|
+
_h;
|
|
50
|
+
constructor(n, h2 = null) {
|
|
51
|
+
this._n = n;
|
|
52
|
+
this._h = h2;
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return this._h ?? _str(this._n);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
Markup.prototype[_M] = true;
|
|
59
|
+
function raw(s) {
|
|
60
|
+
return new Markup(null, s);
|
|
61
|
+
}
|
|
62
|
+
__name(raw, "raw");
|
|
63
|
+
function _isMarkup(c) {
|
|
64
|
+
return c != null && c[_M] === true;
|
|
65
|
+
}
|
|
66
|
+
__name(_isMarkup, "_isMarkup");
|
|
67
|
+
function _isMicrotag(t) {
|
|
68
|
+
return typeof t === "function" && "TAG" in t && "props" in t;
|
|
69
|
+
}
|
|
70
|
+
__name(_isMicrotag, "_isMicrotag");
|
|
71
|
+
function _isEvent(k, v) {
|
|
72
|
+
return k.startsWith("on") && typeof v === "function";
|
|
73
|
+
}
|
|
74
|
+
__name(_isEvent, "_isEvent");
|
|
75
|
+
var _ATTR = /^[a-z_:][-\w:.]*$/i;
|
|
76
|
+
function _read(v) {
|
|
77
|
+
return typeof v === "function" ? untracked(v) : v;
|
|
78
|
+
}
|
|
79
|
+
__name(_read, "_read");
|
|
80
|
+
function _renderLink(type) {
|
|
81
|
+
if (typeof type.render !== "function") {
|
|
82
|
+
throw new Error(
|
|
83
|
+
`microtags: cannot create <${type.TAG}> in the browser: its render link was stripped. Keep it with \`.render(fn, { client: true })\` or the build-time keep list.`
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
return type.render;
|
|
87
|
+
}
|
|
88
|
+
__name(_renderLink, "_renderLink");
|
|
89
|
+
function _compArgs(type, props) {
|
|
90
|
+
const declared = new Set(type.props);
|
|
91
|
+
const compProps = {};
|
|
92
|
+
const attrs = {};
|
|
93
|
+
for (const [k, v] of Object.entries(props ?? {})) {
|
|
94
|
+
if (declared.has(k)) {
|
|
95
|
+
compProps[k] = _read(v);
|
|
96
|
+
} else if (!_isEvent(k, v) && _ATTR.test(k)) {
|
|
97
|
+
const r = _read(v);
|
|
98
|
+
if (r === true) attrs[k] = "";
|
|
99
|
+
else if (r !== false && r != null) attrs[k] = String(r);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return { compProps, attrs };
|
|
103
|
+
}
|
|
104
|
+
__name(_compArgs, "_compArgs");
|
|
105
|
+
function _str(c) {
|
|
106
|
+
if (c == null || c === false) return "";
|
|
107
|
+
if (Array.isArray(c)) return c.map(_str).join("");
|
|
108
|
+
if (_isMarkup(c)) return String(c);
|
|
109
|
+
if (typeof c === "function") return _str(_read(c));
|
|
110
|
+
if (typeof c !== "object" || !("t" in c)) {
|
|
111
|
+
return _escHtml(String(c));
|
|
112
|
+
}
|
|
113
|
+
const { t, p, c: kids } = c;
|
|
114
|
+
const inner = _str(kids);
|
|
115
|
+
if (_isMicrotag(t)) {
|
|
116
|
+
const { compProps, attrs } = _compArgs(t, p);
|
|
117
|
+
return _renderLink(t)(compProps, {
|
|
118
|
+
children: inner,
|
|
119
|
+
attrs: Object.keys(attrs).length > 0 ? attrs : void 0
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (typeof t !== "string") return inner;
|
|
123
|
+
let a = "";
|
|
124
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
125
|
+
if (_isEvent(k, v) || !_ATTR.test(k)) continue;
|
|
126
|
+
const r = _read(v);
|
|
127
|
+
if (r === true) a += ` ${k}`;
|
|
128
|
+
else if (r !== false && r != null) {
|
|
129
|
+
a += ` ${k}="${_escHtml(String(r))}"`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (VOID.has(t)) return `<${t}${a}>`;
|
|
133
|
+
return `<${t}${a}>${inner}</${t}>`;
|
|
134
|
+
}
|
|
135
|
+
__name(_str, "_str");
|
|
136
|
+
function h(type, props, ...children) {
|
|
137
|
+
if (typeof type === "string" && VOID.has(type) && children.length) {
|
|
138
|
+
throw new Error(
|
|
139
|
+
`<${type}> has children: an unclosed void element swallows what follows it. Write it as <${type} />.`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return new Markup({ t: type, p: props, c: children });
|
|
143
|
+
}
|
|
144
|
+
__name(h, "h");
|
|
145
|
+
var _htm = htm.bind(h);
|
|
146
|
+
function html(strings, ...values) {
|
|
147
|
+
const result = _htm(
|
|
148
|
+
strings,
|
|
149
|
+
...values
|
|
150
|
+
);
|
|
151
|
+
if (_isMarkup(result)) return result;
|
|
152
|
+
return new Markup(Array.isArray(result) ? result : [result]);
|
|
153
|
+
}
|
|
154
|
+
__name(html, "html");
|
|
155
|
+
function _dom(fn) {
|
|
156
|
+
untracked(fn);
|
|
157
|
+
}
|
|
158
|
+
__name(_dom, "_dom");
|
|
159
|
+
var _bound = /* @__PURE__ */ new WeakMap();
|
|
160
|
+
function _ctl(el, k) {
|
|
161
|
+
return /^(value|checked|selected)$/.test(k) && /^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(el.tagName);
|
|
162
|
+
}
|
|
163
|
+
__name(_ctl, "_ctl");
|
|
164
|
+
function _setAttr(el, k, v, keep) {
|
|
165
|
+
if (_ctl(el, k)) {
|
|
166
|
+
const o = el;
|
|
167
|
+
const rec = _bound.get(el) ?? {};
|
|
168
|
+
_bound.set(el, rec);
|
|
169
|
+
const x = k === "value" ? String(v ?? "") : !!v;
|
|
170
|
+
const d = o["default" + k[0].toUpperCase() + k.slice(1)];
|
|
171
|
+
if (k in rec ? !Object.is(rec[k], v) : !(keep && (d ?? o[k]) === x)) {
|
|
172
|
+
o[k] = x;
|
|
173
|
+
}
|
|
174
|
+
rec[k] = v;
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
const s = v === false || v == null ? null : v === true ? "" : String(v);
|
|
178
|
+
if (keep && el.getAttribute(k) === s) return;
|
|
179
|
+
if (s === null) el.removeAttribute(k);
|
|
180
|
+
else el.setAttribute(k, s);
|
|
181
|
+
}
|
|
182
|
+
__name(_setAttr, "_setAttr");
|
|
183
|
+
function _listen(el, k, fn, offs) {
|
|
184
|
+
const type = k.slice(2);
|
|
185
|
+
const handler = fn;
|
|
186
|
+
el.addEventListener(type, handler);
|
|
187
|
+
offs.push(() => el.removeEventListener(type, handler));
|
|
188
|
+
}
|
|
189
|
+
__name(_listen, "_listen");
|
|
190
|
+
function _parse(s) {
|
|
191
|
+
const tpl = document.createElement("template");
|
|
192
|
+
tpl.innerHTML = s;
|
|
193
|
+
return document.importNode(tpl.content, true);
|
|
194
|
+
}
|
|
195
|
+
__name(_parse, "_parse");
|
|
196
|
+
function _items(c, out = []) {
|
|
197
|
+
if (c == null || c === false) return out;
|
|
198
|
+
if (Array.isArray(c)) {
|
|
199
|
+
for (const x of c) _items(x, out);
|
|
200
|
+
} else if (_isMarkup(c)) {
|
|
201
|
+
if (c._n) _items(c._n, out);
|
|
202
|
+
else out.push(..._parse(String(c)).childNodes);
|
|
203
|
+
} else if (typeof c === "object" && !(c instanceof Node) && "p" in c && typeof c.t !== "string" && !_isMicrotag(c.t)) {
|
|
204
|
+
_items(c.c, out);
|
|
205
|
+
} else {
|
|
206
|
+
out.push(c);
|
|
207
|
+
}
|
|
208
|
+
return out;
|
|
209
|
+
}
|
|
210
|
+
__name(_items, "_items");
|
|
211
|
+
function _create(c, offs) {
|
|
212
|
+
if (c instanceof Node) return [c];
|
|
213
|
+
if (typeof c === "function") return _region(c, offs);
|
|
214
|
+
if (typeof c !== "object" || c === null || !("t" in c)) {
|
|
215
|
+
return [document.createTextNode(String(c))];
|
|
216
|
+
}
|
|
217
|
+
const { t, p, c: kids } = c;
|
|
218
|
+
if (_isMicrotag(t)) return [_createHost(t, p, kids, offs)];
|
|
219
|
+
const el = document.createElement(t);
|
|
220
|
+
_morph(el, null, null, kids, offs);
|
|
221
|
+
_bindEl(el, p, offs);
|
|
222
|
+
return [el];
|
|
223
|
+
}
|
|
224
|
+
__name(_create, "_create");
|
|
225
|
+
function _bindEl(el, p, offs, adopt) {
|
|
226
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
227
|
+
if (_isEvent(k, v)) {
|
|
228
|
+
_listen(el, k, v, offs);
|
|
229
|
+
} else if (!_ATTR.test(k)) {
|
|
230
|
+
continue;
|
|
231
|
+
} else if (typeof v === "function") {
|
|
232
|
+
let first = adopt;
|
|
233
|
+
effect(() => {
|
|
234
|
+
_setAttr(el, k, v(), first);
|
|
235
|
+
first = false;
|
|
236
|
+
});
|
|
237
|
+
} else if (!adopt || _ctl(el, k)) {
|
|
238
|
+
_setAttr(el, k, v, adopt);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
__name(_bindEl, "_bindEl");
|
|
243
|
+
function _bindHost(host, type, p, offs, adopt) {
|
|
244
|
+
const declared = new Set(type.props);
|
|
245
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
246
|
+
if (_isEvent(k, v)) {
|
|
247
|
+
_listen(host, k, v, offs);
|
|
248
|
+
} else if (declared.has(k)) {
|
|
249
|
+
host[k] = v;
|
|
250
|
+
} else if (k === "key") {
|
|
251
|
+
_setAttr(host, k, _read(v), adopt);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
__name(_bindHost, "_bindHost");
|
|
256
|
+
function _createHost(type, p, kids, offs) {
|
|
257
|
+
const { compProps, attrs } = _compArgs(type, p);
|
|
258
|
+
const inner = _str(kids);
|
|
259
|
+
let host;
|
|
260
|
+
register();
|
|
261
|
+
_dom(() => {
|
|
262
|
+
const out = _renderLink(type)(compProps, {
|
|
263
|
+
children: kids.length > 0 ? `<!--[c-->${inner}<!--]-->` : inner,
|
|
264
|
+
attrs: Object.keys(attrs).length > 0 ? attrs : void 0
|
|
265
|
+
});
|
|
266
|
+
host = _parse(String(out)).firstElementChild;
|
|
267
|
+
});
|
|
268
|
+
_bindHost(host, type, p, offs);
|
|
269
|
+
return host;
|
|
270
|
+
}
|
|
271
|
+
__name(_createHost, "_createHost");
|
|
272
|
+
function _region(fn, offs, at) {
|
|
273
|
+
const start = at ? at[0] : document.createComment("[");
|
|
274
|
+
const end = at ? at[1] : document.createComment("]");
|
|
275
|
+
const frag = document.createDocumentFragment();
|
|
276
|
+
if (!at) frag.append(start, end);
|
|
277
|
+
let own = [];
|
|
278
|
+
let adopt = !!at;
|
|
279
|
+
effect(() => {
|
|
280
|
+
const v = fn();
|
|
281
|
+
for (const off of own) off();
|
|
282
|
+
own = [];
|
|
283
|
+
if (adopt) _adopt(start.parentNode, start, end, v, own);
|
|
284
|
+
else _morph(start.parentNode, start, end, v, own);
|
|
285
|
+
adopt = false;
|
|
286
|
+
});
|
|
287
|
+
offs.push(() => {
|
|
288
|
+
for (const off of own) off();
|
|
289
|
+
});
|
|
290
|
+
return Array.from(frag.childNodes);
|
|
291
|
+
}
|
|
292
|
+
__name(_region, "_region");
|
|
293
|
+
function _key(x) {
|
|
294
|
+
if (x instanceof Element) return x.getAttribute("key");
|
|
295
|
+
if (typeof x === "object" && x !== null && "p" in x) {
|
|
296
|
+
const k = x.p?.key;
|
|
297
|
+
return k == null ? null : String(_read(k));
|
|
298
|
+
}
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
__name(_key, "_key");
|
|
302
|
+
function _tag(x) {
|
|
303
|
+
return (_isMicrotag(x.t) ? x.t.TAG : x.t).toUpperCase();
|
|
304
|
+
}
|
|
305
|
+
__name(_tag, "_tag");
|
|
306
|
+
function _range(host) {
|
|
307
|
+
const w = document.createTreeWalker(
|
|
308
|
+
host,
|
|
309
|
+
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT,
|
|
310
|
+
{
|
|
311
|
+
acceptNode: /* @__PURE__ */ __name((n2) => n2 instanceof Element && n2.tagName.includes("-") ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT, "acceptNode")
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
let n;
|
|
315
|
+
while (n = w.nextNode()) {
|
|
316
|
+
if (n instanceof Comment && n.data === "[c") {
|
|
317
|
+
const end = _close(n);
|
|
318
|
+
if (end) return [n, end];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
__name(_range, "_range");
|
|
324
|
+
function _patch(old, item, offs) {
|
|
325
|
+
if (typeof item === "function" || item instanceof Node) return null;
|
|
326
|
+
if (typeof item !== "object" || item === null || !("t" in item)) {
|
|
327
|
+
if (old.nodeType !== Node.TEXT_NODE) return null;
|
|
328
|
+
const s = String(item);
|
|
329
|
+
if (old.textContent !== s) old.textContent = s;
|
|
330
|
+
return old;
|
|
331
|
+
}
|
|
332
|
+
const v = item;
|
|
333
|
+
if (!(old instanceof Element) || old.tagName !== _tag(v)) return null;
|
|
334
|
+
if (_isMicrotag(v.t)) {
|
|
335
|
+
_bindHost(old, v.t, v.p, offs);
|
|
336
|
+
const r = _range(old);
|
|
337
|
+
if (r) _morph(r[0].parentNode, r[0], r[1], v.c, offs);
|
|
338
|
+
return old;
|
|
339
|
+
}
|
|
340
|
+
const next = new Set(Object.keys(v.p ?? {}));
|
|
341
|
+
for (const a of Array.from(old.attributes)) {
|
|
342
|
+
if (!next.has(a.name)) old.removeAttribute(a.name);
|
|
343
|
+
}
|
|
344
|
+
_morph(old, null, null, v.c, offs);
|
|
345
|
+
_bindEl(old, v.p, offs);
|
|
346
|
+
return old;
|
|
347
|
+
}
|
|
348
|
+
__name(_patch, "_patch");
|
|
349
|
+
function _morph(parent, start, end, value, offs) {
|
|
350
|
+
const old = [];
|
|
351
|
+
for (let n = start ? start.nextSibling : parent.firstChild; n && n !== end; n = n.nextSibling) old.push(n);
|
|
352
|
+
const keyed = /* @__PURE__ */ new Map();
|
|
353
|
+
const unkeyed = [];
|
|
354
|
+
for (const n of old) {
|
|
355
|
+
const k = _key(n);
|
|
356
|
+
if (k !== null) keyed.set(k, n);
|
|
357
|
+
else unkeyed.push(n);
|
|
358
|
+
}
|
|
359
|
+
let u = 0;
|
|
360
|
+
const nodes = [];
|
|
361
|
+
const used = /* @__PURE__ */ new Set();
|
|
362
|
+
const seen = /* @__PURE__ */ new Set();
|
|
363
|
+
for (const item of _items(value)) {
|
|
364
|
+
const k = _key(item);
|
|
365
|
+
if (k !== null) {
|
|
366
|
+
if (seen.has(k)) throw new Error("duplicate key " + k);
|
|
367
|
+
seen.add(k);
|
|
368
|
+
}
|
|
369
|
+
const cand = k !== null ? keyed.get(k) : unkeyed[u];
|
|
370
|
+
const kept = cand && !used.has(cand) ? _patch(cand, item, offs) : null;
|
|
371
|
+
if (k === null && kept) u++;
|
|
372
|
+
if (kept) {
|
|
373
|
+
used.add(kept);
|
|
374
|
+
nodes.push(kept);
|
|
375
|
+
} else {
|
|
376
|
+
nodes.push(..._create(item, offs));
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
_dom(() => {
|
|
380
|
+
for (const n of old) {
|
|
381
|
+
if (!used.has(n)) n.remove();
|
|
382
|
+
}
|
|
383
|
+
let ref = end;
|
|
384
|
+
for (let i = nodes.length - 1; i >= 0; i--) {
|
|
385
|
+
const n = nodes[i];
|
|
386
|
+
if (n.parentNode !== parent || n.nextSibling !== ref) {
|
|
387
|
+
const p = parent;
|
|
388
|
+
let moved = used.has(n) && parent.isConnected;
|
|
389
|
+
if (moved) {
|
|
390
|
+
try {
|
|
391
|
+
p.moveBefore(n, ref);
|
|
392
|
+
} catch {
|
|
393
|
+
moved = false;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
if (!moved) parent.insertBefore(n, ref);
|
|
397
|
+
}
|
|
398
|
+
ref = n;
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
__name(_morph, "_morph");
|
|
403
|
+
function _close(start) {
|
|
404
|
+
let depth = 0;
|
|
405
|
+
for (let s = start.nextSibling; s; s = s.nextSibling) {
|
|
406
|
+
if (!(s instanceof Comment)) continue;
|
|
407
|
+
if (s.data === "[" || s.data === "[c") depth++;
|
|
408
|
+
else if (s.data === "]" && depth-- === 0) return s;
|
|
409
|
+
}
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
__name(_close, "_close");
|
|
413
|
+
function _skip(n, end) {
|
|
414
|
+
while (n && n !== end && (n instanceof Comment && n.data !== "[" || n.nodeType === Node.TEXT_NODE && !n.textContent.trim())) n = n.nextSibling;
|
|
415
|
+
return n === end ? null : n;
|
|
416
|
+
}
|
|
417
|
+
__name(_skip, "_skip");
|
|
418
|
+
function _adopt(parent, start, end, value, offs) {
|
|
419
|
+
let n = start ? start.nextSibling : parent.firstChild;
|
|
420
|
+
for (const item of _items(value)) {
|
|
421
|
+
if (item instanceof Node) {
|
|
422
|
+
if (!item.previousSibling) {
|
|
423
|
+
while (n && n !== end && n.nodeType !== item.nodeType && _skip(n, end) !== n) n = n.nextSibling;
|
|
424
|
+
}
|
|
425
|
+
if (n && n !== end && (item.nodeType !== 3 || n.nodeType === 3)) n = n.nextSibling;
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
if (typeof item === "function") {
|
|
429
|
+
n = _skip(n, end);
|
|
430
|
+
const close = n instanceof Comment ? _close(n) : null;
|
|
431
|
+
if (!close) {
|
|
432
|
+
console.warn("microtags: adopt: missing region markers");
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
_region(item, offs, [n, close]);
|
|
436
|
+
n = close.nextSibling;
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
if (typeof item !== "object" || item === null || !("t" in item)) {
|
|
440
|
+
if (n && n !== end && n.nodeType === Node.TEXT_NODE) {
|
|
441
|
+
n = n.nextSibling;
|
|
442
|
+
}
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
n = _skip(n, end);
|
|
446
|
+
const v = item;
|
|
447
|
+
const tag = _tag(v);
|
|
448
|
+
if (!(n instanceof Element) || n.tagName !== tag) {
|
|
449
|
+
console.warn(
|
|
450
|
+
`microtags: adopt: expected <${tag.toLowerCase()}>, found ${n instanceof Element ? `<${n.localName}>` : "none"}`
|
|
451
|
+
);
|
|
452
|
+
let m = n;
|
|
453
|
+
while (m && m !== end && (!(m instanceof Element) || m.tagName !== tag)) {
|
|
454
|
+
m = m instanceof Comment && /^\[c?$/.test(m.data) && _close(m) || m;
|
|
455
|
+
if (m !== end) m = m.nextSibling;
|
|
456
|
+
}
|
|
457
|
+
if (!m || m === end) continue;
|
|
458
|
+
n = m;
|
|
459
|
+
}
|
|
460
|
+
const el = n;
|
|
461
|
+
if (_isMicrotag(v.t)) {
|
|
462
|
+
_bindHost(el, v.t, v.p, offs, true);
|
|
463
|
+
const r = _range(el);
|
|
464
|
+
if (r) _adopt(r[0].parentNode, r[0], r[1], v.c, offs);
|
|
465
|
+
} else {
|
|
466
|
+
_bindEl(el, v.p, offs, true);
|
|
467
|
+
_adopt(el, null, null, v.c, offs);
|
|
468
|
+
}
|
|
469
|
+
n = n.nextSibling;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
__name(_adopt, "_adopt");
|
|
473
|
+
var _mounted = /* @__PURE__ */ new WeakSet();
|
|
474
|
+
function mount(container, markup) {
|
|
475
|
+
if (_mounted.has(container)) {
|
|
476
|
+
throw new Error("microtags: this container is already mounted");
|
|
477
|
+
}
|
|
478
|
+
_mounted.add(container);
|
|
479
|
+
const offs = [];
|
|
480
|
+
const stop = effectScope(() => {
|
|
481
|
+
if (container.firstChild) _adopt(container, null, null, markup, offs);
|
|
482
|
+
else _morph(container, null, null, markup, offs);
|
|
483
|
+
});
|
|
484
|
+
return () => {
|
|
485
|
+
stop();
|
|
486
|
+
for (const off of offs) off();
|
|
487
|
+
offs.length = 0;
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
__name(mount, "mount");
|
|
491
|
+
export {
|
|
492
|
+
Markup,
|
|
493
|
+
h,
|
|
494
|
+
html,
|
|
495
|
+
mount,
|
|
496
|
+
raw
|
|
497
|
+
};
|
|
498
|
+
//# sourceMappingURL=htm.browser.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/htm.browser.ts"],
|
|
4
|
+
"sourcesContent": ["import htm from 'htm'\nimport { effect, effectScope, untracked } from './reactivity.js'\nimport type { MicrotagElementClass } from './builders.js'\nimport { register } from './render-support.js'\nimport type { PropDef } from './types.js'\n\n// Browser build of `microtags/htm`, selected by the `browser` export\n// condition. `html` describes nodes instead of building a string, and\n// `mount` turns that description into DOM with live bindings.\n\nconst _esc:Record<string, string> = {\n '&': '&',\n '\"': '"',\n \"'\": ''',\n '<': '<',\n '>': '>',\n}\n\nfunction _escHtml (s:string):string {\n return s.replace(/[&\"'<>]/g, c => _esc[c])\n}\n\nconst VOID = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr',\n 'img', 'input', 'link', 'meta', 'param',\n 'source', 'track', 'wbr',\n])\n\ntype Comp = MicrotagElementClass<Record<string, PropDef>>\ntype VType = string | Comp | ((...a:unknown[]) => unknown)\n\ninterface VNode {\n t:VType\n p:Record<string, unknown> | null\n c:unknown[]\n}\n\n// Brands markup across package copies, where `instanceof` fails.\nconst _M = Symbol.for('microtags.markup')\n\n/**\n * Opaque, trusted output of the templater. In the browser it describes\n * nodes for `mount`; `String(m)` still yields static HTML.\n */\nexport class Markup {\n // a node description, or trusted HTML from `raw`\n readonly _n:VNode | unknown[] | null\n readonly _h:string | null\n constructor (n:VNode | unknown[] | null, h:string | null = null) {\n this._n = n\n this._h = h\n }\n\n toString ():string {\n return this._h ?? _str(this._n)\n }\n}\n\n// on the prototype, so the brand stays out of the declared type\n(Markup.prototype as unknown as Record<symbol, boolean>)[_M] = true\n\nexport function raw (s:string):Markup {\n return new Markup(null, s)\n}\n\nfunction _isMarkup (c:unknown):c is Markup {\n return c != null && (c as Record<symbol, unknown>)[_M] === true\n}\n\nfunction _isMicrotag (t:unknown):t is Comp {\n return typeof t === 'function' && 'TAG' in t && 'props' in t\n}\n\nfunction _isEvent (k:string, v:unknown):boolean {\n return k.startsWith('on') && typeof v === 'function'\n}\n\n// A key that is not a valid attribute name, e.g. from a spread of user\n// data, is skipped so it cannot break out of a tag or make\n// `setAttribute` throw.\nconst _ATTR = /^[a-z_:][-\\w:.]*$/i\n\nfunction _read (v:unknown):unknown {\n return typeof v === 'function' ? untracked(v as () => unknown) : v\n}\n\nfunction _renderLink (type:Comp):Comp['render'] {\n if (typeof type.render !== 'function') {\n throw new Error(\n `microtags: cannot create <${type.TAG}> in the browser: its ` +\n 'render link was stripped. Keep it with ' +\n '`.render(fn, { client: true })` or the build-time keep list.'\n )\n }\n return type.render\n}\n\n// Split a component's props into declared props and extra attributes.\n// Signals and functions are read once.\nfunction _compArgs (type:Comp, props:Record<string, unknown> | null) {\n const declared = new Set(type.props as readonly string[])\n const compProps:Record<string, unknown> = {}\n const attrs:Record<string, string> = {}\n for (const [k, v] of Object.entries(props ?? {})) {\n if (declared.has(k)) {\n compProps[k] = _read(v)\n } else if (!_isEvent(k, v) && _ATTR.test(k)) {\n const r = _read(v)\n if (r === true) attrs[k] = ''\n else if (r !== false && r != null) attrs[k] = String(r)\n }\n }\n return { compProps, attrs }\n}\n\nfunction _str (c:unknown):string {\n if (c == null || c === false) return ''\n if (Array.isArray(c)) return c.map(_str).join('')\n if (_isMarkup(c)) return String(c)\n if (typeof c === 'function') return _str(_read(c))\n if (typeof c !== 'object' || !('t' in c)) {\n return _escHtml(String(c))\n }\n const { t, p, c: kids } = c as VNode\n const inner = _str(kids)\n if (_isMicrotag(t)) {\n const { compProps, attrs } = _compArgs(t, p)\n return _renderLink(t)(compProps as any, {\n children: inner,\n attrs: Object.keys(attrs).length > 0 ? attrs : undefined,\n })\n }\n if (typeof t !== 'string') return inner\n let a = ''\n for (const [k, v] of Object.entries(p ?? {})) {\n if (_isEvent(k, v) || !_ATTR.test(k)) continue\n const r = _read(v)\n if (r === true) a += ` ${k}`\n else if (r !== false && r != null) {\n a += ` ${k}=\"${_escHtml(String(r))}\"`\n }\n }\n if (VOID.has(t)) return `<${t}${a}>`\n return `<${t}${a}>${inner}</${t}>`\n}\n\nexport function h (\n type:VType,\n props:Record<string, unknown> | null,\n ...children:unknown[]\n):Markup {\n // htm does not know void tags, so an unclosed one takes everything\n // after it as children. Fail loudly instead of dropping them.\n if (typeof type === 'string' && VOID.has(type) && children.length) {\n throw new Error(\n `<${type}> has children: an unclosed void element ` +\n `swallows what follows it. Write it as <${type} />.`\n )\n }\n return new Markup({ t: type, p: props, c: children })\n}\n\nconst _htm = htm.bind(h)\n\nexport function html (\n strings:TemplateStringsArray,\n ...values:unknown[]\n):Markup {\n const result = (_htm as (...a:unknown[]) => unknown)(\n strings, ...values\n )\n if (_isMarkup(result)) return result\n return new Markup(Array.isArray(result) ? result : [result])\n}\n\n// Mounting\n\ntype Off = () => void\n\n// Run DOM work untracked, so hosts connected by it set up their own\n// effects outside any region.\nfunction _dom (fn:() => void):void {\n untracked(fn)\n}\n\n// The last value each control property was bound to, per element.\nconst _bound = new WeakMap<Element, Record<string, unknown>>()\n\n// `value`, `checked` and `selected` on form controls are DOM\n// properties, written only when the bound value changed, so a\n// re-render keeps what the visitor typed and a new value still wins.\nfunction _ctl (el:Element, k:string):boolean {\n return /^(value|checked|selected)$/.test(k) &&\n /^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(el.tagName)\n}\n\n// Write an attribute; with `keep`, only if it does not already match.\nfunction _setAttr (\n el:Element,\n k:string,\n v:unknown,\n keep?:boolean\n):void {\n if (_ctl(el, k)) {\n const o = el as unknown as Record<string, unknown>\n const rec = _bound.get(el) ?? {}\n _bound.set(el, rec)\n const x = k === 'value' ? String(v ?? '') : !!v\n // adopting: compare with what the server wrote (`defaultValue`\n // and so on; a select has none), so a value the visitor typed\n // before hydration stays when the server value matches\n const d = o['default' + k[0].toUpperCase() + k.slice(1)]\n if (k in rec ? !Object.is(rec[k], v) : !(keep && (d ?? o[k]) === x)) {\n o[k] = x\n }\n rec[k] = v\n return\n }\n const s = v === false || v == null ?\n null :\n v === true ? '' : String(v)\n if (keep && el.getAttribute(k) === s) return\n if (s === null) el.removeAttribute(k)\n else el.setAttribute(k, s)\n}\n\nfunction _listen (el:Element, k:string, fn:unknown, offs:Off[]):void {\n const type = k.slice(2)\n const handler = fn as EventListener\n el.addEventListener(type, handler)\n offs.push(() => el.removeEventListener(type, handler))\n}\n\nfunction _parse (s:string):DocumentFragment {\n const tpl = document.createElement('template')\n tpl.innerHTML = s\n // importNode upgrades defined custom elements synchronously\n return document.importNode(tpl.content, true)\n}\n\n// Flatten a child value into the items a range holds: node\n// descriptions, regions (functions), parsed raw HTML and text.\nfunction _items (c:unknown, out:unknown[] = []):unknown[] {\n if (c == null || c === false) return out\n if (Array.isArray(c)) {\n for (const x of c) _items(x, out)\n } else if (_isMarkup(c)) {\n // a node description, else HTML (`raw`, or server markup)\n if (c._n) _items(c._n, out)\n else out.push(..._parse(String(c)).childNodes)\n } else if (\n typeof c === 'object' && !(c instanceof Node) && 'p' in c &&\n typeof (c as VNode).t !== 'string' &&\n !_isMicrotag((c as VNode).t)\n ) {\n _items((c as VNode).c, out)\n } else {\n out.push(c)\n }\n return out\n}\n\nfunction _create (c:unknown, offs:Off[]):Node[] {\n if (c instanceof Node) return [c]\n if (typeof c === 'function') return _region(c as () => unknown, offs)\n if (typeof c !== 'object' || c === null || !('t' in c)) {\n return [document.createTextNode(String(c))]\n }\n const { t, p, c: kids } = c as VNode\n if (_isMicrotag(t)) return [_createHost(t, p, kids, offs)]\n const el = document.createElement(t as string)\n // children first: a select's value needs its options\n _morph(el, null, null, kids, offs)\n _bindEl(el, p, offs)\n return [el]\n}\n\n// Bind attributes and listeners. When adopting, static values are\n// left as the server wrote them (a control's is compared like a bound\n// one), and a bound value's first run writes only if it differs from\n// the attribute already there.\nfunction _bindEl (\n el:Element,\n p:Record<string, unknown> | null,\n offs:Off[],\n adopt?:boolean\n):void {\n for (const [k, v] of Object.entries(p ?? {})) {\n if (_isEvent(k, v)) {\n _listen(el, k, v, offs)\n } else if (!_ATTR.test(k)) {\n continue\n } else if (typeof v === 'function') {\n let first = adopt\n effect(() => {\n _setAttr(el, k, (v as () => unknown)(), first)\n first = false\n })\n } else if (!adopt || _ctl(el, k)) {\n // an adopted control's static value seeds its record\n _setAttr(el, k, v, adopt)\n }\n }\n}\n\nfunction _bindHost (\n host:Element,\n type:Comp,\n p:Record<string, unknown> | null,\n offs:Off[],\n adopt?:boolean\n):void {\n const declared = new Set(type.props as readonly string[])\n for (const [k, v] of Object.entries(p ?? {})) {\n if (_isEvent(k, v)) {\n _listen(host, k, v, offs)\n } else if (declared.has(k)) {\n // a signal makes the prop read through to it\n (host as unknown as Record<string, unknown>)[k] = v\n } else if (k === 'key') {\n _setAttr(host, k, _read(v), adopt)\n }\n }\n}\n\nfunction _createHost (\n type:Comp,\n p:Record<string, unknown> | null,\n kids:unknown[],\n offs:Off[]\n):Element {\n const { compProps, attrs } = _compArgs(type, p)\n const inner = _str(kids)\n let host!:Element\n // A kept component's render static needs the support module.\n register()\n _dom(() => {\n const out = _renderLink(type)(compProps as any, {\n children: kids.length > 0 ? `<!--[c-->${inner}<!--]-->` : inner,\n attrs: Object.keys(attrs).length > 0 ? attrs : undefined,\n })\n host = _parse(String(out)).firstElementChild!\n })\n _bindHost(host, type, p, offs)\n return host\n}\n\n// A reactive region: nodes between two comment markers, morphed toward\n// the function's new value whenever what it reads changes. Given\n// existing markers, the first run adopts the nodes between them.\nfunction _region (\n fn:() => unknown,\n offs:Off[],\n at?:[Node, Node]\n):Node[] {\n const start = at ? at[0] : document.createComment('[')\n const end = at ? at[1] : document.createComment(']')\n const frag = document.createDocumentFragment()\n if (!at) frag.append(start, end)\n let own:Off[] = []\n let adopt = !!at\n effect(() => {\n const v = fn()\n for (const off of own) off()\n own = []\n if (adopt) _adopt(start.parentNode!, start, end, v, own)\n else _morph(start.parentNode!, start, end, v, own)\n adopt = false\n })\n offs.push(() => { for (const off of own) off() })\n return Array.from(frag.childNodes)\n}\n\nfunction _key (x:unknown):string | null {\n if (x instanceof Element) return x.getAttribute('key')\n if (typeof x === 'object' && x !== null && 'p' in x) {\n const k = (x as VNode).p?.key\n return k == null ? null : String(_read(k))\n }\n return null\n}\n\nfunction _tag (x:VNode):string {\n return (_isMicrotag(x.t) ? x.t.TAG : x.t as string).toUpperCase()\n}\n\n// Find a host's children range, opened by its own marker so a region\n// in the host's render is not mistaken for it. Skips nested hosts.\nfunction _range (host:Element):[Node, Node] | null {\n const w = document.createTreeWalker(\n host,\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT,\n {\n acceptNode: n => n instanceof Element && n.tagName.includes('-') ?\n NodeFilter.FILTER_REJECT :\n NodeFilter.FILTER_ACCEPT,\n }\n )\n let n:Node | null\n while ((n = w.nextNode())) {\n if (n instanceof Comment && n.data === '[c') {\n const end = _close(n)\n if (end) return [n, end]\n }\n }\n return null\n}\n\n// Patch an old node toward a new item, or return null if it cannot be.\nfunction _patch (old:Node, item:unknown, offs:Off[]):Node | null {\n if (typeof item === 'function' || item instanceof Node) return null\n if (typeof item !== 'object' || item === null || !('t' in item)) {\n if (old.nodeType !== Node.TEXT_NODE) return null\n const s = String(item)\n if (old.textContent !== s) old.textContent = s\n return old\n }\n const v = item as VNode\n if (!(old instanceof Element) || old.tagName !== _tag(v)) return null\n if (_isMicrotag(v.t)) {\n _bindHost(old, v.t, v.p, offs)\n const r = _range(old)\n if (r) _morph(r[0].parentNode!, r[0], r[1], v.c, offs)\n return old\n }\n const next = new Set(Object.keys(v.p ?? {}))\n for (const a of Array.from(old.attributes)) {\n if (!next.has(a.name)) old.removeAttribute(a.name)\n }\n _morph(old, null, null, v.c, offs)\n _bindEl(old, v.p, offs)\n return old\n}\n\n/**\n * Morph the nodes of `parent` between `start` and `end` (exclusive;\n * null means the edge) toward `value`. Keyed elements are matched by\n * key, the rest by position; unmatched old nodes are removed.\n */\nfunction _morph (\n parent:Node,\n start:Node | null,\n end:Node | null,\n value:unknown,\n offs:Off[]\n):void {\n const old:Node[] = []\n for (\n let n = start ? start.nextSibling : parent.firstChild;\n n && n !== end;\n n = n.nextSibling\n ) old.push(n)\n const keyed = new Map<string, Node>()\n const unkeyed:Node[] = []\n for (const n of old) {\n const k = _key(n)\n if (k !== null) keyed.set(k, n)\n else unkeyed.push(n)\n }\n\n let u = 0\n const nodes:Node[] = []\n const used = new Set<Node>()\n const seen = new Set<string>()\n for (const item of _items(value)) {\n const k = _key(item)\n if (k !== null) {\n if (seen.has(k)) throw new Error('duplicate key ' + k)\n seen.add(k)\n }\n const cand = k !== null ? keyed.get(k) : unkeyed[u]\n const kept = cand && !used.has(cand) ?\n _patch(cand, item, offs) :\n null\n if (k === null && kept) u++\n if (kept) {\n used.add(kept)\n nodes.push(kept)\n } else {\n nodes.push(..._create(item, offs))\n }\n }\n\n _dom(() => {\n for (const n of old) {\n if (!used.has(n)) (n as ChildNode).remove()\n }\n // place from the end, moving only nodes out of position\n let ref:Node | null = end\n for (let i = nodes.length - 1; i >= 0; i--) {\n const n = nodes[i]\n if (n.parentNode !== parent || n.nextSibling !== ref) {\n const p = parent as Node & {\n moveBefore?:(n:Node, r:Node | null) => void\n }\n // kept nodes move when the parent is connected; a\n // missing or throwing moveBefore falls back to insert\n let moved = used.has(n) && parent.isConnected\n if (moved) {\n try { p.moveBefore!(n, ref) } catch { moved = false }\n }\n if (!moved) parent.insertBefore(n, ref)\n }\n ref = n\n }\n })\n}\n\n// The comment closing the region or children range opened by `start`.\nfunction _close (start:Node):Node | null {\n let depth = 0\n for (let s = start.nextSibling; s; s = s.nextSibling) {\n if (!(s instanceof Comment)) continue\n if (s.data === '[' || s.data === '[c') depth++\n else if (s.data === ']' && depth-- === 0) return s\n }\n return null\n}\n\n// Next node to adopt: skips whitespace text and comments other than\n// region markers.\nfunction _skip (n:Node | null, end:Node | null):Node | null {\n while (n && n !== end && (\n (n instanceof Comment && n.data !== '[') ||\n (n.nodeType === Node.TEXT_NODE && !n.textContent!.trim())\n )) n = n.nextSibling\n return n === end ? null : n\n}\n\n/**\n * Bind `value` to the nodes of `parent` between `start` and `end`,\n * which the server rendered from the same markup. Creates no nodes.\n * Hosts are opaque except for their marked children range.\n */\nfunction _adopt (\n parent:Node,\n start:Node | null,\n end:Node | null,\n value:unknown,\n offs:Off[]\n):void {\n let n:Node | null = start ? start.nextSibling : parent.firstChild\n for (const item of _items(value)) {\n if (item instanceof Node) {\n // parsed raw HTML: one DOM node per parsed node. Skip only\n // before the span (its first node has no previous sibling\n // in the parsed fragment), and only nodes that could not be\n // that first node.\n if (!item.previousSibling) {\n while (\n n && n !== end && n.nodeType !== item.nodeType &&\n _skip(n, end) !== n\n ) n = n.nextSibling\n }\n // a text node only consumes text: one that meets an\n // element was merged into the text before it\n if (n && n !== end && (\n item.nodeType !== 3 || n.nodeType === 3\n )) n = n.nextSibling\n continue\n }\n if (typeof item === 'function') {\n n = _skip(n, end)\n const close = n instanceof Comment ? _close(n) : null\n if (!close) {\n console.warn('microtags: adopt: missing region markers')\n continue\n }\n _region(item as () => unknown, offs, [n!, close])\n n = close.nextSibling\n continue\n }\n if (typeof item !== 'object' || item === null || !('t' in item)) {\n if (n && n !== end && n.nodeType === Node.TEXT_NODE) {\n n = n.nextSibling\n }\n continue\n }\n n = _skip(n, end)\n const v = item as VNode\n const tag = _tag(v)\n if (!(n instanceof Element) || n.tagName !== tag) {\n console.warn(\n `microtags: adopt: expected <${tag.toLowerCase()}>, ` +\n `found ${n instanceof Element ? `<${n.localName}>` : 'none'}`\n )\n // look ahead for the expected tag, stepping over regions;\n // if none, try the next item against the same node\n let m = n\n while (m && m !== end && (\n !(m instanceof Element) || m.tagName !== tag\n )) {\n m = (m instanceof Comment && /^\\[c?$/.test(m.data) &&\n _close(m)) || m\n // a close at `end` means the range is unbalanced\n if (m !== end) m = m.nextSibling\n }\n if (!m || m === end) continue\n n = m\n }\n const el = n as Element\n if (_isMicrotag(v.t)) {\n _bindHost(el, v.t, v.p, offs, true)\n const r = _range(el)\n if (r) _adopt(r[0].parentNode!, r[0], r[1], v.c, offs)\n } else {\n _bindEl(el, v.p, offs, true)\n _adopt(el, null, null, v.c, offs)\n }\n n = n.nextSibling\n }\n}\n\nconst _mounted = new WeakSet<Element>()\n\n/**\n * Turn markup into DOM inside `container`, binding signals and\n * listeners. Returns a function that stops the bindings and removes\n * the listeners, leaving the DOM in place.\n */\nexport function mount (container:Element, markup:Markup):() => void {\n if (_mounted.has(container)) {\n throw new Error('microtags: this container is already mounted')\n }\n _mounted.add(container)\n const offs:Off[] = []\n const stop = effectScope(() => {\n if (container.firstChild) _adopt(container, null, null, markup, offs)\n else _morph(container, null, null, markup, offs)\n })\n return () => {\n stop()\n for (const off of offs) off()\n offs.length = 0\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["h", "n"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var bn=Object.defineProperty;var u=(n,e)=>bn(n,"name",{value:e,configurable:!0});var X=u(function(n,e,i,o){var f;e[0]=0;for(var t=1;t<e.length;t++){var r=e[t++],l=e[t]?(e[0]|=r?1:2,i[e[t++]]):e[++t];r===3?o[0]=l:r===4?o[1]=Object.assign(o[1]||{},l):r===5?(o[1]=o[1]||{})[e[++t]]=l:r===6?o[1][e[++t]]+=l+"":r?(f=n.apply(l,X(n,l,i,["",null])),o.push(f),l[0]?e[0]|=2:(e[t-2]=0,e[t]=f)):o.push(l)}return o},"n"),G=new Map;function D(n){var e=G.get(this);return e||(e=new Map,G.set(this,e)),(e=X(this,e.get(n)||(e.set(n,e=(function(i){for(var o,f,t=1,r="",l="",g=[0],c=function(a){t===1&&(a||(r=r.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?g.push(0,a,r):t===3&&(a||r)?(g.push(3,a,r),t=2):t===2&&r==="..."&&a?g.push(4,a,0):t===2&&r&&!a?g.push(5,0,!0,r):t>=5&&((r||!a&&t===5)&&(g.push(t,0,r,f),t=6),a&&(g.push(t,a,0,f),t=6)),r=""},s=0;s<i.length;s++){s&&(t===1&&c(),c(s));for(var m=0;m<i[s].length;m++)o=i[s][m],t===1?o==="<"?(c(),g=[g],t=3):r+=o:t===4?r==="--"&&o===">"?(t=1,r=""):r=o+r[0]:l?o===l?l="":r+=o:o==='"'||o==="'"?l=o:o===">"?(c(),t=1):t&&(o==="="?(t=5,f=r,r=""):o==="/"&&(t<5||i[s][m+1]===">")?(c(),t===3&&(g=g[0]),t=g,(g=g[0]).push(2,0,t),t=0):o===" "||o===" "||o===`
|
|
2
|
+
`||o==="\r"?(c(),t=2):r+=o),t===3&&r==="!--"&&(t=4,g=g[0])}return c(),g})(n)),e),arguments,[])).length>1?e:e[0]}u(D,"default");function z({update:n,notify:e,unwatched:i}){return{link:o,unlink:f,propagate:t,checkDirty:r,shallowPropagate:l};function o(c,s,m){let a=s.depsTail;if(a!==void 0&&a.dep===c)return;let d=a!==void 0?a.nextDep:s.deps;if(d!==void 0&&d.dep===c){d.version=m,s.depsTail=d;return}let p=c.subsTail;if(p!==void 0&&p.version===m&&p.sub===s)return;let b=s.depsTail=c.subsTail={version:m,dep:c,sub:s,prevDep:a,nextDep:d,prevSub:p,nextSub:void 0};d!==void 0&&(d.prevDep=b),a!==void 0?a.nextDep=b:s.deps=b,p!==void 0?p.nextSub=b:c.subs=b}function f(c,s=c.sub){let{dep:m,prevDep:a,nextDep:d,nextSub:p,prevSub:b}=c;return d!==void 0?d.prevDep=a:s.depsTail=a,a!==void 0?a.nextDep=d:s.deps=d,p!==void 0?p.prevSub=b:m.subsTail=b,b!==void 0?b.nextSub=p:(m.subs=p)===void 0&&i(m),d}function t(c,s){let m=c.nextSub,a;n:do{let d=c.sub,p=d.flags;if(p&60?p&12?p&4?!(p&48)&&g(c,d)?(d.flags=p|40,p&=1):p=0:d.flags=p&-9|32:p=0:(d.flags=p|32,s&&(d.flags|=8)),p&2&&e(d),p&1){let b=d.subs;if(b!==void 0){let h=(c=b).nextSub;h!==void 0&&(a={value:m,prev:a},m=h);continue}}if((c=m)!==void 0){m=c.nextSub;continue}for(;a!==void 0;)if(c=a.value,a=a.prev,c!==void 0){m=c.nextSub;continue n}break}while(!0)}function r(c,s){let m,a=0,d=!1;n:do{let p=c.dep,b=p.flags;if(s.flags&16)d=!0;else if((b&17)===17){let h=p.subs;n(p)&&(h.nextSub!==void 0&&l(h),d=!0)}else if((b&33)===33){m={value:c,prev:m},c=p.deps,s=p,++a;continue}if(!d){let h=c.nextDep;if(h!==void 0){c=h;continue}}for(;a--;){if(c=m.value,m=m.prev,d){let q=s.subs;if(n(s)){q.nextSub!==void 0&&l(q),s=c.sub;continue}d=!1}else s.flags&=-33;s=c.sub;let h=c.nextDep;if(h!==void 0){c=h;continue n}}return d&&!!s.flags}while(!0)}function l(c){do{let s=c.sub,m=s.flags;(m&48)===32&&(s.flags=m|16,(m&6)===2&&e(s))}while((c=c.nextSub)!==void 0)}function g(c,s){let m=s.depsTail;for(;m!==void 0;){if(m===c)return!0;m=m.prevDep}return!1}}u(z,"createReactiveSystem");var A=64,hn=0,U=0;var J=0,w,v=[],{link:K,unlink:E,propagate:Fn,checkDirty:Hn,shallowPropagate:Wn}=z({update(n){return"getter"in n?wn(n):"currentValue"in n?yn(n):(n.flags=1,!0)},notify(n){let e=J,i=e;do if(v[e++]=n,n.flags&=-3,n=n.subs?.sub,n===void 0||!(n.flags&2))break;while(!0);for(J=e;i<--e;){let o=v[i];v[i++]=v[e],v[e]=o}},unwatched(n){"getter"in n?n.depsTail!==void 0&&(n.flags=17,Y(n)):"currentValue"in n||("fn"in n?Q.call(n):$.call(n))}});function y(n){let e=w;return w=n,e}u(y,"setActiveSub");function R(n){let e={fn:n,cleanup:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},i=y(e);i!==void 0&&(K(e,i,0),i.flags|=A);try{++U,e.cleanup=e.fn()}finally{--U,w=i,e.flags&=-5}return Q.bind(e)}u(R,"effect");function V(n){let e={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:1},i=y(e);i!==void 0&&(K(e,i,0),i.flags|=A);try{n()}finally{w=i}return $.bind(e)}u(V,"effectScope");function wn(n){if(n.flags&A){let i=n.depsTail;for(;i!==void 0;){let o=i.prevDep,f=i.dep;!("getter"in f)&&!("currentValue"in f)&&E(i,n),i=o}}n.depsTail=void 0,n.flags=5;let e=y(n);try{++hn;let i=n.value;return i!==(n.value=n.getter(i))}finally{w=e,n.flags&=-5,Nn(n)}}u(wn,"updateComputed");function yn(n){return n.flags=1,n.currentValue!==(n.currentValue=n.pendingValue)}u(yn,"updateSignal");function Sn(n){let e=n.cleanup;n.cleanup=void 0;let i=w;w=void 0;try{e()}finally{w=i}}u(Sn,"runCleanup");function Q(){$.call(this),this.cleanup&&Sn(this)}u(Q,"effectOper");function $(){this.flags=0,Y(this);let n=this.subs;n!==void 0&&E(n)}u($,"effectScopeOper");function Y(n){let e=n.depsTail;for(;e!==void 0;){let i=e.prevDep;E(e,n),e=i}}u(Y,"disposeAllDepsInReverse");function Nn(n){let e=n.depsTail,i=e!==void 0?e.nextDep:n.deps;for(;i!==void 0;)i=E(i,n)}u(Nn,"purgeDeps");function j(n){let e=y(void 0);try{return n()}finally{y(e)}}u(j,"untracked");var kn={"&":"&",'"':""","'":"'","<":"<",">":">"};function vn(n){return n.replace(/[&"'<>]/g,e=>kn[e])}u(vn,"_escAttr");var xn=/^[a-z_:][-\w:.]*$/i;function Tn(n,e){return n.kind==="prop-only"||e==null?null:n.kind==="boolean"?e===!0?"":null:n.kind==="json"?JSON.stringify(e):String(e)}u(Tn,"_serialize");function _n(n,e){return e===""?` ${n}`:` ${n}="${vn(e)}"`}u(_n,"_attr");function Z(n,e,i){let o=i?.attrs??{},f=String(n.f({props:e,refs:n.r,TAG:n.t,children:i?.children??"",attrs:o})),t=Object.create(null);for(let r in n.m){let l=r in e?Tn(n.m[r],e[r]):null;l!==null&&(t[r]=l)}for(let[r,l]of Object.entries(o))xn.test(r)&&(t[r]??=l);return{tag:n.t,attrs:t,html:f}}u(Z,"renderParts");function En(n,e,i){let{tag:o,attrs:f,html:t}=Z(n,e,i),r="";for(let l in f)r+=_n(l,f[l]);return`<${o}${r}>${t}</${o}>`}u(En,"renderHost");function M(){let n=globalThis;n[Symbol.for("microtags.render")]=En,n[Symbol.for("microtags.renderParts")]=Z}u(M,"register");M();var Rn={"&":"&",'"':""","'":"'","<":"<",">":">"};function nn(n){return n.replace(/[&"'<>]/g,e=>Rn[e])}u(nn,"_escHtml");var on=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),sn=Symbol.for("microtags.markup"),S=class{static{u(this,"Markup")}_n;_h;constructor(e,i=null){this._n=e,this._h=i}toString(){return this._h??x(this._n)}};S.prototype[sn]=!0;function ne(n){return new S(null,n)}u(ne,"raw");function F(n){return n!=null&&n[sn]===!0}u(F,"_isMarkup");function k(n){return typeof n=="function"&&"TAG"in n&&"props"in n}u(k,"_isMicrotag");function O(n,e){return n.startsWith("on")&&typeof e=="function"}u(O,"_isEvent");var H=/^[a-z_:][-\w:.]*$/i;function N(n){return typeof n=="function"?j(n):n}u(N,"_read");function un(n){if(typeof n.render!="function")throw new Error(`microtags: cannot create <${n.TAG}> in the browser: its render link was stripped. Keep it with \`.render(fn, { client: true })\` or the build-time keep list.`);return n.render}u(un,"_renderLink");function fn(n,e){let i=new Set(n.props),o={},f={};for(let[t,r]of Object.entries(e??{}))if(i.has(t))o[t]=N(r);else if(!O(t,r)&&H.test(t)){let l=N(r);l===!0?f[t]="":l!==!1&&l!=null&&(f[t]=String(l))}return{compProps:o,attrs:f}}u(fn,"_compArgs");function x(n){if(n==null||n===!1)return"";if(Array.isArray(n))return n.map(x).join("");if(F(n))return String(n);if(typeof n=="function")return x(N(n));if(typeof n!="object"||!("t"in n))return nn(String(n));let{t:e,p:i,c:o}=n,f=x(o);if(k(e)){let{compProps:r,attrs:l}=fn(e,i);return un(e)(r,{children:f,attrs:Object.keys(l).length>0?l:void 0})}if(typeof e!="string")return f;let t="";for(let[r,l]of Object.entries(i??{})){if(O(r,l)||!H.test(r))continue;let g=N(l);g===!0?t+=` ${r}`:g!==!1&&g!=null&&(t+=` ${r}="${nn(String(g))}"`)}return on.has(e)?`<${e}${t}>`:`<${e}${t}>${f}</${e}>`}u(x,"_str");function Cn(n,e,...i){if(typeof n=="string"&&on.has(n)&&i.length)throw new Error(`<${n}> has children: an unclosed void element swallows what follows it. Write it as <${n} />.`);return new S({t:n,p:e,c:i})}u(Cn,"h");var On=D.bind(Cn);function ee(n,...e){let i=On(n,...e);return F(i)?i:new S(Array.isArray(i)?i:[i])}u(ee,"html");function ln(n){j(n)}u(ln,"_dom");var en=new WeakMap;function cn(n,e){return/^(value|checked|selected)$/.test(e)&&/^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(n.tagName)}u(cn,"_ctl");function L(n,e,i,o){if(cn(n,e)){let t=n,r=en.get(n)??{};en.set(n,r);let l=e==="value"?String(i??""):!!i,g=t["default"+e[0].toUpperCase()+e.slice(1)];(e in r?!Object.is(r[e],i):!(o&&(g??t[e])===l))&&(t[e]=l),r[e]=i;return}let f=i===!1||i==null?null:i===!0?"":String(i);o&&n.getAttribute(e)===f||(f===null?n.removeAttribute(e):n.setAttribute(e,f))}u(L,"_setAttr");function an(n,e,i,o){let f=e.slice(2),t=i;n.addEventListener(f,t),o.push(()=>n.removeEventListener(f,t))}u(an,"_listen");function dn(n){let e=document.createElement("template");return e.innerHTML=n,document.importNode(e.content,!0)}u(dn,"_parse");function T(n,e=[]){if(n==null||n===!1)return e;if(Array.isArray(n))for(let i of n)T(i,e);else F(n)?n._n?T(n._n,e):e.push(...dn(String(n)).childNodes):typeof n=="object"&&!(n instanceof Node)&&"p"in n&&typeof n.t!="string"&&!k(n.t)?T(n.c,e):e.push(n);return e}u(T,"_items");function Dn(n,e){if(n instanceof Node)return[n];if(typeof n=="function")return pn(n,e);if(typeof n!="object"||n===null||!("t"in n))return[document.createTextNode(String(n))];let{t:i,p:o,c:f}=n;if(k(i))return[An(i,o,f,e)];let t=document.createElement(i);return _(t,null,null,f,e),W(t,o,e),[t]}u(Dn,"_create");function W(n,e,i,o){for(let[f,t]of Object.entries(e??{}))if(O(f,t))an(n,f,t,i);else if(H.test(f))if(typeof t=="function"){let r=o;R(()=>{L(n,f,t(),r),r=!1})}else(!o||cn(n,f))&&L(n,f,t,o);else continue}u(W,"_bindEl");function B(n,e,i,o,f){let t=new Set(e.props);for(let[r,l]of Object.entries(i??{}))O(r,l)?an(n,r,l,o):t.has(r)?n[r]=l:r==="key"&&L(n,r,N(l),f)}u(B,"_bindHost");function An(n,e,i,o){let{compProps:f,attrs:t}=fn(n,e),r=x(i),l;return M(),ln(()=>{let g=un(n)(f,{children:i.length>0?`<!--[c-->${r}<!--]-->`:r,attrs:Object.keys(t).length>0?t:void 0});l=dn(String(g)).firstElementChild}),B(l,n,e,o),l}u(An,"_createHost");function pn(n,e,i){let o=i?i[0]:document.createComment("["),f=i?i[1]:document.createComment("]"),t=document.createDocumentFragment();i||t.append(o,f);let r=[],l=!!i;return R(()=>{let g=n();for(let c of r)c();r=[],l?C(o.parentNode,o,f,g,r):_(o.parentNode,o,f,g,r),l=!1}),e.push(()=>{for(let g of r)g()}),Array.from(t.childNodes)}u(pn,"_region");function tn(n){if(n instanceof Element)return n.getAttribute("key");if(typeof n=="object"&&n!==null&&"p"in n){let e=n.p?.key;return e==null?null:String(N(e))}return null}u(tn,"_key");function gn(n){return(k(n.t)?n.t.TAG:n.t).toUpperCase()}u(gn,"_tag");function mn(n){let e=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT,{acceptNode:u(o=>o instanceof Element&&o.tagName.includes("-")?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,"acceptNode")}),i;for(;i=e.nextNode();)if(i instanceof Comment&&i.data==="[c"){let o=I(i);if(o)return[i,o]}return null}u(mn,"_range");function Vn(n,e,i){if(typeof e=="function"||e instanceof Node)return null;if(typeof e!="object"||e===null||!("t"in e)){if(n.nodeType!==Node.TEXT_NODE)return null;let t=String(e);return n.textContent!==t&&(n.textContent=t),n}let o=e;if(!(n instanceof Element)||n.tagName!==gn(o))return null;if(k(o.t)){B(n,o.t,o.p,i);let t=mn(n);return t&&_(t[0].parentNode,t[0],t[1],o.c,i),n}let f=new Set(Object.keys(o.p??{}));for(let t of Array.from(n.attributes))f.has(t.name)||n.removeAttribute(t.name);return _(n,null,null,o.c,i),W(n,o.p,i),n}u(Vn,"_patch");function _(n,e,i,o,f){let t=[];for(let a=e?e.nextSibling:n.firstChild;a&&a!==i;a=a.nextSibling)t.push(a);let r=new Map,l=[];for(let a of t){let d=tn(a);d!==null?r.set(d,a):l.push(a)}let g=0,c=[],s=new Set,m=new Set;for(let a of T(o)){let d=tn(a);if(d!==null){if(m.has(d))throw new Error("duplicate key "+d);m.add(d)}let p=d!==null?r.get(d):l[g],b=p&&!s.has(p)?Vn(p,a,f):null;d===null&&b&&g++,b?(s.add(b),c.push(b)):c.push(...Dn(a,f))}ln(()=>{for(let d of t)s.has(d)||d.remove();let a=i;for(let d=c.length-1;d>=0;d--){let p=c[d];if(p.parentNode!==n||p.nextSibling!==a){let b=n,h=s.has(p)&&n.isConnected;if(h)try{b.moveBefore(p,a)}catch{h=!1}h||n.insertBefore(p,a)}a=p}})}u(_,"_morph");function I(n){let e=0;for(let i=n.nextSibling;i;i=i.nextSibling)if(i instanceof Comment){if(i.data==="["||i.data==="[c")e++;else if(i.data==="]"&&e--===0)return i}return null}u(I,"_close");function P(n,e){for(;n&&n!==e&&(n instanceof Comment&&n.data!=="["||n.nodeType===Node.TEXT_NODE&&!n.textContent.trim());)n=n.nextSibling;return n===e?null:n}u(P,"_skip");function C(n,e,i,o,f){let t=e?e.nextSibling:n.firstChild;for(let r of T(o)){if(r instanceof Node){if(!r.previousSibling)for(;t&&t!==i&&t.nodeType!==r.nodeType&&P(t,i)!==t;)t=t.nextSibling;t&&t!==i&&(r.nodeType!==3||t.nodeType===3)&&(t=t.nextSibling);continue}if(typeof r=="function"){t=P(t,i);let s=t instanceof Comment?I(t):null;if(!s){console.warn("microtags: adopt: missing region markers");continue}pn(r,f,[t,s]),t=s.nextSibling;continue}if(typeof r!="object"||r===null||!("t"in r)){t&&t!==i&&t.nodeType===Node.TEXT_NODE&&(t=t.nextSibling);continue}t=P(t,i);let l=r,g=gn(l);if(!(t instanceof Element)||t.tagName!==g){console.warn(`microtags: adopt: expected <${g.toLowerCase()}>, found ${t instanceof Element?`<${t.localName}>`:"none"}`);let s=t;for(;s&&s!==i&&(!(s instanceof Element)||s.tagName!==g);)s=s instanceof Comment&&/^\[c?$/.test(s.data)&&I(s)||s,s!==i&&(s=s.nextSibling);if(!s||s===i)continue;t=s}let c=t;if(k(l.t)){B(c,l.t,l.p,f,!0);let s=mn(c);s&&C(s[0].parentNode,s[0],s[1],l.c,f)}else W(c,l.p,f,!0),C(c,null,null,l.c,f);t=t.nextSibling}}u(C,"_adopt");var rn=new WeakSet;function te(n,e){if(rn.has(n))throw new Error("microtags: this container is already mounted");rn.add(n);let i=[],o=V(()=>{n.firstChild?C(n,null,null,e,i):_(n,null,null,e,i)});return()=>{o();for(let f of i)f();i.length=0}}u(te,"mount");export{S as Markup,Cn as h,ee as html,te as mount,ne as raw};
|
|
3
|
+
//# sourceMappingURL=htm.browser.min.js.map
|