{"version":3,"file":"core.cjs","sources":["../src/locale.ts","../src/attributes.ts","../src/validate.ts","../src/dom.ts"],"sourcesContent":["/** The DOM-free locale controller. No document reads, globals or peer imports. */\nexport const I18N_VERSION = '0.2.0';\nexport type Direction = 'ltr' | 'rtl';\nexport type Primitive = string | number | boolean;\nexport type Values = Readonly<Record<string, Primitive>>;\nexport interface LocaleSnapshot {\n  readonly locale: string;\n  readonly revision: number;\n  readonly fallback: readonly string[];\n  readonly direction: Direction;\n}\nexport interface I18nOptions {\n  locale?: string;\n  fallback?: string | readonly string[];\n  direction?: (locale: string) => Direction;\n}\nexport interface SubscribeOptions { immediate?: boolean; phase?: 'render' | 'notify' }\nexport type LocaleListener = (snapshot: LocaleSnapshot) => void;\nexport interface LoadResult { readonly status: 'applied' | 'superseded'; readonly snapshot: LocaleSnapshot }\nexport interface I18n {\n  readonly snapshot: LocaleSnapshot;\n  readonly locale: string;\n  readonly disposed: boolean;\n  setLocale(locale: string): LocaleSnapshot;\n  refresh(): LocaleSnapshot;\n  subscribe(listener: LocaleListener, options?: SubscribeOptions): () => void;\n  resolveLocale(available: Iterable<string>, requested?: string): string | undefined;\n  directionFor(locale?: string): Direction;\n  formatNumber(value: number | bigint, options?: Intl.NumberFormatOptions): string;\n  formatDate(value: Date | number, options?: Intl.DateTimeFormatOptions): string;\n  plural(value: number, options?: Intl.PluralRulesOptions): Intl.LDMLPluralRule;\n  loadLocale<T>(locale: string, load: (locale: string, signal: AbortSignal) => Promise<T>, commit?: (data: T) => void): Promise<LoadResult>;\n  dispose(): void;\n}\n\nexport function canonicalLocale(locale: string): string {\n  if (typeof locale !== 'string' || !locale.trim()) throw new RangeError('defuss-i18n: locale must be a non-empty BCP 47 tag');\n  return Intl.getCanonicalLocales(locale)[0]!;\n}\n\n/** Strip extensions before walking region/script parents; retain requested tag first. */\nexport function localeChain(locale: string, fallback: readonly string[] = ['en']): string[] {\n  const result: string[] = [];\n  const add = (tag: string): void => {\n    const canonical = canonicalLocale(tag);\n    if (!result.includes(canonical)) result.push(canonical);\n    const parts = new Intl.Locale(canonical).baseName.split('-');\n    while (parts.length) {\n      const candidate = parts.join('-');\n      if (!result.includes(candidate)) result.push(candidate);\n      parts.pop();\n    }\n  };\n  add(locale);\n  fallback.forEach(add);\n  return result;\n}\n\nexport function resolveLocale(available: Iterable<string>, locale: string, fallback: readonly string[] = ['en']): string | undefined {\n  const tags = new Set(Array.from(available, canonicalLocale));\n  return localeChain(locale, fallback).find(tag => tags.has(tag));\n}\n\n/** CLDR likely-subtag script resolution; an explicit script overrides the language. */\nexport function localeDirection(locale: string): Direction {\n  const tag = new Intl.Locale(canonicalLocale(locale)) as Intl.Locale & {\n    getTextInfo?: () => { direction: Direction };\n    textInfo?: { direction: Direction };\n  };\n  const native = typeof tag.getTextInfo === 'function' ? tag.getTextInfo() : tag.textInfo;\n  if (native) return native.direction;\n  const rtlScripts = new Set(['Adlm', 'Arab', 'Armi', 'Avst', 'Elym', 'Hatr', 'Hebr', 'Hung', 'Khar', 'Lydi', 'Mand', 'Mani', 'Mend', 'Merc', 'Mero', 'Narb', 'Nbat', 'Nkoo', 'Orkh', 'Ougr', 'Palm', 'Phli', 'Phlp', 'Phnx', 'Prti', 'Rohg', 'Samr', 'Sarb', 'Sogd', 'Sogo', 'Syrc', 'Thaa', 'Yezi']);\n  return rtlScripts.has(tag.maximize().script ?? '') ? 'rtl' : 'ltr';\n}\n\nexport function createI18n(options: I18nOptions = {}): I18n {\n  const fallback = Object.freeze(Array.from(new Set(\n    (typeof options.fallback === 'string' ? [options.fallback] : options.fallback ?? ['en']).map(canonicalLocale),\n  )));\n  const direction = options.direction ?? localeDirection;\n  const makeSnapshot = (locale: string, revision: number): LocaleSnapshot => {\n    const dir = direction(locale);\n    if (dir !== 'ltr' && dir !== 'rtl') throw new TypeError('defuss-i18n: direction must be ltr or rtl');\n    return Object.freeze({ locale, revision, fallback, direction: dir });\n  };\n  let snapshot = makeSnapshot(canonicalLocale(options.locale ?? 'en'), 0);\n  let disposed = false;\n  let notifying = false;\n  let request = 0;\n  let pending: AbortController | undefined;\n  const listeners = new Map<LocaleListener, 'render' | 'notify'>();\n  const assertLive = (): void => { if (disposed) throw new Error('defuss-i18n: controller is disposed'); };\n  const assertWritable = (): void => {\n    assertLive();\n    if (notifying) throw new Error('defuss-i18n: reentrant locale changes are unsupported; schedule a microtask');\n  };\n  const invalidateLoad = (): void => { request++; pending?.abort(); pending = undefined; };\n  const publish = (locale: string, force = false): LocaleSnapshot => {\n    if (!force && locale === snapshot.locale) return snapshot;\n    const next = makeSnapshot(locale, snapshot.revision + 1);\n    snapshot = next;\n    notifying = true;\n    const errors: unknown[] = [];\n    const batch = Array.from(listeners);\n    try {\n      for (const phase of ['render', 'notify'] as const) {\n        for (const [listener, registeredPhase] of batch) {\n          if (registeredPhase !== phase || !listeners.has(listener)) continue;\n          try { listener(next); } catch (error) { errors.push(error); }\n        }\n      }\n    } finally { notifying = false; }\n    if (errors.length) throw new AggregateError(errors, 'defuss-i18n: locale committed, but one or more subscribers failed');\n    return next;\n  };\n  const api: I18n = {\n    get snapshot() { return snapshot; },\n    get locale() { return snapshot.locale; },\n    get disposed() { return disposed; },\n    setLocale(locale) { assertWritable(); const tag = canonicalLocale(locale); invalidateLoad(); return publish(tag); },\n    refresh() { assertWritable(); invalidateLoad(); return publish(snapshot.locale, true); },\n    subscribe(listener, opts = {}) {\n      assertLive();\n      if (listeners.has(listener)) throw new Error('defuss-i18n: listener already subscribed');\n      listeners.set(listener, opts.phase ?? 'notify');\n      if (opts.immediate) {\n        try { listener(snapshot); } catch (error) { listeners.delete(listener); throw error; }\n      }\n      return () => { listeners.delete(listener); };\n    },\n    resolveLocale(available, requested = snapshot.locale) { return resolveLocale(available, requested, fallback); },\n    directionFor(locale = snapshot.locale) {\n      const dir = direction(canonicalLocale(locale));\n      if (dir !== 'ltr' && dir !== 'rtl') throw new TypeError('defuss-i18n: direction must be ltr or rtl');\n      return dir;\n    },\n    formatNumber(value, opts) { return new Intl.NumberFormat(snapshot.locale, opts).format(value); },\n    formatDate(value, opts) { return new Intl.DateTimeFormat(snapshot.locale, opts).format(value); },\n    plural(value, opts) { return new Intl.PluralRules(snapshot.locale, opts).select(value); },\n    async loadLocale(locale, load, commit) {\n      assertWritable();\n      const tag = canonicalLocale(locale);\n      invalidateLoad();\n      const ticket = request;\n      const controller = new AbortController();\n      pending = controller;\n      let data: Awaited<ReturnType<typeof load>>;\n      try { data = await load(tag, controller.signal); }\n      catch (error) {\n        if (disposed || ticket !== request) return { status: 'superseded', snapshot };\n        pending = undefined;\n        throw error;\n      }\n      if (disposed || ticket !== request) return { status: 'superseded', snapshot };\n      pending = undefined;\n      // Stage data in the loader; mutate sources only in this latest-request commit.\n      const committed = commit?.(data) as unknown;\n      if (committed && typeof (committed as { then?: unknown }).then === 'function') throw new TypeError('defuss-i18n: load commit must be synchronous');\n      if (disposed || ticket !== request) return { status: 'superseded', snapshot };\n      return { status: 'applied', snapshot: publish(tag, true) };\n    },\n    dispose() { if (disposed) return; disposed = true; invalidateLoad(); listeners.clear(); },\n  };\n  return api;\n}\n","import { canonicalLocale, localeChain } from './locale.js';\n\n/** Content attributes only. ARIA state and ID-reference attributes are deliberately absent. */\nexport const TRANSLATABLE_ATTRIBUTES = Object.freeze([\n  'aria-roledescription', 'aria-description', 'aria-placeholder', 'aria-valuetext', 'aria-label',\n  'placeholder', 'download', 'srcset', 'poster', 'title', 'sizes', 'label', 'alt', 'src', 'href', 'content',\n] as const);\nexport type TranslatableAttribute = typeof TRANSLATABLE_ATTRIBUTES[number];\nconst ordered = [...TRANSLATABLE_ATTRIBUTES].sort((a, b) => b.length - a.length);\nexport interface AttributeVariant { readonly attribute: TranslatableAttribute; readonly locale: string }\n\nexport function parseTranslationAttribute(name: string): AttributeVariant | undefined {\n  if (!name.startsWith('data-i18n-')) return undefined;\n  const rest = name.slice(10);\n  for (const attribute of ordered) {\n    const prefix = `${attribute}-`;\n    if (rest.startsWith(prefix)) return { attribute, locale: canonicalLocale(rest.slice(prefix.length)) };\n  }\n  return undefined;\n}\n\nexport function chooseAttribute(\n  variants: ReadonlyMap<string, string>, locale: string, fallback: readonly string[],\n): string | undefined {\n  for (const tag of localeChain(locale, fallback)) if (variants.has(tag)) return variants.get(tag);\n  return undefined;\n}\n","import { canonicalLocale } from './locale.js';\nimport { parseTranslationAttribute } from './attributes.js';\nimport type { Diagnostic, ValidationOptions } from './types.js';\n\nconst controls = new Set(['component', 'target', 'for', 'locale', 'plural', 'count', 'value']);\nexport const PLURAL_CATEGORIES = new Set(['zero', 'one', 'two', 'few', 'many', 'other']);\n\n/** Include root, but never cross a nested component boundary or template content. */\nexport function ownedElements(root: Element): Element[] {\n  return [root, ...root.querySelectorAll('*')].filter(element => {\n    const boundary = element.closest('[data-i18n-component]');\n    return element === root || boundary === root || !boundary || !root.contains(boundary);\n  });\n}\n\nexport function validateI18n(root: Element, options: ValidationOptions = {}): Diagnostic[] {\n  const issues: Diagnostic[] = [];\n  const report = (code: string, message: string, element: Element): void => { issues.push({ code, message, element }); };\n  const targets = new Map<string, Element>();\n  const variants = new Map<string, Set<string>>();\n  const identities = new Map<string, Map<string, string>>();\n  const elements = ownedElements(root);\n  // VERIFIED: document lookups miss shadow roots (browser suite), so resolve IDs in the root's own tree, detached subtrees included.\n  const tree = root.getRootNode() as Element | Document | ShadowRoot;\n  const byId = (id: string): Element | null => 'getElementById' in tree\n    ? tree.getElementById(id) : [tree, ...tree.querySelectorAll('[id]')].find(element => element.id === id) ?? null;\n  const validateContent = (element: Element): void => {\n    const translations = new Map<string, Set<string>>();\n    const record = (attribute: string, locale: string): void => {\n      const locales = translations.get(attribute) ?? new Set<string>();\n      if (locales.has(locale)) report('CONFLICTING_ATTRIBUTE', `conflicting ${attribute}/${locale} variants`, element);\n      locales.add(locale); translations.set(attribute, locales);\n    };\n    for (const attr of element.attributes) {\n      if (!attr.name.startsWith('data-i18n-')) continue;\n      const suffix = attr.name.slice(10);\n      if (controls.has(suffix)) continue;\n      if (suffix.startsWith('remove-')) {\n        let locale: string;\n        try { locale = canonicalLocale(suffix.slice(7)); } catch { report('INVALID_LOCALE', `Invalid locale in ${attr.name}`, element); continue; }\n        for (const name of attr.value.split(/\\s+/).filter(Boolean)) {\n          if (!parseTranslationAttribute(`data-i18n-${name}-en`)) report('UNSUPPORTED_ATTRIBUTE', `Cannot localize ${name}`, element);\n          else record(name, locale);\n        }\n        continue;\n      }\n      try {\n        const parsed = parseTranslationAttribute(attr.name);\n        if (!parsed) report('UNSUPPORTED_ATTRIBUTE', `Unknown or non-content translation attribute ${attr.name}`, element);\n        else record(parsed.attribute, parsed.locale);\n      } catch { report('INVALID_LOCALE', `Invalid locale in ${attr.name}`, element); }\n    }\n    for (const [attribute, locales] of translations) {\n      for (const locale of options.locales ?? []) {\n        if (!locales.has(canonicalLocale(locale))) report('MISSING_ATTRIBUTE_LOCALE', `${attribute} lacks ${canonicalLocale(locale)}`, element);\n      }\n    }\n    const value = element.getAttribute('data-i18n-value');\n    if (value !== null && (!value || (options.values && !options.values.includes(value)))) {\n      report('UNKNOWN_VALUE', `Missing declared interpolation value ${value}`, element);\n    }\n  };\n  for (const element of elements) {\n    validateContent(element);\n    const target = element.getAttribute('data-i18n-target');\n    if (target !== null) {\n      if (!target) report('EMPTY_TARGET', 'Translation targets need a non-empty name', element);\n      if (targets.has(target)) report('DUPLICATE_TARGET', `Duplicate target ${target}`, element);\n      targets.set(target, element);\n      if (element.localName === 'template') report('INVALID_TARGET', 'A template cannot be a live translation target', element);\n      if (element.querySelector('[data-i18n-component]')) report('NESTED_OWNERSHIP', `Target ${target} contains another component`, element);\n      const ancestor = element.parentElement?.closest('[data-i18n-target]');\n      if (ancestor && root.contains(ancestor)) {\n        report('OVERLAPPING_TARGET', 'Translation targets must not overlap', element);\n      }\n    }\n    const sourceFor = element.getAttribute('data-i18n-for');\n    if (sourceFor === null) continue;\n    if (element.localName !== 'template') { report('INVALID_SOURCE', 'Translation sources must be template elements', element); continue; }\n    let locale: string;\n    try { locale = canonicalLocale(element.getAttribute('data-i18n-locale') ?? ''); }\n    catch { report('INVALID_LOCALE', 'Template needs a valid data-i18n-locale', element); continue; }\n    const plural = element.getAttribute('data-i18n-plural') ?? '';\n    if (plural && !PLURAL_CATEGORIES.has(plural)) report('INVALID_PLURAL', `Invalid plural category ${plural}`, element);\n    const key = `${locale}:${plural}`;\n    const entries = variants.get(sourceFor) ?? new Set<string>();\n    if (entries.has(key)) report('DUPLICATE_VARIANT', `Duplicate ${sourceFor}/${key}`, element);\n    entries.add(key);\n    variants.set(sourceFor, entries);\n    const content = (element as HTMLTemplateElement).content;\n    if (content.querySelector('template')) report('NESTED_TEMPLATE', 'Nested templates are not supported by the morph peer', element);\n    if (content.querySelector('[data-i18n-component], [data-i18n-target]')) report('NESTED_OWNERSHIP', 'Sources cannot introduce nested localization ownership', element);\n    const ids = new Set<string>();\n    const keys = new Set<string>();\n    const group = `${sourceFor}:${plural}`;\n    const seenIdentities = identities.get(group) ?? new Map<string, string>();\n    for (const child of content.querySelectorAll('*')) {\n      validateContent(child);\n      if (child.id) {\n        if (ids.has(child.id)) report('DUPLICATE_ID', `Duplicate source id ${child.id}`, child);\n        ids.add(child.id);\n      }\n      const siblingKey = child.getAttribute('key');\n      const identityKeys = child.id ? [`id:${child.id}`] : [];\n      if (siblingKey !== null) {\n        const ancestry: string[] = [];\n        let parent = child.parentElement;\n        while (parent) {\n          const siblings = Array.from(parent.parentNode?.childNodes ?? []).filter(node => node.nodeType === 1);\n          ancestry.unshift(parent.id ? `id:${parent.id}` : parent.hasAttribute('key') ? `key:${parent.getAttribute('key')}` : `${parent.localName}:${siblings.indexOf(parent)}`);\n          parent = parent.parentElement;\n        }\n        identityKeys.push(`key:${ancestry.join('/')}/${siblingKey}`);\n      }\n      for (const identity of identityKeys) {\n        const previousTag = seenIdentities.get(identity);\n        if (previousTag && previousTag !== child.localName) report('IDENTITY_TAG_MISMATCH', `${identity} changes tag from ${previousTag} to ${child.localName}`, child);\n        else seenIdentities.set(identity, child.localName);\n      }\n      // Keys are scoped to siblings by morph, not to an entire template.\n      if (siblingKey !== null) {\n        const siblings = Array.from(child.parentNode?.childNodes ?? []).filter(node => node.nodeType === 1) as Element[];\n        if (siblings.filter(sibling => sibling.getAttribute('key') === siblingKey).length > 1 && !keys.has(siblingKey)) {\n          report('DUPLICATE_KEY', `Duplicate sibling key ${siblingKey}`, child); keys.add(siblingKey);\n        }\n      }\n    }\n    identities.set(group, seenIdentities);\n    for (const child of content.querySelectorAll('[aria-labelledby], [aria-describedby], label[for]')) {\n      for (const attr of ['aria-labelledby', 'aria-describedby', 'for']) {\n        for (const id of (child.getAttribute(attr) ?? '').split(/\\s+/).filter(Boolean)) {\n          const existing = byId(id);\n          const liveTarget = elements.find(element => element.getAttribute('data-i18n-target') === sourceFor);\n          const external = existing && (existing === liveTarget || !liveTarget?.contains(existing));\n          if (!ids.has(id) && !external) report('MISSING_ID_REFERENCE', `Unresolved ${attr} reference ${id}`, child);\n        }\n      }\n    }\n  }\n  for (const [name, target] of targets) {\n    const entries = variants.get(name);\n    if (!entries?.size) report('MISSING_SOURCE', `Target ${name} has no templates`, target);\n    const count = target.getAttribute('data-i18n-count');\n    if (count !== null && (!count || (options.values && !options.values.includes(count)))) report('UNKNOWN_VALUE', `Missing plural count ${count}`, target);\n    for (const locale of options.locales ?? []) {\n      const canonical = canonicalLocale(locale);\n      const plain = entries?.has(`${canonical}:`);\n      const other = entries?.has(`${canonical}:other`);\n      if (count !== null ? !other : !plain) report('MISSING_LOCALE', `Target ${name} lacks ${canonical}${count !== null ? '/other' : ''}`, target);\n    }\n    if (entries) {\n      const localeTags = new Set(Array.from(entries, entry => entry.split(':')[0]!));\n      for (const locale of localeTags) {\n        const hasPlural = Array.from(entries).some(entry => entry.startsWith(`${locale}:`) && !entry.endsWith(':'));\n        if (count === null && hasPlural) report('MISSING_COUNT', `Plural variants for ${name} require data-i18n-count`, target);\n        if (count !== null && (!entries.has(`${locale}:other`) || entries.has(`${locale}:`))) {\n          report('INVALID_PLURAL_SET', `${name}/${locale} requires other and no unqualified variant`, target);\n        }\n      }\n    }\n  }\n  for (const name of variants.keys()) if (!targets.has(name)) report('MISSING_TARGET', `Templates refer to missing target ${name}`, root);\n  for (const element of elements.filter(element => element.localName === 'template' && element.hasAttribute('data-i18n-for'))) {\n    const sourceFor = element.getAttribute('data-i18n-for')!;\n    const target = targets.get(sourceFor);\n    if (target?.contains(element)) report('SOURCE_INSIDE_TARGET', `Template for ${sourceFor} would be removed by its own morph`, element);\n  }\n  return issues;\n}\n\nexport function assertValidI18n(root: Element, options?: ValidationOptions): void {\n  const issues = validateI18n(root, options);\n  if (issues.length) throw new Error(`defuss-i18n: invalid component\\n${issues.map(issue => `${issue.code}: ${issue.message}`).join('\\n')}`);\n}\n","import { canonicalLocale, localeChain } from './locale.js';\nimport type { Direction, I18n, LocaleSnapshot, Values } from './locale.js';\nimport { parseTranslationAttribute, TRANSLATABLE_ATTRIBUTES } from './attributes.js';\nimport type { TranslatableAttribute } from './attributes.js';\nimport { assertValidI18n, ownedElements } from './validate.js';\nimport type { BindOptions, I18nBinding, QueryRuntime, RenderContext } from './types.js';\n\nexport const I18N_CHANGE_EVENT = 'defuss-i18n:change';\nconst bindings = new WeakMap<Element, I18nBinding<unknown>>();\n// VERIFIED: HTML serialization leaves raw-text contents unescaped, so a slot value could close its element (browser suite).\nconst RAW_TEXT = new Set(['script', 'style', 'xmp', 'iframe', 'noembed', 'noframes', 'noscript', 'plaintext']);\ninterface Source { readonly locale: string; readonly plural: string; readonly template: HTMLTemplateElement }\ninterface Region { readonly name: string; readonly target: Element; readonly sources: readonly Source[] }\ninterface AttributeWrite { readonly element: Element; readonly name: string; readonly value: string | null }\ninterface TextWrite { readonly element: Element; readonly value: string }\n\nfunction assertValues(values: Values): void {\n  for (const [key, value] of Object.entries(values)) {\n    if (!['string', 'number', 'boolean'].includes(typeof value)) throw new TypeError(`defuss-i18n: ${key} must be a primitive interpolation value`);\n  }\n}\nfunction interpolatePlan(elements: readonly Element[], values: Values): TextWrite[] {\n  return elements.flatMap(element => {\n    const key = element.getAttribute('data-i18n-value');\n    if (key === null) return [];\n    if (!Object.hasOwn(values, key)) throw new Error(`defuss-i18n: missing interpolation value ${key}`);\n    if (element.children.length) throw new Error(`defuss-i18n: interpolation slot ${key} must contain text only`);\n    if (RAW_TEXT.has(element.localName)) throw new Error(`defuss-i18n: interpolation slot ${key} cannot be a raw-text <${element.localName}>`);\n    return [{ element, value: String(values[key]) }];\n  });\n}\nfunction attributePlan(elements: readonly Element[], snapshot: LocaleSnapshot): AttributeWrite[] {\n  const writes: AttributeWrite[] = [];\n  for (const element of elements) {\n    if (element.localName === 'template') continue;\n    const variants = new Map<TranslatableAttribute, Map<string, string | null>>();\n    const add = (name: TranslatableAttribute, locale: string, value: string | null): void => {\n      const map = variants.get(name) ?? new Map<string, string | null>();\n      if (map.has(locale)) throw new Error(`defuss-i18n: conflicting ${name}/${locale} variants`);\n      map.set(locale, value); variants.set(name, map);\n    };\n    for (const attr of element.attributes) {\n      const parsed = parseTranslationAttribute(attr.name);\n      if (parsed) add(parsed.attribute, parsed.locale, attr.value);\n      else if (attr.name.startsWith('data-i18n-remove-')) {\n        const locale = canonicalLocale(attr.name.slice(17));\n        for (const name of attr.value.split(/\\s+/).filter(Boolean)) {\n          if (!(TRANSLATABLE_ATTRIBUTES as readonly string[]).includes(name)) throw new Error(`defuss-i18n: cannot remove localized ${name}`);\n          add(name as TranslatableAttribute, locale, null);\n        }\n      }\n    }\n    for (const [name, translations] of variants) {\n      const selected = localeChain(snapshot.locale, snapshot.fallback).find(locale => translations.has(locale));\n      if (!selected) throw new Error(`defuss-i18n: no ${name} variant for ${snapshot.locale}`);\n      writes.push({ element, name, value: translations.get(selected)! });\n    }\n  }\n  return writes;\n}\n\nexport function createDomI18n(runtime: QueryRuntime) {\n  if (typeof runtime !== 'function' || typeof runtime.morph !== 'function') {\n    throw new Error('defuss-i18n: load defuss-morph and defuss-query (or defuss-shadcn core.js) first');\n  }\n  const writeAttributes = (writes: readonly AttributeWrite[]): void => {\n    for (const { element, name, value } of writes) {\n      if (value === null) { if (element.hasAttribute(name)) runtime(element).attr(name, null); }\n      else if (element.getAttribute(name) !== value) runtime(element).attr(name, value);\n    }\n  };\n  const writeTexts = (writes: readonly TextWrite[]): void => {\n    for (const { element, value } of writes) if (element.textContent !== value) runtime(element).text(value);\n  };\n  function bind<S = undefined>(root: Element, controller: I18n, options: BindOptions<S> = {}): I18nBinding<S> {\n    if (!root || root.nodeType !== 1) throw new TypeError('defuss-i18n: bind requires an Element');\n    const existing = bindings.get(root);\n    if (existing && !existing.disposed) throw new Error('defuss-i18n: component already bound; reuse or dispose its binding');\n    existing?.dispose();\n    if (controller.disposed) throw new Error('defuss-i18n: controller is disposed');\n    // Explicit component marker is also the parent/child ownership boundary.\n    let regions: Region[] = [];\n    let disposed = false;\n    let refreshing = false;\n    let overrideValues: Values | undefined;\n    let context: RenderContext<S> | undefined;\n    let unsubscribe: () => void = () => {};\n    const assertLive = (): void => {\n      if (disposed || controller.disposed) throw new Error('defuss-i18n: binding or controller is disposed');\n    };\n    const scan = (): void => {\n      if (options.render) {\n        if (root.querySelector('[data-i18n-component]')) throw new Error('defuss-i18n: full renderer cannot own nested components');\n        regions = []; return;\n      }\n      assertValidI18n(root);\n      const elements = ownedElements(root);\n      const sources = elements.filter(element => element.localName === 'template' && element.hasAttribute('data-i18n-for')) as HTMLTemplateElement[];\n      regions = elements.filter(element => element.hasAttribute('data-i18n-target')).map(target => ({\n        name: target.getAttribute('data-i18n-target')!, target,\n        sources: sources.filter(source => source.getAttribute('data-i18n-for') === target.getAttribute('data-i18n-target')).map(source => ({\n          locale: canonicalLocale(source.getAttribute('data-i18n-locale')!), plural: source.getAttribute('data-i18n-plural') ?? '',\n          // Capture once. Switching never consumes/moves/mutates authoring sources.\n          template: source.cloneNode(true) as HTMLTemplateElement,\n        })),\n      }));\n    };\n    const refresh = (): void => {\n      assertLive();\n      if (refreshing) throw new Error('defuss-i18n: reentrant binding refresh');\n      refreshing = true;\n      try {\n        const EventConstructor = root.ownerDocument.defaultView?.CustomEvent;\n        if (!EventConstructor) throw new Error('defuss-i18n: component document needs a CustomEvent constructor');\n        const snapshot = controller.snapshot;\n        const state = options.getState?.() as S;\n        const values = overrideValues ?? (typeof options.values === 'function' ? options.values(state, snapshot) : options.values ?? {});\n        assertValues(values);\n        const nextContext: RenderContext<S> = Object.freeze({ state, values, snapshot, locale: snapshot.locale, i18n: controller, root, query: runtime });\n        const plans: { target: Element; html: string; locale: string; direction: Direction }[] = [];\n        if (options.render) {\n          if (root.querySelector('[data-i18n-component]')) throw new Error('defuss-i18n: full renderer cannot own nested components');\n          const html = options.render(nextContext);\n          if (typeof html !== 'string') throw new TypeError('defuss-i18n: renderer must return an HTML string synchronously');\n          const container = root.ownerDocument.createElement('template');\n          container.innerHTML = html;\n          if (container.content.querySelector('[data-i18n-component], template')) throw new Error('defuss-i18n: renderer cannot introduce nested components or templates');\n          const children = Array.from(container.content.querySelectorAll('*'));\n          writeAttributes(attributePlan(children, snapshot)); writeTexts(interpolatePlan(children, values));\n          plans.push({ target: root, html: container.innerHTML, locale: snapshot.locale, direction: snapshot.direction });\n        } else {\n          for (const region of regions) {\n            if (region.target !== root && !root.contains(region.target)) throw new Error('defuss-i18n: target was replaced; call binding.rescan()');\n            const selectedLocale = controller.resolveLocale(region.sources.map(source => source.locale));\n            if (!selectedLocale) throw new Error(`defuss-i18n: no template for ${region.name}/${snapshot.locale}`);\n            const countKey = region.target.getAttribute('data-i18n-count');\n            let category = '';\n            if (countKey !== null) {\n              const count = values[countKey];\n              if (typeof count !== 'number' || !Number.isFinite(count)) throw new TypeError(`defuss-i18n: plural count ${countKey} must be a finite number`);\n              category = new Intl.PluralRules(selectedLocale).select(count);\n            }\n            const source = region.sources.find(item => item.locale === selectedLocale && item.plural === category)\n              ?? region.sources.find(item => item.locale === selectedLocale && item.plural === 'other');\n            if (!source) throw new Error(`defuss-i18n: missing ${region.name}/${selectedLocale}/${category} variant`);\n            const clone = source.template.cloneNode(true) as HTMLTemplateElement;\n            const children = Array.from(clone.content.querySelectorAll('*'));\n            writeAttributes(attributePlan(children, snapshot)); writeTexts(interpolatePlan(children, values));\n            plans.push({ target: region.target, html: clone.innerHTML, locale: selectedLocale, direction: options.reflectLocale === false ? snapshot.direction : controller.directionFor(selectedLocale) });\n          }\n        }\n        const owned = ownedElements(root).filter(element => element.localName !== 'template' &&\n          !plans.some(plan => plan.target !== element && plan.target.contains(element)),\n        );\n        const attrs = attributePlan(owned, snapshot);\n        const texts = interpolatePlan(owned.filter(element => !plans.some(plan => plan.target === element)), values);\n        // All source selection/interpolation/attribute checks precede live writes.\n        for (const plan of plans) {\n          runtime(plan.target).html(plan.html);\n          if (options.reflectLocale !== false) {\n            runtime(plan.target).attr('lang', plan.locale);\n            runtime(plan.target).attr('dir', plan.direction);\n          }\n        }\n        writeAttributes(attrs); writeTexts(texts);\n        if (options.reflectLocale !== false && !plans.some(plan => plan.target === root)) {\n          runtime(root).attr('lang', snapshot.locale); runtime(root).attr('dir', snapshot.direction);\n        }\n        context = nextContext;\n        const rendered = options.afterRender?.(nextContext) as unknown;\n        if (rendered && typeof (rendered as { then?: unknown }).then === 'function') throw new TypeError('defuss-i18n: afterRender must be synchronous');\n        const target = options.eventTarget ?? root;\n        target.dispatchEvent(new EventConstructor(I18N_CHANGE_EVENT, { detail: Object.freeze({ snapshot, root }), bubbles: true }));\n      } finally { refreshing = false; }\n    };\n    const api: I18nBinding<S> = {\n      root, controller,\n      get disposed() { return disposed || controller.disposed; }, get context() { return context; },\n      refresh,\n      setValues(values) {\n        assertLive(); assertValues(values); const previous = overrideValues;\n        overrideValues = Object.freeze({ ...values });\n        // Restore only before live writes; once projected, the map is committed like a locale.\n        try { refresh(); } catch (error) { if (context?.values !== overrideValues) overrideValues = previous; throw error; }\n      },\n      rescan() { assertLive(); scan(); refresh(); },\n      dispose() { if (disposed) return; disposed = true; unsubscribe(); if (bindings.get(root) === api) bindings.delete(root); },\n    };\n    try {\n      bindings.set(root, api as I18nBinding<unknown>);\n      scan();\n      runtime(root).attr('data-i18n-component', root.getAttribute('data-i18n-component') ?? '');\n      unsubscribe = controller.subscribe(refresh, { phase: 'render' });\n      refresh();\n    } catch (error) { api.dispose(); throw error; }\n    return api;\n  }\n  function mount(scope: ParentNode, controller: I18n): { bindings: readonly I18nBinding[]; dispose(): void } {\n    const roots = Array.from(scope.querySelectorAll('[data-i18n-component]'));\n    if ((scope as Node).nodeType === 1 && (scope as Element).hasAttribute('data-i18n-component')) roots.unshift(scope as Element);\n    const mounted: I18nBinding[] = [];\n    try { for (const root of roots) mounted.push(bind(root, controller)); }\n    catch (error) { mounted.forEach(binding => binding.dispose()); throw error; }\n    return { bindings: Object.freeze(mounted), dispose() { mounted.forEach(binding => binding.dispose()); } };\n  }\n  return Object.freeze({ bind, mount });\n}\n"],"names":["element","source"],"mappings":"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"}