exceptionz-react-native-lingua 1.0.0

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 (44) hide show
  1. package/dist/LinguaContext.d.ts +18 -0
  2. package/dist/LinguaContext.d.ts.map +1 -0
  3. package/dist/LinguaContext.js +102 -0
  4. package/dist/LinguaContext.js.map +1 -0
  5. package/dist/components/LanguageModal.d.ts +3 -0
  6. package/dist/components/LanguageModal.d.ts.map +1 -0
  7. package/dist/components/LanguageModal.js +155 -0
  8. package/dist/components/LanguageModal.js.map +1 -0
  9. package/dist/components/LanguageSwitcher.d.ts +3 -0
  10. package/dist/components/LanguageSwitcher.d.ts.map +1 -0
  11. package/dist/components/LanguageSwitcher.js +162 -0
  12. package/dist/components/LanguageSwitcher.js.map +1 -0
  13. package/dist/components/T.d.ts +8 -0
  14. package/dist/components/T.d.ts.map +1 -0
  15. package/dist/components/T.js +27 -0
  16. package/dist/components/T.js.map +1 -0
  17. package/dist/constants.d.ts +6 -0
  18. package/dist/constants.d.ts.map +1 -0
  19. package/dist/constants.js +25 -0
  20. package/dist/constants.js.map +1 -0
  21. package/dist/hooks/useTranslate.d.ts +2 -0
  22. package/dist/hooks/useTranslate.d.ts.map +1 -0
  23. package/dist/hooks/useTranslate.js +35 -0
  24. package/dist/hooks/useTranslate.js.map +1 -0
  25. package/dist/index.d.ts +7 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +17 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/utils/translator.d.ts +2 -0
  30. package/dist/utils/translator.d.ts.map +1 -0
  31. package/dist/utils/translator.js +51 -0
  32. package/dist/utils/translator.js.map +1 -0
  33. package/package.json +39 -0
  34. package/react-native-lingua-1.0.0.tgz +0 -0
  35. package/src/LinguaContext.tsx +72 -0
  36. package/src/components/LanguageModal.tsx +141 -0
  37. package/src/components/LanguageSwitcher.tsx +142 -0
  38. package/src/components/T.tsx +12 -0
  39. package/src/constants.ts +21 -0
  40. package/src/hooks/useTranslate.ts +36 -0
  41. package/src/index.ts +6 -0
  42. package/src/utils/translator.ts +37 -0
  43. package/tsconfig.json +22 -0
  44. package/tsup.config.ts +10 -0
