typed-locales 1.0.44 → 1.0.45
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/dist/{react.d.ts → adapters/react.d.ts} +4 -4
- package/dist/adapters/react.d.ts.map +1 -0
- package/dist/{react.js → adapters/react.js} +15 -6
- package/dist/adapters/zustand.d.ts +12 -0
- package/dist/adapters/zustand.d.ts.map +1 -0
- package/dist/adapters/zustand.js +33 -0
- package/dist/index.d.ts +28 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/package.json +3 -2
- package/dist/react.d.ts.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { getTranslate, createNamespaceTranslate, type ExtraFormatters, type Locales, type TranslationType, type NameSpaces } from '
|
|
2
|
+
import { getTranslate, createNamespaceTranslate, type ExtraFormatters, type Locales, type TranslationType, type NameSpaces } from '../index.js';
|
|
3
3
|
export interface TranslationContextType {
|
|
4
4
|
isLoading: boolean;
|
|
5
|
-
locale
|
|
5
|
+
locale?: Locales;
|
|
6
6
|
setLocale: (locale: Locales) => Promise<Locales>;
|
|
7
7
|
t: ReturnType<typeof getTranslate>;
|
|
8
8
|
}
|
|
9
|
-
export declare const initReact: (
|
|
9
|
+
export declare const initReact: (allTranslations: Record<Locales, () => Promise<{
|
|
10
10
|
default: TranslationType;
|
|
11
|
-
}
|
|
11
|
+
}>>, extraFormatters: ExtraFormatters, fallbackLocale?: Locales) => {
|
|
12
12
|
TranslationProvider: ({ children }: {
|
|
13
13
|
children: React.ReactNode;
|
|
14
14
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/adapters/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAEzF,OAAO,EACN,YAAY,EACZ,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,SAAS,GACrB,iBAAiB,MAAM,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,EAC7E,iBAAiB,eAAe,EAChC,iBAAiB,OAAO;wCAImB;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;YAuE7C,sBAAsB;SACzB,EAAE,SAAS,UAAU,aAAa,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAAG;YAClG,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;SACnD;;CAmBD,CAAC"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
|
3
|
-
import { getTranslate, createNamespaceTranslate } from '
|
|
3
|
+
import { getTranslate, createNamespaceTranslate } from '../index.js';
|
|
4
4
|
// Initial translation always should be loaded
|
|
5
|
-
export const initReact = (
|
|
5
|
+
export const initReact = (allTranslations, extraFormatters, fallbackLocale) => {
|
|
6
6
|
const TranslationContext = createContext(undefined);
|
|
7
|
-
const initialTranslate = getTranslate(initialTranslation, initialLocale, extraFormatters);
|
|
8
7
|
const TranslationProvider = ({ children }) => {
|
|
9
8
|
const [state, setState] = useState({
|
|
10
9
|
isLoading: false,
|
|
11
|
-
locale:
|
|
12
|
-
translate:
|
|
10
|
+
locale: undefined,
|
|
11
|
+
translate: ((key) => key),
|
|
13
12
|
});
|
|
14
13
|
const setLocale = useCallback(async (targetLocale) => {
|
|
15
14
|
try {
|
|
@@ -22,10 +21,20 @@ export const initReact = (initialTranslation, initialLocale, allTranslations, ex
|
|
|
22
21
|
else {
|
|
23
22
|
translationData = translationOrLoader;
|
|
24
23
|
}
|
|
24
|
+
let fallbackTranslationData;
|
|
25
|
+
if (fallbackLocale) {
|
|
26
|
+
const fallbackTranslationOrLoader = allTranslations[targetLocale];
|
|
27
|
+
if (typeof fallbackTranslationOrLoader === 'function') {
|
|
28
|
+
fallbackTranslationData = await fallbackTranslationOrLoader().then(t => t.default);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
fallbackTranslationData = fallbackTranslationOrLoader;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
25
34
|
setState({
|
|
26
35
|
isLoading: false,
|
|
27
36
|
locale: targetLocale,
|
|
28
|
-
translate: getTranslate(translationData, targetLocale, extraFormatters,
|
|
37
|
+
translate: getTranslate(translationData, targetLocale, extraFormatters, fallbackLocale === targetLocale || !fallbackLocale ? undefined : getTranslate(fallbackTranslationData, fallbackLocale, extraFormatters)),
|
|
29
38
|
});
|
|
30
39
|
}
|
|
31
40
|
catch (error) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ExtraFormatters, getTranslate, type Locales, type TranslationType } from '../index.js';
|
|
2
|
+
interface TranslationState {
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
locale?: Locales;
|
|
5
|
+
setLocale: (locale: Locales) => Promise<void>;
|
|
6
|
+
t: ReturnType<typeof getTranslate>;
|
|
7
|
+
}
|
|
8
|
+
export declare const initZustand: (allTranslations: Record<Locales, () => Promise<{
|
|
9
|
+
default: TranslationType;
|
|
10
|
+
}>>, extraFormatters: ExtraFormatters, fallbackLocale?: Locales) => import("zustand").UseBoundStore<import("zustand").StoreApi<TranslationState>>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=zustand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zustand.d.ts","sourceRoot":"","sources":["../../src/adapters/zustand.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,eAAe,EACpB,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,MAAM,aAAa,CAAC;AAErB,UAAU,gBAAgB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,WAAW,GACvB,iBAAiB,MAAM,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,EAC7E,iBAAiB,eAAe,EAChC,iBAAiB,OAAO,kFAgDxB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { create } from 'zustand';
|
|
2
|
+
import { getTranslate, } from '../index.js';
|
|
3
|
+
export const initZustand = (allTranslations, extraFormatters, fallbackLocale) => {
|
|
4
|
+
const useTranslation = create((set, get) => ({
|
|
5
|
+
isLoading: false,
|
|
6
|
+
locale: undefined,
|
|
7
|
+
setLocale: async (targetLocale) => {
|
|
8
|
+
try {
|
|
9
|
+
if (get().locale === targetLocale) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
set({ isLoading: true });
|
|
13
|
+
const translationData = await allTranslations[targetLocale]().then(t => t.default);
|
|
14
|
+
let fallbackTranslate;
|
|
15
|
+
if (fallbackLocale && fallbackLocale !== targetLocale) {
|
|
16
|
+
const fallbackData = await allTranslations[fallbackLocale]().then(t => t.default);
|
|
17
|
+
fallbackTranslate = getTranslate(fallbackData, fallbackLocale, extraFormatters);
|
|
18
|
+
}
|
|
19
|
+
set({
|
|
20
|
+
isLoading: false,
|
|
21
|
+
locale: targetLocale,
|
|
22
|
+
t: getTranslate(translationData, targetLocale, extraFormatters, fallbackTranslate),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(`Failed to load locale ${String(targetLocale)}:`, error);
|
|
27
|
+
set({ isLoading: false });
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
t: ((key) => key),
|
|
31
|
+
}));
|
|
32
|
+
return useTranslation;
|
|
33
|
+
};
|
package/dist/index.d.ts
CHANGED
|
@@ -31,54 +31,46 @@ export type ExtraFormatters = Overrides['extraFormatters'];
|
|
|
31
31
|
export type FormatterTypes = keyof ExtraFormatters | keyof typeof formatters;
|
|
32
32
|
export type TranslateFunctionType = ReturnType<typeof getTranslate>;
|
|
33
33
|
/** Get all possible translations for a given namespace */
|
|
34
|
-
export type NamespaceKeys<
|
|
34
|
+
export type NamespaceKeys<Namespace extends NameSpaces> = FilterByPrefix<PossibleTranslationKeys, Namespace>;
|
|
35
35
|
type TranslatedMark = {
|
|
36
36
|
translated: true;
|
|
37
37
|
};
|
|
38
38
|
/** Ensure a string is translated */
|
|
39
39
|
export type TranslatedString = string & TranslatedMark;
|
|
40
|
-
export type InterpolationProperties<Key extends PossibleTranslationKeys, Value extends string = GetValue<Key
|
|
40
|
+
export type InterpolationProperties<Key extends PossibleTranslationKeys, Value extends string = GetValue<Key>> = DeepResolve<IsPlural<Key> extends true ? {
|
|
41
41
|
count: number;
|
|
42
|
-
} &
|
|
43
|
-
|
|
44
|
-
type: any;
|
|
45
|
-
}>> : ExtractPlaceholders<Value> extends never ? {} : PlaceholderInfoToObject<ExtractPlaceholdersWithTypes<Value>>>;
|
|
42
|
+
} & Omit<ExtractParams<Value>, 'count'> : ExtractParams<Value>>;
|
|
43
|
+
type ExtractParams<Value extends string> = Value extends `${infer _}{${infer _}}${infer _}` ? PlaceholderInfoToObject<ExtractPlaceholders<Value>> : {};
|
|
46
44
|
declare const pluralSufixes: readonly ["_none", "_one", "_other"];
|
|
47
45
|
type PluralSuffix = (typeof pluralSufixes)[number];
|
|
48
|
-
type FilterByPrefix<T, Prefix extends
|
|
49
|
-
type RemovePluralSuffix<T extends string> = T extends `${infer Base}
|
|
46
|
+
type FilterByPrefix<T, Prefix extends string> = T extends `${Prefix}.${infer Rest}` ? Rest : never;
|
|
47
|
+
type RemovePluralSuffix<T extends string> = T extends `${infer Base}_none` ? Base : T extends `${infer Base}_one` ? Base : T extends `${infer Base}_other` ? Base : T;
|
|
50
48
|
type PluralKeys<Base extends string> = `${Base}${PluralSuffix}`;
|
|
51
|
-
type DotNestedStringKeys<T> = {
|
|
52
|
-
[K in keyof T]: K extends string ? T[K] extends Record<string, any> ?
|
|
53
|
-
}[keyof T];
|
|
54
|
-
type DotNestedObjectKeys<T> = {
|
|
55
|
-
[K in keyof T]: K extends string ? T[K] extends Record<string, any> ? K |
|
|
56
|
-
}[keyof T];
|
|
49
|
+
type DotNestedStringKeys<T, Prefix extends string = ''> = T extends object ? {
|
|
50
|
+
[K in keyof T]: K extends string ? T[K] extends Record<string, any> ? DotNestedStringKeys<T[K], `${Prefix}${K}.`> : `${Prefix}${RemovePluralSuffix<K>}` : never;
|
|
51
|
+
}[keyof T] : never;
|
|
52
|
+
type DotNestedObjectKeys<T, Prefix extends string = ''> = T extends object ? {
|
|
53
|
+
[K in keyof T]: K extends string ? T[K] extends Record<string, any> ? `${Prefix}${K}` | DotNestedObjectKeys<T[K], `${Prefix}${K}.`> : never : never;
|
|
54
|
+
}[keyof T] : never;
|
|
57
55
|
export type GenerateTranslationType<T> = {
|
|
58
|
-
[K in keyof T as IsPlural<RemovePluralSuffix<K & string
|
|
56
|
+
[K in keyof T as IsPlural<RemovePluralSuffix<K & string> & PossibleTranslationKeys> extends true ? never : K]: T[K] extends object ? GenerateTranslationType<T[K]> : string;
|
|
59
57
|
} & {
|
|
60
|
-
[K in keyof T as IsPlural<RemovePluralSuffix<K & string
|
|
58
|
+
[K in keyof T as IsPlural<RemovePluralSuffix<K & string> & PossibleTranslationKeys> extends true ? K | PluralKeys<RemovePluralSuffix<K & string>> : never]?: T[K] extends object ? GenerateTranslationType<T[K]> : string;
|
|
61
59
|
};
|
|
62
|
-
type
|
|
60
|
+
type ExtractPlaceholders<T extends string, Acc = never> = T extends `${infer Start}{${infer P}}${infer Rest}` ? Start extends `${infer _}{${infer _}` ? Acc : ExtractPlaceholders<Rest, Acc | ParsePlaceholder<P>> : Acc;
|
|
61
|
+
type ParsePlaceholder<P extends string> = P extends `${infer Name}:${infer Type}|${infer _}` ? {
|
|
63
62
|
name: Name;
|
|
64
|
-
type: TypeMap[Type];
|
|
65
|
-
} : {
|
|
66
|
-
name: Name;
|
|
67
|
-
type: ValueType;
|
|
68
|
-
} : T extends `${infer Name}:${infer Type}` ? Type extends keyof TypeMap ? {
|
|
69
|
-
name: Name;
|
|
70
|
-
type: TypeMap[Type];
|
|
71
|
-
} : {
|
|
63
|
+
type: Type extends keyof TypeMap ? TypeMap[Type] : ValueType;
|
|
64
|
+
} : P extends `${infer Name}:${infer Type}` ? {
|
|
72
65
|
name: Name;
|
|
73
|
-
type: ValueType;
|
|
74
|
-
} :
|
|
66
|
+
type: Type extends keyof TypeMap ? TypeMap[Type] : ValueType;
|
|
67
|
+
} : P extends `${infer Name}|${infer _}` ? {
|
|
75
68
|
name: Name;
|
|
76
69
|
type: ValueType;
|
|
77
70
|
} : {
|
|
78
|
-
name:
|
|
71
|
+
name: P;
|
|
79
72
|
type: ValueType;
|
|
80
73
|
};
|
|
81
|
-
type ExtractPlaceholdersWithTypes<T extends string, Acc = never> = T extends `${infer _Start}{${infer Placeholder}}${infer Rest}` ? ExtractPlaceholdersWithTypes<Rest, Acc | ExtractPlaceholderInfo<Placeholder>> : Acc;
|
|
82
74
|
type PlaceholderInfoToObject<T> = {
|
|
83
75
|
[K in T extends {
|
|
84
76
|
name: infer N extends string;
|
|
@@ -88,11 +80,10 @@ type PlaceholderInfoToObject<T> = {
|
|
|
88
80
|
type: infer Type;
|
|
89
81
|
} ? Type : never;
|
|
90
82
|
};
|
|
91
|
-
type ExtractPlaceholders<T extends string> = T extends `${infer _Start}{${infer Placeholder}}${infer Rest}` ? (Placeholder extends `${infer Name}:${infer _TypeAndFormatters}` ? Name : Placeholder extends `${infer Name}|${infer _Formatters}` ? Name : Placeholder) | ExtractPlaceholders<Rest> : never;
|
|
92
83
|
type HasPluralKeys<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? HasPluralKeys<T[K], Rest> : false : PluralKeys<Path> & keyof T extends never ? false : true;
|
|
93
84
|
type IsPlural<Path extends string> = HasPluralKeys<Translations, Path>;
|
|
94
|
-
type InternalGetValue<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? InternalGetValue<T[K], Rest> :
|
|
95
|
-
type GetValue<
|
|
85
|
+
type InternalGetValue<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? InternalGetValue<T[K], Rest> : string : Path extends keyof T ? T[Path] : T[PluralKeys<Path> & keyof T] extends infer V ? unknown extends V ? string : Exclude<V, undefined> : string;
|
|
86
|
+
type GetValue<S extends PossibleTranslationKeys> = Exclude<InternalGetValue<Translations, S>, undefined>;
|
|
96
87
|
export type DeepResolve<T> = T extends (...args: any[]) => any ? T : T extends object ? {
|
|
97
88
|
-readonly [K in keyof T]: DeepResolve<T[K]>;
|
|
98
89
|
} : T;
|
|
@@ -130,7 +121,7 @@ export declare const createNamespaceTranslate: <NameSpace extends NameSpaces>(na
|
|
|
130
121
|
readonly test2_one: "Plural one";
|
|
131
122
|
readonly test2_other: "Plural: {count}";
|
|
132
123
|
readonly customFormatter: "Test formatter {data|customFormatter}";
|
|
133
|
-
}, `${NameSpace}.${Key}` & "
|
|
124
|
+
}, `${NameSpace}.${Key}` & "nested.deep.hello">, undefined> | Exclude<InternalGetValue<{
|
|
134
125
|
readonly test: "Hello {who:string|capitalize}!";
|
|
135
126
|
readonly nested: {
|
|
136
127
|
readonly deep: {
|
|
@@ -141,7 +132,7 @@ export declare const createNamespaceTranslate: <NameSpace extends NameSpaces>(na
|
|
|
141
132
|
readonly test2_one: "Plural one";
|
|
142
133
|
readonly test2_other: "Plural: {count}";
|
|
143
134
|
readonly customFormatter: "Test formatter {data|customFormatter}";
|
|
144
|
-
}, `${NameSpace}.${Key}` & "nested.deep.
|
|
135
|
+
}, `${NameSpace}.${Key}` & "nested.deep.again">, undefined> | Exclude<InternalGetValue<{
|
|
145
136
|
readonly test: "Hello {who:string|capitalize}!";
|
|
146
137
|
readonly nested: {
|
|
147
138
|
readonly deep: {
|
|
@@ -152,8 +143,9 @@ export declare const createNamespaceTranslate: <NameSpace extends NameSpaces>(na
|
|
|
152
143
|
readonly test2_one: "Plural one";
|
|
153
144
|
readonly test2_other: "Plural: {count}";
|
|
154
145
|
readonly customFormatter: "Test formatter {data|customFormatter}";
|
|
155
|
-
}, `${NameSpace}.${Key}` & "
|
|
156
|
-
export { initReact } from './react.js';
|
|
146
|
+
}, `${NameSpace}.${Key}` & "test2">, undefined>) & TranslatedMark;
|
|
147
|
+
export { initReact } from './adapters/react.js';
|
|
148
|
+
export { initZustand } from './adapters/zustand.js';
|
|
157
149
|
export { type Formatter, default as defaultFormatters } from './formatters.js';
|
|
158
150
|
export { type ValidateTranslation, type EnsureValidTranslation, } from './validation.js';
|
|
159
151
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
1
2
|
import baseFormatters from './formatters.js';
|
|
2
|
-
// TODO add more
|
|
3
3
|
const pluralSufixes = ['_none', '_one', '_other'];
|
|
4
|
-
//
|
|
4
|
+
// Runtime implementation remains the same
|
|
5
5
|
export const getTranslate = (translations, locale, extraFormatters, baseTranslate) => {
|
|
6
6
|
const formatters = { ...baseFormatters, ...extraFormatters };
|
|
7
7
|
function translate(key, ...arguments_) {
|
|
@@ -88,5 +88,6 @@ export const createNamespaceTranslate = (namespace, translateFn) => {
|
|
|
88
88
|
return translateFn(fullKey, ...args);
|
|
89
89
|
};
|
|
90
90
|
};
|
|
91
|
-
export { initReact } from './react.js';
|
|
91
|
+
export { initReact } from './adapters/react.js';
|
|
92
|
+
export { initZustand } from './adapters/zustand.js';
|
|
92
93
|
export { default as defaultFormatters } from './formatters.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typed-locales",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.45",
|
|
4
4
|
"description": "Type safe utilities for translating strings",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"react": "^19.1.0",
|
|
20
20
|
"rimraf": "^6.0.1",
|
|
21
21
|
"tsx": "^4.19.4",
|
|
22
|
-
"typescript": "^5.8.3"
|
|
22
|
+
"typescript": "^5.8.3",
|
|
23
|
+
"zustand": "^5.0.5"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@eslint/js": "^9.28.0",
|
package/dist/react.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoE,MAAM,OAAO,CAAC;AAEzF,OAAO,EACN,YAAY,EACZ,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,sBAAsB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACnC;AAGD,eAAO,MAAM,SAAS,GACrB,oBAAoB,eAAe,EACnC,eAAe,OAAO,EACtB,iBAAiB,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAAC,GAAG,eAAe,CAAC,EACjG,iBAAiB,eAAe;wCAKW;QAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE;;YAwD7C,sBAAsB;SACzB,EAAE,SAAS,UAAU,aAAa,EAAE,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,GAAG;YAClG,CAAC,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;SACnD;;CAmBD,CAAC"}
|