@generaltranslation/react-core 11.0.0-odysseus.9 → 11.0.1

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.
Files changed (217) hide show
  1. package/CHANGELOG.md +249 -0
  2. package/dist/components/branches/Plural.shared.cjs +1 -1
  3. package/dist/components/branches/Plural.shared.cjs.map +1 -1
  4. package/dist/components/branches/Plural.shared.mjs +1 -1
  5. package/dist/components/branches/Plural.shared.mjs.map +1 -1
  6. package/dist/components/helpers/InternalLocaleSelector.cjs +1 -1
  7. package/dist/components/helpers/InternalLocaleSelector.cjs.map +1 -1
  8. package/dist/components/helpers/InternalLocaleSelector.mjs +1 -1
  9. package/dist/components/helpers/InternalRegionSelector.cjs +1 -1
  10. package/dist/components/helpers/InternalRegionSelector.cjs.map +1 -1
  11. package/dist/components/helpers/InternalRegionSelector.mjs +1 -1
  12. package/dist/components/translation/T.cjs +1 -1
  13. package/dist/components/translation/T.cjs.map +1 -1
  14. package/dist/components/translation/T.mjs +1 -1
  15. package/dist/components/translation/T.mjs.map +1 -1
  16. package/dist/components/translation/T.rsc.cjs +1 -1
  17. package/dist/components/translation/T.rsc.cjs.map +1 -1
  18. package/dist/components/translation/T.rsc.mjs +1 -1
  19. package/dist/components/translation/T.rsc.mjs.map +1 -1
  20. package/dist/components-rsc.cjs +1 -1
  21. package/dist/components-rsc.d.ts +5 -5
  22. package/dist/components-rsc.mjs +1 -1
  23. package/dist/condition-store/singleton-operations.cjs +1 -1
  24. package/dist/condition-store/singleton-operations.cjs.map +1 -1
  25. package/dist/condition-store/singleton-operations.d.ts +2 -7
  26. package/dist/condition-store/singleton-operations.d.ts.map +1 -1
  27. package/dist/condition-store/singleton-operations.mjs +1 -1
  28. package/dist/condition-store/singleton-operations.mjs.map +1 -1
  29. package/dist/context/InternalGTProvider.cjs +1 -1
  30. package/dist/context/InternalGTProvider.mjs +1 -1
  31. package/dist/context/context.cjs +1 -1
  32. package/dist/context/context.cjs.map +1 -1
  33. package/dist/context/context.mjs +1 -1
  34. package/dist/context/context.mjs.map +1 -1
  35. package/dist/functions/translation/t.cjs +1 -1
  36. package/dist/functions/translation/t.cjs.map +1 -1
  37. package/dist/functions/translation/t.d.ts.map +1 -1
  38. package/dist/functions/translation/t.mjs +1 -1
  39. package/dist/functions/translation/t.mjs.map +1 -1
  40. package/dist/hooks/condition-store.cjs +1 -1
  41. package/dist/hooks/condition-store.cjs.map +1 -1
  42. package/dist/hooks/condition-store.mjs +1 -1
  43. package/dist/hooks/condition-store.mjs.map +1 -1
  44. package/dist/hooks/external-store/useSubscribeToTrackedLookups.cjs +2 -0
  45. package/dist/hooks/external-store/useSubscribeToTrackedLookups.cjs.map +1 -0
  46. package/dist/hooks/external-store/useSubscribeToTrackedLookups.mjs +2 -0
  47. package/dist/hooks/external-store/useSubscribeToTrackedLookups.mjs.map +1 -0
  48. package/dist/hooks/external-store/useTrackedDictionaryObjResolver.cjs +1 -1
  49. package/dist/hooks/external-store/useTrackedDictionaryObjResolver.cjs.map +1 -1
  50. package/dist/hooks/external-store/useTrackedDictionaryObjResolver.mjs +1 -1
  51. package/dist/hooks/external-store/useTrackedDictionaryObjResolver.mjs.map +1 -1
  52. package/dist/hooks/external-store/useTrackedDictionaryResolver.cjs +1 -1
  53. package/dist/hooks/external-store/useTrackedDictionaryResolver.cjs.map +1 -1
  54. package/dist/hooks/external-store/useTrackedDictionaryResolver.mjs +1 -1
  55. package/dist/hooks/external-store/useTrackedDictionaryResolver.mjs.map +1 -1
  56. package/dist/hooks/external-store/useTrackedTranslationResolver.cjs +1 -1
  57. package/dist/hooks/external-store/useTrackedTranslationResolver.cjs.map +1 -1
  58. package/dist/hooks/external-store/useTrackedTranslationResolver.d.ts.map +1 -1
  59. package/dist/hooks/external-store/useTrackedTranslationResolver.mjs +1 -1
  60. package/dist/hooks/external-store/useTrackedTranslationResolver.mjs.map +1 -1
  61. package/dist/hooks/external-store.cjs +1 -1
  62. package/dist/hooks/external-store.cjs.map +1 -1
  63. package/dist/hooks/external-store.mjs +1 -1
  64. package/dist/hooks/external-store.mjs.map +1 -1
  65. package/dist/hooks/i18n-config.cjs +1 -1
  66. package/dist/hooks/i18n-config.mjs +1 -1
  67. package/dist/hooks/useGT.cjs +1 -1
  68. package/dist/hooks/useGT.cjs.map +1 -1
  69. package/dist/hooks/useGT.mjs +1 -1
  70. package/dist/hooks/useGT.mjs.map +1 -1
  71. package/dist/hooks/useInternalLocaleSelector.cjs +1 -1
  72. package/dist/hooks/useInternalLocaleSelector.cjs.map +1 -1
  73. package/dist/hooks/useInternalLocaleSelector.d.ts +5 -4
  74. package/dist/hooks/useInternalLocaleSelector.d.ts.map +1 -1
  75. package/dist/hooks/useInternalLocaleSelector.mjs +1 -1
  76. package/dist/hooks/useInternalLocaleSelector.mjs.map +1 -1
  77. package/dist/hooks/useInternalRegionSelector.cjs +1 -1
  78. package/dist/hooks/useInternalRegionSelector.cjs.map +1 -1
  79. package/dist/hooks/useInternalRegionSelector.d.ts +9 -8
  80. package/dist/hooks/useInternalRegionSelector.d.ts.map +1 -1
  81. package/dist/hooks/useInternalRegionSelector.mjs +1 -1
  82. package/dist/hooks/useInternalRegionSelector.mjs.map +1 -1
  83. package/dist/hooks/useMessages.cjs +1 -1
  84. package/dist/hooks/useMessages.mjs +1 -1
  85. package/dist/hooks/useTranslations.cjs +1 -1
  86. package/dist/hooks/useTranslations.mjs +1 -1
  87. package/dist/hooks/utils/getShouldTranslate.cjs +1 -1
  88. package/dist/hooks/utils/getShouldTranslate.cjs.map +1 -1
  89. package/dist/hooks/utils/getShouldTranslate.mjs +1 -1
  90. package/dist/hooks/utils/getShouldTranslate.mjs.map +1 -1
  91. package/dist/hooks/utils/missing-translation.cjs +1 -1
  92. package/dist/hooks/utils/missing-translation.cjs.map +1 -1
  93. package/dist/hooks/utils/missing-translation.mjs +1 -1
  94. package/dist/hooks/utils/missing-translation.mjs.map +1 -1
  95. package/dist/hooks/utils.cjs +1 -1
  96. package/dist/hooks/utils.cjs.map +1 -1
  97. package/dist/hooks/utils.d.ts +2 -6
  98. package/dist/hooks/utils.d.ts.map +1 -1
  99. package/dist/hooks/utils.mjs +1 -1
  100. package/dist/hooks/utils.mjs.map +1 -1
  101. package/dist/hooks.cjs +1 -1
  102. package/dist/hooks.d.ts +4 -4
  103. package/dist/hooks.mjs +1 -1
  104. package/dist/i18n-cache/ReactI18nCache.cjs.map +1 -1
  105. package/dist/i18n-cache/ReactI18nCache.d.ts +1 -1
  106. package/dist/i18n-cache/ReactI18nCache.d.ts.map +1 -1
  107. package/dist/i18n-cache/ReactI18nCache.mjs.map +1 -1
  108. package/dist/i18n-store/I18nStore.cjs.map +1 -1
  109. package/dist/i18n-store/I18nStore.d.ts.map +1 -1
  110. package/dist/i18n-store/I18nStore.mjs.map +1 -1
  111. package/dist/i18n-store/singleton-operations.cjs +1 -1
  112. package/dist/i18n-store/singleton-operations.cjs.map +1 -1
  113. package/dist/i18n-store/singleton-operations.d.ts +2 -4
  114. package/dist/i18n-store/singleton-operations.d.ts.map +1 -1
  115. package/dist/i18n-store/singleton-operations.mjs +1 -1
  116. package/dist/i18n-store/singleton-operations.mjs.map +1 -1
  117. package/dist/i18n-store/storeTypes.d.ts +2 -1
  118. package/dist/i18n-store/storeTypes.d.ts.map +1 -1
  119. package/dist/pure.cjs +1 -1
  120. package/dist/pure.d.ts +7 -21
  121. package/dist/pure.mjs +1 -1
  122. package/dist/setup/i18nConfig.cjs +1 -1
  123. package/dist/setup/i18nConfig.cjs.map +1 -1
  124. package/dist/setup/i18nConfig.d.ts +31 -4
  125. package/dist/setup/i18nConfig.d.ts.map +1 -1
  126. package/dist/setup/i18nConfig.mjs +1 -1
  127. package/dist/setup/i18nConfig.mjs.map +1 -1
  128. package/dist/setup/initializeGTSRA.cjs +1 -1
  129. package/dist/setup/initializeGTSRA.cjs.map +1 -1
  130. package/dist/setup/initializeGTSRA.d.ts +2 -2
  131. package/dist/setup/initializeGTSRA.d.ts.map +1 -1
  132. package/dist/setup/initializeGTSRA.mjs +1 -1
  133. package/dist/setup/initializeGTSRA.mjs.map +1 -1
  134. package/dist/utils/rendering/createRenderPipeline.cjs +1 -1
  135. package/dist/utils/rendering/createRenderPipeline.cjs.map +1 -1
  136. package/dist/utils/rendering/createRenderPipeline.d.ts +2 -2
  137. package/dist/utils/rendering/createRenderPipeline.mjs +1 -1
  138. package/dist/utils/rendering/createRenderPipeline.mjs.map +1 -1
  139. package/dist/utils/rendering/renderDefaultChildren.shared.cjs +1 -1
  140. package/dist/utils/rendering/renderDefaultChildren.shared.cjs.map +1 -1
  141. package/dist/utils/rendering/renderDefaultChildren.shared.mjs +1 -1
  142. package/dist/utils/rendering/renderDefaultChildren.shared.mjs.map +1 -1
  143. package/dist/utils/rendering/renderPipeline.rsc.d.ts +1 -1
  144. package/dist/utils/rendering/renderPreparedT.shared.cjs +1 -1
  145. package/dist/utils/rendering/renderPreparedT.shared.cjs.map +1 -1
  146. package/dist/utils/rendering/renderPreparedT.shared.mjs +1 -1
  147. package/dist/utils/rendering/renderPreparedT.shared.mjs.map +1 -1
  148. package/dist/utils/rendering/renderTranslatedChildren.shared.cjs +1 -1
  149. package/dist/utils/rendering/renderTranslatedChildren.shared.cjs.map +1 -1
  150. package/dist/utils/rendering/renderTranslatedChildren.shared.mjs +1 -1
  151. package/dist/utils/rendering/renderTranslatedChildren.shared.mjs.map +1 -1
  152. package/dist/utils/translation/prepareT.shared.cjs +1 -1
  153. package/dist/utils/translation/prepareT.shared.cjs.map +1 -1
  154. package/dist/utils/translation/prepareT.shared.mjs +1 -1
  155. package/dist/utils/translation/prepareT.shared.mjs.map +1 -1
  156. package/dist/utils/translation/usePrepareT.cjs +1 -1
  157. package/dist/utils/translation/usePrepareT.mjs +1 -1
  158. package/dist/utils/types.d.ts +1 -43
  159. package/dist/utils/types.d.ts.map +1 -1
  160. package/package.json +5 -33
  161. package/dist/cookies.cjs +0 -1
  162. package/dist/cookies.d.ts +0 -2
  163. package/dist/cookies.mjs +0 -1
  164. package/dist/setup/initializeGTSPA.cjs +0 -2
  165. package/dist/setup/initializeGTSPA.cjs.map +0 -1
  166. package/dist/setup/initializeGTSPA.d.ts +0 -16
  167. package/dist/setup/initializeGTSPA.d.ts.map +0 -1
  168. package/dist/setup/initializeGTSPA.mjs +0 -2
  169. package/dist/setup/initializeGTSPA.mjs.map +0 -1
  170. package/dist/utils/cookies.cjs +0 -2
  171. package/dist/utils/cookies.cjs.map +0 -1
  172. package/dist/utils/cookies.d.ts +0 -16
  173. package/dist/utils/cookies.d.ts.map +0 -1
  174. package/dist/utils/cookies.mjs +0 -2
  175. package/dist/utils/cookies.mjs.map +0 -1
  176. package/dist/utils/dictionaries/flattenDictionary.cjs +0 -2
  177. package/dist/utils/dictionaries/flattenDictionary.cjs.map +0 -1
  178. package/dist/utils/dictionaries/flattenDictionary.d.ts +0 -15
  179. package/dist/utils/dictionaries/flattenDictionary.d.ts.map +0 -1
  180. package/dist/utils/dictionaries/flattenDictionary.mjs +0 -2
  181. package/dist/utils/dictionaries/flattenDictionary.mjs.map +0 -1
  182. package/dist/utils/dictionaries/getDictionaryEntry.cjs +0 -2
  183. package/dist/utils/dictionaries/getDictionaryEntry.cjs.map +0 -1
  184. package/dist/utils/dictionaries/getDictionaryEntry.d.ts +0 -8
  185. package/dist/utils/dictionaries/getDictionaryEntry.d.ts.map +0 -1
  186. package/dist/utils/dictionaries/getDictionaryEntry.mjs +0 -2
  187. package/dist/utils/dictionaries/getDictionaryEntry.mjs.map +0 -1
  188. package/dist/utils/dictionaries/getEntryAndMetadata.cjs +0 -2
  189. package/dist/utils/dictionaries/getEntryAndMetadata.cjs.map +0 -1
  190. package/dist/utils/dictionaries/getEntryAndMetadata.d.ts +0 -10
  191. package/dist/utils/dictionaries/getEntryAndMetadata.d.ts.map +0 -1
  192. package/dist/utils/dictionaries/getEntryAndMetadata.mjs +0 -2
  193. package/dist/utils/dictionaries/getEntryAndMetadata.mjs.map +0 -1
  194. package/dist/utils/dictionaries/indexDict.cjs +0 -2
  195. package/dist/utils/dictionaries/indexDict.cjs.map +0 -1
  196. package/dist/utils/dictionaries/indexDict.mjs +0 -2
  197. package/dist/utils/dictionaries/indexDict.mjs.map +0 -1
  198. package/dist/utils/dictionaries/isDictionaryEntry.cjs +0 -2
  199. package/dist/utils/dictionaries/isDictionaryEntry.cjs.map +0 -1
  200. package/dist/utils/dictionaries/isDictionaryEntry.d.ts +0 -12
  201. package/dist/utils/dictionaries/isDictionaryEntry.d.ts.map +0 -1
  202. package/dist/utils/dictionaries/isDictionaryEntry.mjs +0 -2
  203. package/dist/utils/dictionaries/isDictionaryEntry.mjs.map +0 -1
  204. package/dist/utils/dictionaries/mergeDictionaries.cjs +0 -2
  205. package/dist/utils/dictionaries/mergeDictionaries.cjs.map +0 -1
  206. package/dist/utils/dictionaries/mergeDictionaries.d.ts +0 -7
  207. package/dist/utils/dictionaries/mergeDictionaries.d.ts.map +0 -1
  208. package/dist/utils/dictionaries/mergeDictionaries.mjs +0 -2
  209. package/dist/utils/dictionaries/mergeDictionaries.mjs.map +0 -1
  210. package/dist/utils/internal/addGTIdentifier.d.ts +0 -8
  211. package/dist/utils/internal/addGTIdentifier.d.ts.map +0 -1
  212. package/dist/utils/internal/writeChildrenAsObjects.d.ts +0 -14
  213. package/dist/utils/internal/writeChildrenAsObjects.d.ts.map +0 -1
  214. package/dist/utils/variables/_getVariableProps.d.ts +0 -13
  215. package/dist/utils/variables/_getVariableProps.d.ts.map +0 -1
  216. package/dist/utils/variables/getVariableName.d.ts +0 -12
  217. package/dist/utils/variables/getVariableName.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackedTranslationResolver.mjs","names":[],"sources":["../../../src/hooks/external-store/useTrackedTranslationResolver.ts"],"sourcesContent":["import {\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from 'react';\nimport {\n createLookupOptions,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n StoreListener,\n TranslateLookup,\n TranslateSnapshot,\n} from '../../i18n-store/storeTypes';\nimport type { TranslationMetadata } from 'gt-i18n/internal/types';\nimport type { StringFormat } from '@generaltranslation/format';\nimport { useLocale } from '../condition-store';\nimport { useShouldTranslate } from '../utils';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../../i18n-store/useI18nStore';\nimport { useHandleMissingTranslation } from '../utils/missing-translation';\n\n/**\n * Returns the translation, but also triggers a translation if it is not found\n * when dev hot reload is enabled.\n */\nexport type TrackedTranslationResolver = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => TranslateSnapshot<T>;\n\nexport type Message = TranslationMetadata & {\n message: string;\n};\n\n/**\n * NOTE:\n * gt() may be called during render, so tracking intentionally only mutates\n * hook-local refs. This widens the event filter used by our existing\n * useSyncExternalStore subscription, but does not update React state or mutate\n * the translation cache during render.\n *\n * A render that is later aborted may leave behind an extra tracked key. That is\n * acceptable for dev hot reload because the worst case is an unnecessary\n * invalidation for this hook instance, not incorrect rendered output.\n */\n\nexport function useTrackedTranslationResolver(\n messages: Message[] = []\n): TrackedTranslationResolver {\n const translationsSnapshot = useTranslationsSnapshot();\n const i18nStore = useI18nStore();\n const devHotReloadEnabled = getI18nConfig().isDevHotReloadEnabled();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * Track lookups per hook instance without updating React state during render.\n */\n const trackedKeysRef = useRef<Set<string> | null>(null);\n if (trackedKeysRef.current == null) {\n trackedKeysRef.current = new Set();\n }\n\n // (optimization) Pre-subscribe to compiler-injected lookups\n usePreloadCompilerLookups(messages, trackedKeysRef);\n\n // (tx hot reload) Subscribe to translation updates\n useSubscribeToLookups(trackedKeysRef);\n\n /**\n * Remember that we can make no assumptions about when this cb gets invoked\n * - Resolves translation from lookup\n * - enqueues dev hot reload (if needed)\n */\n return useCallback(\n <T extends Translation>(\n lookup: TranslateLookup<T>\n ): TranslateSnapshot<T> => {\n // Track the lookup for dev hot reload\n const lookupKey = getTranslateListenerKey(lookup);\n if (devHotReloadEnabled) {\n trackedKeysRef.current!.add(lookupKey);\n }\n\n // Resolve the translation from the store\n const translation = i18nStore.getTranslateSnapshot(\n lookup,\n translationsSnapshot\n );\n\n // Trigger a hot reload if the translation is not found\n if (translation == null && devHotReloadEnabled) {\n onMissingTranslation(lookup);\n }\n return translation;\n },\n [i18nStore, translationsSnapshot, onMissingTranslation, devHotReloadEnabled]\n );\n}\n\n/**\n * Subscribe to translation updates, but only trigger re-renders\n * if the lookup is in the tracked keys. Remember that we can make\n * no assumptions about when this list gets updated. Technically,\n * not pure, but this is an acceptable trade since this is\n * really just for translation hot reload.\n *\n * TODO: (separate PR) we can probably do better filtering for adding to the set since this is primarily dev only\n * TODO: reduce code duplication with the other two useSubscribeToLookups functions\n */\nfunction useSubscribeToLookups(trackedKeysRef: RefObject<Set<string> | null>) {\n // invalidation counter for triggering updates\n const versionRef = useRef(0);\n const i18nStore = useI18nStore();\n const subscribe = useCallback(\n (listener: StoreListener) => {\n return i18nStore.subscribeToTranslationEvents((lookup) => {\n const key = getTranslateListenerKey(lookup);\n if (!trackedKeysRef.current!.has(key)) return;\n versionRef.current++;\n listener();\n });\n },\n [i18nStore]\n );\n const getSnapshot = useCallback(() => {\n return versionRef.current;\n }, []);\n\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\n/**\n * Pre-subscribe to compiler-injected lookups\n * trigger translations for them\n *\n * This ref mutation is safe because this is translation hot reload only\n * and effects are deterministic\n */\nfunction usePreloadCompilerLookups(\n messages: Message[],\n trackedKeysRef: RefObject<Set<string> | null>\n) {\n const i18nStore = useI18nStore();\n const locale = useLocale();\n const devHotReloadEnabled = getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const translationsSnapshot = useTranslationsSnapshot();\n const txHotReloadEnabled = useMemo(() => {\n return messages?.length > 0 && shouldTranslate && devHotReloadEnabled;\n }, [messages, shouldTranslate, devHotReloadEnabled]);\n\n // Precompute as much as we can\n const lookups: [TranslateLookup<string>, string][] = useMemo(() => {\n if (!txHotReloadEnabled) return [];\n return messages.map(({ message, ...options }) => {\n const targetLocale = options.$locale ?? locale;\n const lookupOptions = createLookupOptions<StringFormat>(\n targetLocale,\n options,\n 'ICU'\n );\n const lookup = {\n locale: targetLocale,\n message,\n options: lookupOptions,\n };\n return [lookup, getTranslateListenerKey(lookup)];\n });\n }, [locale, txHotReloadEnabled, messages]);\n\n // Pre-subscribe to the lookups\n if (txHotReloadEnabled) {\n lookups.forEach(([, lookupKey]) => {\n trackedKeysRef.current!.add(lookupKey);\n });\n }\n\n /**\n * Delegate non-pure operations to post commit\n *\n * (Optimization) Trigger a hot reload if the translation is not found\n * for compiler-injected lookups\n *\n * TODO: for use() + suspense strategy, use a Promise.all()\n * TODO: server side translation invocation\n */\n useEffect(() => {\n if (!txHotReloadEnabled) return;\n\n lookups\n .filter(\n ([lookup]) =>\n i18nStore.getTranslateSnapshot(lookup, translationsSnapshot) == null\n )\n .forEach(([lookup]) => i18nStore.translate(lookup));\n }, [txHotReloadEnabled, i18nStore, lookups, translationsSnapshot]);\n}\n"],"mappings":"+dAqDA,SAAgB,EACd,EAAsB,EAAE,CACI,CAC5B,IAAM,EAAuB,GAAyB,CAChD,EAAY,GAAc,CAC1B,EAAsB,GAAe,CAAC,uBAAuB,CAC7D,EAAuB,GAA6B,CAKpD,EAAiB,EAA2B,KAAK,CAgBvD,MAfA,CACE,EAAe,UAAU,IAAI,IAI/B,EAA0B,EAAU,EAAe,CAGnD,EAAsB,EAAe,CAO9B,EAEH,GACyB,CAEzB,IAAM,EAAY,EAAwB,EAAO,CAC7C,GACF,EAAe,QAAS,IAAI,EAAU,CAIxC,IAAM,EAAc,EAAU,qBAC5B,EACA,EACD,CAMD,OAHI,GAAe,MAAQ,GACzB,EAAqB,EAAO,CAEvB,GAET,CAAC,EAAW,EAAsB,EAAsB,EAAoB,CAC7E,CAaH,SAAS,EAAsB,EAA+C,CAE5E,IAAM,EAAa,EAAO,EAAE,CACtB,EAAY,GAAc,CAC1B,EAAY,EACf,GACQ,EAAU,6BAA8B,GAAW,CACxD,IAAM,EAAM,EAAwB,EAAO,CACtC,EAAe,QAAS,IAAI,EAAI,GACrC,EAAW,UACX,GAAU,GACV,CAEJ,CAAC,EAAU,CACZ,CACK,EAAc,MACX,EAAW,QACjB,EAAE,CAAC,CAEN,EAAqB,EAAW,EAAa,EAAY,CAU3D,SAAS,EACP,EACA,EACA,CACA,IAAM,EAAY,GAAc,CAC1B,EAAS,GAAW,CACpB,EAAsB,GAAe,CAAC,uBAAuB,CAC7D,EAAkB,GAAoB,CACtC,EAAuB,GAAyB,CAChD,EAAqB,MAClB,GAAU,OAAS,GAAK,GAAmB,EACjD,CAAC,EAAU,EAAiB,EAAoB,CAAC,CAG9C,EAA+C,MAC9C,EACE,EAAS,KAAK,CAAE,UAAS,GAAG,KAAc,CAC/C,IAAM,EAAe,EAAQ,SAAW,EAMlC,EAAS,CACb,OAAQ,EACR,UACA,QARoB,EACpB,EACA,EACA,MAKsB,CACvB,CACD,MAAO,CAAC,EAAQ,EAAwB,EAAO,CAAC,EAChD,CAd8B,EAAE,CAejC,CAAC,EAAQ,EAAoB,EAAS,CAAC,CAGtC,GACF,EAAQ,SAAS,EAAG,KAAe,CACjC,EAAe,QAAS,IAAI,EAAU,EACtC,CAYJ,MAAgB,CACT,GAEL,EACG,QACE,CAAC,KACA,EAAU,qBAAqB,EAAQ,EAAqB,EAAI,KACnE,CACA,SAAS,CAAC,KAAY,EAAU,UAAU,EAAO,CAAC,EACpD,CAAC,EAAoB,EAAW,EAAS,EAAqB,CAAC"}
1
+ {"version":3,"file":"useTrackedTranslationResolver.mjs","names":[],"sources":["../../../src/hooks/external-store/useTrackedTranslationResolver.ts"],"sourcesContent":["import { type RefObject, useCallback, useEffect, useMemo, useRef } from 'react';\nimport {\n createLookupOptions,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n TranslateLookup,\n TranslateSnapshot,\n} from '../../i18n-store/storeTypes';\nimport type { TranslationMetadata } from 'gt-i18n/internal/types';\nimport type { StringFormat } from '@generaltranslation/format';\nimport { useLocale } from '../condition-store';\nimport { useShouldTranslate } from '../utils';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../../i18n-store/useI18nStore';\nimport { useHandleMissingTranslation } from '../utils/missing-translation';\nimport { useSubscribeToTrackedLookups } from './useSubscribeToTrackedLookups';\n\n/**\n * Returns the translation, but also triggers a translation if it is not found\n * when dev hot reload is enabled.\n */\nexport type TrackedTranslationResolver = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => TranslateSnapshot<T>;\n\nexport type Message = TranslationMetadata & {\n message: string;\n};\n\n/**\n * NOTE:\n * gt() may be called during render, so tracking intentionally only mutates\n * hook-local refs. This widens the event filter used by our existing\n * useSyncExternalStore subscription, but does not update React state or mutate\n * the translation cache during render.\n *\n * A render that is later aborted may leave behind an extra tracked key. That is\n * acceptable for dev hot reload because the worst case is an unnecessary\n * invalidation for this hook instance, not incorrect rendered output.\n */\n\nexport function useTrackedTranslationResolver(\n messages: Message[] = []\n): TrackedTranslationResolver {\n const translationsSnapshot = useTranslationsSnapshot();\n const i18nStore = useI18nStore();\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * Track lookups per hook instance without updating React state during render.\n */\n const trackedKeysRef = useRef<Set<string> | null>(null);\n if (trackedKeysRef.current == null) {\n trackedKeysRef.current = new Set();\n }\n\n // (optimization) Pre-subscribe to compiler-injected lookups\n usePreloadCompilerLookups(messages, trackedKeysRef);\n\n // (tx hot reload) Subscribe to translation updates\n useSubscribeToTrackedLookups(\n trackedKeysRef,\n i18nStore.subscribeToTranslationEvents,\n getTranslateListenerKey\n );\n\n /**\n * Remember that we can make no assumptions about when this cb gets invoked\n * - Resolves translation from lookup\n * - enqueues dev hot reload (if needed)\n */\n return useCallback(\n <T extends Translation>(\n lookup: TranslateLookup<T>\n ): TranslateSnapshot<T> => {\n // Track the lookup for dev hot reload\n const lookupKey = getTranslateListenerKey(lookup);\n if (devHotReloadEnabled) {\n trackedKeysRef.current!.add(lookupKey);\n }\n\n // Resolve the translation from the store\n const translation = i18nStore.getTranslateSnapshot(\n lookup,\n translationsSnapshot\n );\n\n // Trigger a hot reload if the translation is not found\n if (translation == null && devHotReloadEnabled) {\n onMissingTranslation(lookup);\n }\n return translation;\n },\n [i18nStore, translationsSnapshot, onMissingTranslation, devHotReloadEnabled]\n );\n}\n\n/**\n * Pre-subscribe to compiler-injected lookups\n * trigger translations for them\n *\n * This ref mutation is safe because this is translation hot reload only\n * and effects are deterministic\n */\nfunction usePreloadCompilerLookups(\n messages: Message[],\n trackedKeysRef: RefObject<Set<string> | null>\n) {\n const i18nStore = useI18nStore();\n const locale = useLocale();\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const translationsSnapshot = useTranslationsSnapshot();\n const txHotReloadEnabled = useMemo(() => {\n return messages?.length > 0 && shouldTranslate && devHotReloadEnabled;\n }, [messages, shouldTranslate, devHotReloadEnabled]);\n\n // Precompute as much as we can\n const lookups: [TranslateLookup<string>, string][] = useMemo(() => {\n if (!txHotReloadEnabled) return [];\n return messages.map(({ message, ...options }) => {\n const targetLocale = options.$locale ?? locale;\n const lookupOptions = createLookupOptions<StringFormat>(\n targetLocale,\n options,\n 'ICU'\n );\n const lookup = {\n locale: targetLocale,\n message,\n options: lookupOptions,\n };\n return [lookup, getTranslateListenerKey(lookup)];\n });\n }, [locale, txHotReloadEnabled, messages]);\n\n // Pre-subscribe to the lookups\n if (txHotReloadEnabled) {\n lookups.forEach(([, lookupKey]) => {\n trackedKeysRef.current!.add(lookupKey);\n });\n }\n\n /**\n * Delegate non-pure operations to post commit\n *\n * (Optimization) Trigger a hot reload if the translation is not found\n * for compiler-injected lookups\n *\n * TODO: for use() + suspense strategy, use a Promise.all()\n * TODO: server side translation invocation\n */\n useEffect(() => {\n if (!txHotReloadEnabled) return;\n\n lookups\n .filter(\n ([lookup]) =>\n i18nStore.getTranslateSnapshot(lookup, translationsSnapshot) == null\n )\n .forEach(([lookup]) => i18nStore.translate(lookup));\n }, [txHotReloadEnabled, i18nStore, lookups, translationsSnapshot]);\n}\n"],"mappings":"uhBA8CA,SAAgB,EACd,EAAsB,EAAE,CACI,CAC5B,IAAM,EAAuB,GAAyB,CAChD,EAAY,GAAc,CAC1B,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,EAAuB,GAA6B,CAKpD,EAAiB,EAA2B,KAAK,CAoBvD,MAnBA,CACE,EAAe,UAAU,IAAI,IAI/B,EAA0B,EAAU,EAAe,CAGnD,EACE,EACA,EAAU,6BACV,EACD,CAOM,EAEH,GACyB,CAEzB,IAAM,EAAY,EAAwB,EAAO,CAC7C,GACF,EAAe,QAAS,IAAI,EAAU,CAIxC,IAAM,EAAc,EAAU,qBAC5B,EACA,EACD,CAMD,OAHI,GAAe,MAAQ,GACzB,EAAqB,EAAO,CAEvB,GAET,CAAC,EAAW,EAAsB,EAAsB,EAAoB,CAC7E,CAUH,SAAS,EACP,EACA,EACA,CACA,IAAM,EAAY,GAAc,CAC1B,EAAS,GAAW,CACpB,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,EAAkB,GAAoB,CACtC,EAAuB,GAAyB,CAChD,EAAqB,MAClB,GAAU,OAAS,GAAK,GAAmB,EACjD,CAAC,EAAU,EAAiB,EAAoB,CAAC,CAG9C,EAA+C,MAC9C,EACE,EAAS,KAAK,CAAE,UAAS,GAAG,KAAc,CAC/C,IAAM,EAAe,EAAQ,SAAW,EAMlC,EAAS,CACb,OAAQ,EACR,UACA,QARoB,EACpB,EACA,EACA,MAKsB,CACvB,CACD,MAAO,CAAC,EAAQ,EAAwB,EAAO,CAAC,EAChD,CAd8B,EAAE,CAejC,CAAC,EAAQ,EAAoB,EAAS,CAAC,CAGtC,GACF,EAAQ,SAAS,EAAG,KAAe,CACjC,EAAe,QAAS,IAAI,EAAU,EACtC,CAYJ,MAAgB,CACT,GAEL,EACG,QACE,CAAC,KACA,EAAU,qBAAqB,EAAQ,EAAqB,EAAI,KACnE,CACA,SAAS,CAAC,KAAY,EAAU,UAAU,EAAO,CAAC,EACpD,CAAC,EAAoB,EAAW,EAAS,EAAqB,CAAC"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../i18n-store/useI18nStore.cjs`),t=require(`./utils/missing-translation.cjs`);let n=require(`react`),r=require(`gt-i18n/internal`);function i(i){let a=e.useI18nStore(),o=e.useTranslationsSnapshot(),s=t.useHandleMissingTranslation(),c=(0,n.useSyncExternalStore)(e=>a.subscribeToTranslate(i,e),()=>a.getTranslateSnapshot(i,o),()=>a.getTranslateSnapshot(i,o));return c==null&&(0,r.getI18nConfig)().isDevHotReloadEnabled()&&s(i),c}exports.useTranslate=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../i18n-store/useI18nStore.cjs`),t=require(`./utils/missing-translation.cjs`);let n=require(`gt-i18n/internal`),r=require(`react`);function i(i){let a=e.useI18nStore(),o=e.useTranslationsSnapshot(),s=t.useHandleMissingTranslation(),c=(0,r.useSyncExternalStore)(e=>a.subscribeToTranslate(i,e),()=>a.getTranslateSnapshot(i,o),()=>a.getTranslateSnapshot(i,o));return process.env.NODE_ENV!==`production`&&c==null&&(0,n.getI18nConfig)().isDevHotReloadEnabled()&&s(i),c}exports.useTranslate=i;
2
2
  //# sourceMappingURL=external-store.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-store.cjs","names":["useI18nStore","useTranslationsSnapshot","useHandleMissingTranslation"],"sources":["../../src/hooks/external-store.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n TranslateLookup,\n TranslateSnapshot,\n} from '../i18n-store/storeTypes';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../i18n-store/useI18nStore';\nimport { getI18nConfig } from 'gt-i18n/internal';\nimport { useHandleMissingTranslation } from './utils/missing-translation';\n\n/**\n * @internal\n */\nexport function useTranslate<T extends Translation>(\n lookup: TranslateLookup<T>\n): TranslateSnapshot<T> {\n const i18nStore = useI18nStore();\n const translationsSnapshot = useTranslationsSnapshot();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * TODO: for snapshot lookup, we can use the translation snapshot\n * to avoid the adapter.resolveTranslation call.\n */\n const storeTranslation = useSyncExternalStore(\n (listener) => i18nStore.subscribeToTranslate(lookup, listener),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot)\n );\n\n if (storeTranslation == null && getI18nConfig().isDevHotReloadEnabled()) {\n // TODO: (separate PR): add configuration for a use() + suspense strategy\n // TODO: consider moving this to a useEffect\n onMissingTranslation(lookup);\n }\n\n return storeTranslation;\n}\n"],"mappings":"iMAgBA,SAAgB,EACd,EACsB,CACtB,IAAM,EAAYA,EAAAA,cAAc,CAC1B,EAAuBC,EAAAA,yBAAyB,CAChD,EAAuBC,EAAAA,6BAA6B,CAMpD,GAAA,EAAA,EAAA,sBACH,GAAa,EAAU,qBAAqB,EAAQ,EAAS,KACxD,EAAU,qBAAqB,EAAQ,EAAqB,KAC5D,EAAU,qBAAqB,EAAQ,EAAqB,CACnE,CAQD,OANI,GAAoB,OAAA,EAAA,EAAA,gBAAuB,CAAC,uBAAuB,EAGrE,EAAqB,EAAO,CAGvB"}
1
+ {"version":3,"file":"external-store.cjs","names":["useI18nStore","useTranslationsSnapshot","useHandleMissingTranslation"],"sources":["../../src/hooks/external-store.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n TranslateLookup,\n TranslateSnapshot,\n} from '../i18n-store/storeTypes';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../i18n-store/useI18nStore';\nimport { getI18nConfig } from 'gt-i18n/internal';\nimport { useHandleMissingTranslation } from './utils/missing-translation';\n\n/**\n * @internal\n */\nexport function useTranslate<T extends Translation>(\n lookup: TranslateLookup<T>\n): TranslateSnapshot<T> {\n const i18nStore = useI18nStore();\n const translationsSnapshot = useTranslationsSnapshot();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * TODO: for snapshot lookup, we can use the translation snapshot\n * to avoid the adapter.resolveTranslation call.\n */\n const storeTranslation = useSyncExternalStore(\n (listener) => i18nStore.subscribeToTranslate(lookup, listener),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot)\n );\n\n if (\n process.env.NODE_ENV !== 'production' &&\n storeTranslation == null &&\n getI18nConfig().isDevHotReloadEnabled()\n ) {\n // TODO: (separate PR): add configuration for a use() + suspense strategy\n // TODO: consider moving this to a useEffect\n onMissingTranslation(lookup);\n }\n\n return storeTranslation;\n}\n"],"mappings":"iMAgBA,SAAgB,EACd,EACsB,CACtB,IAAM,EAAYA,EAAAA,cAAc,CAC1B,EAAuBC,EAAAA,yBAAyB,CAChD,EAAuBC,EAAAA,6BAA6B,CAMpD,GAAA,EAAA,EAAA,sBACH,GAAa,EAAU,qBAAqB,EAAQ,EAAS,KACxD,EAAU,qBAAqB,EAAQ,EAAqB,KAC5D,EAAU,qBAAqB,EAAQ,EAAqB,CACnE,CAYD,OATE,QAAQ,IAAI,WAAa,cACzB,GAAoB,OAAA,EAAA,EAAA,gBACL,CAAC,uBAAuB,EAIvC,EAAqB,EAAO,CAGvB"}
@@ -1,2 +1,2 @@
1
- import{useI18nStore as e,useTranslationsSnapshot as t}from"../i18n-store/useI18nStore.mjs";import{useHandleMissingTranslation as n}from"./utils/missing-translation.mjs";import{useSyncExternalStore as r}from"react";import{getI18nConfig as i}from"gt-i18n/internal";function a(a){let o=e(),s=t(),c=n(),l=r(e=>o.subscribeToTranslate(a,e),()=>o.getTranslateSnapshot(a,s),()=>o.getTranslateSnapshot(a,s));return l==null&&i().isDevHotReloadEnabled()&&c(a),l}export{a as useTranslate};
1
+ import{useI18nStore as e,useTranslationsSnapshot as t}from"../i18n-store/useI18nStore.mjs";import{useHandleMissingTranslation as n}from"./utils/missing-translation.mjs";import{getI18nConfig as r}from"gt-i18n/internal";import{useSyncExternalStore as i}from"react";function a(a){let o=e(),s=t(),c=n(),l=i(e=>o.subscribeToTranslate(a,e),()=>o.getTranslateSnapshot(a,s),()=>o.getTranslateSnapshot(a,s));return process.env.NODE_ENV!==`production`&&l==null&&r().isDevHotReloadEnabled()&&c(a),l}export{a as useTranslate};
2
2
  //# sourceMappingURL=external-store.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-store.mjs","names":[],"sources":["../../src/hooks/external-store.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n TranslateLookup,\n TranslateSnapshot,\n} from '../i18n-store/storeTypes';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../i18n-store/useI18nStore';\nimport { getI18nConfig } from 'gt-i18n/internal';\nimport { useHandleMissingTranslation } from './utils/missing-translation';\n\n/**\n * @internal\n */\nexport function useTranslate<T extends Translation>(\n lookup: TranslateLookup<T>\n): TranslateSnapshot<T> {\n const i18nStore = useI18nStore();\n const translationsSnapshot = useTranslationsSnapshot();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * TODO: for snapshot lookup, we can use the translation snapshot\n * to avoid the adapter.resolveTranslation call.\n */\n const storeTranslation = useSyncExternalStore(\n (listener) => i18nStore.subscribeToTranslate(lookup, listener),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot)\n );\n\n if (storeTranslation == null && getI18nConfig().isDevHotReloadEnabled()) {\n // TODO: (separate PR): add configuration for a use() + suspense strategy\n // TODO: consider moving this to a useEffect\n onMissingTranslation(lookup);\n }\n\n return storeTranslation;\n}\n"],"mappings":"uQAgBA,SAAgB,EACd,EACsB,CACtB,IAAM,EAAY,GAAc,CAC1B,EAAuB,GAAyB,CAChD,EAAuB,GAA6B,CAMpD,EAAmB,EACtB,GAAa,EAAU,qBAAqB,EAAQ,EAAS,KACxD,EAAU,qBAAqB,EAAQ,EAAqB,KAC5D,EAAU,qBAAqB,EAAQ,EAAqB,CACnE,CAQD,OANI,GAAoB,MAAQ,GAAe,CAAC,uBAAuB,EAGrE,EAAqB,EAAO,CAGvB"}
1
+ {"version":3,"file":"external-store.mjs","names":[],"sources":["../../src/hooks/external-store.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\nimport type { Translation } from 'gt-i18n/types';\nimport type {\n TranslateLookup,\n TranslateSnapshot,\n} from '../i18n-store/storeTypes';\nimport {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../i18n-store/useI18nStore';\nimport { getI18nConfig } from 'gt-i18n/internal';\nimport { useHandleMissingTranslation } from './utils/missing-translation';\n\n/**\n * @internal\n */\nexport function useTranslate<T extends Translation>(\n lookup: TranslateLookup<T>\n): TranslateSnapshot<T> {\n const i18nStore = useI18nStore();\n const translationsSnapshot = useTranslationsSnapshot();\n const onMissingTranslation = useHandleMissingTranslation();\n\n /**\n * TODO: for snapshot lookup, we can use the translation snapshot\n * to avoid the adapter.resolveTranslation call.\n */\n const storeTranslation = useSyncExternalStore(\n (listener) => i18nStore.subscribeToTranslate(lookup, listener),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot),\n () => i18nStore.getTranslateSnapshot(lookup, translationsSnapshot)\n );\n\n if (\n process.env.NODE_ENV !== 'production' &&\n storeTranslation == null &&\n getI18nConfig().isDevHotReloadEnabled()\n ) {\n // TODO: (separate PR): add configuration for a use() + suspense strategy\n // TODO: consider moving this to a useEffect\n onMissingTranslation(lookup);\n }\n\n return storeTranslation;\n}\n"],"mappings":"uQAgBA,SAAgB,EACd,EACsB,CACtB,IAAM,EAAY,GAAc,CAC1B,EAAuB,GAAyB,CAChD,EAAuB,GAA6B,CAMpD,EAAmB,EACtB,GAAa,EAAU,qBAAqB,EAAQ,EAAS,KACxD,EAAU,qBAAqB,EAAQ,EAAqB,KAC5D,EAAU,qBAAqB,EAAQ,EAAqB,CACnE,CAYD,OATE,QAAQ,IAAI,WAAa,cACzB,GAAoB,MACpB,GAAe,CAAC,uBAAuB,EAIvC,EAAqB,EAAO,CAGvB"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`react`),t=require(`gt-i18n/internal`);function n(){return(0,e.useMemo)(()=>(0,t.getI18nConfig)().getCustomMapping(),[])}function r(){return(0,e.useMemo)(()=>(0,t.getI18nConfig)().getDefaultLocale(),[])}function i(){return(0,e.useMemo)(()=>(0,t.getI18nConfig)().getLocales(),[])}exports.useCustomMapping=n,exports.useDefaultLocale=r,exports.useLocales=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`gt-i18n/internal`),t=require(`react`);function n(){return(0,t.useMemo)(()=>(0,e.getI18nConfig)().getCustomMapping(),[])}function r(){return(0,t.useMemo)(()=>(0,e.getI18nConfig)().getDefaultLocale(),[])}function i(){return(0,t.useMemo)(()=>(0,e.getI18nConfig)().getLocales(),[])}exports.useCustomMapping=n,exports.useDefaultLocale=r,exports.useLocales=i;
2
2
  //# sourceMappingURL=i18n-config.cjs.map
