nfx-ui 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{chunk-i18n-BTmbcksb.cjs → chunk-i18n--XStRXog.cjs} +2 -2
  2. package/dist/{chunk-i18n-BTmbcksb.cjs.map → chunk-i18n--XStRXog.cjs.map} +1 -1
  3. package/dist/{chunk-i18n-B8yt0Jex.mjs → chunk-i18n-ly0gkdrE.mjs} +2 -2
  4. package/dist/{chunk-i18n-B8yt0Jex.mjs.map → chunk-i18n-ly0gkdrE.mjs.map} +1 -1
  5. package/dist/{chunk-language-B8sfGadQ.mjs → chunk-language-BKIy1ot4.mjs} +1 -1
  6. package/dist/{chunk-language-B8sfGadQ.mjs.map → chunk-language-BKIy1ot4.mjs.map} +1 -1
  7. package/dist/{chunk-language-Bqmpuf2W.cjs → chunk-language-b-WaFsLY.cjs} +1 -1
  8. package/dist/{chunk-language-Bqmpuf2W.cjs.map → chunk-language-b-WaFsLY.cjs.map} +1 -1
  9. package/dist/chunk-preference-Bs5zQSRc.mjs +60 -0
  10. package/dist/chunk-preference-Bs5zQSRc.mjs.map +1 -0
  11. package/dist/chunk-preference-DE8Jp2f5.cjs +3 -0
  12. package/dist/chunk-preference-DE8Jp2f5.cjs.map +1 -0
  13. package/dist/languages.cjs +1 -1
  14. package/dist/languages.mjs +2 -2
  15. package/dist/layouts.cjs +1 -1
  16. package/dist/layouts.mjs +1 -1
  17. package/dist/preference.cjs +1 -1
  18. package/dist/preference.mjs +5 -5
  19. package/dist/src/preference/core.d.ts +12 -0
  20. package/dist/src/preference/core.d.ts.map +1 -0
  21. package/dist/src/preference/index.d.ts +23 -36
  22. package/dist/src/preference/index.d.ts.map +1 -1
  23. package/dist/src/preference/nfx_slice.d.ts +24 -0
  24. package/dist/src/preference/nfx_slice.d.ts.map +1 -0
  25. package/dist/src/preference/types.d.ts +28 -0
  26. package/dist/src/preference/types.d.ts.map +1 -0
  27. package/dist/utils.cjs +1 -1
  28. package/dist/utils.mjs +1 -1
  29. package/package.json +1 -1
  30. package/dist/chunk-preference-BWEpbZgC.mjs +0 -50
  31. package/dist/chunk-preference-BWEpbZgC.mjs.map +0 -1
  32. package/dist/chunk-preference-Dbugm0iQ.cjs +0 -3
  33. package/dist/chunk-preference-Dbugm0iQ.cjs.map +0 -1
@@ -1,3 +1,3 @@
1
- const _=require("./chunk-chunk-BFrxaqQT.cjs"),s=require("./chunk-lstorage-BnxLXHgH.cjs"),e=require("./chunk-language-Bqmpuf2W.cjs");let a=require("i18next");a=_.__toESM(a,1);let g=require("i18next-browser-languagedetector");g=_.__toESM(g,1);let P=require("react-i18next");var O={show:"Show Sidebar",hide:"Hide Sidebar"},G={layoutSwitcher:O},U={en:"English",zh:"Chinese",fr:"French"},$={languageSwitcher:U},R={default:"Default",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},M={theme:"Theme",language:"Language",layout:"Layout",preferences:"Preferences"},x={baseSwitcher:R,preference:M},q={default:"Default",light:"Light",dark:"Dark",cosmic:"Cosmic",corporate:"Corporate",forest:"Forest",coffee:"Coffee",wine:"Wine",wheat:"Wheat"},F={themeSwitcher:q},j={show:"Afficher la barre latérale",hide:"Masquer la barre latérale"},k={layoutSwitcher:j},T={en:"Anglais",zh:"Chinois",fr:"Français"},D={languageSwitcher:T},I={default:"Par défaut",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},V={theme:"Thème",language:"Langue",layout:"Disposition",preferences:"Préférences"},z={baseSwitcher:I,preference:V},B={default:"Par défaut",light:"Clair",dark:"Sombre",cosmic:"Cosmique",corporate:"Entreprise",forest:"Forêt",coffee:"Coffee",wine:"Vin",wheat:"Blé"},W={themeSwitcher:B},X={show:"显示侧边栏",hide:"隐藏侧边栏"},K={layoutSwitcher:X},Y={en:"英语",zh:"中文",fr:"法语"},H={languageSwitcher:Y},Z={default:"默认",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},J={theme:"主题",language:"语言",layout:"布局",preferences:"偏好设置"},Q={baseSwitcher:Z,preference:J},ee={default:"默认",light:"浅色",dark:"深色",cosmic:"宇宙",corporate:"企业",forest:"森林",coffee:"咖啡",wine:"酒红",wheat:"麦田"},re={themeSwitcher:ee},m=["theme","language","layout","preference"],p={theme:"theme",language:"language",layout:"layout",preference:"preference"},te={en:{theme:F,language:$,layout:G,preference:x},zh:{theme:re,language:H,layout:K,preference:Q},fr:{theme:W,language:D,layout:k,preference:z}};function w(){return{RESOURCES:te,NAME_SPACES_MAP:p,NAME_SPACES:[...m]}}function L(){const r=s.getItem(e.LANGUAGE_STORAGE_KEY);return r==null||e.LANGUAGE_VALUES.includes(r)?r:void 0}function v(r){s.setItem(e.LANGUAGE_STORAGE_KEY,r)}function ae(){s.removeItem(e.LANGUAGE_STORAGE_KEY)}var A=!1;function ne(r){if(a.default.isInitialized)return;const d=w(),c=r.bundles,i=r.fallbackLng??e.LanguageEnum.ZH,b=[e.LanguageEnum.EN,e.LanguageEnum.ZH,e.LanguageEnum.FR].reduce((n,t)=>({...n,[t]:{...d.RESOURCES[t]??{},...c.RESOURCES[t]??{}}}),{}),S=[...c.NAME_SPACES,...d.NAME_SPACES.filter(n=>!c.NAME_SPACES.includes(n))],y=L()??i,N=n=>{const t=n.split("-")[0]?.toLowerCase()??"";e.LANGUAGE_VALUES.includes(t)&&v(t)};A||(a.default.on("languageChanged",N),A=!0),a.default.use(g.default).use(P.initReactI18next).init({compatibilityJSON:"v4",resources:b,lng:y,fallbackLng:i,supportedLngs:[...e.LANGUAGE_VALUES],load:"languageOnly",ns:S,defaultNS:S[0],interpolation:{escapeValue:!1},keySeparator:".",detection:{order:["localStorage","navigator","htmlTag","path","subdomain"],lookupLocalStorage:e.LANGUAGE_STORAGE_KEY,caches:["localStorage"]}});const h=r.onLoadExtraBundles;if(h){const n=u=>{const o=u.split("-")[0]?.toLowerCase()??"";return e.LANGUAGE_VALUES.includes(o)?o:i},t=async u=>{const o=n(u),l=await h(o);if(l==null)return;const C=Array.isArray(l)?l:[l];for(const{namespace:E,bundle:f}of C)E&&f&&typeof f=="object"&&a.default.addResourceBundle(o,E,f,!0,!0)};t(a.default.language||i),a.default.on("languageChanged",u=>{t(u)})}}var ue=a.default;Object.defineProperty(exports,"NFX_NAMESPACES",{enumerable:!0,get:function(){return m}});Object.defineProperty(exports,"NFX_NAMESPACES_MAP",{enumerable:!0,get:function(){return p}});Object.defineProperty(exports,"getDefaultNfxBundles",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"getLanguageStorage",{enumerable:!0,get:function(){return L}});Object.defineProperty(exports,"i18n_default",{enumerable:!0,get:function(){return ue}});Object.defineProperty(exports,"initI18n",{enumerable:!0,get:function(){return ne}});Object.defineProperty(exports,"removeLanguageStorage",{enumerable:!0,get:function(){return ae}});Object.defineProperty(exports,"setLanguageStorage",{enumerable:!0,get:function(){return v}});
1
+ const _=require("./chunk-chunk-BFrxaqQT.cjs"),s=require("./chunk-lstorage-BnxLXHgH.cjs"),e=require("./chunk-language-b-WaFsLY.cjs");let a=require("i18next");a=_.__toESM(a,1);let g=require("i18next-browser-languagedetector");g=_.__toESM(g,1);let P=require("react-i18next");var O={show:"Show Sidebar",hide:"Hide Sidebar"},G={layoutSwitcher:O},U={en:"English",zh:"Chinese",fr:"French"},$={languageSwitcher:U},R={default:"Default",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},M={theme:"Theme",language:"Language",layout:"Layout",preferences:"Preferences"},x={baseSwitcher:R,preference:M},q={default:"Default",light:"Light",dark:"Dark",cosmic:"Cosmic",corporate:"Corporate",forest:"Forest",coffee:"Coffee",wine:"Wine",wheat:"Wheat"},F={themeSwitcher:q},j={show:"Afficher la barre latérale",hide:"Masquer la barre latérale"},k={layoutSwitcher:j},T={en:"Anglais",zh:"Chinois",fr:"Français"},D={languageSwitcher:T},I={default:"Par défaut",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},V={theme:"Thème",language:"Langue",layout:"Disposition",preferences:"Préférences"},z={baseSwitcher:I,preference:V},B={default:"Par défaut",light:"Clair",dark:"Sombre",cosmic:"Cosmique",corporate:"Entreprise",forest:"Forêt",coffee:"Coffee",wine:"Vin",wheat:"Blé"},W={themeSwitcher:B},X={show:"显示侧边栏",hide:"隐藏侧边栏"},K={layoutSwitcher:X},Y={en:"英语",zh:"中文",fr:"法语"},H={languageSwitcher:Y},Z={default:"默认",ios:"iOS",android:"Android",windows:"Windows",linux:"Linux"},J={theme:"主题",language:"语言",layout:"布局",preferences:"偏好设置"},Q={baseSwitcher:Z,preference:J},ee={default:"默认",light:"浅色",dark:"深色",cosmic:"宇宙",corporate:"企业",forest:"森林",coffee:"咖啡",wine:"酒红",wheat:"麦田"},re={themeSwitcher:ee},m=["theme","language","layout","preference"],p={theme:"theme",language:"language",layout:"layout",preference:"preference"},te={en:{theme:F,language:$,layout:G,preference:x},zh:{theme:re,language:H,layout:K,preference:Q},fr:{theme:W,language:D,layout:k,preference:z}};function w(){return{RESOURCES:te,NAME_SPACES_MAP:p,NAME_SPACES:[...m]}}function L(){const r=s.getItem(e.LANGUAGE_STORAGE_KEY);return r==null||e.LANGUAGE_VALUES.includes(r)?r:void 0}function v(r){s.setItem(e.LANGUAGE_STORAGE_KEY,r)}function ae(){s.removeItem(e.LANGUAGE_STORAGE_KEY)}var A=!1;function ne(r){if(a.default.isInitialized)return;const d=w(),c=r.bundles,i=r.fallbackLng??e.LanguageEnum.ZH,b=[e.LanguageEnum.EN,e.LanguageEnum.ZH,e.LanguageEnum.FR].reduce((n,t)=>({...n,[t]:{...d.RESOURCES[t]??{},...c.RESOURCES[t]??{}}}),{}),S=[...c.NAME_SPACES,...d.NAME_SPACES.filter(n=>!c.NAME_SPACES.includes(n))],y=L()??i,N=n=>{const t=n.split("-")[0]?.toLowerCase()??"";e.LANGUAGE_VALUES.includes(t)&&v(t)};A||(a.default.on("languageChanged",N),A=!0),a.default.use(g.default).use(P.initReactI18next).init({compatibilityJSON:"v4",resources:b,lng:y,fallbackLng:i,supportedLngs:[...e.LANGUAGE_VALUES],load:"languageOnly",ns:S,defaultNS:S[0],interpolation:{escapeValue:!1},keySeparator:".",detection:{order:["localStorage","navigator","htmlTag","path","subdomain"],lookupLocalStorage:e.LANGUAGE_STORAGE_KEY,caches:["localStorage"]}});const h=r.onLoadExtraBundles;if(h){const n=u=>{const o=u.split("-")[0]?.toLowerCase()??"";return e.LANGUAGE_VALUES.includes(o)?o:i},t=async u=>{const o=n(u),l=await h(o);if(l==null)return;const C=Array.isArray(l)?l:[l];for(const{namespace:E,bundle:f}of C)E&&f&&typeof f=="object"&&a.default.addResourceBundle(o,E,f,!0,!0)};t(a.default.language||i),a.default.on("languageChanged",u=>{t(u)})}}var ue=a.default;Object.defineProperty(exports,"NFX_NAMESPACES",{enumerable:!0,get:function(){return m}});Object.defineProperty(exports,"NFX_NAMESPACES_MAP",{enumerable:!0,get:function(){return p}});Object.defineProperty(exports,"getDefaultNfxBundles",{enumerable:!0,get:function(){return w}});Object.defineProperty(exports,"getLanguageStorage",{enumerable:!0,get:function(){return L}});Object.defineProperty(exports,"i18n_default",{enumerable:!0,get:function(){return ue}});Object.defineProperty(exports,"initI18n",{enumerable:!0,get:function(){return ne}});Object.defineProperty(exports,"removeLanguageStorage",{enumerable:!0,get:function(){return ae}});Object.defineProperty(exports,"setLanguageStorage",{enumerable:!0,get:function(){return v}});
2
2
 
