@torpor/view 1.0.1 → 1.0.3

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.
@@ -43,13 +43,15 @@ function buildStyles(value) {
43
43
  }
44
44
  }
45
45
  function gatherStyles(value, styles) {
46
- if (value) if (Array.isArray(value)) for (let v of value) gatherStyles(v, styles);
47
- else if (typeof value === "object") for (let [n, v] of Object.entries(value)) {
48
- if (v === null || v === void 0) continue;
49
- const key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? "-" : "") + char.toLowerCase());
50
- styles.push(`${key}: ${v}`);
46
+ if (value) {
47
+ if (Array.isArray(value)) for (let v of value) gatherStyles(v, styles);
48
+ else if (typeof value === "object") for (let [n, v] of Object.entries(value)) {
49
+ if (v === null || v === void 0) continue;
50
+ const key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? "-" : "") + char.toLowerCase());
51
+ styles.push(`${key}: ${v}`);
52
+ }
53
+ else styles.push(String(value));
51
54
  }
52
- else styles.push(String(value));
53
55
  }
54
56
  //#endregion
55
57
  //#region src/render/formatText.ts
@@ -134,4 +136,4 @@ function fromWebSocket(url) {
134
136
  //#endregion
135
137
  export { buildStyles as a, proxyDataSymbol as c, formatText as i, fromServer as n, buildClasses as o, fromElement as r, $unwrap as s, fromWebSocket as t };
136
138
 
137
- //# sourceMappingURL=fromWebSocket-Dxc_uwm1.mjs.map
139
+ //# sourceMappingURL=fromWebSocket-CFGoMkV2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"fromWebSocket-Dxc_uwm1.mjs","names":[],"sources":["../src/watch/symbols.ts","../src/watch/$unwrap.ts","../src/render/buildClasses.ts","../src/render/buildStyles.ts","../src/render/formatText.ts","../src/stream/fromElement.ts","../src/stream/fromServer.ts","../src/stream/fromWebSocket.ts"],"sourcesContent":["const proxyDataSymbol: unique symbol = Symbol.for(\"torp.ProxyData\");\n\nexport { proxyDataSymbol };\n","import { proxyDataSymbol } from \"./symbols\";\n\n/**\n * Returns the target object of a proxy\n *\n * @param object The proxy object\n */\nexport default function $unwrap<T extends Record<PropertyKey, any>>(object: T): T {\n\treturn object !== undefined && object !== null && object[proxyDataSymbol] !== undefined\n\t\t? (object[proxyDataSymbol].target ?? object)\n\t\t: object;\n}\n","import ClassValue from \"../types/ClassValue\";\nimport $unwrap from \"../watch/$unwrap\";\n\nexport default function buildClasses(value: ClassValue, styleHash?: string): string {\n\tif (typeof value === \"string\") {\n\t\tif (styleHash !== undefined) {\n\t\t\tvalue += \" \" + styleHash;\n\t\t}\n\t\treturn value;\n\t} else {\n\t\tlet classes: string[] = [];\n\t\tgatherClasses(\"\", value, classes);\n\t\tif (styleHash !== undefined) {\n\t\t\tclasses.push(styleHash);\n\t\t}\n\t\treturn classes.join(\" \");\n\t}\n}\n\nfunction gatherClasses(name: string, value: unknown, classes: string[]) {\n\tif (value) {\n\t\t// Unwrap watched values before iterating: component props are\n\t\t// deep-wrapped, and iterating a watched array disables the active\n\t\t// effect (see the array iterator in proxyGet), which would break\n\t\t// tracking of reads later in the same effect. Per-element tracking is\n\t\t// unnecessary here anyway -- the caller has already subscribed to the\n\t\t// property read that produced the value\n\t\tvalue = $unwrap(value as Record<PropertyKey, any>);\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let v of value) {\n\t\t\t\tgatherClasses(v as string, v, classes);\n\t\t\t}\n\t\t} else if (typeof value === \"object\") {\n\t\t\t// Use `for-in` instead of `Object.entries(value)`. The entries\n\t\t\t// call allocates a new array (plus a [k, v] pair per entry) on\n\t\t\t// every invocation; `for-in` allocates nothing. Object literals\n\t\t\t// (the dominant case — e.g. `{ danger: bool }` in the row\n\t\t\t// template) have no inherited enumerable properties, so the two\n\t\t\t// are equivalent for our usage. This is on the per-effect re-run\n\t\t\t// hot path: a `select` op re-runs every row effect, each calling\n\t\t\t// `buildClasses({ danger: ... })`.\n\t\t\tfor (const n in value) {\n\t\t\t\tgatherClasses(n, (value as Record<string, unknown>)[n], classes);\n\t\t\t}\n\t\t} else {\n\t\t\tclasses.push(name);\n\t\t}\n\t}\n}\n","import type StyleValue from \"../types/StyleValue\";\n\nconst CAMEL_TO_DASH = /[A-Z]+(?![a-z])|[A-Z]/g;\n\nexport default function buildStyles(value: StyleValue): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t} else {\n\t\tlet styles: string[] = [];\n\t\tgatherStyles(value, styles);\n\t\treturn styles.join(\"; \");\n\t}\n}\n\nfunction gatherStyles(value: unknown, styles: string[]) {\n\tif (value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let v of value) {\n\t\t\t\tgatherStyles(v, styles);\n\t\t\t}\n\t\t} else if (typeof value === \"object\") {\n\t\t\tfor (let [n, v] of Object.entries(value)) {\n\t\t\t\tif (v === null || v === undefined) continue;\n\t\t\t\tconst key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? \"-\" : \"\") + char.toLowerCase());\n\t\t\t\tstyles.push(`${key}: ${v}`);\n\t\t\t}\n\t\t} else {\n\t\t\t// oxlint-disable-next-line typescript/no-base-to-string\n\t\t\tstyles.push(String(value));\n\t\t}\n\t}\n}\n","import $unwrap from \"../watch/$unwrap\";\n\nexport default function formatText(value: any): string {\n\t// We could have anything in value, so we need to\n\t// - use String(...) because Symbols can't be implicitly converted\n\t// - use $unwrap because Proxies can't be converted to a string\n\tif (value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Fast path: strings already satisfy both concerns above. Skipping the\n\t// `String($unwrap(value))` pair saves two function calls per text\n\t// interpolation on the dominant `typeof value === \"string\"` branch —\n\t// e.g. row labels in js-framework-bench hit this on every effect run.\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn String($unwrap(value));\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * The element to listen on, or a getter returning it. Use a getter for\n * `&ref`-bound variables — they are only assigned once the element is\n * created, and subscriptions start at mount time:\n *\n * ```torp\n * let saveButton: HTMLButtonElement;\n *\n * $stream(fromElement(() => saveButton, \"click\"), () => save());\n * ```\n */\ntype EventTargetInput = HTMLElement | (() => HTMLElement | null | undefined);\n\n/**\n * Creates a StreamSource that pushes DOM events of the given type from an\n * element.\n *\n * ```torp\n * $stream(fromElement(() => saveButton, \"click\"), (e) => {\n * \t$state.clicks.push(e);\n * });\n * ```\n */\nexport default function fromElement<E extends Event = Event>(\n\ttarget: EventTargetInput,\n\ttype: string,\n): StreamSource<E> {\n\treturn (push) => {\n\t\tconst el = typeof target === \"function\" ? target() : target;\n\t\tif (!el) {\n\t\t\tthrow new Error(\n\t\t\t\t'fromElement: element not found. When passing a &ref variable, wrap it in a getter: fromElement(() => buttonEl, \"click\")',\n\t\t\t);\n\t\t}\n\t\tconst listener = push as EventListener;\n\t\tel.addEventListener(type, listener);\n\t\treturn () => {\n\t\t\tel.removeEventListener(type, listener);\n\t\t};\n\t};\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * Creates a StreamSource that receives `message` events from a server-sent\n * events endpoint. The URL may be a getter, so reactive state can be read\n * inside it — when it changes, the connection is closed and re-opened:\n *\n * ```torp\n * $stream(fromServer(`/sse/${$props.id}`), (e) => {\n * \t$state.messages.push(e.data);\n * });\n * ```\n *\n * Reconnection is handled by `EventSource` itself; errors are not pushed —\n * a source that can fail should surface errors as values.\n */\nexport default function fromServer(url: string | (() => string)): StreamSource<MessageEvent> {\n\treturn (push) => {\n\t\tconst eventSource = new EventSource(typeof url === \"function\" ? url() : url);\n\t\teventSource.onmessage = push;\n\t\treturn () => {\n\t\t\teventSource.close();\n\t\t};\n\t};\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * Creates a StreamSource that receives `message` events from a WebSocket.\n * The URL may be a getter, so reactive state can be read inside it — when\n * it changes, the socket is closed and re-opened:\n *\n * ```torp\n * $stream(fromWebSocket(`/ws/${$props.id}`), (e) => {\n * \t$state.inbox.push(e.data);\n * });\n * ```\n *\n * Errors are not pushed — a source that can fail should surface errors as\n * values and own its own reconnection.\n */\nexport default function fromWebSocket(url: string | (() => string)): StreamSource<MessageEvent> {\n\treturn (push) => {\n\t\tconst socket = new WebSocket(typeof url === \"function\" ? url() : url);\n\t\tsocket.onmessage = push;\n\t\treturn () => {\n\t\t\tsocket.close();\n\t\t};\n\t};\n}\n"],"mappings":";AAAA,MAAM,kBAAiC,OAAO,IAAI,gBAAgB;;;;;;;;ACOlE,SAAwB,QAA4C,QAAc;CACjF,OAAO,WAAW,KAAA,KAAa,WAAW,QAAQ,OAAO,qBAAqB,KAAA,IAC1E,OAAO,gBAAgB,CAAC,UAAU,SACnC;AACJ;;;ACRA,SAAwB,aAAa,OAAmB,WAA4B;CACnF,IAAI,OAAO,UAAU,UAAU;EAC9B,IAAI,cAAc,KAAA,GACjB,SAAS,MAAM;EAEhB,OAAO;CACR,OAAO;EACN,IAAI,UAAoB,CAAC;EACzB,cAAc,IAAI,OAAO,OAAO;EAChC,IAAI,cAAc,KAAA,GACjB,QAAQ,KAAK,SAAS;EAEvB,OAAO,QAAQ,KAAK,GAAG;CACxB;AACD;AAEA,SAAS,cAAc,MAAc,OAAgB,SAAmB;CACvE,IAAI,OAAO;EAOV,QAAQ,QAAQ,KAAiC;EACjD,IAAI,MAAM,QAAQ,KAAK,GACtB,KAAK,IAAI,KAAK,OACb,cAAc,GAAa,GAAG,OAAO;OAEhC,IAAI,OAAO,UAAU,UAS3B,KAAK,MAAM,KAAK,OACf,cAAc,GAAI,MAAkC,IAAI,OAAO;OAGhE,QAAQ,KAAK,IAAI;CAEnB;AACD;;;AC9CA,MAAM,gBAAgB;AAEtB,SAAwB,YAAY,OAA2B;CAC9D,IAAI,OAAO,UAAU,UACpB,OAAO;MACD;EACN,IAAI,SAAmB,CAAC;EACxB,aAAa,OAAO,MAAM;EAC1B,OAAO,OAAO,KAAK,IAAI;CACxB;AACD;AAEA,SAAS,aAAa,OAAgB,QAAkB;CACvD,IAAI,OACH,IAAI,MAAM,QAAQ,KAAK,GACtB,KAAK,IAAI,KAAK,OACb,aAAa,GAAG,MAAM;MAEjB,IAAI,OAAO,UAAU,UAC3B,KAAK,IAAI,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,GAAG;EACzC,IAAI,MAAM,QAAQ,MAAM,KAAA,GAAW;EACnC,MAAM,MAAM,EAAE,QAAQ,gBAAgB,MAAM,OAAO,IAAI,IAAI,MAAM,MAAM,KAAK,YAAY,CAAC;EACzF,OAAO,KAAK,GAAG,IAAI,IAAI,GAAG;CAC3B;MAGA,OAAO,KAAK,OAAO,KAAK,CAAC;AAG5B;;;AC7BA,SAAwB,WAAW,OAAoB;CAItD,IAAI,UAAU,KAAA,KAAa,UAAU,MACpC,OAAO;CAMR,IAAI,OAAO,UAAU,UACpB,OAAO;CAER,OAAO,OAAO,QAAQ,KAAK,CAAC;AAC7B;;;;;;;;;;;;;ACQA,SAAwB,YACvB,QACA,MACkB;CAClB,QAAQ,SAAS;EAChB,MAAM,KAAK,OAAO,WAAW,aAAa,OAAO,IAAI;EACrD,IAAI,CAAC,IACJ,MAAM,IAAI,MACT,2HACD;EAED,MAAM,WAAW;EACjB,GAAG,iBAAiB,MAAM,QAAQ;EAClC,aAAa;GACZ,GAAG,oBAAoB,MAAM,QAAQ;EACtC;CACD;AACD;;;;;;;;;;;;;;;;;AC1BA,SAAwB,WAAW,KAA0D;CAC5F,QAAQ,SAAS;EAChB,MAAM,cAAc,IAAI,YAAY,OAAO,QAAQ,aAAa,IAAI,IAAI,GAAG;EAC3E,YAAY,YAAY;EACxB,aAAa;GACZ,YAAY,MAAM;EACnB;CACD;AACD;;;;;;;;;;;;;;;;;ACRA,SAAwB,cAAc,KAA0D;CAC/F,QAAQ,SAAS;EAChB,MAAM,SAAS,IAAI,UAAU,OAAO,QAAQ,aAAa,IAAI,IAAI,GAAG;EACpE,OAAO,YAAY;EACnB,aAAa;GACZ,OAAO,MAAM;EACd;CACD;AACD"}
1
+ {"version":3,"file":"fromWebSocket-CFGoMkV2.mjs","names":[],"sources":["../src/watch/symbols.ts","../src/watch/$unwrap.ts","../src/render/buildClasses.ts","../src/render/buildStyles.ts","../src/render/formatText.ts","../src/stream/fromElement.ts","../src/stream/fromServer.ts","../src/stream/fromWebSocket.ts"],"sourcesContent":["const proxyDataSymbol: unique symbol = Symbol.for(\"torp.ProxyData\");\n\nexport { proxyDataSymbol };\n","import { proxyDataSymbol } from \"./symbols\";\n\n/**\n * Returns the target object of a proxy\n *\n * @param object The proxy object\n */\nexport default function $unwrap<T extends Record<PropertyKey, any>>(object: T): T {\n\treturn object !== undefined && object !== null && object[proxyDataSymbol] !== undefined\n\t\t? (object[proxyDataSymbol].target ?? object)\n\t\t: object;\n}\n","import ClassValue from \"../types/ClassValue\";\nimport $unwrap from \"../watch/$unwrap\";\n\nexport default function buildClasses(value: ClassValue, styleHash?: string): string {\n\tif (typeof value === \"string\") {\n\t\tif (styleHash !== undefined) {\n\t\t\tvalue += \" \" + styleHash;\n\t\t}\n\t\treturn value;\n\t} else {\n\t\tlet classes: string[] = [];\n\t\tgatherClasses(\"\", value, classes);\n\t\tif (styleHash !== undefined) {\n\t\t\tclasses.push(styleHash);\n\t\t}\n\t\treturn classes.join(\" \");\n\t}\n}\n\nfunction gatherClasses(name: string, value: unknown, classes: string[]) {\n\tif (value) {\n\t\t// Unwrap watched values before iterating: component props are\n\t\t// deep-wrapped, and iterating a watched array disables the active\n\t\t// effect (see the array iterator in proxyGet), which would break\n\t\t// tracking of reads later in the same effect. Per-element tracking is\n\t\t// unnecessary here anyway -- the caller has already subscribed to the\n\t\t// property read that produced the value\n\t\tvalue = $unwrap(value as Record<PropertyKey, any>);\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let v of value) {\n\t\t\t\tgatherClasses(v as string, v, classes);\n\t\t\t}\n\t\t} else if (typeof value === \"object\") {\n\t\t\t// Use `for-in` instead of `Object.entries(value)`. The entries\n\t\t\t// call allocates a new array (plus a [k, v] pair per entry) on\n\t\t\t// every invocation; `for-in` allocates nothing. Object literals\n\t\t\t// (the dominant case — e.g. `{ danger: bool }` in the row\n\t\t\t// template) have no inherited enumerable properties, so the two\n\t\t\t// are equivalent for our usage. This is on the per-effect re-run\n\t\t\t// hot path: a `select` op re-runs every row effect, each calling\n\t\t\t// `buildClasses({ danger: ... })`.\n\t\t\tfor (const n in value) {\n\t\t\t\tgatherClasses(n, (value as Record<string, unknown>)[n], classes);\n\t\t\t}\n\t\t} else {\n\t\t\tclasses.push(name);\n\t\t}\n\t}\n}\n","import type StyleValue from \"../types/StyleValue\";\n\nconst CAMEL_TO_DASH = /[A-Z]+(?![a-z])|[A-Z]/g;\n\nexport default function buildStyles(value: StyleValue): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t} else {\n\t\tlet styles: string[] = [];\n\t\tgatherStyles(value, styles);\n\t\treturn styles.join(\"; \");\n\t}\n}\n\nfunction gatherStyles(value: unknown, styles: string[]) {\n\tif (value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (let v of value) {\n\t\t\t\tgatherStyles(v, styles);\n\t\t\t}\n\t\t} else if (typeof value === \"object\") {\n\t\t\tfor (let [n, v] of Object.entries(value)) {\n\t\t\t\tif (v === null || v === undefined) continue;\n\t\t\t\tconst key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? \"-\" : \"\") + char.toLowerCase());\n\t\t\t\tstyles.push(`${key}: ${v}`);\n\t\t\t}\n\t\t} else {\n\t\t\t// oxlint-disable-next-line typescript/no-base-to-string\n\t\t\tstyles.push(String(value));\n\t\t}\n\t}\n}\n","import $unwrap from \"../watch/$unwrap\";\n\nexport default function formatText(value: any): string {\n\t// We could have anything in value, so we need to\n\t// - use String(...) because Symbols can't be implicitly converted\n\t// - use $unwrap because Proxies can't be converted to a string\n\tif (value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Fast path: strings already satisfy both concerns above. Skipping the\n\t// `String($unwrap(value))` pair saves two function calls per text\n\t// interpolation on the dominant `typeof value === \"string\"` branch —\n\t// e.g. row labels in js-framework-bench hit this on every effect run.\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\treturn String($unwrap(value));\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * The element to listen on, or a getter returning it. Use a getter for\n * `&ref`-bound variables — they are only assigned once the element is\n * created, and subscriptions start at mount time:\n *\n * ```torp\n * let saveButton: HTMLButtonElement;\n *\n * $stream(fromElement(() => saveButton, \"click\"), () => save());\n * ```\n */\ntype EventTargetInput = HTMLElement | (() => HTMLElement | null | undefined);\n\n/**\n * Creates a StreamSource that pushes DOM events of the given type from an\n * element.\n *\n * ```torp\n * $stream(fromElement(() => saveButton, \"click\"), (e) => {\n * \t$state.clicks.push(e);\n * });\n * ```\n */\nexport default function fromElement<E extends Event = Event>(\n\ttarget: EventTargetInput,\n\ttype: string,\n): StreamSource<E> {\n\treturn (push) => {\n\t\tconst el = typeof target === \"function\" ? target() : target;\n\t\tif (!el) {\n\t\t\tthrow new Error(\n\t\t\t\t'fromElement: element not found. When passing a &ref variable, wrap it in a getter: fromElement(() => buttonEl, \"click\")',\n\t\t\t);\n\t\t}\n\t\tconst listener = push as EventListener;\n\t\tel.addEventListener(type, listener);\n\t\treturn () => {\n\t\t\tel.removeEventListener(type, listener);\n\t\t};\n\t};\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * Creates a StreamSource that receives `message` events from a server-sent\n * events endpoint. The URL may be a getter, so reactive state can be read\n * inside it — when it changes, the connection is closed and re-opened:\n *\n * ```torp\n * $stream(fromServer(`/sse/${$props.id}`), (e) => {\n * \t$state.messages.push(e.data);\n * });\n * ```\n *\n * Reconnection is handled by `EventSource` itself; errors are not pushed —\n * a source that can fail should surface errors as values.\n */\nexport default function fromServer(url: string | (() => string)): StreamSource<MessageEvent> {\n\treturn (push) => {\n\t\tconst eventSource = new EventSource(typeof url === \"function\" ? url() : url);\n\t\teventSource.onmessage = push;\n\t\treturn () => {\n\t\t\teventSource.close();\n\t\t};\n\t};\n}\n","import type StreamSource from \"../types/StreamSource\";\n\n/**\n * Creates a StreamSource that receives `message` events from a WebSocket.\n * The URL may be a getter, so reactive state can be read inside it — when\n * it changes, the socket is closed and re-opened:\n *\n * ```torp\n * $stream(fromWebSocket(`/ws/${$props.id}`), (e) => {\n * \t$state.inbox.push(e.data);\n * });\n * ```\n *\n * Errors are not pushed — a source that can fail should surface errors as\n * values and own its own reconnection.\n */\nexport default function fromWebSocket(url: string | (() => string)): StreamSource<MessageEvent> {\n\treturn (push) => {\n\t\tconst socket = new WebSocket(typeof url === \"function\" ? url() : url);\n\t\tsocket.onmessage = push;\n\t\treturn () => {\n\t\t\tsocket.close();\n\t\t};\n\t};\n}\n"],"mappings":";AAAA,MAAM,kBAAiC,OAAO,IAAI,gBAAgB;;;;;;;;ACOlE,SAAwB,QAA4C,QAAc;CACjF,OAAO,WAAW,KAAA,KAAa,WAAW,QAAQ,OAAO,qBAAqB,KAAA,IAC1E,OAAO,gBAAgB,CAAC,UAAU,SACnC;AACJ;;;ACRA,SAAwB,aAAa,OAAmB,WAA4B;CACnF,IAAI,OAAO,UAAU,UAAU;EAC9B,IAAI,cAAc,KAAA,GACjB,SAAS,MAAM;EAEhB,OAAO;CACR,OAAO;EACN,IAAI,UAAoB,CAAC;EACzB,cAAc,IAAI,OAAO,OAAO;EAChC,IAAI,cAAc,KAAA,GACjB,QAAQ,KAAK,SAAS;EAEvB,OAAO,QAAQ,KAAK,GAAG;CACxB;AACD;AAEA,SAAS,cAAc,MAAc,OAAgB,SAAmB;CACvE,IAAI,OAAO;EAOV,QAAQ,QAAQ,KAAiC;EACjD,IAAI,MAAM,QAAQ,KAAK,GACtB,KAAK,IAAI,KAAK,OACb,cAAc,GAAa,GAAG,OAAO;OAEhC,IAAI,OAAO,UAAU,UAS3B,KAAK,MAAM,KAAK,OACf,cAAc,GAAI,MAAkC,IAAI,OAAO;OAGhE,QAAQ,KAAK,IAAI;CAEnB;AACD;;;AC9CA,MAAM,gBAAgB;AAEtB,SAAwB,YAAY,OAA2B;CAC9D,IAAI,OAAO,UAAU,UACpB,OAAO;MACD;EACN,IAAI,SAAmB,CAAC;EACxB,aAAa,OAAO,MAAM;EAC1B,OAAO,OAAO,KAAK,IAAI;CACxB;AACD;AAEA,SAAS,aAAa,OAAgB,QAAkB;CACvD,IAAI,OAAO;EACV,IAAI,MAAM,QAAQ,KAAK,GACtB,KAAK,IAAI,KAAK,OACb,aAAa,GAAG,MAAM;OAEjB,IAAI,OAAO,UAAU,UAC3B,KAAK,IAAI,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,GAAG;GACzC,IAAI,MAAM,QAAQ,MAAM,KAAA,GAAW;GACnC,MAAM,MAAM,EAAE,QAAQ,gBAAgB,MAAM,OAAO,IAAI,IAAI,MAAM,MAAM,KAAK,YAAY,CAAC;GACzF,OAAO,KAAK,GAAG,IAAI,IAAI,GAAG;EAC3B;OAGA,OAAO,KAAK,OAAO,KAAK,CAAC;CAE3B;AACD;;;AC7BA,SAAwB,WAAW,OAAoB;CAItD,IAAI,UAAU,KAAA,KAAa,UAAU,MACpC,OAAO;CAMR,IAAI,OAAO,UAAU,UACpB,OAAO;CAER,OAAO,OAAO,QAAQ,KAAK,CAAC;AAC7B;;;;;;;;;;;;;ACQA,SAAwB,YACvB,QACA,MACkB;CAClB,QAAQ,SAAS;EAChB,MAAM,KAAK,OAAO,WAAW,aAAa,OAAO,IAAI;EACrD,IAAI,CAAC,IACJ,MAAM,IAAI,MACT,2HACD;EAED,MAAM,WAAW;EACjB,GAAG,iBAAiB,MAAM,QAAQ;EAClC,aAAa;GACZ,GAAG,oBAAoB,MAAM,QAAQ;EACtC;CACD;AACD;;;;;;;;;;;;;;;;;AC1BA,SAAwB,WAAW,KAA0D;CAC5F,QAAQ,SAAS;EAChB,MAAM,cAAc,IAAI,YAAY,OAAO,QAAQ,aAAa,IAAI,IAAI,GAAG;EAC3E,YAAY,YAAY;EACxB,aAAa;GACZ,YAAY,MAAM;EACnB;CACD;AACD;;;;;;;;;;;;;;;;;ACRA,SAAwB,cAAc,KAA0D;CAC/F,QAAQ,SAAS;EAChB,MAAM,SAAS,IAAI,UAAU,OAAO,QAAQ,aAAa,IAAI,IAAI,GAAG;EACpE,OAAO,YAAY;EACnB,aAAa;GACZ,OAAO,MAAM;EACd;CACD;AACD"}
@@ -43,13 +43,15 @@ function buildStyles(value) {
43
43
  }
44
44
  }