@@ -1,2 +1,2 @@
1
- import{useMemo as e}from"react";import{getI18nConfig as t}from"gt-i18n/internal";function n(){return e(()=>t().getCustomMapping(),[])}function r(){return e(()=>t().getDefaultLocale(),[])}function i(){return e(()=>t().getLocales(),[])}export{n as useCustomMapping,r as useDefaultLocale,i as useLocales};
1
+ import{getI18nConfig as e}from"gt-i18n/internal";import{useMemo as t}from"react";function n(){return t(()=>e().getCustomMapping(),[])}function r(){return t(()=>e().getDefaultLocale(),[])}function i(){return t(()=>e().getLocales(),[])}export{n as useCustomMapping,r as useDefaultLocale,i as useLocales};
2
2
  //# sourceMappingURL=i18n-config.mjs.map
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`),n=require(`./utils.cjs`),r=require(`./external-store/useTrackedTranslationResolver.cjs`);let i=require(`react`),a=require(`gt-i18n/internal`);function o(o){let s=e.useLocale(),c=t.useDefaultLocale(),l=n.useShouldTranslate(),u=r.useTrackedTranslationResolver(o);return(0,i.useCallback)((e,t={})=>{if(!l)return(0,a.interpolateMessage)({options:t,source:e,sourceLocale:c});let n=(0,a.createLookupOptions)(t.$locale??s,t,`ICU`);return(0,a.interpolateMessage)({source:e,target:u({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:c})},[c,s,l,u])}exports.useGT=o;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`),n=require(`./utils.cjs`),r=require(`./external-store/useTrackedTranslationResolver.cjs`);let i=require(`gt-i18n/internal`),a=require(`react`);function o(o){let s=e.useLocale(),c=t.useDefaultLocale(),l=n.useShouldTranslate(),u=r.useTrackedTranslationResolver(o);return(0,a.useCallback)((e,t={})=>{let n=(0,i.createLookupOptions)(t.$locale??s,t,`ICU`);return l?(0,i.interpolateMessage)({source:e,target:u({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:c}):(0,i.interpolateMessage)({options:n,source:e,sourceLocale:c})},[c,s,l,u])}exports.useGT=o;
2
2
  //# sourceMappingURL=useGT.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGT.cjs","names":["useLocale","useDefaultLocale","useShouldTranslate","useTrackedTranslationResolver"],"sources":["../../src/hooks/useGT.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { createLookupOptions, interpolateMessage } from 'gt-i18n/internal';\nimport { useLocale } from './condition-store';\nimport { useShouldTranslate } from './utils';\nimport type { GTFunctionType, GTTranslationOptions } from 'gt-i18n/types';\nimport type { StringFormat } from '@generaltranslation/format/types';\nimport { useDefaultLocale } from './i18n-config';\nimport {\n type Message,\n useTrackedTranslationResolver,\n} from './external-store/useTrackedTranslationResolver';\n\n// ===== Hook ===== //\n\nexport function useGT(_messages?: Message[]): GTFunctionType {\n const locale = useLocale();\n const defaultLocale = useDefaultLocale();\n const shouldTranslate = useShouldTranslate();\n const resolveTranslation = useTrackedTranslationResolver(_messages);\n\n /**\n * gt() string translation callback\n */\n return useCallback(\n (message: string, options: GTTranslationOptions = {}) => {\n if (!shouldTranslate) {\n return interpolateMessage({\n options,\n source: message,\n sourceLocale: defaultLocale,\n });\n }\n\n const lookupOptions = createLookupOptions<StringFormat>(\n options.$locale ?? locale,\n options,\n 'ICU'\n );\n const translation = resolveTranslation({\n locale: lookupOptions.$locale,\n message,\n options: lookupOptions,\n });\n\n return interpolateMessage({\n source: message,\n target: translation,\n options: lookupOptions,\n sourceLocale: defaultLocale,\n });\n },\n [defaultLocale, locale, shouldTranslate, resolveTranslation]\n );\n}\n"],"mappings":"mQAcA,SAAgB,EAAM,EAAuC,CAC3D,IAAM,EAASA,EAAAA,WAAW,CACpB,EAAgBC,EAAAA,kBAAkB,CAClC,EAAkBC,EAAAA,oBAAoB,CACtC,EAAqBC,EAAAA,8BAA8B,EAAU,CAKnE,OAAA,EAAA,EAAA,cACG,EAAiB,EAAgC,EAAE,GAAK,CACvD,GAAI,CAAC,EACH,OAAA,EAAA,EAAA,oBAA0B,CACxB,UACA,OAAQ,EACR,aAAc,EACf,CAAC,CAGJ,IAAM,GAAA,EAAA,EAAA,qBACJ,EAAQ,SAAW,EACnB,EACA,MACD,CAOD,OAAA,EAAA,EAAA,oBAA0B,CACxB,OAAQ,EACR,OARkB,EAAmB,CACrC,OAAQ,EAAc,QACtB,UACA,QAAS,EACV,CAIoB,CACnB,QAAS,EACT,aAAc,EACf,CAAC,EAEJ,CAAC,EAAe,EAAQ,EAAiB,EAAmB,CAC7D"}
1
+ {"version":3,"file":"useGT.cjs","names":["useLocale","useDefaultLocale","useShouldTranslate","useTrackedTranslationResolver"],"sources":["../../src/hooks/useGT.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { createLookupOptions, interpolateMessage } from 'gt-i18n/internal';\nimport { useLocale } from './condition-store';\nimport { useShouldTranslate } from './utils';\nimport type { GTFunctionType, GTTranslationOptions } from 'gt-i18n/types';\nimport type { StringFormat } from '@generaltranslation/format/types';\nimport { useDefaultLocale } from './i18n-config';\nimport {\n type Message,\n useTrackedTranslationResolver,\n} from './external-store/useTrackedTranslationResolver';\n\n// ===== Hook ===== //\n\nexport function useGT(_messages?: Message[]): GTFunctionType {\n const locale = useLocale();\n const defaultLocale = useDefaultLocale();\n const shouldTranslate = useShouldTranslate();\n const resolveTranslation = useTrackedTranslationResolver(_messages);\n\n /**\n * gt() string translation callback\n */\n return useCallback(\n (message: string, options: GTTranslationOptions = {}) => {\n const lookupOptions = createLookupOptions<StringFormat>(\n options.$locale ?? locale,\n options,\n 'ICU'\n );\n\n if (!shouldTranslate) {\n return interpolateMessage({\n options: lookupOptions,\n source: message,\n sourceLocale: defaultLocale,\n });\n }\n\n const translation = resolveTranslation({\n locale: lookupOptions.$locale,\n message,\n options: lookupOptions,\n });\n\n return interpolateMessage({\n source: message,\n target: translation,\n options: lookupOptions,\n sourceLocale: defaultLocale,\n });\n },\n [defaultLocale, locale, shouldTranslate, resolveTranslation]\n );\n}\n"],"mappings":"mQAcA,SAAgB,EAAM,EAAuC,CAC3D,IAAM,EAASA,EAAAA,WAAW,CACpB,EAAgBC,EAAAA,kBAAkB,CAClC,EAAkBC,EAAAA,oBAAoB,CACtC,EAAqBC,EAAAA,8BAA8B,EAAU,CAKnE,OAAA,EAAA,EAAA,cACG,EAAiB,EAAgC,EAAE,GAAK,CACvD,IAAM,GAAA,EAAA,EAAA,qBACJ,EAAQ,SAAW,EACnB,EACA,MACD,CAgBD,OAdK,GAcL,EAAA,EAAA,oBAA0B,CACxB,OAAQ,EACR,OARkB,EAAmB,CACrC,OAAQ,EAAc,QACtB,UACA,QAAS,EACV,CAIoB,CACnB,QAAS,EACT,aAAc,EACf,CAAC,EAlBA,EAAA,EAAA,oBAA0B,CACxB,QAAS,EACT,OAAQ,EACR,aAAc,EACf,CAAC,EAgBN,CAAC,EAAe,EAAQ,EAAiB,EAAmB,CAC7D"}
@@ -1,2 +1,2 @@
1
- import{useLocale as e}from"./condition-store.mjs";import{useDefaultLocale as t}from"./i18n-config.mjs";import{useShouldTranslate as n}from"./utils.mjs";import{useTrackedTranslationResolver as r}from"./external-store/useTrackedTranslationResolver.mjs";import{useCallback as i}from"react";import{createLookupOptions as a,interpolateMessage as o}from"gt-i18n/internal";function s(s){let c=e(),l=t(),u=n(),d=r(s);return i((e,t={})=>{if(!u)return o({options:t,source:e,sourceLocale:l});let n=a(t.$locale??c,t,`ICU`);return o({source:e,target:d({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:l})},[l,c,u,d])}export{s as useGT};
1
+ import{useLocale as e}from"./condition-store.mjs";import{useDefaultLocale as t}from"./i18n-config.mjs";import{useShouldTranslate as n}from"./utils.mjs";import{useTrackedTranslationResolver as r}from"./external-store/useTrackedTranslationResolver.mjs";import{createLookupOptions as i,interpolateMessage as a}from"gt-i18n/internal";import{useCallback as o}from"react";function s(s){let c=e(),l=t(),u=n(),d=r(s);return o((e,t={})=>{let n=i(t.$locale??c,t,`ICU`);return a(u?{source:e,target:d({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:l}:{options:n,source:e,sourceLocale:l})},[l,c,u,d])}export{s as useGT};
2
2
  //# sourceMappingURL=useGT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGT.mjs","names":[],"sources":["../../src/hooks/useGT.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { createLookupOptions, interpolateMessage } from 'gt-i18n/internal';\nimport { useLocale } from './condition-store';\nimport { useShouldTranslate } from './utils';\nimport type { GTFunctionType, GTTranslationOptions } from 'gt-i18n/types';\nimport type { StringFormat } from '@generaltranslation/format/types';\nimport { useDefaultLocale } from './i18n-config';\nimport {\n type Message,\n useTrackedTranslationResolver,\n} from './external-store/useTrackedTranslationResolver';\n\n// ===== Hook ===== //\n\nexport function useGT(_messages?: Message[]): GTFunctionType {\n const locale = useLocale();\n const defaultLocale = useDefaultLocale();\n const shouldTranslate = useShouldTranslate();\n const resolveTranslation = useTrackedTranslationResolver(_messages);\n\n /**\n * gt() string translation callback\n */\n return useCallback(\n (message: string, options: GTTranslationOptions = {}) => {\n if (!shouldTranslate) {\n return interpolateMessage({\n options,\n source: message,\n sourceLocale: defaultLocale,\n });\n }\n\n const lookupOptions = createLookupOptions<StringFormat>(\n options.$locale ?? locale,\n options,\n 'ICU'\n );\n const translation = resolveTranslation({\n locale: lookupOptions.$locale,\n message,\n options: lookupOptions,\n });\n\n return interpolateMessage({\n source: message,\n target: translation,\n options: lookupOptions,\n sourceLocale: defaultLocale,\n });\n },\n [defaultLocale, locale, shouldTranslate, resolveTranslation]\n );\n}\n"],"mappings":"8WAcA,SAAgB,EAAM,EAAuC,CAC3D,IAAM,EAAS,GAAW,CACpB,EAAgB,GAAkB,CAClC,EAAkB,GAAoB,CACtC,EAAqB,EAA8B,EAAU,CAKnE,OAAO,GACJ,EAAiB,EAAgC,EAAE,GAAK,CACvD,GAAI,CAAC,EACH,OAAO,EAAmB,CACxB,UACA,OAAQ,EACR,aAAc,EACf,CAAC,CAGJ,IAAM,EAAgB,EACpB,EAAQ,SAAW,EACnB,EACA,MACD,CAOD,OAAO,EAAmB,CACxB,OAAQ,EACR,OARkB,EAAmB,CACrC,OAAQ,EAAc,QACtB,UACA,QAAS,EACV,CAIoB,CACnB,QAAS,EACT,aAAc,EACf,CAAC,EAEJ,CAAC,EAAe,EAAQ,EAAiB,EAAmB,CAC7D"}
1
+ {"version":3,"file":"useGT.mjs","names":[],"sources":["../../src/hooks/useGT.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { createLookupOptions, interpolateMessage } from 'gt-i18n/internal';\nimport { useLocale } from './condition-store';\nimport { useShouldTranslate } from './utils';\nimport type { GTFunctionType, GTTranslationOptions } from 'gt-i18n/types';\nimport type { StringFormat } from '@generaltranslation/format/types';\nimport { useDefaultLocale } from './i18n-config';\nimport {\n type Message,\n useTrackedTranslationResolver,\n} from './external-store/useTrackedTranslationResolver';\n\n// ===== Hook ===== //\n\nexport function useGT(_messages?: Message[]): GTFunctionType {\n const locale = useLocale();\n const defaultLocale = useDefaultLocale();\n const shouldTranslate = useShouldTranslate();\n const resolveTranslation = useTrackedTranslationResolver(_messages);\n\n /**\n * gt() string translation callback\n */\n return useCallback(\n (message: string, options: GTTranslationOptions = {}) => {\n const lookupOptions = createLookupOptions<StringFormat>(\n options.$locale ?? locale,\n options,\n 'ICU'\n );\n\n if (!shouldTranslate) {\n return interpolateMessage({\n options: lookupOptions,\n source: message,\n sourceLocale: defaultLocale,\n });\n }\n\n const translation = resolveTranslation({\n locale: lookupOptions.$locale,\n message,\n options: lookupOptions,\n });\n\n return interpolateMessage({\n source: message,\n target: translation,\n options: lookupOptions,\n sourceLocale: defaultLocale,\n });\n },\n [defaultLocale, locale, shouldTranslate, resolveTranslation]\n );\n}\n"],"mappings":"8WAcA,SAAgB,EAAM,EAAuC,CAC3D,IAAM,EAAS,GAAW,CACpB,EAAgB,GAAkB,CAClC,EAAkB,GAAoB,CACtC,EAAqB,EAA8B,EAAU,CAKnE,OAAO,GACJ,EAAiB,EAAgC,EAAE,GAAK,CACvD,IAAM,EAAgB,EACpB,EAAQ,SAAW,EACnB,EACA,MACD,CAgBD,OAAO,EAdF,EAcqB,CACxB,OAAQ,EACR,OARkB,EAAmB,CACrC,OAAQ,EAAc,QACtB,UACA,QAAS,EACV,CAIoB,CACnB,QAAS,EACT,aAAc,EACf,CAlB2B,CACxB,QAAS,EACT,OAAQ,EACR,aAAc,EACf,CAAC,EAgBN,CAAC,EAAe,EAAQ,EAAiB,EAAmB,CAC7D"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`);let n=require(`react`),r=require(`generaltranslation`);function i(i){let a=t.useLocales(),o=t.useCustomMapping(),s=e.useLocale(),c=(0,n.useMemo)(()=>{if(!a||a.length===0)return[];let e=new Intl.Collator;return[...a].sort((t,n)=>e.compare((0,r.getLocaleProperties)(t,s,o).nativeNameWithRegionCode,(0,r.getLocaleProperties)(n,s,o).nativeNameWithRegionCode))},[a,s,o]),l=(0,n.useCallback)(e=>(0,r.getLocaleProperties)(e,e,o),[s,o]);return{locale:s,locales:i||c,getLocaleProperties:l}}exports.useInternalLocaleSelector=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`);let n=require(`react`),r=require(`@generaltranslation/format`);function i(i){let a=t.useLocales(),o=t.useCustomMapping(),s=e.useLocale(),c=(0,n.useMemo)(()=>{if(!a||a.length===0)return[];let e=new Intl.Collator;return[...a].sort((t,n)=>e.compare((0,r.getLocaleProperties)(t,s,o).nativeNameWithRegionCode,(0,r.getLocaleProperties)(n,s,o).nativeNameWithRegionCode))},[a,s,o]),l=(0,n.useCallback)(e=>(0,r.getLocaleProperties)(e,e,o),[s,o]);return{locale:s,locales:i||c,getLocaleProperties:l}}exports.useInternalLocaleSelector=i;
2
2
  //# sourceMappingURL=useInternalLocaleSelector.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalLocaleSelector.cjs","names":["useLocales","useCustomMapping","useLocale"],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale } from './condition-store';\nimport { getLocaleProperties } from 'generaltranslation';\n\nexport function useInternalLocaleSelector(locales?: string[]) {\n // Retrieve the locale, locales, and setLocale function\n const contextLocales = useLocales();\n const customMapping = useCustomMapping();\n const locale = useLocale();\n\n // sort\n const sortedLocales = useMemo(() => {\n if (!contextLocales || contextLocales.length === 0) {\n return [];\n }\n const collator = new Intl.Collator();\n return [...contextLocales].sort((a, b) =>\n collator.compare(\n getLocaleProperties(a, locale, customMapping).nativeNameWithRegionCode,\n getLocaleProperties(b, locale, customMapping).nativeNameWithRegionCode\n )\n );\n }, [contextLocales, locale, customMapping]);\n\n // create getLocaleProperties callback\n const getLocalePropertiesCallback = useCallback(\n (locale: string) => {\n return getLocaleProperties(locale, locale, customMapping);\n },\n [locale, customMapping]\n );\n\n return {\n locale,\n locales: locales ? locales : sortedLocales,\n getLocaleProperties: getLocalePropertiesCallback,\n };\n}\n"],"mappings":"4KAKA,SAAgB,EAA0B,EAAoB,CAE5D,IAAM,EAAiBA,EAAAA,YAAY,CAC7B,EAAgBC,EAAAA,kBAAkB,CAClC,EAASC,EAAAA,WAAW,CAGpB,GAAA,EAAA,EAAA,aAA8B,CAClC,GAAI,CAAC,GAAkB,EAAe,SAAW,EAC/C,MAAO,EAAE,CAEX,IAAM,EAAW,IAAI,KAAK,SAC1B,MAAO,CAAC,GAAG,EAAe,CAAC,MAAM,EAAG,IAClC,EAAS,SAAA,EAAA,EAAA,qBACa,EAAG,EAAQ,EAAc,CAAC,0BAAA,EAAA,EAAA,qBAC1B,EAAG,EAAQ,EAAc,CAAC,yBAC/C,CACF,EACA,CAAC,EAAgB,EAAQ,EAAc,CAAC,CAGrC,GAAA,EAAA,EAAA,aACH,IACC,EAAA,EAAA,qBAA2B,EAAQ,EAAQ,EAAc,CAE3D,CAAC,EAAQ,EAAc,CACxB,CAED,MAAO,CACL,SACA,QAAS,GAAoB,EAC7B,oBAAqB,EACtB"}
1
+ {"version":3,"file":"useInternalLocaleSelector.cjs","names":["useLocales","useCustomMapping","useLocale"],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport type { LocaleProperties } from '@generaltranslation/format/types';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale } from './condition-store';\nimport { getLocaleProperties } from '@generaltranslation/format';\n\n// Explicit return type so the inferred type stays portable for downstream\n// packages (e.g. gt-react-native), otherwise the getLocaleProperties callback\n// pulls in generaltranslation's bundled, non-nameable type (TS2742).\nexport type InternalLocaleSelectorResult = {\n locale: string;\n locales: string[];\n getLocaleProperties: (locale: string) => LocaleProperties;\n};\n\nexport function useInternalLocaleSelector(\n locales?: string[]\n): InternalLocaleSelectorResult {\n // Retrieve the locale, locales, and setLocale function\n const contextLocales = useLocales();\n const customMapping = useCustomMapping();\n const locale = useLocale();\n\n // sort\n const sortedLocales = useMemo(() => {\n if (!contextLocales || contextLocales.length === 0) {\n return [];\n }\n const collator = new Intl.Collator();\n return [...contextLocales].sort((a, b) =>\n collator.compare(\n getLocaleProperties(a, locale, customMapping).nativeNameWithRegionCode,\n getLocaleProperties(b, locale, customMapping).nativeNameWithRegionCode\n )\n );\n }, [contextLocales, locale, customMapping]);\n\n // create getLocaleProperties callback\n const getLocalePropertiesCallback = useCallback(\n (locale: string) => {\n return getLocaleProperties(locale, locale, customMapping);\n },\n [locale, customMapping]\n );\n\n return {\n locale,\n locales: locales ? locales : sortedLocales,\n getLocaleProperties: getLocalePropertiesCallback,\n };\n}\n"],"mappings":"oLAeA,SAAgB,EACd,EAC8B,CAE9B,IAAM,EAAiBA,EAAAA,YAAY,CAC7B,EAAgBC,EAAAA,kBAAkB,CAClC,EAASC,EAAAA,WAAW,CAGpB,GAAA,EAAA,EAAA,aAA8B,CAClC,GAAI,CAAC,GAAkB,EAAe,SAAW,EAC/C,MAAO,EAAE,CAEX,IAAM,EAAW,IAAI,KAAK,SAC1B,MAAO,CAAC,GAAG,EAAe,CAAC,MAAM,EAAG,IAClC,EAAS,SAAA,EAAA,EAAA,qBACa,EAAG,EAAQ,EAAc,CAAC,0BAAA,EAAA,EAAA,qBAC1B,EAAG,EAAQ,EAAc,CAAC,yBAC/C,CACF,EACA,CAAC,EAAgB,EAAQ,EAAc,CAAC,CAGrC,GAAA,EAAA,EAAA,aACH,IACC,EAAA,EAAA,qBAA2B,EAAQ,EAAQ,EAAc,CAE3D,CAAC,EAAQ,EAAc,CACxB,CAED,MAAO,CACL,SACA,QAAS,GAAoB,EAC7B,oBAAqB,EACtB"}
@@ -1,11 +1,12 @@
1
- import * as _$generaltranslation_internal0 from "generaltranslation/internal";
1
+ import { LocaleProperties } from "@generaltranslation/format/types";
2
2
 
3
3
  //#region src/hooks/useInternalLocaleSelector.d.ts
4
- declare function useInternalLocaleSelector(locales?: string[]): {
4
+ type InternalLocaleSelectorResult = {
5
5
  locale: string;
6
6
  locales: string[];
7
- getLocaleProperties: (locale: string) => _$generaltranslation_internal0.LocaleProperties;
7
+ getLocaleProperties: (locale: string) => LocaleProperties;
8
8
  };
9
+ declare function useInternalLocaleSelector(locales?: string[]): InternalLocaleSelectorResult;
9
10
  //#endregion
10
- export { useInternalLocaleSelector };
11
+ export { InternalLocaleSelectorResult, useInternalLocaleSelector };
11
12
  //# sourceMappingURL=useInternalLocaleSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalLocaleSelector.d.ts","names":[],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"mappings":";;;iBAKgB,yBAAA,CAA0B,OAAA;;;2CAAD,8BAAA,CAsBtB,gBAAA;AAAA"}
1
+ {"version":3,"file":"useInternalLocaleSelector.d.ts","names":[],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"mappings":";;;KASY,4BAAA;EACV,MAAA;EACA,OAAA;EACA,mBAAA,GAAsB,MAAA,aAAmB,gBAAA;AAAA;AAAA,iBAG3B,yBAAA,CACd,OAAA,cACC,4BAAA"}
@@ -1,2 +1,2 @@
1
- import{useLocale as e}from"./condition-store.mjs";import{useCustomMapping as t,useLocales as n}from"./i18n-config.mjs";import{useCallback as r,useMemo as i}from"react";import{getLocaleProperties as a}from"generaltranslation";function o(o){let s=n(),c=t(),l=e(),u=i(()=>{if(!s||s.length===0)return[];let e=new Intl.Collator;return[...s].sort((t,n)=>e.compare(a(t,l,c).nativeNameWithRegionCode,a(n,l,c).nativeNameWithRegionCode))},[s,l,c]),d=r(e=>a(e,e,c),[l,c]);return{locale:l,locales:o||u,getLocaleProperties:d}}export{o as useInternalLocaleSelector};
1
+ import{useLocale as e}from"./condition-store.mjs";import{useCustomMapping as t,useLocales as n}from"./i18n-config.mjs";import{useCallback as r,useMemo as i}from"react";import{getLocaleProperties as a}from"@generaltranslation/format";function o(o){let s=n(),c=t(),l=e(),u=i(()=>{if(!s||s.length===0)return[];let e=new Intl.Collator;return[...s].sort((t,n)=>e.compare(a(t,l,c).nativeNameWithRegionCode,a(n,l,c).nativeNameWithRegionCode))},[s,l,c]),d=r(e=>a(e,e,c),[l,c]);return{locale:l,locales:o||u,getLocaleProperties:d}}export{o as useInternalLocaleSelector};
2
2
  //# sourceMappingURL=useInternalLocaleSelector.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalLocaleSelector.mjs","names":[],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale } from './condition-store';\nimport { getLocaleProperties } from 'generaltranslation';\n\nexport function useInternalLocaleSelector(locales?: string[]) {\n // Retrieve the locale, locales, and setLocale function\n const contextLocales = useLocales();\n const customMapping = useCustomMapping();\n const locale = useLocale();\n\n // sort\n const sortedLocales = useMemo(() => {\n if (!contextLocales || contextLocales.length === 0) {\n return [];\n }\n const collator = new Intl.Collator();\n return [...contextLocales].sort((a, b) =>\n collator.compare(\n getLocaleProperties(a, locale, customMapping).nativeNameWithRegionCode,\n getLocaleProperties(b, locale, customMapping).nativeNameWithRegionCode\n )\n );\n }, [contextLocales, locale, customMapping]);\n\n // create getLocaleProperties callback\n const getLocalePropertiesCallback = useCallback(\n (locale: string) => {\n return getLocaleProperties(locale, locale, customMapping);\n },\n [locale, customMapping]\n );\n\n return {\n locale,\n locales: locales ? locales : sortedLocales,\n getLocaleProperties: getLocalePropertiesCallback,\n };\n}\n"],"mappings":"iOAKA,SAAgB,EAA0B,EAAoB,CAE5D,IAAM,EAAiB,GAAY,CAC7B,EAAgB,GAAkB,CAClC,EAAS,GAAW,CAGpB,EAAgB,MAAc,CAClC,GAAI,CAAC,GAAkB,EAAe,SAAW,EAC/C,MAAO,EAAE,CAEX,IAAM,EAAW,IAAI,KAAK,SAC1B,MAAO,CAAC,GAAG,EAAe,CAAC,MAAM,EAAG,IAClC,EAAS,QACP,EAAoB,EAAG,EAAQ,EAAc,CAAC,yBAC9C,EAAoB,EAAG,EAAQ,EAAc,CAAC,yBAC/C,CACF,EACA,CAAC,EAAgB,EAAQ,EAAc,CAAC,CAGrC,EAA8B,EACjC,GACQ,EAAoB,EAAQ,EAAQ,EAAc,CAE3D,CAAC,EAAQ,EAAc,CACxB,CAED,MAAO,CACL,SACA,QAAS,GAAoB,EAC7B,oBAAqB,EACtB"}
1
+ {"version":3,"file":"useInternalLocaleSelector.mjs","names":[],"sources":["../../src/hooks/useInternalLocaleSelector.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport type { LocaleProperties } from '@generaltranslation/format/types';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale } from './condition-store';\nimport { getLocaleProperties } from '@generaltranslation/format';\n\n// Explicit return type so the inferred type stays portable for downstream\n// packages (e.g. gt-react-native), otherwise the getLocaleProperties callback\n// pulls in generaltranslation's bundled, non-nameable type (TS2742).\nexport type InternalLocaleSelectorResult = {\n locale: string;\n locales: string[];\n getLocaleProperties: (locale: string) => LocaleProperties;\n};\n\nexport function useInternalLocaleSelector(\n locales?: string[]\n): InternalLocaleSelectorResult {\n // Retrieve the locale, locales, and setLocale function\n const contextLocales = useLocales();\n const customMapping = useCustomMapping();\n const locale = useLocale();\n\n // sort\n const sortedLocales = useMemo(() => {\n if (!contextLocales || contextLocales.length === 0) {\n return [];\n }\n const collator = new Intl.Collator();\n return [...contextLocales].sort((a, b) =>\n collator.compare(\n getLocaleProperties(a, locale, customMapping).nativeNameWithRegionCode,\n getLocaleProperties(b, locale, customMapping).nativeNameWithRegionCode\n )\n );\n }, [contextLocales, locale, customMapping]);\n\n // create getLocaleProperties callback\n const getLocalePropertiesCallback = useCallback(\n (locale: string) => {\n return getLocaleProperties(locale, locale, customMapping);\n },\n [locale, customMapping]\n );\n\n return {\n locale,\n locales: locales ? locales : sortedLocales,\n getLocaleProperties: getLocalePropertiesCallback,\n };\n}\n"],"mappings":"yOAeA,SAAgB,EACd,EAC8B,CAE9B,IAAM,EAAiB,GAAY,CAC7B,EAAgB,GAAkB,CAClC,EAAS,GAAW,CAGpB,EAAgB,MAAc,CAClC,GAAI,CAAC,GAAkB,EAAe,SAAW,EAC/C,MAAO,EAAE,CAEX,IAAM,EAAW,IAAI,KAAK,SAC1B,MAAO,CAAC,GAAG,EAAe,CAAC,MAAM,EAAG,IAClC,EAAS,QACP,EAAoB,EAAG,EAAQ,EAAc,CAAC,yBAC9C,EAAoB,EAAG,EAAQ,EAAc,CAAC,yBAC/C,CACF,EACA,CAAC,EAAgB,EAAQ,EAAc,CAAC,CAGrC,EAA8B,EACjC,GACQ,EAAoB,EAAQ,EAAQ,EAAc,CAE3D,CAAC,EAAQ,EAAc,CACxB,CAED,MAAO,CACL,SACA,QAAS,GAAoB,EAC7B,oBAAqB,EACtB"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`);let n=require(`react`),r=require(`gt-i18n/internal`),i=require(`generaltranslation`);function a({regions:a,customMapping:o,prioritizeCurrentLocaleRegion:s=!0,sortRegionsAlphabetically:c=!0}={}){let l=t.useLocales(),u=t.useCustomMapping(),d=e.useLocale(),f=e.useRegion(),{regionCode:p}=(0,i.getLocaleProperties)(d,d,u),[m,h]=(0,n.useMemo)(()=>{let e=(0,r.getI18nConfig)().getGTClass(d),t=new Map(l.map(e=>{let t=(0,i.getLocaleProperties)(e,d,u);return[t.regionCode,t]})),n=a?[...a]:Array.from(t?.keys()||[p]),f=new Map(n.map(n=>[n,{locale:t?.get(n)?.code||d,...e.getRegionProperties(n),...typeof o?.[n]==`string`?{name:o?.[n]}:o?.[n]}]));if(c&&n.sort((e,t)=>new Intl.Collator().compare(f.get(e).name,f.get(t).name)),s){let e=n.indexOf(p);e>0&&(n.splice(e,1),n.unshift(p))}return[n,f]},[a,o,d,p,l,u,s,c]);return{region:f,regions:m,regionData:h,locale:d,localeRegion:p}}exports.useInternalRegionSelector=a;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`);let n=require(`gt-i18n/internal`),r=require(`react`),i=require(`@generaltranslation/format`);function a({regions:a,customMapping:o,prioritizeCurrentLocaleRegion:s=!0,sortRegionsAlphabetically:c=!0}={}){let l=t.useLocales(),u=t.useCustomMapping(),d=e.useLocale(),f=e.useRegion(),{regionCode:p}=(0,i.getLocaleProperties)(d,d,u),[m,h]=(0,r.useMemo)(()=>{let e=(0,n.getI18nConfig)().getGTClass(d),t=new Map(l.map(e=>{let t=(0,i.getLocaleProperties)(e,d,u);return[t.regionCode,t]})),r=a?[...a]:Array.from(t?.keys()||[p]),f=new Map(r.map(n=>[n,{locale:t?.get(n)?.code||d,...e.getRegionProperties(n),...typeof o?.[n]==`string`?{name:o?.[n]}:o?.[n]}]));if(c&&r.sort((e,t)=>new Intl.Collator().compare(f.get(e).name,f.get(t).name)),s){let e=r.indexOf(p);e>0&&(r.splice(e,1),r.unshift(p))}return[r,f]},[a,o,d,p,l,u,s,c]);return{region:f,regions:m,regionData:h,locale:d,localeRegion:p}}exports.useInternalRegionSelector=a;
2
2
  //# sourceMappingURL=useInternalRegionSelector.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalRegionSelector.cjs","names":["useLocales","useCustomMapping","useLocale","useRegion"],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale, useRegion } from './condition-store';\nimport { getLocaleProperties } from 'generaltranslation';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nexport type RegionData = {\n code: string;\n name: string;\n emoji: string;\n locale: string;\n};\n\nexport type InternalRegionSelectorOptions = {\n regions?: string[];\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n};\n\n/**\n * Internal logic for region selection in applications supporting multiple regions.\n *\n * Returns the current region, an ordered list of available regions (inferred\n * from the supported locales when not provided), and a map of region codes to\n * their display data (name, emoji, associated locale).\n */\nexport function useInternalRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion = true,\n sortRegionsAlphabetically = true,\n}: InternalRegionSelectorOptions = {}) {\n // Retrieve the locale, locales, and region\n const contextLocales = useLocales();\n const localeCustomMapping = useCustomMapping();\n const locale = useLocale();\n const region = useRegion();\n const { regionCode: localeRegion } = getLocaleProperties(\n locale,\n locale,\n localeCustomMapping\n );\n\n const [\n regions, // ordered list of ISO 3166 region codes\n regionData, // map of ISO 3166 region codes to region display data, potentially not ordered\n ] = useMemo<[string[], Map<string, RegionData>]>(() => {\n const gt = getI18nConfig().getGTClass(locale);\n const regionToLocaleMap = new Map(\n contextLocales.map((l) => {\n const lp = getLocaleProperties(l, locale, localeCustomMapping); // has to be directly called so sourceLocale can be in the user's current locale\n return [lp.regionCode, lp];\n })\n );\n\n const regions = _regions\n ? [..._regions]\n : Array.from(regionToLocaleMap?.keys() || [localeRegion]);\n\n const regionData = new Map<string, RegionData>(\n regions.map((r: string) => {\n return [\n r,\n {\n locale: regionToLocaleMap?.get(r)?.code || locale,\n ...gt.getRegionProperties(r),\n ...(typeof customMapping?.[r] === 'string'\n ? { name: customMapping?.[r] }\n : customMapping?.[r]),\n },\n ];\n })\n );\n\n if (sortRegionsAlphabetically) {\n regions.sort((a, b) =>\n new Intl.Collator().compare(\n regionData.get(a)!.name,\n regionData.get(b)!.name\n )\n );\n }\n\n if (prioritizeCurrentLocaleRegion) {\n const localeRegionIndex = regions.indexOf(localeRegion);\n if (localeRegionIndex > 0) {\n // 0 because no action is needed if it's already at the start\n regions.splice(localeRegionIndex, 1);\n regions.unshift(localeRegion);\n }\n }\n\n return [regions, regionData];\n }, [\n _regions,\n customMapping,\n locale,\n localeRegion,\n contextLocales,\n localeCustomMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n ]);\n\n return {\n region,\n regions,\n regionData,\n locale,\n localeRegion,\n };\n}\n"],"mappings":"0MA+BA,SAAgB,EAA0B,CACxC,QAAS,EACT,gBACA,gCAAgC,GAChC,4BAA4B,IACK,EAAE,CAAE,CAErC,IAAM,EAAiBA,EAAAA,YAAY,CAC7B,EAAsBC,EAAAA,kBAAkB,CACxC,EAASC,EAAAA,WAAW,CACpB,EAASC,EAAAA,WAAW,CACpB,CAAE,WAAY,IAAA,EAAA,EAAA,qBAClB,EACA,EACA,EACD,CAEK,CACJ,EACA,IAAA,EAAA,EAAA,aACqD,CACrD,IAAM,GAAA,EAAA,EAAA,gBAAoB,CAAC,WAAW,EAAO,CACvC,EAAoB,IAAI,IAC5B,EAAe,IAAK,GAAM,CACxB,IAAM,GAAA,EAAA,EAAA,qBAAyB,EAAG,EAAQ,EAAoB,CAC9D,MAAO,CAAC,EAAG,WAAY,EAAG,EAC1B,CACH,CAEK,EAAU,EACZ,CAAC,GAAG,EAAS,CACb,MAAM,KAAK,GAAmB,MAAM,EAAI,CAAC,EAAa,CAAC,CAErD,EAAa,IAAI,IACrB,EAAQ,IAAK,GACJ,CACL,EACA,CACE,OAAQ,GAAmB,IAAI,EAAE,EAAE,MAAQ,EAC3C,GAAG,EAAG,oBAAoB,EAAE,CAC5B,GAAI,OAAO,IAAgB,IAAO,SAC9B,CAAE,KAAM,IAAgB,GAAI,CAC5B,IAAgB,GACrB,CACF,CACD,CACH,CAWD,GATI,GACF,EAAQ,MAAM,EAAG,IACf,IAAI,KAAK,UAAU,CAAC,QAClB,EAAW,IAAI,EAAE,CAAE,KACnB,EAAW,IAAI,EAAE,CAAE,KACpB,CACF,CAGC,EAA+B,CACjC,IAAM,EAAoB,EAAQ,QAAQ,EAAa,CACnD,EAAoB,IAEtB,EAAQ,OAAO,EAAmB,EAAE,CACpC,EAAQ,QAAQ,EAAa,EAIjC,MAAO,CAAC,EAAS,EAAW,EAC3B,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACD,CAAC,CAEF,MAAO,CACL,SACA,UACA,aACA,SACA,eACD"}
1
+ {"version":3,"file":"useInternalRegionSelector.cjs","names":["useLocales","useCustomMapping","useLocale","useRegion"],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale, useRegion } from './condition-store';\nimport { getLocaleProperties } from '@generaltranslation/format';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nexport type RegionData = {\n code: string;\n name: string;\n emoji: string;\n locale: string;\n};\n\nexport type InternalRegionSelectorOptions = {\n regions?: string[];\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n};\n\nexport type InternalRegionSelectorResult = {\n region: string | undefined;\n regions: string[];\n regionData: Map<string, RegionData>;\n locale: string;\n localeRegion: string;\n};\n\n/**\n * Internal logic for region selection in applications supporting multiple regions.\n *\n * Returns the current region, an ordered list of available regions (inferred\n * from the supported locales when not provided), and a map of region codes to\n * their display data (name, emoji, associated locale).\n */\nexport function useInternalRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion = true,\n sortRegionsAlphabetically = true,\n}: InternalRegionSelectorOptions = {}): InternalRegionSelectorResult {\n // Retrieve the locale, locales, and region\n const contextLocales = useLocales();\n const localeCustomMapping = useCustomMapping();\n const locale = useLocale();\n const region = useRegion();\n const { regionCode: localeRegion } = getLocaleProperties(\n locale,\n locale,\n localeCustomMapping\n );\n\n const [\n regions, // ordered list of ISO 3166 region codes\n regionData, // map of ISO 3166 region codes to region display data, potentially not ordered\n ] = useMemo<[string[], Map<string, RegionData>]>(() => {\n const gt = getI18nConfig().getGTClass(locale);\n const regionToLocaleMap = new Map(\n contextLocales.map((l) => {\n const lp = getLocaleProperties(l, locale, localeCustomMapping); // has to be directly called so sourceLocale can be in the user's current locale\n return [lp.regionCode, lp];\n })\n );\n\n const regions = _regions\n ? [..._regions]\n : Array.from(regionToLocaleMap?.keys() || [localeRegion]);\n\n const regionData = new Map<string, RegionData>(\n regions.map((r: string) => {\n return [\n r,\n {\n locale: regionToLocaleMap?.get(r)?.code || locale,\n ...gt.getRegionProperties(r),\n ...(typeof customMapping?.[r] === 'string'\n ? { name: customMapping?.[r] }\n : customMapping?.[r]),\n },\n ];\n })\n );\n\n if (sortRegionsAlphabetically) {\n regions.sort((a, b) =>\n new Intl.Collator().compare(\n regionData.get(a)!.name,\n regionData.get(b)!.name\n )\n );\n }\n\n if (prioritizeCurrentLocaleRegion) {\n const localeRegionIndex = regions.indexOf(localeRegion);\n if (localeRegionIndex > 0) {\n // 0 because no action is needed if it's already at the start\n regions.splice(localeRegionIndex, 1);\n regions.unshift(localeRegion);\n }\n }\n\n return [regions, regionData];\n }, [\n _regions,\n customMapping,\n locale,\n localeRegion,\n contextLocales,\n localeCustomMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n ]);\n\n return {\n region,\n regions,\n regionData,\n locale,\n localeRegion,\n };\n}\n"],"mappings":"kNAuCA,SAAgB,EAA0B,CACxC,QAAS,EACT,gBACA,gCAAgC,GAChC,4BAA4B,IACK,EAAE,CAAgC,CAEnE,IAAM,EAAiBA,EAAAA,YAAY,CAC7B,EAAsBC,EAAAA,kBAAkB,CACxC,EAASC,EAAAA,WAAW,CACpB,EAASC,EAAAA,WAAW,CACpB,CAAE,WAAY,IAAA,EAAA,EAAA,qBAClB,EACA,EACA,EACD,CAEK,CACJ,EACA,IAAA,EAAA,EAAA,aACqD,CACrD,IAAM,GAAA,EAAA,EAAA,gBAAoB,CAAC,WAAW,EAAO,CACvC,EAAoB,IAAI,IAC5B,EAAe,IAAK,GAAM,CACxB,IAAM,GAAA,EAAA,EAAA,qBAAyB,EAAG,EAAQ,EAAoB,CAC9D,MAAO,CAAC,EAAG,WAAY,EAAG,EAC1B,CACH,CAEK,EAAU,EACZ,CAAC,GAAG,EAAS,CACb,MAAM,KAAK,GAAmB,MAAM,EAAI,CAAC,EAAa,CAAC,CAErD,EAAa,IAAI,IACrB,EAAQ,IAAK,GACJ,CACL,EACA,CACE,OAAQ,GAAmB,IAAI,EAAE,EAAE,MAAQ,EAC3C,GAAG,EAAG,oBAAoB,EAAE,CAC5B,GAAI,OAAO,IAAgB,IAAO,SAC9B,CAAE,KAAM,IAAgB,GAAI,CAC5B,IAAgB,GACrB,CACF,CACD,CACH,CAWD,GATI,GACF,EAAQ,MAAM,EAAG,IACf,IAAI,KAAK,UAAU,CAAC,QAClB,EAAW,IAAI,EAAE,CAAE,KACnB,EAAW,IAAI,EAAE,CAAE,KACpB,CACF,CAGC,EAA+B,CACjC,IAAM,EAAoB,EAAQ,QAAQ,EAAa,CACnD,EAAoB,IAEtB,EAAQ,OAAO,EAAmB,EAAE,CACpC,EAAQ,QAAQ,EAAa,EAIjC,MAAO,CAAC,EAAS,EAAW,EAC3B,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACD,CAAC,CAEF,MAAO,CACL,SACA,UACA,aACA,SACA,eACD"}
@@ -17,6 +17,13 @@ type InternalRegionSelectorOptions = {
17
17
  prioritizeCurrentLocaleRegion?: boolean;
18
18
  sortRegionsAlphabetically?: boolean;
19
19
  };
20
+ type InternalRegionSelectorResult = {
21
+ region: string | undefined;
22
+ regions: string[];
23
+ regionData: Map<string, RegionData>;
24
+ locale: string;
25
+ localeRegion: string;
26
+ };
20
27
  /**
21
28
  * Internal logic for region selection in applications supporting multiple regions.
22
29
  *
@@ -29,13 +36,7 @@ declare function useInternalRegionSelector({
29
36
  customMapping,
30
37
  prioritizeCurrentLocaleRegion,
31
38
  sortRegionsAlphabetically
32
- }?: InternalRegionSelectorOptions): {
33
- region: string | undefined;
34
- regions: string[];
35
- regionData: Map<string, RegionData>;
36
- locale: string;
37
- localeRegion: string;
38
- };
39
+ }?: InternalRegionSelectorOptions): InternalRegionSelectorResult;
39
40
  //#endregion
40
- export { InternalRegionSelectorOptions, RegionData, useInternalRegionSelector };
41
+ export { InternalRegionSelectorOptions, InternalRegionSelectorResult, RegionData, useInternalRegionSelector };
41
42
  //# sourceMappingURL=useInternalRegionSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalRegionSelector.d.ts","names":[],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"mappings":";KAMY,UAAA;EACV,IAAA;EACA,IAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,6BAAA;EACV,OAAA;EACA,aAAA;IAAA,CACG,MAAA;MAEK,IAAA;MAAe,KAAA;MAAgB,MAAA;IAAA;EAAA;EAEvC,6BAAA;EACA,yBAAA;AAAA;;;;;;;;iBAUc,yBAAA,CAAA;EACd,OAAA,EAAS,QAAA;EACT,aAAA;EACA,6BAAA;EACA;AAAA,IACC,6BAAA"}
1
+ {"version":3,"file":"useInternalRegionSelector.d.ts","names":[],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"mappings":";KAMY,UAAA;EACV,IAAA;EACA,IAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,6BAAA;EACV,OAAA;EACA,aAAA;IAAA,CACG,MAAA;MAEK,IAAA;MAAe,KAAA;MAAgB,MAAA;IAAA;EAAA;EAEvC,6BAAA;EACA,yBAAA;AAAA;AAAA,KAGU,4BAAA;EACV,MAAA;EACA,OAAA;EACA,UAAA,EAAY,GAAA,SAAY,UAAA;EACxB,MAAA;EACA,YAAA;AAAA;AALF;;;;;;;AAAA,iBAegB,yBAAA,CAAA;EACd,OAAA,EAAS,QAAA;EACT,aAAA;EACA,6BAAA;EACA;AAAA,IACC,6BAAA,GAAqC,4BAAA"}
@@ -1,2 +1,2 @@
1
- import{useLocale as e,useRegion as t}from"./condition-store.mjs";import{useCustomMapping as n,useLocales as r}from"./i18n-config.mjs";import{useMemo as i}from"react";import{getI18nConfig as a}from"gt-i18n/internal";import{getLocaleProperties as o}from"generaltranslation";function s({regions:s,customMapping:c,prioritizeCurrentLocaleRegion:l=!0,sortRegionsAlphabetically:u=!0}={}){let d=r(),f=n(),p=e(),m=t(),{regionCode:h}=o(p,p,f),[g,_]=i(()=>{let e=a().getGTClass(p),t=new Map(d.map(e=>{let t=o(e,p,f);return[t.regionCode,t]})),n=s?[...s]:Array.from(t?.keys()||[h]),r=new Map(n.map(n=>[n,{locale:t?.get(n)?.code||p,...e.getRegionProperties(n),...typeof c?.[n]==`string`?{name:c?.[n]}:c?.[n]}]));if(u&&n.sort((e,t)=>new Intl.Collator().compare(r.get(e).name,r.get(t).name)),l){let e=n.indexOf(h);e>0&&(n.splice(e,1),n.unshift(h))}return[n,r]},[s,c,p,h,d,f,l,u]);return{region:m,regions:g,regionData:_,locale:p,localeRegion:h}}export{s as useInternalRegionSelector};
1
+ import{useLocale as e,useRegion as t}from"./condition-store.mjs";import{useCustomMapping as n,useLocales as r}from"./i18n-config.mjs";import{getI18nConfig as i}from"gt-i18n/internal";import{useMemo as a}from"react";import{getLocaleProperties as o}from"@generaltranslation/format";function s({regions:s,customMapping:c,prioritizeCurrentLocaleRegion:l=!0,sortRegionsAlphabetically:u=!0}={}){let d=r(),f=n(),p=e(),m=t(),{regionCode:h}=o(p,p,f),[g,_]=a(()=>{let e=i().getGTClass(p),t=new Map(d.map(e=>{let t=o(e,p,f);return[t.regionCode,t]})),n=s?[...s]:Array.from(t?.keys()||[h]),r=new Map(n.map(n=>[n,{locale:t?.get(n)?.code||p,...e.getRegionProperties(n),...typeof c?.[n]==`string`?{name:c?.[n]}:c?.[n]}]));if(u&&n.sort((e,t)=>new Intl.Collator().compare(r.get(e).name,r.get(t).name)),l){let e=n.indexOf(h);e>0&&(n.splice(e,1),n.unshift(h))}return[n,r]},[s,c,p,h,d,f,l,u]);return{region:m,regions:g,regionData:_,locale:p,localeRegion:h}}export{s as useInternalRegionSelector};
2
2
  //# sourceMappingURL=useInternalRegionSelector.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalRegionSelector.mjs","names":[],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale, useRegion } from './condition-store';\nimport { getLocaleProperties } from 'generaltranslation';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nexport type RegionData = {\n code: string;\n name: string;\n emoji: string;\n locale: string;\n};\n\nexport type InternalRegionSelectorOptions = {\n regions?: string[];\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n};\n\n/**\n * Internal logic for region selection in applications supporting multiple regions.\n *\n * Returns the current region, an ordered list of available regions (inferred\n * from the supported locales when not provided), and a map of region codes to\n * their display data (name, emoji, associated locale).\n */\nexport function useInternalRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion = true,\n sortRegionsAlphabetically = true,\n}: InternalRegionSelectorOptions = {}) {\n // Retrieve the locale, locales, and region\n const contextLocales = useLocales();\n const localeCustomMapping = useCustomMapping();\n const locale = useLocale();\n const region = useRegion();\n const { regionCode: localeRegion } = getLocaleProperties(\n locale,\n locale,\n localeCustomMapping\n );\n\n const [\n regions, // ordered list of ISO 3166 region codes\n regionData, // map of ISO 3166 region codes to region display data, potentially not ordered\n ] = useMemo<[string[], Map<string, RegionData>]>(() => {\n const gt = getI18nConfig().getGTClass(locale);\n const regionToLocaleMap = new Map(\n contextLocales.map((l) => {\n const lp = getLocaleProperties(l, locale, localeCustomMapping); // has to be directly called so sourceLocale can be in the user's current locale\n return [lp.regionCode, lp];\n })\n );\n\n const regions = _regions\n ? [..._regions]\n : Array.from(regionToLocaleMap?.keys() || [localeRegion]);\n\n const regionData = new Map<string, RegionData>(\n regions.map((r: string) => {\n return [\n r,\n {\n locale: regionToLocaleMap?.get(r)?.code || locale,\n ...gt.getRegionProperties(r),\n ...(typeof customMapping?.[r] === 'string'\n ? { name: customMapping?.[r] }\n : customMapping?.[r]),\n },\n ];\n })\n );\n\n if (sortRegionsAlphabetically) {\n regions.sort((a, b) =>\n new Intl.Collator().compare(\n regionData.get(a)!.name,\n regionData.get(b)!.name\n )\n );\n }\n\n if (prioritizeCurrentLocaleRegion) {\n const localeRegionIndex = regions.indexOf(localeRegion);\n if (localeRegionIndex > 0) {\n // 0 because no action is needed if it's already at the start\n regions.splice(localeRegionIndex, 1);\n regions.unshift(localeRegion);\n }\n }\n\n return [regions, regionData];\n }, [\n _regions,\n customMapping,\n locale,\n localeRegion,\n contextLocales,\n localeCustomMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n ]);\n\n return {\n region,\n regions,\n regionData,\n locale,\n localeRegion,\n };\n}\n"],"mappings":"gRA+BA,SAAgB,EAA0B,CACxC,QAAS,EACT,gBACA,gCAAgC,GAChC,4BAA4B,IACK,EAAE,CAAE,CAErC,IAAM,EAAiB,GAAY,CAC7B,EAAsB,GAAkB,CACxC,EAAS,GAAW,CACpB,EAAS,GAAW,CACpB,CAAE,WAAY,GAAiB,EACnC,EACA,EACA,EACD,CAEK,CACJ,EACA,GACE,MAAmD,CACrD,IAAM,EAAK,GAAe,CAAC,WAAW,EAAO,CACvC,EAAoB,IAAI,IAC5B,EAAe,IAAK,GAAM,CACxB,IAAM,EAAK,EAAoB,EAAG,EAAQ,EAAoB,CAC9D,MAAO,CAAC,EAAG,WAAY,EAAG,EAC1B,CACH,CAEK,EAAU,EACZ,CAAC,GAAG,EAAS,CACb,MAAM,KAAK,GAAmB,MAAM,EAAI,CAAC,EAAa,CAAC,CAErD,EAAa,IAAI,IACrB,EAAQ,IAAK,GACJ,CACL,EACA,CACE,OAAQ,GAAmB,IAAI,EAAE,EAAE,MAAQ,EAC3C,GAAG,EAAG,oBAAoB,EAAE,CAC5B,GAAI,OAAO,IAAgB,IAAO,SAC9B,CAAE,KAAM,IAAgB,GAAI,CAC5B,IAAgB,GACrB,CACF,CACD,CACH,CAWD,GATI,GACF,EAAQ,MAAM,EAAG,IACf,IAAI,KAAK,UAAU,CAAC,QAClB,EAAW,IAAI,EAAE,CAAE,KACnB,EAAW,IAAI,EAAE,CAAE,KACpB,CACF,CAGC,EAA+B,CACjC,IAAM,EAAoB,EAAQ,QAAQ,EAAa,CACnD,EAAoB,IAEtB,EAAQ,OAAO,EAAmB,EAAE,CACpC,EAAQ,QAAQ,EAAa,EAIjC,MAAO,CAAC,EAAS,EAAW,EAC3B,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACD,CAAC,CAEF,MAAO,CACL,SACA,UACA,aACA,SACA,eACD"}
1
+ {"version":3,"file":"useInternalRegionSelector.mjs","names":[],"sources":["../../src/hooks/useInternalRegionSelector.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useCustomMapping, useLocales } from './i18n-config';\nimport { useLocale, useRegion } from './condition-store';\nimport { getLocaleProperties } from '@generaltranslation/format';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nexport type RegionData = {\n code: string;\n name: string;\n emoji: string;\n locale: string;\n};\n\nexport type InternalRegionSelectorOptions = {\n regions?: string[];\n customMapping?: {\n [region: string]:\n | string\n | { name?: string; emoji?: string; locale?: string };\n };\n prioritizeCurrentLocaleRegion?: boolean;\n sortRegionsAlphabetically?: boolean;\n};\n\nexport type InternalRegionSelectorResult = {\n region: string | undefined;\n regions: string[];\n regionData: Map<string, RegionData>;\n locale: string;\n localeRegion: string;\n};\n\n/**\n * Internal logic for region selection in applications supporting multiple regions.\n *\n * Returns the current region, an ordered list of available regions (inferred\n * from the supported locales when not provided), and a map of region codes to\n * their display data (name, emoji, associated locale).\n */\nexport function useInternalRegionSelector({\n regions: _regions,\n customMapping,\n prioritizeCurrentLocaleRegion = true,\n sortRegionsAlphabetically = true,\n}: InternalRegionSelectorOptions = {}): InternalRegionSelectorResult {\n // Retrieve the locale, locales, and region\n const contextLocales = useLocales();\n const localeCustomMapping = useCustomMapping();\n const locale = useLocale();\n const region = useRegion();\n const { regionCode: localeRegion } = getLocaleProperties(\n locale,\n locale,\n localeCustomMapping\n );\n\n const [\n regions, // ordered list of ISO 3166 region codes\n regionData, // map of ISO 3166 region codes to region display data, potentially not ordered\n ] = useMemo<[string[], Map<string, RegionData>]>(() => {\n const gt = getI18nConfig().getGTClass(locale);\n const regionToLocaleMap = new Map(\n contextLocales.map((l) => {\n const lp = getLocaleProperties(l, locale, localeCustomMapping); // has to be directly called so sourceLocale can be in the user's current locale\n return [lp.regionCode, lp];\n })\n );\n\n const regions = _regions\n ? [..._regions]\n : Array.from(regionToLocaleMap?.keys() || [localeRegion]);\n\n const regionData = new Map<string, RegionData>(\n regions.map((r: string) => {\n return [\n r,\n {\n locale: regionToLocaleMap?.get(r)?.code || locale,\n ...gt.getRegionProperties(r),\n ...(typeof customMapping?.[r] === 'string'\n ? { name: customMapping?.[r] }\n : customMapping?.[r]),\n },\n ];\n })\n );\n\n if (sortRegionsAlphabetically) {\n regions.sort((a, b) =>\n new Intl.Collator().compare(\n regionData.get(a)!.name,\n regionData.get(b)!.name\n )\n );\n }\n\n if (prioritizeCurrentLocaleRegion) {\n const localeRegionIndex = regions.indexOf(localeRegion);\n if (localeRegionIndex > 0) {\n // 0 because no action is needed if it's already at the start\n regions.splice(localeRegionIndex, 1);\n regions.unshift(localeRegion);\n }\n }\n\n return [regions, regionData];\n }, [\n _regions,\n customMapping,\n locale,\n localeRegion,\n contextLocales,\n localeCustomMapping,\n prioritizeCurrentLocaleRegion,\n sortRegionsAlphabetically,\n ]);\n\n return {\n region,\n regions,\n regionData,\n locale,\n localeRegion,\n };\n}\n"],"mappings":"wRAuCA,SAAgB,EAA0B,CACxC,QAAS,EACT,gBACA,gCAAgC,GAChC,4BAA4B,IACK,EAAE,CAAgC,CAEnE,IAAM,EAAiB,GAAY,CAC7B,EAAsB,GAAkB,CACxC,EAAS,GAAW,CACpB,EAAS,GAAW,CACpB,CAAE,WAAY,GAAiB,EACnC,EACA,EACA,EACD,CAEK,CACJ,EACA,GACE,MAAmD,CACrD,IAAM,EAAK,GAAe,CAAC,WAAW,EAAO,CACvC,EAAoB,IAAI,IAC5B,EAAe,IAAK,GAAM,CACxB,IAAM,EAAK,EAAoB,EAAG,EAAQ,EAAoB,CAC9D,MAAO,CAAC,EAAG,WAAY,EAAG,EAC1B,CACH,CAEK,EAAU,EACZ,CAAC,GAAG,EAAS,CACb,MAAM,KAAK,GAAmB,MAAM,EAAI,CAAC,EAAa,CAAC,CAErD,EAAa,IAAI,IACrB,EAAQ,IAAK,GACJ,CACL,EACA,CACE,OAAQ,GAAmB,IAAI,EAAE,EAAE,MAAQ,EAC3C,GAAG,EAAG,oBAAoB,EAAE,CAC5B,GAAI,OAAO,IAAgB,IAAO,SAC9B,CAAE,KAAM,IAAgB,GAAI,CAC5B,IAAgB,GACrB,CACF,CACD,CACH,CAWD,GATI,GACF,EAAQ,MAAM,EAAG,IACf,IAAI,KAAK,UAAU,CAAC,QAClB,EAAW,IAAI,EAAE,CAAE,KACnB,EAAW,IAAI,EAAE,CAAE,KACpB,CACF,CAGC,EAA+B,CACjC,IAAM,EAAoB,EAAQ,QAAQ,EAAa,CACnD,EAAoB,IAEtB,EAAQ,OAAO,EAAmB,EAAE,CACpC,EAAQ,QAAQ,EAAa,EAIjC,MAAO,CAAC,EAAS,EAAW,EAC3B,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACD,CAAC,CAEF,MAAO,CACL,SACA,UACA,aACA,SACA,eACD"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./useGT.cjs`);let t=require(`gt-i18n`),n=require(`react`),r=require(`gt-i18n/internal`);function i(i){let a=e.useGT(i);return(0,n.useCallback)((e,n={})=>{if(e==null)return e;let i=(0,t.decodeOptions)(e)??{};return(0,r.isEncodedTranslationOptions)(i)?a(i.$_source,i):a(e,n)},[a])}exports.useMessages=i;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./useGT.cjs`);let t=require(`gt-i18n`),n=require(`gt-i18n/internal`),r=require(`react`);function i(i){let a=e.useGT(i);return(0,r.useCallback)((e,r={})=>{if(e==null)return e;let i=(0,t.decodeOptions)(e)??{};return(0,n.isEncodedTranslationOptions)(i)?a(i.$_source,i):a(e,r)},[a])}exports.useMessages=i;
2
2
  //# sourceMappingURL=useMessages.cjs.map
@@ -1,2 +1,2 @@
1
- import{useGT as e}from"./useGT.mjs";import{decodeOptions as t}from"gt-i18n";import{useCallback as n}from"react";import{isEncodedTranslationOptions as r}from"gt-i18n/internal";function i(i){let a=e(i);return n((e,n={})=>{if(e==null)return e;let i=t(e)??{};return r(i)?a(i.$_source,i):a(e,n)},[a])}export{i as useMessages};
1
+ import{useGT as e}from"./useGT.mjs";import{decodeOptions as t}from"gt-i18n";import{isEncodedTranslationOptions as n}from"gt-i18n/internal";import{useCallback as r}from"react";function i(i){let a=e(i);return r((e,r={})=>{if(e==null)return e;let i=t(e)??{};return n(i)?a(i.$_source,i):a(e,r)},[a])}export{i as useMessages};
2
2
  //# sourceMappingURL=useMessages.mjs.map
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`),n=require(`./utils.cjs`),r=require(`./useGT.cjs`),i=require(`./external-store/useTrackedDictionaryResolver.cjs`),a=require(`./external-store/useTrackedDictionaryObjResolver.cjs`);let o=require(`react`),s=require(`gt-i18n/internal`);function c(a){let c=e.useLocale(),d=t.useDefaultLocale(),f=n.useShouldTranslate(),p=r.useGT(),m=i.useTrackedDictionaryResolver(),h=l(a),g=(0,o.useCallback)((e,t={})=>{let n=u(a,e),r=m({locale:d,id:n});if(r===void 0)throw Error(`Dictionary entry ${n} cannot be found`);let i=(0,s.resolveDictionaryLookupOptions)(r.options);if(!f)return p(r.entry,{...i,...(0,s.extractVariables)(t),$locale:d});let o=m({locale:c,id:n});return o?.entry==null?p(r.entry,{...i,...(0,s.extractVariables)(t),$locale:c}):(0,s.renderDictionaryEntry)({sourceLocale:d,targetLocale:c,sourceEntry:r,target:o.entry,dictionaryOptions:i,options:t})},[d,p,a,c,m,f]);return(0,o.useMemo)(()=>Object.assign(g,{obj:h}),[g,h])}function l(i){let c=e.useLocale(),l=t.useDefaultLocale(),d=n.useShouldTranslate(),f=r.useGT(),p=a.useTrackedDictionaryObjResolver();return(0,o.useCallback)(e=>{let t=u(i,e),n=p({locale:l,id:t});if(n===void 0)throw Error(`Dictionary entry ${t} cannot be found`);let r;return d&&(r=p({locale:c,id:t})),(0,s.renderDictionaryObject)({sourceObject:n,targetObject:r,translate:(e,t)=>f(e.entry,{...t,$locale:d?c:l})})},[l,i,c,p,d,f])}function u(e,t){return e?`${e}.${t}`:t}exports.useTranslations=c;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./condition-store.cjs`),t=require(`./i18n-config.cjs`),n=require(`./utils.cjs`),r=require(`./useGT.cjs`),i=require(`./external-store/useTrackedDictionaryResolver.cjs`),a=require(`./external-store/useTrackedDictionaryObjResolver.cjs`);let o=require(`gt-i18n/internal`),s=require(`react`);function c(a){let c=e.useLocale(),d=t.useDefaultLocale(),f=n.useShouldTranslate(),p=r.useGT(),m=i.useTrackedDictionaryResolver(),h=l(a),g=(0,s.useCallback)((e,t={})=>{let n=u(a,e),r=m({locale:d,id:n});if(r===void 0)throw Error(`Dictionary entry ${n} cannot be found`);let i=(0,o.resolveDictionaryLookupOptions)(r.options);if(!f)return p(r.entry,{...i,...(0,o.extractVariables)(t),$locale:d});let s=m({locale:c,id:n});return s?.entry==null?p(r.entry,{...i,...(0,o.extractVariables)(t),$locale:c}):(0,o.renderDictionaryEntry)({sourceLocale:d,targetLocale:c,sourceEntry:r,target:s.entry,dictionaryOptions:i,options:t})},[d,p,a,c,m,f]);return(0,s.useMemo)(()=>Object.assign(g,{obj:h}),[g,h])}function l(i){let c=e.useLocale(),l=t.useDefaultLocale(),d=n.useShouldTranslate(),f=r.useGT(),p=a.useTrackedDictionaryObjResolver();return(0,s.useCallback)(e=>{let t=u(i,e),n=p({locale:l,id:t});if(n===void 0)throw Error(`Dictionary entry ${t} cannot be found`);let r;return d&&(r=p({locale:c,id:t})),(0,o.renderDictionaryObject)({sourceObject:n,targetObject:r,translate:(e,t)=>f(e.entry,{...t,$locale:d?c:l})})},[l,i,c,p,d,f])}function u(e,t){return e?`${e}.${t}`:t}exports.useTranslations=c;
2
2
  //# sourceMappingURL=useTranslations.cjs.map
@@ -1,2 +1,2 @@
1
- import{useLocale as e}from"./condition-store.mjs";import{useDefaultLocale as t}from"./i18n-config.mjs";import{useShouldTranslate as n}from"./utils.mjs";import{useGT as r}from"./useGT.mjs";import{useTrackedDictionaryResolver as i}from"./external-store/useTrackedDictionaryResolver.mjs";import{useTrackedDictionaryObjResolver as a}from"./external-store/useTrackedDictionaryObjResolver.mjs";import{useCallback as o,useMemo as s}from"react";import{extractVariables as c,renderDictionaryEntry as l,renderDictionaryObject as u,resolveDictionaryLookupOptions as d}from"gt-i18n/internal";function f(a){let u=e(),f=t(),h=n(),g=r(),_=i(),v=p(a),y=o((e,t={})=>{let n=m(a,e),r=_({locale:f,id:n});if(r===void 0)throw Error(`Dictionary entry ${n} cannot be found`);let i=d(r.options);if(!h)return g(r.entry,{...i,...c(t),$locale:f});let o=_({locale:u,id:n});return o?.entry==null?g(r.entry,{...i,...c(t),$locale:u}):l({sourceLocale:f,targetLocale:u,sourceEntry:r,target:o.entry,dictionaryOptions:i,options:t})},[f,g,a,u,_,h]);return s(()=>Object.assign(y,{obj:v}),[y,v])}function p(i){let s=e(),c=t(),l=n(),d=r(),f=a();return o(e=>{let t=m(i,e),n=f({locale:c,id:t});if(n===void 0)throw Error(`Dictionary entry ${t} cannot be found`);let r;return l&&(r=f({locale:s,id:t})),u({sourceObject:n,targetObject:r,translate:(e,t)=>d(e.entry,{...t,$locale:l?s:c})})},[c,i,s,f,l,d])}function m(e,t){return e?`${e}.${t}`:t}export{f as useTranslations};
1
+ import{useLocale as e}from"./condition-store.mjs";import{useDefaultLocale as t}from"./i18n-config.mjs";import{useShouldTranslate as n}from"./utils.mjs";import{useGT as r}from"./useGT.mjs";import{useTrackedDictionaryResolver as i}from"./external-store/useTrackedDictionaryResolver.mjs";import{useTrackedDictionaryObjResolver as a}from"./external-store/useTrackedDictionaryObjResolver.mjs";import{extractVariables as o,renderDictionaryEntry as s,renderDictionaryObject as c,resolveDictionaryLookupOptions as l}from"gt-i18n/internal";import{useCallback as u,useMemo as d}from"react";function f(a){let c=e(),f=t(),h=n(),g=r(),_=i(),v=p(a),y=u((e,t={})=>{let n=m(a,e),r=_({locale:f,id:n});if(r===void 0)throw Error(`Dictionary entry ${n} cannot be found`);let i=l(r.options);if(!h)return g(r.entry,{...i,...o(t),$locale:f});let u=_({locale:c,id:n});return u?.entry==null?g(r.entry,{...i,...o(t),$locale:c}):s({sourceLocale:f,targetLocale:c,sourceEntry:r,target:u.entry,dictionaryOptions:i,options:t})},[f,g,a,c,_,h]);return d(()=>Object.assign(y,{obj:v}),[y,v])}function p(i){let o=e(),s=t(),l=n(),d=r(),f=a();return u(e=>{let t=m(i,e),n=f({locale:s,id:t});if(n===void 0)throw Error(`Dictionary entry ${t} cannot be found`);let r;return l&&(r=f({locale:o,id:t})),c({sourceObject:n,targetObject:r,translate:(e,t)=>d(e.entry,{...t,$locale:l?o:s})})},[s,i,o,f,l,d])}function m(e,t){return e?`${e}.${t}`:t}export{f as useTranslations};
2
2
  //# sourceMappingURL=useTranslations.mjs.map
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../condition-store/singleton-operations.cjs`);let t=require(`gt-i18n/internal`);function n(){let n=e.getReadonlyConditionStoreWithFallback(),r=(0,t.getI18nConfig)(),i=n.getEnableI18n(),a=n.getLocale();return i&&r.requiresTranslation(a)}exports.getShouldTranslate=n;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../condition-store/singleton-operations.cjs`);let t=require(`gt-i18n/internal`);function n(){let n=e.getConditionStore(),r=(0,t.getI18nConfig)(),i=n.getEnableI18n(),a=n.getLocale();return i&&r.requiresTranslation(a)}exports.getShouldTranslate=n;
2
2
  //# sourceMappingURL=getShouldTranslate.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"getShouldTranslate.cjs","names":["getReadonlyConditionStoreWithFallback"],"sources":["../../../src/hooks/utils/getShouldTranslate.ts"],"sourcesContent":["import { getReadonlyConditionStoreWithFallback } from '../../condition-store/singleton-operations';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\n// Pure helper shared by hook-based and RSC code paths. This module must stay\n// free of hook/context imports so it can be reached from the components-rsc\n// entrypoint.\n\n/**\n * Returns true if (1) i18n enabled and (2) translation is required\n */\nexport function getShouldTranslate(): boolean {\n const conditionStore = getReadonlyConditionStoreWithFallback();\n const i18nConfig = getI18nConfig();\n\n const enableI18n = conditionStore.getEnableI18n();\n const locale = conditionStore.getLocale();\n return enableI18n && i18nConfig.requiresTranslation(locale);\n}\n"],"mappings":"oJAUA,SAAgB,GAA8B,CAC5C,IAAM,EAAiBA,EAAAA,uCAAuC,CACxD,GAAA,EAAA,EAAA,gBAA4B,CAE5B,EAAa,EAAe,eAAe,CAC3C,EAAS,EAAe,WAAW,CACzC,OAAO,GAAc,EAAW,oBAAoB,EAAO"}
1
+ {"version":3,"file":"getShouldTranslate.cjs","names":["getReadonlyConditionStore"],"sources":["../../../src/hooks/utils/getShouldTranslate.ts"],"sourcesContent":["import { getReadonlyConditionStore } from '../../condition-store/singleton-operations';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\n// Pure helper shared by hook-based and RSC code paths. This module must stay\n// free of hook/context imports so it can be reached from the components-rsc\n// entrypoint.\n\n/**\n * Returns true if (1) i18n enabled and (2) translation is required\n */\nexport function getShouldTranslate(): boolean {\n const conditionStore = getReadonlyConditionStore();\n const i18nConfig = getI18nConfig();\n\n const enableI18n = conditionStore.getEnableI18n();\n const locale = conditionStore.getLocale();\n return enableI18n && i18nConfig.requiresTranslation(locale);\n}\n"],"mappings":"oJAUA,SAAgB,GAA8B,CAC5C,IAAM,EAAiBA,EAAAA,mBAA2B,CAC5C,GAAA,EAAA,EAAA,gBAA4B,CAE5B,EAAa,EAAe,eAAe,CAC3C,EAAS,EAAe,WAAW,CACzC,OAAO,GAAc,EAAW,oBAAoB,EAAO"}
@@ -1,2 +1,2 @@
1
- import{getReadonlyConditionStoreWithFallback as e}from"../../condition-store/singleton-operations.mjs";import{getI18nConfig as t}from"gt-i18n/internal";function n(){let n=e(),r=t(),i=n.getEnableI18n(),a=n.getLocale();return i&&r.requiresTranslation(a)}export{n as getShouldTranslate};
1
+ import{getConditionStore as e}from"../../condition-store/singleton-operations.mjs";import{getI18nConfig as t}from"gt-i18n/internal";function n(){let n=e(),r=t(),i=n.getEnableI18n(),a=n.getLocale();return i&&r.requiresTranslation(a)}export{n as getShouldTranslate};
2
2
  //# sourceMappingURL=getShouldTranslate.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"getShouldTranslate.mjs","names":[],"sources":["../../../src/hooks/utils/getShouldTranslate.ts"],"sourcesContent":["import { getReadonlyConditionStoreWithFallback } from '../../condition-store/singleton-operations';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\n// Pure helper shared by hook-based and RSC code paths. This module must stay\n// free of hook/context imports so it can be reached from the components-rsc\n// entrypoint.\n\n/**\n * Returns true if (1) i18n enabled and (2) translation is required\n */\nexport function getShouldTranslate(): boolean {\n const conditionStore = getReadonlyConditionStoreWithFallback();\n const i18nConfig = getI18nConfig();\n\n const enableI18n = conditionStore.getEnableI18n();\n const locale = conditionStore.getLocale();\n return enableI18n && i18nConfig.requiresTranslation(locale);\n}\n"],"mappings":"wJAUA,SAAgB,GAA8B,CAC5C,IAAM,EAAiB,GAAuC,CACxD,EAAa,GAAe,CAE5B,EAAa,EAAe,eAAe,CAC3C,EAAS,EAAe,WAAW,CACzC,OAAO,GAAc,EAAW,oBAAoB,EAAO"}
1
+ {"version":3,"file":"getShouldTranslate.mjs","names":["getReadonlyConditionStore"],"sources":["../../../src/hooks/utils/getShouldTranslate.ts"],"sourcesContent":["import { getReadonlyConditionStore } from '../../condition-store/singleton-operations';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\n// Pure helper shared by hook-based and RSC code paths. This module must stay\n// free of hook/context imports so it can be reached from the components-rsc\n// entrypoint.\n\n/**\n * Returns true if (1) i18n enabled and (2) translation is required\n */\nexport function getShouldTranslate(): boolean {\n const conditionStore = getReadonlyConditionStore();\n const i18nConfig = getI18nConfig();\n\n const enableI18n = conditionStore.getEnableI18n();\n const locale = conditionStore.getLocale();\n return enableI18n && i18nConfig.requiresTranslation(locale);\n}\n"],"mappings":"oIAUA,SAAgB,GAA8B,CAC5C,IAAM,EAAiBA,GAA2B,CAC5C,EAAa,GAAe,CAE5B,EAAa,EAAe,eAAe,CAC3C,EAAS,EAAe,WAAW,CACzC,OAAO,GAAc,EAAW,oBAAoB,EAAO"}
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../context/context.cjs`),t=require(`../utils.cjs`),n=require(`../../i18n-store/useI18nStore.cjs`);let r=require(`react`),i=require(`gt-i18n/internal`);function a(){let t=e.useGTContext()?.onMissingTranslation,n=c();return(0,r.useCallback)(e=>{t?t(e):n((0,i.getTranslateListenerKey)(e),{type:`translation`,lookup:e})},[t,n])}function o(){let t=e.useGTContext()?.onMissingDictionaryEntry,n=c();return(0,r.useCallback)(e=>{t?t(e):n((0,i.getDictionaryListenerKey)(e),{type:`dictionaryEntry`,lookup:e})},[t,n])}function s(){let t=e.useGTContext()?.onMissingDictionaryObj,n=c();return(0,r.useCallback)(e=>{t?t(e):n((0,i.getDictionaryListenerKey)(e),{type:`dictionaryObject`,lookup:e})},[t,n])}function c(){let e=(0,i.getI18nConfig)().isDevHotReloadEnabled(),a=t.useShouldTranslate(),o=n.useI18nStore(),s=new Map;return(0,r.useEffect)(()=>{!e||!a||s.size===0||s.forEach(({type:e,lookup:t})=>{switch(e){case`translation`:o.translate(t);break;case`dictionaryEntry`:o.translateDictionaryEntry(t);break;case`dictionaryObject`:o.translateDictionaryObject(t);break}})},[e,a,o,s]),(e,t)=>{s.set(e,t)}}exports.useHandleMissingDictionaryEntry=o,exports.useHandleMissingDictionaryObject=s,exports.useHandleMissingTranslation=a;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../context/context.cjs`),t=require(`../utils.cjs`),n=require(`../../i18n-store/useI18nStore.cjs`);let r=require(`gt-i18n/internal`),i=require(`react`);const a=()=>{},o=()=>{},s=()=>{};function c(){return a}function l(){let t=e.useGTContext()?.onMissingTranslation,n=_();return(0,i.useCallback)(e=>{t?t(e):n((0,r.getTranslateListenerKey)(e),{type:`translation`,lookup:e})},[t,n])}function u(){return o}function d(){let t=e.useGTContext()?.onMissingDictionaryEntry,n=_();return(0,i.useCallback)(e=>{t?t(e):n((0,r.getDictionaryListenerKey)(e),{type:`dictionaryEntry`,lookup:e})},[t,n])}function f(){return s}function p(){let t=e.useGTContext()?.onMissingDictionaryObj,n=_();return(0,i.useCallback)(e=>{t?t(e):n((0,r.getDictionaryListenerKey)(e),{type:`dictionaryObject`,lookup:e})},[t,n])}const m=process.env.NODE_ENV===`production`?c:l,h=process.env.NODE_ENV===`production`?u:d,g=process.env.NODE_ENV===`production`?f:p;function _(){let e=process.env.NODE_ENV!==`production`&&(0,r.getI18nConfig)().isDevHotReloadEnabled(),a=t.useShouldTranslate(),o=n.useI18nStore(),s=new Map;return(0,i.useEffect)(()=>{!e||!a||s.size===0||s.forEach(({type:e,lookup:t})=>{switch(e){case`translation`:o.translate(t);break;case`dictionaryEntry`:o.translateDictionaryEntry(t);break;case`dictionaryObject`:o.translateDictionaryObject(t);break}})},[e,a,o,s]),(e,t)=>{s.set(e,t)}}exports.useHandleMissingDictionaryEntry=h,exports.useHandleMissingDictionaryObject=g,exports.useHandleMissingTranslation=m;
2
2
  //# sourceMappingURL=missing-translation.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"missing-translation.cjs","names":["useGTContext","useShouldTranslate","useI18nStore"],"sources":["../../../src/hooks/utils/missing-translation.ts"],"sourcesContent":["import {\n getDictionaryListenerKey,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport { useShouldTranslate } from '../utils';\nimport { useI18nStore } from '../../i18n-store/useI18nStore';\nimport { DictionaryLookup, TranslateLookup } from '../../i18n-store/storeTypes';\nimport { useCallback, useEffect } from 'react';\nimport { Translation } from 'gt-i18n/types';\nimport { useGTContext } from '../../context/context';\n\nexport type OnMissingTranslation = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => void;\nexport type OnMissingDictionaryEntry = (lookup: DictionaryLookup) => void;\n// TODO: rename to OnMissingDictionaryObject\nexport type OnMissingDictionaryObj = (lookup: DictionaryLookup) => void;\n\ntype PendingLookup =\n | {\n type: 'translation';\n lookup: TranslateLookup;\n }\n | {\n type: 'dictionaryEntry' | 'dictionaryObject';\n lookup: DictionaryLookup;\n };\n\n/**\n * Why have custom handleMissing functions?\n *\n * Some runtimes (like server) cannot make useEffect calls, so\n * we need to give them access to a callback where they can embed\n * their own translation calls\n *\n * While this is technnically not pure behavior, this is acceptable\n * in development hot reload\n */\n\n// TODO: reduce code duplication with the three below functions\nexport function useHandleMissingTranslation(): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: TranslateLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getTranslateListenerKey(lookup), {\n type: 'translation',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport function useHandleMissingDictionaryEntry(): OnMissingDictionaryEntry {\n const customHandleMissing = useGTContext()?.onMissingDictionaryEntry;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryEntry',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport function useHandleMissingDictionaryObject(): OnMissingDictionaryObj {\n const customHandleMissing = useGTContext()?.onMissingDictionaryObj;\n const pureHandleMissing = useDevHotReloadQueue();\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryObject',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\n/**\n * HMR translation needs to be deferred to post-commit phase\n */\nfunction useDevHotReloadQueue() {\n const devHotReloadEnabled = getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const i18nStore = useI18nStore();\n\n // No memoization bc we want to flush after every render\n // TODO: perhaps should find a way to memoize and flush in a better way than this as it nullifies any useCallback\n const pendingLookups = new Map<string, PendingLookup>();\n\n // Pure react: effects run after render\n useEffect(() => {\n if (!devHotReloadEnabled || !shouldTranslate || pendingLookups.size === 0) {\n return;\n }\n\n pendingLookups.forEach(({ type, lookup }) => {\n switch (type) {\n case 'translation':\n i18nStore.translate(lookup);\n break;\n case 'dictionaryEntry':\n i18nStore.translateDictionaryEntry(lookup);\n break;\n case 'dictionaryObject':\n i18nStore.translateDictionaryObject(lookup);\n break;\n }\n });\n }, [devHotReloadEnabled, shouldTranslate, i18nStore, pendingLookups]);\n\n // No need for useCallback b/c we want access to the pendingLookups map\n return (key: string, pendingLookup: PendingLookup) => {\n pendingLookups.set(key, pendingLookup);\n };\n}\n"],"mappings":"2NAyCA,SAAgB,GAAoD,CAClE,IAAM,EAAsBA,EAAAA,cAAc,EAAE,qBACtC,EAAoB,GAAsB,CAEhD,OAAA,EAAA,EAAA,aACG,GAA4B,CACvB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,yBAA0C,EAAO,CAAE,CACjD,KAAM,cACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAgB,GAA4D,CAC1E,IAAM,EAAsBA,EAAAA,cAAc,EAAE,yBACtC,EAAoB,GAAsB,CAEhD,OAAA,EAAA,EAAA,aACG,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,0BAA2C,EAAO,CAAE,CAClD,KAAM,kBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAgB,GAA2D,CACzE,IAAM,EAAsBA,EAAAA,cAAc,EAAE,uBACtC,EAAoB,GAAsB,CAChD,OAAA,EAAA,EAAA,aACG,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,0BAA2C,EAAO,CAAE,CAClD,KAAM,mBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAMH,SAAS,GAAuB,CAC9B,IAAM,GAAA,EAAA,EAAA,gBAAqC,CAAC,uBAAuB,CAC7D,EAAkBC,EAAAA,oBAAoB,CACtC,EAAYC,EAAAA,cAAc,CAI1B,EAAiB,IAAI,IAwB3B,OArBA,EAAA,EAAA,eAAgB,CACV,CAAC,GAAuB,CAAC,GAAmB,EAAe,OAAS,GAIxE,EAAe,SAAS,CAAE,OAAM,YAAa,CAC3C,OAAQ,EAAR,CACE,IAAK,cACH,EAAU,UAAU,EAAO,CAC3B,MACF,IAAK,kBACH,EAAU,yBAAyB,EAAO,CAC1C,MACF,IAAK,mBACH,EAAU,0BAA0B,EAAO,CAC3C,QAEJ,EACD,CAAC,EAAqB,EAAiB,EAAW,EAAe,CAAC,EAG7D,EAAa,IAAiC,CACpD,EAAe,IAAI,EAAK,EAAc"}
1
+ {"version":3,"file":"missing-translation.cjs","names":["useGTContext","useShouldTranslate","useI18nStore"],"sources":["../../../src/hooks/utils/missing-translation.ts"],"sourcesContent":["import {\n getDictionaryListenerKey,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport { useShouldTranslate } from '../utils';\nimport { useI18nStore } from '../../i18n-store/useI18nStore';\nimport { DictionaryLookup, TranslateLookup } from '../../i18n-store/storeTypes';\nimport { useCallback, useEffect } from 'react';\nimport { Translation } from 'gt-i18n/types';\nimport { useGTContext } from '../../context/context';\n\nexport type OnMissingTranslation = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => void;\nexport type OnMissingDictionaryEntry = (lookup: DictionaryLookup) => void;\n// TODO: rename to OnMissingDictionaryObject\nexport type OnMissingDictionaryObj = (lookup: DictionaryLookup) => void;\n\ntype PendingLookup =\n | {\n type: 'translation';\n lookup: TranslateLookup;\n }\n | {\n type: 'dictionaryEntry' | 'dictionaryObject';\n lookup: DictionaryLookup;\n };\n\n/**\n * Why have custom handleMissing functions?\n *\n * Some runtimes (like server) cannot make useEffect calls, so\n * we need to give them access to a callback where they can embed\n * their own translation calls\n *\n * While this is technnically not pure behavior, this is acceptable\n * in development hot reload\n */\n\nconst noopOnMissingTranslation: OnMissingTranslation = () => {};\nconst noopOnMissingDictionaryEntry: OnMissingDictionaryEntry = () => {};\nconst noopOnMissingDictionaryObj: OnMissingDictionaryObj = () => {};\n\n// TODO: reduce code duplication with the three below functions\nfunction useHandleMissingTranslationProd(): OnMissingTranslation {\n return noopOnMissingTranslation;\n}\n\nfunction useHandleMissingTranslationDev(): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: TranslateLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getTranslateListenerKey(lookup), {\n type: 'translation',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nfunction useHandleMissingDictionaryEntryProd(): OnMissingDictionaryEntry {\n return noopOnMissingDictionaryEntry;\n}\n\nfunction useHandleMissingDictionaryEntryDev(): OnMissingDictionaryEntry {\n const customHandleMissing = useGTContext()?.onMissingDictionaryEntry;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryEntry',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nfunction useHandleMissingDictionaryObjectProd(): OnMissingDictionaryObj {\n return noopOnMissingDictionaryObj;\n}\n\nfunction useHandleMissingDictionaryObjectDev(): OnMissingDictionaryObj {\n const customHandleMissing = useGTContext()?.onMissingDictionaryObj;\n const pureHandleMissing = useDevHotReloadQueue();\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryObject',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport const useHandleMissingTranslation: () => OnMissingTranslation =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingTranslationProd\n : useHandleMissingTranslationDev;\n\nexport const useHandleMissingDictionaryEntry: () => OnMissingDictionaryEntry =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingDictionaryEntryProd\n : useHandleMissingDictionaryEntryDev;\n\nexport const useHandleMissingDictionaryObject: () => OnMissingDictionaryObj =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingDictionaryObjectProd\n : useHandleMissingDictionaryObjectDev;\n\n/**\n * HMR translation needs to be deferred to post-commit phase\n */\nfunction useDevHotReloadQueue() {\n // Statically gated so bundlers can drop dev hot-reload work from\n // production builds.\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const i18nStore = useI18nStore();\n\n // No memoization bc we want to flush after every render\n // TODO: perhaps should find a way to memoize and flush in a better way than this as it nullifies any useCallback\n const pendingLookups = new Map<string, PendingLookup>();\n\n // Pure react: effects run after render\n useEffect(() => {\n if (!devHotReloadEnabled || !shouldTranslate || pendingLookups.size === 0) {\n return;\n }\n\n pendingLookups.forEach(({ type, lookup }) => {\n switch (type) {\n case 'translation':\n i18nStore.translate(lookup);\n break;\n case 'dictionaryEntry':\n i18nStore.translateDictionaryEntry(lookup);\n break;\n case 'dictionaryObject':\n i18nStore.translateDictionaryObject(lookup);\n break;\n }\n });\n }, [devHotReloadEnabled, shouldTranslate, i18nStore, pendingLookups]);\n\n // No need for useCallback b/c we want access to the pendingLookups map\n return (key: string, pendingLookup: PendingLookup) => {\n pendingLookups.set(key, pendingLookup);\n };\n}\n"],"mappings":"2NAwCA,MAAM,MAAuD,GACvD,MAA+D,GAC/D,MAA2D,GAGjE,SAAS,GAAwD,CAC/D,OAAO,EAGT,SAAS,GAAuD,CAC9D,IAAM,EAAsBA,EAAAA,cAAc,EAAE,qBACtC,EAAoB,GAAsB,CAEhD,OAAA,EAAA,EAAA,aACG,GAA4B,CACvB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,yBAA0C,EAAO,CAAE,CACjD,KAAM,cACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAS,GAAgE,CACvE,OAAO,EAGT,SAAS,GAA+D,CACtE,IAAM,EAAsBA,EAAAA,cAAc,EAAE,yBACtC,EAAoB,GAAsB,CAEhD,OAAA,EAAA,EAAA,aACG,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,0BAA2C,EAAO,CAAE,CAClD,KAAM,kBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAS,GAA+D,CACtE,OAAO,EAGT,SAAS,GAA8D,CACrE,IAAM,EAAsBA,EAAAA,cAAc,EAAE,uBACtC,EAAoB,GAAsB,CAChD,OAAA,EAAA,EAAA,aACG,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,GAAA,EAAA,EAAA,0BAA2C,EAAO,CAAE,CAClD,KAAM,mBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,MAAa,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAKN,SAAS,GAAuB,CAG9B,IAAM,EACJ,QAAQ,IAAI,WAAa,eAAA,EAAA,EAAA,gBACV,CAAC,uBAAuB,CACnC,EAAkBC,EAAAA,oBAAoB,CACtC,EAAYC,EAAAA,cAAc,CAI1B,EAAiB,IAAI,IAwB3B,OArBA,EAAA,EAAA,eAAgB,CACV,CAAC,GAAuB,CAAC,GAAmB,EAAe,OAAS,GAIxE,EAAe,SAAS,CAAE,OAAM,YAAa,CAC3C,OAAQ,EAAR,CACE,IAAK,cACH,EAAU,UAAU,EAAO,CAC3B,MACF,IAAK,kBACH,EAAU,yBAAyB,EAAO,CAC1C,MACF,IAAK,mBACH,EAAU,0BAA0B,EAAO,CAC3C,QAEJ,EACD,CAAC,EAAqB,EAAiB,EAAW,EAAe,CAAC,EAG7D,EAAa,IAAiC,CACpD,EAAe,IAAI,EAAK,EAAc"}
@@ -1,2 +1,2 @@
1
- import{useGTContext as e}from"../../context/context.mjs";import{useShouldTranslate as t}from"../utils.mjs";import{useI18nStore as n}from"../../i18n-store/useI18nStore.mjs";import{useCallback as r,useEffect as i}from"react";import{getDictionaryListenerKey as a,getI18nConfig as o,getTranslateListenerKey as s}from"gt-i18n/internal";function c(){let t=e()?.onMissingTranslation,n=d();return r(e=>{t?t(e):n(s(e),{type:`translation`,lookup:e})},[t,n])}function l(){let t=e()?.onMissingDictionaryEntry,n=d();return r(e=>{t?t(e):n(a(e),{type:`dictionaryEntry`,lookup:e})},[t,n])}function u(){let t=e()?.onMissingDictionaryObj,n=d();return r(e=>{t?t(e):n(a(e),{type:`dictionaryObject`,lookup:e})},[t,n])}function d(){let e=o().isDevHotReloadEnabled(),r=t(),a=n(),s=new Map;return i(()=>{!e||!r||s.size===0||s.forEach(({type:e,lookup:t})=>{switch(e){case`translation`:a.translate(t);break;case`dictionaryEntry`:a.translateDictionaryEntry(t);break;case`dictionaryObject`:a.translateDictionaryObject(t);break}})},[e,r,a,s]),(e,t)=>{s.set(e,t)}}export{l as useHandleMissingDictionaryEntry,u as useHandleMissingDictionaryObject,c as useHandleMissingTranslation};
1
+ import{useGTContext as e}from"../../context/context.mjs";import{useShouldTranslate as t}from"../utils.mjs";import{useI18nStore as n}from"../../i18n-store/useI18nStore.mjs";import{getDictionaryListenerKey as r,getI18nConfig as i,getTranslateListenerKey as a}from"gt-i18n/internal";import{useCallback as o,useEffect as s}from"react";const c=()=>{},l=()=>{},u=()=>{};function d(){return c}function f(){let t=e()?.onMissingTranslation,n=b();return o(e=>{t?t(e):n(a(e),{type:`translation`,lookup:e})},[t,n])}function p(){return l}function m(){let t=e()?.onMissingDictionaryEntry,n=b();return o(e=>{t?t(e):n(r(e),{type:`dictionaryEntry`,lookup:e})},[t,n])}function h(){return u}function g(){let t=e()?.onMissingDictionaryObj,n=b();return o(e=>{t?t(e):n(r(e),{type:`dictionaryObject`,lookup:e})},[t,n])}const _=process.env.NODE_ENV===`production`?d:f,v=process.env.NODE_ENV===`production`?p:m,y=process.env.NODE_ENV===`production`?h:g;function b(){let e=process.env.NODE_ENV!==`production`&&i().isDevHotReloadEnabled(),r=t(),a=n(),o=new Map;return s(()=>{!e||!r||o.size===0||o.forEach(({type:e,lookup:t})=>{switch(e){case`translation`:a.translate(t);break;case`dictionaryEntry`:a.translateDictionaryEntry(t);break;case`dictionaryObject`:a.translateDictionaryObject(t);break}})},[e,r,a,o]),(e,t)=>{o.set(e,t)}}export{v as useHandleMissingDictionaryEntry,y as useHandleMissingDictionaryObject,_ as useHandleMissingTranslation};
2
2
  //# sourceMappingURL=missing-translation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"missing-translation.mjs","names":[],"sources":["../../../src/hooks/utils/missing-translation.ts"],"sourcesContent":["import {\n getDictionaryListenerKey,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport { useShouldTranslate } from '../utils';\nimport { useI18nStore } from '../../i18n-store/useI18nStore';\nimport { DictionaryLookup, TranslateLookup } from '../../i18n-store/storeTypes';\nimport { useCallback, useEffect } from 'react';\nimport { Translation } from 'gt-i18n/types';\nimport { useGTContext } from '../../context/context';\n\nexport type OnMissingTranslation = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => void;\nexport type OnMissingDictionaryEntry = (lookup: DictionaryLookup) => void;\n// TODO: rename to OnMissingDictionaryObject\nexport type OnMissingDictionaryObj = (lookup: DictionaryLookup) => void;\n\ntype PendingLookup =\n | {\n type: 'translation';\n lookup: TranslateLookup;\n }\n | {\n type: 'dictionaryEntry' | 'dictionaryObject';\n lookup: DictionaryLookup;\n };\n\n/**\n * Why have custom handleMissing functions?\n *\n * Some runtimes (like server) cannot make useEffect calls, so\n * we need to give them access to a callback where they can embed\n * their own translation calls\n *\n * While this is technnically not pure behavior, this is acceptable\n * in development hot reload\n */\n\n// TODO: reduce code duplication with the three below functions\nexport function useHandleMissingTranslation(): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: TranslateLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getTranslateListenerKey(lookup), {\n type: 'translation',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport function useHandleMissingDictionaryEntry(): OnMissingDictionaryEntry {\n const customHandleMissing = useGTContext()?.onMissingDictionaryEntry;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryEntry',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport function useHandleMissingDictionaryObject(): OnMissingDictionaryObj {\n const customHandleMissing = useGTContext()?.onMissingDictionaryObj;\n const pureHandleMissing = useDevHotReloadQueue();\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryObject',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\n/**\n * HMR translation needs to be deferred to post-commit phase\n */\nfunction useDevHotReloadQueue() {\n const devHotReloadEnabled = getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const i18nStore = useI18nStore();\n\n // No memoization bc we want to flush after every render\n // TODO: perhaps should find a way to memoize and flush in a better way than this as it nullifies any useCallback\n const pendingLookups = new Map<string, PendingLookup>();\n\n // Pure react: effects run after render\n useEffect(() => {\n if (!devHotReloadEnabled || !shouldTranslate || pendingLookups.size === 0) {\n return;\n }\n\n pendingLookups.forEach(({ type, lookup }) => {\n switch (type) {\n case 'translation':\n i18nStore.translate(lookup);\n break;\n case 'dictionaryEntry':\n i18nStore.translateDictionaryEntry(lookup);\n break;\n case 'dictionaryObject':\n i18nStore.translateDictionaryObject(lookup);\n break;\n }\n });\n }, [devHotReloadEnabled, shouldTranslate, i18nStore, pendingLookups]);\n\n // No need for useCallback b/c we want access to the pendingLookups map\n return (key: string, pendingLookup: PendingLookup) => {\n pendingLookups.set(key, pendingLookup);\n };\n}\n"],"mappings":"2UAyCA,SAAgB,GAAoD,CAClE,IAAM,EAAsB,GAAc,EAAE,qBACtC,EAAoB,GAAsB,CAEhD,OAAO,EACJ,GAA4B,CACvB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAwB,EAAO,CAAE,CACjD,KAAM,cACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAgB,GAA4D,CAC1E,IAAM,EAAsB,GAAc,EAAE,yBACtC,EAAoB,GAAsB,CAEhD,OAAO,EACJ,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAyB,EAAO,CAAE,CAClD,KAAM,kBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAgB,GAA2D,CACzE,IAAM,EAAsB,GAAc,EAAE,uBACtC,EAAoB,GAAsB,CAChD,OAAO,EACJ,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAyB,EAAO,CAAE,CAClD,KAAM,mBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAMH,SAAS,GAAuB,CAC9B,IAAM,EAAsB,GAAe,CAAC,uBAAuB,CAC7D,EAAkB,GAAoB,CACtC,EAAY,GAAc,CAI1B,EAAiB,IAAI,IAwB3B,OArBA,MAAgB,CACV,CAAC,GAAuB,CAAC,GAAmB,EAAe,OAAS,GAIxE,EAAe,SAAS,CAAE,OAAM,YAAa,CAC3C,OAAQ,EAAR,CACE,IAAK,cACH,EAAU,UAAU,EAAO,CAC3B,MACF,IAAK,kBACH,EAAU,yBAAyB,EAAO,CAC1C,MACF,IAAK,mBACH,EAAU,0BAA0B,EAAO,CAC3C,QAEJ,EACD,CAAC,EAAqB,EAAiB,EAAW,EAAe,CAAC,EAG7D,EAAa,IAAiC,CACpD,EAAe,IAAI,EAAK,EAAc"}
1
+ {"version":3,"file":"missing-translation.mjs","names":[],"sources":["../../../src/hooks/utils/missing-translation.ts"],"sourcesContent":["import {\n getDictionaryListenerKey,\n getI18nConfig,\n getTranslateListenerKey,\n} from 'gt-i18n/internal';\nimport { useShouldTranslate } from '../utils';\nimport { useI18nStore } from '../../i18n-store/useI18nStore';\nimport { DictionaryLookup, TranslateLookup } from '../../i18n-store/storeTypes';\nimport { useCallback, useEffect } from 'react';\nimport { Translation } from 'gt-i18n/types';\nimport { useGTContext } from '../../context/context';\n\nexport type OnMissingTranslation = <T extends Translation>(\n lookup: TranslateLookup<T>\n) => void;\nexport type OnMissingDictionaryEntry = (lookup: DictionaryLookup) => void;\n// TODO: rename to OnMissingDictionaryObject\nexport type OnMissingDictionaryObj = (lookup: DictionaryLookup) => void;\n\ntype PendingLookup =\n | {\n type: 'translation';\n lookup: TranslateLookup;\n }\n | {\n type: 'dictionaryEntry' | 'dictionaryObject';\n lookup: DictionaryLookup;\n };\n\n/**\n * Why have custom handleMissing functions?\n *\n * Some runtimes (like server) cannot make useEffect calls, so\n * we need to give them access to a callback where they can embed\n * their own translation calls\n *\n * While this is technnically not pure behavior, this is acceptable\n * in development hot reload\n */\n\nconst noopOnMissingTranslation: OnMissingTranslation = () => {};\nconst noopOnMissingDictionaryEntry: OnMissingDictionaryEntry = () => {};\nconst noopOnMissingDictionaryObj: OnMissingDictionaryObj = () => {};\n\n// TODO: reduce code duplication with the three below functions\nfunction useHandleMissingTranslationProd(): OnMissingTranslation {\n return noopOnMissingTranslation;\n}\n\nfunction useHandleMissingTranslationDev(): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: TranslateLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getTranslateListenerKey(lookup), {\n type: 'translation',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nfunction useHandleMissingDictionaryEntryProd(): OnMissingDictionaryEntry {\n return noopOnMissingDictionaryEntry;\n}\n\nfunction useHandleMissingDictionaryEntryDev(): OnMissingDictionaryEntry {\n const customHandleMissing = useGTContext()?.onMissingDictionaryEntry;\n const pureHandleMissing = useDevHotReloadQueue();\n\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryEntry',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nfunction useHandleMissingDictionaryObjectProd(): OnMissingDictionaryObj {\n return noopOnMissingDictionaryObj;\n}\n\nfunction useHandleMissingDictionaryObjectDev(): OnMissingDictionaryObj {\n const customHandleMissing = useGTContext()?.onMissingDictionaryObj;\n const pureHandleMissing = useDevHotReloadQueue();\n return useCallback(\n (lookup: DictionaryLookup) => {\n if (customHandleMissing) {\n customHandleMissing(lookup);\n } else {\n pureHandleMissing(getDictionaryListenerKey(lookup), {\n type: 'dictionaryObject',\n lookup,\n });\n }\n },\n [customHandleMissing, pureHandleMissing]\n );\n}\n\nexport const useHandleMissingTranslation: () => OnMissingTranslation =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingTranslationProd\n : useHandleMissingTranslationDev;\n\nexport const useHandleMissingDictionaryEntry: () => OnMissingDictionaryEntry =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingDictionaryEntryProd\n : useHandleMissingDictionaryEntryDev;\n\nexport const useHandleMissingDictionaryObject: () => OnMissingDictionaryObj =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingDictionaryObjectProd\n : useHandleMissingDictionaryObjectDev;\n\n/**\n * HMR translation needs to be deferred to post-commit phase\n */\nfunction useDevHotReloadQueue() {\n // Statically gated so bundlers can drop dev hot-reload work from\n // production builds.\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\n const shouldTranslate = useShouldTranslate();\n const i18nStore = useI18nStore();\n\n // No memoization bc we want to flush after every render\n // TODO: perhaps should find a way to memoize and flush in a better way than this as it nullifies any useCallback\n const pendingLookups = new Map<string, PendingLookup>();\n\n // Pure react: effects run after render\n useEffect(() => {\n if (!devHotReloadEnabled || !shouldTranslate || pendingLookups.size === 0) {\n return;\n }\n\n pendingLookups.forEach(({ type, lookup }) => {\n switch (type) {\n case 'translation':\n i18nStore.translate(lookup);\n break;\n case 'dictionaryEntry':\n i18nStore.translateDictionaryEntry(lookup);\n break;\n case 'dictionaryObject':\n i18nStore.translateDictionaryObject(lookup);\n break;\n }\n });\n }, [devHotReloadEnabled, shouldTranslate, i18nStore, pendingLookups]);\n\n // No need for useCallback b/c we want access to the pendingLookups map\n return (key: string, pendingLookup: PendingLookup) => {\n pendingLookups.set(key, pendingLookup);\n };\n}\n"],"mappings":"2UAwCA,MAAM,MAAuD,GACvD,MAA+D,GAC/D,MAA2D,GAGjE,SAAS,GAAwD,CAC/D,OAAO,EAGT,SAAS,GAAuD,CAC9D,IAAM,EAAsB,GAAc,EAAE,qBACtC,EAAoB,GAAsB,CAEhD,OAAO,EACJ,GAA4B,CACvB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAwB,EAAO,CAAE,CACjD,KAAM,cACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAS,GAAgE,CACvE,OAAO,EAGT,SAAS,GAA+D,CACtE,IAAM,EAAsB,GAAc,EAAE,yBACtC,EAAoB,GAAsB,CAEhD,OAAO,EACJ,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAyB,EAAO,CAAE,CAClD,KAAM,kBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,SAAS,GAA+D,CACtE,OAAO,EAGT,SAAS,GAA8D,CACrE,IAAM,EAAsB,GAAc,EAAE,uBACtC,EAAoB,GAAsB,CAChD,OAAO,EACJ,GAA6B,CACxB,EACF,EAAoB,EAAO,CAE3B,EAAkB,EAAyB,EAAO,CAAE,CAClD,KAAM,mBACN,SACD,CAAC,EAGN,CAAC,EAAqB,EAAkB,CACzC,CAGH,MAAa,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAKN,SAAS,GAAuB,CAG9B,IAAM,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,EAAkB,GAAoB,CACtC,EAAY,GAAc,CAI1B,EAAiB,IAAI,IAwB3B,OArBA,MAAgB,CACV,CAAC,GAAuB,CAAC,GAAmB,EAAe,OAAS,GAIxE,EAAe,SAAS,CAAE,OAAM,YAAa,CAC3C,OAAQ,EAAR,CACE,IAAK,cACH,EAAU,UAAU,EAAO,CAC3B,MACF,IAAK,kBACH,EAAU,yBAAyB,EAAO,CAC1C,MACF,IAAK,mBACH,EAAU,0BAA0B,EAAO,CAC3C,QAEJ,EACD,CAAC,EAAqB,EAAiB,EAAW,EAAe,CAAC,EAG7D,EAAa,IAAiC,CACpD,EAAe,IAAI,EAAK,EAAc"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils/getFormatLocales.cjs`),t=require(`./condition-store.cjs`);let n=require(`generaltranslation/internal`),r=require(`react`),i=require(`gt-i18n/internal`);const a=[];function o(n=a){let i=t.useLocale(),o=t.useEnableI18n();return(0,r.useMemo)(()=>e.getFormatLocales({locale:i,enableI18n:o,localesProp:n}),[i,o,n])}function s(){let e=t.useEnableI18n(),n=t.useLocale();return e&&(0,i.getI18nConfig)().requiresTranslation(n)}function c(){return(0,r.useMemo)(()=>(0,i.getI18nConfig)().getGTClass(),[])}function l(e){return(0,r.useMemo)(()=>(0,i.getI18nConfig)().getGTClass().getLocaleProperties(e),[e])}function u(e){return(0,r.useMemo)(()=>(0,i.getI18nConfig)().getGTClass().getLocaleDirection(e),[e])}function d(){throw Error((0,n.createDiagnosticMessage)({source:`@generaltranslation/react-core`,severity:`Error`,whatHappened:`useVersionId() is not implemented in this entry point`,fix:`Use getVersionId() or import useVersionId() from a supported runtime entry point.`}))}exports.useFormatLocales=o,exports.useGTClass=c,exports.useLocaleDirection=u,exports.useLocaleProperties=l,exports.useShouldTranslate=s,exports.useVersionId=d;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./utils/getFormatLocales.cjs`),t=require(`./condition-store.cjs`);let n=require(`gt-i18n/internal`),r=require(`react`);const i=[];function a(n=i){let a=t.useLocale(),o=t.useEnableI18n();return(0,r.useMemo)(()=>e.getFormatLocales({locale:a,enableI18n:o,localesProp:n}),[a,o,n])}function o(){let e=t.useEnableI18n(),r=t.useLocale();return e&&(0,n.getI18nConfig)().requiresTranslation(r)}function s(e){return(0,r.useMemo)(()=>(0,n.getI18nConfig)().getGTClass().getLocaleProperties(e),[e])}function c(e){let i=t.useLocale(),a=e??i;return(0,r.useMemo)(()=>(0,n.getI18nConfig)().getGTClass().getLocaleDirection(a),[a])}exports.useFormatLocales=a,exports.useLocaleDirection=c,exports.useLocaleProperties=s,exports.useShouldTranslate=o;
2
2
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":["useLocale","useEnableI18n","getFormatLocales"],"sources":["../../src/hooks/utils.ts"],"sourcesContent":["import type { LocaleProperties } from '@generaltranslation/format/types';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { useMemo } from 'react';\nimport { useEnableI18n, useLocale } from './condition-store';\nimport { getFormatLocales } from './utils/getFormatLocales';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nconst EMPTY_LOCALES_PROP: string[] = [];\n\nexport { getFormatLocales };\n\nexport function useFormatLocales(\n localesProp: string[] = EMPTY_LOCALES_PROP\n): string[] {\n const locale = useLocale();\n const enableI18n = useEnableI18n();\n return useMemo(\n () =>\n getFormatLocales({\n locale,\n enableI18n,\n localesProp,\n }),\n [locale, enableI18n, localesProp]\n );\n}\n\nexport function useShouldTranslate(): boolean {\n const enableI18n = useEnableI18n();\n const locale = useLocale();\n return enableI18n && getI18nConfig().requiresTranslation(locale);\n}\n\nexport function useGTClass() {\n return useMemo(() => getI18nConfig().getGTClass(), []);\n}\n\nexport function useLocaleProperties(locale: string): LocaleProperties {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleProperties(locale),\n [locale]\n );\n}\n\nexport function useLocaleDirection(locale: string) {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleDirection(locale),\n [locale]\n );\n}\n\nexport function useVersionId() {\n throw new Error(\n createDiagnosticMessage({\n source: '@generaltranslation/react-core',\n severity: 'Error',\n whatHappened: 'useVersionId() is not implemented in this entry point',\n fix: 'Use getVersionId() or import useVersionId() from a supported runtime entry point.',\n })\n );\n}\n"],"mappings":"8NAOA,MAAM,EAA+B,EAAE,CAIvC,SAAgB,EACd,EAAwB,EACd,CACV,IAAM,EAASA,EAAAA,WAAW,CACpB,EAAaC,EAAAA,eAAe,CAClC,OAAA,EAAA,EAAA,aAEIC,EAAAA,iBAAiB,CACf,SACA,aACA,cACD,CAAC,CACJ,CAAC,EAAQ,EAAY,EAAY,CAClC,CAGH,SAAgB,GAA8B,CAC5C,IAAM,EAAaD,EAAAA,eAAe,CAC5B,EAASD,EAAAA,WAAW,CAC1B,OAAO,IAAA,EAAA,EAAA,gBAA6B,CAAC,oBAAoB,EAAO,CAGlE,SAAgB,GAAa,CAC3B,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBAAoC,CAAC,YAAY,CAAE,EAAE,CAAC,CAGxD,SAAgB,EAAoB,EAAkC,CACpE,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBACuB,CAAC,YAAY,CAAC,oBAAoB,EAAO,CAC9D,CAAC,EAAO,CACT,CAGH,SAAgB,EAAmB,EAAgB,CACjD,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBACuB,CAAC,YAAY,CAAC,mBAAmB,EAAO,CAC7D,CAAC,EAAO,CACT,CAGH,SAAgB,GAAe,CAC7B,MAAU,OAAA,EAAA,EAAA,yBACgB,CACtB,OAAQ,iCACR,SAAU,QACV,aAAc,wDACd,IAAK,oFACN,CAAC,CACH"}
1
+ {"version":3,"file":"utils.cjs","names":["useLocale","useEnableI18n","getFormatLocales"],"sources":["../../src/hooks/utils.ts"],"sourcesContent":["import type { LocaleProperties } from '@generaltranslation/format/types';\nimport { useMemo } from 'react';\nimport { useEnableI18n, useLocale } from './condition-store';\nimport { getFormatLocales } from './utils/getFormatLocales';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nconst EMPTY_LOCALES_PROP: string[] = [];\n\nexport { getFormatLocales };\n\nexport function useFormatLocales(\n localesProp: string[] = EMPTY_LOCALES_PROP\n): string[] {\n const locale = useLocale();\n const enableI18n = useEnableI18n();\n return useMemo(\n () =>\n getFormatLocales({\n locale,\n enableI18n,\n localesProp,\n }),\n [locale, enableI18n, localesProp]\n );\n}\n\nexport function useShouldTranslate(): boolean {\n const enableI18n = useEnableI18n();\n const locale = useLocale();\n return enableI18n && getI18nConfig().requiresTranslation(locale);\n}\n\nexport function useLocaleProperties(locale: string): LocaleProperties {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleProperties(locale),\n [locale]\n );\n}\n\nexport function useLocaleDirection(locale?: string): 'ltr' | 'rtl' {\n const currentLocale = useLocale();\n const resolvedLocale = locale ?? currentLocale;\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleDirection(resolvedLocale),\n [resolvedLocale]\n );\n}\n"],"mappings":"qLAMA,MAAM,EAA+B,EAAE,CAIvC,SAAgB,EACd,EAAwB,EACd,CACV,IAAM,EAASA,EAAAA,WAAW,CACpB,EAAaC,EAAAA,eAAe,CAClC,OAAA,EAAA,EAAA,aAEIC,EAAAA,iBAAiB,CACf,SACA,aACA,cACD,CAAC,CACJ,CAAC,EAAQ,EAAY,EAAY,CAClC,CAGH,SAAgB,GAA8B,CAC5C,IAAM,EAAaD,EAAAA,eAAe,CAC5B,EAASD,EAAAA,WAAW,CAC1B,OAAO,IAAA,EAAA,EAAA,gBAA6B,CAAC,oBAAoB,EAAO,CAGlE,SAAgB,EAAoB,EAAkC,CACpE,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBACuB,CAAC,YAAY,CAAC,oBAAoB,EAAO,CAC9D,CAAC,EAAO,CACT,CAGH,SAAgB,EAAmB,EAAgC,CACjE,IAAM,EAAgBA,EAAAA,WAAW,CAC3B,EAAiB,GAAU,EACjC,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBACuB,CAAC,YAAY,CAAC,mBAAmB,EAAe,CACrE,CAAC,EAAe,CACjB"}
@@ -1,14 +1,10 @@
1
1
  import { getFormatLocales } from "./utils/getFormatLocales.js";