3
- //# sourceMappingURL=chunk-i18n-BTmbcksb.cjs.map
3
+ //# sourceMappingURL=chunk-i18n--XStRXog.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-i18n-BTmbcksb.cjs","names":[],"sources":["../src/languages/resources/en/layout.json","../src/languages/resources/en/language.json","../src/languages/resources/en/preference.json","../src/languages/resources/en/theme.json","../src/languages/resources/fr/layout.json","../src/languages/resources/fr/language.json","../src/languages/resources/fr/preference.json","../src/languages/resources/fr/theme.json","../src/languages/resources/zh/layout.json","../src/languages/resources/zh/language.json","../src/languages/resources/zh/preference.json","../src/languages/resources/zh/theme.json","../src/languages/resources/index.ts","../src/languages/utils/languageStorage.ts","../src/languages/languages/i18n.ts"],"sourcesContent":["{\n \"layoutSwitcher\": {\n \"show\": \"Show Sidebar\",\n \"hide\": \"Hide Sidebar\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"English\",\n \"zh\": \"Chinese\",\n \"fr\": \"French\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Default\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Theme\",\n \"language\": \"Language\",\n \"layout\": \"Layout\",\n \"preferences\": \"Preferences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Default\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"cosmic\": \"Cosmic\",\n \"corporate\": \"Corporate\",\n \"forest\": \"Forest\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Wine\",\n \"wheat\": \"Wheat\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"Afficher la barre latérale\",\n \"hide\": \"Masquer la barre latérale\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"Anglais\",\n \"zh\": \"Chinois\",\n \"fr\": \"Français\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Par défaut\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Thème\",\n \"language\": \"Langue\",\n \"layout\": \"Disposition\",\n \"preferences\": \"Préférences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Par défaut\",\n \"light\": \"Clair\",\n \"dark\": \"Sombre\",\n \"cosmic\": \"Cosmique\",\n \"corporate\": \"Entreprise\",\n \"forest\": \"Forêt\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Vin\",\n \"wheat\": \"Blé\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"显示侧边栏\",\n \"hide\": \"隐藏侧边栏\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"英语\",\n \"zh\": \"中文\",\n \"fr\": \"法语\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"默认\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"主题\",\n \"language\": \"语言\",\n \"layout\": \"布局\",\n \"preferences\": \"偏好设置\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"默认\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"cosmic\": \"宇宙\",\n \"corporate\": \"企业\",\n \"forest\": \"森林\",\n \"coffee\": \"咖啡\",\n \"wine\": \"酒红\",\n \"wheat\": \"麦田\"\n }\n}\n","/**\n * NFX-UI 内置多语言资源:theme / language / layout / preference 四个命名空间,en / zh / fr 三种语言。\n * Built-in i18n resources: namespaces theme, language, layout, preference; languages en, zh, fr.\n *\n * 使用方可在 createI18nResources 时合并此资源,使 ThemeSwitcher / LanguageSwitcher / LayoutSwitcher 使用默认翻译。\n * Consumers can merge these resources in createI18nResources so switchers use default labels.\n */\nimport type { CreateI18nResourcesResult, NameSpacesMap, Resources } from \"../types\";\n\nimport enLayout from \"./en/layout.json\";\nimport enLanguage from \"./en/language.json\";\nimport enPreference from \"./en/preference.json\";\nimport enTheme from \"./en/theme.json\";\nimport frLayout from \"./fr/layout.json\";\nimport frLanguage from \"./fr/language.json\";\nimport frPreference from \"./fr/preference.json\";\nimport frTheme from \"./fr/theme.json\";\nimport zhLayout from \"./zh/layout.json\";\nimport zhLanguage from \"./zh/language.json\";\nimport zhPreference from \"./zh/preference.json\";\nimport zhTheme from \"./zh/theme.json\";\n\nexport const NFX_NAMESPACES = [\"theme\", \"language\", \"layout\", \"preference\"] as const;\nexport const NFX_NAMESPACES_MAP: NameSpacesMap = {\n theme: \"theme\",\n language: \"language\",\n layout: \"layout\",\n preference: \"preference\",\n};\n\nconst DEFAULT_NFX_RESOURCES: Resources = {\n en: {\n theme: enTheme as Record<string, unknown>,\n language: enLanguage as Record<string, unknown>,\n layout: enLayout as Record<string, unknown>,\n preference: enPreference as Record<string, unknown>,\n },\n zh: {\n theme: zhTheme as Record<string, unknown>,\n language: zhLanguage as Record<string, unknown>,\n layout: zhLayout as Record<string, unknown>,\n preference: zhPreference as Record<string, unknown>,\n },\n fr: {\n theme: frTheme as Record<string, unknown>,\n language: frLanguage as Record<string, unknown>,\n layout: frLayout as Record<string, unknown>,\n preference: frPreference as Record<string, unknown>,\n },\n};\n\n/**\n * 返回 NFX-UI 默认文案包,可与使用方自建 resources 合并后传入 createI18nResources。\n * Returns default NFX bundles; merge with your resources and pass to createI18nResources.\n */\nexport function getDefaultNfxBundles(): CreateI18nResourcesResult {\n return {\n RESOURCES: DEFAULT_NFX_RESOURCES,\n NAME_SPACES_MAP: NFX_NAMESPACES_MAP,\n NAME_SPACES: [...NFX_NAMESPACES],\n };\n}\n","/**\n * 语言相关 localStorage 读写与移除,统一走 utils/lstorage;读写类型为 LanguageEnum。\n * Language localStorage get/set/remove via utils/lstorage; typed as LanguageEnum.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES, LanguageEnum } from \"../types\";\n\nexport function getLanguageStorage(): Nilable<LanguageEnum> {\n const raw = getItem(LANGUAGE_STORAGE_KEY);\n if (raw == null) return raw;\n return (LANGUAGE_VALUES as readonly string[]).includes(raw) ? (raw as LanguageEnum) : undefined;\n}\n\nexport function setLanguageStorage(value: LanguageEnum): void {\n setItem(LANGUAGE_STORAGE_KEY, value);\n}\n\nexport function removeLanguageStorage(): void {\n removeItem(LANGUAGE_STORAGE_KEY);\n}\n","/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用,changeLanguage 供外部切换语言。\n * 默认会合并 NFX-UI 自带的 theme / language / layout / preference 四个命名空间,使用方只需传入自己的 bundles。\n * i18n init and instance: initI18n called by LanguageProvider. Merges built-in theme/language/layout/preference by default.\n */\nimport type { InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\nimport { LanguageEnum, LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES } from \"../types\";\nimport { getLanguageStorage, setLanguageStorage } from \"../utils/languageStorage\";\n\nlet languagePersistAttached = false;\n\n/**\n * 初始化 i18n。会先合并 NFX-UI 自带的四类 JSON(theme/language/layout/preference),再与用户传入的 bundles 合并(用户可覆盖)。\n * Init i18n. Merges built-in NFX bundles (theme, language, layout, preference) with user bundles (user overrides).\n */\nexport function initI18n(options: InitI18nOptions): void {\n /** React StrictMode remounts the provider; i18next 原单例二次 init 会弄乱资源。 */\n if (i18n.isInitialized) {\n return;\n }\n\n const nfx = getDefaultNfxBundles();\n const user = options.bundles;\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n\n /** Same key as `lookupLocalStorage`: prefer saved choice before navigator. */\n const initialLng = getLanguageStorage() ?? fallbackLng;\n\n const persistLanguage = (lng: string) => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n if ((LANGUAGE_VALUES as readonly string[]).includes(base)) {\n setLanguageStorage(base as LanguageEnum);\n }\n };\n\n if (!languagePersistAttached) {\n i18n.on(\"languageChanged\", persistLanguage);\n languagePersistAttached = true;\n }\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: initialLng,\n fallbackLng,\n /**\n * 资源只注册 en/zh/fr;.detector 或浏览器会给出 zh-CN、en-US 等,若不收敛则整语言匹配失败 → 界面全是 key。\n * Bundles are only `en` / `zh` / `fr`; normalize regional codes so namespaces resolve.\n */\n supportedLngs: [...LANGUAGE_VALUES],\n load: \"languageOnly\",\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n /**\n * Detector walks `order` and concatenates hits; first candidate wins for resolution.\n * `lookupLocalStorage` must match `getLanguageStorage` / `setLanguageStorage` (LANGUAGE_STORAGE_KEY).\n * Explicit `lng: initialLng` above mirrors that rule so behavior is obvious without reading plugin internals.\n */\n detection: {\n order: [\"localStorage\", \"navigator\", \"htmlTag\", \"path\", \"subdomain\"],\n lookupLocalStorage: LANGUAGE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const toSupported = (lng: string): LanguageEnum => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n return (LANGUAGE_VALUES as readonly string[]).includes(base) ? (base as LanguageEnum) : fallbackLng;\n };\n const apply = async (lng: string) => {\n const code = toSupported(lng);\n const result = await onLoad(code);\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(code, namespace, bundle, true, true);\n }\n }\n };\n void apply(i18n.language || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng));\n }\n}\n\nexport default i18n;\n"],"mappings":"+pDYsBa,EAAiB,CAAC,QAAS,WAAY,SAAU,cACjD,EAAoC,CAC/C,MAAO,QACP,SAAU,WACV,OAAQ,SACR,WAAY,cAGR,GAAmC,CACvC,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,GACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,IAQhB,SAAgB,GAAkD,CAChE,MAAO,CACL,UAAW,GACX,gBAAiB,EACjB,YAAa,CAAC,GAAG,CAAA,GClDrB,SAAgB,GAA4C,CAC1D,MAAM,EAAM,EAAA,QAAQ,EAAA,oBAAA,EACpB,OAAI,GAAO,MACH,EAAA,gBAAsC,SAAS,CAAA,EAD/B,EAC8D,OAGxF,SAAgB,EAAmB,EAA2B,CAC5D,EAAA,QAAQ,EAAA,qBAAsB,CAAA,EAGhC,SAAgB,IAA8B,CAC5C,EAAA,WAAW,EAAA,oBAAA,ECLb,IAAI,EAA0B,GAM9B,SAAgB,GAAS,EAAgC,CAEvD,GAAI,EAAA,QAAK,cACP,OAGF,MAAM,EAAM,EAAA,EACN,EAAO,EAAQ,QACf,EAAc,EAAQ,aAAe,EAAA,aAAa,GAElD,EAAa,CAAC,EAAA,aAAa,GAAI,EAAA,aAAa,GAAI,EAAA,aAAa,IAAc,OAAA,CAC9E,EAAK,KAAU,CACd,GAAG,GACF,CAAA,EAAO,CACN,GAAI,EAAI,UAAU,CAAA,GAAS,CAAA,EAC3B,GAAI,EAAK,UAAU,CAAA,GAAS,CAAA,KAGhC,CAAA,CAAE,EAEE,EAAc,CAAC,GAAG,EAAK,YAAa,GAAG,EAAI,YAAY,OAAQ,GAAM,CAAC,EAAK,YAAY,SAAS,CAAA,CAAE,CAAC,EAGnG,EAAa,EAAA,GAAwB,EAErC,EAAmB,GAAgB,CACvC,MAAM,EAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,GAAiB,GAC5C,EAAA,gBAAsC,SAAS,CAAA,GAClD,EAAmB,CAAA,GAIlB,IACH,EAAA,QAAK,GAAG,kBAAmB,CAAA,EAC3B,EAA0B,IAG5B,EAAA,QACG,IAAI,EAAA,OAAA,EACJ,IAAI,EAAA,gBAAA,EACJ,KAAK,CACJ,kBAAmB,KACnB,UAAW,EACX,IAAK,EACL,YAAA,EAKA,cAAe,CAAC,GAAG,EAAA,eAAA,EACnB,KAAM,eACN,GAAI,EACJ,UAAW,EAAY,CAAA,EACvB,cAAe,CAAE,YAAa,EAAA,EAC9B,aAAc,IAMd,UAAW,CACT,MAAO,CAAC,eAAgB,YAAa,UAAW,OAAQ,aACxD,mBAAoB,EAAA,qBACpB,OAAQ,CAAC,cAAA,GAEZ,EAEH,MAAM,EAAS,EAAQ,mBACvB,GAAI,EAAQ,CACV,MAAM,EAAe,GAA8B,CACjD,MAAM,EAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,GAAiB,GACjD,OAAQ,EAAA,gBAAsC,SAAS,CAAA,EAAS,EAAwB,GAEpF,EAAQ,MAAO,GAAgB,CACnC,MAAM,EAAO,EAAY,CAAA,EACnB,EAAS,MAAM,EAAO,CAAA,EAC5B,GAAI,GAAU,KAAM,OACpB,MAAM,EAAQ,MAAM,QAAQ,CAAA,EAAU,EAAS,CAAC,CAAA,EAChD,SAAW,CAAE,UAAA,EAAW,OAAA,CAAA,IAAY,EAC9B,GAAa,GAAU,OAAO,GAAW,UAC3C,EAAA,QAAK,kBAAkB,EAAM,EAAW,EAAQ,GAAM,EAAA,GAIvD,EAAM,EAAA,QAAK,UAAY,CAAA,EAC5B,EAAA,QAAK,GAAG,kBAAoB,GAAA,CAAa,EAAM,CAAA,EAAI,GAIvD,IAAA,GAAe,EAAA"}
1
+ {"version":3,"file":"chunk-i18n--XStRXog.cjs","names":[],"sources":["../src/languages/resources/en/layout.json","../src/languages/resources/en/language.json","../src/languages/resources/en/preference.json","../src/languages/resources/en/theme.json","../src/languages/resources/fr/layout.json","../src/languages/resources/fr/language.json","../src/languages/resources/fr/preference.json","../src/languages/resources/fr/theme.json","../src/languages/resources/zh/layout.json","../src/languages/resources/zh/language.json","../src/languages/resources/zh/preference.json","../src/languages/resources/zh/theme.json","../src/languages/resources/index.ts","../src/languages/utils/languageStorage.ts","../src/languages/languages/i18n.ts"],"sourcesContent":["{\n \"layoutSwitcher\": {\n \"show\": \"Show Sidebar\",\n \"hide\": \"Hide Sidebar\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"English\",\n \"zh\": \"Chinese\",\n \"fr\": \"French\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Default\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Theme\",\n \"language\": \"Language\",\n \"layout\": \"Layout\",\n \"preferences\": \"Preferences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Default\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"cosmic\": \"Cosmic\",\n \"corporate\": \"Corporate\",\n \"forest\": \"Forest\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Wine\",\n \"wheat\": \"Wheat\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"Afficher la barre latérale\",\n \"hide\": \"Masquer la barre latérale\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"Anglais\",\n \"zh\": \"Chinois\",\n \"fr\": \"Français\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Par défaut\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Thème\",\n \"language\": \"Langue\",\n \"layout\": \"Disposition\",\n \"preferences\": \"Préférences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Par défaut\",\n \"light\": \"Clair\",\n \"dark\": \"Sombre\",\n \"cosmic\": \"Cosmique\",\n \"corporate\": \"Entreprise\",\n \"forest\": \"Forêt\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Vin\",\n \"wheat\": \"Blé\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"显示侧边栏\",\n \"hide\": \"隐藏侧边栏\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"英语\",\n \"zh\": \"中文\",\n \"fr\": \"法语\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"默认\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"主题\",\n \"language\": \"语言\",\n \"layout\": \"布局\",\n \"preferences\": \"偏好设置\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"默认\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"cosmic\": \"宇宙\",\n \"corporate\": \"企业\",\n \"forest\": \"森林\",\n \"coffee\": \"咖啡\",\n \"wine\": \"酒红\",\n \"wheat\": \"麦田\"\n }\n}\n","/**\n * NFX-UI 内置多语言资源:theme / language / layout / preference 四个命名空间,en / zh / fr 三种语言。\n * Built-in i18n resources: namespaces theme, language, layout, preference; languages en, zh, fr.\n *\n * 使用方可在 createI18nResources 时合并此资源,使 ThemeSwitcher / LanguageSwitcher / LayoutSwitcher 使用默认翻译。\n * Consumers can merge these resources in createI18nResources so switchers use default labels.\n */\nimport type { CreateI18nResourcesResult, NameSpacesMap, Resources } from \"../types\";\n\nimport enLayout from \"./en/layout.json\";\nimport enLanguage from \"./en/language.json\";\nimport enPreference from \"./en/preference.json\";\nimport enTheme from \"./en/theme.json\";\nimport frLayout from \"./fr/layout.json\";\nimport frLanguage from \"./fr/language.json\";\nimport frPreference from \"./fr/preference.json\";\nimport frTheme from \"./fr/theme.json\";\nimport zhLayout from \"./zh/layout.json\";\nimport zhLanguage from \"./zh/language.json\";\nimport zhPreference from \"./zh/preference.json\";\nimport zhTheme from \"./zh/theme.json\";\n\nexport const NFX_NAMESPACES = [\"theme\", \"language\", \"layout\", \"preference\"] as const;\nexport const NFX_NAMESPACES_MAP: NameSpacesMap = {\n theme: \"theme\",\n language: \"language\",\n layout: \"layout\",\n preference: \"preference\",\n};\n\nconst DEFAULT_NFX_RESOURCES: Resources = {\n en: {\n theme: enTheme as Record<string, unknown>,\n language: enLanguage as Record<string, unknown>,\n layout: enLayout as Record<string, unknown>,\n preference: enPreference as Record<string, unknown>,\n },\n zh: {\n theme: zhTheme as Record<string, unknown>,\n language: zhLanguage as Record<string, unknown>,\n layout: zhLayout as Record<string, unknown>,\n preference: zhPreference as Record<string, unknown>,\n },\n fr: {\n theme: frTheme as Record<string, unknown>,\n language: frLanguage as Record<string, unknown>,\n layout: frLayout as Record<string, unknown>,\n preference: frPreference as Record<string, unknown>,\n },\n};\n\n/**\n * 返回 NFX-UI 默认文案包,可与使用方自建 resources 合并后传入 createI18nResources。\n * Returns default NFX bundles; merge with your resources and pass to createI18nResources.\n */\nexport function getDefaultNfxBundles(): CreateI18nResourcesResult {\n return {\n RESOURCES: DEFAULT_NFX_RESOURCES,\n NAME_SPACES_MAP: NFX_NAMESPACES_MAP,\n NAME_SPACES: [...NFX_NAMESPACES],\n };\n}\n","/**\n * 语言相关 localStorage 读写与移除,统一走 utils/lstorage;读写类型为 LanguageEnum。\n * Language localStorage get/set/remove via utils/lstorage; typed as LanguageEnum.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES, LanguageEnum } from \"../types\";\n\nexport function getLanguageStorage(): Nilable<LanguageEnum> {\n const raw = getItem(LANGUAGE_STORAGE_KEY);\n if (raw == null) return raw;\n return (LANGUAGE_VALUES as readonly string[]).includes(raw) ? (raw as LanguageEnum) : undefined;\n}\n\nexport function setLanguageStorage(value: LanguageEnum): void {\n setItem(LANGUAGE_STORAGE_KEY, value);\n}\n\nexport function removeLanguageStorage(): void {\n removeItem(LANGUAGE_STORAGE_KEY);\n}\n","/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用,changeLanguage 供外部切换语言。\n * 默认会合并 NFX-UI 自带的 theme / language / layout / preference 四个命名空间,使用方只需传入自己的 bundles。\n * i18n init and instance: initI18n called by LanguageProvider. Merges built-in theme/language/layout/preference by default.\n */\nimport type { InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\nimport { LanguageEnum, LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES } from \"../types\";\nimport { getLanguageStorage, setLanguageStorage } from \"../utils/languageStorage\";\n\nlet languagePersistAttached = false;\n\n/**\n * 初始化 i18n。会先合并 NFX-UI 自带的四类 JSON(theme/language/layout/preference),再与用户传入的 bundles 合并(用户可覆盖)。\n * Init i18n. Merges built-in NFX bundles (theme, language, layout, preference) with user bundles (user overrides).\n */\nexport function initI18n(options: InitI18nOptions): void {\n /** React StrictMode remounts the provider; i18next 原单例二次 init 会弄乱资源。 */\n if (i18n.isInitialized) {\n return;\n }\n\n const nfx = getDefaultNfxBundles();\n const user = options.bundles;\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n\n /** Same key as `lookupLocalStorage`: prefer saved choice before navigator. */\n const initialLng = getLanguageStorage() ?? fallbackLng;\n\n const persistLanguage = (lng: string) => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n if ((LANGUAGE_VALUES as readonly string[]).includes(base)) {\n setLanguageStorage(base as LanguageEnum);\n }\n };\n\n if (!languagePersistAttached) {\n i18n.on(\"languageChanged\", persistLanguage);\n languagePersistAttached = true;\n }\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: initialLng,\n fallbackLng,\n /**\n * 资源只注册 en/zh/fr;.detector 或浏览器会给出 zh-CN、en-US 等,若不收敛则整语言匹配失败 → 界面全是 key。\n * Bundles are only `en` / `zh` / `fr`; normalize regional codes so namespaces resolve.\n */\n supportedLngs: [...LANGUAGE_VALUES],\n load: \"languageOnly\",\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n /**\n * Detector walks `order` and concatenates hits; first candidate wins for resolution.\n * `lookupLocalStorage` must match `getLanguageStorage` / `setLanguageStorage` (LANGUAGE_STORAGE_KEY).\n * Explicit `lng: initialLng` above mirrors that rule so behavior is obvious without reading plugin internals.\n */\n detection: {\n order: [\"localStorage\", \"navigator\", \"htmlTag\", \"path\", \"subdomain\"],\n lookupLocalStorage: LANGUAGE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const toSupported = (lng: string): LanguageEnum => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n return (LANGUAGE_VALUES as readonly string[]).includes(base) ? (base as LanguageEnum) : fallbackLng;\n };\n const apply = async (lng: string) => {\n const code = toSupported(lng);\n const result = await onLoad(code);\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(code, namespace, bundle, true, true);\n }\n }\n };\n void apply(i18n.language || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng));\n }\n}\n\nexport default i18n;\n"],"mappings":"+pDYsBa,EAAiB,CAAC,QAAS,WAAY,SAAU,cACjD,EAAoC,CAC/C,MAAO,QACP,SAAU,WACV,OAAQ,SACR,WAAY,cAGR,GAAmC,CACvC,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,GACP,SAAU,EACV,OAAQ,EACR,WAAY,GAEd,GAAI,CACF,MAAO,EACP,SAAU,EACV,OAAQ,EACR,WAAY,IAQhB,SAAgB,GAAkD,CAChE,MAAO,CACL,UAAW,GACX,gBAAiB,EACjB,YAAa,CAAC,GAAG,CAAA,GClDrB,SAAgB,GAA4C,CAC1D,MAAM,EAAM,EAAA,QAAQ,EAAA,oBAAA,EACpB,OAAI,GAAO,MACH,EAAA,gBAAsC,SAAS,CAAA,EAD/B,EAC8D,OAGxF,SAAgB,EAAmB,EAA2B,CAC5D,EAAA,QAAQ,EAAA,qBAAsB,CAAA,EAGhC,SAAgB,IAA8B,CAC5C,EAAA,WAAW,EAAA,oBAAA,ECLb,IAAI,EAA0B,GAM9B,SAAgB,GAAS,EAAgC,CAEvD,GAAI,EAAA,QAAK,cACP,OAGF,MAAM,EAAM,EAAA,EACN,EAAO,EAAQ,QACf,EAAc,EAAQ,aAAe,EAAA,aAAa,GAElD,EAAa,CAAC,EAAA,aAAa,GAAI,EAAA,aAAa,GAAI,EAAA,aAAa,IAAc,OAAA,CAC9E,EAAK,KAAU,CACd,GAAG,GACF,CAAA,EAAO,CACN,GAAI,EAAI,UAAU,CAAA,GAAS,CAAA,EAC3B,GAAI,EAAK,UAAU,CAAA,GAAS,CAAA,KAGhC,CAAA,CAAE,EAEE,EAAc,CAAC,GAAG,EAAK,YAAa,GAAG,EAAI,YAAY,OAAQ,GAAM,CAAC,EAAK,YAAY,SAAS,CAAA,CAAE,CAAC,EAGnG,EAAa,EAAA,GAAwB,EAErC,EAAmB,GAAgB,CACvC,MAAM,EAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,GAAiB,GAC5C,EAAA,gBAAsC,SAAS,CAAA,GAClD,EAAmB,CAAA,GAIlB,IACH,EAAA,QAAK,GAAG,kBAAmB,CAAA,EAC3B,EAA0B,IAG5B,EAAA,QACG,IAAI,EAAA,OAAA,EACJ,IAAI,EAAA,gBAAA,EACJ,KAAK,CACJ,kBAAmB,KACnB,UAAW,EACX,IAAK,EACL,YAAA,EAKA,cAAe,CAAC,GAAG,EAAA,eAAA,EACnB,KAAM,eACN,GAAI,EACJ,UAAW,EAAY,CAAA,EACvB,cAAe,CAAE,YAAa,EAAA,EAC9B,aAAc,IAMd,UAAW,CACT,MAAO,CAAC,eAAgB,YAAa,UAAW,OAAQ,aACxD,mBAAoB,EAAA,qBACpB,OAAQ,CAAC,cAAA,GAEZ,EAEH,MAAM,EAAS,EAAQ,mBACvB,GAAI,EAAQ,CACV,MAAM,EAAe,GAA8B,CACjD,MAAM,EAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,GAAiB,GACjD,OAAQ,EAAA,gBAAsC,SAAS,CAAA,EAAS,EAAwB,GAEpF,EAAQ,MAAO,GAAgB,CACnC,MAAM,EAAO,EAAY,CAAA,EACnB,EAAS,MAAM,EAAO,CAAA,EAC5B,GAAI,GAAU,KAAM,OACpB,MAAM,EAAQ,MAAM,QAAQ,CAAA,EAAU,EAAS,CAAC,CAAA,EAChD,SAAW,CAAE,UAAA,EAAW,OAAA,CAAA,IAAY,EAC9B,GAAa,GAAU,OAAO,GAAW,UAC3C,EAAA,QAAK,kBAAkB,EAAM,EAAW,EAAQ,GAAM,EAAA,GAIvD,EAAM,EAAA,QAAK,UAAY,CAAA,EAC5B,EAAA,QAAK,GAAG,kBAAoB,GAAA,CAAa,EAAM,CAAA,EAAI,GAIvD,IAAA,GAAe,EAAA"}
@@ -1,5 +1,5 @@
1
1
  import { n as _, r as y, t as L } from "./chunk-lstorage-BVCD00Ow.mjs";
