@oddsquad/vite-plugin-lit 0.7.0 → 0.8.0
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/CHANGELOG.md +29 -0
- package/LICENSE +1 -1
- package/README.md +14 -7
- package/bin.mjs +2 -8
- package/client.d.ts +0 -6
- package/dist/client/assets/{browser-agent-rpc-BXhoSh1z-BuCvPGjS.js → browser-agent-rpc-BXhoSh1z-ybEeG-x9.js} +2 -2
- package/dist/client/assets/{browser-agent-rpc-BXhoSh1z-BuCvPGjS.js.map → browser-agent-rpc-BXhoSh1z-ybEeG-x9.js.map} +1 -1
- package/dist/client/assets/{index-D632jo79.js → index-CgkhETVR.js} +2 -144
- package/dist/client/assets/index-CgkhETVR.js.map +1 -0
- package/dist/client/index.html +1 -1
- package/dist/standalone/lit-devtools.js +2 -105
- package/index.d.ts +0 -5
- package/index.d.ts.map +1 -1
- package/index.js +1 -5
- package/index.js.map +1 -1
- package/lib/color-scheme.d.ts +0 -5
- package/lib/color-scheme.d.ts.map +1 -1
- package/lib/color-scheme.js +0 -5
- package/lib/color-scheme.js.map +1 -1
- package/lib/confine.d.ts +0 -5
- package/lib/confine.d.ts.map +1 -1
- package/lib/confine.js +0 -5
- package/lib/confine.js.map +1 -1
- package/lib/devframe/allowed-origins.d.ts +11 -3
- package/lib/devframe/allowed-origins.d.ts.map +1 -1
- package/lib/devframe/allowed-origins.js +0 -5
- package/lib/devframe/allowed-origins.js.map +1 -1
- package/lib/devframe/definition.d.ts +7 -3
- package/lib/devframe/definition.d.ts.map +1 -1
- package/lib/devframe/definition.js +1 -6
- package/lib/devframe/definition.js.map +1 -1
- package/lib/devframe/icon.d.ts +0 -5
- package/lib/devframe/icon.d.ts.map +1 -1
- package/lib/devframe/icon.js +0 -5
- package/lib/devframe/icon.js.map +1 -1
- package/lib/devframe/launch-editor.d.ts +0 -5
- package/lib/devframe/launch-editor.d.ts.map +1 -1
- package/lib/devframe/launch-editor.js +0 -5
- package/lib/devframe/launch-editor.js.map +1 -1
- package/lib/devframe/paths.d.ts +8 -3
- package/lib/devframe/paths.d.ts.map +1 -1
- package/lib/devframe/paths.js +0 -5
- package/lib/devframe/paths.js.map +1 -1
- package/lib/devframe/protocol.d.ts +6 -3
- package/lib/devframe/protocol.d.ts.map +1 -1
- package/lib/devframe/protocol.js +0 -5
- package/lib/devframe/protocol.js.map +1 -1
- package/lib/devframe/rpc-source.d.ts +15 -3
- package/lib/devframe/rpc-source.d.ts.map +1 -1
- package/lib/devframe/rpc-source.js +0 -5
- package/lib/devframe/rpc-source.js.map +1 -1
- package/lib/devframe/source.d.ts +0 -5
- package/lib/devframe/source.d.ts.map +1 -1
- package/lib/devframe/source.js +7 -3
- package/lib/devframe/source.js.map +1 -1
- package/lib/devframe/vite.d.ts +0 -5
- package/lib/devframe/vite.d.ts.map +1 -1
- package/lib/devframe/vite.js +16 -3
- package/lib/devframe/vite.js.map +1 -1
- package/lib/http.d.ts +0 -5
- package/lib/http.d.ts.map +1 -1
- package/lib/http.js +0 -5
- package/lib/http.js.map +1 -1
- package/lib/icons.d.ts +0 -5
- package/lib/icons.d.ts.map +1 -1
- package/lib/icons.js +0 -5
- package/lib/icons.js.map +1 -1
- package/lib/options.d.ts +0 -5
- package/lib/options.d.ts.map +1 -1
- package/lib/options.js +0 -5
- package/lib/options.js.map +1 -1
- package/lib/override-baselines.d.ts +0 -5
- package/lib/override-baselines.d.ts.map +1 -1
- package/lib/override-baselines.js +0 -5
- package/lib/override-baselines.js.map +1 -1
- package/lib/plugin.d.ts +0 -5
- package/lib/plugin.d.ts.map +1 -1
- package/lib/plugin.js +0 -5
- package/lib/plugin.js.map +1 -1
- package/lib/plugins/css-literals.d.ts +0 -5
- package/lib/plugins/css-literals.d.ts.map +1 -1
- package/lib/plugins/css-literals.js +0 -5
- package/lib/plugins/css-literals.js.map +1 -1
- package/lib/plugins/css-queries.d.ts +0 -5
- package/lib/plugins/css-queries.d.ts.map +1 -1
- package/lib/plugins/css-queries.js +0 -5
- package/lib/plugins/css-queries.js.map +1 -1
- package/lib/plugins/open-in-editor.d.ts +0 -5
- package/lib/plugins/open-in-editor.d.ts.map +1 -1
- package/lib/plugins/open-in-editor.js +0 -5
- package/lib/plugins/open-in-editor.js.map +1 -1
- package/lib/plugins/private-fields.d.ts +0 -5
- package/lib/plugins/private-fields.d.ts.map +1 -1
- package/lib/plugins/private-fields.js +0 -5
- package/lib/plugins/private-fields.js.map +1 -1
- package/lib/plugins/shared.d.ts +0 -5
- package/lib/plugins/shared.d.ts.map +1 -1
- package/lib/plugins/shared.js +0 -5
- package/lib/plugins/shared.js.map +1 -1
- package/lib/plugins/timeline-virtual.d.ts +0 -5
- package/lib/plugins/timeline-virtual.d.ts.map +1 -1
- package/lib/plugins/timeline-virtual.js +0 -5
- package/lib/plugins/timeline-virtual.js.map +1 -1
- package/lib/runtime/child-state.d.ts +0 -5
- package/lib/runtime/child-state.d.ts.map +1 -1
- package/lib/runtime/child-state.js +18 -3
- package/lib/runtime/child-state.js.map +1 -1
- package/lib/runtime/css.d.ts +14 -3
- package/lib/runtime/css.d.ts.map +1 -1
- package/lib/runtime/css.js +3 -5
- package/lib/runtime/css.js.map +1 -1
- package/lib/runtime/edge-panel.d.ts +8 -3
- package/lib/runtime/edge-panel.d.ts.map +1 -1
- package/lib/runtime/edge-panel.js +0 -5
- package/lib/runtime/edge-panel.js.map +1 -1
- package/lib/runtime/fonts.d.ts +0 -5
- package/lib/runtime/fonts.d.ts.map +1 -1
- package/lib/runtime/fonts.js +0 -5
- package/lib/runtime/fonts.js.map +1 -1
- package/lib/runtime/indicator.d.ts +3 -3
- package/lib/runtime/indicator.js +0 -5
- package/lib/runtime/indicator.js.map +1 -1
- package/lib/runtime/inspector/collect.d.ts +3 -3
- package/lib/runtime/inspector/collect.d.ts.map +1 -1
- package/lib/runtime/inspector/collect.js +0 -5
- package/lib/runtime/inspector/collect.js.map +1 -1
- package/lib/runtime/inspector/highlight.d.ts +10 -3
- package/lib/runtime/inspector/highlight.d.ts.map +1 -1
- package/lib/runtime/inspector/highlight.js +0 -5
- package/lib/runtime/inspector/highlight.js.map +1 -1
- package/lib/runtime/inspector/install.d.ts +6 -3
- package/lib/runtime/inspector/install.d.ts.map +1 -1
- package/lib/runtime/inspector/install.js +0 -5
- package/lib/runtime/inspector/install.js.map +1 -1
- package/lib/runtime/inspector/serialize.d.ts +4 -3
- package/lib/runtime/inspector/serialize.d.ts.map +1 -1
- package/lib/runtime/inspector/serialize.js +0 -5
- package/lib/runtime/inspector/serialize.js.map +1 -1
- package/lib/runtime/intern.d.ts +11 -3
- package/lib/runtime/intern.d.ts.map +1 -1
- package/lib/runtime/intern.js +11 -3
- package/lib/runtime/intern.js.map +1 -1
- package/lib/runtime/overrides.d.ts +3 -3
- package/lib/runtime/overrides.d.ts.map +1 -1
- package/lib/runtime/overrides.js +0 -5
- package/lib/runtime/overrides.js.map +1 -1
- package/lib/runtime/page-channel.d.ts +0 -5
- package/lib/runtime/page-channel.d.ts.map +1 -1
- package/lib/runtime/page-channel.js +13 -3
- package/lib/runtime/page-channel.js.map +1 -1
- package/lib/runtime/patch.d.ts +0 -5
- package/lib/runtime/patch.d.ts.map +1 -1
- package/lib/runtime/patch.js +0 -5
- package/lib/runtime/patch.js.map +1 -1
- package/lib/runtime/rpc-transport.d.ts +13 -3
- package/lib/runtime/rpc-transport.d.ts.map +1 -1
- package/lib/runtime/rpc-transport.js +3 -5
- package/lib/runtime/rpc-transport.js.map +1 -1
- package/lib/runtime/source-meta.d.ts +0 -5
- package/lib/runtime/source-meta.d.ts.map +1 -1
- package/lib/runtime/source-meta.js +0 -5
- package/lib/runtime/source-meta.js.map +1 -1
- package/lib/runtime/source-overlay/editors.d.ts +0 -5
- package/lib/runtime/source-overlay/editors.d.ts.map +1 -1
- package/lib/runtime/source-overlay/editors.js +0 -5
- package/lib/runtime/source-overlay/editors.js.map +1 -1
- package/lib/runtime/source-overlay/mask-path.d.ts +0 -5
- package/lib/runtime/source-overlay/mask-path.d.ts.map +1 -1
- package/lib/runtime/source-overlay/mask-path.js +0 -5
- package/lib/runtime/source-overlay/mask-path.js.map +1 -1
- package/lib/runtime/source-overlay/overlay-element.d.ts +0 -5
- package/lib/runtime/source-overlay/overlay-element.d.ts.map +1 -1
- package/lib/runtime/source-overlay/overlay-element.js +0 -5
- package/lib/runtime/source-overlay/overlay-element.js.map +1 -1
- package/lib/runtime/source-overlay/source-host.d.ts +0 -5
- package/lib/runtime/source-overlay/source-host.d.ts.map +1 -1
- package/lib/runtime/source-overlay/source-host.js +0 -5
- package/lib/runtime/source-overlay/source-host.js.map +1 -1
- package/lib/runtime/source-overlay/template.d.ts +0 -5
- package/lib/runtime/source-overlay/template.d.ts.map +1 -1
- package/lib/runtime/source-overlay/template.js +0 -5
- package/lib/runtime/source-overlay/template.js.map +1 -1
- package/lib/runtime/source-overlay.d.ts +0 -5
- package/lib/runtime/source-overlay.d.ts.map +1 -1
- package/lib/runtime/source-overlay.js +0 -5
- package/lib/runtime/source-overlay.js.map +1 -1
- package/lib/runtime/standalone.d.ts +0 -5
- package/lib/runtime/standalone.d.ts.map +1 -1
- package/lib/runtime/standalone.js +0 -5
- package/lib/runtime/standalone.js.map +1 -1
- package/lib/runtime/timeline/chrome-tracks.d.ts +0 -5
- package/lib/runtime/timeline/chrome-tracks.d.ts.map +1 -1
- package/lib/runtime/timeline/chrome-tracks.js +5 -3
- package/lib/runtime/timeline/chrome-tracks.js.map +1 -1
- package/lib/runtime/timeline/clock.d.ts +7 -3
- package/lib/runtime/timeline/clock.d.ts.map +1 -1
- package/lib/runtime/timeline/clock.js +0 -5
- package/lib/runtime/timeline/clock.js.map +1 -1
- package/lib/runtime/timeline/flash.d.ts +0 -5
- package/lib/runtime/timeline/flash.d.ts.map +1 -1
- package/lib/runtime/timeline/flash.js +15 -3
- package/lib/runtime/timeline/flash.js.map +1 -1
- package/lib/runtime/timeline/identity.d.ts +0 -5
- package/lib/runtime/timeline/identity.d.ts.map +1 -1
- package/lib/runtime/timeline/identity.js +9 -3
- package/lib/runtime/timeline/identity.js.map +1 -1
- package/lib/runtime/timeline/input.d.ts +0 -5
- package/lib/runtime/timeline/input.d.ts.map +1 -1
- package/lib/runtime/timeline/input.js +2 -3
- package/lib/runtime/timeline/input.js.map +1 -1
- package/lib/runtime/timeline/install.d.ts +11 -3
- package/lib/runtime/timeline/install.d.ts.map +1 -1
- package/lib/runtime/timeline/install.js +0 -5
- package/lib/runtime/timeline/install.js.map +1 -1
- package/lib/runtime/timeline/lifecycle.d.ts +13 -3
- package/lib/runtime/timeline/lifecycle.d.ts.map +1 -1
- package/lib/runtime/timeline/lifecycle.js +0 -5
- package/lib/runtime/timeline/lifecycle.js.map +1 -1
- package/lib/runtime/timeline/public-api.d.ts +6 -3
- package/lib/runtime/timeline/public-api.d.ts.map +1 -1
- package/lib/runtime/timeline/public-api.js +0 -5
- package/lib/runtime/timeline/public-api.js.map +1 -1
- package/lib/runtime/timeline/render.d.ts +0 -5
- package/lib/runtime/timeline/render.d.ts.map +1 -1
- package/lib/runtime/timeline/render.js +21 -3
- package/lib/runtime/timeline/render.js.map +1 -1
- package/lib/runtime/timeline/transport.d.ts +0 -5
- package/lib/runtime/timeline/transport.d.ts.map +1 -1
- package/lib/runtime/timeline/transport.js +10 -3
- package/lib/runtime/timeline/transport.js.map +1 -1
- package/lib/segmented-tabs.d.ts +0 -5
- package/lib/segmented-tabs.d.ts.map +1 -1
- package/lib/segmented-tabs.js +0 -5
- package/lib/segmented-tabs.js.map +1 -1
- package/lib/snapshot.d.ts +11 -3
- package/lib/snapshot.d.ts.map +1 -1
- package/lib/snapshot.js +0 -5
- package/lib/snapshot.js.map +1 -1
- package/lib/source-meta.d.ts +0 -5
- package/lib/source-meta.d.ts.map +1 -1
- package/lib/source-meta.js +0 -5
- package/lib/source-meta.js.map +1 -1
- package/lib/timeline/derive.d.ts +0 -5
- package/lib/timeline/derive.d.ts.map +1 -1
- package/lib/timeline/derive.js +22 -3
- package/lib/timeline/derive.js.map +1 -1
- package/lib/timeline/filter.d.ts +0 -5
- package/lib/timeline/filter.d.ts.map +1 -1
- package/lib/timeline/filter.js +6 -3
- package/lib/timeline/filter.js.map +1 -1
- package/lib/timeline/tracks.d.ts +0 -5
- package/lib/timeline/tracks.d.ts.map +1 -1
- package/lib/timeline/tracks.js +12 -3
- package/lib/timeline/tracks.js.map +1 -1
- package/lib/tokens.d.ts +0 -5
- package/lib/tokens.d.ts.map +1 -1
- package/lib/tokens.js +0 -5
- package/lib/tokens.js.map +1 -1
- package/lib/transform.d.ts +0 -5
- package/lib/transform.d.ts.map +1 -1
- package/lib/transform.js +0 -5
- package/lib/transform.js.map +1 -1
- package/lib/types.d.ts +10 -5
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +0 -5
- package/lib/types.js.map +1 -1
- package/lib/wrap-table.d.ts +0 -5
- package/lib/wrap-table.d.ts.map +1 -1
- package/lib/wrap-table.js +12 -3
- package/lib/wrap-table.js.map +1 -1
- package/package.json +2 -2
- package/types/hmr-incompatibility.d.ts +0 -5
- package/types/hmr-incompatibility.d.ts.map +1 -1
- package/types/hmr-incompatibility.js +13 -3
- package/types/hmr-incompatibility.js.map +1 -1
- package/types/in-page.d.ts +0 -5
- package/types/in-page.d.ts.map +1 -1
- package/types/in-page.js +0 -5
- package/types/in-page.js.map +1 -1
- package/types/inspector.d.ts +0 -5
- package/types/inspector.d.ts.map +1 -1
- package/types/inspector.js +13 -3
- package/types/inspector.js.map +1 -1
- package/types/snapshot.d.ts +0 -5
- package/types/snapshot.d.ts.map +1 -1
- package/types/snapshot.js +12 -3
- package/types/snapshot.js.map +1 -1
- package/types/timeline.d.ts +0 -5
- package/types/timeline.d.ts.map +1 -1
- package/types/timeline.js +0 -5
- package/types/timeline.js.map +1 -1
- package/dist/client/assets/index-D632jo79.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-state.js","sourceRoot":"","sources":["../../src/lib/runtime/child-state.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/**\n * Carries child element state across a template re-instantiation.\n *\n * When a hot patch changes a template's text, lit-html sees a new template,\n * clones fresh DOM and swaps it in: every custom element inside the edited\n * template is re-created and starts from its defaults. For a short window\n * after a hot patch this module pairs each element dropped from a root with\n * the next freshly created element of the same tag connected in that root\n * (FIFO, i.e. document order), then either copies the old element's state\n * onto the new one (`'transfer'`) or, where the new element carries no\n * bindings, puts the old element back in its place (`'reuse'`).\n *\n * Dependency-free and duck-typed like `patch.ts`. The lit-html internals it\n * reads (`_$litPart$`, `_$committedValue`, `_$template`, `_$parts`,\n * `_$startNode`, `_$endNode`) are looked up by their development names first\n * and then by the stable minified names lit's prod build gives them\n * (`_$AH`, `_$AD`, `_$AV`, `_$AA`, `_$AB`). Every access is guarded; when the\n * part tree can't be read, transfer skips only attribute-driven keys and\n * reuse falls back to transfer.\n */\n\nexport type ChildStateMode = 'reset' | 'transfer' | 'reuse';\n\n/** `Symbol.for` description prefix of the dev-only `#private` rewrite. */\nexport const PRIVATE_KEY_PREFIX = '@oddsquad/vite-plugin-lit#private:';\n\n/** Hard cap on how long a transfer window stays open. */\nexport const WINDOW_CAP_MS = 1000;\n\nconst ATTRIBUTE_PART = 1;\nconst CHILD_PART = 2;\nconst PROPERTY_PART = 3;\nconst BOOLEAN_PART = 4;\n\n/** Dev name, then the stable minified name from lit-html's prod build. */\nconst COMMITTED = ['_$committedValue', '_$AH'] as const;\nconst TEMPLATE = ['_$template', '_$AD'] as const;\nconst PARTS = ['_$parts', '_$AV'] as const;\nconst START = ['_$startNode', '_$AA'] as const;\nconst END = ['_$endNode', '_$AB'] as const;\nconst LIT_PART = '_$litPart$';\n\n/** Duck-typed lit-html part. */\nexport interface PartLike {\n type: number;\n element?: unknown;\n name?: unknown;\n}\n\n/** Duck-typed element the window works with. */\nexport type ElementLike = HTMLElement & {\n renderRoot?: unknown;\n hasUpdated?: boolean;\n updateComplete?: unknown;\n};\n\ninterface CtorLike {\n elementProperties?: Map<PropertyKey, {attribute?: unknown} | undefined>;\n __attributeToPropertyMap?: unknown;\n}\n\nconst internal = (\n o: unknown,\n [dev, prod]: readonly [string, string]\n): unknown => {\n if (o === null || typeof o !== 'object') {\n return undefined;\n }\n const r = o as Record<string, unknown>;\n return dev in r ? r[dev] : r[prod];\n};\n\nconst isPart = (p: unknown): p is PartLike =>\n p !== null &&\n typeof p === 'object' &&\n typeof (p as PartLike).type === 'number';\n\nconst MAX_PARTS = 100_000;\n\n/** Pushes `part` and, through child parts' committed values, every part below. */\nconst walkParts = (part: PartLike, out: PartLike[]): void => {\n if (out.length > MAX_PARTS) {\n throw new Error('part tree too large');\n }\n out.push(part);\n if (part.type !== CHILD_PART) {\n return;\n }\n const value = internal(part, COMMITTED);\n if (Array.isArray(value)) {\n // An iterable's committed value is an array of ChildParts.\n for (const child of value) {\n if (isPart(child)) {\n walkParts(child, out);\n }\n }\n return;\n }\n const parts = internal(value, PARTS);\n if (Array.isArray(parts) && internal(value, TEMPLATE) !== undefined) {\n for (const child of parts) {\n // Entries may be undefined (parts removed by the polyfill/hydration).\n if (isPart(child)) {\n walkParts(child, out);\n }\n }\n }\n};\n\n/**\n * Every lit-html part rendered into the tree `el` lives in: the parts of each\n * render container (`_$litPart$`) among `el`'s ancestors up to its root.\n * `undefined` when `el` isn't in a tree or the walk hits a surprise.\n */\nexport const partsAround = (el: Node): PartLike[] | undefined => {\n try {\n const out: PartLike[] = [];\n let node: Node | null = el.parentNode;\n if (node === null) {\n return undefined;\n }\n while (node !== null) {\n const root = (node as unknown as Record<string, unknown>)[LIT_PART];\n if (isPart(root)) {\n walkParts(root, out);\n }\n node = node.parentNode;\n }\n return out;\n } catch {\n return undefined;\n }\n};\n\n/** Attribute name → reactive property key for an element's class. */\nconst attributeMap = (ctor: CtorLike): Map<string, PropertyKey> => {\n // Dev builds keep the name; prod mangles it, so rebuild from options.\n const own = ctor.__attributeToPropertyMap;\n if (own instanceof Map) {\n return own as Map<string, PropertyKey>;\n }\n const map = new Map<string, PropertyKey>();\n const props = ctor.elementProperties;\n if (!(props instanceof Map)) {\n return map;\n }\n for (const [key, options] of props) {\n const attribute = options?.attribute;\n if (attribute === false) {\n continue;\n }\n if (typeof attribute === 'string') {\n map.set(attribute, key);\n } else if (typeof key === 'string') {\n map.set(key.toLowerCase(), key);\n }\n }\n return map;\n};\n\nconst propertyKeys = (ctor: CtorLike | undefined): PropertyKey[] => {\n const props = ctor?.elementProperties;\n return props instanceof Map ? [...props.keys()] : [];\n};\n\n/**\n * Reactive property keys the new element already got from its template:\n * keys whose attribute is present on it (static attributes), plus, when the\n * part tree could be read, keys bound by a property, boolean or attribute\n * part targeting it.\n */\nexport const templateDrivenKeys = (\n el: ElementLike,\n parts: readonly PartLike[] | undefined\n): Set<PropertyKey> => {\n const keys = new Set<PropertyKey>();\n const ctor = el.constructor as CtorLike;\n const attrs = attributeMap(ctor);\n try {\n for (const attr of Array.from(el.attributes)) {\n const key = attrs.get(attr.name.toLowerCase());\n if (key !== undefined) {\n keys.add(key);\n }\n }\n } catch {\n // No attributes to read.\n }\n for (const part of parts ?? []) {\n if (part.element !== el || typeof part.name !== 'string') {\n continue;\n }\n if (part.type === PROPERTY_PART) {\n keys.add(part.name);\n } else if (part.type === ATTRIBUTE_PART || part.type === BOOLEAN_PART) {\n keys.add(attrs.get(part.name.toLowerCase()) ?? part.name);\n }\n }\n return keys;\n};\n\n/** Own symbol keys of `el` minted by the dev-only `#private` rewrite. */\nexport const privateKeys = (el: object): symbol[] =>\n Object.getOwnPropertySymbols(el).filter((sym) =>\n (Symbol.keyFor(sym) ?? '').startsWith(PRIVATE_KEY_PREFIX)\n );\n\n/**\n * Copies `from`'s state onto `to`: reactive properties not driven by `to`'s\n * template, and the `#private` members the dev rewrite turned into\n * `Symbol.for` keys. Nothing else — Lit's own bookkeeping lives in string\n * keys and must stay per-instance.\n */\nexport const transferState = (\n from: ElementLike,\n to: ElementLike,\n parts: readonly PartLike[] | undefined\n): void => {\n const skip = templateDrivenKeys(to, parts);\n const keys = new Set<PropertyKey>([\n ...propertyKeys(to.constructor as CtorLike),\n ...propertyKeys(from.constructor as CtorLike),\n ]);\n const src = from as unknown as Record<PropertyKey, unknown>;\n const dst = to as unknown as Record<PropertyKey, unknown>;\n for (const key of keys) {\n if (skip.has(key)) {\n continue;\n }\n try {\n dst[key] = src[key];\n } catch {\n // A throwing setter; leave the default.\n }\n }\n for (const sym of privateKeys(from)) {\n try {\n Object.defineProperty(\n to,\n sym,\n Object.getOwnPropertyDescriptor(from, sym)!\n );\n } catch {\n // Non-configurable on the target; leave it.\n }\n }\n};\n\nconst inside = (el: Node, node: unknown): boolean =>\n node !== null &&\n typeof node === 'object' &&\n typeof (node as Node).nodeType === 'number' &&\n el.contains(node as Node);\n\n/**\n * Whether `el` (and its light DOM) carries no bindings, so another element\n * can take its place without lit-html noticing: no part targets it or an\n * element inside it, no child part's markers or parent lie inside it, and\n * nothing rendered into it as a container. `false` when `parts` is unknown.\n */\nexport const isReuseSafe = (\n el: ElementLike,\n parts: readonly PartLike[] | undefined\n): boolean => {\n if (parts === undefined) {\n return false;\n }\n try {\n if (LIT_PART in el) {\n return false;\n }\n for (const part of parts) {\n if (inside(el, part.element)) {\n return false;\n }\n if (part.type === CHILD_PART) {\n const start = internal(part, START) as Node | null | undefined;\n const end = internal(part, END) as Node | null | undefined;\n if (\n inside(el, start) ||\n inside(el, end) ||\n inside(el, start?.parentNode) ||\n inside(el, end?.parentNode)\n ) {\n return false;\n }\n }\n }\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Puts `old` back where `fresh` is: `old` takes `fresh`'s attributes and\n * light-DOM children, then replaces it. `old` keeps its identity, state,\n * shadow DOM and controllers, and reconnects.\n */\nexport const swapBack = (old: ElementLike, fresh: ElementLike): void => {\n for (const attr of Array.from(old.attributes)) {\n if (!fresh.hasAttribute(attr.name)) {\n old.removeAttribute(attr.name);\n }\n }\n for (const attr of Array.from(fresh.attributes)) {\n if (old.getAttribute(attr.name) !== attr.value) {\n old.setAttribute(attr.name, attr.value);\n }\n }\n old.replaceChildren(...Array.from(fresh.childNodes));\n fresh.replaceWith(old);\n};\n\ninterface Pending {\n root: Node;\n tag: string;\n}\n\ninterface TransferWindow {\n mode: 'transfer' | 'reuse';\n /** Elements dropped during the window, by root then tag, in drop order. */\n pending: Map<Node, Map<string, ElementLike[]>>;\n pendingOf: Map<ElementLike, Pending>;\n /** (old, new) in pairing order; `old` is the chain's original element. */\n pairs: Array<[ElementLike, ElementLike]>;\n /** New element → the element it replaced (immediate predecessor). */\n pairOf: Map<ElementLike, ElementLike>;\n /** New element → the first element of its replacement chain. */\n originOf: Map<ElementLike, ElementLike>;\n /** Outstanding `watch()` batches. */\n waiting: number;\n idle?: ReturnType<typeof setTimeout>;\n cap?: ReturnType<typeof setTimeout>;\n}\n\nexport interface ChildStateOptions {\n /** Read at every `open()`. */\n mode: () => ChildStateMode;\n /** Hard cap on a window's lifetime. Defaults to {@link WINDOW_CAP_MS}. */\n capMs?: number;\n}\n\nexport interface ChildState {\n /**\n * From the instrumented `connectedCallback`, before the original runs.\n * `fresh` is whether the element has never been connected before.\n */\n connected(el: ElementLike, fresh: boolean): void;\n /** From the instrumented `disconnectedCallback`. */\n disconnected(el: ElementLike): void;\n /** A hot patch is about to re-render instances: open (or extend) a window. */\n open(): void;\n /** Keep the window open until these instances' updates complete. */\n watch(els: Iterable<ElementLike>): void;\n /** Whether a window is currently open. */\n readonly active: boolean;\n}\n\nexport const createChildState = (options: ChildStateOptions): ChildState => {\n const capMs = options.capMs ?? WINDOW_CAP_MS;\n /** The root each element was last connected in. */\n const rootOf = new WeakMap<ElementLike, Node>();\n let current: TransferWindow | undefined;\n\n const close = (w: TransferWindow): void => {\n if (current !== w) {\n return;\n }\n current = undefined;\n clearTimeout(w.idle);\n clearTimeout(w.cap);\n // Reuse only once everything we waited on has settled; on the hard cap\n // with updates still outstanding, the transferred state stands.\n if (w.mode !== 'reuse' || w.waiting > 0) {\n return;\n }\n for (const [old, fresh] of w.pairs) {\n // A pair inside an element that was itself swapped back is moot:\n // the old element's shadow DOM came back intact with it.\n if (!fresh.isConnected || old.isConnected) {\n continue;\n }\n try {\n if (isReuseSafe(fresh, partsAround(fresh))) {\n swapBack(old, fresh);\n }\n } catch {\n // Leave the new element (it already has the transferred state).\n }\n }\n };\n\n /** Close once a macrotask passes with no tracked activity. */\n const settle = (w: TransferWindow): void => {\n if (current !== w || w.waiting > 0) {\n return;\n }\n clearTimeout(w.idle);\n w.idle = setTimeout(() => close(w), 0);\n };\n\n /** The pending-queue root for an element now connected in `root`. */\n const keyRoot = (w: TransferWindow, root: Node): Node => {\n const host = (root as Partial<ShadowRoot>).host as ElementLike | undefined;\n const old = host === undefined ? undefined : w.pairOf.get(host);\n if (old !== undefined) {\n // Re-created inside a new element's shadow: match against what was\n // dropped from the old element's shadow.\n const oldRoot = (old.renderRoot ?? old.shadowRoot) as Node | undefined;\n if (oldRoot !== undefined && oldRoot !== null && w.pending.has(oldRoot)) {\n return oldRoot;\n }\n }\n return root;\n };\n\n const unqueue = (w: TransferWindow, el: ElementLike): void => {\n const at = w.pendingOf.get(el);\n if (at === undefined) {\n return;\n }\n w.pendingOf.delete(el);\n const queue = w.pending.get(at.root)?.get(at.tag);\n const i = queue?.indexOf(el) ?? -1;\n if (i >= 0) {\n queue!.splice(i, 1);\n }\n };\n\n const pair = (w: TransferWindow, fresh: ElementLike, root: Node): void => {\n const queue = w.pending.get(keyRoot(w, root))?.get(fresh.localName);\n const old = queue?.shift();\n if (old === undefined) {\n return;\n }\n w.pendingOf.delete(old);\n w.pairOf.set(fresh, old);\n const origin = w.originOf.get(old) ?? old;\n w.originOf.set(fresh, origin);\n w.pairs.push([origin, fresh]);\n // lit-html assigns the new template instance to its part only after the\n // fragment is inserted, so the parts targeting `fresh` aren't reachable\n // yet. Queued before the original connectedCallback enables updating,\n // this runs ahead of `fresh`'s first update.\n queueMicrotask(() => {\n try {\n transferState(old, fresh, partsAround(fresh));\n } catch {\n // Keep the defaults.\n }\n });\n };\n\n return {\n connected(el, fresh) {\n let root: Node | undefined;\n try {\n root = el.getRootNode();\n } catch {\n root = undefined;\n }\n const w = current;\n if (w !== undefined) {\n try {\n if (fresh && root !== undefined && el.hasUpdated !== true) {\n pair(w, el, root);\n } else {\n // Moved, not re-created: it can't be anyone's replacement.\n unqueue(w, el);\n }\n } catch {\n // Pairing is best-effort.\n }\n settle(w);\n }\n if (root !== undefined) {\n rootOf.set(el, root);\n }\n },\n disconnected(el) {\n const w = current;\n if (w === undefined) {\n return;\n }\n const root = rootOf.get(el);\n if (root !== undefined) {\n const tag = el.localName;\n let byTag = w.pending.get(root);\n if (byTag === undefined) {\n w.pending.set(root, (byTag = new Map()));\n }\n let queue = byTag.get(tag);\n if (queue === undefined) {\n byTag.set(tag, (queue = []));\n }\n unqueue(w, el);\n queue.push(el);\n w.pendingOf.set(el, {root, tag});\n }\n settle(w);\n },\n open() {\n const mode = options.mode();\n if (mode !== 'transfer' && mode !== 'reuse') {\n return;\n }\n let w = current;\n if (w === undefined) {\n w = current = {\n mode,\n pending: new Map(),\n pendingOf: new Map(),\n pairs: [],\n pairOf: new Map(),\n originOf: new Map(),\n waiting: 0,\n };\n }\n w.mode = mode;\n clearTimeout(w.cap);\n const opened = w;\n w.cap = setTimeout(() => close(opened), capMs);\n settle(w);\n },\n watch(els) {\n const w = current;\n if (w === undefined) {\n return;\n }\n const promises: Promise<unknown>[] = [];\n for (const el of els) {\n try {\n const p = el.updateComplete;\n if (p instanceof Promise) {\n promises.push(p);\n }\n } catch {\n // No update promise to wait on.\n }\n }\n w.waiting++;\n clearTimeout(w.idle);\n let left = promises.length + 1;\n const done = () => {\n if (--left === 0) {\n w.waiting--;\n settle(w);\n }\n };\n for (const p of promises) {\n // Rethrow: a failed update must still surface as an unhandled\n // rejection, exactly as it would with nobody watching.\n void p.then(done, (e: unknown) => {\n done();\n throw e;\n });\n }\n queueMicrotask(done);\n },\n get active() {\n return current !== undefined;\n },\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"child-state.js","sourceRoot":"","sources":["../../src/lib/runtime/child-state.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Carries child element state across a template re-instantiation.\n *\n * When a hot patch changes a template's text, lit-html sees a new template,\n * clones fresh DOM and swaps it in: every custom element inside the edited\n * template is re-created and starts from its defaults. For a short window\n * after a hot patch this module pairs each element dropped from a root with\n * the next freshly created element of the same tag connected in that root\n * (FIFO, i.e. document order), then either copies the old element's state\n * onto the new one (`'transfer'`) or, where the new element carries no\n * bindings, puts the old element back in its place (`'reuse'`).\n *\n * Dependency-free and duck-typed like `patch.ts`. The lit-html internals it\n * reads (`_$litPart$`, `_$committedValue`, `_$template`, `_$parts`,\n * `_$startNode`, `_$endNode`) are looked up by their development names first\n * and then by the stable minified names lit's prod build gives them\n * (`_$AH`, `_$AD`, `_$AV`, `_$AA`, `_$AB`). Every access is guarded; when the\n * part tree can't be read, transfer skips only attribute-driven keys and\n * reuse falls back to transfer.\n */\n\nexport type ChildStateMode = 'reset' | 'transfer' | 'reuse';\n\n/** `Symbol.for` description prefix of the dev-only `#private` rewrite. */\nexport const PRIVATE_KEY_PREFIX = '@oddsquad/vite-plugin-lit#private:';\n\n/** Hard cap on how long a transfer window stays open. */\nexport const WINDOW_CAP_MS = 1000;\n\nconst ATTRIBUTE_PART = 1;\nconst CHILD_PART = 2;\nconst PROPERTY_PART = 3;\nconst BOOLEAN_PART = 4;\n\n/** Dev name, then the stable minified name from lit-html's prod build. */\nconst COMMITTED = ['_$committedValue', '_$AH'] as const;\nconst TEMPLATE = ['_$template', '_$AD'] as const;\nconst PARTS = ['_$parts', '_$AV'] as const;\nconst START = ['_$startNode', '_$AA'] as const;\nconst END = ['_$endNode', '_$AB'] as const;\nconst LIT_PART = '_$litPart$';\n\n/** Duck-typed lit-html part. */\nexport interface PartLike {\n type: number;\n element?: unknown;\n name?: unknown;\n}\n\n/** Duck-typed element the window works with. */\nexport type ElementLike = HTMLElement & {\n renderRoot?: unknown;\n hasUpdated?: boolean;\n updateComplete?: unknown;\n};\n\ninterface CtorLike {\n elementProperties?: Map<PropertyKey, {attribute?: unknown} | undefined>;\n __attributeToPropertyMap?: unknown;\n}\n\nconst internal = (\n o: unknown,\n [dev, prod]: readonly [string, string]\n): unknown => {\n if (o === null || typeof o !== 'object') {\n return undefined;\n }\n const r = o as Record<string, unknown>;\n return dev in r ? r[dev] : r[prod];\n};\n\nconst isPart = (p: unknown): p is PartLike =>\n p !== null &&\n typeof p === 'object' &&\n typeof (p as PartLike).type === 'number';\n\nconst MAX_PARTS = 100_000;\n\n/** Pushes `part` and, through child parts' committed values, every part below. */\nconst walkParts = (part: PartLike, out: PartLike[]): void => {\n if (out.length > MAX_PARTS) {\n throw new Error('part tree too large');\n }\n out.push(part);\n if (part.type !== CHILD_PART) {\n return;\n }\n const value = internal(part, COMMITTED);\n if (Array.isArray(value)) {\n // An iterable's committed value is an array of ChildParts.\n for (const child of value) {\n if (isPart(child)) {\n walkParts(child, out);\n }\n }\n return;\n }\n const parts = internal(value, PARTS);\n if (Array.isArray(parts) && internal(value, TEMPLATE) !== undefined) {\n for (const child of parts) {\n // Entries may be undefined (parts removed by the polyfill/hydration).\n if (isPart(child)) {\n walkParts(child, out);\n }\n }\n }\n};\n\n/**\n * Every lit-html part rendered into the tree `el` lives in: the parts of each\n * render container (`_$litPart$`) among `el`'s ancestors up to its root.\n * `undefined` when `el` isn't in a tree or the walk hits a surprise.\n */\nexport const partsAround = (el: Node): PartLike[] | undefined => {\n try {\n const out: PartLike[] = [];\n let node: Node | null = el.parentNode;\n if (node === null) {\n return undefined;\n }\n while (node !== null) {\n const root = (node as unknown as Record<string, unknown>)[LIT_PART];\n if (isPart(root)) {\n walkParts(root, out);\n }\n node = node.parentNode;\n }\n return out;\n } catch {\n return undefined;\n }\n};\n\n/** Attribute name → reactive property key for an element's class. */\nconst attributeMap = (ctor: CtorLike): Map<string, PropertyKey> => {\n // Dev builds keep the name; prod mangles it, so rebuild from options.\n const own = ctor.__attributeToPropertyMap;\n if (own instanceof Map) {\n return own as Map<string, PropertyKey>;\n }\n const map = new Map<string, PropertyKey>();\n const props = ctor.elementProperties;\n if (!(props instanceof Map)) {\n return map;\n }\n for (const [key, options] of props) {\n const attribute = options?.attribute;\n if (attribute === false) {\n continue;\n }\n if (typeof attribute === 'string') {\n map.set(attribute, key);\n } else if (typeof key === 'string') {\n map.set(key.toLowerCase(), key);\n }\n }\n return map;\n};\n\nconst propertyKeys = (ctor: CtorLike | undefined): PropertyKey[] => {\n const props = ctor?.elementProperties;\n return props instanceof Map ? [...props.keys()] : [];\n};\n\n/**\n * Reactive property keys the new element already got from its template:\n * keys whose attribute is present on it (static attributes), plus, when the\n * part tree could be read, keys bound by a property, boolean or attribute\n * part targeting it.\n */\nexport const templateDrivenKeys = (\n el: ElementLike,\n parts: readonly PartLike[] | undefined\n): Set<PropertyKey> => {\n const keys = new Set<PropertyKey>();\n const ctor = el.constructor as CtorLike;\n const attrs = attributeMap(ctor);\n try {\n for (const attr of Array.from(el.attributes)) {\n const key = attrs.get(attr.name.toLowerCase());\n if (key !== undefined) {\n keys.add(key);\n }\n }\n } catch {\n // No attributes to read.\n }\n for (const part of parts ?? []) {\n if (part.element !== el || typeof part.name !== 'string') {\n continue;\n }\n if (part.type === PROPERTY_PART) {\n keys.add(part.name);\n } else if (part.type === ATTRIBUTE_PART || part.type === BOOLEAN_PART) {\n keys.add(attrs.get(part.name.toLowerCase()) ?? part.name);\n }\n }\n return keys;\n};\n\n/** Own symbol keys of `el` minted by the dev-only `#private` rewrite. */\nexport const privateKeys = (el: object): symbol[] =>\n Object.getOwnPropertySymbols(el).filter((sym) =>\n (Symbol.keyFor(sym) ?? '').startsWith(PRIVATE_KEY_PREFIX)\n );\n\n/**\n * Copies `from`'s state onto `to`: reactive properties not driven by `to`'s\n * template, and the `#private` members the dev rewrite turned into\n * `Symbol.for` keys. Nothing else — Lit's own bookkeeping lives in string\n * keys and must stay per-instance.\n */\nexport const transferState = (\n from: ElementLike,\n to: ElementLike,\n parts: readonly PartLike[] | undefined\n): void => {\n const skip = templateDrivenKeys(to, parts);\n const keys = new Set<PropertyKey>([\n ...propertyKeys(to.constructor as CtorLike),\n ...propertyKeys(from.constructor as CtorLike),\n ]);\n const src = from as unknown as Record<PropertyKey, unknown>;\n const dst = to as unknown as Record<PropertyKey, unknown>;\n for (const key of keys) {\n if (skip.has(key)) {\n continue;\n }\n try {\n dst[key] = src[key];\n } catch {\n // A throwing setter; leave the default.\n }\n }\n for (const sym of privateKeys(from)) {\n try {\n Object.defineProperty(\n to,\n sym,\n Object.getOwnPropertyDescriptor(from, sym)!\n );\n } catch {\n // Non-configurable on the target; leave it.\n }\n }\n};\n\nconst inside = (el: Node, node: unknown): boolean =>\n node !== null &&\n typeof node === 'object' &&\n typeof (node as Node).nodeType === 'number' &&\n el.contains(node as Node);\n\n/**\n * Whether `el` (and its light DOM) carries no bindings, so another element\n * can take its place without lit-html noticing: no part targets it or an\n * element inside it, no child part's markers or parent lie inside it, and\n * nothing rendered into it as a container. `false` when `parts` is unknown.\n */\nexport const isReuseSafe = (\n el: ElementLike,\n parts: readonly PartLike[] | undefined\n): boolean => {\n if (parts === undefined) {\n return false;\n }\n try {\n if (LIT_PART in el) {\n return false;\n }\n for (const part of parts) {\n if (inside(el, part.element)) {\n return false;\n }\n if (part.type === CHILD_PART) {\n const start = internal(part, START) as Node | null | undefined;\n const end = internal(part, END) as Node | null | undefined;\n if (\n inside(el, start) ||\n inside(el, end) ||\n inside(el, start?.parentNode) ||\n inside(el, end?.parentNode)\n ) {\n return false;\n }\n }\n }\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Puts `old` back where `fresh` is: `old` takes `fresh`'s attributes and\n * light-DOM children, then replaces it. `old` keeps its identity, state,\n * shadow DOM and controllers, and reconnects.\n */\nexport const swapBack = (old: ElementLike, fresh: ElementLike): void => {\n for (const attr of Array.from(old.attributes)) {\n if (!fresh.hasAttribute(attr.name)) {\n old.removeAttribute(attr.name);\n }\n }\n for (const attr of Array.from(fresh.attributes)) {\n if (old.getAttribute(attr.name) !== attr.value) {\n old.setAttribute(attr.name, attr.value);\n }\n }\n old.replaceChildren(...Array.from(fresh.childNodes));\n fresh.replaceWith(old);\n};\n\ninterface Pending {\n root: Node;\n tag: string;\n}\n\ninterface TransferWindow {\n mode: 'transfer' | 'reuse';\n /** Elements dropped during the window, by root then tag, in drop order. */\n pending: Map<Node, Map<string, ElementLike[]>>;\n pendingOf: Map<ElementLike, Pending>;\n /** (old, new) in pairing order; `old` is the chain's original element. */\n pairs: Array<[ElementLike, ElementLike]>;\n /** New element → the element it replaced (immediate predecessor). */\n pairOf: Map<ElementLike, ElementLike>;\n /** New element → the first element of its replacement chain. */\n originOf: Map<ElementLike, ElementLike>;\n /** Outstanding `watch()` batches. */\n waiting: number;\n idle?: ReturnType<typeof setTimeout>;\n cap?: ReturnType<typeof setTimeout>;\n}\n\nexport interface ChildStateOptions {\n /** Read at every `open()`. */\n mode: () => ChildStateMode;\n /** Hard cap on a window's lifetime. Defaults to {@link WINDOW_CAP_MS}. */\n capMs?: number;\n}\n\nexport interface ChildState {\n /**\n * From the instrumented `connectedCallback`, before the original runs.\n * `fresh` is whether the element has never been connected before.\n */\n connected(el: ElementLike, fresh: boolean): void;\n /** From the instrumented `disconnectedCallback`. */\n disconnected(el: ElementLike): void;\n /** A hot patch is about to re-render instances: open (or extend) a window. */\n open(): void;\n /** Keep the window open until these instances' updates complete. */\n watch(els: Iterable<ElementLike>): void;\n /** Whether a window is currently open. */\n readonly active: boolean;\n}\n\nexport const createChildState = (options: ChildStateOptions): ChildState => {\n const capMs = options.capMs ?? WINDOW_CAP_MS;\n /** The root each element was last connected in. */\n const rootOf = new WeakMap<ElementLike, Node>();\n let current: TransferWindow | undefined;\n\n const close = (w: TransferWindow): void => {\n if (current !== w) {\n return;\n }\n current = undefined;\n clearTimeout(w.idle);\n clearTimeout(w.cap);\n // Reuse only once everything we waited on has settled; on the hard cap\n // with updates still outstanding, the transferred state stands.\n if (w.mode !== 'reuse' || w.waiting > 0) {\n return;\n }\n for (const [old, fresh] of w.pairs) {\n // A pair inside an element that was itself swapped back is moot:\n // the old element's shadow DOM came back intact with it.\n if (!fresh.isConnected || old.isConnected) {\n continue;\n }\n try {\n if (isReuseSafe(fresh, partsAround(fresh))) {\n swapBack(old, fresh);\n }\n } catch {\n // Leave the new element (it already has the transferred state).\n }\n }\n };\n\n /** Close once a macrotask passes with no tracked activity. */\n const settle = (w: TransferWindow): void => {\n if (current !== w || w.waiting > 0) {\n return;\n }\n clearTimeout(w.idle);\n w.idle = setTimeout(() => close(w), 0);\n };\n\n /** The pending-queue root for an element now connected in `root`. */\n const keyRoot = (w: TransferWindow, root: Node): Node => {\n const host = (root as Partial<ShadowRoot>).host as ElementLike | undefined;\n const old = host === undefined ? undefined : w.pairOf.get(host);\n if (old !== undefined) {\n // Re-created inside a new element's shadow: match against what was\n // dropped from the old element's shadow.\n const oldRoot = (old.renderRoot ?? old.shadowRoot) as Node | undefined;\n if (oldRoot !== undefined && oldRoot !== null && w.pending.has(oldRoot)) {\n return oldRoot;\n }\n }\n return root;\n };\n\n const unqueue = (w: TransferWindow, el: ElementLike): void => {\n const at = w.pendingOf.get(el);\n if (at === undefined) {\n return;\n }\n w.pendingOf.delete(el);\n const queue = w.pending.get(at.root)?.get(at.tag);\n const i = queue?.indexOf(el) ?? -1;\n if (i >= 0) {\n queue!.splice(i, 1);\n }\n };\n\n const pair = (w: TransferWindow, fresh: ElementLike, root: Node): void => {\n const queue = w.pending.get(keyRoot(w, root))?.get(fresh.localName);\n const old = queue?.shift();\n if (old === undefined) {\n return;\n }\n w.pendingOf.delete(old);\n w.pairOf.set(fresh, old);\n const origin = w.originOf.get(old) ?? old;\n w.originOf.set(fresh, origin);\n w.pairs.push([origin, fresh]);\n // lit-html assigns the new template instance to its part only after the\n // fragment is inserted, so the parts targeting `fresh` aren't reachable\n // yet. Queued before the original connectedCallback enables updating,\n // this runs ahead of `fresh`'s first update.\n queueMicrotask(() => {\n try {\n transferState(old, fresh, partsAround(fresh));\n } catch {\n // Keep the defaults.\n }\n });\n };\n\n return {\n connected(el, fresh) {\n let root: Node | undefined;\n try {\n root = el.getRootNode();\n } catch {\n root = undefined;\n }\n const w = current;\n if (w !== undefined) {\n try {\n if (fresh && root !== undefined && el.hasUpdated !== true) {\n pair(w, el, root);\n } else {\n // Moved, not re-created: it can't be anyone's replacement.\n unqueue(w, el);\n }\n } catch {\n // Pairing is best-effort.\n }\n settle(w);\n }\n if (root !== undefined) {\n rootOf.set(el, root);\n }\n },\n disconnected(el) {\n const w = current;\n if (w === undefined) {\n return;\n }\n const root = rootOf.get(el);\n if (root !== undefined) {\n const tag = el.localName;\n let byTag = w.pending.get(root);\n if (byTag === undefined) {\n w.pending.set(root, (byTag = new Map()));\n }\n let queue = byTag.get(tag);\n if (queue === undefined) {\n byTag.set(tag, (queue = []));\n }\n unqueue(w, el);\n queue.push(el);\n w.pendingOf.set(el, {root, tag});\n }\n settle(w);\n },\n open() {\n const mode = options.mode();\n if (mode !== 'transfer' && mode !== 'reuse') {\n return;\n }\n let w = current;\n if (w === undefined) {\n w = current = {\n mode,\n pending: new Map(),\n pendingOf: new Map(),\n pairs: [],\n pairOf: new Map(),\n originOf: new Map(),\n waiting: 0,\n };\n }\n w.mode = mode;\n clearTimeout(w.cap);\n const opened = w;\n w.cap = setTimeout(() => close(opened), capMs);\n settle(w);\n },\n watch(els) {\n const w = current;\n if (w === undefined) {\n return;\n }\n const promises: Promise<unknown>[] = [];\n for (const el of els) {\n try {\n const p = el.updateComplete;\n if (p instanceof Promise) {\n promises.push(p);\n }\n } catch {\n // No update promise to wait on.\n }\n }\n w.waiting++;\n clearTimeout(w.idle);\n let left = promises.length + 1;\n const done = () => {\n if (--left === 0) {\n w.waiting--;\n settle(w);\n }\n };\n for (const p of promises) {\n // Rethrow: a failed update must still surface as an unhandled\n // rejection, exactly as it would with nobody watching.\n void p.then(done, (e: unknown) => {\n done();\n throw e;\n });\n }\n queueMicrotask(done);\n },\n get active() {\n return current !== undefined;\n },\n };\n};\n"]}
|
package/lib/runtime/css.d.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Browser helpers for referencing CSS files from shadow roots via Vite's
|
|
3
|
+
* `?url` imports.
|
|
4
|
+
*
|
|
5
|
+
* A `?url` import yields a real stylesheet URL — the dev server serves the
|
|
6
|
+
* file as CSS, and `vite build` emits it as a hashed `.css` asset. That
|
|
7
|
+
* makes it the right base for `<link>` hrefs and `@import url()`s inside
|
|
8
|
+
* shadow roots. The one gap is dev HMR: the imported URL string is identical
|
|
9
|
+
* across module re-executions, so the browser would keep the stale
|
|
10
|
+
* stylesheet. These helpers close that gap.
|
|
11
|
+
*
|
|
12
|
+
* This module is dependency-free and must stay safe to load in any
|
|
13
|
+
* environment.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
5
16
|
*/
|
|
6
17
|
/**
|
|
7
18
|
* Appends a cache-busting query to a `?url`-imported CSS file URL in dev.
|
package/lib/runtime/css.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/css.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/css.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;GAeG;AAaH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,KAAG,MAE1C,CAAC;AAqBF;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB;;;;;;;;;OASG;IACH,KAAK,EAAE,aAAa,CAAC;IACrB;;;;;;;;;;;;OAYG;IACH,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC;CACjE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,QAAQ,QAAS,MAAM,KAAG,QAkCtC,CAAC"}
|
package/lib/runtime/css.js
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2026 Google LLC
|
|
4
|
-
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
-
*/
|
|
1
|
+
/* @ts-self-types="./css.d.ts" */
|
|
6
2
|
/**
|
|
7
3
|
* Browser helpers for referencing CSS files from shadow roots via Vite's
|
|
8
4
|
* `?url` imports.
|
|
@@ -16,6 +12,8 @@
|
|
|
16
12
|
*
|
|
17
13
|
* This module is dependency-free and must stay safe to load in any
|
|
18
14
|
* environment.
|
|
15
|
+
*
|
|
16
|
+
* @module
|
|
19
17
|
*/
|
|
20
18
|
/**
|
|
21
19
|
* Vite's dev flag. Accessed as a direct member expression (`import.meta.env.DEV`)
|
package/lib/runtime/css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/lib/runtime/css.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"css.js","sourceRoot":"","sources":["../../src/lib/runtime/css.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC;;;;;;;;;;;;;;;GAeG;AAEH;;;;;;;GAOG;AACH,MAAM,KAAK,GAAG,GAAY,EAAE,CACzB,OAAO,IAAgC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;AAE7D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,SAAS,GAAG,CAAC,GAAW,EAAU,EAAE;IACxC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;AACxD,CAAC,CAAC;AAkCF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAY,EAAE;IAChD,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;IAClC,qEAAqE;IACrE,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,MAAM,GAAG,CAAC,IAAY,EAAiB,EAAE;QAC7C,MAAM,KAAK,GAAG,EAAE,MAAM,CAAC;QACvB,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,wEAAwE;YACxE,IAAI,CAAC,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAClB,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBACrB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,kEAAkE;YAClE,OAAO,CAAC,IAAI,CAAC,yCAAyC,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO;QACL,KAAK;QACL,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/* @ts-self-types=\"./css.d.ts\" */\n/**\n * Browser helpers for referencing CSS files from shadow roots via Vite's\n * `?url` imports.\n *\n * A `?url` import yields a real stylesheet URL — the dev server serves the\n * file as CSS, and `vite build` emits it as a hashed `.css` asset. That\n * makes it the right base for `<link>` hrefs and `@import url()`s inside\n * shadow roots. The one gap is dev HMR: the imported URL string is identical\n * across module re-executions, so the browser would keep the stale\n * stylesheet. These helpers close that gap.\n *\n * This module is dependency-free and must stay safe to load in any\n * environment.\n *\n * @module\n */\n\n/**\n * Vite's dev flag. Accessed as a direct member expression (`import.meta.env.DEV`)\n * so the bundler can statically replace it per key. Aliasing the whole object\n * (`const env = import.meta.env`) instead defeats that replacement and makes\n * Vite inline the ENTIRE serialized `import.meta.env` — every env var — into the\n * consumer bundle. Optional chaining keeps this safe where `import.meta.env` is\n * absent (non-Vite runtimes).\n */\nconst isDev = (): boolean =>\n (import.meta as {env?: {DEV?: boolean}}).env?.DEV === true;\n\n/**\n * Appends a cache-busting query to a `?url`-imported CSS file URL in dev.\n *\n * Call this at *module scope* (not in `render()`, where every render would\n * refetch): each HMR re-execution then yields a fresh href and the browser\n * refetches the changed stylesheet.\n *\n * In production builds the URL is a content-hashed asset, so the input is\n * returned unchanged.\n *\n * @example\n * ```ts\n * import cssUrl from './my-element.css?url';\n * import {devCacheBust} from '@oddsquad/vite-plugin-lit/css.js';\n *\n * const href = devCacheBust(cssUrl); // module scope\n * html`<link rel=\"stylesheet\" href=\"${href}\" />`;\n * ```\n */\nexport const devCacheBust = (url: string): string => {\n return isDev() ? `${url}?t=${Date.now()}` : url;\n};\n\n/**\n * In dev, turns a `?url`-imported CSS path into one that fetches the\n * *compiled CSS bytes* (`text/css`). Vite serves a `?url` CSS path as a JS\n * module (`__vite__updateStyle(…)`), so a plain `fetch().text()` returns\n * JavaScript; the `direct` query makes it return the stylesheet instead,\n * pipeline-processed the same way the build asset is. In production the URL\n * is already a real `.css` asset, so it's returned unchanged.\n *\n * Joined with `?` or `&` depending on whether the URL already carries a query\n * (a freshly started dev server yields a bare path; after an HMR cache-bust\n * it carries `?t=…`).\n */\nconst devDirect = (url: string): string => {\n if (!isDev()) {\n return url;\n }\n return `${url}${url.includes('?') ? '&' : '?'}direct`;\n};\n\n/**\n * A shared `CSSStyleSheet` backed by a `?url` CSS asset, plus the callback to\n * hot-swap it in place. Returned by {@link urlSheet}.\n */\nexport interface UrlSheet {\n /**\n * The constructed stylesheet. Adopt it from any number of components\n * (`static styles = [sheet]`); an edit to the source CSS re-fetches and\n * `replaceSync()`s it, updating every shadow root that adopted it without\n * re-rendering a component or reloading the page.\n *\n * It is empty until the first fetch resolves, so expect a brief flash of\n * unstyled content on initial load — the cost of keeping the CSS as a real\n * asset rather than inlining it into the JS bundle.\n */\n sheet: CSSStyleSheet;\n /**\n * Vite HMR accept callback for the `?url` dependency. Wire it up with the\n * *same literal specifier* you imported — Vite resolves accepted deps by\n * static analysis, so the string has to appear in your module:\n *\n * ```ts\n * import.meta.hot?.accept('./utils.css?url', onHotUpdate);\n * ```\n *\n * Typed to match Vite's accept callback (`ModuleNamespace | undefined`) so\n * it drops straight in; the new module's `default` export is the updated\n * `?url` string.\n */\n onHotUpdate: (mod: Record<string, unknown> | undefined) => void;\n}\n\n/**\n * Builds a {@link UrlSheet} from a `?url`-imported CSS asset: a single\n * constructed `CSSStyleSheet`, shareable across shadow roots via\n * `adoptedStyleSheets`, that hot-swaps in place on edits — no component\n * re-render, no full-page reload.\n *\n * `?url` keeps the stylesheet as a standalone, pipeline-processed `.css` file\n * in the build output (unlike `?inline`/`?raw`, which inline it into the JS\n * chunk). The file is read into the sheet at runtime via `fetch()`, with the\n * dev/build path difference handled internally.\n *\n * @example\n * ```ts\n * import {urlSheet} from '@oddsquad/vite-plugin-lit/css.js';\n * import sheetUrl from './utils.css?url';\n *\n * const {sheet, onHotUpdate} = urlSheet(sheetUrl);\n * export default sheet; // `static styles = [sheet]` in components\n *\n * import.meta.hot?.accept('./utils.css?url', onHotUpdate);\n * ```\n */\nexport const urlSheet = (url: string): UrlSheet => {\n const sheet = new CSSStyleSheet();\n // Guards against out-of-order fetch resolution: two rapid edits fire\n // overlapping fetches, and a slower earlier one must not land after (and\n // clobber) a newer one. Only the most recently issued request applies.\n let latest = 0;\n const update = (next: string): Promise<void> => {\n const token = ++latest;\n return fetch(devDirect(next))\n .then((r) => {\n // A 404 still has a body (Vite's fallback page); don't adopt it as css.\n if (!r.ok) throw new Error(`HTTP ${r.status}`);\n return r.text();\n })\n .then((css) => {\n if (token === latest) {\n sheet.replaceSync(css);\n }\n })\n .catch((err: unknown) => {\n // Keep the last good sheet; just say why this update didn't land.\n console.warn(`[lit-plugin] urlSheet: failed to load ${next}:`, err);\n });\n };\n void update(url);\n return {\n sheet,\n onHotUpdate: (mod) => {\n const next = mod?.['default'];\n if (typeof next === 'string') {\n void update(next);\n }\n },\n };\n};\n"]}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Keeps our on-page dev UI (HMR indicator, source-overlay tooltip) clear of the
|
|
3
|
+
* Vite DevTools edge panel so they don't sit on top of it.
|
|
4
|
+
*
|
|
5
|
+
* The panel is `#vite-devtools-edge-panel` inside the open shadow root of the
|
|
6
|
+
* `<vite-devtools-dock-embedded>` host, and only exists while the dock is
|
|
7
|
+
* docked to an edge (it can be moved/resized). We report the inset, in px, that
|
|
8
|
+
* the panel occupies on each viewport edge it touches — plus a small gap — so
|
|
9
|
+
* callers can offset themselves.
|
|
5
10
|
*/
|
|
6
11
|
export interface EdgeInsets {
|
|
7
12
|
top: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-panel.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/edge-panel.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"edge-panel.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/edge-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAyCD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,aAClB,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,KACrC,CAAC,MAAM,IAAI,CA+Db,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-panel.js","sourceRoot":"","sources":["../../src/lib/runtime/edge-panel.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"edge-panel.js","sourceRoot":"","sources":["../../src/lib/runtime/edge-panel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Keeps our on-page dev UI (HMR indicator, source-overlay tooltip) clear of the\n * Vite DevTools edge panel so they don't sit on top of it.\n *\n * The panel is `#vite-devtools-edge-panel` inside the open shadow root of the\n * `<vite-devtools-dock-embedded>` host, and only exists while the dock is\n * docked to an edge (it can be moved/resized). We report the inset, in px, that\n * the panel occupies on each viewport edge it touches — plus a small gap — so\n * callers can offset themselves.\n */\n\nconst HOST_TAG = 'vite-devtools-dock-embedded';\nconst PANEL_ID = 'vite-devtools-edge-panel';\n/** Gap to leave between our UI and the devtools panel. */\nconst GAP = 12;\n/** Tolerance (px) for treating the panel as touching a viewport edge. */\nconst EDGE = 2;\n\nexport interface EdgeInsets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nconst ZERO: EdgeInsets = {top: 0, right: 0, bottom: 0, left: 0};\n\nconst findPanel = (): HTMLElement | null => {\n const host = document.querySelector(HOST_TAG);\n const root = (host as {shadowRoot?: ShadowRoot | null} | null)?.shadowRoot;\n return (root?.getElementById(PANEL_ID) as HTMLElement | null) ?? null;\n};\n\n/**\n * Inset (px + gap) the docked panel occupies, on the single edge it's docked\n * to. The panel docks to one edge and spans the perpendicular axis fully, so we\n * pick the dock edge from which axis it spans — a full-width panel is docked\n * top/bottom, a full-height one left/right. (Inferring the edge per-side would\n * wrongly flag a full-width bottom panel as also docked left and right.)\n */\nconst computeInsets = (): EdgeInsets => {\n const panel = findPanel();\n if (panel === null) return ZERO;\n const r = panel.getBoundingClientRect();\n if (r.width === 0 || r.height === 0) return ZERO;\n // Use the layout viewport (excludes scrollbars) — a fixed `right:0`/`bottom:0`\n // panel aligns to clientWidth/Height, not innerWidth/Height, so comparing\n // against the latter would miss a full-width panel whenever a scrollbar is\n // present.\n const vw = document.documentElement.clientWidth;\n const vh = document.documentElement.clientHeight;\n const spansWidth = r.left <= EDGE && r.right >= vw - EDGE;\n const spansHeight = r.top <= EDGE && r.bottom >= vh - EDGE;\n const insets = {...ZERO};\n if (spansWidth && !spansHeight) {\n if (r.top <= EDGE) insets.top = r.bottom + GAP;\n else if (r.bottom >= vh - EDGE) insets.bottom = vh - r.top + GAP;\n } else if (spansHeight && !spansWidth) {\n if (r.left <= EDGE) insets.left = r.right + GAP;\n else if (r.right >= vw - EDGE) insets.right = vw - r.left + GAP;\n }\n return insets;\n};\n\n/**\n * Calls `onChange` with the current insets and again whenever they change — the\n * panel being docked/resized/moved, the window resizing, or the devtools\n * mounting after us. Returns a disposer.\n */\nexport const observeEdgeInsets = (\n onChange: (insets: EdgeInsets) => void\n): (() => void) => {\n let raf = 0;\n let last = '';\n let observedPanel: Element | null = null;\n let observingRoot = false;\n\n const emit = () => {\n raf = 0;\n const insets = computeInsets();\n const key = `${insets.top}|${insets.right}|${insets.bottom}|${insets.left}`;\n if (key !== last) {\n last = key;\n onChange(insets);\n }\n };\n const schedule = () => {\n if (raf === 0) raf = requestAnimationFrame(emit);\n };\n\n const ro = new ResizeObserver(schedule);\n // Re-attach on any devtools DOM change (panel mounting, docking to a new edge)\n // then recompute; cheap thanks to the rAF + diff above.\n const mo = new MutationObserver(() => attach());\n\n const attach = () => {\n const host = document.querySelector(HOST_TAG);\n const root = (host as {shadowRoot?: ShadowRoot | null} | null)?.shadowRoot;\n if (root && !observingRoot) {\n observingRoot = true;\n mo.observe(root, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'class'],\n });\n }\n const panel = findPanel();\n if (panel !== null && panel !== observedPanel) {\n observedPanel = panel;\n ro.observe(panel);\n }\n schedule();\n };\n\n // The devtools host mounts asynchronously; poll until it's present, then let\n // the observers drive updates.\n let tries = 0;\n const poll = () => {\n attach();\n if (!observingRoot && tries++ < 60) {\n setTimeout(poll, 250);\n }\n };\n poll();\n\n window.addEventListener('resize', schedule);\n\n return () => {\n window.removeEventListener('resize', schedule);\n ro.disconnect();\n mo.disconnect();\n if (raf !== 0) cancelAnimationFrame(raf);\n };\n};\n"]}
|
package/lib/runtime/fonts.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/fonts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fonts.d.ts","sourceRoot":"","sources":["../../src/lib/runtime/fonts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,qGAAqG,CAAC;AAEzI,kFAAkF;AAClF,eAAO,MAAM,aAAa,oIAA6D,CAAC"}
|
package/lib/runtime/fonts.js
CHANGED
package/lib/runtime/fonts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../src/lib/runtime/fonts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../src/lib/runtime/fonts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,kGAAkG,CAAC;AAEzI,kFAAkF;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,iCAAiC,sBAAsB,GAAG,CAAC","sourcesContent":["/**\n * Default monospace font stack for the devtools UI (HMR indicator, source\n * overlay). Surfaced through the `--lit-devtools-font-mono` custom property so\n * consumers can override it; this constant is the fallback default, mirroring\n * the `--lit-devtools-radius` convention.\n *\n * The devtools only render code-adjacent text, so monospace is the only stack\n * they need.\n */\nexport const LIT_DEVTOOLS_FONT_MONO = `ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace`;\n\n/** `var()` reference to the devtools mono font with the default stack inlined. */\nexport const FONT_MONO_VAR = `var(--lit-devtools-font-mono, ${LIT_DEVTOOLS_FONT_MONO})`;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Custom element for the HMR update indicator.
|
|
3
|
+
* Injected by the Vite plugin as an external module so that
|
|
4
|
+
* `import.meta.hot` is available.
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=indicator.d.ts.map
|
package/lib/runtime/indicator.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indicator.js","sourceRoot":"","sources":["../../src/lib/runtime/indicator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"indicator.js","sourceRoot":"","sources":["../../src/lib/runtime/indicator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Custom element for the HMR update indicator.\n * Injected by the Vite plugin as an external module so that\n * `import.meta.hot` is available.\n */\n\nimport {FONT_MONO_VAR} from './fonts.js';\nimport {FLAME_ICON} from '../icons.js';\nimport {subscribeOverride} from './overrides.js';\nimport type {ViteHotLike} from './page-channel.js';\nimport {observeEdgeInsets} from './edge-panel.js';\nimport {injectTokens} from '../tokens.js';\n\n/** One entry of a Vite `vite:afterUpdate` payload. */\ninterface ViteUpdate {\n type?: string;\n path?: string;\n acceptedPath?: string;\n}\n\n/**\n * True when an HMR batch is purely a stylesheet swap — every update is either\n * a `css-update` or a `js-update` whose accepted module is a `.css` source\n * (the shared-sheet queries `?css-sheet`/`?raw`/`?url` all accept a `.css`\n * path). Such a batch restyles adopted sheets in place with no re-render.\n *\n * Heuristic: keyed on the accepted path ending in `.css`. Robust for this\n * plugin's own queries; a user hand-wiring `import.meta.hot.accept` on a raw\n * `.css` would also read as a style swap, which is the intended grouping. An\n * empty/missing payload can't be classified, so it counts as a re-render\n * rather than being silently dropped.\n */\nfunction isStyleSwap(data: unknown): boolean {\n const updates = (data as {updates?: ViteUpdate[]} | undefined)?.updates;\n if (!Array.isArray(updates) || updates.length === 0) return false;\n return updates.every((u) => {\n if (u.type === 'css-update') return true;\n if (u.type === 'js-update') {\n return (u.acceptedPath ?? u.path ?? '').split('?')[0].endsWith('.css');\n }\n return false;\n });\n}\n\nclass LitDevtoolsIndicator extends HTMLElement {\n #initialized = false;\n #count = 0;\n #container: HTMLElement;\n #countEl: HTMLElement | null = null;\n\n constructor() {\n super();\n const root = this.attachShadow({mode: 'closed'});\n // `--idle-op` is the at-rest opacity: 0 (invisible until a pulse) without a\n // count, .5 (count stays legible) with one. The count display and idle\n // opacity are both driven by the `.with-count` class so the panel can\n // toggle the count on/off live (see #setCount).\n root.innerHTML = `\n <style>\n @keyframes pulse{0%{opacity:var(--idle-op,0)}15%{opacity:1}80%{opacity:1}100%{opacity:var(--idle-op,0)}}\n :host{\n position:fixed;inset:0;display:grid;\n z-index:2147483647;pointer-events:none;\n /* Base padding plus the inset the Vite DevTools edge panel occupies\n on each edge (set from JS), so the indicator never sits on it. */\n padding:\n calc(var(--lit-devtools-hmr-indicator-padding,16px) + var(--edge-top,0px))\n calc(var(--lit-devtools-hmr-indicator-padding,16px) + var(--edge-right,0px))\n calc(var(--lit-devtools-hmr-indicator-padding,16px) + var(--edge-bottom,0px))\n calc(var(--lit-devtools-hmr-indicator-padding,16px) + var(--edge-left,0px))\n }\n #container{\n place-self:var(--lit-devtools-hmr-indicator-align,end end);\n display:flex;align-items:stretch;\n background:var(--lit-devtools-surface-elevated);color:var(--lit-devtools-text-strong);\n backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);\n border-radius:var(--lit-devtools-radius-md);\n font:12px/1 ${FONT_MONO_VAR};font-variant-numeric:tabular-nums;\n overflow:hidden;opacity:var(--idle-op,0)\n }\n #container.with-count{--idle-op:.5}\n #container.active{animation:pulse 2.5s ease-out forwards}\n #icon{display:flex;align-items:center;justify-content:center;padding:0 10px}\n #icon svg{width:16px;height:16px;display:block;fill:currentColor}\n #indicator{\n display:flex;align-items:center;gap:6px;\n padding:7px 12px;\n border-left:1px solid var(--lit-devtools-border-subtle)\n }\n .dot{width:8px;height:8px;border-radius:50%;background:var(--lit-devtools-success);flex-shrink:0}\n /* Style-only swaps (shared adopted stylesheet hot-swap, no re-render)\n pulse in the calmer info color and don't bump the count. */\n #container.style-swap .dot{background:var(--lit-devtools-info)}\n .count{display:none}\n #container.with-count .count{display:inline}\n </style>\n <div id=\"container\"><span id=\"icon\">${FLAME_ICON}</span><span id=\"indicator\"><span class=\"dot\"></span><span class=\"count\">0</span></span></div>\n `;\n this.#container = root.getElementById('container')!;\n this.#countEl = root.querySelector('.count');\n this.#setCount(this.hasAttribute('count'));\n }\n\n /** Show/hide the cumulative update count (and the at-rest opacity). */\n #setCount(enabled: boolean) {\n this.#container.classList.toggle('with-count', enabled);\n }\n\n connectedCallback() {\n if (this.#initialized) return;\n this.#initialized = true;\n injectTokens();\n const hot = (import.meta as {hot?: ViteHotLike}).hot;\n hot?.on('vite:afterUpdate', (data) => {\n // Count only updates that actually re-render/re-execute a component;\n // a pure shared-stylesheet swap (?css-sheet / ?raw / ?url adopted sheet)\n // restyles in place without re-rendering, so it pulses but doesn't count.\n const styleSwap = isStyleSwap(data);\n if (!styleSwap && this.#countEl !== null) {\n this.#countEl.textContent = String(++this.#count);\n }\n this.#container.classList.toggle('style-swap', styleSwap);\n this.#container.classList.remove('active');\n void this.#container.offsetWidth;\n this.#container.classList.add('active');\n });\n // Let the DevTools panel hide/show the indicator and its count live (and\n // across reloads).\n subscribeOverride(hot, (o) => {\n if (o.hmrIndicatorVisible !== undefined) {\n this.style.display = o.hmrIndicatorVisible ? '' : 'none';\n }\n if (o.hmrIndicatorCount !== undefined) {\n this.#setCount(o.hmrIndicatorCount);\n }\n });\n // Stay clear of the Vite DevTools edge panel.\n observeEdgeInsets((insets) => {\n this.style.setProperty('--edge-top', `${insets.top}px`);\n this.style.setProperty('--edge-right', `${insets.right}px`);\n this.style.setProperty('--edge-bottom', `${insets.bottom}px`);\n this.style.setProperty('--edge-left', `${insets.left}px`);\n });\n }\n}\n\ncustomElements.define('lit-devtools-hmr-indicator', LitDevtoolsIndicator);\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Walks the page to build the component render tree and to snapshot a single
|
|
3
|
+
* element's reactive state for the inspector panel. Runs entirely in the page;
|
|
4
|
+
* the results are sent over the transport as plain JSON.
|
|
5
5
|
*/
|
|
6
6
|
import type { InspectorDetails, InspectorTreeNode } from '../../../types/inspector.js';
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/collect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"collect.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/collect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAEV,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAsCrC;;;;GAIG;AACH,eAAO,MAAM,aAAa,OAAQ,OAAO,KAAG,OAO3C,CAAC;AA2CF,wEAAwE;AACxE,eAAO,MAAM,SAAS,QAAO,iBAAiB,EAI7C,CAAC;AAWF,yEAAyE;AACzE,eAAO,MAAM,cAAc,OAAQ,OAAO,KAAG,gBA6C5C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/collect.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/collect.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Walks the page to build the component render tree and to snapshot a single\n * element's reactive state for the inspector panel. Runs entirely in the page;\n * the results are sent over the transport as plain JSON.\n */\n\nimport {idOf} from '../timeline/identity.js';\nimport {serialize, typeTag} from './serialize.js';\nimport type {\n ElementSource,\n InspectorDetails,\n InspectorProp,\n InspectorTreeNode,\n} from '../../../types/inspector.js';\n\nconst SOURCE_META_KEY = Symbol.for('@lit-labs/vite-plugin-lit#source');\n\ninterface LitSourceMeta {\n filePath: string;\n lineNumber: number;\n componentName: string;\n}\n\n/** Subset of ReactiveElement's `PropertyDeclaration` we read. */\ninterface PropertyDeclaration {\n attribute?: boolean | string;\n reflect?: boolean;\n state?: boolean;\n}\n\n/** Subset of a ReactiveElement instance/constructor we duck-type against. */\ninterface ReactiveElementLike extends Element {\n requestUpdate?: unknown;\n hasUpdated?: boolean;\n isUpdatePending?: boolean;\n constructor: {\n elementProperties?: Map<PropertyKey, PropertyDeclaration>;\n [SOURCE_META_KEY]?: LitSourceMeta;\n };\n}\n\nconst metaOf = (el: Element): LitSourceMeta | undefined =>\n (el as ReactiveElementLike).constructor[SOURCE_META_KEY];\n\nconst sourceOf = (el: Element): ElementSource | undefined => {\n const meta = metaOf(el);\n return meta === undefined\n ? undefined\n : {file: meta.filePath, line: meta.lineNumber};\n};\n\n/**\n * An element worth showing in the tree: an upgraded custom element that\n * duck-types as a ReactiveElement. Catches Lit components regardless of whether\n * the source-meta transform touched them, while skipping devtools' own UI.\n */\nexport const isInspectable = (el: Element): boolean => {\n const tag = el.tagName.toLowerCase();\n if (!tag.includes('-')) return false;\n if (tag === 'lit-source-overlay' || tag.startsWith('lit-devtools-')) {\n return false;\n }\n return typeof (el as ReactiveElementLike).requestUpdate === 'function';\n};\n\nconst nodeFor = (\n el: Element,\n children: InspectorTreeNode[]\n): InspectorTreeNode => {\n const meta = metaOf(el);\n return {\n id: idOf(el),\n tagName: el.tagName.toLowerCase(),\n componentName: meta?.componentName,\n source:\n meta === undefined\n ? undefined\n : {file: meta.filePath, line: meta.lineNumber},\n children,\n };\n};\n\n/**\n * Visits `el`: if it's inspectable it becomes a node whose children are the\n * inspectables nested in its shadow + light DOM; otherwise we descend, pushing\n * any inspectables we find into the current `sink` (so non-component wrappers\n * are flattened away).\n */\nconst visit = (el: Element, sink: InspectorTreeNode[]): void => {\n if (isInspectable(el)) {\n const children: InspectorTreeNode[] = [];\n descend(el, children);\n sink.push(nodeFor(el, children));\n } else {\n descend(el, sink);\n }\n};\n\nconst descend = (el: Element, sink: InspectorTreeNode[]): void => {\n const shadow = el.shadowRoot;\n if (shadow !== null) {\n for (const child of shadow.children) visit(child, sink);\n }\n for (const child of el.children) visit(child, sink);\n};\n\n/** Build the full component render tree rooted at the document body. */\nexport const buildTree = (): InspectorTreeNode[] => {\n const roots: InspectorTreeNode[] = [];\n for (const child of document.body.children) visit(child, roots);\n return roots;\n};\n\nconst attributeName = (\n key: PropertyKey,\n decl: PropertyDeclaration\n): string | false => {\n if (decl.attribute === false) return false;\n if (typeof decl.attribute === 'string') return decl.attribute;\n return String(key).toLowerCase();\n};\n\n/** Snapshot one element's reactive properties, attributes, and flags. */\nexport const collectDetails = (el: Element): InspectorDetails => {\n const re = el as ReactiveElementLike;\n const declarations = re.constructor.elementProperties;\n const properties: InspectorProp[] = [];\n if (declarations !== undefined) {\n for (const [key, decl] of declarations) {\n // Reading a reactive property runs its accessor, which may throw; one bad\n // getter must not take out the whole details snapshot.\n let value: unknown;\n let threw = false;\n try {\n value = (el as unknown as Record<PropertyKey, unknown>)[key];\n } catch {\n threw = true;\n }\n properties.push({\n name: typeof key === 'symbol' ? key.toString() : String(key),\n value: threw ? '[getter threw]' : serialize(value),\n type: threw ? 'error' : typeTag(value),\n attribute: attributeName(key, decl),\n reflects: decl.reflect === true,\n state: decl.state === true,\n });\n }\n }\n\n const attributes = Array.from(el.attributes, (a) => ({\n name: a.name,\n value: a.value,\n }));\n\n const meta = metaOf(el);\n return {\n id: idOf(el),\n tagName: el.tagName.toLowerCase(),\n componentName: meta?.componentName,\n source: sourceOf(el),\n attributes,\n properties,\n flags: {\n hasUpdated: re.hasUpdated === true,\n isUpdatePending: re.isUpdatePending === true,\n hasShadowRoot: el.shadowRoot !== null,\n },\n };\n};\n"]}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The hover outline the panel draws over an element in the page.
|
|
3
|
+
*
|
|
4
|
+
* Its own module because two transports drive it: the in-page channel (the
|
|
5
|
+
* fast path, no server in the loop) and the Vite HMR command channel (the
|
|
6
|
+
* fallback, for a panel with no page script to handshake with). Both end up
|
|
7
|
+
* here, so the box is created once and behaves identically either way.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately independent of the source overlay, which draws its own,
|
|
10
|
+
* richer highlight — this one has to work whether or not `sourceOverlay` is
|
|
11
|
+
* enabled.
|
|
5
12
|
*/
|
|
6
13
|
/** Draw the outline over `el`. */
|
|
7
14
|
export declare const showHighlight: (el: Element) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/highlight.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH,kCAAkC;AAClC,eAAO,MAAM,aAAa,OAAQ,OAAO,KAAG,IAS3C,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAO,IAEjC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,OAAQ,MAAM,GAAG,IAAI,KAAG,IAQjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/highlight.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/highlight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AAEpD,IAAI,GAAG,GAAuB,IAAI,CAAC;AAEnC,MAAM,SAAS,GAAG,GAAgB,EAAE;IAClC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpC,GAAG,CAAC,YAAY,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;YACvB,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,YAAY;YACpB,aAAa,EAAE,MAAM;YACrB,UAAU,EAAE,yBAAyB;YACrC,OAAO,EAAE,mBAAmB;YAC5B,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,mBAAmB;SACO,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAW,EAAQ,EAAE;IACjD,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE;QAC/B,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI;QACnB,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;QACjB,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI;KACxB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,GAAS,EAAE;IACvC,IAAI,GAAG,KAAK,IAAI;QAAE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAiB,EAAQ,EAAE;IACvD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QAChB,cAAc,EAAE,CAAC;QACjB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,EAAE,KAAK,SAAS;QAAE,aAAa,CAAC,EAAE,CAAC,CAAC;;QACnC,cAAc,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["/**\n * The hover outline the panel draws over an element in the page.\n *\n * Its own module because two transports drive it: the in-page channel (the\n * fast path, no server in the loop) and the Vite HMR command channel (the\n * fallback, for a panel with no page script to handshake with). Both end up\n * here, so the box is created once and behaves identically either way.\n *\n * Deliberately independent of the source overlay, which draws its own,\n * richer highlight — this one has to work whether or not `sourceOverlay` is\n * enabled.\n */\n\nimport {elementById} from '../timeline/identity.js';\n\nlet box: HTMLElement | null = null;\n\nconst ensureBox = (): HTMLElement => {\n if (box === null) {\n box = document.createElement('div');\n box.setAttribute('data-lit-devtools-highlight', '');\n Object.assign(box.style, {\n position: 'fixed',\n zIndex: '2147483646',\n pointerEvents: 'none',\n background: 'rgba(77, 99, 255, 0.25)',\n outline: '1px solid #4d63ff',\n borderRadius: '2px',\n transition: 'all 80ms ease-out',\n } satisfies Partial<CSSStyleDeclaration>);\n document.body.append(box);\n }\n return box;\n};\n\n/** Draw the outline over `el`. */\nexport const showHighlight = (el: Element): void => {\n const r = el.getBoundingClientRect();\n Object.assign(ensureBox().style, {\n display: 'block',\n left: `${r.left}px`,\n top: `${r.top}px`,\n width: `${r.width}px`,\n height: `${r.height}px`,\n });\n};\n\n/** Hide the outline. Cheap and safe before the box has ever been built. */\nexport const clearHighlight = (): void => {\n if (box !== null) box.style.display = 'none';\n};\n\n/**\n * Outline the element with this id, or clear it for `null` — and also when\n * the id no longer resolves, since a stale outline over the wrong element is\n * worse than none.\n */\nexport const highlightById = (id: number | null): void => {\n if (id === null) {\n clearHighlight();\n return;\n }\n const el = elementById(id);\n if (el !== undefined) showHighlight(el);\n else clearHighlight();\n};\n"]}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Components inspector runtime.
|
|
3
|
+
*
|
|
4
|
+
* Injected into the host page (alongside the timeline runtime) when the
|
|
5
|
+
* DevTools panel is enabled. Answers the panel's tree/details requests over the
|
|
6
|
+
* Vite HMR channel, keeps a watched element's details fresh as it updates, and
|
|
7
|
+
* outlines elements the panel hovers in its tree.
|
|
5
8
|
*/
|
|
6
9
|
export {};
|
|
7
10
|
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/install.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/lib/runtime/inspector/install.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|