{"version":3,"file":"multilanguagejs.umd.cjs","sources":["../src/index.ts"],"sourcesContent":["export type TranslationStrings = Record<string, string>\nexport type Translations = Record<string, TranslationStrings>\n\nexport interface MultilanguageJSOptions {\n  languages: string[]\n  defaultLanguage?: string\n  translations?: Translations\n}\n\nexport default class MultilanguageJS {\n  private language: string | null = null\n  private defaultLanguage: string | null\n  private acceptedLanguages: string[]\n  private translations: Translations\n\n  constructor(options: MultilanguageJSOptions) {\n    this.acceptedLanguages = options.languages\n    this.defaultLanguage = options.defaultLanguage ?? options.languages[0] ?? null\n    this.translations = options.translations ?? {}\n  }\n\n  setLanguage(newLanguage: string): void {\n    if (!this.acceptedLanguages.includes(newLanguage)) {\n      const fallback = this.getDefaultLanguage()\n      if (fallback && fallback !== newLanguage) {\n        this.setLanguage(fallback)\n      }\n      return\n    }\n\n    this.cleanActiveContent()\n    this.language = newLanguage\n    this.showContent()\n    this.applyTranslations()\n  }\n\n  setLanguageFromBrowser(): void {\n    this.setLanguage(navigator.language)\n  }\n\n  getActiveLanguage(): string | null {\n    return this.language\n  }\n\n  getAcceptedLanguages(): string[] {\n    return this.acceptedLanguages\n  }\n\n  getDefaultLanguage(): string | null {\n    return this.defaultLanguage ?? this.acceptedLanguages[0] ?? null\n  }\n\n  setTranslations(translations: Translations): void {\n    this.translations = translations\n    if (this.language) {\n      this.applyTranslations()\n    }\n  }\n\n  getLanguageTemplates(): NodeListOf<HTMLTemplateElement> {\n    return document.querySelectorAll<HTMLTemplateElement>(\n      'template[type=language-group]'\n    )\n  }\n\n  private applyTranslations(): void {\n    const active = this.language\n    if (!active) return\n\n    const activeStrings = this.translations[active]\n    const fallbackStrings = this.defaultLanguage\n      ? this.translations[this.defaultLanguage]\n      : undefined\n\n    const elements = document.querySelectorAll<HTMLElement>('[data-i18n]')\n\n    elements.forEach((el) => {\n      const key = el.getAttribute('data-i18n')\n      if (!key) return\n\n      const value = activeStrings?.[key] ?? fallbackStrings?.[key]\n      if (value !== undefined) {\n        el.textContent = value\n      }\n    })\n  }\n\n  private showContent(): void {\n    const templates = this.getLanguageTemplates()\n    const active = this.language\n    const fallback = this.defaultLanguage\n\n    templates.forEach((template) => {\n      const clone = template.content.cloneNode(true) as DocumentFragment\n      const content =\n        clone.querySelector<HTMLElement>(`[language=${active}]`) ??\n        clone.querySelector<HTMLElement>(`[language=${fallback}]`)\n\n      if (!content) return\n\n      template.parentNode?.insertBefore(content, template)\n    })\n  }\n\n  private cleanActiveContent(): void {\n    document.querySelectorAll('[language]').forEach((el) => el.remove())\n  }\n}\n"],"names":["MultilanguageJS","options","newLanguage","fallback","translations","active","activeStrings","fallbackStrings","el","key","value","templates","template","clone","content","_a"],"mappings":"iOASA,MAAqBA,CAAgB,CAMnC,YAAYC,EAAiC,CAL7C,KAAQ,SAA0B,KAMhC,KAAK,kBAAoBA,EAAQ,UACjC,KAAK,gBAAkBA,EAAQ,iBAAmBA,EAAQ,UAAU,CAAC,GAAK,KAC1E,KAAK,aAAeA,EAAQ,cAAgB,CAAA,CAC9C,CAEA,YAAYC,EAA2B,CACrC,GAAI,CAAC,KAAK,kBAAkB,SAASA,CAAW,EAAG,CACjD,MAAMC,EAAW,KAAK,mBAAA,EAClBA,GAAYA,IAAaD,GAC3B,KAAK,YAAYC,CAAQ,EAE3B,MACF,CAEA,KAAK,mBAAA,EACL,KAAK,SAAWD,EAChB,KAAK,YAAA,EACL,KAAK,kBAAA,CACP,CAEA,wBAA+B,CAC7B,KAAK,YAAY,UAAU,QAAQ,CACrC,CAEA,mBAAmC,CACjC,OAAO,KAAK,QACd,CAEA,sBAAiC,CAC/B,OAAO,KAAK,iBACd,CAEA,oBAAoC,CAClC,OAAO,KAAK,iBAAmB,KAAK,kBAAkB,CAAC,GAAK,IAC9D,CAEA,gBAAgBE,EAAkC,CAChD,KAAK,aAAeA,EAChB,KAAK,UACP,KAAK,kBAAA,CAET,CAEA,sBAAwD,CACtD,OAAO,SAAS,iBACd,+BAAA,CAEJ,CAEQ,mBAA0B,CAChC,MAAMC,EAAS,KAAK,SACpB,GAAI,CAACA,EAAQ,OAEb,MAAMC,EAAgB,KAAK,aAAaD,CAAM,EACxCE,EAAkB,KAAK,gBACzB,KAAK,aAAa,KAAK,eAAe,EACtC,OAEa,SAAS,iBAA8B,aAAa,EAE5D,QAASC,GAAO,CACvB,MAAMC,EAAMD,EAAG,aAAa,WAAW,EACvC,GAAI,CAACC,EAAK,OAEV,MAAMC,GAAQJ,GAAA,YAAAA,EAAgBG,MAAQF,GAAA,YAAAA,EAAkBE,IACpDC,IAAU,SACZF,EAAG,YAAcE,EAErB,CAAC,CACH,CAEQ,aAAoB,CAC1B,MAAMC,EAAY,KAAK,qBAAA,EACjBN,EAAS,KAAK,SACdF,EAAW,KAAK,gBAEtBQ,EAAU,QAASC,GAAa,OAC9B,MAAMC,EAAQD,EAAS,QAAQ,UAAU,EAAI,EACvCE,EACJD,EAAM,cAA2B,aAAaR,CAAM,GAAG,GACvDQ,EAAM,cAA2B,aAAaV,CAAQ,GAAG,EAEtDW,KAELC,EAAAH,EAAS,aAAT,MAAAG,EAAqB,aAAaD,EAASF,GAC7C,CAAC,CACH,CAEQ,oBAA2B,CACjC,SAAS,iBAAiB,YAAY,EAAE,QAASJ,GAAOA,EAAG,QAAQ,CACrE,CACF"}