diff --git a/packages/svelte/src/internal/client/custom-renderer/state.js b/packages/svelte/src/internal/client/custom-renderer/state.js index 43d8cef47a..123e333edd 100644 --- a/packages/svelte/src/internal/client/custom-renderer/state.js +++ b/packages/svelte/src/internal/client/custom-renderer/state.js @@ -7,8 +7,8 @@ */ export let renderer = null; -// to use with $props.id() -export let custom_renderer_window = {}; +// allow for a "window" for each custom renderer...to use with `$props.id` +export let custom_renderer_window_map = new WeakMap(); /** * @param {Renderer | null} $renderer diff --git a/packages/svelte/src/internal/client/dom/operations.js b/packages/svelte/src/internal/client/dom/operations.js index fe9fbb4eda..6194e79944 100644 --- a/packages/svelte/src/internal/client/dom/operations.js +++ b/packages/svelte/src/internal/client/dom/operations.js @@ -13,7 +13,7 @@ import { } from '#client/constants'; import { eager_block_effects } from '../reactivity/batch.js'; import { NAMESPACE_HTML } from '../../../constants.js'; -import { custom_renderer_window, renderer } from '../custom-renderer/state.js'; +import { custom_renderer_window_map, renderer } from '../custom-renderer/state.js'; // export these for reference in the compiled code, making global name deduplication unnecessary /** @type {Window} */ @@ -791,6 +791,11 @@ export function class_list_toggle(element, name, force) { export function get_window() { if (renderer) { + var custom_renderer_window = custom_renderer_window_map.get(renderer); + if (!custom_renderer_window) { + custom_renderer_window = {}; + custom_renderer_window_map.set(renderer, custom_renderer_window); + } return custom_renderer_window; } return window; diff --git a/packages/svelte/src/internal/client/dom/template.js b/packages/svelte/src/internal/client/dom/template.js index a099b7ccb5..50a468f961 100644 --- a/packages/svelte/src/internal/client/dom/template.js +++ b/packages/svelte/src/internal/client/dom/template.js @@ -420,9 +420,8 @@ export function props_id() { let window = get_window(); - // @ts-expect-error This way we ensure the id is unique even across Svelte runtimes + // This way we ensure the id is unique even across Svelte runtimes (window.__svelte ??= {}).uid ??= 1; - // @ts-expect-error return `c${window.__svelte.uid++}`; }