microtags 0.0.13 → 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 +567 -40
- 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,591 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
|
|
31
|
+
// src/htm.browser.ts
|
|
32
|
+
var htm_browser_exports = {};
|
|
33
|
+
__export(htm_browser_exports, {
|
|
34
|
+
Markup: () => Markup,
|
|
35
|
+
h: () => h,
|
|
36
|
+
html: () => html,
|
|
37
|
+
mount: () => mount,
|
|
38
|
+
raw: () => raw
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(htm_browser_exports);
|
|
41
|
+
var import_htm = __toESM(require("htm"), 1);
|
|
42
|
+
|
|
43
|
+
// src/reactivity.ts
|
|
44
|
+
var import_alien_signals = require("alien-signals");
|
|
45
|
+
function untracked(fn) {
|
|
46
|
+
const prev = (0, import_alien_signals.setActiveSub)(void 0);
|
|
47
|
+
try {
|
|
48
|
+
return fn();
|
|
49
|
+
} finally {
|
|
50
|
+
(0, import_alien_signals.setActiveSub)(prev);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
__name(untracked, "untracked");
|
|
54
|
+
|
|
55
|
+
// src/render-support.ts
|
|
56
|
+
var _esc = {
|
|
57
|
+
"&": "&",
|
|
58
|
+
'"': """,
|
|
59
|
+
"'": "'",
|
|
60
|
+
"<": "<",
|
|
61
|
+
">": ">"
|
|
62
|
+
};
|
|
63
|
+
function _escAttr(s) {
|
|
64
|
+
return s.replace(/[&"'<>]/g, (c) => _esc[c]);
|
|
65
|
+
}
|
|
66
|
+
__name(_escAttr, "_escAttr");
|
|
67
|
+
var _attrName = /^[a-z_:][-\w:.]*$/i;
|
|
68
|
+
function _serialize(m, v) {
|
|
69
|
+
if (m.kind === "prop-only" || v == null) return null;
|
|
70
|
+
if (m.kind === "boolean") return v === true ? "" : null;
|
|
71
|
+
if (m.kind === "json") return JSON.stringify(v);
|
|
72
|
+
return String(v);
|
|
73
|
+
}
|
|
74
|
+
__name(_serialize, "_serialize");
|
|
75
|
+
function _attr(k, v) {
|
|
76
|
+
return v === "" ? ` ${k}` : ` ${k}="${_escAttr(v)}"`;
|
|
77
|
+
}
|
|
78
|
+
__name(_attr, "_attr");
|
|
79
|
+
function renderParts(rec, props, options) {
|
|
80
|
+
const extra = options?.attrs ?? {};
|
|
81
|
+
const html2 = String(rec.f({
|
|
82
|
+
props,
|
|
83
|
+
refs: rec.r,
|
|
84
|
+
TAG: rec.t,
|
|
85
|
+
children: options?.children ?? "",
|
|
86
|
+
attrs: extra
|
|
87
|
+
}));
|
|
88
|
+
const attrs = /* @__PURE__ */ Object.create(null);
|
|
89
|
+
for (const k in rec.m) {
|
|
90
|
+
const s = k in props ? _serialize(rec.m[k], props[k]) : null;
|
|
91
|
+
if (s !== null) attrs[k] = s;
|
|
92
|
+
}
|
|
93
|
+
for (const [k, v] of Object.entries(extra)) {
|
|
94
|
+
if (_attrName.test(k)) attrs[k] ??= v;
|
|
95
|
+
}
|
|
96
|
+
return { tag: rec.t, attrs, html: html2 };
|
|
97
|
+
}
|
|
98
|
+
__name(renderParts, "renderParts");
|
|
99
|
+
function renderHost(rec, props, options) {
|
|
100
|
+
const { tag, attrs, html: html2 } = renderParts(rec, props, options);
|
|
101
|
+
let a = "";
|
|
102
|
+
for (const k in attrs) a += _attr(k, attrs[k]);
|
|
103
|
+
return `<${tag}${a}>${html2}</${tag}>`;
|
|
104
|
+
}
|
|
105
|
+
__name(renderHost, "renderHost");
|
|
106
|
+
function register() {
|
|
107
|
+
const g = globalThis;
|
|
108
|
+
g[/* @__PURE__ */ Symbol.for("microtags.render")] = renderHost;
|
|
109
|
+
g[/* @__PURE__ */ Symbol.for("microtags.renderParts")] = renderParts;
|
|
110
|
+
}
|
|
111
|
+
__name(register, "register");
|
|
112
|
+
register();
|
|
113
|
+
|
|
114
|
+
// src/htm.browser.ts
|
|
115
|
+
var _esc2 = {
|
|
116
|
+
"&": "&",
|
|
117
|
+
'"': """,
|
|
118
|
+
"'": "'",
|
|
119
|
+
"<": "<",
|
|
120
|
+
">": ">"
|
|
121
|
+
};
|
|
122
|
+
function _escHtml(s) {
|
|
123
|
+
return s.replace(/[&"'<>]/g, (c) => _esc2[c]);
|
|
124
|
+
}
|
|
125
|
+
__name(_escHtml, "_escHtml");
|
|
126
|
+
var VOID = /* @__PURE__ */ new Set([
|
|
127
|
+
"area",
|
|
128
|
+
"base",
|
|
129
|
+
"br",
|
|
130
|
+
"col",
|
|
131
|
+
"embed",
|
|
132
|
+
"hr",
|
|
133
|
+
"img",
|
|
134
|
+
"input",
|
|
135
|
+
"link",
|
|
136
|
+
"meta",
|
|
137
|
+
"param",
|
|
138
|
+
"source",
|
|
139
|
+
"track",
|
|
140
|
+
"wbr"
|
|
141
|
+
]);
|
|
142
|
+
var _M = /* @__PURE__ */ Symbol.for("microtags.markup");
|
|
143
|
+
var Markup = class {
|
|
144
|
+
static {
|
|
145
|
+
__name(this, "Markup");
|
|
146
|
+
}
|
|
147
|
+
// a node description, or trusted HTML from `raw`
|
|
148
|
+
_n;
|
|
149
|
+
_h;
|
|
150
|
+
constructor(n, h2 = null) {
|
|
151
|
+
this._n = n;
|
|
152
|
+
this._h = h2;
|
|
153
|
+
}
|
|
154
|
+
toString() {
|
|
155
|
+
return this._h ?? _str(this._n);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
Markup.prototype[_M] = true;
|
|
159
|
+
function raw(s) {
|
|
160
|
+
return new Markup(null, s);
|
|
161
|
+
}
|
|
162
|
+
__name(raw, "raw");
|
|
163
|
+
function _isMarkup(c) {
|
|
164
|
+
return c != null && c[_M] === true;
|
|
165
|
+
}
|
|
166
|
+
__name(_isMarkup, "_isMarkup");
|
|
167
|
+
function _isMicrotag(t) {
|
|
168
|
+
return typeof t === "function" && "TAG" in t && "props" in t;
|
|
169
|
+
}
|
|
170
|
+
__name(_isMicrotag, "_isMicrotag");
|
|
171
|
+
function _isEvent(k, v) {
|
|
172
|
+
return k.startsWith("on") && typeof v === "function";
|
|
173
|
+
}
|
|
174
|
+
__name(_isEvent, "_isEvent");
|
|
175
|
+
var _ATTR = /^[a-z_:][-\w:.]*$/i;
|
|
176
|
+
function _read(v) {
|
|
177
|
+
return typeof v === "function" ? untracked(v) : v;
|
|
178
|
+
}
|
|
179
|
+
__name(_read, "_read");
|
|
180
|
+
function _renderLink(type) {
|
|
181
|
+
if (typeof type.render !== "function") {
|
|
182
|
+
throw new Error(
|
|
183
|
+
`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.`
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
return type.render;
|
|
187
|
+
}
|
|
188
|
+
__name(_renderLink, "_renderLink");
|
|
189
|
+
function _compArgs(type, props) {
|
|
190
|
+
const declared = new Set(type.props);
|
|
191
|
+
const compProps = {};
|
|
192
|
+
const attrs = {};
|
|
193
|
+
for (const [k, v] of Object.entries(props ?? {})) {
|
|
194
|
+
if (declared.has(k)) {
|
|
195
|
+
compProps[k] = _read(v);
|
|
196
|
+
} else if (!_isEvent(k, v) && _ATTR.test(k)) {
|
|
197
|
+
const r = _read(v);
|
|
198
|
+
if (r === true) attrs[k] = "";
|
|
199
|
+
else if (r !== false && r != null) attrs[k] = String(r);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return { compProps, attrs };
|
|
203
|
+
}
|
|
204
|
+
__name(_compArgs, "_compArgs");
|
|
205
|
+
function _str(c) {
|
|
206
|
+
if (c == null || c === false) return "";
|
|
207
|
+
if (Array.isArray(c)) return c.map(_str).join("");
|
|
208
|
+
if (_isMarkup(c)) return String(c);
|
|
209
|
+
if (typeof c === "function") return _str(_read(c));
|
|
210
|
+
if (typeof c !== "object" || !("t" in c)) {
|
|
211
|
+
return _escHtml(String(c));
|
|
212
|
+
}
|
|
213
|
+
const { t, p, c: kids } = c;
|
|
214
|
+
const inner = _str(kids);
|
|
215
|
+
if (_isMicrotag(t)) {
|
|
216
|
+
const { compProps, attrs } = _compArgs(t, p);
|
|
217
|
+
return _renderLink(t)(compProps, {
|
|
218
|
+
children: inner,
|
|
219
|
+
attrs: Object.keys(attrs).length > 0 ? attrs : void 0
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (typeof t !== "string") return inner;
|
|
223
|
+
let a = "";
|
|
224
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
225
|
+
if (_isEvent(k, v) || !_ATTR.test(k)) continue;
|
|
226
|
+
const r = _read(v);
|
|
227
|
+
if (r === true) a += ` ${k}`;
|
|
228
|
+
else if (r !== false && r != null) {
|
|
229
|
+
a += ` ${k}="${_escHtml(String(r))}"`;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (VOID.has(t)) return `<${t}${a}>`;
|
|
233
|
+
return `<${t}${a}>${inner}</${t}>`;
|
|
234
|
+
}
|
|
235
|
+
__name(_str, "_str");
|
|
236
|
+
function h(type, props, ...children) {
|
|
237
|
+
if (typeof type === "string" && VOID.has(type) && children.length) {
|
|
238
|
+
throw new Error(
|
|
239
|
+
`<${type}> has children: an unclosed void element swallows what follows it. Write it as <${type} />.`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
return new Markup({ t: type, p: props, c: children });
|
|
243
|
+
}
|
|
244
|
+
__name(h, "h");
|
|
245
|
+
var _htm = import_htm.default.bind(h);
|
|
246
|
+
function html(strings, ...values) {
|
|
247
|
+
const result = _htm(
|
|
248
|
+
strings,
|
|
249
|
+
...values
|
|
250
|
+
);
|
|
251
|
+
if (_isMarkup(result)) return result;
|
|
252
|
+
return new Markup(Array.isArray(result) ? result : [result]);
|
|
253
|
+
}
|
|
254
|
+
__name(html, "html");
|
|
255
|
+
function _dom(fn) {
|
|
256
|
+
untracked(fn);
|
|
257
|
+
}
|
|
258
|
+
__name(_dom, "_dom");
|
|
259
|
+
var _bound = /* @__PURE__ */ new WeakMap();
|
|
260
|
+
function _ctl(el, k) {
|
|
261
|
+
return /^(value|checked|selected)$/.test(k) && /^(INPUT|TEXTAREA|SELECT|OPTION)$/.test(el.tagName);
|
|
262
|
+
}
|
|
263
|
+
__name(_ctl, "_ctl");
|
|
264
|
+
function _setAttr(el, k, v, keep) {
|
|
265
|
+
if (_ctl(el, k)) {
|
|
266
|
+
const o = el;
|
|
267
|
+
const rec = _bound.get(el) ?? {};
|
|
268
|
+
_bound.set(el, rec);
|
|
269
|
+
const x = k === "value" ? String(v ?? "") : !!v;
|
|
270
|
+
const d = o["default" + k[0].toUpperCase() + k.slice(1)];
|
|
271
|
+
if (k in rec ? !Object.is(rec[k], v) : !(keep && (d ?? o[k]) === x)) {
|
|
272
|
+
o[k] = x;
|
|
273
|
+
}
|
|
274
|
+
rec[k] = v;
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const s = v === false || v == null ? null : v === true ? "" : String(v);
|
|
278
|
+
if (keep && el.getAttribute(k) === s) return;
|
|
279
|
+
if (s === null) el.removeAttribute(k);
|
|
280
|
+
else el.setAttribute(k, s);
|
|
281
|
+
}
|
|
282
|
+
__name(_setAttr, "_setAttr");
|
|
283
|
+
function _listen(el, k, fn, offs) {
|
|
284
|
+
const type = k.slice(2);
|
|
285
|
+
const handler = fn;
|
|
286
|
+
el.addEventListener(type, handler);
|
|
287
|
+
offs.push(() => el.removeEventListener(type, handler));
|
|
288
|
+
}
|
|
289
|
+
__name(_listen, "_listen");
|
|
290
|
+
function _parse(s) {
|
|
291
|
+
const tpl = document.createElement("template");
|
|
292
|
+
tpl.innerHTML = s;
|
|
293
|
+
return document.importNode(tpl.content, true);
|
|
294
|
+
}
|
|
295
|
+
__name(_parse, "_parse");
|
|
296
|
+
function _items(c, out = []) {
|
|
297
|
+
if (c == null || c === false) return out;
|
|
298
|
+
if (Array.isArray(c)) {
|
|
299
|
+
for (const x of c) _items(x, out);
|
|
300
|
+
} else if (_isMarkup(c)) {
|
|
301
|
+
if (c._n) _items(c._n, out);
|
|
302
|
+
else out.push(..._parse(String(c)).childNodes);
|
|
303
|
+
} else if (typeof c === "object" && !(c instanceof Node) && "p" in c && typeof c.t !== "string" && !_isMicrotag(c.t)) {
|
|
304
|
+
_items(c.c, out);
|
|
305
|
+
} else {
|
|
306
|
+
out.push(c);
|
|
307
|
+
}
|
|
308
|
+
return out;
|
|
309
|
+
}
|
|
310
|
+
__name(_items, "_items");
|
|
311
|
+
function _create(c, offs) {
|
|
312
|
+
if (c instanceof Node) return [c];
|
|
313
|
+
if (typeof c === "function") return _region(c, offs);
|
|
314
|
+
if (typeof c !== "object" || c === null || !("t" in c)) {
|
|
315
|
+
return [document.createTextNode(String(c))];
|
|
316
|
+
}
|
|
317
|
+
const { t, p, c: kids } = c;
|
|
318
|
+
if (_isMicrotag(t)) return [_createHost(t, p, kids, offs)];
|
|
319
|
+
const el = document.createElement(t);
|
|
320
|
+
_morph(el, null, null, kids, offs);
|
|
321
|
+
_bindEl(el, p, offs);
|
|
322
|
+
return [el];
|
|
323
|
+
}
|
|
324
|
+
__name(_create, "_create");
|
|
325
|
+
function _bindEl(el, p, offs, adopt) {
|
|
326
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
327
|
+
if (_isEvent(k, v)) {
|
|
328
|
+
_listen(el, k, v, offs);
|
|
329
|
+
} else if (!_ATTR.test(k)) {
|
|
330
|
+
continue;
|
|
331
|
+
} else if (typeof v === "function") {
|
|
332
|
+
let first = adopt;
|
|
333
|
+
(0, import_alien_signals.effect)(() => {
|
|
334
|
+
_setAttr(el, k, v(), first);
|
|
335
|
+
first = false;
|
|
336
|
+
});
|
|
337
|
+
} else if (!adopt || _ctl(el, k)) {
|
|
338
|
+
_setAttr(el, k, v, adopt);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
__name(_bindEl, "_bindEl");
|
|
343
|
+
function _bindHost(host, type, p, offs, adopt) {
|
|
344
|
+
const declared = new Set(type.props);
|
|
345
|
+
for (const [k, v] of Object.entries(p ?? {})) {
|
|
346
|
+
if (_isEvent(k, v)) {
|
|
347
|
+
_listen(host, k, v, offs);
|
|
348
|
+
} else if (declared.has(k)) {
|
|
349
|
+
host[k] = v;
|
|
350
|
+
} else if (k === "key") {
|
|
351
|
+
_setAttr(host, k, _read(v), adopt);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
__name(_bindHost, "_bindHost");
|
|
356
|
+
function _createHost(type, p, kids, offs) {
|
|
357
|
+
const { compProps, attrs } = _compArgs(type, p);
|
|
358
|
+
const inner = _str(kids);
|
|
359
|
+
let host;
|
|
360
|
+
register();
|
|
361
|
+
_dom(() => {
|
|
362
|
+
const out = _renderLink(type)(compProps, {
|
|
363
|
+
children: kids.length > 0 ? `<!--[c-->${inner}<!--]-->` : inner,
|
|
364
|
+
attrs: Object.keys(attrs).length > 0 ? attrs : void 0
|
|
365
|
+
});
|
|
366
|
+
host = _parse(String(out)).firstElementChild;
|
|
367
|
+
});
|
|
368
|
+
_bindHost(host, type, p, offs);
|
|
369
|
+
return host;
|
|
370
|
+
}
|
|
371
|
+
__name(_createHost, "_createHost");
|
|
372
|
+
function _region(fn, offs, at) {
|
|
373
|
+
const start = at ? at[0] : document.createComment("[");
|
|
374
|
+
const end = at ? at[1] : document.createComment("]");
|
|
375
|
+
const frag = document.createDocumentFragment();
|
|
376
|
+
if (!at) frag.append(start, end);
|
|
377
|
+
let own = [];
|
|
378
|
+
let adopt = !!at;
|
|
379
|
+
(0, import_alien_signals.effect)(() => {
|
|
380
|
+
const v = fn();
|
|
381
|
+
for (const off of own) off();
|
|
382
|
+
own = [];
|
|
383
|
+
if (adopt) _adopt(start.parentNode, start, end, v, own);
|
|
384
|
+
else _morph(start.parentNode, start, end, v, own);
|
|
385
|
+
adopt = false;
|
|
386
|
+
});
|
|
387
|
+
offs.push(() => {
|
|
388
|
+
for (const off of own) off();
|
|
389
|
+
});
|
|
390
|
+
return Array.from(frag.childNodes);
|
|
391
|
+
}
|
|
392
|
+
__name(_region, "_region");
|
|
393
|
+
function _key(x) {
|
|
394
|
+
if (x instanceof Element) return x.getAttribute("key");
|
|
395
|
+
if (typeof x === "object" && x !== null && "p" in x) {
|
|
396
|
+
const k = x.p?.key;
|
|
397
|
+
return k == null ? null : String(_read(k));
|
|
398
|
+
}
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
__name(_key, "_key");
|
|
402
|
+
function _tag(x) {
|
|
403
|
+
return (_isMicrotag(x.t) ? x.t.TAG : x.t).toUpperCase();
|
|
404
|
+
}
|
|
405
|
+
__name(_tag, "_tag");
|
|
406
|
+
function _range(host) {
|
|
407
|
+
const w = document.createTreeWalker(
|
|
408
|
+
host,
|
|
409
|
+
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT,
|
|
410
|
+
{
|
|
411
|
+
acceptNode: /* @__PURE__ */ __name((n2) => n2 instanceof Element && n2.tagName.includes("-") ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT, "acceptNode")
|
|
412
|
+
}
|
|
413
|
+
);
|
|
414
|
+
let n;
|
|
415
|
+
while (n = w.nextNode()) {
|
|
416
|
+
if (n instanceof Comment && n.data === "[c") {
|
|
417
|
+
const end = _close(n);
|
|
418
|
+
if (end) return [n, end];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
__name(_range, "_range");
|
|
424
|
+
function _patch(old, item, offs) {
|
|
425
|
+
if (typeof item === "function" || item instanceof Node) return null;
|
|
426
|
+
if (typeof item !== "object" || item === null || !("t" in item)) {
|
|
427
|
+
if (old.nodeType !== Node.TEXT_NODE) return null;
|
|
428
|
+
const s = String(item);
|
|
429
|
+
if (old.textContent !== s) old.textContent = s;
|
|
430
|
+
return old;
|
|
431
|
+
}
|
|
432
|
+
const v = item;
|
|
433
|
+
if (!(old instanceof Element) || old.tagName !== _tag(v)) return null;
|
|
434
|
+
if (_isMicrotag(v.t)) {
|
|
435
|
+
_bindHost(old, v.t, v.p, offs);
|
|
436
|
+
const r = _range(old);
|
|
437
|
+
if (r) _morph(r[0].parentNode, r[0], r[1], v.c, offs);
|
|
438
|
+
return old;
|
|
439
|
+
}
|
|
440
|
+
const next = new Set(Object.keys(v.p ?? {}));
|
|
441
|
+
for (const a of Array.from(old.attributes)) {
|
|
442
|
+
if (!next.has(a.name)) old.removeAttribute(a.name);
|
|
443
|
+
}
|
|
444
|
+
_morph(old, null, null, v.c, offs);
|
|
445
|
+
_bindEl(old, v.p, offs);
|
|
446
|
+
return old;
|
|
447
|
+
}
|
|
448
|
+
__name(_patch, "_patch");
|
|
449
|
+
function _morph(parent, start, end, value, offs) {
|
|
450
|
+
const old = [];
|
|
451
|
+
for (let n = start ? start.nextSibling : parent.firstChild; n && n !== end; n = n.nextSibling) old.push(n);
|
|
452
|
+
const keyed = /* @__PURE__ */ new Map();
|
|
453
|
+
const unkeyed = [];
|
|
454
|
+
for (const n of old) {
|
|
455
|
+
const k = _key(n);
|
|
456
|
+
if (k !== null) keyed.set(k, n);
|
|
457
|
+
else unkeyed.push(n);
|
|
458
|
+
}
|
|
459
|
+
let u = 0;
|
|
460
|
+
const nodes = [];
|
|
461
|
+
const used = /* @__PURE__ */ new Set();
|
|
462
|
+
const seen = /* @__PURE__ */ new Set();
|
|
463
|
+
for (const item of _items(value)) {
|
|
464
|
+
const k = _key(item);
|
|
465
|
+
if (k !== null) {
|
|
466
|
+
if (seen.has(k)) throw new Error("duplicate key " + k);
|
|
467
|
+
seen.add(k);
|
|
468
|
+
}
|
|
469
|
+
const cand = k !== null ? keyed.get(k) : unkeyed[u];
|
|
470
|
+
const kept = cand && !used.has(cand) ? _patch(cand, item, offs) : null;
|
|
471
|
+
if (k === null && kept) u++;
|
|
472
|
+
if (kept) {
|
|
473
|
+
used.add(kept);
|
|
474
|
+
nodes.push(kept);
|
|
475
|
+
} else {
|
|
476
|
+
nodes.push(..._create(item, offs));
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
_dom(() => {
|
|
480
|
+
for (const n of old) {
|
|
481
|
+
if (!used.has(n)) n.remove();
|
|
482
|
+
}
|
|
483
|
+
let ref = end;
|
|
484
|
+
for (let i = nodes.length - 1; i >= 0; i--) {
|
|
485
|
+
const n = nodes[i];
|
|
486
|
+
if (n.parentNode !== parent || n.nextSibling !== ref) {
|
|
487
|
+
const p = parent;
|
|
488
|
+
let moved = used.has(n) && parent.isConnected;
|
|
489
|
+
if (moved) {
|
|
490
|
+
try {
|
|
491
|
+
p.moveBefore(n, ref);
|
|
492
|
+
} catch {
|
|
493
|
+
moved = false;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
if (!moved) parent.insertBefore(n, ref);
|
|
497
|
+
}
|
|
498
|
+
ref = n;
|
|
499
|
+
}
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
__name(_morph, "_morph");
|
|
503
|
+
function _close(start) {
|
|
504
|
+
let depth = 0;
|
|
505
|
+
for (let s = start.nextSibling; s; s = s.nextSibling) {
|
|
506
|
+
if (!(s instanceof Comment)) continue;
|
|
507
|
+
if (s.data === "[" || s.data === "[c") depth++;
|
|
508
|
+
else if (s.data === "]" && depth-- === 0) return s;
|
|
509
|
+
}
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
__name(_close, "_close");
|
|
513
|
+
function _skip(n, end) {
|
|
514
|
+
while (n && n !== end && (n instanceof Comment && n.data !== "[" || n.nodeType === Node.TEXT_NODE && !n.textContent.trim())) n = n.nextSibling;
|
|
515
|
+
return n === end ? null : n;
|
|
516
|
+
}
|
|
517
|
+
__name(_skip, "_skip");
|
|
518
|
+
function _adopt(parent, start, end, value, offs) {
|
|
519
|
+
let n = start ? start.nextSibling : parent.firstChild;
|
|
520
|
+
for (const item of _items(value)) {
|
|
521
|
+
if (item instanceof Node) {
|
|
522
|
+
if (!item.previousSibling) {
|
|
523
|
+
while (n && n !== end && n.nodeType !== item.nodeType && _skip(n, end) !== n) n = n.nextSibling;
|
|
524
|
+
}
|
|
525
|
+
if (n && n !== end && (item.nodeType !== 3 || n.nodeType === 3)) n = n.nextSibling;
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
if (typeof item === "function") {
|
|
529
|
+
n = _skip(n, end);
|
|
530
|
+
const close = n instanceof Comment ? _close(n) : null;
|
|
531
|
+
if (!close) {
|
|
532
|
+
console.warn("microtags: adopt: missing region markers");
|
|
533
|
+
continue;
|
|
534
|
+
}
|
|
535
|
+
_region(item, offs, [n, close]);
|
|
536
|
+
n = close.nextSibling;
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
if (typeof item !== "object" || item === null || !("t" in item)) {
|
|
540
|
+
if (n && n !== end && n.nodeType === Node.TEXT_NODE) {
|
|
541
|
+
n = n.nextSibling;
|
|
542
|
+
}
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
n = _skip(n, end);
|
|
546
|
+
const v = item;
|
|
547
|
+
const tag = _tag(v);
|
|
548
|
+
if (!(n instanceof Element) || n.tagName !== tag) {
|
|
549
|
+
console.warn(
|
|
550
|
+
`microtags: adopt: expected <${tag.toLowerCase()}>, found ${n instanceof Element ? `<${n.localName}>` : "none"}`
|
|
551
|
+
);
|
|
552
|
+
let m = n;
|
|
553
|
+
while (m && m !== end && (!(m instanceof Element) || m.tagName !== tag)) {
|
|
554
|
+
m = m instanceof Comment && /^\[c?$/.test(m.data) && _close(m) || m;
|
|
555
|
+
if (m !== end) m = m.nextSibling;
|
|
556
|
+
}
|
|
557
|
+
if (!m || m === end) continue;
|
|
558
|
+
n = m;
|
|
559
|
+
}
|
|
560
|
+
const el = n;
|
|
561
|
+
if (_isMicrotag(v.t)) {
|
|
562
|
+
_bindHost(el, v.t, v.p, offs, true);
|
|
563
|
+
const r = _range(el);
|
|
564
|
+
if (r) _adopt(r[0].parentNode, r[0], r[1], v.c, offs);
|
|
565
|
+
} else {
|
|
566
|
+
_bindEl(el, v.p, offs, true);
|
|
567
|
+
_adopt(el, null, null, v.c, offs);
|
|
568
|
+
}
|
|
569
|
+
n = n.nextSibling;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
__name(_adopt, "_adopt");
|
|
573
|
+
var _mounted = /* @__PURE__ */ new WeakSet();
|
|
574
|
+
function mount(container, markup) {
|
|
575
|
+
if (_mounted.has(container)) {
|
|
576
|
+
throw new Error("microtags: this container is already mounted");
|
|
577
|
+
}
|
|
578
|
+
_mounted.add(container);
|
|
579
|
+
const offs = [];
|
|
580
|
+
const stop = (0, import_alien_signals.effectScope)(() => {
|
|
581
|
+
if (container.firstChild) _adopt(container, null, null, markup, offs);
|
|
582
|
+
else _morph(container, null, null, markup, offs);
|
|
583
|
+
});
|
|
584
|
+
return () => {
|
|
585
|
+
stop();
|
|
586
|
+
for (const off of offs) off();
|
|
587
|
+
offs.length = 0;
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
__name(mount, "mount");
|
|
591
|
+
//# sourceMappingURL=htm.browser.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/htm.browser.ts", "../src/reactivity.ts", "../src/render-support.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", "import {\n signal,\n effect,\n effectScope,\n setActiveSub,\n} from 'alien-signals'\nimport type { Signal } from './types.js'\n\n// Re-export alien-signals primitives under stable names for internal use.\nexport { signal, effect, effectScope }\n\n/**\n * Run fn without tracking any signals it reads.\n * Suspends the current subscriber via setActiveSub(undefined),\n * restoring it in a finally block so nested effects are unaffected.\n */\nexport function untracked<T> (fn:() => T):T {\n const prev = setActiveSub(undefined)\n try {\n return fn()\n } finally {\n setActiveSub(prev)\n }\n}\n\n/**\n * Read a signal's current value without subscribing.\n * Equivalent to untracked(() => sig()).\n */\nexport function peek<T> (sig:Signal<T>):T {\n return untracked(() => sig())\n}\n", "// Server render support: the host-tag builder, prop serializers and\n// attribute escaping. Importing this module registers `renderHost`\n// under a registry symbol on `globalThis`, where a component's `render`\n// static finds it. Core never imports this module, so a bundle with\n// every render link stripped leaves it out. See ADR-009.\nimport type {\n PropMeta,\n RenderParts,\n RenderRecord,\n} from './builders.js'\n\nconst _esc:Record<string, string> = {\n '&': '&',\n '\"': '"',\n \"'\": ''',\n '<': '<',\n '>': '>',\n}\nfunction _escAttr (s:string):string {\n return s.replace(/[&\"'<>]/g, c => _esc[c])\n}\n\n// HTML attribute name grammar: a letter, `_` or `:`, then letters,\n// digits, `-`, `_`, `:` or `.`. Extra attrs may come from data.\nconst _attrName = /^[a-z_:][-\\w:.]*$/i\n\n// The kind is decided by core, so no coercer is compared here and any\n// copy of this module serves any copy of core.\nfunction _serialize (m:PropMeta, v:unknown):string | null {\n if (m.kind === 'prop-only' || v == null) return null\n if (m.kind === 'boolean') return v === true ? '' : null\n if (m.kind === 'json') return JSON.stringify(v)\n return String(v)\n}\n\nfunction _attr (k:string, v:string):string {\n return v === '' ? ` ${k}` : ` ${k}=\"${_escAttr(v)}\"`\n}\n\n/**\n * Render a component as parts: the host tag name, its serialized\n * (unescaped) attributes, declared props first, and the inner HTML.\n * `attrs` has no prototype, so a name like `__proto__` from data is a\n * plain key. A declared prop keeps its value over an extra attr of the\n * same name, as an HTML parser keeps the first of a duplicate.\n */\nexport function renderParts (\n rec:RenderRecord,\n props:Record<string, unknown>,\n options?:{ children?:string; attrs?:Record<string, string> }\n):RenderParts {\n const extra = options?.attrs ?? {}\n const html = String(rec.f({\n props,\n refs: rec.r,\n TAG: rec.t,\n children: options?.children ?? '',\n attrs: extra,\n }))\n const attrs:Record<string, string> = Object.create(null)\n for (const k in rec.m) {\n const s = k in props ? _serialize(rec.m[k], props[k]) : null\n if (s !== null) attrs[k] = s\n }\n for (const [k, v] of Object.entries(extra)) {\n if (_attrName.test(k)) attrs[k] ??= v\n }\n return { tag: rec.t, attrs, html }\n}\n\n/** Render a component's host tag around the output of its render link. */\nexport function renderHost (\n rec:RenderRecord,\n props:Record<string, unknown>,\n options?:{ children?:string; attrs?:Record<string, string> }\n):string {\n const { tag, attrs, html } = renderParts(rec, props, options)\n let a = ''\n for (const k in attrs) a += _attr(k, attrs[k])\n return `<${tag}${a}>${html}</${tag}>`\n}\n\n/**\n * Store `renderHost` and `renderParts` where the `render` and\n * `renderParts` statics look them up.\n */\nexport function register ():void {\n const g = globalThis as any\n g[Symbol.for('microtags.render')] = renderHost\n g[Symbol.for('microtags.renderParts')] = renderParts\n}\n\nregister()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["html", "_esc", "h", "htm", "n"]
|
|
7
|
+
}
|