2
2
  import { LocaleProperties } from "@generaltranslation/format/types";
3
- import * as _$generaltranslation from "generaltranslation";
4
3
 
5
4
  //#region src/hooks/utils.d.ts
6
5
  declare function useFormatLocales(localesProp?: string[]): string[];
7
- declare function useShouldTranslate(): boolean;
8
- declare function useGTClass(): _$generaltranslation.GT;
9
6
  declare function useLocaleProperties(locale: string): LocaleProperties;
10
- declare function useLocaleDirection(locale: string): "ltr" | "rtl";
11
- declare function useVersionId(): void;
7
+ declare function useLocaleDirection(locale?: string): 'ltr' | 'rtl';
12
8
  //#endregion
13
- export { useFormatLocales, useGTClass, useLocaleDirection, useLocaleProperties, useShouldTranslate, useVersionId };
9
+ export { useFormatLocales, useLocaleDirection, useLocaleProperties };
14
10
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/hooks/utils.ts"],"mappings":";;;;;iBAWgB,gBAAA,CACd,WAAA;AAAA,iBAec,kBAAA,CAAA;AAAA,iBAMA,UAAA,CAAA,GAAU,oBAAA,CAAA,EAAA;AAAA,iBAIV,mBAAA,CAAoB,MAAA,WAAiB,gBAAA;AAAA,iBAOrC,kBAAA,CAAmB,MAAA;AAAA,iBAOnB,YAAA,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/hooks/utils.ts"],"mappings":";;;;iBAUgB,gBAAA,CACd,WAAA;AAAA,iBAqBc,mBAAA,CAAoB,MAAA,WAAiB,gBAAA;AAAA,iBAOrC,kBAAA,CAAmB,MAAA"}
@@ -1,2 +1,2 @@
1
- import{getFormatLocales as e}from"./utils/getFormatLocales.mjs";import{useEnableI18n as t,useLocale as n}from"./condition-store.mjs";import{createDiagnosticMessage as r}from"generaltranslation/internal";import{useMemo as i}from"react";import{getI18nConfig as a}from"gt-i18n/internal";const o=[];function s(r=o){let a=n(),s=t();return i(()=>e({locale:a,enableI18n:s,localesProp:r}),[a,s,r])}function c(){let e=t(),r=n();return e&&a().requiresTranslation(r)}function l(){return i(()=>a().getGTClass(),[])}function u(e){return i(()=>a().getGTClass().getLocaleProperties(e),[e])}function d(e){return i(()=>a().getGTClass().getLocaleDirection(e),[e])}function f(){throw Error(r({source:`@generaltranslation/react-core`,severity:`Error`,whatHappened:`useVersionId() is not implemented in this entry point`,fix:`Use getVersionId() or import useVersionId() from a supported runtime entry point.`}))}export{s as useFormatLocales,l as useGTClass,d as useLocaleDirection,u as useLocaleProperties,c as useShouldTranslate,f as useVersionId};
1
+ import{getFormatLocales as e}from"./utils/getFormatLocales.mjs";import{useEnableI18n as t,useLocale as n}from"./condition-store.mjs";import{getI18nConfig as r}from"gt-i18n/internal";import{useMemo as i}from"react";const a=[];function o(r=a){let o=n(),s=t();return i(()=>e({locale:o,enableI18n:s,localesProp:r}),[o,s,r])}function s(){let e=t(),i=n();return e&&r().requiresTranslation(i)}function c(e){return i(()=>r().getGTClass().getLocaleProperties(e),[e])}function l(e){let t=n(),a=e??t;return i(()=>r().getGTClass().getLocaleDirection(a),[a])}export{o as useFormatLocales,l as useLocaleDirection,c as useLocaleProperties,s as useShouldTranslate};
2
2
  //# sourceMappingURL=utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":[],"sources":["../../src/hooks/utils.ts"],"sourcesContent":["import type { LocaleProperties } from '@generaltranslation/format/types';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { useMemo } from 'react';\nimport { useEnableI18n, useLocale } from './condition-store';\nimport { getFormatLocales } from './utils/getFormatLocales';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nconst EMPTY_LOCALES_PROP: string[] = [];\n\nexport { getFormatLocales };\n\nexport function useFormatLocales(\n localesProp: string[] = EMPTY_LOCALES_PROP\n): string[] {\n const locale = useLocale();\n const enableI18n = useEnableI18n();\n return useMemo(\n () =>\n getFormatLocales({\n locale,\n enableI18n,\n localesProp,\n }),\n [locale, enableI18n, localesProp]\n );\n}\n\nexport function useShouldTranslate(): boolean {\n const enableI18n = useEnableI18n();\n const locale = useLocale();\n return enableI18n && getI18nConfig().requiresTranslation(locale);\n}\n\nexport function useGTClass() {\n return useMemo(() => getI18nConfig().getGTClass(), []);\n}\n\nexport function useLocaleProperties(locale: string): LocaleProperties {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleProperties(locale),\n [locale]\n );\n}\n\nexport function useLocaleDirection(locale: string) {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleDirection(locale),\n [locale]\n );\n}\n\nexport function useVersionId() {\n throw new Error(\n createDiagnosticMessage({\n source: '@generaltranslation/react-core',\n severity: 'Error',\n whatHappened: 'useVersionId() is not implemented in this entry point',\n fix: 'Use getVersionId() or import useVersionId() from a supported runtime entry point.',\n })\n );\n}\n"],"mappings":"4RAOA,MAAM,EAA+B,EAAE,CAIvC,SAAgB,EACd,EAAwB,EACd,CACV,IAAM,EAAS,GAAW,CACpB,EAAa,GAAe,CAClC,OAAO,MAEH,EAAiB,CACf,SACA,aACA,cACD,CAAC,CACJ,CAAC,EAAQ,EAAY,EAAY,CAClC,CAGH,SAAgB,GAA8B,CAC5C,IAAM,EAAa,GAAe,CAC5B,EAAS,GAAW,CAC1B,OAAO,GAAc,GAAe,CAAC,oBAAoB,EAAO,CAGlE,SAAgB,GAAa,CAC3B,OAAO,MAAc,GAAe,CAAC,YAAY,CAAE,EAAE,CAAC,CAGxD,SAAgB,EAAoB,EAAkC,CACpE,OAAO,MACC,GAAe,CAAC,YAAY,CAAC,oBAAoB,EAAO,CAC9D,CAAC,EAAO,CACT,CAGH,SAAgB,EAAmB,EAAgB,CACjD,OAAO,MACC,GAAe,CAAC,YAAY,CAAC,mBAAmB,EAAO,CAC7D,CAAC,EAAO,CACT,CAGH,SAAgB,GAAe,CAC7B,MAAU,MACR,EAAwB,CACtB,OAAQ,iCACR,SAAU,QACV,aAAc,wDACd,IAAK,oFACN,CAAC,CACH"}
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../../src/hooks/utils.ts"],"sourcesContent":["import type { LocaleProperties } from '@generaltranslation/format/types';\nimport { useMemo } from 'react';\nimport { useEnableI18n, useLocale } from './condition-store';\nimport { getFormatLocales } from './utils/getFormatLocales';\nimport { getI18nConfig } from 'gt-i18n/internal';\n\nconst EMPTY_LOCALES_PROP: string[] = [];\n\nexport { getFormatLocales };\n\nexport function useFormatLocales(\n localesProp: string[] = EMPTY_LOCALES_PROP\n): string[] {\n const locale = useLocale();\n const enableI18n = useEnableI18n();\n return useMemo(\n () =>\n getFormatLocales({\n locale,\n enableI18n,\n localesProp,\n }),\n [locale, enableI18n, localesProp]\n );\n}\n\nexport function useShouldTranslate(): boolean {\n const enableI18n = useEnableI18n();\n const locale = useLocale();\n return enableI18n && getI18nConfig().requiresTranslation(locale);\n}\n\nexport function useLocaleProperties(locale: string): LocaleProperties {\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleProperties(locale),\n [locale]\n );\n}\n\nexport function useLocaleDirection(locale?: string): 'ltr' | 'rtl' {\n const currentLocale = useLocale();\n const resolvedLocale = locale ?? currentLocale;\n return useMemo(\n () => getI18nConfig().getGTClass().getLocaleDirection(resolvedLocale),\n [resolvedLocale]\n );\n}\n"],"mappings":"sNAMA,MAAM,EAA+B,EAAE,CAIvC,SAAgB,EACd,EAAwB,EACd,CACV,IAAM,EAAS,GAAW,CACpB,EAAa,GAAe,CAClC,OAAO,MAEH,EAAiB,CACf,SACA,aACA,cACD,CAAC,CACJ,CAAC,EAAQ,EAAY,EAAY,CAClC,CAGH,SAAgB,GAA8B,CAC5C,IAAM,EAAa,GAAe,CAC5B,EAAS,GAAW,CAC1B,OAAO,GAAc,GAAe,CAAC,oBAAoB,EAAO,CAGlE,SAAgB,EAAoB,EAAkC,CACpE,OAAO,MACC,GAAe,CAAC,YAAY,CAAC,oBAAoB,EAAO,CAC9D,CAAC,EAAO,CACT,CAGH,SAAgB,EAAmB,EAAgC,CACjE,IAAM,EAAgB,GAAW,CAC3B,EAAiB,GAAU,EACjC,OAAO,MACC,GAAe,CAAC,YAAY,CAAC,mBAAmB,EAAe,CACrE,CAAC,EAAe,CACjB"}