@generaltranslation/react-core 11.1.10 → 11.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/hooks/external-store/useTrackedTranslationResolver.cjs +1 -1
- package/dist/hooks/external-store/useTrackedTranslationResolver.cjs.map +1 -1
- package/dist/hooks/external-store/useTrackedTranslationResolver.d.ts.map +1 -1
- package/dist/hooks/external-store/useTrackedTranslationResolver.mjs +1 -1
- package/dist/hooks/external-store/useTrackedTranslationResolver.mjs.map +1 -1
- package/dist/hooks/useGT.cjs +1 -1
- package/dist/hooks/useGT.cjs.map +1 -1
- package/dist/hooks/useGT.d.ts.map +1 -1
- package/dist/hooks/useGT.mjs +1 -1
- package/dist/hooks/useGT.mjs.map +1 -1
- package/dist/hooks/utils/missing-translation.cjs +1 -1
- package/dist/hooks/utils/missing-translation.cjs.map +1 -1
- package/dist/hooks/utils/missing-translation.mjs +1 -1
- package/dist/hooks/utils/missing-translation.mjs.map +1 -1
- package/dist/hooks/utils.cjs +1 -1
- package/dist/hooks/utils.cjs.map +1 -1
- package/dist/hooks/utils.d.ts.map +1 -1
- package/dist/hooks/utils.mjs +1 -1
- package/dist/hooks/utils.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @generaltranslation/react-core
|
|
2
2
|
|
|
3
|
+
## 11.1.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#2112](https://github.com/generaltranslation/gt/pull/2112) [`53b2100`](https://github.com/generaltranslation/gt/commit/53b2100abe824b81d3c2d0a3acaf7201c77da87c) Thanks [@eoinest](https://github.com/eoinest)! - Reuse resolved translation conditions across each `useGT` call.
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`bb08d8c`](https://github.com/generaltranslation/gt/commit/bb08d8cc5df87c71dd2a31416087821dbae38aa8)]:
|
|
10
|
+
- @generaltranslation/format@0.1.7
|
|
11
|
+
- generaltranslation@9.1.6
|
|
12
|
+
- gt-i18n@1.0.16
|
|
13
|
+
|
|
3
14
|
## 11.1.10
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../i18n-store/useI18nStore.cjs`),t=require(`../utils/missing-translation.cjs`),n=require(`./useSubscribeToTrackedLookups.cjs`);let r=require(`gt-i18n/internal`),i=require(`react`);function a(a=[],s,c){let l=e.useTranslationsSnapshot(),u=e.useI18nStore(),d=process.env.NODE_ENV!==`production`&&(0,r.getI18nConfig)().isDevHotReloadEnabled(),f=t.useHandleMissingTranslationWithConditions(c),p=(0,i.useRef)(null);return p.current??=new Set,o(a,p,s,c),n.useSubscribeToTrackedLookups(p,u.subscribeToTranslationEvents,r.getTranslateListenerKey),(0,i.useCallback)(e=>{let t=(0,r.getTranslateListenerKey)(e);d&&p.current.add(t);let n=u.getTranslateSnapshot(e,l);return n==null&&d&&f(e),n},[u,l,f,d])}function o(t,n,a,o){let s=e.useI18nStore(),c=process.env.NODE_ENV!==`production`&&(0,r.getI18nConfig)().isDevHotReloadEnabled(),l=e.useTranslationsSnapshot(),u=(0,i.useMemo)(()=>t?.length>0&&o&&c,[t,o,c]),d=(0,i.useMemo)(()=>u?t.map(({message:e,...t})=>{let n=t.$locale??a,i={locale:n,message:e,options:(0,r.createLookupOptions)(n,t,`ICU`)};return[i,(0,r.getTranslateListenerKey)(i)]}):[],[a,u,t]);u&&d.forEach(([,e])=>{n.current.add(e)}),(0,i.useEffect)(()=>{u&&d.filter(([e])=>s.getTranslateSnapshot(e,l)==null).forEach(([e])=>s.translate(e))},[u,s,d,l])}exports.useTrackedTranslationResolver=a;
|
|
2
2
|
//# sourceMappingURL=useTrackedTranslationResolver.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrackedTranslationResolver.cjs","names":["useTranslationsSnapshot","useI18nStore","
|
|
1
|
+
{"version":3,"file":"useTrackedTranslationResolver.cjs","names":["useTranslationsSnapshot","useI18nStore","useHandleMissingTranslationWithConditions","getTranslateListenerKey"],"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 {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../../i18n-store/useI18nStore';\nimport { useHandleMissingTranslationWithConditions } 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 locale: string,\n shouldTranslate: boolean\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 =\n useHandleMissingTranslationWithConditions(shouldTranslate);\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, locale, shouldTranslate);\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 locale: string,\n shouldTranslate: boolean\n) {\n const i18nStore = useI18nStore();\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\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":"wPA4CA,SAAgB,EACd,EAAsB,EAAE,CACxB,EACA,EAC4B,CAC5B,IAAM,EAAuBA,EAAAA,yBAAyB,CAChD,EAAYC,EAAAA,cAAc,CAC1B,EACJ,QAAQ,IAAI,WAAa,eAAA,EAAA,EAAA,gBACV,CAAC,uBAAuB,CACnC,EACJC,EAAAA,0CAA0C,EAAgB,CAKtD,GAAA,EAAA,EAAA,QAA4C,KAAK,CAoBvD,MAnBA,CACE,EAAe,UAAU,IAAI,IAI/B,EAA0B,EAAU,EAAgB,EAAQ,EAAgB,CAG5E,EAAA,6BACE,EACA,EAAU,6BACVC,EAAAA,wBACD,EAOD,EAAA,EAAA,aAEI,GACyB,CAEzB,IAAM,GAAA,EAAA,EAAA,yBAAoC,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,EACA,EACA,CACA,IAAM,EAAYF,EAAAA,cAAc,CAC1B,EACJ,QAAQ,IAAI,WAAa,eAAA,EAAA,EAAA,gBACV,CAAC,uBAAuB,CACnC,EAAuBD,EAAAA,yBAAyB,CAChD,GAAA,EAAA,EAAA,aACG,GAAU,OAAS,GAAK,GAAmB,EACjD,CAAC,EAAU,EAAiB,EAAoB,CAAC,CAG9C,GAAA,EAAA,EAAA,aACC,EACE,EAAS,KAAK,CAAE,UAAS,GAAG,KAAc,CAC/C,IAAM,EAAe,EAAQ,SAAW,EAMlC,EAAS,CACb,OAAQ,EACR,UACA,SAAA,EAAA,EAAA,qBAPA,EACA,EACA,MAKsB,CACvB,CACD,MAAO,CAAC,GAAA,EAAA,EAAA,yBAAgC,EAAO,CAAC,EAChD,CAd8B,EAAE,CAejC,CAAC,EAAQ,EAAoB,EAAS,CAAC,CAGtC,GACF,EAAQ,SAAS,EAAG,KAAe,CACjC,EAAe,QAAS,IAAI,EAAU,EACtC,EAYJ,EAAA,EAAA,eAAgB,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrackedTranslationResolver.d.ts","names":[],"sources":["../../../src/hooks/external-store/useTrackedTranslationResolver.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"useTrackedTranslationResolver.d.ts","names":[],"sources":["../../../src/hooks/external-store/useTrackedTranslationResolver.ts"],"mappings":";;;;KA4BY,OAAA,GAAU,mBAAA;EACpB,OAAA;AAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{useI18nStore as e,useTranslationsSnapshot as t}from"../../i18n-store/useI18nStore.mjs";import{useHandleMissingTranslationWithConditions as n}from"../utils/missing-translation.mjs";import{useSubscribeToTrackedLookups as r}from"./useSubscribeToTrackedLookups.mjs";import{createLookupOptions as i,getI18nConfig as a,getTranslateListenerKey as o}from"gt-i18n/internal";import{useCallback as s,useEffect as c,useMemo as l,useRef as u}from"react";function d(i=[],c,l){let d=t(),p=e(),m=process.env.NODE_ENV!==`production`&&a().isDevHotReloadEnabled(),h=n(l),g=u(null);return g.current??=new Set,f(i,g,c,l),r(g,p.subscribeToTranslationEvents,o),s(e=>{let t=o(e);m&&g.current.add(t);let n=p.getTranslateSnapshot(e,d);return n==null&&m&&h(e),n},[p,d,h,m])}function f(n,r,s,u){let d=e(),f=process.env.NODE_ENV!==`production`&&a().isDevHotReloadEnabled(),p=t(),m=l(()=>n?.length>0&&u&&f,[n,u,f]),h=l(()=>m?n.map(({message:e,...t})=>{let n=t.$locale??s,r={locale:n,message:e,options:i(n,t,`ICU`)};return[r,o(r)]}):[],[s,m,n]);m&&h.forEach(([,e])=>{r.current.add(e)}),c(()=>{m&&h.filter(([e])=>d.getTranslateSnapshot(e,p)==null).forEach(([e])=>d.translate(e))},[m,d,h,p])}export{d as useTrackedTranslationResolver};
|
|
2
2
|
//# sourceMappingURL=useTrackedTranslationResolver.mjs.map
|
|
@@ -1 +1 @@
|
|
|
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 {
|
|
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 {\n useI18nStore,\n useTranslationsSnapshot,\n} from '../../i18n-store/useI18nStore';\nimport { useHandleMissingTranslationWithConditions } 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 locale: string,\n shouldTranslate: boolean\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 =\n useHandleMissingTranslationWithConditions(shouldTranslate);\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, locale, shouldTranslate);\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 locale: string,\n shouldTranslate: boolean\n) {\n const i18nStore = useI18nStore();\n const devHotReloadEnabled =\n process.env.NODE_ENV !== 'production' &&\n getI18nConfig().isDevHotReloadEnabled();\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":"gcA4CA,SAAgB,EACd,EAAsB,EAAE,CACxB,EACA,EAC4B,CAC5B,IAAM,EAAuB,GAAyB,CAChD,EAAY,GAAc,CAC1B,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,EACJ,EAA0C,EAAgB,CAKtD,EAAiB,EAA2B,KAAK,CAoBvD,MAnBA,CACE,EAAe,UAAU,IAAI,IAI/B,EAA0B,EAAU,EAAgB,EAAQ,EAAgB,CAG5E,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,EACA,EACA,CACA,IAAM,EAAY,GAAc,CAC1B,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,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"}
|
package/dist/hooks/useGT.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./i18n-config.cjs`),t=require(`./utils.cjs`),n=require(`./external-store/useTrackedTranslationResolver.cjs`);let r=require(`gt-i18n/internal`),i=require(`react`);function a(a){let{locale:o,shouldTranslate:s}=t.useTranslationConditions(),c=e.useDefaultLocale(),l=n.useTrackedTranslationResolver(a,o,s);return(0,i.useCallback)((e,t={})=>{let n=(0,r.createLookupOptions)(t.$locale??o,t,`ICU`);return s?(0,r.interpolateMessage)({source:e,target:l({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:c}):(0,r.interpolateMessage)({options:n,source:e,sourceLocale:c})},[c,o,s,l])}exports.useGT=a;
|
|
2
2
|
//# sourceMappingURL=useGT.cjs.map
|
package/dist/hooks/useGT.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGT.cjs","names":["
|
|
1
|
+
{"version":3,"file":"useGT.cjs","names":["useTranslationConditions","useDefaultLocale","useTrackedTranslationResolver"],"sources":["../../src/hooks/useGT.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { createLookupOptions, interpolateMessage } from 'gt-i18n/internal';\nimport { useTranslationConditions } 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, shouldTranslate } = useTranslationConditions();\n const defaultLocale = useDefaultLocale();\n const resolveTranslation = useTrackedTranslationResolver(\n _messages,\n locale,\n shouldTranslate\n );\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":"gOAaA,SAAgB,EAAM,EAAuC,CAC3D,GAAM,CAAE,SAAQ,mBAAoBA,EAAAA,0BAA0B,CACxD,EAAgBC,EAAAA,kBAAkB,CAClC,EAAqBC,EAAAA,8BACzB,EACA,EACA,EACD,CAKD,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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGT.d.ts","names":[],"sources":["../../src/hooks/useGT.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"useGT.d.ts","names":[],"sources":["../../src/hooks/useGT.ts"],"mappings":";;;;iBAagB,KAAA,CAAM,SAAA,GAAY,OAAA,KAAY,cAAA"}
|
package/dist/hooks/useGT.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{useDefaultLocale as e}from"./i18n-config.mjs";import{useTranslationConditions as t}from"./utils.mjs";import{useTrackedTranslationResolver as n}from"./external-store/useTrackedTranslationResolver.mjs";import{createLookupOptions as r,interpolateMessage as i}from"gt-i18n/internal";import{useCallback as a}from"react";function o(o){let{locale:s,shouldTranslate:c}=t(),l=e(),u=n(o,s,c);return a((e,t={})=>{let n=r(t.$locale??s,t,`ICU`);return i(c?{source:e,target:u({locale:n.$locale,message:e,options:n}),options:n,sourceLocale:l}:{options:n,source:e,sourceLocale:l})},[l,s,c,u])}export{o as useGT};
|
|
2
2
|
//# sourceMappingURL=useGT.mjs.map
|
package/dist/hooks/useGT.mjs.map
CHANGED
|
@@ -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 {
|
|
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 { useTranslationConditions } 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, shouldTranslate } = useTranslationConditions();\n const defaultLocale = useDefaultLocale();\n const resolveTranslation = useTrackedTranslationResolver(\n _messages,\n locale,\n shouldTranslate\n );\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":"kUAaA,SAAgB,EAAM,EAAuC,CAC3D,GAAM,CAAE,SAAQ,mBAAoB,GAA0B,CACxD,EAAgB,GAAkB,CAClC,EAAqB,EACzB,EACA,EACA,EACD,CAKD,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(`../../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
|
|
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(){return u(t.useShouldTranslate())}function u(t){let n=e.useGTContext()?.onMissingTranslation,a=y(t);return(0,i.useCallback)(e=>{n?n(e):a((0,r.getTranslateListenerKey)(e),{type:`translation`,lookup:e})},[n,a])}function d(){return o}function f(){let n=e.useGTContext()?.onMissingDictionaryEntry,a=y(t.useShouldTranslate());return(0,i.useCallback)(e=>{n?n(e):a((0,r.getDictionaryListenerKey)(e),{type:`dictionaryEntry`,lookup:e})},[n,a])}function p(){return s}function m(){let n=e.useGTContext()?.onMissingDictionaryObj,a=y(t.useShouldTranslate());return(0,i.useCallback)(e=>{n?n(e):a((0,r.getDictionaryListenerKey)(e),{type:`dictionaryObject`,lookup:e})},[n,a])}const h=process.env.NODE_ENV===`production`?c:l,g=process.env.NODE_ENV===`production`?c:u,_=process.env.NODE_ENV===`production`?d:f,v=process.env.NODE_ENV===`production`?p:m;function y(e){let t=process.env.NODE_ENV!==`production`&&(0,r.getI18nConfig)().isDevHotReloadEnabled(),a=n.useI18nStore(),o=new Map;return(0,i.useEffect)(()=>{!t||!e||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}})},[t,e,a,o]),(e,t)=>{o.set(e,t)}}exports.useHandleMissingDictionaryEntry=_,exports.useHandleMissingDictionaryObject=v,exports.useHandleMissingTranslation=h,exports.useHandleMissingTranslationWithConditions=g;
|
|
2
2
|
//# sourceMappingURL=missing-translation.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"missing-translation.cjs","names":["
|
|
1
|
+
{"version":3,"file":"missing-translation.cjs","names":["useShouldTranslate","useGTContext","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 return useHandleMissingTranslationWithConditionsDev(useShouldTranslate());\n}\n\nfunction useHandleMissingTranslationWithConditionsDev(\n shouldTranslate: boolean\n): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue(shouldTranslate);\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(useShouldTranslate());\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(useShouldTranslate());\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 useHandleMissingTranslationWithConditions: (\n shouldTranslate: boolean\n) => OnMissingTranslation =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingTranslationProd\n : useHandleMissingTranslationWithConditionsDev;\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(shouldTranslate: boolean) {\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 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,OAAO,EAA6CA,EAAAA,oBAAoB,CAAC,CAG3E,SAAS,EACP,EACsB,CACtB,IAAM,EAAsBC,EAAAA,cAAc,EAAE,qBACtC,EAAoB,EAAqB,EAAgB,CAE/D,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,EAAqBD,EAAAA,oBAAoB,CAAC,CAEpE,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,EAAsBC,EAAAA,cAAc,EAAE,uBACtC,EAAoB,EAAqBD,EAAAA,oBAAoB,CAAC,CACpE,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,EAGX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAKN,SAAS,EAAqB,EAA0B,CAGtD,IAAM,EACJ,QAAQ,IAAI,WAAa,eAAA,EAAA,EAAA,gBACV,CAAC,uBAAuB,CACnC,EAAYE,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{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
|
|
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(){return p(t())}function p(t){let n=e()?.onMissingTranslation,r=S(t);return o(e=>{n?n(e):r(a(e),{type:`translation`,lookup:e})},[n,r])}function m(){return l}function h(){let n=e()?.onMissingDictionaryEntry,i=S(t());return o(e=>{n?n(e):i(r(e),{type:`dictionaryEntry`,lookup:e})},[n,i])}function g(){return u}function _(){let n=e()?.onMissingDictionaryObj,i=S(t());return o(e=>{n?n(e):i(r(e),{type:`dictionaryObject`,lookup:e})},[n,i])}const v=process.env.NODE_ENV===`production`?d:f,y=process.env.NODE_ENV===`production`?d:p,b=process.env.NODE_ENV===`production`?m:h,x=process.env.NODE_ENV===`production`?g:_;function S(e){let t=process.env.NODE_ENV!==`production`&&i().isDevHotReloadEnabled(),r=n(),a=new Map;return s(()=>{!t||!e||a.size===0||a.forEach(({type:e,lookup:t})=>{switch(e){case`translation`:r.translate(t);break;case`dictionaryEntry`:r.translateDictionaryEntry(t);break;case`dictionaryObject`:r.translateDictionaryObject(t);break}})},[t,e,r,a]),(e,t)=>{a.set(e,t)}}export{b as useHandleMissingDictionaryEntry,x as useHandleMissingDictionaryObject,v as useHandleMissingTranslation,y as useHandleMissingTranslationWithConditions};
|
|
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\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
|
|
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 return useHandleMissingTranslationWithConditionsDev(useShouldTranslate());\n}\n\nfunction useHandleMissingTranslationWithConditionsDev(\n shouldTranslate: boolean\n): OnMissingTranslation {\n const customHandleMissing = useGTContext()?.onMissingTranslation;\n const pureHandleMissing = useDevHotReloadQueue(shouldTranslate);\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(useShouldTranslate());\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(useShouldTranslate());\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 useHandleMissingTranslationWithConditions: (\n shouldTranslate: boolean\n) => OnMissingTranslation =\n process.env.NODE_ENV === 'production'\n ? useHandleMissingTranslationProd\n : useHandleMissingTranslationWithConditionsDev;\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(shouldTranslate: boolean) {\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 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,OAAO,EAA6C,GAAoB,CAAC,CAG3E,SAAS,EACP,EACsB,CACtB,IAAM,EAAsB,GAAc,EAAE,qBACtC,EAAoB,EAAqB,EAAgB,CAE/D,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,EAAqB,GAAoB,CAAC,CAEpE,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,EAAqB,GAAoB,CAAC,CACpE,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,EAGX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAEO,EACX,QAAQ,IAAI,WAAa,aACrB,EACA,EAKN,SAAS,EAAqB,EAA0B,CAGtD,IAAM,EACJ,QAAQ,IAAI,WAAa,cACzB,GAAe,CAAC,uBAAuB,CACnC,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"}
|
package/dist/hooks/utils.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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
|
|
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(){let e=t.useConditionStore(),r=e.getLocale();return{locale:r,shouldTranslate:e.getEnableI18n()&&(0,n.getI18nConfig)().requiresTranslation(r)}}function c(e){return(0,r.useMemo)(()=>(0,n.getI18nConfig)().getGTClass().getLocaleProperties(e),[e])}function l(e){let i=t.useLocale(),a=e??i;return(0,r.useMemo)(()=>(0,n.getI18nConfig)().getGTClass().getLocaleDirection(a),[a])}exports.useFormatLocales=a,exports.useLocaleDirection=l,exports.useLocaleProperties=c,exports.useShouldTranslate=o,exports.useTranslationConditions=s;
|
|
2
2
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/hooks/utils.cjs.map
CHANGED
|
@@ -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 { 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,
|
|
1
|
+
{"version":3,"file":"utils.cjs","names":["useLocale","useEnableI18n","getFormatLocales","useConditionStore"],"sources":["../../src/hooks/utils.ts"],"sourcesContent":["import type { LocaleProperties } from '@generaltranslation/format/types';\nimport { useMemo } from 'react';\nimport { useConditionStore, 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\n/**\n * Resolves the condition values shared by translation hooks once per render.\n */\nexport function useTranslationConditions(): {\n locale: string;\n shouldTranslate: boolean;\n} {\n const conditionStore = useConditionStore();\n const locale = conditionStore.getLocale();\n const enableI18n = conditionStore.getEnableI18n();\n return {\n locale,\n shouldTranslate: enableI18n && getI18nConfig().requiresTranslation(locale),\n };\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,CAMlE,SAAgB,GAGd,CACA,IAAM,EAAiBG,EAAAA,mBAAmB,CACpC,EAAS,EAAe,WAAW,CAEzC,MAAO,CACL,SACA,gBAHiB,EAAe,eAGL,GAAA,EAAA,EAAA,gBAAmB,CAAC,oBAAoB,EAAO,CAC3E,CAGH,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,EAAgBH,EAAAA,WAAW,CAC3B,EAAiB,GAAU,EACjC,OAAA,EAAA,EAAA,cAAA,EAAA,EAAA,gBACuB,CAAC,YAAY,CAAC,mBAAmB,EAAe,CACrE,CAAC,EAAe,CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/hooks/utils.ts"],"mappings":";;;;iBAUgB,gBAAA,CACd,WAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/hooks/utils.ts"],"mappings":";;;;iBAUgB,gBAAA,CACd,WAAA;AAAA,iBAqCc,mBAAA,CAAoB,MAAA,WAAiB,gBAAA;AAAA,iBAOrC,kBAAA,CAAmB,MAAA"}
|
package/dist/hooks/utils.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getFormatLocales as e}from"./utils/getFormatLocales.mjs";import{
|
|
1
|
+
import{getFormatLocales as e}from"./utils/getFormatLocales.mjs";import{useConditionStore as t,useEnableI18n as n,useLocale as r}from"./condition-store.mjs";import{getI18nConfig as i}from"gt-i18n/internal";import{useMemo as a}from"react";const o=[];function s(t=o){let i=r(),s=n();return a(()=>e({locale:i,enableI18n:s,localesProp:t}),[i,s,t])}function c(){let e=n(),t=r();return e&&i().requiresTranslation(t)}function l(){let e=t(),n=e.getLocale();return{locale:n,shouldTranslate:e.getEnableI18n()&&i().requiresTranslation(n)}}function u(e){return a(()=>i().getGTClass().getLocaleProperties(e),[e])}function d(e){let t=r(),n=e??t;return a(()=>i().getGTClass().getLocaleDirection(n),[n])}export{s as useFormatLocales,d as useLocaleDirection,u as useLocaleProperties,c as useShouldTranslate,l as useTranslationConditions};
|
|
2
2
|
//# sourceMappingURL=utils.mjs.map
|
package/dist/hooks/utils.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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":"
|
|
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 { useConditionStore, 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\n/**\n * Resolves the condition values shared by translation hooks once per render.\n */\nexport function useTranslationConditions(): {\n locale: string;\n shouldTranslate: boolean;\n} {\n const conditionStore = useConditionStore();\n const locale = conditionStore.getLocale();\n const enableI18n = conditionStore.getEnableI18n();\n return {\n locale,\n shouldTranslate: enableI18n && getI18nConfig().requiresTranslation(locale),\n };\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":"6OAMA,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,CAMlE,SAAgB,GAGd,CACA,IAAM,EAAiB,GAAmB,CACpC,EAAS,EAAe,WAAW,CAEzC,MAAO,CACL,SACA,gBAHiB,EAAe,eAGL,EAAI,GAAe,CAAC,oBAAoB,EAAO,CAC3E,CAGH,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@generaltranslation/react-core",
|
|
3
|
-
"version": "11.1.
|
|
3
|
+
"version": "11.1.11",
|
|
4
4
|
"description": "A pure React library for internationalization",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"react": ">=18.0.0"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@generaltranslation/format": "0.1.
|
|
15
|
-
"generaltranslation": "9.1.
|
|
16
|
-
"gt-i18n": "1.0.
|
|
14
|
+
"@generaltranslation/format": "0.1.7",
|
|
15
|
+
"generaltranslation": "9.1.6",
|
|
16
|
+
"gt-i18n": "1.0.16"
|
|
17
17
|
},
|
|
18
18
|
"repository": {
|
|
19
19
|
"type": "git",
|