@desktalk/miniapp-preference 0.1.2 → 0.1.4

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/frontend.js CHANGED
@@ -1,4 +1,4 @@
1
- import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr=_.Component,cr=_.Fragment,ur=_.Profiler,hr=_.PureComponent,pr=_.StrictMode,mr=_.Suspense,gr=_.cloneElement,br=_.createContext,vr=_.createElement,fr=_.createRef,_r=_.forwardRef,yr=_.isValidElement,xr=_.lazy,wr=_.memo,kr=_.startTransition,f=_.useCallback,Ar=_.useContext,Cr=_.useDebugValue,Er=_.useDeferredValue,x=_.useEffect,Sr=_.useId,zr=_.useImperativeHandle,Pr=_.useInsertionEffect,Mr=_.useLayoutEffect,D=_.useMemo,Nr=_.useReducer,O=_.useRef,E=_.useState,Tr=_.useSyncExternalStore,Lr=_.useTransition,Rr=_.version,Q=window.ReactDOM,ve=Q.createRoot,Fr=Q.hydrateRoot;import{useCommand as ee,useEvent as te,MiniAppIdProvider as fe,WindowIdProvider as _e}from"@desktalk/sdk";var B=["General","Server","AI","Voice"],M="openai",N=[{id:"copilot",label:"GitHub Copilot",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"openai-codex",label:"OpenAI Codex",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"claude-pro",label:"Claude Pro/Max",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"gemini-cli",label:"Google Gemini CLI",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"google-antigravity",label:"Google Antigravity",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"anthropic",label:"Anthropic",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"azure-openai-responses",label:"Azure OpenAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:M,label:"OpenAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"google",label:"Google Gemini",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"mistral",label:"Mistral",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"groq",label:"Groq",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"cerebras",label:"Cerebras",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"xai",label:"xAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"openrouter",label:"OpenRouter",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"vercel-ai-gateway",label:"Vercel AI Gateway",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"zai",label:"ZAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode",label:"OpenCode Zen",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode-go",label:"OpenCode Go",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"huggingface",label:"Hugging Face",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"kimi-coding",label:"Kimi For Coding",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax",label:"MiniMax",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax-cn",label:"MiniMax China",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"ollama",label:"Ollama",authType:"api-key",supportsApiKey:!1,supportsBaseUrl:!0}],S="openai-whisper",T=[{id:S,label:"OpenAI Whisper",supportsApiKey:!0,supportsBaseUrl:!0,supportsModel:!0,supportsAzureDeployment:!1,supportsAzureApiVersion:!1},{id:"azure-openai-whisper",label:"Azure OpenAI Whisper",supportsApiKey:!0,supportsBaseUrl:!0,supportsModel:!1,supportsAzureDeployment:!0,supportsAzureApiVersion:!0}],ye=new Set(N.map(e=>e.id)),xe=new Set(T.map(e=>e.id));function re(e){return N.find(t=>t.id===e)}function we(e){const t=re(e);if(!t)return[];const r=[`ai.providers.${e}.model`];return t.supportsApiKey&&r.push(`ai.providers.${e}.apiKey`),t.supportsBaseUrl&&r.push(`ai.providers.${e}.baseUrl`),r}function ie(e){if(typeof e!="string")return[M];const t=e.split(",").map(r=>r.trim()).filter((r,i,n)=>r&&n.indexOf(r)===i&&ye.has(r));return t.length>0?t:[M]}function ke(e){return ie(e.join(",")).join(",")}function ne(e){return T.find(t=>t.id===e)}function Ae(e){const t=ne(e);if(!t)return[];const r=[];return t.supportsApiKey&&r.push(`voice.providers.${e}.apiKey`),t.supportsModel&&r.push(`voice.providers.${e}.model`),t.supportsBaseUrl&&r.push(`voice.providers.${e}.baseUrl`),t.supportsAzureDeployment&&r.push(`voice.providers.${e}.azureDeployment`),t.supportsAzureApiVersion&&r.push(`voice.providers.${e}.azureApiVersion`),r}function se(e){if(typeof e!="string")return[S];const t=e.split(",").map(r=>r.trim()).filter((r,i,n)=>r&&n.indexOf(r)===i&&xe.has(r));return t.length>0?t:[S]}function Ce(e){return se(e.join(",")).join(",")}function Ee(){const e=[{key:"ai.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured AI providers.",type:"string",default:M,category:"AI"},{key:"ai.defaultProvider",label:"Default Provider",description:"Provider selected by default for chat and tool execution.",type:"string",default:M,options:N.map(t=>t.id),category:"AI"}];for(const t of N)e.push({key:`ai.providers.${t.id}.model`,label:`${t.label} Model`,description:`Model identifier to use when ${t.label} is selected.`,type:"string",default:"",category:"AI"}),t.supportsApiKey&&e.push({key:`ai.providers.${t.id}.apiKey`,label:`${t.label} API Key`,description:`API key for ${t.label}.`,type:"string",default:"",category:"AI",sensitive:!0}),t.supportsBaseUrl&&e.push({key:`ai.providers.${t.id}.baseUrl`,label:`${t.label} Base URL`,description:`Optional custom API base URL for ${t.label}.`,type:"string",default:"",category:"AI"});return e.push({key:"ai.maxTokens",label:"Max Tokens",description:"Maximum tokens per AI response.",type:"number",default:4096,min:256,max:128e3,category:"AI"}),e}var Se=Ee();function ze(){const e=[{key:"voice.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured STT providers.",type:"string",default:S,category:"Voice"},{key:"voice.defaultProvider",label:"Default Provider",description:"Provider selected by default for voice transcription.",type:"string",default:S,options:T.map(t=>t.id),category:"Voice"}];for(const t of T)t.supportsApiKey&&e.push({key:`voice.providers.${t.id}.apiKey`,label:`${t.label} API Key`,description:`API key for ${t.label}.`,type:"string",default:"",category:"Voice",sensitive:!0}),t.supportsModel&&e.push({key:`voice.providers.${t.id}.model`,label:`${t.label} Model`,description:`Model identifier to use when ${t.label} is selected.`,type:"string",default:"whisper-1",category:"Voice"}),t.supportsBaseUrl&&e.push({key:`voice.providers.${t.id}.baseUrl`,label:`${t.label} Base URL`,description:t.id==="azure-openai-whisper"?"Base URL for Azure OpenAI Whisper requests.":`Optional custom API base URL for ${t.label}.`,type:"string",default:t.id===S?"https://api.openai.com/v1":"",category:"Voice"}),t.supportsAzureDeployment&&e.push({key:`voice.providers.${t.id}.azureDeployment`,label:`${t.label} Deployment`,description:"Azure OpenAI deployment name for Whisper transcription.",type:"string",default:"",category:"Voice"}),t.supportsAzureApiVersion&&e.push({key:`voice.providers.${t.id}.azureApiVersion`,label:`${t.label} API Version`,description:"Azure OpenAI API version used for transcription requests.",type:"string",default:"2024-06-01",category:"Voice"});return e}var Pe=ze(),K=[{key:"general.theme",label:"Theme",description:"UI theme: light or dark.",type:"string",default:"light",options:["light","dark"],category:"General"},{key:"general.accentColor",label:"Accent Color",description:"Primary theme color. Accepts hex values or any CSS color string.",type:"string",default:"#7c6ff7",category:"General"},{key:"general.language",label:"Language",description:"UI language/locale.",type:"string",default:"en",options:["en","zh"],category:"General"},{key:"general.dataDirectory",label:"Data Directory",description:"Override the base data directory. Leave empty for platform default (resolved via env-paths).",type:"string",default:"",category:"General",requiresRestart:!0},{key:"server.host",label:"Host",description:"Server bind address.",type:"string",default:"localhost",category:"Server",requiresRestart:!0},{key:"server.port",label:"Port",description:"Server listen port.",type:"number",default:3e3,min:1,max:65535,category:"Server",requiresRestart:!0},...Se,...Pe,{key:"voice.silenceTimeoutMs",label:"Silence Timeout",description:"Silence duration (ms) before finalizing an utterance.",type:"number",default:800,min:200,max:5e3,category:"Voice"},{key:"voice.energyThreshold",label:"Energy Threshold",description:"RMS energy threshold for voice activity detection (0\u201332767).",type:"number",default:500,min:50,max:1e4,category:"Voice"}];function Me(){const e={};for(const t of K)e[t.key]=t.default;return e}function Ne(e){return K.find(t=>t.key===e)}function Te(e){return K.filter(t=>t.category===e)}var Le=`.dt-tooltip-popup {
1
+ import{__dtLocalize as Q}from"@desktalk/sdk";var _=window.React,ur=_.Children,pr=_.Component,hr=_.Fragment,mr=_.Profiler,gr=_.PureComponent,br=_.StrictMode,vr=_.Suspense,fr=_.cloneElement,_r=_.createContext,yr=_.createElement,xr=_.createRef,wr=_.forwardRef,kr=_.isValidElement,Ar=_.lazy,Cr=_.memo,Er=_.startTransition,f=_.useCallback,Sr=_.useContext,Pr=_.useDebugValue,zr=_.useDeferredValue,w=_.useEffect,Mr=_.useId,Nr=_.useImperativeHandle,Tr=_.useInsertionEffect,Lr=_.useLayoutEffect,B=_.useMemo,Rr=_.useReducer,K=_.useRef,A=_.useState,Ir=_.useSyncExternalStore,Hr=_.useTransition,Vr=_.version,ee=window.ReactDOM,_e=ee.createRoot,$r=ee.hydrateRoot;import{useCommand as te,useEvent as re,MiniAppIdProvider as ye,WindowIdProvider as xe}from"@desktalk/sdk";var U=["General","Server","AI","Voice"],T="openai",we={copilot:"github-copilot"};function ie(e){return we[e]??e}var L=[{id:"github-copilot",label:"GitHub Copilot",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"openai-codex",label:"OpenAI Codex",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"claude-pro",label:"Claude Pro/Max",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"gemini-cli",label:"Google Gemini CLI",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"google-antigravity",label:"Google Antigravity",authType:"subscription",supportsApiKey:!1,supportsBaseUrl:!1},{id:"anthropic",label:"Anthropic",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"azure-openai-responses",label:"Azure OpenAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:T,label:"OpenAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"google",label:"Google Gemini",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"mistral",label:"Mistral",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"groq",label:"Groq",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"cerebras",label:"Cerebras",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"xai",label:"xAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"openrouter",label:"OpenRouter",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"vercel-ai-gateway",label:"Vercel AI Gateway",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"zai",label:"ZAI",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode",label:"OpenCode Zen",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode-go",label:"OpenCode Go",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"huggingface",label:"Hugging Face",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!0},{id:"kimi-coding",label:"Kimi For Coding",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax",label:"MiniMax",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax-cn",label:"MiniMax China",authType:"api-key",supportsApiKey:!0,supportsBaseUrl:!1},{id:"ollama",label:"Ollama",authType:"api-key",supportsApiKey:!1,supportsBaseUrl:!0}],M="openai-whisper",R=[{id:M,label:"OpenAI Whisper",supportsApiKey:!0,supportsBaseUrl:!0,supportsModel:!0,supportsAzureDeployment:!1,supportsAzureApiVersion:!1},{id:"azure-openai-whisper",label:"Azure OpenAI Whisper",supportsApiKey:!0,supportsBaseUrl:!0,supportsModel:!1,supportsAzureDeployment:!0,supportsAzureApiVersion:!0}],ke=new Set(L.map(e=>e.id)),Ae=new Set(R.map(e=>e.id));function ne(e){const t=ie(e);return L.find(r=>r.id===t)}function Ce(e){const t=ne(e);if(!t)return[];const r=[`ai.providers.${e}.model`];return t.supportsApiKey&&r.push(`ai.providers.${e}.apiKey`),t.supportsBaseUrl&&r.push(`ai.providers.${e}.baseUrl`),r}function se(e){if(typeof e!="string")return[T];const t=e.split(",").map(r=>ie(r.trim())).filter((r,i,n)=>r&&n.indexOf(r)===i&&ke.has(r));return t.length>0?t:[T]}function Ee(e){return se(e.join(",")).join(",")}function ae(e){return R.find(t=>t.id===e)}function Se(e){const t=ae(e);if(!t)return[];const r=[];return t.supportsApiKey&&r.push(`voice.providers.${e}.apiKey`),t.supportsModel&&r.push(`voice.providers.${e}.model`),t.supportsBaseUrl&&r.push(`voice.providers.${e}.baseUrl`),t.supportsAzureDeployment&&r.push(`voice.providers.${e}.azureDeployment`),t.supportsAzureApiVersion&&r.push(`voice.providers.${e}.azureApiVersion`),r}function oe(e){if(typeof e!="string")return[M];const t=e.split(",").map(r=>r.trim()).filter((r,i,n)=>r&&n.indexOf(r)===i&&Ae.has(r));return t.length>0?t:[M]}function Pe(e){return oe(e.join(",")).join(",")}function ze(){const e=[{key:"ai.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured AI providers.",type:"string",default:T,category:"AI"},{key:"ai.defaultProvider",label:"Default Provider",description:"Provider selected by default for chat and tool execution.",type:"string",default:T,options:L.map(t=>t.id),category:"AI"}];for(const t of L)e.push({key:`ai.providers.${t.id}.model`,label:`${t.label} Model`,description:`Model identifier to use when ${t.label} is selected.`,type:"string",default:"",category:"AI"}),t.supportsApiKey&&e.push({key:`ai.providers.${t.id}.apiKey`,label:`${t.label} API Key`,description:`API key for ${t.label}.`,type:"string",default:"",category:"AI",sensitive:!0}),t.supportsBaseUrl&&e.push({key:`ai.providers.${t.id}.baseUrl`,label:`${t.label} Base URL`,description:`Optional custom API base URL for ${t.label}.`,type:"string",default:"",category:"AI"});return e.push({key:"ai.maxTokens",label:"Max Tokens",description:"Maximum tokens per AI response.",type:"number",default:4096,min:256,max:128e3,category:"AI"}),e}var Me=ze();function Ne(){const e=[{key:"voice.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured STT providers.",type:"string",default:M,category:"Voice"},{key:"voice.defaultProvider",label:"Default Provider",description:"Provider selected by default for voice transcription.",type:"string",default:M,options:R.map(t=>t.id),category:"Voice"}];for(const t of R)t.supportsApiKey&&e.push({key:`voice.providers.${t.id}.apiKey`,label:`${t.label} API Key`,description:`API key for ${t.label}.`,type:"string",default:"",category:"Voice",sensitive:!0}),t.supportsModel&&e.push({key:`voice.providers.${t.id}.model`,label:`${t.label} Model`,description:`Model identifier to use when ${t.label} is selected.`,type:"string",default:"whisper-1",category:"Voice"}),t.supportsBaseUrl&&e.push({key:`voice.providers.${t.id}.baseUrl`,label:`${t.label} Base URL`,description:t.id==="azure-openai-whisper"?"Base URL for Azure OpenAI Whisper requests.":`Optional custom API base URL for ${t.label}.`,type:"string",default:t.id===M?"https://api.openai.com/v1":"",category:"Voice"}),t.supportsAzureDeployment&&e.push({key:`voice.providers.${t.id}.azureDeployment`,label:`${t.label} Deployment`,description:"Azure OpenAI deployment name for Whisper transcription.",type:"string",default:"",category:"Voice"}),t.supportsAzureApiVersion&&e.push({key:`voice.providers.${t.id}.azureApiVersion`,label:`${t.label} API Version`,description:"Azure OpenAI API version used for transcription requests.",type:"string",default:"2024-06-01",category:"Voice"});return e}var Te=Ne(),W=[{key:"general.theme",label:"Theme",description:"UI theme: light or dark.",type:"string",default:"light",options:["light","dark"],category:"General"},{key:"general.accentColor",label:"Accent Color",description:"Primary theme color. Accepts hex values or any CSS color string.",type:"string",default:"#7c6ff7",category:"General"},{key:"general.language",label:"Language",description:"UI language/locale.",type:"string",default:"en",options:["en","zh"],category:"General"},{key:"general.dataDirectory",label:"Data Directory",description:"Override the base data directory. Leave empty for platform default (resolved via env-paths).",type:"string",default:"",category:"General",requiresRestart:!0},{key:"server.host",label:"Host",description:"Server bind address.",type:"string",default:"localhost",category:"Server",requiresRestart:!0},{key:"server.port",label:"Port",description:"Server listen port.",type:"number",default:3e3,min:1,max:65535,category:"Server",requiresRestart:!0},...Me,...Te,{key:"voice.silenceTimeoutMs",label:"Silence Timeout",description:"Silence duration (ms) before finalizing an utterance.",type:"number",default:800,min:200,max:5e3,category:"Voice"},{key:"voice.energyThreshold",label:"Energy Threshold",description:"RMS energy threshold for voice activity detection (0\u201332767).",type:"number",default:500,min:50,max:1e4,category:"Voice"}];function Le(){const e={};for(const t of W)e[t.key]=t.default;return e}function Re(e){return W.find(t=>t.key===e)}function Ie(e){return W.filter(t=>t.category===e)}var He=`.dt-tooltip-popup {
2
2
  position: fixed;
3
3
  z-index: 2147483647;
4
4
  padding: 6px 10px;
@@ -107,7 +107,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
107
107
  border-top: none;
108
108
  border-bottom: none;
109
109
  }
