sliccy 5.57.2 → 5.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/assets/{account-store-BYbcAgX7.js → account-store-DeK7UruL.js} +2 -2
- package/dist/ui/assets/{account-store-EkiJZvDb.js → account-store-qMohQ2Qn.js} +1 -1
- package/dist/ui/assets/{adobe-DMuIRBCQ.js → adobe-Cn9zIA7L.js} +1 -1
- package/dist/ui/assets/{adobe-igqMI1_L.js → adobe-CqWozxIG.js} +1 -1
- package/dist/ui/assets/{adobe-oauth-state-eyWQK3Db.js → adobe-oauth-state-Ce-nFYwD.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-CdGdh6Me.js → agent-message-to-chat-CR16YH_B.js} +1 -1
- package/dist/ui/assets/{apps-Emj7UfBa.js → apps-sW_GIiLV.js} +1 -1
- package/dist/ui/assets/{azure-openai-CEn91GJx.js → azure-openai-CE_EujYn.js} +1 -1
- package/dist/ui/assets/{azure-openai-DQWYUC5j.js → azure-openai-Dbev4q9_.js} +1 -1
- package/dist/ui/assets/backend-local-J_dSen8g.js +12 -0
- package/dist/ui/assets/backend-local-smcj-_Ox.js +1 -0
- package/dist/ui/assets/{cerebras-DjKubgMp.js → cerebras-B6qhanGF.js} +1 -1
- package/dist/ui/assets/{cerebras-DLspT9p8.js → cerebras-DaVQv6w5.js} +1 -1
- package/dist/ui/assets/clipboard-Dd7TSaNY.js +1 -0
- package/dist/ui/assets/{connect-surface-x3n9svUp.js → connect-surface-DWsc2Ix6.js} +1 -1
- package/dist/ui/assets/dip-CEzGoICa.js +1 -0
- package/dist/ui/assets/{dist-C0XFYJFy.js → dist-DdRkE-CJ.js} +1 -1
- package/dist/ui/assets/{dist-BraUFRGP.js → dist-Mcv_LLQX.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-B7Ss5vVA.js → ensure-speech-assets-C2OKxvHz.js} +1 -1
- package/dist/ui/assets/{fs-BnnBRngY.js → fs-CWcAz8Uy.js} +1 -1
- package/dist/ui/assets/{fs-VHevPF88.js → fs-DUtdHMl7.js} +2 -2
- package/dist/ui/assets/{github-ut2NnHeQ.js → github-BOYsroN1.js} +1 -1
- package/dist/ui/assets/{github-Bko-qYFj.js → github-BUGY99Qu.js} +2 -2
- package/dist/ui/assets/{github-copilot-xTbOqOvQ.js → github-copilot-DW23sfk7.js} +1 -1
- package/dist/ui/assets/{github-copilot-B5DGMnJQ.js → github-copilot-DjbcnqEs.js} +1 -1
- package/dist/ui/assets/{hear-C2OS428l.js → hear-C_tAculX.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-Bi5UIEMG.js → js-realm-worker-CeYHBMC5.js} +7 -7
- package/dist/ui/assets/{kernel-worker-BcsAuImy.js → kernel-worker-B2RCr8bP.js} +983 -983
- package/dist/ui/assets/{kokoro-engine-CNvfDdFE.js → kokoro-engine-BzVhMonx.js} +1 -1
- package/dist/ui/assets/{legacy-styles-CuB1P3LZ.js → legacy-styles-kYboUbpI.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-rLyxnHzf.js → lick-ws-bridge-Ul3b2By1.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DZSVTsLH.js → lick-ws-bridge-pbP4ep0b.js} +1 -1
- package/dist/ui/assets/{local-llm-BwofnZP_.js → local-llm-CdtWQJOw.js} +1 -1
- package/dist/ui/assets/{main-Dn8bgiA6.js → main-Bz6pvkw_.js} +4 -4
- package/dist/ui/assets/{mount-B2oKVbNo.js → mount-CiRdX4fj.js} +1 -1
- package/dist/ui/assets/{mount-DnReidtr.js → mount-KNo0cUyP.js} +2 -2
- package/dist/ui/assets/{new-session-BMIV1D1R.js → new-session-BpYwtvLV.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-rk54U1XV.js → oauth-bootstrap-B70LQN5R.js} +2 -2
- package/dist/ui/assets/{openai-codex-Wx21S4UT.js → openai-codex-BgCS9Xkn.js} +1 -1
- package/dist/ui/assets/{openai-codex-BgAN6_Qw.js → openai-codex-CiP64cn1.js} +1 -1
- package/dist/ui/assets/{page-follower-tray-Df7PCTWs.js → page-follower-tray-BLXhtB3m.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-DYskdWzQ.js → panel-rpc-handlers-BGF5OhTz.js} +2 -2
- package/dist/ui/assets/picker-approval-CdWaB1mR.js +12 -0
- package/dist/ui/assets/{provider-lwmBuH_H.js → provider-BRSOq--m.js} +1 -1
- package/dist/ui/assets/{provider-C1hd8MrJ.js → provider-DY6ES8i7.js} +2 -2
- package/dist/ui/assets/{provider-settings-c9dGiKca.js → provider-settings-aq0o2pyk.js} +1 -1
- package/dist/ui/assets/provider-store-access-CDvQvuQ4.js +1 -0
- package/dist/ui/assets/provider-store-access-TX26YHei.js +1 -0
- package/dist/ui/assets/{providers-6RSF12nO.js → providers-Df974O0G.js} +2 -2
- package/dist/ui/assets/{providers-CsEVgN3c.js → providers-p0Ix3PKN.js} +1 -1
- package/dist/ui/assets/{quick-llm-Dc_7dVli.js → quick-llm-SbNp2nKK.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-DddvZDMC.js → remote-terminal-view-BOSJ_t1v.js} +1 -1
- package/dist/ui/assets/session-freezer-vxtV1LpK.js +1 -0
- package/dist/ui/assets/{speak-DC8ptVJL.js → speak-Djku2JL3.js} +1 -1
- package/dist/ui/assets/sprinkle-components-Bqvrxol0.css +1 -0
- package/dist/ui/assets/{sprinkle-manager-DoYhlu8O.js → sprinkle-manager-BPxv6eq7.js} +1 -1
- package/dist/ui/assets/{store-DGSI1qzi.js → store-BdGCNoTc.js} +1 -1
- package/dist/ui/assets/{sudo-wMWKNcpq.js → sudo-B4P6UuZR.js} +1 -1
- package/dist/ui/assets/{transformers-env-dWV6LRaJ.js → transformers-env-Sk9lwBQS.js} +1 -1
- package/dist/ui/assets/{tray-leader-X9_I01bE.js → tray-leader-Cv4HNtuf.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-Dmyhw5vM.js → tray-leave-runtime-Ckxa9NV8.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DfVhb93y.js → upgrade-detection-flaxn6oN.js} +1 -1
- package/dist/ui/assets/{voice-reply-Dkrp4bDM.js → voice-reply-BRK9m_YT.js} +1 -1
- package/dist/ui/assets/{wc-attach-BUJpM91I.js → wc-attach-CD0VeQoh.js} +2 -2
- package/dist/ui/assets/{wc-extension-Vn2_Lt9D.js → wc-extension-BPNxs0zr.js} +2 -2
- package/dist/ui/assets/{wc-follower-C9lTIhGW.js → wc-follower-tTsKQF56.js} +3 -3
- package/dist/ui/assets/{wc-live-TXJxtPKc.js → wc-live-Jh9SNVcu.js} +5 -5
- package/dist/ui/assets/{wc-nav-XMX7q2dM.js → wc-nav-BIoyHN_8.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DbGx3EvO.js → wc-onboarding-0_zLB6ep.js} +2 -2
- package/dist/ui/assets/{wc-permissions-CKtVglvh.js → wc-permissions-CAEOwurQ.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-BjPMYGhP.js → wc-placeholder-CCgBpFoa.js} +3 -3
- package/dist/ui/assets/{wc-settings-BW0hO_kO.js → wc-settings-DFq8pdha.js} +3 -3
- package/dist/ui/assets/{wc-shell-D1_4xP-C.js → wc-shell-B0AllEPp.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-B_2bqTmh.js → wc-sprinkles-BX_yUFiO.js} +2 -2
- package/dist/ui/assets/{wc-tray-DKOXOmlH.js → wc-tray-BEmhuwEM.js} +2 -2
- package/dist/ui/assets/{whisper-engine-GZAusomQ.js → whisper-engine-DLMeQBbT.js} +1 -1
- package/dist/ui/assets/{xai-grok-C1FhJfKh.js → xai-grok-D0ZJSF8_.js} +1 -1
- package/dist/ui/assets/{xai-grok-DqdH-Jr1.js → xai-grok-fzkJC782.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +2 -2
- package/dist/ui/assets/backend-local-BIUWSGz_.js +0 -1
- package/dist/ui/assets/backend-local-Xd3x-KgI.js +0 -9
- package/dist/ui/assets/clipboard-DFF1k7iL.js +0 -1
- package/dist/ui/assets/dip-Ew0wNwe6.js +0 -1
- package/dist/ui/assets/picker-approval-Dc390nC7.js +0 -9
- package/dist/ui/assets/provider-store-access-CkEGo_9g.js +0 -1
- package/dist/ui/assets/provider-store-access-D-x4-dcp.js +0 -1
- package/dist/ui/assets/session-freezer-IBnu6nM1.js +0 -1
- package/dist/ui/assets/sprinkle-components-Z-5QHGGU.css +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sliccy",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.59.0",
|
|
4
4
|
"description": "Browser-based coding agent with thin CLI server",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"ws": "^8.18.0"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
|
-
"@biomejs/biome": "2.5.
|
|
99
|
+
"@biomejs/biome": "2.5.3",
|
|
100
100
|
"@playwright/test": "^1.58.2",
|
|
101
101
|
"@semantic-release/exec": "7.1.0",
|
|
102
102
|
"@semantic-release/git": "10.0.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./tool-ui-DfXu6quJ.js";import{t as n}from"./types-idfTVsM8.js";import{t as r}from"./picker-approval-Dc390nC7.js";import{i,r as a,t as o}from"./mount-picker-popup-Bs1o43Z5.js";var s=300*1e3,c=5e3,l=Symbol(`mount:timeout`),u=Symbol(`mount:no-panel`),d=class d{kind=`local`;source=void 0;profile=void 0;mountId;handle;closed=!1;constructor(e,t){this.handle=e,this.mountId=t.mountId}static fromHandle(e,t){return new d(e,t)}static async create(e){if(e.isScoop())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let t;return t=e.toolContext?await d.acquireHandleViaToolUI(e.toolContext):e.isExtension?await d.acquireHandleViaPopup():await d.acquireHandleViaDirectPicker(),new d(t,{mountId:e.mountId})}static async acquireHandleViaPopup(){try{let e=await a();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await o(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await i(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}static async acquireHandleViaDirectPicker(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}static async acquireHandleViaToolUI(n){let i=t.generateId(),a=!1,o=!1,f=e({id:i,html:r(`directory`),onAction:(e,t)=>d.resolveApprovalAction(e,t)},n.onUpdate).catch(e=>{if(a)return l;if(o)return u;throw e}),p,m=new Promise(e=>{p=setTimeout(()=>{a=!0,t.cancel(i,`mount: timed out`),e(l)},s)}),h=new Promise(e=>{t.waitForMount(i,c).then(()=>{},()=>{a||(o=!0,t.cancel(i,`mount: panel did not render the approval card`),e(u))})}),g=await Promise.race([f,m,h]);if(p&&clearTimeout(p),g===l)throw Error(`mount: timed out after ${Math.round(s/6e4)} minute(s) waiting for user approval`);if(g===u)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!g)throw Error(`mount: tool UI not available`);let _=g;if(_.denied)throw Error(`mount: denied by user`);if(_.cancelled)throw Error(`mount: cancelled`);if(_.error)throw Error(`mount: ${_.error}`);if(!_.handle)throw Error(`mount: no directory selected`);return _.handle}static async resolveApprovalAction(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await o(n.idbKey);return e?(await i(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}getHandle(){return this.handle}assertOpen(e){if(this.closed)throw new n(`EBADF`,`mount closed`,e)}splitPath(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(e=>e.length>0)}async resolveDir(e,t=!1){let n=this.splitPath(e),r=this.handle;for(let i of n)try{r=await r.getDirectoryHandle(i,{create:t})}catch(t){throw this.toFsError(t,e)}return r}async resolveFile(e,t=!1){let r=this.splitPath(e);if(r.length===0)throw new n(`EISDIR`,`is a directory`,e);let i=r.pop(),a=this.handle;for(let n of r)try{a=await a.getDirectoryHandle(n,{create:t})}catch(t){throw this.toFsError(t,e)}try{return await a.getFileHandle(i,{create:t})}catch(t){throw this.toFsError(t,e)}}toFsError(e,t){if(e instanceof n)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new n(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new n(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new n(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new n(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new n(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new n(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new n(`ENOTEMPTY`,`directory not empty`,t)}return new n(`EINVAL`,e instanceof Error?e.message:String(e),t)}async readDir(e){this.assertOpen(e);let t=await this.resolveDir(e),n=[];for await(let[e,r]of t)if(r.kind===`file`){let t=await r.getFile();n.push({name:e,kind:`file`,size:t.size,lastModified:t.lastModified})}else n.push({name:e,kind:`directory`});return n}async readFile(e){this.assertOpen(e);let t=await(await this.resolveFile(e)).getFile();return new Uint8Array(await t.arrayBuffer())}async writeFile(e,t){this.assertOpen(e);let n=await(await this.resolveFile(e,!0)).createWritable();await n.write(t),await n.close()}async stat(e){if(this.assertOpen(e),this.splitPath(e).length===0)return{kind:`directory`,size:0,mtime:0};try{let t=await(await this.resolveFile(e)).getFile();return{kind:`file`,size:t.size,mtime:t.lastModified}}catch{}return await this.resolveDir(e),{kind:`directory`,size:0,mtime:0}}async mkdir(e){this.assertOpen(e),await this.resolveDir(e,!0)}async remove(e,t){this.assertOpen(e);let r=this.splitPath(e);if(r.length===0)throw new n(`EINVAL`,`cannot remove mount root`,e);let i=r.pop(),a=r.join(`/`),o=await this.resolveDir(a||`/`);try{await o.removeEntry(i,{recursive:t?.recursive??!1})}catch(t){throw this.toFsError(t,e)}}async refresh(){return this.assertOpen(`/`),{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:this.handle.name}}async close(){this.closed=!0}};export{d as t};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{a as t,s as n}from"./tool-ui-t6ocn6AG.js";import{t as r}from"./runtime-env-byAg9ij-.js";import{t as i}from"./types-idfTVsM8.js";const a=Symbol(`picker-approval-timeout`),o={directory:{title:`Mount local directory`,approve:`Select directory`},"usb-device":{title:`Connect USB device`,approve:`Select USB device`},"serial-port":{title:`Connect serial port`,approve:`Select serial port`},"hid-device":{title:`Connect HID device`,approve:`Select HID device`}};function s(e,t=[]){let n=o[e],r=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``;return`
|
|
2
|
-
<div class="sprinkle-action-card">
|
|
3
|
-
<div class="sprinkle-action-card__header">${n.title} <span class="sprinkle-badge sprinkle-badge--notice">approval</span></div>
|
|
4
|
-
<div class="sprinkle-action-card__actions">
|
|
5
|
-
<button class="sprinkle-btn sprinkle-btn--secondary" data-action="deny">Deny</button>
|
|
6
|
-
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${r}>${n.approve}</button>
|
|
7
|
-
</div>
|
|
8
|
-
</div>
|
|
9
|
-
`}async function c(e,r,i){let o=n.generateId(),c=!1,l=t({id:o,html:s(e,r),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle,info:n.info??null}:n?.granted&&n?.info?{approved:!0,info:n.info}:{error:`picker returned an unexpected response`}}},i.onUpdate).catch(e=>{if(c)return a;throw e}),u,d=new Promise(t=>{u=setTimeout(()=>{c=!0,n.cancel(o,`${e}: timed out`),t(a)},12e4)}),f=await Promise.race([l,d]);if(u&&clearTimeout(u),f===a)throw Error(`${e}: timed out after 120s waiting for user approval`);let p=f;if(p.denied)throw Error(`${e}: denied by user`);if(p.cancelled)throw Error(`${e}: cancelled`);if(p.error)throw Error(`${e}: ${p.error}`);if(!p.approved||!p.info)throw Error(`${e}: no device selected`);return{handle:p.handle??``,info:p.info}}const l=(()=>{try{return console}catch{return}})(),u={directory:{width:320,height:120},"usb-device":{width:320,height:120},"serial-port":{width:320,height:120},"hid-device":{width:320,height:120}};function d(){return globalThis.chrome??null}function f(){let e=d();return r()&&typeof e?.windows?.create==`function`}async function p(e,t=[],n=`picker-${Date.now()}-${Math.random().toString(36).slice(2)}`,r={}){let i=d();if(!i?.runtime?.onMessage||!i.windows?.create)throw Error(`picker popup: chrome.windows.create not available`);let a=i.runtime.onMessage,o=i.windows.onRemoved,s=i.runtime.getURL?.bind(i.runtime),c=u[e],f=encodeURIComponent(JSON.stringify(t??[])),p=`kind=${encodeURIComponent(e)}&requestId=${encodeURIComponent(n)}&filters=${f}`,m=s?`${s(`picker-popup.html`)}?${p}`:`picker-popup.html?${p}`;return new Promise(t=>{let s=!1,u,d,f=()=>{try{a.removeListener(h)}catch{}if(o&&g)try{o.removeListener(g)}catch{}u!==void 0&&clearTimeout(u)},p=e=>{s||(s=!0,f(),t(e))},h=t=>{if(s)return;let r=t;if(r?.source!==`picker-popup`||r.kind!==e||r.requestId!==n)return;let{source:i,kind:a,requestId:o,...c}=r;p(c)};a.addListener(h);let g=o?e=>{d!==void 0&&e===d&&p({cancelled:!0})}:void 0;o&&g&&o.addListener(g),r.timeoutMs&&r.timeoutMs>0&&(u=setTimeout(()=>p({cancelled:!0}),r.timeoutMs)),i.windows.create({url:m,type:`popup`,width:c.width,height:c.height,focused:!0}).then(e=>{if(!e?.id){p({error:`failed to open picker window`});return}d=e.id}).catch(e=>{l?.warn?.(`picker popup window.create failed`,e),p({error:e instanceof Error?e.message:String(e)})})})}const m=e(`mount-picker-popup`),h=6e4;function g(e){let t=e??`mount-${Date.now().toString(36)}`;return new Promise(e=>{let n=!1,r=t=>{n||(n=!0,clearTimeout(i),e(t))},i=setTimeout(()=>r({cancelled:!0}),h);p(`directory`,[],t,{timeoutMs:h}).then(e=>{let n=e;if(n.error){m.error(`picker popup launch failed for directory kind`,{requestId:t,error:n.error}),r({error:`Failed to open directory picker window`});return}r(n)}).catch(e=>{m.error(`picker popup launch threw for directory kind`,{requestId:t,error:e instanceof Error?e.message:String(e),name:e instanceof Error?e.name:void 0}),r({error:`Failed to open directory picker window`})})})}async function _(e){let t=await new Promise((e,t)=>{let n=indexedDB.open(`slicc-pending-mount`,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(`handles`)||n.result.createObjectStore(`handles`)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),n=t.transaction(`handles`,`readwrite`),r=n.objectStore(`handles`),i=r.get(e),a=r.delete(e);a.onerror=()=>{m.warn(`Failed to delete pending handle from IDB`,{idbKey:e,error:a.error})};let o=await new Promise((e,t)=>{n.oncomplete=()=>e(i.result??null),i.onerror=()=>t(i.error??Error(`IDB get failed`)),n.onerror=()=>t(n.error??Error(`IDB transaction failed`)),n.onabort=()=>t(n.error??Error(`IDB transaction aborted`))});return t.close(),o}async function v(e){let t=e;if(t.requestPermission){let n=await t.requestPermission({mode:`readwrite`});if(n!==`granted`)throw Error(`Permission denied for "${e.name}" (${n})`)}}const y=Symbol(`mount:timeout`),b=Symbol(`mount:no-panel`);var x=class e{kind=`local`;source=void 0;profile=void 0;mountId;handle;closed=!1;constructor(e,t){this.handle=e,this.mountId=t.mountId}static fromHandle(t,n){return new e(t,n)}static async create(t){if(t.isScoop())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n;return n=t.toolContext?await e.acquireHandleViaToolUI(t.toolContext):t.isExtension?await e.acquireHandleViaPopup():await e.acquireHandleViaDirectPicker(),new e(n,{mountId:t.mountId})}static async acquireHandleViaPopup(){try{let e=await g();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await _(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await v(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}static async acquireHandleViaDirectPicker(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}static async acquireHandleViaToolUI(r){let i=n.generateId(),a=!1,o=!1,c=t({id:i,html:s(`directory`),onAction:(t,n)=>e.resolveApprovalAction(t,n)},r.onUpdate).catch(e=>{if(a)return y;if(o)return b;throw e}),l,u=new Promise(e=>{l=setTimeout(()=>{a=!0,n.cancel(i,`mount: timed out`),e(y)},3e5)}),d=new Promise(e=>{n.waitForMount(i,5e3).then(()=>{},()=>{a||(o=!0,n.cancel(i,`mount: panel did not render the approval card`),e(b))})}),f=await Promise.race([c,u,d]);if(l&&clearTimeout(l),f===y)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(f===b)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!f)throw Error(`mount: tool UI not available`);let p=f;if(p.denied)throw Error(`mount: denied by user`);if(p.cancelled)throw Error(`mount: cancelled`);if(p.error)throw Error(`mount: ${p.error}`);if(!p.handle)throw Error(`mount: no directory selected`);return p.handle}static async resolveApprovalAction(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await _(n.idbKey);return e?(await v(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}getHandle(){return this.handle}assertOpen(e){if(this.closed)throw new i(`EBADF`,`mount closed`,e)}splitPath(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(e=>e.length>0)}async resolveDir(e,t=!1){let n=this.splitPath(e),r=this.handle;for(let i of n)try{r=await r.getDirectoryHandle(i,{create:t})}catch(t){throw this.toFsError(t,e)}return r}async resolveFile(e,t=!1){let n=this.splitPath(e);if(n.length===0)throw new i(`EISDIR`,`is a directory`,e);let r=n.pop(),a=this.handle;for(let r of n)try{a=await a.getDirectoryHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}try{return await a.getFileHandle(r,{create:t})}catch(t){throw this.toFsError(t,e)}}toFsError(e,t){if(e instanceof i)return e;if(e instanceof DOMException){if(e.name===`NotFoundError`)return new i(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatchError`)return new i(`ENOTDIR`,`not a directory`,t);if(e.name===`NotAllowedError`)return new i(`EACCES`,`permission denied`,t);if(e.name===`InvalidModificationError`)return new i(`ENOTEMPTY`,`directory not empty`,t)}if(e instanceof Error){if(e.name===`NotFound`||e.name===`NotFoundError`)return new i(`ENOENT`,`no such file or directory`,t);if(e.name===`TypeMismatch`||e.name===`TypeMismatchError`)return new i(`ENOTDIR`,`not a directory`,t);if(e.name===`InvalidModification`||e.name===`InvalidModificationError`)return new i(`ENOTEMPTY`,`directory not empty`,t)}return new i(`EINVAL`,e instanceof Error?e.message:String(e),t)}async readDir(e){this.assertOpen(e);let t=await this.resolveDir(e),n=[];for await(let[e,r]of t)if(r.kind===`file`){let t=await r.getFile();n.push({name:e,kind:`file`,size:t.size,lastModified:t.lastModified})}else n.push({name:e,kind:`directory`});return n}async readFile(e){this.assertOpen(e);let t=await(await this.resolveFile(e)).getFile();return new Uint8Array(await t.arrayBuffer())}async writeFile(e,t){this.assertOpen(e);let n=await(await this.resolveFile(e,!0)).createWritable();await n.write(t),await n.close()}async stat(e){if(this.assertOpen(e),this.splitPath(e).length===0)return{kind:`directory`,size:0,mtime:0};try{let t=await(await this.resolveFile(e)).getFile();return{kind:`file`,size:t.size,mtime:t.lastModified}}catch{}return await this.resolveDir(e),{kind:`directory`,size:0,mtime:0}}async mkdir(e){this.assertOpen(e),await this.resolveDir(e,!0)}async remove(e,t){this.assertOpen(e);let n=this.splitPath(e);if(n.length===0)throw new i(`EINVAL`,`cannot remove mount root`,e);let r=n.pop(),a=n.join(`/`),o=await this.resolveDir(a||`/`);try{await o.removeEntry(r,{recursive:t?.recursive??!1})}catch(t){throw this.toFsError(t,e)}}async refresh(){return this.assertOpen(`/`),{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:this.handle.name}}async close(){this.closed=!0}};export{p as a,f as i,_ as n,c as o,v as r,x as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./provider-settings-c9dGiKca.js";export{e as copyTextToClipboard};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{m as e}from"./wc-live-TXJxtPKc.js";export{e as setDipExecHandler};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import"./tool-ui-DfXu6quJ.js";var e={directory:{title:`Mount local directory`,approve:`Select directory`},"usb-device":{title:`Connect USB device`,approve:`Select USB device`},"serial-port":{title:`Connect serial port`,approve:`Select serial port`},"hid-device":{title:`Connect HID device`,approve:`Select HID device`}};function t(t,n=[]){let r=e[t],i=n.length?` data-action-data='${JSON.stringify({filters:n}).replace(/'/g,`'`)}'`:``;return`
|
|
2
|
-
<div class="sprinkle-action-card">
|
|
3
|
-
<div class="sprinkle-action-card__header">${r.title} <span class="sprinkle-badge sprinkle-badge--notice">approval</span></div>
|
|
4
|
-
<div class="sprinkle-action-card__actions">
|
|
5
|
-
<button class="sprinkle-btn sprinkle-btn--secondary" data-action="deny">Deny</button>
|
|
6
|
-
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${t}"${i}>${r.approve}</button>
|
|
7
|
-
</div>
|
|
8
|
-
</div>
|
|
9
|
-
`}export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./provider-C1hd8MrJ.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-DGSI1qzi.js";import"./provider-lwmBuH_H.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e}from"./wc-live-TXJxtPKc.js";export{e as readSessionsIndex};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.sprinkle-content{padding:var(--s2-spacing-200)}.sprinkle-heading{font-size:var(--s2-font-size-300);color:var(--s2-gray-900);margin:0 0 var(--s2-spacing-100);letter-spacing:0;font-weight:700;line-height:1.3}.sprinkle-heading--m{font-size:var(--s2-font-size-200)}.sprinkle-heading--s{font-size:var(--s2-font-size-100)}.sprinkle-label{font-size:var(--s2-font-size-50);text-transform:uppercase;letter-spacing:.06em;color:var(--s2-gray-600);margin:0;font-weight:600;line-height:1.3}.sprinkle-body{font-size:var(--s2-font-size-100);color:var(--s2-content-default);font-weight:400;line-height:1.5}.sprinkle-detail{font-size:var(--s2-font-size-75);color:var(--s2-gray-600);font-weight:500;line-height:1.3}.sprinkle-icon{stroke-width:2px;vertical-align:middle;width:16px;height:16px;display:inline-block}.sprinkle-icon svg{width:100%;height:100%;display:block}.sprinkle-icon--xs{width:12px;height:12px}.sprinkle-icon--s{width:14px;height:14px}.sprinkle-icon--m{width:16px;height:16px}.sprinkle-icon--l{width:20px;height:20px}.sprinkle-icon--xl{width:24px;height:24px}.sprinkle-btn{justify-content:center;align-items:center;gap:var(--s2-spacing-75);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-xl);background:var(--s2-gray-50);height:32px;color:var(--s2-gray-800);font-size:var(--s2-font-size-100);font-weight:700;font-family:var(--s2-font-family);cursor:default;box-shadow:var(--s2-shadow-container);transition:background var(--s2-transition-default), border-color var(--s2-transition-default), transform var(--s2-transition-default);padding:0 16px;display:inline-flex}.sprinkle-btn:hover{background:var(--s2-gray-100)}.sprinkle-btn:active{transform:scale(.98)}.sprinkle-btn:focus-visible{outline:2px solid var(--s2-border-focus);outline-offset:2px}.sprinkle-btn:disabled,.sprinkle-btn[disabled]{opacity:.4;pointer-events:none}.sprinkle-btn--primary{background:var(--s2-accent);color:#fff;border-radius:var(--s2-radius-pill);box-shadow:none;border-color:#0000}.sprinkle-btn--primary:hover{background:var(--s2-accent-hover)}.sprinkle-btn--primary:active{background:var(--s2-accent-down);transform:scale(.98)}.sprinkle-btn--secondary{background:var(--s2-gray-50);border-color:var(--s2-gray-200);color:var(--s2-gray-800)}.sprinkle-btn--secondary:hover{background:var(--s2-gray-100)}.sprinkle-btn--negative{background:var(--s2-negative);color:var(--s2-gray-25);border-radius:var(--s2-radius-pill);box-shadow:none;border-color:#0000}.sprinkle-btn--negative:hover{background:color-mix(in srgb, var(--s2-negative) 85%, #000)}.sprinkle-btn--quiet{box-shadow:none;color:var(--s2-gray-800);background:0 0;border-color:#0000}.sprinkle-btn--quiet:hover{background:var(--s2-gray-100)}.sprinkle-btn-group{gap:var(--s2-spacing-100);display:inline-flex}.sprinkle-badge{white-space:nowrap;background:var(--s2-gray-800);color:var(--s2-gray-25);border-radius:8px;align-items:center;gap:4px;padding:4px 8px;font-size:12px;font-weight:700;line-height:16px;display:inline-flex}.sprinkle-badge--positive{background:var(--s2-positive);color:var(--s2-gray-25)}.sprinkle-badge--negative{background:var(--s2-negative);color:var(--s2-gray-25)}.sprinkle-badge--notice{background:var(--s2-notice);color:var(--s2-gray-25)}.sprinkle-badge--informative{background:var(--s2-informative);color:#fff}.sprinkle-badge--accent{background:var(--s2-accent);color:#fff}.sprinkle-badge--subtle{background:var(--uxc-neutral-subtle-bg);color:var(--s2-gray-700)}.sprinkle-badge--subtle.sprinkle-badge--positive{background:var(--uxc-positive-subtle-bg);color:var(--uxc-positive-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--negative{background:var(--uxc-negative-subtle-bg);color:var(--uxc-negative-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--notice{background:var(--uxc-notice-subtle-bg);color:var(--uxc-notice-subtle-text)}.sprinkle-badge--subtle.sprinkle-badge--informative,.sprinkle-badge--subtle.sprinkle-badge--accent{background:var(--uxc-accent-subtle-bg);color:var(--uxc-accent-subtle-text)}.sprinkle-badge--yellow{background:var(--uxc-yellow-subtle-bg);color:var(--uxc-yellow-subtle-text)}.sprinkle-badge--purple{background:var(--uxc-purple-subtle-bg);color:var(--uxc-purple-subtle-text)}.sprinkle-badge--cyan{background:var(--uxc-cyan-subtle-bg);color:var(--uxc-cyan-subtle-text)}.sprinkle-badge--magenta{background:var(--uxc-magenta-subtle-bg);color:var(--uxc-magenta-subtle-text)}.sprinkle-badge--indigo{background:var(--uxc-indigo-subtle-bg);color:var(--uxc-indigo-subtle-text)}.sprinkle-badge--gray{background:var(--uxc-gray-subtle-bg);color:var(--uxc-gray-subtle-text)}.sprinkle-badge--outline{color:var(--s2-content-secondary);box-shadow:inset 0 0 0 1px var(--s2-border-default);background:0 0}.sprinkle-badge--outline.sprinkle-badge--positive{color:var(--s2-positive);box-shadow:inset 0 0 0 1px var(--s2-positive)}.sprinkle-badge--outline.sprinkle-badge--negative{color:var(--s2-negative);box-shadow:inset 0 0 0 1px var(--s2-negative)}.sprinkle-badge--outline.sprinkle-badge--notice{color:var(--s2-notice);box-shadow:inset 0 0 0 1px var(--s2-notice)}.sprinkle-badge--outline.sprinkle-badge--informative{color:var(--s2-informative);box-shadow:inset 0 0 0 1px var(--s2-informative)}.sprinkle-chip{border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-pill);font-size:var(--s2-font-size-75);color:var(--s2-gray-800);cursor:default;transition:background var(--s2-transition-default);background:#fff;align-items:center;gap:6px;padding:6px 12px;font-weight:500;display:inline-flex}.sprinkle-chip:hover{background:var(--s2-gray-50)}.sprinkle-chip svg{flex-shrink:0;width:14px;height:14px}.sprinkle-status-light{align-items:center;gap:var(--s2-spacing-75);font-size:var(--s2-font-size-75);color:var(--s2-content-default);display:inline-flex}.sprinkle-status-light:before{content:"";background:var(--s2-content-tertiary);border-radius:50%;flex-shrink:0;width:8px;height:8px}.sprinkle-status-light--positive:before{background:var(--s2-positive)}.sprinkle-status-light--negative:before{background:var(--s2-negative)}.sprinkle-status-light--notice:before{background:var(--s2-notice)}.sprinkle-status-light--informative:before{background:var(--s2-informative)}.sprinkle-status-light--m{font-size:var(--s2-font-size-100);color:var(--s2-gray-600)}.sprinkle-status-light--m:before{width:10px;height:10px}.sprinkle-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-300);border-radius:var(--s2-radius-xl);padding:var(--s2-spacing-400);box-shadow:var(--s2-shadow-container);transition:box-shadow var(--s2-transition-default)}.sprinkle-card:hover{box-shadow:var(--s2-shadow-elevated)}.sprinkle-stat-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-300);border-radius:var(--s2-radius-xl);padding:var(--s2-spacing-200) var(--s2-spacing-300);text-align:center;box-shadow:var(--s2-shadow-container);transition:box-shadow var(--s2-transition-default)}.sprinkle-stat-card:hover{box-shadow:var(--s2-shadow-elevated)}.sprinkle-stat-card .value{font-size:var(--s2-font-size-500);color:var(--s2-content-default);font-weight:700;line-height:1.2}.sprinkle-stat-card .label{font-size:var(--s2-font-size-75);color:var(--s2-gray-600);margin-top:var(--s2-spacing-50);font-weight:500}.sprinkle-action-card{background:var(--s2-gray-25);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-xl);box-shadow:var(--s2-shadow-container);flex-direction:column;display:flex;overflow:hidden}.sprinkle-action-card__header{color:var(--s2-gray-900);align-items:center;gap:12px;padding:16px 24px;font-size:16px;font-weight:700;line-height:1.3;display:flex}.sprinkle-action-card__header .sprinkle-badge{margin-left:auto}.sprinkle-action-card__icon{border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:40px;min-width:40px;height:40px;font-size:18px;display:flex}.sprinkle-action-card__icon--yellow{color:#9e6600;background:#fff197}.sprinkle-action-card__icon--blue{background:var(--uxc-accent-subtle-bg);color:var(--uxc-accent-subtle-text)}.sprinkle-action-card__icon--green{background:var(--uxc-positive-subtle-bg);color:var(--uxc-positive-subtle-text)}.sprinkle-action-card__icon--indigo{background:var(--uxc-indigo-subtle-bg);color:#5424db}.sprinkle-action-card__meta{color:var(--s2-gray-600);margin-top:2px;font-size:12px;font-weight:400}.sprinkle-action-card__header-actions{color:var(--s2-gray-800);align-items:center;gap:12px;margin-left:auto;font-size:12px;font-weight:500;display:flex}.sprinkle-action-card__header-actions a{color:var(--s2-gray-800);align-items:center;gap:4px;text-decoration:none;display:flex}.sprinkle-action-card__body{color:var(--s2-gray-700);padding:0 24px 16px;font-size:14px;line-height:1.5}.sprinkle-action-card__actions{border-top:1px solid var(--s2-gray-200);justify-content:flex-end;gap:8px;padding:12px 24px;display:flex}.sprinkle-list-item{border-top:1px solid var(--s2-gray-100);align-items:center;gap:16px;min-height:56px;padding:16px 24px;display:flex}.sprinkle-list-item__icon{background:var(--s2-gray-75);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;width:40px;min-width:40px;height:40px;font-size:16px;display:flex}.sprinkle-list-item__content{flex:1;min-width:0}.sprinkle-list-item__title{color:var(--s2-gray-900);align-items:center;gap:6px;font-size:14px;font-weight:700;line-height:1.3;display:flex}.sprinkle-list-item__subtitle{color:var(--s2-gray-600);margin-top:2px;font-size:14px;font-weight:400;line-height:1.5}.sprinkle-list-item__end{flex-shrink:0;align-items:center;gap:8px;display:flex}.sprinkle-table{border-collapse:collapse;border:1px solid var(--s2-gray-100);border-radius:var(--s2-radius-default);width:100%;font-size:14px;overflow:hidden}.sprinkle-table th{text-align:left;border-bottom:1px solid var(--s2-gray-100);color:var(--s2-gray-700);box-sizing:border-box;background:0 0;height:32px;padding:7px 16px;font-size:14px;font-weight:700;line-height:1.3}.sprinkle-table td{border-bottom:1px solid var(--s2-gray-100);color:var(--s2-content-default);box-sizing:border-box;padding:12px 16px;font-size:14px;line-height:1.5}.sprinkle-table tr:last-child td{border-bottom:none}.sprinkle-table tr:hover td{background:var(--s2-gray-50)}.sprinkle-task-group{background:var(--s2-gray-50);border-radius:var(--s2-radius-default);flex-direction:column;gap:8px;padding:16px;display:flex}.sprinkle-task-group__header{justify-content:space-between;align-items:center;display:flex}.sprinkle-task-group__title{color:var(--s2-gray-1000);align-items:center;gap:8px;font-size:16px;font-weight:700;display:flex}.sprinkle-task-group__title svg{flex-shrink:0;width:20px;height:20px}.sprinkle-task-group__meta{color:var(--s2-gray-600);align-items:center;gap:16px;font-size:12px;display:flex}.sprinkle-task-item{align-items:center;gap:8px;height:24px;padding-left:4px;font-size:14px;line-height:18px;display:flex}.sprinkle-task-item--done{color:var(--s2-gray-600)}.sprinkle-task-item--pending{color:var(--s2-gray-800)}.sprinkle-task-item__check{border:1.5px solid var(--s2-gray-400);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:flex}.sprinkle-task-item--done .sprinkle-task-item__check{background:var(--s2-positive);border-color:var(--s2-positive)}.sprinkle-task-item--done .sprinkle-task-item__check:after{content:"";border-bottom:1.5px solid #fff;border-left:1.5px solid #fff;width:8px;height:5px;transform:rotate(-45deg)translateY(-1px)}.sprinkle-progress-bar{gap:var(--s2-spacing-75);--_bar-color:var(--s2-accent);flex-direction:column;display:flex}.sprinkle-progress-bar--positive{--_bar-color:var(--s2-positive)}.sprinkle-progress-bar--negative{--_bar-color:var(--s2-negative)}.sprinkle-progress-bar--notice{--_bar-color:var(--s2-notice)}.sprinkle-progress-bar--informative{--_bar-color:var(--s2-informative)}.sprinkle-progress-bar__header{font-size:var(--s2-font-size-75);color:var(--s2-content-default);justify-content:space-between;align-items:baseline;display:flex}.sprinkle-progress-bar__header .label{font-weight:400}.sprinkle-progress-bar__header .value{color:var(--s2-gray-600);font-weight:400}.sprinkle-progress-bar__track{border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);height:4px;position:relative;overflow:hidden}.sprinkle-progress-bar__track .fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));height:100%;transition:width .3s}.sprinkle-progress-bar__track:after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-progress-bar__track:has(>.fill):after{display:none}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)){border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);flex-direction:row;width:100%;height:4px;position:relative;overflow:hidden}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track))>.fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));height:100%;transition:width .3s}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_bar-color,var(--s2-accent)));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-progress-bar:not(:has(.sprinkle-progress-bar__track)):has(>.fill):after{display:none}.sprinkle-meter{gap:var(--s2-spacing-75);--_meter-color:var(--s2-informative);flex-direction:column;display:flex}.sprinkle-meter--positive{--_meter-color:var(--s2-positive)}.sprinkle-meter--notice{--_meter-color:var(--s2-notice)}.sprinkle-meter--negative{--_meter-color:var(--s2-negative)}.sprinkle-meter__header{font-size:var(--s2-font-size-75);color:var(--s2-content-default);justify-content:space-between;align-items:baseline;display:flex}.sprinkle-meter__header .label{font-weight:400}.sprinkle-meter__header .value{color:var(--s2-gray-600);font-weight:400}.sprinkle-meter__track{border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);height:4px;position:relative;overflow:hidden}.sprinkle-meter__track .fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));height:100%;transition:width .3s}.sprinkle-meter__track:after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-meter__track:has(>.fill):after{display:none}.sprinkle-meter:not(:has(.sprinkle-meter__track)){border-radius:var(--s2-radius-pill);background:var(--s2-gray-200);flex-direction:row;width:100%;height:4px;position:relative;overflow:hidden}.sprinkle-meter:not(:has(.sprinkle-meter__track))>.fill{border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));height:100%;transition:width .3s}.sprinkle-meter:not(:has(.sprinkle-meter__track)):after{content:"";width:var(--progress,var(--value,0%));border-radius:var(--s2-radius-pill);background:var(--fill-color,var(--_meter-color));transition:width .3s;position:absolute;inset:0 auto 0 0}.sprinkle-meter:not(:has(.sprinkle-meter__track)):has(>.fill):after{display:none}.sprinkle-kv-list{margin:0;padding:0;list-style:none}.sprinkle-kv-list li{padding:var(--s2-spacing-100) 0;border-bottom:1px solid var(--s2-border-subtle);font-size:var(--s2-font-size-75);justify-content:space-between;align-items:center;display:flex}.sprinkle-kv-list li:last-child{border-bottom:none}.sprinkle-kv-list .key{color:var(--s2-gray-600);font-weight:400}.sprinkle-kv-list .value{color:var(--s2-content-default);font-weight:700}dl.sprinkle-kv-list{font-size:var(--s2-font-size-75);grid-template-columns:auto 1fr;gap:0;display:grid}dl.sprinkle-kv-list dt,dl.sprinkle-kv-list dd{padding:var(--s2-spacing-100) 0;border-bottom:1px solid var(--s2-border-subtle);margin:0}dl.sprinkle-kv-list dt{color:var(--s2-gray-600);padding-right:var(--s2-spacing-300);font-weight:400}dl.sprinkle-kv-list dd{color:var(--s2-content-default);text-align:right;font-weight:700}dl.sprinkle-kv-list dt:last-of-type,dl.sprinkle-kv-list dd:last-of-type{border-bottom:none}.sprinkle-text-field{width:100%;font-size:var(--s2-font-size-100);font-family:var(--s2-font-family);color:var(--s2-content-default);border:1px solid var(--s2-gray-200);border-radius:var(--s2-radius-default);transition:border-color var(--s2-transition-default);box-sizing:border-box;background:#fff;outline:none;padding:7px 12px}.sprinkle-text-field::placeholder{color:var(--s2-gray-600)}.sprinkle-text-field:hover{border-color:var(--s2-gray-700)}.sprinkle-text-field:focus{border-color:var(--s2-accent);box-shadow:0 0 0 1px var(--s2-accent)}.sprinkle-grid{gap:var(--s2-spacing-200);grid-template-columns:repeat(auto-fit,minmax(180px,1fr));display:grid}.sprinkle-stack{gap:var(--s2-spacing-200);flex-direction:column;display:flex}.sprinkle-row{align-items:center;gap:var(--s2-spacing-200);display:flex}.sprinkle-divider{border:none;border-top:1px solid var(--s2-border-subtle);margin:var(--s2-spacing-200) 0}.sprinkle-divider--medium{border-top-width:2px;border-top-color:var(--s2-border-default);margin:var(--s2-spacing-300) 0}.sprinkle-empty-state{text-align:center;padding:var(--s2-spacing-500) var(--s2-spacing-300);color:var(--s2-content-tertiary);font-size:var(--s2-font-size-100)}.sprinkle-toolbar{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);border-bottom:1px solid var(--s2-gray-200);background:var(--s2-gray-50);flex-shrink:0;min-height:40px;display:flex}.sprinkle-toolbar__start{align-items:center;gap:var(--s2-spacing-100);display:flex}.sprinkle-toolbar__center{align-items:center;gap:var(--s2-spacing-100);flex:1;justify-content:center;display:flex}.sprinkle-toolbar__end{align-items:center;gap:var(--s2-spacing-100);margin-left:auto;display:flex}.sprinkle-tabs{border-bottom:1px solid var(--s2-gray-200);background:var(--s2-gray-50);flex-shrink:0;gap:0;display:flex;overflow-x:auto}.sprinkle-tabs__tab{padding:var(--s2-spacing-100) var(--s2-spacing-200);font-size:var(--s2-font-size-100);color:var(--s2-gray-600);cursor:default;white-space:nowrap;transition:color var(--s2-transition-default), border-color var(--s2-transition-default);font-weight:500;font-family:var(--s2-font-family);background:0 0;border:none;border-bottom:2px solid #0000}.sprinkle-tabs__tab:hover{color:var(--s2-gray-800)}.sprinkle-tabs__tab--active{color:var(--s2-gray-900);border-bottom-color:var(--s2-gray-900);font-weight:700}.sprinkle-tabs__panel{flex:1;min-height:0;display:none;overflow-y:auto}.sprinkle-tabs__panel--active{flex-direction:column;display:flex}.sprinkle-sidebar{flex:1;gap:0;min-height:0;display:flex}.sprinkle-sidebar__nav{border-right:1px solid var(--s2-gray-200);background:var(--s2-gray-50);width:240px;min-width:240px;padding:var(--s2-spacing-200) 0;overflow-y:auto}.sprinkle-sidebar__nav-item{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);font-size:var(--s2-font-size-100);color:var(--s2-gray-700);cursor:default;transition:background var(--s2-transition-default);border-radius:0;display:flex}.sprinkle-sidebar__nav-item:hover{background:var(--s2-gray-100)}.sprinkle-sidebar__nav-item--active{background:var(--s2-gray-800);color:var(--s2-gray-25);font-weight:600}.sprinkle-sidebar__nav-label{padding:var(--s2-spacing-200) var(--s2-spacing-200) var(--s2-spacing-50);font-size:var(--s2-font-size-50);text-transform:uppercase;letter-spacing:.04em;color:var(--s2-gray-600);font-weight:700}.sprinkle-sidebar__main{min-width:0;padding:var(--s2-spacing-200);flex:1;overflow-y:auto}.sprinkle-dialog{z-index:100;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.sprinkle-dialog[hidden]{display:none}.sprinkle-dialog__backdrop{backdrop-filter:blur(2px);background:#0006;position:absolute;inset:0}.sprinkle-dialog__content{background:var(--s2-gray-25);border-radius:var(--s2-radius-xl);box-shadow:var(--s2-shadow-elevated);padding:var(--s2-spacing-400);min-width:280px;max-width:min(560px,100% - 32px);max-height:calc(100% - 64px);position:relative;overflow-y:auto}.sprinkle-dialog__header{margin-bottom:var(--s2-spacing-300);justify-content:space-between;align-items:center;display:flex}.sprinkle-dialog__title{font-size:var(--s2-font-size-200);color:var(--s2-content-default);font-weight:700}.sprinkle-dialog__close{border-radius:var(--s2-radius-pill);width:28px;height:28px;color:var(--s2-gray-600);cursor:default;transition:background var(--s2-transition-default);background:0 0;border:none;justify-content:center;align-items:center;font-size:18px;display:flex}.sprinkle-dialog__close:hover{background:var(--s2-gray-100)}.sprinkle-dialog__footer{justify-content:flex-end;gap:var(--s2-spacing-100);margin-top:var(--s2-spacing-300);display:flex}.sprinkle-collapsible__header{align-items:center;gap:var(--s2-spacing-100);padding:var(--s2-spacing-100) var(--s2-spacing-200);cursor:default;font-size:var(--s2-font-size-100);color:var(--s2-content-default);text-align:left;border-radius:var(--s2-radius-default);width:100%;transition:background var(--s2-transition-default);font-weight:600;font-family:var(--s2-font-family);background:0 0;border:none;display:flex}.sprinkle-collapsible__header:hover{background:var(--s2-gray-100)}.sprinkle-collapsible__chevron{flex-shrink:0;width:16px;height:16px;transition:transform .2s;display:inline-block}.sprinkle-collapsible__chevron:before{content:"▶";color:var(--s2-gray-600);font-size:10px}.sprinkle-collapsible--open .sprinkle-collapsible__chevron{transform:rotate(90deg)}.sprinkle-collapsible__body{padding:var(--s2-spacing-100) var(--s2-spacing-200) var(--s2-spacing-200) calc(var(--s2-spacing-200) + 16px + var(--s2-spacing-100));display:none}.sprinkle-collapsible--open .sprinkle-collapsible__body{display:block}.sprinkle-split{flex:1;gap:0;min-height:0;display:flex}.sprinkle-split>*{flex:1;min-width:0;overflow-y:auto}.sprinkle-split>:not(:last-child){border-right:1px solid var(--s2-border-default)}.sprinkle-split--vertical{flex-direction:column}.sprinkle-split--vertical>:not(:last-child){border-right:none;border-bottom:1px solid var(--s2-border-default)}.sprinkle-canvas{border-radius:var(--s2-radius-l);background:var(--s2-bg-layer-1);width:100%;position:relative;overflow:hidden}.sprinkle-canvas--16x9{aspect-ratio:16/9}.sprinkle-canvas--4x3{aspect-ratio:4/3}.sprinkle-canvas--1x1{aspect-ratio:1}.sprinkle-canvas svg,.sprinkle-canvas canvas{width:100%;height:100%;display:block}.sprinkle-density-compact .sprinkle-content{padding:var(--s2-spacing-100)}.sprinkle-density-compact .sprinkle-heading{font-size:var(--s2-font-size-100);margin-bottom:var(--s2-spacing-50)}.sprinkle-density-compact .sprinkle-heading--m{font-size:13px}.sprinkle-density-compact .sprinkle-body{font-size:var(--s2-font-size-75);line-height:1.4}.sprinkle-density-compact .sprinkle-detail{font-size:var(--s2-font-size-50)}.sprinkle-density-compact .sprinkle-table th{font-size:var(--s2-font-size-50);height:28px;padding:5px 12px}.sprinkle-density-compact .sprinkle-table td{font-size:var(--s2-font-size-75);padding:6px 12px}.sprinkle-density-compact .sprinkle-btn{height:26px;font-size:var(--s2-font-size-75);padding:0 10px}.sprinkle-density-compact .sprinkle-badge{padding:2px 6px;font-size:10px}.sprinkle-density-compact .sprinkle-card{padding:var(--s2-spacing-200)}.sprinkle-density-compact .sprinkle-list-item{gap:10px;min-height:40px;padding:8px 16px}.sprinkle-density-compact .sprinkle-list-item__icon{width:28px;min-width:28px;height:28px;font-size:13px}.sprinkle-density-compact .sprinkle-list-item__title{font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-list-item__subtitle{font-size:11px}.sprinkle-density-compact .sprinkle-sidebar__nav-item{padding:6px var(--s2-spacing-200);font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-text-field{height:28px;font-size:var(--s2-font-size-75);padding:4px 8px}.sprinkle-density-compact .sprinkle-tabs__tab{padding:6px var(--s2-spacing-200);font-size:var(--s2-font-size-75)}.sprinkle-density-compact .sprinkle-kv-list li{font-size:var(--s2-font-size-50);padding:6px 0}.sprinkle-density-compact .sprinkle-chip{padding:3px 8px;font-size:11px}.sprinkle-density-spacious .sprinkle-content{padding:var(--s2-spacing-400)}.sprinkle-density-spacious .sprinkle-heading{font-size:var(--s2-font-size-500);margin-bottom:var(--s2-spacing-200)}.sprinkle-density-spacious .sprinkle-heading--m{font-size:var(--s2-font-size-300)}.sprinkle-density-spacious .sprinkle-body{font-size:15px;line-height:1.65}.sprinkle-density-spacious .sprinkle-card{padding:var(--s2-spacing-500)}.sprinkle-density-spacious .sprinkle-btn{height:36px;padding:0 20px}.sprinkle-density-spacious .sprinkle-action-card__body{padding:0 32px 24px;font-size:15px}.sprinkle-panel{container-type:inline-size}@container (width<=400px){.sprinkle-sidebar{flex-direction:column}.sprinkle-sidebar__nav{border-right:none;border-bottom:1px solid var(--s2-border-default);width:100%;min-width:0;max-height:200px}.sprinkle-grid{grid-template-columns:1fr}.sprinkle-split:not(.sprinkle-split--vertical){flex-direction:column}.sprinkle-split:not(.sprinkle-split--vertical)>:not(:last-child){border-right:none;border-bottom:1px solid var(--s2-border-default)}.sprinkle-toolbar{flex-wrap:wrap}}@container (width>=600px){.sprinkle-sidebar__nav{width:240px;min-width:240px}.sprinkle-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}}
|