@@ -0,0 +1,18 @@
1
+ import React, { ReactNode } from 'react';
2
+ interface LinguaContextProps {
3
+ currentLanguage: string;
4
+ setLanguage: (lang: string) => Promise<void>;
5
+ availableLanguages: string[];
6
+ isLoading: boolean;
7
+ }
8
+ export declare const useI18n: () => LinguaContextProps;
9
+ interface LinguaProviderProps {
10
+ children: ReactNode;
11
+ defaultLang?: string;
12
+ languages?: string[];
13
+ }
14
+ export declare const translationCache: Map<string, string>;
15
+ export declare const getCacheKey: (text: string, lang: string) => string;
16
+ export declare const LinguaProvider: React.FC<LinguaProviderProps>;
17
+ export {};
18
+ //# sourceMappingURL=LinguaContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinguaContext.d.ts","sourceRoot":"","sources":["../src/LinguaContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAuC,SAAS,EAAa,MAAM,OAAO,CAAC;AAIzF,UAAU,kBAAkB;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,eAAO,MAAM,OAAO,0BAInB,CAAC;AAEF,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,eAAO,MAAM,gBAAgB,qBAA4B,CAAC;AAC1D,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,WAAsB,CAAC;AAE7E,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA2CxD,CAAC"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.LinguaProvider = exports.getCacheKey = exports.translationCache = exports.useI18n = void 0;
49
+ const react_1 = __importStar(require("react"));
50
+ const async_storage_1 = __importDefault(require("@react-native-async-storage/async-storage"));
51
+ const constants_1 = require("./constants");
52
+ const LinguaContext = (0, react_1.createContext)(undefined);
53
+ const useI18n = () => {
54
+ const context = (0, react_1.useContext)(LinguaContext);
55
+ if (!context)
56
+ throw new Error('useI18n must be used within a LinguaProvider');
57
+ return context;
58
+ };
59
+ exports.useI18n = useI18n;
60
+ exports.translationCache = new Map();
61
+ const getCacheKey = (text, lang) => `${lang}:${text}`;
62
+ exports.getCacheKey = getCacheKey;
63
+ const LinguaProvider = ({ children, defaultLang = 'en', languages = constants_1.SUPPORTED_LANGUAGES.map(l => l.code) }) => {
64
+ const [currentLanguage, setCurrentLanguage] = (0, react_1.useState)(defaultLang);
65
+ const [isLoading, setIsLoading] = (0, react_1.useState)(true);
66
+ (0, react_1.useEffect)(() => {
67
+ const loadLanguage = () => __awaiter(void 0, void 0, void 0, function* () {
68
+ try {
69
+ const saved = yield async_storage_1.default.getItem('app-language-preference');
70
+ if (saved) {
71
+ setCurrentLanguage(saved);
72
+ }
73
+ }
74
+ catch (e) {
75
+ console.error('Failed to load language preference', e);
76
+ }
77
+ finally {
78
+ setIsLoading(false);
79
+ }
80
+ });
81
+ loadLanguage();
82
+ }, []);
83
+ const handleSetLanguage = (lang) => __awaiter(void 0, void 0, void 0, function* () {
84
+ try {
85
+ setCurrentLanguage(lang);
86
+ yield async_storage_1.default.setItem('app-language-preference', lang);
87
+ }
88
+ catch (e) {
89
+ console.error('Failed to save language preference', e);
90
+ }
91
+ });
92
+ return (<LinguaContext.Provider value={{
93
+ currentLanguage,
94
+ setLanguage: handleSetLanguage,
95
+ availableLanguages: languages,
96
+ isLoading
97
+ }}>
98
+ {children}
99
+ </LinguaContext.Provider>);
100
+ };
101
+ exports.LinguaProvider = LinguaProvider;
102
+ //# sourceMappingURL=LinguaContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinguaContext.js","sourceRoot":"","sources":["../src/LinguaContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyF;AACzF,8FAAqE;AACrE,2CAAkD;AASlD,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAiC,SAAS,CAAC,CAAC;AAExE,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAJW,QAAA,OAAO,WAIlB;AAQW,QAAA,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AACnD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAAhE,QAAA,WAAW,eAAqD;AAEtE,MAAM,cAAc,GAAkC,CAAC,EAC5D,QAAQ,EACR,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,+BAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EACjD,EAAE,EAAE;IACH,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAC,WAAW,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,IAAI,CAAC,CAAC;IAEjD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,GAAS,EAAE;YAC9B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,uBAAY,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;gBACpE,IAAI,KAAK,EAAE,CAAC;oBACV,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAA,CAAC;QACF,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,iBAAiB,GAAG,CAAO,IAAY,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,uBAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,OAAO,CACL,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7B,eAAe;YACf,WAAW,EAAE,iBAAiB;YAC9B,kBAAkB,EAAE,SAAS;YAC7B,SAAS;SACV,CAAC,CACA;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,aAAa,CAAC,QAAQ,CAAC,CAC1B,CAAC;AACJ,CAAC,CAAC;AA3CW,QAAA,cAAc,kBA2CzB"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const LanguageModal: React.FC;
3
+ //# sourceMappingURL=LanguageModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageModal.d.ts","sourceRoot":"","sources":["../../src/components/LanguageModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAanD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EA4DjC,CAAC"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.LanguageModal = void 0;
46
+ const react_1 = __importStar(require("react"));
47
+ const react_native_1 = require("react-native");
48
+ const LinguaContext_1 = require("../LinguaContext");
49
+ const constants_1 = require("../constants");
50
+ const LanguageModal = () => {
51
+ const { setLanguage, currentLanguage, isLoading } = (0, LinguaContext_1.useI18n)();
52
+ const [modalVisible, setModalVisible] = (0, react_1.useState)(false);
53
+ (0, react_1.useEffect)(() => {
54
+ if (!isLoading && !currentLanguage) {
55
+ setModalVisible(true);
56
+ }
57
+ }, [isLoading, currentLanguage]);
58
+ const handleSelectLanguage = (code) => __awaiter(void 0, void 0, void 0, function* () {
59
+ yield setLanguage(code);
60
+ setModalVisible(false);
61
+ });
62
+ return (<react_native_1.Modal animationType="slide" transparent={true} visible={modalVisible} onRequestClose={() => setModalVisible(false)}>
63
+ <react_native_1.View style={styles.centeredView}>
64
+ <react_native_1.View style={styles.modalView}>
65
+ <react_native_1.Text style={styles.modalTitle}>Select Language</react_native_1.Text>
66
+ <react_native_1.Text style={styles.modalSubtitle}>Choose your preferred language.</react_native_1.Text>
67
+
68
+ <react_native_1.FlatList data={constants_1.SUPPORTED_LANGUAGES} keyExtractor={(item) => item.code} renderItem={({ item }) => (<react_native_1.TouchableOpacity style={[
69
+ styles.languageItem,
70
+ currentLanguage === item.code && styles.selectedItem
71
+ ]} onPress={() => handleSelectLanguage(item.code)}>
72
+ <react_native_1.Text style={styles.icon}>{item.icon}</react_native_1.Text>
73
+ <react_native_1.Text style={[
74
+ styles.label,
75
+ currentLanguage === item.code && styles.selectedLabel
76
+ ]}>
77
+ {item.label}
78
+ </react_native_1.Text>
79
+ </react_native_1.TouchableOpacity>)} style={styles.list}/>
80
+
81
+ <react_native_1.TouchableOpacity style={styles.closeButton} onPress={() => setModalVisible(false)}>
82
+ <react_native_1.Text style={styles.closeButtonText}>Close</react_native_1.Text>
83
+ </react_native_1.TouchableOpacity>
84
+ </react_native_1.View>
85
+ </react_native_1.View>
86
+ </react_native_1.Modal>);
87
+ };
88
+ exports.LanguageModal = LanguageModal;
89
+ const styles = react_native_1.StyleSheet.create({
90
+ centeredView: {
91
+ flex: 1,
92
+ justifyContent: 'center',
93
+ alignItems: 'center',
94
+ backgroundColor: 'rgba(0,0,0,0.5)',
95
+ },
96
+ modalView: {
97
+ width: '85%',
98
+ backgroundColor: '#1e293b',
99
+ borderRadius: 20,
100
+ padding: 20,
101
+ alignItems: 'center',
102
+ shadowColor: '#000',
103
+ shadowOffset: { width: 0, height: 2 },
104
+ shadowOpacity: 0.25,
105
+ shadowRadius: 4,
106
+ elevation: 5,
107
+ maxHeight: '80%',
108
+ },
109
+ modalTitle: {
110
+ fontSize: 20,
111
+ fontWeight: 'bold',
112
+ color: '#f8fafc',
113
+ marginBottom: 8,
114
+ },
115
+ modalSubtitle: {
116
+ fontSize: 14,
117
+ color: '#94a3b8',
118
+ marginBottom: 20,
119
+ },
120
+ list: {
121
+ width: '100%',
122
+ },
123
+ languageItem: {
124
+ flexDirection: 'row',
125
+ alignItems: 'center',
126
+ padding: 15,
127
+ borderRadius: 12,
128
+ backgroundColor: 'rgba(255,255,255,0.05)',
129
+ marginBottom: 8,
130
+ gap: 12,
131
+ },
132
+ selectedItem: {
133
+ backgroundColor: '#3b82f6',
134
+ },
135
+ icon: {
136
+ fontSize: 18,
137
+ },
138
+ label: {
139
+ fontSize: 14,
140
+ color: '#cbd5e1',
141
+ fontWeight: '500',
142
+ },
143
+ selectedLabel: {
144
+ color: '#fff',
145
+ },
146
+ closeButton: {
147
+ marginTop: 20,
148
+ padding: 10,
149
+ },
150
+ closeButtonText: {
151
+ color: '#3b82f6',
152
+ fontWeight: '600',
153
+ },
154
+ });
155
+ //# sourceMappingURL=LanguageModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageModal.js","sourceRoot":"","sources":["../../src/components/LanguageModal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAmD;AACnD,+CAQsB;AACtB,oDAA2C;AAC3C,4CAAmD;AAE5C,MAAM,aAAa,GAAa,GAAG,EAAE;IAC1C,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAO,GAAE,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAExD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,EAAE,CAAC;YACnC,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAEjC,MAAM,oBAAoB,GAAG,CAAO,IAAY,EAAE,EAAE;QAClD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAA,CAAC;IAEF,OAAO,CACL,CAAC,oBAAK,CACJ,aAAa,CAAC,OAAO,CACrB,WAAW,CAAC,CAAC,IAAI,CAAC,CAClB,OAAO,CAAC,CAAC,YAAY,CAAC,CACtB,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAE7C;MAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/B;QAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;UAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,EAAE,mBAAI,CACrD;UAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,+BAA+B,EAAE,mBAAI,CAExE;;UAAA,CAAC,uBAAQ,CACP,IAAI,CAAC,CAAC,+BAAmB,CAAC,CAC1B,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CACxB,CAAC,+BAAgB,CACf,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,YAAY;gBACnB,eAAe,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY;aACrD,CAAC,CACF,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAE/C;gBAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,mBAAI,CAC3C;gBAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC;gBACX,MAAM,CAAC,KAAK;gBACZ,eAAe,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,aAAa;aACtD,CAAC,CACA;kBAAA,CAAC,IAAI,CAAC,KAAK,CACb;gBAAA,EAAE,mBAAI,CACR;cAAA,EAAE,+BAAgB,CAAC,CACpB,CAAC,CACF,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAGrB;;UAAA,CAAC,+BAAgB,CACf,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAC1B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAEtC;YAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,mBAAI,CAClD;UAAA,EAAE,+BAAgB,CACpB;QAAA,EAAE,mBAAI,CACR;MAAA,EAAE,mBAAI,CACR;IAAA,EAAE,oBAAK,CAAC,CACT,CAAC;AACJ,CAAC,CAAC;AA5DW,QAAA,aAAa,iBA4DxB;AAEF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,iBAAiB;KACnC;IACD,SAAS,EAAE;QACT,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,SAAS;QAC1B,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACrC,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,KAAK;KACjB;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,CAAC;KAChB;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,EAAE;KACjB;IACD,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;KACd;IACD,YAAY,EAAE;QACZ,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,wBAAwB;QACzC,YAAY,EAAE,CAAC;QACf,GAAG,EAAE,EAAE;KACR;IACD,YAAY,EAAE;QACZ,eAAe,EAAE,SAAS;KAC3B;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,EAAE;KACb;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,KAAK;KAClB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,MAAM;KACd;IACD,WAAW,EAAE;QACX,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ;IACD,eAAe,EAAE;QACf,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,KAAK;KAClB;CACF,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const LanguageSwitcher: React.FC;
3
+ //# sourceMappingURL=LanguageSwitcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSwitcher.d.ts","sourceRoot":"","sources":["../../src/components/LanguageSwitcher.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAaxC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EA8DpC,CAAC"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.LanguageSwitcher = void 0;
46
+ const react_1 = __importStar(require("react"));
47
+ const react_native_1 = require("react-native");
48
+ const LinguaContext_1 = require("../LinguaContext");
49
+ const constants_1 = require("../constants");
50
+ const LanguageSwitcher = () => {
51
+ var _a;
52
+ const { currentLanguage, setLanguage, availableLanguages } = (0, LinguaContext_1.useI18n)();
53
+ const [isOpen, setIsOpen] = (0, react_1.useState)(false);
54
+ const langMap = constants_1.SUPPORTED_LANGUAGES.reduce((acc, lang) => {
55
+ acc[lang.code] = { label: lang.label, icon: lang.icon };
56
+ return acc;
57
+ }, {});
58
+ const handleSelect = (lang) => __awaiter(void 0, void 0, void 0, function* () {
59
+ yield setLanguage(lang);
60
+ setIsOpen(false);
61
+ });
62
+ return (<react_native_1.View style={styles.container}>
63
+ {isOpen && (<react_native_1.Modal transparent={true} visible={isOpen} animationType="fade" onRequestClose={() => setIsOpen(false)}>
64
+ <react_native_1.TouchableWithoutFeedback onPress={() => setIsOpen(false)}>
65
+ <react_native_1.View style={styles.overlay}>
66
+ <react_native_1.View style={styles.dropdown}>
67
+ <react_native_1.ScrollView bounces={false} style={{ maxHeight: 350 }}>
68
+ {availableLanguages.map((lang) => {
69
+ var _a, _b;
70
+ return (<react_native_1.TouchableOpacity key={lang} onPress={() => handleSelect(lang)} style={[
71
+ styles.menuItem,
72
+ currentLanguage === lang && styles.selectedMenuItem
73
+ ]}>
74
+ <react_native_1.Text style={styles.icon}>{((_a = langMap[lang]) === null || _a === void 0 ? void 0 : _a.icon) || '🌐'}</react_native_1.Text>
75
+ <react_native_1.Text style={[
76
+ styles.label,
77
+ currentLanguage === lang && styles.selectedLabel
78
+ ]}>
79
+ {((_b = langMap[lang]) === null || _b === void 0 ? void 0 : _b.label) || lang}
80
+ </react_native_1.Text>
81
+ </react_native_1.TouchableOpacity>);
82
+ })}
83
+ </react_native_1.ScrollView>
84
+ </react_native_1.View>
85
+ </react_native_1.View>
86
+ </react_native_1.TouchableWithoutFeedback>
87
+ </react_native_1.Modal>)}
88
+
89
+ <react_native_1.TouchableOpacity style={styles.floatingButton} onPress={() => setIsOpen(true)}>
90
+ <react_native_1.Text style={styles.buttonIcon}>
91
+ {((_a = langMap[currentLanguage]) === null || _a === void 0 ? void 0 : _a.icon) || '🌐'}
92
+ </react_native_1.Text>
93
+ </react_native_1.TouchableOpacity>
94
+ </react_native_1.View>);
95
+ };
96
+ exports.LanguageSwitcher = LanguageSwitcher;
97
+ const styles = react_native_1.StyleSheet.create({
98
+ container: {
99
+ position: 'absolute',
100
+ bottom: 24,
101
+ right: 24,
102
+ zIndex: 99999,
103
+ },
104
+ floatingButton: {
105
+ width: 48,
106
+ height: 48,
107
+ borderRadius: 24,
108
+ backgroundColor: '#3b82f6',
109
+ justifyContent: 'center',
110
+ alignItems: 'center',
111
+ shadowColor: '#3b82f6',
112
+ shadowOffset: { width: 0, height: 4 },
113
+ shadowOpacity: 0.3,
114
+ shadowRadius: 12,
115
+ elevation: 8,
116
+ },
117
+ buttonIcon: {
118
+ fontSize: 20,
119
+ color: '#fff',
120
+ },
121
+ overlay: {
122
+ flex: 1,
123
+ backgroundColor: 'transparent',
124
+ justifyContent: 'flex-end',
125
+ alignItems: 'flex-end',
126
+ paddingBottom: 80,
127
+ paddingRight: 24,
128
+ },
129
+ dropdown: {
130
+ backgroundColor: '#1e293b',
131
+ borderRadius: 12,
132
+ padding: 6,
133
+ width: 180,
134
+ shadowColor: '#000',
135
+ shadowOffset: { width: 0, height: 10 },
136
+ shadowOpacity: 0.3,
137
+ shadowRadius: 20,
138
+ elevation: 10,
139
+ },
140
+ menuItem: {
141
+ flexDirection: 'row',
142
+ alignItems: 'center',
143
+ padding: 10,
144
+ borderRadius: 8,
145
+ gap: 10,
146
+ },
147
+ selectedMenuItem: {
148
+ backgroundColor: '#3b82f6',
149
+ },
150
+ icon: {
151
+ fontSize: 16,
152
+ },
153
+ label: {
154
+ fontSize: 13,
155
+ fontWeight: '500',
156
+ color: '#cbd5e1',
157
+ },
158
+ selectedLabel: {
159
+ color: '#fff',
160
+ },
161
+ });
162
+ //# sourceMappingURL=LanguageSwitcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LanguageSwitcher.js","sourceRoot":"","sources":["../../src/components/LanguageSwitcher.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { TextProps } from 'react-native';
3
+ interface TProps extends TextProps {
4
+ children: string;
5
+ }
6
+ export declare const T: React.FC<TProps>;
7
+ export {};
8
+ //# sourceMappingURL=T.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"T.d.ts","sourceRoot":"","sources":["../../src/components/T.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAQ,SAAS,EAAE,MAAM,cAAc,CAAC;AAG/C,UAAU,MAAO,SAAQ,SAAS;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAG9B,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.T = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const react_native_1 = require("react-native");
20
+ const useTranslate_1 = require("../hooks/useTranslate");
21
+ const T = (_a) => {
22
+ var { children } = _a, props = __rest(_a, ["children"]);
23
+ const translatedText = (0, useTranslate_1.useTranslate)(children);
24
+ return <react_native_1.Text {...props}>{translatedText}</react_native_1.Text>;
25
+ };
26
+ exports.T = T;
27
+ //# sourceMappingURL=T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"T.js","sourceRoot":"","sources":["../../src/components/T.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,+CAA+C;AAC/C,wDAAqD;AAM9C,MAAM,CAAC,GAAqB,CAAC,EAAsB,EAAE,EAAE;QAA1B,EAAE,QAAQ,OAAY,EAAP,KAAK,cAApB,YAAsB,CAAF;IACtD,MAAM,cAAc,GAAG,IAAA,2BAAY,EAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,mBAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,mBAAI,CAAC,CAAC;AAClD,CAAC,CAAC;AAHW,QAAA,CAAC,KAGZ"}
@@ -0,0 +1,6 @@
1
+ export declare const SUPPORTED_LANGUAGES: {
2
+ code: string;
3
+ label: string;
4
+ icon: string;
5
+ }[];
6
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB;;;;GAoB/B,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_LANGUAGES = void 0;
4
+ exports.SUPPORTED_LANGUAGES = [
5
+ { code: 'en', label: 'English', icon: '🇺🇸' },
6
+ { code: 'hi', label: 'हिन्दी', icon: '🇮🇳' },
7
+ { code: 'bn', label: 'বাংলা', icon: '🇮🇳' },
8
+ { code: 'gu', label: 'ગુજરાતી', icon: '🇮🇳' },
9
+ { code: 'kn', label: 'ಕನ್ನಡ', icon: '🇮🇳' },
10
+ { code: 'ks', label: 'کٲشُر', icon: '🇮🇳' },
11
+ { code: 'kok', label: 'कोंकणी', icon: '🇮🇳' },
12
+ { code: 'ml', label: 'മലയാളം', icon: '🇮🇳' },
13
+ { code: 'mr', label: 'मराठी', icon: '🇮🇳' },
14
+ { code: 'ne', label: 'नेपाली', icon: '🇮🇳' },
15
+ { code: 'or', label: 'ଓଡ଼ିଆ', icon: '🇮🇳' },
16
+ { code: 'pa', label: 'ਪੰਜਾਬੀ', icon: '🇮🇳' },
17
+ { code: 'sa', label: 'संस्कृतम्', icon: '🇮🇳' },
18
+ { code: 'sat', label: 'ᱥᱟᱱᱛᱟᱲᱤ', icon: '🇮🇳' },
19
+ { code: 'sd', label: 'سنڌي', icon: '🇮🇳' },
20
+ { code: 'ta', label: 'தமிழ்', icon: '🇮🇳' },
21
+ { code: 'te', label: 'తెలుగు', icon: '🇮🇳' },
22
+ { code: 'ur', label: 'اردو', icon: '🇮🇳' },
23
+ { code: 'fr', label: 'Français', icon: '🇫🇷' },
24
+ ];
25
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG;IACjC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IAC/C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3C,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;CAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useTranslate(text: string): string;
2
+ //# sourceMappingURL=useTranslate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslate.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslate.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA+BjD"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTranslate = useTranslate;
4
+ const react_1 = require("react");
5
+ const LinguaContext_1 = require("../LinguaContext");
6
+ const translator_1 = require("../utils/translator");
7
+ function useTranslate(text) {
8
+ const { currentLanguage } = (0, LinguaContext_1.useI18n)();
9
+ const [translated, setTranslated] = (0, react_1.useState)(text);
10
+ (0, react_1.useEffect)(() => {
11
+ if (!text)
12
+ return;
13
+ if (currentLanguage === 'en') {
14
+ setTranslated(text);
15
+ return;
16
+ }
17
+ const key = (0, LinguaContext_1.getCacheKey)(text, currentLanguage);
18
+ if (LinguaContext_1.translationCache.has(key)) {
19
+ setTranslated(LinguaContext_1.translationCache.get(key));
20
+ return;
21
+ }
22
+ let isMounted = true;
23
+ (0, translator_1.translateText)(text, currentLanguage).then((res) => {
24
+ if (isMounted) {
25
+ LinguaContext_1.translationCache.set(key, res);
26
+ setTranslated(res);
27
+ }
28
+ });
29
+ return () => {
30
+ isMounted = false;
31
+ };
32
+ }, [text, currentLanguage]);
33
+ return translated;
34
+ }
35
+ //# sourceMappingURL=useTranslate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTranslate.js","sourceRoot":"","sources":["../../src/hooks/useTranslate.ts"],"names":[],"mappings":";;AAIA,oCA+BC;AAnCD,iCAA4C;AAC5C,oDAA0E;AAC1E,oDAAoD;AAEpD,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAA,uBAAO,GAAE,CAAC;IACtC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAS,IAAI,CAAC,CAAC;IAE3D,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,2BAAW,EAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC/C,IAAI,gCAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,aAAa,CAAC,gCAAgB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAA,0BAAa,EAAC,IAAI,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAChD,IAAI,SAAS,EAAE,CAAC;gBACd,gCAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC/B,aAAa,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAE5B,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { LinguaProvider, useI18n } from './LinguaContext';
2
+ export { LanguageModal } from './components/LanguageModal';
3
+ export { LanguageSwitcher } from './components/LanguageSwitcher';
4
+ export { T } from './components/T';
5
+ export { useTranslate } from './hooks/useTranslate';
6
+ export { SUPPORTED_LANGUAGES } from './constants';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}