@desktalk/miniapp-preference 0.1.0-alpha.3 → 0.1.2

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 X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr=m.Component,lr=m.Fragment,cr=m.Profiler,ur=m.PureComponent,hr=m.StrictMode,pr=m.Suspense,mr=m.cloneElement,vr=m.createContext,br=m.createElement,gr=m.createRef,fr=m.forwardRef,_r=m.isValidElement,yr=m.lazy,xr=m.memo,wr=m.startTransition,v=m.useCallback,kr=m.useContext,Ar=m.useDebugValue,Cr=m.useDeferredValue,y=m.useEffect,Er=m.useId,Sr=m.useImperativeHandle,zr=m.useInsertionEffect,Pr=m.useLayoutEffect,Z=m.useMemo,Mr=m.useReducer,J=m.useRef,k=m.useState,Nr=m.useSyncExternalStore,Tr=m.useTransition,Lr=m.version,Q=window.ReactDOM,be=Q.createRoot,Rr=Q.hydrateRoot;import{useCommand as ee,useEvent as te,MiniAppIdProvider as ge,WindowIdProvider as fe}from"@desktalk/sdk";var D=["General","Server","AI","Voice"],z="openai",P=[{id:"anthropic",label:"Anthropic",supportsApiKey:!0,supportsBaseUrl:!1},{id:"azure-openai-responses",label:"Azure OpenAI",supportsApiKey:!0,supportsBaseUrl:!0},{id:z,label:"OpenAI",supportsApiKey:!0,supportsBaseUrl:!0},{id:"google",label:"Google Gemini",supportsApiKey:!0,supportsBaseUrl:!1},{id:"mistral",label:"Mistral",supportsApiKey:!0,supportsBaseUrl:!0},{id:"groq",label:"Groq",supportsApiKey:!0,supportsBaseUrl:!0},{id:"cerebras",label:"Cerebras",supportsApiKey:!0,supportsBaseUrl:!0},{id:"xai",label:"xAI",supportsApiKey:!0,supportsBaseUrl:!0},{id:"openrouter",label:"OpenRouter",supportsApiKey:!0,supportsBaseUrl:!0},{id:"vercel-ai-gateway",label:"Vercel AI Gateway",supportsApiKey:!0,supportsBaseUrl:!0},{id:"zai",label:"ZAI",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode",label:"OpenCode Zen",supportsApiKey:!0,supportsBaseUrl:!1},{id:"opencode-go",label:"OpenCode Go",supportsApiKey:!0,supportsBaseUrl:!1},{id:"huggingface",label:"Hugging Face",supportsApiKey:!0,supportsBaseUrl:!0},{id:"kimi-coding",label:"Kimi For Coding",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax",label:"MiniMax",supportsApiKey:!0,supportsBaseUrl:!1},{id:"minimax-cn",label:"MiniMax China",supportsApiKey:!0,supportsBaseUrl:!1},{id:"ollama",label:"Ollama",supportsApiKey:!1,supportsBaseUrl:!0}],C="openai-whisper",M=[{id:C,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}],_e=new Set(P.map(e=>e.id)),ye=new Set(M.map(e=>e.id));function re(e){return P.find(t=>t.id===e)}function xe(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[z];const t=e.split(",").map(r=>r.trim()).filter((r,i,n)=>r&&n.indexOf(r)===i&&_e.has(r));return t.length>0?t:[z]}function we(e){return ie(e.join(",")).join(",")}function ne(e){return M.find(t=>t.id===e)}function ke(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[C];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:[C]}function Ae(e){return se(e.join(",")).join(",")}function Ce(){const e=[{key:"ai.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured AI providers.",type:"string",default:z,category:"AI"},{key:"ai.defaultProvider",label:"Default Provider",description:"Provider selected by default for chat and tool execution.",type:"string",default:z,options:P.map(t=>t.id),category:"AI"}];for(const t of P)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 Ee=Ce();function Se(){const e=[{key:"voice.enabledProviders",label:"Enabled Providers",description:"Ordered list of configured STT providers.",type:"string",default:C,category:"Voice"},{key:"voice.defaultProvider",label:"Default Provider",description:"Provider selected by default for voice transcription.",type:"string",default:C,options:M.map(t=>t.id),category:"Voice"}];for(const t of M)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===C?"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 ze=Se(),$=[{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},...Ee,...ze,{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 Pe(){const e={};for(const t of $)e[t.key]=t.default;return e}function Me(e){return $.find(t=>t.key===e)}function Ne(e){return $.filter(t=>t.category===e)}var Te=`.dt-tooltip-popup {
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 {
2
2
  position: fixed;
3
3
  z-index: 2147483647;
4
4
  padding: 6px 10px;
@@ -41,13 +41,13 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
41
41
 
42
42
  /* Arrow styling - tech/minimal */
43
43
  .dt-tooltip-popup[data-actual-placement='top'] {
44
- transform: translateX(-50%);
44
+ transform: none;
45
45
  }
46
46
 
47
47
  .dt-tooltip-popup[data-actual-placement='top']::before {
48
48
  top: auto;
49
49
  bottom: -4px;
50
- left: 50%;
50
+ left: var(--dt-tooltip-arrow-left, 50%);
51
51
  transform: translateX(-50%);
52
52
  width: 0;
53
53
  height: 0;
@@ -58,13 +58,13 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
58
58
  }
59
59
 
60
60
  .dt-tooltip-popup[data-actual-placement='bottom'] {
61
- transform: translateX(-50%);
61
+ transform: none;
62
62
  }
63
63
 
64
64
  .dt-tooltip-popup[data-actual-placement='bottom']::before {
65
65
  bottom: auto;
66
66
  top: -4px;
67
- left: 50%;
67
+ left: var(--dt-tooltip-arrow-left, 50%);
68
68
  transform: translateX(-50%);
69
69
  width: 0;
70
70
  height: 0;
@@ -75,12 +75,12 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
75
75
  }
76
76
 
77
77
  .dt-tooltip-popup[data-actual-placement='left'] {
78
- transform: translateY(-50%);
78
+ transform: none;
79
79
  }
80
80
 
81
81
  .dt-tooltip-popup[data-actual-placement='left']::before {
82
82
  left: auto;
83
- top: 50%;
83
+ top: var(--dt-tooltip-arrow-top, 50%);
84
84
  right: -4px;
85
85
  transform: translateY(-50%);
86
86
  width: 0;
@@ -92,12 +92,12 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
92
92
  }
93
93
 
94
94
  .dt-tooltip-popup[data-actual-placement='right'] {
95
- transform: translateY(-50%);
95
+ transform: none;
96
96
  }
97
97
 
98
98
  .dt-tooltip-popup[data-actual-placement='right']::before {
99
99
  right: auto;
100
- top: 50%;
100
+ top: var(--dt-tooltip-arrow-top, 50%);
101
101
  left: -4px;
102
102
  transform: translateY(-50%);
103
103
  width: 0;
@@ -107,7 +107,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
107
107
  border-top: none;
108
108
  border-bottom: none;
109
109
  }
110
- `,Le="dt-tooltip-popup",E=8,ae=!1;function Re(){if(ae)return;let e=document.createElement("style");e.setAttribute("data-dt-tooltip",""),e.textContent=Te,document.head.appendChild(e),ae=!0}var Ie=class extends HTMLElement{_popup=null;_showTimeout=null;_tooltipId="";_visible=!1;static get observedAttributes(){return["content","placement","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 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(){Re(),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=Le,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,a=this.placement;a==="top"&&t.top-r.height-E<0?a="bottom":a==="bottom"&&t.bottom+r.height+E>n?a="top":a==="left"&&t.left-r.width-E<0?a="right":a==="right"&&t.right+r.width+E>i&&(a="left"),e.setAttribute("data-actual-placement",a);let c,d;switch(a){case"top":d=t.left+t.width/2,c=t.top-r.height-E;break;case"bottom":d=t.left+t.width/2,c=t.bottom+E;break;case"left":d=t.left-r.width-E,c=t.top+t.height/2;break;case"right":d=t.right+E,c=t.top+t.height/2;break}e.style.left=`${d}px`,e.style.top=`${c}px`}},Ve=`:host {
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 {
111
111
  display: block;
112
112
  margin-bottom: 12px;
113
113
  }
@@ -183,7 +183,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
183
183
  ::slotted(p:last-child) {
184
184
  margin-bottom: 0;
185
185
  }
186
- `,He="dt-card-inner",Fe=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=Ve,e.appendChild(t);let r=document.createElement("div");r.className=He,r.innerHTML="<slot></slot>",e.appendChild(r)}},De=`.dt-select-menu {
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 {
187
187
  position: fixed;
188
188
  z-index: 2147483646;
189
189
  display: flex;
@@ -253,7 +253,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
253
253
  text-overflow: ellipsis;
254
254
  white-space: nowrap;
255
255
  }
256
- `,$e=`:host {
256
+ `,Oe=`:host {
257
257
  display: block;
258
258
  width: 100%;
259
259
  min-width: 0;
@@ -356,7 +356,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
356
356
  .dt-select-trigger[aria-expanded='true'] .dt-select-chevron {
357
357
  transform: rotate(180deg);
358
358
  }
359
- `,Oe="dt-select-trigger",oe="dt-select-label",Be="dt-select-chevron",Ke="dt-select-menu",Ue="dt-select-option",We="dt-select-option--active",de=!1;function qe(){if(de)return;let e=document.createElement("style");e.setAttribute("data-dt-select",""),e.textContent=De,document.head.appendChild(e),de=!0}var je=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=$e,e.appendChild(t);let r=document.createElement("button");r.type="button",r.className=Oe,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=Be,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(){qe(),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=Ke,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)})}_close(){if(this._open){if(document.removeEventListener("mousedown",this._onOutsideClick),document.removeEventListener("keydown",this._onKeyDown),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()};_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=Ue,r.setAttribute("role","option"),r.setAttribute("aria-selected",String(t.value===this.value)),t.value===this.value&&r.classList.add(We);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,a=e.scrollHeight||260,c=window.innerHeight;if(n+a>c&&t.top-a-r>0&&(n=t.top-a-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`}},Ge=`:host {
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 {
360
360
  display: block;
361
361
  margin-bottom: 12px;
362
362
  }
@@ -448,7 +448,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
448
448
  ::slotted(*) {
449
449
  min-width: 0;
450
450
  }
451
- `,Ye="dt-grid-inner",Xe=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=Ge,e.appendChild(t);let r=document.createElement("div");r.className=Ye,r.innerHTML="<slot></slot>",e.appendChild(r)}},Ze=`:host {
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 {
452
452
  display: block;
453
453
  margin-bottom: 12px;
454
454
  }
@@ -514,7 +514,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
514
514
  ::slotted(*) {
515
515
  min-width: 0;
516
516
  }
517
- `,Je="dt-stack-inner";function O(e){return e==="row"||e==="horizontal"?"row":"column"}var Qe=class extends HTMLElement{static get observedAttributes(){return["direction","gap","align"]}get direction(){return O(this.getAttribute("direction"))}set direction(e){this.setAttribute("direction",O(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=Ze,e.appendChild(t);let r=document.createElement("div");r.className=Je,r.innerHTML="<slot></slot>",e.appendChild(r)}#e(){let e=this.getAttribute("direction"),t=O(e);e!==null&&e!==t&&this.setAttribute("direction",t)}},et=`:host {
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 {
518
518
  display: block;
519
519
  }
520
520
 
@@ -619,7 +619,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
619
619
  .dt-stat-inner .trend.neutral {
620
620
  color: var(--dt-text-muted);
621
621
  }
622
- `,tt="dt-stat-inner",rt=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=et,e.appendChild(t),this._container=document.createElement("div"),this._container.className=tt,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"}},it=`:host {
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 {
623
623
  display: inline-flex;
624
624
  vertical-align: middle;
625
625
  }
@@ -701,7 +701,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
701
701
  padding: 3px 8px;
702
702
  font-size: 0.75rem;
703
703
  }
704
- `,nt="dt-badge-inner",st=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=it,e.appendChild(t),this._container=document.createElement("span"),this._container.className=nt;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)}},at=`:host {
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 {
705
705
  display: inline-flex;
706
706
  vertical-align: middle;
707
707
  }
@@ -718,6 +718,9 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
718
718
  font-weight: 600;
719
719
  font-family: var(--font-ui, 'Work Sans', system-ui, sans-serif);
720
720
  line-height: 1.2;
721
+ white-space: nowrap;
722
+ overflow: hidden;
723
+ text-overflow: ellipsis;
721
724
  cursor: pointer;
722
725
  transition: all 0.1s ease;
723
726
  background: var(--dt-surface);
@@ -860,7 +863,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
860
863
  width: 1em;
861
864
  height: 1em;
862
865
  }
863
- `,ot="dt-button-inner",dt=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=at,e.appendChild(t),this._button=document.createElement("button"),this._button.className=ot,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}}},lt=`:host {
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 {
864
867
  display: block;
865
868
  }
866
869
 
@@ -925,7 +928,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
925
928
  :host([direction='vertical'][spacing='lg']) .dt-divider-inner {
926
929
  margin: 0 18px;
927
930
  }
928
- `,ct="dt-divider-inner",ut=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=lt,e.appendChild(t);let r=document.createElement("hr");r.className=ct,e.appendChild(r)}},ht=`:host {
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 {
929
932
  display: block;
930
933
  min-height: 180px;
931
934
  color: var(--dt-text);
@@ -1093,7 +1096,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
1093
1096
  letter-spacing: 0.08em;
1094
1097
  font-size: 0.75rem;
1095
1098
  }
1096
- `;function pt(e){return e==null||e===!1?null:e===!0?"":String(e)}function mt(e,t){let r=e.querySelectorAll("*");for(let i of r){let n=i.getAttribute("data-field");if(n){let a=t[n];i.textContent=a==null?"":String(a)}for(let a of i.getAttributeNames()){if(a==="data-field"||!a.startsWith("data-field-"))continue;let c=a.slice(11);if(!c)continue;let d=i.getAttribute(a);if(!d)continue;let s=pt(t[d]);s===null?i.removeAttribute(c):i.setAttribute(c,s)}}}function le(e,t){let r=e.content.cloneNode(!0);return mt(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)),s=Math.max(0,Math.floor(this._scrollTop/this._fixedSize)-this._overscan),h=Math.min(this._count,s+d+this._overscan*2),p=s*this._fixedSize,f=this._count*this._fixedSize,u=Math.max(0,f-p-(h-s)*this._fixedSize);return{start:s,end:h,paddingTop:p,paddingBottom:u,totalHeight:f}}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 a=this.getTotalHeight(),c=Math.max(0,a-this.getOffset(i));return{start:e,end:i,paddingTop:r,paddingBottom:c,totalHeight:a}}};function vt(e){return e&&typeof e=="object"?e:{value:e}}function bt(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 bt(this.getAttribute("align"))}connectedCallback(){this.hidden=!0}attributeChangedCallback(){this.dispatchEvent(new CustomEvent("dt-column-change",{bubbles:!0,composed:!0}))}},gt=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=ht,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=vt(t);for(let n of this._columns){let a=document.createElement("div");if(a.className="dt-table-cell",a.dataset.align=n.align,n.template)a.appendChild(le(n.template,i));else{let c=i[n.field];a.textContent=c==null?"":String(c)}r.appendChild(a)}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})`}},ft=`:host {
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 {
1097
1100
  display: block;
1098
1101
  min-height: 120px;
1099
1102
  color: var(--dt-text);
@@ -1192,7 +1195,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
1192
1195
  letter-spacing: 0.08em;
1193
1196
  font-size: 0.75rem;
1194
1197
  }
1195
- `,he=56;function _t(e){return e&&typeof e=="object"?e:{value:e}}var yt=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=ft,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,_t(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}},xt=`:host {
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 {
1196
1199
  display: block;
1197
1200
  min-height: 220px;
1198
1201
  color: var(--dt-text);
@@ -1279,7 +1282,7 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
1279
1282
  .dt-chart__status[hidden] {
1280
1283
  display: none;
1281
1284
  }
1282
- `,B=null;function wt(){return window.__DtChart?Promise.resolve(window.__DtChart):B||(B=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)}),B)}function L(e,t,r){return Math.min(r,Math.max(t,e))}function kt(e){return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}function K(e){let t=e.trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);if(t){let n=t[1],a=n.length===3?n.split("").map(h=>`${h}${h}`).join(""):n,c=parseInt(a.slice(0,2),16)/255,d=parseInt(a.slice(2,4),16)/255,s=parseInt(a.slice(4,6),16)/255;return pe(c,d,s)}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:L(Number(i[2]),0,100),l:L(Number(i[3]),0,100)}:null}function pe(e,t,r){let i=Math.max(e,t,r),n=Math.min(e,t,r),a=i-n,c=0,d=(i+n)/2,s=a===0?0:a/(1-Math.abs(2*d-1));if(a!==0)switch(i){case e:c=60*((t-r)/a%6);break;case t:c=60*((r-e)/a+2);break;default:c=60*((e-t)/a+4);break}return{h:(c+360)%360,s:Math.round(s*100),l:Math.round(d*100)}}function N(e,t=1){return`hsla(${Math.round(e.h)} ${Math.round(e.s)}% ${Math.round(e.l)}% / ${t})`}function At(e){let t=K(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:L(t.s-i*2,55,90),l:L(t.l+(i%2===0?0:6)-i,38,66)}))}function I(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function me(e,t){if(!I(e)||!I(t))return t??e;let r={...e};for(let[i,n]of Object.entries(t)){let a=r[i];r[i]=I(a)&&I(n)?me(a,n):n}return r}function Ct(e){return e==="top"||e==="bottom"||e==="left"||e==="right"?e:"none"}function Et(e){return e==="bar"||e==="line"||e==="area"||e==="pie"||e==="doughnut"||e==="radar"||e==="scatter"||e==="bubble"?e:"bar"}function St(e){return e==="bar"||e==="line"||e==="area"||e==="scatter"||e==="bubble"}function zt(e){return e.map(t=>t.trim()).filter(Boolean)}var Pt=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 Et(this.getAttribute("type"))}set type(e){this.setAttribute("type",e)}get legend(){return Ct(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 zt(kt(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=xt,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=wt().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",a=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",s=At(i),h=this.type==="area"?"line":this.type,p={labels:t.labels??this.labels,datasets:t.datasets.map((u,w)=>{let S=s[w%s.length],A=u.color??N(S,1),T={label:u.label??"",data:u.data,backgroundColor:h==="line"||h==="radar"||h==="scatter"?N(S,h==="scatter"?.95:.24):A,borderColor:A,pointBackgroundColor:A,pointBorderColor:A,pointHoverBackgroundColor:A,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"?{...T,backgroundColor:Array.isArray(u.data)?u.data.map((b,x)=>N(s[x%s.length],.86)):A,borderColor:Array.isArray(u.data)?u.data.map((b,x)=>N(s[x%s.length],1)):A,borderWidth:1}:h==="scatter"||h==="bubble"?{...T,showLine:!1,backgroundColor:N(S,.78)}:T})},f={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:Mt(c,i,.35),borderWidth:1,titleColor:n,bodyColor:n,footerColor:a,titleFont:{family:d,size:11},bodyFont:{family:d,size:11},padding:10}},scales:St(this.type)?{x:{stacked:this.stacked,grid:{display:!1,color:c},border:{color:c},ticks:{color:a,font:{family:d,size:11}}},y:{stacked:this.stacked,beginAtZero:!0,grid:{display:!1,color:c},border:{color:c},ticks:{color:a,font:{family:d,size:11}}}}:h==="radar"?{r:{angleLines:{color:c},grid:{color:c},pointLabels:{color:a,font:{family:d,size:11}},ticks:{color:a,backdropColor:"transparent",font:{family:d,size:10}}}}:void 0};return{type:h,data:p,options:me(f,this._optionsOverride??{})}}_setStatus(e){if(!e){this._status.hidden=!0;return}this._status.hidden=!1,this._status.textContent=e}};function Mt(e,t,r){let i=K(e),n=K(t);if(!i||!n)return e;let a=L(r,0,1),c=((n.h-i.h)%360+540)%360-180;return N({h:(i.h+c*a+360)%360,s:i.s+(n.s-i.s)*a,l:i.l+(n.l-i.l)*a})}var Nt=`:host {
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 {
1283
1286
  display: block;
1284
1287
  color: var(--dt-text);
1285
1288
  font-family: var(--font-sans, 'Inter', sans-serif);
@@ -1451,13 +1454,13 @@ import{__dtLocalize as X}from"@desktalk/sdk";var m=window.React,or=m.Children,dr
1451
1454
  opacity: 0;
1452
1455
  }
1453
1456
  }
1454
- `,U=null;function Tt(){return window.__DtMarked?Promise.resolve(window.__DtMarked):U||(U=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)}),U)}function ve(e){return e.replaceAll(`\r
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
1455
1458
  `,`
1456
- `)}function Lt(e){let t=ve(e).split(`
1459
+ `)}function Rt(e){let t=ge(e).split(`
1457
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(`
1458
1461
  `):t.map(n=>n.slice(i)).join(`
1459
- `)}function Rt(e){let t=ve(e);if((t.match(/(^|\n)(```|~~~)/g)??[]).length%2===0)return t;let r=t.includes("~~~")&&!t.includes("```")?"~~~":"```";return`${t}
1460
- ${r}`}var It=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=Nt,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 Lt(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=Tt().then(e=>(this._runtime=e,e))),this._loadPromise)}async _render(){let e=await this._ensureRuntime(),t=this.content;this.streaming&&(t=Rt(t)),this._body.innerHTML=e.render(t,{unsafeHtml:this.unsafeHtml}),this._caret.hidden=!this.streaming}},Vt=`:host {
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 {
1461
1464
  display: block;
1462
1465
  min-height: 240px;
1463
1466
  color: var(--dt-text);
@@ -1564,6 +1567,34 @@ ${r}`}var It=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1564
1567
  color: var(--dt-text);
1565
1568
  }
1566
1569
 
1570
+ .milkdown .ProseMirror.editor {
1571
+ padding: 0px 54px;
1572
+ }
1573
+
1574
+ .milkdown .ProseMirror.editor h1 {
1575
+ font-size: 36px;
1576
+ }
1577
+
1578
+ .milkdown .ProseMirror.editor h2 {
1579
+ font-size: 30px;
1580
+ }
1581
+
1582
+ .milkdown .ProseMirror.editor h3 {
1583
+ font-size: 24px;
1584
+ }
1585
+
1586
+ .milkdown .ProseMirror.editor h4 {
1587
+ font-size: 20px;
1588
+ }
1589
+
1590
+ .milkdown .ProseMirror.editor h5 {
1591
+ font-size: 16px;
1592
+ }
1593
+
1594
+ .milkdown .ProseMirror.editor h6 {
1595
+ font-size: 16px;
1596
+ }
1597
+
1567
1598
  .milkdown .editor {
1568
1599
  min-height: 100%;
1569
1600
  padding: 16px 18px 20px;
@@ -1574,10 +1605,6 @@ ${r}`}var It=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1574
1605
  line-height: 1.7;
1575
1606
  }
1576
1607
 
1577
- .milkdown .editor > :first-child {
1578
- margin-top: 0;
1579
- }
1580
-
1581
1608
  .milkdown .editor h1,
1582
1609
  .milkdown .editor h2,
1583
1610
  .milkdown .editor h3,
@@ -1603,10 +1630,6 @@ ${r}`}var It=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1603
1630
  font-size: 1.08rem;
1604
1631
  }
1605
1632
 
1606
- .milkdown .editor p {
1607
- margin: 0.65em 0;
1608
- }
1609
-
1610
1633
  .milkdown .editor code {
1611
1634
  padding: 2px 5px;
1612
1635
  border-radius: 2px;
@@ -1663,6 +1686,38 @@ ${r}`}var It=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1663
1686
  padding-left: 1.5rem;
1664
1687
  }
1665
1688
 
1689
+ /* Runtime Milkdown styles are injected after this file, so use scoped CSS
1690
+ variables instead of direct property overrides. */
1691
+ .milkdown .milkdown-list-item-block {
1692
+ --crepe-color-outline: var(--dt-text-secondary);
1693
+ }
1694
+
1695
+ .milkdown .milkdown-block-handle {
1696
+ --crepe-color-outline: var(--dt-text-muted);
1697
+ }
1698
+
1699
+ .milkdown .milkdown-block-handle .operation-item:hover {
1700
+ --crepe-color-outline: var(--dt-text-secondary);
1701
+ }
1702
+
1703
+ .milkdown .milkdown-toolbar {
1704
+ --crepe-color-outline: var(--dt-text-muted);
1705
+ --crepe-color-hover: color-mix(
1706
+ in srgb,
1707
+ var(--dt-surface-hover) 88%,
1708
+ var(--dt-text-secondary) 12%
1709
+ );
1710
+ --crepe-color-selected: color-mix(in srgb, var(--dt-surface-active) 74%, var(--dt-accent) 26%);
1711
+ }
1712
+
1713
+ .milkdown .milkdown-toolbar .toolbar-item:hover {
1714
+ --crepe-color-outline: var(--dt-text-secondary);
1715
+ }
1716
+
1717
+ .milkdown .milkdown-toolbar .toolbar-item.active {
1718
+ --crepe-color-primary: var(--dt-accent);
1719
+ }
1720
+
1666
1721
  .milkdown .editor img {
1667
1722
  max-width: 100%;
1668
1723
  border-radius: 2px;
@@ -1677,13 +1732,14 @@ ${r}`}var It=class extends HTMLElement{_body;_caret;_contentOverride=null;_runti
1677
1732
  .milkdown .editor td {
1678
1733
  border: 1px solid var(--dt-border);
1679
1734
  }
1680
- `,W=null;function Ht(){return window.__DtMilkdown?Promise.resolve(window.__DtMilkdown):W||(W=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)}),W)}var Ft=class extends HTMLElement{_runtimeStyle;_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"}),t=document.createElement("style");t.textContent=Vt,e.appendChild(t),this._runtimeStyle=document.createElement("style"),e.appendChild(this._runtimeStyle),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,this._runtimeStyle.textContent=e.cssText,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(a=>{a.markdownUpdated((c,d)=>{if(this._pendingValue=d,this._suppressNextChange){this._suppressNextChange=!1;return}this._queueChange(d)}),a.focus(()=>{this.dispatchEvent(new CustomEvent("dt-focus",{bubbles:!0,composed:!0}))}),a.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",Ie),customElements.get("dt-card")||customElements.define("dt-card",Fe),customElements.get("dt-select")||customElements.define("dt-select",je),customElements.get("dt-grid")||customElements.define("dt-grid",Xe),customElements.get("dt-stack")||customElements.define("dt-stack",Qe),customElements.get("dt-stat")||customElements.define("dt-stat",rt),customElements.get("dt-badge")||customElements.define("dt-badge",st),customElements.get("dt-button")||customElements.define("dt-button",dt),customElements.get("dt-divider")||customElements.define("dt-divider",ut),customElements.get("dt-list-view")||customElements.define("dt-list-view",yt),customElements.get("dt-table-view")||customElements.define("dt-table-view",gt),customElements.get("dt-column")||customElements.define("dt-column",ue),customElements.get("dt-chart")||customElements.define("dt-chart",Pt),customElements.get("dt-markdown")||customElements.define("dt-markdown",It),customElements.get("dt-markdown-editor")||customElements.define("dt-markdown-editor",Ft);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",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"},V=window.__desktalk_jsx_runtime,o=V.jsx,g=V.jsxs,Vr=V.jsxDEV,Hr=V.Fragment,Dt={General:"\u2699",Server:"\u{1F310}",AI:"\u{1F916}",Voice:"\u{1F399}"};function $t({activeCategory:e,onSelect:t,compact:r=!1}){return g("nav",{className:l.sidebar,children:[o("div",{className:l.sidebarHeader,children:"Settings"}),D.map(i=>{const n=g("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 Ot({config:e,onChange:t}){const r=Z(()=>{const s=ie(e["ai.enabledProviders"]),h=typeof e["ai.defaultProvider"]=="string"&&e["ai.defaultProvider"]?String(e["ai.defaultProvider"]):z;return s.includes(h)||s.unshift(h),s},[e]),i=v(async s=>{const h=s.length>0?s:[z];await t("ai.enabledProviders",we(h)),await t("ai.defaultProvider",h[0])},[t]),n=v(async()=>{const s=P.find(h=>!r.includes(h.id));s&&await i([...r,s.id])},[r,i]),a=v(async(s,h)=>{if(s===h||r.includes(h))return;const p=r.map(f=>f===s?h:f);await i(p)},[r,i]),c=v(async s=>{if(r.length===1)return;const h=r.filter(p=>p!==s);await i(h);for(const p of xe(s))await t(p,"")},[r,t,i]),d=v(async s=>{if(r[0]===s)return;const h=[s,...r.filter(p=>p!==s)];await i(h)},[r,i]);return g("div",{className:l.providerGroup,children:[g("div",{className:l.providerGroupHeader,children:[g("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(q,{onPress:n,disabled:r.length>=P.length,variant:"secondary",children:"Add provider"})})]}),o("div",{className:l.providerList,children:r.map((s,h)=>{const p=re(s);if(!p)return null;const f=P.filter(u=>u.id===s||!r.includes(u.id));return o("div",{className:l.providerCard,children:o("dt-card",{variant:"outlined",children:g("div",{className:l.providerCardBody,children:[g("div",{className:l.providerCardHeader,children:[g("div",{className:l.providerCardTitleRow,children:[o("div",{className:l.providerCardTitle,children:p.label}),h===0&&o("span",{className:l.providerDefaultBadge,children:"Default"})]}),g("div",{className:l.providerCardActions,children:[o("div",{className:l.providerButtonWrap,children:o(q,{onPress:()=>d(s),disabled:h===0,variant:"secondary",size:"sm",children:"Set as default"})}),o("div",{className:l.providerButtonWrap,children:o(q,{onPress:()=>c(s),disabled:r.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),g("div",{className:l.providerFieldGrid,children:[g("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,htmlFor:`ai-provider-${s}`,children:"Provider"}),o(Bt,{value:s,options:f.map(u=>({value:u.id,label:u.label})),onChange:u=>a(s,u)})]}),p.supportsApiKey&&o(j,{id:`ai-provider-key-${s}`,label:"API Key",value:String(e[`ai.providers.${s}.apiKey`]??""),sensitive:!0,onCommit:u=>t(`ai.providers.${s}.apiKey`,u)}),o(j,{id:`ai-provider-model-${s}`,label:"Model",value:String(e[`ai.providers.${s}.model`]??""),onCommit:u=>t(`ai.providers.${s}.model`,u)}),p.supportsBaseUrl&&o(j,{id:`ai-provider-base-url-${s}`,label:"Base URL",value:String(e[`ai.providers.${s}.baseUrl`]??""),onCommit:u=>t(`ai.providers.${s}.baseUrl`,u)})]})]})})},s)})})]})}function q({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[a,c]=k(null);return y(()=>{if(!a)return;const d=()=>{n()};return a.addEventListener("click",d),()=>a.removeEventListener("click",d)},[a,n]),o("dt-button",{ref:d=>c(d),disabled:t,variant:r,size:i,children:e})}function Bt({value:e,options:t,disabled:r=!1,onChange:i}){const[n,a]=k(null);return y(()=>{n&&(n.options=t)},[t,n]),y(()=>{n&&(n.value=e)},[n,e]),y(()=>{n&&(n.disabled=r)},[r,n]),y(()=>{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=>a(c)})})}function j({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[a,c]=k(r);y(()=>{c(r)},[r]);const d=v(()=>{a!==r&&n(a)},[a,n,r]);return g("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:a,onChange:s=>c(s.target.value),onBlur:d,onKeyDown:s=>{s.key==="Enter"&&d()}})]})}function Kt({config:e,onChange:t}){const r=Z(()=>{const s=se(e["voice.enabledProviders"]),h=typeof e["voice.defaultProvider"]=="string"&&e["voice.defaultProvider"]?String(e["voice.defaultProvider"]):C;return s.includes(h)||s.unshift(h),s},[e]),i=v(async s=>{const h=s.length>0?s:[C];await t("voice.enabledProviders",Ae(h)),await t("voice.defaultProvider",h[0])},[t]),n=v(async()=>{const s=M.find(h=>!r.includes(h.id));s&&await i([...r,s.id])},[r,i]),a=v(async(s,h)=>{if(s===h||r.includes(h))return;const p=r.map(f=>f===s?h:f);await i(p)},[r,i]),c=v(async s=>{if(r.length===1)return;const h=r.filter(p=>p!==s);await i(h);for(const p of ke(s))await t(p,"")},[r,t,i]),d=v(async s=>{if(r[0]===s)return;const h=[s,...r.filter(p=>p!==s)];await i(h)},[r,i]);return g("div",{className:l.providerGroup,children:[g("div",{className:l.providerGroupHeader,children:[g("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(G,{onPress:n,disabled:r.length>=M.length,variant:"secondary",children:"Add provider"})})]}),o("div",{className:l.providerList,children:r.map((s,h)=>{const p=ne(s);if(!p)return null;const f=M.filter(u=>u.id===s||!r.includes(u.id));return o("div",{className:l.providerCard,children:o("dt-card",{variant:"outlined",children:g("div",{className:l.providerCardBody,children:[g("div",{className:l.providerCardHeader,children:[g("div",{className:l.providerCardTitleRow,children:[o("div",{className:l.providerCardTitle,children:p.label}),h===0&&o("span",{className:l.providerDefaultBadge,children:"Default"})]}),g("div",{className:l.providerCardActions,children:[o("div",{className:l.providerButtonWrap,children:o(G,{onPress:()=>d(s),disabled:h===0,variant:"secondary",size:"sm",children:"Set as default"})}),o("div",{className:l.providerButtonWrap,children:o(G,{onPress:()=>c(s),disabled:r.length===1,variant:"danger",size:"sm",children:"Delete"})})]})]}),g("div",{className:l.providerFieldGrid,children:[o(Ut,{label:"Provider",value:s,options:f.map(u=>({value:u.id,label:u.label})),onChange:u=>a(s,u)}),p.supportsApiKey&&o(R,{id:`voice-provider-key-${s}`,label:"API Key",value:String(e[`voice.providers.${s}.apiKey`]??""),sensitive:!0,onCommit:u=>t(`voice.providers.${s}.apiKey`,u)}),p.supportsModel&&o(R,{id:`voice-provider-model-${s}`,label:"Model",value:String(e[`voice.providers.${s}.model`]??""),onCommit:u=>t(`voice.providers.${s}.model`,u)}),p.supportsBaseUrl&&o(R,{id:`voice-provider-base-url-${s}`,label:"Base URL",value:String(e[`voice.providers.${s}.baseUrl`]??""),onCommit:u=>t(`voice.providers.${s}.baseUrl`,u)}),p.supportsAzureDeployment&&o(R,{id:`voice-provider-deployment-${s}`,label:"Azure Deployment",value:String(e[`voice.providers.${s}.azureDeployment`]??""),onCommit:u=>t(`voice.providers.${s}.azureDeployment`,u)}),p.supportsAzureApiVersion&&o(R,{id:`voice-provider-api-version-${s}`,label:"Azure API Version",value:String(e[`voice.providers.${s}.azureApiVersion`]??""),onCommit:u=>t(`voice.providers.${s}.azureApiVersion`,u)})]})]})})},s)})})]})}function G({children:e,disabled:t=!1,variant:r="primary",size:i="md",onPress:n}){const[a,c]=k(null);return y(()=>{if(!a)return;const d=()=>{n()};return a.addEventListener("click",d),()=>a.removeEventListener("click",d)},[a,n]),o("dt-button",{ref:d=>c(d),disabled:t,variant:r,size:i,children:e})}function Ut({label:e,value:t,options:r,onChange:i}){const[n,a]=k(null);return y(()=>{n&&(n.options=r)},[r,n]),y(()=>{n&&(n.value=t)},[n,t]),y(()=>{if(!n)return;const c=d=>{i(d.detail.value)};return n.addEventListener("dt-change",c),()=>n.removeEventListener("dt-change",c)},[i,n]),g("div",{className:l.providerField,children:[o("label",{className:l.providerFieldLabel,children:e}),o("div",{className:l.providerSelectWrap,children:o("dt-select",{ref:c=>a(c)})})]})}function R({id:e,label:t,value:r,sensitive:i=!1,onCommit:n}){const[a,c]=k(r);y(()=>{c(r)},[r]);const d=v(()=>{a!==r&&n(a)},[a,n,r]);return g("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:a,onChange:s=>c(s.target.value),onBlur:d,onKeyDown:s=>{s.key==="Enter"&&d()}})]})}function Wt({title:e,children:t}){return g("section",{className:l.section,children:[o("h3",{className:l.sectionTitle,children:e}),t]})}function qt({schema:e,value:t,onChange:r}){return g("div",{className:l.row,children:[g("div",{className:l.rowInfo,children:[g("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(jt,{schema:e,value:t,onChange:r})})]})}function jt({schema:e,value:t,onChange:r}){return e.key==="general.accentColor"&&e.type==="string"?o(Yt,{schema:e,value:t,onChange:r}):e.type==="boolean"?o(Xt,{schema:e,value:t,onChange:r}):e.type==="string"&&e.options?o(Zt,{schema:e,value:t,onChange:r}):e.type==="string"?o(Qt,{schema:e,value:t,onChange:r}):e.type==="number"?o(er,{schema:e,value:t,onChange:r}):null}function Gt(e){return/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(e)}function Yt({schema:e,value:t,onChange:r}){const[i,n]=k(t);y(()=>{n(t)},[t]);const a=v(u=>{const w=(u??i).trim();w!==t&&r(e.key,w)},[i,r,e.key,t]),c=v(u=>{n(u.currentTarget.value)},[]),d=v(u=>{const w=u.target.value;n(w),a(w)},[a]),s=v(u=>{n(u.target.value)},[]),h=v(u=>{u.key==="Enter"&&a()},[a]),p=v(()=>{a()},[a]),f=Gt(i)?i:"#7c6ff7";return g("div",{className:l.colorControl,children:[o("input",{type:"color",className:l.colorInput,value:f,onInput:c,onChange:d,"aria-label":`${e.label} picker`}),o("input",{type:"text",className:l.textInput,value:i,onChange:s,onBlur:p,onKeyDown:h,placeholder:"#7c6ff7"})]})}function Xt({schema:e,value:t,onChange:r}){const i=v(()=>{r(e.key,!t)},[e.key,t,r]);return g("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 Zt({schema:e,value:t,onChange:r}){const i=v(n=>{r(e.key,n)},[e.key,r]);return o(Jt,{value:t,options:(e.options??[]).map(n=>({value:n,label:n})),onChange:i})}function Jt({value:e,options:t,disabled:r=!1,onChange:i}){const[n,a]=k(null);return y(()=>{n&&(n.options=t)},[t,n]),y(()=>{n&&(n.value=e,n.disabled=r)},[r,n,e]),y(()=>{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=>a(c)})})}function Qt({schema:e,value:t,onChange:r}){const[i,n]=k(t);y(()=>{n(t)},[t]);const a=v(()=>{i!==t&&r(e.key,i)},[e.key,i,t,r]),c=v(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:a,onKeyDown:c,placeholder:e.sensitive?"Enter API key...":void 0})}function er({schema:e,value:t,onChange:r}){const[i,n]=k(String(t));y(()=>{n(String(t))},[t]);const a=v(()=>{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=v(d=>{d.key==="Enter"&&a()},[a]);return o("input",{type:"number",className:l.numberInput,value:i,min:e.min,max:e.max,onChange:d=>n(d.target.value),onBlur:a,onKeyDown:c})}import{ActionsProvider as tr,Action as H,useCommand as F}from"@desktalk/sdk";function rr({children:e,onConfigChanged:t}){const r=F("preferences.get"),i=F("preferences.set"),n=F("preferences.reset"),a=F("preferences.resetAll"),c=v(async p=>{const f=p?.key;if(!f)throw new Error("Missing required parameter: key");return await r({key:f})},[r]),d=v(async p=>{const f=p?.key;if(!f)throw new Error("Missing required parameter: key");let u=p?.value;if(u===void 0)throw new Error("Missing required parameter: value");const w=Me(f);return w&&(w.type==="number"&&typeof u=="string"?u=Number(u):w.type==="boolean"&&typeof u=="string"&&(u=u==="true")),await i({key:f,value:u}),t(),{success:!0}},[i,t]),s=v(async p=>{const f=p?.key;if(!f)throw new Error("Missing required parameter: key");return await n({key:f}),t(),{success:!0}},[n,t]),h=v(async()=>(await a(),t(),{success:!0}),[a,t]);return g(tr,{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:s}),o(H,{name:"Reset All",description:"Reset all settings to their default values",handler:h}),e]})}var ir=720;function nr(){const[e,t]=k(Pe()),[r,i]=k(D[0]),[n,a]=k(null),[c,d]=k(!1),s=J(null),h=J(null),p=ee("preferences.getAll"),f=ee("preferences.set"),u=v(async()=>{try{const b=await p();t(b)}catch(b){console.error("Failed to load preferences:",b)}},[p]);y(()=>{u()},[u]),y(()=>{if(!h.current)return;const b=_=>{d(_<=ir)};b(h.current.clientWidth);const x=new ResizeObserver(_=>{const Y=_[0];Y&&b(Y.contentRect.width)});return x.observe(h.current),()=>x.disconnect()},[]),te("preferences:changed",b=>{t(x=>({...x,[b.key]:b.value})),b.requiresRestart&&w(X({scope:"preference",key:"notifications.restartRequired",defaultText:"This change requires a restart to take effect."}))}),te("preferences:resetAll",()=>{u(),w(X({scope:"preference",key:"notifications.resetAll",defaultText:"All settings have been reset to defaults."}))});const w=v(b=>{a(b),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>a(null),4e3)},[]),S=v(async(b,x)=>{t(_=>({..._,[b]:x}));try{await f({key:b,value:x})}catch(_){console.error(`Failed to update ${b}:`,_),u()}},[f,u]),A=D.filter(b=>b===r),T=v(b=>{const x=Ne(b);return b!=="AI"&&b!=="Voice"?x:x.filter(_=>b==="AI"?!_.key.startsWith("ai.providers.")&&_.key!=="ai.defaultProvider"&&_.key!=="ai.enabledProviders":!_.key.startsWith("voice.providers.")&&_.key!=="voice.defaultProvider"&&_.key!=="voice.enabledProviders")},[]);return o(rr,{onConfigChanged:u,children:g("div",{ref:h,className:`${l.root}${c?` ${l.rootCompact}`:""}`,children:[o($t,{activeCategory:r,onSelect:i,compact:c}),o("div",{className:l.settingsPanel,children:A.map(b=>{const x=T(b);return g(Wt,{title:b,children:[b==="AI"&&o(Ot,{config:e,onChange:S}),b==="Voice"&&o(Kt,{config:e,onChange:S}),x.map(_=>o(qt,{schema:_,value:e[_.key]??_.default,onChange:S},_.key))]},b)})}),n&&o("div",{className:l.notification,children:n})]})})}function sr(e){const t=be(e.root);return t.render(o(fe,{windowId:e.windowId,children:o(ge,{miniAppId:e.miniAppId,children:o(nr,{})})})),{deactivate(){t.unmount()}}}export{sr as activate};
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};
1681
1737
  (() => {
1682
1738
  if (typeof document === 'undefined') return;
1683
- const styleId = "desktalk-style-desktalk-miniapp-preference-19q4gw2";
1739
+ const styleId = "desktalk-style-desktalk-miniapp-preference-xj7a6e";
1684
1740
  if (document.getElementById(styleId)) return;
1685
1741
  const style = document.createElement('style');
1686
1742
  style.id = styleId;
1687
- 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_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 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";
1688
1744
  document.head.appendChild(style);
1689
1745
  })();