@kdcloudjs/kwc-shared-utils 0.0.7 → 0.0.8
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/i18n/index.cjs.js +1 -1
- package/dist/i18n/index.esm.js +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/shared/index-Gs5oP-af.cjs.js +2 -0
- package/dist/shared/index-Gs5oP-af.cjs.js.map +1 -0
- package/dist/shared/index-VtMGVsou.esm.js +2 -0
- package/dist/shared/index-VtMGVsou.esm.js.map +1 -0
- package/package.json +1 -1
- package/dist/shared/index-ByAvyYMX.cjs.js +0 -2
- package/dist/shared/index-ByAvyYMX.cjs.js.map +0 -1
- package/dist/shared/index-D9nAST5J.esm.js +0 -2
- package/dist/shared/index-D9nAST5J.esm.js.map +0 -1
package/dist/i18n/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../shared/index-
|
|
1
|
+
"use strict";var e=require("../shared/index-Gs5oP-af.cjs.js");exports.getLanguage=e.getLanguage,exports.init=e.init,exports.setLanguage=e.setLanguage,exports.t=e.t;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/i18n/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{g as getLanguage,a as init,s as setLanguage,t}from"../shared/index-
|
|
1
|
+
export{g as getLanguage,a as init,s as setLanguage,t}from"../shared/index-VtMGVsou.esm.js";
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("./shared/index-C0BYHh-4.cjs.js"),r=require("./shared/index-BvU1MyLY.cjs.js"),s=require("./shared/index-C96d8r7U.cjs.js"),i=require("./shared/index-CNBHeIX7.cjs.js"),d=require("./shared/index-Dtu_3V-z.cjs.js"),x=require("./shared/index-UhtWZvgp.cjs.js"),n=require("./shared/index-BFFaiz4D.cjs.js"),a=require("./shared/index-
|
|
1
|
+
"use strict";var e=require("./shared/index-C0BYHh-4.cjs.js"),r=require("./shared/index-BvU1MyLY.cjs.js"),s=require("./shared/index-C96d8r7U.cjs.js"),i=require("./shared/index-CNBHeIX7.cjs.js"),d=require("./shared/index-Dtu_3V-z.cjs.js"),x=require("./shared/index-UhtWZvgp.cjs.js"),n=require("./shared/index-BFFaiz4D.cjs.js"),a=require("./shared/index-Gs5oP-af.cjs.js");exports.platformResourceLoader=e.index,exports.openApiAdapter=r.index,exports.bosApi=s.index,exports.client=i.index,exports.messageService=d.index,exports.kingdeeDataService=x.index,exports.sendBosPlatformEvent=n.index,exports.i18n=a.index;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{i as platformResourceLoader}from"./shared/index-DF7VNMGI.esm.js";export{i as openApiAdapter}from"./shared/index-C8kRxv22.esm.js";export{i as bosApi}from"./shared/index-RQMVLnNM.esm.js";export{i as client}from"./shared/index-BW6TOLF1.esm.js";export{i as messageService}from"./shared/index-ChQWdmu9.esm.js";export{i as kingdeeDataService}from"./shared/index-eSb0es-k.esm.js";export{i as sendBosPlatformEvent}from"./shared/index-BwIxpjWa.esm.js";export{i as i18n}from"./shared/index-
|
|
1
|
+
export{i as platformResourceLoader}from"./shared/index-DF7VNMGI.esm.js";export{i as openApiAdapter}from"./shared/index-C8kRxv22.esm.js";export{i as bosApi}from"./shared/index-RQMVLnNM.esm.js";export{i as client}from"./shared/index-BW6TOLF1.esm.js";export{i as messageService}from"./shared/index-ChQWdmu9.esm.js";export{i as kingdeeDataService}from"./shared/index-eSb0es-k.esm.js";export{i as sendBosPlatformEvent}from"./shared/index-BwIxpjWa.esm.js";export{i as i18n}from"./shared/index-VtMGVsou.esm.js";
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";let e="zh_CN";const n={};let t=null;const o=e=>{if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(e)},a=()=>o("lang")||o("language")||(()=>{let e=null;if(window.store&&window.store.getState&&(e=window.store.getState().toJS?.()),!e)return null;const{rootPageId:n,forms:t}=e,o=t[n];return o?i(o,"config.language")||i(o,"config.langSetting.defaultLang"):null})()||("undefined"!=typeof navigator?navigator.language:null)||"zh_CN";let l=null;const r=async o=>{if(o){if(!n[o])try{let e;e=l?l.endsWith(".json")?l:`${l}lang/${o}.json`:t&&t.isvId&&t.moduleId&&t.schemaId?`${location.origin}${location.pathname}isv/${t.isvId}/${t.moduleId}/${t.schemaId}/lang/${o}.json`:`./lang/${o}.json`;const a=await fetch(e);if(a.ok){const e=await a.json();n[o]=e}else console.warn(`[i18n] Failed to load language pack: ${e}`)}catch(e){console.error(`[i18n] Error loading language pack: ${e.message}`)}e=o}},i=(e,n)=>{if(e)return n.split(".").reduce((e,n)=>e&&e[n],e)},s=(t,o={})=>{const a=n[e];let l=i(a,t);if(void 0===l)return"object"==typeof o&&void 0!==o.fallback?o.fallback:t;if("string"!=typeof l)return l;const r=/@:([\w\.]+)/g;r.test(l)&&(l=l.replace(r,(e,n)=>s(n,o)));let g=null,c=o;if("number"==typeof o?(g=o,c={count:o,n:o}):"object"==typeof o&&(void 0!==o.count?g=o.count:void 0!==o.n&&(g=o.n)),null!==g&&l.includes("|")){const e=l.split("|").map(e=>e.trim());2===e.length?l=1===g?e[0]:e[1]:e.length>=3&&(l=0===g?e[0]:1===g?e[1]:e[2])}return l.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>void 0!==c[n]?c[n]:e)},g=async({props:e,url:n})=>{e&&(t=e),n&&(l=n);const o=a();return await r(o),o};var c=Object.freeze({__proto__:null,getLanguage:a,init:g,setLanguage:r,t:s});exports.getLanguage=a,exports.index=c,exports.init=g,exports.setLanguage=r,exports.t=s;
|
|
2
|
+
//# sourceMappingURL=index-Gs5oP-af.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-Gs5oP-af.cjs.js","sources":["../../src/modules/i18n/index.js"],"sourcesContent":["\nlet currentLang = 'zh_CN';\nconst localeMessages = {};\nlet i18nProps = null;\n\nconst getUrlParam = (name) => {\n if (typeof window === 'undefined') return null;\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(name);\n};\n\nconst getEnvLanguage = () => {\n let state = null\n if (window.store && window.store.getState) {\n state = window.store.getState().toJS?.();\n }\n\n if (!state) {\n return null;\n }\n\n const { rootPageId, forms } = state;\n const form = forms[rootPageId];\n if (!form) {\n return null;\n }\n\n const lang = getNestedValue(form, 'config.language')\n || getNestedValue(form, 'config.langSetting.defaultLang');\n\n return lang;\n};\n\nconst getBrowserLanguage = () => {\n if (typeof navigator !== 'undefined') {\n return navigator.language;\n }\n return null;\n};\n\nexport const getLanguage = () => {\n const lang = getUrlParam('lang') || getUrlParam('language') || getEnvLanguage() || getBrowserLanguage();\n return lang || 'zh_CN';\n};\n\nlet customBaseUrl = null;\n\nexport const setLanguage = async (lang) => {\n if (!lang) return;\n\n if (!localeMessages[lang]) {\n try {\n let url;\n if (customBaseUrl) {\n // 用户传入了自定义 url\n if (customBaseUrl.endsWith('.json')) {\n url = customBaseUrl;\n } else {\n url = `${customBaseUrl}lang/${lang}.json`;\n }\n } else if (i18nProps && i18nProps.isvId && i18nProps.moduleId && i18nProps.schemaId) {\n // 使用 props 拼接路径\n url = `${location.origin}${location.pathname}isv/${i18nProps.isvId}/${i18nProps.moduleId}/${i18nProps.schemaId}/lang/${lang}.json`;\n } else {\n // 默认路径\n url = `./lang/${lang}.json`;\n }\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n localeMessages[lang] = data;\n } else {\n console.warn(`[i18n] Failed to load language pack: ${url}`);\n }\n } catch (error) {\n console.error(`[i18n] Error loading language pack: ${error.message}`);\n }\n }\n\n currentLang = lang;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!obj) return undefined;\n return path.split('.').reduce((prev, curr) => {\n return prev && prev[curr];\n }, obj);\n};\n\nexport const t = (key, values = {}) => {\n const messages = localeMessages[currentLang];\n\n let message = getNestedValue(messages, key);\n\n // 1. Handle missing\n if (message === undefined) {\n if (typeof values === 'object' && values.fallback !== undefined) {\n return values.fallback;\n }\n return key;\n }\n\n // If not string, return as is (e.g. object/array)\n if (typeof message !== 'string') {\n return message;\n }\n\n // 2. Handle Linked Messages (@:key)\n const linkRegex = /@:([\\w\\.]+)/g;\n if (linkRegex.test(message)) {\n message = message.replace(linkRegex, (match, linkedKey) => {\n return t(linkedKey, values);\n });\n }\n\n // 3. Handle Pluralization\n let count = null;\n let options = values;\n\n if (typeof values === 'number') {\n count = values;\n options = { count: values, n: values }; \n } else if (typeof values === 'object') {\n if (values.count !== undefined) count = values.count;\n else if (values.n !== undefined) count = values.n;\n }\n\n if (count !== null && message.includes('|')) {\n const pipes = message.split('|').map(s => s.trim());\n if (pipes.length === 2) {\n // Format: singular | plural\n // Logic: 1 => singular, others => plural\n message = count === 1 ? pipes[0] : pipes[1];\n } else if (pipes.length >= 3) {\n // Format: zero | one | others\n // Logic: 0 => zero, 1 => one, others => others\n if (count === 0) message = pipes[0];\n else if (count === 1) message = pipes[1];\n else message = pipes[2];\n }\n }\n\n // 4. Interpolation\n // Support {{ key }}\n return message.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, param) => {\n return options[param] !== undefined ? options[param] : match;\n });\n};\n\n// Initialize language on load (optional, or user calls setLanguage)\n// But requirements say \"According to language load corresponding language pack\"\n// We can auto-initialize\nexport const init = async ({ props, url }) => {\n // 保存 props 供 setLanguage 使用\n if (props) {\n i18nProps = props;\n }\n // 保存自定义 url\n if (url) {\n customBaseUrl = url;\n }\n const lang = getLanguage();\n await setLanguage(lang);\n return lang;\n};\n"],"names":["currentLang","localeMessages","i18nProps","getUrlParam","name","window","URLSearchParams","location","search","get","getLanguage","state","store","getState","toJS","rootPageId","forms","form","getNestedValue","getEnvLanguage","navigator","language","customBaseUrl","setLanguage","async","lang","url","endsWith","isvId","moduleId","schemaId","origin","pathname","response","fetch","ok","data","json","console","warn","error","message","obj","path","split","reduce","prev","curr","t","key","values","messages","undefined","fallback","linkRegex","test","replace","match","linkedKey","count","options","n","includes","pipes","map","s","trim","length","param","init","props"],"mappings":"aACA,IAAIA,EAAc,QAClB,MAAMC,EAAiB,CAAA,EACvB,IAAIC,EAAY,KAEhB,MAAMC,EAAeC,IACnB,GAAsB,oBAAXC,OAAwB,OAAO,KAE1C,OADkB,IAAIC,gBAAgBD,OAAOE,SAASC,QACrCC,IAAIL,IAgCVM,EAAc,IACZP,EAAY,SAAWA,EAAY,aA9B3B,MACrB,IAAIQ,EAAQ,KAKZ,GAJIN,OAAOO,OAASP,OAAOO,MAAMC,WAC/BF,EAAQN,OAAOO,MAAMC,WAAWC,WAG7BH,EACH,OAAO,KAGT,MAAMI,WAAEA,EAAUC,MAAEA,GAAUL,EACxBM,EAAOD,EAAMD,GACnB,OAAKE,EAIQC,EAAeD,EAAM,oBAC7BC,EAAeD,EAAM,kCAJjB,MAiBsDE,KAPtC,oBAAdC,UACFA,UAAUC,SAEZ,OAKQ,QAGjB,IAAIC,EAAgB,KAER,MAACC,EAAcC,MAAOC,IAChC,GAAKA,EAAL,CAEA,IAAKxB,EAAewB,GAClB,IACE,IAAIC,EAIAA,EAHAJ,EAEEA,EAAcK,SAAS,SACnBL,EAEA,GAAGA,SAAqBG,SAEvBvB,GAAaA,EAAU0B,OAAS1B,EAAU2B,UAAY3B,EAAU4B,SAEnE,GAAGvB,SAASwB,SAASxB,SAASyB,eAAe9B,EAAU0B,SAAS1B,EAAU2B,YAAY3B,EAAU4B,iBAAiBL,SAGjH,UAAUA,SAElB,MAAMQ,QAAiBC,MAAMR,GAC7B,GAAIO,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASI,OAC5BpC,EAAewB,GAAQW,CACzB,MACEE,QAAQC,KAAK,wCAAwCb,IAEzD,CAAE,MAAOc,GACPF,QAAQE,MAAM,uCAAuCA,EAAMC,UAC7D,CAGFzC,EAAcyB,CA/BH,GAkCPP,EAAiB,CAACwB,EAAKC,KAC3B,GAAKD,EACL,OAAOC,EAAKC,MAAM,KAAKC,OAAO,CAACC,EAAMC,IAC5BD,GAAQA,EAAKC,GACnBL,IAGQM,EAAI,CAACC,EAAKC,EAAS,MAC9B,MAAMC,EAAWlD,EAAeD,GAEhC,IAAIyC,EAAUvB,EAAeiC,EAAUF,GAGvC,QAAgBG,IAAZX,EACF,MAAsB,iBAAXS,QAA2CE,IAApBF,EAAOG,SAC9BH,EAAOG,SAEXJ,EAIT,GAAuB,iBAAZR,EACP,OAAOA,EAIX,MAAMa,EAAY,eACdA,EAAUC,KAAKd,KACfA,EAAUA,EAAQe,QAAQF,EAAW,CAACG,EAAOC,IAClCV,EAAEU,EAAWR,KAK5B,IAAIS,EAAQ,KACRC,EAAUV,EAUd,GARsB,iBAAXA,GACPS,EAAQT,EACRU,EAAU,CAAED,MAAOT,EAAQW,EAAGX,IACL,iBAAXA,SACOE,IAAjBF,EAAOS,MAAqBA,EAAQT,EAAOS,WACzBP,IAAbF,EAAOW,IAAiBF,EAAQT,EAAOW,IAGtC,OAAVF,GAAkBlB,EAAQqB,SAAS,KAAM,CACzC,MAAMC,EAAQtB,EAAQG,MAAM,KAAKoB,IAAIC,GAAKA,EAAEC,QACvB,IAAjBH,EAAMI,OAGN1B,EAAoB,IAAVkB,EAAcI,EAAM,GAAKA,EAAM,GAClCA,EAAMI,QAAU,IAGN1B,EAAH,IAAVkB,EAAuBI,EAAM,GACd,IAAVJ,EAAuBI,EAAM,GACvBA,EAAM,GAE7B,CAIA,OAAOtB,EAAQe,QAAQ,uBAAwB,CAACC,EAAOW,SAC3BhB,IAAnBQ,EAAQQ,GAAuBR,EAAQQ,GAASX,IAO9CY,EAAO7C,OAAS8C,QAAO5C,UAE5B4C,IACApE,EAAYoE,GAGZ5C,IACAJ,EAAgBI,GAEpB,MAAMD,EAAOf,IAEb,aADMa,EAAYE,GACXA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let n="zh_CN";const e={};let t=null;const o=n=>{if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(n)},a=()=>o("lang")||o("language")||(()=>{let n=null;if(window.store&&window.store.getState&&(n=window.store.getState().toJS?.()),!n)return null;const{rootPageId:e,forms:t}=n,o=t[e];return o?r(o,"config.language")||r(o,"config.langSetting.defaultLang"):null})()||("undefined"!=typeof navigator?navigator.language:null)||"zh_CN";let l=null;const i=async o=>{if(o){if(!e[o])try{let n;n=l?l.endsWith(".json")?l:`${l}lang/${o}.json`:t&&t.isvId&&t.moduleId&&t.schemaId?`${location.origin}${location.pathname}isv/${t.isvId}/${t.moduleId}/${t.schemaId}/lang/${o}.json`:`./lang/${o}.json`;const a=await fetch(n);if(a.ok){const n=await a.json();e[o]=n}else console.warn(`[i18n] Failed to load language pack: ${n}`)}catch(n){console.error(`[i18n] Error loading language pack: ${n.message}`)}n=o}},r=(n,e)=>{if(n)return e.split(".").reduce((n,e)=>n&&n[e],n)},s=(t,o={})=>{const a=e[n];let l=r(a,t);if(void 0===l)return"object"==typeof o&&void 0!==o.fallback?o.fallback:t;if("string"!=typeof l)return l;const i=/@:([\w\.]+)/g;i.test(l)&&(l=l.replace(i,(n,e)=>s(e,o)));let c=null,g=o;if("number"==typeof o?(c=o,g={count:o,n:o}):"object"==typeof o&&(void 0!==o.count?c=o.count:void 0!==o.n&&(c=o.n)),null!==c&&l.includes("|")){const n=l.split("|").map(n=>n.trim());2===n.length?l=1===c?n[0]:n[1]:n.length>=3&&(l=0===c?n[0]:1===c?n[1]:n[2])}return l.replace(/\{\{\s*(\w+)\s*\}\}/g,(n,e)=>void 0!==g[e]?g[e]:n)},c=async({props:n,url:e})=>{n&&(t=n),e&&(l=e);const o=a();return await i(o),o};var g=Object.freeze({__proto__:null,getLanguage:a,init:c,setLanguage:i,t:s});export{c as a,a as g,g as i,i as s,s as t};
|
|
2
|
+
//# sourceMappingURL=index-VtMGVsou.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-VtMGVsou.esm.js","sources":["../../src/modules/i18n/index.js"],"sourcesContent":["\nlet currentLang = 'zh_CN';\nconst localeMessages = {};\nlet i18nProps = null;\n\nconst getUrlParam = (name) => {\n if (typeof window === 'undefined') return null;\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(name);\n};\n\nconst getEnvLanguage = () => {\n let state = null\n if (window.store && window.store.getState) {\n state = window.store.getState().toJS?.();\n }\n\n if (!state) {\n return null;\n }\n\n const { rootPageId, forms } = state;\n const form = forms[rootPageId];\n if (!form) {\n return null;\n }\n\n const lang = getNestedValue(form, 'config.language')\n || getNestedValue(form, 'config.langSetting.defaultLang');\n\n return lang;\n};\n\nconst getBrowserLanguage = () => {\n if (typeof navigator !== 'undefined') {\n return navigator.language;\n }\n return null;\n};\n\nexport const getLanguage = () => {\n const lang = getUrlParam('lang') || getUrlParam('language') || getEnvLanguage() || getBrowserLanguage();\n return lang || 'zh_CN';\n};\n\nlet customBaseUrl = null;\n\nexport const setLanguage = async (lang) => {\n if (!lang) return;\n\n if (!localeMessages[lang]) {\n try {\n let url;\n if (customBaseUrl) {\n // 用户传入了自定义 url\n if (customBaseUrl.endsWith('.json')) {\n url = customBaseUrl;\n } else {\n url = `${customBaseUrl}lang/${lang}.json`;\n }\n } else if (i18nProps && i18nProps.isvId && i18nProps.moduleId && i18nProps.schemaId) {\n // 使用 props 拼接路径\n url = `${location.origin}${location.pathname}isv/${i18nProps.isvId}/${i18nProps.moduleId}/${i18nProps.schemaId}/lang/${lang}.json`;\n } else {\n // 默认路径\n url = `./lang/${lang}.json`;\n }\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n localeMessages[lang] = data;\n } else {\n console.warn(`[i18n] Failed to load language pack: ${url}`);\n }\n } catch (error) {\n console.error(`[i18n] Error loading language pack: ${error.message}`);\n }\n }\n\n currentLang = lang;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!obj) return undefined;\n return path.split('.').reduce((prev, curr) => {\n return prev && prev[curr];\n }, obj);\n};\n\nexport const t = (key, values = {}) => {\n const messages = localeMessages[currentLang];\n\n let message = getNestedValue(messages, key);\n\n // 1. Handle missing\n if (message === undefined) {\n if (typeof values === 'object' && values.fallback !== undefined) {\n return values.fallback;\n }\n return key;\n }\n\n // If not string, return as is (e.g. object/array)\n if (typeof message !== 'string') {\n return message;\n }\n\n // 2. Handle Linked Messages (@:key)\n const linkRegex = /@:([\\w\\.]+)/g;\n if (linkRegex.test(message)) {\n message = message.replace(linkRegex, (match, linkedKey) => {\n return t(linkedKey, values);\n });\n }\n\n // 3. Handle Pluralization\n let count = null;\n let options = values;\n\n if (typeof values === 'number') {\n count = values;\n options = { count: values, n: values }; \n } else if (typeof values === 'object') {\n if (values.count !== undefined) count = values.count;\n else if (values.n !== undefined) count = values.n;\n }\n\n if (count !== null && message.includes('|')) {\n const pipes = message.split('|').map(s => s.trim());\n if (pipes.length === 2) {\n // Format: singular | plural\n // Logic: 1 => singular, others => plural\n message = count === 1 ? pipes[0] : pipes[1];\n } else if (pipes.length >= 3) {\n // Format: zero | one | others\n // Logic: 0 => zero, 1 => one, others => others\n if (count === 0) message = pipes[0];\n else if (count === 1) message = pipes[1];\n else message = pipes[2];\n }\n }\n\n // 4. Interpolation\n // Support {{ key }}\n return message.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, param) => {\n return options[param] !== undefined ? options[param] : match;\n });\n};\n\n// Initialize language on load (optional, or user calls setLanguage)\n// But requirements say \"According to language load corresponding language pack\"\n// We can auto-initialize\nexport const init = async ({ props, url }) => {\n // 保存 props 供 setLanguage 使用\n if (props) {\n i18nProps = props;\n }\n // 保存自定义 url\n if (url) {\n customBaseUrl = url;\n }\n const lang = getLanguage();\n await setLanguage(lang);\n return lang;\n};\n"],"names":["currentLang","localeMessages","i18nProps","getUrlParam","name","window","URLSearchParams","location","search","get","getLanguage","state","store","getState","toJS","rootPageId","forms","form","getNestedValue","getEnvLanguage","navigator","language","customBaseUrl","setLanguage","async","lang","url","endsWith","isvId","moduleId","schemaId","origin","pathname","response","fetch","ok","data","json","console","warn","error","message","obj","path","split","reduce","prev","curr","t","key","values","messages","undefined","fallback","linkRegex","test","replace","match","linkedKey","count","options","n","includes","pipes","map","s","trim","length","param","init","props"],"mappings":"AACA,IAAIA,EAAc,QAClB,MAAMC,EAAiB,CAAA,EACvB,IAAIC,EAAY,KAEhB,MAAMC,EAAeC,IACnB,GAAsB,oBAAXC,OAAwB,OAAO,KAE1C,OADkB,IAAIC,gBAAgBD,OAAOE,SAASC,QACrCC,IAAIL,IAgCVM,EAAc,IACZP,EAAY,SAAWA,EAAY,aA9B3B,MACrB,IAAIQ,EAAQ,KAKZ,GAJIN,OAAOO,OAASP,OAAOO,MAAMC,WAC/BF,EAAQN,OAAOO,MAAMC,WAAWC,WAG7BH,EACH,OAAO,KAGT,MAAMI,WAAEA,EAAUC,MAAEA,GAAUL,EACxBM,EAAOD,EAAMD,GACnB,OAAKE,EAIQC,EAAeD,EAAM,oBAC7BC,EAAeD,EAAM,kCAJjB,MAiBsDE,KAPtC,oBAAdC,UACFA,UAAUC,SAEZ,OAKQ,QAGjB,IAAIC,EAAgB,KAER,MAACC,EAAcC,MAAOC,IAChC,GAAKA,EAAL,CAEA,IAAKxB,EAAewB,GAClB,IACE,IAAIC,EAIAA,EAHAJ,EAEEA,EAAcK,SAAS,SACnBL,EAEA,GAAGA,SAAqBG,SAEvBvB,GAAaA,EAAU0B,OAAS1B,EAAU2B,UAAY3B,EAAU4B,SAEnE,GAAGvB,SAASwB,SAASxB,SAASyB,eAAe9B,EAAU0B,SAAS1B,EAAU2B,YAAY3B,EAAU4B,iBAAiBL,SAGjH,UAAUA,SAElB,MAAMQ,QAAiBC,MAAMR,GAC7B,GAAIO,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASI,OAC5BpC,EAAewB,GAAQW,CACzB,MACEE,QAAQC,KAAK,wCAAwCb,IAEzD,CAAE,MAAOc,GACPF,QAAQE,MAAM,uCAAuCA,EAAMC,UAC7D,CAGFzC,EAAcyB,CA/BH,GAkCPP,EAAiB,CAACwB,EAAKC,KAC3B,GAAKD,EACL,OAAOC,EAAKC,MAAM,KAAKC,OAAO,CAACC,EAAMC,IAC5BD,GAAQA,EAAKC,GACnBL,IAGQM,EAAI,CAACC,EAAKC,EAAS,MAC9B,MAAMC,EAAWlD,EAAeD,GAEhC,IAAIyC,EAAUvB,EAAeiC,EAAUF,GAGvC,QAAgBG,IAAZX,EACF,MAAsB,iBAAXS,QAA2CE,IAApBF,EAAOG,SAC9BH,EAAOG,SAEXJ,EAIT,GAAuB,iBAAZR,EACP,OAAOA,EAIX,MAAMa,EAAY,eACdA,EAAUC,KAAKd,KACfA,EAAUA,EAAQe,QAAQF,EAAW,CAACG,EAAOC,IAClCV,EAAEU,EAAWR,KAK5B,IAAIS,EAAQ,KACRC,EAAUV,EAUd,GARsB,iBAAXA,GACPS,EAAQT,EACRU,EAAU,CAAED,MAAOT,EAAQW,EAAGX,IACL,iBAAXA,SACOE,IAAjBF,EAAOS,MAAqBA,EAAQT,EAAOS,WACzBP,IAAbF,EAAOW,IAAiBF,EAAQT,EAAOW,IAGtC,OAAVF,GAAkBlB,EAAQqB,SAAS,KAAM,CACzC,MAAMC,EAAQtB,EAAQG,MAAM,KAAKoB,IAAIC,GAAKA,EAAEC,QACvB,IAAjBH,EAAMI,OAGN1B,EAAoB,IAAVkB,EAAcI,EAAM,GAAKA,EAAM,GAClCA,EAAMI,QAAU,IAGN1B,EAAH,IAAVkB,EAAuBI,EAAM,GACd,IAAVJ,EAAuBI,EAAM,GACvBA,EAAM,GAE7B,CAIA,OAAOtB,EAAQe,QAAQ,uBAAwB,CAACC,EAAOW,SAC3BhB,IAAnBQ,EAAQQ,GAAuBR,EAAQQ,GAASX,IAO9CY,EAAO7C,OAAS8C,QAAO5C,UAE5B4C,IACApE,EAAYoE,GAGZ5C,IACAJ,EAAgBI,GAEpB,MAAMD,EAAOf,IAEb,aADMa,EAAYE,GACXA"}
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";let e="zh_CN";const t={},n=e=>{if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(e)},o=()=>n("lang")||n("language")||(()=>{let e=null;if(window.store&&window.store.getState&&(e=window.store.getState().toJS?.()),!e)return null;const{rootPageId:t,forms:n}=e,o=n[t];return o?r(o,"config.language")||r(o,"config.langSetting.defaultLang"):null})()||("undefined"!=typeof navigator?navigator.language:null)||"zh_CN",a=async n=>{if(n){if(!t[n])try{const e=await fetch(`./lang/${n}.json`);if(e.ok){const o=await e.json();t[n]=o}else console.warn(`[i18n] Failed to load language pack: ./lang/${n}.json`)}catch(e){console.error(`[i18n] Error loading language pack: ${e.message}`)}e=n}},r=(e,t)=>{if(e)return t.split(".").reduce((e,t)=>e&&e[t],e)},l=(n,o={})=>{const a=t[e];let i=r(a,n);if(void 0===i)return"object"==typeof o&&void 0!==o.fallback?o.fallback:n;if("string"!=typeof i)return i;const g=/@:([\w\.]+)/g;g.test(i)&&(i=i.replace(g,(e,t)=>l(t,o)));let s=null,u=o;if("number"==typeof o?(s=o,u={count:o,n:o}):"object"==typeof o&&(void 0!==o.count?s=o.count:void 0!==o.n&&(s=o.n)),null!==s&&i.includes("|")){const e=i.split("|").map(e=>e.trim());2===e.length?i=1===s?e[0]:e[1]:e.length>=3&&(i=0===s?e[0]:1===s?e[1]:e[2])}return i.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,t)=>void 0!==u[t]?u[t]:e)},i=async()=>{const e=o();return await a(e),e};var g=Object.freeze({__proto__:null,getLanguage:o,init:i,setLanguage:a,t:l});exports.getLanguage=o,exports.index=g,exports.init=i,exports.setLanguage=a,exports.t=l;
|
|
2
|
-
//# sourceMappingURL=index-ByAvyYMX.cjs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-ByAvyYMX.cjs.js","sources":["../../src/modules/i18n/index.js"],"sourcesContent":["\nlet currentLang = 'zh_CN';\nconst localeMessages = {};\n\nconst getUrlParam = (name) => {\n if (typeof window === 'undefined') return null;\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(name);\n};\n\nconst getEnvLanguage = () => {\n let state = null\n if (window.store && window.store.getState) {\n state = window.store.getState().toJS?.();\n }\n\n if (!state) {\n return null;\n }\n\n const { rootPageId, forms } = state;\n const form = forms[rootPageId];\n if (!form) {\n return null;\n }\n\n const lang = getNestedValue(form, 'config.language')\n || getNestedValue(form, 'config.langSetting.defaultLang');\n\n return lang;\n};\n\nconst getBrowserLanguage = () => {\n if (typeof navigator !== 'undefined') {\n return navigator.language;\n }\n return null;\n};\n\nexport const getLanguage = () => {\n const lang = getUrlParam('lang') || getUrlParam('language') || getEnvLanguage() || getBrowserLanguage();\n return lang || 'zh_CN';\n};\n\nexport const setLanguage = async (lang) => {\n if (!lang) return;\n \n if (!localeMessages[lang]) {\n try {\n const response = await fetch(`./lang/${lang}.json`);\n if (response.ok) {\n const data = await response.json();\n localeMessages[lang] = data;\n } else {\n console.warn(`[i18n] Failed to load language pack: ./lang/${lang}.json`);\n }\n } catch (error) {\n console.error(`[i18n] Error loading language pack: ${error.message}`);\n }\n }\n \n currentLang = lang;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!obj) return undefined;\n return path.split('.').reduce((prev, curr) => {\n return prev && prev[curr];\n }, obj);\n};\n\nexport const t = (key, values = {}) => {\n const messages = localeMessages[currentLang];\n\n let message = getNestedValue(messages, key);\n\n // 1. Handle missing\n if (message === undefined) {\n if (typeof values === 'object' && values.fallback !== undefined) {\n return values.fallback;\n }\n return key;\n }\n\n // If not string, return as is (e.g. object/array)\n if (typeof message !== 'string') {\n return message;\n }\n\n // 2. Handle Linked Messages (@:key)\n const linkRegex = /@:([\\w\\.]+)/g;\n if (linkRegex.test(message)) {\n message = message.replace(linkRegex, (match, linkedKey) => {\n return t(linkedKey, values);\n });\n }\n\n // 3. Handle Pluralization\n let count = null;\n let options = values;\n\n if (typeof values === 'number') {\n count = values;\n options = { count: values, n: values }; \n } else if (typeof values === 'object') {\n if (values.count !== undefined) count = values.count;\n else if (values.n !== undefined) count = values.n;\n }\n\n if (count !== null && message.includes('|')) {\n const pipes = message.split('|').map(s => s.trim());\n if (pipes.length === 2) {\n // Format: singular | plural\n // Logic: 1 => singular, others => plural\n message = count === 1 ? pipes[0] : pipes[1];\n } else if (pipes.length >= 3) {\n // Format: zero | one | others\n // Logic: 0 => zero, 1 => one, others => others\n if (count === 0) message = pipes[0];\n else if (count === 1) message = pipes[1];\n else message = pipes[2];\n }\n }\n\n // 4. Interpolation\n // Support {{ key }}\n return message.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, param) => {\n return options[param] !== undefined ? options[param] : match;\n });\n};\n\n// Initialize language on load (optional, or user calls setLanguage)\n// But requirements say \"According to language load corresponding language pack\"\n// We can auto-initialize\nexport const init = async () => {\n const lang = getLanguage();\n await setLanguage(lang);\n return lang;\n};\n"],"names":["currentLang","localeMessages","getUrlParam","name","window","URLSearchParams","location","search","get","getLanguage","state","store","getState","toJS","rootPageId","forms","form","getNestedValue","getEnvLanguage","navigator","language","setLanguage","async","lang","response","fetch","ok","data","json","console","warn","error","message","obj","path","split","reduce","prev","curr","t","key","values","messages","undefined","fallback","linkRegex","test","replace","match","linkedKey","count","options","n","includes","pipes","map","s","trim","length","param","init"],"mappings":"aACA,IAAIA,EAAc,QAClB,MAAMC,EAAiB,CAAA,EAEjBC,EAAeC,IACnB,GAAsB,oBAAXC,OAAwB,OAAO,KAE1C,OADkB,IAAIC,gBAAgBD,OAAOE,SAASC,QACrCC,IAAIL,IAgCVM,EAAc,IACZP,EAAY,SAAWA,EAAY,aA9B3B,MACrB,IAAIQ,EAAQ,KAKZ,GAJIN,OAAOO,OAASP,OAAOO,MAAMC,WAC/BF,EAAQN,OAAOO,MAAMC,WAAWC,WAG7BH,EACH,OAAO,KAGT,MAAMI,WAAEA,EAAUC,MAAEA,GAAUL,EACxBM,EAAOD,EAAMD,GACnB,OAAKE,EAIQC,EAAeD,EAAM,oBAC7BC,EAAeD,EAAM,kCAJjB,MAiBsDE,KAPtC,oBAAdC,UACFA,UAAUC,SAEZ,OAKQ,QAGJC,EAAcC,MAAOC,IAChC,GAAKA,EAAL,CAEA,IAAKtB,EAAesB,GAClB,IACE,MAAMC,QAAiBC,MAAM,UAAUF,UACvC,GAAIC,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASI,OAC5B3B,EAAesB,GAAQI,CACzB,MACEE,QAAQC,KAAK,+CAA+CP,SAEhE,CAAE,MAAOQ,GACPF,QAAQE,MAAM,uCAAuCA,EAAMC,UAC7D,CAGFhC,EAAcuB,CAhBH,GAmBPN,EAAiB,CAACgB,EAAKC,KAC3B,GAAKD,EACL,OAAOC,EAAKC,MAAM,KAAKC,OAAO,CAACC,EAAMC,IAC5BD,GAAQA,EAAKC,GACnBL,IAGQM,EAAI,CAACC,EAAKC,EAAS,MAC9B,MAAMC,EAAWzC,EAAeD,GAEhC,IAAIgC,EAAUf,EAAeyB,EAAUF,GAGvC,QAAgBG,IAAZX,EACF,MAAsB,iBAAXS,QAA2CE,IAApBF,EAAOG,SAC9BH,EAAOG,SAEXJ,EAIT,GAAuB,iBAAZR,EACP,OAAOA,EAIX,MAAMa,EAAY,eACdA,EAAUC,KAAKd,KACfA,EAAUA,EAAQe,QAAQF,EAAW,CAACG,EAAOC,IAClCV,EAAEU,EAAWR,KAK5B,IAAIS,EAAQ,KACRC,EAAUV,EAUd,GARsB,iBAAXA,GACPS,EAAQT,EACRU,EAAU,CAAED,MAAOT,EAAQW,EAAGX,IACL,iBAAXA,SACOE,IAAjBF,EAAOS,MAAqBA,EAAQT,EAAOS,WACzBP,IAAbF,EAAOW,IAAiBF,EAAQT,EAAOW,IAGtC,OAAVF,GAAkBlB,EAAQqB,SAAS,KAAM,CACzC,MAAMC,EAAQtB,EAAQG,MAAM,KAAKoB,IAAIC,GAAKA,EAAEC,QACvB,IAAjBH,EAAMI,OAGN1B,EAAoB,IAAVkB,EAAcI,EAAM,GAAKA,EAAM,GAClCA,EAAMI,QAAU,IAGN1B,EAAH,IAAVkB,EAAuBI,EAAM,GACd,IAAVJ,EAAuBI,EAAM,GACvBA,EAAM,GAE7B,CAIA,OAAOtB,EAAQe,QAAQ,uBAAwB,CAACC,EAAOW,SAC3BhB,IAAnBQ,EAAQQ,GAAuBR,EAAQQ,GAASX,IAO9CY,EAAOtC,UAChB,MAAMC,EAAOd,IAEb,aADMY,EAAYE,GACXA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
let n="zh_CN";const e={},t=n=>{if("undefined"==typeof window)return null;return new URLSearchParams(window.location.search).get(n)},a=()=>t("lang")||t("language")||(()=>{let n=null;if(window.store&&window.store.getState&&(n=window.store.getState().toJS?.()),!n)return null;const{rootPageId:e,forms:t}=n,a=t[e];return a?l(a,"config.language")||l(a,"config.langSetting.defaultLang"):null})()||("undefined"!=typeof navigator?navigator.language:null)||"zh_CN",o=async t=>{if(t){if(!e[t])try{const n=await fetch(`./lang/${t}.json`);if(n.ok){const a=await n.json();e[t]=a}else console.warn(`[i18n] Failed to load language pack: ./lang/${t}.json`)}catch(n){console.error(`[i18n] Error loading language pack: ${n.message}`)}n=t}},l=(n,e)=>{if(n)return e.split(".").reduce((n,e)=>n&&n[e],n)},r=(t,a={})=>{const o=e[n];let i=l(o,t);if(void 0===i)return"object"==typeof a&&void 0!==a.fallback?a.fallback:t;if("string"!=typeof i)return i;const g=/@:([\w\.]+)/g;g.test(i)&&(i=i.replace(g,(n,e)=>r(e,a)));let s=null,c=a;if("number"==typeof a?(s=a,c={count:a,n:a}):"object"==typeof a&&(void 0!==a.count?s=a.count:void 0!==a.n&&(s=a.n)),null!==s&&i.includes("|")){const n=i.split("|").map(n=>n.trim());2===n.length?i=1===s?n[0]:n[1]:n.length>=3&&(i=0===s?n[0]:1===s?n[1]:n[2])}return i.replace(/\{\{\s*(\w+)\s*\}\}/g,(n,e)=>void 0!==c[e]?c[e]:n)},i=async()=>{const n=a();return await o(n),n};var g=Object.freeze({__proto__:null,getLanguage:a,init:i,setLanguage:o,t:r});export{i as a,a as g,g as i,o as s,r as t};
|
|
2
|
-
//# sourceMappingURL=index-D9nAST5J.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-D9nAST5J.esm.js","sources":["../../src/modules/i18n/index.js"],"sourcesContent":["\nlet currentLang = 'zh_CN';\nconst localeMessages = {};\n\nconst getUrlParam = (name) => {\n if (typeof window === 'undefined') return null;\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(name);\n};\n\nconst getEnvLanguage = () => {\n let state = null\n if (window.store && window.store.getState) {\n state = window.store.getState().toJS?.();\n }\n\n if (!state) {\n return null;\n }\n\n const { rootPageId, forms } = state;\n const form = forms[rootPageId];\n if (!form) {\n return null;\n }\n\n const lang = getNestedValue(form, 'config.language')\n || getNestedValue(form, 'config.langSetting.defaultLang');\n\n return lang;\n};\n\nconst getBrowserLanguage = () => {\n if (typeof navigator !== 'undefined') {\n return navigator.language;\n }\n return null;\n};\n\nexport const getLanguage = () => {\n const lang = getUrlParam('lang') || getUrlParam('language') || getEnvLanguage() || getBrowserLanguage();\n return lang || 'zh_CN';\n};\n\nexport const setLanguage = async (lang) => {\n if (!lang) return;\n \n if (!localeMessages[lang]) {\n try {\n const response = await fetch(`./lang/${lang}.json`);\n if (response.ok) {\n const data = await response.json();\n localeMessages[lang] = data;\n } else {\n console.warn(`[i18n] Failed to load language pack: ./lang/${lang}.json`);\n }\n } catch (error) {\n console.error(`[i18n] Error loading language pack: ${error.message}`);\n }\n }\n \n currentLang = lang;\n};\n\nconst getNestedValue = (obj, path) => {\n if (!obj) return undefined;\n return path.split('.').reduce((prev, curr) => {\n return prev && prev[curr];\n }, obj);\n};\n\nexport const t = (key, values = {}) => {\n const messages = localeMessages[currentLang];\n\n let message = getNestedValue(messages, key);\n\n // 1. Handle missing\n if (message === undefined) {\n if (typeof values === 'object' && values.fallback !== undefined) {\n return values.fallback;\n }\n return key;\n }\n\n // If not string, return as is (e.g. object/array)\n if (typeof message !== 'string') {\n return message;\n }\n\n // 2. Handle Linked Messages (@:key)\n const linkRegex = /@:([\\w\\.]+)/g;\n if (linkRegex.test(message)) {\n message = message.replace(linkRegex, (match, linkedKey) => {\n return t(linkedKey, values);\n });\n }\n\n // 3. Handle Pluralization\n let count = null;\n let options = values;\n\n if (typeof values === 'number') {\n count = values;\n options = { count: values, n: values }; \n } else if (typeof values === 'object') {\n if (values.count !== undefined) count = values.count;\n else if (values.n !== undefined) count = values.n;\n }\n\n if (count !== null && message.includes('|')) {\n const pipes = message.split('|').map(s => s.trim());\n if (pipes.length === 2) {\n // Format: singular | plural\n // Logic: 1 => singular, others => plural\n message = count === 1 ? pipes[0] : pipes[1];\n } else if (pipes.length >= 3) {\n // Format: zero | one | others\n // Logic: 0 => zero, 1 => one, others => others\n if (count === 0) message = pipes[0];\n else if (count === 1) message = pipes[1];\n else message = pipes[2];\n }\n }\n\n // 4. Interpolation\n // Support {{ key }}\n return message.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, param) => {\n return options[param] !== undefined ? options[param] : match;\n });\n};\n\n// Initialize language on load (optional, or user calls setLanguage)\n// But requirements say \"According to language load corresponding language pack\"\n// We can auto-initialize\nexport const init = async () => {\n const lang = getLanguage();\n await setLanguage(lang);\n return lang;\n};\n"],"names":["currentLang","localeMessages","getUrlParam","name","window","URLSearchParams","location","search","get","getLanguage","state","store","getState","toJS","rootPageId","forms","form","getNestedValue","getEnvLanguage","navigator","language","setLanguage","async","lang","response","fetch","ok","data","json","console","warn","error","message","obj","path","split","reduce","prev","curr","t","key","values","messages","undefined","fallback","linkRegex","test","replace","match","linkedKey","count","options","n","includes","pipes","map","s","trim","length","param","init"],"mappings":"AACA,IAAIA,EAAc,QAClB,MAAMC,EAAiB,CAAA,EAEjBC,EAAeC,IACnB,GAAsB,oBAAXC,OAAwB,OAAO,KAE1C,OADkB,IAAIC,gBAAgBD,OAAOE,SAASC,QACrCC,IAAIL,IAgCVM,EAAc,IACZP,EAAY,SAAWA,EAAY,aA9B3B,MACrB,IAAIQ,EAAQ,KAKZ,GAJIN,OAAOO,OAASP,OAAOO,MAAMC,WAC/BF,EAAQN,OAAOO,MAAMC,WAAWC,WAG7BH,EACH,OAAO,KAGT,MAAMI,WAAEA,EAAUC,MAAEA,GAAUL,EACxBM,EAAOD,EAAMD,GACnB,OAAKE,EAIQC,EAAeD,EAAM,oBAC7BC,EAAeD,EAAM,kCAJjB,MAiBsDE,KAPtC,oBAAdC,UACFA,UAAUC,SAEZ,OAKQ,QAGJC,EAAcC,MAAOC,IAChC,GAAKA,EAAL,CAEA,IAAKtB,EAAesB,GAClB,IACE,MAAMC,QAAiBC,MAAM,UAAUF,UACvC,GAAIC,EAASE,GAAI,CACf,MAAMC,QAAaH,EAASI,OAC5B3B,EAAesB,GAAQI,CACzB,MACEE,QAAQC,KAAK,+CAA+CP,SAEhE,CAAE,MAAOQ,GACPF,QAAQE,MAAM,uCAAuCA,EAAMC,UAC7D,CAGFhC,EAAcuB,CAhBH,GAmBPN,EAAiB,CAACgB,EAAKC,KAC3B,GAAKD,EACL,OAAOC,EAAKC,MAAM,KAAKC,OAAO,CAACC,EAAMC,IAC5BD,GAAQA,EAAKC,GACnBL,IAGQM,EAAI,CAACC,EAAKC,EAAS,MAC9B,MAAMC,EAAWzC,EAAeD,GAEhC,IAAIgC,EAAUf,EAAeyB,EAAUF,GAGvC,QAAgBG,IAAZX,EACF,MAAsB,iBAAXS,QAA2CE,IAApBF,EAAOG,SAC9BH,EAAOG,SAEXJ,EAIT,GAAuB,iBAAZR,EACP,OAAOA,EAIX,MAAMa,EAAY,eACdA,EAAUC,KAAKd,KACfA,EAAUA,EAAQe,QAAQF,EAAW,CAACG,EAAOC,IAClCV,EAAEU,EAAWR,KAK5B,IAAIS,EAAQ,KACRC,EAAUV,EAUd,GARsB,iBAAXA,GACPS,EAAQT,EACRU,EAAU,CAAED,MAAOT,EAAQW,EAAGX,IACL,iBAAXA,SACOE,IAAjBF,EAAOS,MAAqBA,EAAQT,EAAOS,WACzBP,IAAbF,EAAOW,IAAiBF,EAAQT,EAAOW,IAGtC,OAAVF,GAAkBlB,EAAQqB,SAAS,KAAM,CACzC,MAAMC,EAAQtB,EAAQG,MAAM,KAAKoB,IAAIC,GAAKA,EAAEC,QACvB,IAAjBH,EAAMI,OAGN1B,EAAoB,IAAVkB,EAAcI,EAAM,GAAKA,EAAM,GAClCA,EAAMI,QAAU,IAGN1B,EAAH,IAAVkB,EAAuBI,EAAM,GACd,IAAVJ,EAAuBI,EAAM,GACvBA,EAAM,GAE7B,CAIA,OAAOtB,EAAQe,QAAQ,uBAAwB,CAACC,EAAOW,SAC3BhB,IAAnBQ,EAAQQ,GAAuBR,EAAQQ,GAASX,IAO9CY,EAAOtC,UAChB,MAAMC,EAAOd,IAEb,aADMY,EAAYE,GACXA"}
|