@llui/dom 0.0.20 → 0.0.22
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 +16 -14
- package/dist/addressed.d.ts +1 -1
- package/dist/addressed.d.ts.map +1 -1
- package/dist/addressed.js.map +1 -1
- package/dist/binding.d.ts +2 -2
- package/dist/binding.d.ts.map +1 -1
- package/dist/binding.js +2 -2
- package/dist/binding.js.map +1 -1
- package/dist/devtools.d.ts +3 -3
- package/dist/devtools.d.ts.map +1 -1
- package/dist/devtools.js +14 -12
- package/dist/devtools.js.map +1 -1
- package/dist/el-split.js +3 -3
- package/dist/el-split.js.map +1 -1
- package/dist/el-template.js +3 -3
- package/dist/el-template.js.map +1 -1
- package/dist/elements.js +1 -1
- package/dist/elements.js.map +1 -1
- package/dist/hmr.d.ts +1 -1
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +6 -6
- package/dist/hmr.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/lifetime.d.ts +39 -0
- package/dist/lifetime.d.ts.map +1 -0
- package/dist/lifetime.js +250 -0
- package/dist/lifetime.js.map +1 -0
- package/dist/mathml-elements.js +1 -1
- package/dist/mathml-elements.js.map +1 -1
- package/dist/mount.d.ts +11 -9
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +15 -31
- package/dist/mount.js.map +1 -1
- package/dist/primitives/branch.d.ts +1 -1
- package/dist/primitives/branch.d.ts.map +1 -1
- package/dist/primitives/branch.js +30 -20
- package/dist/primitives/branch.js.map +1 -1
- package/dist/primitives/child.js +12 -12
- package/dist/primitives/child.js.map +1 -1
- package/dist/primitives/context.js +6 -6
- package/dist/primitives/context.js.map +1 -1
- package/dist/primitives/each.d.ts.map +1 -1
- package/dist/primitives/each.js +37 -32
- package/dist/primitives/each.js.map +1 -1
- package/dist/primitives/error-boundary.js +7 -7
- package/dist/primitives/error-boundary.js.map +1 -1
- package/dist/primitives/foreign.js +3 -3
- package/dist/primitives/foreign.js.map +1 -1
- package/dist/primitives/lazy.js +11 -11
- package/dist/primitives/lazy.js.map +1 -1
- package/dist/primitives/on-mount.js +2 -2
- package/dist/primitives/on-mount.js.map +1 -1
- package/dist/primitives/portal.js +4 -4
- package/dist/primitives/portal.js.map +1 -1
- package/dist/primitives/sample.d.ts +18 -0
- package/dist/primitives/sample.d.ts.map +1 -0
- package/dist/primitives/sample.js +22 -0
- package/dist/primitives/sample.js.map +1 -0
- package/dist/primitives/scope.d.ts +25 -0
- package/dist/primitives/scope.d.ts.map +1 -0
- package/dist/primitives/scope.js +36 -0
- package/dist/primitives/scope.js.map +1 -0
- package/dist/primitives/selector.js +4 -4
- package/dist/primitives/selector.js.map +1 -1
- package/dist/primitives/show.d.ts.map +1 -1
- package/dist/primitives/show.js +4 -1
- package/dist/primitives/show.js.map +1 -1
- package/dist/primitives/slice.d.ts.map +1 -1
- package/dist/primitives/slice.js +18 -2
- package/dist/primitives/slice.js.map +1 -1
- package/dist/primitives/text.js +3 -3
- package/dist/primitives/text.js.map +1 -1
- package/dist/primitives/virtual-each.d.ts.map +1 -1
- package/dist/primitives/virtual-each.js +9 -9
- package/dist/primitives/virtual-each.js.map +1 -1
- package/dist/render-context.d.ts +2 -2
- package/dist/render-context.d.ts.map +1 -1
- package/dist/render-context.js.map +1 -1
- package/dist/ssr.d.ts +4 -4
- package/dist/ssr.d.ts.map +1 -1
- package/dist/ssr.js +3 -3
- package/dist/ssr.js.map +1 -1
- package/dist/svg-elements.js +1 -1
- package/dist/svg-elements.js.map +1 -1
- package/dist/tracking/disposer-log.d.ts +4 -4
- package/dist/tracking/disposer-log.d.ts.map +1 -1
- package/dist/tracking/disposer-log.js.map +1 -1
- package/dist/types.d.ts +79 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/update-loop.d.ts +3 -3
- package/dist/update-loop.d.ts.map +1 -1
- package/dist/update-loop.js +12 -8
- package/dist/update-loop.js.map +1 -1
- package/dist/view-helpers.d.ts +10 -2
- package/dist/view-helpers.d.ts.map +1 -1
- package/dist/view-helpers.js +4 -0
- package/dist/view-helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/svg-elements.js
CHANGED
|
@@ -25,7 +25,7 @@ function createSvgElement(tag, propsOrChildren, maybeChildren) {
|
|
|
25
25
|
const key = kind === 'class' ? undefined : rawKey;
|
|
26
26
|
const accessor = value;
|
|
27
27
|
const perItem = value.length === 0;
|
|
28
|
-
const binding = createBinding(ctx.
|
|
28
|
+
const binding = createBinding(ctx.rootLifetime, {
|
|
29
29
|
mask: FULL_MASK,
|
|
30
30
|
accessor,
|
|
31
31
|
kind,
|
package/dist/svg-elements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-elements.js","sourceRoot":"","sources":["../src/svg-elements.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { FULL_MASK } from './update-loop.js'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\ntype ElementProps = Record<string, unknown>\ntype Child = Node | string | Node[]\ntype Children = Child[]\n\nfunction createSvgElement(\n tag: string,\n propsOrChildren?: ElementProps | Children,\n maybeChildren?: Children,\n): SVGElement {\n const el = document.createElementNS(SVG_NS, tag)\n const ctx = getRenderContext()\n\n const props: ElementProps | undefined = Array.isArray(propsOrChildren)\n ? undefined\n : propsOrChildren\n const children: Children | undefined = Array.isArray(propsOrChildren)\n ? propsOrChildren\n : maybeChildren\n\n if (props) {\n for (const [rawKey, value] of Object.entries(props)) {\n if (rawKey === 'key') continue\n\n if (/^on[A-Z]/.test(rawKey)) {\n const eventName = rawKey.slice(2).toLowerCase()\n el.addEventListener(eventName, value as EventListener)\n continue\n }\n\n if (typeof value === 'function') {\n const kind: BindingKind = rawKey === 'class' || rawKey === 'className' ? 'class' : 'attr'\n const key = kind === 'class' ? undefined : rawKey\n const accessor = value as (state: never) => unknown\n const perItem = value.length === 0\n\n const binding = createBinding(ctx.rootScope, {\n mask: FULL_MASK,\n accessor,\n kind,\n node: el,\n key,\n perItem,\n })\n\n const initialValue = perItem ? (value as () => unknown)() : accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n continue\n }\n\n if (rawKey === 'class' || rawKey === 'className') {\n applyBinding({ kind: 'class', node: el, key: undefined }, value)\n } else {\n applyBinding({ kind: 'attr', node: el, key: rawKey }, value)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child))\n } else if (Array.isArray(child)) {\n for (const node of child) el.appendChild(node)\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n\ntype SvgElFn = {\n (): SVGElement\n (props: ElementProps, children?: Children): SVGElement\n (children: Children): SVGElement\n}\n\ntype SvgVoidElFn = {\n (): SVGElement\n (props: ElementProps): SVGElement\n}\n\n/* v8 ignore start — mechanical tag wrappers */\n// Container / structural\n// prettier-ignore\nexport const svg = ((p?: ElementProps | Children, c?: Children) => createSvgElement('svg', p, c)) as SvgElFn\n// prettier-ignore\nexport const g = ((p?: ElementProps | Children, c?: Children) => createSvgElement('g', p, c)) as SvgElFn\n// prettier-ignore\nexport const defs = ((p?: ElementProps | Children, c?: Children) => createSvgElement('defs', p, c)) as SvgElFn\n// prettier-ignore\nexport const symbol = ((p?: ElementProps | Children, c?: Children) => createSvgElement('symbol', p, c)) as SvgElFn\n// prettier-ignore\nexport const use = ((p?: ElementProps | Children, c?: Children) => createSvgElement('use', p, c)) as SvgElFn\n\n// Shapes\n// prettier-ignore\nexport const circle = ((p?: ElementProps | Children, c?: Children) => createSvgElement('circle', p, c)) as SvgElFn\n// prettier-ignore\nexport const ellipse = ((p?: ElementProps | Children, c?: Children) => createSvgElement('ellipse', p, c)) as SvgElFn\n// prettier-ignore\nexport const line = ((p?: ElementProps | Children, c?: Children) => createSvgElement('line', p, c)) as SvgElFn\n// prettier-ignore\nexport const path = ((p?: ElementProps | Children, c?: Children) => createSvgElement('path', p, c)) as SvgElFn\n// prettier-ignore\nexport const polygon = ((p?: ElementProps) => createSvgElement('polygon', p)) as SvgVoidElFn\n// prettier-ignore\nexport const polyline = ((p?: ElementProps) => createSvgElement('polyline', p)) as SvgVoidElFn\n// prettier-ignore\nexport const rect = ((p?: ElementProps | Children, c?: Children) => createSvgElement('rect', p, c)) as SvgElFn\n\n// Text\n// prettier-ignore\nexport const text = ((p?: ElementProps | Children, c?: Children) => createSvgElement('text', p, c)) as SvgElFn\n// prettier-ignore\nexport const tspan = ((p?: ElementProps | Children, c?: Children) => createSvgElement('tspan', p, c)) as SvgElFn\n// prettier-ignore\nexport const textPath = ((p?: ElementProps | Children, c?: Children) => createSvgElement('textPath', p, c)) as SvgElFn\n\n// Paint server / clipping / masking\n// prettier-ignore\nexport const clipPath = ((p?: ElementProps | Children, c?: Children) => createSvgElement('clipPath', p, c)) as SvgElFn\n// prettier-ignore\nexport const linearGradient = ((p?: ElementProps | Children, c?: Children) => createSvgElement('linearGradient', p, c)) as SvgElFn\n// prettier-ignore\nexport const radialGradient = ((p?: ElementProps | Children, c?: Children) => createSvgElement('radialGradient', p, c)) as SvgElFn\n// prettier-ignore\nexport const stop = ((p?: ElementProps) => createSvgElement('stop', p)) as SvgVoidElFn\n// prettier-ignore\nexport const mask = ((p?: ElementProps | Children, c?: Children) => createSvgElement('mask', p, c)) as SvgElFn\n// prettier-ignore\nexport const pattern = ((p?: ElementProps | Children, c?: Children) => createSvgElement('pattern', p, c)) as SvgElFn\n// prettier-ignore\nexport const marker = ((p?: ElementProps | Children, c?: Children) => createSvgElement('marker', p, c)) as SvgElFn\n\n// Filters\n// prettier-ignore\nexport const filter = ((p?: ElementProps | Children, c?: Children) => createSvgElement('filter', p, c)) as SvgElFn\n// prettier-ignore\nexport const feBlend = ((p?: ElementProps) => createSvgElement('feBlend', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feColorMatrix = ((p?: ElementProps) => createSvgElement('feColorMatrix', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feComponentTransfer = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feComponentTransfer', p, c)) as SvgElFn\n// prettier-ignore\nexport const feComposite = ((p?: ElementProps) => createSvgElement('feComposite', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feConvolveMatrix = ((p?: ElementProps) => createSvgElement('feConvolveMatrix', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDiffuseLighting = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feDiffuseLighting', p, c)) as SvgElFn\n// prettier-ignore\nexport const feDisplacementMap = ((p?: ElementProps) => createSvgElement('feDisplacementMap', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDropShadow = ((p?: ElementProps) => createSvgElement('feDropShadow', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFlood = ((p?: ElementProps) => createSvgElement('feFlood', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feGaussianBlur = ((p?: ElementProps) => createSvgElement('feGaussianBlur', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feImage = ((p?: ElementProps) => createSvgElement('feImage', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feMerge = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feMerge', p, c)) as SvgElFn\n// prettier-ignore\nexport const feMergeNode = ((p?: ElementProps) => createSvgElement('feMergeNode', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feMorphology = ((p?: ElementProps) => createSvgElement('feMorphology', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feOffset = ((p?: ElementProps) => createSvgElement('feOffset', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feSpecularLighting = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feSpecularLighting', p, c)) as SvgElFn\n// prettier-ignore\nexport const feTile = ((p?: ElementProps) => createSvgElement('feTile', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feTurbulence = ((p?: ElementProps) => createSvgElement('feTurbulence', p)) as SvgVoidElFn\n// prettier-ignore\nexport const fePointLight = ((p?: ElementProps) => createSvgElement('fePointLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feSpotLight = ((p?: ElementProps) => createSvgElement('feSpotLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDistantLight = ((p?: ElementProps) => createSvgElement('feDistantLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncR = ((p?: ElementProps) => createSvgElement('feFuncR', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncG = ((p?: ElementProps) => createSvgElement('feFuncG', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncB = ((p?: ElementProps) => createSvgElement('feFuncB', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncA = ((p?: ElementProps) => createSvgElement('feFuncA', p)) as SvgVoidElFn\n\n// Embedded content\n// prettier-ignore\nexport const image = ((p?: ElementProps | Children, c?: Children) => createSvgElement('image', p, c)) as SvgElFn\n// prettier-ignore\nexport const foreignObject = ((p?: ElementProps | Children, c?: Children) => createSvgElement('foreignObject', p, c)) as SvgElFn\n\n// Animation\n// prettier-ignore\nexport const animate = ((p?: ElementProps) => createSvgElement('animate', p)) as SvgVoidElFn\n// prettier-ignore\nexport const animateMotion = ((p?: ElementProps | Children, c?: Children) => createSvgElement('animateMotion', p, c)) as SvgElFn\n// prettier-ignore\nexport const animateTransform = ((p?: ElementProps) => createSvgElement('animateTransform', p)) as SvgVoidElFn\n// prettier-ignore\nexport const set = ((p?: ElementProps) => createSvgElement('set', p)) as SvgVoidElFn\n// prettier-ignore\nexport const mpath = ((p?: ElementProps) => createSvgElement('mpath', p)) as SvgVoidElFn\n\n// Descriptive\n// prettier-ignore\nexport const desc = ((p?: ElementProps | Children, c?: Children) => createSvgElement('desc', p, c)) as SvgElFn\n// prettier-ignore\nexport const title = ((p?: ElementProps | Children, c?: Children) => createSvgElement('title', p, c)) as SvgElFn\n// prettier-ignore\nexport const metadata = ((p?: ElementProps | Children, c?: Children) => createSvgElement('metadata', p, c)) as SvgElFn\n/* v8 ignore stop */\n"]}
|
|
1
|
+
{"version":3,"file":"svg-elements.js","sourceRoot":"","sources":["../src/svg-elements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,MAAM,GAAG,4BAA4B,CAAA;AAM3C,SAAS,gBAAgB,CACvB,GAAW,EACX,eAAyC,EACzC,aAAwB;IAExB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAA;IAE9B,MAAM,KAAK,GAA6B,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACpE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,eAAe,CAAA;IACnB,MAAM,QAAQ,GAAyB,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;QACnE,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,aAAa,CAAA;IAEjB,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,IAAI,MAAM,KAAK,KAAK;gBAAE,SAAQ;YAE9B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;gBAC/C,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAsB,CAAC,CAAA;gBACtD,SAAQ;YACV,CAAC;YAED,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAgB,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;gBACzF,MAAM,GAAG,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;gBACjD,MAAM,QAAQ,GAAG,KAAkC,CAAA;gBACnD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;gBAElC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,EAAE;oBAC9C,IAAI,EAAE,SAAS;oBACf,QAAQ;oBACR,IAAI;oBACJ,IAAI,EAAE,EAAE;oBACR,GAAG;oBACH,OAAO;iBACR,CAAC,CAAA;gBAEF,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,CAAE,KAAuB,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAc,CAAC,CAAA;gBACxF,OAAO,CAAC,SAAS,GAAG,YAAY,CAAA;gBAChC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,YAAY,CAAC,CAAA;gBACnD,SAAQ;YACV,CAAC;YAED,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBACjD,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAA;YAClE,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAaD,+CAA+C;AAC/C,yBAAyB;AACzB,kBAAkB;AAClB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC5G,kBAAkB;AAClB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACxG,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAClH,kBAAkB;AAClB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAE5G,SAAS;AACT,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAClH,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACpH,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC9F,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAE9G,OAAO;AACP,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAChH,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAEtH,oCAAoC;AACpC,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACtH,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAClI,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAClI,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAgB,CAAA;AACtF,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACpH,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAElH,UAAU;AACV,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAClH,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAgB,CAAA;AACxG,kBAAkB;AAClB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC5I,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAgB,CAAA;AACpG,kBAAkB;AAClB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACxI,kBAAkB;AAClB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAgB,CAAA;AAChH,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAgB,CAAA;AACtG,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC1G,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACpH,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAgB,CAAA;AACpG,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAgB,CAAA;AACtG,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC9F,kBAAkB;AAClB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC1I,kBAAkB;AAClB,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC1F,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAgB,CAAA;AACtG,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAgB,CAAA;AACtG,kBAAkB;AAClB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAgB,CAAA;AACpG,kBAAkB;AAClB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC1G,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAE5F,mBAAmB;AACnB,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAChH,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAEhI,YAAY;AACZ,kBAAkB;AAClB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC5F,kBAAkB;AAClB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAChI,kBAAkB;AAClB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAgB,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAgB,CAAA;AACpF,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAgB,CAAA;AAExF,cAAc;AACd,kBAAkB;AAClB,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAC9G,kBAAkB;AAClB,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AAChH,kBAAkB;AAClB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAA2B,EAAE,CAAY,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAY,CAAA;AACtH,oBAAoB","sourcesContent":["import type { BindingKind } from './types.js'\nimport { getRenderContext } from './render-context.js'\nimport { createBinding, applyBinding } from './binding.js'\nimport { FULL_MASK } from './update-loop.js'\n\nconst SVG_NS = 'http://www.w3.org/2000/svg'\n\ntype ElementProps = Record<string, unknown>\ntype Child = Node | string | Node[]\ntype Children = Child[]\n\nfunction createSvgElement(\n tag: string,\n propsOrChildren?: ElementProps | Children,\n maybeChildren?: Children,\n): SVGElement {\n const el = document.createElementNS(SVG_NS, tag)\n const ctx = getRenderContext()\n\n const props: ElementProps | undefined = Array.isArray(propsOrChildren)\n ? undefined\n : propsOrChildren\n const children: Children | undefined = Array.isArray(propsOrChildren)\n ? propsOrChildren\n : maybeChildren\n\n if (props) {\n for (const [rawKey, value] of Object.entries(props)) {\n if (rawKey === 'key') continue\n\n if (/^on[A-Z]/.test(rawKey)) {\n const eventName = rawKey.slice(2).toLowerCase()\n el.addEventListener(eventName, value as EventListener)\n continue\n }\n\n if (typeof value === 'function') {\n const kind: BindingKind = rawKey === 'class' || rawKey === 'className' ? 'class' : 'attr'\n const key = kind === 'class' ? undefined : rawKey\n const accessor = value as (state: never) => unknown\n const perItem = value.length === 0\n\n const binding = createBinding(ctx.rootLifetime, {\n mask: FULL_MASK,\n accessor,\n kind,\n node: el,\n key,\n perItem,\n })\n\n const initialValue = perItem ? (value as () => unknown)() : accessor(ctx.state as never)\n binding.lastValue = initialValue\n applyBinding({ kind, node: el, key }, initialValue)\n continue\n }\n\n if (rawKey === 'class' || rawKey === 'className') {\n applyBinding({ kind: 'class', node: el, key: undefined }, value)\n } else {\n applyBinding({ kind: 'attr', node: el, key: rawKey }, value)\n }\n }\n }\n\n if (children) {\n for (const child of children) {\n if (typeof child === 'string') {\n el.appendChild(document.createTextNode(child))\n } else if (Array.isArray(child)) {\n for (const node of child) el.appendChild(node)\n } else {\n el.appendChild(child)\n }\n }\n }\n\n return el\n}\n\ntype SvgElFn = {\n (): SVGElement\n (props: ElementProps, children?: Children): SVGElement\n (children: Children): SVGElement\n}\n\ntype SvgVoidElFn = {\n (): SVGElement\n (props: ElementProps): SVGElement\n}\n\n/* v8 ignore start — mechanical tag wrappers */\n// Container / structural\n// prettier-ignore\nexport const svg = ((p?: ElementProps | Children, c?: Children) => createSvgElement('svg', p, c)) as SvgElFn\n// prettier-ignore\nexport const g = ((p?: ElementProps | Children, c?: Children) => createSvgElement('g', p, c)) as SvgElFn\n// prettier-ignore\nexport const defs = ((p?: ElementProps | Children, c?: Children) => createSvgElement('defs', p, c)) as SvgElFn\n// prettier-ignore\nexport const symbol = ((p?: ElementProps | Children, c?: Children) => createSvgElement('symbol', p, c)) as SvgElFn\n// prettier-ignore\nexport const use = ((p?: ElementProps | Children, c?: Children) => createSvgElement('use', p, c)) as SvgElFn\n\n// Shapes\n// prettier-ignore\nexport const circle = ((p?: ElementProps | Children, c?: Children) => createSvgElement('circle', p, c)) as SvgElFn\n// prettier-ignore\nexport const ellipse = ((p?: ElementProps | Children, c?: Children) => createSvgElement('ellipse', p, c)) as SvgElFn\n// prettier-ignore\nexport const line = ((p?: ElementProps | Children, c?: Children) => createSvgElement('line', p, c)) as SvgElFn\n// prettier-ignore\nexport const path = ((p?: ElementProps | Children, c?: Children) => createSvgElement('path', p, c)) as SvgElFn\n// prettier-ignore\nexport const polygon = ((p?: ElementProps) => createSvgElement('polygon', p)) as SvgVoidElFn\n// prettier-ignore\nexport const polyline = ((p?: ElementProps) => createSvgElement('polyline', p)) as SvgVoidElFn\n// prettier-ignore\nexport const rect = ((p?: ElementProps | Children, c?: Children) => createSvgElement('rect', p, c)) as SvgElFn\n\n// Text\n// prettier-ignore\nexport const text = ((p?: ElementProps | Children, c?: Children) => createSvgElement('text', p, c)) as SvgElFn\n// prettier-ignore\nexport const tspan = ((p?: ElementProps | Children, c?: Children) => createSvgElement('tspan', p, c)) as SvgElFn\n// prettier-ignore\nexport const textPath = ((p?: ElementProps | Children, c?: Children) => createSvgElement('textPath', p, c)) as SvgElFn\n\n// Paint server / clipping / masking\n// prettier-ignore\nexport const clipPath = ((p?: ElementProps | Children, c?: Children) => createSvgElement('clipPath', p, c)) as SvgElFn\n// prettier-ignore\nexport const linearGradient = ((p?: ElementProps | Children, c?: Children) => createSvgElement('linearGradient', p, c)) as SvgElFn\n// prettier-ignore\nexport const radialGradient = ((p?: ElementProps | Children, c?: Children) => createSvgElement('radialGradient', p, c)) as SvgElFn\n// prettier-ignore\nexport const stop = ((p?: ElementProps) => createSvgElement('stop', p)) as SvgVoidElFn\n// prettier-ignore\nexport const mask = ((p?: ElementProps | Children, c?: Children) => createSvgElement('mask', p, c)) as SvgElFn\n// prettier-ignore\nexport const pattern = ((p?: ElementProps | Children, c?: Children) => createSvgElement('pattern', p, c)) as SvgElFn\n// prettier-ignore\nexport const marker = ((p?: ElementProps | Children, c?: Children) => createSvgElement('marker', p, c)) as SvgElFn\n\n// Filters\n// prettier-ignore\nexport const filter = ((p?: ElementProps | Children, c?: Children) => createSvgElement('filter', p, c)) as SvgElFn\n// prettier-ignore\nexport const feBlend = ((p?: ElementProps) => createSvgElement('feBlend', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feColorMatrix = ((p?: ElementProps) => createSvgElement('feColorMatrix', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feComponentTransfer = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feComponentTransfer', p, c)) as SvgElFn\n// prettier-ignore\nexport const feComposite = ((p?: ElementProps) => createSvgElement('feComposite', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feConvolveMatrix = ((p?: ElementProps) => createSvgElement('feConvolveMatrix', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDiffuseLighting = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feDiffuseLighting', p, c)) as SvgElFn\n// prettier-ignore\nexport const feDisplacementMap = ((p?: ElementProps) => createSvgElement('feDisplacementMap', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDropShadow = ((p?: ElementProps) => createSvgElement('feDropShadow', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFlood = ((p?: ElementProps) => createSvgElement('feFlood', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feGaussianBlur = ((p?: ElementProps) => createSvgElement('feGaussianBlur', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feImage = ((p?: ElementProps) => createSvgElement('feImage', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feMerge = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feMerge', p, c)) as SvgElFn\n// prettier-ignore\nexport const feMergeNode = ((p?: ElementProps) => createSvgElement('feMergeNode', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feMorphology = ((p?: ElementProps) => createSvgElement('feMorphology', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feOffset = ((p?: ElementProps) => createSvgElement('feOffset', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feSpecularLighting = ((p?: ElementProps | Children, c?: Children) => createSvgElement('feSpecularLighting', p, c)) as SvgElFn\n// prettier-ignore\nexport const feTile = ((p?: ElementProps) => createSvgElement('feTile', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feTurbulence = ((p?: ElementProps) => createSvgElement('feTurbulence', p)) as SvgVoidElFn\n// prettier-ignore\nexport const fePointLight = ((p?: ElementProps) => createSvgElement('fePointLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feSpotLight = ((p?: ElementProps) => createSvgElement('feSpotLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feDistantLight = ((p?: ElementProps) => createSvgElement('feDistantLight', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncR = ((p?: ElementProps) => createSvgElement('feFuncR', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncG = ((p?: ElementProps) => createSvgElement('feFuncG', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncB = ((p?: ElementProps) => createSvgElement('feFuncB', p)) as SvgVoidElFn\n// prettier-ignore\nexport const feFuncA = ((p?: ElementProps) => createSvgElement('feFuncA', p)) as SvgVoidElFn\n\n// Embedded content\n// prettier-ignore\nexport const image = ((p?: ElementProps | Children, c?: Children) => createSvgElement('image', p, c)) as SvgElFn\n// prettier-ignore\nexport const foreignObject = ((p?: ElementProps | Children, c?: Children) => createSvgElement('foreignObject', p, c)) as SvgElFn\n\n// Animation\n// prettier-ignore\nexport const animate = ((p?: ElementProps) => createSvgElement('animate', p)) as SvgVoidElFn\n// prettier-ignore\nexport const animateMotion = ((p?: ElementProps | Children, c?: Children) => createSvgElement('animateMotion', p, c)) as SvgElFn\n// prettier-ignore\nexport const animateTransform = ((p?: ElementProps) => createSvgElement('animateTransform', p)) as SvgVoidElFn\n// prettier-ignore\nexport const set = ((p?: ElementProps) => createSvgElement('set', p)) as SvgVoidElFn\n// prettier-ignore\nexport const mpath = ((p?: ElementProps) => createSvgElement('mpath', p)) as SvgVoidElFn\n\n// Descriptive\n// prettier-ignore\nexport const desc = ((p?: ElementProps | Children, c?: Children) => createSvgElement('desc', p, c)) as SvgElFn\n// prettier-ignore\nexport const title = ((p?: ElementProps | Children, c?: Children) => createSvgElement('title', p, c)) as SvgElFn\n// prettier-ignore\nexport const metadata = ((p?: ElementProps | Children, c?: Children) => createSvgElement('metadata', p, c)) as SvgElFn\n/* v8 ignore stop */\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRingBuffer, type RingBuffer } from './each-diff.js';
|
|
2
2
|
/**
|
|
3
|
-
* Dev-only disposer log entry, emitted once per `
|
|
3
|
+
* Dev-only disposer log entry, emitted once per `disposeLifetime` call
|
|
4
4
|
* when the owning component instance has an `_disposerLog` ring buffer
|
|
5
5
|
* installed by `installDevTools`.
|
|
6
6
|
*
|
|
7
7
|
* `cause` is set by the structural primitive (each / branch / child)
|
|
8
|
-
* immediately before calling `
|
|
9
|
-
* explicitly set, `
|
|
8
|
+
* immediately before calling `disposeLifetime`. When no cause was
|
|
9
|
+
* explicitly set, `disposeLifetime` falls back to `'component-unmount'`.
|
|
10
10
|
* `'app-unmount'` is reserved for the top-level `mountApp` teardown.
|
|
11
11
|
*
|
|
12
12
|
* Used by the `llui_disposer_log` MCP tool to diagnose leaks on
|
|
@@ -15,7 +15,7 @@ import { createRingBuffer, type RingBuffer } from './each-diff.js';
|
|
|
15
15
|
*/
|
|
16
16
|
export interface DisposerEvent {
|
|
17
17
|
scopeId: string;
|
|
18
|
-
cause: 'branch-swap' | 'each-remove' | 'show-hide' | 'child-unmount' | 'app-unmount' | 'component-unmount';
|
|
18
|
+
cause: 'branch-swap' | 'each-remove' | 'show-hide' | 'scope-rebuild' | 'child-unmount' | 'app-unmount' | 'component-unmount';
|
|
19
19
|
timestamp: number;
|
|
20
20
|
}
|
|
21
21
|
export { createRingBuffer, type RingBuffer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposer-log.d.ts","sourceRoot":"","sources":["../../src/tracking/disposer-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EACD,aAAa,GACb,aAAa,GACb,WAAW,GACX,eAAe,GACf,aAAa,GACb,mBAAmB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"disposer-log.d.ts","sourceRoot":"","sources":["../../src/tracking/disposer-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EACD,aAAa,GACb,aAAa,GACb,WAAW,GACX,eAAe,GACf,eAAe,GACf,aAAa,GACb,mBAAmB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposer-log.js","sourceRoot":"","sources":["../../src/tracking/disposer-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"disposer-log.js","sourceRoot":"","sources":["../../src/tracking/disposer-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAmB,MAAM,gBAAgB,CAAA;AA6BlE,OAAO,EAAE,gBAAgB,EAAmB,CAAA","sourcesContent":["import { createRingBuffer, type RingBuffer } from './each-diff.js'\n\n/**\n * Dev-only disposer log entry, emitted once per `disposeLifetime` call\n * when the owning component instance has an `_disposerLog` ring buffer\n * installed by `installDevTools`.\n *\n * `cause` is set by the structural primitive (each / branch / child)\n * immediately before calling `disposeLifetime`. When no cause was\n * explicitly set, `disposeLifetime` falls back to `'component-unmount'`.\n * `'app-unmount'` is reserved for the top-level `mountApp` teardown.\n *\n * Used by the `llui_disposer_log` MCP tool to diagnose leaks on\n * structural transitions (e.g., branch swap that fails to release a\n * subscription registered in the old arm).\n */\nexport interface DisposerEvent {\n scopeId: string\n cause:\n | 'branch-swap'\n | 'each-remove'\n | 'show-hide'\n | 'scope-rebuild'\n | 'child-unmount'\n | 'app-unmount'\n | 'component-unmount'\n timestamp: number\n}\n\nexport { createRingBuffer, type RingBuffer }\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -128,20 +128,20 @@ export interface AppHandle {
|
|
|
128
128
|
*/
|
|
129
129
|
send(msg: unknown): void;
|
|
130
130
|
}
|
|
131
|
-
export interface
|
|
131
|
+
export interface Lifetime {
|
|
132
132
|
id: number;
|
|
133
|
-
parent:
|
|
134
|
-
children:
|
|
133
|
+
parent: Lifetime | null;
|
|
134
|
+
children: Lifetime[];
|
|
135
135
|
disposers: Array<() => void>;
|
|
136
136
|
bindings: Binding[];
|
|
137
137
|
/** Per-item updaters — called directly by each() when item changes, bypassing Phase 2 */
|
|
138
138
|
itemUpdaters: Array<() => void>;
|
|
139
139
|
}
|
|
140
|
-
export interface
|
|
140
|
+
export interface LifetimeNode {
|
|
141
141
|
scopeId: string;
|
|
142
|
-
kind: 'root' | 'show' | 'each' | 'branch' | 'child' | 'portal' | 'foreign';
|
|
142
|
+
kind: 'root' | 'show' | 'each' | 'branch' | 'scope' | 'child' | 'portal' | 'foreign';
|
|
143
143
|
active: boolean;
|
|
144
|
-
children:
|
|
144
|
+
children: LifetimeNode[];
|
|
145
145
|
}
|
|
146
146
|
/**
|
|
147
147
|
* Binding output kinds.
|
|
@@ -162,7 +162,7 @@ export interface Binding {
|
|
|
162
162
|
kind: BindingKind;
|
|
163
163
|
node: Node;
|
|
164
164
|
key?: string;
|
|
165
|
-
|
|
165
|
+
ownerLifetime: Lifetime;
|
|
166
166
|
perItem: boolean;
|
|
167
167
|
dead: boolean;
|
|
168
168
|
}
|
|
@@ -175,15 +175,73 @@ export interface TransitionOptions {
|
|
|
175
175
|
parent: Node;
|
|
176
176
|
}) => void | Promise<void>;
|
|
177
177
|
}
|
|
178
|
-
|
|
179
|
-
on: (s: S) => string | number | boolean;
|
|
180
|
-
cases: Record<string | number, (h: View<S, M>) => Node[]>;
|
|
178
|
+
interface BranchOptionsBase<_S, _M> extends TransitionOptions {
|
|
181
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* All cases covered by `cases` — no default allowed (would be dead code).
|
|
182
|
+
*/
|
|
183
|
+
type BranchOptionsExhaustive<S, M, K extends string> = BranchOptionsBase<S, M> & {
|
|
184
|
+
on: (s: S) => K;
|
|
185
|
+
cases: {
|
|
186
|
+
[P in K]: (h: View<S, M>) => Node[];
|
|
187
|
+
};
|
|
188
|
+
default?: never;
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* `cases` may cover some but not all keys; `default` handles the rest.
|
|
192
|
+
*/
|
|
193
|
+
type BranchOptionsNonExhaustive<S, M, K extends string> = BranchOptionsBase<S, M> & {
|
|
194
|
+
on: (s: S) => K;
|
|
195
|
+
cases?: {
|
|
196
|
+
[P in K]?: (h: View<S, M>) => Node[];
|
|
197
|
+
};
|
|
198
|
+
default: (h: View<S, M>) => Node[];
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* `on` returns a wide `string` — exhaustiveness cannot be verified at
|
|
202
|
+
* compile time (the key domain is infinite). Lenient: `default` is
|
|
203
|
+
* optional so existing call sites that predate exhaustiveness typing
|
|
204
|
+
* continue to compile. Authors who want the gate opt in by narrowing
|
|
205
|
+
* `on`'s return type to a literal union.
|
|
206
|
+
*/
|
|
207
|
+
type BranchOptionsWide<S, M> = BranchOptionsBase<S, M> & {
|
|
208
|
+
on: (s: S) => string;
|
|
209
|
+
cases?: Record<string, (h: View<S, M>) => Node[]>;
|
|
210
|
+
default?: (h: View<S, M>) => Node[];
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Options for `branch()`.
|
|
214
|
+
*
|
|
215
|
+
* When `on` returns a literal string union (e.g. `'idle' | 'loading'
|
|
216
|
+
* | 'done'`), TypeScript enforces exhaustiveness: either every union
|
|
217
|
+
* member has a case (and `default` is disallowed as unreachable), or
|
|
218
|
+
* `default` is required to cover the remainder. When `on` returns a
|
|
219
|
+
* wide `string`, `default` stays optional — exhaustiveness isn't
|
|
220
|
+
* meaningful for an unbounded domain.
|
|
221
|
+
*
|
|
222
|
+
* `cases` is optional when `default` is present; `branch({ on, default })`
|
|
223
|
+
* is the canonical dynamic-rebuild shape — `scope()` sugar wraps
|
|
224
|
+
* exactly this form.
|
|
225
|
+
*/
|
|
226
|
+
export type BranchOptions<S, M = unknown, K extends string = string> = string extends K ? BranchOptionsWide<S, M> : BranchOptionsExhaustive<S, M, K> | BranchOptionsNonExhaustive<S, M, K>;
|
|
182
227
|
export interface ShowOptions<S, M = unknown> extends TransitionOptions {
|
|
183
228
|
when: (s: S) => boolean;
|
|
184
229
|
render: (h: View<S, M>) => Node[];
|
|
185
230
|
fallback?: (h: View<S, M>) => Node[];
|
|
186
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Options for `scope()` — rebuilds a subtree when `on(state)` changes.
|
|
234
|
+
*
|
|
235
|
+
* Sugar over `branch({ on, cases: {}, default: render, __disposalCause: 'scope-rebuild' })`.
|
|
236
|
+
* Use when the key is dynamic (e.g. an epoch counter bumped from the
|
|
237
|
+
* outside) and you want a fresh arm — fresh lifetime, fresh bindings —
|
|
238
|
+
* each time it changes. Combine with `sample()` inside `render` for a
|
|
239
|
+
* one-shot current-state read.
|
|
240
|
+
*/
|
|
241
|
+
export interface ScopeOptions<S, M = unknown> extends TransitionOptions {
|
|
242
|
+
on: (s: S) => string;
|
|
243
|
+
render: (h: View<S, M>) => Node[];
|
|
244
|
+
}
|
|
187
245
|
/**
|
|
188
246
|
* Options for `each()`. The inherited `enter` / `leave` callbacks fire **per item**:
|
|
189
247
|
* `enter(nodes)` runs after an item's DOM is inserted (including initial mount);
|
|
@@ -203,6 +261,16 @@ export type ItemAccessor<T> = {
|
|
|
203
261
|
<R>(selector: (t: T) => R): () => R;
|
|
204
262
|
} & {
|
|
205
263
|
[K in keyof T]-?: () => T[K];
|
|
264
|
+
} & {
|
|
265
|
+
/**
|
|
266
|
+
* Read the whole current item. Needed when T is a primitive (where the
|
|
267
|
+
* field-map branch collapses to method names like `toString`) or when
|
|
268
|
+
* you want to sample the entire record rather than a single field.
|
|
269
|
+
*
|
|
270
|
+
* Shadows any literal `current` field on T — if T has such a field,
|
|
271
|
+
* use `item(r => r.current)` to disambiguate.
|
|
272
|
+
*/
|
|
273
|
+
current(): T;
|
|
206
274
|
};
|
|
207
275
|
export interface EachOptions<S, T, M = unknown> extends TransitionOptions {
|
|
208
276
|
items: (s: S) => T[];
|
|
@@ -251,4 +319,5 @@ export interface ChildOptions<S, ChildM> {
|
|
|
251
319
|
props: (s: S) => Record<string, unknown>;
|
|
252
320
|
onMsg?: (msg: ChildM) => unknown | null;
|
|
253
321
|
}
|
|
322
|
+
export {};
|
|
254
323
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qEAAqE","sourcesContent":["// ── Component Definition ──────────────────────────────────────────\n\nimport type { View } from './view-helpers.js'\nimport type { StructuralBlock } from './structural.js'\nimport type { ComponentInstance } from './update-loop.js'\nimport type { DisposerEvent } from './tracking/disposer-log.js'\n\nexport interface ComponentDef<S, M, E = never, D = void> {\n name: string\n init: (data: D) => [S, E[]]\n update: (state: S, msg: M) => [S, E[]]\n view: (h: View<S, M>) => Node[]\n onEffect?: (ctx: { effect: E; send: Send<M>; signal: AbortSignal }) => void\n\n // Level 2 composition\n propsMsg?: (props: Record<string, unknown>) => M\n receives?: Record<string, (params: unknown) => M>\n\n /** @internal Compiler-injected */\n __dirty?: (oldState: S, newState: S) => number | [number, number]\n /** @internal Compiler-injected */\n __renderToString?: (state: S) => string\n /** @internal Compiler-injected */\n __msgSchema?: object\n /** @internal Compiler-injected — maps top-level state field → dirty-mask bit(s) */\n __maskLegend?: Record<string, number>\n /** @internal Compiler-injected — source-file location of the component() call */\n __componentMeta?: { file: string; line: number }\n /** @internal Compiler-injected — shape of the State type (for introspection) */\n __stateSchema?: object\n /** @internal Compiler-injected — Effect union schema (for introspection) */\n __effectSchema?: object\n /** @internal Compiler-injected — replaces generic Phase 1 + Phase 2 loop */\n __update?: (\n state: S,\n dirty: number,\n bindings: Binding[],\n blocks: StructuralBlock[],\n bindingsBeforePhase1: number,\n ) => void\n /** @internal Compiler-injected — per-message-type specialized handlers.\n * Bypass the entire processMessages pipeline for single-message updates. */\n __handlers?: Record<string, (inst: object, msg: unknown) => [S, E[]]>\n}\n\nexport type Send<M> = (msg: M) => void\n\n/**\n * Type-erased component definition for use at module boundaries where\n * the consumer's `S`, `M`, `E` are internal and invisible to the caller.\n *\n * Why this exists: `ComponentDef<S, M, E, D>` uses property syntax for\n * its callable fields (`init: (data: D) => ...`), and TypeScript\n * checks property syntax with strict (contravariant) variance. That's\n * the right call for user-facing type safety when authoring a\n * component (a narrower `Msg` type can't accidentally satisfy the\n * `update`'s param), but it means `ComponentDef<MyState, MyMsg, MyEffect, MyData>`\n * is NOT structurally assignable to `ComponentDef<unknown, unknown, unknown, unknown>`\n * — the `init: (data: MyData) => ...` field is contravariant in `MyData`,\n * so widening to `unknown` is rejected.\n *\n * `AnyComponentDef` (and `LazyDef<D>` below) declare the same fields\n * using **method syntax** (`init(data: D): ...`), which TypeScript\n * checks bivariantly. Concrete `ComponentDef<S, M, E, D>` assigns into\n * these structurally without any `widenDef` helper at the callsite.\n *\n * Used by every API that accepts an opaque component definition at a\n * module boundary:\n *\n * - `child({ def })`\n * - `lazy({ loader })` — returns `LazyDef<D>` so the loader's `D` survives\n * - `createOnRenderClient({ Layout })` (from `@llui/vike`)\n * - `createOnRenderHtml({ Layout })` (from `@llui/vike`)\n *\n * The `D` parameter is `unknown` here — `child()` doesn't pass init\n * data through, and `Layout` callers pass route-supplied data whose\n * shape is unknown at the type-erased boundary. Use `LazyDef<D>` when\n * you need to preserve the init data shape (the lazy loader case).\n */\nexport interface AnyComponentDef {\n name: string\n init(data: unknown): [unknown, unknown[]]\n update(state: unknown, msg: unknown): [unknown, unknown[]]\n view(h: unknown): Node[]\n onEffect?: unknown\n propsMsg?: unknown\n receives?: unknown\n __dirty?: unknown\n __renderToString?: unknown\n __msgSchema?: unknown\n __maskLegend?: unknown\n __componentMeta?: unknown\n __stateSchema?: unknown\n __effectSchema?: unknown\n __update?: unknown\n __handlers?: unknown\n}\n\n/**\n * Type-erased component definition for use at module boundaries where the\n * loaded component's S, M, E are internal and invisible to the caller.\n * Only `D` (init data) survives because the caller provides it.\n *\n * `ComponentDef<S, M, E, D>` is structurally assignable to `LazyDef<D>`\n * for any S, M, E — `view: (h: unknown) => Node[]` accepts any View via\n * contravariance, and all other fields widen to `unknown` return types.\n *\n * Used by `lazy()` as the loader's return type. Use `AnyComponentDef`\n * (above) when D is also opaque — most other adapter-layer APIs.\n */\nexport interface LazyDef<D = void> {\n name: string\n // Method syntax — TypeScript checks methods bivariantly, so\n // ComponentDef<S, M, E, D>'s concrete (state: S, msg: M) => ...\n // assigns here even though S/M ≠ unknown. Property syntax would\n // be contravariant and reject the assignment.\n init(data: D): [unknown, unknown[]]\n update(state: unknown, msg: unknown): [unknown, unknown[]]\n view(h: unknown): Node[]\n onEffect?: unknown\n propsMsg?: unknown\n receives?: unknown\n __dirty?: unknown\n __renderToString?: unknown\n __msgSchema?: unknown\n __maskLegend?: unknown\n __componentMeta?: unknown\n __stateSchema?: unknown\n __effectSchema?: unknown\n __update?: unknown\n __handlers?: unknown\n}\n\n/**\n * Maps a value shape to a reactive-props shape: every field becomes an accessor\n * `(s: S) => V`. Use for Level-1 view function signatures.\n *\n * ```ts\n * type ToolbarData = { tools: Tool[]; theme: 'light' | 'dark' }\n *\n * export function toolbar<S>(props: Props<ToolbarData, S>, send: Send<Msg>) {\n * return [div({ class: props.theme }, [each({ items: props.tools, ... })])]\n * }\n *\n * // Caller — TypeScript enforces per-field accessors; passing a raw value errors:\n * toolbar({ tools: (s: State) => s.tools, theme: (s) => s.theme }, send)\n * ```\n */\nexport type Props<T, S> = {\n [K in keyof T]: (s: S) => T[K]\n}\n\n// ── App Handle ────────────────────────────────────────────────────\n\nexport interface AppHandle {\n dispose(): void\n flush(): void\n /**\n * Dispatch a message into the mounted instance from outside its\n * normal view-bound `send` channel. Useful for adapter layers that\n * need to push updates into a long-lived instance — e.g.\n * `@llui/vike`'s persistent-layout chain pushes layout-data updates\n * into surviving layer instances on client navigation when their\n * `propsMsg` translates the new data into a state-update message.\n *\n * Messages are queued through the same path as `view`-side `send`\n * calls — they batch into the next microtask and process via the\n * normal update loop. Calling `send` after `dispose` is a no-op.\n */\n send(msg: unknown): void\n}\n\n// ── Scope ─────────────────────────────────────────────────────────\n\nexport interface Scope {\n id: number\n parent: Scope | null\n children: Scope[]\n disposers: Array<() => void>\n bindings: Binding[]\n /** Per-item updaters — called directly by each() when item changes, bypassing Phase 2 */\n itemUpdaters: Array<() => void>\n /**\n * @internal dev-only back-reference to the owning ComponentInstance.\n * Populated on the root scope by `installDevTools` so `disposeScope`\n * can walk up the scope chain and emit DisposerEvents into the\n * instance's `_disposerLog`. Undefined in production.\n */\n instance?: ComponentInstance\n /**\n * @internal dev-only cause hint. Structural primitives (branch, each,\n * child, mountApp teardown) set this field immediately before calling\n * `disposeScope`; the dispose path reads it once to stamp the emitted\n * DisposerEvent. Left undefined, `disposeScope` falls back to\n * `'component-unmount'`. Undefined in production.\n */\n disposalCause?: DisposerEvent['cause']\n /** @internal dev-only — populated by structural primitives for scope-tree classification */\n _kind?: 'root' | 'show' | 'each' | 'branch' | 'child' | 'portal' | 'foreign'\n}\n\nexport interface ScopeNode {\n scopeId: string\n kind: 'root' | 'show' | 'each' | 'branch' | 'child' | 'portal' | 'foreign'\n active: boolean\n children: ScopeNode[]\n}\n\n// ── Binding ───────────────────────────────────────────────────────\n\n/**\n * Binding output kinds.\n *\n * `'text' | 'prop' | 'attr' | 'class' | 'style'` write their accessor's\n * return value to the DOM. `'effect'` is a side-effect-only watcher:\n * the accessor is invoked every Phase 2 tick its mask is hit, but its\n * return value is discarded and `applyBinding` is a no-op. Used by\n * `child()` to fire the prop-diff/propsMsg cascade on parent updates\n * without the cost of stringifying the returned props bag onto a\n * detached anchor node every render.\n */\nexport type BindingKind = 'text' | 'prop' | 'attr' | 'class' | 'style' | 'effect'\n\nexport interface Binding {\n mask: number\n accessor: (state: unknown) => unknown\n lastValue: unknown\n kind: BindingKind\n node: Node\n key?: string\n ownerScope: Scope\n perItem: boolean\n dead: boolean\n}\n\n// ── Structural Primitives ─────────────────────────────────────────\n\nexport interface TransitionOptions {\n enter?: (nodes: Node[]) => void | Promise<void>\n leave?: (nodes: Node[]) => void | Promise<void>\n onTransition?: (ctx: { entering: Node[]; leaving: Node[]; parent: Node }) => void | Promise<void>\n}\n\nexport interface BranchOptions<S, M = unknown> extends TransitionOptions {\n on: (s: S) => string | number | boolean\n cases: Record<string | number, (h: View<S, M>) => Node[]>\n /**\n * @internal Set by `show()` when it delegates to `branch()`, so the\n * dev-only disposer log can report `'show-hide'` instead of the\n * default `'branch-swap'` for the leaving arm. User code should not\n * set this directly.\n */\n __disposalCause?: DisposerEvent['cause']\n}\n\nexport interface ShowOptions<S, M = unknown> extends TransitionOptions {\n when: (s: S) => boolean\n render: (h: View<S, M>) => Node[]\n fallback?: (h: View<S, M>) => Node[]\n}\n\n/**\n * Options for `each()`. The inherited `enter` / `leave` callbacks fire **per item**:\n * `enter(nodes)` runs after an item's DOM is inserted (including initial mount);\n * `leave(nodes)` runs before an item's DOM is removed and may return a Promise\n * to hold the DOM until the animation resolves. Setting `leave` disables the\n * bulk-clear / full-replace fast paths.\n */\n/**\n * Per-item accessor. Two access forms:\n * - `item.field` — shorthand, returns accessor for `item.current[field]`\n * - `item(t => t.expr)` — computed expressions\n *\n * In both cases the returned value is a `() => V` accessor.\n * Invoke it (`item.field()`) to read the current value imperatively.\n */\nexport type ItemAccessor<T> = {\n <R>(selector: (t: T) => R): () => R\n} & {\n [K in keyof T]-?: () => T[K]\n}\n\nexport interface EachOptions<S, T, M = unknown> extends TransitionOptions {\n items: (s: S) => T[]\n key: (item: T) => string | number\n render: (opts: {\n send: Send<M>\n item: ItemAccessor<T>\n /**\n * Plain (non-Proxy) accessor factory. Compiler-output path; avoid in user code\n * (use `item.field` / `item(fn)` — more ergonomic and bypasses Proxy when compiled).\n */\n acc: <R>(selector: (t: T) => R) => () => R\n index: () => number\n /** @internal Compiler-injected — entry reference for row factory */\n entry?: Record<string, unknown>\n }) => Node[]\n}\n\nexport interface PortalOptions {\n target: HTMLElement | string\n render: () => Node[]\n}\n\nexport interface ForeignOptions<S, M, T extends Record<string, unknown>, Instance> {\n mount: (ctx: { container: HTMLElement; send: Send<M> }) => Instance\n props: (s: S) => T\n sync:\n | ((ctx: { instance: Instance; props: T; prev: T | undefined }) => void)\n | {\n [K in keyof T]?: (ctx: { instance: Instance; value: T[K]; prev: T[K] | undefined }) => void\n }\n destroy: (instance: Instance) => void\n container?: { tag?: string; attrs?: Record<string, string> }\n}\n\nexport interface ChildOptions<S, ChildM> {\n // Type-erased via AnyComponentDef so callers can pass any concrete\n // ComponentDef<S, M, E, D> without a widening helper. The runtime\n // narrows the message shape via the user-supplied `onMsg` callback,\n // which keeps `ChildM` typed at this boundary even though the def\n // itself is opaque.\n def: AnyComponentDef\n key: string | number\n props: (s: S) => Record<string, unknown>\n onMsg?: (msg: ChildM) => unknown | null\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,qEAAqE","sourcesContent":["// ── Component Definition ──────────────────────────────────────────\n\nimport type { View } from './view-helpers.js'\nimport type { StructuralBlock } from './structural.js'\nimport type { ComponentInstance } from './update-loop.js'\nimport type { DisposerEvent } from './tracking/disposer-log.js'\n\nexport interface ComponentDef<S, M, E = never, D = void> {\n name: string\n init: (data: D) => [S, E[]]\n update: (state: S, msg: M) => [S, E[]]\n view: (h: View<S, M>) => Node[]\n onEffect?: (ctx: { effect: E; send: Send<M>; signal: AbortSignal }) => void\n\n // Level 2 composition\n propsMsg?: (props: Record<string, unknown>) => M\n receives?: Record<string, (params: unknown) => M>\n\n /** @internal Compiler-injected */\n __dirty?: (oldState: S, newState: S) => number | [number, number]\n /** @internal Compiler-injected */\n __renderToString?: (state: S) => string\n /** @internal Compiler-injected */\n __msgSchema?: object\n /** @internal Compiler-injected — maps top-level state field → dirty-mask bit(s) */\n __maskLegend?: Record<string, number>\n /** @internal Compiler-injected — source-file location of the component() call */\n __componentMeta?: { file: string; line: number }\n /** @internal Compiler-injected — shape of the State type (for introspection) */\n __stateSchema?: object\n /** @internal Compiler-injected — Effect union schema (for introspection) */\n __effectSchema?: object\n /** @internal Compiler-injected — replaces generic Phase 1 + Phase 2 loop */\n __update?: (\n state: S,\n dirty: number,\n bindings: Binding[],\n blocks: StructuralBlock[],\n bindingsBeforePhase1: number,\n ) => void\n /** @internal Compiler-injected — per-message-type specialized handlers.\n * Bypass the entire processMessages pipeline for single-message updates. */\n __handlers?: Record<string, (inst: object, msg: unknown) => [S, E[]]>\n}\n\nexport type Send<M> = (msg: M) => void\n\n/**\n * Type-erased component definition for use at module boundaries where\n * the consumer's `S`, `M`, `E` are internal and invisible to the caller.\n *\n * Why this exists: `ComponentDef<S, M, E, D>` uses property syntax for\n * its callable fields (`init: (data: D) => ...`), and TypeScript\n * checks property syntax with strict (contravariant) variance. That's\n * the right call for user-facing type safety when authoring a\n * component (a narrower `Msg` type can't accidentally satisfy the\n * `update`'s param), but it means `ComponentDef<MyState, MyMsg, MyEffect, MyData>`\n * is NOT structurally assignable to `ComponentDef<unknown, unknown, unknown, unknown>`\n * — the `init: (data: MyData) => ...` field is contravariant in `MyData`,\n * so widening to `unknown` is rejected.\n *\n * `AnyComponentDef` (and `LazyDef<D>` below) declare the same fields\n * using **method syntax** (`init(data: D): ...`), which TypeScript\n * checks bivariantly. Concrete `ComponentDef<S, M, E, D>` assigns into\n * these structurally without any `widenDef` helper at the callsite.\n *\n * Used by every API that accepts an opaque component definition at a\n * module boundary:\n *\n * - `child({ def })`\n * - `lazy({ loader })` — returns `LazyDef<D>` so the loader's `D` survives\n * - `createOnRenderClient({ Layout })` (from `@llui/vike`)\n * - `createOnRenderHtml({ Layout })` (from `@llui/vike`)\n *\n * The `D` parameter is `unknown` here — `child()` doesn't pass init\n * data through, and `Layout` callers pass route-supplied data whose\n * shape is unknown at the type-erased boundary. Use `LazyDef<D>` when\n * you need to preserve the init data shape (the lazy loader case).\n */\nexport interface AnyComponentDef {\n name: string\n init(data: unknown): [unknown, unknown[]]\n update(state: unknown, msg: unknown): [unknown, unknown[]]\n view(h: unknown): Node[]\n onEffect?: unknown\n propsMsg?: unknown\n receives?: unknown\n __dirty?: unknown\n __renderToString?: unknown\n __msgSchema?: unknown\n __maskLegend?: unknown\n __componentMeta?: unknown\n __stateSchema?: unknown\n __effectSchema?: unknown\n __update?: unknown\n __handlers?: unknown\n}\n\n/**\n * Type-erased component definition for use at module boundaries where the\n * loaded component's S, M, E are internal and invisible to the caller.\n * Only `D` (init data) survives because the caller provides it.\n *\n * `ComponentDef<S, M, E, D>` is structurally assignable to `LazyDef<D>`\n * for any S, M, E — `view: (h: unknown) => Node[]` accepts any View via\n * contravariance, and all other fields widen to `unknown` return types.\n *\n * Used by `lazy()` as the loader's return type. Use `AnyComponentDef`\n * (above) when D is also opaque — most other adapter-layer APIs.\n */\nexport interface LazyDef<D = void> {\n name: string\n // Method syntax — TypeScript checks methods bivariantly, so\n // ComponentDef<S, M, E, D>'s concrete (state: S, msg: M) => ...\n // assigns here even though S/M ≠ unknown. Property syntax would\n // be contravariant and reject the assignment.\n init(data: D): [unknown, unknown[]]\n update(state: unknown, msg: unknown): [unknown, unknown[]]\n view(h: unknown): Node[]\n onEffect?: unknown\n propsMsg?: unknown\n receives?: unknown\n __dirty?: unknown\n __renderToString?: unknown\n __msgSchema?: unknown\n __maskLegend?: unknown\n __componentMeta?: unknown\n __stateSchema?: unknown\n __effectSchema?: unknown\n __update?: unknown\n __handlers?: unknown\n}\n\n/**\n * Maps a value shape to a reactive-props shape: every field becomes an accessor\n * `(s: S) => V`. Use for Level-1 view function signatures.\n *\n * ```ts\n * type ToolbarData = { tools: Tool[]; theme: 'light' | 'dark' }\n *\n * export function toolbar<S>(props: Props<ToolbarData, S>, send: Send<Msg>) {\n * return [div({ class: props.theme }, [each({ items: props.tools, ... })])]\n * }\n *\n * // Caller — TypeScript enforces per-field accessors; passing a raw value errors:\n * toolbar({ tools: (s: State) => s.tools, theme: (s) => s.theme }, send)\n * ```\n */\nexport type Props<T, S> = {\n [K in keyof T]: (s: S) => T[K]\n}\n\n// ── App Handle ────────────────────────────────────────────────────\n\nexport interface AppHandle {\n dispose(): void\n flush(): void\n /**\n * Dispatch a message into the mounted instance from outside its\n * normal view-bound `send` channel. Useful for adapter layers that\n * need to push updates into a long-lived instance — e.g.\n * `@llui/vike`'s persistent-layout chain pushes layout-data updates\n * into surviving layer instances on client navigation when their\n * `propsMsg` translates the new data into a state-update message.\n *\n * Messages are queued through the same path as `view`-side `send`\n * calls — they batch into the next microtask and process via the\n * normal update loop. Calling `send` after `dispose` is a no-op.\n */\n send(msg: unknown): void\n}\n\n// ── Lifetime ─────────────────────────────────────────────────────────\n\nexport interface Lifetime {\n id: number\n parent: Lifetime | null\n children: Lifetime[]\n disposers: Array<() => void>\n bindings: Binding[]\n /** Per-item updaters — called directly by each() when item changes, bypassing Phase 2 */\n itemUpdaters: Array<() => void>\n /**\n * @internal dev-only back-reference to the owning ComponentInstance.\n * Populated on the root scope by `installDevTools` so `disposeLifetime`\n * can walk up the scope chain and emit DisposerEvents into the\n * instance's `_disposerLog`. Undefined in production.\n */\n instance?: ComponentInstance\n /**\n * @internal dev-only cause hint. Structural primitives (branch, each,\n * child, mountApp teardown) set this field immediately before calling\n * `disposeLifetime`; the dispose path reads it once to stamp the emitted\n * DisposerEvent. Left undefined, `disposeLifetime` falls back to\n * `'component-unmount'`. Undefined in production.\n */\n disposalCause?: DisposerEvent['cause']\n /** @internal dev-only — populated by structural primitives for scope-tree classification */\n _kind?: 'root' | 'show' | 'each' | 'branch' | 'scope' | 'child' | 'portal' | 'foreign'\n}\n\nexport interface LifetimeNode {\n scopeId: string\n kind: 'root' | 'show' | 'each' | 'branch' | 'scope' | 'child' | 'portal' | 'foreign'\n active: boolean\n children: LifetimeNode[]\n}\n\n// ── Binding ───────────────────────────────────────────────────────\n\n/**\n * Binding output kinds.\n *\n * `'text' | 'prop' | 'attr' | 'class' | 'style'` write their accessor's\n * return value to the DOM. `'effect'` is a side-effect-only watcher:\n * the accessor is invoked every Phase 2 tick its mask is hit, but its\n * return value is discarded and `applyBinding` is a no-op. Used by\n * `child()` to fire the prop-diff/propsMsg cascade on parent updates\n * without the cost of stringifying the returned props bag onto a\n * detached anchor node every render.\n */\nexport type BindingKind = 'text' | 'prop' | 'attr' | 'class' | 'style' | 'effect'\n\nexport interface Binding {\n mask: number\n accessor: (state: unknown) => unknown\n lastValue: unknown\n kind: BindingKind\n node: Node\n key?: string\n ownerLifetime: Lifetime\n perItem: boolean\n dead: boolean\n}\n\n// ── Structural Primitives ─────────────────────────────────────────\n\nexport interface TransitionOptions {\n enter?: (nodes: Node[]) => void | Promise<void>\n leave?: (nodes: Node[]) => void | Promise<void>\n onTransition?: (ctx: { entering: Node[]; leaving: Node[]; parent: Node }) => void | Promise<void>\n}\n\ninterface BranchOptionsBase<_S, _M> extends TransitionOptions {\n /**\n * @internal Set by `show()` / `scope()` sugar when delegating to\n * `branch()`, so the dev-only disposer log can report `'show-hide'` /\n * `'scope-rebuild'` instead of the default `'branch-swap'` for the\n * leaving arm. User code should not set this directly.\n */\n __disposalCause?: DisposerEvent['cause']\n /** @internal Compiler-injected mask of paths read by `on`. */\n __mask?: number\n}\n\n/**\n * All cases covered by `cases` — no default allowed (would be dead code).\n */\ntype BranchOptionsExhaustive<S, M, K extends string> = BranchOptionsBase<S, M> & {\n on: (s: S) => K\n cases: { [P in K]: (h: View<S, M>) => Node[] }\n default?: never\n}\n\n/**\n * `cases` may cover some but not all keys; `default` handles the rest.\n */\ntype BranchOptionsNonExhaustive<S, M, K extends string> = BranchOptionsBase<S, M> & {\n on: (s: S) => K\n cases?: { [P in K]?: (h: View<S, M>) => Node[] }\n default: (h: View<S, M>) => Node[]\n}\n\n/**\n * `on` returns a wide `string` — exhaustiveness cannot be verified at\n * compile time (the key domain is infinite). Lenient: `default` is\n * optional so existing call sites that predate exhaustiveness typing\n * continue to compile. Authors who want the gate opt in by narrowing\n * `on`'s return type to a literal union.\n */\ntype BranchOptionsWide<S, M> = BranchOptionsBase<S, M> & {\n on: (s: S) => string\n cases?: Record<string, (h: View<S, M>) => Node[]>\n default?: (h: View<S, M>) => Node[]\n}\n\n/**\n * Options for `branch()`.\n *\n * When `on` returns a literal string union (e.g. `'idle' | 'loading'\n * | 'done'`), TypeScript enforces exhaustiveness: either every union\n * member has a case (and `default` is disallowed as unreachable), or\n * `default` is required to cover the remainder. When `on` returns a\n * wide `string`, `default` stays optional — exhaustiveness isn't\n * meaningful for an unbounded domain.\n *\n * `cases` is optional when `default` is present; `branch({ on, default })`\n * is the canonical dynamic-rebuild shape — `scope()` sugar wraps\n * exactly this form.\n */\nexport type BranchOptions<S, M = unknown, K extends string = string> = string extends K\n ? BranchOptionsWide<S, M>\n : BranchOptionsExhaustive<S, M, K> | BranchOptionsNonExhaustive<S, M, K>\n\nexport interface ShowOptions<S, M = unknown> extends TransitionOptions {\n when: (s: S) => boolean\n render: (h: View<S, M>) => Node[]\n fallback?: (h: View<S, M>) => Node[]\n}\n\n/**\n * Options for `scope()` — rebuilds a subtree when `on(state)` changes.\n *\n * Sugar over `branch({ on, cases: {}, default: render, __disposalCause: 'scope-rebuild' })`.\n * Use when the key is dynamic (e.g. an epoch counter bumped from the\n * outside) and you want a fresh arm — fresh lifetime, fresh bindings —\n * each time it changes. Combine with `sample()` inside `render` for a\n * one-shot current-state read.\n */\nexport interface ScopeOptions<S, M = unknown> extends TransitionOptions {\n on: (s: S) => string\n render: (h: View<S, M>) => Node[]\n /** @internal Compiler-injected mask of paths read by `on`. */\n __mask?: number\n}\n\n/**\n * Options for `each()`. The inherited `enter` / `leave` callbacks fire **per item**:\n * `enter(nodes)` runs after an item's DOM is inserted (including initial mount);\n * `leave(nodes)` runs before an item's DOM is removed and may return a Promise\n * to hold the DOM until the animation resolves. Setting `leave` disables the\n * bulk-clear / full-replace fast paths.\n */\n/**\n * Per-item accessor. Two access forms:\n * - `item.field` — shorthand, returns accessor for `item.current[field]`\n * - `item(t => t.expr)` — computed expressions\n *\n * In both cases the returned value is a `() => V` accessor.\n * Invoke it (`item.field()`) to read the current value imperatively.\n */\nexport type ItemAccessor<T> = {\n <R>(selector: (t: T) => R): () => R\n} & {\n [K in keyof T]-?: () => T[K]\n} & {\n /**\n * Read the whole current item. Needed when T is a primitive (where the\n * field-map branch collapses to method names like `toString`) or when\n * you want to sample the entire record rather than a single field.\n *\n * Shadows any literal `current` field on T — if T has such a field,\n * use `item(r => r.current)` to disambiguate.\n */\n current(): T\n}\n\nexport interface EachOptions<S, T, M = unknown> extends TransitionOptions {\n items: (s: S) => T[]\n key: (item: T) => string | number\n render: (opts: {\n send: Send<M>\n item: ItemAccessor<T>\n /**\n * Plain (non-Proxy) accessor factory. Compiler-output path; avoid in user code\n * (use `item.field` / `item(fn)` — more ergonomic and bypasses Proxy when compiled).\n */\n acc: <R>(selector: (t: T) => R) => () => R\n index: () => number\n /** @internal Compiler-injected — entry reference for row factory */\n entry?: Record<string, unknown>\n }) => Node[]\n}\n\nexport interface PortalOptions {\n target: HTMLElement | string\n render: () => Node[]\n}\n\nexport interface ForeignOptions<S, M, T extends Record<string, unknown>, Instance> {\n mount: (ctx: { container: HTMLElement; send: Send<M> }) => Instance\n props: (s: S) => T\n sync:\n | ((ctx: { instance: Instance; props: T; prev: T | undefined }) => void)\n | {\n [K in keyof T]?: (ctx: { instance: Instance; value: T[K]; prev: T[K] | undefined }) => void\n }\n destroy: (instance: Instance) => void\n container?: { tag?: string; attrs?: Record<string, string> }\n}\n\nexport interface ChildOptions<S, ChildM> {\n // Type-erased via AnyComponentDef so callers can pass any concrete\n // ComponentDef<S, M, E, D> without a widening helper. The runtime\n // narrows the message shape via the user-supplied `onMsg` callback,\n // which keeps `ChildM` typed at this boundary even though the def\n // itself is opaque.\n def: AnyComponentDef\n key: string | number\n props: (s: S) => Record<string, unknown>\n onMsg?: (msg: ChildM) => unknown | null\n}\n"]}
|
package/dist/update-loop.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ComponentDef,
|
|
1
|
+
import type { ComponentDef, Lifetime, Binding } from './types.js';
|
|
2
2
|
import type { StructuralBlock } from './structural.js';
|
|
3
3
|
export declare const FULL_MASK: number;
|
|
4
4
|
export declare function setAddressedDispatcher(fn: (eff: {
|
|
@@ -9,7 +9,7 @@ export interface ComponentInstance<S = unknown, M = unknown, E = unknown> {
|
|
|
9
9
|
def: ComponentDef<S, M, E>;
|
|
10
10
|
state: S;
|
|
11
11
|
initialEffects: E[];
|
|
12
|
-
|
|
12
|
+
rootLifetime: Lifetime;
|
|
13
13
|
allBindings: Binding[];
|
|
14
14
|
structuralBlocks: StructuralBlock[];
|
|
15
15
|
queue: M[];
|
|
@@ -20,7 +20,7 @@ export interface ComponentInstance<S = unknown, M = unknown, E = unknown> {
|
|
|
20
20
|
signal: AbortSignal;
|
|
21
21
|
abortController: AbortController;
|
|
22
22
|
}
|
|
23
|
-
export declare function createComponentInstance<S, M, E>(def: ComponentDef<S, M, E>, data?:
|
|
23
|
+
export declare function createComponentInstance<S, M, E, D = void>(def: ComponentDef<S, M, E, D>, data?: D, parentLifetime?: Lifetime | null): ComponentInstance<S, M, E>;
|
|
24
24
|
export declare function flushInstance<S, M, E>(inst: ComponentInstance<S, M, E>): void;
|
|
25
25
|
/**
|
|
26
26
|
* Dev-only: overwrite instance state and re-run both phases with FULL_MASK
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-loop.d.ts","sourceRoot":"","sources":["../src/update-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"update-loop.d.ts","sourceRoot":"","sources":["../src/update-loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAatD,eAAO,MAAM,SAAS,QAAiB,CAAA;AAMvC,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,CAAC,GAAG,EAAE;IAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,GAClE,IAAI,CAEN;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACtE,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1B,KAAK,EAAE,CAAC,CAAA;IACR,cAAc,EAAE,CAAC,EAAE,CAAA;IACnB,YAAY,EAAE,QAAQ,CAAA;IACtB,WAAW,EAAE,OAAO,EAAE,CAAA;IACtB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,KAAK,EAAE,CAAC,EAAE,CAAA;IACV,kBAAkB,EAAE,OAAO,CAAA;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,CAAC,EAAE,CAAA;IAChB,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,eAAe,EAAE,eAAe,CAAA;CAiCjC;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,EACvD,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,IAAI,CAAC,EAAE,CAAC,EACR,cAAc,GAAE,QAAQ,GAAG,IAAW,GACrC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CA4C5B;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAI7E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAqCxF;AA0GD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,iBAAiB,EACvB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAoCtB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EAAE,EACnB,oBAAoB,EAAE,MAAM,EAC5B,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CAuDN"}
|
package/dist/update-loop.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLifetime } from './lifetime.js';
|
|
2
2
|
import { applyBinding } from './binding.js';
|
|
3
3
|
import { setCurrentDirtyMask } from './primitives/memo.js';
|
|
4
4
|
export const FULL_MASK = 0xffffffff | 0;
|
|
@@ -7,20 +7,24 @@ let addressedDispatcher = null;
|
|
|
7
7
|
export function setAddressedDispatcher(fn) {
|
|
8
8
|
addressedDispatcher = fn;
|
|
9
9
|
}
|
|
10
|
-
export function createComponentInstance(def, data,
|
|
10
|
+
export function createComponentInstance(def, data, parentLifetime = null) {
|
|
11
11
|
const [initialState, initialEffects] = def.init(data);
|
|
12
12
|
const controller = new AbortController();
|
|
13
13
|
const inst = {
|
|
14
|
-
def,
|
|
14
|
+
// `def` carries an arbitrary `D` for typed init data, but after init
|
|
15
|
+
// has run the runtime never touches `def.init` again — update/view/
|
|
16
|
+
// onEffect and HMR replacement don't depend on D. Cast to the
|
|
17
|
+
// D=void instance storage shape here.
|
|
18
|
+
def: def,
|
|
15
19
|
state: initialState,
|
|
16
20
|
initialEffects,
|
|
17
|
-
// When `
|
|
21
|
+
// When `parentLifetime` is provided the instance's rootLifetime becomes a
|
|
18
22
|
// child of that scope. This is how persistent layouts wire pages
|
|
19
|
-
// into the layout's scope tree: the page's
|
|
23
|
+
// into the layout's scope tree: the page's rootLifetime is parented at
|
|
20
24
|
// the layout's pageSlot() point so `useContext` lookups flow layout
|
|
21
25
|
// → page, and scope disposal cascades correctly. Mount paths that
|
|
22
|
-
// don't pass
|
|
23
|
-
|
|
26
|
+
// don't pass parentLifetime get the classic detached root.
|
|
27
|
+
rootLifetime: createLifetime(parentLifetime),
|
|
24
28
|
allBindings: [],
|
|
25
29
|
structuralBlocks: [],
|
|
26
30
|
queue: [],
|
|
@@ -40,7 +44,7 @@ export function createComponentInstance(def, data, parentScope = null) {
|
|
|
40
44
|
}
|
|
41
45
|
},
|
|
42
46
|
};
|
|
43
|
-
inst.
|
|
47
|
+
inst.rootLifetime._kind = 'root';
|
|
44
48
|
return inst;
|
|
45
49
|
}
|
|
46
50
|
export function flushInstance(inst) {
|