@xopcai/xopc 0.0.77 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js → agents-Bh_9-1KB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DN3vr8pb.js.map → agents-Bh_9-1KB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js → apps-page-CB5anZpc.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-BUn41aPi.js.map → apps-page-CB5anZpc.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js → channels-settings-Bt1sprhC.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-CYMmWDtP.js.map → channels-settings-Bt1sprhC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js → channels-status-swr-Crgak3fg.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-status-swr-sJj4ueTp.js.map → channels-status-swr-Crgak3fg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js → cron-api-CzJGvQQ7.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-api-CLxnaHdq.js.map → cron-api-CzJGvQQ7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js → cron-page-BoNRJNVV.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-BAQ8xSnJ.js.map → cron-page-BoNRJNVV.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js → dist-a-eaOUvs.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BfJYxiK5.js.map → dist-a-eaOUvs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js → extension-debug-page-D-O1XjAa.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-bgvVs-Sy.js.map → extension-debug-page-D-O1XjAa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js → extension-page-B2VpqBTH.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-SG4TVv-u.js.map → extension-page-B2VpqBTH.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js → extension-settings-page-CmBcQfeO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-CJZRTsjF.js.map → extension-settings-page-CmBcQfeO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js → fetch-EGO9T3MN.js} +3 -3
- package/dist/gateway/static/root/assets/{fetch-K_0JRCXU.js.map → fetch-EGO9T3MN.js.map} +1 -1
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js → field-primitives-Bh7G1y4D.js} +2 -2
- package/dist/gateway/static/root/assets/{field-primitives-Z76hyBYS.js.map → field-primitives-Bh7G1y4D.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js → heartbeat-config-api-DxpIEZNs.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BqfDabSI.js.map → heartbeat-config-api-DxpIEZNs.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js → index-Dxy9ZCtC.js} +5 -5
- package/dist/gateway/static/root/assets/{index-ChiUhJAs.js.map → index-Dxy9ZCtC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js → logs-page-Dw58E2GE.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DrIMhDE2.js.map → logs-page-Dw58E2GE.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js → sessions-page-CPkhCy57.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-B-RGO3N0.js.map → sessions-page-CPkhCy57.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js → settings-form-section-DLZDVMEf.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-form-section-Csvl1iL6.js.map → settings-form-section-DLZDVMEf.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js +4 -0
- package/dist/gateway/static/root/assets/settings-page-CVPCa0PE.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js → skills-page-DueZ9Qfg.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-dHwx2vh0.js.map → skills-page-DueZ9Qfg.js.map} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js → theme-store-CWPq9gW1.js} +2 -2
- package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map} +1 -1
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js → utils-Cnix55r9.js} +2 -2
- package/dist/gateway/static/root/assets/{utils-COYrNFF7.js.map → utils-Cnix55r9.js.map} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js → voice-api-key-field-BR3Ut06g.js} +2 -2
- package/dist/gateway/static/root/assets/{voice-api-key-field-5WZZaxH3.js.map → voice-api-key-field-BR3Ut06g.js.map} +1 -1
- package/dist/gateway/static/root/index.html +3 -3
- package/dist/package.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +23 -4
- package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
- package/dist/src/cli/commands/tunnel.js +4 -5
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/rules.js +0 -5
- package/dist/src/config/rules.js.map +1 -1
- package/dist/src/config/schema.d.ts +0 -27
- package/dist/src/config/schema.js +4 -18
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/auth-rate-limit.d.ts +2 -0
- package/dist/src/gateway/auth-rate-limit.js +9 -3
- package/dist/src/gateway/auth-rate-limit.js.map +1 -1
- package/dist/src/gateway/hono/app.js +19 -13
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +3 -1
- package/dist/src/gateway/hono/lib/config-payload.js +1 -2
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +32 -30
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/gateway/host.d.ts +24 -0
- package/dist/src/gateway/host.js +33 -1
- package/dist/src/gateway/host.js.map +1 -1
- package/dist/src/gateway/index.d.ts +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/runtime-config.js +1 -8
- package/dist/src/gateway/runtime-config.js.map +1 -1
- package/dist/src/gateway/security/audit.js +4 -4
- package/dist/src/gateway/security/audit.js.map +1 -1
- package/dist/src/gateway/server.js +2 -3
- package/dist/src/gateway/server.js.map +1 -1
- package/dist/src/gateway/service/types.d.ts +2 -0
- package/dist/src/gateway/service.d.ts +2 -0
- package/dist/src/gateway/service.js +7 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/tunnel/frp-subdomain-host.d.ts +2 -0
- package/dist/src/tunnel/frp-subdomain-host.js +15 -0
- package/dist/src/tunnel/frp-subdomain-host.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +0 -4
- package/dist/src/tunnel/gateway-lifecycle.js +9 -11
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +2 -4
- package/dist/src/tunnel/index.js +2 -4
- package/dist/src/tunnel/pair-url.js +7 -1
- package/dist/src/tunnel/pair-url.js.map +1 -1
- package/dist/src/tunnel/pairing.d.ts +13 -0
- package/dist/src/tunnel/pairing.js +48 -1
- package/dist/src/tunnel/pairing.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +2 -16
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +1 -10
- package/dist/src/tunnel/tunnel-service.js +7 -60
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +3 -18
- package/dist/src/tunnel/well-known.d.ts +5 -0
- package/dist/src/tunnel/well-known.js +2 -1
- package/dist/src/tunnel/well-known.js.map +1 -1
- package/package.json +2 -2
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js +0 -4
- package/dist/gateway/static/root/assets/settings-page-nxAc0ta1.js.map +0 -1
- package/dist/src/tunnel/acme-cert-store.d.ts +0 -34
- package/dist/src/tunnel/acme-cert-store.js +0 -184
- package/dist/src/tunnel/acme-cert-store.js.map +0 -1
- package/dist/src/tunnel/acme-client.d.ts +0 -50
- package/dist/src/tunnel/acme-client.js +0 -473
- package/dist/src/tunnel/acme-client.js.map +0 -1
- package/dist/src/tunnel/acme-crypto.d.ts +0 -25
- package/dist/src/tunnel/acme-crypto.js +0 -58
- package/dist/src/tunnel/acme-crypto.js.map +0 -1
- package/dist/src/tunnel/acme-csr.d.ts +0 -5
- package/dist/src/tunnel/acme-csr.js +0 -48
- package/dist/src/tunnel/acme-csr.js.map +0 -1
- package/dist/src/tunnel/tls-server.d.ts +0 -14
- package/dist/src/tunnel/tls-server.js +0 -126
- package/dist/src/tunnel/tls-server.js.map +0 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +0 -11
- package/dist/src/tunnel/tunnel-e2e-config.js +0 -29
- package/dist/src/tunnel/tunnel-e2e-config.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as e}from"./fetch-
|
|
2
|
-
//# sourceMappingURL=theme-store-
|
|
1
|
+
import{u as e}from"./fetch-EGO9T3MN.js";function t(e,t){let n;try{n=e()}catch{return}return{getItem:e=>{let r=e=>e===null?null:JSON.parse(e,t?.reviver),i=n.getItem(e)??null;return i instanceof Promise?i.then(r):r(i)},setItem:(e,r)=>n.setItem(e,JSON.stringify(r,t?.replacer)),removeItem:e=>n.removeItem(e)}}var n=e=>t=>{try{let r=e(t);return r instanceof Promise?r:{then(e){return n(e)(r)},catch(e){return this}}}catch(e){return{then(e){return this},catch(t){return n(t)(e)}}}},r=(e,r)=>(i,a,o)=>{let s={storage:t(()=>window.localStorage),partialize:e=>e,version:0,merge:(e,t)=>({...t,...e}),...r},c=!1,l=0,u=new Set,d=new Set,f=s.storage;if(!f)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${s.name}', the given storage is currently unavailable.`),i(...e)},a,o);let p=()=>{let e=s.partialize({...a()});return f.setItem(s.name,{state:e,version:s.version})},m=o.setState;o.setState=(e,t)=>(m(e,t),p());let h=e((...e)=>(i(...e),p()),a,o);o.getInitialState=()=>h;let g,_=()=>{if(!f)return;let e=++l;c=!1,u.forEach(e=>e(a()??h));let t=s.onRehydrateStorage?.call(s,a()??h)||void 0;return n(f.getItem.bind(f))(s.name).then(e=>{if(e)if(typeof e.version==`number`&&e.version!==s.version){if(s.migrate){let t=s.migrate(e.state,e.version);return t instanceof Promise?t.then(e=>[!0,e]):[!0,t]}console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`)}else return[!1,e.state];return[!1,void 0]}).then(t=>{if(e!==l)return;let[n,r]=t;if(g=s.merge(r,a()??h),i(g,!0),n)return p()}).then(()=>{e===l&&(t?.(a(),void 0),g=a(),c=!0,d.forEach(e=>e(g)))}).catch(n=>{e===l&&t?.(void 0,n)})};return o.persist={setOptions:e=>{s={...s,...e},e.storage&&(f=e.storage)},clearStorage:()=>{f?.removeItem(s.name)},getOptions:()=>s,rehydrate:()=>_(),hasHydrated:()=>c,onHydrate:e=>(u.add(e),()=>{u.delete(e)}),onFinishHydration:e=>(d.add(e),()=>{d.delete(e)})},s.skipHydration||_(),g||h},i=`default`,a={light:{default:`#f5f5f7`,emerald:`#f0fdf4`,mono:`#ffffff`,clay:`#fffaf0`},dark:{default:`#1c1c1e`,emerald:`#000000`,mono:`#101010`,clay:`#0a1a1a`}};function o(e,t){let n=document.head;if(!n)return;let r=n.querySelector(`meta[name="theme-color"][data-xopc-theme-color="true"]`);r||(r=document.createElement(`meta`),r.setAttribute(`name`,`theme-color`),r.setAttribute(`data-xopc-theme-color`,`true`),n.appendChild(r)),r.setAttribute(`content`,a[e][t])}function s(){return globalThis.matchMedia?.(`(prefers-color-scheme: dark)`).matches??!1}function c(e){return e===`system`?s()?`dark`:`light`:e}function l(){return globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1}function u(e){return e===`cal`?`mono`:e===`default`||e===`emerald`||e===`mono`||e===`clay`?e:i}function d(e,t,n){let r=document.documentElement,i=()=>{r.classList.toggle(`dark`,e===`dark`),r.dataset.theme=e,r.dataset.colorScheme=t,o(e,t)},a=document;n&&!l()&&typeof a.startViewTransition==`function`?a.startViewTransition(i):i()}function f(){try{let e=localStorage.getItem(`xopc-web-theme`),t=`system`,n=i;if(e){let r=JSON.parse(e);r.state?.preference&&(t=r.state.preference),r.state&&`colorScheme`in r.state&&(n=u(r.state.colorScheme))}d(c(t),n,!1)}catch{d(c(`system`),`default`,!1)}}var p=e(r((e,t)=>({preference:`system`,colorScheme:i,resolved:c(`system`),setPreference:n=>{let r=c(n),{resolved:i,colorScheme:a}=t();d(r,a,r!==i),e({preference:n,resolved:r})},setColorScheme:n=>{let{resolved:r}=t();d(r,n,!0),e({colorScheme:n})}}),{name:`xopc-web-theme`,merge:(e,t)=>{let n=e??{};return{...t,...n,colorScheme:u(n.colorScheme)}}}));function m(){let{preference:e,colorScheme:t}=p.getState(),n=c(e);d(n,t,!1),p.setState({resolved:n})}function h(){let e=globalThis.matchMedia?.(`(prefers-color-scheme: dark)`);if(!e)return()=>{};let t=()=>{let{preference:e,colorScheme:t}=p.getState();if(e!==`system`)return;let n=c(`system`),r=p.getState().resolved;d(n,t,n!==r),p.setState({resolved:n})};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}export{r as a,p as i,h as n,m as r,f as t};
|
|
2
|
+
//# sourceMappingURL=theme-store-CWPq9gW1.js.map
|
package/dist/gateway/static/root/assets/{theme-store-Bl5A2Fd_.js.map → theme-store-CWPq9gW1.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-store-Bl5A2Fd_.js","names":["create","persist","ThemePreference","ColorScheme","DEFAULT_COLOR_SCHEME","THEME_META_COLOR","Record","light","default","emerald","mono","clay","dark","syncThemeColorMeta","mode","scheme","head","document","selector","meta","querySelector","HTMLMetaElement","createElement","setAttribute","appendChild","getSystemDark","globalThis","matchMedia","matches","resolveTheme","pref","prefersReducedMotion","normalizeColorScheme","value","applyDomTheme","useViewTransition","root","documentElement","run","classList","toggle","dataset","theme","colorScheme","doc","Document","startViewTransition","cb","finished","Promise","hydrateThemeFromStorage","raw","localStorage","getItem","parsed","JSON","parse","state","preference","ThemeState","resolved","setPreference","p","setColorScheme","useThemeStore","set","get","prevResolved","name","merge","persisted","current","Partial","syncThemeAfterHydration","getState","setState","subscribeSystemTheme","mq","handler","addEventListener","removeEventListener"],"sources":["../../../../../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.15_react@19.2.6_use-sync-external-store@1.6.0_react@19.2.6_/node_modules/zustand/esm/middleware.mjs","../../../../../web/src/stores/theme-store.ts"],"sourcesContent":["const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /.+ (.+) .+/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\nexport type ThemePreference = 'light' | 'dark' | 'system';\n\n/** Visual color scheme — orthogonal to light/dark mode. */\nexport type ColorScheme = 'default' | 'emerald' | 'mono' | 'clay';\n\nconst DEFAULT_COLOR_SCHEME: ColorScheme = 'default';\n\nconst THEME_META_COLOR: Record<'light' | 'dark', Record<ColorScheme, string>> = {\n light: {\n default: '#f5f5f7',\n emerald: '#f0fdf4',\n mono: '#ffffff',\n clay: '#fffaf0',\n },\n dark: {\n default: '#1c1c1e',\n emerald: '#000000',\n mono: '#101010',\n clay: '#0a1a1a',\n },\n};\n\nfunction syncThemeColorMeta(mode: 'light' | 'dark', scheme: ColorScheme) {\n const head = document.head;\n if (!head) return;\n const selector = 'meta[name=\"theme-color\"][data-xopc-theme-color=\"true\"]';\n let meta = head.querySelector<HTMLMetaElement>(selector);\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'theme-color');\n meta.setAttribute('data-xopc-theme-color', 'true');\n head.appendChild(meta);\n }\n meta.setAttribute('content', THEME_META_COLOR[mode][scheme]);\n}\n\nfunction getSystemDark(): boolean {\n return globalThis.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false;\n}\n\nfunction resolveTheme(pref: ThemePreference): 'light' | 'dark' {\n if (pref === 'system') {\n return getSystemDark() ? 'dark' : 'light';\n }\n return pref;\n}\n\nfunction prefersReducedMotion(): boolean {\n return globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\nfunction normalizeColorScheme(value: unknown): ColorScheme {\n if (value === 'cal') return 'mono';\n return value === 'default' || value === 'emerald' || value === 'mono' || value === 'clay'\n ? value\n : DEFAULT_COLOR_SCHEME;\n}\n\n/** Apply light/dark + color scheme on `<html>`. Uses View Transitions when available for a softer cross-fade. */\nfunction applyDomTheme(mode: 'light' | 'dark', scheme: ColorScheme, useViewTransition: boolean) {\n const root = document.documentElement;\n const run = () => {\n root.classList.toggle('dark', mode === 'dark');\n root.dataset.theme = mode;\n root.dataset.colorScheme = scheme;\n syncThemeColorMeta(mode, scheme);\n };\n\n const doc = document as Document & {\n startViewTransition?: (cb: () => void) => { finished: Promise<void> };\n };\n\n if (\n useViewTransition &&\n !prefersReducedMotion() &&\n typeof doc.startViewTransition === 'function'\n ) {\n doc.startViewTransition(run);\n } else {\n run();\n }\n}\n\n/** Sync DOM from localStorage before React paint (zustand persist hydrates async). */\nexport function hydrateThemeFromStorage() {\n try {\n const raw = localStorage.getItem('xopc-web-theme');\n let pref: ThemePreference = 'system';\n let scheme: ColorScheme = DEFAULT_COLOR_SCHEME;\n if (raw) {\n const parsed = JSON.parse(raw) as {\n state?: { preference?: ThemePreference; colorScheme?: ColorScheme };\n };\n if (parsed.state?.preference) pref = parsed.state.preference;\n if (parsed.state && 'colorScheme' in parsed.state) {\n scheme = normalizeColorScheme(parsed.state.colorScheme);\n }\n }\n applyDomTheme(resolveTheme(pref), scheme, false);\n } catch {\n applyDomTheme(resolveTheme('system'), 'default', false);\n }\n}\n\ntype ThemeState = {\n preference: ThemePreference;\n colorScheme: ColorScheme;\n resolved: 'light' | 'dark';\n setPreference: (p: ThemePreference) => void;\n setColorScheme: (scheme: ColorScheme) => void;\n};\n\nexport const useThemeStore = create(\n persist<ThemeState>(\n (set, get) => ({\n preference: 'system',\n colorScheme: DEFAULT_COLOR_SCHEME,\n resolved: resolveTheme('system'),\n\n setPreference: (preference) => {\n const resolved = resolveTheme(preference);\n const { resolved: prevResolved, colorScheme } = get();\n applyDomTheme(resolved, colorScheme, resolved !== prevResolved);\n set({ preference, resolved });\n },\n\n setColorScheme: (scheme) => {\n const { resolved } = get();\n applyDomTheme(resolved, scheme, true);\n set({ colorScheme: scheme });\n },\n }),\n {\n name: 'xopc-web-theme',\n merge: (persisted, current) => {\n const p = (persisted ?? {}) as Partial<ThemeState>;\n return {\n ...current,\n ...p,\n colorScheme: normalizeColorScheme(p.colorScheme),\n };\n },\n },\n ),\n);\n\nexport function syncThemeAfterHydration() {\n const { preference, colorScheme } = useThemeStore.getState();\n const resolved = resolveTheme(preference);\n applyDomTheme(resolved, colorScheme, false);\n useThemeStore.setState({ resolved });\n}\n\nexport function subscribeSystemTheme() {\n const mq = globalThis.matchMedia?.('(prefers-color-scheme: dark)');\n if (!mq) return () => {};\n\n const handler = () => {\n const { preference, colorScheme } = useThemeStore.getState();\n if (preference !== 'system') return;\n const resolved = resolveTheme('system');\n const prevResolved = useThemeStore.getState().resolved;\n applyDomTheme(resolved, colorScheme, resolved !== prevResolved);\n useThemeStore.setState({ resolved });\n };\n\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theme-store-CWPq9gW1.js","names":["create","persist","ThemePreference","ColorScheme","DEFAULT_COLOR_SCHEME","THEME_META_COLOR","Record","light","default","emerald","mono","clay","dark","syncThemeColorMeta","mode","scheme","head","document","selector","meta","querySelector","HTMLMetaElement","createElement","setAttribute","appendChild","getSystemDark","globalThis","matchMedia","matches","resolveTheme","pref","prefersReducedMotion","normalizeColorScheme","value","applyDomTheme","useViewTransition","root","documentElement","run","classList","toggle","dataset","theme","colorScheme","doc","Document","startViewTransition","cb","finished","Promise","hydrateThemeFromStorage","raw","localStorage","getItem","parsed","JSON","parse","state","preference","ThemeState","resolved","setPreference","p","setColorScheme","useThemeStore","set","get","prevResolved","name","merge","persisted","current","Partial","syncThemeAfterHydration","getState","setState","subscribeSystemTheme","mq","handler","addEventListener","removeEventListener"],"sources":["../../../../../node_modules/.pnpm/zustand@5.0.14_@types+react@19.2.15_react@19.2.6_use-sync-external-store@1.6.0_react@19.2.6_/node_modules/zustand/esm/middleware.mjs","../../../../../web/src/stores/theme-store.ts"],"sourcesContent":["const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /.+ (.+) .+/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import { create } from 'zustand';\nimport { persist } from 'zustand/middleware';\n\nexport type ThemePreference = 'light' | 'dark' | 'system';\n\n/** Visual color scheme — orthogonal to light/dark mode. */\nexport type ColorScheme = 'default' | 'emerald' | 'mono' | 'clay';\n\nconst DEFAULT_COLOR_SCHEME: ColorScheme = 'default';\n\nconst THEME_META_COLOR: Record<'light' | 'dark', Record<ColorScheme, string>> = {\n light: {\n default: '#f5f5f7',\n emerald: '#f0fdf4',\n mono: '#ffffff',\n clay: '#fffaf0',\n },\n dark: {\n default: '#1c1c1e',\n emerald: '#000000',\n mono: '#101010',\n clay: '#0a1a1a',\n },\n};\n\nfunction syncThemeColorMeta(mode: 'light' | 'dark', scheme: ColorScheme) {\n const head = document.head;\n if (!head) return;\n const selector = 'meta[name=\"theme-color\"][data-xopc-theme-color=\"true\"]';\n let meta = head.querySelector<HTMLMetaElement>(selector);\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'theme-color');\n meta.setAttribute('data-xopc-theme-color', 'true');\n head.appendChild(meta);\n }\n meta.setAttribute('content', THEME_META_COLOR[mode][scheme]);\n}\n\nfunction getSystemDark(): boolean {\n return globalThis.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false;\n}\n\nfunction resolveTheme(pref: ThemePreference): 'light' | 'dark' {\n if (pref === 'system') {\n return getSystemDark() ? 'dark' : 'light';\n }\n return pref;\n}\n\nfunction prefersReducedMotion(): boolean {\n return globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n}\n\nfunction normalizeColorScheme(value: unknown): ColorScheme {\n if (value === 'cal') return 'mono';\n return value === 'default' || value === 'emerald' || value === 'mono' || value === 'clay'\n ? value\n : DEFAULT_COLOR_SCHEME;\n}\n\n/** Apply light/dark + color scheme on `<html>`. Uses View Transitions when available for a softer cross-fade. */\nfunction applyDomTheme(mode: 'light' | 'dark', scheme: ColorScheme, useViewTransition: boolean) {\n const root = document.documentElement;\n const run = () => {\n root.classList.toggle('dark', mode === 'dark');\n root.dataset.theme = mode;\n root.dataset.colorScheme = scheme;\n syncThemeColorMeta(mode, scheme);\n };\n\n const doc = document as Document & {\n startViewTransition?: (cb: () => void) => { finished: Promise<void> };\n };\n\n if (\n useViewTransition &&\n !prefersReducedMotion() &&\n typeof doc.startViewTransition === 'function'\n ) {\n doc.startViewTransition(run);\n } else {\n run();\n }\n}\n\n/** Sync DOM from localStorage before React paint (zustand persist hydrates async). */\nexport function hydrateThemeFromStorage() {\n try {\n const raw = localStorage.getItem('xopc-web-theme');\n let pref: ThemePreference = 'system';\n let scheme: ColorScheme = DEFAULT_COLOR_SCHEME;\n if (raw) {\n const parsed = JSON.parse(raw) as {\n state?: { preference?: ThemePreference; colorScheme?: ColorScheme };\n };\n if (parsed.state?.preference) pref = parsed.state.preference;\n if (parsed.state && 'colorScheme' in parsed.state) {\n scheme = normalizeColorScheme(parsed.state.colorScheme);\n }\n }\n applyDomTheme(resolveTheme(pref), scheme, false);\n } catch {\n applyDomTheme(resolveTheme('system'), 'default', false);\n }\n}\n\ntype ThemeState = {\n preference: ThemePreference;\n colorScheme: ColorScheme;\n resolved: 'light' | 'dark';\n setPreference: (p: ThemePreference) => void;\n setColorScheme: (scheme: ColorScheme) => void;\n};\n\nexport const useThemeStore = create(\n persist<ThemeState>(\n (set, get) => ({\n preference: 'system',\n colorScheme: DEFAULT_COLOR_SCHEME,\n resolved: resolveTheme('system'),\n\n setPreference: (preference) => {\n const resolved = resolveTheme(preference);\n const { resolved: prevResolved, colorScheme } = get();\n applyDomTheme(resolved, colorScheme, resolved !== prevResolved);\n set({ preference, resolved });\n },\n\n setColorScheme: (scheme) => {\n const { resolved } = get();\n applyDomTheme(resolved, scheme, true);\n set({ colorScheme: scheme });\n },\n }),\n {\n name: 'xopc-web-theme',\n merge: (persisted, current) => {\n const p = (persisted ?? {}) as Partial<ThemeState>;\n return {\n ...current,\n ...p,\n colorScheme: normalizeColorScheme(p.colorScheme),\n };\n },\n },\n ),\n);\n\nexport function syncThemeAfterHydration() {\n const { preference, colorScheme } = useThemeStore.getState();\n const resolved = resolveTheme(preference);\n applyDomTheme(resolved, colorScheme, false);\n useThemeStore.setState({ resolved });\n}\n\nexport function subscribeSystemTheme() {\n const mq = globalThis.matchMedia?.('(prefers-color-scheme: dark)');\n if (!mq) return () => {};\n\n const handler = () => {\n const { preference, colorScheme } = useThemeStore.getState();\n if (preference !== 'system') return;\n const resolved = resolveTheme('system');\n const prevResolved = useThemeStore.getState().resolved;\n applyDomTheme(resolved, colorScheme, resolved !== prevResolved);\n useThemeStore.setState({ resolved });\n };\n\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e}from"./button-KafIU8dx.js";import{Hn as t,Vn as n,zn as r}from"./index-
|
|
2
|
-
//# sourceMappingURL=utils-
|
|
1
|
+
import{n as e}from"./button-KafIU8dx.js";import{Hn as t,Vn as n,zn as r}from"./index-Dxy9ZCtC.js";function i(){return e(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,t,`dark:border-edge`)}function a(){return e(n,r)}function o(e){return e.split(/[,\n]/).flatMap(e=>{let t=e.trim();return t?[/^-?\d+$/.test(t)?Number(t):t]:[]})}function s(e){return e.map(String).join(`, `)}function c(e){let t=e.accounts?.default?.botToken;return typeof t==`string`?t:``}function l(e){return Object.values(e.accounts??{}).some(e=>typeof e.botToken==`string`&&e.botToken.trim().length>0)}function u(e){return Object.keys(e.accounts??{}).length>0||e.allowFrom.length>0}function d(e){return!!(e.appId?.trim()&&e.appSecret?.trim())||Object.keys(e.accounts??{}).length>0}export{u as a,c,l as i,a as n,s as o,d as r,o as s,i as t};
|
|
2
|
+
//# sourceMappingURL=utils-Cnix55r9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils-
|
|
1
|
+
{"version":3,"file":"utils-Cnix55r9.js","names":["ChannelsSettingsState","cn","nativeSelectMaxWidthClass","selectControlBaseClass","settingsInputFocusClass","channelsInputClassName","channelsSelectClassName","parseIdList","raw","split","flatMap","s","v","trim","test","Number","joinAllowFrom","ids","map","String","join","telegramDefaultBotToken","tg","t","accounts","default","botToken","isTelegramConfigured","Object","values","some","a","length","isWeixinConfigured","wx","keys","allowFrom","isFeishuConfigured","fs","Boolean","appId","appSecret"],"sources":["../../../../../web/src/features/settings/channels/utils.ts"],"sourcesContent":["import type { ChannelsSettingsState } from '@/features/settings/channels-config-api';\nimport { cn } from '@/lib/cn';\nimport { nativeSelectMaxWidthClass, selectControlBaseClass, settingsInputFocusClass } from '@/lib/form-field-width';\n\nexport function channelsInputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nexport function channelsSelectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nexport function parseIdList(raw: string): (string | number)[] {\n return raw.split(/[,\\n]/).flatMap((s) => {\n const v = s.trim();\n if (!v) return [];\n return [/^-?\\d+$/.test(v) ? Number(v) : v];\n });\n}\n\nexport function joinAllowFrom(ids: (string | number)[]): string {\n return ids.map(String).join(', ');\n}\n\nexport function telegramDefaultBotToken(tg: ChannelsSettingsState['telegram']): string {\n const t = tg.accounts?.default?.botToken;\n return typeof t === 'string' ? t : '';\n}\n\nexport function isTelegramConfigured(tg: ChannelsSettingsState['telegram']): boolean {\n return Object.values(tg.accounts ?? {}).some(\n (a) => typeof a.botToken === 'string' && a.botToken.trim().length > 0,\n );\n}\n\nexport function isWeixinConfigured(wx: ChannelsSettingsState['weixin']): boolean {\n return Object.keys(wx.accounts ?? {}).length > 0 || wx.allowFrom.length > 0;\n}\n\nexport function isFeishuConfigured(fs: ChannelsSettingsState['feishu']): boolean {\n return Boolean(fs.appId?.trim() && fs.appSecret?.trim()) || Object.keys(fs.accounts ?? {}).length > 0;\n}\n"],"mappings":"kGAIA,SAAgBK,GAAiC,CAC/C,OAAOJ,EACL,kFACA,6BACAG,EACA,kBACF,CACF,CAEA,SAAgBE,GAAkC,CAChD,OAAOL,EAAGE,EAAwBD,CAAyB,CAC7D,CAEA,SAAgBK,EAAYC,EAAkC,CAC5D,OAAOA,EAAIC,MAAM,OAAO,EAAEC,QAASC,GAAM,CACvC,IAAMC,EAAID,EAAEE,KAAK,EAEjB,OADKD,EACE,CAAC,UAAUE,KAAKF,CAAC,EAAIG,OAAOH,CAAC,EAAIA,CAAC,EAD1B,CAAA,CAEjB,CAAC,CACH,CAEA,SAAgBI,EAAcC,EAAkC,CAC9D,OAAOA,EAAIC,IAAIC,MAAM,EAAEC,KAAK,IAAI,CAClC,CAEA,SAAgBC,EAAwBC,EAA+C,CACrF,IAAMC,EAAID,EAAGE,UAAUC,SAASC,SAChC,OAAO,OAAOH,GAAM,SAAWA,EAAI,EACrC,CAEA,SAAgBI,EAAqBL,EAAgD,CACnF,OAAOM,OAAOC,OAAOP,EAAGE,UAAY,CAAC,CAAC,EAAEM,KACrCC,GAAM,OAAOA,EAAEL,UAAa,UAAYK,EAAEL,SAASb,KAAK,EAAEmB,OAAS,CACtE,CACF,CAEA,SAAgBC,EAAmBC,EAA8C,CAC/E,OAAON,OAAOO,KAAKD,EAAGV,UAAY,CAAC,CAAC,EAAEQ,OAAS,GAAKE,EAAGE,UAAUJ,OAAS,CAC5E,CAEA,SAAgBK,EAAmBC,EAA8C,CAC/E,MAAOC,GAAQD,EAAGE,OAAO3B,KAAK,GAAKyB,EAAGG,WAAW5B,KAAK,IAAMe,OAAOO,KAAKG,EAAGd,UAAY,CAAC,CAAC,EAAEQ,OAAS,CACtG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{c as i,i as a,n as o}from"./fetch-K_0JRCXU.js";import{o as s}from"./vendor-swr-BIWyz7Rc.js";import{D as c}from"./dist-C57OMHW8.js";import{n as l,t as u}from"./button-KafIU8dx.js";import{Cr as d,D as f,Fi as p,Gr as ee,Hn as m,Lt as h,Nt as g,O as _,Oi as v,Pi as y,_i as te,cn as b,di as ne,fi as x,sn as S,ui as re,x as C}from"./index-ChiUhJAs.js";var w=`/api/image/providers`;async function T(){return(await o(a(`/api/image/providers`)))?.payload?.providers??[]}var E=e(t(),1),ie=n();function D(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function O(e){return e?.apiKey?`••••••••••••`:``}function k(e,t){let n=(()=>{if(!e||typeof e!=`object`||!(`providersConfig`in e))return;let t=e.providersConfig;if(!(!t||typeof t!=`object`||Array.isArray(t)))return t})(),r={};for(let e of t){let t=n?.[e];r[e]={apiKey:O(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function A(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function j(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(C(n)&&C(r)))return n||(r?null:void 0)}function M(e,t,n){let r={};for(let i of e){let e=t[i]??D(),a=n[i]??D();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=j(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=A(e,a,`region`);c!==void 0&&(o.region=c);let l=A(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=A(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function N(e){let t=await o(a(`/api/image/providers/${encodeURIComponent(e)}/reveal-api-key`),{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok||!t.payload)throw Error(t.error?.message??`Reveal failed`);return t.payload}async function P(e){Object.keys(e).length!==0&&(await o(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await S())}var F={showKey:!1,revealed:void 0,revealLoading:!1,revealErr:null,copied:!1};function I(e,t){switch(t.type){case`reset-reveal`:return{...e,showKey:!1,revealed:void 0,revealErr:null};case`toggle-show`:return{...e,showKey:!e.showKey};case`reveal-start`:return{...e,revealLoading:!0,revealErr:null};case`reveal-success`:return{...e,revealed:t.value,revealLoading:!1,showKey:!0,revealErr:null};case`reveal-error`:return{...e,revealed:null,revealLoading:!1,revealErr:t.message};case`copied`:return{...e,copied:!0};case`clear-copied`:return{...e,copied:!1};case`invalidate-reveal`:return{...e,revealed:void 0,showKey:!1}}}function ae(e){let{value:t,reveal:n,loadFailedLabel:r}=e,[i,a]=(0,E.useReducer)(I,F),o=C(t),s=(0,E.useRef)(n);s.current=n;let c=(0,E.useRef)({masked:o,value:t});!o&&(c.current.masked||c.current.value!==t)&&a({type:`reset-reveal`}),c.current={masked:o,value:t};let l=o&&i.showKey&&typeof i.revealed==`string`?i.revealed:t,u=!o||o&&i.showKey&&typeof i.revealed==`string`?`text`:`password`,d=!o&&t.trim().length>0&&!C(t)||!!i.showKey&&typeof i.revealed==`string`&&i.revealed.length>0,f=(0,E.useCallback)(async()=>{let e=!o&&t.trim()&&!C(t)?t.trim():typeof i.revealed==`string`&&i.revealed.length>0?i.revealed:``;e&&await h(e)&&(a({type:`copied`}),window.setTimeout(()=>a({type:`clear-copied`}),2e3))},[o,i.revealed,t]),p=(0,E.useCallback)(async()=>{if(!o){a({type:`toggle-show`});return}if(i.revealed!==void 0){a({type:`toggle-show`});return}a({type:`reveal-start`});try{a({type:`reveal-success`,value:await s.current()})}catch(e){a({type:`reveal-error`,message:e instanceof Error?e.message:r})}},[r,o,i.revealed]),ee=(0,E.useCallback)((e,t)=>{o&&typeof i.revealed==`string`&&i.showKey&&e!==i.revealed&&a({type:`invalidate-reveal`}),t(e)},[o,i.revealed,i.showKey]);return{masked:o,showKey:i.showKey,revealed:i.revealed,revealLoading:i.revealLoading,revealErr:i.revealErr,copied:i.copied,inputValue:l,inputType:u,copyEnabled:d,copyKey:f,toggleEye:p,onInputChange:ee}}var L=r();function R(e){let t=(0,ie.c)(64),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>N(n).then(z),t[0]=n,t[1]=c);let u=c,d;t[2]!==a.loadFailed||t[3]!==u||t[4]!==r?(d={value:r,reveal:u,loadFailedLabel:a.loadFailed},t[2]=a.loadFailed,t[3]=u,t[4]=r,t[5]=d):d=t[5];let{masked:f,showKey:p,revealed:h,revealLoading:y,revealErr:b,copied:S,inputValue:C,inputType:w,copyEnabled:T,copyKey:E,toggleEye:D,onInputChange:O}=ae(d),k=`img-cred-key-${n}`,A;t[6]!==a.apiKeyLabel||t[7]!==k?(A=(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:k,children:a.apiKeyLabel}),t[6]=a.apiKeyLabel,t[7]=k,t[8]=A):A=t[8];let j;t[9]!==s||t[10]!==o?(j=o.length>0?(0,L.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,L.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[_(e.kind,s),(0,L.jsx)(x,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[9]=s,t[10]=o,t[11]=j):j=t[11];let M;t[12]!==a.maskedHelp||t[13]!==f?(M=f?(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:a.maskedHelp}):null,t[12]=a.maskedHelp,t[13]=f,t[14]=M):M=t[14];let P=`img-cred-key-${n}`,F;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(F=l(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-3 pr-24 font-mono text-sm text-fg`,`placeholder:text-fg-subtle`,m),t[15]=F):F=t[15];let I=f?`••••••••`:a.optionalPlaceholder,R;t[16]!==i||t[17]!==O?(R=e=>O(e.target.value,i),t[16]=i,t[17]=O,t[18]=R):R=t[18];let B;t[19]!==w||t[20]!==C||t[21]!==R||t[22]!==P||t[23]!==I?(B=(0,L.jsx)(`input`,{id:P,type:w,autoComplete:`off`,spellCheck:!1,className:F,value:C,placeholder:I,onChange:R}),t[19]=w,t[20]=C,t[21]=R,t[22]=P,t[23]=I,t[24]=B):B=t[24];let V;t[25]!==S||t[26]!==T||t[27]!==E||t[28]!==a.copied||t[29]!==a.copy?(V=T?(0,L.jsx)(`button`,{type:`button`,className:l(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,g.transition,g.press,g.focusRingPanel),title:S?a.copied:a.copy,"aria-label":S?a.copied:a.copy,onClick:()=>void E(),children:S?(0,L.jsx)(v,{className:`size-4`}):(0,L.jsx)(te,{className:`size-4`})}):null,t[25]=S,t[26]=T,t[27]=E,t[28]=a.copied,t[29]=a.copy,t[30]=V):V=t[30];let H;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(H=l(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg disabled:opacity-40`,g.transition,g.press,g.focusRingPanel),t[31]=H):H=t[31];let U=p?a.hide:a.show,W=p?a.hide:a.show,G;t[32]===D?G=t[33]:(G=()=>void D(),t[32]=D,t[33]=G);let K;t[34]!==y||t[35]!==p?(K=y?(0,L.jsx)(ee,{className:`size-4 animate-spin`,"aria-hidden":!0}):p?(0,L.jsx)(ne,{className:`size-4`,"aria-hidden":!0}):(0,L.jsx)(re,{className:`size-4`,"aria-hidden":!0}),t[34]=y,t[35]=p,t[36]=K):K=t[36];let q;t[37]!==y||t[38]!==U||t[39]!==W||t[40]!==G||t[41]!==K?(q=(0,L.jsx)(`button`,{type:`button`,className:H,title:U,"aria-label":W,disabled:y,onClick:G,children:K}),t[37]=y,t[38]=U,t[39]=W,t[40]=G,t[41]=K,t[42]=q):q=t[42];let J;t[43]!==V||t[44]!==q?(J=(0,L.jsxs)(`div`,{className:`absolute right-1 top-1/2 flex -translate-y-1/2 gap-0.5`,children:[V,q]}),t[43]=V,t[44]=q,t[45]=J):J=t[45];let Y;t[46]!==B||t[47]!==J?(Y=(0,L.jsxs)(`div`,{className:`relative min-w-0`,children:[B,J]}),t[46]=B,t[47]=J,t[48]=Y):Y=t[48];let X;t[49]!==a.notInConfigFile||t[50]!==f||t[51]!==b||t[52]!==h||t[53]!==p?(X=f&&p&&h===null&&!b?(0,L.jsx)(`p`,{className:`text-xs text-amber-700 dark:text-amber-400/90`,children:a.notInConfigFile}):null,t[49]=a.notInConfigFile,t[50]=f,t[51]=b,t[52]=h,t[53]=p,t[54]=X):X=t[54];let oe;t[55]===b?oe=t[56]:(oe=b?(0,L.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:b}):null,t[55]=b,t[56]=oe);let se;return t[57]!==Y||t[58]!==X||t[59]!==oe||t[60]!==A||t[61]!==j||t[62]!==M?(se=(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[A,j,M,Y,X,oe]}),t[57]=Y,t[58]=X,t[59]=oe,t[60]=A,t[61]=j,t[62]=M,t[63]=se):se=t[63],se}function z(e){return e.apiKey??null}function B(){return l(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,m)}function V(){return l(B(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var H=`__custom__`;function U(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:H}function W(e,t){let n=e.baseUrl.trim().replace(/\/+$/,``);if(!n)return``;let r=t.map(e=>e.value.replace(/\/+$/,``)).indexOf(n);return r>=0?t[r].value:H}function G(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function K(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function q(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function J(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function Y(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function X(e){let t=(0,ie.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:p,credNoopFlash:m,updateCredRow:h,onDiscardCredentials:g,onSaveCredentials:_,extensionIds:v,showExtensionLinks:te,showImageModelsLink:b,hideActions:ne,language:S,apiKeyLinkLabels:re,messages:C}=e,w=ne===void 0?!1:ne,T;t[0]===n?T=t[1]:(T=n.some(ue),t[0]=n,t[1]=T);let O=T,k;t[2]===n?k=t[3]:(k=n.some(le),t[2]=n,t[3]=k);let A=k,[j,M]=(0,E.useState)(ce),[N,P]=(0,E.useState)(se),F;if(t[4]!==i||t[5]!==r||t[6]!==n){F=new Set;for(let e of n)J(r[e.id]??D(),i[e.id]??D())&&F.add(e.id);t[4]=i,t[5]=r,t[6]=n,t[7]=F}else F=t[7];let I=F,ae;t[8]!==I||t[9]!==N||t[10]!==j?(ae=e=>N.has(e)?!1:j.has(e)?!0:I.has(e),t[8]=I,t[9]=N,t[10]=j,t[11]=ae):ae=t[11];let z=ae,X;t[12]===z?X=t[13]:(X=e=>{if(z(e)){P(t=>new Set(t).add(e)),M(t=>{let n=new Set(t);return n.delete(e),n});return}P(t=>{let n=new Set(t);return n.delete(e),n}),M(t=>new Set(t).add(e))},t[12]=z,t[13]=X);let de=X;if(n.length===0)return null;let fe;t[14]===C.credentialsIntro?fe=t[15]:(fe=(0,L.jsx)(`p`,{children:C.credentialsIntro}),t[14]=C.credentialsIntro,t[15]=fe);let pe;t[16]!==O||t[17]!==C.regionHint?(pe=O?(0,L.jsx)(`p`,{className:`text-fg-subtle`,children:C.regionHint}):null,t[16]=O,t[17]=C.regionHint,t[18]=pe):pe=t[18];let Z;t[19]!==A||t[20]!==C.endpointPresetsHint?(Z=A?(0,L.jsx)(`p`,{className:`text-fg-subtle`,children:C.endpointPresetsHint}):null,t[19]=A,t[20]=C.endpointPresetsHint,t[21]=Z):Z=t[21];let me;t[22]!==b||t[23]!==C.imageModelsLinkTitle||t[24]!==C.openImageModelsPage?(me=b?(0,L.jsx)(`p`,{children:(0,L.jsx)(c,{to:`/settings/image-models`,className:`font-medium text-accent hover:underline`,title:C.imageModelsLinkTitle,children:C.openImageModelsPage})}):null,t[22]=b,t[23]=C.imageModelsLinkTitle,t[24]=C.openImageModelsPage,t[25]=me):me=t[25];let he;t[26]!==fe||t[27]!==pe||t[28]!==Z||t[29]!==me?(he=(0,L.jsxs)(`div`,{className:`flex flex-col gap-1 text-xs leading-relaxed text-fg-muted`,children:[fe,pe,Z,me]}),t[26]=fe,t[27]=pe,t[28]=Z,t[29]=me,t[30]=he):he=t[30];let Q;t[31]===s?Q=t[32]:(Q=s?(0,L.jsx)(`div`,{className:`rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:s}):null,t[31]=s,t[32]=Q);let ge;t[33]!==a||t[34]!==m||t[35]!==p||t[36]!==o||t[37]!==w||t[38]!==g||t[39]!==_||t[40]!==C.credentialsNothingToSave||t[41]!==C.credentialsSaved||t[42]!==C.discardCredentials||t[43]!==C.saveCredentials||t[44]!==C.savingCredentials?(ge=w?null:(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[p?(0,L.jsx)(`span`,{className:`text-sm text-fg-muted`,children:C.credentialsSaved}):null,m?(0,L.jsx)(`span`,{className:`text-sm text-fg-muted`,children:C.credentialsNothingToSave}):null,(0,L.jsx)(u,{type:`button`,variant:`secondary`,onClick:g,disabled:!a||o,children:C.discardCredentials}),(0,L.jsx)(u,{type:`button`,variant:`primary`,onClick:_,disabled:!a||o,children:o?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ee,{className:`size-3.5 animate-spin`}),(0,L.jsx)(`span`,{className:`ml-1.5`,children:C.savingCredentials})]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(d,{className:`size-3.5`}),(0,L.jsx)(`span`,{className:`ml-1.5`,children:C.saveCredentials})]})})]}),t[33]=a,t[34]=m,t[35]=p,t[36]=o,t[37]=w,t[38]=g,t[39]=_,t[40]=C.credentialsNothingToSave,t[41]=C.credentialsSaved,t[42]=C.discardCredentials,t[43]=C.saveCredentials,t[44]=C.savingCredentials,t[45]=ge):ge=t[45];let $;if(t[46]!==re||t[47]!==i||t[48]!==r||t[49]!==v||t[50]!==z||t[51]!==S||t[52]!==te||t[53]!==n||t[54]!==C||t[55]!==de||t[56]!==h){let e;t[58]!==re||t[59]!==i||t[60]!==r||t[61]!==v||t[62]!==z||t[63]!==S||t[64]!==te||t[65]!==C||t[66]!==de||t[67]!==h?(e=e=>{let t=r[e.id]??D(),n=e.ui,a=te&&v.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=J(t,i[e.id]??D()),s=z(e.id),u=e.label??e.id,d=Y(C,e.models.length);return(0,L.jsxs)(`section`,{className:l(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex w-full items-start justify-between gap-3 px-4 py-3 text-left hover:bg-surface-hover/70`,"aria-expanded":s,"aria-controls":`img-provider-credentials-${e.id}`,onClick:()=>de(e.id),children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,L.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:u}),(0,L.jsx)(`span`,{className:`rounded-full bg-surface-subtle px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:e.id}),o?(0,L.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:C.unsavedChanges}):null,e.configured?(0,L.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:C.configured}):(0,L.jsx)(`span`,{className:`rounded-full border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[11px] font-medium text-amber-700 dark:text-amber-300`,children:C.missingKey})]}),(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,L.jsx)(`span`,{children:d}),e.defaultModel?(0,L.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,L.jsxs)(`span`,{className:`text-fg-muted`,children:[C.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,L.jsx)(y,{className:l(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,L.jsx)(`span`,{className:`sr-only`,children:s?C.collapseProvider:C.expandProvider})]}),s?(0,L.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,L.jsxs)(c,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:C.extensionSettingsLinkTitle,children:[(0,L.jsx)(x,{className:`size-3`}),C.openExtensionSettings]}):null,e.models.length>0?(0,L.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,L.jsxs)(`span`,{className:`text-fg-muted`,children:[C.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,L.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,L.jsx)(R,{providerId:e.id,value:t.apiKey,onChange:t=>h(e.id,{apiKey:t}),apiKeyLinks:f(e.id,S),apiKeyLinkLabels:re,labels:{apiKeyLabel:C.apiKeyLabel,optionalPlaceholder:C.optionalPlaceholder,maskedHelp:C.apiKeyMaskedHelp,copy:C.apiKeyCopy,copied:C.apiKeyCopied,show:C.apiKeyShow,hide:C.apiKeyHide,notInConfigFile:C.apiKeyNotInConfigFile,loadFailed:C.apiKeyRevealFailed}}),n?.regions?.length?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:C.regionLabel}),(0,L.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:V(),value:U(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){h(e.id,{region:``,imageBaseUrl:``});return}if(r===H){h(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&h(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,L.jsx)(`option`,{value:``,children:C.regionPresetDefault}),n.regions.map(e=>(0,L.jsx)(`option`,{value:e.value,children:G(C,e.value,e.label)},e.value)),(0,L.jsx)(`option`,{value:H,children:C.regionPresetCustom})]}),U(t,n.regions)===H?(0,L.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,L.jsx)(`input`,{type:`text`,className:B(),value:t.region,placeholder:`region`,onChange:t=>h(e.id,{region:t.target.value})}),(0,L.jsx)(`input`,{type:`url`,className:B(),value:t.imageBaseUrl,placeholder:C.imageBaseUrlLabel,onChange:t=>h(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:K(C,n.baseUrlPresetKind)}),q(C,n.baseUrlPresetKind)?(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:q(C,n.baseUrlPresetKind)}):null,(0,L.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:V(),value:W(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){h(e.id,{baseUrl:``});return}if(n===H){h(e.id,{baseUrl:``});return}h(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,L.jsx)(`option`,{value:``,children:C.baseUrlPresetDefault}),n.baseUrlPresets.map(oe),(0,L.jsx)(`option`,{value:H,children:C.baseUrlPresetCustom})]}),W(t,n.baseUrlPresets)===H?(0,L.jsx)(`input`,{type:`url`,className:l(B(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>h(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&U(t,n.regions)!==H?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:C.imageBaseUrlLabel}),(0,L.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:l(B(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:C.imageBaseUrlPresetHint}),(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:C.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=re,t[59]=i,t[60]=r,t[61]=v,t[62]=z,t[63]=S,t[64]=te,t[65]=C,t[66]=de,t[67]=h,t[68]=e):e=t[68],$=n.map(e),t[46]=re,t[47]=i,t[48]=r,t[49]=v,t[50]=z,t[51]=S,t[52]=te,t[53]=n,t[54]=C,t[55]=de,t[56]=h,t[57]=$}else $=t[57];let _e;t[69]===$?_e=t[70]:(_e=(0,L.jsx)(`div`,{className:`flex flex-col gap-4`,children:$}),t[69]=$,t[70]=_e);let ve;return t[71]!==he||t[72]!==Q||t[73]!==ge||t[74]!==_e?(ve=(0,L.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[he,Q,ge,_e]}),t[71]=he,t[72]=Q,t[73]=ge,t[74]=_e,t[75]=ve):ve=t[75],ve}function oe(e){return(0,L.jsx)(`option`,{value:e.value,children:e.label},e.value)}function se(){return new Set}function ce(){return new Set}function le(e){return(e.ui?.baseUrlPresets?.length??0)>0}function ue(e){return(e.ui?.regions?.length??0)>0}function de(e){let t=b(i(e=>!!e.token)),n=t.data,r=(0,E.useMemo)(()=>e.map(e=>e.id),[e]),o=(0,E.useRef)(!1),[c,l]=(0,E.useState)(null),[u,d]=(0,E.useState)(!1),[f,p]=(0,E.useState)(null),[ee,m]=(0,E.useState)(!1),[h,g]=(0,E.useState)(!1),_=(0,E.useMemo)(()=>k(n?.payload?.config,r),[n?.payload?.config,r]),v=c??_,y=_;return{gwSwr:t,credDraft:v,credBaseline:y,credDirty:(0,E.useMemo)(()=>JSON.stringify(v)!==JSON.stringify(y),[v,y]),credSaving:u,credError:f,credSavedFlash:ee,credNoopFlash:h,updateCredRow:(0,E.useCallback)((e,t)=>{o.current=!0,l(n=>{let r=n??_,i=r[e]??D();return{...r,[e]:{...i,...t}}})},[_]),onDiscardCredentials:(0,E.useCallback)(()=>{o.current=!1,l(null),p(null),m(!1),g(!1)},[]),saveCredentials:(0,E.useCallback)(async e=>{let n=M(r,v,y);if(Object.keys(n).length===0){g(!0),window.setTimeout(()=>g(!1),2200);return}d(!0),p(null),m(!1);try{await P(n),await t.mutate?.(),s(a(w)),o.current=!1,l(null),m(!0),window.setTimeout(()=>m(!1),2e3)}catch(t){p(t instanceof Error?t.message:e)}finally{d(!1)}},[r,v,y,t])}}function fe(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function pe(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:512,timeoutMs:6e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`en-US-MichelleNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`},"tts-local-cli":{command:``,outputFormat:`wav`}}}function Z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function me(e){return typeof e==`string`&&e.trim().length>0?e.trim():`alibaba`}function he(e){let t=fe();if(!Z(e))return t;let n=me(e.provider),r=Z(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,i=Z(e.openai)?{...t.openai,...e.openai}:t.openai,a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(Z(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>typeof e==`string`&&e.trim().length>0):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}let o=Z(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,Z(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,...o?{providers:o}:{},fallback:a}}function Q(e){return typeof e==`string`&&e.trim().length>0?e.trim():`openai`}function ge(e){let t=pe();if(!Z(e))return t;let n=Q(e.provider),r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`,i=e[`tts-local-cli`];return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,alibaba:Z(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,openai:Z(e.openai)?{...t.openai,...e.openai}:t.openai,edge:Z(e.edge)?{...t.edge,...e.edge}:t.edge,minimax:Z(e.minimax)?{...t.minimax,...e.minimax}:t.minimax,"tts-local-cli":Z(i)?{...t[`tts-local-cli`],...i}:t[`tts-local-cli`]}}function $(e){let t=Z(e)?e:{};return{stt:he(t.stt),tts:ge(t.tts)}}async function _e(){return $((await o(a(`/api/config`))).payload?.config??{})}async function ve(e){await o(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:e.stt,tts:e.tts})}),S()}async function ye(){let e=await o(a(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}async function be(){let e=await o(a(`/api/voice/providers`));if(!e.payload?.providers)throw Error(`Missing voice providers payload`);return e.payload}async function xe(){let e=await o(a(`/api/voice/stt-providers`));if(!e.payload?.providers)throw Error(`Missing STT providers payload`);return e.payload}async function Se(e){let t=await o(a(`/api/voice/reveal-api-key`),{method:`POST`,body:JSON.stringify(e)});if(!t.payload)throw Error(`Missing reveal payload`);return t.payload}function Ce(e){let t=(0,ie.c)(56),{kind:n,providerId:r,fieldId:i,value:a,onChange:o,labels:s,placeholder:c,className:d}=e,f=c===void 0?`sk-...`:c,h;t[0]!==n||t[1]!==r?(h=()=>Se({kind:n,provider:r}).then(we),t[0]=n,t[1]=r,t[2]=h):h=t[2];let g=h,_;t[3]!==s.loadFailed||t[4]!==g||t[5]!==a?(_={value:a,reveal:g,loadFailedLabel:s.loadFailed},t[3]=s.loadFailed,t[4]=g,t[5]=a,t[6]=_):_=t[6];let{masked:v,showKey:y,revealed:b,revealLoading:x,revealErr:S,copied:C,inputValue:w,inputType:T,copyEnabled:E,copyKey:D,toggleEye:O,onInputChange:k}=ae(_),A;t[7]===d?A=t[8]:(A=l(`flex min-w-0 flex-col gap-1.5`,d),t[7]=d,t[8]=A);let j;t[9]!==s.maskedHelp||t[10]!==v?(j=v?(0,L.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:s.maskedHelp}):null,t[9]=s.maskedHelp,t[10]=v,t[11]=j):j=t[11];let M;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(M=l(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-fg`,`placeholder:text-fg-subtle`,m,`dark:border-edge`,`min-w-0 flex-1 font-mono text-xs`),t[12]=M):M=t[12];let N=v?`••••••••`:f,P;t[13]!==o||t[14]!==k?(P=e=>k(e.target.value,o),t[13]=o,t[14]=k,t[15]=P):P=t[15];let F;t[16]!==i||t[17]!==T||t[18]!==w||t[19]!==N||t[20]!==P?(F=(0,L.jsx)(`input`,{id:i,type:T,autoComplete:`off`,spellCheck:!1,className:M,value:w,placeholder:N,onChange:P}),t[16]=i,t[17]=T,t[18]=w,t[19]=N,t[20]=P,t[21]=F):F=t[21];let I;t[22]!==C||t[23]!==E||t[24]!==D||t[25]!==s.copied||t[26]!==s.copy?(I=E?(0,L.jsxs)(u,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>void D(),children:[C?(0,L.jsx)(p,{className:`size-3.5`}):(0,L.jsx)(te,{className:`size-3.5`}),C?s.copied:s.copy]}):null,t[22]=C,t[23]=E,t[24]=D,t[25]=s.copied,t[26]=s.copy,t[27]=I):I=t[27];let R;t[28]===O?R=t[29]:(R=()=>void O(),t[28]=O,t[29]=R);let z;t[30]!==x||t[31]!==y?(z=x?(0,L.jsx)(ee,{className:`size-3.5 animate-spin`,"aria-hidden":!0}):y?(0,L.jsx)(ne,{className:`size-3.5`}):(0,L.jsx)(re,{className:`size-3.5`}),t[30]=x,t[31]=y,t[32]=z):z=t[32];let B=y?s.hide:s.show,V;t[33]!==x||t[34]!==R||t[35]!==z||t[36]!==B?(V=(0,L.jsxs)(u,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,disabled:x,onClick:R,children:[z,B]}),t[33]=x,t[34]=R,t[35]=z,t[36]=B,t[37]=V):V=t[37];let H;t[38]!==I||t[39]!==V||t[40]!==F?(H=(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[F,I,V]}),t[38]=I,t[39]=V,t[40]=F,t[41]=H):H=t[41];let U;t[42]!==s.notInConfigFile||t[43]!==v||t[44]!==S||t[45]!==b||t[46]!==y?(U=v&&y&&b===null&&!S?(0,L.jsx)(`p`,{className:`text-xs text-amber-700 dark:text-amber-400/90`,children:s.notInConfigFile}):null,t[42]=s.notInConfigFile,t[43]=v,t[44]=S,t[45]=b,t[46]=y,t[47]=U):U=t[47];let W;t[48]===S?W=t[49]:(W=S?(0,L.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:S}):null,t[48]=S,t[49]=W);let G;return t[50]!==H||t[51]!==U||t[52]!==W||t[53]!==A||t[54]!==j?(G=(0,L.jsxs)(`div`,{className:A,children:[j,H,U,W]}),t[50]=H,t[51]=U,t[52]=W,t[53]=A,t[54]=j,t[55]=G):G=t[55],G}function we(e){return e.apiKey??null}export{xe as a,de as c,w as d,_e as i,X as l,ye as n,$ as o,be as r,ve as s,Ce as t,T as u};
|
|
2
|
-
//# sourceMappingURL=voice-api-key-field-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,n,t as r}from"./vendor-react-BOUWij0V.js";import{c as i,i as a,n as o}from"./fetch-EGO9T3MN.js";import{o as s}from"./vendor-swr-BIWyz7Rc.js";import{D as c}from"./dist-C57OMHW8.js";import{n as l,t as u}from"./button-KafIU8dx.js";import{Cr as d,D as f,Fi as p,Gr as ee,Hn as m,Lt as h,Nt as g,O as _,Oi as v,Pi as y,_i as te,cn as b,di as ne,fi as x,sn as S,ui as re,x as C}from"./index-Dxy9ZCtC.js";var w=`/api/image/providers`;async function T(){return(await o(a(`/api/image/providers`)))?.payload?.providers??[]}var E=e(t(),1),ie=n();function D(){return{apiKey:``,region:``,baseUrl:``,imageBaseUrl:``}}function O(e){return e?.apiKey?`••••••••••••`:``}function k(e,t){let n=(()=>{if(!e||typeof e!=`object`||!(`providersConfig`in e))return;let t=e.providersConfig;if(!(!t||typeof t!=`object`||Array.isArray(t)))return t})(),r={};for(let e of t){let t=n?.[e];r[e]={apiKey:O(t),region:t?.region??``,baseUrl:t?.baseUrl??``,imageBaseUrl:t?.imageBaseUrl??``}}return r}function A(e,t,n){let r=e[n].trim();if(r!==t[n].trim())return r||null}function j(e,t){let n=e.trim(),r=t.trim();if(n!==r&&!(C(n)&&C(r)))return n||(r?null:void 0)}function M(e,t,n){let r={};for(let i of e){let e=t[i]??D(),a=n[i]??D();if(JSON.stringify(e)===JSON.stringify(a))continue;let o={},s=j(e.apiKey,a.apiKey);s!==void 0&&(o.apiKey=s);let c=A(e,a,`region`);c!==void 0&&(o.region=c);let l=A(e,a,`baseUrl`);l!==void 0&&(o.baseUrl=l);let u=A(e,a,`imageBaseUrl`);u!==void 0&&(o.imageBaseUrl=u),Object.keys(o).length>0&&(r[i]=o)}return r}async function N(e){let t=await o(a(`/api/image/providers/${encodeURIComponent(e)}/reveal-api-key`),{method:`POST`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok||!t.payload)throw Error(t.error?.message??`Reveal failed`);return t.payload}async function P(e){Object.keys(e).length!==0&&(await o(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({providersConfig:e})}),await S())}var F={showKey:!1,revealed:void 0,revealLoading:!1,revealErr:null,copied:!1};function I(e,t){switch(t.type){case`reset-reveal`:return{...e,showKey:!1,revealed:void 0,revealErr:null};case`toggle-show`:return{...e,showKey:!e.showKey};case`reveal-start`:return{...e,revealLoading:!0,revealErr:null};case`reveal-success`:return{...e,revealed:t.value,revealLoading:!1,showKey:!0,revealErr:null};case`reveal-error`:return{...e,revealed:null,revealLoading:!1,revealErr:t.message};case`copied`:return{...e,copied:!0};case`clear-copied`:return{...e,copied:!1};case`invalidate-reveal`:return{...e,revealed:void 0,showKey:!1}}}function ae(e){let{value:t,reveal:n,loadFailedLabel:r}=e,[i,a]=(0,E.useReducer)(I,F),o=C(t),s=(0,E.useRef)(n);s.current=n;let c=(0,E.useRef)({masked:o,value:t});!o&&(c.current.masked||c.current.value!==t)&&a({type:`reset-reveal`}),c.current={masked:o,value:t};let l=o&&i.showKey&&typeof i.revealed==`string`?i.revealed:t,u=!o||o&&i.showKey&&typeof i.revealed==`string`?`text`:`password`,d=!o&&t.trim().length>0&&!C(t)||!!i.showKey&&typeof i.revealed==`string`&&i.revealed.length>0,f=(0,E.useCallback)(async()=>{let e=!o&&t.trim()&&!C(t)?t.trim():typeof i.revealed==`string`&&i.revealed.length>0?i.revealed:``;e&&await h(e)&&(a({type:`copied`}),window.setTimeout(()=>a({type:`clear-copied`}),2e3))},[o,i.revealed,t]),p=(0,E.useCallback)(async()=>{if(!o){a({type:`toggle-show`});return}if(i.revealed!==void 0){a({type:`toggle-show`});return}a({type:`reveal-start`});try{a({type:`reveal-success`,value:await s.current()})}catch(e){a({type:`reveal-error`,message:e instanceof Error?e.message:r})}},[r,o,i.revealed]),ee=(0,E.useCallback)((e,t)=>{o&&typeof i.revealed==`string`&&i.showKey&&e!==i.revealed&&a({type:`invalidate-reveal`}),t(e)},[o,i.revealed,i.showKey]);return{masked:o,showKey:i.showKey,revealed:i.revealed,revealLoading:i.revealLoading,revealErr:i.revealErr,copied:i.copied,inputValue:l,inputType:u,copyEnabled:d,copyKey:f,toggleEye:p,onInputChange:ee}}var L=r();function R(e){let t=(0,ie.c)(64),{providerId:n,value:r,onChange:i,labels:a,apiKeyLinks:o,apiKeyLinkLabels:s}=e,c;t[0]===n?c=t[1]:(c=()=>N(n).then(z),t[0]=n,t[1]=c);let u=c,d;t[2]!==a.loadFailed||t[3]!==u||t[4]!==r?(d={value:r,reveal:u,loadFailedLabel:a.loadFailed},t[2]=a.loadFailed,t[3]=u,t[4]=r,t[5]=d):d=t[5];let{masked:f,showKey:p,revealed:h,revealLoading:y,revealErr:b,copied:S,inputValue:C,inputType:w,copyEnabled:T,copyKey:E,toggleEye:D,onInputChange:O}=ae(d),k=`img-cred-key-${n}`,A;t[6]!==a.apiKeyLabel||t[7]!==k?(A=(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:k,children:a.apiKeyLabel}),t[6]=a.apiKeyLabel,t[7]=k,t[8]=A):A=t[8];let j;t[9]!==s||t[10]!==o?(j=o.length>0?(0,L.jsx)(`div`,{className:`flex flex-col gap-1`,children:o.map(e=>(0,L.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[_(e.kind,s),(0,L.jsx)(x,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null,t[9]=s,t[10]=o,t[11]=j):j=t[11];let M;t[12]!==a.maskedHelp||t[13]!==f?(M=f?(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:a.maskedHelp}):null,t[12]=a.maskedHelp,t[13]=f,t[14]=M):M=t[14];let P=`img-cred-key-${n}`,F;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(F=l(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-3 pr-24 font-mono text-sm text-fg`,`placeholder:text-fg-subtle`,m),t[15]=F):F=t[15];let I=f?`••••••••`:a.optionalPlaceholder,R;t[16]!==i||t[17]!==O?(R=e=>O(e.target.value,i),t[16]=i,t[17]=O,t[18]=R):R=t[18];let B;t[19]!==w||t[20]!==C||t[21]!==R||t[22]!==P||t[23]!==I?(B=(0,L.jsx)(`input`,{id:P,type:w,autoComplete:`off`,spellCheck:!1,className:F,value:C,placeholder:I,onChange:R}),t[19]=w,t[20]=C,t[21]=R,t[22]=P,t[23]=I,t[24]=B):B=t[24];let V;t[25]!==S||t[26]!==T||t[27]!==E||t[28]!==a.copied||t[29]!==a.copy?(V=T?(0,L.jsx)(`button`,{type:`button`,className:l(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,g.transition,g.press,g.focusRingPanel),title:S?a.copied:a.copy,"aria-label":S?a.copied:a.copy,onClick:()=>void E(),children:S?(0,L.jsx)(v,{className:`size-4`}):(0,L.jsx)(te,{className:`size-4`})}):null,t[25]=S,t[26]=T,t[27]=E,t[28]=a.copied,t[29]=a.copy,t[30]=V):V=t[30];let H;t[31]===Symbol.for(`react.memo_cache_sentinel`)?(H=l(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg disabled:opacity-40`,g.transition,g.press,g.focusRingPanel),t[31]=H):H=t[31];let U=p?a.hide:a.show,W=p?a.hide:a.show,G;t[32]===D?G=t[33]:(G=()=>void D(),t[32]=D,t[33]=G);let K;t[34]!==y||t[35]!==p?(K=y?(0,L.jsx)(ee,{className:`size-4 animate-spin`,"aria-hidden":!0}):p?(0,L.jsx)(ne,{className:`size-4`,"aria-hidden":!0}):(0,L.jsx)(re,{className:`size-4`,"aria-hidden":!0}),t[34]=y,t[35]=p,t[36]=K):K=t[36];let q;t[37]!==y||t[38]!==U||t[39]!==W||t[40]!==G||t[41]!==K?(q=(0,L.jsx)(`button`,{type:`button`,className:H,title:U,"aria-label":W,disabled:y,onClick:G,children:K}),t[37]=y,t[38]=U,t[39]=W,t[40]=G,t[41]=K,t[42]=q):q=t[42];let J;t[43]!==V||t[44]!==q?(J=(0,L.jsxs)(`div`,{className:`absolute right-1 top-1/2 flex -translate-y-1/2 gap-0.5`,children:[V,q]}),t[43]=V,t[44]=q,t[45]=J):J=t[45];let Y;t[46]!==B||t[47]!==J?(Y=(0,L.jsxs)(`div`,{className:`relative min-w-0`,children:[B,J]}),t[46]=B,t[47]=J,t[48]=Y):Y=t[48];let X;t[49]!==a.notInConfigFile||t[50]!==f||t[51]!==b||t[52]!==h||t[53]!==p?(X=f&&p&&h===null&&!b?(0,L.jsx)(`p`,{className:`text-xs text-amber-700 dark:text-amber-400/90`,children:a.notInConfigFile}):null,t[49]=a.notInConfigFile,t[50]=f,t[51]=b,t[52]=h,t[53]=p,t[54]=X):X=t[54];let oe;t[55]===b?oe=t[56]:(oe=b?(0,L.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:b}):null,t[55]=b,t[56]=oe);let se;return t[57]!==Y||t[58]!==X||t[59]!==oe||t[60]!==A||t[61]!==j||t[62]!==M?(se=(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[A,j,M,Y,X,oe]}),t[57]=Y,t[58]=X,t[59]=oe,t[60]=A,t[61]=j,t[62]=M,t[63]=se):se=t[63],se}function z(e){return e.apiKey??null}function B(){return l(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,m)}function V(){return l(B(),`appearance-none bg-[length:1rem] bg-[right_0.5rem_center] bg-no-repeat pr-9`)}var H=`__custom__`;function U(e,t){if(!e.region.trim()&&!e.imageBaseUrl.trim())return``;let n=e.region.trim().toLowerCase();return t.some(e=>e.value===n)?n:H}function W(e,t){let n=e.baseUrl.trim().replace(/\/+$/,``);if(!n)return``;let r=t.map(e=>e.value.replace(/\/+$/,``)).indexOf(n);return r>=0?t[r].value:H}function G(e,t,n){return t===`beijing`?e.dashscopeRegion_beijing:t===`singapore`?e.dashscopeRegion_singapore:t===`us`?e.dashscopeRegion_us:n}function K(e,t){return t===`minimax`?e.minimaxClusterLabel:t===`fal`?e.falQueueBaseLabel:e.baseUrlLabel}function q(e,t){return t===`minimax`?e.minimaxClusterHint:t===`fal`?e.falQueueBaseHint:null}function J(e,t){return JSON.stringify(e)!==JSON.stringify(t)}function Y(e,t){return t===1?e.modelCountOne:e.modelCountMany.replace(`{count}`,String(t))}function X(e){let t=(0,ie.c)(76),{summaries:n,credDraft:r,credBaseline:i,credDirty:a,credSaving:o,credError:s,credSavedFlash:p,credNoopFlash:m,updateCredRow:h,onDiscardCredentials:g,onSaveCredentials:_,extensionIds:v,showExtensionLinks:te,showImageModelsLink:b,hideActions:ne,language:S,apiKeyLinkLabels:re,messages:C}=e,w=ne===void 0?!1:ne,T;t[0]===n?T=t[1]:(T=n.some(ue),t[0]=n,t[1]=T);let O=T,k;t[2]===n?k=t[3]:(k=n.some(le),t[2]=n,t[3]=k);let A=k,[j,M]=(0,E.useState)(ce),[N,P]=(0,E.useState)(se),F;if(t[4]!==i||t[5]!==r||t[6]!==n){F=new Set;for(let e of n)J(r[e.id]??D(),i[e.id]??D())&&F.add(e.id);t[4]=i,t[5]=r,t[6]=n,t[7]=F}else F=t[7];let I=F,ae;t[8]!==I||t[9]!==N||t[10]!==j?(ae=e=>N.has(e)?!1:j.has(e)?!0:I.has(e),t[8]=I,t[9]=N,t[10]=j,t[11]=ae):ae=t[11];let z=ae,X;t[12]===z?X=t[13]:(X=e=>{if(z(e)){P(t=>new Set(t).add(e)),M(t=>{let n=new Set(t);return n.delete(e),n});return}P(t=>{let n=new Set(t);return n.delete(e),n}),M(t=>new Set(t).add(e))},t[12]=z,t[13]=X);let de=X;if(n.length===0)return null;let fe;t[14]===C.credentialsIntro?fe=t[15]:(fe=(0,L.jsx)(`p`,{children:C.credentialsIntro}),t[14]=C.credentialsIntro,t[15]=fe);let pe;t[16]!==O||t[17]!==C.regionHint?(pe=O?(0,L.jsx)(`p`,{className:`text-fg-subtle`,children:C.regionHint}):null,t[16]=O,t[17]=C.regionHint,t[18]=pe):pe=t[18];let Z;t[19]!==A||t[20]!==C.endpointPresetsHint?(Z=A?(0,L.jsx)(`p`,{className:`text-fg-subtle`,children:C.endpointPresetsHint}):null,t[19]=A,t[20]=C.endpointPresetsHint,t[21]=Z):Z=t[21];let me;t[22]!==b||t[23]!==C.imageModelsLinkTitle||t[24]!==C.openImageModelsPage?(me=b?(0,L.jsx)(`p`,{children:(0,L.jsx)(c,{to:`/settings/image-models`,className:`font-medium text-accent hover:underline`,title:C.imageModelsLinkTitle,children:C.openImageModelsPage})}):null,t[22]=b,t[23]=C.imageModelsLinkTitle,t[24]=C.openImageModelsPage,t[25]=me):me=t[25];let he;t[26]!==fe||t[27]!==pe||t[28]!==Z||t[29]!==me?(he=(0,L.jsxs)(`div`,{className:`flex flex-col gap-1 text-xs leading-relaxed text-fg-muted`,children:[fe,pe,Z,me]}),t[26]=fe,t[27]=pe,t[28]=Z,t[29]=me,t[30]=he):he=t[30];let Q;t[31]===s?Q=t[32]:(Q=s?(0,L.jsx)(`div`,{className:`rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300`,children:s}):null,t[31]=s,t[32]=Q);let ge;t[33]!==a||t[34]!==m||t[35]!==p||t[36]!==o||t[37]!==w||t[38]!==g||t[39]!==_||t[40]!==C.credentialsNothingToSave||t[41]!==C.credentialsSaved||t[42]!==C.discardCredentials||t[43]!==C.saveCredentials||t[44]!==C.savingCredentials?(ge=w?null:(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-end gap-2`,children:[p?(0,L.jsx)(`span`,{className:`text-sm text-fg-muted`,children:C.credentialsSaved}):null,m?(0,L.jsx)(`span`,{className:`text-sm text-fg-muted`,children:C.credentialsNothingToSave}):null,(0,L.jsx)(u,{type:`button`,variant:`secondary`,onClick:g,disabled:!a||o,children:C.discardCredentials}),(0,L.jsx)(u,{type:`button`,variant:`primary`,onClick:_,disabled:!a||o,children:o?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ee,{className:`size-3.5 animate-spin`}),(0,L.jsx)(`span`,{className:`ml-1.5`,children:C.savingCredentials})]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(d,{className:`size-3.5`}),(0,L.jsx)(`span`,{className:`ml-1.5`,children:C.saveCredentials})]})})]}),t[33]=a,t[34]=m,t[35]=p,t[36]=o,t[37]=w,t[38]=g,t[39]=_,t[40]=C.credentialsNothingToSave,t[41]=C.credentialsSaved,t[42]=C.discardCredentials,t[43]=C.saveCredentials,t[44]=C.savingCredentials,t[45]=ge):ge=t[45];let $;if(t[46]!==re||t[47]!==i||t[48]!==r||t[49]!==v||t[50]!==z||t[51]!==S||t[52]!==te||t[53]!==n||t[54]!==C||t[55]!==de||t[56]!==h){let e;t[58]!==re||t[59]!==i||t[60]!==r||t[61]!==v||t[62]!==z||t[63]!==S||t[64]!==te||t[65]!==C||t[66]!==de||t[67]!==h?(e=e=>{let t=r[e.id]??D(),n=e.ui,a=te&&v.has(e.id)?`/settings/ext/${encodeURIComponent(e.id)}`:null,o=J(t,i[e.id]??D()),s=z(e.id),u=e.label??e.id,d=Y(C,e.models.length);return(0,L.jsxs)(`section`,{className:l(`overflow-hidden rounded-xl border bg-surface-panel shadow-sm transition-colors dark:shadow-none`,o?`border-accent/50`:`border-edge`),children:[(0,L.jsxs)(`button`,{type:`button`,className:`flex w-full items-start justify-between gap-3 px-4 py-3 text-left hover:bg-surface-hover/70`,"aria-expanded":s,"aria-controls":`img-provider-credentials-${e.id}`,onClick:()=>de(e.id),children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,L.jsx)(`span`,{className:`truncate text-sm font-semibold text-fg`,children:u}),(0,L.jsx)(`span`,{className:`rounded-full bg-surface-subtle px-2 py-0.5 text-[11px] font-medium text-fg-muted`,children:e.id}),o?(0,L.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:C.unsavedChanges}):null,e.configured?(0,L.jsx)(`span`,{className:`rounded-full bg-accent-soft px-2 py-0.5 text-[11px] font-medium text-accent-fg`,children:C.configured}):(0,L.jsx)(`span`,{className:`rounded-full border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[11px] font-medium text-amber-700 dark:text-amber-300`,children:C.missingKey})]}),(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-subtle`,children:[(0,L.jsx)(`span`,{children:d}),e.defaultModel?(0,L.jsxs)(`span`,{className:`min-w-0 truncate`,children:[(0,L.jsxs)(`span`,{className:`text-fg-muted`,children:[C.defaultModel,`:`]}),` `,e.id,`/`,e.defaultModel]}):null]})]}),(0,L.jsx)(y,{className:l(`mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform`,s?`rotate-180`:`rotate-0`),"aria-hidden":`true`}),(0,L.jsx)(`span`,{className:`sr-only`,children:s?C.collapseProvider:C.expandProvider})]}),s?(0,L.jsxs)(`div`,{id:`img-provider-credentials-${e.id}`,className:`border-t border-edge px-4 py-4`,children:[a?(0,L.jsxs)(c,{to:a,className:`mb-3 inline-flex items-center gap-1 text-xs font-medium text-accent hover:underline`,title:C.extensionSettingsLinkTitle,children:[(0,L.jsx)(x,{className:`size-3`}),C.openExtensionSettings]}):null,e.models.length>0?(0,L.jsxs)(`p`,{className:`mb-3 text-xs leading-relaxed text-fg-subtle`,children:[(0,L.jsxs)(`span`,{className:`text-fg-muted`,children:[C.modelsLabel,`:`]}),` `,e.models.map(t=>`${e.id}/${t}`).join(`, `)]}):null,(0,L.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,L.jsx)(R,{providerId:e.id,value:t.apiKey,onChange:t=>h(e.id,{apiKey:t}),apiKeyLinks:f(e.id,S),apiKeyLinkLabels:re,labels:{apiKeyLabel:C.apiKeyLabel,optionalPlaceholder:C.optionalPlaceholder,maskedHelp:C.apiKeyMaskedHelp,copy:C.apiKeyCopy,copied:C.apiKeyCopied,show:C.apiKeyShow,hide:C.apiKeyHide,notInConfigFile:C.apiKeyNotInConfigFile,loadFailed:C.apiKeyRevealFailed}}),n?.regions?.length?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-region-preset-${e.id}`,children:C.regionLabel}),(0,L.jsxs)(`select`,{id:`img-cred-region-preset-${e.id}`,className:V(),value:U(t,n.regions),onChange:t=>{let r=t.target.value;if(r===``){h(e.id,{region:``,imageBaseUrl:``});return}if(r===H){h(e.id,{region:``,imageBaseUrl:``});return}let i=n.regions.find(e=>e.value===r);i&&h(e.id,{region:i.value,imageBaseUrl:i.imageBaseUrl})},children:[(0,L.jsx)(`option`,{value:``,children:C.regionPresetDefault}),n.regions.map(e=>(0,L.jsx)(`option`,{value:e.value,children:G(C,e.value,e.label)},e.value)),(0,L.jsx)(`option`,{value:H,children:C.regionPresetCustom})]}),U(t,n.regions)===H?(0,L.jsxs)(`div`,{className:`mt-2 grid gap-2 sm:grid-cols-2`,children:[(0,L.jsx)(`input`,{type:`text`,className:B(),value:t.region,placeholder:`region`,onChange:t=>h(e.id,{region:t.target.value})}),(0,L.jsx)(`input`,{type:`url`,className:B(),value:t.imageBaseUrl,placeholder:C.imageBaseUrlLabel,onChange:t=>h(e.id,{imageBaseUrl:t.target.value})})]}):null]}):null,n?.baseUrlPresets?.length?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-base-preset-${e.id}`,children:K(C,n.baseUrlPresetKind)}),q(C,n.baseUrlPresetKind)?(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:q(C,n.baseUrlPresetKind)}):null,(0,L.jsxs)(`select`,{id:`img-cred-base-preset-${e.id}`,className:V(),value:W(t,n.baseUrlPresets),onChange:t=>{let n=t.target.value;if(n===``){h(e.id,{baseUrl:``});return}if(n===H){h(e.id,{baseUrl:``});return}h(e.id,{baseUrl:n.replace(/\/+$/,``)})},children:[(0,L.jsx)(`option`,{value:``,children:C.baseUrlPresetDefault}),n.baseUrlPresets.map(oe),(0,L.jsx)(`option`,{value:H,children:C.baseUrlPresetCustom})]}),W(t,n.baseUrlPresets)===H?(0,L.jsx)(`input`,{type:`url`,className:l(B(),`mt-2`),value:t.baseUrl,placeholder:`https://…`,onChange:t=>h(e.id,{baseUrl:t.target.value})}):null]}):null,n?.regions?.length&&U(t,n.regions)!==H?(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-1 sm:col-span-2`,children:[(0,L.jsx)(`label`,{className:`text-xs font-medium text-fg-muted`,htmlFor:`img-cred-imgbase-ro-${e.id}`,children:C.imageBaseUrlLabel}),(0,L.jsx)(`input`,{id:`img-cred-imgbase-ro-${e.id}`,type:`url`,readOnly:!0,className:l(B(),`cursor-not-allowed opacity-90`),value:t.imageBaseUrl,title:C.imageBaseUrlPresetHint}),(0,L.jsx)(`p`,{className:`text-[11px] text-fg-subtle`,children:C.imageBaseUrlPresetHint})]}):null]})]}):null]},e.id)},t[58]=re,t[59]=i,t[60]=r,t[61]=v,t[62]=z,t[63]=S,t[64]=te,t[65]=C,t[66]=de,t[67]=h,t[68]=e):e=t[68],$=n.map(e),t[46]=re,t[47]=i,t[48]=r,t[49]=v,t[50]=z,t[51]=S,t[52]=te,t[53]=n,t[54]=C,t[55]=de,t[56]=h,t[57]=$}else $=t[57];let _e;t[69]===$?_e=t[70]:(_e=(0,L.jsx)(`div`,{className:`flex flex-col gap-4`,children:$}),t[69]=$,t[70]=_e);let ve;return t[71]!==he||t[72]!==Q||t[73]!==ge||t[74]!==_e?(ve=(0,L.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[he,Q,ge,_e]}),t[71]=he,t[72]=Q,t[73]=ge,t[74]=_e,t[75]=ve):ve=t[75],ve}function oe(e){return(0,L.jsx)(`option`,{value:e.value,children:e.label},e.value)}function se(){return new Set}function ce(){return new Set}function le(e){return(e.ui?.baseUrlPresets?.length??0)>0}function ue(e){return(e.ui?.regions?.length??0)>0}function de(e){let t=b(i(e=>!!e.token)),n=t.data,r=(0,E.useMemo)(()=>e.map(e=>e.id),[e]),o=(0,E.useRef)(!1),[c,l]=(0,E.useState)(null),[u,d]=(0,E.useState)(!1),[f,p]=(0,E.useState)(null),[ee,m]=(0,E.useState)(!1),[h,g]=(0,E.useState)(!1),_=(0,E.useMemo)(()=>k(n?.payload?.config,r),[n?.payload?.config,r]),v=c??_,y=_;return{gwSwr:t,credDraft:v,credBaseline:y,credDirty:(0,E.useMemo)(()=>JSON.stringify(v)!==JSON.stringify(y),[v,y]),credSaving:u,credError:f,credSavedFlash:ee,credNoopFlash:h,updateCredRow:(0,E.useCallback)((e,t)=>{o.current=!0,l(n=>{let r=n??_,i=r[e]??D();return{...r,[e]:{...i,...t}}})},[_]),onDiscardCredentials:(0,E.useCallback)(()=>{o.current=!1,l(null),p(null),m(!1),g(!1)},[]),saveCredentials:(0,E.useCallback)(async e=>{let n=M(r,v,y);if(Object.keys(n).length===0){g(!0),window.setTimeout(()=>g(!1),2200);return}d(!0),p(null),m(!1);try{await P(n),await t.mutate?.(),s(a(w)),o.current=!1,l(null),m(!0),window.setTimeout(()=>m(!1),2e3)}catch(t){p(t instanceof Error?t.message:e)}finally{d(!1)}},[r,v,y,t])}}function fe(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function pe(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:512,timeoutMs:6e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`en-US-MichelleNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`},"tts-local-cli":{command:``,outputFormat:`wav`}}}function Z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function me(e){return typeof e==`string`&&e.trim().length>0?e.trim():`alibaba`}function he(e){let t=fe();if(!Z(e))return t;let n=me(e.provider),r=Z(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,i=Z(e.openai)?{...t.openai,...e.openai}:t.openai,a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(Z(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>typeof e==`string`&&e.trim().length>0):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}let o=Z(e.providers)?Object.fromEntries(Object.entries(e.providers).map(([e,t])=>[e,Z(t)?{...t}:{}])):void 0;return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,...o?{providers:o}:{},fallback:a}}function Q(e){return typeof e==`string`&&e.trim().length>0?e.trim():`openai`}function ge(e){let t=pe();if(!Z(e))return t;let n=Q(e.provider),r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`,i=e[`tts-local-cli`];return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,alibaba:Z(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,openai:Z(e.openai)?{...t.openai,...e.openai}:t.openai,edge:Z(e.edge)?{...t.edge,...e.edge}:t.edge,minimax:Z(e.minimax)?{...t.minimax,...e.minimax}:t.minimax,"tts-local-cli":Z(i)?{...t[`tts-local-cli`],...i}:t[`tts-local-cli`]}}function $(e){let t=Z(e)?e:{};return{stt:he(t.stt),tts:ge(t.tts)}}async function _e(){return $((await o(a(`/api/config`))).payload?.config??{})}async function ve(e){await o(a(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:e.stt,tts:e.tts})}),S()}async function ye(){let e=await o(a(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}async function be(){let e=await o(a(`/api/voice/providers`));if(!e.payload?.providers)throw Error(`Missing voice providers payload`);return e.payload}async function xe(){let e=await o(a(`/api/voice/stt-providers`));if(!e.payload?.providers)throw Error(`Missing STT providers payload`);return e.payload}async function Se(e){let t=await o(a(`/api/voice/reveal-api-key`),{method:`POST`,body:JSON.stringify(e)});if(!t.payload)throw Error(`Missing reveal payload`);return t.payload}function Ce(e){let t=(0,ie.c)(56),{kind:n,providerId:r,fieldId:i,value:a,onChange:o,labels:s,placeholder:c,className:d}=e,f=c===void 0?`sk-...`:c,h;t[0]!==n||t[1]!==r?(h=()=>Se({kind:n,provider:r}).then(we),t[0]=n,t[1]=r,t[2]=h):h=t[2];let g=h,_;t[3]!==s.loadFailed||t[4]!==g||t[5]!==a?(_={value:a,reveal:g,loadFailedLabel:s.loadFailed},t[3]=s.loadFailed,t[4]=g,t[5]=a,t[6]=_):_=t[6];let{masked:v,showKey:y,revealed:b,revealLoading:x,revealErr:S,copied:C,inputValue:w,inputType:T,copyEnabled:E,copyKey:D,toggleEye:O,onInputChange:k}=ae(_),A;t[7]===d?A=t[8]:(A=l(`flex min-w-0 flex-col gap-1.5`,d),t[7]=d,t[8]=A);let j;t[9]!==s.maskedHelp||t[10]!==v?(j=v?(0,L.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:s.maskedHelp}):null,t[9]=s.maskedHelp,t[10]=v,t[11]=j):j=t[11];let M;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(M=l(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-fg`,`placeholder:text-fg-subtle`,m,`dark:border-edge`,`min-w-0 flex-1 font-mono text-xs`),t[12]=M):M=t[12];let N=v?`••••••••`:f,P;t[13]!==o||t[14]!==k?(P=e=>k(e.target.value,o),t[13]=o,t[14]=k,t[15]=P):P=t[15];let F;t[16]!==i||t[17]!==T||t[18]!==w||t[19]!==N||t[20]!==P?(F=(0,L.jsx)(`input`,{id:i,type:T,autoComplete:`off`,spellCheck:!1,className:M,value:w,placeholder:N,onChange:P}),t[16]=i,t[17]=T,t[18]=w,t[19]=N,t[20]=P,t[21]=F):F=t[21];let I;t[22]!==C||t[23]!==E||t[24]!==D||t[25]!==s.copied||t[26]!==s.copy?(I=E?(0,L.jsxs)(u,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>void D(),children:[C?(0,L.jsx)(p,{className:`size-3.5`}):(0,L.jsx)(te,{className:`size-3.5`}),C?s.copied:s.copy]}):null,t[22]=C,t[23]=E,t[24]=D,t[25]=s.copied,t[26]=s.copy,t[27]=I):I=t[27];let R;t[28]===O?R=t[29]:(R=()=>void O(),t[28]=O,t[29]=R);let z;t[30]!==x||t[31]!==y?(z=x?(0,L.jsx)(ee,{className:`size-3.5 animate-spin`,"aria-hidden":!0}):y?(0,L.jsx)(ne,{className:`size-3.5`}):(0,L.jsx)(re,{className:`size-3.5`}),t[30]=x,t[31]=y,t[32]=z):z=t[32];let B=y?s.hide:s.show,V;t[33]!==x||t[34]!==R||t[35]!==z||t[36]!==B?(V=(0,L.jsxs)(u,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,disabled:x,onClick:R,children:[z,B]}),t[33]=x,t[34]=R,t[35]=z,t[36]=B,t[37]=V):V=t[37];let H;t[38]!==I||t[39]!==V||t[40]!==F?(H=(0,L.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[F,I,V]}),t[38]=I,t[39]=V,t[40]=F,t[41]=H):H=t[41];let U;t[42]!==s.notInConfigFile||t[43]!==v||t[44]!==S||t[45]!==b||t[46]!==y?(U=v&&y&&b===null&&!S?(0,L.jsx)(`p`,{className:`text-xs text-amber-700 dark:text-amber-400/90`,children:s.notInConfigFile}):null,t[42]=s.notInConfigFile,t[43]=v,t[44]=S,t[45]=b,t[46]=y,t[47]=U):U=t[47];let W;t[48]===S?W=t[49]:(W=S?(0,L.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:S}):null,t[48]=S,t[49]=W);let G;return t[50]!==H||t[51]!==U||t[52]!==W||t[53]!==A||t[54]!==j?(G=(0,L.jsxs)(`div`,{className:A,children:[j,H,U,W]}),t[50]=H,t[51]=U,t[52]=W,t[53]=A,t[54]=j,t[55]=G):G=t[55],G}function we(e){return e.apiKey??null}export{xe as a,de as c,w as d,_e as i,X as l,ye as n,$ as o,be as r,ve as s,Ce as t,T as u};
|
|
2
|
+
//# sourceMappingURL=voice-api-key-field-BR3Ut06g.js.map
|