piral-translate 1.0.0-pre.2296 → 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.
- package/LICENSE +1 -1
- package/README.md +12 -2
- package/esm/Languages.js +2 -2
- package/esm/Languages.js.map +1 -1
- package/esm/actions.js +17 -19
- package/esm/actions.js.map +1 -1
- package/esm/components.d.ts +2 -3
- package/esm/components.js +1 -1
- package/esm/components.js.map +1 -1
- package/esm/create.js +39 -19
- package/esm/create.js.map +1 -1
- package/esm/current.js +2 -2
- package/esm/current.js.map +1 -1
- package/esm/default.d.ts +2 -2
- package/esm/default.js +1 -1
- package/esm/default.js.map +1 -1
- package/esm/hooks.js +12 -10
- package/esm/hooks.js.map +1 -1
- package/esm/localize.d.ts +2 -2
- package/esm/localize.js +20 -23
- package/esm/localize.js.map +1 -1
- package/esm/types.d.ts +24 -4
- package/lib/Languages.js +6 -5
- package/lib/Languages.js.map +1 -1
- package/lib/actions.js +17 -19
- package/lib/actions.js.map +1 -1
- package/lib/components.d.ts +2 -3
- package/lib/components.js +2 -2
- package/lib/components.js.map +1 -1
- package/lib/create.js +43 -23
- package/lib/create.js.map +1 -1
- package/lib/current.js +3 -3
- package/lib/current.js.map +1 -1
- package/lib/default.d.ts +2 -2
- package/lib/default.js +3 -2
- package/lib/default.js.map +1 -1
- package/lib/hooks.js +14 -12
- package/lib/hooks.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/localize.d.ts +2 -2
- package/lib/localize.js +20 -22
- package/lib/localize.js.map +1 -1
- package/lib/types.d.ts +24 -4
- package/package.json +33 -6
- package/piral-translate.min.js +1 -0
- package/src/actions.test.ts +134 -5
- package/src/components.tsx +1 -3
- package/src/create.test.ts +122 -3
- package/src/create.ts +32 -3
- package/src/default.tsx +2 -1
- package/src/hooks.ts +3 -1
- package/src/localize.ts +5 -5
- package/src/types.ts +24 -5
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
[](https://piral.io)
|
|
2
2
|
|
|
3
|
-
# [Piral Translate](https://piral.io) · [](https://github.com/smapiot/piral/blob/
|
|
3
|
+
# [Piral Translate](https://piral.io) · [](https://github.com/smapiot/piral/blob/main/LICENSE) [](https://www.npmjs.com/package/piral-translate) [](https://jestjs.io) [](https://gitter.im/piral-io/community)
|
|
4
4
|
|
|
5
5
|
This is a plugin that only has a peer dependency to `piral-core`. What `piral-translate` brings to the table is a set of Pilet API extensions that is used by `piral`. The set features a simple yet sufficient translation system.
|
|
6
6
|
|
|
@@ -10,6 +10,12 @@ One of the key non-functional requirements of many applications is to be localiz
|
|
|
10
10
|
|
|
11
11
|
Alternatives: Use a library such as `i18next` as a shared library. Choose one that makes working with your content authors or translation team easier.
|
|
12
12
|
|
|
13
|
+
## Video
|
|
14
|
+
|
|
15
|
+
We also have a video for this plugin:
|
|
16
|
+
|
|
17
|
+
@[youtube](https://youtu.be/Hh-CrOTDSnA)
|
|
18
|
+
|
|
13
19
|
## Documentation
|
|
14
20
|
|
|
15
21
|
The following functions are brought to the Pilet API.
|
|
@@ -28,6 +34,10 @@ Sets the translations (custom language to key to string mapping) for the pilet.
|
|
|
28
34
|
|
|
29
35
|
Gets the translations defined in the pilet.
|
|
30
36
|
|
|
37
|
+
### `addTranslations()`
|
|
38
|
+
|
|
39
|
+
Adds a list of translations (custom language to key to string mapping) to the existing translations for the pilet.
|
|
40
|
+
|
|
31
41
|
## Usage
|
|
32
42
|
|
|
33
43
|
::: summary: For pilet authors
|
package/esm/Languages.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { useGlobalState } from 'piral-core';
|
|
3
3
|
import { PiralLanguagesPicker } from './components';
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export const Languages = () => {
|
|
5
|
+
const { available, selected } = useGlobalState((m) => m.language);
|
|
6
6
|
return React.createElement(PiralLanguagesPicker, { selected: selected, available: available });
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=Languages.js.map
|
package/esm/Languages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Languages.js","sourceRoot":"","sources":["../src/Languages.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"Languages.js","sourceRoot":"","sources":["../src/Languages.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,CAAC,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,oBAAC,oBAAoB,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AAC5E,CAAC,CAAC"}
|
package/esm/actions.js
CHANGED
|
@@ -1,43 +1,41 @@
|
|
|
1
|
-
import { __assign } from "tslib";
|
|
2
1
|
export function createActions(localizer) {
|
|
3
2
|
return {
|
|
4
|
-
selectLanguage
|
|
5
|
-
ctx.dispatch(
|
|
3
|
+
selectLanguage(ctx, selected) {
|
|
4
|
+
ctx.dispatch((state) => {
|
|
6
5
|
localizer.language = selected;
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const previousLanguage = state.language.selected;
|
|
7
|
+
const currentLanguage = selected;
|
|
9
8
|
// emit this event *after* we changed the state container
|
|
10
|
-
setTimeout(
|
|
9
|
+
setTimeout(() => {
|
|
11
10
|
ctx.emit('select-language', {
|
|
12
|
-
previousLanguage
|
|
13
|
-
currentLanguage
|
|
11
|
+
previousLanguage,
|
|
12
|
+
currentLanguage,
|
|
14
13
|
});
|
|
15
14
|
}, 0);
|
|
16
|
-
return
|
|
15
|
+
return Object.assign(Object.assign({}, state), { language: Object.assign(Object.assign({}, state.language), { loading: selected === undefined, selected }) });
|
|
17
16
|
});
|
|
18
17
|
},
|
|
19
|
-
translate
|
|
18
|
+
translate(_, key, variables) {
|
|
20
19
|
return localizer && localizer.localizeGlobal(key, variables);
|
|
21
20
|
},
|
|
22
|
-
setTranslations
|
|
21
|
+
setTranslations(ctx, language, data) {
|
|
23
22
|
localizer.messages[language] = data.global;
|
|
24
|
-
for (
|
|
25
|
-
|
|
26
|
-
var api = ctx.apis[item.name];
|
|
23
|
+
for (const item of data.locals) {
|
|
24
|
+
const api = ctx.apis[item.name];
|
|
27
25
|
if (api) {
|
|
28
|
-
|
|
26
|
+
const translations = api.getTranslations();
|
|
29
27
|
translations[language] = item.value;
|
|
30
28
|
api.setTranslations(translations);
|
|
31
29
|
}
|
|
32
30
|
}
|
|
33
31
|
},
|
|
34
|
-
getTranslations
|
|
32
|
+
getTranslations(ctx, language) {
|
|
35
33
|
return {
|
|
36
34
|
global: localizer.messages[language],
|
|
37
|
-
locals: Object.keys(ctx.apis).map(
|
|
38
|
-
name
|
|
35
|
+
locals: Object.keys(ctx.apis).map((name) => ({
|
|
36
|
+
name,
|
|
39
37
|
value: ctx.apis[name].getTranslations()[language],
|
|
40
|
-
})
|
|
38
|
+
})),
|
|
41
39
|
};
|
|
42
40
|
},
|
|
43
41
|
};
|
package/esm/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,SAAsB;IAClD,OAAO;QACL,cAAc,CAAC,GAAuB,EAAE,QAAgB;YACtD,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACjD,MAAM,eAAe,GAAG,QAAQ,CAAC;gBAEjC,yDAAyD;gBACzD,UAAU,CAAC,GAAG,EAAE;oBACd,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBAC1B,gBAAgB;wBAChB,eAAe;qBAChB,CAAC,CAAC;gBACL,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEN,uCACK,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,OAAO,EAAE,QAAQ,KAAK,SAAS,EAC/B,QAAQ,OAEV;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,SAAS,CAAC,CAAqB,EAAE,GAAW,EAAE,SAAc;YAC1D,OAAO,SAAS,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QACD,eAAe,CAAC,GAAuB,EAAE,QAAgB,EAAE,IAAI;YAC7D,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEhC,IAAI,GAAG,EAAE;oBACP,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;oBAC3C,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oBACpC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;iBACnC;aACF;QACH,CAAC;QACD,eAAe,CAAC,GAAuB,EAAE,QAAgB;YACvD,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACpC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI;oBACJ,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;iBAClD,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/esm/components.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare const PiralLanguagesPicker: React.ComponentType<LanguagesPickerProps>;
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const PiralLanguagesPicker: import("react").ComponentType<import("./types").LanguagesPickerProps>;
|
package/esm/components.js
CHANGED
package/esm/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC"}
|
package/esm/create.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as deepmerge from 'deepmerge';
|
|
2
2
|
import { createActions } from './actions';
|
|
3
3
|
import { Localizer } from './localize';
|
|
4
4
|
import { DefaultPicker } from './default';
|
|
@@ -6,39 +6,59 @@ import { DefaultPicker } from './default';
|
|
|
6
6
|
* Sets up a new localizer by using the given config.
|
|
7
7
|
* @param config The configuration for the new localizer.
|
|
8
8
|
*/
|
|
9
|
-
export function setupLocalizer(config) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var language = usedLang || defaultLang;
|
|
9
|
+
export function setupLocalizer(config = {}) {
|
|
10
|
+
const msgs = config.messages || {};
|
|
11
|
+
const languages = Object.keys(msgs);
|
|
12
|
+
const defaultLang = languages[0] || 'en';
|
|
13
|
+
const computeLang = config.language;
|
|
14
|
+
const usedLang = typeof computeLang === 'function' ? computeLang(languages, defaultLang, 'en') : computeLang;
|
|
15
|
+
const language = usedLang || defaultLang;
|
|
17
16
|
return new Localizer(msgs, language, languages.length ? languages : [language], config.fallback);
|
|
18
17
|
}
|
|
19
18
|
/**
|
|
20
19
|
* Creates new Pilet API extensions for localization.
|
|
21
20
|
* @param localizer The specific localizer to be used, if any.
|
|
22
21
|
*/
|
|
23
|
-
export function createLocaleApi(localizer) {
|
|
24
|
-
|
|
25
|
-
return function (context) {
|
|
22
|
+
export function createLocaleApi(localizer = setupLocalizer()) {
|
|
23
|
+
return (context) => {
|
|
26
24
|
context.defineActions(createActions(localizer));
|
|
27
|
-
context.dispatch(
|
|
25
|
+
context.dispatch((state) => (Object.assign(Object.assign({}, state), { components: Object.assign({ LanguagesPicker: DefaultPicker }, state.components), language: {
|
|
28
26
|
loading: false,
|
|
29
27
|
available: localizer.languages,
|
|
30
28
|
selected: localizer.language,
|
|
31
|
-
} }))
|
|
32
|
-
return
|
|
33
|
-
|
|
29
|
+
} })));
|
|
30
|
+
return (api) => {
|
|
31
|
+
let localTranslations = {};
|
|
34
32
|
return {
|
|
35
|
-
|
|
33
|
+
addTranslations(messages, isOverriding = true) {
|
|
34
|
+
const messagesToMerge = messages;
|
|
35
|
+
if (isOverriding) {
|
|
36
|
+
messagesToMerge.unshift(localizer.messages);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
messagesToMerge.push(localizer.messages);
|
|
40
|
+
}
|
|
41
|
+
this.setTranslations(deepmerge.all(messagesToMerge));
|
|
42
|
+
},
|
|
43
|
+
getCurrentLanguage(cb) {
|
|
44
|
+
const selected = context.readState((s) => s.language.selected);
|
|
45
|
+
if (cb) {
|
|
46
|
+
cb(selected);
|
|
47
|
+
const handler = (ev) => {
|
|
48
|
+
cb(ev.currentLanguage);
|
|
49
|
+
};
|
|
50
|
+
api.on('select-language', handler);
|
|
51
|
+
return () => api.off('select-language', handler);
|
|
52
|
+
}
|
|
53
|
+
return selected;
|
|
54
|
+
},
|
|
55
|
+
setTranslations(messages) {
|
|
36
56
|
localTranslations = messages;
|
|
37
57
|
},
|
|
38
|
-
getTranslations
|
|
58
|
+
getTranslations() {
|
|
39
59
|
return localTranslations;
|
|
40
60
|
},
|
|
41
|
-
translate
|
|
61
|
+
translate(tag, variables) {
|
|
42
62
|
return localizer.localizeLocal(localTranslations, tag, variables);
|
|
43
63
|
},
|
|
44
64
|
};
|
package/esm/create.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
|
package/esm/current.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cookie, storage } from 'piral-core';
|
|
2
2
|
function getUserLocaleUnchecked(defaultLocale, remoteLocale) {
|
|
3
|
-
|
|
3
|
+
const storedLocale = cookie.getItem('_culture') || storage.getItem('locale');
|
|
4
4
|
if (storedLocale) {
|
|
5
5
|
return storedLocale;
|
|
6
6
|
}
|
|
@@ -13,7 +13,7 @@ function getUserLocaleUnchecked(defaultLocale, remoteLocale) {
|
|
|
13
13
|
return defaultLocale;
|
|
14
14
|
}
|
|
15
15
|
export function getUserLocale(availableLocales, defaultLocale, fallbackLocale) {
|
|
16
|
-
|
|
16
|
+
const selected = getUserLocaleUnchecked(defaultLocale, fallbackLocale || '');
|
|
17
17
|
if (availableLocales.indexOf(selected) !== -1) {
|
|
18
18
|
return selected;
|
|
19
19
|
}
|
package/esm/current.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"current.js","sourceRoot":"","sources":["../src/current.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7C,SAAS,sBAAsB,CAAC,aAAqB,EAAE,YAAoB;IACzE,
|
|
1
|
+
{"version":3,"file":"current.js","sourceRoot":"","sources":["../src/current.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7C,SAAS,sBAAsB,CAAC,aAAqB,EAAE,YAAoB;IACzE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE7E,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC;KACrB;SAAM,IAAI,YAAY,EAAE;QACvB,OAAO,YAAY,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;SAAM,IAAI,SAAS,CAAC,QAAQ,EAAE;QAC7B,OAAO,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3C;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,gBAA+B,EAAE,aAAqB,EAAE,cAAuB;IAC3G,MAAM,QAAQ,GAAG,sBAAsB,CAAC,aAAa,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;IAE7E,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;QAC7C,OAAO,QAAQ,CAAC;KACjB;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
package/esm/default.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { FC } from 'react';
|
|
2
2
|
import { LanguagesPickerProps } from './types';
|
|
3
|
-
export declare const DefaultPicker:
|
|
3
|
+
export declare const DefaultPicker: FC<LanguagesPickerProps>;
|
package/esm/default.js
CHANGED
package/esm/default.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../src/default.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,CAAC,MAAM,aAAa,GAA6B,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC"}
|
package/esm/hooks.js
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import { useActions, useGlobalState } from 'piral-core';
|
|
3
3
|
export function useDynamicLanguage(defaultSelected, load) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
useEffect(
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const [selected, setSelected] = useState(defaultSelected);
|
|
5
|
+
const { selectLanguage, setTranslations, getTranslations } = useActions();
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
let active = true;
|
|
8
|
+
const current = getTranslations(selected);
|
|
9
9
|
selectLanguage(undefined);
|
|
10
|
-
load(selected, current).then(
|
|
10
|
+
load(selected, current).then((result) => {
|
|
11
11
|
if (active) {
|
|
12
12
|
setTranslations(selected, result);
|
|
13
13
|
selectLanguage(selected);
|
|
14
14
|
}
|
|
15
|
-
},
|
|
16
|
-
return
|
|
15
|
+
}, (err) => console.error(err));
|
|
16
|
+
return () => {
|
|
17
|
+
active = false;
|
|
18
|
+
};
|
|
17
19
|
}, [selected]);
|
|
18
20
|
return [selected, setSelected];
|
|
19
21
|
}
|
|
20
22
|
export function useTranslate() {
|
|
21
|
-
|
|
22
|
-
useGlobalState(
|
|
23
|
+
const { translate } = useActions();
|
|
24
|
+
useGlobalState((m) => m.language.selected);
|
|
23
25
|
return translate;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=hooks.js.map
|
package/esm/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,UAAU,kBAAkB,CAChC,eAAuB,EACvB,IAAoB;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,UAAU,kBAAkB,CAChC,eAAuB,EACvB,IAAoB;IAEpB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC1D,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IAE1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1C,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAC1B,CAAC,MAAM,EAAE,EAAE;YACT,IAAI,MAAM,EAAE;gBACV,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClC,cAAc,CAAC,QAAQ,CAAC,CAAC;aAC1B;QACH,CAAC,EACD,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAC5B,CAAC;QACF,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC;IACnC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/esm/localize.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare class Localizer implements Localizable {
|
|
|
14
14
|
* @param key The key of the translation snippet.
|
|
15
15
|
* @param variables The optional variables to use.
|
|
16
16
|
*/
|
|
17
|
-
localizeGlobal<T>(key: string, variables?: T): string;
|
|
17
|
+
localizeGlobal<T extends object>(key: string, variables?: T): string;
|
|
18
18
|
/**
|
|
19
19
|
* Localizes the given key via the local translations.
|
|
20
20
|
* Uses the global translations as fallback mechanism.
|
|
@@ -22,7 +22,7 @@ export declare class Localizer implements Localizable {
|
|
|
22
22
|
* @param key The key of the translation snippet.
|
|
23
23
|
* @param variables The optional variables to use.
|
|
24
24
|
*/
|
|
25
|
-
localizeLocal<T>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
25
|
+
localizeLocal<T extends object>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
26
26
|
private localizeBase;
|
|
27
27
|
private translateMessage;
|
|
28
28
|
}
|
package/esm/localize.js
CHANGED
|
@@ -4,8 +4,8 @@ function defaultFallback(key, language) {
|
|
|
4
4
|
}
|
|
5
5
|
else {
|
|
6
6
|
if (language) {
|
|
7
|
-
console.warn(
|
|
8
|
-
return
|
|
7
|
+
console.warn(`Missing translation of "${key}" in language "${language}".`);
|
|
8
|
+
return `__${language}_${key}__`;
|
|
9
9
|
}
|
|
10
10
|
else {
|
|
11
11
|
return '';
|
|
@@ -13,16 +13,15 @@ function defaultFallback(key, language) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
function formatMessage(message, variables) {
|
|
16
|
-
return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g,
|
|
17
|
-
return p1 in variables ? variables[p1] || '' :
|
|
16
|
+
return message.replace(/{{\s*([A-Za-z0-9_.]+)\s*}}/g, (_match, p1) => {
|
|
17
|
+
return p1 in variables ? variables[p1] || '' : `{{${p1}}}`;
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
export class Localizer {
|
|
21
21
|
/**
|
|
22
22
|
* Creates a new instance of a localizer.
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
if (fallback === void 0) { fallback = defaultFallback; }
|
|
24
|
+
constructor(messages, language, languages, fallback = defaultFallback) {
|
|
26
25
|
this.messages = messages;
|
|
27
26
|
this.language = language;
|
|
28
27
|
this.languages = languages;
|
|
@@ -33,9 +32,9 @@ var Localizer = /** @class */ (function () {
|
|
|
33
32
|
* @param key The key of the translation snippet.
|
|
34
33
|
* @param variables The optional variables to use.
|
|
35
34
|
*/
|
|
36
|
-
|
|
35
|
+
localizeGlobal(key, variables) {
|
|
37
36
|
return this.localizeBase(key, variables);
|
|
38
|
-
}
|
|
37
|
+
}
|
|
39
38
|
/**
|
|
40
39
|
* Localizes the given key via the local translations.
|
|
41
40
|
* Uses the global translations as fallback mechanism.
|
|
@@ -43,27 +42,25 @@ var Localizer = /** @class */ (function () {
|
|
|
43
42
|
* @param key The key of the translation snippet.
|
|
44
43
|
* @param variables The optional variables to use.
|
|
45
44
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
localizeLocal(localMessages, key, variables) {
|
|
46
|
+
const message = this.translateMessage(localMessages, key, variables);
|
|
48
47
|
if (message === undefined) {
|
|
49
48
|
return this.localizeBase(key, variables);
|
|
50
49
|
}
|
|
51
50
|
return message;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
}
|
|
52
|
+
localizeBase(key, variables) {
|
|
53
|
+
const message = this.translateMessage(this.messages, key, variables);
|
|
55
54
|
if (message === undefined) {
|
|
56
55
|
return this.fallback(key, this.language);
|
|
57
56
|
}
|
|
58
57
|
return message;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
}
|
|
59
|
+
translateMessage(messages, key, variables) {
|
|
60
|
+
const language = this.language;
|
|
61
|
+
const translations = language && messages[language];
|
|
62
|
+
const translation = translations && translations[key];
|
|
64
63
|
return translation && (variables ? formatMessage(translation, variables) : translation);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
}());
|
|
68
|
-
export { Localizer };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
69
66
|
//# sourceMappingURL=localize.js.map
|
package/esm/localize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B;SAAM;QACL,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../src/localize.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B;SAAM;QACL,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,2BAA2B,GAAG,kBAAkB,QAAQ,IAAI,CAAC,CAAC;YAC3E,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,CAAC;SACjC;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;AACH,CAAC;AAED,SAAS,aAAa,CAAmB,OAAe,EAAE,SAAY;IACpE,OAAO,OAAO,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,MAAc,EAAE,EAAU,EAAE,EAAE;QACnF,OAAO,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,SAAS;IACpB;;OAEG;IACH,YACS,QAA8B,EAC9B,QAAgB,EAChB,SAAwB,EACvB,WAAW,eAAe;QAH3B,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAe;QACvB,aAAQ,GAAR,QAAQ,CAAkB;IACjC,CAAC;IAEJ;;;;OAIG;IACI,cAAc,CAAmB,GAAW,EAAE,SAAa;QAChE,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,aAAa,CAAmB,aAAmC,EAAE,GAAW,EAAE,SAAa;QACpG,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;SAC1C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,YAAY,CAAmB,GAAW,EAAE,SAAa;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAErE,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC1C;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,gBAAgB,CAAmB,QAA8B,EAAE,GAAW,EAAE,SAAa;QACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO,WAAW,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC1F,CAAC;CACF"}
|
package/esm/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Disposable } from 'piral-core';
|
|
2
|
+
import type { ComponentType } from 'react';
|
|
2
3
|
declare module 'piral-core/lib/types/custom' {
|
|
3
4
|
interface PiletCustomApi extends PiletLocaleApi {
|
|
4
5
|
}
|
|
@@ -97,8 +98,8 @@ export interface Localizable {
|
|
|
97
98
|
messages: LocalizationMessages;
|
|
98
99
|
language: string;
|
|
99
100
|
languages: Array<string>;
|
|
100
|
-
localizeGlobal<T>(key: string, variables?: T): string;
|
|
101
|
-
localizeLocal<T>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
101
|
+
localizeGlobal<T extends object>(key: string, variables?: T): string;
|
|
102
|
+
localizeLocal<T extends object>(localMessages: LocalizationMessages, key: string, variables?: T): string;
|
|
102
103
|
}
|
|
103
104
|
export interface LocalizationMessages {
|
|
104
105
|
/**
|
|
@@ -107,13 +108,32 @@ export interface LocalizationMessages {
|
|
|
107
108
|
[lang: string]: Translations;
|
|
108
109
|
}
|
|
109
110
|
export interface PiletLocaleApi {
|
|
111
|
+
/**
|
|
112
|
+
* Adds a list of translations to the existing translations.
|
|
113
|
+
*
|
|
114
|
+
* Internally, setTranslations is used, which means the translations will be exclusively used for
|
|
115
|
+
* retrieving translations for the pilet.
|
|
116
|
+
*
|
|
117
|
+
* @param messagesList The list of messages that extend the existing translations
|
|
118
|
+
* @param [isOverriding=true] Indicates whether the new translations overwrite the existing translations
|
|
119
|
+
*/
|
|
120
|
+
addTranslations(messagesList: LocalizationMessages[], isOverriding?: boolean): void;
|
|
121
|
+
/**
|
|
122
|
+
* Gets the currently selected language directly.
|
|
123
|
+
*/
|
|
124
|
+
getCurrentLanguage(): string;
|
|
125
|
+
/**
|
|
126
|
+
* Gets the currently selected language in a callback that is also invoked when the
|
|
127
|
+
* selected language changes. Returns a disposable to stop the notifications.
|
|
128
|
+
*/
|
|
129
|
+
getCurrentLanguage(cb: (currently: string) => void): Disposable;
|
|
110
130
|
/**
|
|
111
131
|
* Translates the given tag (using the optional variables) into a string using the current language.
|
|
112
132
|
* The used template can contain placeholders in form of `{{variableName}}`.
|
|
113
133
|
* @param tag The tag to translate.
|
|
114
134
|
* @param variables The optional variables to fill into the temnplate.
|
|
115
135
|
*/
|
|
116
|
-
translate<T = Record<string, string>>(tag: string, variables?: T): string;
|
|
136
|
+
translate<T extends object = Record<string, string>>(tag: string, variables?: T): string;
|
|
117
137
|
/**
|
|
118
138
|
* Provides translations to the application.
|
|
119
139
|
* The translations will be exclusively used for retrieving translations for the pilet.
|
package/lib/Languages.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Languages = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const piral_core_1 = require("piral-core");
|
|
6
|
+
const components_1 = require("./components");
|
|
7
|
+
const Languages = () => {
|
|
8
|
+
const { available, selected } = (0, piral_core_1.useGlobalState)((m) => m.language);
|
|
9
9
|
return React.createElement(components_1.PiralLanguagesPicker, { selected: selected, available: available });
|
|
10
10
|
};
|
|
11
|
+
exports.Languages = Languages;
|
|
11
12
|
//# sourceMappingURL=Languages.js.map
|
package/lib/Languages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Languages.js","sourceRoot":"","sources":["../src/Languages.tsx"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"Languages.js","sourceRoot":"","sources":["../src/Languages.tsx"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,2CAA4C;AAC5C,6CAAoD;AAE7C,MAAM,SAAS,GAAa,GAAG,EAAE;IACtC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAA,2BAAc,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAClE,OAAO,oBAAC,iCAAoB,IAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;AAC5E,CAAC,CAAC;AAHW,QAAA,SAAS,aAGpB"}
|
package/lib/actions.js
CHANGED
|
@@ -1,46 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createActions = void 0;
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
4
|
function createActions(localizer) {
|
|
6
5
|
return {
|
|
7
|
-
selectLanguage
|
|
8
|
-
ctx.dispatch(
|
|
6
|
+
selectLanguage(ctx, selected) {
|
|
7
|
+
ctx.dispatch((state) => {
|
|
9
8
|
localizer.language = selected;
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const previousLanguage = state.language.selected;
|
|
10
|
+
const currentLanguage = selected;
|
|
12
11
|
// emit this event *after* we changed the state container
|
|
13
|
-
setTimeout(
|
|
12
|
+
setTimeout(() => {
|
|
14
13
|
ctx.emit('select-language', {
|
|
15
|
-
previousLanguage
|
|
16
|
-
currentLanguage
|
|
14
|
+
previousLanguage,
|
|
15
|
+
currentLanguage,
|
|
17
16
|
});
|
|
18
17
|
}, 0);
|
|
19
|
-
return
|
|
18
|
+
return Object.assign(Object.assign({}, state), { language: Object.assign(Object.assign({}, state.language), { loading: selected === undefined, selected }) });
|
|
20
19
|
});
|
|
21
20
|
},
|
|
22
|
-
translate
|
|
21
|
+
translate(_, key, variables) {
|
|
23
22
|
return localizer && localizer.localizeGlobal(key, variables);
|
|
24
23
|
},
|
|
25
|
-
setTranslations
|
|
24
|
+
setTranslations(ctx, language, data) {
|
|
26
25
|
localizer.messages[language] = data.global;
|
|
27
|
-
for (
|
|
28
|
-
|
|
29
|
-
var api = ctx.apis[item.name];
|
|
26
|
+
for (const item of data.locals) {
|
|
27
|
+
const api = ctx.apis[item.name];
|
|
30
28
|
if (api) {
|
|
31
|
-
|
|
29
|
+
const translations = api.getTranslations();
|
|
32
30
|
translations[language] = item.value;
|
|
33
31
|
api.setTranslations(translations);
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
},
|
|
37
|
-
getTranslations
|
|
35
|
+
getTranslations(ctx, language) {
|
|
38
36
|
return {
|
|
39
37
|
global: localizer.messages[language],
|
|
40
|
-
locals: Object.keys(ctx.apis).map(
|
|
41
|
-
name
|
|
38
|
+
locals: Object.keys(ctx.apis).map((name) => ({
|
|
39
|
+
name,
|
|
42
40
|
value: ctx.apis[name].getTranslations()[language],
|
|
43
|
-
})
|
|
41
|
+
})),
|
|
44
42
|
};
|
|
45
43
|
},
|
|
46
44
|
};
|
package/lib/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":";;;AAGA,SAAgB,aAAa,CAAC,SAAsB;IAClD,OAAO;QACL,cAAc,CAAC,GAAuB,EAAE,QAAgB;YACtD,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrB,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACjD,MAAM,eAAe,GAAG,QAAQ,CAAC;gBAEjC,yDAAyD;gBACzD,UAAU,CAAC,GAAG,EAAE;oBACd,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBAC1B,gBAAgB;wBAChB,eAAe;qBAChB,CAAC,CAAC;gBACL,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEN,uCACK,KAAK,KACR,QAAQ,kCACH,KAAK,CAAC,QAAQ,KACjB,OAAO,EAAE,QAAQ,KAAK,SAAS,EAC/B,QAAQ,OAEV;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,SAAS,CAAC,CAAqB,EAAE,GAAW,EAAE,SAAc;YAC1D,OAAO,SAAS,IAAI,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QACD,eAAe,CAAC,GAAuB,EAAE,QAAgB,EAAE,IAAI;YAC7D,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAE3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEhC,IAAI,GAAG,EAAE;oBACP,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;oBAC3C,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;oBACpC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;iBACnC;aACF;QACH,CAAC;QACD,eAAe,CAAC,GAAuB,EAAE,QAAgB;YACvD,OAAO;gBACL,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACpC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI;oBACJ,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;iBAClD,CAAC,CAAC;aACJ,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AApDD,sCAoDC"}
|