@umituz/react-native-localization 1.5.0 → 1.5.2

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 (49) hide show
  1. package/package.json +1 -6
  2. package/src/infrastructure/config/i18n.ts +2 -34
  3. package/src/infrastructure/config/languages.ts +0 -1
  4. package/src/infrastructure/storage/AsyncStorageWrapper.ts +1 -2
  5. package/src/infrastructure/storage/LocalizationStore.ts +0 -62
  6. package/lib/domain/repositories/ILocalizationRepository.d.ts +0 -17
  7. package/lib/domain/repositories/ILocalizationRepository.d.ts.map +0 -1
  8. package/lib/domain/repositories/ILocalizationRepository.js +0 -6
  9. package/lib/domain/repositories/ILocalizationRepository.js.map +0 -1
  10. package/lib/index.d.ts +0 -13
  11. package/lib/index.d.ts.map +0 -1
  12. package/lib/index.js +0 -15
  13. package/lib/index.js.map +0 -1
  14. package/lib/infrastructure/components/LanguageSwitcher.d.ts +0 -12
  15. package/lib/infrastructure/components/LanguageSwitcher.d.ts.map +0 -1
  16. package/lib/infrastructure/components/LanguageSwitcher.js +0 -49
  17. package/lib/infrastructure/components/LanguageSwitcher.js.map +0 -1
  18. package/lib/infrastructure/components/LocalizationProvider.d.ts +0 -11
  19. package/lib/infrastructure/components/LocalizationProvider.d.ts.map +0 -1
  20. package/lib/infrastructure/components/LocalizationProvider.js +0 -14
  21. package/lib/infrastructure/components/LocalizationProvider.js.map +0 -1
  22. package/lib/infrastructure/components/useLanguageNavigation.d.ts +0 -6
  23. package/lib/infrastructure/components/useLanguageNavigation.d.ts.map +0 -1
  24. package/lib/infrastructure/components/useLanguageNavigation.js +0 -16
  25. package/lib/infrastructure/components/useLanguageNavigation.js.map +0 -1
  26. package/lib/infrastructure/config/i18n.d.ts +0 -12
  27. package/lib/infrastructure/config/i18n.d.ts.map +0 -1
  28. package/lib/infrastructure/config/i18n.js +0 -269
  29. package/lib/infrastructure/config/i18n.js.map +0 -1
  30. package/lib/infrastructure/config/languages.d.ts +0 -39
  31. package/lib/infrastructure/config/languages.d.ts.map +0 -1
  32. package/lib/infrastructure/config/languages.js +0 -210
  33. package/lib/infrastructure/config/languages.js.map +0 -1
  34. package/lib/infrastructure/config/languagesData.d.ts +0 -26
  35. package/lib/infrastructure/config/languagesData.d.ts.map +0 -1
  36. package/lib/infrastructure/config/languagesData.js +0 -58
  37. package/lib/infrastructure/config/languagesData.js.map +0 -1
  38. package/lib/infrastructure/locales/en-US/index.d.ts +0 -29
  39. package/lib/infrastructure/locales/en-US/index.d.ts.map +0 -1
  40. package/lib/infrastructure/locales/en-US/index.js +0 -40
  41. package/lib/infrastructure/locales/en-US/index.js.map +0 -1
  42. package/lib/infrastructure/storage/AsyncStorageWrapper.d.ts +0 -12
  43. package/lib/infrastructure/storage/AsyncStorageWrapper.d.ts.map +0 -1
  44. package/lib/infrastructure/storage/AsyncStorageWrapper.js +0 -29
  45. package/lib/infrastructure/storage/AsyncStorageWrapper.js.map +0 -1
  46. package/lib/infrastructure/storage/LocalizationStore.d.ts +0 -31
  47. package/lib/infrastructure/storage/LocalizationStore.d.ts.map +0 -1
  48. package/lib/infrastructure/storage/LocalizationStore.js +0 -192
  49. package/lib/infrastructure/storage/LocalizationStore.js.map +0 -1