45
45
  function gatherStyles(value, styles) {
46
- if (value) if (Array.isArray(value)) for (let v of value) gatherStyles(v, styles);
47
- else if (typeof value === "object") for (let [n, v] of Object.entries(value)) {
48
- if (v === null || v === void 0) continue;
49
- const key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? "-" : "") + char.toLowerCase());
50
- styles.push(`${key}: ${v}`);
46
+ if (value) {
47
+ if (Array.isArray(value)) for (let v of value) gatherStyles(v, styles);
48
+ else if (typeof value === "object") for (let [n, v] of Object.entries(value)) {
49
+ if (v === null || v === void 0) continue;
50
+ const key = n.replace(CAMEL_TO_DASH, (char, i) => (i > 0 ? "-" : "") + char.toLowerCase());
51
+ styles.push(`${key}: ${v}`);
52
+ }
53
+ else styles.push(String(value));
51
54
  }
52
- else styles.push(String(value));
53
55
  }
54
56
  //#endregion
55
57
  //#region src/render/formatText.ts
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_devContext = require("./devContext-BulTn3U5.cjs");
3
- const require_fromWebSocket = require("./fromWebSocket-1QOjcrHE.cjs");
3
+ const require_fromWebSocket = require("./fromWebSocket-DrN-IduP.cjs");
4
4
  //#region src/render/context.ts
