gt-react 11.0.3 → 11.0.4

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # gt-react
2
2
 
3
+ ## 11.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1858](https://github.com/generaltranslation/gt/pull/1858) [`006e071`](https://github.com/generaltranslation/gt/commit/006e071bf87ffe80f2d18958ddfa8f18cc2d85d2) Thanks [@ErnestM1234](https://github.com/ErnestM1234)! - Accept parsed `gt.config.json` objects in the compiler and React SPA configuration types.
8
+
9
+ - [#1846](https://github.com/generaltranslation/gt/pull/1846) [`7fb4a74`](https://github.com/generaltranslation/gt/commit/7fb4a74c52065694a40deafcf4596acc09e17f58) Thanks [@ErnestM1234](https://github.com/ErnestM1234)! - Add `parseLocale(request)` to resolve server-rendered React locales from the configured cookie, the `Accept-Language` header, or the default locale.
10
+
11
+ Share cookie and `Accept-Language` parsing across the framework packages.
12
+
13
+ - [#1848](https://github.com/generaltranslation/gt/pull/1848) [`1f33d5f`](https://github.com/generaltranslation/gt/commit/1f33d5f76ffc879d2d21aa2508e07e1d3b66c4e3) Thanks [@bgub](https://github.com/bgub)! - Remove unused dependencies: `@generaltranslation/supported-locales` from gt-react, gt-next, gt-i18n, and @generaltranslation/react-core, and `@generaltranslation/format` from gt-react. Nothing in these packages imports them, so this only reduces install weight.
14
+
15
+ - Updated dependencies [[`006e071`](https://github.com/generaltranslation/gt/commit/006e071bf87ffe80f2d18958ddfa8f18cc2d85d2), [`7fb4a74`](https://github.com/generaltranslation/gt/commit/7fb4a74c52065694a40deafcf4596acc09e17f58), [`d23766c`](https://github.com/generaltranslation/gt/commit/d23766c78a2c1be278d85e896d2521453734a6eb), [`1f33d5f`](https://github.com/generaltranslation/gt/commit/1f33d5f76ffc879d2d21aa2508e07e1d3b66c4e3)]:
16
+ - gt-i18n@1.0.2
17
+ - @generaltranslation/react-core@11.0.4
18
+
3
19
  ## 11.0.3
4
20
 
5
21
  ### Patch Changes
@@ -350,9 +350,9 @@ const createInvalidLocaleWarning = (locale) => createDiagnosticMessage({
350
350
  * @param cookieName - The name of the cookie
351
351
  * @returns The locale from the cookie or undefined if not found or invalid
352
352
  */
353
- function getCookieValue({ cookieName }) {
353
+ function getCookieValue$1({ cookieName }) {
354
354
  if (typeof document === "undefined") return void 0;
355
- return document.cookie.split("; ").find((row) => row.startsWith(`${cookieName}=`))?.split("=")[1];
355
+ return (0, gt_i18n_internal.getCookieValue)(document.cookie, cookieName);
356
356
  }
357
357
  /**
358
358
  * Sets a cookie value for a given cookie name
@@ -368,7 +368,7 @@ function setCookieValue({ cookieName, value }) {
368
368
  //#region src/condition-store/readBrowserLocale.ts
369
369
  function readBrowserLocale(localeCookieName) {
370
370
  const candidates = [];
371
- const cookieLocale = getCookieValue({ cookieName: localeCookieName });
371
+ const cookieLocale = getCookieValue$1({ cookieName: localeCookieName });
372
372
  if (cookieLocale) candidates.push(cookieLocale);
373
373
  const navigatorLocales = navigator?.languages || [];
374
374
  candidates.push(...navigatorLocales);
@@ -393,7 +393,7 @@ var BrowserConditionStore = class {
393
393
  this.reload();
394
394
  };
395
395
  this.getRegion = () => {
396
- const cookieRegion = getCookieValue({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getRegionCookieName() });
396
+ const cookieRegion = getCookieValue$1({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getRegionCookieName() });
397
397
  if (cookieRegion) return cookieRegion;
398
398
  return this.customGetRegion?.();
399
399
  };
@@ -402,7 +402,7 @@ var BrowserConditionStore = class {
402
402
  this.reload();
403
403
  };
404
404
  this.getEnableI18n = () => {
405
- const cookieEnableI18n = getCookieValue({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getEnableI18nCookieName() });
405
+ const cookieEnableI18n = getCookieValue$1({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getEnableI18nCookieName() });
406
406
  if (cookieEnableI18n === void 0) return this.customGetEnableI18n?.() ?? true;
407
407
  return cookieEnableI18n === "true";
408
408
  };
@@ -512,11 +512,11 @@ function determineLocale({ _getLocale: getLocale, locale }) {
512
512
  return i18nConfig.resolveSupportedLocale(candidates);
513
513
  }
514
514
  function determineRegion({ _getRegion: getRegion, region }) {
515
- return getCookieValue({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getRegionCookieName() }) || getRegion?.() || region;
515
+ return getCookieValue$1({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getRegionCookieName() }) || getRegion?.() || region;
516
516
  }
517
517
  function determineEnableI18n({ enableI18n, _getEnableI18n: getEnableI18n }) {
518
518
  if (enableI18n !== void 0) return enableI18n;
519
- const cookieEnableI18n = getCookieValue({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getEnableI18nCookieName() });
519
+ const cookieEnableI18n = getCookieValue$1({ cookieName: (0, _generaltranslation_react_core_pure.getI18nConfig)().getEnableI18nCookieName() });
520
520
  if (cookieEnableI18n === void 0) return getEnableI18n?.() ?? true;
521
521
  return cookieEnableI18n === "true";
522
522
  }
@@ -590,6 +590,26 @@ function initializeGTSRAClient(config) {
590
590
  }));
591
591
  }
592
592
  //#endregion
593
+ //#region src/functions/parseLocale.ts
594
+ /**
595
+ * Resolve the user's locale from a Web Request.
596
+ *
597
+ * The configured locale cookie takes precedence over the Accept-Language
598
+ * header. If neither contains a supported locale, the configured default
599
+ * locale is returned.
600
+ *
601
+ * This is intended for incoming server requests. A Request created in the
602
+ * browser does not automatically include document cookies or Accept-Language.
603
+ */
604
+ function parseLocale(request) {
605
+ const i18nConfig = (0, _generaltranslation_react_core_pure.getI18nConfig)();
606
+ const candidates = [];
607
+ const cookieLocale = (0, gt_i18n_internal.getCookieValue)(request.headers.get("cookie"), i18nConfig.getLocaleCookieName());
608
+ if (cookieLocale) candidates.push(cookieLocale);
609
+ candidates.push(...(0, gt_i18n_internal.parseAcceptLanguage)(request.headers.get("accept-language")));
610
+ return i18nConfig.resolveSupportedLocale(candidates);
611
+ }
612
+ //#endregion
593
613
  //#region src/hooks/conditions-store.ts
594
614
  /**
595
615
  * Returns a function that sets the locale
@@ -942,6 +962,7 @@ Object.defineProperty(exports, "msg", {
942
962
  return _generaltranslation_react_core_pure.msg;
943
963
  }
944
964
  });
965
+ exports.parseLocale = parseLocale;
945
966
  Object.defineProperty(exports, "resolveCanonicalLocale", {
946
967
  enumerable: true,
947
968
  get: function() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.cjs","names":["I18nCache","defaultResetLocaleCookieName","I18nStore","InternalLocaleSelector","InternalRegionSelector","I18nStore","InternalGTProvider"],"sources":["../src/i18n-cache/constants.ts","../src/i18n-cache/LocalStorageTranslationCache.ts","../../core/dist/api-BOEGbEF6.mjs","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/cookies.ts","../src/condition-store/readBrowserLocale.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/singleton-operations.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/runtimeCredentials.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../src/hooks/conditions-store.ts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"sourcesContent":["import type { HtmlTagOptions } from './types';\n\nexport const DEFAULT_HTML_TAG_OPTIONS: HtmlTagOptions = {\n updateHtmlLangTag: true,\n updateHtmlDirTag: true,\n};\n","import { Translation } from 'gt-i18n/types';\n\n// TODO: Add purge key/locks to prevent concurrent purges across tabs\n// TODO: Add cache key/locks for non-atomic read-modify-write operations across tabs\n\n// ===== Types ===== //\n\n/** A cached translation entry with expiry metadata */\ntype CachedEntry = { t: Translation; exp: number };\n\n// ===== Constants ===== //\n\nconst STORAGE_KEY_PREFIX = 'gt:tx:';\nconst PURGE_TIMESTAMP_PREFIX = 'gt:tx:purge:';\nconst FLUSH_INTERVAL = 500;\nconst DEFAULT_MAX_SIZE = 1_000_000; // ~1M characters (localStorage uses UTF-16)\nconst DEFAULT_TTL_MS = 86_400_000; // 24 hours\nconst DEFAULT_PURGE_INTERVAL_MS = 300_000; // 5 minutes\nconst PURGE_TARGET_RATIO = 0.8; // purge down to 80% of max\n\n// Prevents interval leaks on HMR — keyed by storage key\nconst activeIntervals = new Map<string, ReturnType<typeof setInterval>>();\n\n// ===== Class ===== //\n\n/**\n * A localStorage-backed translation cache for a single locale.\n * Used in development mode only to persist runtime translations across page refreshes.\n *\n * Entries are stored with per-entry expiry timestamps and the cache is purged\n * when estimated size exceeds the configured maximum.\n */\nexport class LocalStorageTranslationCache {\n private _storageKey: string;\n private _writeBuffer: Record<string, Translation> = {};\n private _flushTimer: ReturnType<typeof setTimeout> | null = null;\n private _estimatedSize: number = 0;\n private _maxSize: number;\n private _ttl: number;\n private _purgeInterval: number;\n private _purgeTimestampKey: string;\n\n /**\n * @param locale - The locale this cache is for\n * @param projectId - The project id (namespaces localStorage keys)\n * @param init - Optional initial translations to merge on top of localStorage data.\n * init values take priority over stale localStorage entries.\n * @param maxSize - Maximum cache size in characters (default: ~1M)\n * @param ttl - TTL in milliseconds for each entry (default: 24 hours)\n * @param purgeInterval - Background purge check interval in ms (default: 5 min)\n */\n constructor({\n locale,\n projectId,\n init,\n maxSize,\n ttl,\n purgeInterval,\n }: {\n locale: string;\n projectId: string;\n init?: Record<string, Translation>;\n maxSize?: number;\n ttl?: number;\n purgeInterval?: number;\n }) {\n this._storageKey = `${STORAGE_KEY_PREFIX}${projectId}:${locale}`;\n this._purgeTimestampKey = `${PURGE_TIMESTAMP_PREFIX}${projectId}:${locale}`;\n this._maxSize = maxSize ?? DEFAULT_MAX_SIZE;\n this._ttl = ttl ?? DEFAULT_TTL_MS;\n this._purgeInterval = purgeInterval ?? DEFAULT_PURGE_INTERVAL_MS;\n\n // Merge init values on top (init wins on conflict)\n if (init) {\n this.initStorage(init);\n }\n\n // Start background purge interval (clears any existing interval for HMR safety)\n if (activeIntervals.has(this._storageKey)) {\n clearInterval(activeIntervals.get(this._storageKey)!);\n }\n const intervalId = setInterval(\n () => this._backgroundPurge(),\n this._purgeInterval\n );\n activeIntervals.set(this._storageKey, intervalId);\n }\n\n /**\n * Returns the full translation map (cache + pending buffer writes).\n * Filters out expired entries. Buffer entries take priority.\n */\n getInternalCache(): Record<string, Translation> {\n const now = Date.now();\n const cache = this._readFromStorage();\n const result: Record<string, Translation> = {};\n\n for (const [key, entry] of Object.entries(cache)) {\n if (entry.exp > now) {\n result[key] = entry.t;\n }\n }\n\n // Buffer entries are always fresh\n Object.assign(result, this._writeBuffer);\n return result;\n }\n\n /**\n * Queue a translation for writing to localStorage.\n * Writes are batched via a debounced flush.\n */\n write(hash: string, translation: Translation): void {\n this._writeBuffer[hash] = translation;\n this._scheduleFlush();\n }\n\n /**\n * Remove specific entries from the cache by hash.\n */\n purge(hashes: string[]): void {\n const cache = this._readFromStorage();\n for (const hash of hashes) {\n delete cache[hash];\n }\n this._writeRaw(JSON.stringify(cache));\n }\n\n // ===== Private Methods ===== //\n\n /**\n * Schedule a flush of the write buffer.\n * Uses a leading throttle — the first write in a burst schedules a flush\n * after FLUSH_INTERVAL ms; subsequent writes before the timer fires are\n * batched into the same flush.\n */\n private _scheduleFlush(): void {\n if (this._flushTimer) return; // already scheduled\n this._flushTimer = setTimeout(() => {\n this._flushTimer = null;\n this._flush();\n }, FLUSH_INTERVAL);\n }\n\n /**\n * Merge the write buffer into the cache and persist to localStorage.\n * Purges before writing if estimated size exceeds max.\n */\n private _flush(): void {\n if (Object.keys(this._writeBuffer).length === 0) return;\n\n try {\n const cache = this._readFromStorage();\n const now = Date.now();\n\n // Purge if estimated size exceeds max\n if (this._estimatedSize > this._maxSize) {\n this._purgeCache(cache, now);\n }\n\n // Merge buffer entries with expiry\n const exp = now + this._ttl;\n for (const [key, value] of Object.entries(this._writeBuffer)) {\n cache[key] = { t: value, exp };\n }\n\n this._writeRaw(JSON.stringify(cache));\n } catch {\n // Silently fail\n }\n\n this._writeBuffer = {};\n }\n\n /**\n * Purge entries from the cache in place.\n * Phase 1: Remove expired entries.\n * Phase 2: If still over target, drop oldest entries by expiry time.\n */\n private _purgeCache(cache: Record<string, CachedEntry>, now: number): void {\n const keysBeforePurge = Object.keys(cache);\n if (keysBeforePurge.length === 0) return;\n\n const avgEntrySize = this._estimatedSize / keysBeforePurge.length;\n\n // Phase 1: Remove expired entries\n deleteExpiredEntries(cache, now);\n\n // Phase 2: If still over target, drop oldest entries\n const targetSize = this._maxSize * PURGE_TARGET_RATIO;\n const maxEntries = Math.floor(targetSize / avgEntrySize);\n\n const remaining = Object.entries(cache);\n if (remaining.length > maxEntries) {\n remaining.sort((a, b) => a[1].exp - b[1].exp); // oldest first\n const toDrop = remaining.length - maxEntries;\n for (let i = 0; i < toDrop; i++) {\n delete cache[remaining[i][0]];\n }\n }\n }\n\n /**\n * Background purge triggered by setInterval.\n * Checks the last purge timestamp to avoid redundant work across tabs,\n * then removes expired entries. Only writes back if something changed.\n * Timestamp is updated after the purge completes.\n */\n private _backgroundPurge(): void {\n try {\n // Check if a purge is needed (another tab may have purged recently)\n const raw = localStorage.getItem(this._purgeTimestampKey);\n const lastPurge = raw ? parseInt(raw, 10) : 0;\n const now = Date.now();\n\n if (now - lastPurge < this._purgeInterval) return;\n\n // Run TTL purge\n const cache = this._readFromStorage();\n const keysBefore = Object.keys(cache).length;\n\n deleteExpiredEntries(cache, now);\n\n // Only write back if something was actually purged\n if (Object.keys(cache).length < keysBefore) {\n this._writeRaw(JSON.stringify(cache));\n }\n\n // Update timestamp after purge completes\n localStorage.setItem(this._purgeTimestampKey, String(now));\n } catch {\n // Silently fail\n }\n }\n\n /**\n * Read and parse translations from localStorage.\n * Recalibrates estimated size as a side effect.\n * Returns empty object on any error (unavailable, corrupt data, etc.)\n */\n private _readFromStorage(): Record<string, CachedEntry> {\n try {\n const raw = localStorage.getItem(this._storageKey);\n if (!raw) {\n this._estimatedSize = 0;\n return {};\n }\n this._estimatedSize = raw.length;\n return JSON.parse(raw) as Record<string, CachedEntry>;\n } catch {\n this._estimatedSize = 0;\n return {};\n }\n }\n\n /**\n * Persist new entries to localStorage with expiry timestamps.\n * Reads current cache, merges buffer on top, writes back.\n */\n private initStorage(buffer: Record<string, Translation>): void {\n try {\n const cache = this._readFromStorage();\n const exp = Date.now() + this._ttl;\n\n for (const [key, value] of Object.entries(buffer)) {\n cache[key] = { t: value, exp };\n }\n\n this._writeRaw(JSON.stringify(cache));\n } catch {\n // Silently fail — localStorage may be unavailable or full\n }\n }\n\n /**\n * Write a pre-serialized string to localStorage and recalibrate estimate.\n */\n private _writeRaw(serialized: string): void {\n try {\n localStorage.setItem(this._storageKey, serialized);\n this._estimatedSize = serialized.length;\n } catch {\n // Silently fail — localStorage may be unavailable or full\n }\n }\n}\n\n// ===== Helper Functions ===== //\n\n/**\n * Helper function deletes expired entries from a cache in place.\n */\nfunction deleteExpiredEntries(\n cache: Record<string, CachedEntry>,\n now: number = Date.now()\n): void {\n for (const key of Object.keys(cache)) {\n if (cache[key].exp <= now) {\n delete cache[key];\n }\n }\n}\n","//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import type {\n I18nCacheConstructorParams,\n TranslationsLoader,\n} from 'gt-i18n/internal/types';\nimport {\n getI18nConfig,\n getRuntimeEnvironment,\n I18nCache,\n} from 'gt-i18n/internal';\nimport type { HtmlTagOptions } from './types';\nimport type { Translation } from 'gt-i18n/types';\nimport { DEFAULT_HTML_TAG_OPTIONS } from './constants';\nimport { LocalStorageTranslationCache } from './LocalStorageTranslationCache';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\n\n/**\n * The configuration for the BrowserI18nCache\n */\nexport type BrowserI18nCacheParams = I18nCacheConstructorParams & {\n htmlTagOptions?: HtmlTagOptions;\n};\n\n/**\n * I18nCache implementation for Browser.\n */\nexport class BrowserI18nCache extends I18nCache<Translation> {\n /** Customize browser-related behavior */\n private htmlTagOptions?: HtmlTagOptions;\n\n /** Per-locale localStorage translation caches (dev mode only) */\n private _localStorageCaches!: Record<string, LocalStorageTranslationCache>;\n\n /** Whether dev hot reload JSX (Suspense-based <T>) is active */\n private _devHotReloadJsx = false;\n\n constructor(config: BrowserI18nCacheParams) {\n // Must be initialized before super()\n const { htmlTagOptions, ...managerConfig } = config;\n const localStorageCaches: Record<string, LocalStorageTranslationCache> = {};\n const i18nConfig = getI18nConfig();\n const devHotReloadEnabled =\n !!config.loadTranslations && i18nConfig.isDevHotReloadEnabled();\n const projectId = i18nConfig.getProjectId()!;\n const loadTranslations = devHotReloadEnabled\n ? wrapLoaderWithLocalStorage(\n config.loadTranslations!,\n projectId,\n localStorageCaches\n )\n : config.loadTranslations;\n\n // Initialize the I18nCache\n super({\n ...managerConfig,\n loadTranslations,\n });\n\n this._localStorageCaches = localStorageCaches;\n this._devHotReloadJsx = devHotReloadEnabled;\n\n this.htmlTagOptions = {\n ...DEFAULT_HTML_TAG_OPTIONS,\n ...htmlTagOptions,\n };\n\n // For dev hot reload, we need to write the translations to the localStorage cache\n if (devHotReloadEnabled) {\n this.onTranslationsCacheMiss = ({ locale, hash, translation }) => {\n const cache = localStorageCaches[locale];\n if (cache) {\n cache.write(hash, translation);\n } else {\n localStorageCaches[locale] = new LocalStorageTranslationCache({\n locale,\n projectId,\n init: { [hash]: translation },\n });\n }\n };\n }\n }\n\n /**\n * Whether dev hot reload JSX (Suspense-based <T>) is active\n */\n isDevHotReloadJsx(): boolean {\n return this._devHotReloadJsx;\n }\n\n /**\n * Get or create a LocalStorageTranslationCache for the given locale.\n * Instances are lazily created and cached per locale.\n * Returns undefined if not in development mode.\n */\n getLocalStorageTranslationCache(\n locale: string,\n init?: Record<string, Translation>\n ): LocalStorageTranslationCache | undefined {\n if (getRuntimeEnvironment() !== 'development') return undefined;\n\n if (!this._localStorageCaches[locale]) {\n this._localStorageCaches[locale] = new LocalStorageTranslationCache({\n locale,\n projectId: this.config.projectId!,\n init,\n });\n }\n return this._localStorageCaches[locale];\n }\n\n /**\n * Update the html tag (lang, dir)\n *\n * @deprecated, TODO: we should use a different system for managing this html tag\n * this should just be for managing translations\n */\n updateHtmlTag(\n locale: string,\n htmlTagOptions?: { lang?: string; dir?: 'ltr' | 'rtl' } & HtmlTagOptions\n ): void {\n // Get parameters\n const htmlLocale = htmlTagOptions?.lang || locale;\n const i18nConfig = getI18nConfig();\n const canonicalLocale = i18nConfig.resolveCanonicalLocale(htmlLocale);\n\n // Validate parameters\n if (!i18nConfig.isValidLocale(canonicalLocale)) {\n console.warn(createInvalidLocaleWarning(htmlLocale));\n return;\n }\n\n const localeDirection =\n htmlTagOptions?.dir || i18nConfig.getLocaleDirection(canonicalLocale);\n\n // Merge options\n const mergedHtmlTagOptions = {\n ...this.htmlTagOptions,\n ...htmlTagOptions,\n };\n\n // Update html tag\n if (mergedHtmlTagOptions.updateHtmlLangTag) {\n document.documentElement.lang = canonicalLocale;\n }\n if (mergedHtmlTagOptions.updateHtmlDirTag) {\n document.documentElement.dir = localeDirection;\n }\n }\n}\n\n// ===== Helper Functions ===== //\n\n/**\n * Wraps a translation loader to merge localStorage translations in dev mode.\n * On each call: runs the original loader, seeds a LocalStorageTranslationCache\n * with the result (loader wins over stale localStorage), and returns the merged\n * translations — preserving runtime tx() translations from previous sessions.\n *\n * TODO: this should be moved to wrapping in I18nStore\n */\nfunction wrapLoaderWithLocalStorage(\n originalLoader: TranslationsLoader,\n projectId: string,\n localStorageCaches: Record<string, LocalStorageTranslationCache>\n) {\n return async (locale: string) => {\n const loaderTranslations = await originalLoader(locale);\n localStorageCaches[locale] ||= new LocalStorageTranslationCache({\n locale,\n projectId,\n init: loaderTranslations as Record<string, Translation>,\n });\n return localStorageCaches[locale].getInternalCache();\n };\n}\n\nconst createInvalidLocaleWarning = (locale: string) =>\n createDiagnosticMessage({\n source: 'gt-react',\n severity: 'Warning',\n whatHappened: `Locale \"${locale}\" is not valid`,\n fix: 'Use a valid BCP 47 locale code or add a custom mapping',\n });\n","/**\n * Minimally parses a cookie value for a given cookie name\n * @param cookieName - The name of the cookie\n * @returns The locale from the cookie or undefined if not found or invalid\n */\nexport function getCookieValue({\n cookieName,\n}: {\n cookieName: string;\n}): string | undefined {\n if (typeof document === 'undefined') return undefined;\n const rawCookieValue = document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${cookieName}=`))\n ?.split('=')[1];\n return rawCookieValue;\n}\n\n/**\n * Sets a cookie value for a given cookie name\n * @param cookieName - The name of the cookie\n * @param value - The value to set\n * @returns The value that was set\n */\nexport function setCookieValue({\n cookieName,\n value,\n}: {\n cookieName: string;\n value: string;\n}): void {\n if (typeof document === 'undefined') return;\n document.cookie = `${cookieName}=${value};path=/`;\n}\n","import { getCookieValue } from './cookies';\n\nexport function readBrowserLocale(localeCookieName: string): string[] {\n const candidates = [];\n // (1) Check cookie\n\n const cookieLocale = getCookieValue({\n cookieName: localeCookieName,\n });\n if (cookieLocale) candidates.push(cookieLocale);\n\n // (2) Check navigator locales\n const navigatorLocales = navigator?.languages || [];\n candidates.push(...navigatorLocales);\n\n return candidates;\n}\n","import {\n defaultResetLocaleCookieName,\n getI18nConfig,\n} from '@generaltranslation/react-core/pure';\nimport type { WritableConditionStoreParams } from 'gt-i18n/internal';\nimport { getCookieValue, setCookieValue } from './cookies';\nimport { readBrowserLocale } from './readBrowserLocale';\nimport { GetEnableI18n, GetLocale, GetRegion } from '../i18n-cache/types';\nimport {\n LocaleCandidates,\n WritableConditionStoreInterface,\n} from 'gt-i18n/internal/types';\n\ntype SerializedBrowserConditionStoreState = {\n locale: string;\n region: string | undefined;\n enableI18n: boolean;\n};\nexport type ReloadType = (state: SerializedBrowserConditionStoreState) => void;\n\n/**\n * The configuration for the BrowserConditionStore\n * @param {GetLocale} getLocale - The function to get the locale\n */\nexport type BrowserConditionStoreParams = WritableConditionStoreParams & {\n _getLocale?: GetLocale;\n _getRegion?: GetRegion;\n _getEnableI18n?: GetEnableI18n;\n _reload?: ReloadType;\n};\n\n/**\n * Condition store implementation for Browser.\n */\nexport class BrowserConditionStore implements WritableConditionStoreInterface {\n private customReload: ReloadType;\n private customGetLocale?: GetLocale;\n private customGetRegion?: GetRegion;\n private customGetEnableI18n?: GetEnableI18n;\n\n constructor(config: BrowserConditionStoreParams) {\n const i18nConfig = getI18nConfig();\n this.customReload =\n config._reload ??\n (() =>\n typeof window !== 'undefined' ? window.location.reload() : undefined);\n this.customGetLocale = config._getLocale;\n this.customGetRegion = config._getRegion;\n this.customGetEnableI18n = config._getEnableI18n;\n setCookieValue({\n cookieName: i18nConfig.getLocaleCookieName(),\n value: i18nConfig.resolveSupportedLocale(config.locale),\n });\n if (config.region !== undefined) {\n setCookieValue({\n cookieName: i18nConfig.getRegionCookieName(),\n value: config.region,\n });\n }\n this.updateEnableI18n(config.enableI18n ?? true);\n }\n\n getLocale = (): string => {\n return getBrowserLocale(this.customGetLocale);\n };\n\n setLocale = (locale: LocaleCandidates): void => {\n this.updateLocale(locale);\n setCookieValue({\n cookieName: defaultResetLocaleCookieName,\n value: 'true',\n });\n this.reload();\n };\n\n getRegion = (): string | undefined => {\n const cookieRegion = getCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n });\n if (cookieRegion) return cookieRegion;\n return this.customGetRegion?.();\n };\n\n setRegion = (region: string | undefined): void => {\n this.updateRegion(region);\n this.reload();\n };\n\n getEnableI18n = (): boolean => {\n const cookieEnableI18n = getCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n });\n if (cookieEnableI18n === undefined) {\n return this.customGetEnableI18n?.() ?? true;\n }\n return cookieEnableI18n === 'true';\n };\n\n setEnableI18n = (enableI18n: boolean): void => {\n this.updateEnableI18n(enableI18n);\n this.reload();\n };\n\n /**\n * Soft locale update\n */\n updateLocale = (locale: LocaleCandidates): void => {\n const i18nConfig = getI18nConfig();\n setCookieValue({\n cookieName: i18nConfig.getLocaleCookieName(),\n value: i18nConfig.resolveSupportedLocale(locale),\n });\n };\n\n /**\n * Soft region update\n */\n updateRegion = (region: string | undefined): void => {\n setCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n value: region ?? '',\n });\n };\n\n /**\n * Soft enableI18n update\n */\n updateEnableI18n = (enableI18n: boolean): void => {\n setCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n value: enableI18n ? 'true' : 'false',\n });\n };\n\n /**\n * Condition store updates come from either the server or the client.\n * Trigger this reload when we update a value in the condition store from\n * the client.\n */\n reload = (): void => {\n const state = {\n locale: this.getLocale(),\n region: this.getRegion(),\n enableI18n: this.getEnableI18n(),\n };\n this.customReload(state);\n };\n}\n\nfunction getBrowserLocale(getLocale?: GetLocale): string {\n const i18nConfig = getI18nConfig();\n const candidates = readBrowserLocale(i18nConfig.getLocaleCookieName());\n if (getLocale) candidates.push(getLocale());\n return i18nConfig.resolveSupportedLocale(candidates);\n}\n","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport {\n createConditionStoreSingleton,\n ReadonlyConditionStore,\n} from 'gt-i18n/internal';\nimport { BrowserConditionStore } from './BrowserConditionStore';\n\n// Both singletons below are typed views of the same global slot (namespace\n// 'i18n', key 'conditionStore'), so there is a single uninitialized state and\n// one message describes it for both getters.\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-react',\n severity: 'Error',\n whatHappened: 'Cannot read GT runtime context before it has been initialized',\n why: 'the internal ConditionStore singleton is unavailable',\n fix: 'Call initializeGT() (or initializeGTSPA() in SPA apps) before rendering and add a <GTProvider> at the root of your component tree.',\n});\n\nexport const {\n setConditionStore: setReadonlyConditionStore,\n isConditionStoreInitialized: isReadonlyConditionStoreInitialized,\n} = createConditionStoreSingleton<ReadonlyConditionStore>(\n conditionStoreNotInitializedError\n);\n\nexport const {\n getConditionStore: getBrowserConditionStore,\n setConditionStore: setBrowserConditionStore,\n isConditionStoreInitialized: isBrowserConditionStoreInitialized,\n} = createConditionStoreSingleton<BrowserConditionStore>(\n conditionStoreNotInitializedError\n);\n","import type { LocaleCandidates } from 'gt-i18n/internal';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport {\n BrowserConditionStore,\n BrowserConditionStoreParams,\n} from './BrowserConditionStore';\nimport { readBrowserLocale } from './readBrowserLocale';\nimport { getCookieValue } from './cookies';\nimport {\n getBrowserConditionStore,\n isBrowserConditionStoreInitialized,\n setBrowserConditionStore,\n} from './singleton-operations';\n\nexport type CreateBrowserConditionStoreParams = Omit<\n BrowserConditionStoreParams,\n 'locale' | 'enableI18n'\n> & {\n locale?: LocaleCandidates;\n enableI18n?: boolean;\n};\n\n/**\n * Factory to create a BrowserConditionStore for Singleton\n *\n * This exists so we can keep the locale param as required in the constructor\n *\n * Server-provided props are the first candidates for hydration consistency.\n * Cookies fill in missing values to persist state across page reloads.\n *\n * Cookie names come from the I18nConfig singleton so custom names passed to\n * initializeGT() apply here without being threaded through provider props.\n */\nexport function createOrUpdateBrowserConditionStore(\n config: CreateBrowserConditionStoreParams\n) {\n const locale = determineLocale(config);\n const region = determineRegion(config);\n const enableI18n = determineEnableI18n(config);\n\n if (isBrowserConditionStoreInitialized()) {\n // This represents an update from server\n const conditionStore = getBrowserConditionStore();\n conditionStore.updateLocale(locale);\n if (region !== undefined) conditionStore.updateRegion(region);\n conditionStore.updateEnableI18n(enableI18n);\n return conditionStore;\n }\n\n const conditionStore = new BrowserConditionStore({\n ...config,\n locale,\n region,\n enableI18n,\n });\n setBrowserConditionStore(conditionStore);\n return conditionStore;\n}\n\nfunction determineLocale({\n _getLocale: getLocale,\n locale,\n}: CreateBrowserConditionStoreParams): string {\n const i18nConfig = getI18nConfig();\n const candidates = [];\n if (locale) {\n candidates.push(...(Array.isArray(locale) ? locale : [locale]));\n }\n if (getLocale) candidates.push(getLocale());\n candidates.push(...readBrowserLocale(i18nConfig.getLocaleCookieName()));\n return i18nConfig.resolveSupportedLocale(candidates);\n}\n\nfunction determineRegion({\n _getRegion: getRegion,\n region,\n}: CreateBrowserConditionStoreParams): string | undefined {\n const cookieRegion = getCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n });\n return cookieRegion || getRegion?.() || region;\n}\n\nfunction determineEnableI18n({\n enableI18n,\n _getEnableI18n: getEnableI18n,\n}: CreateBrowserConditionStoreParams): boolean {\n if (enableI18n !== undefined) return enableI18n;\n\n const cookieEnableI18n = getCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n });\n if (cookieEnableI18n === undefined) {\n return getEnableI18n?.() ?? true;\n }\n return cookieEnableI18n === 'true';\n}\n","import { getRuntimeEnvironment } from 'gt-i18n/internal';\nimport type { I18nConfigParams } from 'gt-i18n/internal/types';\n\ntype RuntimeCredentials = Pick<I18nConfigParams, 'projectId' | 'devApiKey'>;\ntype RuntimeEnv = {\n DEV?: boolean;\n VITE_GT_PROJECT_ID?: string;\n VITE_GT_DEV_API_KEY?: string;\n};\n\nexport function addRuntimeCredentials<T extends RuntimeCredentials>(\n config: T\n): T {\n const credentials = getRuntimeCredentials();\n return {\n ...config,\n projectId: config.projectId || credentials.projectId,\n devApiKey: config.devApiKey || credentials.devApiKey,\n };\n}\n\nfunction getRuntimeCredentials(): RuntimeCredentials {\n return {\n projectId:\n readImportMetaVite(\n () =>\n (\n import.meta as ImportMeta & {\n env?: RuntimeEnv;\n }\n ).env?.VITE_GT_PROJECT_ID\n ) || readProcessEnvViteProjectId(),\n devApiKey:\n getRuntimeEnvironment() === 'development'\n ? readImportMetaVite(() =>\n (import.meta as ImportMeta & { env?: RuntimeEnv }).env?.DEV\n ? (import.meta as ImportMeta & { env?: RuntimeEnv }).env\n ?.VITE_GT_DEV_API_KEY\n : undefined\n ) || readProcessEnvViteDevApiKey()\n : undefined,\n };\n}\n\nfunction readImportMetaVite(\n readValue: () => string | undefined\n): string | undefined {\n try {\n return normalizeEnvValue(readValue());\n } catch {\n return undefined;\n }\n}\n\nfunction readProcessEnvViteProjectId(): string | undefined {\n try {\n return normalizeEnvValue(process.env.VITE_GT_PROJECT_ID);\n } catch {\n return undefined;\n }\n}\n\nfunction readProcessEnvViteDevApiKey(): string | undefined {\n try {\n return normalizeEnvValue(process.env.VITE_GT_DEV_API_KEY);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeEnvValue(value: string | undefined): string | undefined {\n return value || undefined;\n}\n","import {\n getTranslationsSnapshot,\n I18nStore,\n setI18nStore,\n setReactI18nCache,\n getReadonlyConditionStore,\n initializeI18nConfig,\n} from '@generaltranslation/react-core/pure';\nimport type { I18nConfigParams } from '@generaltranslation/react-core/pure';\nimport { BrowserI18nCache } from '../i18n-cache/BrowserI18nCache';\nimport type { BrowserI18nCacheParams } from '../i18n-cache/BrowserI18nCache';\nimport {\n createOrUpdateBrowserConditionStore,\n CreateBrowserConditionStoreParams,\n} from '../condition-store/createBrowserConditionStore';\nimport { addRuntimeCredentials } from './runtimeCredentials';\n\n/**\n * Initialize GT for an SPA\n * - i18nCache\n * - conditionStore\n * - i18nStore\n *\n * This is SPA for browser runtime\n */\nexport async function initializeGTSPA(\n config: I18nConfigParams &\n BrowserI18nCacheParams &\n CreateBrowserConditionStoreParams\n) {\n const runtimeConfig = addRuntimeCredentials(config);\n initializeI18nConfig(runtimeConfig, 'SPA');\n\n const i18nCache = new BrowserI18nCache(runtimeConfig);\n setReactI18nCache(i18nCache);\n\n createOrUpdateBrowserConditionStore(runtimeConfig);\n\n const i18nStore = new I18nStore();\n setI18nStore(i18nStore);\n\n // Block until translations are loaded\n await getTranslationsSnapshot(getReadonlyConditionStore().getLocale());\n}\n","import {\n internalInitializeGTSRA,\n type I18nConfigParams,\n type ReactI18nCacheParams,\n} from '@generaltranslation/react-core/pure';\nimport { addRuntimeCredentials } from './runtimeCredentials';\n\n/**\n * Initialize GT for client-side rendering.\n */\nexport function initializeGTSRAClient(\n config: I18nConfigParams & ReactI18nCacheParams\n): void {\n internalInitializeGTSRA(\n addRuntimeCredentials({\n cacheExpiryTime: null,\n ...config,\n })\n );\n}\n","import { useCallback } from 'react';\nimport { useConditionStore } from '@generaltranslation/react-core/hooks';\n\n/**\n * Returns a function that sets the locale\n */\nexport function useSetLocale() {\n const conditionStore = useConditionStore();\n return useCallback(\n (locale: string) => {\n conditionStore.setLocale(locale);\n },\n [conditionStore]\n );\n}\n\n/**\n * Returns a function that sets the region\n */\nexport function useSetRegion() {\n const conditionStore = useConditionStore();\n return useCallback(\n (region: string | undefined) => {\n conditionStore.setRegion(region);\n },\n [conditionStore]\n );\n}\n\n/**\n * Returns a function that sets the enableI18n flag in the condition store.\n */\nexport function useSetEnableI18n() {\n const conditionStore = useConditionStore();\n return useCallback(\n (enableI18n: boolean) => {\n conditionStore.setEnableI18n(enableI18n);\n },\n [conditionStore]\n );\n}\n","import { useSetLocale } from '../hooks/conditions-store';\nimport { useInternalLocaleSelector } from '@generaltranslation/react-core/hooks';\n\n/**\n * Gets the list of properties for using a locale selector.\n * Provides locale management utilities for the application.\n *\n * @param locales an optional list of locales to use for the drop down. These locales must be a subset of the locales provided by the `<GTProvider>` context. When not provided, the list of locales from the `<GTProvider>` context is used.\n *\n * @returns {Object} An object containing locale-related utilities:\n * @returns {string} return.locale - The currently selected locale.\n * @returns {string[]} return.locales - The list of all available locales.\n * @returns {function} return.setLocale - Function to update the current locale.\n * @returns {(locale: string) => LocaleProperties} return.getLocaleProperties - Function to retrieve properties for a given locale.\n */\nexport function useLocaleSelector(locales?: string[]) {\n const setLocale = useSetLocale();\n return { setLocale, ...useInternalLocaleSelector(locales) };\n}\n","import { useSetLocale, useSetRegion } from '../hooks/conditions-store';\nimport { useInternalRegionSelector } from '@generaltranslation/react-core/hooks';\nimport type { InternalRegionSelectorOptions } from '@generaltranslation/react-core/hooks';\n\n/**\n * Gets the list of properties for using a region selector.\n * Provides region management utilities for the application.\n *\n * @param {Object} [options] - Optional configuration object.\n * @param {string[]} [options.regions] - An optional array of ISO 3166 region codes to display. If not provided, regions are inferred from supported locales.\n * @param {Object} [options.customMapping] - Optional mapping to override region display names, emojis, or associated locales.\n * @param {boolean} [options.prioritizeCurrentLocaleRegion=true] - If true, the region corresponding to the current locale is prioritized in the list.\n * @param {boolean} [options.sortRegionsAlphabetically=true] - If true, regions are sorted alphabetically by display name.\n *\n * @returns {Object} An object containing region-related utilities:\n * @returns {string | undefined} return.region - The currently selected region code.\n * @returns {function} return.setRegion - Function to update the current region.\n * @returns {string[]} return.regions - The ordered list of available region codes.\n * @returns {Map<string, RegionData>} return.regionData - Map of region codes to their display data (name, emoji, locale).\n * @returns {string} return.locale - The current locale.\n * @returns {function} return.setLocale - Function to update the current locale.\n */\nexport function useRegionSelector(options?: InternalRegionSelectorOptions) {\n const setRegion = useSetRegion();\n const setLocale = useSetLocale();\n return { setRegion, setLocale, ...useInternalRegionSelector(options) };\n}\n","import type React from 'react';\nimport { InternalLocaleSelector } from '@generaltranslation/react-core/components';\nimport { CustomMapping } from 'generaltranslation/types';\nimport { useLocaleSelector } from './useLocaleSelector';\n\n/**\n * A dropdown component that allows users to select a locale.\n * @param {string[]} [locales] - An optional list of locales to use for the dropdown. If not provided, the list of locales from the `<GTProvider>` context is used.\n * @param {object} [customNames] - (deprecated) An optional object to map locales to custom names. Use `customMapping` instead.\n * @param {CustomMapping} [customMapping] - An optional object to map locales to custom display names, emojis, or other properties.\n * @returns {React.ReactElement | null} The rendered locale dropdown component or null to prevent rendering.\n */\nexport function LocaleSelector({\n locales: _locales,\n ...props\n}: LocaleSelectorProps): React.JSX.Element | null {\n // Get locale selector properties\n const { locale, locales, getLocaleProperties, setLocale } =\n useLocaleSelector(_locales);\n\n return (\n <InternalLocaleSelector\n locale={locale}\n locales={locales}\n setLocale={setLocale}\n getLocaleProperties={getLocaleProperties}\n {...props}\n />\n );\n}\n\nexport type LocaleSelectorProps = {\n locales?: string[];\n customNames?: { [key: string]: string };\n customMapping?: CustomMapping;\n [key: string]: any;\n};\n","import type React from 'react';\nimport type { ReactNode } from 'react';\nimport { InternalRegionSelector } from '@generaltranslation/react-core/components';\nimport { useRegionSelector } from './useRegionSelector';\n\n/**\n * A dropdown component that allows users to select a region.\n * @param {string[]} [regions] - An optional array of ISO 3166 region codes to display. If not provided, regions are inferred from the supported locales in the `<GTProvider>` context.\n * @param {React.ReactNode} [placeholder] - Optional placeholder node to display as the first option when no region is selected.\n * @param {object} [customMapping] - An optional object to map region codes to custom display names, emojis, or associated locales.\n * @param {boolean} [prioritizeCurrentLocaleRegion] - If true, the region corresponding to the current locale is prioritized in the list.\n * @param {boolean} [sortRegionsAlphabetically] - If true, regions are sorted alphabetically by display name.\n * @param {boolean} [asLocaleSelector=false] - If true, selecting a region will also update the locale to the region's associated locale.\n * @returns {React.ReactElement | null} The rendered region dropdown component or null to prevent rendering.\n *\n * @example\n * ```tsx\n * <RegionSelector\n * regions={['US', 'CA']}\n * customMapping={{ US: { name: \"United States\", emoji: \"🇺🇸\" } }}\n * placeholder=\"Select a region\"\n * />\n * ```\n */\nexport function RegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n asLocaleSelector = false,\n ...props\n}: RegionSelectorProps): React.JSX.Element | null {\n // Get region selector properties\n const { region, regions, regionData, locale, setRegion, setLocale } =\n useRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n });\n\n const changeRegion = (region: string) => {\n if (asLocaleSelector) {\n const regionLocale = regionData.get(region)?.locale;\n // setRegion reloads the page; update the locale cookie first\n if (regionLocale && locale !== regionLocale) setLocale(regionLocale);\n }\n setRegion(region);\n };\n\n return (\n <InternalRegionSelector\n region={region}\n regions={regions}\n regionData={regionData}\n setRegion={changeRegion}\n {...props}\n />\n );\n}\n\nexport type RegionSelectorProps = {\n regions?: string[];\n placeholder?: ReactNode;\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n asLocaleSelector?: boolean;\n [key: string]: any;\n};\n","import {\n I18nStore,\n InternalGTProvider,\n} from '@generaltranslation/react-core/components';\nimport { useMemo, useRef } from 'react';\nimport type { SharedGTProviderProps } from './GTProviderProps';\nimport { createOrUpdateBrowserConditionStore } from '../condition-store/createBrowserConditionStore';\n\n/**\n * Consumes snapshot from server\n * Implementation for client-side only\n */\nexport function BrowserGTProvider(props: SharedGTProviderProps) {\n const conditionStore = useMemo(() => {\n return createOrUpdateBrowserConditionStore(props);\n }, [props.locale, props.region, props.enableI18n, props._reload]);\n\n const i18nStoreRef = useRef<I18nStore | null>(null);\n if (i18nStoreRef.current == null) {\n i18nStoreRef.current = new I18nStore();\n }\n\n return (\n <InternalGTProvider\n {...props}\n conditionStore={conditionStore}\n i18nStore={i18nStoreRef.current}\n />\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TxProps } from './utils/TxProps';\n\nexport { initializeGTSPA } from './setup/initializeGTSPA';\nexport { initializeGTSRAClient as initializeGT } from './setup/initializeGTSRAClient';\nexport { useLocaleSelector } from './components/useLocaleSelector';\nexport { useRegionSelector } from './components/useRegionSelector';\nexport {\n useSetLocale,\n useSetRegion,\n useSetEnableI18n,\n} from './hooks/conditions-store';\n\n// ===== Components ===== //\nexport { LocaleSelector } from './components/LocaleSelector';\nexport { RegionSelector } from './components/RegionSelector';\nexport { BrowserGTProvider as GTProvider } from './provider/BrowserGTProvider';\n\n// ===== Components ===== //\nexport {\n Branch,\n Plural,\n Derive,\n GtInternalTranslateJsx,\n GtInternalVar,\n T,\n Currency,\n DateTime,\n RelativeTime,\n Var,\n Num,\n} from '@generaltranslation/react-core/components';\n\nexport async function Tx(_props: TxProps): Promise<ReactNode> {\n throw new Error('Tx is only supported via RSC');\n}\n\n// ===== Hooks ===== //\nexport {\n useLocale,\n useRegion,\n useCustomMapping,\n useDefaultLocale,\n useEnableI18n,\n useLocales,\n useFormatLocales,\n useGT,\n useMessages,\n useTranslations,\n useLocaleDirection,\n useLocaleProperties,\n} from '@generaltranslation/react-core/hooks';\n\n// ===== Functions ===== //\nexport {\n msg,\n decodeMsg,\n decodeOptions,\n derive,\n declareVar,\n decodeVars,\n mFallback,\n gtFallback,\n getFormatLocales,\n getDefaultLocale,\n getLocaleProperties,\n getLocales,\n resolveCanonicalLocale,\n getReactI18nCache,\n getTranslationsSnapshot,\n getVersionId,\n createRenderPipeline,\n setReactI18nCache,\n t,\n} from '@generaltranslation/react-core/pure';\n\nexport type {\n RenderPipeline,\n RenderPreparedT,\n} from '@generaltranslation/react-core/pure';\n\nexport type { SharedGTProviderProps } from './provider/GTProviderProps';\nexport {\n GtInternalRuntimeTranslateJsx,\n GtInternalRuntimeTranslateString,\n} from 'gt-i18n/internal';\nexport type {\n GTTranslationOptions,\n RuntimeTranslationOptions,\n} from 'gt-i18n/types';\nexport type {\n SyncResolutionFunction,\n SyncResolutionFunctionWithFallback,\n} from 'gt-i18n/types';\n\n// ===== Singletons ===== //\nexport {\n ReactI18nCache,\n type ReactI18nCacheParams,\n} from '@generaltranslation/react-core/pure';\n"],"mappings":";;;;;;;;;AAEA,MAAa,2BAA2C;CACtD,mBAAmB;CACnB,kBAAkB;CACnB;;;ACOD,MAAM,qBAAqB;AAC3B,MAAM,yBAAyB;AAC/B,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,4BAA4B;AAClC,MAAM,qBAAqB;AAG3B,MAAM,kCAAkB,IAAI,KAA6C;;;;;;;;AAWzE,IAAa,+BAAb,MAA0C;;;;;;;;;;CAmBxC,YAAY,EACV,QACA,WACA,MACA,SACA,KACA,iBAQC;sBA/BiD,EAAE;qBACM;wBAC3B;AA8B/B,OAAK,cAAc,GAAG,qBAAqB,UAAU,GAAG;AACxD,OAAK,qBAAqB,GAAG,yBAAyB,UAAU,GAAG;AACnE,OAAK,WAAW,WAAW;AAC3B,OAAK,OAAO,OAAO;AACnB,OAAK,iBAAiB,iBAAiB;AAGvC,MAAI,KACF,MAAK,YAAY,KAAK;AAIxB,MAAI,gBAAgB,IAAI,KAAK,YAAY,CACvC,eAAc,gBAAgB,IAAI,KAAK,YAAY,CAAE;EAEvD,MAAM,aAAa,kBACX,KAAK,kBAAkB,EAC7B,KAAK,eACN;AACD,kBAAgB,IAAI,KAAK,aAAa,WAAW;;;;;;CAOnD,mBAAgD;EAC9C,MAAM,MAAM,KAAK,KAAK;EACtB,MAAM,QAAQ,KAAK,kBAAkB;EACrC,MAAM,SAAsC,EAAE;AAE9C,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,KAAI,MAAM,MAAM,IACd,QAAO,OAAO,MAAM;AAKxB,SAAO,OAAO,QAAQ,KAAK,aAAa;AACxC,SAAO;;;;;;CAOT,MAAM,MAAc,aAAgC;AAClD,OAAK,aAAa,QAAQ;AAC1B,OAAK,gBAAgB;;;;;CAMvB,MAAM,QAAwB;EAC5B,MAAM,QAAQ,KAAK,kBAAkB;AACrC,OAAK,MAAM,QAAQ,OACjB,QAAO,MAAM;AAEf,OAAK,UAAU,KAAK,UAAU,MAAM,CAAC;;;;;;;;CAWvC,iBAA+B;AAC7B,MAAI,KAAK,YAAa;AACtB,OAAK,cAAc,iBAAiB;AAClC,QAAK,cAAc;AACnB,QAAK,QAAQ;KACZ,eAAe;;;;;;CAOpB,SAAuB;AACrB,MAAI,OAAO,KAAK,KAAK,aAAa,CAAC,WAAW,EAAG;AAEjD,MAAI;GACF,MAAM,QAAQ,KAAK,kBAAkB;GACrC,MAAM,MAAM,KAAK,KAAK;AAGtB,OAAI,KAAK,iBAAiB,KAAK,SAC7B,MAAK,YAAY,OAAO,IAAI;GAI9B,MAAM,MAAM,MAAM,KAAK;AACvB,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,aAAa,CAC1D,OAAM,OAAO;IAAE,GAAG;IAAO;IAAK;AAGhC,QAAK,UAAU,KAAK,UAAU,MAAM,CAAC;UAC/B;AAIR,OAAK,eAAe,EAAE;;;;;;;CAQxB,YAAoB,OAAoC,KAAmB;EACzE,MAAM,kBAAkB,OAAO,KAAK,MAAM;AAC1C,MAAI,gBAAgB,WAAW,EAAG;EAElC,MAAM,eAAe,KAAK,iBAAiB,gBAAgB;AAG3D,uBAAqB,OAAO,IAAI;EAGhC,MAAM,aAAa,KAAK,WAAW;EACnC,MAAM,aAAa,KAAK,MAAM,aAAa,aAAa;EAExD,MAAM,YAAY,OAAO,QAAQ,MAAM;AACvC,MAAI,UAAU,SAAS,YAAY;AACjC,aAAU,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;GAC7C,MAAM,SAAS,UAAU,SAAS;AAClC,QAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,QAAO,MAAM,UAAU,GAAG;;;;;;;;;CAWhC,mBAAiC;AAC/B,MAAI;GAEF,MAAM,MAAM,aAAa,QAAQ,KAAK,mBAAmB;GACzD,MAAM,YAAY,MAAM,SAAS,KAAK,GAAG,GAAG;GAC5C,MAAM,MAAM,KAAK,KAAK;AAEtB,OAAI,MAAM,YAAY,KAAK,eAAgB;GAG3C,MAAM,QAAQ,KAAK,kBAAkB;GACrC,MAAM,aAAa,OAAO,KAAK,MAAM,CAAC;AAEtC,wBAAqB,OAAO,IAAI;AAGhC,OAAI,OAAO,KAAK,MAAM,CAAC,SAAS,WAC9B,MAAK,UAAU,KAAK,UAAU,MAAM,CAAC;AAIvC,gBAAa,QAAQ,KAAK,oBAAoB,OAAO,IAAI,CAAC;UACpD;;;;;;;CAUV,mBAAwD;AACtD,MAAI;GACF,MAAM,MAAM,aAAa,QAAQ,KAAK,YAAY;AAClD,OAAI,CAAC,KAAK;AACR,SAAK,iBAAiB;AACtB,WAAO,EAAE;;AAEX,QAAK,iBAAiB,IAAI;AAC1B,UAAO,KAAK,MAAM,IAAI;UAChB;AACN,QAAK,iBAAiB;AACtB,UAAO,EAAE;;;;;;;CAQb,YAAoB,QAA2C;AAC7D,MAAI;GACF,MAAM,QAAQ,KAAK,kBAAkB;GACrC,MAAM,MAAM,KAAK,KAAK,GAAG,KAAK;AAE9B,QAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,CAC/C,OAAM,OAAO;IAAE,GAAG;IAAO;IAAK;AAGhC,QAAK,UAAU,KAAK,UAAU,MAAM,CAAC;UAC/B;;;;;CAQV,UAAkB,YAA0B;AAC1C,MAAI;AACF,gBAAa,QAAQ,KAAK,aAAa,WAAW;AAClD,QAAK,iBAAiB,WAAW;UAC3B;;;;;;AAWZ,SAAS,qBACP,OACA,MAAc,KAAK,KAAK,EAClB;AACN,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,MAAM,KAAK,OAAO,IACpB,QAAO,MAAM;;;;ACrSnB,SAAS,eAAe,MAAM;CAC7B,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,QAAQ;;AAEvD,SAAS,cAAc,MAAM;CAC5B,MAAM,UAAU,KAAK,MAAM;CAC3B,IAAI,MAAM,QAAQ;AAClB,QAAO,MAAM,GAAG;EACf,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClD,SAAO;;AAER,QAAO,QAAQ,MAAM,GAAG,IAAI;;AAE7B,SAAS,mBAAmB,MAAM;AACjC,QAAO,KAAK,QAAQ,gBAAgB,UAAU,MAAM,aAAa,CAAC;;AAEnE,SAAS,cAAc,SAAS;AAC/B,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,aAAa,MAAM,QAAQ,QAAQ,GAAG,QAAQ,KAAK,KAAK,GAAG;AACjE,KAAI,CAAC,WAAW,MAAM,CAAE,QAAO;AAC/B,QAAO,eAAe,YAAY,aAAa;;AAMhD,SAAS,wBAAwB,EAAE,QAAQ,UAAU,cAAc,aAAa,KAAK,KAAK,QAAQ,SAAS,WAAW;CACrH,MAAM,SAAS,SAAS,WAAW,GAAG,OAAO,GAAG,SAAS,KAAK,GAAG,OAAO,KAAK,WAAW,GAAG,SAAS,KAAK;CACzG,MAAM,aAAa,MAAM,GAAG,cAAc,aAAa,CAAC,WAAW,mBAAmB,cAAc,IAAI,CAAC,KAAK;CAC9G,MAAM,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,SAAS,KAAK,cAAc,OAAO,CAAC;CACrF,MAAM,eAAe;EACpB;EACA;EACA,sBAAsB,GAAG,cAAc,IAAI,CAAC,OAAO,mBAAmB,cAAc,OAAO,CAAC,KAAK;EACjG,sBAAsB,KAAK,IAAI;EAC/B,cAAc,QAAQ;EACtB,CAAC,QAAQ,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe;AAC9C,KAAI,QAAS,cAAa,KAAK,eAAe,UAAU;CACxD,MAAM,UAAU,aAAa,KAAK,IAAI;AACtC,QAAO,SAAS,GAAG,OAAO,GAAG,YAAY;;;;;;;ACrB1C,IAAa,mBAAb,cAAsCA,iBAAAA,UAAuB;CAU3D,YAAY,QAAgC;EAE1C,MAAM,EAAE,gBAAgB,GAAG,kBAAkB;EAC7C,MAAM,qBAAmE,EAAE;EAC3E,MAAM,cAAA,GAAA,iBAAA,gBAA4B;EAClC,MAAM,sBACJ,CAAC,CAAC,OAAO,oBAAoB,WAAW,uBAAuB;EACjE,MAAM,YAAY,WAAW,cAAc;EAC3C,MAAM,mBAAmB,sBACrB,2BACE,OAAO,kBACP,WACA,mBACD,GACD,OAAO;AAGX,QAAM;GACJ,GAAG;GACH;GACD,CAAC;0BAtBuB;AAwBzB,OAAK,sBAAsB;AAC3B,OAAK,mBAAmB;AAExB,OAAK,iBAAiB;GACpB,GAAG;GACH,GAAG;GACJ;AAGD,MAAI,oBACF,MAAK,2BAA2B,EAAE,QAAQ,MAAM,kBAAkB;GAChE,MAAM,QAAQ,mBAAmB;AACjC,OAAI,MACF,OAAM,MAAM,MAAM,YAAY;OAE9B,oBAAmB,UAAU,IAAI,6BAA6B;IAC5D;IACA;IACA,MAAM,GAAG,OAAO,aAAa;IAC9B,CAAC;;;;;;CASV,oBAA6B;AAC3B,SAAO,KAAK;;;;;;;CAQd,gCACE,QACA,MAC0C;AAC1C,OAAA,GAAA,iBAAA,wBAA2B,KAAK,cAAe,QAAO,KAAA;AAEtD,MAAI,CAAC,KAAK,oBAAoB,QAC5B,MAAK,oBAAoB,UAAU,IAAI,6BAA6B;GAClE;GACA,WAAW,KAAK,OAAO;GACvB;GACD,CAAC;AAEJ,SAAO,KAAK,oBAAoB;;;;;;;;CASlC,cACE,QACA,gBACM;EAEN,MAAM,aAAa,gBAAgB,QAAQ;EAC3C,MAAM,cAAA,GAAA,iBAAA,gBAA4B;EAClC,MAAM,kBAAkB,WAAW,uBAAuB,WAAW;AAGrE,MAAI,CAAC,WAAW,cAAc,gBAAgB,EAAE;AAC9C,WAAQ,KAAK,2BAA2B,WAAW,CAAC;AACpD;;EAGF,MAAM,kBACJ,gBAAgB,OAAO,WAAW,mBAAmB,gBAAgB;EAGvE,MAAM,uBAAuB;GAC3B,GAAG,KAAK;GACR,GAAG;GACJ;AAGD,MAAI,qBAAqB,kBACvB,UAAS,gBAAgB,OAAO;AAElC,MAAI,qBAAqB,iBACvB,UAAS,gBAAgB,MAAM;;;;;;;;;;;AAerC,SAAS,2BACP,gBACA,WACA,oBACA;AACA,QAAO,OAAO,WAAmB;EAC/B,MAAM,qBAAqB,MAAM,eAAe,OAAO;AACvD,qBAAmB,YAAY,IAAI,6BAA6B;GAC9D;GACA;GACA,MAAM;GACP,CAAC;AACF,SAAO,mBAAmB,QAAQ,kBAAkB;;;AAIxD,MAAM,8BAA8B,WAClC,wBAAwB;CACtB,QAAQ;CACR,UAAU;CACV,cAAc,WAAW,OAAO;CAChC,KAAK;CACN,CAAC;;;;;;;;ACjLJ,SAAgB,eAAe,EAC7B,cAGqB;AACrB,KAAI,OAAO,aAAa,YAAa,QAAO,KAAA;AAK5C,QAJuB,SAAS,OAC7B,MAAM,KAAK,CACX,MAAM,QAAQ,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC,EAC9C,MAAM,IAAI,CAAC;;;;;;;;AAUjB,SAAgB,eAAe,EAC7B,YACA,SAIO;AACP,KAAI,OAAO,aAAa,YAAa;AACrC,UAAS,SAAS,GAAG,WAAW,GAAG,MAAM;;;;AC9B3C,SAAgB,kBAAkB,kBAAoC;CACpE,MAAM,aAAa,EAAE;CAGrB,MAAM,eAAe,eAAe,EAClC,YAAY,kBACb,CAAC;AACF,KAAI,aAAc,YAAW,KAAK,aAAa;CAG/C,MAAM,mBAAmB,WAAW,aAAa,EAAE;AACnD,YAAW,KAAK,GAAG,iBAAiB;AAEpC,QAAO;;;;;;;ACmBT,IAAa,wBAAb,MAA8E;CAM5E,YAAY,QAAqC;yBAsBvB;AACxB,UAAO,iBAAiB,KAAK,gBAAgB;;oBAGlC,WAAmC;AAC9C,QAAK,aAAa,OAAO;AACzB,kBAAe;IACb,YAAYC,oCAAAA;IACZ,OAAO;IACR,CAAC;AACF,QAAK,QAAQ;;yBAGuB;GACpC,MAAM,eAAe,eAAe,EAClC,aAAA,GAAA,oCAAA,gBAA2B,CAAC,qBAAqB,EAClD,CAAC;AACF,OAAI,aAAc,QAAO;AACzB,UAAO,KAAK,mBAAmB;;oBAGpB,WAAqC;AAChD,QAAK,aAAa,OAAO;AACzB,QAAK,QAAQ;;6BAGgB;GAC7B,MAAM,mBAAmB,eAAe,EACtC,aAAA,GAAA,oCAAA,gBAA2B,CAAC,yBAAyB,EACtD,CAAC;AACF,OAAI,qBAAqB,KAAA,EACvB,QAAO,KAAK,uBAAuB,IAAI;AAEzC,UAAO,qBAAqB;;wBAGb,eAA8B;AAC7C,QAAK,iBAAiB,WAAW;AACjC,QAAK,QAAQ;;uBAMC,WAAmC;GACjD,MAAM,cAAA,GAAA,oCAAA,gBAA4B;AAClC,kBAAe;IACb,YAAY,WAAW,qBAAqB;IAC5C,OAAO,WAAW,uBAAuB,OAAO;IACjD,CAAC;;uBAMY,WAAqC;AACnD,kBAAe;IACb,aAAA,GAAA,oCAAA,gBAA2B,CAAC,qBAAqB;IACjD,OAAO,UAAU;IAClB,CAAC;;2BAMgB,eAA8B;AAChD,kBAAe;IACb,aAAA,GAAA,oCAAA,gBAA2B,CAAC,yBAAyB;IACrD,OAAO,aAAa,SAAS;IAC9B,CAAC;;sBAQiB;GACnB,MAAM,QAAQ;IACZ,QAAQ,KAAK,WAAW;IACxB,QAAQ,KAAK,WAAW;IACxB,YAAY,KAAK,eAAe;IACjC;AACD,QAAK,aAAa,MAAM;;EAxGxB,MAAM,cAAA,GAAA,oCAAA,gBAA4B;AAClC,OAAK,eACH,OAAO,kBAEL,OAAO,WAAW,cAAc,OAAO,SAAS,QAAQ,GAAG,KAAA;AAC/D,OAAK,kBAAkB,OAAO;AAC9B,OAAK,kBAAkB,OAAO;AAC9B,OAAK,sBAAsB,OAAO;AAClC,iBAAe;GACb,YAAY,WAAW,qBAAqB;GAC5C,OAAO,WAAW,uBAAuB,OAAO,OAAO;GACxD,CAAC;AACF,MAAI,OAAO,WAAW,KAAA,EACpB,gBAAe;GACb,YAAY,WAAW,qBAAqB;GAC5C,OAAO,OAAO;GACf,CAAC;AAEJ,OAAK,iBAAiB,OAAO,cAAc,KAAK;;;AA0FpD,SAAS,iBAAiB,WAA+B;CACvD,MAAM,cAAA,GAAA,oCAAA,gBAA4B;CAClC,MAAM,aAAa,kBAAkB,WAAW,qBAAqB,CAAC;AACtE,KAAI,UAAW,YAAW,KAAK,WAAW,CAAC;AAC3C,QAAO,WAAW,uBAAuB,WAAW;;;;AC/ItD,MAAM,oCAAoC,wBAAwB;CAChE,QAAQ;CACR,UAAU;CACV,cAAc;CACd,KAAK;CACL,KAAK;CACN,CAAC;AAEF,MAAa,EACX,mBAAmB,2BACnB,6BAA6B,yCAAA,GAAA,iBAAA,+BAE7B,kCACD;AAED,MAAa,EACX,mBAAmB,0BACnB,mBAAmB,0BACnB,6BAA6B,wCAAA,GAAA,iBAAA,+BAE7B,kCACD;;;;;;;;;;;;;;ACED,SAAgB,oCACd,QACA;CACA,MAAM,SAAS,gBAAgB,OAAO;CACtC,MAAM,SAAS,gBAAgB,OAAO;CACtC,MAAM,aAAa,oBAAoB,OAAO;AAE9C,KAAI,oCAAoC,EAAE;EAExC,MAAM,iBAAiB,0BAA0B;AACjD,iBAAe,aAAa,OAAO;AACnC,MAAI,WAAW,KAAA,EAAW,gBAAe,aAAa,OAAO;AAC7D,iBAAe,iBAAiB,WAAW;AAC3C,SAAO;;CAGT,MAAM,iBAAiB,IAAI,sBAAsB;EAC/C,GAAG;EACH;EACA;EACA;EACD,CAAC;AACF,0BAAyB,eAAe;AACxC,QAAO;;AAGT,SAAS,gBAAgB,EACvB,YAAY,WACZ,UAC4C;CAC5C,MAAM,cAAA,GAAA,oCAAA,gBAA4B;CAClC,MAAM,aAAa,EAAE;AACrB,KAAI,OACF,YAAW,KAAK,GAAI,MAAM,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAE;AAEjE,KAAI,UAAW,YAAW,KAAK,WAAW,CAAC;AAC3C,YAAW,KAAK,GAAG,kBAAkB,WAAW,qBAAqB,CAAC,CAAC;AACvE,QAAO,WAAW,uBAAuB,WAAW;;AAGtD,SAAS,gBAAgB,EACvB,YAAY,WACZ,UACwD;AAIxD,QAHqB,eAAe,EAClC,aAAA,GAAA,oCAAA,gBAA2B,CAAC,qBAAqB,EAClD,CACkB,IAAI,aAAa,IAAI;;AAG1C,SAAS,oBAAoB,EAC3B,YACA,gBAAgB,iBAC6B;AAC7C,KAAI,eAAe,KAAA,EAAW,QAAO;CAErC,MAAM,mBAAmB,eAAe,EACtC,aAAA,GAAA,oCAAA,gBAA2B,CAAC,yBAAyB,EACtD,CAAC;AACF,KAAI,qBAAqB,KAAA,EACvB,QAAO,iBAAiB,IAAI;AAE9B,QAAO,qBAAqB;;;;ACrF9B,SAAgB,sBACd,QACG;CACH,MAAM,cAAc,uBAAuB;AAC3C,QAAO;EACL,GAAG;EACH,WAAW,OAAO,aAAa,YAAY;EAC3C,WAAW,OAAO,aAAa,YAAY;EAC5C;;AAGH,SAAS,wBAA4C;AACnD,QAAO;EACL,WACE,0BAAA,EAAA,EAMM,KAAK,mBACV,IAAI,6BAA6B;EACpC,YAAA,GAAA,iBAAA,wBACyB,KAAK,gBACxB,0BAAA,EAAA,EACqD,KAAK,MAAA,EAAA,CACD,KAC/C,sBACJ,KAAA,EACL,IAAI,6BAA6B,GAClC,KAAA;EACP;;AAGH,SAAS,mBACP,WACoB;AACpB,KAAI;AACF,SAAO,kBAAkB,WAAW,CAAC;SAC/B;AACN;;;AAIJ,SAAS,8BAAkD;AACzD,KAAI;AACF,SAAO,kBAAkB,QAAQ,IAAI,mBAAmB;SAClD;AACN;;;AAIJ,SAAS,8BAAkD;AACzD,KAAI;AACF,SAAO,kBAAkB,QAAQ,IAAI,oBAAoB;SACnD;AACN;;;AAIJ,SAAS,kBAAkB,OAA+C;AACxE,QAAO,SAAS,KAAA;;;;;;;;;;;;AC9ClB,eAAsB,gBACpB,QAGA;CACA,MAAM,gBAAgB,sBAAsB,OAAO;AACnD,EAAA,GAAA,oCAAA,sBAAqB,eAAe,MAAM;AAG1C,EAAA,GAAA,oCAAA,mBAAkB,IADI,iBAAiB,cACZ,CAAC;AAE5B,qCAAoC,cAAc;AAGlD,EAAA,GAAA,oCAAA,cAAa,IADSC,oCAAAA,WACA,CAAC;AAGvB,QAAA,GAAA,oCAAA,0BAAA,GAAA,oCAAA,4BAAyD,CAAC,WAAW,CAAC;;;;;;;AChCxE,SAAgB,sBACd,QACM;AACN,EAAA,GAAA,oCAAA,yBACE,sBAAsB;EACpB,iBAAiB;EACjB,GAAG;EACJ,CAAC,CACH;;;;;;;ACZH,SAAgB,eAAe;CAC7B,MAAM,kBAAA,GAAA,qCAAA,oBAAoC;AAC1C,SAAA,GAAA,MAAA,cACG,WAAmB;AAClB,iBAAe,UAAU,OAAO;IAElC,CAAC,eAAe,CACjB;;;;;AAMH,SAAgB,eAAe;CAC7B,MAAM,kBAAA,GAAA,qCAAA,oBAAoC;AAC1C,SAAA,GAAA,MAAA,cACG,WAA+B;AAC9B,iBAAe,UAAU,OAAO;IAElC,CAAC,eAAe,CACjB;;;;;AAMH,SAAgB,mBAAmB;CACjC,MAAM,kBAAA,GAAA,qCAAA,oBAAoC;AAC1C,SAAA,GAAA,MAAA,cACG,eAAwB;AACvB,iBAAe,cAAc,WAAW;IAE1C,CAAC,eAAe,CACjB;;;;;;;;;;;;;;;;ACxBH,SAAgB,kBAAkB,SAAoB;AAEpD,QAAO;EAAE,WADS,cACA;EAAE,IAAA,GAAA,qCAAA,2BAA6B,QAAQ;EAAE;;;;;;;;;;;;;;;;;;;;;;ACK7D,SAAgB,kBAAkB,SAAyC;AAGzE,QAAO;EAAE,WAFS,cAEA;EAAE,WADF,cACW;EAAE,IAAA,GAAA,qCAAA,2BAA6B,QAAQ;EAAE;;;;;;;;;;;ACbxE,SAAgB,eAAe,EAC7B,SAAS,UACT,GAAG,SAC6C;CAEhD,MAAM,EAAE,QAAQ,SAAS,qBAAqB,cAC5C,kBAAkB,SAAS;AAE7B,QACE,iBAAA,GAAA,kBAAA,KAACC,0CAAAA,wBAAD;EACU;EACC;EACE;EACU;EACrB,GAAI;EACJ,CAAA;;;;;;;;;;;;;;;;;;;;;;;ACHN,SAAgB,eAAe,EAC7B,SAAS,UACT,eACA,+BACA,2BACA,mBAAmB,OACnB,GAAG,SAC6C;CAEhD,MAAM,EAAE,QAAQ,SAAS,YAAY,QAAQ,WAAW,cACtD,kBAAkB;EAChB,SAAS;EACT;EACA;EACA;EACD,CAAC;CAEJ,MAAM,gBAAgB,WAAmB;AACvC,MAAI,kBAAkB;GACpB,MAAM,eAAe,WAAW,IAAI,OAAO,EAAE;AAE7C,OAAI,gBAAgB,WAAW,aAAc,WAAU,aAAa;;AAEtE,YAAU,OAAO;;AAGnB,QACE,iBAAA,GAAA,kBAAA,KAACC,0CAAAA,wBAAD;EACU;EACC;EACG;EACZ,WAAW;EACX,GAAI;EACJ,CAAA;;;;;;;;AC7CN,SAAgB,kBAAkB,OAA8B;CAC9D,MAAM,kBAAA,GAAA,MAAA,eAA+B;AACnC,SAAO,oCAAoC,MAAM;IAChD;EAAC,MAAM;EAAQ,MAAM;EAAQ,MAAM;EAAY,MAAM;EAAQ,CAAC;CAEjE,MAAM,gBAAA,GAAA,MAAA,QAAwC,KAAK;AACnD,KAAI,aAAa,WAAW,KAC1B,cAAa,UAAU,IAAIC,0CAAAA,WAAW;AAGxC,QACE,iBAAA,GAAA,kBAAA,KAACC,0CAAAA,oBAAD;EACE,GAAI;EACY;EAChB,WAAW,aAAa;EACxB,CAAA;;;;ACQN,eAAsB,GAAG,QAAqC;AAC5D,OAAM,IAAI,MAAM,+BAA+B"}
1
+ {"version":3,"file":"index.client.cjs","names":["I18nCache","getCookieValue","getCookieValue","defaultResetLocaleCookieName","getCookieValue","getCookieValue","I18nStore","InternalLocaleSelector","InternalRegionSelector","I18nStore","InternalGTProvider"],"sources":["../src/i18n-cache/constants.ts","../src/i18n-cache/LocalStorageTranslationCache.ts","../../core/dist/api-BOEGbEF6.mjs","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/cookies.ts","../src/condition-store/readBrowserLocale.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/singleton-operations.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/runtimeCredentials.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../src/functions/parseLocale.ts","../src/hooks/conditions-store.ts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"sourcesContent":["import type { HtmlTagOptions } from './types';\n\nexport const DEFAULT_HTML_TAG_OPTIONS: HtmlTagOptions = {\n updateHtmlLangTag: true,\n updateHtmlDirTag: true,\n};\n","import { Translation } from 'gt-i18n/types';\n\n// TODO: Add purge key/locks to prevent concurrent purges across tabs\n// TODO: Add cache key/locks for non-atomic read-modify-write operations across tabs\n\n// ===== Types ===== //\n\n/** A cached translation entry with expiry metadata */\ntype CachedEntry = { t: Translation; exp: number };\n\n// ===== Constants ===== //\n\nconst STORAGE_KEY_PREFIX = 'gt:tx:';\nconst PURGE_TIMESTAMP_PREFIX = 'gt:tx:purge:';\nconst FLUSH_INTERVAL = 500;\nconst DEFAULT_MAX_SIZE = 1_000_000; // ~1M characters (localStorage uses UTF-16)\nconst DEFAULT_TTL_MS = 86_400_000; // 24 hours\nconst DEFAULT_PURGE_INTERVAL_MS = 300_000; // 5 minutes\nconst PURGE_TARGET_RATIO = 0.8; // purge down to 80% of max\n\n// Prevents interval leaks on HMR — keyed by storage key\nconst activeIntervals = new Map<string, ReturnType<typeof setInterval>>();\n\n// ===== Class ===== //\n\n/**\n * A localStorage-backed translation cache for a single locale.\n * Used in development mode only to persist runtime translations across page refreshes.\n *\n * Entries are stored with per-entry expiry timestamps and the cache is purged\n * when estimated size exceeds the configured maximum.\n */\nexport class LocalStorageTranslationCache {\n private _storageKey: string;\n private _writeBuffer: Record<string, Translation> = {};\n private _flushTimer: ReturnType<typeof setTimeout> | null = null;\n private _estimatedSize: number = 0;\n private _maxSize: number;\n private _ttl: number;\n private _purgeInterval: number;\n private _purgeTimestampKey: string;\n\n /**\n * @param locale - The locale this cache is for\n * @param projectId - The project id (namespaces localStorage keys)\n * @param init - Optional initial translations to merge on top of localStorage data.\n * init values take priority over stale localStorage entries.\n * @param maxSize - Maximum cache size in characters (default: ~1M)\n * @param ttl - TTL in milliseconds for each entry (default: 24 hours)\n * @param purgeInterval - Background purge check interval in ms (default: 5 min)\n */\n constructor({\n locale,\n projectId,\n init,\n maxSize,\n ttl,\n purgeInterval,\n }: {\n locale: string;\n projectId: string;\n init?: Record<string, Translation>;\n maxSize?: number;\n ttl?: number;\n purgeInterval?: number;\n }) {\n this._storageKey = `${STORAGE_KEY_PREFIX}${projectId}:${locale}`;\n this._purgeTimestampKey = `${PURGE_TIMESTAMP_PREFIX}${projectId}:${locale}`;\n this._maxSize = maxSize ?? DEFAULT_MAX_SIZE;\n this._ttl = ttl ?? DEFAULT_TTL_MS;\n this._purgeInterval = purgeInterval ?? DEFAULT_PURGE_INTERVAL_MS;\n\n // Merge init values on top (init wins on conflict)\n if (init) {\n this.initStorage(init);\n }\n\n // Start background purge interval (clears any existing interval for HMR safety)\n if (activeIntervals.has(this._storageKey)) {\n clearInterval(activeIntervals.get(this._storageKey)!);\n }\n const intervalId = setInterval(\n () => this._backgroundPurge(),\n this._purgeInterval\n );\n activeIntervals.set(this._storageKey, intervalId);\n }\n\n /**\n * Returns the full translation map (cache + pending buffer writes).\n * Filters out expired entries. Buffer entries take priority.\n */\n getInternalCache(): Record<string, Translation> {\n const now = Date.now();\n const cache = this._readFromStorage();\n const result: Record<string, Translation> = {};\n\n for (const [key, entry] of Object.entries(cache)) {\n if (entry.exp > now) {\n result[key] = entry.t;\n }\n }\n\n // Buffer entries are always fresh\n Object.assign(result, this._writeBuffer);\n return result;\n }\n\n /**\n * Queue a translation for writing to localStorage.\n * Writes are batched via a debounced flush.\n */\n write(hash: string, translation: Translation): void {\n this._writeBuffer[hash] = translation;\n this._scheduleFlush();\n }\n\n /**\n * Remove specific entries from the cache by hash.\n */\n purge(hashes: string[]): void {\n const cache = this._readFromStorage();\n for (const hash of hashes) {\n delete cache[hash];\n }\n this._writeRaw(JSON.stringify(cache));\n }\n\n // ===== Private Methods ===== //\n\n /**\n * Schedule a flush of the write buffer.\n * Uses a leading throttle — the first write in a burst schedules a flush\n * after FLUSH_INTERVAL ms; subsequent writes before the timer fires are\n * batched into the same flush.\n */\n private _scheduleFlush(): void {\n if (this._flushTimer) return; // already scheduled\n this._flushTimer = setTimeout(() => {\n this._flushTimer = null;\n this._flush();\n }, FLUSH_INTERVAL);\n }\n\n /**\n * Merge the write buffer into the cache and persist to localStorage.\n * Purges before writing if estimated size exceeds max.\n */\n private _flush(): void {\n if (Object.keys(this._writeBuffer).length === 0) return;\n\n try {\n const cache = this._readFromStorage();\n const now = Date.now();\n\n // Purge if estimated size exceeds max\n if (this._estimatedSize > this._maxSize) {\n this._purgeCache(cache, now);\n }\n\n // Merge buffer entries with expiry\n const exp = now + this._ttl;\n for (const [key, value] of Object.entries(this._writeBuffer)) {\n cache[key] = { t: value, exp };\n }\n\n this._writeRaw(JSON.stringify(cache));\n } catch {\n // Silently fail\n }\n\n this._writeBuffer = {};\n }\n\n /**\n * Purge entries from the cache in place.\n * Phase 1: Remove expired entries.\n * Phase 2: If still over target, drop oldest entries by expiry time.\n */\n private _purgeCache(cache: Record<string, CachedEntry>, now: number): void {\n const keysBeforePurge = Object.keys(cache);\n if (keysBeforePurge.length === 0) return;\n\n const avgEntrySize = this._estimatedSize / keysBeforePurge.length;\n\n // Phase 1: Remove expired entries\n deleteExpiredEntries(cache, now);\n\n // Phase 2: If still over target, drop oldest entries\n const targetSize = this._maxSize * PURGE_TARGET_RATIO;\n const maxEntries = Math.floor(targetSize / avgEntrySize);\n\n const remaining = Object.entries(cache);\n if (remaining.length > maxEntries) {\n remaining.sort((a, b) => a[1].exp - b[1].exp); // oldest first\n const toDrop = remaining.length - maxEntries;\n for (let i = 0; i < toDrop; i++) {\n delete cache[remaining[i][0]];\n }\n }\n }\n\n /**\n * Background purge triggered by setInterval.\n * Checks the last purge timestamp to avoid redundant work across tabs,\n * then removes expired entries. Only writes back if something changed.\n * Timestamp is updated after the purge completes.\n */\n private _backgroundPurge(): void {\n try {\n // Check if a purge is needed (another tab may have purged recently)\n const raw = localStorage.getItem(this._purgeTimestampKey);\n const lastPurge = raw ? parseInt(raw, 10) : 0;\n const now = Date.now();\n\n if (now - lastPurge < this._purgeInterval) return;\n\n // Run TTL purge\n const cache = this._readFromStorage();\n const keysBefore = Object.keys(cache).length;\n\n deleteExpiredEntries(cache, now);\n\n // Only write back if something was actually purged\n if (Object.keys(cache).length < keysBefore) {\n this._writeRaw(JSON.stringify(cache));\n }\n\n // Update timestamp after purge completes\n localStorage.setItem(this._purgeTimestampKey, String(now));\n } catch {\n // Silently fail\n }\n }\n\n /**\n * Read and parse translations from localStorage.\n * Recalibrates estimated size as a side effect.\n * Returns empty object on any error (unavailable, corrupt data, etc.)\n */\n private _readFromStorage(): Record<string, CachedEntry> {\n try {\n const raw = localStorage.getItem(this._storageKey);\n if (!raw) {\n this._estimatedSize = 0;\n return {};\n }\n this._estimatedSize = raw.length;\n return JSON.parse(raw) as Record<string, CachedEntry>;\n } catch {\n this._estimatedSize = 0;\n return {};\n }\n }\n\n /**\n * Persist new entries to localStorage with expiry timestamps.\n * Reads current cache, merges buffer on top, writes back.\n */\n private initStorage(buffer: Record<string, Translation>): void {\n try {\n const cache = this._readFromStorage();\n const exp = Date.now() + this._ttl;\n\n for (const [key, value] of Object.entries(buffer)) {\n cache[key] = { t: value, exp };\n }\n\n this._writeRaw(JSON.stringify(cache));\n } catch {\n // Silently fail — localStorage may be unavailable or full\n }\n }\n\n /**\n * Write a pre-serialized string to localStorage and recalibrate estimate.\n */\n private _writeRaw(serialized: string): void {\n try {\n localStorage.setItem(this._storageKey, serialized);\n this._estimatedSize = serialized.length;\n } catch {\n // Silently fail — localStorage may be unavailable or full\n }\n }\n}\n\n// ===== Helper Functions ===== //\n\n/**\n * Helper function deletes expired entries from a cache in place.\n */\nfunction deleteExpiredEntries(\n cache: Record<string, CachedEntry>,\n now: number = Date.now()\n): void {\n for (const key of Object.keys(cache)) {\n if (cache[key].exp <= now) {\n delete cache[key];\n }\n }\n}\n","//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import type {\n I18nCacheConstructorParams,\n TranslationsLoader,\n} from 'gt-i18n/internal/types';\nimport {\n getI18nConfig,\n getRuntimeEnvironment,\n I18nCache,\n} from 'gt-i18n/internal';\nimport type { HtmlTagOptions } from './types';\nimport type { Translation } from 'gt-i18n/types';\nimport { DEFAULT_HTML_TAG_OPTIONS } from './constants';\nimport { LocalStorageTranslationCache } from './LocalStorageTranslationCache';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\n\n/**\n * The configuration for the BrowserI18nCache\n */\nexport type BrowserI18nCacheParams = I18nCacheConstructorParams & {\n htmlTagOptions?: HtmlTagOptions;\n};\n\n/**\n * I18nCache implementation for Browser.\n */\nexport class BrowserI18nCache extends I18nCache<Translation> {\n /** Customize browser-related behavior */\n private htmlTagOptions?: HtmlTagOptions;\n\n /** Per-locale localStorage translation caches (dev mode only) */\n private _localStorageCaches!: Record<string, LocalStorageTranslationCache>;\n\n /** Whether dev hot reload JSX (Suspense-based <T>) is active */\n private _devHotReloadJsx = false;\n\n constructor(config: BrowserI18nCacheParams) {\n // Must be initialized before super()\n const { htmlTagOptions, ...managerConfig } = config;\n const localStorageCaches: Record<string, LocalStorageTranslationCache> = {};\n const i18nConfig = getI18nConfig();\n const devHotReloadEnabled =\n !!config.loadTranslations && i18nConfig.isDevHotReloadEnabled();\n const projectId = i18nConfig.getProjectId()!;\n const loadTranslations = devHotReloadEnabled\n ? wrapLoaderWithLocalStorage(\n config.loadTranslations!,\n projectId,\n localStorageCaches\n )\n : config.loadTranslations;\n\n // Initialize the I18nCache\n super({\n ...managerConfig,\n loadTranslations,\n });\n\n this._localStorageCaches = localStorageCaches;\n this._devHotReloadJsx = devHotReloadEnabled;\n\n this.htmlTagOptions = {\n ...DEFAULT_HTML_TAG_OPTIONS,\n ...htmlTagOptions,\n };\n\n // For dev hot reload, we need to write the translations to the localStorage cache\n if (devHotReloadEnabled) {\n this.onTranslationsCacheMiss = ({ locale, hash, translation }) => {\n const cache = localStorageCaches[locale];\n if (cache) {\n cache.write(hash, translation);\n } else {\n localStorageCaches[locale] = new LocalStorageTranslationCache({\n locale,\n projectId,\n init: { [hash]: translation },\n });\n }\n };\n }\n }\n\n /**\n * Whether dev hot reload JSX (Suspense-based <T>) is active\n */\n isDevHotReloadJsx(): boolean {\n return this._devHotReloadJsx;\n }\n\n /**\n * Get or create a LocalStorageTranslationCache for the given locale.\n * Instances are lazily created and cached per locale.\n * Returns undefined if not in development mode.\n */\n getLocalStorageTranslationCache(\n locale: string,\n init?: Record<string, Translation>\n ): LocalStorageTranslationCache | undefined {\n if (getRuntimeEnvironment() !== 'development') return undefined;\n\n if (!this._localStorageCaches[locale]) {\n this._localStorageCaches[locale] = new LocalStorageTranslationCache({\n locale,\n projectId: this.config.projectId!,\n init,\n });\n }\n return this._localStorageCaches[locale];\n }\n\n /**\n * Update the html tag (lang, dir)\n *\n * @deprecated, TODO: we should use a different system for managing this html tag\n * this should just be for managing translations\n */\n updateHtmlTag(\n locale: string,\n htmlTagOptions?: { lang?: string; dir?: 'ltr' | 'rtl' } & HtmlTagOptions\n ): void {\n // Get parameters\n const htmlLocale = htmlTagOptions?.lang || locale;\n const i18nConfig = getI18nConfig();\n const canonicalLocale = i18nConfig.resolveCanonicalLocale(htmlLocale);\n\n // Validate parameters\n if (!i18nConfig.isValidLocale(canonicalLocale)) {\n console.warn(createInvalidLocaleWarning(htmlLocale));\n return;\n }\n\n const localeDirection =\n htmlTagOptions?.dir || i18nConfig.getLocaleDirection(canonicalLocale);\n\n // Merge options\n const mergedHtmlTagOptions = {\n ...this.htmlTagOptions,\n ...htmlTagOptions,\n };\n\n // Update html tag\n if (mergedHtmlTagOptions.updateHtmlLangTag) {\n document.documentElement.lang = canonicalLocale;\n }\n if (mergedHtmlTagOptions.updateHtmlDirTag) {\n document.documentElement.dir = localeDirection;\n }\n }\n}\n\n// ===== Helper Functions ===== //\n\n/**\n * Wraps a translation loader to merge localStorage translations in dev mode.\n * On each call: runs the original loader, seeds a LocalStorageTranslationCache\n * with the result (loader wins over stale localStorage), and returns the merged\n * translations — preserving runtime tx() translations from previous sessions.\n *\n * TODO: this should be moved to wrapping in I18nStore\n */\nfunction wrapLoaderWithLocalStorage(\n originalLoader: TranslationsLoader,\n projectId: string,\n localStorageCaches: Record<string, LocalStorageTranslationCache>\n) {\n return async (locale: string) => {\n const loaderTranslations = await originalLoader(locale);\n localStorageCaches[locale] ||= new LocalStorageTranslationCache({\n locale,\n projectId,\n init: loaderTranslations as Record<string, Translation>,\n });\n return localStorageCaches[locale].getInternalCache();\n };\n}\n\nconst createInvalidLocaleWarning = (locale: string) =>\n createDiagnosticMessage({\n source: 'gt-react',\n severity: 'Warning',\n whatHappened: `Locale \"${locale}\" is not valid`,\n fix: 'Use a valid BCP 47 locale code or add a custom mapping',\n });\n","import { getCookieValue as getCookieValueFromString } from 'gt-i18n/internal';\n\n/**\n * Minimally parses a cookie value for a given cookie name\n * @param cookieName - The name of the cookie\n * @returns The locale from the cookie or undefined if not found or invalid\n */\nexport function getCookieValue({\n cookieName,\n}: {\n cookieName: string;\n}): string | undefined {\n if (typeof document === 'undefined') return undefined;\n return getCookieValueFromString(document.cookie, cookieName);\n}\n\n/**\n * Sets a cookie value for a given cookie name\n * @param cookieName - The name of the cookie\n * @param value - The value to set\n * @returns The value that was set\n */\nexport function setCookieValue({\n cookieName,\n value,\n}: {\n cookieName: string;\n value: string;\n}): void {\n if (typeof document === 'undefined') return;\n document.cookie = `${cookieName}=${value};path=/`;\n}\n","import { getCookieValue } from './cookies';\n\nexport function readBrowserLocale(localeCookieName: string): string[] {\n const candidates = [];\n // (1) Check cookie\n\n const cookieLocale = getCookieValue({\n cookieName: localeCookieName,\n });\n if (cookieLocale) candidates.push(cookieLocale);\n\n // (2) Check navigator locales\n const navigatorLocales = navigator?.languages || [];\n candidates.push(...navigatorLocales);\n\n return candidates;\n}\n","import {\n defaultResetLocaleCookieName,\n getI18nConfig,\n} from '@generaltranslation/react-core/pure';\nimport type { WritableConditionStoreParams } from 'gt-i18n/internal';\nimport { getCookieValue, setCookieValue } from './cookies';\nimport { readBrowserLocale } from './readBrowserLocale';\nimport { GetEnableI18n, GetLocale, GetRegion } from '../i18n-cache/types';\nimport {\n LocaleCandidates,\n WritableConditionStoreInterface,\n} from 'gt-i18n/internal/types';\n\ntype SerializedBrowserConditionStoreState = {\n locale: string;\n region: string | undefined;\n enableI18n: boolean;\n};\nexport type ReloadType = (state: SerializedBrowserConditionStoreState) => void;\n\n/**\n * The configuration for the BrowserConditionStore\n * @param {GetLocale} getLocale - The function to get the locale\n */\nexport type BrowserConditionStoreParams = WritableConditionStoreParams & {\n _getLocale?: GetLocale;\n _getRegion?: GetRegion;\n _getEnableI18n?: GetEnableI18n;\n _reload?: ReloadType;\n};\n\n/**\n * Condition store implementation for Browser.\n */\nexport class BrowserConditionStore implements WritableConditionStoreInterface {\n private customReload: ReloadType;\n private customGetLocale?: GetLocale;\n private customGetRegion?: GetRegion;\n private customGetEnableI18n?: GetEnableI18n;\n\n constructor(config: BrowserConditionStoreParams) {\n const i18nConfig = getI18nConfig();\n this.customReload =\n config._reload ??\n (() =>\n typeof window !== 'undefined' ? window.location.reload() : undefined);\n this.customGetLocale = config._getLocale;\n this.customGetRegion = config._getRegion;\n this.customGetEnableI18n = config._getEnableI18n;\n setCookieValue({\n cookieName: i18nConfig.getLocaleCookieName(),\n value: i18nConfig.resolveSupportedLocale(config.locale),\n });\n if (config.region !== undefined) {\n setCookieValue({\n cookieName: i18nConfig.getRegionCookieName(),\n value: config.region,\n });\n }\n this.updateEnableI18n(config.enableI18n ?? true);\n }\n\n getLocale = (): string => {\n return getBrowserLocale(this.customGetLocale);\n };\n\n setLocale = (locale: LocaleCandidates): void => {\n this.updateLocale(locale);\n setCookieValue({\n cookieName: defaultResetLocaleCookieName,\n value: 'true',\n });\n this.reload();\n };\n\n getRegion = (): string | undefined => {\n const cookieRegion = getCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n });\n if (cookieRegion) return cookieRegion;\n return this.customGetRegion?.();\n };\n\n setRegion = (region: string | undefined): void => {\n this.updateRegion(region);\n this.reload();\n };\n\n getEnableI18n = (): boolean => {\n const cookieEnableI18n = getCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n });\n if (cookieEnableI18n === undefined) {\n return this.customGetEnableI18n?.() ?? true;\n }\n return cookieEnableI18n === 'true';\n };\n\n setEnableI18n = (enableI18n: boolean): void => {\n this.updateEnableI18n(enableI18n);\n this.reload();\n };\n\n /**\n * Soft locale update\n */\n updateLocale = (locale: LocaleCandidates): void => {\n const i18nConfig = getI18nConfig();\n setCookieValue({\n cookieName: i18nConfig.getLocaleCookieName(),\n value: i18nConfig.resolveSupportedLocale(locale),\n });\n };\n\n /**\n * Soft region update\n */\n updateRegion = (region: string | undefined): void => {\n setCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n value: region ?? '',\n });\n };\n\n /**\n * Soft enableI18n update\n */\n updateEnableI18n = (enableI18n: boolean): void => {\n setCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n value: enableI18n ? 'true' : 'false',\n });\n };\n\n /**\n * Condition store updates come from either the server or the client.\n * Trigger this reload when we update a value in the condition store from\n * the client.\n */\n reload = (): void => {\n const state = {\n locale: this.getLocale(),\n region: this.getRegion(),\n enableI18n: this.getEnableI18n(),\n };\n this.customReload(state);\n };\n}\n\nfunction getBrowserLocale(getLocale?: GetLocale): string {\n const i18nConfig = getI18nConfig();\n const candidates = readBrowserLocale(i18nConfig.getLocaleCookieName());\n if (getLocale) candidates.push(getLocale());\n return i18nConfig.resolveSupportedLocale(candidates);\n}\n","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport {\n createConditionStoreSingleton,\n ReadonlyConditionStore,\n} from 'gt-i18n/internal';\nimport { BrowserConditionStore } from './BrowserConditionStore';\n\n// Both singletons below are typed views of the same global slot (namespace\n// 'i18n', key 'conditionStore'), so there is a single uninitialized state and\n// one message describes it for both getters.\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-react',\n severity: 'Error',\n whatHappened: 'Cannot read GT runtime context before it has been initialized',\n why: 'the internal ConditionStore singleton is unavailable',\n fix: 'Call initializeGT() (or initializeGTSPA() in SPA apps) before rendering and add a <GTProvider> at the root of your component tree.',\n});\n\nexport const {\n setConditionStore: setReadonlyConditionStore,\n isConditionStoreInitialized: isReadonlyConditionStoreInitialized,\n} = createConditionStoreSingleton<ReadonlyConditionStore>(\n conditionStoreNotInitializedError\n);\n\nexport const {\n getConditionStore: getBrowserConditionStore,\n setConditionStore: setBrowserConditionStore,\n isConditionStoreInitialized: isBrowserConditionStoreInitialized,\n} = createConditionStoreSingleton<BrowserConditionStore>(\n conditionStoreNotInitializedError\n);\n","import type { LocaleCandidates } from 'gt-i18n/internal';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport {\n BrowserConditionStore,\n BrowserConditionStoreParams,\n} from './BrowserConditionStore';\nimport { readBrowserLocale } from './readBrowserLocale';\nimport { getCookieValue } from './cookies';\nimport {\n getBrowserConditionStore,\n isBrowserConditionStoreInitialized,\n setBrowserConditionStore,\n} from './singleton-operations';\n\nexport type CreateBrowserConditionStoreParams = Omit<\n BrowserConditionStoreParams,\n 'locale' | 'enableI18n'\n> & {\n locale?: LocaleCandidates;\n enableI18n?: boolean;\n};\n\n/**\n * Factory to create a BrowserConditionStore for Singleton\n *\n * This exists so we can keep the locale param as required in the constructor\n *\n * Server-provided props are the first candidates for hydration consistency.\n * Cookies fill in missing values to persist state across page reloads.\n *\n * Cookie names come from the I18nConfig singleton so custom names passed to\n * initializeGT() apply here without being threaded through provider props.\n */\nexport function createOrUpdateBrowserConditionStore(\n config: CreateBrowserConditionStoreParams\n) {\n const locale = determineLocale(config);\n const region = determineRegion(config);\n const enableI18n = determineEnableI18n(config);\n\n if (isBrowserConditionStoreInitialized()) {\n // This represents an update from server\n const conditionStore = getBrowserConditionStore();\n conditionStore.updateLocale(locale);\n if (region !== undefined) conditionStore.updateRegion(region);\n conditionStore.updateEnableI18n(enableI18n);\n return conditionStore;\n }\n\n const conditionStore = new BrowserConditionStore({\n ...config,\n locale,\n region,\n enableI18n,\n });\n setBrowserConditionStore(conditionStore);\n return conditionStore;\n}\n\nfunction determineLocale({\n _getLocale: getLocale,\n locale,\n}: CreateBrowserConditionStoreParams): string {\n const i18nConfig = getI18nConfig();\n const candidates = [];\n if (locale) {\n candidates.push(...(Array.isArray(locale) ? locale : [locale]));\n }\n if (getLocale) candidates.push(getLocale());\n candidates.push(...readBrowserLocale(i18nConfig.getLocaleCookieName()));\n return i18nConfig.resolveSupportedLocale(candidates);\n}\n\nfunction determineRegion({\n _getRegion: getRegion,\n region,\n}: CreateBrowserConditionStoreParams): string | undefined {\n const cookieRegion = getCookieValue({\n cookieName: getI18nConfig().getRegionCookieName(),\n });\n return cookieRegion || getRegion?.() || region;\n}\n\nfunction determineEnableI18n({\n enableI18n,\n _getEnableI18n: getEnableI18n,\n}: CreateBrowserConditionStoreParams): boolean {\n if (enableI18n !== undefined) return enableI18n;\n\n const cookieEnableI18n = getCookieValue({\n cookieName: getI18nConfig().getEnableI18nCookieName(),\n });\n if (cookieEnableI18n === undefined) {\n return getEnableI18n?.() ?? true;\n }\n return cookieEnableI18n === 'true';\n}\n","import { getRuntimeEnvironment } from 'gt-i18n/internal';\nimport type { I18nConfigParams } from 'gt-i18n/internal/types';\n\ntype RuntimeCredentials = Pick<I18nConfigParams, 'projectId' | 'devApiKey'>;\ntype RuntimeEnv = {\n DEV?: boolean;\n VITE_GT_PROJECT_ID?: string;\n VITE_GT_DEV_API_KEY?: string;\n};\n\nexport function addRuntimeCredentials<T extends RuntimeCredentials>(\n config: T\n): T {\n const credentials = getRuntimeCredentials();\n return {\n ...config,\n projectId: config.projectId || credentials.projectId,\n devApiKey: config.devApiKey || credentials.devApiKey,\n };\n}\n\nfunction getRuntimeCredentials(): RuntimeCredentials {\n return {\n projectId:\n readImportMetaVite(\n () =>\n (\n import.meta as ImportMeta & {\n env?: RuntimeEnv;\n }\n ).env?.VITE_GT_PROJECT_ID\n ) || readProcessEnvViteProjectId(),\n devApiKey:\n getRuntimeEnvironment() === 'development'\n ? readImportMetaVite(() =>\n (import.meta as ImportMeta & { env?: RuntimeEnv }).env?.DEV\n ? (import.meta as ImportMeta & { env?: RuntimeEnv }).env\n ?.VITE_GT_DEV_API_KEY\n : undefined\n ) || readProcessEnvViteDevApiKey()\n : undefined,\n };\n}\n\nfunction readImportMetaVite(\n readValue: () => string | undefined\n): string | undefined {\n try {\n return normalizeEnvValue(readValue());\n } catch {\n return undefined;\n }\n}\n\nfunction readProcessEnvViteProjectId(): string | undefined {\n try {\n return normalizeEnvValue(process.env.VITE_GT_PROJECT_ID);\n } catch {\n return undefined;\n }\n}\n\nfunction readProcessEnvViteDevApiKey(): string | undefined {\n try {\n return normalizeEnvValue(process.env.VITE_GT_DEV_API_KEY);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeEnvValue(value: string | undefined): string | undefined {\n return value || undefined;\n}\n","import {\n getTranslationsSnapshot,\n I18nStore,\n setI18nStore,\n setReactI18nCache,\n getReadonlyConditionStore,\n initializeI18nConfig,\n} from '@generaltranslation/react-core/pure';\nimport type { I18nConfigParams } from '@generaltranslation/react-core/pure';\nimport { BrowserI18nCache } from '../i18n-cache/BrowserI18nCache';\nimport type { BrowserI18nCacheParams } from '../i18n-cache/BrowserI18nCache';\nimport {\n createOrUpdateBrowserConditionStore,\n CreateBrowserConditionStoreParams,\n} from '../condition-store/createBrowserConditionStore';\nimport { addRuntimeCredentials } from './runtimeCredentials';\n\n/**\n * Initialize GT for an SPA\n * - i18nCache\n * - conditionStore\n * - i18nStore\n *\n * This is SPA for browser runtime\n */\nexport async function initializeGTSPA(\n config: I18nConfigParams &\n BrowserI18nCacheParams &\n CreateBrowserConditionStoreParams\n) {\n const runtimeConfig = addRuntimeCredentials(config);\n initializeI18nConfig(runtimeConfig, 'SPA');\n\n const i18nCache = new BrowserI18nCache(runtimeConfig);\n setReactI18nCache(i18nCache);\n\n createOrUpdateBrowserConditionStore(runtimeConfig);\n\n const i18nStore = new I18nStore();\n setI18nStore(i18nStore);\n\n // Block until translations are loaded\n await getTranslationsSnapshot(getReadonlyConditionStore().getLocale());\n}\n","import {\n internalInitializeGTSRA,\n type I18nConfigParams,\n type ReactI18nCacheParams,\n} from '@generaltranslation/react-core/pure';\nimport { addRuntimeCredentials } from './runtimeCredentials';\n\n/**\n * Initialize GT for client-side rendering.\n */\nexport function initializeGTSRAClient(\n config: I18nConfigParams & ReactI18nCacheParams\n): void {\n internalInitializeGTSRA(\n addRuntimeCredentials({\n cacheExpiryTime: null,\n ...config,\n })\n );\n}\n","import { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { getCookieValue, parseAcceptLanguage } from 'gt-i18n/internal';\n\ntype RequestWithHeaders = Pick<Request, 'headers'>;\n\n/**\n * Resolve the user's locale from a Web Request.\n *\n * The configured locale cookie takes precedence over the Accept-Language\n * header. If neither contains a supported locale, the configured default\n * locale is returned.\n *\n * This is intended for incoming server requests. A Request created in the\n * browser does not automatically include document cookies or Accept-Language.\n */\nexport function parseLocale(request: RequestWithHeaders): string {\n const i18nConfig = getI18nConfig();\n const candidates: string[] = [];\n const cookieLocale = getCookieValue(\n request.headers.get('cookie'),\n i18nConfig.getLocaleCookieName()\n );\n\n if (cookieLocale) {\n candidates.push(cookieLocale);\n }\n\n candidates.push(\n ...parseAcceptLanguage(request.headers.get('accept-language'))\n );\n\n return i18nConfig.resolveSupportedLocale(candidates);\n}\n","import { useCallback } from 'react';\nimport { useConditionStore } from '@generaltranslation/react-core/hooks';\n\n/**\n * Returns a function that sets the locale\n */\nexport function useSetLocale() {\n const conditionStore = useConditionStore();\n return useCallback(\n (locale: string) => {\n conditionStore.setLocale(locale);\n },\n [conditionStore]\n );\n}\n\n/**\n * Returns a function that sets the region\n */\nexport function useSetRegion() {\n const conditionStore = useConditionStore();\n return useCallback(\n (region: string | undefined) => {\n conditionStore.setRegion(region);\n },\n [conditionStore]\n );\n}\n\n/**\n * Returns a function that sets the enableI18n flag in the condition store.\n */\nexport function useSetEnableI18n() {\n const conditionStore = useConditionStore();\n return useCallback(\n (enableI18n: boolean) => {\n conditionStore.setEnableI18n(enableI18n);\n },\n [conditionStore]\n );\n}\n","import { useSetLocale } from '../hooks/conditions-store';\nimport { useInternalLocaleSelector } from '@generaltranslation/react-core/hooks';\n\n/**\n * Gets the list of properties for using a locale selector.\n * Provides locale management utilities for the application.\n *\n * @param locales an optional list of locales to use for the drop down. These locales must be a subset of the locales provided by the `<GTProvider>` context. When not provided, the list of locales from the `<GTProvider>` context is used.\n *\n * @returns {Object} An object containing locale-related utilities:\n * @returns {string} return.locale - The currently selected locale.\n * @returns {string[]} return.locales - The list of all available locales.\n * @returns {function} return.setLocale - Function to update the current locale.\n * @returns {(locale: string) => LocaleProperties} return.getLocaleProperties - Function to retrieve properties for a given locale.\n */\nexport function useLocaleSelector(locales?: string[]) {\n const setLocale = useSetLocale();\n return { setLocale, ...useInternalLocaleSelector(locales) };\n}\n","import { useSetLocale, useSetRegion } from '../hooks/conditions-store';\nimport { useInternalRegionSelector } from '@generaltranslation/react-core/hooks';\nimport type { InternalRegionSelectorOptions } from '@generaltranslation/react-core/hooks';\n\n/**\n * Gets the list of properties for using a region selector.\n * Provides region management utilities for the application.\n *\n * @param {Object} [options] - Optional configuration object.\n * @param {string[]} [options.regions] - An optional array of ISO 3166 region codes to display. If not provided, regions are inferred from supported locales.\n * @param {Object} [options.customMapping] - Optional mapping to override region display names, emojis, or associated locales.\n * @param {boolean} [options.prioritizeCurrentLocaleRegion=true] - If true, the region corresponding to the current locale is prioritized in the list.\n * @param {boolean} [options.sortRegionsAlphabetically=true] - If true, regions are sorted alphabetically by display name.\n *\n * @returns {Object} An object containing region-related utilities:\n * @returns {string | undefined} return.region - The currently selected region code.\n * @returns {function} return.setRegion - Function to update the current region.\n * @returns {string[]} return.regions - The ordered list of available region codes.\n * @returns {Map<string, RegionData>} return.regionData - Map of region codes to their display data (name, emoji, locale).\n * @returns {string} return.locale - The current locale.\n * @returns {function} return.setLocale - Function to update the current locale.\n */\nexport function useRegionSelector(options?: InternalRegionSelectorOptions) {\n const setRegion = useSetRegion();\n const setLocale = useSetLocale();\n return { setRegion, setLocale, ...useInternalRegionSelector(options) };\n}\n","import type React from 'react';\nimport { InternalLocaleSelector } from '@generaltranslation/react-core/components';\nimport { CustomMapping } from 'generaltranslation/types';\nimport { useLocaleSelector } from './useLocaleSelector';\n\n/**\n * A dropdown component that allows users to select a locale.\n * @param {string[]} [locales] - An optional list of locales to use for the dropdown. If not provided, the list of locales from the `<GTProvider>` context is used.\n * @param {object} [customNames] - (deprecated) An optional object to map locales to custom names. Use `customMapping` instead.\n * @param {CustomMapping} [customMapping] - An optional object to map locales to custom display names, emojis, or other properties.\n * @returns {React.ReactElement | null} The rendered locale dropdown component or null to prevent rendering.\n */\nexport function LocaleSelector({\n locales: _locales,\n ...props\n}: LocaleSelectorProps): React.JSX.Element | null {\n // Get locale selector properties\n const { locale, locales, getLocaleProperties, setLocale } =\n useLocaleSelector(_locales);\n\n return (\n <InternalLocaleSelector\n locale={locale}\n locales={locales}\n setLocale={setLocale}\n getLocaleProperties={getLocaleProperties}\n {...props}\n />\n );\n}\n\nexport type LocaleSelectorProps = {\n locales?: string[];\n customNames?: { [key: string]: string };\n customMapping?: CustomMapping;\n [key: string]: any;\n};\n","import type React from 'react';\nimport type { ReactNode } from 'react';\nimport { InternalRegionSelector } from '@generaltranslation/react-core/components';\nimport { useRegionSelector } from './useRegionSelector';\n\n/**\n * A dropdown component that allows users to select a region.\n * @param {string[]} [regions] - An optional array of ISO 3166 region codes to display. If not provided, regions are inferred from the supported locales in the `<GTProvider>` context.\n * @param {React.ReactNode} [placeholder] - Optional placeholder node to display as the first option when no region is selected.\n * @param {object} [customMapping] - An optional object to map region codes to custom display names, emojis, or associated locales.\n * @param {boolean} [prioritizeCurrentLocaleRegion] - If true, the region corresponding to the current locale is prioritized in the list.\n * @param {boolean} [sortRegionsAlphabetically] - If true, regions are sorted alphabetically by display name.\n * @param {boolean} [asLocaleSelector=false] - If true, selecting a region will also update the locale to the region's associated locale.\n * @returns {React.ReactElement | null} The rendered region dropdown component or null to prevent rendering.\n *\n * @example\n * ```tsx\n * <RegionSelector\n * regions={['US', 'CA']}\n * customMapping={{ US: { name: \"United States\", emoji: \"🇺🇸\" } }}\n * placeholder=\"Select a region\"\n * />\n * ```\n */\nexport function RegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n asLocaleSelector = false,\n ...props\n}: RegionSelectorProps): React.JSX.Element | null {\n // Get region selector properties\n const { region, regions, regionData, locale, setRegion, setLocale } =\n useRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n });\n\n const changeRegion = (region: string) => {\n if (asLocaleSelector) {\n const regionLocale = regionData.get(region)?.locale;\n // setRegion reloads the page; update the locale cookie first\n if (regionLocale && locale !== regionLocale) setLocale(regionLocale);\n }\n setRegion(region);\n };\n\n return (\n <InternalRegionSelector\n region={region}\n regions={regions}\n regionData={regionData}\n setRegion={changeRegion}\n {...props}\n />\n );\n}\n\nexport type RegionSelectorProps = {\n regions?: string[];\n placeholder?: ReactNode;\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n asLocaleSelector?: boolean;\n [key: string]: any;\n};\n","import {\n I18nStore,\n InternalGTProvider,\n} from '@generaltranslation/react-core/components';\nimport { useMemo, useRef } from 'react';\nimport type { SharedGTProviderProps } from './GTProviderProps';\nimport { createOrUpdateBrowserConditionStore } from '../condition-store/createBrowserConditionStore';\n\n/**\n * Consumes snapshot from server\n * Implementation for client-side only\n */\nexport function BrowserGTProvider(props: SharedGTProviderProps) {\n const conditionStore = useMemo(() => {\n return createOrUpdateBrowserConditionStore(props);\n }, [props.locale, props.region, props.enableI18n, props._reload]);\n\n const i18nStoreRef = useRef<I18nStore | null>(null);\n if (i18nStoreRef.current == null) {\n i18nStoreRef.current = new I18nStore();\n }\n\n return (\n <InternalGTProvider\n {...props}\n conditionStore={conditionStore}\n i18nStore={i18nStoreRef.current}\n />\n );\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport type { TxProps } from './utils/TxProps';\n\nexport { initializeGTSPA } from './setup/initializeGTSPA';\nexport { initializeGTSRAClient as initializeGT } from './setup/initializeGTSRAClient';\nexport { parseLocale } from './functions/parseLocale';\nexport { useLocaleSelector } from './components/useLocaleSelector';\nexport { useRegionSelector } from './components/useRegionSelector';\nexport {\n useSetLocale,\n useSetRegion,\n useSetEnableI18n,\n} from './hooks/conditions-store';\n\n// ===== Components ===== //\nexport { LocaleSelector } from './components/LocaleSelector';\nexport { RegionSelector } from './components/RegionSelector';\nexport { BrowserGTProvider as GTProvider } from './provider/BrowserGTProvider';\n\n// ===== Components ===== //\nexport {\n Branch,\n Plural,\n Derive,\n GtInternalTranslateJsx,\n GtInternalVar,\n T,\n Currency,\n DateTime,\n RelativeTime,\n Var,\n Num,\n} from '@generaltranslation/react-core/components';\n\nexport async function Tx(_props: TxProps): Promise<ReactNode> {\n throw new Error('Tx is only supported via RSC');\n}\n\n// ===== Hooks ===== //\nexport {\n useLocale,\n useRegion,\n useCustomMapping,\n useDefaultLocale,\n useEnableI18n,\n useLocales,\n useFormatLocales,\n useGT,\n useMessages,\n useTranslations,\n useLocaleDirection,\n useLocaleProperties,\n} from '@generaltranslation/react-core/hooks';\n\n// ===== Functions ===== //\nexport {\n msg,\n decodeMsg,\n decodeOptions,\n derive,\n declareVar,\n decodeVars,\n mFallback,\n gtFallback,\n getFormatLocales,\n getDefaultLocale,\n getLocaleProperties,\n getLocales,\n resolveCanonicalLocale,\n getReactI18nCache,\n getTranslationsSnapshot,\n getVersionId,\n createRenderPipeline,\n setReactI18nCache,\n t,\n} from '@generaltranslation/react-core/pure';\n\nexport type {\n RenderPipeline,\n RenderPreparedT,\n} from '@generaltranslation/react-core/pure';\n\nexport type { SharedGTProviderProps } from './provider/GTProviderProps';\nexport {\n GtInternalRuntimeTranslateJsx,\n GtInternalRuntimeTranslateString,\n} from 'gt-i18n/internal';\nexport type {\n GTTranslationOptions,\n RuntimeTranslationOptions,\n} from 'gt-i18n/types';\nexport type {\n SyncResolutionFunction,\n SyncResolutionFunctionWithFallback,\n} from 'gt-i18n/types';\n\n// ===== Singletons ===== //\nexport {\n ReactI18nCache,\n type ReactI18nCacheParams,\n} from '@generaltranslation/react-core/pure';\n"],"mappings":"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"}
@@ -82,6 +82,20 @@ declare function initializeGTSPA(config: I18nConfigParams & BrowserI18nCachePara
82
82
  */
83
83
  declare function initializeGTSRAClient(config: I18nConfigParams & ReactI18nCacheParams$1): void;
84
84
  //#endregion
85
+ //#region src/functions/parseLocale.d.ts
86
+ type RequestWithHeaders = Pick<Request, 'headers'>;
87
+ /**
88
+ * Resolve the user's locale from a Web Request.
89
+ *
90
+ * The configured locale cookie takes precedence over the Accept-Language
91
+ * header. If neither contains a supported locale, the configured default
92
+ * locale is returned.
93
+ *
94
+ * This is intended for incoming server requests. A Request created in the
95
+ * browser does not automatically include document cookies or Accept-Language.
96
+ */
97
+ declare function parseLocale(request: RequestWithHeaders): string;
98
+ //#endregion
85
99
  //#region ../format/dist/types-COaQnqVZ.d.cts
86
100
  //#region src/locales/customLocaleMapping.d.ts
87
101
  type CustomMapping = Record<string, string | Partial<LocaleProperties>>; //#endregion
@@ -260,5 +274,5 @@ declare function BrowserGTProvider(props: SharedGTProviderProps): _$react_jsx_ru
260
274
  //#region src/index.client.d.ts
261
275
  declare function Tx(_props: TxProps): Promise<ReactNode>;
262
276
  //#endregion
263
- export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, type GTTranslationOptions, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, type ReactI18nCacheParams, RegionSelector, RelativeTime, type RenderPipeline, type RenderPreparedT, type RuntimeTranslationOptions, type SharedGTProviderProps, type SyncResolutionFunction, type SyncResolutionFunctionWithFallback, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
277
+ export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, type GTTranslationOptions, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, type ReactI18nCacheParams, RegionSelector, RelativeTime, type RenderPipeline, type RenderPreparedT, type RuntimeTranslationOptions, type SharedGTProviderProps, type SyncResolutionFunction, type SyncResolutionFunctionWithFallback, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, parseLocale, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
264
278
  //# sourceMappingURL=index.client.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.cts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y"],"sources":["../src/utils/TxProps.ts","../src/i18n-cache/types.ts","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../../format/dist/types-COaQnqVZ.d.cts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/hooks/conditions-store.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/GTProviderProps.ts","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"mappings":";;;;;;;;;;;KAEY,OAAA,GAAU,MAAA,SAAe,SAAA;EACnC,QAAA,EAAU,SAAA;EACV,OAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;KCHU,SAAA;AAAA,KACA,SAAA;AAAA,KACA,aAAA;;;;;;KAOA,cAAA;EACV,iBAAA;EACA,gBAAA;AAAA;;;;;;KCIU,sBAAA,GAAyB,0BAAA;EACnC,cAAA,GAAiB,cAAA;AAAA;;;KCNd,oCAAA;EACH,MAAA;EACA,MAAA;EACA,UAAA;AAAA;AAAA,KAEU,UAAA,IAAc,KAAA,EAAO,oCAAA;;;AHhBjC;;KGsBY,2BAAA,GAA8B,4BAAA;EACxC,UAAA,GAAa,SAAA;EACb,UAAA,GAAa,SAAA;EACb,cAAA,GAAiB,aAAA;EACjB,OAAA,GAAU,UAAA;AAAA;;;KCdA,iCAAA,GAAoC,IAAA,CAC9C,2BAAA;EAGA,MAAA,GAAS,gBAAA;EACT,UAAA;AAAA;;;;;;;;;;;iBCMoB,eAAA,CACpB,MAAA,EAAQ,gBAAA,GACN,sBAAA,GACA,iCAAA,GAAiC,OAAA;;;;;;iBClBrB,qBAAA,CACd,MAAA,EAAQ,gBAAA,GAAmB,sBAAA;;;;KCVxBA,aAAAA,GAAgBG,MAAAA,kBAAwBD,OAAAA,CAAQD,gBAAAA;AAAAA;AAAAA,KAGhDA,gBAAAA;EACHG,IAAAA;EACAC,IAAAA;EACAC,UAAAA;EACAC,YAAAA;EACAC,YAAAA;EACAC,kBAAAA;EACAC,kBAAAA;EACAC,wBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,KAAAA;AAAAA;AAAAA;;;;;;;;;;;;;;APvBF;iBQagB,iBAAA,CAAkB,OAAA;;;2CAAD,gBAAA;;;;;;;;;;;;;;;ARbjC;;;;;;;;iBSoBgB,iBAAA,CAAkB,OAAA,GAAU,6BAAA;;;0BAA6B,uCAAA,CAAA,UAAA;;;;;;;;;;;iBChBzD,YAAA,CAAA,IAAY,MAAA;;;;iBAaZ,YAAA,CAAA,IAAY,MAAA;;;;iBAaZ,gBAAA,CAAA,IAAgB,UAAA;;;;;;;;;;iBCpBhB,cAAA,CAAA;EACd,OAAA,EAAS,QAAA;EAAA,GACN;AAAA,GACF,mBAAA,GAAsB,KAAA,CAAM,GAAA,CAAI,OAAA;AAAA,KAgBvB,mBAAA;EACV,OAAA;EACA,WAAA;IAAA,CAAiB,GAAA;EAAA;EACjB,aAAA,GAAgB,aAAA;EAAA,CACf,GAAA;AAAA;;;;;;;;;;;;AXjCH;;;;;;;;;;iBYsBgB,cAAA,CAAA;EACd,OAAA,EAAS,QAAA;EACT,aAAA;EACA,6BAAA;EACA,yBAAA;EACA,gBAAA;EAAA,GACG;AAAA,GACF,mBAAA,GAAsB,KAAA,CAAM,GAAA,CAAI,OAAA;AAAA,KA8BvB,mBAAA;EACV,OAAA;EACA,WAAA,GAAc,SAAA;EACd,aAAA;IAAA,CACG,MAAA;MAEK,IAAA;MAAe,KAAA;MAAgB,MAAA;IAAA;EAAA;EAEvC,6BAAA;EACA,yBAAA;EACA,gBAAA;EAAA,CACC,GAAA;AAAA;;;;;;;;;KC/DS,qBAAA,GAAwB,IAAA,CAClC,uBAAA,oCAGA,IAAA,CAAK,2BAAA;EACH,MAAA;AAAA;;;;;;;iBCFY,iBAAA,CAAkB,KAAA,EAAO,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;;;iBCuBxC,EAAA,CAAG,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,SAAA"}
1
+ {"version":3,"file":"index.client.d.cts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y"],"sources":["../src/utils/TxProps.ts","../src/i18n-cache/types.ts","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../src/functions/parseLocale.ts","../../format/dist/types-COaQnqVZ.d.cts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/hooks/conditions-store.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/GTProviderProps.ts","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"mappings":"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"}
@@ -82,6 +82,20 @@ declare function initializeGTSPA(config: I18nConfigParams & BrowserI18nCachePara
82
82
  */
83
83
  declare function initializeGTSRAClient(config: I18nConfigParams & ReactI18nCacheParams$1): void;
84
84
  //#endregion
85
+ //#region src/functions/parseLocale.d.ts
86
+ type RequestWithHeaders = Pick<Request, 'headers'>;
87
+ /**
88
+ * Resolve the user's locale from a Web Request.
89
+ *
90
+ * The configured locale cookie takes precedence over the Accept-Language
91
+ * header. If neither contains a supported locale, the configured default
92
+ * locale is returned.
93
+ *
94
+ * This is intended for incoming server requests. A Request created in the
95
+ * browser does not automatically include document cookies or Accept-Language.
96
+ */
97
+ declare function parseLocale(request: RequestWithHeaders): string;
98
+ //#endregion
85
99
  //#region ../format/dist/types-COaQnqVZ.d.cts
86
100
  //#region src/locales/customLocaleMapping.d.ts
87
101
  type CustomMapping = Record<string, string | Partial<LocaleProperties>>; //#endregion
@@ -260,5 +274,5 @@ declare function BrowserGTProvider(props: SharedGTProviderProps): _$react_jsx_ru
260
274
  //#region src/index.client.d.ts
261
275
  declare function Tx(_props: TxProps): Promise<ReactNode>;
262
276
  //#endregion
263
- export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, type GTTranslationOptions, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, type ReactI18nCacheParams, RegionSelector, RelativeTime, type RenderPipeline, type RenderPreparedT, type RuntimeTranslationOptions, type SharedGTProviderProps, type SyncResolutionFunction, type SyncResolutionFunctionWithFallback, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
277
+ export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, type GTTranslationOptions, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, type ReactI18nCacheParams, RegionSelector, RelativeTime, type RenderPipeline, type RenderPreparedT, type RuntimeTranslationOptions, type SharedGTProviderProps, type SyncResolutionFunction, type SyncResolutionFunctionWithFallback, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, parseLocale, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
264
278
  //# sourceMappingURL=index.client.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.d.mts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y"],"sources":["../src/utils/TxProps.ts","../src/i18n-cache/types.ts","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../../format/dist/types-COaQnqVZ.d.cts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/hooks/conditions-store.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/GTProviderProps.ts","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"mappings":";;;;;;;;;;;KAEY,OAAA,GAAU,MAAA,SAAe,SAAA;EACnC,QAAA,EAAU,SAAA;EACV,OAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;KCHU,SAAA;AAAA,KACA,SAAA;AAAA,KACA,aAAA;;;;;;KAOA,cAAA;EACV,iBAAA;EACA,gBAAA;AAAA;;;;;;KCIU,sBAAA,GAAyB,0BAAA;EACnC,cAAA,GAAiB,cAAA;AAAA;;;KCNd,oCAAA;EACH,MAAA;EACA,MAAA;EACA,UAAA;AAAA;AAAA,KAEU,UAAA,IAAc,KAAA,EAAO,oCAAA;;;AHhBjC;;KGsBY,2BAAA,GAA8B,4BAAA;EACxC,UAAA,GAAa,SAAA;EACb,UAAA,GAAa,SAAA;EACb,cAAA,GAAiB,aAAA;EACjB,OAAA,GAAU,UAAA;AAAA;;;KCdA,iCAAA,GAAoC,IAAA,CAC9C,2BAAA;EAGA,MAAA,GAAS,gBAAA;EACT,UAAA;AAAA;;;;;;;;;;;iBCMoB,eAAA,CACpB,MAAA,EAAQ,gBAAA,GACN,sBAAA,GACA,iCAAA,GAAiC,OAAA;;;;;;iBClBrB,qBAAA,CACd,MAAA,EAAQ,gBAAA,GAAmB,sBAAA;;;;KCVxBA,aAAAA,GAAgBG,MAAAA,kBAAwBD,OAAAA,CAAQD,gBAAAA;AAAAA;AAAAA,KAGhDA,gBAAAA;EACHG,IAAAA;EACAC,IAAAA;EACAC,UAAAA;EACAC,YAAAA;EACAC,YAAAA;EACAC,kBAAAA;EACAC,kBAAAA;EACAC,wBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,KAAAA;AAAAA;AAAAA;;;;;;;;;;;;;;APvBF;iBQagB,iBAAA,CAAkB,OAAA;;;2CAAD,gBAAA;;;;;;;;;;;;;;;ARbjC;;;;;;;;iBSoBgB,iBAAA,CAAkB,OAAA,GAAU,6BAAA;;;0BAA6B,uCAAA,CAAA,UAAA;;;;;;;;;;;iBChBzD,YAAA,CAAA,IAAY,MAAA;;;;iBAaZ,YAAA,CAAA,IAAY,MAAA;;;;iBAaZ,gBAAA,CAAA,IAAgB,UAAA;;;;;;;;;;iBCpBhB,cAAA,CAAA;EACd,OAAA,EAAS,QAAA;EAAA,GACN;AAAA,GACF,mBAAA,GAAsB,KAAA,CAAM,GAAA,CAAI,OAAA;AAAA,KAgBvB,mBAAA;EACV,OAAA;EACA,WAAA;IAAA,CAAiB,GAAA;EAAA;EACjB,aAAA,GAAgB,aAAA;EAAA,CACf,GAAA;AAAA;;;;;;;;;;;;AXjCH;;;;;;;;;;iBYsBgB,cAAA,CAAA;EACd,OAAA,EAAS,QAAA;EACT,aAAA;EACA,6BAAA;EACA,yBAAA;EACA,gBAAA;EAAA,GACG;AAAA,GACF,mBAAA,GAAsB,KAAA,CAAM,GAAA,CAAI,OAAA;AAAA,KA8BvB,mBAAA;EACV,OAAA;EACA,WAAA,GAAc,SAAA;EACd,aAAA;IAAA,CACG,MAAA;MAEK,IAAA;MAAe,KAAA;MAAgB,MAAA;IAAA;EAAA;EAEvC,6BAAA;EACA,yBAAA;EACA,gBAAA;EAAA,CACC,GAAA;AAAA;;;;;;;;;KC/DS,qBAAA,GAAwB,IAAA,CAClC,uBAAA,oCAGA,IAAA,CAAK,2BAAA;EACH,MAAA;AAAA;;;;;;;iBCFY,iBAAA,CAAkB,KAAA,EAAO,qBAAA,GAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;;;iBCuBxC,EAAA,CAAG,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,SAAA"}
1
+ {"version":3,"file":"index.client.d.mts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y"],"sources":["../src/utils/TxProps.ts","../src/i18n-cache/types.ts","../src/i18n-cache/BrowserI18nCache.ts","../src/condition-store/BrowserConditionStore.ts","../src/condition-store/createBrowserConditionStore.ts","../src/setup/initializeGTSPA.ts","../src/setup/initializeGTSRAClient.ts","../src/functions/parseLocale.ts","../../format/dist/types-COaQnqVZ.d.cts","../src/components/useLocaleSelector.ts","../src/components/useRegionSelector.ts","../src/hooks/conditions-store.ts","../src/components/LocaleSelector.tsx","../src/components/RegionSelector.tsx","../src/provider/GTProviderProps.ts","../src/provider/BrowserGTProvider.tsx","../src/index.client.ts"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { I18nStore, ReactI18nCache, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, defaultResetLocaleCookieName, derive, getDefaultLocale, getFormatLocales, getI18nConfig, getLocaleProperties, getLocales, getReactI18nCache, getReadonlyConditionStore, getTranslationsSnapshot, getTranslationsSnapshot as getTranslationsSnapshot$1, getVersionId, gtFallback, initializeI18nConfig, internalInitializeGTSRA, mFallback, msg, resolveCanonicalLocale, setI18nStore, setReactI18nCache, setReactI18nCache as setReactI18nCache$1, t } from "@generaltranslation/react-core/pure";
3
- import { GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, I18nCache, createConditionStoreSingleton, getI18nConfig as getI18nConfig$1, getRuntimeEnvironment } from "gt-i18n/internal";
3
+ import { GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, I18nCache, createConditionStoreSingleton, getCookieValue, getI18nConfig as getI18nConfig$1, getRuntimeEnvironment, parseAcceptLanguage } from "gt-i18n/internal";
4
4
  import { useCallback, useMemo, useRef } from "react";
5
5
  import { useConditionStore, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useInternalLocaleSelector, useInternalRegionSelector, useLocale, useLocaleDirection, useLocaleProperties, useLocales, useMessages, useRegion, useTranslations } from "@generaltranslation/react-core/hooks";
6
6
  import { Branch, Currency, DateTime, Derive, GtInternalTranslateJsx, GtInternalVar, I18nStore as I18nStore$1, InternalGTProvider, InternalLocaleSelector, InternalRegionSelector, Num, Plural, RelativeTime, T, Var } from "@generaltranslation/react-core/components";
@@ -349,9 +349,9 @@ const createInvalidLocaleWarning = (locale) => createDiagnosticMessage({
349
349
  * @param cookieName - The name of the cookie
350
350
  * @returns The locale from the cookie or undefined if not found or invalid
351
351
  */
352
- function getCookieValue({ cookieName }) {
352
+ function getCookieValue$1({ cookieName }) {
353
353
  if (typeof document === "undefined") return void 0;
354
- return document.cookie.split("; ").find((row) => row.startsWith(`${cookieName}=`))?.split("=")[1];
354
+ return getCookieValue(document.cookie, cookieName);
355
355
  }
356
356
  /**
357
357
  * Sets a cookie value for a given cookie name
@@ -367,7 +367,7 @@ function setCookieValue({ cookieName, value }) {
367
367
  //#region src/condition-store/readBrowserLocale.ts
368
368
  function readBrowserLocale(localeCookieName) {
369
369
  const candidates = [];
370
- const cookieLocale = getCookieValue({ cookieName: localeCookieName });
370
+ const cookieLocale = getCookieValue$1({ cookieName: localeCookieName });
371
371
  if (cookieLocale) candidates.push(cookieLocale);
372
372
  const navigatorLocales = navigator?.languages || [];
373
373
  candidates.push(...navigatorLocales);
@@ -392,7 +392,7 @@ var BrowserConditionStore = class {
392
392
  this.reload();
393
393
  };
394
394
  this.getRegion = () => {
395
- const cookieRegion = getCookieValue({ cookieName: getI18nConfig().getRegionCookieName() });
395
+ const cookieRegion = getCookieValue$1({ cookieName: getI18nConfig().getRegionCookieName() });
396
396
  if (cookieRegion) return cookieRegion;
397
397
  return this.customGetRegion?.();
398
398
  };
@@ -401,7 +401,7 @@ var BrowserConditionStore = class {
401
401
  this.reload();
402
402
  };
403
403
  this.getEnableI18n = () => {
404
- const cookieEnableI18n = getCookieValue({ cookieName: getI18nConfig().getEnableI18nCookieName() });
404
+ const cookieEnableI18n = getCookieValue$1({ cookieName: getI18nConfig().getEnableI18nCookieName() });
405
405
  if (cookieEnableI18n === void 0) return this.customGetEnableI18n?.() ?? true;
406
406
  return cookieEnableI18n === "true";
407
407
  };
@@ -511,11 +511,11 @@ function determineLocale({ _getLocale: getLocale, locale }) {
511
511
  return i18nConfig.resolveSupportedLocale(candidates);
512
512
  }
513
513
  function determineRegion({ _getRegion: getRegion, region }) {
514
- return getCookieValue({ cookieName: getI18nConfig().getRegionCookieName() }) || getRegion?.() || region;
514
+ return getCookieValue$1({ cookieName: getI18nConfig().getRegionCookieName() }) || getRegion?.() || region;
515
515
  }
516
516
  function determineEnableI18n({ enableI18n, _getEnableI18n: getEnableI18n }) {
517
517
  if (enableI18n !== void 0) return enableI18n;
518
- const cookieEnableI18n = getCookieValue({ cookieName: getI18nConfig().getEnableI18nCookieName() });
518
+ const cookieEnableI18n = getCookieValue$1({ cookieName: getI18nConfig().getEnableI18nCookieName() });
519
519
  if (cookieEnableI18n === void 0) return getEnableI18n?.() ?? true;
520
520
  return cookieEnableI18n === "true";
521
521
  }
@@ -589,6 +589,26 @@ function initializeGTSRAClient(config) {
589
589
  }));
590
590
  }
591
591
  //#endregion
592
+ //#region src/functions/parseLocale.ts
593
+ /**
594
+ * Resolve the user's locale from a Web Request.
595
+ *
596
+ * The configured locale cookie takes precedence over the Accept-Language
597
+ * header. If neither contains a supported locale, the configured default
598
+ * locale is returned.
599
+ *
600
+ * This is intended for incoming server requests. A Request created in the
601
+ * browser does not automatically include document cookies or Accept-Language.
602
+ */
603
+ function parseLocale(request) {
604
+ const i18nConfig = getI18nConfig();
605
+ const candidates = [];
606
+ const cookieLocale = getCookieValue(request.headers.get("cookie"), i18nConfig.getLocaleCookieName());
607
+ if (cookieLocale) candidates.push(cookieLocale);
608
+ candidates.push(...parseAcceptLanguage(request.headers.get("accept-language")));
609
+ return i18nConfig.resolveSupportedLocale(candidates);
610
+ }
611
+ //#endregion
592
612
  //#region src/hooks/conditions-store.ts
593
613
  /**
594
614
  * Returns a function that sets the locale
@@ -755,6 +775,6 @@ async function Tx(_props) {
755
775
  throw new Error("Tx is only supported via RSC");
756
776
  }
757
777
  //#endregion
758
- export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, RegionSelector, RelativeTime, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
778
+ export { Branch, Currency, DateTime, Derive, BrowserGTProvider as GTProvider, GtInternalRuntimeTranslateJsx, GtInternalRuntimeTranslateString, GtInternalTranslateJsx, GtInternalVar, LocaleSelector, Num, Plural, ReactI18nCache, RegionSelector, RelativeTime, T, Tx, Var, createRenderPipeline, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getDefaultLocale, getFormatLocales, getLocaleProperties, getLocales, getReactI18nCache, getTranslationsSnapshot, getVersionId, gtFallback, initializeGTSRAClient as initializeGT, initializeGTSPA, mFallback, msg, parseLocale, resolveCanonicalLocale, setReactI18nCache, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleDirection, useLocaleProperties, useLocaleSelector, useLocales, useMessages, useRegion, useRegionSelector, useSetEnableI18n, useSetLocale, useSetRegion, useTranslations };
759
779
 
760
780
  //# sourceMappingURL=index.client.mjs.map