@@ -1,29 +0,0 @@
1
- /**
2
- * Auto-loader for en-US translation modules
3
- *
4
- * AUTOMATIC TRANSLATION FILE DETECTION:
5
- * - Uses Metro bundler's require.context to auto-discover .json files
6
- * - Adding new translation file = just create .json file (zero manual updates)
7
- * - Build-time resolution (fast, no runtime overhead)
8
- * - Works for all languages automatically
9
- *
10
- * OFFLINE-ONLY TRANSLATIONS (All domains work without backend):
11
- * - Automatically imports ALL .json files in this directory
12
- * - Alphabetically sorted for consistency
13
- * - Type-safe with TypeScript
14
- *
15
- * USAGE:
16
- * 1. Create new translation file: my_domain.json
17
- * 2. File is auto-discovered and loaded
18
- * 3. Access via t('my_domain.key')
19
- *
20
- * This file is automatically generated by setup-languages.js script
21
- * but can be manually edited if needed.
22
- */
23
- /**
24
- * Load all JSON modules automatically
25
- * Extracts module name from path (e.g., './auth.json' -> 'auth')
26
- */
27
- declare const translations: Record<string, any>;
28
- export default translations;
29
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/locales/en-US/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;;GAGG;AACH,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,CAAC;AAW7C,eAAe,YAAY,CAAC"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Auto-loader for en-US translation modules
3
- *
4
- * AUTOMATIC TRANSLATION FILE DETECTION:
5
- * - Uses Metro bundler's require.context to auto-discover .json files
6
- * - Adding new translation file = just create .json file (zero manual updates)
7
- * - Build-time resolution (fast, no runtime overhead)
8
- * - Works for all languages automatically
9
- *
10
- * OFFLINE-ONLY TRANSLATIONS (All domains work without backend):
11
- * - Automatically imports ALL .json files in this directory
12
- * - Alphabetically sorted for consistency
13
- * - Type-safe with TypeScript
14
- *
15
- * USAGE:
16
- * 1. Create new translation file: my_domain.json
17
- * 2. File is auto-discovered and loaded
18
- * 3. Access via t('my_domain.key')
19
- *
20
- * This file is automatically generated by setup-languages.js script
21
- * but can be manually edited if needed.
22
- */
23
- // Metro bundler require.context - auto-discover all .json files
24
- // eslint-disable-next-line @typescript-eslint/no-require-imports
25
- const translationContext = require.context('./', false, /\.json$/);
26
- /**
27
- * Load all JSON modules automatically
28
- * Extracts module name from path (e.g., './auth.json' -> 'auth')
29
- */
30
- const translations = {};
31
- translationContext.keys().forEach((key) => {
32
- // Extract module name from path: './auth.json' -> 'auth'
33
- const match = key.match(/\.\/([^/]+)\.json$/);
34
- if (match) {
35
- const moduleName = match[1];
36
- translations[moduleName] = translationContext(key);
37
- }
38
- });
39
- export default translations;
40
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/infrastructure/locales/en-US/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,gEAAgE;AAChE,iEAAiE;AACjE,MAAM,kBAAkB,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAE5E;;;GAGG;AACH,MAAM,YAAY,GAAwB,EAAE,CAAC;AAE7C,kBAAkB,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE;IAChD,yDAAyD;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,YAAY,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * AsyncStorage Wrapper
3
- * Simple wrapper for AsyncStorage operations
4
- */
5
- export declare const STORAGE_KEYS: {
6
- readonly LANGUAGE: "@localization:language";
7
- };
8
- export declare const StorageWrapper: {
9
- getString(key: string, defaultValue: string): Promise<string>;
10
- setString(key: string, value: string): Promise<void>;
11
- };
12
- //# sourceMappingURL=AsyncStorageWrapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AsyncStorageWrapper.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/storage/AsyncStorageWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,YAAY;;CAEf,CAAC;AAEX,eAAO,MAAM,cAAc;mBACJ,MAAM,gBAAgB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;mBAU9C,MAAM,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3D,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * AsyncStorage Wrapper
3
- * Simple wrapper for AsyncStorage operations
4
- */
5
- import AsyncStorage from '@react-native-async-storage/async-storage';
6
- export const STORAGE_KEYS = {
7
- LANGUAGE: '@localization:language',
8
- };
9
- export const StorageWrapper = {
10
- async getString(key, defaultValue) {
11
- try {
12
- const value = await AsyncStorage.getItem(key);
13
- return value ?? defaultValue;
14
- }
15
- catch (error) {
16
- console.warn('[Localization] Failed to get storage value:', error);
17
- return defaultValue;
18
- }
19
- },
20
- async setString(key, value) {
21
- try {
22
- await AsyncStorage.setItem(key, value);
23
- }
24
- catch (error) {
25
- console.warn('[Localization] Failed to set storage value:', error);
26
- }
27
- },
28
- };
29
- //# sourceMappingURL=AsyncStorageWrapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AsyncStorageWrapper.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/AsyncStorageWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,YAAY,MAAM,2CAA2C,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE,wBAAwB;CAC1B,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,YAAoB;QAC/C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,KAAK,IAAI,YAAY,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;YACnE,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,KAAa;QACxC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,6CAA6C,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Localization Store
3
- * Zustand state management for language preferences with AsyncStorage persistence
4
- */
5
- import type { Language } from '../../domain/repositories/ILocalizationRepository';
6
- interface LocalizationState {
7
- currentLanguage: string;
8
- isRTL: boolean;
9
- isInitialized: boolean;
10
- supportedLanguages: Language[];
11
- setLanguage: (languageCode: string) => Promise<void>;
12
- initialize: () => Promise<void>;
13
- }
14
- export declare const useLocalizationStore: import("zustand").UseBoundStore<import("zustand").StoreApi<LocalizationState>>;
15
- /**
16
- * Hook to use localization
17
- * Provides current language, RTL state, language switching, and translation function
18
- * Uses react-i18next's useTranslation hook to ensure proper i18n instance
19
- */
20
- export declare const useLocalization: () => {
21
- t: import("i18next").TFunction<"translation", undefined>;
22
- currentLanguage: string;
23
- currentLanguageObject: Language;
24
- isRTL: boolean;
25
- isInitialized: boolean;
26
- supportedLanguages: Language[];
27
- setLanguage: (languageCode: string) => Promise<void>;
28
- initialize: () => Promise<void>;
29
- };
30
- export {};
31
- //# sourceMappingURL=LocalizationStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocalizationStore.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/storage/LocalizationStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAElF,UAAU,iBAAiB;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IAC/B,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,oBAAoB,gFA0J9B,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;gCArKE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC;sBAClC,OAAO,CAAC,IAAI,CAAC;CA8LhC,CAAC"}
@@ -1,192 +0,0 @@
1
- /**
2
- * Localization Store
3
- * Zustand state management for language preferences with AsyncStorage persistence
4
- */
5
- import { create } from 'zustand';
6
- import { useTranslation } from 'react-i18next';
7
- import { StorageWrapper, STORAGE_KEYS } from './AsyncStorageWrapper';
8
- import i18n from '../config/i18n';
9
- import { SUPPORTED_LANGUAGES, DEFAULT_LANGUAGE, getLanguageByCode, getDeviceLocale } from '../config/languages';
10
- export const useLocalizationStore = create((set, get) => ({
11
- currentLanguage: DEFAULT_LANGUAGE,
12
- isRTL: false,
13
- isInitialized: false,
14
- supportedLanguages: SUPPORTED_LANGUAGES,
15
- /**
16
- * Initialize localization
17
- * DEVICE LOCALE DETECTION:
18
- * - First launch (no saved language): Automatically detect device locale
19
- * - After manual selection: Use saved language preference
20
- * - Fallback: English (en-US) if device locale not supported
21
- */
22
- initialize: async () => {
23
- /* eslint-disable-next-line no-console */
24
- if (__DEV__)
25
- console.log('[LocalizationStore] Starting initialization...');
26
- try {
27
- // ✅ CRITICAL FIX: Don't reset isInitialized if already initialized
28
- // This prevents UI flash on re-initialization
29
- const { isInitialized: alreadyInitialized } = get();
30
- if (alreadyInitialized) {
31
- /* eslint-disable-next-line no-console */
32
- if (__DEV__)
33
- console.log('[LocalizationStore] Already initialized, skipping...');
34
- return;
35
- }
36
- /* eslint-disable-next-line no-console */
37
- if (__DEV__)
38
- console.log('[LocalizationStore] Getting saved language preference...');
39
- // Get saved language preference
40
- const savedLanguage = await StorageWrapper.getString(STORAGE_KEYS.LANGUAGE, DEFAULT_LANGUAGE);
41
- /* eslint-disable-next-line no-console */
42
- if (__DEV__)
43
- console.log('[LocalizationStore] Saved language:', savedLanguage);
44
- // ✅ DEVICE LOCALE DETECTION: Use device locale on first launch
45
- let languageCode;
46
- if (savedLanguage && savedLanguage !== DEFAULT_LANGUAGE) {
47
- // User has previously selected a language → Use their choice
48
- /* eslint-disable-next-line no-console */
49
- if (__DEV__)
50
- console.log('[LocalizationStore] Using saved language preference:', savedLanguage);
51
- languageCode = savedLanguage;
52
- }
53
- else {
54
- // First launch → Detect device locale automatically
55
- /* eslint-disable-next-line no-console */
56
- if (__DEV__)
57
- console.log('[LocalizationStore] First launch, detecting device locale...');
58
- languageCode = getDeviceLocale();
59
- /* eslint-disable-next-line no-console */
60
- if (__DEV__)
61
- console.log('[LocalizationStore] Detected device locale:', languageCode);
62
- // Save detected locale for future launches
63
- await StorageWrapper.setString(STORAGE_KEYS.LANGUAGE, languageCode);
64
- /* eslint-disable-next-line no-console */
65
- if (__DEV__)
66
- console.log('[LocalizationStore] Saved detected locale to storage');
67
- }
68
- // ✅ DEFENSIVE: Validate language exists, fallback to default
69
- /* eslint-disable-next-line no-console */
70
- if (__DEV__)
71
- console.log('[LocalizationStore] Validating language code:', languageCode);
72
- const language = getLanguageByCode(languageCode);
73
- const finalLanguage = language ? languageCode : DEFAULT_LANGUAGE;
74
- const finalLanguageObj = getLanguageByCode(finalLanguage);
75
- if (!language) {
76
- /* eslint-disable-next-line no-console */
77
- console.warn('[LocalizationStore] ⚠️ Language not found:', languageCode, 'falling back to:', DEFAULT_LANGUAGE);
78
- }
79
- /* eslint-disable-next-line no-console */
80
- if (__DEV__)
81
- console.log('[LocalizationStore] Changing i18n language to:', finalLanguage);
82
- await i18n.changeLanguage(finalLanguage);
83
- /* eslint-disable-next-line no-console */
84
- if (__DEV__)
85
- console.log('[LocalizationStore] Setting store state...');
86
- set({
87
- currentLanguage: finalLanguage,
88
- isRTL: finalLanguageObj?.rtl || false,
89
- isInitialized: true, // ✅ Always set true to unblock UI
90
- });
91
- /* eslint-disable-next-line no-console */
92
- if (__DEV__)
93
- console.log('[LocalizationStore] ✅ Initialization complete. Language:', finalLanguage, 'RTL:', finalLanguageObj?.rtl || false);
94
- }
95
- catch (error) {
96
- /* eslint-disable-next-line no-console */
97
- console.error('[LocalizationStore] ❌ FATAL: Initialization failed:', error);
98
- /* eslint-disable-next-line no-console */
99
- if (error instanceof Error) {
100
- /* eslint-disable-next-line no-console */
101
- console.error('[LocalizationStore] Error name:', error.name);
102
- /* eslint-disable-next-line no-console */
103
- console.error('[LocalizationStore] Error message:', error.message);
104
- /* eslint-disable-next-line no-console */
105
- console.error('[LocalizationStore] Error stack:', error.stack);
106
- }
107
- // Set to default language even on error to prevent app from breaking
108
- try {
109
- await i18n.changeLanguage(DEFAULT_LANGUAGE);
110
- set({
111
- currentLanguage: DEFAULT_LANGUAGE,
112
- isRTL: false,
113
- isInitialized: true, // Set true even on error to unblock UI
114
- });
115
- /* eslint-disable-next-line no-console */
116
- console.warn('[LocalizationStore] ⚠️ Fallback to default language due to error');
117
- }
118
- catch (fallbackError) {
119
- /* eslint-disable-next-line no-console */
120
- console.error('[LocalizationStore] ❌ CRITICAL: Even fallback failed:', fallbackError);
121
- throw fallbackError;
122
- }
123
- }
124
- },
125
- /**
126
- * Change language
127
- * Updates i18n, state, and persists to AsyncStorage
128
- */
129
- setLanguage: async (languageCode) => {
130
- /* eslint-disable-next-line no-console */
131
- if (__DEV__)
132
- console.log('[LocalizationStore] Changing language to:', languageCode);
133
- try {
134
- const language = getLanguageByCode(languageCode);
135
- // ✅ DEFENSIVE: Early return if unsupported language
136
- if (!language) {
137
- /* eslint-disable-next-line no-console */
138
- console.warn('[LocalizationStore] ⚠️ Unsupported language code:', languageCode);
139
- return;
140
- }
141
- /* eslint-disable-next-line no-console */
142
- if (__DEV__)
143
- console.log('[LocalizationStore] Updating i18n language...');
144
- // Update i18n
145
- await i18n.changeLanguage(languageCode);
146
- /* eslint-disable-next-line no-console */
147
- if (__DEV__)
148
- console.log('[LocalizationStore] Updating store state...');
149
- // Update state
150
- set({
151
- currentLanguage: languageCode,
152
- isRTL: language.rtl || false,
153
- });
154
- /* eslint-disable-next-line no-console */
155
- if (__DEV__)
156
- console.log('[LocalizationStore] Persisting language preference...');
157
- // Persist language preference
158
- await StorageWrapper.setString(STORAGE_KEYS.LANGUAGE, languageCode);
159
- /* eslint-disable-next-line no-console */
160
- if (__DEV__)
161
- console.log('[LocalizationStore] ✅ Language changed successfully to:', languageCode);
162
- }
163
- catch (error) {
164
- /* eslint-disable-next-line no-console */
165
- console.error('[LocalizationStore] ❌ Error changing language:', error);
166
- throw error;
167
- }
168
- },
169
- }));
170
- /**
171
- * Hook to use localization
172
- * Provides current language, RTL state, language switching, and translation function
173
- * Uses react-i18next's useTranslation hook to ensure proper i18n instance
174
- */
175
- export const useLocalization = () => {
176
- const { currentLanguage, isRTL, isInitialized, supportedLanguages, setLanguage, initialize, } = useLocalizationStore();
177
- const currentLanguageObject = getLanguageByCode(currentLanguage);
178
- // Use react-i18next's useTranslation hook to ensure proper i18n instance
179
- // This ensures that react-i18next knows about the i18n instance
180
- const { t } = useTranslation();
181
- return {
182
- t, // Translation function from react-i18next
183
- currentLanguage,
184
- currentLanguageObject,
185
- isRTL,
186
- isInitialized,
187
- supportedLanguages,
188
- setLanguage,
189
- initialize,
190
- };
191
- };
192
- //# sourceMappingURL=LocalizationStore.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocalizationStore.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/LocalizationStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAYhH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3E,eAAe,EAAE,gBAAgB;IACjC,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,KAAK;IACpB,kBAAkB,EAAE,mBAAmB;IAEvC;;;;;;OAMG;IACH,UAAU,EAAE,KAAK,IAAI,EAAE;QACrB,yCAAyC;QACzC,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAE3E,IAAI,CAAC;YACH,mEAAmE;YACnE,8CAA8C;YAC9C,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,GAAG,EAAE,CAAC;YACpD,IAAI,kBAAkB,EAAE,CAAC;gBACvB,yCAAyC;gBACzC,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;gBACjF,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YACrF,gCAAgC;YAChC,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAC9F,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,aAAa,CAAC,CAAC;YAE/E,+DAA+D;YAC/D,IAAI,YAAoB,CAAC;YACzB,IAAI,aAAa,IAAI,aAAa,KAAK,gBAAgB,EAAE,CAAC;gBACxD,6DAA6D;gBAC7D,yCAAyC;gBACzC,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,sDAAsD,EAAE,aAAa,CAAC,CAAC;gBAChG,YAAY,GAAG,aAAa,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,yCAAyC;gBACzC,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;gBACzF,YAAY,GAAG,eAAe,EAAE,CAAC;gBACjC,yCAAyC;gBACzC,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,YAAY,CAAC,CAAC;gBACtF,2CAA2C;gBAC3C,MAAM,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACpE,yCAAyC;gBACzC,IAAI,OAAO;oBAAE,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACnF,CAAC;YAED,6DAA6D;YAC7D,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,YAAY,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACjE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAE1D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,yCAAyC;gBACzC,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;YACjH,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,aAAa,CAAC,CAAC;YAC1F,MAAM,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAEzC,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YACvE,GAAG,CAAC;gBACF,eAAe,EAAE,aAAa;gBAC9B,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,KAAK;gBACrC,aAAa,EAAE,IAAI,EAAE,kCAAkC;aACxD,CAAC,CAAC;YAEH,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;QAC9I,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAC;YAC5E,yCAAyC;YACzC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,yCAAyC;gBACzC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7D,yCAAyC;gBACzC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnE,yCAAyC;gBACzC,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;YACD,qEAAqE;YACrE,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;gBAC5C,GAAG,CAAC;oBACF,eAAe,EAAE,gBAAgB;oBACjC,KAAK,EAAE,KAAK;oBACZ,aAAa,EAAE,IAAI,EAAE,uCAAuC;iBAC7D,CAAC,CAAC;gBACH,yCAAyC;gBACzC,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YACnF,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,yCAAyC;gBACzC,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,aAAa,CAAC,CAAC;gBACtF,MAAM,aAAa,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,WAAW,EAAE,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC1C,yCAAyC;QACzC,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,YAAY,CAAC,CAAC;QAEpF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAEjD,oDAAoD;YACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,yCAAyC;gBACzC,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,YAAY,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YAED,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC1E,cAAc;YACd,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAExC,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YACxE,eAAe;YACf,GAAG,CAAC;gBACF,eAAe,EAAE,YAAY;gBAC7B,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,KAAK;aAC7B,CAAC,CAAC;YAEH,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YAClF,8BAA8B;YAC9B,MAAM,cAAc,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEpE,yCAAyC;YACzC,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,yDAAyD,EAAE,YAAY,CAAC,CAAC;QACpG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;YACvE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC,CAAC,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,MAAM,EACJ,eAAe,EACf,KAAK,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,UAAU,GACX,GAAG,oBAAoB,EAAE,CAAC;IAE3B,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAEjE,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IAE/B,OAAO;QACL,CAAC,EAAE,0CAA0C;QAC7C,eAAe;QACf,qBAAqB;QACrB,KAAK;QACL,aAAa;QACb,kBAAkB;QAClB,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC,CAAC"}