5
5
  const CONTEXT_SYMBOL = Symbol.for("torp.Context");
6
6
  const context = globalThis[CONTEXT_SYMBOL] ??= {
@@ -151,9 +151,11 @@ function checkComputed(computed) {
151
151
  */
152
152
  function checkSources(target) {
153
153
  let haveComputed = false;
154
- for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc) if (sourceSub.source.type === 0) return true;
155
- else if (sourceSub.source.recalc) haveComputed = true;
156
- else return true;
154
+ for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc) {
155
+ if (sourceSub.source.type === 0) return true;
156
+ else if (sourceSub.source.recalc) haveComputed = true;
157
+ else return true;
158
+ }
157
159
  if (haveComputed) {
158
160
  for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc && sourceSub.source.type === 1 && sourceSub.source.recalc) {
159
161
  const oldActiveTarget = context.activeTarget;
@@ -729,13 +731,15 @@ function addFragment(fragment, parent, before, endNode, startNode) {
729
731
  //#region src/render/applyProps.ts
730
732
  function applyProps(el, props, propNamesUsed) {
731
733
  if (props !== void 0) {
732
- for (let [name, value] of Object.entries(props)) if (!propNamesUsed.includes(name)) if (name.startsWith("on")) {
733
- const eventName = name.substring(2);
734
- if (isDelegatedEventType(eventName)) attachDelegatedEvent(el, eventName, value);
735
- else el.addEventListener(eventName, value);
736
- } else $run(function setAttribute() {
737
- el.setAttribute(name, value);
738
- });
734
+ for (let [name, value] of Object.entries(props)) if (!propNamesUsed.includes(name)) {
735
+ if (name.startsWith("on")) {
736
+ const eventName = name.substring(2);
737
+ if (isDelegatedEventType(eventName)) attachDelegatedEvent(el, eventName, value);
738
+ else el.addEventListener(eventName, value);
739
+ } else $run(function setAttribute() {
740
+ el.setAttribute(name, value);
741
+ });
742
+ }
739
743
  }
740
744
  }
741
745
  //#endregion
@@ -931,16 +935,18 @@ function firstInsideNode(anchor) {
931
935
  //#endregion
932
936
  //#region src/render/getFragment.ts
933
937
  function getFragment(document, array, index, html, ns) {
934
- if (array[index] === void 0) if (ns === true) {
935
- const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
936
- template.innerHTML = html;
937
- const fragment = new DocumentFragment();
938
- fragment.append(...template.childNodes);
939
- array[index] = fragment;
940
- } else {
941
- const template = document.createElement("template");
942
- template.innerHTML = html;
943
- array[index] = template.content;
938
+ if (array[index] === void 0) {
939
+ if (ns === true) {
940
+ const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
941
+ template.innerHTML = html;
942
+ const fragment = new DocumentFragment();
943
+ fragment.append(...template.childNodes);
944
+ array[index] = fragment;
945
+ } else {
946
+ const template = document.createElement("template");
947
+ template.innerHTML = html;
948
+ array[index] = template.content;
949
+ }
944
950
  }
945
951
  return array[index].cloneNode(true);
946
952
  }
@@ -971,14 +977,16 @@ function getFragment(document, array, index, html, ns) {
971
977
  * `firstElementChild` is then an SVG element).
972
978
  */
973
979
  function getElementFragment(document, array, index, html, ns) {
974
- if (array[index] === void 0) if (ns === true) {
975
- const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
976
- template.innerHTML = html;
977
- array[index] = template.firstElementChild;
978
- } else {
979
- const template = document.createElement("template");
980
- template.innerHTML = html;
981
- array[index] = template.content.firstElementChild;
980
+ if (array[index] === void 0) {
981
+ if (ns === true) {
982
+ const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
983
+ template.innerHTML = html;
984
+ array[index] = template.firstElementChild;
985
+ } else {
986
+ const template = document.createElement("template");
987
+ template.innerHTML = html;
988
+ array[index] = template.content.firstElementChild;
989
+ }
982
990
  }
983
991
  return array[index].cloneNode(true);
984
992
  }
@@ -2321,10 +2329,12 @@ function runAwait(region, anchor, renderContent, renderWith, name) {
2321
2329
  const targetIndex = suspended ? 1 : 0;
2322
2330
  if (targetIndex !== index) {
2323
2331
  if (targetIndex === 0) attemptContent();
2324
- else if (!hasContent) if (renderWith !== null) renderBranch(1, renderWith);
2325
- else {
2326
- runControlBranch(region, index, 1);
2327
- index = 1;
2332
+ else if (!hasContent) {
2333
+ if (renderWith !== null) renderBranch(1, renderWith);
2334
+ else {
2335
+ runControlBranch(region, index, 1);
2336
+ index = 1;
2337
+ }
2328
2338
  }
2329
2339
  }
2330
2340
  }
@@ -2446,6 +2456,23 @@ function runTry(region, anchor, renderTry, renderCatch, name) {
2446
2456
  }, name);
2447
2457
  }
2448
2458
  //#endregion
2459
+ //#region src/render/headElement.ts
2460
+ /**
2461
+ * Gets an element from the document head matching the selector, creating and
2462
+ * appending a new one if there isn't a match. Used by the code generated for
2463
+ * a @head block, so that elements which were server rendered (or rendered by
2464
+ * a previously visited page) are adopted rather than duplicated.
2465
+ */
2466
+ function headElement(tagName, selector) {
2467
+ if (selector) {
2468
+ const existing = document.head.querySelector(selector);
2469
+ if (existing) return existing;
2470
+ }
2471
+ const element = document.createElement(tagName);
2472
+ document.head.appendChild(element);
2473
+ return element;
2474
+ }
2475
+ //#endregion
2449
2476
  //#region src/render/setAttribute.ts
2450
2477
  function setAttribute(el, name, value) {
2451
2478
  if (value === false || value === void 0 || value === null) el.removeAttribute(name);
@@ -2875,6 +2902,7 @@ exports.t_first_inside = firstInsideNode;
2875
2902
  exports.t_fmt = require_fromWebSocket.formatText;
2876
2903
  exports.t_fragment = getFragment;
2877
2904
  exports.t_fragment_el = getElementFragment;
2905
+ exports.t_head_element = headElement;
2878
2906
  exports.t_list_item = newListItem;
2879
2907
  exports.t_next = nodeNext;
2880
2908
  exports.t_pop_region = popRegion;
package/dist/index.d.cts CHANGED
@@ -424,6 +424,15 @@ declare function runTry(region: Region, anchor: Node | null, renderTry: (anchor:
424
424
  */
425
425
  declare function saveHydration(): ChildNode | null;
426
426
  //#endregion
427
+ //#region src/render/headElement.d.ts
428
+ /**
429
+ * Gets an element from the document head matching the selector, creating and
430
+ * appending a new one if there isn't a match. Used by the code generated for
431
+ * a @head block, so that elements which were server rendered (or rendered by
432
+ * a previously visited page) are adopted rather than duplicated.
433
+ */
434
+ declare function headElement(tagName: string, selector: string): Element;
435
+ //#endregion
427
436
  //#region src/render/setAttribute.d.ts
428
437
  declare function setAttribute(el: Element, name: string, value: any): void;
429
438
  //#endregion
@@ -718,5 +727,5 @@ interface WatchOptions {
718
727
  */
719
728
  declare function $watch<T extends object>(object: T, options?: WatchOptions): T;
720
729
  //#endregion
721
- export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, type Animation, type Bindable, type ClassValue, type Component, type ListItem, type ListItemSpec, type SlotRender, type StreamSource, type StyleValue, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
730
+ export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, type Animation, type Bindable, type ClassValue, type Component, type ListItem, type ListItemSpec, type SlotRender, type StreamSource, type StyleValue, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, headElement as t_head_element, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
722
731
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/Animation.ts","../src/render/addAnimation.ts","../src/render/addEvent.ts","../src/render/addElement.ts","../src/render/addFragment.ts","../src/render/applyProps.ts","../src/render/clearLayoutSlot.ts","../src/render/fillLayoutSlot.ts","../src/render/formatText.ts","../src/render/firstInsideNode.ts","../src/render/getFragment.ts","../src/render/getElementFragment.ts","../src/render/hydrate.ts","../src/render/mount.ts","../src/render/unmount.ts","../src/types/ListItemSpec.ts","../src/types/ListItem.ts","../src/render/newListItem.ts","../src/render/newRegion.ts","../src/render/nodeAnchor.ts","../src/render/nodeChild.ts","../src/render/nodeNext.ts","../src/render/nodeRootElement.ts","../src/render/nodeRoot.ts","../src/render/nodeSkip.ts","../src/render/popRegion.ts","../src/render/pushRegion.ts","../src/render/rerunRegionEffects.ts","../src/render/restoreHydration.ts","../src/render/runControl.ts","../src/render/runControlBranch.ts","../src/render/runList.ts","../src/render/runAwait.ts","../src/render/runTry.ts","../src/render/saveHydration.ts","../src/render/setAttribute.ts","../src/render/setDynamicElement.ts","../src/types/Bindable.ts","../src/watch/$batch.ts","../src/watch/$async.ts","../src/watch/$bind.ts","../src/watch/$cache.ts","../src/watch/$onmount.ts","../src/watch/$peek.ts","../src/watch/$pending.ts","../src/watch/$refresh.ts","../src/watch/$run.ts","../src/watch/$stream.ts","../src/watch/$unwrap.ts","../src/types/WatchOptions.ts","../src/watch/$watch.ts"],"mappings":";;;;;UAAyB;EACxB,WAAW,aAAa;EACxB,mBAAmB;;;;iBCCI,aAAa,IAAI,aAAa,QAAQ,WAAW,OAAO;;;iBCDxD,SACvB,IAAI,SACJ,cACA,YAAA,MAAkB,SAAS;;;;;;;;;;;;;;;;;;;;;;iBCiBJ,WAAW,MAAM,SAAS,QAAQ,YAAY,QAAQ;;;iBCnBtD,YACvB,UAAU,kBACV,QAAQ,YACR,QAAQ,aACR,UAAU,WACV,YAAY;;;iBCLW,WACvB,IAAI,SACJ,OAAO,iCACP;;;;;;;;;;iBCKuB,gBAAgB,QAAQ;;;;;;;;;;;;;;;;;;iBCYxB,eACvB,WAAW,WACX,MAAM,YACN,QAAQ,YACR,QAAQ,aACR,SAAS,OAAO,mBAChB,WAAW,OAAO,oBAChB;;;iBC5BqB,WAAW;;;;;;;;iBCiBX,gBAAgB,QAAQ,YAAY;;;iBCnBpC,YACvB,UAAU,UACV,OAAO,oBACP,eACA,cACA,eACE;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCkBqB,mBACvB,UAAU,UACV,OAAO,WACP,eACA,cACA,eACE;;;;;;;;;iBChBqB,QACvB,QAAQ,YACR,WAAW,WACX,QAAQ,qBACR,QAAQ,eAAe;;;;;;;;;;iBCJA,MACvB,QAAQ,YACR,WAAW,WACX,QAAQ,qBACR,QAAQ,eAAe;;;;;;;;;;;;;;;iBCFA,QAAQ,QAAQ;;;;;;;;;;;;;;;;;;;UCAf;EACxB;EACA;;;;UCfwB,iBAAiB,QAAQ;;;iBCD1B,YACvB,MAAM,OAAO,mBACb,WACA,gBACE;;;iBCJqB,UAAU,gBAAgB;;;;;;;;;;;;;;;;;iBCkB1B,WAAW,MAAM,YAAY;;;;;;;;;;iBCX7B,UAAU,QAAQ,OAAO;;;;;;;;;;;iBCGzB,SAAS,MAAM,WAAW,iBAAe;;;;;;;;;;;;;;;;;iBCKzC,gBAAgB,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;iBCShC,SAAS,QAAQ,MAAM,iBAAe;;;;;;;;;;;iBCftC,SAAS,MAAM,WAAW,gBAAgB;;;iBCP1C,UAAU,WAAW;;;iBCArB,WAAW,QAAQ,QAAQ,qBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;iBCyB9C,mBAAmB,QAAQ,QAAQ;;;;;;;;;;;;;;;;;iBCbnC,iBAAiB,MAAM;;;;;;;iBCLvB,WACvB,QAAQ,QACR,QAAQ,aACR,SAAS,QAAQ,sBACjB;;;iBCZuB,iBAAiB,QAAQ,QAAQ,kBAAkB;;;;;;;;;;;;;;;iBCkBnD,QACvB,QAAQ,QACR,QAAQ,YACR,QAAQ,aACR,kBAAkB,gBAClB,SAAS,MAAM,UAAU,QAAQ,sBACjC,SAAS,SAAS,UAAU,SAAS,uBACrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCUuB,SACvB,QAAQ,QACR,QAAQ,aACR,gBAAgB,QAAQ,sBACxB,cAAc,QAAQ,8BACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCeuB,OACvB,QAAQ,QACR,QAAQ,aACR,YAAY,QAAQ,sBACpB,eAAe,QAAQ,aAAa,6BACpC;;;;;;;;;iBCvDuB,iBAAiB;;;iBCRjB,aAAa,IAAI,SAAS,cAAc;;;iBCKxC,kBAAkB,IAAI,aAAa,cAAc;;;;;;;;;;;;;;;;;;;KCWpE,SAAS,KAAK;;;;;;;;;iBCNK,OAAO,GAAG,UAAU,IAAI;;;;;;;;;;;;;;;;iBCWxB,OAAO,GAAG,UAAU,QAAQ,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCcjC,MACvB,OAAO,OAAO,mBACd,OAAO,OAAO,kCACX;;;;;;;;iBC5BoB,OAAO,GAAG,UAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;iBCcxB,SAAS,UAAU;;;;;;;;;;;iBCdnB,MAAM,GAAG,UAAU,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;iBCcvB,SAAS;;;;;;UCZhB;;;;;;;;EAQhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4CuB,SAAS,eAAe,UAAU;;;;;;;;;;iBChDlC,KACvB,UAAU,gBACV,eACA,UAAU,KAAK,0CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCqBqB,QAAQ,GAC/B,QAAQ,aAAa,IACrB,UAAU,OAAO,YACjB;EAAY;;;;;;;;;iBCrCW,QAAQ,UAAU,OAAO,mBAAmB,QAAQ,IAAI;;;;;;UCJvD;;;;EAIxB;;;;;;;;;;;;;iBCoBuB,OAAO,kBAAkB,QAAQ,GAAG,UAAU,eAAe"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/Animation.ts","../src/render/addAnimation.ts","../src/render/addEvent.ts","../src/render/addElement.ts","../src/render/addFragment.ts","../src/render/applyProps.ts","../src/render/clearLayoutSlot.ts","../src/render/fillLayoutSlot.ts","../src/render/formatText.ts","../src/render/firstInsideNode.ts","../src/render/getFragment.ts","../src/render/getElementFragment.ts","../src/render/hydrate.ts","../src/render/mount.ts","../src/render/unmount.ts","../src/types/ListItemSpec.ts","../src/types/ListItem.ts","../src/render/newListItem.ts","../src/render/newRegion.ts","../src/render/nodeAnchor.ts","../src/render/nodeChild.ts","../src/render/nodeNext.ts","../src/render/nodeRootElement.ts","../src/render/nodeRoot.ts","../src/render/nodeSkip.ts","../src/render/popRegion.ts","../src/render/pushRegion.ts","../src/render/rerunRegionEffects.ts","../src/render/restoreHydration.ts","../src/render/runControl.ts","../src/render/runControlBranch.ts","../src/render/runList.ts","../src/render/runAwait.ts","../src/render/runTry.ts","../src/render/saveHydration.ts","../src/render/headElement.ts","../src/render/setAttribute.ts","../src/render/setDynamicElement.ts","../src/types/Bindable.ts","../src/watch/$batch.ts","../src/watch/$async.ts","../src/watch/$bind.ts","../src/watch/$cache.ts","../src/watch/$onmount.ts","../src/watch/$peek.ts","../src/watch/$pending.ts","../src/watch/$refresh.ts","../src/watch/$run.ts","../src/watch/$stream.ts","../src/watch/$unwrap.ts","../src/types/WatchOptions.ts","../src/watch/$watch.ts"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -424,6 +424,15 @@ declare function runTry(region: Region, anchor: Node | null, renderTry: (anchor:
424
424
  */
425
425
  declare function saveHydration(): ChildNode | null;
426
426
  //#endregion
427
+ //#region src/render/headElement.d.ts
428
+ /**
429
+ * Gets an element from the document head matching the selector, creating and
430
+ * appending a new one if there isn't a match. Used by the code generated for
431
+ * a @head block, so that elements which were server rendered (or rendered by
432
+ * a previously visited page) are adopted rather than duplicated.
433
+ */
434
+ declare function headElement(tagName: string, selector: string): Element;
435
+ //#endregion
427
436
  //#region src/render/setAttribute.d.ts
428
437
  declare function setAttribute(el: Element, name: string, value: any): void;
429
438
  //#endregion
@@ -718,5 +727,5 @@ interface WatchOptions {
718
727
  */
719
728
  declare function $watch<T extends object>(object: T, options?: WatchOptions): T;
720
729
  //#endregion
721
- export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, type Animation, type Bindable, type ClassValue, type Component, type ListItem, type ListItemSpec, type SlotRender, type StreamSource, type StyleValue, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
730
+ export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, type Animation, type Bindable, type ClassValue, type Component, type ListItem, type ListItemSpec, type SlotRender, type StreamSource, type StyleValue, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, headElement as t_head_element, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
722
731
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/Animation.ts","../src/render/addAnimation.ts","../src/render/addEvent.ts","../src/render/addElement.ts","../src/render/addFragment.ts","../src/render/applyProps.ts","../src/render/clearLayoutSlot.ts","../src/render/fillLayoutSlot.ts","../src/render/formatText.ts","../src/render/firstInsideNode.ts","../src/render/getFragment.ts","../src/render/getElementFragment.ts","../src/render/hydrate.ts","../src/render/mount.ts","../src/render/unmount.ts","../src/types/ListItemSpec.ts","../src/types/ListItem.ts","../src/render/newListItem.ts","../src/render/newRegion.ts","../src/render/nodeAnchor.ts","../src/render/nodeChild.ts","../src/render/nodeNext.ts","../src/render/nodeRootElement.ts","../src/render/nodeRoot.ts","../src/render/nodeSkip.ts","../src/render/popRegion.ts","../src/render/pushRegion.ts","../src/render/rerunRegionEffects.ts","../src/render/restoreHydration.ts","../src/render/runControl.ts","../src/render/runControlBranch.ts","../src/render/runList.ts","../src/render/runAwait.ts","../src/render/runTry.ts","../src/render/saveHydration.ts","../src/render/setAttribute.ts","../src/render/setDynamicElement.ts","../src/types/Bindable.ts","../src/watch/$batch.ts","../src/watch/$async.ts","../src/watch/$bind.ts","../src/watch/$cache.ts","../src/watch/$onmount.ts","../src/watch/$peek.ts","../src/watch/$pending.ts","../src/watch/$refresh.ts","../src/watch/$run.ts","../src/watch/$stream.ts","../src/watch/$unwrap.ts","../src/types/WatchOptions.ts","../src/watch/$watch.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/Animation.ts","../src/render/addAnimation.ts","../src/render/addEvent.ts","../src/render/addElement.ts","../src/render/addFragment.ts","../src/render/applyProps.ts","../src/render/clearLayoutSlot.ts","../src/render/fillLayoutSlot.ts","../src/render/formatText.ts","../src/render/firstInsideNode.ts","../src/render/getFragment.ts","../src/render/getElementFragment.ts","../src/render/hydrate.ts","../src/render/mount.ts","../src/render/unmount.ts","../src/types/ListItemSpec.ts","../src/types/ListItem.ts","../src/render/newListItem.ts","../src/render/newRegion.ts","../src/render/nodeAnchor.ts","../src/render/nodeChild.ts","../src/render/nodeNext.ts","../src/render/nodeRootElement.ts","../src/render/nodeRoot.ts","../src/render/nodeSkip.ts","../src/render/popRegion.ts","../src/render/pushRegion.ts","../src/render/rerunRegionEffects.ts","../src/render/restoreHydration.ts","../src/render/runControl.ts","../src/render/runControlBranch.ts","../src/render/runList.ts","../src/render/runAwait.ts","../src/render/runTry.ts","../src/render/saveHydration.ts","../src/render/headElement.ts","../src/render/setAttribute.ts","../src/render/setDynamicElement.ts","../src/types/Bindable.ts","../src/watch/$batch.ts","../src/watch/$async.ts","../src/watch/$bind.ts","../src/watch/$cache.ts","../src/watch/$onmount.ts","../src/watch/$peek.ts","../src/watch/$pending.ts","../src/watch/$refresh.ts","../src/watch/$run.ts","../src/watch/$stream.ts","../src/watch/$unwrap.ts","../src/types/WatchOptions.ts","../src/watch/$watch.ts"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as devContext } from "./devContext-ZNsPyOgB.mjs";
2
- import { a as buildStyles, c as proxyDataSymbol, i as formatText, n as fromServer, o as buildClasses, r as fromElement, s as $unwrap, t as fromWebSocket } from "./fromWebSocket-Dxc_uwm1.mjs";
2
+ import { a as buildStyles, c as proxyDataSymbol, i as formatText, n as fromServer, o as buildClasses, r as fromElement, s as $unwrap, t as fromWebSocket } from "./fromWebSocket-CFGoMkV2.mjs";
3
3
  //#region src/render/context.ts
4
4
  const CONTEXT_SYMBOL = Symbol.for("torp.Context");
5
5
  const context = globalThis[CONTEXT_SYMBOL] ??= {
@@ -150,9 +150,11 @@ function checkComputed(computed) {
150
150
  */
151
151
  function checkSources(target) {
152
152
  let haveComputed = false;
153
- for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc) if (sourceSub.source.type === 0) return true;
154
- else if (sourceSub.source.recalc) haveComputed = true;
155
- else return true;
153
+ for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc) {
154
+ if (sourceSub.source.type === 0) return true;
155
+ else if (sourceSub.source.recalc) haveComputed = true;
156
+ else return true;
157
+ }
156
158
  if (haveComputed) {
157
159
  for (let sourceSub = target.firstSource; sourceSub !== null; sourceSub = sourceSub.nextSource) if (sourceSub.recalc && sourceSub.source.type === 1 && sourceSub.source.recalc) {
158
160
  const oldActiveTarget = context.activeTarget;
@@ -728,13 +730,15 @@ function addFragment(fragment, parent, before, endNode, startNode) {
728
730
  //#region src/render/applyProps.ts
729
731
  function applyProps(el, props, propNamesUsed) {
730
732
  if (props !== void 0) {
731
- for (let [name, value] of Object.entries(props)) if (!propNamesUsed.includes(name)) if (name.startsWith("on")) {
732
- const eventName = name.substring(2);
733
- if (isDelegatedEventType(eventName)) attachDelegatedEvent(el, eventName, value);
734
- else el.addEventListener(eventName, value);
735
- } else $run(function setAttribute() {
736
- el.setAttribute(name, value);
737
- });
733
+ for (let [name, value] of Object.entries(props)) if (!propNamesUsed.includes(name)) {
734
+ if (name.startsWith("on")) {
735
+ const eventName = name.substring(2);
736
+ if (isDelegatedEventType(eventName)) attachDelegatedEvent(el, eventName, value);
737
+ else el.addEventListener(eventName, value);
738
+ } else $run(function setAttribute() {
739
+ el.setAttribute(name, value);
740
+ });
741
+ }
738
742
  }
739
743
  }
740
744
  //#endregion
@@ -930,16 +934,18 @@ function firstInsideNode(anchor) {
930
934
  //#endregion
931
935
  //#region src/render/getFragment.ts
932
936
  function getFragment(document, array, index, html, ns) {
933
- if (array[index] === void 0) if (ns === true) {
934
- const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
935
- template.innerHTML = html;
936
- const fragment = new DocumentFragment();
937
- fragment.append(...template.childNodes);
938
- array[index] = fragment;
939
- } else {
940
- const template = document.createElement("template");
941
- template.innerHTML = html;
942
- array[index] = template.content;
937
+ if (array[index] === void 0) {
938
+ if (ns === true) {
939
+ const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
940
+ template.innerHTML = html;
941
+ const fragment = new DocumentFragment();
942
+ fragment.append(...template.childNodes);
943
+ array[index] = fragment;
944
+ } else {
945
+ const template = document.createElement("template");
946
+ template.innerHTML = html;
947
+ array[index] = template.content;
948
+ }
943
949
  }
944
950
  return array[index].cloneNode(true);
945
951
  }
@@ -970,14 +976,16 @@ function getFragment(document, array, index, html, ns) {
970
976
  * `firstElementChild` is then an SVG element).
971
977
  */
972
978
  function getElementFragment(document, array, index, html, ns) {
973
- if (array[index] === void 0) if (ns === true) {
974
- const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
975
- template.innerHTML = html;
976
- array[index] = template.firstElementChild;
977
- } else {
978
- const template = document.createElement("template");
979
- template.innerHTML = html;
980
- array[index] = template.content.firstElementChild;
979
+ if (array[index] === void 0) {
980
+ if (ns === true) {
981
+ const template = document.createElementNS("http://www.w3.org/2000/svg", "template");
982
+ template.innerHTML = html;
983
+ array[index] = template.firstElementChild;
984
+ } else {
985
+ const template = document.createElement("template");
986
+ template.innerHTML = html;
987
+ array[index] = template.content.firstElementChild;
988
+ }
981
989
  }
982
990
  return array[index].cloneNode(true);
983
991
  }
@@ -2320,10 +2328,12 @@ function runAwait(region, anchor, renderContent, renderWith, name) {
2320
2328
  const targetIndex = suspended ? 1 : 0;
2321
2329
  if (targetIndex !== index) {
2322
2330
  if (targetIndex === 0) attemptContent();
2323
- else if (!hasContent) if (renderWith !== null) renderBranch(1, renderWith);
2324
- else {
2325
- runControlBranch(region, index, 1);
2326
- index = 1;
2331
+ else if (!hasContent) {
2332
+ if (renderWith !== null) renderBranch(1, renderWith);
2333
+ else {
2334
+ runControlBranch(region, index, 1);
2335
+ index = 1;
2336
+ }
2327
2337
  }
2328
2338
  }
2329
2339
  }
@@ -2445,6 +2455,23 @@ function runTry(region, anchor, renderTry, renderCatch, name) {
2445
2455
  }, name);
2446
2456
  }
2447
2457
  //#endregion
2458
+ //#region src/render/headElement.ts
2459
+ /**
2460
+ * Gets an element from the document head matching the selector, creating and
2461
+ * appending a new one if there isn't a match. Used by the code generated for
2462
+ * a @head block, so that elements which were server rendered (or rendered by
2463
+ * a previously visited page) are adopted rather than duplicated.
2464
+ */
2465
+ function headElement(tagName, selector) {
2466
+ if (selector) {
2467
+ const existing = document.head.querySelector(selector);
2468
+ if (existing) return existing;
2469
+ }
2470
+ const element = document.createElement(tagName);
2471
+ document.head.appendChild(element);
2472
+ return element;
2473
+ }
2474
+ //#endregion
2448
2475
  //#region src/render/setAttribute.ts
2449
2476
  function setAttribute(el, name, value) {
2450
2477
  if (value === false || value === void 0 || value === null) el.removeAttribute(name);
@@ -2841,6 +2868,6 @@ function $stream(source, handler, options) {
2841
2868
  });
2842
2869
  }
2843
2870
  //#endregion
2844
- export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
2871
+ export { $async, $batch, $bind, $cache, $onmount, $peek, $pending, $refresh, $run, $stream, $unwrap, $watch, clearLayoutSlot, fillLayoutSlot, fromElement, fromServer, fromWebSocket, hydrate, mount, addElement as t_add_element, addFragment as t_add_fragment, nodeAnchor as t_anchor, addAnimation as t_animate, applyProps as t_apply_props, setAttribute as t_attribute, nodeChild as t_child, buildClasses as t_class, setDynamicElement as t_dynamic, addEvent as t_event, firstInsideNode as t_first_inside, formatText as t_fmt, getFragment as t_fragment, getElementFragment as t_fragment_el, headElement as t_head_element, newListItem as t_list_item, nodeNext as t_next, popRegion as t_pop_region, pushRegion as t_push_region, newRegion as t_region, rerunRegionEffects as t_rerun_region_effects, restoreHydration as t_restore_hydration, nodeRoot as t_root, nodeRootElement as t_root_el, runAwait as t_run_await, runControlBranch as t_run_branch, runControl as t_run_control, runList as t_run_list, runTry as t_run_try, saveHydration as t_save_hydration, nodeSkip as t_skip, buildStyles as t_style, unmount };
2845
2872
 
2846
2873
  //# sourceMappingURL=index.mjs.map