2
- import { i as l, n as c, r as s } from "./chunk-language-B8sfGadQ.mjs";
2
+ import { i as l, n as c, r as s } from "./chunk-language-BKIy1ot4.mjs";
3
3
  import t from "i18next";
4
4
  import C from "i18next-browser-languagedetector";
5
5
  import { initReactI18next as b } from "react-i18next";
@@ -211,4 +211,4 @@ export {
211
211
  de as t
212
212
  };
213
213
 
214
- //# sourceMappingURL=chunk-i18n-B8yt0Jex.mjs.map
214
+ //# sourceMappingURL=chunk-i18n-ly0gkdrE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-i18n-B8yt0Jex.mjs","names":[],"sources":["../src/languages/resources/en/layout.json","../src/languages/resources/en/language.json","../src/languages/resources/en/preference.json","../src/languages/resources/en/theme.json","../src/languages/resources/fr/layout.json","../src/languages/resources/fr/language.json","../src/languages/resources/fr/preference.json","../src/languages/resources/fr/theme.json","../src/languages/resources/zh/layout.json","../src/languages/resources/zh/language.json","../src/languages/resources/zh/preference.json","../src/languages/resources/zh/theme.json","../src/languages/resources/index.ts","../src/languages/utils/languageStorage.ts","../src/languages/languages/i18n.ts"],"sourcesContent":["{\n \"layoutSwitcher\": {\n \"show\": \"Show Sidebar\",\n \"hide\": \"Hide Sidebar\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"English\",\n \"zh\": \"Chinese\",\n \"fr\": \"French\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Default\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Theme\",\n \"language\": \"Language\",\n \"layout\": \"Layout\",\n \"preferences\": \"Preferences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Default\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"cosmic\": \"Cosmic\",\n \"corporate\": \"Corporate\",\n \"forest\": \"Forest\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Wine\",\n \"wheat\": \"Wheat\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"Afficher la barre latérale\",\n \"hide\": \"Masquer la barre latérale\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"Anglais\",\n \"zh\": \"Chinois\",\n \"fr\": \"Français\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Par défaut\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Thème\",\n \"language\": \"Langue\",\n \"layout\": \"Disposition\",\n \"preferences\": \"Préférences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Par défaut\",\n \"light\": \"Clair\",\n \"dark\": \"Sombre\",\n \"cosmic\": \"Cosmique\",\n \"corporate\": \"Entreprise\",\n \"forest\": \"Forêt\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Vin\",\n \"wheat\": \"Blé\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"显示侧边栏\",\n \"hide\": \"隐藏侧边栏\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"英语\",\n \"zh\": \"中文\",\n \"fr\": \"法语\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"默认\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"主题\",\n \"language\": \"语言\",\n \"layout\": \"布局\",\n \"preferences\": \"偏好设置\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"默认\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"cosmic\": \"宇宙\",\n \"corporate\": \"企业\",\n \"forest\": \"森林\",\n \"coffee\": \"咖啡\",\n \"wine\": \"酒红\",\n \"wheat\": \"麦田\"\n }\n}\n","/**\n * NFX-UI 内置多语言资源:theme / language / layout / preference 四个命名空间,en / zh / fr 三种语言。\n * Built-in i18n resources: namespaces theme, language, layout, preference; languages en, zh, fr.\n *\n * 使用方可在 createI18nResources 时合并此资源,使 ThemeSwitcher / LanguageSwitcher / LayoutSwitcher 使用默认翻译。\n * Consumers can merge these resources in createI18nResources so switchers use default labels.\n */\nimport type { CreateI18nResourcesResult, NameSpacesMap, Resources } from \"../types\";\n\nimport enLayout from \"./en/layout.json\";\nimport enLanguage from \"./en/language.json\";\nimport enPreference from \"./en/preference.json\";\nimport enTheme from \"./en/theme.json\";\nimport frLayout from \"./fr/layout.json\";\nimport frLanguage from \"./fr/language.json\";\nimport frPreference from \"./fr/preference.json\";\nimport frTheme from \"./fr/theme.json\";\nimport zhLayout from \"./zh/layout.json\";\nimport zhLanguage from \"./zh/language.json\";\nimport zhPreference from \"./zh/preference.json\";\nimport zhTheme from \"./zh/theme.json\";\n\nexport const NFX_NAMESPACES = [\"theme\", \"language\", \"layout\", \"preference\"] as const;\nexport const NFX_NAMESPACES_MAP: NameSpacesMap = {\n theme: \"theme\",\n language: \"language\",\n layout: \"layout\",\n preference: \"preference\",\n};\n\nconst DEFAULT_NFX_RESOURCES: Resources = {\n en: {\n theme: enTheme as Record<string, unknown>,\n language: enLanguage as Record<string, unknown>,\n layout: enLayout as Record<string, unknown>,\n preference: enPreference as Record<string, unknown>,\n },\n zh: {\n theme: zhTheme as Record<string, unknown>,\n language: zhLanguage as Record<string, unknown>,\n layout: zhLayout as Record<string, unknown>,\n preference: zhPreference as Record<string, unknown>,\n },\n fr: {\n theme: frTheme as Record<string, unknown>,\n language: frLanguage as Record<string, unknown>,\n layout: frLayout as Record<string, unknown>,\n preference: frPreference as Record<string, unknown>,\n },\n};\n\n/**\n * 返回 NFX-UI 默认文案包,可与使用方自建 resources 合并后传入 createI18nResources。\n * Returns default NFX bundles; merge with your resources and pass to createI18nResources.\n */\nexport function getDefaultNfxBundles(): CreateI18nResourcesResult {\n return {\n RESOURCES: DEFAULT_NFX_RESOURCES,\n NAME_SPACES_MAP: NFX_NAMESPACES_MAP,\n NAME_SPACES: [...NFX_NAMESPACES],\n };\n}\n","/**\n * 语言相关 localStorage 读写与移除,统一走 utils/lstorage;读写类型为 LanguageEnum。\n * Language localStorage get/set/remove via utils/lstorage; typed as LanguageEnum.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES, LanguageEnum } from \"../types\";\n\nexport function getLanguageStorage(): Nilable<LanguageEnum> {\n const raw = getItem(LANGUAGE_STORAGE_KEY);\n if (raw == null) return raw;\n return (LANGUAGE_VALUES as readonly string[]).includes(raw) ? (raw as LanguageEnum) : undefined;\n}\n\nexport function setLanguageStorage(value: LanguageEnum): void {\n setItem(LANGUAGE_STORAGE_KEY, value);\n}\n\nexport function removeLanguageStorage(): void {\n removeItem(LANGUAGE_STORAGE_KEY);\n}\n","/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用,changeLanguage 供外部切换语言。\n * 默认会合并 NFX-UI 自带的 theme / language / layout / preference 四个命名空间,使用方只需传入自己的 bundles。\n * i18n init and instance: initI18n called by LanguageProvider. Merges built-in theme/language/layout/preference by default.\n */\nimport type { InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\nimport { LanguageEnum, LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES } from \"../types\";\nimport { getLanguageStorage, setLanguageStorage } from \"../utils/languageStorage\";\n\nlet languagePersistAttached = false;\n\n/**\n * 初始化 i18n。会先合并 NFX-UI 自带的四类 JSON(theme/language/layout/preference),再与用户传入的 bundles 合并(用户可覆盖)。\n * Init i18n. Merges built-in NFX bundles (theme, language, layout, preference) with user bundles (user overrides).\n */\nexport function initI18n(options: InitI18nOptions): void {\n /** React StrictMode remounts the provider; i18next 原单例二次 init 会弄乱资源。 */\n if (i18n.isInitialized) {\n return;\n }\n\n const nfx = getDefaultNfxBundles();\n const user = options.bundles;\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n\n /** Same key as `lookupLocalStorage`: prefer saved choice before navigator. */\n const initialLng = getLanguageStorage() ?? fallbackLng;\n\n const persistLanguage = (lng: string) => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n if ((LANGUAGE_VALUES as readonly string[]).includes(base)) {\n setLanguageStorage(base as LanguageEnum);\n }\n };\n\n if (!languagePersistAttached) {\n i18n.on(\"languageChanged\", persistLanguage);\n languagePersistAttached = true;\n }\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: initialLng,\n fallbackLng,\n /**\n * 资源只注册 en/zh/fr;.detector 或浏览器会给出 zh-CN、en-US 等,若不收敛则整语言匹配失败 → 界面全是 key。\n * Bundles are only `en` / `zh` / `fr`; normalize regional codes so namespaces resolve.\n */\n supportedLngs: [...LANGUAGE_VALUES],\n load: \"languageOnly\",\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n /**\n * Detector walks `order` and concatenates hits; first candidate wins for resolution.\n * `lookupLocalStorage` must match `getLanguageStorage` / `setLanguageStorage` (LANGUAGE_STORAGE_KEY).\n * Explicit `lng: initialLng` above mirrors that rule so behavior is obvious without reading plugin internals.\n */\n detection: {\n order: [\"localStorage\", \"navigator\", \"htmlTag\", \"path\", \"subdomain\"],\n lookupLocalStorage: LANGUAGE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const toSupported = (lng: string): LanguageEnum => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n return (LANGUAGE_VALUES as readonly string[]).includes(base) ? (base as LanguageEnum) : fallbackLng;\n };\n const apply = async (lng: string) => {\n const code = toSupported(lng);\n const result = await onLoad(code);\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(code, namespace, bundle, true, true);\n }\n }\n };\n void apply(i18n.language || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng));\n }\n}\n\nexport default i18n;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BYsBa,KAAiB;AAAA,EAAC;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;GACjD,KAAoC;AAAA,EAC/C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;GAGR,KAAmC;AAAA,EACvC,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;EAEd,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;EAEd,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;;AAQhB,SAAgB,KAAkD;AAChE,SAAO;AAAA,IACL,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAa,CAAC,GAAG,EAAA;AAAA;;AClDrB,SAAgB,KAA4C;AAC1D,QAAM,IAAM,EAAQ,CAAA;AACpB,SAAI,KAAO,QACH,EAAsC,SAAS,CAAA,IAD/B,IAC8D;;AAGxF,SAAgB,GAAmB,GAA2B;AAC5D,EAAA,EAAQ,GAAsB,CAAA;;AAGhC,SAAgB,KAA8B;AAC5C,EAAA,EAAW,CAAA;;ACLb,IAAI,IAA0B;AAM9B,SAAgB,GAAS,GAAgC;AAEvD,MAAI,EAAK,cACP;AAGF,QAAM,IAAM,GAAA,GACN,IAAO,EAAQ,SACf,IAAc,EAAQ,eAAe,EAAa,IAElD,IAAa;AAAA,IAAC,EAAa;AAAA,IAAI,EAAa;AAAA,IAAI,EAAa;AAAA,IAAc,OAAA,CAC9E,GAAK,OAAU;AAAA,IACd,GAAG;AAAA,KACF,CAAA,GAAO;AAAA,MACN,GAAI,EAAI,UAAU,CAAA,KAAS,CAAA;AAAA,MAC3B,GAAI,EAAK,UAAU,CAAA,KAAS,CAAA;AAAA;MAGhC,CAAA,CAAE,GAEE,IAAc,CAAC,GAAG,EAAK,aAAa,GAAG,EAAI,YAAY,OAAA,CAAQ,MAAM,CAAC,EAAK,YAAY,SAAS,CAAA,CAAE,CAAC,GAGnG,IAAa,GAAA,KAAwB,GAErC,IAAA,CAAmB,MAAgB;AACvC,UAAM,IAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,KAAiB;AACjD,IAAK,EAAsC,SAAS,CAAA,KAClD,GAAmB,CAAA;AAAA;AAIvB,EAAK,MACH,EAAK,GAAG,mBAAmB,CAAA,GAC3B,IAA0B,KAG5B,EACG,IAAI,CAAA,EACJ,IAAI,CAAA,EACJ,KAAK;AAAA,IACJ,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,KAAK;AAAA,IACL,aAAA;AAAA,IAKA,eAAe,CAAC,GAAG,CAAA;AAAA,IACnB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW,EAAY,CAAA;AAAA,IACvB,eAAe,EAAE,aAAa,GAAA;AAAA,IAC9B,cAAc;AAAA,IAMd,WAAW;AAAA,MACT,OAAO;AAAA,QAAC;AAAA,QAAgB;AAAA,QAAa;AAAA,QAAW;AAAA,QAAQ;AAAA;MACxD,oBAAoB;AAAA,MACpB,QAAQ,CAAC,cAAA;AAAA;GAEZ;AAEH,QAAM,IAAS,EAAQ;AACvB,MAAI,GAAQ;AACV,UAAM,IAAA,CAAe,MAA8B;AACjD,YAAM,IAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,KAAiB;AACjD,aAAQ,EAAsC,SAAS,CAAA,IAAS,IAAwB;AAAA,OAEpF,IAAQ,OAAO,MAAgB;AACnC,YAAM,IAAO,EAAY,CAAA,GACnB,IAAS,MAAM,EAAO,CAAA;AAC5B,UAAI,KAAU,KAAM;AACpB,YAAM,IAAQ,MAAM,QAAQ,CAAA,IAAU,IAAS,CAAC,CAAA;AAChD,iBAAW,EAAE,WAAA,GAAW,QAAA,EAAA,KAAY,EAClC,CAAI,KAAa,KAAU,OAAO,KAAW,YAC3C,EAAK,kBAAkB,GAAM,GAAW,GAAQ,IAAM,EAAA;AAAA;AAIvD,IAAA,EAAM,EAAK,YAAY,CAAA,GAC5B,EAAK,GAAG,mBAAA,CAAoB,MAAA;AAAQ,MAAK,EAAM,CAAA;AAAA,KAAI;AAAA;;AAIvD,IAAA,KAAe"}
1
+ {"version":3,"file":"chunk-i18n-ly0gkdrE.mjs","names":[],"sources":["../src/languages/resources/en/layout.json","../src/languages/resources/en/language.json","../src/languages/resources/en/preference.json","../src/languages/resources/en/theme.json","../src/languages/resources/fr/layout.json","../src/languages/resources/fr/language.json","../src/languages/resources/fr/preference.json","../src/languages/resources/fr/theme.json","../src/languages/resources/zh/layout.json","../src/languages/resources/zh/language.json","../src/languages/resources/zh/preference.json","../src/languages/resources/zh/theme.json","../src/languages/resources/index.ts","../src/languages/utils/languageStorage.ts","../src/languages/languages/i18n.ts"],"sourcesContent":["{\n \"layoutSwitcher\": {\n \"show\": \"Show Sidebar\",\n \"hide\": \"Hide Sidebar\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"English\",\n \"zh\": \"Chinese\",\n \"fr\": \"French\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Default\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Theme\",\n \"language\": \"Language\",\n \"layout\": \"Layout\",\n \"preferences\": \"Preferences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Default\",\n \"light\": \"Light\",\n \"dark\": \"Dark\",\n \"cosmic\": \"Cosmic\",\n \"corporate\": \"Corporate\",\n \"forest\": \"Forest\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Wine\",\n \"wheat\": \"Wheat\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"Afficher la barre latérale\",\n \"hide\": \"Masquer la barre latérale\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"Anglais\",\n \"zh\": \"Chinois\",\n \"fr\": \"Français\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"Par défaut\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"Thème\",\n \"language\": \"Langue\",\n \"layout\": \"Disposition\",\n \"preferences\": \"Préférences\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"Par défaut\",\n \"light\": \"Clair\",\n \"dark\": \"Sombre\",\n \"cosmic\": \"Cosmique\",\n \"corporate\": \"Entreprise\",\n \"forest\": \"Forêt\",\n \"coffee\": \"Coffee\",\n \"wine\": \"Vin\",\n \"wheat\": \"Blé\"\n }\n}\n","{\n \"layoutSwitcher\": {\n \"show\": \"显示侧边栏\",\n \"hide\": \"隐藏侧边栏\"\n }\n}\n","{\n \"languageSwitcher\": {\n \"en\": \"英语\",\n \"zh\": \"中文\",\n \"fr\": \"法语\"\n }\n}\n","{\n \"baseSwitcher\": {\n \"default\": \"默认\",\n \"ios\": \"iOS\",\n \"android\": \"Android\",\n \"windows\": \"Windows\",\n \"linux\": \"Linux\"\n },\n \"preference\": {\n \"theme\": \"主题\",\n \"language\": \"语言\",\n \"layout\": \"布局\",\n \"preferences\": \"偏好设置\"\n }\n}\n","{\n \"themeSwitcher\": {\n \"default\": \"默认\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"cosmic\": \"宇宙\",\n \"corporate\": \"企业\",\n \"forest\": \"森林\",\n \"coffee\": \"咖啡\",\n \"wine\": \"酒红\",\n \"wheat\": \"麦田\"\n }\n}\n","/**\n * NFX-UI 内置多语言资源:theme / language / layout / preference 四个命名空间,en / zh / fr 三种语言。\n * Built-in i18n resources: namespaces theme, language, layout, preference; languages en, zh, fr.\n *\n * 使用方可在 createI18nResources 时合并此资源,使 ThemeSwitcher / LanguageSwitcher / LayoutSwitcher 使用默认翻译。\n * Consumers can merge these resources in createI18nResources so switchers use default labels.\n */\nimport type { CreateI18nResourcesResult, NameSpacesMap, Resources } from \"../types\";\n\nimport enLayout from \"./en/layout.json\";\nimport enLanguage from \"./en/language.json\";\nimport enPreference from \"./en/preference.json\";\nimport enTheme from \"./en/theme.json\";\nimport frLayout from \"./fr/layout.json\";\nimport frLanguage from \"./fr/language.json\";\nimport frPreference from \"./fr/preference.json\";\nimport frTheme from \"./fr/theme.json\";\nimport zhLayout from \"./zh/layout.json\";\nimport zhLanguage from \"./zh/language.json\";\nimport zhPreference from \"./zh/preference.json\";\nimport zhTheme from \"./zh/theme.json\";\n\nexport const NFX_NAMESPACES = [\"theme\", \"language\", \"layout\", \"preference\"] as const;\nexport const NFX_NAMESPACES_MAP: NameSpacesMap = {\n theme: \"theme\",\n language: \"language\",\n layout: \"layout\",\n preference: \"preference\",\n};\n\nconst DEFAULT_NFX_RESOURCES: Resources = {\n en: {\n theme: enTheme as Record<string, unknown>,\n language: enLanguage as Record<string, unknown>,\n layout: enLayout as Record<string, unknown>,\n preference: enPreference as Record<string, unknown>,\n },\n zh: {\n theme: zhTheme as Record<string, unknown>,\n language: zhLanguage as Record<string, unknown>,\n layout: zhLayout as Record<string, unknown>,\n preference: zhPreference as Record<string, unknown>,\n },\n fr: {\n theme: frTheme as Record<string, unknown>,\n language: frLanguage as Record<string, unknown>,\n layout: frLayout as Record<string, unknown>,\n preference: frPreference as Record<string, unknown>,\n },\n};\n\n/**\n * 返回 NFX-UI 默认文案包,可与使用方自建 resources 合并后传入 createI18nResources。\n * Returns default NFX bundles; merge with your resources and pass to createI18nResources.\n */\nexport function getDefaultNfxBundles(): CreateI18nResourcesResult {\n return {\n RESOURCES: DEFAULT_NFX_RESOURCES,\n NAME_SPACES_MAP: NFX_NAMESPACES_MAP,\n NAME_SPACES: [...NFX_NAMESPACES],\n };\n}\n","/**\n * 语言相关 localStorage 读写与移除,统一走 utils/lstorage;读写类型为 LanguageEnum。\n * Language localStorage get/set/remove via utils/lstorage; typed as LanguageEnum.\n */\nimport type { Nilable } from \"@/types/utils\";\nimport { getItem, removeItem, setItem } from \"@/utils/lstorage\";\n\nimport { LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES, LanguageEnum } from \"../types\";\n\nexport function getLanguageStorage(): Nilable<LanguageEnum> {\n const raw = getItem(LANGUAGE_STORAGE_KEY);\n if (raw == null) return raw;\n return (LANGUAGE_VALUES as readonly string[]).includes(raw) ? (raw as LanguageEnum) : undefined;\n}\n\nexport function setLanguageStorage(value: LanguageEnum): void {\n setItem(LANGUAGE_STORAGE_KEY, value);\n}\n\nexport function removeLanguageStorage(): void {\n removeItem(LANGUAGE_STORAGE_KEY);\n}\n","/**\n * i18n 初始化与实例:initI18n 由 LanguageProvider 调用,changeLanguage 供外部切换语言。\n * 默认会合并 NFX-UI 自带的 theme / language / layout / preference 四个命名空间,使用方只需传入自己的 bundles。\n * i18n init and instance: initI18n called by LanguageProvider. Merges built-in theme/language/layout/preference by default.\n */\nimport type { InitI18nOptions } from \"../types\";\n\nimport i18n from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { getDefaultNfxBundles } from \"../resources\";\nimport { LanguageEnum, LANGUAGE_STORAGE_KEY, LANGUAGE_VALUES } from \"../types\";\nimport { getLanguageStorage, setLanguageStorage } from \"../utils/languageStorage\";\n\nlet languagePersistAttached = false;\n\n/**\n * 初始化 i18n。会先合并 NFX-UI 自带的四类 JSON(theme/language/layout/preference),再与用户传入的 bundles 合并(用户可覆盖)。\n * Init i18n. Merges built-in NFX bundles (theme, language, layout, preference) with user bundles (user overrides).\n */\nexport function initI18n(options: InitI18nOptions): void {\n /** React StrictMode remounts the provider; i18next 原单例二次 init 会弄乱资源。 */\n if (i18n.isInitialized) {\n return;\n }\n\n const nfx = getDefaultNfxBundles();\n const user = options.bundles;\n const fallbackLng = options.fallbackLng ?? LanguageEnum.ZH;\n\n const RESOURCES = ([LanguageEnum.EN, LanguageEnum.ZH, LanguageEnum.FR] as const).reduce(\n (acc, lang) => ({\n ...acc,\n [lang]: {\n ...(nfx.RESOURCES[lang] ?? {}),\n ...(user.RESOURCES[lang] ?? {}),\n },\n }),\n {} as typeof user.RESOURCES,\n );\n const NAME_SPACES = [...user.NAME_SPACES, ...nfx.NAME_SPACES.filter((n) => !user.NAME_SPACES.includes(n))];\n\n /** Same key as `lookupLocalStorage`: prefer saved choice before navigator. */\n const initialLng = getLanguageStorage() ?? fallbackLng;\n\n const persistLanguage = (lng: string) => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n if ((LANGUAGE_VALUES as readonly string[]).includes(base)) {\n setLanguageStorage(base as LanguageEnum);\n }\n };\n\n if (!languagePersistAttached) {\n i18n.on(\"languageChanged\", persistLanguage);\n languagePersistAttached = true;\n }\n\n i18n\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n compatibilityJSON: \"v4\",\n resources: RESOURCES,\n lng: initialLng,\n fallbackLng,\n /**\n * 资源只注册 en/zh/fr;.detector 或浏览器会给出 zh-CN、en-US 等,若不收敛则整语言匹配失败 → 界面全是 key。\n * Bundles are only `en` / `zh` / `fr`; normalize regional codes so namespaces resolve.\n */\n supportedLngs: [...LANGUAGE_VALUES],\n load: \"languageOnly\",\n ns: NAME_SPACES,\n defaultNS: NAME_SPACES[0],\n interpolation: { escapeValue: false },\n keySeparator: \".\",\n /**\n * Detector walks `order` and concatenates hits; first candidate wins for resolution.\n * `lookupLocalStorage` must match `getLanguageStorage` / `setLanguageStorage` (LANGUAGE_STORAGE_KEY).\n * Explicit `lng: initialLng` above mirrors that rule so behavior is obvious without reading plugin internals.\n */\n detection: {\n order: [\"localStorage\", \"navigator\", \"htmlTag\", \"path\", \"subdomain\"],\n lookupLocalStorage: LANGUAGE_STORAGE_KEY,\n caches: [\"localStorage\"],\n },\n });\n\n const onLoad = options.onLoadExtraBundles;\n if (onLoad) {\n const toSupported = (lng: string): LanguageEnum => {\n const base = lng.split(\"-\")[0]?.toLowerCase() ?? \"\";\n return (LANGUAGE_VALUES as readonly string[]).includes(base) ? (base as LanguageEnum) : fallbackLng;\n };\n const apply = async (lng: string) => {\n const code = toSupported(lng);\n const result = await onLoad(code);\n if (result == null) return;\n const items = Array.isArray(result) ? result : [result];\n for (const { namespace, bundle } of items) {\n if (namespace && bundle && typeof bundle === \"object\") {\n i18n.addResourceBundle(code, namespace, bundle, true, true);\n }\n }\n };\n void apply(i18n.language || fallbackLng);\n i18n.on(\"languageChanged\", (lng) => void apply(lng));\n }\n}\n\nexport default i18n;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BYsBa,KAAiB;AAAA,EAAC;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;GACjD,KAAoC;AAAA,EAC/C,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;GAGR,KAAmC;AAAA,EACvC,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;EAEd,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;EAEd,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,YAAY;AAAA;;AAQhB,SAAgB,KAAkD;AAChE,SAAO;AAAA,IACL,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAa,CAAC,GAAG,EAAA;AAAA;;AClDrB,SAAgB,KAA4C;AAC1D,QAAM,IAAM,EAAQ,CAAA;AACpB,SAAI,KAAO,QACH,EAAsC,SAAS,CAAA,IAD/B,IAC8D;;AAGxF,SAAgB,GAAmB,GAA2B;AAC5D,EAAA,EAAQ,GAAsB,CAAA;;AAGhC,SAAgB,KAA8B;AAC5C,EAAA,EAAW,CAAA;;ACLb,IAAI,IAA0B;AAM9B,SAAgB,GAAS,GAAgC;AAEvD,MAAI,EAAK,cACP;AAGF,QAAM,IAAM,GAAA,GACN,IAAO,EAAQ,SACf,IAAc,EAAQ,eAAe,EAAa,IAElD,IAAa;AAAA,IAAC,EAAa;AAAA,IAAI,EAAa;AAAA,IAAI,EAAa;AAAA,IAAc,OAAA,CAC9E,GAAK,OAAU;AAAA,IACd,GAAG;AAAA,KACF,CAAA,GAAO;AAAA,MACN,GAAI,EAAI,UAAU,CAAA,KAAS,CAAA;AAAA,MAC3B,GAAI,EAAK,UAAU,CAAA,KAAS,CAAA;AAAA;MAGhC,CAAA,CAAE,GAEE,IAAc,CAAC,GAAG,EAAK,aAAa,GAAG,EAAI,YAAY,OAAA,CAAQ,MAAM,CAAC,EAAK,YAAY,SAAS,CAAA,CAAE,CAAC,GAGnG,IAAa,GAAA,KAAwB,GAErC,IAAA,CAAmB,MAAgB;AACvC,UAAM,IAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,KAAiB;AACjD,IAAK,EAAsC,SAAS,CAAA,KAClD,GAAmB,CAAA;AAAA;AAIvB,EAAK,MACH,EAAK,GAAG,mBAAmB,CAAA,GAC3B,IAA0B,KAG5B,EACG,IAAI,CAAA,EACJ,IAAI,CAAA,EACJ,KAAK;AAAA,IACJ,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,KAAK;AAAA,IACL,aAAA;AAAA,IAKA,eAAe,CAAC,GAAG,CAAA;AAAA,IACnB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,WAAW,EAAY,CAAA;AAAA,IACvB,eAAe,EAAE,aAAa,GAAA;AAAA,IAC9B,cAAc;AAAA,IAMd,WAAW;AAAA,MACT,OAAO;AAAA,QAAC;AAAA,QAAgB;AAAA,QAAa;AAAA,QAAW;AAAA,QAAQ;AAAA;MACxD,oBAAoB;AAAA,MACpB,QAAQ,CAAC,cAAA;AAAA;GAEZ;AAEH,QAAM,IAAS,EAAQ;AACvB,MAAI,GAAQ;AACV,UAAM,IAAA,CAAe,MAA8B;AACjD,YAAM,IAAO,EAAI,MAAM,GAAA,EAAK,CAAA,GAAI,YAAA,KAAiB;AACjD,aAAQ,EAAsC,SAAS,CAAA,IAAS,IAAwB;AAAA,OAEpF,IAAQ,OAAO,MAAgB;AACnC,YAAM,IAAO,EAAY,CAAA,GACnB,IAAS,MAAM,EAAO,CAAA;AAC5B,UAAI,KAAU,KAAM;AACpB,YAAM,IAAQ,MAAM,QAAQ,CAAA,IAAU,IAAS,CAAC,CAAA;AAChD,iBAAW,EAAE,WAAA,GAAW,QAAA,EAAA,KAAY,EAClC,CAAI,KAAa,KAAU,OAAO,KAAW,YAC3C,EAAK,kBAAkB,GAAM,GAAW,GAAQ,IAAM,EAAA;AAAA;AAIvD,IAAA,EAAM,EAAK,YAAY,CAAA,GAC5B,EAAK,GAAG,mBAAA,CAAoB,MAAA;AAAQ,MAAK,EAAM,CAAA;AAAA,KAAI;AAAA;;AAIvD,IAAA,KAAe"}
@@ -8,4 +8,4 @@ export {
8
8
  a as t
9
9
  };
10
10
 
11
- //# sourceMappingURL=chunk-language-B8sfGadQ.mjs.map
11
+ //# sourceMappingURL=chunk-language-BKIy1ot4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-language-B8sfGadQ.mjs","names":[],"sources":["../src/languages/types/language.ts"],"sourcesContent":["/**\n * 语言枚举与常量,不引用任何 JSON,供需要轻量引用的模块使用。\n * Language enum and constants; no JSON deps for lightweight usage.\n */\nenum LanguageEnum {\n EN = \"en\",\n ZH = \"zh\",\n FR = \"fr\",\n}\n\nconst DEFAULT_LANGUAGE = LanguageEnum.ZH;\nconst LANGUAGE_VALUES = Object.values(LanguageEnum);\nconst LANGUAGE_STORAGE_KEY = \"language-storage\";\n\nexport { LanguageEnum, DEFAULT_LANGUAGE, LANGUAGE_VALUES, LANGUAGE_STORAGE_KEY };\n"],"mappings":"AAIA,IAAK,IAAL,0BAAA,GAAA;AACE,SAAA,EAAA,KAAK,MACL,EAAA,KAAK,MACL,EAAA,KAAK;GAHF,KAAA,CAAA,CAAA,GAMC,IAAmB,EAAa,IAChC,IAAkB,OAAO,OAAO,CAAA,GAChC,IAAuB"}
1
+ {"version":3,"file":"chunk-language-BKIy1ot4.mjs","names":[],"sources":["../src/languages/types/language.ts"],"sourcesContent":["/**\n * 语言枚举与常量,不引用任何 JSON,供需要轻量引用的模块使用。\n * Language enum and constants; no JSON deps for lightweight usage.\n */\nenum LanguageEnum {\n EN = \"en\",\n ZH = \"zh\",\n FR = \"fr\",\n}\n\nconst DEFAULT_LANGUAGE = LanguageEnum.ZH;\nconst LANGUAGE_VALUES = Object.values(LanguageEnum);\nconst LANGUAGE_STORAGE_KEY = \"language-storage\";\n\nexport { LanguageEnum, DEFAULT_LANGUAGE, LANGUAGE_VALUES, LANGUAGE_STORAGE_KEY };\n"],"mappings":"AAIA,IAAK,IAAL,0BAAA,GAAA;AACE,SAAA,EAAA,KAAK,MACL,EAAA,KAAK,MACL,EAAA,KAAK;GAHF,KAAA,CAAA,CAAA,GAMC,IAAmB,EAAa,IAChC,IAAkB,OAAO,OAAO,CAAA,GAChC,IAAuB"}
@@ -1,3 +1,3 @@
1
1
  var r=(function(e){return e.EN="en",e.ZH="zh",e.FR="fr",e})(r||{}),t=r.ZH,n=Object.values(r),u="language-storage";Object.defineProperty(exports,"DEFAULT_LANGUAGE",{enumerable:!0,get:function(){return t}});Object.defineProperty(exports,"LANGUAGE_STORAGE_KEY",{enumerable:!0,get:function(){return u}});Object.defineProperty(exports,"LANGUAGE_VALUES",{enumerable:!0,get:function(){return n}});Object.defineProperty(exports,"LanguageEnum",{enumerable:!0,get:function(){return r}});
2
2
 
3
- //# sourceMappingURL=chunk-language-Bqmpuf2W.cjs.map
3
+ //# sourceMappingURL=chunk-language-b-WaFsLY.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-language-Bqmpuf2W.cjs","names":[],"sources":["../src/languages/types/language.ts"],"sourcesContent":["/**\n * 语言枚举与常量,不引用任何 JSON,供需要轻量引用的模块使用。\n * Language enum and constants; no JSON deps for lightweight usage.\n */\nenum LanguageEnum {\n EN = \"en\",\n ZH = \"zh\",\n FR = \"fr\",\n}\n\nconst DEFAULT_LANGUAGE = LanguageEnum.ZH;\nconst LANGUAGE_VALUES = Object.values(LanguageEnum);\nconst LANGUAGE_STORAGE_KEY = \"language-storage\";\n\nexport { LanguageEnum, DEFAULT_LANGUAGE, LANGUAGE_VALUES, LANGUAGE_STORAGE_KEY };\n"],"mappings":"AAIA,IAAK,GAAL,SAAA,EAAA,CACE,OAAA,EAAA,GAAK,KACL,EAAA,GAAK,KACL,EAAA,GAAK,SAHF,GAAA,CAAA,CAAA,EAMC,EAAmB,EAAa,GAChC,EAAkB,OAAO,OAAO,CAAA,EAChC,EAAuB"}
1
+ {"version":3,"file":"chunk-language-b-WaFsLY.cjs","names":[],"sources":["../src/languages/types/language.ts"],"sourcesContent":["/**\n * 语言枚举与常量,不引用任何 JSON,供需要轻量引用的模块使用。\n * Language enum and constants; no JSON deps for lightweight usage.\n */\nenum LanguageEnum {\n EN = \"en\",\n ZH = \"zh\",\n FR = \"fr\",\n}\n\nconst DEFAULT_LANGUAGE = LanguageEnum.ZH;\nconst LANGUAGE_VALUES = Object.values(LanguageEnum);\nconst LANGUAGE_STORAGE_KEY = \"language-storage\";\n\nexport { LanguageEnum, DEFAULT_LANGUAGE, LANGUAGE_VALUES, LANGUAGE_STORAGE_KEY };\n"],"mappings":"AAIA,IAAK,GAAL,SAAA,EAAA,CACE,OAAA,EAAA,GAAK,KACL,EAAA,GAAK,KACL,EAAA,GAAK,SAHF,GAAA,CAAA,CAAA,EAMC,EAAmB,EAAa,GAChC,EAAkB,OAAO,OAAO,CAAA,EAChC,EAAuB"}
@@ -0,0 +1,60 @@
1
+ import { c as i, n as l, r as d, s as f } from "./chunk-theme-9dcwRKw8.mjs";
2
+ import { i as a } from "./chunk-layout-C2uqDEMJ.mjs";
3
+ import { i as g, r as E } from "./chunk-language-BKIy1ot4.mjs";
4
+ var c = /* @__PURE__ */ (function(e) {
5
+ return e.NONE = "none", e.WAVES = "waves", e.SQUARES = "squares", e.LETTER_GLITCH = "letterGlitch", e.PIXEL_BLAST = "pixelBlast", e;
6
+ })({}), A = c.NONE, S = Object.values(c);
7
+ function u(e) {
8
+ return e !== null && typeof e == "object" && !Array.isArray(e);
9
+ }
10
+ function y(e) {
11
+ const n = e.layoutMode === a.HIDE ? a.HIDE : a.SHOW, t = typeof e.base == "string" && l.includes(e.base) ? e.base : d.DEFAULT, o = typeof e.language == "string" && E.includes(e.language) ? e.language : g.ZH, s = typeof e.dashboardBackground == "string" && S.includes(e.dashboardBackground) ? e.dashboardBackground : A;
12
+ return {
13
+ theme: typeof e.theme == "string" && f.includes(e.theme) ? e.theme : i.DEFAULT,
14
+ base: t,
15
+ language: o,
16
+ layoutMode: n,
17
+ dashboardBackground: s
18
+ };
19
+ }
20
+ function p(e) {
21
+ return {
22
+ theme: e.theme || void 0,
23
+ base: e.base || void 0,
24
+ language: e.language || void 0,
25
+ layoutMode: e.layoutMode,
26
+ dashboardBackground: e.dashboardBackground
27
+ };
28
+ }
29
+ var N = "nfx";
30
+ function O(e, n) {
31
+ if (!e || typeof e != "string") return null;
32
+ try {
33
+ const t = JSON.parse(e);
34
+ if (!u(t)) return null;
35
+ const o = t.nfx, s = y(u(o) ? o : {}), r = { ...t };
36
+ return delete r.nfx, {
37
+ nfx: s,
38
+ ...n ? n(r) : {}
39
+ };
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+ function T(e, n) {
45
+ const { nfx: t, ...o } = e, s = n ? n(o) : o;
46
+ return JSON.stringify({
47
+ nfx: p(t),
48
+ ...s
49
+ });
50
+ }
51
+ export {
52
+ A as a,
53
+ S as i,
54
+ T as n,
55
+ c as o,
56
+ N as r,
57
+ O as t
58
+ };
59
+
60
+ //# sourceMappingURL=chunk-preference-Bs5zQSRc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-preference-Bs5zQSRc.mjs","names":[],"sources":["../src/preference/constants.ts","../src/preference/nfx_slice.ts","../src/preference/types.ts","../src/preference/core.ts"],"sourcesContent":["/**\n * 用户偏好相关常量:仪表盘背景等\n * Preference-related constants: dashboard background, etc.\n */\n\nimport type { Array } from \"@/types\";\n\n/** 仪表盘背景枚举。Dashboard background enum. */\nexport enum DashboardBackgroundEnum {\n NONE = \"none\",\n WAVES = \"waves\",\n SQUARES = \"squares\",\n LETTER_GLITCH = \"letterGlitch\",\n PIXEL_BLAST = \"pixelBlast\",\n}\n\nexport const DEFAULT_DASHBOARD_BACKGROUND = DashboardBackgroundEnum.NONE;\n\n/** 仪表盘背景可选值列表。Dashboard background values list. */\nexport const DASHBOARD_BACKGROUND_VALUES: Array<DashboardBackgroundEnum> = Object.values(DashboardBackgroundEnum);\n","import { LayoutModeEnum } from \"@/designs/layouts/types\";\nimport { LANGUAGE_VALUES, LanguageEnum } from \"@/languages/types\";\nimport { BASE_VALUES, BaseEnum, THEME_VALUES, ThemeEnum } from \"@/themes/types\";\n\nimport { DASHBOARD_BACKGROUND_VALUES, DashboardBackgroundEnum, DEFAULT_DASHBOARD_BACKGROUND } from \"./constants\";\nimport type { NfxPreferenceSlice } from \"./types\";\n\n/** 后端 `nfx` 对象允许的 JSON 形状(字段均可选)。 */\nexport type NfxBackendShape = {\n theme?: ThemeEnum;\n base?: BaseEnum;\n language?: LanguageEnum;\n layoutMode?: LayoutModeEnum;\n dashboardBackground?: DashboardBackgroundEnum;\n};\n\n/** 判断值是否为「普通对象」(非 null、非数组)。 */\nexport function isPlainRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === \"object\" && !Array.isArray(v);\n}\n\n/**\n * 将后端 `nfx` 对象的原始字段规范化为前端 `NfxPreferenceSlice`(非法或缺失字段用 NFX 默认值)。\n */\nexport function parseNfxFields(raw: NfxBackendShape): NfxPreferenceSlice {\n const layoutMode = raw.layoutMode === LayoutModeEnum.HIDE ? LayoutModeEnum.HIDE : LayoutModeEnum.SHOW;\n const base = typeof raw.base === \"string\" && BASE_VALUES.includes(raw.base) ? raw.base : BaseEnum.DEFAULT;\n const language =\n typeof raw.language === \"string\" && LANGUAGE_VALUES.includes(raw.language) ? raw.language : LanguageEnum.ZH;\n const dashboardBackground =\n typeof raw.dashboardBackground === \"string\" && DASHBOARD_BACKGROUND_VALUES.includes(raw.dashboardBackground)\n ? raw.dashboardBackground\n : DEFAULT_DASHBOARD_BACKGROUND;\n const theme = typeof raw.theme === \"string\" && THEME_VALUES.includes(raw.theme) ? raw.theme : ThemeEnum.DEFAULT;\n return {\n theme,\n base,\n language,\n layoutMode,\n dashboardBackground,\n };\n}\n\n/**\n * 将前端 `NfxPreferenceSlice` 转为写入 JSON 的 `nfx` 对象(与 `theme`/`base`/`language` 的省略规则一致)。\n */\nexport function nfxSliceToBackend(nfx: NfxPreferenceSlice): NfxBackendShape {\n return {\n theme: nfx.theme || undefined,\n base: nfx.base || undefined,\n language: nfx.language || undefined,\n layoutMode: nfx.layoutMode,\n dashboardBackground: nfx.dashboardBackground,\n };\n}\n","import type { LayoutModeEnum } from \"@/designs/layouts/types\";\nimport type { LanguageEnum } from \"@/languages/types\";\nimport type { BaseEnum, ThemeEnum } from \"@/themes/types\";\n\nimport type { DashboardBackgroundEnum } from \"./constants\";\n\n/**\n * 根对象上 NFX 内置块使用的键名(字面量 `\"nfx\"`)。\n * Literal key name for the NFX slice on the preference JSON root.\n */\nexport const NFX_PREFERENCE_ROOT_KEY = \"nfx\" as const;\n\n/**\n * NFX 负责的内置字段(存于 JSON 的 `nfx` 对象内)。\n * Built-in fields owned by NFX (nested under the `nfx` object in JSON).\n */\nexport type NfxPreferenceSlice = {\n theme: ThemeEnum;\n base: BaseEnum;\n language: LanguageEnum;\n layoutMode: LayoutModeEnum;\n dashboardBackground: DashboardBackgroundEnum;\n};\n\n/**\n * 完整偏好:必有 `nfx`;`TExtra` 为与 `nfx` 平级的其它顶层键。\n * 默认 `TExtra` 为 `Record<string, unknown>`(**勿用** `Record<string, never>`:会与 `nfx` 索引冲突导致无法赋值)。\n */\nexport type Preference<TExtra extends Record<string, unknown> = Record<string, unknown>> = {\n nfx: NfxPreferenceSlice;\n} & TExtra;\n","import type { Nilable, Nullable } from \"@/types\";\n\nimport { isPlainRecord, nfxSliceToBackend, parseNfxFields, type NfxBackendShape } from \"./nfx_slice\";\nimport { NFX_PREFERENCE_ROOT_KEY, type NfxPreferenceSlice, type Preference } from \"./types\";\n\n/**\n * 解析后端 preference 字符串:`nfx` 由本包规范化(缺省或非对象则按 `{}` → 默认值);\n * `parseExtra(rest)` 的 `rest` 为根对象去掉 `nfx` 后的键值(宿主扩展,线 snake / 内存 camel 在函数内自行处理)。\n */\nexport function parsePreferenceJson<TExtra extends Record<string, unknown> = Record<string, unknown>>(\n json: Nilable<string>,\n parseExtra?: (raw: Record<string, unknown>) => TExtra,\n): Nullable<Preference<TExtra>> {\n if (!json || typeof json !== \"string\") return null;\n try {\n const data = JSON.parse(json) as unknown;\n if (!isPlainRecord(data)) return null;\n const nfxSource = data[NFX_PREFERENCE_ROOT_KEY];\n const nfxRaw = isPlainRecord(nfxSource) ? nfxSource : {};\n const nfx = parseNfxFields(nfxRaw as NfxBackendShape);\n const rest = { ...data };\n delete rest[NFX_PREFERENCE_ROOT_KEY];\n const extra = parseExtra ? parseExtra(rest) : ({} as TExtra);\n return { nfx, ...extra };\n } catch {\n return null;\n }\n}\n\n/**\n * 序列化:`serializeExtra` 把内存中的扩展部分写成根上要合并的顶层键;省略则对扩展做浅拷贝(键名原样写入 JSON)。\n */\nexport function preferenceToJson<TExtra extends Record<string, unknown> = Record<string, unknown>>(\n preference: Preference<TExtra>,\n serializeExtra?: (extra: TExtra) => Record<string, unknown>,\n): string {\n const { nfx, ...extra } = preference as { nfx: NfxPreferenceSlice } & Record<string, unknown>;\n const extraBag = serializeExtra ? serializeExtra(extra as unknown as TExtra) : extra;\n return JSON.stringify({\n [NFX_PREFERENCE_ROOT_KEY]: nfxSliceToBackend(nfx),\n ...extraBag,\n });\n}\n"],"mappings":";;;AAQA,IAAY,IAAL,0BAAA,GAAA;AACL,SAAA,EAAA,OAAO,QACP,EAAA,QAAQ,SACR,EAAA,UAAU,WACV,EAAA,gBAAgB,gBAChB,EAAA,cAAc;QAGH,IAA+B,EAAwB,MAGvD,IAA8D,OAAO,OAAO,CAAA;ACFzF,SAAgB,EAAc,GAA0C;AACtE,SAAO,MAAM,QAAQ,OAAO,KAAM,YAAY,CAAC,MAAM,QAAQ,CAAA;;AAM/D,SAAgB,EAAe,GAA0C;AACvE,QAAM,IAAa,EAAI,eAAe,EAAe,OAAO,EAAe,OAAO,EAAe,MAC3F,IAAO,OAAO,EAAI,QAAS,YAAY,EAAY,SAAS,EAAI,IAAA,IAAQ,EAAI,OAAO,EAAS,SAC5F,IACJ,OAAO,EAAI,YAAa,YAAY,EAAgB,SAAS,EAAI,QAAA,IAAY,EAAI,WAAW,EAAa,IACrG,IACJ,OAAO,EAAI,uBAAwB,YAAY,EAA4B,SAAS,EAAI,mBAAA,IACpF,EAAI,sBACJ;AAEN,SAAO;AAAA,IACL,OAFY,OAAO,EAAI,SAAU,YAAY,EAAa,SAAS,EAAI,KAAA,IAAS,EAAI,QAAQ,EAAU;AAAA,IAGtG,MAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA;;AAOJ,SAAgB,EAAkB,GAA0C;AAC1E,SAAO;AAAA,IACL,OAAO,EAAI,SAAS;AAAA,IACpB,MAAM,EAAI,QAAQ;AAAA,IAClB,UAAU,EAAI,YAAY;AAAA,IAC1B,YAAY,EAAI;AAAA,IAChB,qBAAqB,EAAI;AAAA;;AC1C7B,IAAa,IAA0B;ACDvC,SAAgB,EACd,GACA,GAC8B;AAC9B,MAAI,CAAC,KAAQ,OAAO,KAAS,SAAU,QAAO;AAC9C,MAAI;AACF,UAAM,IAAO,KAAK,MAAM,CAAA;AACxB,QAAI,CAAC,EAAc,CAAA,EAAO,QAAO;AACjC,UAAM,IAAY,EAAA,KAEZ,IAAM,EADG,EAAc,CAAA,IAAa,IAAY,CAAA,CAAE,GAElD,IAAO,EAAE,GAAG,EAAA;AAClB,kBAAO,EAAA,KAEA;AAAA,MAAE,KAAA;AAAA,MAAK,GADA,IAAa,EAAW,CAAA,IAAS,CAAA;AAAA;UAEzC;AACN,WAAO;AAAA;;AAOX,SAAgB,EACd,GACA,GACQ;AACR,QAAM,EAAE,KAAA,GAAK,GAAG,EAAA,IAAU,GACpB,IAAW,IAAiB,EAAe,CAAA,IAA8B;AAC/E,SAAO,KAAK,UAAU;AAAA,SACO,EAAkB,CAAA;AAAA,IAC7C,GAAG;AAAA,GACJ"}
@@ -0,0 +1,3 @@
1
+ const o=require("./chunk-theme-BFvDRCYS.cjs"),a=require("./chunk-layout-D728gccQ.cjs"),i=require("./chunk-language-b-WaFsLY.cjs");var c=(function(e){return e.NONE="none",e.WAVES="waves",e.SQUARES="squares",e.LETTER_GLITCH="letterGlitch",e.PIXEL_BLAST="pixelBlast",e})({}),d=c.NONE,f=Object.values(c);function l(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function E(e){const n=e.layoutMode===a.LayoutModeEnum.HIDE?a.LayoutModeEnum.HIDE:a.LayoutModeEnum.SHOW,t=typeof e.base=="string"&&o.BASE_VALUES.includes(e.base)?e.base:o.BaseEnum.DEFAULT,r=typeof e.language=="string"&&i.LANGUAGE_VALUES.includes(e.language)?e.language:i.LanguageEnum.ZH,u=typeof e.dashboardBackground=="string"&&f.includes(e.dashboardBackground)?e.dashboardBackground:d;return{theme:typeof e.theme=="string"&&o.THEME_VALUES.includes(e.theme)?e.theme:o.ThemeEnum.DEFAULT,base:t,language:r,layoutMode:n,dashboardBackground:u}}function g(e){return{theme:e.theme||void 0,base:e.base||void 0,language:e.language||void 0,layoutMode:e.layoutMode,dashboardBackground:e.dashboardBackground}}var A="nfx";function y(e,n){if(!e||typeof e!="string")return null;try{const t=JSON.parse(e);if(!l(t))return null;const r=t.nfx,u=E(l(r)?r:{}),s={...t};return delete s.nfx,{nfx:u,...n?n(s):{}}}catch{return null}}function O(e,n){const{nfx:t,...r}=e,u=n?n(r):r;return JSON.stringify({nfx:g(t),...u})}Object.defineProperty(exports,"DASHBOARD_BACKGROUND_VALUES",{enumerable:!0,get:function(){return f}});Object.defineProperty(exports,"DEFAULT_DASHBOARD_BACKGROUND",{enumerable:!0,get:function(){return d}});Object.defineProperty(exports,"DashboardBackgroundEnum",{enumerable:!0,get:function(){return c}});Object.defineProperty(exports,"NFX_PREFERENCE_ROOT_KEY",{enumerable:!0,get:function(){return A}});Object.defineProperty(exports,"parsePreferenceJson",{enumerable:!0,get:function(){return y}});Object.defineProperty(exports,"preferenceToJson",{enumerable:!0,get:function(){return O}});
2
+
3
+ //# sourceMappingURL=chunk-preference-DE8Jp2f5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-preference-DE8Jp2f5.cjs","names":[],"sources":["../src/preference/constants.ts","../src/preference/nfx_slice.ts","../src/preference/types.ts","../src/preference/core.ts"],"sourcesContent":["/**\n * 用户偏好相关常量:仪表盘背景等\n * Preference-related constants: dashboard background, etc.\n */\n\nimport type { Array } from \"@/types\";\n\n/** 仪表盘背景枚举。Dashboard background enum. */\nexport enum DashboardBackgroundEnum {\n NONE = \"none\",\n WAVES = \"waves\",\n SQUARES = \"squares\",\n LETTER_GLITCH = \"letterGlitch\",\n PIXEL_BLAST = \"pixelBlast\",\n}\n\nexport const DEFAULT_DASHBOARD_BACKGROUND = DashboardBackgroundEnum.NONE;\n\n/** 仪表盘背景可选值列表。Dashboard background values list. */\nexport const DASHBOARD_BACKGROUND_VALUES: Array<DashboardBackgroundEnum> = Object.values(DashboardBackgroundEnum);\n","import { LayoutModeEnum } from \"@/designs/layouts/types\";\nimport { LANGUAGE_VALUES, LanguageEnum } from \"@/languages/types\";\nimport { BASE_VALUES, BaseEnum, THEME_VALUES, ThemeEnum } from \"@/themes/types\";\n\nimport { DASHBOARD_BACKGROUND_VALUES, DashboardBackgroundEnum, DEFAULT_DASHBOARD_BACKGROUND } from \"./constants\";\nimport type { NfxPreferenceSlice } from \"./types\";\n\n/** 后端 `nfx` 对象允许的 JSON 形状(字段均可选)。 */\nexport type NfxBackendShape = {\n theme?: ThemeEnum;\n base?: BaseEnum;\n language?: LanguageEnum;\n layoutMode?: LayoutModeEnum;\n dashboardBackground?: DashboardBackgroundEnum;\n};\n\n/** 判断值是否为「普通对象」(非 null、非数组)。 */\nexport function isPlainRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === \"object\" && !Array.isArray(v);\n}\n\n/**\n * 将后端 `nfx` 对象的原始字段规范化为前端 `NfxPreferenceSlice`(非法或缺失字段用 NFX 默认值)。\n */\nexport function parseNfxFields(raw: NfxBackendShape): NfxPreferenceSlice {\n const layoutMode = raw.layoutMode === LayoutModeEnum.HIDE ? LayoutModeEnum.HIDE : LayoutModeEnum.SHOW;\n const base = typeof raw.base === \"string\" && BASE_VALUES.includes(raw.base) ? raw.base : BaseEnum.DEFAULT;\n const language =\n typeof raw.language === \"string\" && LANGUAGE_VALUES.includes(raw.language) ? raw.language : LanguageEnum.ZH;\n const dashboardBackground =\n typeof raw.dashboardBackground === \"string\" && DASHBOARD_BACKGROUND_VALUES.includes(raw.dashboardBackground)\n ? raw.dashboardBackground\n : DEFAULT_DASHBOARD_BACKGROUND;\n const theme = typeof raw.theme === \"string\" && THEME_VALUES.includes(raw.theme) ? raw.theme : ThemeEnum.DEFAULT;\n return {\n theme,\n base,\n language,\n layoutMode,\n dashboardBackground,\n };\n}\n\n/**\n * 将前端 `NfxPreferenceSlice` 转为写入 JSON 的 `nfx` 对象(与 `theme`/`base`/`language` 的省略规则一致)。\n */\nexport function nfxSliceToBackend(nfx: NfxPreferenceSlice): NfxBackendShape {\n return {\n theme: nfx.theme || undefined,\n base: nfx.base || undefined,\n language: nfx.language || undefined,\n layoutMode: nfx.layoutMode,\n dashboardBackground: nfx.dashboardBackground,\n };\n}\n","import type { LayoutModeEnum } from \"@/designs/layouts/types\";\nimport type { LanguageEnum } from \"@/languages/types\";\nimport type { BaseEnum, ThemeEnum } from \"@/themes/types\";\n\nimport type { DashboardBackgroundEnum } from \"./constants\";\n\n/**\n * 根对象上 NFX 内置块使用的键名(字面量 `\"nfx\"`)。\n * Literal key name for the NFX slice on the preference JSON root.\n */\nexport const NFX_PREFERENCE_ROOT_KEY = \"nfx\" as const;\n\n/**\n * NFX 负责的内置字段(存于 JSON 的 `nfx` 对象内)。\n * Built-in fields owned by NFX (nested under the `nfx` object in JSON).\n */\nexport type NfxPreferenceSlice = {\n theme: ThemeEnum;\n base: BaseEnum;\n language: LanguageEnum;\n layoutMode: LayoutModeEnum;\n dashboardBackground: DashboardBackgroundEnum;\n};\n\n/**\n * 完整偏好:必有 `nfx`;`TExtra` 为与 `nfx` 平级的其它顶层键。\n * 默认 `TExtra` 为 `Record<string, unknown>`(**勿用** `Record<string, never>`:会与 `nfx` 索引冲突导致无法赋值)。\n */\nexport type Preference<TExtra extends Record<string, unknown> = Record<string, unknown>> = {\n nfx: NfxPreferenceSlice;\n} & TExtra;\n","import type { Nilable, Nullable } from \"@/types\";\n\nimport { isPlainRecord, nfxSliceToBackend, parseNfxFields, type NfxBackendShape } from \"./nfx_slice\";\nimport { NFX_PREFERENCE_ROOT_KEY, type NfxPreferenceSlice, type Preference } from \"./types\";\n\n/**\n * 解析后端 preference 字符串:`nfx` 由本包规范化(缺省或非对象则按 `{}` → 默认值);\n * `parseExtra(rest)` 的 `rest` 为根对象去掉 `nfx` 后的键值(宿主扩展,线 snake / 内存 camel 在函数内自行处理)。\n */\nexport function parsePreferenceJson<TExtra extends Record<string, unknown> = Record<string, unknown>>(\n json: Nilable<string>,\n parseExtra?: (raw: Record<string, unknown>) => TExtra,\n): Nullable<Preference<TExtra>> {\n if (!json || typeof json !== \"string\") return null;\n try {\n const data = JSON.parse(json) as unknown;\n if (!isPlainRecord(data)) return null;\n const nfxSource = data[NFX_PREFERENCE_ROOT_KEY];\n const nfxRaw = isPlainRecord(nfxSource) ? nfxSource : {};\n const nfx = parseNfxFields(nfxRaw as NfxBackendShape);\n const rest = { ...data };\n delete rest[NFX_PREFERENCE_ROOT_KEY];\n const extra = parseExtra ? parseExtra(rest) : ({} as TExtra);\n return { nfx, ...extra };\n } catch {\n return null;\n }\n}\n\n/**\n * 序列化:`serializeExtra` 把内存中的扩展部分写成根上要合并的顶层键;省略则对扩展做浅拷贝(键名原样写入 JSON)。\n */\nexport function preferenceToJson<TExtra extends Record<string, unknown> = Record<string, unknown>>(\n preference: Preference<TExtra>,\n serializeExtra?: (extra: TExtra) => Record<string, unknown>,\n): string {\n const { nfx, ...extra } = preference as { nfx: NfxPreferenceSlice } & Record<string, unknown>;\n const extraBag = serializeExtra ? serializeExtra(extra as unknown as TExtra) : extra;\n return JSON.stringify({\n [NFX_PREFERENCE_ROOT_KEY]: nfxSliceToBackend(nfx),\n ...extraBag,\n });\n}\n"],"mappings":"kIAQA,IAAY,GAAL,SAAA,EAAA,CACL,OAAA,EAAA,KAAO,OACP,EAAA,MAAQ,QACR,EAAA,QAAU,UACV,EAAA,cAAgB,eAChB,EAAA,YAAc,qBAGH,EAA+B,EAAwB,KAGvD,EAA8D,OAAO,OAAO,CAAA,ECFzF,SAAgB,EAAc,EAA0C,CACtE,OAAO,IAAM,MAAQ,OAAO,GAAM,UAAY,CAAC,MAAM,QAAQ,CAAA,EAM/D,SAAgB,EAAe,EAA0C,CACvE,MAAM,EAAa,EAAI,aAAe,EAAA,eAAe,KAAO,EAAA,eAAe,KAAO,EAAA,eAAe,KAC3F,EAAO,OAAO,EAAI,MAAS,UAAY,EAAA,YAAY,SAAS,EAAI,IAAA,EAAQ,EAAI,KAAO,EAAA,SAAS,QAC5F,EACJ,OAAO,EAAI,UAAa,UAAY,EAAA,gBAAgB,SAAS,EAAI,QAAA,EAAY,EAAI,SAAW,EAAA,aAAa,GACrG,EACJ,OAAO,EAAI,qBAAwB,UAAY,EAA4B,SAAS,EAAI,mBAAA,EACpF,EAAI,oBACJ,EAEN,MAAO,CACL,MAFY,OAAO,EAAI,OAAU,UAAY,EAAA,aAAa,SAAS,EAAI,KAAA,EAAS,EAAI,MAAQ,EAAA,UAAU,QAGtG,KAAA,EACA,SAAA,EACA,WAAA,EACA,oBAAA,GAOJ,SAAgB,EAAkB,EAA0C,CAC1E,MAAO,CACL,MAAO,EAAI,OAAS,OACpB,KAAM,EAAI,MAAQ,OAClB,SAAU,EAAI,UAAY,OAC1B,WAAY,EAAI,WAChB,oBAAqB,EAAI,qBC1C7B,IAAa,EAA0B,MCDvC,SAAgB,EACd,EACA,EAC8B,CAC9B,GAAI,CAAC,GAAQ,OAAO,GAAS,SAAU,OAAO,KAC9C,GAAI,CACF,MAAM,EAAO,KAAK,MAAM,CAAA,EACxB,GAAI,CAAC,EAAc,CAAA,EAAO,OAAO,KACjC,MAAM,EAAY,EAAA,IAEZ,EAAM,EADG,EAAc,CAAA,EAAa,EAAY,CAAA,CAAE,EAElD,EAAO,CAAE,GAAG,CAAA,EAClB,cAAO,EAAA,IAEA,CAAE,IAAA,EAAK,GADA,EAAa,EAAW,CAAA,EAAS,CAAA,QAEzC,CACN,OAAO,MAOX,SAAgB,EACd,EACA,EACQ,CACR,KAAM,CAAE,IAAA,EAAK,GAAG,CAAA,EAAU,EACpB,EAAW,EAAiB,EAAe,CAAA,EAA8B,EAC/E,OAAO,KAAK,UAAU,KACO,EAAkB,CAAA,EAC7C,GAAG,EACJ"}
@@ -1,5 +1,5 @@
1
1
  (function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:var(--radius-button);align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:10px solid var(--color-bg);width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:4px solid var(--color-bg);width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:var(--radius-button);animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";background:var(--color-bg);width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:var(--color-bg);width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{border-radius:var(--radius-button);cursor:pointer;border:1px solid #0000;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:var(--color-danger-fg,#fff)}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);color:var(--color-danger-fg,#fff);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);border-radius:var(--radius-card);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:var(--color-danger)}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-card);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:var(--color-primary-fg)}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);border-radius:var(--radius-input);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border-radius:var(--radius-card);border:1px solid var(--color-border-4);gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{border-radius:var(--radius-button);cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-button);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem var(--color-shadow)}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{border-radius:var(--radius-badge);background-color:var(--color-bg-3);width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:var(--radius-badge);height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb), .1), rgba(var(--color-error-rgb), .05));border:2px solid rgba(var(--color-error-rgb), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-bg-2);width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover);background:var(--color-bg-3)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3);border-top:1px solid var(--color-border);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{border-radius:var(--radius-button);background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;box-shadow:0 2px 8px var(--color-shadow);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__retryButton___TA4jm:hover{box-shadow:0 4px 16px var(--color-shadow);background:var(--color-primary-light);color:var(--color-primary-fg);transform:translateY(-2px)}.styles-module__retryButton___TA4jm:active{box-shadow:0 2px 8px var(--color-shadow);transform:translateY(0)}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{border-radius:var(--radius-button);color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:var(--radius-button);padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;flex:1;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__sidebarFooter___qiPXO{flex-shrink:0;margin-top:auto}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar{width:0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-track{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb:hover{background:0 0}.styles-module__sidebar___BMt0j a{margin-left:0}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{border-radius:var(--radius-button)!important;color:var(--color-fg-text)!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active *,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important;margin-right:.5rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:.5rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem!important;font-size:.8125rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-label{color:var(--color-fg-text)!important;font-weight:500!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active span,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active div,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);writing-mode:horizontal-tb;text-orientation:mixed;padding:.5rem}.styles-module__logoutButton___rfD6u{border-radius:var(--radius-button);width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;writing-mode:horizontal-tb;text-orientation:mixed;direction:ltr;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u span{opacity:1;max-width:200px;transition:opacity .3s,max-width .3s;display:inline-block;writing-mode:horizontal-tb!important;text-orientation:mixed!important;direction:ltr!important;transform:none!important}.styles-module__logoutButton___rfD6u .styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__logoutButton___rfD6u .styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;box-shadow:0 .125rem .25rem 0 var(--color-shadow);position:fixed;top:0}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebarChrome___q0pw5{z-index:101;box-sizing:border-box;position:fixed;left:0}.styles-module__sidebar___ij-8-{height:100%;min-height:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebarChrome___q0pw5{z-index:999}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;box-sizing:border-box;flex-direction:column;min-height:0;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}
2
2
  /*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
3
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./chunk-chunk-BFrxaqQT.cjs"),u=require("./chunk-language-Bqmpuf2W.cjs"),a=require("./chunk-i18n-BTmbcksb.cjs");let t=require("react"),i=require("react/jsx-runtime");function l(e){return a.i18n_default.t("languageSwitcher."+e,{ns:"language",defaultValue:e})}function A(){const e=(0,t.useCallback)(l,[]);return(0,t.useMemo)(()=>({getLanguageDisplayName:e}),[e])}function s(e){return a.i18n_default.t("layoutSwitcher."+e,{ns:"layout",defaultValue:e})}function N(){const e=(0,t.useCallback)(s,[]);return(0,t.useMemo)(()=>({getLayoutDisplayName:e}),[e])}function o(e){return a.i18n_default.t("baseSwitcher."+e,{ns:"preference",defaultValue:e})}function S(){const e=(0,t.useCallback)(o,[]);return(0,t.useMemo)(()=>({getPreferenceDisplayName:e}),[e])}function L(e){return a.i18n_default.t("themeSwitcher."+e,{ns:"theme",defaultValue:e})}function _(){const e=(0,t.useCallback)(L,[]);return(0,t.useMemo)(()=>({getThemeDisplayName:e}),[e])}function y(e,n){return{RESOURCES:e,NAME_SPACES_MAP:n,NAME_SPACES:Object.values(n)}}function d(e){a.setLanguageStorage(e),a.i18n_default.changeLanguage(e)}function c(){const e=a.getLanguageStorage();if(e!=null)return e;const n=(typeof navigator<"u"&&(navigator.language||navigator.languages?.[0])||"").toLowerCase();return n.startsWith("zh")?u.LanguageEnum.ZH:n.startsWith("en")?u.LanguageEnum.EN:n.startsWith("fr")?u.LanguageEnum.FR:u.DEFAULT_LANGUAGE}var f=(0,t.memo)(({children:e,bundles:n,fallbackLng:m,onLoadExtraBundles:E})=>{const r=(0,t.useRef)(!1);return r.current||(a.initI18n({bundles:n,fallbackLng:m,onLoadExtraBundles:E}),r.current=!0),(0,t.useEffect)(()=>{const g=c();a.setLanguageStorage(g),a.i18n_default.changeLanguage(g)},[]),(0,i.jsx)(i.Fragment,{children:e})});f.displayName="LanguageProvider";exports.DEFAULT_LANGUAGE=u.DEFAULT_LANGUAGE;exports.LANGUAGE_STORAGE_KEY=u.LANGUAGE_STORAGE_KEY;exports.LANGUAGE_VALUES=u.LANGUAGE_VALUES;exports.LanguageEnum=u.LanguageEnum;exports.LanguageProvider=f;exports.NFX_NAMESPACES=a.NFX_NAMESPACES;exports.NFX_NAMESPACES_MAP=a.NFX_NAMESPACES_MAP;exports.changeLanguage=d;exports.createI18nResources=y;exports.getDefaultNfxBundles=a.getDefaultNfxBundles;exports.getLanguageDisplayName=l;exports.getLanguageStorage=a.getLanguageStorage;exports.getLayoutDisplayName=s;exports.getLocalLanguage=c;exports.getPreferenceDisplayName=o;exports.getThemeDisplayName=L;exports.i18n=a.i18n_default;exports.initI18n=a.initI18n;exports.removeLanguageStorage=a.removeLanguageStorage;exports.setLanguageStorage=a.setLanguageStorage;exports.useLanguageLabel=A;exports.useLayoutLabel=N;exports.usePreferenceLabel=S;exports.useThemeLabel=_;
3
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./chunk-chunk-BFrxaqQT.cjs"),u=require("./chunk-language-b-WaFsLY.cjs"),a=require("./chunk-i18n--XStRXog.cjs");let t=require("react"),i=require("react/jsx-runtime");function l(e){return a.i18n_default.t("languageSwitcher."+e,{ns:"language",defaultValue:e})}function A(){const e=(0,t.useCallback)(l,[]);return(0,t.useMemo)(()=>({getLanguageDisplayName:e}),[e])}function s(e){return a.i18n_default.t("layoutSwitcher."+e,{ns:"layout",defaultValue:e})}function N(){const e=(0,t.useCallback)(s,[]);return(0,t.useMemo)(()=>({getLayoutDisplayName:e}),[e])}function o(e){return a.i18n_default.t("baseSwitcher."+e,{ns:"preference",defaultValue:e})}function S(){const e=(0,t.useCallback)(o,[]);return(0,t.useMemo)(()=>({getPreferenceDisplayName:e}),[e])}function L(e){return a.i18n_default.t("themeSwitcher."+e,{ns:"theme",defaultValue:e})}function _(){const e=(0,t.useCallback)(L,[]);return(0,t.useMemo)(()=>({getThemeDisplayName:e}),[e])}function y(e,n){return{RESOURCES:e,NAME_SPACES_MAP:n,NAME_SPACES:Object.values(n)}}function d(e){a.setLanguageStorage(e),a.i18n_default.changeLanguage(e)}function c(){const e=a.getLanguageStorage();if(e!=null)return e;const n=(typeof navigator<"u"&&(navigator.language||navigator.languages?.[0])||"").toLowerCase();return n.startsWith("zh")?u.LanguageEnum.ZH:n.startsWith("en")?u.LanguageEnum.EN:n.startsWith("fr")?u.LanguageEnum.FR:u.DEFAULT_LANGUAGE}var f=(0,t.memo)(({children:e,bundles:n,fallbackLng:m,onLoadExtraBundles:E})=>{const r=(0,t.useRef)(!1);return r.current||(a.initI18n({bundles:n,fallbackLng:m,onLoadExtraBundles:E}),r.current=!0),(0,t.useEffect)(()=>{const g=c();a.setLanguageStorage(g),a.i18n_default.changeLanguage(g)},[]),(0,i.jsx)(i.Fragment,{children:e})});f.displayName="LanguageProvider";exports.DEFAULT_LANGUAGE=u.DEFAULT_LANGUAGE;exports.LANGUAGE_STORAGE_KEY=u.LANGUAGE_STORAGE_KEY;exports.LANGUAGE_VALUES=u.LANGUAGE_VALUES;exports.LanguageEnum=u.LanguageEnum;exports.LanguageProvider=f;exports.NFX_NAMESPACES=a.NFX_NAMESPACES;exports.NFX_NAMESPACES_MAP=a.NFX_NAMESPACES_MAP;exports.changeLanguage=d;exports.createI18nResources=y;exports.getDefaultNfxBundles=a.getDefaultNfxBundles;exports.getLanguageDisplayName=l;exports.getLanguageStorage=a.getLanguageStorage;exports.getLayoutDisplayName=s;exports.getLocalLanguage=c;exports.getPreferenceDisplayName=o;exports.getThemeDisplayName=L;exports.i18n=a.i18n_default;exports.initI18n=a.initI18n;exports.removeLanguageStorage=a.removeLanguageStorage;exports.setLanguageStorage=a.setLanguageStorage;exports.useLanguageLabel=A;exports.useLayoutLabel=N;exports.usePreferenceLabel=S;exports.useThemeLabel=_;
4
4
 
5
5
  //# sourceMappingURL=languages.cjs.map
@@ -1,7 +1,7 @@
1
1
  (function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(`.styles-module__loading___bgEAk{justify-content:center;align-items:center;display:inline-flex}.styles-module__loading___bgEAk svg polyline{fill:none;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.styles-module__loading___bgEAk svg polyline.styles-module__back___XLPvD{fill:none;stroke:var(--color-primary-alpha)}.styles-module__loading___bgEAk svg polyline.styles-module__front___hSxig{fill:none;stroke:var(--color-primary);stroke-dasharray:48 144;stroke-dashoffset:192px;animation:1.4s linear infinite styles-module__dash_682___AQzo6}@keyframes styles-module__dash_682___AQzo6{72.5%{opacity:0}to{stroke-dashoffset:0}}.styles-module__loader___E7OIM{justify-content:center;align-items:center;width:fit-content;height:fit-content;display:flex}.styles-module__truckWrapper___Sk4zX{flex-direction:column;justify-content:flex-end;align-items:center;width:100%;height:100%;display:flex;position:relative;overflow-x:hidden}.styles-module__truckBody___j7w2C{width:65%;height:fit-content;margin-bottom:6px;animation:1s linear infinite styles-module__motion___IiNlW}@keyframes styles-module__motion___IiNlW{0%{transform:translateY(0)}50%{transform:translateY(3px)}to{transform:translateY(0)}}.styles-module__truckTires___4ncTl{justify-content:space-between;align-items:center;width:65%;height:fit-content;padding:0 10px 0 15px;display:flex;position:absolute;bottom:0}.styles-module__tiresvg___IBQcN{width:24px}.styles-module__road___sxx-E{background-color:var(--color-fg-heading);border-radius:var(--radius-button);align-self:flex-end;width:100%;height:1.5px;position:relative;bottom:0}.styles-module__road___sxx-E:before{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:10px solid var(--color-bg);width:20px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-50%}.styles-module__road___sxx-E:after{content:"";background-color:var(--color-fg-heading);border-radius:var(--radius-button);border-left:4px solid var(--color-bg);width:10px;height:100%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;right:-65%}.styles-module__lampPost___okcN5{height:45%;animation:1.4s linear infinite styles-module__roadAnimation___yvrHP;position:absolute;bottom:0;right:-90%}@keyframes styles-module__roadAnimation___yvrHP{0%{transform:translate(0)}to{transform:translate(-350px)}}.styles-module__loader___pFUzL{justify-content:center;align-items:center;display:inline-flex;position:relative}.styles-module__loader___pFUzL:before{content:"";background:var(--color-primary);opacity:.3;border-radius:50%;width:100%;height:5px;animation:.5s linear infinite styles-module__shadow324___sutUe;position:absolute;top:calc(100% + 12px);left:0}.styles-module__loader___pFUzL:after{content:"";background:var(--color-primary);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__square___GKjhm:after{border-radius:var(--radius-button);animation:.5s linear infinite styles-module__jump7456Square___Z-D9b}.styles-module__circle___bUpSN:after{border-radius:50%;animation:.5s linear infinite styles-module__jump7456Circle___2AfF7}@keyframes styles-module__jump7456Square___Z-D9b{15%{border-bottom-right-radius:3px}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__jump7456Circle___2AfF7{15%{border-bottom-right-radius:50%}25%{transform:translateY(9px)rotate(22.5deg)}50%{border-bottom-right-radius:40px;transform:translateY(18px)scaleY(.9)rotate(45deg)}75%{transform:translateY(9px)rotate(67.5deg)}to{transform:translateY(0)rotate(90deg)}}@keyframes styles-module__shadow324___sutUe{0%,to{transform:scale(1)}50%{transform:scaleX(1.2)}}.style-module__waves___oR3u7{width:100%;height:100%;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.style-module__waves___oR3u7:before{content:"";background:var(--color-bg);width:.5rem;height:.5rem;transform:translate3d(calc(var(--x) - 50%), calc(var(--y) - 50%), 0);will-change:transform;border-radius:50%;position:absolute;top:0;left:0}.style-module__wavesCanvas___zkhTC{width:100%;height:100%;display:block}.style-module__squaresCanvas___22kMc{border:none;width:100%;height:100%;display:block}.style-module__container___HkxIe{background-color:var(--color-bg);width:100%;height:100%;position:relative;overflow:hidden}.style-module__canvas___MR9JX{width:100%;height:100%;display:block}.style-module__outerVignette___i75nw{pointer-events:none;background:radial-gradient(circle,#0000 60%,#000 100%);width:100%;height:100%;position:absolute;top:0;left:0}.style-module__centerVignette___n9uVG{pointer-events:none;background:radial-gradient(circle,#000c 0%,#0000 60%);width:100%;height:100%;position:absolute;top:0;left:0}.styles-module__button___RbliA{border-radius:var(--radius-button);cursor:pointer;border:1px solid #0000;outline:none;justify-content:center;align-items:center;gap:.5rem;font-family:inherit;font-weight:500;transition:all .2s;display:inline-flex;position:relative}.styles-module__button___RbliA:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.styles-module__button___RbliA:disabled{cursor:not-allowed;opacity:.6}.styles-module__button___RbliA.styles-module__small___yK0Yp{min-height:2rem;padding:.5rem 1rem;font-size:.8125rem}.styles-module__button___RbliA.styles-module__medium___eBTch{min-height:2.5rem;padding:.75rem 1.5rem;font-size:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl{min-height:3rem;padding:1rem 2rem;font-size:1rem}.styles-module__button___RbliA.styles-module__primary___qsZpA{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__button___RbliA.styles-module__primary___qsZpA:hover:not(:disabled){background:var(--color-primary-light);border-color:var(--color-primary-light);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__primary___qsZpA:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__secondary___SCpPv{background:var(--color-bg-2);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__button___RbliA.styles-module__secondary___SCpPv:hover:not(:disabled){background:var(--color-bg-3);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__outline___rrlk9{border-color:var(--color-border-4);color:var(--color-fg-text);background:0 0}.styles-module__button___RbliA.styles-module__outline___rrlk9:hover:not(:disabled){background:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__button___RbliA.styles-module__ghost___QMoiH{color:var(--color-fg-text);background:0 0;border-color:#0000}.styles-module__button___RbliA.styles-module__ghost___QMoiH:hover:not(:disabled){background:var(--color-bg-2)}.styles-module__button___RbliA.styles-module__danger___MW-pg{background:var(--color-danger);border-color:var(--color-danger);color:var(--color-danger-fg,#fff)}.styles-module__button___RbliA.styles-module__danger___MW-pg:hover:not(:disabled){background:var(--color-danger-light);border-color:var(--color-danger-light);color:var(--color-danger-fg,#fff);transform:translateY(-1px)}.styles-module__button___RbliA.styles-module__danger___MW-pg:active:not(:disabled){transform:translateY(0)}.styles-module__button___RbliA.styles-module__fullWidth___-dXBR{width:100%}.styles-module__button___RbliA.styles-module__loading___UWw6V{pointer-events:none}.styles-module__spinner___KpJ-L{border:2px solid;border-top-color:#0000;border-radius:50%;flex-shrink:0;width:1rem;height:1rem;animation:.6s linear infinite styles-module__spin___ntZKM}@keyframes styles-module__spin___ntZKM{to{transform:rotate(360deg)}}.styles-module__button___RbliA.styles-module__small___yK0Yp .styles-module__spinner___KpJ-L{border-width:1.5px;width:.875rem;height:.875rem}.styles-module__button___RbliA.styles-module__large___pIZkl .styles-module__spinner___KpJ-L{border-width:2.5px;width:1.25rem;height:1.25rem}.styles-module__content___oyZRO{align-items:center;display:flex}.styles-module__leftIcon___cDktv,.styles-module__rightIcon___1mpk0{flex-shrink:0;align-items:center;display:flex}.styles-module__leftIcon___cDktv{margin-right:-.25rem}.styles-module__rightIcon___1mpk0{margin-left:-.25rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U{aspect-ratio:1;min-width:2.5rem;min-height:2.5rem;padding:0}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__small___yK0Yp{min-width:2rem;min-height:2rem}.styles-module__button___RbliA.styles-module__iconOnly___iOv-U.styles-module__large___pIZkl{min-width:3rem;min-height:3rem}.styles-module__iconContainer___bwvE3{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.styles-module__layout___WaGy9{flex-direction:column;justify-content:center;align-items:center;gap:.25rem;width:100%;display:flex}.styles-module__horizontal___lKpGq{justify-content:center;align-items:center;gap:.5rem;width:100%;display:flex}.styles-module__topIcon___bzw6s,.styles-module__bottomIcon___suPfa{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__leftIcon___cDktv,.styles-module__iconOnly___iOv-U .styles-module__iconContainer___bwvE3 .styles-module__rightIcon___1mpk0{margin:0}.Dropdown-module__dropdown___c9wIp{width:100%;display:inline-block;position:relative}.Dropdown-module__dropdownButton___suNh-{border:1px solid var(--color-separator);border-radius:var(--radius-card);cursor:pointer;text-align:left;background:var(--color-bg-2);width:100%;color:var(--color-fg-text);outline:none;justify-content:space-between;align-items:center;padding:.75rem 2.5rem .75rem 1rem;font-family:inherit;font-size:1rem;font-weight:400;line-height:1.5rem;transition:all .2s ease-in-out;display:flex;position:relative}.Dropdown-module__dropdownButton___suNh-:hover:not(:disabled){border-color:var(--color-primary);background:var(--color-bg-1)}.Dropdown-module__dropdownButton___suNh-:focus{border-color:var(--color-primary);background:var(--color-bg-1);box-shadow:0 0 0 2px var(--color-primary-transparent)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__disabled___Rz0pX{cursor:not-allowed;opacity:.6;background:var(--color-bg-3)}.Dropdown-module__dropdownButton___suNh-.Dropdown-module__error___F7dDu{border-color:var(--color-danger)}.Dropdown-module__buttonText___D2zxn{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.Dropdown-module__chevronIcon___uyawp{color:var(--color-fg-highlight);flex-shrink:0;transition:transform .15s;position:absolute;right:1rem}.Dropdown-module__chevronIcon___uyawp.Dropdown-module__open___APoXd{transform:rotate(180deg)}.Dropdown-module__dropdownMenu___WJ-QO{background:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-card);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;animation:.15s ease-out Dropdown-module__slideDown___sRCmO;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}@keyframes Dropdown-module__slideDown___sRCmO{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.Dropdown-module__optionsList___Be6RN{margin:0;padding:.5rem 0;list-style:none}.Dropdown-module__option___q-NgT{cursor:pointer;color:var(--color-fg-text);align-items:center;padding:.75rem 1rem;font-size:.875rem;transition:all .15s;display:flex}.Dropdown-module__option___q-NgT:hover{background-color:var(--color-bg-2)}.Dropdown-module__option___q-NgT.Dropdown-module__selected___-OTW-{background-color:var(--color-bg-3);color:var(--color-fg-highlight);font-weight:600}@media (width<=768px){.Dropdown-module__dropdownButton___suNh-{padding:.625rem 2.25rem .625rem .875rem;font-size:.875rem}.Dropdown-module__chevronIcon___uyawp{right:.875rem}.Dropdown-module__option___q-NgT{padding:.625rem .875rem;font-size:.8125rem}}.styles-module__wrapper___COeGm{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___COeGm.styles-module__fullWidth___lVU49{width:100%}.styles-module__label___gfOA7{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___-zOy5{color:var(--color-danger)}.styles-module__inputContainer___wXY53{align-items:center;width:100%;display:flex;position:relative}.styles-module__input___IZDc3{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);outline:none;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__input___IZDc3[type=password]::-webkit-credentials-auto-fill-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-webkit-strong-password-toggle-button{visibility:hidden!important;opacity:0!important;pointer-events:none!important;appearance:none!important;width:0!important;height:0!important;margin:0!important;padding:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-reveal{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3[type=password]::-ms-clear{visibility:hidden!important;opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;display:none!important;position:absolute!important;left:-9999px!important}.styles-module__input___IZDc3:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__input___IZDc3::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__input___IZDc3.styles-module__small___cuGyE{padding:.5rem .75rem;font-size:.8125rem}.styles-module__input___IZDc3.styles-module__medium___JdDPu{padding:.75rem;font-size:.875rem}.styles-module__input___IZDc3.styles-module__large___fMmiG{padding:1rem;font-size:1rem}.styles-module__input___IZDc3.styles-module__default___-eZTG{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__input___IZDc3.styles-module__filled___EQ5PQ{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3{padding-left:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3{padding-right:2.5rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-left:2rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__small___cuGyE{padding-right:2rem}.styles-module__inputContainer___wXY53.styles-module__withLeftIcon___NFn6- .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-left:3rem}.styles-module__inputContainer___wXY53.styles-module__withRightIcon___mz-hn .styles-module__input___IZDc3.styles-module__large___fMmiG{padding-right:3rem}.styles-module__leftIcon___jEW5H,.styles-module__rightIcon___bA3Eo{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute}.styles-module__leftIcon___jEW5H{left:.75rem}.styles-module__rightIcon___bA3Eo{right:.75rem}.styles-module__rightIcon___bA3Eo.styles-module__rightIconInteractive___ccypw{pointer-events:auto}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__leftIcon___jEW5H{left:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerSmall___20ICq .styles-module__rightIcon___bA3Eo{right:.5rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__leftIcon___jEW5H{left:1rem}.styles-module__inputContainer___wXY53.styles-module__containerLarge___IztuN .styles-module__rightIcon___bA3Eo{right:1rem}.styles-module__input___IZDc3.styles-module__error___946qV{border-color:var(--color-danger)}.styles-module__input___IZDc3.styles-module__error___946qV:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__input___IZDc3.styles-module__disabled___sJvLd{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorMessage___5Mn22{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___T2eui{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__container___xeg8O{flex-direction:column;gap:1rem;display:flex}.styles-module__label___qhbKe{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__error___O-7AY{color:var(--color-error);font-size:.875rem}.styles-module__pairs___owGV3{flex-direction:column;gap:.75rem;display:flex}.styles-module__pair___G4WFY{grid-template-columns:1fr 2fr auto;align-items:start;gap:.75rem;display:grid}.styles-module__keyInput___wl1M1,.styles-module__valueInput___HiwJ5{flex:1}.styles-module__removeButton___4-X0b{min-width:auto;color:var(--color-error);padding:.5rem}.styles-module__removeButton___4-X0b:hover{background-color:var(--color-error);color:var(--color-primary-fg)}.styles-module__addButton___QFljt{align-self:flex-start}@media (width<=768px){.styles-module__pair___G4WFY{grid-template-columns:1fr}.styles-module__removeButton___4-X0b{align-self:flex-end}}.styles-module__searchContainer___86TGN{width:100%;max-width:400px;position:relative}.styles-module__searchIcon___ZInry{color:var(--color-fg-muted);pointer-events:none;position:absolute;top:50%;left:1rem;transform:translateY(-50%)}.styles-module__searchInput___SqZXQ{border:1px solid var(--color-border);border-radius:var(--radius-input);width:100%;color:var(--color-fg-text);background:var(--color-bg-2);padding:.75rem 3rem;font-size:1rem;transition:all .2s}.styles-module__searchInput___SqZXQ:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-bg);outline:none}.styles-module__searchInput___SqZXQ::placeholder{color:var(--color-fg-muted)}.styles-module__clearBtn___7jExr{width:1.5rem;height:1.5rem;color:var(--color-fg-muted);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:all .2s;display:flex;position:absolute;top:50%;right:.75rem;transform:translateY(-50%)}.styles-module__clearBtn___7jExr:hover{color:var(--color-fg-text)}@media (width<=768px){.styles-module__searchContainer___86TGN{max-width:100%}}.styles-module__container___nGxdM{flex-direction:column;gap:.75rem;display:flex}.styles-module__toggleContainer___VrsKI{align-items:center;display:flex}.styles-module__toggleButton___IzD6Z{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg-muted);cursor:pointer;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;transition:all .2s;display:flex}.styles-module__toggleButton___IzD6Z:hover{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__toggleButton___IzD6Z.styles-module__enabled___cao0G:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__optionsContainer___LOzlO{background:var(--color-bg-2);border-radius:var(--radius-card);border:1px solid var(--color-border-4);gap:.5rem;padding:.5rem;display:flex}.styles-module__option___abhnC{border:1px solid var(--color-border-4);border-radius:var(--radius-button);background:var(--color-bg);color:var(--color-fg);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:.375rem;padding:.5rem .875rem;font-size:.875rem;font-weight:500;transition:all .2s;display:flex}.styles-module__option___abhnC:hover{background:var(--color-bg-3);border-color:var(--color-border-3)}.styles-module__option___abhnC.styles-module__active___pqmSi{background:var(--color-primary);color:var(--color-primary-fg);border-color:var(--color-primary)}.styles-module__option___abhnC.styles-module__active___pqmSi:hover{background:var(--color-primary-hover);border-color:var(--color-primary-hover);color:var(--color-primary-fg)}.styles-module__nbSelect___KjxSc{font-family:inherit;font-size:.9375rem;font-weight:600;line-height:1.5rem;display:inline-block;position:relative}.styles-module__selectButton___AKZe4{border-radius:var(--radius-button);cursor:pointer;text-align:left;width:100%;min-width:8rem;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;appearance:none;border:1px solid;outline:none;justify-content:space-between;align-items:center;padding:.4375rem 2.2rem .4375rem 1.125rem;transition:all .15s ease-in-out;display:flex;position:relative}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a{background-color:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:hover:not(:disabled){background-color:var(--color-primary-light);border-color:var(--color-primary-light)}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a:focus,.styles-module__selectButton___AKZe4.styles-module__primary___HU36a.styles-module__open___9AKMb{background-color:var(--color-primary-light);border-color:var(--color-primary-light);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP{background-color:var(--color-bg);border-color:var(--color-border-4);color:var(--color-fg-text)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:hover:not(:disabled){background-color:var(--color-bg-2);border-color:var(--color-primary)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP:focus,.styles-module__selectButton___AKZe4.styles-module__default___LedYP.styles-module__open___9AKMb{background-color:var(--color-bg-2);border-color:var(--color-primary);box-shadow:0 0 0 .125rem rgba(var(--color-primary-rgb), .25)}.styles-module__selectButton___AKZe4:disabled{cursor:not-allowed;opacity:.6}.styles-module__buttonText___QSLO1{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.styles-module__chevronIcon___qAHaD{flex-shrink:0;width:1.5rem;height:1.5rem;transition:transform .15s;position:absolute;right:.41rem}.styles-module__selectButton___AKZe4.styles-module__primary___HU36a .styles-module__chevronIcon___qAHaD{color:var(--color-primary-fg)}.styles-module__selectButton___AKZe4.styles-module__default___LedYP .styles-module__chevronIcon___qAHaD{color:var(--color-fg)}.styles-module__chevronIcon___qAHaD.styles-module__open___9AKMb{transform:rotate(180deg)}.styles-module__optionsPanel___NWAp3{background-color:var(--color-bg);border:1px solid var(--color-border-4);border-radius:var(--radius-button);min-width:100%;box-shadow:0 .5rem 1rem var(--color-shadow);z-index:1000;transform-origin:top;visibility:hidden;pointer-events:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow:hidden}.styles-module__optionsPanel___NWAp3.styles-module__open___9AKMb{visibility:visible;pointer-events:auto;animation:.25s ease-out styles-module__expandDown___eD4lh}.styles-module__optionsPanel___NWAp3.styles-module__closed___bez-q{visibility:hidden;pointer-events:none;animation:.25s ease-out styles-module__collapseUp___dt1E7}@keyframes styles-module__expandDown___eD4lh{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}@keyframes styles-module__collapseUp___dt1E7{0%{opacity:1;transform:scaleY(1)}to{opacity:0;transform:scaleY(0)}}.styles-module__optionsPanel___NWAp3.styles-module__primary___HU36a{border-color:var(--color-primary)}.styles-module__optionsPanel___NWAp3.styles-module__default___LedYP{border-color:var(--color-border-4)}.styles-module__optionsList___AxhVp{margin:0;padding:.5rem 0;list-style:none}.styles-module__option___t1SSw{cursor:pointer;color:var(--color-fg-text);justify-content:space-between;align-items:center;padding:.75rem 1.125rem;transition:all .15s;display:flex}.styles-module__option___t1SSw:hover{background-color:var(--color-bg-2)}.styles-module__option___t1SSw.styles-module__selected___azD4A{background-color:var(--color-primary);color:var(--color-primary-fg);font-weight:700}@media (prefers-color-scheme:dark){.styles-module__optionsPanel___NWAp3{box-shadow:0 .5rem 1rem var(--color-shadow)}}.styles-module__sliderContainer___lgpaD{flex-direction:column;gap:.5rem;display:flex}.styles-module__sliderContainer___lgpaD.styles-module__fullWidth___ZS8W5{width:100%}.styles-module__labelRow___dkVVM{justify-content:space-between;align-items:center;min-height:1.5rem;margin-bottom:.5rem;display:flex}.styles-module__label___bXGZs{color:var(--color-fg-text);font-size:.875rem;font-weight:500}.styles-module__required___FuyfE{color:var(--color-danger);margin-left:.25rem}.styles-module__sliderWrapper___1Wdti{touch-action:none;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;gap:.75rem;width:100%;display:flex}.styles-module__sliderRoot___yzOjR{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;flex-grow:1;align-items:center;width:100%;padding:.75rem 0;display:flex;position:relative}.styles-module__sliderRoot___yzOjR:active{cursor:grabbing}.styles-module__sliderTrackWrapper___N72WQ{flex-grow:1;display:flex;position:relative}.styles-module__sliderTrack___AltcD{border-radius:var(--radius-badge);background-color:var(--color-bg-3);width:100%;height:.375rem;position:relative;overflow:hidden}.styles-module__sliderRange___U3g0-{background-color:var(--color-primary);border-radius:var(--radius-badge);height:100%;position:absolute}.styles-module__valueIndicator___aLf0I{color:var(--color-primary);text-align:center;flex-shrink:0;min-width:2rem;font-size:.875rem;font-weight:600;line-height:1}.styles-module__iconWrapper___wL-b8{flex-shrink:0;justify-content:center;align-items:center;display:flex}.styles-module__icon___vHsID{width:20px;height:20px;color:var(--color-fg-muted)}.styles-module__errorMessage___qFgGe{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___tgBGl{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__loadingContainer___OMgwS{flex-direction:column;justify-content:center;align-items:center;gap:1.5rem;min-height:60vh;display:flex}.styles-module__loadingText___KRZqR{color:var(--color-fg-muted);font-size:1rem}.styles-module__errorContainer___qhAg2{text-align:center;min-height:60vh;color:var(--color-fg-text);flex-direction:column;justify-content:center;align-items:center;gap:2rem;padding:3rem 2rem;display:flex}.styles-module__errorIconWrapper___IHZrN{background:linear-gradient(135deg, rgba(var(--color-error-rgb), .1), rgba(var(--color-error-rgb), .05));border:2px solid rgba(var(--color-error-rgb), .2);border-radius:50%;justify-content:center;align-items:center;width:120px;height:120px;animation:2s ease-in-out infinite styles-module__pulse___Lju-z;display:flex}@keyframes styles-module__pulse___Lju-z{0%,to{opacity:1;transform:scale(1)}50%{opacity:.9;transform:scale(1.05)}}.styles-module__errorIcon___oGDIP{color:var(--color-error);stroke-width:1.5px}.styles-module__errorContent___F55rQ{flex-direction:column;align-items:center;gap:1rem;width:100%;max-width:600px;display:flex}.styles-module__errorTitle___hC8D-{color:var(--color-fg-heading);letter-spacing:-.02em;margin:0;font-size:1.75rem;font-weight:700;line-height:1.2}.styles-module__errorDescription___hZtuP{color:var(--color-fg-muted);max-width:480px;margin:0;font-size:1rem;line-height:1.6}.styles-module__errorDetailsWrapper___-sp8b{width:100%;max-width:600px;margin-top:.5rem}.styles-module__errorDetailsContainer___eywMo{text-align:left;border:1px solid var(--color-border);border-radius:var(--radius-card);background:var(--color-bg-2);width:100%;transition:all .2s;overflow:hidden}.styles-module__errorDetailsContainer___eywMo:hover{border-color:var(--color-border-hover);background:var(--color-bg-3)}.styles-module__errorDetailsSummary___hGEoD{cursor:pointer;color:var(--color-fg-muted);-webkit-user-select:none;user-select:none;padding:.875rem 1.25rem;font-size:.875rem;font-weight:500;list-style:none;transition:color .2s}.styles-module__errorDetailsSummary___hGEoD:hover{color:var(--color-fg-text)}.styles-module__errorDetailsSummary___hGEoD::-webkit-details-marker{display:none}.styles-module__errorDetailsSummary___hGEoD:before{content:"▶";margin-right:.5rem;font-size:.75rem;transition:transform .2s;display:inline-block}.styles-module__errorDetailsContainer___eywMo[open] .styles-module__errorDetailsSummary___hGEoD:before{transform:rotate(90deg)}.styles-module__errorDetails___tzCT-{background:var(--color-bg-3);border-top:1px solid var(--color-border);max-width:100%;color:var(--color-fg-muted);white-space:pre-wrap;word-break:break-word;margin:0;padding:1rem 1.25rem;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-size:.8125rem;line-height:1.6;overflow-x:auto}.styles-module__errorActions___gtqYw{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;margin-top:1rem;display:flex}.styles-module__retryButton___TA4jm{border-radius:var(--radius-button);background:var(--color-primary);color:var(--color-primary-fg);cursor:pointer;box-shadow:0 2px 8px var(--color-shadow);border:none;justify-content:center;align-items:center;gap:.5rem;padding:.75rem 2rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__retryButton___TA4jm:hover{box-shadow:0 4px 16px var(--color-shadow);background:var(--color-primary-light);color:var(--color-primary-fg);transform:translateY(-2px)}.styles-module__retryButton___TA4jm:active{box-shadow:0 2px 8px var(--color-shadow);transform:translateY(0)}.styles-module__retryButtonIcon___vzfp-{font-size:1.125rem;line-height:1;transition:transform .3s;display:inline-block}.styles-module__retryButton___TA4jm:hover .styles-module__retryButtonIcon___vzfp-{transform:rotate(180deg)}.styles-module__clearLocalDataButton___T3B-K{border-radius:var(--radius-button);color:var(--color-fg-muted);border:1px solid var(--color-border-4);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.75rem 1.5rem;font-size:.9375rem;font-weight:500;transition:all .2s;display:inline-flex}.styles-module__clearLocalDataButton___T3B-K:hover{color:var(--color-fg-text);border-color:var(--color-border-3);background:var(--color-bg-secondary)}.styles-module__wrapper___jXPV3{flex-direction:column;gap:.5rem;display:flex}.styles-module__wrapper___jXPV3.styles-module__fullWidth___eKyGB{width:100%}.styles-module__label___MyTeo{color:var(--color-fg-heading);align-items:center;gap:.25rem;font-size:.875rem;font-weight:500;display:flex}.styles-module__required___TV-m8{color:var(--color-danger)}.styles-module__inputContainer___VvGBl{align-items:flex-start;width:100%;display:flex;position:relative}.styles-module__textarea___AjX9N{border:1px solid var(--color-border-4);border-radius:var(--radius-input);background:var(--color-bg);width:100%;color:var(--color-fg-text);resize:vertical;outline:none;min-height:4rem;font-family:inherit;font-size:.875rem;transition:all .2s}.styles-module__textarea___AjX9N:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px rgba(var(--color-primary-rgb), .1)}.styles-module__textarea___AjX9N::placeholder{color:var(--color-fg-muted);opacity:.5}.styles-module__textarea___AjX9N.styles-module__small___zMx0G{min-height:3rem;padding:.5rem .75rem;font-size:.8125rem}.styles-module__textarea___AjX9N.styles-module__medium___tO2Lb{min-height:4rem;padding:.75rem;font-size:.875rem}.styles-module__textarea___AjX9N.styles-module__large___3eU2g{min-height:5rem;padding:1rem;font-size:1rem}.styles-module__textarea___AjX9N.styles-module__default___vsSxX{background:var(--color-bg);border-color:var(--color-border-4)}.styles-module__textarea___AjX9N.styles-module__filled___TPQgI{background:var(--color-bg-2);border-color:var(--color-border-3)}.styles-module__inputContainer___VvGBl .styles-module__leftIcon___FHp2R{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;left:.75rem}.styles-module__inputContainer___VvGBl .styles-module__rightIcon___dkyvP{color:var(--color-fg-muted);pointer-events:none;z-index:1;justify-content:center;align-items:center;display:flex;position:absolute;top:.75rem;right:.75rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__small___zMx0G+.styles-module__rightIcon___dkyvP{top:.5rem}.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__leftIcon___FHp2R,.styles-module__inputContainer___VvGBl .styles-module__textarea___AjX9N.styles-module__large___3eU2g+.styles-module__rightIcon___dkyvP{top:1rem}.styles-module__textarea___AjX9N.styles-module__error___d8gLK{border-color:var(--color-danger)}.styles-module__textarea___AjX9N.styles-module__error___d8gLK:focus{border-color:var(--color-danger);box-shadow:0 0 0 3px rgba(var(--color-danger-rgb), .1)}.styles-module__textarea___AjX9N.styles-module__disabled___IzbfE{background:var(--color-bg-3);border-color:var(--color-border-5);color:var(--color-fg-muted);cursor:not-allowed;opacity:.6}.styles-module__errorText___Nom7x{color:var(--color-danger);margin:0;font-size:.75rem}.styles-module__helperText___97Def{color:var(--color-fg-muted);margin:0;font-size:.75rem}.styles-module__virtualList___pM6rN{contain:strict;width:100%;padding-bottom:300px;position:relative;overflow:auto}.styles-module__emptyContainer___rm938{height:100%;color:var(--color-fg-muted);justify-content:center;align-items:center;display:flex}.styles-module__virtualListInner___HxRzc{width:100%;position:relative}.styles-module__virtualListItems___p19-a{width:100%;position:absolute;top:0;left:0}.styles-module__loadingMore___zAdLM{color:var(--color-fg-muted);justify-content:center;align-items:center;gap:.75rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;margin-top:1rem;padding:2rem 0;font-size:.875rem;display:flex}.styles-module__endOfList___5cYFh span{background-color:var(--color-bg-2);border-radius:var(--radius-button);padding:.5rem 1rem}.styles-module__virtualList___xmj2v{width:100%;padding-bottom:300px;position:relative;overflow:visible}.styles-module__virtualListInner___quD74{width:100%;position:relative}.styles-module__virtualListItems___-Muml{width:100%;position:absolute;top:0;left:0}.styles-module__virtualListRow___h3pzX{width:100%}.styles-module__emptyContainer___LIy8r{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:2rem 0;display:flex}.styles-module__loadingMore___Mzf-p{color:var(--color-fg-muted);justify-content:center;align-items:center;padding:1.5rem 0;display:flex}.styles-module__endOfList___g5G--{color:var(--color-fg-muted);border-top:1px solid var(--color-border-3);justify-content:center;padding:1.5rem 0;display:flex}.styles-module__sidebar___BMt0j{flex-direction:column;min-height:0;display:flex;overflow:hidden}.styles-module__sidebarContent___iAwiw{flex-direction:column;flex:1;min-height:0;padding-top:1rem;display:flex;overflow:hidden}.styles-module__sidebarFooter___qiPXO{flex-shrink:0;margin-top:auto}.styles-module__menuWrapper___DKuEv{flex:1;min-height:0;overflow:hidden auto}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar{width:0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-track{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb{background:0 0}.styles-module__sidebarContent___iAwiw::-webkit-scrollbar-thumb:hover{background:0 0}.styles-module__sidebar___BMt0j a{margin-left:0}.styles-module__sidebar___BMt0j .ps-sidebar-root{background-color:var(--color-bg-2)!important;border-right:1px solid var(--color-separator)!important;flex-direction:column!important;min-height:0!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-sidebar-container{background-color:var(--color-bg-2)!important;min-height:0!important;color:var(--color-fg-text)!important;flex-direction:column!important;flex:1!important;display:flex!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-menu-button{border-radius:var(--radius-button)!important;color:var(--color-fg-text)!important;margin:.125rem .5rem!important;padding:.5rem .75rem!important;font-size:.875rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-button:hover{background-color:var(--color-bg-3)!important;color:var(--color-fg-text)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active{background-color:var(--color-primary)!important;color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active *,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__sidebar___BMt0j .ps-menu-icon{width:1.25rem!important;height:1.25rem!important;color:var(--color-fg-text)!important;margin-right:.5rem!important}.styles-module__sidebar___BMt0j .ps-submenu-content{background-color:var(--color-bg-3)!important;padding-left:.5rem!important;overflow:hidden!important}.styles-module__sidebar___BMt0j .ps-submenu-content .ps-menu-button{margin:.125rem .25rem!important;padding:.375rem .5rem!important;font-size:.8125rem!important;transition:all .2s!important}.styles-module__sidebar___BMt0j .ps-menu-label{color:var(--color-fg-text)!important;font-weight:500!important}.styles-module__sidebar___BMt0j .ps-menu-button.ps-active,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active span,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active div,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-icon,.styles-module__sidebar___BMt0j .ps-menu-button.ps-active .ps-menu-label{color:var(--color-primary-fg)!important}.styles-module__logoutContainer___7NwBL{border-top:1px solid var(--color-separator);writing-mode:horizontal-tb;text-orientation:mixed;padding:.5rem}.styles-module__logoutButton___rfD6u{border-radius:var(--radius-button);width:100%;color:var(--color-fg-text);cursor:pointer;white-space:nowrap;writing-mode:horizontal-tb;text-orientation:mixed;direction:ltr;background:0 0;border:none;justify-content:flex-start;align-items:center;gap:.5rem;padding:.5rem .75rem;font-size:.875rem;transition:background-color .2s,color .2s;display:flex;overflow:hidden}.styles-module__logoutButton___rfD6u span{opacity:1;max-width:200px;transition:opacity .3s,max-width .3s;display:inline-block;writing-mode:horizontal-tb!important;text-orientation:mixed!important;direction:ltr!important;transform:none!important}.styles-module__logoutButton___rfD6u .styles-module__hiddenText___z183T{opacity:0;width:0;max-width:0;overflow:hidden}.styles-module__logoutButton___rfD6u .styles-module__visibleText___lfsv-{opacity:1;width:auto;max-width:200px}.styles-module__logoutButton___rfD6u:hover{background-color:var(--color-bg-3)}.styles-module__logoutButton___rfD6u:active{transform:scale(.98)}.styles-module__logoutButton___rfD6u svg{color:inherit;flex-shrink:0}.styles-module__footer___g-hY7{background:var(--color-bg-2);width:100%;padding:0 2rem}.styles-module__footerContent___Oen5n{justify-content:space-between;align-items:center;max-width:100%;margin:0 auto;display:flex}.styles-module__copyright___1R2o3{color:var(--color-fg-text);font-size:.875rem}.styles-module__links___dQyvB{gap:1.5rem;display:flex}.styles-module__link___UWfyK{color:var(--color-fg-text);font-size:.875rem;text-decoration:none;transition:color .3s}.styles-module__link___UWfyK:hover{color:var(--color-primary)}@media (width<=768px){.styles-module__footerContent___Oen5n{flex-direction:column;gap:1rem}.styles-module__links___dQyvB{gap:1rem}}.styles-module__header___4Uc8h{width:100%;padding:.5rem 2rem;display:flex}.styles-module__header___4Uc8h>:first-child{flex:1;justify-content:flex-start;align-items:center;display:flex}.styles-module__header___4Uc8h>:last-child{flex:1;justify-content:flex-end;align-items:center;display:flex}.styles-module__layout___ZQKU7{background:var(--color-bg);flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.styles-module__header___XIaFb{z-index:100;background:var(--color-bg);width:100%;box-shadow:0 .125rem .25rem 0 var(--color-shadow);position:fixed;top:0}.styles-module__footer___r8ASO{z-index:100;width:100%;position:fixed;bottom:0}.styles-module__mainWrapper___i4tEI{flex:1;display:flex;position:relative}.styles-module__sidebarChrome___q0pw5{z-index:101;box-sizing:border-box;position:fixed;left:0}.styles-module__sidebar___ij-8-{height:100%;min-height:0}.styles-module__content___mTgUr{background:var(--color-bg);flex:1;min-height:calc(100vh - 10rem);margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=768px){.styles-module__content___mTgUr{width:100%}.styles-module__sidebarChrome___q0pw5{z-index:999}}.styles-module__mainWrapper___AiTAw{flex-direction:row;flex:1;display:flex;position:relative}.styles-module__sidebarContainer___X4yj8{z-index:99;box-sizing:border-box;flex-direction:column;min-height:0;display:flex;position:fixed;left:0;overflow:hidden}.styles-module__sidebar___VQTlH{flex-shrink:0;top:0;left:0}.styles-module__content___htJlH{background:var(--color-bg);flex:1;margin:0;padding-top:0;padding-bottom:0;overflow:hidden auto}@media (width<=1024px){.styles-module__content___htJlH{padding:1.5rem}}@media (width<=768px){.styles-module__content___htJlH{width:100%}}.styles-module__wavesWrapper___TK7DI{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__wavesWrapper___TK7DI>*{pointer-events:auto}.styles-module__squaresWrapper___P25uF{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__squaresWrapper___P25uF>*{pointer-events:auto}.styles-module__letterGlitchWrapper___KWtWU{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__letterGlitchWrapper___KWtWU>*{pointer-events:auto}.styles-module__pixelBlastWrapper___YptHh{pointer-events:none;z-index:0;width:100vw;height:100vh;position:fixed;inset:0;overflow:hidden}.styles-module__pixelBlastWrapper___YptHh>*{pointer-events:auto}.style-module__container___Hh3-c{width:100%;height:100%;position:relative;overflow:hidden}
2
2
  /*$vite$:1*/`)),document.head.appendChild(e)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
3
- import { i as u, n as v, r as C, t as c } from "./chunk-language-B8sfGadQ.mjs";
4
- import { a as i, c as I, i as b, n as f, o as w, r as m, s as M, t } from "./chunk-i18n-B8yt0Jex.mjs";
3
+ import { i as u, n as v, r as C, t as c } from "./chunk-language-BKIy1ot4.mjs";
4
+ import { a as i, c as I, i as b, n as f, o as w, r as m, s as M, t } from "./chunk-i18n-ly0gkdrE.mjs";
5
5
  import { memo as L, useCallback as n, useEffect as N, useMemo as r, useRef as p } from "react";
6
6
  import { Fragment as y, jsx as E } from "react/jsx-runtime";
7
7
  function A(e) {