110
- `,Re="dt-tooltip-popup",z=8,ae=!1;function Fe(){if(ae)return;let e=document.createElement("style");e.setAttribute("data-dt-tooltip",""),e.textContent=Le,document.head.appendChild(e),ae=!0}var Ve=class extends HTMLElement{_popup=null;_showTimeout=null;_tooltipId="";_visible=!1;static get observedAttributes(){return["content","placement","align","delay","disabled"]}get content(){return this.getAttribute("content")??""}set content(e){this.setAttribute("content",e)}get placement(){let e=this.getAttribute("placement");return e==="bottom"||e==="left"||e==="right"?e:"top"}set placement(e){this.setAttribute("placement",e)}get align(){let e=this.getAttribute("align");return e==="left"||e==="right"?e:"center"}set align(e){this.setAttribute("align",e)}get delay(){let e=Number(this.getAttribute("delay"));return Number.isFinite(e)&&e>0?e:0}set delay(e){this.setAttribute("delay",String(e))}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}constructor(){super();let e=this.attachShadow({mode:"open"});e.innerHTML="<slot></slot>",this._tooltipId=`dt-tip-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){Fe(),this.addEventListener("mouseenter",this._onEnter),this.addEventListener("mouseleave",this._onLeave),this.addEventListener("focusin",this._onEnter),this.addEventListener("focusout",this._onLeave)}disconnectedCallback(){this.removeEventListener("mouseenter",this._onEnter),this.removeEventListener("mouseleave",this._onLeave),this.removeEventListener("focusin",this._onEnter),this.removeEventListener("focusout",this._onLeave),this._hide()}attributeChangedCallback(e,t,r){e==="disabled"&&this.disabled&&this._hide(),e==="content"&&this._popup&&(this._popup.textContent=this.content)}_onEnter=()=>{if(this.disabled||!this.content)return;this._showTimeout!==null&&clearTimeout(this._showTimeout);let e=()=>{this._createPopup(),this._position(),this._visible=!0};this.delay>0?this._showTimeout=setTimeout(e,this.delay):e()};_onLeave=()=>{this._hide()};_createPopup(){if(this._popup)return;let e=document.createElement("div");e.className=Re,e.id=this._tooltipId,e.setAttribute("role","tooltip"),e.textContent=this.content,document.body.appendChild(e),this._popup=e;let t=this._getTrigger();t&&t.setAttribute("aria-describedby",this._tooltipId)}_hide(){if(this._showTimeout!==null&&(clearTimeout(this._showTimeout),this._showTimeout=null),this._popup){let e=this._getTrigger();e&&e.removeAttribute("aria-describedby"),this._popup.remove(),this._popup=null,this._visible=!1}}_getTrigger(){let e=this.shadowRoot?.querySelector("slot")?.assignedElements();return e&&e.length>0?e[0]:null}_position(){let e=this._popup;if(!e)return;let t=this.getBoundingClientRect(),r=e.getBoundingClientRect(),i=window.innerWidth,n=window.innerHeight,s=8,c=this.placement;c==="top"&&t.top-r.height-z<0?c="bottom":c==="bottom"&&t.bottom+r.height+z>n?c="top":c==="left"&&t.left-r.width-z<0?c="right":c==="right"&&t.right+r.width+z>i&&(c="left"),e.setAttribute("data-actual-placement",c);let d,a,p=t.left+t.width/2,b=t.top+t.height/2;switch(c){case"top":p=this.align==="left"?t.left:this.align==="right"?t.right:t.left+t.width/2,a=this.align==="left"?t.left:this.align==="right"?t.right-r.width:t.left+t.width/2-r.width/2,d=t.top-r.height-z;break;case"bottom":p=this.align==="left"?t.left:this.align==="right"?t.right:t.left+t.width/2,a=this.align==="left"?t.left:this.align==="right"?t.right-r.width:t.left+t.width/2-r.width/2,d=t.bottom+z;break;case"left":a=t.left-r.width-z,d=t.top+t.height/2-r.height/2,b=t.top+t.height/2;break;case"right":a=t.right+z,d=t.top+t.height/2-r.height/2,b=t.top+t.height/2;break}c==="top"||c==="bottom"?(a=Math.max(s,Math.min(a,i-r.width-s)),e.style.setProperty("--dt-tooltip-arrow-left",`${Math.max(8,Math.min(p-a,r.width-8))}px`),e.style.removeProperty("--dt-tooltip-arrow-top")):(d=Math.max(s,Math.min(d,n-r.height-s)),e.style.setProperty("--dt-tooltip-arrow-top",`${Math.max(8,Math.min(b-d,r.height-8))}px`),e.style.removeProperty("--dt-tooltip-arrow-left")),e.style.left=`${a}px`,e.style.top=`${d}px`}},$e=`:host {
110
+ `,Ve="dt-tooltip-popup",N=8,le=!1;function $e(){if(le)return;let e=document.createElement("style");e.setAttribute("data-dt-tooltip",""),e.textContent=He,document.head.appendChild(e),le=!0}var Fe=class extends HTMLElement{_popup=null;_showTimeout=null;_tooltipId="";_visible=!1;static get observedAttributes(){return["content","placement","align","delay","disabled"]}get content(){return this.getAttribute("content")??""}set content(e){this.setAttribute("content",e)}get placement(){let e=this.getAttribute("placement");return e==="bottom"||e==="left"||e==="right"?e:"top"}set placement(e){this.setAttribute("placement",e)}get align(){let e=this.getAttribute("align");return e==="left"||e==="right"?e:"center"}set align(e){this.setAttribute("align",e)}get delay(){let e=Number(this.getAttribute("delay"));return Number.isFinite(e)&&e>0?e:0}set delay(e){this.setAttribute("delay",String(e))}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}constructor(){super();let e=this.attachShadow({mode:"open"});e.innerHTML="<slot></slot>",this._tooltipId=`dt-tip-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){$e(),this.addEventListener("mouseenter",this._onEnter),this.addEventListener("mouseleave",this._onLeave),this.addEventListener("focusin",this._onEnter),this.addEventListener("focusout",this._onLeave)}disconnectedCallback(){this.removeEventListener("mouseenter",this._onEnter),this.removeEventListener("mouseleave",this._onLeave),this.removeEventListener("focusin",this._onEnter),this.removeEventListener("focusout",this._onLeave),this._hide()}attributeChangedCallback(e,t,r){e==="disabled"&&this.disabled&&this._hide(),e==="content"&&this._popup&&(this._popup.textContent=this.content)}_onEnter=()=>{if(this.disabled||!this.content)return;this._showTimeout!==null&&clearTimeout(this._showTimeout);let e=()=>{this._createPopup(),this._position(),this._visible=!0};this.delay>0?this._showTimeout=setTimeout(e,this.delay):e()};_onLeave=()=>{this._hide()};_createPopup(){if(this._popup)return;let e=document.createElement("div");e.className=Ve,e.id=this._tooltipId,e.setAttribute("role","tooltip"),e.textContent=this.content,document.body.appendChild(e),this._popup=e;let t=this._getTrigger();t&&t.setAttribute("aria-describedby",this._tooltipId)}_hide(){if(this._showTimeout!==null&&(clearTimeout(this._showTimeout),this._showTimeout=null),this._popup){let e=this._getTrigger();e&&e.removeAttribute("aria-describedby"),this._popup.remove(),this._popup=null,this._visible=!1}}_getTrigger(){let e=this.shadowRoot?.querySelector("slot")?.assignedElements();return e&&e.length>0?e[0]:null}_position(){let e=this._popup;if(!e)return;let t=this.getBoundingClientRect(),r=e.getBoundingClientRect(),i=window.innerWidth,n=window.innerHeight,s=8,l=this.placement;l==="top"&&t.top-r.height-N<0?l="bottom":l==="bottom"&&t.bottom+r.height+N>n?l="top":l==="left"&&t.left-r.width-N<0?l="right":l==="right"&&t.right+r.width+N>i&&(l="left"),e.setAttribute("data-actual-placement",l);let u,d,h=t.left+t.width/2,m=t.top+t.height/2;switch(l){case"top":h=this.align==="left"?t.left:this.align==="right"?t.right:t.left+t.width/2,d=this.align==="left"?t.left:this.align==="right"?t.right-r.width:t.left+t.width/2-r.width/2,u=t.top-r.height-N;break;case"bottom":h=this.align==="left"?t.left:this.align==="right"?t.right:t.left+t.width/2,d=this.align==="left"?t.left:this.align==="right"?t.right-r.width:t.left+t.width/2-r.width/2,u=t.bottom+N;break;case"left":d=t.left-r.width-N,u=t.top+t.height/2-r.height/2,m=t.top+t.height/2;break;case"right":d=t.right+N,u=t.top+t.height/2-r.height/2,m=t.top+t.height/2;break}l==="top"||l==="bottom"?(d=Math.max(s,Math.min(d,i-r.width-s)),e.style.setProperty("--dt-tooltip-arrow-left",`${Math.max(8,Math.min(h-d,r.width-8))}px`),e.style.removeProperty("--dt-tooltip-arrow-top")):(u=Math.max(s,Math.min(u,n-r.height-s)),e.style.setProperty("--dt-tooltip-arrow-top",`${Math.max(8,Math.min(m-u,r.height-8))}px`),e.style.removeProperty("--dt-tooltip-arrow-left")),e.style.left=`${d}px`,e.style.top=`${u}px`}},De=`:host {
111
111
  display: block;
112
112
  margin-bottom: 12px;
113
113
  }
@@ -183,7 +183,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
183
183
  ::slotted(p:last-child) {
184
184
  margin-bottom: 0;
185
185
  }
186
- `,He="dt-card-inner",Ie=class extends HTMLElement{static get observedAttributes(){return["variant"]}get variant(){let e=this.getAttribute("variant");return e==="outlined"||e==="filled"?e:"default"}set variant(e){this.setAttribute("variant",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=$e,e.appendChild(t);let r=document.createElement("div");r.className=He,r.innerHTML="<slot></slot>",e.appendChild(r)}},De=`.dt-select-menu {
186
+ `,Oe="dt-card-inner",Be=class extends HTMLElement{static get observedAttributes(){return["variant"]}get variant(){let e=this.getAttribute("variant");return e==="outlined"||e==="filled"?e:"default"}set variant(e){this.setAttribute("variant",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=De,e.appendChild(t);let r=document.createElement("div");r.className=Oe,r.innerHTML="<slot></slot>",e.appendChild(r)}},Ke=`.dt-select-menu {
187
187
  position: fixed;
188
188
  z-index: 2147483646;
189
189
  display: flex;
@@ -253,7 +253,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
253
253
  text-overflow: ellipsis;
254
254
  white-space: nowrap;
255
255
  }
256
- `,Oe=`:host {
256
+ `,Ue=`:host {
257
257
  display: block;
258
258
  width: 100%;
259
259
  min-width: 0;
@@ -356,7 +356,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
356
356
  .dt-select-trigger[aria-expanded='true'] .dt-select-chevron {
357
357
  transform: rotate(180deg);
358
358
  }
359
- `,Be="dt-select-trigger",oe="dt-select-label",Ke="dt-select-chevron",Ue="dt-select-menu",We="dt-select-option",qe="dt-select-option--active",de=!1;function je(){if(de)return;let e=document.createElement("style");e.setAttribute("data-dt-select",""),e.textContent=De,document.head.appendChild(e),de=!0}var Ge=class extends HTMLElement{_menu=null;_trigger=null;_options=[];_open=!1;_menuId="";static get observedAttributes(){return["value","placeholder","disabled","align"]}get value(){return this.getAttribute("value")??""}set value(e){this.setAttribute("value",e)}get placeholder(){return this.getAttribute("placeholder")??"Select\u2026"}set placeholder(e){this.setAttribute("placeholder",e)}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get align(){return this.getAttribute("align")==="right"?"right":"left"}set align(e){this.setAttribute("align",e)}get options(){return this._options}set options(e){this._options=e,this._updateLabel(),this._open&&this._renderMenuItems()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Oe,e.appendChild(t);let r=document.createElement("button");r.type="button",r.className=Be,r.setAttribute("aria-haspopup","listbox"),r.setAttribute("aria-expanded","false");let i=document.createElement("span");i.className=oe,r.appendChild(i);let n=document.createElement("span");n.className=Ke,n.setAttribute("aria-hidden","true"),n.textContent="\u25BE",r.appendChild(n),e.appendChild(r),this._trigger=r,this._menuId=`dt-sel-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){je(),this._trigger.addEventListener("click",this._onTriggerClick),this._updateLabel()}disconnectedCallback(){this._trigger.removeEventListener("click",this._onTriggerClick),this._close()}attributeChangedCallback(e){e==="value"&&(this._updateLabel(),this._open&&this._renderMenuItems()),e==="placeholder"&&!this.value&&this._updateLabel(),e==="disabled"&&this.disabled&&this._close()}_updateLabel(){let e=this._trigger.querySelector(`.${oe}`),t=this._options.find(r=>r.value===this.value);e.textContent=t?.label??this.placeholder}_onTriggerClick=()=>{this.disabled||(this._open?this._close():this._openMenu())};_openMenu(){if(this._open)return;let e=document.createElement("div");e.className=Ue,e.id=this._menuId,e.setAttribute("role","listbox"),document.body.appendChild(e),this._menu=e,this._renderMenuItems(),this._position(),requestAnimationFrame(()=>{e.setAttribute("data-open","")}),this._open=!0,this._trigger.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{document.addEventListener("mousedown",this._onOutsideClick),document.addEventListener("keydown",this._onKeyDown),window.addEventListener("blur",this._onWindowBlur)})}_close(){if(this._open){if(document.removeEventListener("mousedown",this._onOutsideClick),document.removeEventListener("keydown",this._onKeyDown),window.removeEventListener("blur",this._onWindowBlur),this._menu){this._menu.removeAttribute("data-open");let e=this._menu;setTimeout(()=>e.remove(),140),this._menu=null}this._open=!1,this._trigger.setAttribute("aria-expanded","false")}}_onOutsideClick=e=>{let t=e.target;this._menu?.contains(t)||this.contains(t)||this._close()};_onWindowBlur=()=>{requestAnimationFrame(()=>{document.activeElement?.tagName==="IFRAME"&&this._close()})};_onKeyDown=e=>{e.key==="Escape"&&(this._close(),this._trigger.focus())};_renderMenuItems(){let e=this._menu;if(e){e.innerHTML="";for(let t of this._options){let r=document.createElement("button");r.type="button",r.className=We,r.setAttribute("role","option"),r.setAttribute("aria-selected",String(t.value===this.value)),t.value===this.value&&r.classList.add(qe);let i=document.createElement("span");i.textContent=t.label,r.appendChild(i),r.addEventListener("click",()=>{this._selectValue(t.value)}),e.appendChild(r)}}}_selectValue(e){let t=this.value;this.value=e,this._updateLabel(),this._close(),e!==t&&this.dispatchEvent(new CustomEvent("dt-change",{detail:{value:e},bubbles:!0,composed:!0}))}_position(){let e=this._menu;if(!e)return;let t=this.getBoundingClientRect(),r=10,i=Math.max(t.width,240),n=t.bottom+r,s=e.scrollHeight||260,c=window.innerHeight;if(n+s>c&&t.top-s-r>0&&(n=t.top-s-r),e.style.minWidth=`${i}px`,this.align==="right"){let d=window.innerWidth;e.style.right=`${d-t.right}px`,e.style.left="auto"}else e.style.left=`${t.left}px`,e.style.right="auto";e.style.top=`${n}px`}},Ye=`:host {
359
+ `,We="dt-select-trigger",de="dt-select-label",qe="dt-select-chevron",je="dt-select-menu",Ge="dt-select-option",Ye="dt-select-option--active",ce=!1;function Je(){if(ce)return;let e=document.createElement("style");e.setAttribute("data-dt-select",""),e.textContent=Ke,document.head.appendChild(e),ce=!0}var Xe=class extends HTMLElement{_menu=null;_trigger=null;_options=[];_open=!1;_menuId="";static get observedAttributes(){return["value","placeholder","disabled","align"]}get value(){return this.getAttribute("value")??""}set value(e){this.setAttribute("value",e)}get placeholder(){return this.getAttribute("placeholder")??"Select\u2026"}set placeholder(e){this.setAttribute("placeholder",e)}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get align(){return this.getAttribute("align")==="right"?"right":"left"}set align(e){this.setAttribute("align",e)}get options(){return this._options}set options(e){this._options=e,this._updateLabel(),this._open&&this._renderMenuItems()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Ue,e.appendChild(t);let r=document.createElement("button");r.type="button",r.className=We,r.setAttribute("aria-haspopup","listbox"),r.setAttribute("aria-expanded","false");let i=document.createElement("span");i.className=de,r.appendChild(i);let n=document.createElement("span");n.className=qe,n.setAttribute("aria-hidden","true"),n.textContent="\u25BE",r.appendChild(n),e.appendChild(r),this._trigger=r,this._menuId=`dt-sel-${Math.random().toString(36).slice(2,9)}`}connectedCallback(){Je(),this._trigger.addEventListener("click",this._onTriggerClick),this._updateLabel()}disconnectedCallback(){this._trigger.removeEventListener("click",this._onTriggerClick),this._close()}attributeChangedCallback(e){e==="value"&&(this._updateLabel(),this._open&&this._renderMenuItems()),e==="placeholder"&&!this.value&&this._updateLabel(),e==="disabled"&&this.disabled&&this._close()}_updateLabel(){let e=this._trigger.querySelector(`.${de}`),t=this._options.find(r=>r.value===this.value);e.textContent=t?.label??this.placeholder}_onTriggerClick=()=>{this.disabled||(this._open?this._close():this._openMenu())};_openMenu(){if(this._open)return;let e=document.createElement("div");e.className=je,e.id=this._menuId,e.setAttribute("role","listbox"),document.body.appendChild(e),this._menu=e,this._renderMenuItems(),this._position(),requestAnimationFrame(()=>{e.setAttribute("data-open","")}),this._open=!0,this._trigger.setAttribute("aria-expanded","true"),requestAnimationFrame(()=>{document.addEventListener("mousedown",this._onOutsideClick),document.addEventListener("keydown",this._onKeyDown),window.addEventListener("blur",this._onWindowBlur)})}_close(){if(this._open){if(document.removeEventListener("mousedown",this._onOutsideClick),document.removeEventListener("keydown",this._onKeyDown),window.removeEventListener("blur",this._onWindowBlur),this._menu){this._menu.removeAttribute("data-open");let e=this._menu;setTimeout(()=>e.remove(),140),this._menu=null}this._open=!1,this._trigger.setAttribute("aria-expanded","false")}}_onOutsideClick=e=>{let t=e.target;this._menu?.contains(t)||this.contains(t)||this._close()};_onWindowBlur=()=>{requestAnimationFrame(()=>{document.activeElement?.tagName==="IFRAME"&&this._close()})};_onKeyDown=e=>{e.key==="Escape"&&(this._close(),this._trigger.focus())};_renderMenuItems(){let e=this._menu;if(e){e.innerHTML="";for(let t of this._options){let r=document.createElement("button");r.type="button",r.className=Ge,r.setAttribute("role","option"),r.setAttribute("aria-selected",String(t.value===this.value)),t.value===this.value&&r.classList.add(Ye);let i=document.createElement("span");i.textContent=t.label,r.appendChild(i),r.addEventListener("click",()=>{this._selectValue(t.value)}),e.appendChild(r)}}}_selectValue(e){let t=this.value;this.value=e,this._updateLabel(),this._close(),e!==t&&this.dispatchEvent(new CustomEvent("dt-change",{detail:{value:e},bubbles:!0,composed:!0}))}_position(){let e=this._menu;if(!e)return;let t=this.getBoundingClientRect(),r=10,i=Math.max(t.width,240),n=t.bottom+r,s=e.scrollHeight||260,l=window.innerHeight;if(n+s>l&&t.top-s-r>0&&(n=t.top-s-r),e.style.minWidth=`${i}px`,this.align==="right"){let u=window.innerWidth;e.style.right=`${u-t.right}px`,e.style.left="auto"}else e.style.left=`${t.left}px`,e.style.right="auto";e.style.top=`${n}px`}},Ze=`:host {
360
360
  display: block;
361
361
  margin-bottom: 12px;
362
362
  }
@@ -448,7 +448,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
448
448
  ::slotted(*) {
449
449
  min-width: 0;
450
450
  }
451
- `,Xe="dt-grid-inner",Ze=class extends HTMLElement{static get observedAttributes(){return["cols","gap","min-width"]}get cols(){let e=this.getAttribute("cols");return e==="1"||e==="2"||e==="3"||e==="4"||e==="5"||e==="6"?e:null}set cols(e){e===null?this.removeAttribute("cols"):this.setAttribute("cols",e)}get gap(){let e=this.getAttribute("gap");return e==="0"||e==="4"||e==="8"||e==="12"||e==="20"||e==="24"||e==="32"?e:"16"}set gap(e){this.setAttribute("gap",e)}get minWidth(){let e=this.getAttribute("min-width");return e==="150"||e==="180"||e==="200"||e==="260"||e==="300"?e:"220"}set minWidth(e){this.setAttribute("min-width",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Ye,e.appendChild(t);let r=document.createElement("div");r.className=Xe,r.innerHTML="<slot></slot>",e.appendChild(r)}},Je=`:host {
451
+ `,Qe="dt-grid-inner",et=class extends HTMLElement{static get observedAttributes(){return["cols","gap","min-width"]}get cols(){let e=this.getAttribute("cols");return e==="1"||e==="2"||e==="3"||e==="4"||e==="5"||e==="6"?e:null}set cols(e){e===null?this.removeAttribute("cols"):this.setAttribute("cols",e)}get gap(){let e=this.getAttribute("gap");return e==="0"||e==="4"||e==="8"||e==="12"||e==="20"||e==="24"||e==="32"?e:"16"}set gap(e){this.setAttribute("gap",e)}get minWidth(){let e=this.getAttribute("min-width");return e==="150"||e==="180"||e==="200"||e==="260"||e==="300"?e:"220"}set minWidth(e){this.setAttribute("min-width",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Ze,e.appendChild(t);let r=document.createElement("div");r.className=Qe,r.innerHTML="<slot></slot>",e.appendChild(r)}},tt=`:host {
452
452
  display: block;
453
453
  margin-bottom: 12px;
454
454
  }
@@ -514,7 +514,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
514
514
  ::slotted(*) {
515
515
  min-width: 0;
516
516
  }
517
- `,Qe="dt-stack-inner";function U(e){return e==="row"||e==="horizontal"?"row":"column"}var et=class extends HTMLElement{static get observedAttributes(){return["direction","gap","align"]}get direction(){return U(this.getAttribute("direction"))}set direction(e){this.setAttribute("direction",U(e))}get gap(){let e=this.getAttribute("gap");return e==="0"||e==="4"||e==="8"||e==="12"||e==="20"||e==="24"||e==="32"?e:"16"}set gap(e){this.setAttribute("gap",e)}get align(){let e=this.getAttribute("align");return e==="start"||e==="center"||e==="end"?e:"stretch"}set align(e){this.setAttribute("align",e)}connectedCallback(){this.#e()}attributeChangedCallback(e){e==="direction"&&this.#e()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Je,e.appendChild(t);let r=document.createElement("div");r.className=Qe,r.innerHTML="<slot></slot>",e.appendChild(r)}#e(){let e=this.getAttribute("direction"),t=U(e);e!==null&&e!==t&&this.setAttribute("direction",t)}},tt=`:host {
517
+ `,rt="dt-stack-inner";function q(e){return e==="row"||e==="horizontal"?"row":"column"}var it=class extends HTMLElement{static get observedAttributes(){return["direction","gap","align"]}get direction(){return q(this.getAttribute("direction"))}set direction(e){this.setAttribute("direction",q(e))}get gap(){let e=this.getAttribute("gap");return e==="0"||e==="4"||e==="8"||e==="12"||e==="20"||e==="24"||e==="32"?e:"16"}set gap(e){this.setAttribute("gap",e)}get align(){let e=this.getAttribute("align");return e==="start"||e==="center"||e==="end"?e:"stretch"}set align(e){this.setAttribute("align",e)}connectedCallback(){this.#e()}attributeChangedCallback(e){e==="direction"&&this.#e()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=tt,e.appendChild(t);let r=document.createElement("div");r.className=rt,r.innerHTML="<slot></slot>",e.appendChild(r)}#e(){let e=this.getAttribute("direction"),t=q(e);e!==null&&e!==t&&this.setAttribute("direction",t)}},nt=`:host {
518
518
  display: block;
519
519
  }
520
520
 
@@ -619,7 +619,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
619
619
  .dt-stat-inner .trend.neutral {
620
620
  color: var(--dt-text-muted);
621
621
  }
622
- `,rt="dt-stat-inner",it=class extends HTMLElement{static get observedAttributes(){return["label","value","description","size","variant","trend","trend-value"]}_container;_labelEl;_valueEl;_descEl;_trendEl;get label(){return this.getAttribute("label")}set label(e){e===null?this.removeAttribute("label"):this.setAttribute("label",e)}get value(){return this.getAttribute("value")}set value(e){e===null?this.removeAttribute("value"):this.setAttribute("value",e)}get description(){return this.getAttribute("description")}set description(e){e===null?this.removeAttribute("description"):this.setAttribute("description",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get variant(){let e=this.getAttribute("variant");return e==="outlined"||e==="filled"?e:"default"}set variant(e){this.setAttribute("variant",e)}get trend(){let e=this.getAttribute("trend");return e==="up"||e==="down"||e==="neutral"?e:null}set trend(e){e===null?this.removeAttribute("trend"):this.setAttribute("trend",e)}get trendValue(){return this.getAttribute("trend-value")}set trendValue(e){e===null?this.removeAttribute("trend-value"):this.setAttribute("trend-value",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=tt,e.appendChild(t),this._container=document.createElement("div"),this._container.className=rt,this._labelEl=document.createElement("div"),this._labelEl.className="label",this._container.appendChild(this._labelEl),this._valueEl=document.createElement("div"),this._valueEl.className="value",this._container.appendChild(this._valueEl),this._descEl=document.createElement("div"),this._descEl.className="description",this._container.appendChild(this._descEl),this._trendEl=document.createElement("div"),this._trendEl.className="trend",this._container.appendChild(this._trendEl),e.appendChild(this._container),this._render()}attributeChangedCallback(e,t,r){(e==="label"||e==="value"||e==="description"||e==="size"||e==="variant"||e==="trend"||e==="trend-value")&&this._render()}_render(){this._labelEl.textContent=this.label??"",this._labelEl.style.display=this.label?"block":"none",this._valueEl.textContent=this.value??"",this._valueEl.style.display=this.value?"block":"none",this._descEl.textContent=this.description??"",this._descEl.style.display=this.description?"block":"none";let e=this.trend,t=this.trendValue;if(e&&t){this._trendEl.style.display="inline-flex",this._trendEl.className=`trend ${e==="up"?"positive":e==="down"?"negative":"neutral"}`;let r="";e==="up"?r="\u2191":e==="down"?r="\u2193":r="\u2192",this._trendEl.textContent=`${r} ${t}`}else this._trendEl.style.display="none"}},nt=`:host {
622
+ `,st="dt-stat-inner",at=class extends HTMLElement{static get observedAttributes(){return["label","value","description","size","variant","trend","trend-value"]}_container;_labelEl;_valueEl;_descEl;_trendEl;get label(){return this.getAttribute("label")}set label(e){e===null?this.removeAttribute("label"):this.setAttribute("label",e)}get value(){return this.getAttribute("value")}set value(e){e===null?this.removeAttribute("value"):this.setAttribute("value",e)}get description(){return this.getAttribute("description")}set description(e){e===null?this.removeAttribute("description"):this.setAttribute("description",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get variant(){let e=this.getAttribute("variant");return e==="outlined"||e==="filled"?e:"default"}set variant(e){this.setAttribute("variant",e)}get trend(){let e=this.getAttribute("trend");return e==="up"||e==="down"||e==="neutral"?e:null}set trend(e){e===null?this.removeAttribute("trend"):this.setAttribute("trend",e)}get trendValue(){return this.getAttribute("trend-value")}set trendValue(e){e===null?this.removeAttribute("trend-value"):this.setAttribute("trend-value",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=nt,e.appendChild(t),this._container=document.createElement("div"),this._container.className=st,this._labelEl=document.createElement("div"),this._labelEl.className="label",this._container.appendChild(this._labelEl),this._valueEl=document.createElement("div"),this._valueEl.className="value",this._container.appendChild(this._valueEl),this._descEl=document.createElement("div"),this._descEl.className="description",this._container.appendChild(this._descEl),this._trendEl=document.createElement("div"),this._trendEl.className="trend",this._container.appendChild(this._trendEl),e.appendChild(this._container),this._render()}attributeChangedCallback(e,t,r){(e==="label"||e==="value"||e==="description"||e==="size"||e==="variant"||e==="trend"||e==="trend-value")&&this._render()}_render(){this._labelEl.textContent=this.label??"",this._labelEl.style.display=this.label?"block":"none",this._valueEl.textContent=this.value??"",this._valueEl.style.display=this.value?"block":"none",this._descEl.textContent=this.description??"",this._descEl.style.display=this.description?"block":"none";let e=this.trend,t=this.trendValue;if(e&&t){this._trendEl.style.display="inline-flex",this._trendEl.className=`trend ${e==="up"?"positive":e==="down"?"negative":"neutral"}`;let r="";e==="up"?r="\u2191":e==="down"?r="\u2193":r="\u2192",this._trendEl.textContent=`${r} ${t}`}else this._trendEl.style.display="none"}},ot=`:host {
623
623
  display: inline-flex;
624
624
  vertical-align: middle;
625
625
  }
@@ -701,7 +701,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
701
701
  padding: 3px 8px;
702
702
  font-size: 0.75rem;
703
703
  }
704
- `,st="dt-badge-inner",at=class extends HTMLElement{static get observedAttributes(){return["variant","size","text"]}_container;_slot;get variant(){let e=this.getAttribute("variant");return e==="success"||e==="danger"||e==="warning"||e==="info"||e==="default"||e==="neutral"?e:"accent"}set variant(e){this.setAttribute("variant",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get text(){return this.getAttribute("text")}set text(e){e===null?this.removeAttribute("text"):this.setAttribute("text",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=nt,e.appendChild(t),this._container=document.createElement("span"),this._container.className=st;let r=this.text;r!==null?this._container.textContent=r:(this._slot=document.createElement("slot"),this._container.appendChild(this._slot)),e.appendChild(this._container)}attributeChangedCallback(e,t,r){e==="text"&&this._render()}_render(){let e=this.text;e!==null&&(this._container.textContent=e)}},ot=`:host {
704
+ `,lt="dt-badge-inner",dt=class extends HTMLElement{static get observedAttributes(){return["variant","size","text"]}_container;_slot;get variant(){let e=this.getAttribute("variant");return e==="success"||e==="danger"||e==="warning"||e==="info"||e==="default"||e==="neutral"?e:"accent"}set variant(e){this.setAttribute("variant",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get text(){return this.getAttribute("text")}set text(e){e===null?this.removeAttribute("text"):this.setAttribute("text",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=ot,e.appendChild(t),this._container=document.createElement("span"),this._container.className=lt;let r=this.text;r!==null?this._container.textContent=r:(this._slot=document.createElement("slot"),this._container.appendChild(this._slot)),e.appendChild(this._container)}attributeChangedCallback(e,t,r){e==="text"&&this._render()}_render(){let e=this.text;e!==null&&(this._container.textContent=e)}},ct=`:host {
705
705
  display: inline-flex;
706
706
  vertical-align: middle;
707
707
  }
@@ -863,7 +863,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
863
863
  width: 1em;
864
864
  height: 1em;
865
865
  }
866
- `,dt="dt-button-inner",lt=class extends HTMLElement{static get observedAttributes(){return["variant","size","disabled","fullwidth","type"]}_button;_slot;get variant(){let e=this.getAttribute("variant");return e==="secondary"||e==="ghost"||e==="danger"?e:"primary"}set variant(e){this.setAttribute("variant",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get fullwidth(){return this.hasAttribute("fullwidth")}set fullwidth(e){e?this.setAttribute("fullwidth",""):this.removeAttribute("fullwidth")}get type(){let e=this.getAttribute("type");return e==="submit"||e==="reset"?e:"button"}set type(e){this.setAttribute("type",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=ot,e.appendChild(t),this._button=document.createElement("button"),this._button.className=dt,this._button.type=this.type,this._button.disabled=this.disabled,this._slot=document.createElement("slot"),this._button.appendChild(this._slot),this._button.addEventListener("click",()=>{if(this.type==="submit"&&!this.disabled){let r=this.closest("form");r&&r.requestSubmit()}}),e.appendChild(this._button)}attributeChangedCallback(e,t,r){switch(e){case"disabled":this._button.disabled=this.disabled;break;case"type":this._button.type=this.type;break}}},ct=`:host {
866
+ `,ut="dt-button-inner",pt=class extends HTMLElement{static get observedAttributes(){return["variant","size","disabled","fullwidth","type"]}_button;_slot;get variant(){let e=this.getAttribute("variant");return e==="secondary"||e==="ghost"||e==="danger"?e:"primary"}set variant(e){this.setAttribute("variant",e)}get size(){let e=this.getAttribute("size");return e==="sm"||e==="lg"?e:"md"}set size(e){this.setAttribute("size",e)}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get fullwidth(){return this.hasAttribute("fullwidth")}set fullwidth(e){e?this.setAttribute("fullwidth",""):this.removeAttribute("fullwidth")}get type(){let e=this.getAttribute("type");return e==="submit"||e==="reset"?e:"button"}set type(e){this.setAttribute("type",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=ct,e.appendChild(t),this._button=document.createElement("button"),this._button.className=ut,this._button.type=this.type,this._button.disabled=this.disabled,this._slot=document.createElement("slot"),this._button.appendChild(this._slot),this._button.addEventListener("click",()=>{if(this.type==="submit"&&!this.disabled){let r=this.closest("form");r&&r.requestSubmit()}}),e.appendChild(this._button)}attributeChangedCallback(e,t,r){switch(e){case"disabled":this._button.disabled=this.disabled;break;case"type":this._button.type=this.type;break}}},ht=`:host {
867
867
  display: block;
868
868
  }
869
869
 
@@ -928,7 +928,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
928
928
  :host([direction='vertical'][spacing='lg']) .dt-divider-inner {
929
929
  margin: 0 18px;
930
930
  }
931
- `,ut="dt-divider-inner",ht=class extends HTMLElement{static get observedAttributes(){return["direction","style-variant","spacing"]}get direction(){return this.getAttribute("direction")==="vertical"?"vertical":"horizontal"}set direction(e){this.setAttribute("direction",e)}get styleVariant(){let e=this.getAttribute("style-variant");return e==="subtle"||e==="strong"?e:"default"}set styleVariant(e){this.setAttribute("style-variant",e)}get spacing(){let e=this.getAttribute("spacing");return e==="sm"||e==="md"||e==="lg"?e:null}set spacing(e){e===null?this.removeAttribute("spacing"):this.setAttribute("spacing",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=ct,e.appendChild(t);let r=document.createElement("hr");r.className=ut,e.appendChild(r)}},pt=`:host {
931
+ `,mt="dt-divider-inner",gt=class extends HTMLElement{static get observedAttributes(){return["direction","style-variant","spacing"]}get direction(){return this.getAttribute("direction")==="vertical"?"vertical":"horizontal"}set direction(e){this.setAttribute("direction",e)}get styleVariant(){let e=this.getAttribute("style-variant");return e==="subtle"||e==="strong"?e:"default"}set styleVariant(e){this.setAttribute("style-variant",e)}get spacing(){let e=this.getAttribute("spacing");return e==="sm"||e==="md"||e==="lg"?e:null}set spacing(e){e===null?this.removeAttribute("spacing"):this.setAttribute("spacing",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=ht,e.appendChild(t);let r=document.createElement("hr");r.className=mt,e.appendChild(r)}},bt=`:host {
932
932
  display: block;
933
933
  min-height: 180px;
934
934
  color: var(--dt-text);
@@ -1096,7 +1096,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
1096
1096
  letter-spacing: 0.08em;
1097
1097
  font-size: 0.75rem;
1098
1098
  }
1099
- `;function mt(e){return e==null||e===!1?null:e===!0?"":String(e)}function gt(e,t){let r=e.querySelectorAll("*");for(let i of r){let n=i.getAttribute("data-field");if(n){let s=t[n];i.textContent=s==null?"":String(s)}for(let s of i.getAttributeNames()){if(s==="data-field"||!s.startsWith("data-field-"))continue;let c=s.slice(11);if(!c)continue;let d=i.getAttribute(s);if(!d)continue;let a=mt(t[d]);a===null?i.removeAttribute(c):i.setAttribute(c,a)}}}function le(e,t){let r=e.content.cloneNode(!0);return gt(r,t),r}var ce=class{_count=0;_estimateSize=56;_overscan=5;_fixedSize=null;_viewportHeight=0;_scrollTop=0;_sizes=new Map;constructor(e={}){this._count=e.count??0,this._estimateSize=e.estimateSize??56,this._overscan=e.overscan??5,this._fixedSize=e.fixedSize??null}setCount(e){this._count=Math.max(0,e);for(let t of this._sizes.keys())t>=this._count&&this._sizes.delete(t)}setViewportHeight(e){this._viewportHeight=Math.max(0,e)}setScrollTop(e){this._scrollTop=Math.max(0,e)}setEstimateSize(e){this._estimateSize=Math.max(1,e)}setFixedSize(e){this._fixedSize=e&&e>0?e:null}resetMeasurements(){this._sizes.clear()}measure(e,t){if(this._fixedSize!==null||e<0||e>=this._count)return 0;let r=Math.max(1,Math.round(t)),i=this._sizes.get(e);return i===r?0:(this._sizes.set(e,r),this.getOffset(e+1)<=this._scrollTop?r-(i??this._estimateSize):0)}getOffset(e){if(e<=0)return 0;let t=Math.min(e,this._count);if(this._fixedSize!==null)return t*this._fixedSize;let r=0;for(let i=0;i<t;i+=1)r+=this._sizes.get(i)??this._estimateSize;return r}getTotalHeight(){return this.getOffset(this._count)}getRange(){if(this._count===0)return{start:0,end:0,paddingTop:0,paddingBottom:0,totalHeight:0};if(this._fixedSize!==null){let d=Math.max(1,Math.ceil(this._viewportHeight/this._fixedSize)),a=Math.max(0,Math.floor(this._scrollTop/this._fixedSize)-this._overscan),p=Math.min(this._count,a+d+this._overscan*2),b=a*this._fixedSize,h=this._count*this._fixedSize,u=Math.max(0,h-b-(p-a)*this._fixedSize);return{start:a,end:p,paddingTop:b,paddingBottom:u,totalHeight:h}}let e=0,t=0;for(;e<this._count;){let d=this._sizes.get(e)??this._estimateSize;if(t+d>this._scrollTop)break;t+=d,e+=1}e=Math.max(0,e-this._overscan);let r=this.getOffset(e),i=e,n=0;for(;i<this._count&&n<this._viewportHeight;)n+=this._sizes.get(i)??this._estimateSize,i+=1;i=Math.min(this._count,i+this._overscan);let s=this.getTotalHeight(),c=Math.max(0,s-this.getOffset(i));return{start:e,end:i,paddingTop:r,paddingBottom:c,totalHeight:s}}};function bt(e){return e&&typeof e=="object"?e:{value:e}}function vt(e){return e==="center"||e==="right"?e:"left"}var ue=class extends HTMLElement{static get observedAttributes(){return["field","header","width","min-width","align"]}get field(){return this.getAttribute("field")??""}get header(){return this.getAttribute("header")??this.field}get width(){return this.getAttribute("width")??"auto"}get minWidth(){return this.getAttribute("min-width")??"0"}get align(){return vt(this.getAttribute("align"))}connectedCallback(){this.hidden=!0}attributeChangedCallback(){this.dispatchEvent(new CustomEvent("dt-column-change",{bubbles:!0,composed:!0}))}},ft=class extends HTMLElement{_rows=[];_columns=[];_virtualizer=new ce({estimateSize:40,overscan:5,fixedSize:40});_root;_scroll;_header;_body;_canvas;_emptyState;_resizeObserver=null;_mutationObserver=null;_sortField=null;_sortDirection="asc";static get observedAttributes(){return["row-height","sortable","striped","bordered","empty-text"]}get rows(){return this._rows}set rows(e){this._rows=Array.isArray(e)?e:[],this._virtualizer.setCount(this._rows.length),this._render()}get rowHeight(){let e=Number(this.getAttribute("row-height")??"40");return Number.isFinite(e)&&e>0?e:40}set rowHeight(e){this.setAttribute("row-height",String(e))}get sortable(){return this.hasAttribute("sortable")}get emptyText(){return this.getAttribute("empty-text")??"No data"}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=pt,e.appendChild(t),this._root=document.createElement("div"),this._root.className="dt-table-view",this._scroll=document.createElement("div"),this._scroll.className="dt-table-scroll",this._scroll.addEventListener("scroll",this._onScroll,{passive:!0}),this._header=document.createElement("div"),this._header.className="dt-table-header",this._body=document.createElement("div"),this._body.className="dt-table-body",this._canvas=document.createElement("div"),this._canvas.className="dt-table-canvas",this._emptyState=document.createElement("div"),this._emptyState.className="dt-table-empty",this._body.append(this._canvas,this._emptyState),this._scroll.append(this._header,this._body),this._root.appendChild(this._scroll),e.appendChild(this._root)}connectedCallback(){this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight),this._syncColumns(),this._resizeObserver=new ResizeObserver(e=>{for(let t of e)if(t.target===this._scroll){let r=this._header.offsetHeight;this._virtualizer.setViewportHeight(Math.max(0,t.contentRect.height-r)),this._render()}}),this._resizeObserver.observe(this._scroll),this._mutationObserver=new MutationObserver(()=>{this._syncColumns(),this._render()}),this._mutationObserver.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["field","header","width","min-width","align"]}),this._virtualizer.setCount(this._rows.length),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight)),this._render()}disconnectedCallback(){this._scroll.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._mutationObserver?.disconnect(),this._resizeObserver=null,this._mutationObserver=null}attributeChangedCallback(e){e==="row-height"&&(this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight)),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._renderBody()};_syncColumns(){this._columns=Array.from(this.children).filter(e=>e instanceof ue).map(e=>({field:e.field,header:e.header,width:e.width,minWidth:e.minWidth,align:e.align,template:Array.from(e.children).find(t=>t instanceof HTMLTemplateElement)??null})).filter(e=>e.field)}_render(){if(!this.isConnected)return;this._emptyState.textContent=this.emptyText;let e=this._columns.length>0?this._columns.map(t=>this._toGridColumn(t)).join(" "):"minmax(0, 1fr)";this._header.style.setProperty("--dt-table-columns",e),this._canvas.style.setProperty("--dt-table-columns",e),this._renderHeader(),this._renderBody()}_renderHeader(){let e=document.createDocumentFragment();for(let t of this._columns){let r=document.createElement("div");r.className="dt-table-header-cell",r.dataset.align=t.align,this.sortable&&(r.classList.add("dt-table-header-cell--sortable"),r.tabIndex=0,r.setAttribute("role","button"),r.setAttribute("aria-label",`Sort by ${t.header}`),r.addEventListener("click",()=>this._requestSort(t.field)),r.addEventListener("keydown",n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),this._requestSort(t.field))}));let i=document.createElement("span");if(i.className="dt-table-header-label",i.textContent=t.header,this.sortable){let n=document.createElement("span");n.className="dt-table-sort-indicator",this._sortField===t.field?n.textContent=this._sortDirection==="asc"?"\u25B2":"\u25BC":n.textContent="\u2195",i.appendChild(n)}r.appendChild(i),e.appendChild(r)}this._header.replaceChildren(e)}_renderBody(){if(this._rows.length===0||this._columns.length===0){this._emptyState.hidden=!1,this._canvas.replaceChildren(),this._body.style.height="140px",this._canvas.style.height="0px";return}this._emptyState.hidden=!0,this._virtualizer.setCount(this._rows.length),this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight));let e=this._virtualizer.getRange();this._body.style.height=`${Math.max(e.totalHeight,this._scroll.clientHeight-this._header.offsetHeight)}px`,this._canvas.style.height=`${e.totalHeight}px`;let t=document.createDocumentFragment();for(let r=e.start;r<e.end;r+=1)t.appendChild(this._renderRow(r));this._canvas.replaceChildren(t)}_renderRow(e){let t=this._rows[e],r=document.createElement("div");r.className="dt-table-row dt-table-row--clickable",r.style.top=`${this._virtualizer.getOffset(e)}px`,r.style.height=`${this.rowHeight}px`,r.style.setProperty("--dt-table-columns",this._header.style.getPropertyValue("--dt-table-columns")),r.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("dt-row-click",{detail:{row:t,index:e},bubbles:!0,composed:!0}))});let i=bt(t);for(let n of this._columns){let s=document.createElement("div");if(s.className="dt-table-cell",s.dataset.align=n.align,n.template)s.appendChild(le(n.template,i));else{let c=i[n.field];s.textContent=c==null?"":String(c)}r.appendChild(s)}return r}_requestSort(e){this._sortField===e?this._sortDirection=this._sortDirection==="asc"?"desc":"asc":(this._sortField=e,this._sortDirection="asc"),this._renderHeader(),this.dispatchEvent(new CustomEvent("dt-sort",{detail:{field:e,direction:this._sortDirection},bubbles:!0,composed:!0}))}_toGridColumn(e){let t=/^\d+$/.test(e.minWidth)?`${e.minWidth}px`:e.minWidth;if(e.width==="auto")return`minmax(${t}, 1fr)`;let r=/^\d+$/.test(e.width)?`${e.width}px`:e.width;return`minmax(${t}, ${r})`}},_t=`:host {
1099
+ `;function vt(e){return e==null||e===!1?null:e===!0?"":String(e)}function ft(e,t){let r=e.querySelectorAll("*");for(let i of r){let n=i.getAttribute("data-field");if(n){let s=t[n];i.textContent=s==null?"":String(s)}for(let s of i.getAttributeNames()){if(s==="data-field"||!s.startsWith("data-field-"))continue;let l=s.slice(11);if(!l)continue;let u=i.getAttribute(s);if(!u)continue;let d=vt(t[u]);d===null?i.removeAttribute(l):i.setAttribute(l,d)}}}function ue(e,t){let r=e.content.cloneNode(!0);return ft(r,t),r}var pe=class{_count=0;_estimateSize=56;_overscan=5;_fixedSize=null;_viewportHeight=0;_scrollTop=0;_sizes=new Map;constructor(e={}){this._count=e.count??0,this._estimateSize=e.estimateSize??56,this._overscan=e.overscan??5,this._fixedSize=e.fixedSize??null}setCount(e){this._count=Math.max(0,e);for(let t of this._sizes.keys())t>=this._count&&this._sizes.delete(t)}setViewportHeight(e){this._viewportHeight=Math.max(0,e)}setScrollTop(e){this._scrollTop=Math.max(0,e)}setEstimateSize(e){this._estimateSize=Math.max(1,e)}setFixedSize(e){this._fixedSize=e&&e>0?e:null}resetMeasurements(){this._sizes.clear()}measure(e,t){if(this._fixedSize!==null||e<0||e>=this._count)return 0;let r=Math.max(1,Math.round(t)),i=this._sizes.get(e);return i===r?0:(this._sizes.set(e,r),this.getOffset(e+1)<=this._scrollTop?r-(i??this._estimateSize):0)}getOffset(e){if(e<=0)return 0;let t=Math.min(e,this._count);if(this._fixedSize!==null)return t*this._fixedSize;let r=0;for(let i=0;i<t;i+=1)r+=this._sizes.get(i)??this._estimateSize;return r}getTotalHeight(){return this.getOffset(this._count)}getRange(){if(this._count===0)return{start:0,end:0,paddingTop:0,paddingBottom:0,totalHeight:0};if(this._fixedSize!==null){let u=Math.max(1,Math.ceil(this._viewportHeight/this._fixedSize)),d=Math.max(0,Math.floor(this._scrollTop/this._fixedSize)-this._overscan),h=Math.min(this._count,d+u+this._overscan*2),m=d*this._fixedSize,c=this._count*this._fixedSize,p=Math.max(0,c-m-(h-d)*this._fixedSize);return{start:d,end:h,paddingTop:m,paddingBottom:p,totalHeight:c}}let e=0,t=0;for(;e<this._count;){let u=this._sizes.get(e)??this._estimateSize;if(t+u>this._scrollTop)break;t+=u,e+=1}e=Math.max(0,e-this._overscan);let r=this.getOffset(e),i=e,n=0;for(;i<this._count&&n<this._viewportHeight;)n+=this._sizes.get(i)??this._estimateSize,i+=1;i=Math.min(this._count,i+this._overscan);let s=this.getTotalHeight(),l=Math.max(0,s-this.getOffset(i));return{start:e,end:i,paddingTop:r,paddingBottom:l,totalHeight:s}}};function _t(e){return e&&typeof e=="object"?e:{value:e}}function yt(e){return e==="center"||e==="right"?e:"left"}var he=class extends HTMLElement{static get observedAttributes(){return["field","header","width","min-width","align"]}get field(){return this.getAttribute("field")??""}get header(){return this.getAttribute("header")??this.field}get width(){return this.getAttribute("width")??"auto"}get minWidth(){return this.getAttribute("min-width")??"0"}get align(){return yt(this.getAttribute("align"))}connectedCallback(){this.hidden=!0}attributeChangedCallback(){this.dispatchEvent(new CustomEvent("dt-column-change",{bubbles:!0,composed:!0}))}},xt=class extends HTMLElement{_rows=[];_columns=[];_virtualizer=new pe({estimateSize:40,overscan:5,fixedSize:40});_root;_scroll;_header;_body;_canvas;_emptyState;_resizeObserver=null;_mutationObserver=null;_sortField=null;_sortDirection="asc";static get observedAttributes(){return["row-height","sortable","striped","bordered","empty-text"]}get rows(){return this._rows}set rows(e){this._rows=Array.isArray(e)?e:[],this._virtualizer.setCount(this._rows.length),this._render()}get rowHeight(){let e=Number(this.getAttribute("row-height")??"40");return Number.isFinite(e)&&e>0?e:40}set rowHeight(e){this.setAttribute("row-height",String(e))}get sortable(){return this.hasAttribute("sortable")}get emptyText(){return this.getAttribute("empty-text")??"No data"}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=bt,e.appendChild(t),this._root=document.createElement("div"),this._root.className="dt-table-view",this._scroll=document.createElement("div"),this._scroll.className="dt-table-scroll",this._scroll.addEventListener("scroll",this._onScroll,{passive:!0}),this._header=document.createElement("div"),this._header.className="dt-table-header",this._body=document.createElement("div"),this._body.className="dt-table-body",this._canvas=document.createElement("div"),this._canvas.className="dt-table-canvas",this._emptyState=document.createElement("div"),this._emptyState.className="dt-table-empty",this._body.append(this._canvas,this._emptyState),this._scroll.append(this._header,this._body),this._root.appendChild(this._scroll),e.appendChild(this._root)}connectedCallback(){this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight),this._syncColumns(),this._resizeObserver=new ResizeObserver(e=>{for(let t of e)if(t.target===this._scroll){let r=this._header.offsetHeight;this._virtualizer.setViewportHeight(Math.max(0,t.contentRect.height-r)),this._render()}}),this._resizeObserver.observe(this._scroll),this._mutationObserver=new MutationObserver(()=>{this._syncColumns(),this._render()}),this._mutationObserver.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["field","header","width","min-width","align"]}),this._virtualizer.setCount(this._rows.length),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight)),this._render()}disconnectedCallback(){this._scroll.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._mutationObserver?.disconnect(),this._resizeObserver=null,this._mutationObserver=null}attributeChangedCallback(e){e==="row-height"&&(this._virtualizer.setFixedSize(this.rowHeight),this._virtualizer.setEstimateSize(this.rowHeight)),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._renderBody()};_syncColumns(){this._columns=Array.from(this.children).filter(e=>e instanceof he).map(e=>({field:e.field,header:e.header,width:e.width,minWidth:e.minWidth,align:e.align,template:Array.from(e.children).find(t=>t instanceof HTMLTemplateElement)??null})).filter(e=>e.field)}_render(){if(!this.isConnected)return;this._emptyState.textContent=this.emptyText;let e=this._columns.length>0?this._columns.map(t=>this._toGridColumn(t)).join(" "):"minmax(0, 1fr)";this._header.style.setProperty("--dt-table-columns",e),this._canvas.style.setProperty("--dt-table-columns",e),this._renderHeader(),this._renderBody()}_renderHeader(){let e=document.createDocumentFragment();for(let t of this._columns){let r=document.createElement("div");r.className="dt-table-header-cell",r.dataset.align=t.align,this.sortable&&(r.classList.add("dt-table-header-cell--sortable"),r.tabIndex=0,r.setAttribute("role","button"),r.setAttribute("aria-label",`Sort by ${t.header}`),r.addEventListener("click",()=>this._requestSort(t.field)),r.addEventListener("keydown",n=>{(n.key==="Enter"||n.key===" ")&&(n.preventDefault(),this._requestSort(t.field))}));let i=document.createElement("span");if(i.className="dt-table-header-label",i.textContent=t.header,this.sortable){let n=document.createElement("span");n.className="dt-table-sort-indicator",this._sortField===t.field?n.textContent=this._sortDirection==="asc"?"\u25B2":"\u25BC":n.textContent="\u2195",i.appendChild(n)}r.appendChild(i),e.appendChild(r)}this._header.replaceChildren(e)}_renderBody(){if(this._rows.length===0||this._columns.length===0){this._emptyState.hidden=!1,this._canvas.replaceChildren(),this._body.style.height="140px",this._canvas.style.height="0px";return}this._emptyState.hidden=!0,this._virtualizer.setCount(this._rows.length),this._virtualizer.setScrollTop(Math.max(0,this._scroll.scrollTop-this._header.offsetHeight)),this._virtualizer.setViewportHeight(Math.max(0,this._scroll.clientHeight-this._header.offsetHeight));let e=this._virtualizer.getRange();this._body.style.height=`${Math.max(e.totalHeight,this._scroll.clientHeight-this._header.offsetHeight)}px`,this._canvas.style.height=`${e.totalHeight}px`;let t=document.createDocumentFragment();for(let r=e.start;r<e.end;r+=1)t.appendChild(this._renderRow(r));this._canvas.replaceChildren(t)}_renderRow(e){let t=this._rows[e],r=document.createElement("div");r.className="dt-table-row dt-table-row--clickable",r.style.top=`${this._virtualizer.getOffset(e)}px`,r.style.height=`${this.rowHeight}px`,r.style.setProperty("--dt-table-columns",this._header.style.getPropertyValue("--dt-table-columns")),r.addEventListener("click",()=>{this.dispatchEvent(new CustomEvent("dt-row-click",{detail:{row:t,index:e},bubbles:!0,composed:!0}))});let i=_t(t);for(let n of this._columns){let s=document.createElement("div");if(s.className="dt-table-cell",s.dataset.align=n.align,n.template)s.appendChild(ue(n.template,i));else{let l=i[n.field];s.textContent=l==null?"":String(l)}r.appendChild(s)}return r}_requestSort(e){this._sortField===e?this._sortDirection=this._sortDirection==="asc"?"desc":"asc":(this._sortField=e,this._sortDirection="asc"),this._renderHeader(),this.dispatchEvent(new CustomEvent("dt-sort",{detail:{field:e,direction:this._sortDirection},bubbles:!0,composed:!0}))}_toGridColumn(e){let t=/^\d+$/.test(e.minWidth)?`${e.minWidth}px`:e.minWidth;if(e.width==="auto")return`minmax(${t}, 1fr)`;let r=/^\d+$/.test(e.width)?`${e.width}px`:e.width;return`minmax(${t}, ${r})`}},wt=`:host {
1100
1100
  display: block;
1101
1101
  min-height: 120px;
1102
1102
  color: var(--dt-text);
@@ -1195,7 +1195,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
1195
1195
  letter-spacing: 0.08em;
1196
1196
  font-size: 0.75rem;
1197
1197
  }
1198
- `,he=56;function yt(e){return e&&typeof e=="object"?e:{value:e}}var xt=class extends HTMLElement{_items=[];_selectedIndices=new Set;_renderItem=null;_virtualizer=new ce({estimateSize:he,overscan:5});_viewport;_spacer;_itemsLayer;_emptyState;_resizeObserver=null;_itemResizeObserver=null;static get observedAttributes(){return["item-height","dividers","selectable","empty-text"]}get items(){return this._items}set items(e){this._items=Array.isArray(e)?e:[],this._selectedIndices=new Set([...this._selectedIndices].filter(t=>t<this._items.length)),this._virtualizer.setCount(this._items.length),this._syncSizingMode(!0),this._render()}get selectedItems(){return[...this._selectedIndices].sort((e,t)=>e-t).map(e=>this._items[e])}get renderItem(){return this._renderItem}set renderItem(e){this._renderItem=typeof e=="function"?e:null,this._render()}get itemHeight(){let e=this.getAttribute("item-height");if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}set itemHeight(e){if(e===null||e<=0){this.removeAttribute("item-height");return}this.setAttribute("item-height",String(e))}get selectable(){let e=this.getAttribute("selectable");return e==="single"||e==="multi"?e:"none"}set selectable(e){this.setAttribute("selectable",e)}get emptyText(){return this.getAttribute("empty-text")??"No items"}set emptyText(e){this.setAttribute("empty-text",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=_t,e.appendChild(t),this._viewport=document.createElement("div"),this._viewport.className="dt-list-view",this._viewport.addEventListener("scroll",this._onScroll,{passive:!0}),this._spacer=document.createElement("div"),this._spacer.className="dt-list-spacer",this._itemsLayer=document.createElement("div"),this._itemsLayer.className="dt-list-items",this._emptyState=document.createElement("div"),this._emptyState.className="dt-list-empty",this._spacer.append(this._itemsLayer,this._emptyState),this._viewport.appendChild(this._spacer),e.appendChild(this._viewport)}connectedCallback(){this._resizeObserver=new ResizeObserver(e=>{for(let t of e)t.target===this._viewport&&(this._virtualizer.setViewportHeight(t.contentRect.height),this._render())}),this._resizeObserver.observe(this._viewport),this._itemResizeObserver=new ResizeObserver(e=>{let t=0;for(let r of e){let i=r.target,n=Number(i.dataset.index);Number.isFinite(n)&&(t+=this._virtualizer.measure(n,r.contentRect.height))}t!==0&&(this._viewport.scrollTop+=t),e.length>0&&this._render()}),this._virtualizer.setCount(this._items.length),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._syncSizingMode(!1),this._render()}disconnectedCallback(){this._viewport.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._itemResizeObserver?.disconnect(),this._resizeObserver=null,this._itemResizeObserver=null}attributeChangedCallback(e){e==="item-height"&&this._syncSizingMode(!0),e==="selectable"&&this.selectable==="none"&&this._selectedIndices.size>0&&(this._selectedIndices.clear(),this._emitSelectionChange()),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(this._viewport.scrollTop),this._render()};_syncSizingMode(e){let t=this.itemHeight;this._virtualizer.setFixedSize(t),this._virtualizer.setEstimateSize(t??he),e&&this._virtualizer.resetMeasurements()}_render(){if(!this.isConnected)return;if(this._emptyState.textContent=this.emptyText,this._emptyState.hidden=this._items.length>0,this._items.length===0){this._itemsLayer.replaceChildren(),this._spacer.style.height="100%";return}this._virtualizer.setScrollTop(this._viewport.scrollTop),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._virtualizer.setCount(this._items.length);let e=this._virtualizer.getRange();this._spacer.style.height=`${Math.max(e.totalHeight,this._viewport.clientHeight)}px`,this._itemsLayer.style.transform=`translateY(${e.paddingTop}px)`;let t=document.createDocumentFragment();for(let r=e.start;r<e.end;r+=1)t.appendChild(this._renderVisibleItem(r));this._itemsLayer.replaceChildren(t)}_renderVisibleItem(e){let t=this._items[e],r=document.createElement("div");if(r.className="dt-list-item",r.dataset.index=String(e),this.selectable!=="none"&&(r.classList.add("dt-list-item--interactive"),r.setAttribute("role","option"),r.setAttribute("aria-selected",String(this._selectedIndices.has(e))),r.tabIndex=0),this._selectedIndices.has(e)&&r.classList.add("dt-list-item--selected"),this.itemHeight!==null&&(r.style.minHeight=`${this.itemHeight}px`),this._renderItem)this._renderItem(t,r,e);else{let i=this._getTemplate();i?r.appendChild(le(i,yt(t))):r.textContent=String(t??"")}return r.addEventListener("click",()=>this._handleItemClick(e)),r.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this._handleItemClick(e))}),this.itemHeight===null&&this._itemResizeObserver?.observe(r),r}_handleItemClick(e){let t=this._items[e],r=this.selectable;r==="single"?(this._selectedIndices=new Set([e]),this._emitSelectionChange(),this._render()):r==="multi"&&(this._selectedIndices.has(e)?this._selectedIndices.delete(e):this._selectedIndices.add(e),this._emitSelectionChange(),this._render()),this.dispatchEvent(new CustomEvent("dt-item-click",{detail:{item:t,index:e},bubbles:!0,composed:!0}))}_emitSelectionChange(){this.dispatchEvent(new CustomEvent("dt-selection-change",{detail:{selected:this.selectedItems},bubbles:!0,composed:!0}))}_getTemplate(){for(let e of Array.from(this.children))if(e instanceof HTMLTemplateElement)return e;return null}},wt=`:host {
1198
+ `,me=56;function kt(e){return e&&typeof e=="object"?e:{value:e}}var At=class extends HTMLElement{_items=[];_selectedIndices=new Set;_renderItem=null;_virtualizer=new pe({estimateSize:me,overscan:5});_viewport;_spacer;_itemsLayer;_emptyState;_resizeObserver=null;_itemResizeObserver=null;static get observedAttributes(){return["item-height","dividers","selectable","empty-text"]}get items(){return this._items}set items(e){this._items=Array.isArray(e)?e:[],this._selectedIndices=new Set([...this._selectedIndices].filter(t=>t<this._items.length)),this._virtualizer.setCount(this._items.length),this._syncSizingMode(!0),this._render()}get selectedItems(){return[...this._selectedIndices].sort((e,t)=>e-t).map(e=>this._items[e])}get renderItem(){return this._renderItem}set renderItem(e){this._renderItem=typeof e=="function"?e:null,this._render()}get itemHeight(){let e=this.getAttribute("item-height");if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>0?t:null}set itemHeight(e){if(e===null||e<=0){this.removeAttribute("item-height");return}this.setAttribute("item-height",String(e))}get selectable(){let e=this.getAttribute("selectable");return e==="single"||e==="multi"?e:"none"}set selectable(e){this.setAttribute("selectable",e)}get emptyText(){return this.getAttribute("empty-text")??"No items"}set emptyText(e){this.setAttribute("empty-text",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=wt,e.appendChild(t),this._viewport=document.createElement("div"),this._viewport.className="dt-list-view",this._viewport.addEventListener("scroll",this._onScroll,{passive:!0}),this._spacer=document.createElement("div"),this._spacer.className="dt-list-spacer",this._itemsLayer=document.createElement("div"),this._itemsLayer.className="dt-list-items",this._emptyState=document.createElement("div"),this._emptyState.className="dt-list-empty",this._spacer.append(this._itemsLayer,this._emptyState),this._viewport.appendChild(this._spacer),e.appendChild(this._viewport)}connectedCallback(){this._resizeObserver=new ResizeObserver(e=>{for(let t of e)t.target===this._viewport&&(this._virtualizer.setViewportHeight(t.contentRect.height),this._render())}),this._resizeObserver.observe(this._viewport),this._itemResizeObserver=new ResizeObserver(e=>{let t=0;for(let r of e){let i=r.target,n=Number(i.dataset.index);Number.isFinite(n)&&(t+=this._virtualizer.measure(n,r.contentRect.height))}t!==0&&(this._viewport.scrollTop+=t),e.length>0&&this._render()}),this._virtualizer.setCount(this._items.length),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._syncSizingMode(!1),this._render()}disconnectedCallback(){this._viewport.removeEventListener("scroll",this._onScroll),this._resizeObserver?.disconnect(),this._itemResizeObserver?.disconnect(),this._resizeObserver=null,this._itemResizeObserver=null}attributeChangedCallback(e){e==="item-height"&&this._syncSizingMode(!0),e==="selectable"&&this.selectable==="none"&&this._selectedIndices.size>0&&(this._selectedIndices.clear(),this._emitSelectionChange()),this._render()}_onScroll=()=>{this._virtualizer.setScrollTop(this._viewport.scrollTop),this._render()};_syncSizingMode(e){let t=this.itemHeight;this._virtualizer.setFixedSize(t),this._virtualizer.setEstimateSize(t??me),e&&this._virtualizer.resetMeasurements()}_render(){if(!this.isConnected)return;if(this._emptyState.textContent=this.emptyText,this._emptyState.hidden=this._items.length>0,this._items.length===0){this._itemsLayer.replaceChildren(),this._spacer.style.height="100%";return}this._virtualizer.setScrollTop(this._viewport.scrollTop),this._virtualizer.setViewportHeight(this._viewport.clientHeight),this._virtualizer.setCount(this._items.length);let e=this._virtualizer.getRange();this._spacer.style.height=`${Math.max(e.totalHeight,this._viewport.clientHeight)}px`,this._itemsLayer.style.transform=`translateY(${e.paddingTop}px)`;let t=document.createDocumentFragment();for(let r=e.start;r<e.end;r+=1)t.appendChild(this._renderVisibleItem(r));this._itemsLayer.replaceChildren(t)}_renderVisibleItem(e){let t=this._items[e],r=document.createElement("div");if(r.className="dt-list-item",r.dataset.index=String(e),this.selectable!=="none"&&(r.classList.add("dt-list-item--interactive"),r.setAttribute("role","option"),r.setAttribute("aria-selected",String(this._selectedIndices.has(e))),r.tabIndex=0),this._selectedIndices.has(e)&&r.classList.add("dt-list-item--selected"),this.itemHeight!==null&&(r.style.minHeight=`${this.itemHeight}px`),this._renderItem)this._renderItem(t,r,e);else{let i=this._getTemplate();i?r.appendChild(ue(i,kt(t))):r.textContent=String(t??"")}return r.addEventListener("click",()=>this._handleItemClick(e)),r.addEventListener("keydown",i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this._handleItemClick(e))}),this.itemHeight===null&&this._itemResizeObserver?.observe(r),r}_handleItemClick(e){let t=this._items[e],r=this.selectable;r==="single"?(this._selectedIndices=new Set([e]),this._emitSelectionChange(),this._render()):r==="multi"&&(this._selectedIndices.has(e)?this._selectedIndices.delete(e):this._selectedIndices.add(e),this._emitSelectionChange(),this._render()),this.dispatchEvent(new CustomEvent("dt-item-click",{detail:{item:t,index:e},bubbles:!0,composed:!0}))}_emitSelectionChange(){this.dispatchEvent(new CustomEvent("dt-selection-change",{detail:{selected:this.selectedItems},bubbles:!0,composed:!0}))}_getTemplate(){for(let e of Array.from(this.children))if(e instanceof HTMLTemplateElement)return e;return null}},Ct=`:host {
1199
1199
  display: block;
1200
1200
  min-height: 220px;
1201
1201
  color: var(--dt-text);
@@ -1282,7 +1282,7 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
1282
1282
  .dt-chart__status[hidden] {
1283
1283
  display: none;
1284
1284
  }
1285
- `,W=null;function kt(){return window.__DtChart?Promise.resolve(window.__DtChart):W||(W=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/chart.umd.js",r.async=!0,r.dataset.dtChart="true",r.onload=()=>{if(window.__DtChart){e(window.__DtChart);return}t(new Error("Chart runtime loaded without a __DtChart export."))},r.onerror=()=>t(new Error("Failed to load the Chart.js runtime bundle.")),document.head.appendChild(r)}),W)}function R(e,t,r){return Math.min(r,Math.max(t,e))}function At(e){return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}function q(e){let t=e.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(t){let n=t[1],s=n.length===3?n.split("").map(p=>`${p}${p}`).join(""):n,c=parseInt(s.slice(0,2),16)/255,d=parseInt(s.slice(2,4),16)/255,a=parseInt(s.slice(4,6),16)/255;return pe(c,d,a)}let r=e.trim().match(/^rgba?\((\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)(?:[,/\s]+[\d.]+)?\)$/i);if(r)return pe(Number(r[1])/255,Number(r[2])/255,Number(r[3])/255);let i=e.trim().match(/^hsla?\(([-\d.]+)(?:deg)?[,\s]+([\d.]+)%[,\s]+([\d.]+)%(?:[,/\s]+[\d.]+)?\)$/i);return i?{h:(Number(i[1])%360+360)%360,s:R(Number(i[2]),0,100),l:R(Number(i[3]),0,100)}:null}function pe(e,t,r){let i=Math.max(e,t,r),n=Math.min(e,t,r),s=i-n,c=0,d=(i+n)/2,a=s===0?0:s/(1-Math.abs(2*d-1));if(s!==0)switch(i){case e:c=60*((t-r)/s%6);break;case t:c=60*((r-e)/s+2);break;default:c=60*((e-t)/s+4);break}return{h:(c+360)%360,s:Math.round(a*100),l:Math.round(d*100)}}function L(e,t=1){return`hsla(${Math.round(e.h)} ${Math.round(e.s)}% ${Math.round(e.l)}% / ${t})`}function Ct(e){let t=q(e)??{h:185,s:88,l:56};return[0,32,68,118,164,212,258,304].map((r,i)=>({h:(t.h+r)%360,s:R(t.s-i*2,55,90),l:R(t.l+(i%2===0?0:6)-i,38,66)}))}function V(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function me(e,t){if(!V(e)||!V(t))return t??e;let r={...e};for(let[i,n]of Object.entries(t)){let s=r[i];r[i]=V(s)&&V(n)?me(s,n):n}return r}function Et(e){return e==="top"||e==="bottom"||e==="left"||e==="right"?e:"none"}function St(e){return e==="bar"||e==="line"||e==="area"||e==="pie"||e==="doughnut"||e==="radar"||e==="scatter"||e==="bubble"?e:"bar"}function zt(e){return e==="bar"||e==="line"||e==="area"||e==="scatter"||e==="bubble"}function Pt(e){return e.map(t=>t.trim()).filter(Boolean)}var Mt=class extends HTMLElement{_canvas;_status;_runtime=null;_loadPromise=null;_chart=null;_renderedType=null;_dataInput=null;_optionsOverride=null;_syncFrame=0;static get observedAttributes(){return["type","legend","stacked","labels"]}get type(){return St(this.getAttribute("type"))}set type(e){this.setAttribute("type",e)}get legend(){return Et(this.getAttribute("legend"))}set legend(e){this.setAttribute("legend",e)}get stacked(){return this.hasAttribute("stacked")}set stacked(e){this.toggleAttribute("stacked",e)}get labels(){return Pt(At(this.getAttribute("labels")))}set labels(e){this.setAttribute("labels",e.join(","))}get data(){return this._dataInput}set data(e){this._dataInput=e?structuredClone(e):null,this._scheduleSync()}get options(){return this._optionsOverride}set options(e){this._optionsOverride=e?structuredClone(e):null,this._renderChart()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=wt,e.appendChild(t);let r=document.createElement("div");r.className="dt-chart",this._canvas=document.createElement("canvas"),this._canvas.className="dt-chart__canvas",this._status=document.createElement("div"),this._status.className="dt-chart__status",this._status.textContent="Loading chart",r.append(this._canvas,this._status),e.appendChild(r)}connectedCallback(){this._canvas.addEventListener("click",this._handleCanvasClick),this._ensureRuntime().then(()=>this._renderChart()),this._scheduleSync()}disconnectedCallback(){this._canvas.removeEventListener("click",this._handleCanvasClick),this._syncFrame!==0&&(cancelAnimationFrame(this._syncFrame),this._syncFrame=0),this._chart?.destroy(),this._chart=null,this._renderedType=null}attributeChangedCallback(){this._scheduleSync()}_handleCanvasClick=e=>{if(!this._chart)return;let t=this._chart.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0)[0];if(!t)return;let r=Array.isArray(this._chart.data.labels)?this._chart.data.labels[t.index]??null:null,i=this._chart.data.datasets[t.datasetIndex],n=Array.isArray(i?.data)?i.data[t.index]:void 0;this.dispatchEvent(new CustomEvent("dt-chart-click",{bubbles:!0,composed:!0,detail:{label:r,datasetIndex:t.datasetIndex,index:t.index,value:n}}))};_scheduleSync(){this._syncFrame===0&&(this._syncFrame=requestAnimationFrame(()=>{this._syncFrame=0,this._syncFromCurrentSource()}))}_syncFromCurrentSource(){this._renderChart()}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=kt().then(e=>(this._runtime=e,e))),this._loadPromise)}async _renderChart(){let e=this._dataInput;if(!e){this._setStatus("Waiting for data");return}let t=await this._ensureRuntime(),r=this._buildConfig(t,e),i=r.type;!this._chart||this._renderedType!==i?(this._chart?.destroy(),this._chart=new t.Chart(this._canvas,r),this._renderedType=i):(this._chart.data=r.data,this._chart.options=r.options,this._chart.update()),this._setStatus(e.datasets.length>0?null:"Waiting for data")}_buildConfig(e,t){let r=getComputedStyle(this),i=r.getPropertyValue("--dt-accent").trim()||"#42d4ff",n=r.getPropertyValue("--dt-text").trim()||"#d6ebff",s=r.getPropertyValue("--dt-text-muted").trim()||"#7b93a6",c=r.getPropertyValue("--dt-border").trim()||"rgba(123, 147, 166, 0.3)",d=r.getPropertyValue("--font-mono").trim()||"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace",a=Ct(i),p=this.type==="area"?"line":this.type,b={labels:t.labels??this.labels,datasets:t.datasets.map((u,y)=>{let C=a[y%a.length],w=u.color??L(C,1),A={label:u.label??"",data:u.data,backgroundColor:p==="line"||p==="radar"||p==="scatter"?L(C,p==="scatter"?.95:.24):w,borderColor:w,pointBackgroundColor:w,pointBorderColor:w,pointHoverBackgroundColor:w,pointRadius:this.type==="line"||this.type==="area"?3:4,pointHoverRadius:this.type==="line"||this.type==="area"?5:6,borderWidth:2,tension:p==="line"||this.type==="area"?.32:void 0,fill:this.type==="area"};return p==="pie"||p==="doughnut"?{...A,backgroundColor:Array.isArray(u.data)?u.data.map((g,m)=>L(a[m%a.length],.86)):w,borderColor:Array.isArray(u.data)?u.data.map((g,m)=>L(a[m%a.length],1)):w,borderWidth:1}:p==="scatter"||p==="bubble"?{...A,showLine:!1,backgroundColor:L(C,.78)}:A})},h={responsive:!0,maintainAspectRatio:!1,animation:{duration:320},interaction:{mode:"nearest",intersect:!0},plugins:{legend:{display:this.legend!=="none",position:this.legend==="none"?"top":this.legend,labels:{color:n,boxWidth:12,boxHeight:12,padding:14,font:{family:d,size:11}}},tooltip:{backgroundColor:"rgba(10, 18, 24, 0.92)",borderColor:Nt(c,i,.35),borderWidth:1,titleColor:n,bodyColor:n,footerColor:s,titleFont:{family:d,size:11},bodyFont:{family:d,size:11},padding:10}},scales:zt(this.type)?{x:{stacked:this.stacked,grid:{display:!1,color:c},border:{color:c},ticks:{color:s,font:{family:d,size:11}}},y:{stacked:this.stacked,beginAtZero:!0,grid:{display:!1,color:c},border:{color:c},ticks:{color:s,font:{family:d,size:11}}}}:p==="radar"?{r:{angleLines:{color:c},grid:{color:c},pointLabels:{color:s,font:{family:d,size:11}},ticks:{color:s,backdropColor:"transparent",font:{family:d,size:10}}}}:void 0};return{type:p,data:b,options:me(h,this._optionsOverride??{})}}_setStatus(e){if(!e){this._status.hidden=!0;return}this._status.hidden=!1,this._status.textContent=e}};function Nt(e,t,r){let i=q(e),n=q(t);if(!i||!n)return e;let s=R(r,0,1),c=((n.h-i.h)%360+540)%360-180;return L({h:(i.h+c*s+360)%360,s:i.s+(n.s-i.s)*s,l:i.l+(n.l-i.l)*s})}var Tt=`:host {
1285
+ `,j=null;function Et(){return window.__DtChart?Promise.resolve(window.__DtChart):j||(j=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/chart.umd.js",r.async=!0,r.dataset.dtChart="true",r.onload=()=>{if(window.__DtChart){e(window.__DtChart);return}t(new Error("Chart runtime loaded without a __DtChart export."))},r.onerror=()=>t(new Error("Failed to load the Chart.js runtime bundle.")),document.head.appendChild(r)}),j)}function H(e,t,r){return Math.min(r,Math.max(t,e))}function St(e){return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}function G(e){let t=e.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(t){let n=t[1],s=n.length===3?n.split("").map(h=>`${h}${h}`).join(""):n,l=parseInt(s.slice(0,2),16)/255,u=parseInt(s.slice(2,4),16)/255,d=parseInt(s.slice(4,6),16)/255;return ge(l,u,d)}let r=e.trim().match(/^rgba?\((\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)[,\s]+(\d+(?:\.\d+)?)(?:[,/\s]+[\d.]+)?\)$/i);if(r)return ge(Number(r[1])/255,Number(r[2])/255,Number(r[3])/255);let i=e.trim().match(/^hsla?\(([-\d.]+)(?:deg)?[,\s]+([\d.]+)%[,\s]+([\d.]+)%(?:[,/\s]+[\d.]+)?\)$/i);return i?{h:(Number(i[1])%360+360)%360,s:H(Number(i[2]),0,100),l:H(Number(i[3]),0,100)}:null}function ge(e,t,r){let i=Math.max(e,t,r),n=Math.min(e,t,r),s=i-n,l=0,u=(i+n)/2,d=s===0?0:s/(1-Math.abs(2*u-1));if(s!==0)switch(i){case e:l=60*((t-r)/s%6);break;case t:l=60*((r-e)/s+2);break;default:l=60*((e-t)/s+4);break}return{h:(l+360)%360,s:Math.round(d*100),l:Math.round(u*100)}}function I(e,t=1){return`hsla(${Math.round(e.h)} ${Math.round(e.s)}% ${Math.round(e.l)}% / ${t})`}function Pt(e){let t=G(e)??{h:185,s:88,l:56};return[0,32,68,118,164,212,258,304].map((r,i)=>({h:(t.h+r)%360,s:H(t.s-i*2,55,90),l:H(t.l+(i%2===0?0:6)-i,38,66)}))}function $(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function be(e,t){if(!$(e)||!$(t))return t??e;let r={...e};for(let[i,n]of Object.entries(t)){let s=r[i];r[i]=$(s)&&$(n)?be(s,n):n}return r}function zt(e){return e==="top"||e==="bottom"||e==="left"||e==="right"?e:"none"}function Mt(e){return e==="bar"||e==="line"||e==="area"||e==="pie"||e==="doughnut"||e==="radar"||e==="scatter"||e==="bubble"?e:"bar"}function Nt(e){return e==="bar"||e==="line"||e==="area"||e==="scatter"||e==="bubble"}function Tt(e){return e.map(t=>t.trim()).filter(Boolean)}var Lt=class extends HTMLElement{_canvas;_status;_runtime=null;_loadPromise=null;_chart=null;_renderedType=null;_dataInput=null;_optionsOverride=null;_syncFrame=0;static get observedAttributes(){return["type","legend","stacked","labels"]}get type(){return Mt(this.getAttribute("type"))}set type(e){this.setAttribute("type",e)}get legend(){return zt(this.getAttribute("legend"))}set legend(e){this.setAttribute("legend",e)}get stacked(){return this.hasAttribute("stacked")}set stacked(e){this.toggleAttribute("stacked",e)}get labels(){return Tt(St(this.getAttribute("labels")))}set labels(e){this.setAttribute("labels",e.join(","))}get data(){return this._dataInput}set data(e){this._dataInput=e?structuredClone(e):null,this._scheduleSync()}get options(){return this._optionsOverride}set options(e){this._optionsOverride=e?structuredClone(e):null,this._renderChart()}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Ct,e.appendChild(t);let r=document.createElement("div");r.className="dt-chart",this._canvas=document.createElement("canvas"),this._canvas.className="dt-chart__canvas",this._status=document.createElement("div"),this._status.className="dt-chart__status",this._status.textContent="Loading chart",r.append(this._canvas,this._status),e.appendChild(r)}connectedCallback(){this._canvas.addEventListener("click",this._handleCanvasClick),this._ensureRuntime().then(()=>this._renderChart()),this._scheduleSync()}disconnectedCallback(){this._canvas.removeEventListener("click",this._handleCanvasClick),this._syncFrame!==0&&(cancelAnimationFrame(this._syncFrame),this._syncFrame=0),this._chart?.destroy(),this._chart=null,this._renderedType=null}attributeChangedCallback(){this._scheduleSync()}_handleCanvasClick=e=>{if(!this._chart)return;let t=this._chart.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0)[0];if(!t)return;let r=Array.isArray(this._chart.data.labels)?this._chart.data.labels[t.index]??null:null,i=this._chart.data.datasets[t.datasetIndex],n=Array.isArray(i?.data)?i.data[t.index]:void 0;this.dispatchEvent(new CustomEvent("dt-chart-click",{bubbles:!0,composed:!0,detail:{label:r,datasetIndex:t.datasetIndex,index:t.index,value:n}}))};_scheduleSync(){this._syncFrame===0&&(this._syncFrame=requestAnimationFrame(()=>{this._syncFrame=0,this._syncFromCurrentSource()}))}_syncFromCurrentSource(){this._renderChart()}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=Et().then(e=>(this._runtime=e,e))),this._loadPromise)}async _renderChart(){let e=this._dataInput;if(!e){this._setStatus("Waiting for data");return}let t=await this._ensureRuntime(),r=this._buildConfig(t,e),i=r.type;!this._chart||this._renderedType!==i?(this._chart?.destroy(),this._chart=new t.Chart(this._canvas,r),this._renderedType=i):(this._chart.data=r.data,this._chart.options=r.options,this._chart.update()),this._setStatus(e.datasets.length>0?null:"Waiting for data")}_buildConfig(e,t){let r=getComputedStyle(this),i=r.getPropertyValue("--dt-accent").trim()||"#42d4ff",n=r.getPropertyValue("--dt-text").trim()||"#d6ebff",s=r.getPropertyValue("--dt-text-muted").trim()||"#7b93a6",l=r.getPropertyValue("--dt-border").trim()||"rgba(123, 147, 166, 0.3)",u=r.getPropertyValue("--font-mono").trim()||"'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace",d=Pt(i),h=this.type==="area"?"line":this.type,m={labels:t.labels??this.labels,datasets:t.datasets.map((p,y)=>{let k=d[y%d.length],E=p.color??I(k,1),C={label:p.label??"",data:p.data,backgroundColor:h==="line"||h==="radar"||h==="scatter"?I(k,h==="scatter"?.95:.24):E,borderColor:E,pointBackgroundColor:E,pointBorderColor:E,pointHoverBackgroundColor:E,pointRadius:this.type==="line"||this.type==="area"?3:4,pointHoverRadius:this.type==="line"||this.type==="area"?5:6,borderWidth:2,tension:h==="line"||this.type==="area"?.32:void 0,fill:this.type==="area"};return h==="pie"||h==="doughnut"?{...C,backgroundColor:Array.isArray(p.data)?p.data.map((v,g)=>I(d[g%d.length],.86)):E,borderColor:Array.isArray(p.data)?p.data.map((v,g)=>I(d[g%d.length],1)):E,borderWidth:1}:h==="scatter"||h==="bubble"?{...C,showLine:!1,backgroundColor:I(k,.78)}:C})},c={responsive:!0,maintainAspectRatio:!1,animation:{duration:320},interaction:{mode:"nearest",intersect:!0},plugins:{legend:{display:this.legend!=="none",position:this.legend==="none"?"top":this.legend,labels:{color:n,boxWidth:12,boxHeight:12,padding:14,font:{family:u,size:11}}},tooltip:{backgroundColor:"rgba(10, 18, 24, 0.92)",borderColor:Rt(l,i,.35),borderWidth:1,titleColor:n,bodyColor:n,footerColor:s,titleFont:{family:u,size:11},bodyFont:{family:u,size:11},padding:10}},scales:Nt(this.type)?{x:{stacked:this.stacked,grid:{display:!1,color:l},border:{color:l},ticks:{color:s,font:{family:u,size:11}}},y:{stacked:this.stacked,beginAtZero:!0,grid:{display:!1,color:l},border:{color:l},ticks:{color:s,font:{family:u,size:11}}}}:h==="radar"?{r:{angleLines:{color:l},grid:{color:l},pointLabels:{color:s,font:{family:u,size:11}},ticks:{color:s,backdropColor:"transparent",font:{family:u,size:10}}}}:void 0};return{type:h,data:m,options:be(c,this._optionsOverride??{})}}_setStatus(e){if(!e){this._status.hidden=!0;return}this._status.hidden=!1,this._status.textContent=e}};function Rt(e,t,r){let i=G(e),n=G(t);if(!i||!n)return e;let s=H(r,0,1),l=((n.h-i.h)%360+540)%360-180;return I({h:(i.h+l*s+360)%360,s:i.s+(n.s-i.s)*s,l:i.l+(n.l-i.l)*s})}var It=`:host {
1286
1286
  display: block;
1287
1287
  color: var(--dt-text);
1288
1288
  font-family: var(--font-sans, 'Inter', sans-serif);
@@ -1454,13 +1454,13 @@ import{__dtLocalize as J}from"@desktalk/sdk";var _=window.React,dr=_.Children,lr
1454
1454
  opacity: 0;
1455
1455
  }
1456
1456
  }
1457
- `,j=null;function Lt(){return window.__DtMarked?Promise.resolve(window.__DtMarked):j||(j=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/marked.js",r.async=!0,r.dataset.dtMarked="true",r.onload=()=>{if(window.__DtMarked){e(window.__DtMarked);return}t(new Error("Marked runtime loaded without a __DtMarked export."))},r.onerror=()=>t(new Error("Failed to load the marked runtime bundle.")),document.head.appendChild(r)}),j)}function ge(e){return e.replaceAll(`\r
1457
+ `,Y=null;function Ht(){return window.__DtMarked?Promise.resolve(window.__DtMarked):Y||(Y=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/marked.js",r.async=!0,r.dataset.dtMarked="true",r.onload=()=>{if(window.__DtMarked){e(window.__DtMarked);return}t(new Error("Marked runtime loaded without a __DtMarked export."))},r.onerror=()=>t(new Error("Failed to load the marked runtime bundle.")),document.head.appendChild(r)}),Y)}function ve(e){return e.replaceAll(`\r
1458
1458
  `,`
1459
- `)}function Rt(e){let t=ge(e).split(`
1459
+ `)}function Vt(e){let t=ve(e).split(`
1460
1460
  `);for(;t.length>0&&t[0].trim()==="";)t.shift();for(;t.length>0&&t[t.length-1].trim()==="";)t.pop();let r=t.filter(n=>n.trim()!=="").map(n=>n.match(/^\s*/)?.[0].length??0),i=r.length>0?Math.min(...r):0;return i===0?t.join(`
1461
1461
  `):t.map(n=>n.slice(i)).join(`
1462
- `)}function Ft(e){let t=ge(e);if((t.match(/(^|\n)(```|~~~)/g)??[]).length%2===0)return t;let r=t.includes("~~~")&&!t.includes("```")?"~~~":"```";return`${t}
1463
- ${r}`}var Vt=class extends HTMLElement{_body;_caret;_contentOverride=null;_runtime=null;_loadPromise=null;_observer=null;_renderFrame=0;static get observedAttributes(){return["streaming","unsafe-html"]}get content(){return this._contentOverride??this._readInlineMarkdown()}set content(e){this._contentOverride=String(e??""),this._scheduleRender()}get streaming(){return this.hasAttribute("streaming")}set streaming(e){this.toggleAttribute("streaming",e)}get unsafeHtml(){return this.hasAttribute("unsafe-html")}set unsafeHtml(e){this.toggleAttribute("unsafe-html",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=Tt,e.appendChild(t),this._body=document.createElement("div"),this._body.className="dt-markdown",this._body.addEventListener("click",this._onLinkClick),this._caret=document.createElement("span"),this._caret.className="dt-markdown__caret",this._caret.textContent="\u258C",this._caret.hidden=!0,e.append(this._body,this._caret)}connectedCallback(){this._observer||(this._observer=new MutationObserver(()=>{this._contentOverride===null&&this._scheduleRender()}),this._observer.observe(this,{childList:!0,characterData:!0,subtree:!0})),this._ensureRuntime(),this._scheduleRender()}disconnectedCallback(){this._observer?.disconnect(),this._observer=null,this._renderFrame!==0&&(cancelAnimationFrame(this._renderFrame),this._renderFrame=0)}attributeChangedCallback(){this._scheduleRender()}_onLinkClick=e=>{let t=e.composedPath().find(r=>r instanceof HTMLAnchorElement);t&&(e.preventDefault(),this.dispatchEvent(new CustomEvent("dt-link-click",{bubbles:!0,composed:!0,detail:{href:t.getAttribute("href")??"#"}})))};_readInlineMarkdown(){return Rt(this.textContent??"")}_scheduleRender(){this._renderFrame===0&&(this._renderFrame=requestAnimationFrame(()=>{this._renderFrame=0,this._render()}))}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=Lt().then(e=>(this._runtime=e,e))),this._loadPromise)}async _render(){let e=await this._ensureRuntime(),t=this.content;this.streaming&&(t=Ft(t)),this._body.innerHTML=e.render(t,{unsafeHtml:this.unsafeHtml}),this._caret.hidden=!this.streaming}},$t=`:host {
1462
+ `)}function $t(e){let t=ve(e);if((t.match(/(^|\n)(```|~~~)/g)??[]).length%2===0)return t;let r=t.includes("~~~")&&!t.includes("```")?"~~~":"```";return`${t}
1463
+ ${r}`}var Ft=class extends HTMLElement{_body;_caret;_contentOverride=null;_runtime=null;_loadPromise=null;_observer=null;_renderFrame=0;static get observedAttributes(){return["streaming","unsafe-html"]}get content(){return this._contentOverride??this._readInlineMarkdown()}set content(e){this._contentOverride=String(e??""),this._scheduleRender()}get streaming(){return this.hasAttribute("streaming")}set streaming(e){this.toggleAttribute("streaming",e)}get unsafeHtml(){return this.hasAttribute("unsafe-html")}set unsafeHtml(e){this.toggleAttribute("unsafe-html",e)}constructor(){super();let e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=It,e.appendChild(t),this._body=document.createElement("div"),this._body.className="dt-markdown",this._body.addEventListener("click",this._onLinkClick),this._caret=document.createElement("span"),this._caret.className="dt-markdown__caret",this._caret.textContent="\u258C",this._caret.hidden=!0,e.append(this._body,this._caret)}connectedCallback(){this._observer||(this._observer=new MutationObserver(()=>{this._contentOverride===null&&this._scheduleRender()}),this._observer.observe(this,{childList:!0,characterData:!0,subtree:!0})),this._ensureRuntime(),this._scheduleRender()}disconnectedCallback(){this._observer?.disconnect(),this._observer=null,this._renderFrame!==0&&(cancelAnimationFrame(this._renderFrame),this._renderFrame=0)}attributeChangedCallback(){this._scheduleRender()}_onLinkClick=e=>{let t=e.composedPath().find(r=>r instanceof HTMLAnchorElement);t&&(e.preventDefault(),this.dispatchEvent(new CustomEvent("dt-link-click",{bubbles:!0,composed:!0,detail:{href:t.getAttribute("href")??"#"}})))};_readInlineMarkdown(){return Vt(this.textContent??"")}_scheduleRender(){this._renderFrame===0&&(this._renderFrame=requestAnimationFrame(()=>{this._renderFrame=0,this._render()}))}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=Ht().then(e=>(this._runtime=e,e))),this._loadPromise)}async _render(){let e=await this._ensureRuntime(),t=this.content;this.streaming&&(t=$t(t)),this._body.innerHTML=e.render(t,{unsafeHtml:this.unsafeHtml}),this._caret.hidden=!this.streaming}},Dt=`:host {
1464
1464
  display: block;
1465
1465
  min-height: 240px;
1466
1466
  color: var(--dt-text);
@@ -1732,14 +1732,14 @@ ${r}`}var Vt=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1732
1732
  .milkdown .editor td {
1733
1733
  border: 1px solid var(--dt-border);
1734
1734
  }
1735
- `,G=null;function Ht(){return window.__DtMilkdown?Promise.resolve(window.__DtMilkdown):G||(G=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/milkdown.umd.js",r.async=!0,r.dataset.dtMilkdown="true",r.onload=()=>{if(window.__DtMilkdown){e(window.__DtMilkdown);return}t(new Error("Milkdown runtime loaded without a __DtMilkdown export."))},r.onerror=()=>t(new Error("Failed to load the Milkdown runtime bundle.")),document.head.appendChild(r)}),G)}var It=class extends HTMLElement{_shadow;_runtimeStyleAnchor;_surface;_content;_status;_runtime=null;_loadPromise=null;_editor=null;_pendingValue="";_changeTimer=null;_setupToken=0;_suppressNextChange=!1;static get observedAttributes(){return["placeholder","readonly"]}get placeholder(){return this.getAttribute("placeholder")??""}set placeholder(e){this.setAttribute("placeholder",e)}get readonly(){return this.hasAttribute("readonly")}set readonly(e){this.toggleAttribute("readonly",e)}get value(){return this._editor&&(this._pendingValue=this._editor.getMarkdown()),this._pendingValue}set value(e){let t=String(e??"");this._pendingValue=t,this._editor&&this._runtime&&this._editor.getMarkdown()!==t&&(this._suppressNextChange=!0,this._editor.editor.action(this._runtime.replaceAll(t)))}constructor(){super();let e=this.attachShadow({mode:"open"});this._shadow=e;let t=document.createElement("style");t.textContent=$t,e.appendChild(t),this._runtimeStyleAnchor=document.createComment("runtime-styles"),e.appendChild(this._runtimeStyleAnchor),this._surface=document.createElement("div"),this._surface.className="dt-markdown-editor",this._content=document.createElement("div"),this._content.className="dt-markdown-editor__surface";let r=document.createElement("div");r.className="dt-markdown-editor__content",this._content.appendChild(r),this._status=document.createElement("div"),this._status.className="dt-markdown-editor__status",this._status.textContent="Loading editor",this._surface.append(this._content,this._status),e.appendChild(this._surface)}connectedCallback(){this._initializeEditor()}disconnectedCallback(){this._setupToken+=1,this._clearChangeTimer(),this._destroyEditor()}attributeChangedCallback(e){if(e==="readonly"){this._editor?.setReadonly(this.readonly);return}e==="placeholder"&&this.isConnected&&this._initializeEditor(!0)}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=Ht().then(e=>{this._runtime=e;let t=this._runtimeStyleAnchor;for(let r of e.cssEntries){let i=document.createElement("style");i.dataset.css=r.name,i.textContent=r.css,t.parentNode.insertBefore(i,t.nextSibling)}return e})),this._loadPromise)}async _initializeEditor(e=!1){let t=++this._setupToken;if(this._setStatus("Loading editor"),e)await this._destroyEditor();else if(this._editor){this._setStatus(null);return}try{let r=await this._ensureRuntime();if(!this.isConnected||t!==this._setupToken)return;this._content.replaceChildren();let i=document.createElement("div");i.className="dt-markdown-editor__content",this._content.appendChild(i);let n=new r.Crepe({root:i,defaultValue:this._pendingValue,features:{[r.Crepe.Feature.CodeMirror]:!1,[r.Crepe.Feature.ImageBlock]:!1,[r.Crepe.Feature.Latex]:!1},featureConfigs:{[r.Crepe.Feature.Placeholder]:{text:this.placeholder,mode:"doc"}}});if(n.on(s=>{s.markdownUpdated((c,d)=>{if(this._pendingValue=d,this._suppressNextChange){this._suppressNextChange=!1;return}this._queueChange(d)}),s.focus(()=>{this.dispatchEvent(new CustomEvent("dt-focus",{bubbles:!0,composed:!0}))}),s.blur(()=>{this.dispatchEvent(new CustomEvent("dt-blur",{bubbles:!0,composed:!0}))})}),await n.create(),!this.isConnected||t!==this._setupToken){await n.destroy();return}this._editor=n,this._editor.setReadonly(this.readonly),this._pendingValue=this._editor.getMarkdown(),this._setStatus(null)}catch{t===this._setupToken&&this._setStatus("Failed to load editor")}}async _destroyEditor(){let e=this._editor;if(this._editor=null,!!e)try{await e.destroy()}catch{}}_queueChange(e){this._clearChangeTimer(),this._changeTimer=setTimeout(()=>{this._changeTimer=null,this.dispatchEvent(new CustomEvent("dt-change",{bubbles:!0,composed:!0,detail:{value:e}}))},300)}_clearChangeTimer(){this._changeTimer&&(clearTimeout(this._changeTimer),this._changeTimer=null)}_setStatus(e){if(e){this._status.hidden=!1,this._status.textContent=e;return}this._status.hidden=!0}};customElements.get("dt-tooltip")||customElements.define("dt-tooltip",Ve),customElements.get("dt-card")||customElements.define("dt-card",Ie),customElements.get("dt-select")||customElements.define("dt-select",Ge),customElements.get("dt-grid")||customElements.define("dt-grid",Ze),customElements.get("dt-stack")||customElements.define("dt-stack",et),customElements.get("dt-stat")||customElements.define("dt-stat",it),customElements.get("dt-badge")||customElements.define("dt-badge",at),customElements.get("dt-button")||customElements.define("dt-button",lt),customElements.get("dt-divider")||customElements.define("dt-divider",ht),customElements.get("dt-list-view")||customElements.define("dt-list-view",xt),customElements.get("dt-table-view")||customElements.define("dt-table-view",ft),customElements.get("dt-column")||customElements.define("dt-column",ue),customElements.get("dt-chart")||customElements.define("dt-chart",Mt),customElements.get("dt-markdown")||customElements.define("dt-markdown",Vt),customElements.get("dt-markdown-editor")||customElements.define("dt-markdown-editor",It);var l={root:"PreferenceApp_root",rootCompact:"PreferenceApp_rootCompact",sidebar:"PreferenceApp_sidebar",sidebarHeader:"PreferenceApp_sidebarHeader",categoryItem:"PreferenceApp_categoryItem",categoryItemActive:"PreferenceApp_categoryItem PreferenceApp_categoryItemActive",categoryIcon:"PreferenceApp_categoryIcon",categoryText:"PreferenceApp_categoryText",settingsPanel:"PreferenceApp_settingsPanel",section:"PreferenceApp_section",sectionTitle:"PreferenceApp_sectionTitle",row:"PreferenceApp_row",rowInfo:"PreferenceApp_rowInfo",rowLabel:"PreferenceApp_rowLabel",rowDescription:"PreferenceApp_rowDescription",rowRestartBadge:"PreferenceApp_rowRestartBadge",rowControl:"PreferenceApp_rowControl",providerGroup:"PreferenceApp_providerGroup",providerGroupHeader:"PreferenceApp_providerGroupHeader",providerList:"PreferenceApp_providerList",providerCard:"PreferenceApp_providerCard",providerCardBody:"PreferenceApp_providerCardBody",providerCardHeader:"PreferenceApp_providerCardHeader",providerCardTitleRow:"PreferenceApp_providerCardTitleRow",providerCardTitle:"PreferenceApp_providerCardTitle",providerDefaultBadge:"PreferenceApp_providerDefaultBadge",providerCardActions:"PreferenceApp_providerCardActions",providerActionButtonWrap:"PreferenceApp_providerActionButtonWrap",providerButtonWrap:"PreferenceApp_providerButtonWrap",providerFieldGrid:"PreferenceApp_providerFieldGrid",providerField:"PreferenceApp_providerField",providerFieldLabel:"PreferenceApp_providerFieldLabel",providerSelectWrap:"PreferenceApp_providerSelectWrap",subscriptionAuth:"PreferenceApp_subscriptionAuth",subscriptionAuthConnected:"PreferenceApp_subscriptionAuth PreferenceApp_subscriptionAuthConnected",subscriptionAuthPending:"PreferenceApp_subscriptionAuth PreferenceApp_subscriptionAuthPending",subscriptionAuthStatus:"PreferenceApp_subscriptionAuthStatus",subscriptionAuthStatusConnected:"PreferenceApp_subscriptionAuthStatusConnected",subscriptionAuthCode:"PreferenceApp_subscriptionAuthCode",subscriptionAuthProgress:"PreferenceApp_subscriptionAuthProgress",selectWrap:"PreferenceApp_selectWrap",textInput:"PreferenceApp_textInput",numberInput:"PreferenceApp_numberInput",dropdown:"PreferenceApp_dropdown",textInputSensitive:"PreferenceApp_textInput PreferenceApp_textInputSensitive",colorControl:"PreferenceApp_colorControl",colorInput:"PreferenceApp_colorInput",toggle:"PreferenceApp_toggle",toggleInput:"PreferenceApp_toggleInput",toggleTrack:"PreferenceApp_toggleTrack",toggleKnob:"PreferenceApp_toggleKnob",notification:"PreferenceApp_notification",slideUp:"PreferenceApp_slideUp"},$=window.__desktalk_jsx_runtime,o=$.jsx,v=$.jsxs,$r=$.jsxDEV,Hr=$.Fragment,Dt={General:"\u2699",Server:"\u{1F310}",AI:"\u{1F916}",Voice:"\u{1F399}"};function Ot({activeCategory:e,onSelect:t,compact:r=!1}){return v("nav",{className:l.sidebar,children:[o("div",{className:l.sidebarHeader,children:"Settings"}),B.map(i=>{const n=v("button",{className:i===e?l.categoryItemActive:l.categoryItem,onClick:()=>t(i),type:"button","aria-label":r?i:void 0,children:[o("span",{className:l.categoryIcon,children:Dt[i]}),!r&&o("span",{className:l.categoryText,children:i})]},i);return r?o("dt-tooltip",{content:i,placement:"bottom",children:n},i):n})]})}function Bt({config:e,onChange:t}){const[r,i]=E([]);x(()=>{let h=!1;return fetch("/api/ai/providers",{credentials:"same-origin"}).then(u=>u.json()).then(u=>{h||i(u.providers??[])}).catch(()=>{h||i([])}),()=>{h=!0}},[]);const n=D(()=>new Map(r.map(h=>[h.id,h])),[r]),s=D(()=>{const h=ie(e["ai.enabledProviders"]),u=typeof e["ai.defaultProvider"]=="string"&&e["ai.defaultProvider"]?String(e["ai.defaultProvider"]):M;return h.includes(u)||h.unshift(u),h},[e]),c=f(async h=>{const u=h.length>0?h:[M];await t("ai.enabledProviders",ke(u)),await t("ai.defaultProvider",u[0])},[t]),d=f(async()=>{const h=N.find(u=>!s.includes(u.id));h&&await c([...s,h.id])},[s,c]),a=f(async(h,u)=>{if(h===u||s.includes(u))return;const y=s.map(C=>C===h?u:C);await c(y)},[s,c]),p=f(async h=>{if(s.length===1)return;const u=s.filter(y=>y!==h);await c(u);for(const y of we(h))await t(y,"")},[s,t,c]),b=f(async h=>{if(s[0]===h)return;const u=[h,...s.filter(y=>y!==h)];await c(u)},[s,c]);return v("div",{className:l.providerGroup,children:[v("div",{className:l.providerGroupHeader,children:[v("div",{children:[o("div",{className:l.rowLabel,children:"Providers"}),o("div",{className:l.rowDescription,children:"Add providers, keep your default at the top, and remove anything you no longer use."})]}),o("div",{className:l.providerActionButtonWrap,children:o(P,{onPress:d,disabled:s.length>=N.length,variant:"secondary",children:"Add provider"})})]}),o("div",{className:l.providerList,children:s.map((h,u)=>{const y=re(h),C=n.get(h);if(!y)return null;const w=N.filter(m=>m.id===h||!s.includes(m.id)),A=String(e[`ai.providers.${h}.model`]??""),g=[{value:"",label:"Select model"},...(C?.models??[]).map(m=>({value:m,label:m}))];return A&&!g.some(m=>m.value===A)&&g.push({value:A,label:`${A} (custom)`}),o("div",{className:l.providerCard,children:o("dt-card",{variant:"outlined",children:v("div",{className:l.providerCardBody,children:[v("div",{className:l.providerCardHeader,children:[v("div",{className:l.providerCardTitleRow,children:[o("div",{className:l.providerCardTitle,children:y.label}),u===0&&o("span",{className:l.providerDefaultBadge,children:"Default"})]}),v("div",{className:l.providerCardActions,children:[o("div",{className:l.providerButtonWrap,children:o(P,{onPress:()=>b(h),disabled:u===0,variant:"secondary",size:"sm",children:"Set as default"})}),o("div",{className:l.providerButtonWrap,children:o(P,{onPress:()=>p(h),disabled:s.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),v("div",{className:l.providerFieldGrid,children:[v("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,htmlFor:`ai-provider-${h}`,children:"Provider"}),o(be,{value:h,options:w.map(m=>({value:m.id,label:m.label})),onChange:m=>a(h,m)})]}),y.authType==="subscription"?o(Kt,{providerId:h}):y.supportsApiKey&&o(Y,{id:`ai-provider-key-${h}`,label:"API Key",value:String(e[`ai.providers.${h}.apiKey`]??""),sensitive:!0,onCommit:m=>t(`ai.providers.${h}.apiKey`,m)}),(C?.models?.length??0)>0?v("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,htmlFor:`ai-provider-model-${h}`,children:"Model"}),o(be,{value:A,options:g,onChange:m=>t(`ai.providers.${h}.model`,m)})]}):o(Y,{id:`ai-provider-model-${h}`,label:"Model",value:A,onCommit:m=>t(`ai.providers.${h}.model`,m)}),y.supportsBaseUrl&&o(Y,{id:`ai-provider-base-url-${h}`,label:"Base URL",value:String(e[`ai.providers.${h}.baseUrl`]??""),onCommit:m=>t(`ai.providers.${h}.baseUrl`,m)})]})]})})},h)})})]})}function Kt({providerId:e}){const[t,r]=E({phase:"idle"}),i=O(null);x(()=>{let d=!1;return r({phase:"checking"}),fetch(`/api/ai/providers/${e}/auth-status`,{credentials:"same-origin"}).then(a=>a.json()).then(a=>{d||r(a.authenticated?{phase:"authenticated"}:{phase:"idle"})}).catch(()=>{d||r({phase:"idle"})}),()=>{d=!0}},[e]);const n=f(()=>{const d=new AbortController;i.current=d,r({phase:"pending",url:"",instructions:void 0}),fetch(`/api/ai/providers/${e}/login`,{method:"POST",credentials:"same-origin",signal:d.signal}).then(async a=>{const p=a.body?.getReader();if(!p){r({phase:"error",message:"No response stream"});return}const b=new TextDecoder;let h="";for(;;){const{done:u,value:y}=await p.read();if(u)break;h+=b.decode(y,{stream:!0});const C=h.split(`
1736
- `);h=C.pop()??"";let w="";for(const A of C)if(A.startsWith("event: "))w=A.slice(7);else if(A.startsWith("data: ")&&w){try{const g=JSON.parse(A.slice(6));w==="auth"?r(m=>({phase:"pending",url:String(g.url??""),instructions:g.instructions?String(g.instructions):void 0,progress:m.phase==="pending"?m.progress:void 0})):w==="progress"?r(m=>m.phase==="pending"?{...m,progress:String(g.message??"")}:m):w==="done"?r({phase:"authenticated"}):w==="error"&&r({phase:"error",message:String(g.message??"Login failed")})}catch{}w=""}}}).catch(a=>{if(a?.name==="AbortError")return;const p=a instanceof Error?a.message:String(a);r({phase:"error",message:p})})},[e]),s=f(()=>{i.current?.abort(),i.current=null,fetch(`/api/ai/providers/${e}/logout`,{method:"POST",credentials:"same-origin"}).then(()=>r({phase:"idle"})).catch(()=>r({phase:"idle"}))},[e]),c=f((d,a)=>{a&&navigator.clipboard.writeText(a),window.open(d,"_blank","noopener,noreferrer")},[]);return t.phase==="checking"?o("div",{className:l.subscriptionAuth,children:o("div",{className:l.subscriptionAuthStatus,children:"Checking..."})}):t.phase==="authenticated"?v("div",{className:l.subscriptionAuthConnected,children:[o("div",{className:l.subscriptionAuthStatus,children:o("span",{className:l.subscriptionAuthStatusConnected,children:"Connected"})}),o(P,{onPress:s,variant:"danger",size:"sm",children:"Logout"})]}):t.phase==="pending"?v("div",{className:l.subscriptionAuthPending,children:[v("div",{className:l.subscriptionAuthStatus,children:[t.instructions&&v("div",{children:["Code: ",o("span",{className:l.subscriptionAuthCode,children:t.instructions})]}),t.progress&&o("div",{className:l.subscriptionAuthProgress,children:t.progress}),!t.progress&&!t.instructions&&o("div",{className:l.subscriptionAuthProgress,children:"Starting login..."})]}),v("div",{className:l.providerCardActions,children:[t.url&&o(P,{onPress:()=>c(t.url,t.instructions),variant:"primary",size:"sm",children:"Copy Code & Open"}),o(P,{onPress:s,variant:"secondary",size:"sm",children:"Cancel"})]})]}):t.phase==="error"?v("div",{className:l.subscriptionAuth,children:[v("div",{className:l.subscriptionAuthStatus,children:["Error: ",t.message]}),o(P,{onPress:n,variant:"primary",size:"sm",children:"Retry"})]}):v("div",{className:l.subscriptionAuth,children:[o("div",{className:l.subscriptionAuthStatus,children:"Not connected"}),o(P,{onPress:n,variant:"primary",size:"sm",children:"Login"})]})}function P({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[s,c]=E(null);return x(()=>{if(!s)return;const d=()=>{n()};return s.addEventListener("click",d),()=>s.removeEventListener("click",d)},[s,n]),o("dt-button",{ref:d=>c(d),disabled:t,variant:r,size:i,children:e})}function be({value:e,options:t,disabled:r=!1,onChange:i}){const[n,s]=E(null);return x(()=>{n&&(n.options=t)},[t,n]),x(()=>{n&&(n.value=e)},[n,e]),x(()=>{n&&(n.disabled=r)},[r,n]),x(()=>{if(!n)return;const c=d=>{i(d.detail.value)};return n.addEventListener("dt-change",c),()=>n.removeEventListener("dt-change",c)},[i,n]),o("div",{className:l.providerSelectWrap,children:o("dt-select",{ref:c=>s(c)})})}function Y({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[s,c]=E(r);x(()=>{c(r)},[r]);const d=f(()=>{s!==r&&n(s)},[s,n,r]);return v("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,htmlFor:e,children:t}),o("input",{id:e,type:i?"password":"text",className:i?l.textInputSensitive:l.textInput,value:s,onChange:a=>c(a.target.value),onBlur:d,onKeyDown:a=>{a.key==="Enter"&&d()}})]})}function Ut({config:e,onChange:t}){const r=D(()=>{const a=se(e["voice.enabledProviders"]),p=typeof e["voice.defaultProvider"]=="string"&&e["voice.defaultProvider"]?String(e["voice.defaultProvider"]):S;return a.includes(p)||a.unshift(p),a},[e]),i=f(async a=>{const p=a.length>0?a:[S];await t("voice.enabledProviders",Ce(p)),await t("voice.defaultProvider",p[0])},[t]),n=f(async()=>{const a=T.find(p=>!r.includes(p.id));a&&await i([...r,a.id])},[r,i]),s=f(async(a,p)=>{if(a===p||r.includes(p))return;const b=r.map(h=>h===a?p:h);await i(b)},[r,i]),c=f(async a=>{if(r.length===1)return;const p=r.filter(b=>b!==a);await i(p);for(const b of Ae(a))await t(b,"")},[r,t,i]),d=f(async a=>{if(r[0]===a)return;const p=[a,...r.filter(b=>b!==a)];await i(p)},[r,i]);return v("div",{className:l.providerGroup,children:[v("div",{className:l.providerGroupHeader,children:[v("div",{children:[o("div",{className:l.rowLabel,children:"Providers"}),o("div",{className:l.rowDescription,children:"Add STT providers, keep your default at the top, and remove unused items."})]}),o("div",{className:l.providerActionButtonWrap,children:o(X,{onPress:n,disabled:r.length>=T.length,variant:"secondary",children:"Add provider"})})]}),o("div",{className:l.providerList,children:r.map((a,p)=>{const b=ne(a);if(!b)return null;const h=T.filter(u=>u.id===a||!r.includes(u.id));return o("div",{className:l.providerCard,children:o("dt-card",{variant:"outlined",children:v("div",{className:l.providerCardBody,children:[v("div",{className:l.providerCardHeader,children:[v("div",{className:l.providerCardTitleRow,children:[o("div",{className:l.providerCardTitle,children:b.label}),p===0&&o("span",{className:l.providerDefaultBadge,children:"Default"})]}),v("div",{className:l.providerCardActions,children:[o("div",{className:l.providerButtonWrap,children:o(X,{onPress:()=>d(a),disabled:p===0,variant:"secondary",size:"sm",children:"Set as default"})}),o("div",{className:l.providerButtonWrap,children:o(X,{onPress:()=>c(a),disabled:r.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),v("div",{className:l.providerFieldGrid,children:[o(Wt,{label:"Provider",value:a,options:h.map(u=>({value:u.id,label:u.label})),onChange:u=>s(a,u)}),b.supportsApiKey&&o(F,{id:`voice-provider-key-${a}`,label:"API Key",value:String(e[`voice.providers.${a}.apiKey`]??""),sensitive:!0,onCommit:u=>t(`voice.providers.${a}.apiKey`,u)}),b.supportsModel&&o(F,{id:`voice-provider-model-${a}`,label:"Model",value:String(e[`voice.providers.${a}.model`]??""),onCommit:u=>t(`voice.providers.${a}.model`,u)}),b.supportsBaseUrl&&o(F,{id:`voice-provider-base-url-${a}`,label:"Base URL",value:String(e[`voice.providers.${a}.baseUrl`]??""),onCommit:u=>t(`voice.providers.${a}.baseUrl`,u)}),b.supportsAzureDeployment&&o(F,{id:`voice-provider-deployment-${a}`,label:"Azure Deployment",value:String(e[`voice.providers.${a}.azureDeployment`]??""),onCommit:u=>t(`voice.providers.${a}.azureDeployment`,u)}),b.supportsAzureApiVersion&&o(F,{id:`voice-provider-api-version-${a}`,label:"Azure API Version",value:String(e[`voice.providers.${a}.azureApiVersion`]??""),onCommit:u=>t(`voice.providers.${a}.azureApiVersion`,u)})]})]})})},a)})})]})}function X({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[s,c]=E(null);return x(()=>{if(!s)return;const d=()=>{n()};return s.addEventListener("click",d),()=>s.removeEventListener("click",d)},[s,n]),o("dt-button",{ref:d=>c(d),disabled:t,variant:r,size:i,children:e})}function Wt({label:e,value:t,options:r,onChange:i}){const[n,s]=E(null);return x(()=>{n&&(n.options=r)},[r,n]),x(()=>{n&&(n.value=t)},[n,t]),x(()=>{if(!n)return;const c=d=>{i(d.detail.value)};return n.addEventListener("dt-change",c),()=>n.removeEventListener("dt-change",c)},[i,n]),v("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,children:e}),o("div",{className:l.providerSelectWrap,children:o("dt-select",{ref:c=>s(c)})})]})}function F({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[s,c]=E(r);x(()=>{c(r)},[r]);const d=f(()=>{s!==r&&n(s)},[s,n,r]);return v("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,htmlFor:e,children:t}),o("input",{id:e,type:i?"password":"text",className:i?l.textInputSensitive:l.textInput,value:s,onChange:a=>c(a.target.value),onBlur:d,onKeyDown:a=>{a.key==="Enter"&&d()}})]})}function qt({title:e,children:t}){return v("section",{className:l.section,children:[o("h3",{className:l.sectionTitle,children:e}),t]})}function jt({schema:e,value:t,onChange:r}){return v("div",{className:l.row,children:[v("div",{className:l.rowInfo,children:[v("div",{className:l.rowLabel,children:[e.label,e.requiresRestart&&o("span",{className:l.rowRestartBadge,children:"restart"})]}),o("div",{className:l.rowDescription,children:e.description})]}),o("div",{className:l.rowControl,children:o(Gt,{schema:e,value:t,onChange:r})})]})}function Gt({schema:e,value:t,onChange:r}){return e.key==="general.accentColor"&&e.type==="string"?o(Xt,{schema:e,value:t,onChange:r}):e.type==="boolean"?o(Zt,{schema:e,value:t,onChange:r}):e.type==="string"&&e.options?o(Jt,{schema:e,value:t,onChange:r}):e.type==="string"?o(er,{schema:e,value:t,onChange:r}):e.type==="number"?o(tr,{schema:e,value:t,onChange:r}):null}function Yt(e){return/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(e)}function Xt({schema:e,value:t,onChange:r}){const[i,n]=E(t);x(()=>{n(t)},[t]);const s=f(u=>{const y=(u??i).trim();y!==t&&r(e.key,y)},[i,r,e.key,t]),c=f(u=>{n(u.currentTarget.value)},[]),d=f(u=>{const y=u.target.value;n(y),s(y)},[s]),a=f(u=>{n(u.target.value)},[]),p=f(u=>{u.key==="Enter"&&s()},[s]),b=f(()=>{s()},[s]),h=Yt(i)?i:"#7c6ff7";return v("div",{className:l.colorControl,children:[o("input",{type:"color",className:l.colorInput,value:h,onInput:c,onChange:d,"aria-label":`${e.label} picker`}),o("input",{type:"text",className:l.textInput,value:i,onChange:a,onBlur:b,onKeyDown:p,placeholder:"#7c6ff7"})]})}function Zt({schema:e,value:t,onChange:r}){const i=f(()=>{r(e.key,!t)},[e.key,t,r]);return v("label",{className:l.toggle,children:[o("input",{type:"checkbox",className:l.toggleInput,checked:t,onChange:i}),o("span",{className:l.toggleTrack}),o("span",{className:l.toggleKnob})]})}function Jt({schema:e,value:t,onChange:r}){const i=f(n=>{r(e.key,n)},[e.key,r]);return o(Qt,{value:t,options:(e.options??[]).map(n=>({value:n,label:n})),onChange:i})}function Qt({value:e,options:t,disabled:r=!1,onChange:i}){const[n,s]=E(null);return x(()=>{n&&(n.options=t)},[t,n]),x(()=>{n&&(n.value=e,n.disabled=r)},[r,n,e]),x(()=>{if(!n)return;const c=d=>{i(d.detail.value)};return n.addEventListener("dt-change",c),()=>n.removeEventListener("dt-change",c)},[i,n]),o("div",{className:l.selectWrap,children:o("dt-select",{ref:c=>s(c)})})}function er({schema:e,value:t,onChange:r}){const[i,n]=E(t);x(()=>{n(t)},[t]);const s=f(()=>{i!==t&&r(e.key,i)},[e.key,i,t,r]),c=f(d=>{d.key==="Enter"&&r(e.key,i)},[e.key,i,r]);return o("input",{type:e.sensitive?"password":"text",className:e.sensitive?l.textInputSensitive:l.textInput,value:i,onChange:d=>n(d.target.value),onBlur:s,onKeyDown:c,placeholder:e.sensitive?"Enter API key...":void 0})}function tr({schema:e,value:t,onChange:r}){const[i,n]=E(String(t));x(()=>{n(String(t))},[t]);const s=f(()=>{let d=Number(i);if(Number.isNaN(d)){n(String(t));return}e.min!==void 0&&(d=Math.max(e.min,d)),e.max!==void 0&&(d=Math.min(e.max,d)),n(String(d)),d!==t&&r(e.key,d)},[e.key,e.min,e.max,i,t,r]),c=f(d=>{d.key==="Enter"&&s()},[s]);return o("input",{type:"number",className:l.numberInput,value:i,min:e.min,max:e.max,onChange:d=>n(d.target.value),onBlur:s,onKeyDown:c})}import{ActionsProvider as rr,Action as H,useCommand as I}from"@desktalk/sdk";function ir({children:e,onConfigChanged:t}){const r=I("preferences.get"),i=I("preferences.set"),n=I("preferences.reset"),s=I("preferences.resetAll"),c=f(async b=>{const h=b?.key;if(!h)throw new Error("Missing required parameter: key");return await r({key:h})},[r]),d=f(async b=>{const h=b?.key;if(!h)throw new Error("Missing required parameter: key");let u=b?.value;if(u===void 0)throw new Error("Missing required parameter: value");const y=Ne(h);return y&&(y.type==="number"&&typeof u=="string"?u=Number(u):y.type==="boolean"&&typeof u=="string"&&(u=u==="true")),await i({key:h,value:u}),t(),{success:!0}},[i,t]),a=f(async b=>{const h=b?.key;if(!h)throw new Error("Missing required parameter: key");return await n({key:h}),t(),{success:!0}},[n,t]),p=f(async()=>(await s(),t(),{success:!0}),[s,t]);return v(rr,{children:[o(H,{name:"Get Setting",description:"Read the current value of a setting",params:{key:{type:"string",description:"Setting key (e.g. general.theme)",required:!0}},handler:c}),o(H,{name:"Set Setting",description:"Update a setting value",params:{key:{type:"string",description:"Setting key (e.g. general.theme)",required:!0},value:{type:"string",description:"New value for the setting",required:!0}},handler:d}),o(H,{name:"Reset Setting",description:"Reset a setting to its default value",params:{key:{type:"string",description:"Setting key to reset",required:!0}},handler:a}),o(H,{name:"Reset All",description:"Reset all settings to their default values",handler:p}),e]})}var nr=720;function sr(){const[e,t]=E(Me()),[r,i]=E(B[0]),[n,s]=E(null),[c,d]=E(!1),a=O(null),p=O(null),b=ee("preferences.getAll"),h=ee("preferences.set"),u=f(async()=>{try{const g=await b();t(g)}catch(g){console.error("Failed to load preferences:",g)}},[b]);x(()=>{u()},[u]),x(()=>{if(!p.current)return;const g=k=>{d(k<=nr)};g(p.current.clientWidth);const m=new ResizeObserver(k=>{const Z=k[0];Z&&g(Z.contentRect.width)});return m.observe(p.current),()=>m.disconnect()},[]),te("preferences:changed",g=>{t(m=>({...m,[g.key]:g.value})),g.requiresRestart&&y(J({scope:"preference",key:"notifications.restartRequired",defaultText:"This change requires a restart to take effect."}))}),te("preferences:resetAll",()=>{u(),y(J({scope:"preference",key:"notifications.resetAll",defaultText:"All settings have been reset to defaults."}))});const y=f(g=>{s(g),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>s(null),4e3)},[]),C=f(async(g,m)=>{t(k=>({...k,[g]:m}));try{await h({key:g,value:m})}catch(k){console.error(`Failed to update ${g}:`,k),u()}},[h,u]),w=B.filter(g=>g===r),A=f(g=>{const m=Te(g);return g!=="AI"&&g!=="Voice"?m:m.filter(k=>g==="AI"?!k.key.startsWith("ai.providers.")&&k.key!=="ai.defaultProvider"&&k.key!=="ai.enabledProviders":!k.key.startsWith("voice.providers.")&&k.key!=="voice.defaultProvider"&&k.key!=="voice.enabledProviders")},[]);return o(ir,{onConfigChanged:u,children:v("div",{ref:p,className:`${l.root}${c?` ${l.rootCompact}`:""}`,children:[o(Ot,{activeCategory:r,onSelect:i,compact:c}),o("div",{className:l.settingsPanel,children:w.map(g=>{const m=A(g);return v(qt,{title:g,children:[g==="AI"&&o(Bt,{config:e,onChange:C}),g==="Voice"&&o(Ut,{config:e,onChange:C}),m.map(k=>o(jt,{schema:k,value:e[k.key]??k.default,onChange:C},k.key))]},g)})}),n&&o("div",{className:l.notification,children:n})]})})}function ar(e){const t=ve(e.root);return t.render(o(_e,{windowId:e.windowId,children:o(fe,{miniAppId:e.miniAppId,children:o(sr,{})})})),{deactivate(){t.unmount()}}}export{ar as activate};
1735
+ `,J=null;function Ot(){return window.__DtMilkdown?Promise.resolve(window.__DtMilkdown):J||(J=new Promise((e,t)=>{let r=document.createElement("script");r.src="/api/ui/milkdown.umd.js",r.async=!0,r.dataset.dtMilkdown="true",r.onload=()=>{if(window.__DtMilkdown){e(window.__DtMilkdown);return}t(new Error("Milkdown runtime loaded without a __DtMilkdown export."))},r.onerror=()=>t(new Error("Failed to load the Milkdown runtime bundle.")),document.head.appendChild(r)}),J)}var Bt=class extends HTMLElement{_shadow;_runtimeStyleAnchor;_surface;_content;_status;_runtime=null;_loadPromise=null;_editor=null;_pendingValue="";_changeTimer=null;_setupToken=0;_suppressNextChange=!1;static get observedAttributes(){return["placeholder","readonly"]}get placeholder(){return this.getAttribute("placeholder")??""}set placeholder(e){this.setAttribute("placeholder",e)}get readonly(){return this.hasAttribute("readonly")}set readonly(e){this.toggleAttribute("readonly",e)}get value(){return this._editor&&(this._pendingValue=this._editor.getMarkdown()),this._pendingValue}set value(e){let t=String(e??"");this._pendingValue=t,this._editor&&this._runtime&&this._editor.getMarkdown()!==t&&(this._suppressNextChange=!0,this._editor.editor.action(this._runtime.replaceAll(t)))}constructor(){super();let e=this.attachShadow({mode:"open"});this._shadow=e;let t=document.createElement("style");t.textContent=Dt,e.appendChild(t),this._runtimeStyleAnchor=document.createComment("runtime-styles"),e.appendChild(this._runtimeStyleAnchor),this._surface=document.createElement("div"),this._surface.className="dt-markdown-editor",this._content=document.createElement("div"),this._content.className="dt-markdown-editor__surface";let r=document.createElement("div");r.className="dt-markdown-editor__content",this._content.appendChild(r),this._status=document.createElement("div"),this._status.className="dt-markdown-editor__status",this._status.textContent="Loading editor",this._surface.append(this._content,this._status),e.appendChild(this._surface)}connectedCallback(){this._initializeEditor()}disconnectedCallback(){this._setupToken+=1,this._clearChangeTimer(),this._destroyEditor()}attributeChangedCallback(e){if(e==="readonly"){this._editor?.setReadonly(this.readonly);return}e==="placeholder"&&this.isConnected&&this._initializeEditor(!0)}async _ensureRuntime(){return this._runtime?this._runtime:(this._loadPromise||(this._loadPromise=Ot().then(e=>{this._runtime=e;let t=this._runtimeStyleAnchor;for(let r of e.cssEntries){let i=document.createElement("style");i.dataset.css=r.name,i.textContent=r.css,t.parentNode.insertBefore(i,t.nextSibling)}return e})),this._loadPromise)}async _initializeEditor(e=!1){let t=++this._setupToken;if(this._setStatus("Loading editor"),e)await this._destroyEditor();else if(this._editor){this._setStatus(null);return}try{let r=await this._ensureRuntime();if(!this.isConnected||t!==this._setupToken)return;this._content.replaceChildren();let i=document.createElement("div");i.className="dt-markdown-editor__content",this._content.appendChild(i);let n=new r.Crepe({root:i,defaultValue:this._pendingValue,features:{[r.Crepe.Feature.CodeMirror]:!1,[r.Crepe.Feature.ImageBlock]:!1,[r.Crepe.Feature.Latex]:!1},featureConfigs:{[r.Crepe.Feature.Placeholder]:{text:this.placeholder,mode:"doc"}}});if(n.on(s=>{s.markdownUpdated((l,u)=>{if(this._pendingValue=u,this._suppressNextChange){this._suppressNextChange=!1;return}this._queueChange(u)}),s.focus(()=>{this.dispatchEvent(new CustomEvent("dt-focus",{bubbles:!0,composed:!0}))}),s.blur(()=>{this.dispatchEvent(new CustomEvent("dt-blur",{bubbles:!0,composed:!0}))})}),await n.create(),!this.isConnected||t!==this._setupToken){await n.destroy();return}this._editor=n,this._editor.setReadonly(this.readonly),this._pendingValue=this._editor.getMarkdown(),this._setStatus(null)}catch{t===this._setupToken&&this._setStatus("Failed to load editor")}}async _destroyEditor(){let e=this._editor;if(this._editor=null,!!e)try{await e.destroy()}catch{}}_queueChange(e){this._clearChangeTimer(),this._changeTimer=setTimeout(()=>{this._changeTimer=null,this.dispatchEvent(new CustomEvent("dt-change",{bubbles:!0,composed:!0,detail:{value:e}}))},300)}_clearChangeTimer(){this._changeTimer&&(clearTimeout(this._changeTimer),this._changeTimer=null)}_setStatus(e){if(e){this._status.hidden=!1,this._status.textContent=e;return}this._status.hidden=!0}};customElements.get("dt-tooltip")||customElements.define("dt-tooltip",Fe),customElements.get("dt-card")||customElements.define("dt-card",Be),customElements.get("dt-select")||customElements.define("dt-select",Xe),customElements.get("dt-grid")||customElements.define("dt-grid",et),customElements.get("dt-stack")||customElements.define("dt-stack",it),customElements.get("dt-stat")||customElements.define("dt-stat",at),customElements.get("dt-badge")||customElements.define("dt-badge",dt),customElements.get("dt-button")||customElements.define("dt-button",pt),customElements.get("dt-divider")||customElements.define("dt-divider",gt),customElements.get("dt-list-view")||customElements.define("dt-list-view",At),customElements.get("dt-table-view")||customElements.define("dt-table-view",xt),customElements.get("dt-column")||customElements.define("dt-column",he),customElements.get("dt-chart")||customElements.define("dt-chart",Lt),customElements.get("dt-markdown")||customElements.define("dt-markdown",Ft),customElements.get("dt-markdown-editor")||customElements.define("dt-markdown-editor",Bt);var o={root:"PreferenceApp_root",rootCompact:"PreferenceApp_rootCompact",sidebar:"PreferenceApp_sidebar",sidebarHeader:"PreferenceApp_sidebarHeader",categoryItem:"PreferenceApp_categoryItem",categoryItemActive:"PreferenceApp_categoryItem PreferenceApp_categoryItemActive",categoryIcon:"PreferenceApp_categoryIcon",categoryText:"PreferenceApp_categoryText",settingsPanel:"PreferenceApp_settingsPanel",section:"PreferenceApp_section",sectionTitle:"PreferenceApp_sectionTitle",row:"PreferenceApp_row",rowInfo:"PreferenceApp_rowInfo",rowLabel:"PreferenceApp_rowLabel",rowDescription:"PreferenceApp_rowDescription",rowRestartBadge:"PreferenceApp_rowRestartBadge",rowControl:"PreferenceApp_rowControl",providerGroup:"PreferenceApp_providerGroup",providerGroupHeader:"PreferenceApp_providerGroupHeader",providerList:"PreferenceApp_providerList",providerCard:"PreferenceApp_providerCard",providerCardBody:"PreferenceApp_providerCardBody",providerCardHeader:"PreferenceApp_providerCardHeader",providerCardTitleRow:"PreferenceApp_providerCardTitleRow",providerCardTitle:"PreferenceApp_providerCardTitle",providerDefaultBadge:"PreferenceApp_providerDefaultBadge",providerCardActions:"PreferenceApp_providerCardActions",providerActionButtonWrap:"PreferenceApp_providerActionButtonWrap",providerButtonWrap:"PreferenceApp_providerButtonWrap",providerFieldGrid:"PreferenceApp_providerFieldGrid",providerField:"PreferenceApp_providerField",providerFieldLabel:"PreferenceApp_providerFieldLabel",providerSelectWrap:"PreferenceApp_providerSelectWrap",subscriptionAuth:"PreferenceApp_subscriptionAuth",subscriptionAuthConnected:"PreferenceApp_subscriptionAuth PreferenceApp_subscriptionAuthConnected",subscriptionAuthPending:"PreferenceApp_subscriptionAuth PreferenceApp_subscriptionAuthPending",subscriptionAuthStatus:"PreferenceApp_subscriptionAuthStatus",subscriptionAuthStatusConnected:"PreferenceApp_subscriptionAuthStatusConnected",subscriptionAuthCode:"PreferenceApp_subscriptionAuthCode",subscriptionAuthProgress:"PreferenceApp_subscriptionAuthProgress",manualCodeInput:"PreferenceApp_manualCodeInput",manualCodeHint:"PreferenceApp_manualCodeHint",manualCodeRow:"PreferenceApp_manualCodeRow",manualCodeTextInput:"PreferenceApp_manualCodeTextInput",selectWrap:"PreferenceApp_selectWrap",textInput:"PreferenceApp_textInput",numberInput:"PreferenceApp_numberInput",dropdown:"PreferenceApp_dropdown",textInputSensitive:"PreferenceApp_textInput PreferenceApp_textInputSensitive",colorControl:"PreferenceApp_colorControl",colorInput:"PreferenceApp_colorInput",toggle:"PreferenceApp_toggle",toggleInput:"PreferenceApp_toggleInput",toggleTrack:"PreferenceApp_toggleTrack",toggleKnob:"PreferenceApp_toggleKnob",notification:"PreferenceApp_notification",slideUp:"PreferenceApp_slideUp"},F=window.__desktalk_jsx_runtime,a=F.jsx,b=F.jsxs,Dr=F.jsxDEV,Or=F.Fragment,Kt={General:"\u2699",Server:"\u{1F310}",AI:"\u{1F916}",Voice:"\u{1F399}"};function Ut({activeCategory:e,onSelect:t,compact:r=!1}){return b("nav",{className:o.sidebar,children:[a("div",{className:o.sidebarHeader,children:"Settings"}),U.map(i=>{const n=b("button",{className:i===e?o.categoryItemActive:o.categoryItem,onClick:()=>t(i),type:"button","aria-label":r?i:void 0,children:[a("span",{className:o.categoryIcon,children:Kt[i]}),!r&&a("span",{className:o.categoryText,children:i})]},i);return r?a("dt-tooltip",{content:i,placement:"bottom",children:n},i):n})]})}function Wt({config:e,onChange:t}){const[r,i]=A([]);w(()=>{let c=!1;return fetch("/api/ai/providers",{credentials:"same-origin"}).then(p=>p.json()).then(p=>{c||i(p.providers??[])}).catch(()=>{c||i([])}),()=>{c=!0}},[]);const n=B(()=>new Map(r.map(c=>[c.id,c])),[r]),s=B(()=>{const c=se(e["ai.enabledProviders"]),p=typeof e["ai.defaultProvider"]=="string"&&e["ai.defaultProvider"]?String(e["ai.defaultProvider"]):T;return c.includes(p)||c.unshift(p),c},[e]),l=f(async c=>{const p=c.length>0?c:[T];await t("ai.enabledProviders",Ee(p)),await t("ai.defaultProvider",p[0])},[t]),u=f(async()=>{const c=L.find(p=>!s.includes(p.id));c&&await l([...s,c.id])},[s,l]),d=f(async(c,p)=>{if(c===p||s.includes(p))return;const y=s.map(k=>k===c?p:k);await l(y)},[s,l]),h=f(async c=>{if(s.length===1)return;const p=s.filter(y=>y!==c);await l(p);for(const y of Ce(c))await t(y,"")},[s,t,l]),m=f(async c=>{if(s[0]===c)return;const p=[c,...s.filter(y=>y!==c)];await l(p)},[s,l]);return b("div",{className:o.providerGroup,children:[b("div",{className:o.providerGroupHeader,children:[b("div",{children:[a("div",{className:o.rowLabel,children:"Providers"}),a("div",{className:o.rowDescription,children:"Add providers, keep your default at the top, and remove anything you no longer use."})]}),a("div",{className:o.providerActionButtonWrap,children:a(z,{onPress:u,disabled:s.length>=L.length,variant:"secondary",children:"Add provider"})})]}),a("div",{className:o.providerList,children:s.map((c,p)=>{const y=ne(c),k=n.get(c);if(!y)return null;const E=L.filter(g=>g.id===c||!s.includes(g.id)),C=String(e[`ai.providers.${c}.model`]??""),v=[{value:"",label:"Select model"},...(k?.models??[]).map(g=>({value:g,label:g}))];return C&&!v.some(g=>g.value===C)&&v.push({value:C,label:`${C} (custom)`}),a("div",{className:o.providerCard,children:a("dt-card",{variant:"outlined",children:b("div",{className:o.providerCardBody,children:[b("div",{className:o.providerCardHeader,children:[b("div",{className:o.providerCardTitleRow,children:[a("div",{className:o.providerCardTitle,children:y.label}),p===0&&a("span",{className:o.providerDefaultBadge,children:"Default"})]}),b("div",{className:o.providerCardActions,children:[a("div",{className:o.providerButtonWrap,children:a(z,{onPress:()=>m(c),disabled:p===0,variant:"secondary",size:"sm",children:"Set as default"})}),a("div",{className:o.providerButtonWrap,children:a(z,{onPress:()=>h(c),disabled:s.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),b("div",{className:o.providerFieldGrid,children:[b("div",{className:o.providerField,children:[a("label",{className:o.providerFieldLabel,htmlFor:`ai-provider-${c}`,children:"Provider"}),a(fe,{value:c,options:E.map(g=>({value:g.id,label:g.label})),onChange:g=>d(c,g)})]}),y.authType==="subscription"?a(qt,{providerId:c}):y.supportsApiKey&&a(X,{id:`ai-provider-key-${c}`,label:"API Key",value:String(e[`ai.providers.${c}.apiKey`]??""),sensitive:!0,onCommit:g=>t(`ai.providers.${c}.apiKey`,g)}),(k?.models?.length??0)>0?b("div",{className:o.providerField,children:[a("label",{className:o.providerFieldLabel,htmlFor:`ai-provider-model-${c}`,children:"Model"}),a(fe,{value:C,options:v,onChange:g=>t(`ai.providers.${c}.model`,g)})]}):a(X,{id:`ai-provider-model-${c}`,label:"Model",value:C,onCommit:g=>t(`ai.providers.${c}.model`,g)}),y.supportsBaseUrl&&a(X,{id:`ai-provider-base-url-${c}`,label:"Base URL",value:String(e[`ai.providers.${c}.baseUrl`]??""),onCommit:g=>t(`ai.providers.${c}.baseUrl`,g)})]})]})})},c)})})]})}function qt({providerId:e}){const[t,r]=A({phase:"idle"}),[i,n]=A(""),s=K(null);w(()=>{let m=!1;return r({phase:"checking"}),fetch(`/api/ai/providers/${e}/auth-status`,{credentials:"same-origin"}).then(c=>c.json()).then(c=>{m||r(c.authenticated?{phase:"authenticated"}:{phase:"idle"})}).catch(()=>{m||r({phase:"idle"})}),()=>{m=!0}},[e]);const l=f(()=>{const m=new AbortController;s.current=m,r({phase:"pending",url:"",instructions:void 0}),n(""),fetch(`/api/ai/providers/${e}/login`,{method:"POST",credentials:"same-origin",signal:m.signal}).then(async c=>{const p=c.body?.getReader();if(!p){r({phase:"error",message:"No response stream"});return}const y=new TextDecoder;let k="";for(;;){const{done:E,value:C}=await p.read();if(E)break;k+=y.decode(C,{stream:!0});const v=k.split(`
1736
+ `);k=v.pop()??"";let g="";for(const x of v)if(x.startsWith("event: "))g=x.slice(7);else if(x.startsWith("data: ")&&g){try{const S=JSON.parse(x.slice(6));g==="auth"?r(P=>({phase:"pending",url:String(S.url??""),instructions:S.instructions?String(S.instructions):void 0,usesCallbackServer:!!S.usesCallbackServer,progress:P.phase==="pending"?P.progress:void 0,manualCodePrompt:P.phase==="pending"?P.manualCodePrompt:void 0})):g==="prompt"?r(P=>P.phase==="pending"?{...P,manualCodePrompt:{message:String(S.message??""),placeholder:S.placeholder?String(S.placeholder):void 0,allowEmpty:!!S.allowEmpty}}:P):g==="progress"?r(P=>P.phase==="pending"?{...P,progress:String(S.message??"")}:P):g==="done"?r({phase:"authenticated"}):g==="error"&&r({phase:"error",message:String(S.message??"Login failed")})}catch{}g=""}}}).catch(c=>{if(c?.name==="AbortError")return;const p=c instanceof Error?c.message:String(c);r({phase:"error",message:p})})},[e]),u=f(()=>{s.current?.abort(),s.current=null,fetch(`/api/ai/providers/${e}/logout`,{method:"POST",credentials:"same-origin"}).then(()=>r({phase:"idle"})).catch(()=>r({phase:"idle"}))},[e]),d=f((m,c)=>{c&&navigator.clipboard.writeText(c),window.open(m,"_blank","noopener,noreferrer")},[]),h=f(m=>{m.trim()&&fetch(`/api/ai/providers/${e}/login/code`,{method:"POST",credentials:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:m.trim()})}).catch(()=>{})},[e]);return t.phase==="checking"?a("div",{className:o.subscriptionAuth,children:a("div",{className:o.subscriptionAuthStatus,children:"Checking..."})}):t.phase==="authenticated"?b("div",{className:o.subscriptionAuthConnected,children:[a("div",{className:o.subscriptionAuthStatus,children:a("span",{className:o.subscriptionAuthStatusConnected,children:"Connected"})}),a(z,{onPress:u,variant:"danger",size:"sm",children:"Logout"})]}):t.phase==="pending"?b("div",{className:o.subscriptionAuthPending,children:[b("div",{className:o.subscriptionAuthStatus,children:[t.instructions&&b("div",{children:["Code: ",a("span",{className:o.subscriptionAuthCode,children:t.instructions})]}),t.progress&&a("div",{className:o.subscriptionAuthProgress,children:t.progress}),!t.progress&&!t.instructions&&a("div",{className:o.subscriptionAuthProgress,children:"Starting login..."})]}),b("div",{className:o.providerCardActions,children:[t.url&&a(z,{onPress:()=>d(t.url,t.instructions),variant:"primary",size:"sm",children:t.instructions?"Copy Code & Open":"Open in Browser"}),a(z,{onPress:u,variant:"secondary",size:"sm",children:"Cancel"})]}),t.manualCodePrompt&&b("div",{className:o.manualCodeInput,children:[a("div",{className:o.manualCodeHint,children:t.manualCodePrompt.message}),b("div",{className:o.manualCodeRow,children:[a("input",{className:o.manualCodeTextInput,type:"text",placeholder:t.manualCodePrompt.placeholder??"Paste code or URL",value:i,onChange:m=>n(m.target.value),onKeyDown:m=>{m.key==="Enter"&&h(i)}}),a(z,{onPress:()=>h(i),variant:"primary",size:"sm",disabled:!t.manualCodePrompt.allowEmpty&&!i.trim(),children:"Submit"})]})]})]}):t.phase==="error"?b("div",{className:o.subscriptionAuth,children:[b("div",{className:o.subscriptionAuthStatus,children:["Error: ",t.message]}),a(z,{onPress:l,variant:"primary",size:"sm",children:"Retry"})]}):b("div",{className:o.subscriptionAuth,children:[a("div",{className:o.subscriptionAuthStatus,children:"Not connected"}),a(z,{onPress:l,variant:"primary",size:"sm",children:"Login"})]})}function z({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[s,l]=A(null);return w(()=>{if(!s)return;const u=()=>{n()};return s.addEventListener("click",u),()=>s.removeEventListener("click",u)},[s,n]),a("dt-button",{ref:u=>l(u),disabled:t,variant:r,size:i,children:e})}function fe({value:e,options:t,disabled:r=!1,onChange:i}){const[n,s]=A(null);return w(()=>{n&&(n.options=t)},[t,n]),w(()=>{n&&(n.value=e)},[n,e]),w(()=>{n&&(n.disabled=r)},[r,n]),w(()=>{if(!n)return;const l=u=>{i(u.detail.value)};return n.addEventListener("dt-change",l),()=>n.removeEventListener("dt-change",l)},[i,n]),a("div",{className:o.providerSelectWrap,children:a("dt-select",{ref:l=>s(l)})})}function X({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[s,l]=A(r);w(()=>{l(r)},[r]);const u=f(()=>{s!==r&&n(s)},[s,n,r]);return b("div",{className:o.providerField,children:[a("label",{className:o.providerFieldLabel,htmlFor:e,children:t}),a("input",{id:e,type:i?"password":"text",className:i?o.textInputSensitive:o.textInput,value:s,onChange:d=>l(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&u()}})]})}function jt({config:e,onChange:t}){const r=B(()=>{const d=oe(e["voice.enabledProviders"]),h=typeof e["voice.defaultProvider"]=="string"&&e["voice.defaultProvider"]?String(e["voice.defaultProvider"]):M;return d.includes(h)||d.unshift(h),d},[e]),i=f(async d=>{const h=d.length>0?d:[M];await t("voice.enabledProviders",Pe(h)),await t("voice.defaultProvider",h[0])},[t]),n=f(async()=>{const d=R.find(h=>!r.includes(h.id));d&&await i([...r,d.id])},[r,i]),s=f(async(d,h)=>{if(d===h||r.includes(h))return;const m=r.map(c=>c===d?h:c);await i(m)},[r,i]),l=f(async d=>{if(r.length===1)return;const h=r.filter(m=>m!==d);await i(h);for(const m of Se(d))await t(m,"")},[r,t,i]),u=f(async d=>{if(r[0]===d)return;const h=[d,...r.filter(m=>m!==d)];await i(h)},[r,i]);return b("div",{className:o.providerGroup,children:[b("div",{className:o.providerGroupHeader,children:[b("div",{children:[a("div",{className:o.rowLabel,children:"Providers"}),a("div",{className:o.rowDescription,children:"Add STT providers, keep your default at the top, and remove unused items."})]}),a("div",{className:o.providerActionButtonWrap,children:a(Z,{onPress:n,disabled:r.length>=R.length,variant:"secondary",children:"Add provider"})})]}),a("div",{className:o.providerList,children:r.map((d,h)=>{const m=ae(d);if(!m)return null;const c=R.filter(p=>p.id===d||!r.includes(p.id));return a("div",{className:o.providerCard,children:a("dt-card",{variant:"outlined",children:b("div",{className:o.providerCardBody,children:[b("div",{className:o.providerCardHeader,children:[b("div",{className:o.providerCardTitleRow,children:[a("div",{className:o.providerCardTitle,children:m.label}),h===0&&a("span",{className:o.providerDefaultBadge,children:"Default"})]}),b("div",{className:o.providerCardActions,children:[a("div",{className:o.providerButtonWrap,children:a(Z,{onPress:()=>u(d),disabled:h===0,variant:"secondary",size:"sm",children:"Set as default"})}),a("div",{className:o.providerButtonWrap,children:a(Z,{onPress:()=>l(d),disabled:r.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),b("div",{className:o.providerFieldGrid,children:[a(Gt,{label:"Provider",value:d,options:c.map(p=>({value:p.id,label:p.label})),onChange:p=>s(d,p)}),m.supportsApiKey&&a(V,{id:`voice-provider-key-${d}`,label:"API Key",value:String(e[`voice.providers.${d}.apiKey`]??""),sensitive:!0,onCommit:p=>t(`voice.providers.${d}.apiKey`,p)}),m.supportsModel&&a(V,{id:`voice-provider-model-${d}`,label:"Model",value:String(e[`voice.providers.${d}.model`]??""),onCommit:p=>t(`voice.providers.${d}.model`,p)}),m.supportsBaseUrl&&a(V,{id:`voice-provider-base-url-${d}`,label:"Base URL",value:String(e[`voice.providers.${d}.baseUrl`]??""),onCommit:p=>t(`voice.providers.${d}.baseUrl`,p)}),m.supportsAzureDeployment&&a(V,{id:`voice-provider-deployment-${d}`,label:"Azure Deployment",value:String(e[`voice.providers.${d}.azureDeployment`]??""),onCommit:p=>t(`voice.providers.${d}.azureDeployment`,p)}),m.supportsAzureApiVersion&&a(V,{id:`voice-provider-api-version-${d}`,label:"Azure API Version",value:String(e[`voice.providers.${d}.azureApiVersion`]??""),onCommit:p=>t(`voice.providers.${d}.azureApiVersion`,p)})]})]})})},d)})})]})}function Z({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[s,l]=A(null);return w(()=>{if(!s)return;const u=()=>{n()};return s.addEventListener("click",u),()=>s.removeEventListener("click",u)},[s,n]),a("dt-button",{ref:u=>l(u),disabled:t,variant:r,size:i,children:e})}function Gt({label:e,value:t,options:r,onChange:i}){const[n,s]=A(null);return w(()=>{n&&(n.options=r)},[r,n]),w(()=>{n&&(n.value=t)},[n,t]),w(()=>{if(!n)return;const l=u=>{i(u.detail.value)};return n.addEventListener("dt-change",l),()=>n.removeEventListener("dt-change",l)},[i,n]),b("div",{className:o.providerField,children:[a("label",{className:o.providerFieldLabel,children:e}),a("div",{className:o.providerSelectWrap,children:a("dt-select",{ref:l=>s(l)})})]})}function V({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[s,l]=A(r);w(()=>{l(r)},[r]);const u=f(()=>{s!==r&&n(s)},[s,n,r]);return b("div",{className:o.providerField,children:[a("label",{className:o.providerFieldLabel,htmlFor:e,children:t}),a("input",{id:e,type:i?"password":"text",className:i?o.textInputSensitive:o.textInput,value:s,onChange:d=>l(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&u()}})]})}function Yt({title:e,children:t}){return b("section",{className:o.section,children:[a("h3",{className:o.sectionTitle,children:e}),t]})}function Jt({schema:e,value:t,onChange:r}){return b("div",{className:o.row,children:[b("div",{className:o.rowInfo,children:[b("div",{className:o.rowLabel,children:[e.label,e.requiresRestart&&a("span",{className:o.rowRestartBadge,children:"restart"})]}),a("div",{className:o.rowDescription,children:e.description})]}),a("div",{className:o.rowControl,children:a(Xt,{schema:e,value:t,onChange:r})})]})}function Xt({schema:e,value:t,onChange:r}){return e.key==="general.accentColor"&&e.type==="string"?a(Qt,{schema:e,value:t,onChange:r}):e.type==="boolean"?a(er,{schema:e,value:t,onChange:r}):e.type==="string"&&e.options?a(tr,{schema:e,value:t,onChange:r}):e.type==="string"?a(ir,{schema:e,value:t,onChange:r}):e.type==="number"?a(nr,{schema:e,value:t,onChange:r}):null}function Zt(e){return/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(e)}function Qt({schema:e,value:t,onChange:r}){const[i,n]=A(t);w(()=>{n(t)},[t]);const s=f(p=>{const y=(p??i).trim();y!==t&&r(e.key,y)},[i,r,e.key,t]),l=f(p=>{n(p.currentTarget.value)},[]),u=f(p=>{const y=p.target.value;n(y),s(y)},[s]),d=f(p=>{n(p.target.value)},[]),h=f(p=>{p.key==="Enter"&&s()},[s]),m=f(()=>{s()},[s]),c=Zt(i)?i:"#7c6ff7";return b("div",{className:o.colorControl,children:[a("input",{type:"color",className:o.colorInput,value:c,onInput:l,onChange:u,"aria-label":`${e.label} picker`}),a("input",{type:"text",className:o.textInput,value:i,onChange:d,onBlur:m,onKeyDown:h,placeholder:"#7c6ff7"})]})}function er({schema:e,value:t,onChange:r}){const i=f(()=>{r(e.key,!t)},[e.key,t,r]);return b("label",{className:o.toggle,children:[a("input",{type:"checkbox",className:o.toggleInput,checked:t,onChange:i}),a("span",{className:o.toggleTrack}),a("span",{className:o.toggleKnob})]})}function tr({schema:e,value:t,onChange:r}){const i=f(n=>{r(e.key,n)},[e.key,r]);return a(rr,{value:t,options:(e.options??[]).map(n=>({value:n,label:n})),onChange:i})}function rr({value:e,options:t,disabled:r=!1,onChange:i}){const[n,s]=A(null);return w(()=>{n&&(n.options=t)},[t,n]),w(()=>{n&&(n.value=e,n.disabled=r)},[r,n,e]),w(()=>{if(!n)return;const l=u=>{i(u.detail.value)};return n.addEventListener("dt-change",l),()=>n.removeEventListener("dt-change",l)},[i,n]),a("div",{className:o.selectWrap,children:a("dt-select",{ref:l=>s(l)})})}function ir({schema:e,value:t,onChange:r}){const[i,n]=A(t);w(()=>{n(t)},[t]);const s=f(()=>{i!==t&&r(e.key,i)},[e.key,i,t,r]),l=f(u=>{u.key==="Enter"&&r(e.key,i)},[e.key,i,r]);return a("input",{type:e.sensitive?"password":"text",className:e.sensitive?o.textInputSensitive:o.textInput,value:i,onChange:u=>n(u.target.value),onBlur:s,onKeyDown:l,placeholder:e.sensitive?"Enter API key...":void 0})}function nr({schema:e,value:t,onChange:r}){const[i,n]=A(String(t));w(()=>{n(String(t))},[t]);const s=f(()=>{let u=Number(i);if(Number.isNaN(u)){n(String(t));return}e.min!==void 0&&(u=Math.max(e.min,u)),e.max!==void 0&&(u=Math.min(e.max,u)),n(String(u)),u!==t&&r(e.key,u)},[e.key,e.min,e.max,i,t,r]),l=f(u=>{u.key==="Enter"&&s()},[s]);return a("input",{type:"number",className:o.numberInput,value:i,min:e.min,max:e.max,onChange:u=>n(u.target.value),onBlur:s,onKeyDown:l})}import{ActionsProvider as sr,Action as D,useCommand as O}from"@desktalk/sdk";function ar({children:e,onConfigChanged:t}){const r=O("preferences.get"),i=O("preferences.set"),n=O("preferences.reset"),s=O("preferences.resetAll"),l=f(async m=>{const c=m?.key;if(!c)throw new Error("Missing required parameter: key");return await r({key:c})},[r]),u=f(async m=>{const c=m?.key;if(!c)throw new Error("Missing required parameter: key");let p=m?.value;if(p===void 0)throw new Error("Missing required parameter: value");const y=Re(c);return y&&(y.type==="number"&&typeof p=="string"?p=Number(p):y.type==="boolean"&&typeof p=="string"&&(p=p==="true")),await i({key:c,value:p}),t(),{success:!0}},[i,t]),d=f(async m=>{const c=m?.key;if(!c)throw new Error("Missing required parameter: key");return await n({key:c}),t(),{success:!0}},[n,t]),h=f(async()=>(await s(),t(),{success:!0}),[s,t]);return b(sr,{children:[a(D,{name:"Get Setting",description:"Read the current value of a setting",params:{key:{type:"string",description:"Setting key (e.g. general.theme)",required:!0}},handler:l}),a(D,{name:"Set Setting",description:"Update a setting value",params:{key:{type:"string",description:"Setting key (e.g. general.theme)",required:!0},value:{type:"string",description:"New value for the setting",required:!0}},handler:u}),a(D,{name:"Reset Setting",description:"Reset a setting to its default value",params:{key:{type:"string",description:"Setting key to reset",required:!0}},handler:d}),a(D,{name:"Reset All",description:"Reset all settings to their default values",handler:h}),e]})}var or=720;function lr(){const[e,t]=A(Le()),[r,i]=A(U[0]),[n,s]=A(null),[l,u]=A(!1),d=K(null),h=K(null),m=te("preferences.getAll"),c=te("preferences.set"),p=f(async()=>{try{const v=await m();t(v)}catch(v){console.error("Failed to load preferences:",v)}},[m]);w(()=>{p()},[p]),w(()=>{if(!h.current)return;const v=x=>{u(x<=or)};v(h.current.clientWidth);const g=new ResizeObserver(x=>{const S=x[0];S&&v(S.contentRect.width)});return g.observe(h.current),()=>g.disconnect()},[]),re("preferences:changed",v=>{t(g=>({...g,[v.key]:v.value})),v.requiresRestart&&y(Q({scope:"preference",key:"notifications.restartRequired",defaultText:"This change requires a restart to take effect."}))}),re("preferences:resetAll",()=>{p(),y(Q({scope:"preference",key:"notifications.resetAll",defaultText:"All settings have been reset to defaults."}))});const y=f(v=>{s(v),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>s(null),4e3)},[]),k=f(async(v,g)=>{t(x=>({...x,[v]:g}));try{await c({key:v,value:g})}catch(x){console.error(`Failed to update ${v}:`,x),p()}},[c,p]),E=U.filter(v=>v===r),C=f(v=>{const g=Ie(v);return v!=="AI"&&v!=="Voice"?g:g.filter(x=>v==="AI"?!x.key.startsWith("ai.providers.")&&x.key!=="ai.defaultProvider"&&x.key!=="ai.enabledProviders":!x.key.startsWith("voice.providers.")&&x.key!=="voice.defaultProvider"&&x.key!=="voice.enabledProviders")},[]);return a(ar,{onConfigChanged:p,children:b("div",{ref:h,className:`${o.root}${l?` ${o.rootCompact}`:""}`,children:[a(Ut,{activeCategory:r,onSelect:i,compact:l}),a("div",{className:o.settingsPanel,children:E.map(v=>{const g=C(v);return b(Yt,{title:v,children:[v==="AI"&&a(Wt,{config:e,onChange:k}),v==="Voice"&&a(jt,{config:e,onChange:k}),g.map(x=>a(Jt,{schema:x,value:e[x.key]??x.default,onChange:k},x.key))]},v)})}),n&&a("div",{className:o.notification,children:n})]})})}function dr(e){const t=_e(e.root);return t.render(a(xe,{windowId:e.windowId,children:a(ye,{miniAppId:e.miniAppId,children:a(lr,{})})})),{deactivate(){t.unmount()}}}export{dr as activate};
1737
1737
  (() => {
1738
1738
  if (typeof document === 'undefined') return;
1739
- const styleId = "desktalk-style-desktalk-miniapp-preference-xj7a6e";
1739
+ const styleId = "desktalk-style-desktalk-miniapp-preference-fziypz";
1740
1740
  if (document.getElementById(styleId)) return;
1741
1741
  const style = document.createElement('style');
1742
1742
  style.id = styleId;
1743
- style.textContent = "/* src/styles/PreferenceApp.module.css */\n.PreferenceApp_root {\n display: flex;\n height: 100%;\n overflow: hidden;\n background: var(--dt-window-body);\n color: var(--dt-text);\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n}\n.PreferenceApp_rootCompact {\n flex-direction: column;\n}\n.PreferenceApp_sidebar {\n width: 180px;\n min-width: 180px;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n overflow-y: auto;\n padding: 8px 0;\n border-right: 1px solid var(--dt-border);\n}\n.PreferenceApp_sidebarHeader {\n padding: 12px 16px 8px;\n color: var(--dt-text-muted);\n font-size: 11px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.PreferenceApp_categoryItem {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border: none;\n background: none;\n color: var(--dt-text);\n cursor: pointer;\n font-family: inherit;\n font-size: 13px;\n text-align: left;\n transition: background 0.1s;\n}\n.PreferenceApp_categoryItem:hover {\n background: var(--dt-surface-hover);\n}\n.PreferenceApp_categoryItemActive {\n background: var(--dt-surface);\n border-left: 3px solid var(--dt-accent);\n color: var(--dt-accent);\n font-weight: 500;\n padding-left: 13px;\n}\n.PreferenceApp_categoryIcon {\n width: 20px;\n font-size: 15px;\n text-align: center;\n}\n.PreferenceApp_categoryText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.PreferenceApp_settingsPanel {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: 0;\n}\n.PreferenceApp_section {\n padding: 20px 24px 8px;\n}\n.PreferenceApp_sectionTitle {\n margin-bottom: 4px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--dt-border);\n color: var(--dt-text-muted);\n font-size: 13px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.PreferenceApp_row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--dt-border-subtle);\n}\n.PreferenceApp_row:last-child {\n border-bottom: none;\n}\n.PreferenceApp_rowInfo {\n flex: 1;\n min-width: 0;\n}\n.PreferenceApp_rowLabel {\n margin-bottom: 2px;\n font-size: 14px;\n font-weight: 500;\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n}\n.PreferenceApp_rowDescription {\n color: var(--dt-text-muted);\n font-size: 12px;\n line-height: 1.4;\n}\n.PreferenceApp_rowRestartBadge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 5px;\n border-radius: 3px;\n background: var(--dt-warning-subtle);\n color: var(--dt-warning);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.03em;\n text-transform: uppercase;\n}\n.PreferenceApp_rowControl {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_providerGroup {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 0 18px;\n border-bottom: 1px solid var(--dt-border-subtle);\n}\n.PreferenceApp_providerGroupHeader {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.PreferenceApp_providerList {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.PreferenceApp_providerCard {\n margin: 0;\n}\n.PreferenceApp_providerCard dt-card {\n display: block;\n margin: 0;\n}\n.PreferenceApp_providerCardBody {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n.PreferenceApp_providerCardHeader {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.PreferenceApp_providerCardTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_providerCardTitle {\n font-size: 14px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: -0.01em;\n}\n.PreferenceApp_providerDefaultBadge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--dt-accent-ghost);\n color: var(--dt-accent);\n font-size: 11px;\n font-weight: 600;\n}\n.PreferenceApp_providerCardActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 8px;\n}\n.PreferenceApp_providerActionButtonWrap,\n.PreferenceApp_providerButtonWrap {\n display: inline-flex;\n}\n.PreferenceApp_providerActionButtonWrap dt-button,\n.PreferenceApp_providerButtonWrap dt-button {\n display: inline-flex;\n}\n.PreferenceApp_providerFieldGrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n.PreferenceApp_providerField {\n display: flex;\n min-width: 0;\n flex-direction: column;\n gap: 6px;\n}\n.PreferenceApp_providerFieldLabel {\n color: var(--dt-text-muted);\n font-size: 11px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.PreferenceApp_providerSelectWrap {\n width: 100%;\n}\n.PreferenceApp_providerSelectWrap dt-select {\n display: block;\n width: 100%;\n}\n.PreferenceApp_subscriptionAuth {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n border: 1px solid var(--dt-border);\n border-radius: 8px;\n background: var(--dt-surface);\n grid-column: 1 / -1;\n}\n.PreferenceApp_subscriptionAuthConnected {\n border-color: color-mix(in oklab, var(--dt-success) 40%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-success) 6%, var(--dt-surface));\n}\n.PreferenceApp_subscriptionAuthPending {\n border-color: color-mix(in oklab, var(--dt-warning) 40%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-warning) 6%, var(--dt-surface));\n}\n.PreferenceApp_subscriptionAuthStatus {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n}\n.PreferenceApp_subscriptionAuthStatusConnected {\n color: var(--dt-success);\n font-weight: 500;\n}\n.PreferenceApp_subscriptionAuthCode {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--dt-surface-hover);\n font-family: var(--font-mono);\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.08em;\n user-select: all;\n}\n.PreferenceApp_subscriptionAuthProgress {\n color: var(--dt-text-muted);\n font-size: 12px;\n font-style: italic;\n}\n.PreferenceApp_selectWrap {\n min-width: 120px;\n}\n.PreferenceApp_selectWrap dt-select {\n display: block;\n min-width: 120px;\n}\n.PreferenceApp_textInput,\n.PreferenceApp_numberInput,\n.PreferenceApp_dropdown {\n padding: 6px 10px;\n border: 1px solid var(--dt-border);\n border-radius: 6px;\n background: var(--dt-surface);\n color: var(--dt-text);\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n font-size: 13px;\n outline: none;\n transition:\n border-color 0.15s,\n box-shadow 0.15s,\n background 0.15s;\n}\n.PreferenceApp_textInput:focus,\n.PreferenceApp_numberInput:focus,\n.PreferenceApp_dropdown:focus {\n border-color: var(--dt-accent);\n box-shadow: 0 0 0 3px var(--dt-accent-ghost);\n}\n.PreferenceApp_textInput {\n width: 220px;\n}\n.PreferenceApp_textInput::placeholder {\n color: var(--dt-text-muted);\n}\n.PreferenceApp_textInputSensitive {\n font-family: var(--font-mono);\n letter-spacing: 0.05em;\n}\n.PreferenceApp_numberInput {\n width: 100px;\n -moz-appearance: textfield;\n}\n.PreferenceApp_numberInput::-webkit-inner-spin-button,\n.PreferenceApp_numberInput::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n.PreferenceApp_dropdown {\n min-width: 120px;\n cursor: pointer;\n}\n.PreferenceApp_colorControl {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_colorInput {\n width: 40px;\n height: 36px;\n padding: 2px;\n border: 1px solid var(--dt-border);\n border-radius: 8px;\n background: var(--dt-surface);\n cursor: pointer;\n}\n.PreferenceApp_toggle {\n position: relative;\n width: 42px;\n height: 24px;\n flex-shrink: 0;\n cursor: pointer;\n}\n.PreferenceApp_toggleInput {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n}\n.PreferenceApp_toggleTrack {\n position: absolute;\n inset: 0;\n border: 1px solid var(--dt-border);\n border-radius: 12px;\n background: var(--dt-surface);\n transition: background 0.2s, border-color 0.2s;\n}\n.PreferenceApp_toggleInput:checked + .PreferenceApp_toggleTrack {\n border-color: var(--dt-accent);\n background: var(--dt-accent);\n}\n.PreferenceApp_toggleKnob {\n position: absolute;\n top: 3px;\n left: 3px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--dt-text-on-accent);\n transition: transform 0.2s;\n pointer-events: none;\n}\n.PreferenceApp_toggleInput:checked ~ .PreferenceApp_toggleKnob {\n transform: translateX(18px);\n}\n.PreferenceApp_notification {\n position: fixed;\n bottom: 80px;\n left: 50%;\n z-index: 1000;\n padding: 10px 20px;\n border: 1px solid color-mix(in oklab, var(--dt-warning) 40%, var(--dt-border));\n border-radius: 8px;\n background: color-mix(in oklab, var(--dt-warning) 20%, var(--dt-surface));\n box-shadow: 0 14px 28px var(--dt-shadow-color);\n color: var(--dt-text);\n font-size: 13px;\n font-weight: 500;\n transform: translateX(-50%);\n animation: PreferenceApp_slideUp 0.3s ease-out;\n}\n.PreferenceApp_rootCompact .PreferenceApp_sidebar {\n width: 100%;\n min-width: 0;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n overflow-y: visible;\n padding: 10px 12px;\n border-right: none;\n border-bottom: 1px solid var(--dt-border);\n background: color-mix(in oklab, var(--dt-surface) 72%, transparent);\n}\n.PreferenceApp_rootCompact .PreferenceApp_sidebarHeader {\n flex: 0 0 auto;\n padding: 0 10px 0 0;\n border-right: 1px solid var(--dt-border-subtle);\n white-space: nowrap;\n}\n.PreferenceApp_rootCompact .PreferenceApp_categoryItem,\n.PreferenceApp_rootCompact .PreferenceApp_categoryItemActive {\n position: relative;\n width: 40px;\n min-width: 40px;\n height: 40px;\n justify-content: center;\n gap: 0;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 10px;\n flex-shrink: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_categoryItemActive {\n border-left: 1px solid color-mix(in oklab, var(--dt-accent) 45%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-accent) 12%, var(--dt-surface));\n box-shadow: 0 0 0 1px var(--dt-accent-ghost) inset;\n padding-left: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_settingsPanel {\n padding-bottom: 12px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_section {\n padding: 16px 16px 8px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_row {\n align-items: stretch;\n flex-direction: column;\n gap: 12px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_rowControl {\n width: 100%;\n min-width: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerGroupHeader,\n.PreferenceApp_rootCompact .PreferenceApp_providerCardHeader {\n flex-direction: column;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerCardActions {\n justify-content: flex-start;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerActionButtonWrap,\n.PreferenceApp_rootCompact .PreferenceApp_providerButtonWrap {\n width: 100%;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerFieldGrid {\n grid-template-columns: 1fr;\n}\n.PreferenceApp_rootCompact .PreferenceApp_textInput,\n.PreferenceApp_rootCompact .PreferenceApp_textInputSensitive,\n.PreferenceApp_rootCompact .PreferenceApp_numberInput,\n.PreferenceApp_rootCompact .PreferenceApp_dropdown,\n.PreferenceApp_rootCompact .PreferenceApp_providerActionButtonWrap dt-button,\n.PreferenceApp_rootCompact .PreferenceApp_providerButtonWrap dt-button {\n width: 100%;\n min-width: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_colorControl {\n width: 100%;\n}\n.PreferenceApp_rootCompact .PreferenceApp_colorInput {\n flex: 0 0 44px;\n}\n@keyframes PreferenceApp_slideUp {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n/*# sourceMappingURL=frontend.css.map */\n";
1743
+ style.textContent = "/* src/styles/PreferenceApp.module.css */\n.PreferenceApp_root {\n display: flex;\n height: 100%;\n overflow: hidden;\n background: var(--dt-window-body);\n color: var(--dt-text);\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n}\n.PreferenceApp_rootCompact {\n flex-direction: column;\n}\n.PreferenceApp_sidebar {\n width: 180px;\n min-width: 180px;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n overflow-y: auto;\n padding: 8px 0;\n border-right: 1px solid var(--dt-border);\n}\n.PreferenceApp_sidebarHeader {\n padding: 12px 16px 8px;\n color: var(--dt-text-muted);\n font-size: 11px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.05em;\n text-transform: uppercase;\n}\n.PreferenceApp_categoryItem {\n display: flex;\n width: 100%;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n border: none;\n background: none;\n color: var(--dt-text);\n cursor: pointer;\n font-family: inherit;\n font-size: 13px;\n text-align: left;\n transition: background 0.1s;\n}\n.PreferenceApp_categoryItem:hover {\n background: var(--dt-surface-hover);\n}\n.PreferenceApp_categoryItemActive {\n background: var(--dt-surface);\n border-left: 3px solid var(--dt-accent);\n color: var(--dt-accent);\n font-weight: 500;\n padding-left: 13px;\n}\n.PreferenceApp_categoryIcon {\n width: 20px;\n font-size: 15px;\n text-align: center;\n}\n.PreferenceApp_categoryText {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.PreferenceApp_settingsPanel {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n padding: 0;\n}\n.PreferenceApp_section {\n padding: 20px 24px 8px;\n}\n.PreferenceApp_sectionTitle {\n margin-bottom: 4px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--dt-border);\n color: var(--dt-text-muted);\n font-size: 13px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.PreferenceApp_row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--dt-border-subtle);\n}\n.PreferenceApp_row:last-child {\n border-bottom: none;\n}\n.PreferenceApp_rowInfo {\n flex: 1;\n min-width: 0;\n}\n.PreferenceApp_rowLabel {\n margin-bottom: 2px;\n font-size: 14px;\n font-weight: 500;\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n}\n.PreferenceApp_rowDescription {\n color: var(--dt-text-muted);\n font-size: 12px;\n line-height: 1.4;\n}\n.PreferenceApp_rowRestartBadge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 5px;\n border-radius: 3px;\n background: var(--dt-warning-subtle);\n color: var(--dt-warning);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.03em;\n text-transform: uppercase;\n}\n.PreferenceApp_rowControl {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_providerGroup {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px 0 18px;\n border-bottom: 1px solid var(--dt-border-subtle);\n}\n.PreferenceApp_providerGroupHeader {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.PreferenceApp_providerList {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n.PreferenceApp_providerCard {\n margin: 0;\n}\n.PreferenceApp_providerCard dt-card {\n display: block;\n margin: 0;\n}\n.PreferenceApp_providerCardBody {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n.PreferenceApp_providerCardHeader {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.PreferenceApp_providerCardTitleRow {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_providerCardTitle {\n font-size: 14px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: -0.01em;\n}\n.PreferenceApp_providerDefaultBadge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 999px;\n background: var(--dt-accent-ghost);\n color: var(--dt-accent);\n font-size: 11px;\n font-weight: 600;\n}\n.PreferenceApp_providerCardActions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: 8px;\n}\n.PreferenceApp_providerActionButtonWrap,\n.PreferenceApp_providerButtonWrap {\n display: inline-flex;\n}\n.PreferenceApp_providerActionButtonWrap dt-button,\n.PreferenceApp_providerButtonWrap dt-button {\n display: inline-flex;\n}\n.PreferenceApp_providerFieldGrid {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 12px;\n}\n.PreferenceApp_providerField {\n display: flex;\n min-width: 0;\n flex-direction: column;\n gap: 6px;\n}\n.PreferenceApp_providerFieldLabel {\n color: var(--dt-text-muted);\n font-size: 11px;\n font-weight: 600;\n font-family: var(--font-display, \"Sora\", system-ui, -apple-system, sans-serif);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n.PreferenceApp_providerSelectWrap {\n width: 100%;\n}\n.PreferenceApp_providerSelectWrap dt-select {\n display: block;\n width: 100%;\n}\n.PreferenceApp_subscriptionAuth {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: 12px;\n padding: 8px 12px;\n border: 1px solid var(--dt-border);\n border-radius: 8px;\n background: var(--dt-surface);\n grid-column: 1 / -1;\n}\n.PreferenceApp_subscriptionAuthConnected {\n border-color: color-mix(in oklab, var(--dt-success) 40%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-success) 6%, var(--dt-surface));\n}\n.PreferenceApp_subscriptionAuthPending {\n border-color: color-mix(in oklab, var(--dt-warning) 40%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-warning) 6%, var(--dt-surface));\n}\n.PreferenceApp_subscriptionAuthStatus {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n}\n.PreferenceApp_subscriptionAuthStatusConnected {\n color: var(--dt-success);\n font-weight: 500;\n}\n.PreferenceApp_subscriptionAuthCode {\n display: inline-block;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--dt-surface-hover);\n font-family: var(--font-mono);\n font-size: 14px;\n font-weight: 600;\n letter-spacing: 0.08em;\n user-select: all;\n}\n.PreferenceApp_subscriptionAuthProgress {\n color: var(--dt-text-muted);\n font-size: 12px;\n font-style: italic;\n}\n.PreferenceApp_manualCodeInput {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px dashed var(--dt-border);\n width: 100%;\n}\n.PreferenceApp_manualCodeHint {\n font-size: 12px;\n color: var(--dt-text-muted);\n}\n.PreferenceApp_manualCodeRow {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n.PreferenceApp_manualCodeRow .PreferenceApp_manualCodeTextInput {\n flex: 1;\n min-width: 0;\n padding: 6px 10px;\n border: 1px solid var(--dt-border);\n border-radius: 6px;\n background: var(--dt-surface);\n color: var(--dt-text);\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n font-size: 13px;\n outline: none;\n transition:\n border-color 0.15s,\n box-shadow 0.15s,\n background 0.15s;\n}\n.PreferenceApp_manualCodeRow .PreferenceApp_manualCodeTextInput:focus {\n border-color: var(--dt-accent);\n box-shadow: 0 0 0 3px var(--dt-accent-ghost);\n}\n.PreferenceApp_manualCodeRow .PreferenceApp_manualCodeTextInput::placeholder {\n color: var(--dt-text-muted);\n}\n.PreferenceApp_selectWrap {\n min-width: 120px;\n}\n.PreferenceApp_selectWrap dt-select {\n display: block;\n min-width: 120px;\n}\n.PreferenceApp_textInput,\n.PreferenceApp_numberInput,\n.PreferenceApp_dropdown {\n padding: 6px 10px;\n border: 1px solid var(--dt-border);\n border-radius: 6px;\n background: var(--dt-surface);\n color: var(--dt-text);\n font-family: var(--font-ui, \"Work Sans\", system-ui, -apple-system, sans-serif);\n font-size: 13px;\n outline: none;\n transition:\n border-color 0.15s,\n box-shadow 0.15s,\n background 0.15s;\n}\n.PreferenceApp_textInput:focus,\n.PreferenceApp_numberInput:focus,\n.PreferenceApp_dropdown:focus {\n border-color: var(--dt-accent);\n box-shadow: 0 0 0 3px var(--dt-accent-ghost);\n}\n.PreferenceApp_textInput {\n width: 220px;\n}\n.PreferenceApp_textInput::placeholder {\n color: var(--dt-text-muted);\n}\n.PreferenceApp_textInputSensitive {\n font-family: var(--font-mono);\n letter-spacing: 0.05em;\n}\n.PreferenceApp_numberInput {\n width: 100px;\n -moz-appearance: textfield;\n}\n.PreferenceApp_numberInput::-webkit-inner-spin-button,\n.PreferenceApp_numberInput::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n.PreferenceApp_dropdown {\n min-width: 120px;\n cursor: pointer;\n}\n.PreferenceApp_colorControl {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.PreferenceApp_colorInput {\n width: 40px;\n height: 36px;\n padding: 2px;\n border: 1px solid var(--dt-border);\n border-radius: 8px;\n background: var(--dt-surface);\n cursor: pointer;\n}\n.PreferenceApp_toggle {\n position: relative;\n width: 42px;\n height: 24px;\n flex-shrink: 0;\n cursor: pointer;\n}\n.PreferenceApp_toggleInput {\n position: absolute;\n width: 0;\n height: 0;\n opacity: 0;\n}\n.PreferenceApp_toggleTrack {\n position: absolute;\n inset: 0;\n border: 1px solid var(--dt-border);\n border-radius: 12px;\n background: var(--dt-surface);\n transition: background 0.2s, border-color 0.2s;\n}\n.PreferenceApp_toggleInput:checked + .PreferenceApp_toggleTrack {\n border-color: var(--dt-accent);\n background: var(--dt-accent);\n}\n.PreferenceApp_toggleKnob {\n position: absolute;\n top: 3px;\n left: 3px;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--dt-text-on-accent);\n transition: transform 0.2s;\n pointer-events: none;\n}\n.PreferenceApp_toggleInput:checked ~ .PreferenceApp_toggleKnob {\n transform: translateX(18px);\n}\n.PreferenceApp_notification {\n position: fixed;\n bottom: 80px;\n left: 50%;\n z-index: 1000;\n padding: 10px 20px;\n border: 1px solid color-mix(in oklab, var(--dt-warning) 40%, var(--dt-border));\n border-radius: 8px;\n background: color-mix(in oklab, var(--dt-warning) 20%, var(--dt-surface));\n box-shadow: 0 14px 28px var(--dt-shadow-color);\n color: var(--dt-text);\n font-size: 13px;\n font-weight: 500;\n transform: translateX(-50%);\n animation: PreferenceApp_slideUp 0.3s ease-out;\n}\n.PreferenceApp_rootCompact .PreferenceApp_sidebar {\n width: 100%;\n min-width: 0;\n flex-direction: row;\n align-items: center;\n gap: 8px;\n overflow-x: auto;\n overflow-y: visible;\n padding: 10px 12px;\n border-right: none;\n border-bottom: 1px solid var(--dt-border);\n background: color-mix(in oklab, var(--dt-surface) 72%, transparent);\n}\n.PreferenceApp_rootCompact .PreferenceApp_sidebarHeader {\n flex: 0 0 auto;\n padding: 0 10px 0 0;\n border-right: 1px solid var(--dt-border-subtle);\n white-space: nowrap;\n}\n.PreferenceApp_rootCompact .PreferenceApp_categoryItem,\n.PreferenceApp_rootCompact .PreferenceApp_categoryItemActive {\n position: relative;\n width: 40px;\n min-width: 40px;\n height: 40px;\n justify-content: center;\n gap: 0;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 10px;\n flex-shrink: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_categoryItemActive {\n border-left: 1px solid color-mix(in oklab, var(--dt-accent) 45%, var(--dt-border));\n background: color-mix(in oklab, var(--dt-accent) 12%, var(--dt-surface));\n box-shadow: 0 0 0 1px var(--dt-accent-ghost) inset;\n padding-left: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_settingsPanel {\n padding-bottom: 12px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_section {\n padding: 16px 16px 8px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_row {\n align-items: stretch;\n flex-direction: column;\n gap: 12px;\n}\n.PreferenceApp_rootCompact .PreferenceApp_rowControl {\n width: 100%;\n min-width: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerGroupHeader,\n.PreferenceApp_rootCompact .PreferenceApp_providerCardHeader {\n flex-direction: column;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerCardActions {\n justify-content: flex-start;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerActionButtonWrap,\n.PreferenceApp_rootCompact .PreferenceApp_providerButtonWrap {\n width: 100%;\n}\n.PreferenceApp_rootCompact .PreferenceApp_providerFieldGrid {\n grid-template-columns: 1fr;\n}\n.PreferenceApp_rootCompact .PreferenceApp_textInput,\n.PreferenceApp_rootCompact .PreferenceApp_textInputSensitive,\n.PreferenceApp_rootCompact .PreferenceApp_numberInput,\n.PreferenceApp_rootCompact .PreferenceApp_dropdown,\n.PreferenceApp_rootCompact .PreferenceApp_providerActionButtonWrap dt-button,\n.PreferenceApp_rootCompact .PreferenceApp_providerButtonWrap dt-button {\n width: 100%;\n min-width: 0;\n}\n.PreferenceApp_rootCompact .PreferenceApp_colorControl {\n width: 100%;\n}\n.PreferenceApp_rootCompact .PreferenceApp_colorInput {\n flex: 0 0 44px;\n}\n@keyframes PreferenceApp_slideUp {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n/*# sourceMappingURL=frontend.css.map */\n";
1744
1744
  document.head.appendChild(style);
1745
1745
  })();