@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/backend.js +97 -10
- package/dist/backend.js.map +2 -2
- package/dist/components/AiProviderList.d.ts.map +1 -1
- package/dist/frontend.js +93 -37
- package/dist/frontend.js.map +4 -4
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/frontend.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__dtLocalize as
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
`,
|
|
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",
|
|
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
|
-
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
|
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
|
|
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
|
-
`,
|
|
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
|
-
`,
|
|
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
|
|
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
|
|
1460
|
-
${r}`}var
|
|
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-
|
|
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
|
})();
|