sliccy 4.30.0 → 5.0.1

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.
Files changed (75) hide show
  1. package/dist/ui/assets/{account-store-Mno_jQCd.js → account-store-BTIDJ0D4.js} +2 -2
  2. package/dist/ui/assets/{account-store-D8YLtENA.js → account-store-CMUhavj7.js} +2 -2
  3. package/dist/ui/assets/adobe-BJ8xXfgr.js +2 -0
  4. package/dist/ui/assets/adobe-Bfg41Sm0.js +1 -0
  5. package/dist/ui/assets/{adobe-oauth-state-DbTh2eai.js → adobe-oauth-state-BKLNg5pX.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-wRgLPEe1.js → agent-message-to-chat-DfH2TOaj.js} +1 -1
  7. package/dist/ui/assets/{apps-o9I4b9Pm.js → apps-lJRD56s5.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-f8WoKIg-.js → azure-openai-DLJjg2yI.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-C83eqmCB.js → azure-openai-qyHZFjc5.js} +1 -1
  10. package/dist/ui/assets/{connect-surface-CvI6NTHs.js → connect-surface-DCR9Fin6.js} +1 -1
  11. package/dist/ui/assets/dip-B9XK8NtT.js +1 -0
  12. package/dist/ui/assets/{dist-BJmAwsXW.js → dist-DDGRY8xT.js} +1 -1
  13. package/dist/ui/assets/{dist-BgeIZflL.js → dist-Dh3Yf9I8.js} +1 -1
  14. package/dist/ui/assets/{ensure-speech-assets-C0Stgh12.js → ensure-speech-assets-CZKsXlsO.js} +1 -1
  15. package/dist/ui/assets/esp8266-Cj1Ntxw5.js +1 -0
  16. package/dist/ui/assets/{esptool-operations-TFe7TNmm.js → esptool-operations-PEsKHcvX.js} +2 -2
  17. package/dist/ui/assets/{fs-CzSttrrl.js → fs-BAgteKng.js} +1 -1
  18. package/dist/ui/assets/{fs-CrSOLRNj.js → fs-BFpCPBBZ.js} +2 -2
  19. package/dist/ui/assets/{github-hZl4t20p.js → github-CKJk6KAd.js} +1 -1
  20. package/dist/ui/assets/{github-BmM5aC3N.js → github-DAbVUH3-.js} +2 -2
  21. package/dist/ui/assets/{github-copilot-Bj1ghYQc.js → github-copilot-7ZJcKEfr.js} +1 -1
  22. package/dist/ui/assets/{github-copilot-BZIPfQvl.js → github-copilot-CznXozwK.js} +1 -1
  23. package/dist/ui/assets/{hear-BvgYe6O8.js → hear-DoOBx2IM.js} +1 -1
  24. package/dist/ui/assets/{kernel-worker-Dd37r1MP.js → kernel-worker-C3Zv0cFP.js} +710 -698
  25. package/dist/ui/assets/{kokoro-engine-DTDdmRjz.js → kokoro-engine-DvUa426X.js} +1 -1
  26. package/dist/ui/assets/{lick-ws-bridge-ECi4GOkD.js → lick-ws-bridge-DodKv_gI.js} +1 -1
  27. package/dist/ui/assets/{local-llm-CfWJl6vt.js → local-llm-VxY6Rihr.js} +1 -1
  28. package/dist/ui/assets/{main-DsOZX9Xj.js → main-BDgWldfd.js} +4 -4
  29. package/dist/ui/assets/{mount-CqXaKfK7.js → mount-D4sVsAe9.js} +1 -1
  30. package/dist/ui/assets/{mount-CRZvM9UI.js → mount-DfhfmOn6.js} +2 -2
  31. package/dist/ui/assets/{new-session-DdSqwHlf.js → new-session-B2rDFglN.js} +2 -2
  32. package/dist/ui/assets/{oauth-bootstrap-BjTCYMG8.js → oauth-bootstrap-B6gbcpSf.js} +2 -2
  33. package/dist/ui/assets/{openai-codex-546PYqHn.js → openai-codex-ChP4AOf5.js} +1 -1
  34. package/dist/ui/assets/{openai-codex-B-RybkTp.js → openai-codex-xhF7lncq.js} +1 -1
  35. package/dist/ui/assets/{panel-rpc-handlers-DJzxFT8f.js → panel-rpc-handlers-B_UznVxB.js} +1 -1
  36. package/dist/ui/assets/{provider-CHydGMT6.js → provider-Co8OCo7w.js} +1 -1
  37. package/dist/ui/assets/{provider-BtXp6v_N.js → provider-CvyNCTJa.js} +2 -2
  38. package/dist/ui/assets/provider-store-access-DXSPPtDF.js +1 -0
  39. package/dist/ui/assets/provider-store-access-DpQ0Ni0t.js +1 -0
  40. package/dist/ui/assets/{providers-3UGTq8Zp.js → providers-CU0-WZx1.js} +1 -1
  41. package/dist/ui/assets/{quick-llm-CtmD_Eqd.js → quick-llm-Bsr48RSH.js} +1 -1
  42. package/dist/ui/assets/session-freezer-C4fFg5qr.js +1 -0
  43. package/dist/ui/assets/{speak-CPWfWdxL.js → speak-CCE3xUWF.js} +1 -1
  44. package/dist/ui/assets/{sprinkle-manager-D45XqDS_.js → sprinkle-manager-8YNPbXXp.js} +1 -1
  45. package/dist/ui/assets/{store-Di2gvYsr.js → store-Dd5SZXO7.js} +1 -1
  46. package/dist/ui/assets/{sudo-C--ZFBWF.js → sudo-D-B_nWdG.js} +1 -1
  47. package/dist/ui/assets/{transformers-env-BvQQxw7s.js → transformers-env-5eefnAKA.js} +1 -1
  48. package/dist/ui/assets/{tray-leave-runtime-DWRlcPcQ.js → tray-leave-runtime-5JqY7-Mf.js} +1 -1
  49. package/dist/ui/assets/upgrade-detection-CpQEZh6h.js +1 -0
  50. package/dist/ui/assets/{wc-attach-hnjAgF3r.js → wc-attach-CJB9Bygt.js} +2 -2
  51. package/dist/ui/assets/{wc-detached-DPpzG1m4.js → wc-detached--iRc1rNo.js} +1 -1
  52. package/dist/ui/assets/{wc-extension-Bt6WVUQv.js → wc-extension-f-Y8gbFv.js} +2 -2
  53. package/dist/ui/assets/{wc-live-C6obLPXQ.js → wc-live-Cmyb8YU6.js} +5 -5
  54. package/dist/ui/assets/{wc-nav-B-0t6YAo.js → wc-nav-Btf9Z40L.js} +2 -2
  55. package/dist/ui/assets/{wc-onboarding-JjUXzEW1.js → wc-onboarding-CdQ6tw8X.js} +2 -2
  56. package/dist/ui/assets/{wc-placeholder-CTzKu6PN.js → wc-placeholder-DD8_MSOp.js} +3 -3
  57. package/dist/ui/assets/{wc-settings-DWj5Vh5K.js → wc-settings-7Kbtrg5p.js} +2 -2
  58. package/dist/ui/assets/{wc-shell-DeV6jP6H.js → wc-shell-PklxeZ6D.js} +4 -4
  59. package/dist/ui/assets/{wc-sprinkles-ybvU4BX1.js → wc-sprinkles-ClY0Bpba.js} +2 -2
  60. package/dist/ui/assets/{wc-tray-DxqLkc-f.js → wc-tray-MDjEKWqg.js} +3 -3
  61. package/dist/ui/assets/{whisper-engine-CtV8ZqBe.js → whisper-engine-BonGdnOP.js} +1 -1
  62. package/dist/ui/assets/{xai-grok-YbjS9qgk.js → xai-grok-Cpf3Hypg.js} +1 -1
  63. package/dist/ui/assets/{xai-grok-BMgUe5-z.js → xai-grok-x_rql0uW.js} +1 -1
  64. package/dist/ui/electron-overlay-entry.js +14 -14
  65. package/dist/ui/index.html +2 -2
  66. package/dist/ui/packages/webapp/index.html +2 -2
  67. package/package.json +6 -6
  68. package/dist/ui/assets/adobe-BKV8wdW6.js +0 -2
  69. package/dist/ui/assets/adobe-NArV2EOF.js +0 -1
  70. package/dist/ui/assets/dip-CVVXtqJ5.js +0 -1
  71. package/dist/ui/assets/esp8266-crsTt7TM.js +0 -1
  72. package/dist/ui/assets/provider-store-access-BTTpQny7.js +0 -1
  73. package/dist/ui/assets/provider-store-access-DTMNyyhW.js +0 -1
  74. package/dist/ui/assets/session-freezer-C5kXYuKn.js +0 -1
  75. package/dist/ui/assets/upgrade-detection-4HyYnnIW.js +0 -1
@@ -89,7 +89,7 @@ ${p.join(`
89
89
  .sep{height:1px;background:var(--line,#e1e1e1);margin:6px 4px;}
90
90
  .drop{position:absolute;inset:0;border-radius:10px;display:none;align-items:center;justify-content:center;text-align:center;background:var(--am-accent-subtle);border:2px dashed var(--am-accent);color:var(--am-accent);font-size:13px;font-weight:600;pointer-events:none;}
91
91
  :host([data-dropping]) .drop{display:flex;}
92
- `,JT=C(jT),QT=[{kind:"file",label:"Files",icon:"file",entries:[{id:"/workspace/README.md",label:"README.md",sub:"/workspace"},{id:"/workspace/src/main.ts",label:"main.ts",sub:"/workspace/src"},{id:"/workspace/src/orchestrator.ts",label:"orchestrator.ts",sub:"/workspace/src"},{id:"/workspace/notes/launch-plan.md",label:"launch-plan.md",sub:"/workspace/notes"},{id:"/shared/CLAUDE.md",label:"CLAUDE.md",sub:"/shared"},{id:"/tmp/screenshot-3.png",label:"screenshot-3.png",sub:"/tmp"}]},{kind:"skill",label:"Skills",icon:"sparkles",entries:[{id:"slicc-handoff",label:"slicc-handoff",sub:"Continue work in the SLICC browser agent"},{id:"playwright-cli",label:"playwright-cli",sub:"Automate browser interactions"},{id:"mixtape",label:"mixtape",sub:"Curate themed music playlists"},{id:"wavespeed",label:"wavespeed",sub:"Generate images, video and speech"},{id:"save-the-cat",label:"save-the-cat",sub:"Screenwriting beat sheets"}]},{kind:"conversation",label:"Conversations",icon:"message-square",entries:[{id:"c1",label:"Dark mode toggle",sub:"Frozen \xB7 2h ago"},{id:"c2",label:"Refactor the mount backend",sub:"Frozen \xB7 yesterday"},{id:"c3",label:"Add slash menu (declined)",sub:"Frozen \xB7 3 days ago"},{id:"c4",label:"WebGL shader walkthrough",sub:"Frozen \xB7 last week"}]}],hA=[{kind:"upload",icon:"upload",label:"Upload from this computer",sub:"Drag & drop or click to browse",quick:!0},{kind:"capture",mode:"photo",icon:"image",label:"Take a photo",quick:!0},{kind:"capture",mode:"screenshot",icon:"monitor",label:"Take a screenshot",quick:!0}],ua=class extends HTMLElement{static observedAttributes=["theme","global-drop"];#e;#t=null;#a=null;#r=!1;#s="";#i=0;#o=[];#n=0;#l;#h;#d;#c;#f;#p;#m=e=>{this.#r&&!this.contains(e.target)&&this.close()};#x=!1;#u=0;#g=!1;#v(e){let a=e.dataTransfer?.types;return!!a&&Array.from(a).includes("Files")}#M(){this.#r||(this.#g=!0,this.open()),this.setAttribute("data-dropping","")}#_(){this.#u=0,this.removeAttribute("data-dropping"),this.#g&&(this.#g=!1,this.close())}#b=e=>{this.#v(e)&&(e.preventDefault(),this.#u++,!e.composedPath().includes(this.#d)&&this.#M())};#w=e=>{this.#v(e)&&e.preventDefault()};#y=e=>{this.#v(e)&&(this.#u=Math.max(0,this.#u-1),this.#u===0&&this.#_())};#S=e=>{if(!this.#v(e))return;if(e.preventDefault(),this.#u=0,e.composedPath().includes(this.#d)){this.#g=!1;return}this.removeAttribute("data-dropping"),this.#g=!1;let a=e.dataTransfer?.files;if(a?.length)for(let r of Array.from(a))this.#H({kind:"upload",name:r.name,size:r.size,file:r});this.close()};#k(){this.isConnected&&this.hasAttribute("global-drop")?this.#D():this.#P()}#D(){if(this.#x)return;this.#x=!0;let e=this.ownerDocument;e.addEventListener("dragenter",this.#b),e.addEventListener("dragover",this.#w),e.addEventListener("dragleave",this.#y),e.addEventListener("drop",this.#S)}#P(){if(!this.#x)return;this.#x=!1;let e=this.ownerDocument;e.removeEventListener("dragenter",this.#b),e.removeEventListener("dragover",this.#w),e.removeEventListener("dragleave",this.#y),e.removeEventListener("drop",this.#S),this.#u=0,this.#g=!1}constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[JT]}connectedCallback(){this.#E(),this.#k()}disconnectedCallback(){document.removeEventListener("mousedown",this.#m),this.#P()}attributeChangedCallback(e){e==="global-drop"&&this.#k()}get results(){return this.#t}set results(e){this.#t=e,this.#r&&this.#A()}get provider(){return this.#a}set provider(e){this.#a=e,this.#r&&this.#A()}get isOpen(){return this.#r}#E(){let e=d("input",{type:"file",multiple:!0,hidden:!0}),a=d("div",{class:"body"}),r=d("div",{class:"results",part:"results",role:"listbox"},a,d("div",{class:"drop"},"Drop files to add")),s=d("span",{class:"ti"},b("plus",{size:nA})),i=d("button",{class:"trigger",part:"trigger","aria-haspopup":"true","aria-expanded":"false",title:"Add to prompt"},s),o=d("input",{type:"text",placeholder:"Search files, skills, conversations\u2026"}),n=d("div",{class:"searchbox"},d("span",{class:"si"},b("search",{size:XT})),o),h=d("div",{class:"wrap",part:"wrap"},r,d("div",{class:"row"},i,n));this.#e.replaceChildren(e,h),this.#l=i,this.#h=s,this.#d=h,this.#c=o,this.#f=a,this.#p=e,this.#V(),this.#A()}#V(){this.#l.addEventListener("click",()=>this.toggle()),this.#c.addEventListener("input",()=>{this.#s=this.#c.value,this.#i=0,this.#A()}),this.#c.addEventListener("keydown",e=>this.#R(e)),this.#p.addEventListener("change",()=>{for(let e of Array.from(this.#p.files??[]))this.#H({kind:"upload",name:e.name,size:e.size,file:e});this.#p.value="",this.close()});for(let e of["dragenter","dragover"])this.#d.addEventListener(e,a=>{a.preventDefault(),this.#r||this.open(),this.setAttribute("data-dropping","")});for(let e of["dragleave","drop"])this.#d.addEventListener(e,a=>{a.preventDefault();let r=a;e==="dragleave"&&this.#d.contains(r.relatedTarget)||this.removeAttribute("data-dropping")});this.#d.addEventListener("drop",e=>{let a=e.dataTransfer?.files;if(a?.length){for(let r of Array.from(a))this.#H({kind:"upload",name:r.name,size:r.size,file:r});this.close()}})}toggle(){this.#r?this.close():this.open()}#z(e){this.#h.replaceChildren(b(e?"x":"plus",{size:nA}))}open(){this.#r||(this.#r=!0,this.setAttribute("data-open",""),this.#l.setAttribute("aria-expanded","true"),this.#z(!0),document.addEventListener("mousedown",this.#m),this.#s="",this.#c.value="",this.#i=0,this.#A(),requestAnimationFrame(()=>this.#c.focus()))}close(){this.#r&&(this.#r=!1,this.removeAttribute("data-open"),this.removeAttribute("data-dropping"),this.#l.setAttribute("aria-expanded","false"),this.#z(!1),document.removeEventListener("mousedown",this.#m))}async#I(e){if(this.#a){let a=await this.#a(e);if(a)return a}return this.#t??QT}#O(e){let a=this.#s.trim().toLowerCase(),r=i=>!a||`${i.label} ${i.sub??""}`.toLowerCase().includes(a),s=[];if(a){if("upload take a photo screenshot".includes(a))for(let i of hA)i.label.toLowerCase().includes(a)&&s.push({type:"quick",data:i})}else for(let i of hA)s.push({type:"quick",data:i});for(let i of e){let o=i.entries.filter(r).slice(0,a?8:4);if(o.length){s.push({type:"sec",label:i.label});for(let n of o)s.push({type:"row",section:i,data:n})}}return s}async#A(){let e=++this.#n,a=await this.#I(this.#s.trim().toLowerCase());if(e!==this.#n)return;let r=this.#O(a);this.#o=[];let s=[],i=!1;for(let o of r)if(o.type==="sec")i&&s.push(d("div",{class:"sep"})),s.push(d("div",{class:"sec"},o.label)),i=!1;else if(o.type==="quick"){let n=this.#o.length;this.#o.push(o.data.kind==="upload"?{kind:"upload",name:"",size:0}:{kind:"capture",mode:o.data.mode??"photo",label:o.data.label});let h=d("span",{class:"tx"},d("div",{class:"lb"},o.data.label));o.data.sub&&h.append(d("div",{class:"sb"},o.data.sub)),s.push(d("div",{class:"item quick","data-i":n},d("span",{class:"ic"},b(o.data.icon,{size:lA})),h)),i=!0}else{let n=this.#o.length;this.#o.push({kind:o.section.kind,id:o.data.id,label:o.data.label}),s.push(d("div",{class:"item","data-i":n},d("span",{class:"ic"},b(o.section.icon,{size:lA})),d("span",{class:"tx"},d("div",{class:"lb"},o.data.label),d("div",{class:"sb"},o.data.sub??""))))}s.length?this.#f.replaceChildren(...s):this.#f.replaceChildren(d("div",{class:"empty"},`No matches for \u201C${this.#s}\u201D.`));for(let o of Array.from(this.#f.querySelectorAll(".item"))){let n=Number(o.dataset.i);o.addEventListener("mouseenter",()=>this.#N(n)),o.addEventListener("click",()=>this.#B(n))}this.#i>=this.#o.length&&(this.#i=0),this.#L()}#L(){for(let e of Array.from(this.#f.querySelectorAll(".item")))e.classList.toggle("active",Number(e.dataset.i)===this.#i)}#N(e){this.#i=e,this.#L()}#T(e){if(!this.#o.length)return;this.#i=(this.#i+e+this.#o.length)%this.#o.length,this.#L();let a=this.#f.querySelector(`.item[data-i="${this.#i}"]`);a&&a.scrollIntoView({block:"nearest"})}#R(e){e.key==="ArrowDown"?(e.preventDefault(),this.#T(1)):e.key==="ArrowUp"?(e.preventDefault(),this.#T(-1)):e.key==="Enter"?(e.preventDefault(),this.#B(this.#i)):e.key==="Escape"&&(e.preventDefault(),this.close(),this.#l.focus())}#B(e){let a=this.#o[e];if(a){if(a.kind==="upload"){this.#p.click();return}this.#H(a),this.close()}}#H(e){this.dispatchEvent(new CustomEvent("slicc-add",{detail:e,bubbles:!0,composed:!0}))}};x("slicc-add-menu",ua);var dA={sent:{freq:660,freqSlideTo:990,duration:.12,peakGain:.06,type:"sine"},"tool-start":{freq:520,freq2:780,duration:.07,peakGain:.04,type:"triangle"},"tool-finish":{freq:880,freq2:1320,duration:.07,peakGain:.04,type:"sine"}};function Sl(t,e){let a=dA[e],r=t.currentTime,s=r+a.duration,i=t.createGain();i.gain.setValueAtTime(1e-4,r),i.gain.exponentialRampToValueAtTime(a.peakGain,r+a.duration*.2),i.gain.exponentialRampToValueAtTime(1e-4,s),i.connect(t.destination);let o=t.createOscillator();if(o.type=a.type,o.frequency.setValueAtTime(a.freq,r),a.freqSlideTo!==void 0&&o.frequency.linearRampToValueAtTime(a.freqSlideTo,s),o.connect(i),o.start(r),o.stop(s),a.freq2!==void 0){let n=t.createOscillator();n.type=a.type,n.frequency.setValueAtTime(a.freq2,r),n.connect(i),n.start(r),n.stop(s)}}var eH=`
92
+ `,JT=C(jT),QT=[{kind:"file",label:"Files",icon:"file",entries:[{id:"/workspace/README.md",label:"README.md",sub:"/workspace"},{id:"/workspace/src/main.ts",label:"main.ts",sub:"/workspace/src"},{id:"/workspace/src/orchestrator.ts",label:"orchestrator.ts",sub:"/workspace/src"},{id:"/workspace/notes/launch-plan.md",label:"launch-plan.md",sub:"/workspace/notes"},{id:"/shared/CLAUDE.md",label:"CLAUDE.md",sub:"/shared"},{id:"/tmp/screenshot-3.png",label:"screenshot-3.png",sub:"/tmp"}]},{kind:"skill",label:"Skills",icon:"sparkles",entries:[{id:"slicc-handoff",label:"slicc-handoff",sub:"Continue work in the SLICC browser agent"},{id:"playwright-cli",label:"playwright-cli",sub:"Automate browser interactions"},{id:"mixtape",label:"mixtape",sub:"Curate themed music playlists"},{id:"wavespeed",label:"wavespeed",sub:"Generate images, video and speech"},{id:"save-the-cat",label:"save-the-cat",sub:"Screenwriting beat sheets"}]},{kind:"conversation",label:"Conversations",icon:"message-square",entries:[{id:"c1",label:"Dark mode toggle",sub:"Frozen \xB7 2h ago"},{id:"c2",label:"Refactor the mount backend",sub:"Frozen \xB7 yesterday"},{id:"c3",label:"Add slash menu (declined)",sub:"Frozen \xB7 3 days ago"},{id:"c4",label:"WebGL shader walkthrough",sub:"Frozen \xB7 last week"}]}],hA=[{kind:"upload",icon:"upload",label:"Upload from this computer",sub:"Drag & drop or click to browse",quick:!0},{kind:"capture",mode:"photo",icon:"image",label:"Take a photo",quick:!0},{kind:"capture",mode:"screenshot",icon:"monitor",label:"Take a screenshot",quick:!0}],ua=class extends HTMLElement{static observedAttributes=["theme","global-drop"];#e;#t=null;#a=null;#r=!1;#s="";#i=0;#o=[];#n=0;#l;#h;#d;#c;#u;#p;#m=e=>{this.#r&&!this.contains(e.target)&&this.close()};#x=!1;#f=0;#g=!1;#v(e){let a=e.dataTransfer?.types;return!!a&&Array.from(a).includes("Files")}#_(){this.#r||(this.#g=!0,this.open()),this.setAttribute("data-dropping","")}#b(){this.#f=0,this.removeAttribute("data-dropping"),this.#g&&(this.#g=!1,this.close())}#M=e=>{this.#v(e)&&(e.preventDefault(),this.#f++,!e.composedPath().includes(this.#d)&&this.#_())};#w=e=>{this.#v(e)&&e.preventDefault()};#y=e=>{this.#v(e)&&(this.#f=Math.max(0,this.#f-1),this.#f===0&&this.#b())};#S=e=>{if(!this.#v(e))return;if(e.preventDefault(),this.#f=0,e.composedPath().includes(this.#d)){this.#g=!1;return}this.removeAttribute("data-dropping"),this.#g=!1;let a=e.dataTransfer?.files;if(a?.length)for(let r of Array.from(a))this.#H({kind:"upload",name:r.name,size:r.size,file:r});this.close()};#k(){this.isConnected&&this.hasAttribute("global-drop")?this.#D():this.#P()}#D(){if(this.#x)return;this.#x=!0;let e=this.ownerDocument;e.addEventListener("dragenter",this.#M),e.addEventListener("dragover",this.#w),e.addEventListener("dragleave",this.#y),e.addEventListener("drop",this.#S)}#P(){if(!this.#x)return;this.#x=!1;let e=this.ownerDocument;e.removeEventListener("dragenter",this.#M),e.removeEventListener("dragover",this.#w),e.removeEventListener("dragleave",this.#y),e.removeEventListener("drop",this.#S),this.#f=0,this.#g=!1}constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[JT]}connectedCallback(){this.#E(),this.#k()}disconnectedCallback(){document.removeEventListener("mousedown",this.#m),this.#P()}attributeChangedCallback(e){e==="global-drop"&&this.#k()}get results(){return this.#t}set results(e){this.#t=e,this.#r&&this.#A()}get provider(){return this.#a}set provider(e){this.#a=e,this.#r&&this.#A()}get isOpen(){return this.#r}#E(){let e=d("input",{type:"file",multiple:!0,hidden:!0}),a=d("div",{class:"body"}),r=d("div",{class:"results",part:"results",role:"listbox"},a,d("div",{class:"drop"},"Drop files to add")),s=d("span",{class:"ti"},b("plus",{size:nA})),i=d("button",{class:"trigger",part:"trigger","aria-haspopup":"true","aria-expanded":"false",title:"Add to prompt"},s),o=d("input",{type:"text",placeholder:"Search files, skills, conversations\u2026"}),n=d("div",{class:"searchbox"},d("span",{class:"si"},b("search",{size:XT})),o),h=d("div",{class:"wrap",part:"wrap"},r,d("div",{class:"row"},i,n));this.#e.replaceChildren(e,h),this.#l=i,this.#h=s,this.#d=h,this.#c=o,this.#u=a,this.#p=e,this.#V(),this.#A()}#V(){this.#l.addEventListener("click",()=>this.toggle()),this.#c.addEventListener("input",()=>{this.#s=this.#c.value,this.#i=0,this.#A()}),this.#c.addEventListener("keydown",e=>this.#R(e)),this.#p.addEventListener("change",()=>{for(let e of Array.from(this.#p.files??[]))this.#H({kind:"upload",name:e.name,size:e.size,file:e});this.#p.value="",this.close()});for(let e of["dragenter","dragover"])this.#d.addEventListener(e,a=>{a.preventDefault(),this.#r||this.open(),this.setAttribute("data-dropping","")});for(let e of["dragleave","drop"])this.#d.addEventListener(e,a=>{a.preventDefault();let r=a;e==="dragleave"&&this.#d.contains(r.relatedTarget)||this.removeAttribute("data-dropping")});this.#d.addEventListener("drop",e=>{let a=e.dataTransfer?.files;if(a?.length){for(let r of Array.from(a))this.#H({kind:"upload",name:r.name,size:r.size,file:r});this.close()}})}toggle(){this.#r?this.close():this.open()}#z(e){this.#h.replaceChildren(b(e?"x":"plus",{size:nA}))}open(){this.#r||(this.#r=!0,this.setAttribute("data-open",""),this.#l.setAttribute("aria-expanded","true"),this.#z(!0),document.addEventListener("mousedown",this.#m),this.#s="",this.#c.value="",this.#i=0,this.#A(),requestAnimationFrame(()=>this.#c.focus()))}close(){this.#r&&(this.#r=!1,this.removeAttribute("data-open"),this.removeAttribute("data-dropping"),this.#l.setAttribute("aria-expanded","false"),this.#z(!1),document.removeEventListener("mousedown",this.#m))}async#I(e){if(this.#a){let a=await this.#a(e);if(a)return a}return this.#t??QT}#O(e){let a=this.#s.trim().toLowerCase(),r=i=>!a||`${i.label} ${i.sub??""}`.toLowerCase().includes(a),s=[];if(a){if("upload take a photo screenshot".includes(a))for(let i of hA)i.label.toLowerCase().includes(a)&&s.push({type:"quick",data:i})}else for(let i of hA)s.push({type:"quick",data:i});for(let i of e){let o=i.entries.filter(r).slice(0,a?8:4);if(o.length){s.push({type:"sec",label:i.label});for(let n of o)s.push({type:"row",section:i,data:n})}}return s}async#A(){let e=++this.#n,a=await this.#I(this.#s.trim().toLowerCase());if(e!==this.#n)return;let r=this.#O(a);this.#o=[];let s=[],i=!1;for(let o of r)if(o.type==="sec")i&&s.push(d("div",{class:"sep"})),s.push(d("div",{class:"sec"},o.label)),i=!1;else if(o.type==="quick"){let n=this.#o.length;this.#o.push(o.data.kind==="upload"?{kind:"upload",name:"",size:0}:{kind:"capture",mode:o.data.mode??"photo",label:o.data.label});let h=d("span",{class:"tx"},d("div",{class:"lb"},o.data.label));o.data.sub&&h.append(d("div",{class:"sb"},o.data.sub)),s.push(d("div",{class:"item quick","data-i":n},d("span",{class:"ic"},b(o.data.icon,{size:lA})),h)),i=!0}else{let n=this.#o.length;this.#o.push({kind:o.section.kind,id:o.data.id,label:o.data.label}),s.push(d("div",{class:"item","data-i":n},d("span",{class:"ic"},b(o.section.icon,{size:lA})),d("span",{class:"tx"},d("div",{class:"lb"},o.data.label),d("div",{class:"sb"},o.data.sub??""))))}s.length?this.#u.replaceChildren(...s):this.#u.replaceChildren(d("div",{class:"empty"},`No matches for \u201C${this.#s}\u201D.`));for(let o of Array.from(this.#u.querySelectorAll(".item"))){let n=Number(o.dataset.i);o.addEventListener("mouseenter",()=>this.#N(n)),o.addEventListener("click",()=>this.#B(n))}this.#i>=this.#o.length&&(this.#i=0),this.#L()}#L(){for(let e of Array.from(this.#u.querySelectorAll(".item")))e.classList.toggle("active",Number(e.dataset.i)===this.#i)}#N(e){this.#i=e,this.#L()}#T(e){if(!this.#o.length)return;this.#i=(this.#i+e+this.#o.length)%this.#o.length,this.#L();let a=this.#u.querySelector(`.item[data-i="${this.#i}"]`);a&&a.scrollIntoView({block:"nearest"})}#R(e){e.key==="ArrowDown"?(e.preventDefault(),this.#T(1)):e.key==="ArrowUp"?(e.preventDefault(),this.#T(-1)):e.key==="Enter"?(e.preventDefault(),this.#B(this.#i)):e.key==="Escape"&&(e.preventDefault(),this.close(),this.#l.focus())}#B(e){let a=this.#o[e];if(a){if(a.kind==="upload"){this.#p.click();return}this.#H(a),this.close()}}#H(e){this.dispatchEvent(new CustomEvent("slicc-add",{detail:e,bubbles:!0,composed:!0}))}};x("slicc-add-menu",ua);var dA={sent:{freq:660,freqSlideTo:990,duration:.12,peakGain:.06,type:"sine"},"tool-start":{freq:520,freq2:780,duration:.07,peakGain:.04,type:"triangle"},"tool-finish":{freq:880,freq2:1320,duration:.07,peakGain:.04,type:"sine"}};function Sl(t,e){let a=dA[e],r=t.currentTime,s=r+a.duration,i=t.createGain();i.gain.setValueAtTime(1e-4,r),i.gain.exponentialRampToValueAtTime(a.peakGain,r+a.duration*.2),i.gain.exponentialRampToValueAtTime(1e-4,s),i.connect(t.destination);let o=t.createOscillator();if(o.type=a.type,o.frequency.setValueAtTime(a.freq,r),a.freqSlideTo!==void 0&&o.frequency.linearRampToValueAtTime(a.freqSlideTo,s),o.connect(i),o.start(r),o.stop(s),a.freq2!==void 0){let n=t.createOscillator();n.type=a.type,n.frequency.setValueAtTime(a.freq2,r),n.connect(i),n.start(r),n.stop(s)}}var eH=`
93
93
  :host {
94
94
  display: inline-grid;
95
95
  grid-auto-flow: column;
@@ -507,7 +507,7 @@ slicc-chat-thread[open] > .slicc-thread__inner {
507
507
  padding: 16px 14px;
508
508
  }
509
509
  }
510
- `,gA="slicc-chat-thread-style";function MH(t){if(t.getElementById(gA))return;let e=t.createElement("style");e.id=gA,e.textContent=bH,(t.head??t.documentElement).appendChild(e)}var ba=class t extends HTMLElement{static observedAttributes=["open","context","accent","url-state"];#e;#t=!1;#a=null;#r=null;#s=null;#i=null;#o=()=>{this.urlState&&(this.#i!=null&&clearTimeout(this.#i),this.#i=setTimeout(()=>{this.#i=null,xt("at",String(Math.round(this.scrollTop)))},300))};#n=()=>{if(!this.urlState)return;let e=Ie("ctx");if(e&&e!==this.context)this.dispatchEvent(new CustomEvent("slicc-url-context",{bubbles:!0,composed:!0,detail:{context:e}}));else{let a=Ie("at");a!=null&&(this.scrollTop=Number.parseInt(a,10)||0)}};#l=null;#h=new Map;connectedCallback(){MH(this.ownerDocument),this.#m(),this.#p(),this.scrollToBottom(),this.urlState&&(this.#r=Ie("at"),this.#s=Ie("ctx"),this.addEventListener("scroll",this.#o,{passive:!0}),window.addEventListener("popstate",this.#n))}disconnectedCallback(){this.#a&&(this.#e?.removeEventListener("click",this.#a),this.#a=null),this.removeEventListener("scroll",this.#o),window.removeEventListener("popstate",this.#n),this.#i!=null&&(clearTimeout(this.#i),this.#i=null)}attributeChangedCallback(e,a,r){a!==r&&(e==="accent"&&this.#t&&this.#p(),e==="context"&&this.urlState&&r!=null&&this.isConnected&&(r!==this.#s&&(this.#r=null),xt("ctx",r,{push:!0})))}get urlState(){return this.hasAttribute("url-state")}set urlState(e){this.toggleAttribute("url-state",e)}get urlContext(){return this.urlState?Ie("ctx"):null}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}get context(){return this.getAttribute("context")}set context(e){e==null?this.removeAttribute("context"):this.setAttribute("context",e)}get accent(){return this.getAttribute("accent")}set accent(e){e==null?this.removeAttribute("accent"):this.setAttribute("accent",e)}get inner(){return this.#m(),this.#e}switchContext(e){this.#m();let a=this.context;if(e===a)return;a!=null&&this.#h.set(a,this.#f());let r=this.#h.get(e);this.#e.replaceChildren(...r?Array.from(r.cloneNode(!0).childNodes):[]),this.context=e,this.removeAttribute("has-new"),this.dispatchEvent(new CustomEvent("slicc-context-change",{bubbles:!0,composed:!0,detail:{context:e,previous:a}})),this.scrollToBottom()}append(...e){this.#m(),e.length>0&&(this.#r=null),this.#e.append(...e),this.requestFollow()}static FOLLOW_SLACK=80;#d(){return this.scrollHeight-this.scrollTop-this.clientHeight<=t.FOLLOW_SLACK}requestFollow(){this.#m(),this.#d()?(this.scrollToBottom(),this.removeAttribute("has-new")):this.setAttribute("has-new","")}#c=()=>{this.hasAttribute("has-new")&&this.#d()&&this.removeAttribute("has-new")};replaceContent(...e){this.#m(),this.#e.replaceChildren(...e),this.removeAttribute("has-new"),this.scrollToBottom();let a=this.#r;a!=null&&e.length>0&&requestAnimationFrame(()=>{this.#r===a&&(this.scrollTop=Number.parseInt(a,10)||0)})}scrollToBottom(){this.scrollTop=this.scrollHeight}#f(){let e=this.ownerDocument.createDocumentFragment();for(let a of Array.from(this.#e.childNodes))e.appendChild(a.cloneNode(!0));return e}#p(){let e=this.accent;e?this.style.setProperty("--ctx",e):this.style.removeProperty("--ctx")}#m(){if(this.#t)return;this.#t=!0;let e=this.querySelector(":scope > .slicc-thread__inner");if(e instanceof HTMLElement)this.#e=e;else{let r=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("div"),this.#e.className="slicc-thread__inner",this.#e.setAttribute("part","inner");for(let s of r)this.#e.appendChild(s);this.appendChild(this.#e)}this.#l=this.ownerDocument.createElement("div"),this.#l.className="slicc-thread__follow";let a=this.ownerDocument.createElement("button");a.type="button",a.append("New messages \u2193"),a.addEventListener("click",()=>{this.scrollToBottom(),this.removeAttribute("has-new")}),this.#l.append(a),this.appendChild(this.#l),this.addEventListener("scroll",this.#c,{passive:!0}),this.#a=r=>{let s=r.target;s instanceof HTMLElement&&this.dispatchEvent(new CustomEvent("slicc-thread-action",{bubbles:!0,composed:!0,detail:{target:s}}))},this.#e.addEventListener("click",this.#a)}};x("slicc-chat-thread",ba);var _H=`
510
+ `,gA="slicc-chat-thread-style";function MH(t){if(t.getElementById(gA))return;let e=t.createElement("style");e.id=gA,e.textContent=bH,(t.head??t.documentElement).appendChild(e)}var ba=class t extends HTMLElement{static observedAttributes=["open","context","accent","url-state"];#e;#t=!1;#a=null;#r=null;#s=null;#i=null;#o=()=>{this.urlState&&(this.#i!=null&&clearTimeout(this.#i),this.#i=setTimeout(()=>{this.#i=null,xt("at",String(Math.round(this.scrollTop)))},300))};#n=()=>{if(!this.urlState)return;let e=Ie("ctx");if(e&&e!==this.context)this.dispatchEvent(new CustomEvent("slicc-url-context",{bubbles:!0,composed:!0,detail:{context:e}}));else{let a=Ie("at");a!=null&&(this.scrollTop=Number.parseInt(a,10)||0)}};#l=null;#h=new Map;connectedCallback(){MH(this.ownerDocument),this.#m(),this.#p(),this.scrollToBottom(),this.urlState&&(this.#r=Ie("at"),this.#s=Ie("ctx"),this.addEventListener("scroll",this.#o,{passive:!0}),window.addEventListener("popstate",this.#n))}disconnectedCallback(){this.#a&&(this.#e?.removeEventListener("click",this.#a),this.#a=null),this.removeEventListener("scroll",this.#o),window.removeEventListener("popstate",this.#n),this.#i!=null&&(clearTimeout(this.#i),this.#i=null)}attributeChangedCallback(e,a,r){a!==r&&(e==="accent"&&this.#t&&this.#p(),e==="context"&&this.urlState&&r!=null&&this.isConnected&&(r!==this.#s&&(this.#r=null),xt("ctx",r,{push:!0})))}get urlState(){return this.hasAttribute("url-state")}set urlState(e){this.toggleAttribute("url-state",e)}get urlContext(){return this.urlState?Ie("ctx"):null}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}get context(){return this.getAttribute("context")}set context(e){e==null?this.removeAttribute("context"):this.setAttribute("context",e)}get accent(){return this.getAttribute("accent")}set accent(e){e==null?this.removeAttribute("accent"):this.setAttribute("accent",e)}get inner(){return this.#m(),this.#e}switchContext(e){this.#m();let a=this.context;if(e===a)return;a!=null&&this.#h.set(a,this.#u());let r=this.#h.get(e);this.#e.replaceChildren(...r?Array.from(r.cloneNode(!0).childNodes):[]),this.context=e,this.removeAttribute("has-new"),this.dispatchEvent(new CustomEvent("slicc-context-change",{bubbles:!0,composed:!0,detail:{context:e,previous:a}})),this.scrollToBottom()}append(...e){this.#m(),e.length>0&&(this.#r=null),this.#e.append(...e),this.requestFollow()}static FOLLOW_SLACK=80;#d(){return this.scrollHeight-this.scrollTop-this.clientHeight<=t.FOLLOW_SLACK}requestFollow(){this.#m(),this.#d()?(this.scrollToBottom(),this.removeAttribute("has-new")):this.setAttribute("has-new","")}#c=()=>{this.hasAttribute("has-new")&&this.#d()&&this.removeAttribute("has-new")};replaceContent(...e){this.#m(),this.#e.replaceChildren(...e),this.removeAttribute("has-new"),this.scrollToBottom();let a=this.#r;a!=null&&e.length>0&&requestAnimationFrame(()=>{this.#r===a&&(this.scrollTop=Number.parseInt(a,10)||0)})}scrollToBottom(){this.scrollTop=this.scrollHeight}#u(){let e=this.ownerDocument.createDocumentFragment();for(let a of Array.from(this.#e.childNodes))e.appendChild(a.cloneNode(!0));return e}#p(){let e=this.accent;e?this.style.setProperty("--ctx",e):this.style.removeProperty("--ctx")}#m(){if(this.#t)return;this.#t=!0;let e=this.querySelector(":scope > .slicc-thread__inner");if(e instanceof HTMLElement)this.#e=e;else{let r=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("div"),this.#e.className="slicc-thread__inner",this.#e.setAttribute("part","inner");for(let s of r)this.#e.appendChild(s);this.appendChild(this.#e)}this.#l=this.ownerDocument.createElement("div"),this.#l.className="slicc-thread__follow";let a=this.ownerDocument.createElement("button");a.type="button",a.append("New messages \u2193"),a.addEventListener("click",()=>{this.scrollToBottom(),this.removeAttribute("has-new")}),this.#l.append(a),this.appendChild(this.#l),this.addEventListener("scroll",this.#c,{passive:!0}),this.#a=r=>{let s=r.target;s instanceof HTMLElement&&this.dispatchEvent(new CustomEvent("slicc-thread-action",{bubbles:!0,composed:!0,detail:{target:s}}))},this.#e.addEventListener("click",this.#a)}};x("slicc-chat-thread",ba);var _H=`
511
511
  :host {
512
512
  display: flex;
513
513
  align-items: center;
@@ -656,7 +656,7 @@ canvas.sprk {
656
656
  @media (prefers-reduced-motion: reduce) {
657
657
  canvas.sprk { display: none; }
658
658
  }
659
- `,OH=C(zH),wa=class extends HTMLElement{static observedAttributes=["name","hue","prompt"];#e;#t=`d${++BH}`;#a=null;#r=null;#s=0;#i=null;#o=[];#n=0;#l=0;#h=-999;#d=-999;#c=null;#f=null;#p=null;#m=null;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[OH]}connectedCallback(){this.#v(),this.#_(),this.#S()}disconnectedCallback(){this.#k(),this.#b()}attributeChangedCallback(){this.isConnected&&(this.#v(),this.#_(),this.#S())}get name(){return this.getAttribute("name")??"palette.shtml"}set name(e){e==null?this.removeAttribute("name"):this.setAttribute("name",e)}get hue(){return this.getAttribute("hue")}set hue(e){e==null?this.removeAttribute("hue"):this.setAttribute("hue",e)}get prompt(){return this.getAttribute("prompt")}set prompt(e){e==null?this.removeAttribute("prompt"):this.setAttribute("prompt",e)}get selectedCanvas(){return this.#x(`canvas:${this.#t}`)}get selectedAccent(){return this.#x(`accent:${this.#t}`)}#x(e){let a=this.querySelector(`slicc-palette-cell[group="${CSS.escape(e)}"][selected]`);return a?{color:a.getAttribute("color")??"",label:a.getAttribute("label")??""}:null}#u(e,a,r){let s=e.startsWith("canvas")?"canvas":"accent";if(!this.querySelector(`slicc-palette-cell[slot="${s}"]`))for(let i of a){let o=this.ownerDocument.createElement("slicc-palette-cell");o.setAttribute("slot",s),o.setAttribute("color",i.color),o.setAttribute("label",i.label),o.setAttribute("group",e),i.label===r&&o.setAttribute("selected",""),this.appendChild(o)}}#g(){return[document.createTextNode("Tune the hero\u2019s "),d("b",null,"canvas"),document.createTextNode(" & "),d("b",null,"accent"),document.createTextNode(", then apply:")]}#v(){let e=this.hue,a=e?`--c:${e}`:void 0,r=d("slot",{name:"prompt"});this.prompt?r.append(this.prompt):r.append(...this.#g()),this.#e.replaceChildren(d("canvas",{class:"sprk",part:"field","aria-hidden":"true"}),d("div",{class:"dh",part:"header",style:a},d("span",{class:"sg",part:"glyph"},b("sparkles",{size:12})),d("span",{class:"nm",part:"name"},this.name),d("span",{class:"tag",part:"tag"},"sprinkle \xB7 dip")),d("div",{class:"dbody",part:"body",style:a},d("p",{class:"dprompt",part:"prompt"},r),d("div",{class:"pgrid canvas",part:"grid-canvas"},d("slot",{name:"canvas"})),d("div",{class:"pgrid accent",part:"grid-accent"},d("slot",{name:"accent"})),d("div",{class:"dfoot"},d("button",{class:"dapply",part:"apply",type:"button"},"Apply to hero \u2192"),d("span",{class:"dnote",part:"note"})))),this.#u(`canvas:${this.#t}`,PH,"paper"),this.#u(`accent:${this.#t}`,RH,"cone"),this.#M()}#M(){let e=this.#e.querySelector(".dnote");if(!e)return;let a=this.selectedCanvas?.label??"paper",r=this.selectedAccent?.label??"violet";e.textContent=`${a} \xB7 ${r}`}#_(){this.#p||(this.#p=()=>this.#M(),this.addEventListener("palette-select",this.#p)),this.#m||(this.#m=()=>this.#w()),this.#e.querySelector(".dapply")?.addEventListener("click",this.#m)}#b(){this.#p&&(this.removeEventListener("palette-select",this.#p),this.#p=null),this.#m=null}#w(){this.#M(),this.dispatchEvent(new CustomEvent("slicc-dip-apply",{bubbles:!0,composed:!0,detail:{canvas:this.selectedCanvas,accent:this.selectedAccent}}))}#y(){return typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}#S(){if(this.#k(),this.#y())return;let e=this.#e.querySelector("canvas.sprk"),a=e?.getContext("2d")??null;!e||!a||(this.#a=e,this.#r=a,this.#o=[],this.#D(),typeof ResizeObserver=="function"&&(this.#i=new ResizeObserver(()=>this.#D()),this.#i.observe(this)),this.#c=r=>{let s=this.getBoundingClientRect();this.#h=r.clientX-s.left,this.#d=r.clientY-s.top},this.#f=()=>{this.#h=-999,this.#d=-999},this.addEventListener("pointermove",this.#c),this.addEventListener("pointerleave",this.#f),this.#s=requestAnimationFrame(()=>this.#E()))}#k(){this.#s&&cancelAnimationFrame(this.#s),this.#s=0,this.#i?.disconnect(),this.#i=null,this.#c&&this.removeEventListener("pointermove",this.#c),this.#f&&this.removeEventListener("pointerleave",this.#f),this.#c=null,this.#f=null}#D(){let e=this.#a,a=this.#r;if(!e||!a)return;let r=this.getBoundingClientRect(),s=Math.min(typeof devicePixelRatio=="number"?devicePixelRatio:1,2);if(this.#n=r.width,this.#l=r.height||90,e.width=Math.max(1,Math.round(this.#n*s)),e.height=Math.max(1,Math.round(this.#l*s)),a.setTransform(s,0,0,s,0,0),!this.#o.length)for(let i=0;i<HH;i++)this.#o.push({x:it(0,this.#n),y:it(0,this.#l),vx:it(-.1,.1),vy:it(-.08,.08),rot:it(0,DH),rv:it(-.014,.014),s:it(1.2,2.2),col:bA[i%bA.length]})}#P(e,a,r,s,i){let o=this.#r;o&&(o.roundRect?(o.beginPath(),o.roundRect(e,a,r,s,i)):(o.beginPath(),o.moveTo(e+i,a),o.arcTo(e+r,a,e+r,a+s,i),o.arcTo(e+r,a+s,e,a+s,i),o.arcTo(e,a+s,e,a,i),o.arcTo(e,a,e+r,a,i),o.closePath()))}#E(){let e=this.#r;if(e){e.clearRect(0,0,this.#n,this.#l);for(let a of this.#o){let r=a.x-this.#h,s=a.y-this.#d,i=r*r+s*s;if(i<ya*ya){let h=Math.sqrt(i)||1,l=(ya-h)/ya*.5;a.vx+=r/h*l,a.vy+=s/h*l}a.vx*=.95,a.vy*=.95,a.x+=a.vx+.04,a.y+=a.vy,a.rot+=a.rv,a.x<-6&&(a.x=this.#n+6),a.x>this.#n+6&&(a.x=-6),a.y<-6&&(a.y=this.#l+6),a.y>this.#l+6&&(a.y=-6);let o=a.s*4,n=a.s*1.55;e.save(),e.translate(a.x,a.y),e.rotate(a.rot),e.globalAlpha=.5,e.fillStyle=a.col,this.#P(-o/2,-n/2,o,n,n/2),e.fill(),e.globalAlpha=.85,e.fillStyle="#fff",this.#P(-o/2+n*.3,-n*.34,o-n*.6,n*.3,n*.15),e.fill(),e.restore(),e.globalAlpha=1}this.#s=requestAnimationFrame(()=>this.#E())}}};x("slicc-dip",wa);var FH=14,VH=12,IH="Something went wrong",NH={retry:"Try again",settings:"Open Settings","change-model":"Change model"},qH={retry:"rotate-ccw",settings:"settings","change-model":"sparkles"},UH=`
659
+ `,OH=C(zH),wa=class extends HTMLElement{static observedAttributes=["name","hue","prompt"];#e;#t=`d${++BH}`;#a=null;#r=null;#s=0;#i=null;#o=[];#n=0;#l=0;#h=-999;#d=-999;#c=null;#u=null;#p=null;#m=null;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[OH]}connectedCallback(){this.#v(),this.#b(),this.#S()}disconnectedCallback(){this.#k(),this.#M()}attributeChangedCallback(){this.isConnected&&(this.#v(),this.#b(),this.#S())}get name(){return this.getAttribute("name")??"palette.shtml"}set name(e){e==null?this.removeAttribute("name"):this.setAttribute("name",e)}get hue(){return this.getAttribute("hue")}set hue(e){e==null?this.removeAttribute("hue"):this.setAttribute("hue",e)}get prompt(){return this.getAttribute("prompt")}set prompt(e){e==null?this.removeAttribute("prompt"):this.setAttribute("prompt",e)}get selectedCanvas(){return this.#x(`canvas:${this.#t}`)}get selectedAccent(){return this.#x(`accent:${this.#t}`)}#x(e){let a=this.querySelector(`slicc-palette-cell[group="${CSS.escape(e)}"][selected]`);return a?{color:a.getAttribute("color")??"",label:a.getAttribute("label")??""}:null}#f(e,a,r){let s=e.startsWith("canvas")?"canvas":"accent";if(!this.querySelector(`slicc-palette-cell[slot="${s}"]`))for(let i of a){let o=this.ownerDocument.createElement("slicc-palette-cell");o.setAttribute("slot",s),o.setAttribute("color",i.color),o.setAttribute("label",i.label),o.setAttribute("group",e),i.label===r&&o.setAttribute("selected",""),this.appendChild(o)}}#g(){return[document.createTextNode("Tune the hero\u2019s "),d("b",null,"canvas"),document.createTextNode(" & "),d("b",null,"accent"),document.createTextNode(", then apply:")]}#v(){let e=this.hue,a=e?`--c:${e}`:void 0,r=d("slot",{name:"prompt"});this.prompt?r.append(this.prompt):r.append(...this.#g()),this.#e.replaceChildren(d("canvas",{class:"sprk",part:"field","aria-hidden":"true"}),d("div",{class:"dh",part:"header",style:a},d("span",{class:"sg",part:"glyph"},b("sparkles",{size:12})),d("span",{class:"nm",part:"name"},this.name),d("span",{class:"tag",part:"tag"},"sprinkle \xB7 dip")),d("div",{class:"dbody",part:"body",style:a},d("p",{class:"dprompt",part:"prompt"},r),d("div",{class:"pgrid canvas",part:"grid-canvas"},d("slot",{name:"canvas"})),d("div",{class:"pgrid accent",part:"grid-accent"},d("slot",{name:"accent"})),d("div",{class:"dfoot"},d("button",{class:"dapply",part:"apply",type:"button"},"Apply to hero \u2192"),d("span",{class:"dnote",part:"note"})))),this.#f(`canvas:${this.#t}`,PH,"paper"),this.#f(`accent:${this.#t}`,RH,"cone"),this.#_()}#_(){let e=this.#e.querySelector(".dnote");if(!e)return;let a=this.selectedCanvas?.label??"paper",r=this.selectedAccent?.label??"violet";e.textContent=`${a} \xB7 ${r}`}#b(){this.#p||(this.#p=()=>this.#_(),this.addEventListener("palette-select",this.#p)),this.#m||(this.#m=()=>this.#w()),this.#e.querySelector(".dapply")?.addEventListener("click",this.#m)}#M(){this.#p&&(this.removeEventListener("palette-select",this.#p),this.#p=null),this.#m=null}#w(){this.#_(),this.dispatchEvent(new CustomEvent("slicc-dip-apply",{bubbles:!0,composed:!0,detail:{canvas:this.selectedCanvas,accent:this.selectedAccent}}))}#y(){return typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches}#S(){if(this.#k(),this.#y())return;let e=this.#e.querySelector("canvas.sprk"),a=e?.getContext("2d")??null;!e||!a||(this.#a=e,this.#r=a,this.#o=[],this.#D(),typeof ResizeObserver=="function"&&(this.#i=new ResizeObserver(()=>this.#D()),this.#i.observe(this)),this.#c=r=>{let s=this.getBoundingClientRect();this.#h=r.clientX-s.left,this.#d=r.clientY-s.top},this.#u=()=>{this.#h=-999,this.#d=-999},this.addEventListener("pointermove",this.#c),this.addEventListener("pointerleave",this.#u),this.#s=requestAnimationFrame(()=>this.#E()))}#k(){this.#s&&cancelAnimationFrame(this.#s),this.#s=0,this.#i?.disconnect(),this.#i=null,this.#c&&this.removeEventListener("pointermove",this.#c),this.#u&&this.removeEventListener("pointerleave",this.#u),this.#c=null,this.#u=null}#D(){let e=this.#a,a=this.#r;if(!e||!a)return;let r=this.getBoundingClientRect(),s=Math.min(typeof devicePixelRatio=="number"?devicePixelRatio:1,2);if(this.#n=r.width,this.#l=r.height||90,e.width=Math.max(1,Math.round(this.#n*s)),e.height=Math.max(1,Math.round(this.#l*s)),a.setTransform(s,0,0,s,0,0),!this.#o.length)for(let i=0;i<HH;i++)this.#o.push({x:it(0,this.#n),y:it(0,this.#l),vx:it(-.1,.1),vy:it(-.08,.08),rot:it(0,DH),rv:it(-.014,.014),s:it(1.2,2.2),col:bA[i%bA.length]})}#P(e,a,r,s,i){let o=this.#r;o&&(o.roundRect?(o.beginPath(),o.roundRect(e,a,r,s,i)):(o.beginPath(),o.moveTo(e+i,a),o.arcTo(e+r,a,e+r,a+s,i),o.arcTo(e+r,a+s,e,a+s,i),o.arcTo(e,a+s,e,a,i),o.arcTo(e,a,e+r,a,i),o.closePath()))}#E(){let e=this.#r;if(e){e.clearRect(0,0,this.#n,this.#l);for(let a of this.#o){let r=a.x-this.#h,s=a.y-this.#d,i=r*r+s*s;if(i<ya*ya){let h=Math.sqrt(i)||1,l=(ya-h)/ya*.5;a.vx+=r/h*l,a.vy+=s/h*l}a.vx*=.95,a.vy*=.95,a.x+=a.vx+.04,a.y+=a.vy,a.rot+=a.rv,a.x<-6&&(a.x=this.#n+6),a.x>this.#n+6&&(a.x=-6),a.y<-6&&(a.y=this.#l+6),a.y>this.#l+6&&(a.y=-6);let o=a.s*4,n=a.s*1.55;e.save(),e.translate(a.x,a.y),e.rotate(a.rot),e.globalAlpha=.5,e.fillStyle=a.col,this.#P(-o/2,-n/2,o,n,n/2),e.fill(),e.globalAlpha=.85,e.fillStyle="#fff",this.#P(-o/2+n*.3,-n*.34,o-n*.6,n*.3,n*.15),e.fill(),e.restore(),e.globalAlpha=1}this.#s=requestAnimationFrame(()=>this.#E())}}};x("slicc-dip",wa);var FH=14,VH=12,IH="Something went wrong",NH={retry:"Try again",settings:"Open Settings","change-model":"Change model"},qH={retry:"rotate-ccw",settings:"settings","change-model":"sparkles"},UH=`
660
660
  :host{
661
661
  /* Error cards sit in the assistant column (left-aligned). Tokens default to
662
662
  the light palette and flip in dark mode via the library's outer scopes
@@ -1307,7 +1307,7 @@ slicc-composer .slicc-composer__ptt.is-picking {
1307
1307
  animation-name: none;
1308
1308
  }
1309
1309
  }
1310
- `,CA="slicc-composer-style";function gD(t){if(t.getElementById(CA))return;let e=t.createElement("style");e.id=CA,e.textContent=xD,(t.head??t.documentElement).appendChild(e)}var AA=3e3,vD=60,bD=100,MD=1e4,_D=45e3;function kA(t,e,a){return new Promise((r,s)=>{let i=setTimeout(()=>s(a),e);t.then(o=>{clearTimeout(i),r(o)},o=>{clearTimeout(i),s(o instanceof Error?o:new Error(String(o)))})})}var yD=8,kl="slicc-composer:mic-device";function wD(){try{return typeof localStorage>"u"?null:localStorage.getItem(kl)}catch{return null}}function SD(t){try{if(typeof localStorage>"u")return;t?localStorage.setItem(kl,t):localStorage.removeItem(kl)}catch{}}function CD(t){if(t==null||!Number.isFinite(t))return"";if(t<60)return`~${Math.max(1,Math.round(t))}s`;let e=Math.floor(t/60),a=Math.round(t%60);return`~${e}m ${a}s`}var Ha=class extends HTMLElement{static observedAttributes=["open"];#e;#t=!1;#a=null;#r="idle";#s=!1;#i=0;#o=null;#n=null;#l=null;#h=null;#d=null;#c="unknown";#f=wD();#p=null;#m=null;#x=null;#u=null;#g=null;#v=null;#M=null;#_=null;#b=null;#w=null;#y=[];connectedCallback(){gD(this.ownerDocument),this.#S(),this.addEventListener("pointerdown",this.#k)}disconnectedCallback(){this.removeEventListener("pointerdown",this.#k),this.#l?.cancel(),this.#l=null,this.#V(),this.#s=!1,this.#o=null,this.#i++,this.#R(),this.#N(),this.#p&&clearTimeout(this.#p),this.#p=null,this.#T(),this.#$(),this.#C()}attributeChangedCallback(){}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}get speech(){return this.#d??=Cl(),this.#d}set speech(e){this.#d=e,this.#c="unknown"}get device(){return this.#f}set device(e){this.#f=e,SD(e)}get inner(){return this.#S(),this.#e}append(...e){this.#S(),this.#e.append(...e)}#S(){if(this.#t)return;this.#t=!0;let e=this.querySelector(":scope > .slicc-composer__inner");if(e instanceof HTMLElement){this.#e=e;return}let a=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("div"),this.#e.className="slicc-composer__inner",this.#e.setAttribute("part","inner");for(let r of a)this.#e.appendChild(r);this.appendChild(this.#e)}#k=e=>{if(!this.hasAttribute("ptt")||!e.isPrimary||this.#s||e.button!==0||this.#r==="finalizing"||this.#r==="picking")return;let r=e.target?.closest?.("textarea");if(!(r instanceof HTMLTextAreaElement)||!this.contains(r))return;this.#s=!0,this.#i++,this.#o=r,this.#n=e.pointerId;try{this.setPointerCapture(e.pointerId)}catch{}this.setAttribute("data-ptt-pressed",""),this.ownerDocument.addEventListener("pointerup",this.#z),this.addEventListener("pointercancel",this.#I);let i=this.#i;this.#m=setTimeout(()=>{this.#m=null,this.#D(this.speech,i)},bD)};async#D(e,a){let r=await Promise.race([e.permission().then(s=>(this.#c=s,s)),new Promise(s=>setTimeout(()=>s("pending"),vD))]);if(!(a!==this.#i||!this.#s)){if(r==="granted"){this.#E(e,a);return}if(r==="denied"){this.#F("denied");return}this.#F("enable"),this.#p=setTimeout(()=>{this.#p=null,this.#P(e,a)},AA),r==="pending"&&e.permission().then(s=>{this.#c=s,!(a!==this.#i||!this.#s||this.#r!=="enable")&&(s==="granted"?(this.#L(),this.#E(e,a)):s==="denied"&&(this.#L(),this.#F("denied")))})}}#P(e,a){a!==this.#i||!this.#s||this.#r!=="enable"||(this.#g=null,this.#F("prompting"),kA(e.requestPermission(),MD,new Error("Microphone didn't respond. Check your mic, then hold again.")).then(r=>{this.#c=r?"granted":"denied",r&&e.warmup(),a===this.#i&&(r&&this.#s?this.#E(e,a):r?this.#C():this.#s?this.#F("denied"):this.#C())}).catch(r=>{this.#c="denied",a===this.#i&&(this.#s?(this.#g=r instanceof Error?r.message:String(r),this.#F("denied")):this.#C())}))}#E(e,a){this.#r="recording",this.#F("recording"),e.warmup(),this.#x?.(),this.#x=e.onStatus(s=>{this.#u=s,this.#j()}),e.microphones().then(s=>{a===this.#i&&Ta(s)&&this.#J(s)});let r=e.start({deviceId:this.#f??void 0,onPartial:s=>{a===this.#i&&this.#K(s)},onError:s=>{a===this.#i&&this.#K(s,!0)}});this.#h=r,r.then(s=>{if(this.#h===r){if(this.#h=null,a!==this.#i||this.#r!=="recording"){s.cancel();return}this.#l=s}}).catch(s=>{this.#h===r&&(this.#h=null,a===this.#i&&this.#K(s instanceof Error?s.message:String(s),!0))})}#V(){let e=this.#h;this.#h=null,e&&e.then(a=>a.cancel(),()=>{})}#z=e=>{if(!this.#s||this.#n!=null&&e.pointerId!==this.#n)return;let a=this.#b,r=!1;if(this.#r==="recording"&&a&&!a.hidden)if(e.composedPath().includes(a))r=!0;else{let s=this.ownerDocument.elementFromPoint(e.clientX,e.clientY);r=s!=null&&a.contains(s)}if(r){this.#s=!1,this.#R(),this.#T(),this.#l?.cancel(),this.#l=null,this.#V(),this.#o=null,this.#B();return}this.#O(!0)};#I=e=>{this.#n!=null&&e.pointerId!==this.#n||this.#O(!1)};#O(e){if(!this.#s)return;switch(this.#s=!1,this.#N(),this.#R(),this.#T(),this.#r){case"enable":this.#L(),this.#o=null,this.#C();return;case"prompting":this.#o=null;return;case"denied":this.#o=null,this.#C();return;case"recording":break;default:this.#o=null,this.#C();return}let a=this.#l;this.#l=null;let r=this.#h;if(this.#h=null,!e){a?.cancel(),r&&r.then(o=>o.cancel(),()=>{}),this.#o=null,this.#C();return}if(!a&&!r){this.#o=null,this.#C();return}this.#r="finalizing",this.#K("Transcribing\u2026");let s=this.#i,i=a?Promise.resolve(a):r;kA(i.then(o=>o.stop()),_D,new Error("finalize timed out")).then(o=>{s===this.#i&&(this.#C(),this.#A(o))}).catch(()=>{s===this.#i&&(this.#C(),this.#o=null)})}#A(e){let a=this.#o;if(this.#o=null,!a)return;let r=e.trim();if(!r){a.focus();return}a.value=a.value?/\s$/.test(a.value)?a.value+r:`${a.value} ${r}`:r,a.dispatchEvent(new Event("input",{bubbles:!0})),a.focus();let s=a.closest("slicc-input-card");s&&typeof s.submit=="function"?s.submit("dictation"):a.dispatchEvent(new CustomEvent("submit",{bubbles:!0,composed:!0,detail:{value:a.value,source:"dictation"}}))}#L(){this.#p&&clearTimeout(this.#p),this.#p=null}#N(){this.#m&&clearTimeout(this.#m),this.#m=null}#T(){this.ownerDocument.removeEventListener("pointerup",this.#z),this.removeEventListener("pointercancel",this.#I)}#R(){let e=this.#n;if(this.#n=null,this.removeAttribute("data-ptt-pressed"),e!=null)try{this.releasePointerCapture(e)}catch{}}#B(){this.#r="picking",this.#X("picking"),this.#v&&(this.#v.textContent="Choose a microphone"),this.#M&&(this.#M.hidden=!0),this.#H();let e=this.ownerDocument;e.addEventListener("pointerdown",this.#W,!0),e.addEventListener("keydown",this.#q,!0)}#H(){let e=this.#b;if(!e||this.#w)return;let a=d("div",{class:"slicc-composer__ptt-device-menu",role:"menu"}),r=null;for(let s of this.#y){let i=s.deviceId===this.#f,o=d("button",{type:"button",class:"slicc-composer__ptt-device-item",role:"menuitemradio","aria-checked":i?"true":"false","data-device-id":s.deviceId},s.label,d("span",{class:"tick"},b("check",{size:14})));o.addEventListener("click",()=>{this.device=s.deviceId,this.#G()}),(i||!r)&&(r=o),a.appendChild(o)}this.#w=a,e.appendChild(a),this.#U(a,e),r?.focus()}#U(e,a){let o=a.getBoundingClientRect(),h=(window.innerHeight||document.documentElement.clientHeight)-o.bottom-6-8,l=o.top-6-8,p=e.offsetHeight>h&&l>h;e.classList.toggle("slicc-composer__ptt-device-menu--up",p);let c=Math.max(p?l:h,0);e.style.maxHeight=`${Math.min(320,c)}px`}#W=e=>{this.#b&&e.composedPath().includes(this.#b)||this.#G()};#q=e=>{e.key==="Escape"&&(e.stopPropagation(),this.#G())};#$(){let e=this.ownerDocument;e.removeEventListener("pointerdown",this.#W,!0),e.removeEventListener("keydown",this.#q,!0)}#G(){this.#$(),this.#C()}#F(e){switch(this.#r=e,this.#a||(this.#a=d("div",{class:"slicc-composer__ptt","data-ptt":!0,role:"button"}),this.appendChild(this.#a)),this.#X(e),e){case"enable":this.#Z(b("mic",{size:28}),"Hold to enable push to talk",this.#Y("Requesting microphone access when the bar fills")),this.#a.setAttribute("aria-label","Hold to enable push to talk");break;case"prompting":this.#Z(b("mic",{size:28}),"Allow microphone access in the browser prompt",this.#Y("Waiting for permission\u2026")),this.#a.setAttribute("aria-label","Waiting for microphone permission");break;case"denied":{let a=this.#g?"Microphone unavailable":"Microphone access is blocked",r=this.#g??"Enable the microphone for this site in your browser settings, then hold again.";this.#Z(b("mic-off",{size:28}),a,d("div",{class:"slicc-composer__ptt-load-text"},r)),this.#a.setAttribute("aria-label",a);break}case"recording":{this.#b=d("div",{class:"slicc-composer__ptt-device",hidden:!0}),this.#M=d("div",{class:"slicc-composer__ptt-caption","aria-live":"polite",hidden:!0}),this.#_=d("div",{class:"slicc-composer__ptt-status",hidden:!0});let a=d("div",{class:"slicc-composer__ptt-microw"},d("div",{class:"slicc-composer__ptt-mic"},b("mic",{size:28})),this.#b);this.#v=d("div",{class:"slicc-composer__ptt-label"},"Listening \u2014 release to send"),this.#a.replaceChildren(a,this.#v,this.#M,this.#_),this.#a.setAttribute("aria-label","Listening \u2014 release to send"),this.#j();break}}}#Z(e,a,r){this.#a&&(this.#v=d("div",{class:"slicc-composer__ptt-label"},a),this.#M=null,this.#_=null,this.#b=null,this.#w=null,this.#y=[],this.#a.replaceChildren(d("div",{class:"slicc-composer__ptt-mic"},e),this.#v,r))}#Y(e){return d("div",{class:"slicc-composer__ptt-load"},d("span",{class:"slicc-composer__ptt-load-text"},e),d("div",{class:"slicc-composer__ptt-bar"},d("div",{class:"slicc-composer__ptt-bar-fill"})))}#X(e){this.#a&&(this.#a.classList.remove("is-enable","is-prompting","is-denied","is-recording","is-finalizing","is-picking"),e!=="idle"&&this.#a.classList.add(`is-${e}`))}#K(e,a=!1){let r=this.#M;if(!r)return;let s=e.trim().split(/\s+/).filter(Boolean);if(s.length===0){r.hidden=!0;return}r.textContent=s.slice(-yD).join(" "),r.classList.toggle("is-error",a),r.hidden=!1}#j(){let e=this.#_;if(!e)return;let a=this.#u;if(a?.state==="downloading"){if(a.download){let r=CD(a.download.etaSeconds??null);e.textContent=r?`Better speech recognition downloading \xB7 ready in ${r}`:"Better speech recognition downloading\u2026"}else e.textContent="Preparing enhanced speech\u2026";e.classList.remove("is-error"),e.hidden=!1}else a?.state==="ready"&&a.engine==="enhanced"?(e.textContent="Enhanced speech recognition",e.classList.remove("is-error"),e.hidden=!1):a?.state==="unavailable"&&a.message?(e.textContent=a.message,e.classList.add("is-error"),e.hidden=!1):(e.classList.remove("is-error"),e.hidden=!0)}#J(e){let a=this.#b;if(!a)return;this.#y=e;let r=d("button",{type:"button",class:"slicc-composer__ptt-device-btn","aria-label":"Choose a microphone","aria-haspopup":"menu",title:"Choose a microphone"},b("chevron-down",{size:12}));r.addEventListener("pointerdown",s=>s.stopPropagation()),a.replaceChildren(r),a.hidden=!1}#C(){this.#x?.(),this.#x=null,this.#a?.remove(),this.#a=null,this.#v=null,this.#M=null,this.#_=null,this.#b=null,this.#w=null,this.#y=[],this.#g=null,this.#r="idle"}};x("slicc-composer",Ha);var kD=`
1310
+ `,CA="slicc-composer-style";function gD(t){if(t.getElementById(CA))return;let e=t.createElement("style");e.id=CA,e.textContent=xD,(t.head??t.documentElement).appendChild(e)}var AA=3e3,vD=60,bD=100,MD=1e4,_D=45e3;function kA(t,e,a){return new Promise((r,s)=>{let i=setTimeout(()=>s(a),e);t.then(o=>{clearTimeout(i),r(o)},o=>{clearTimeout(i),s(o instanceof Error?o:new Error(String(o)))})})}var yD=8,kl="slicc-composer:mic-device";function wD(){try{return typeof localStorage>"u"?null:localStorage.getItem(kl)}catch{return null}}function SD(t){try{if(typeof localStorage>"u")return;t?localStorage.setItem(kl,t):localStorage.removeItem(kl)}catch{}}function CD(t){if(t==null||!Number.isFinite(t))return"";if(t<60)return`~${Math.max(1,Math.round(t))}s`;let e=Math.floor(t/60),a=Math.round(t%60);return`~${e}m ${a}s`}var Ha=class extends HTMLElement{static observedAttributes=["open"];#e;#t=!1;#a=null;#r="idle";#s=!1;#i=0;#o=null;#n=null;#l=null;#h=null;#d=null;#c="unknown";#u=wD();#p=null;#m=null;#x=null;#f=null;#g=null;#v=null;#_=null;#b=null;#M=null;#w=null;#y=[];connectedCallback(){gD(this.ownerDocument),this.#S(),this.addEventListener("pointerdown",this.#k)}disconnectedCallback(){this.removeEventListener("pointerdown",this.#k),this.#l?.cancel(),this.#l=null,this.#V(),this.#s=!1,this.#o=null,this.#i++,this.#R(),this.#N(),this.#p&&clearTimeout(this.#p),this.#p=null,this.#T(),this.#$(),this.#C()}attributeChangedCallback(){}get open(){return this.hasAttribute("open")}set open(e){e?this.setAttribute("open",""):this.removeAttribute("open")}get speech(){return this.#d??=Cl(),this.#d}set speech(e){this.#d=e,this.#c="unknown"}get device(){return this.#u}set device(e){this.#u=e,SD(e)}get inner(){return this.#S(),this.#e}append(...e){this.#S(),this.#e.append(...e)}#S(){if(this.#t)return;this.#t=!0;let e=this.querySelector(":scope > .slicc-composer__inner");if(e instanceof HTMLElement){this.#e=e;return}let a=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("div"),this.#e.className="slicc-composer__inner",this.#e.setAttribute("part","inner");for(let r of a)this.#e.appendChild(r);this.appendChild(this.#e)}#k=e=>{if(!this.hasAttribute("ptt")||!e.isPrimary||this.#s||e.button!==0||this.#r==="finalizing"||this.#r==="picking")return;let r=e.target?.closest?.("textarea");if(!(r instanceof HTMLTextAreaElement)||!this.contains(r))return;this.#s=!0,this.#i++,this.#o=r,this.#n=e.pointerId;try{this.setPointerCapture(e.pointerId)}catch{}this.setAttribute("data-ptt-pressed",""),this.ownerDocument.addEventListener("pointerup",this.#z),this.addEventListener("pointercancel",this.#I);let i=this.#i;this.#m=setTimeout(()=>{this.#m=null,this.#D(this.speech,i)},bD)};async#D(e,a){let r=await Promise.race([e.permission().then(s=>(this.#c=s,s)),new Promise(s=>setTimeout(()=>s("pending"),vD))]);if(!(a!==this.#i||!this.#s)){if(r==="granted"){this.#E(e,a);return}if(r==="denied"){this.#F("denied");return}this.#F("enable"),this.#p=setTimeout(()=>{this.#p=null,this.#P(e,a)},AA),r==="pending"&&e.permission().then(s=>{this.#c=s,!(a!==this.#i||!this.#s||this.#r!=="enable")&&(s==="granted"?(this.#L(),this.#E(e,a)):s==="denied"&&(this.#L(),this.#F("denied")))})}}#P(e,a){a!==this.#i||!this.#s||this.#r!=="enable"||(this.#g=null,this.#F("prompting"),kA(e.requestPermission(),MD,new Error("Microphone didn't respond. Check your mic, then hold again.")).then(r=>{this.#c=r?"granted":"denied",r&&e.warmup(),a===this.#i&&(r&&this.#s?this.#E(e,a):r?this.#C():this.#s?this.#F("denied"):this.#C())}).catch(r=>{this.#c="denied",a===this.#i&&(this.#s?(this.#g=r instanceof Error?r.message:String(r),this.#F("denied")):this.#C())}))}#E(e,a){this.#r="recording",this.#F("recording"),e.warmup(),this.#x?.(),this.#x=e.onStatus(s=>{this.#f=s,this.#j()}),e.microphones().then(s=>{a===this.#i&&Ta(s)&&this.#J(s)});let r=e.start({deviceId:this.#u??void 0,onPartial:s=>{a===this.#i&&this.#K(s)},onError:s=>{a===this.#i&&this.#K(s,!0)}});this.#h=r,r.then(s=>{if(this.#h===r){if(this.#h=null,a!==this.#i||this.#r!=="recording"){s.cancel();return}this.#l=s}}).catch(s=>{this.#h===r&&(this.#h=null,a===this.#i&&this.#K(s instanceof Error?s.message:String(s),!0))})}#V(){let e=this.#h;this.#h=null,e&&e.then(a=>a.cancel(),()=>{})}#z=e=>{if(!this.#s||this.#n!=null&&e.pointerId!==this.#n)return;let a=this.#M,r=!1;if(this.#r==="recording"&&a&&!a.hidden)if(e.composedPath().includes(a))r=!0;else{let s=this.ownerDocument.elementFromPoint(e.clientX,e.clientY);r=s!=null&&a.contains(s)}if(r){this.#s=!1,this.#R(),this.#T(),this.#l?.cancel(),this.#l=null,this.#V(),this.#o=null,this.#B();return}this.#O(!0)};#I=e=>{this.#n!=null&&e.pointerId!==this.#n||this.#O(!1)};#O(e){if(!this.#s)return;switch(this.#s=!1,this.#N(),this.#R(),this.#T(),this.#r){case"enable":this.#L(),this.#o=null,this.#C();return;case"prompting":this.#o=null;return;case"denied":this.#o=null,this.#C();return;case"recording":break;default:this.#o=null,this.#C();return}let a=this.#l;this.#l=null;let r=this.#h;if(this.#h=null,!e){a?.cancel(),r&&r.then(o=>o.cancel(),()=>{}),this.#o=null,this.#C();return}if(!a&&!r){this.#o=null,this.#C();return}this.#r="finalizing",this.#K("Transcribing\u2026");let s=this.#i,i=a?Promise.resolve(a):r;kA(i.then(o=>o.stop()),_D,new Error("finalize timed out")).then(o=>{s===this.#i&&(this.#C(),this.#A(o))}).catch(()=>{s===this.#i&&(this.#C(),this.#o=null)})}#A(e){let a=this.#o;if(this.#o=null,!a)return;let r=e.trim();if(!r){a.focus();return}a.value=a.value?/\s$/.test(a.value)?a.value+r:`${a.value} ${r}`:r,a.dispatchEvent(new Event("input",{bubbles:!0})),a.focus();let s=a.closest("slicc-input-card");s&&typeof s.submit=="function"?s.submit("dictation"):a.dispatchEvent(new CustomEvent("submit",{bubbles:!0,composed:!0,detail:{value:a.value,source:"dictation"}}))}#L(){this.#p&&clearTimeout(this.#p),this.#p=null}#N(){this.#m&&clearTimeout(this.#m),this.#m=null}#T(){this.ownerDocument.removeEventListener("pointerup",this.#z),this.removeEventListener("pointercancel",this.#I)}#R(){let e=this.#n;if(this.#n=null,this.removeAttribute("data-ptt-pressed"),e!=null)try{this.releasePointerCapture(e)}catch{}}#B(){this.#r="picking",this.#X("picking"),this.#v&&(this.#v.textContent="Choose a microphone"),this.#_&&(this.#_.hidden=!0),this.#H();let e=this.ownerDocument;e.addEventListener("pointerdown",this.#W,!0),e.addEventListener("keydown",this.#q,!0)}#H(){let e=this.#M;if(!e||this.#w)return;let a=d("div",{class:"slicc-composer__ptt-device-menu",role:"menu"}),r=null;for(let s of this.#y){let i=s.deviceId===this.#u,o=d("button",{type:"button",class:"slicc-composer__ptt-device-item",role:"menuitemradio","aria-checked":i?"true":"false","data-device-id":s.deviceId},s.label,d("span",{class:"tick"},b("check",{size:14})));o.addEventListener("click",()=>{this.device=s.deviceId,this.#G()}),(i||!r)&&(r=o),a.appendChild(o)}this.#w=a,e.appendChild(a),this.#U(a,e),r?.focus()}#U(e,a){let o=a.getBoundingClientRect(),h=(window.innerHeight||document.documentElement.clientHeight)-o.bottom-6-8,l=o.top-6-8,p=e.offsetHeight>h&&l>h;e.classList.toggle("slicc-composer__ptt-device-menu--up",p);let c=Math.max(p?l:h,0);e.style.maxHeight=`${Math.min(320,c)}px`}#W=e=>{this.#M&&e.composedPath().includes(this.#M)||this.#G()};#q=e=>{e.key==="Escape"&&(e.stopPropagation(),this.#G())};#$(){let e=this.ownerDocument;e.removeEventListener("pointerdown",this.#W,!0),e.removeEventListener("keydown",this.#q,!0)}#G(){this.#$(),this.#C()}#F(e){switch(this.#r=e,this.#a||(this.#a=d("div",{class:"slicc-composer__ptt","data-ptt":!0,role:"button"}),this.appendChild(this.#a)),this.#X(e),e){case"enable":this.#Z(b("mic",{size:28}),"Hold to enable push to talk",this.#Y("Requesting microphone access when the bar fills")),this.#a.setAttribute("aria-label","Hold to enable push to talk");break;case"prompting":this.#Z(b("mic",{size:28}),"Allow microphone access in the browser prompt",this.#Y("Waiting for permission\u2026")),this.#a.setAttribute("aria-label","Waiting for microphone permission");break;case"denied":{let a=this.#g?"Microphone unavailable":"Microphone access is blocked",r=this.#g??"Enable the microphone for this site in your browser settings, then hold again.";this.#Z(b("mic-off",{size:28}),a,d("div",{class:"slicc-composer__ptt-load-text"},r)),this.#a.setAttribute("aria-label",a);break}case"recording":{this.#M=d("div",{class:"slicc-composer__ptt-device",hidden:!0}),this.#_=d("div",{class:"slicc-composer__ptt-caption","aria-live":"polite",hidden:!0}),this.#b=d("div",{class:"slicc-composer__ptt-status",hidden:!0});let a=d("div",{class:"slicc-composer__ptt-microw"},d("div",{class:"slicc-composer__ptt-mic"},b("mic",{size:28})),this.#M);this.#v=d("div",{class:"slicc-composer__ptt-label"},"Listening \u2014 release to send"),this.#a.replaceChildren(a,this.#v,this.#_,this.#b),this.#a.setAttribute("aria-label","Listening \u2014 release to send"),this.#j();break}}}#Z(e,a,r){this.#a&&(this.#v=d("div",{class:"slicc-composer__ptt-label"},a),this.#_=null,this.#b=null,this.#M=null,this.#w=null,this.#y=[],this.#a.replaceChildren(d("div",{class:"slicc-composer__ptt-mic"},e),this.#v,r))}#Y(e){return d("div",{class:"slicc-composer__ptt-load"},d("span",{class:"slicc-composer__ptt-load-text"},e),d("div",{class:"slicc-composer__ptt-bar"},d("div",{class:"slicc-composer__ptt-bar-fill"})))}#X(e){this.#a&&(this.#a.classList.remove("is-enable","is-prompting","is-denied","is-recording","is-finalizing","is-picking"),e!=="idle"&&this.#a.classList.add(`is-${e}`))}#K(e,a=!1){let r=this.#_;if(!r)return;let s=e.trim().split(/\s+/).filter(Boolean);if(s.length===0){r.hidden=!0;return}r.textContent=s.slice(-yD).join(" "),r.classList.toggle("is-error",a),r.hidden=!1}#j(){let e=this.#b;if(!e)return;let a=this.#f;if(a?.state==="downloading"){if(a.download){let r=CD(a.download.etaSeconds??null);e.textContent=r?`Better speech recognition downloading \xB7 ready in ${r}`:"Better speech recognition downloading\u2026"}else e.textContent="Preparing enhanced speech\u2026";e.classList.remove("is-error"),e.hidden=!1}else a?.state==="ready"&&a.engine==="enhanced"?(e.textContent="Enhanced speech recognition",e.classList.remove("is-error"),e.hidden=!1):a?.state==="unavailable"&&a.message?(e.textContent=a.message,e.classList.add("is-error"),e.hidden=!1):(e.classList.remove("is-error"),e.hidden=!0)}#J(e){let a=this.#M;if(!a)return;this.#y=e;let r=d("button",{type:"button",class:"slicc-composer__ptt-device-btn","aria-label":"Choose a microphone","aria-haspopup":"menu",title:"Choose a microphone"},b("chevron-down",{size:12}));r.addEventListener("pointerdown",s=>s.stopPropagation()),a.replaceChildren(r),a.hidden=!1}#C(){this.#x?.(),this.#x=null,this.#a?.remove(),this.#a=null,this.#v=null,this.#_=null,this.#b=null,this.#M=null,this.#w=null,this.#y=[],this.#g=null,this.#r="idle"}};x("slicc-composer",Ha);var kD=`
1311
1311
  slicc-composer-capture {
1312
1312
  position: relative;
1313
1313
  display: block;
@@ -1511,7 +1511,7 @@ slicc-composer-capture .slicc-capture__timer {
1511
1511
  slicc-composer-capture .slicc-capture__timer[hidden] {
1512
1512
  display: none;
1513
1513
  }
1514
- `,EA="slicc-composer-capture-style";function AD(t){if(t.getElementById(EA))return;let e=t.createElement("style");e.id=EA,e.textContent=kD,(t.head??t.documentElement).appendChild(e)}var ED="photo",LD=["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"];function TD(){if(typeof MediaRecorder>"u")return"video/webm";for(let t of LD)if(MediaRecorder.isTypeSupported?.(t))return t;return"video/webm"}function LA(t){let e=Math.max(0,Math.floor(t/1e3)),a=Math.floor(e/60),r=e%60;return`${a}:${String(r).padStart(2,"0")}`}var Da=class extends HTMLElement{static observedAttributes=["mode","preferred-device","preferred-audio-device"];media=null;recorderFactory=null;#e;#t;#a;#r;#s;#i;#o;#n;#l;#h=!1;#d=null;#c=null;#f=null;#p=[];#m=0;#x=null;#u=null;#g=e=>{e.key==="Escape"&&this.#u&&this.#R()};connectedCallback(){AD(this.ownerDocument),this.#q(),this.ownerDocument.addEventListener("keydown",this.#g)}disconnectedCallback(){if(this.ownerDocument.removeEventListener("keydown",this.#g),this.#A(),this.#L(),this.#T(),this.#u){let e=this.#u;this.#u=null,e(null)}}attributeChangedCallback(e,a,r){e==="mode"&&this.#h&&this.#H(r??ED)}get mode(){return this.getAttribute("mode")==="video"?"video":"photo"}set mode(e){e==null?this.removeAttribute("mode"):this.setAttribute("mode",e)}get preferredDevice(){return this.getAttribute("preferred-device")}set preferredDevice(e){e==null?this.removeAttribute("preferred-device"):this.setAttribute("preferred-device",e)}get preferredAudioDevice(){return this.getAttribute("preferred-audio-device")}set preferredAudioDevice(e){e==null?this.removeAttribute("preferred-audio-device"):this.setAttribute("preferred-audio-device",e)}#v(){return this.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}#M(e,a){return this.recorderFactory?this.recorderFactory(e,a):new MediaRecorder(e,a)}async open(e){this.#q(),e&&(this.mode=e),this.#H(this.mode);let a=this.#v();if(!a)return null;try{this.#d=await this.#_(a,this.preferredDevice,this.preferredAudioDevice,this.mode)}catch{return null}return this.#w(),this.#y(this.#d),await this.#S(a),await this.#k(a),this.hidden=!1,new Promise(r=>{this.#u=r})}async#_(e,a,r,s){let i=this.#b(r,s);if(a)try{return await e.getUserMedia({video:{deviceId:{exact:a}},audio:i})}catch{}try{return await e.getUserMedia({video:!0,audio:i})}catch(o){if(i===!1)throw o;return this.#r.textContent="Microphone unavailable \u2014 recording video only.",e.getUserMedia({video:!0,audio:!1})}}#b(e,a){return a!=="video"?!1:e?{deviceId:{exact:e}}:!0}#w(){this.#c=this.#d?.getAudioTracks()[0]??null}#y(e){this.#e.srcObject=e,this.#e.muted=!0,this.#e.play?.()?.catch(()=>{});let a=e.getVideoTracks()[0]?.getSettings?.().facingMode;this.#e.toggleAttribute("data-mirrored",a!=="environment")}async#S(e){let a=[];try{a=(await e.enumerateDevices()).filter(i=>i.kind==="videoinput")}catch{a=[]}let r=Tt(a,"camera");this.#t.replaceChildren(...r.map(i=>d("option",{value:i.deviceId},i.label)));let s=this.#d?.getVideoTracks()[0]?.getSettings?.().deviceId;s&&(this.#t.value=s),this.#t.toggleAttribute("hidden",!Ta(r))}async#k(e){let a=[];try{a=(await e.enumerateDevices()).filter(i=>i.kind==="audioinput")}catch{a=[]}let r=Tt(a,"microphone");this.#a.replaceChildren(...r.map(i=>d("option",{value:i.deviceId},i.label)));let s=this.#c?.getSettings?.().deviceId??this.preferredAudioDevice??null;s&&r.some(i=>i.deviceId===s)&&(this.#a.value=s),this.#D()}#D(){if(!this.#a)return;let e=this.#a.options.length>=2,a=this.mode==="video"&&e;this.#a.toggleAttribute("hidden",!a)}async#P(e){let a=this.#v();if(a){this.#r.textContent="";try{let r=await a.getUserMedia({video:{deviceId:{exact:e}}});this.#N();let s=r;if(this.mode==="video"&&this.#c&&this.#c.readyState==="live")s.addTrack(this.#c);else if(this.mode==="video")try{let i=await a.getUserMedia({audio:this.#b(this.preferredAudioDevice,"video")});for(let o of i.getAudioTracks())this.#c=o,s.addTrack(o)}catch{this.#r.textContent="Microphone unavailable \u2014 recording video only."}this.#d=s,this.#y(s),this.dispatchEvent(new CustomEvent("slicc-capture-device-change",{detail:{deviceId:e,kind:"camera"},bubbles:!0,composed:!0}))}catch{this.#r.textContent="Could not switch camera \u2014 keeping the current one."}}}async#E(e){let a=this.#v();if(!a||!this.#d)return;this.#r.textContent="";let r;try{r=await a.getUserMedia({audio:{deviceId:{exact:e}}})}catch{this.#r.textContent="Could not switch microphone \u2014 keeping the current one.";return}let s=r.getAudioTracks()[0];if(!s){this.#r.textContent="Could not switch microphone \u2014 keeping the current one.";return}if(this.#c){try{this.#d.removeTrack(this.#c)}catch{}this.#c.stop()}this.#d.addTrack(s),this.#c=s,this.preferredAudioDevice=e,this.dispatchEvent(new CustomEvent("slicc-capture-device-change",{detail:{deviceId:e,kind:"microphone"},bubbles:!0,composed:!0}))}#V(){let e=this.ownerDocument.createElement("canvas");if(e.width=this.#e.videoWidth,e.height=this.#e.videoHeight,e.width===0||e.height===0){this.#r.textContent="No frame yet \u2014 give the camera a moment.";return}e.getContext("2d")?.drawImage(this.#e,0,0);let a="image/png",r=e.toDataURL(a);this.#B({kind:"image",dataUrl:r,mimeType:a,width:e.width,height:e.height})}#z(){if(!this.#d||this.#f)return;this.#p=[];let e=TD(),a;try{a=this.#M(this.#d,{mimeType:e})}catch{this.#r.textContent="Recording is not supported in this browser.";return}a.ondataavailable=r=>{r.data&&r.data.size>0&&this.#p.push(r.data)},a.onstop=()=>this.#O(e);try{a.start()}catch{this.#r.textContent="Could not start recording.";return}this.#f=a,this.#m=Date.now(),this.#a.disabled=!0,this.#t.disabled=!0,this.#s.hidden=!1,this.#s.textContent=LA(0),this.#x=setInterval(()=>{this.#s.textContent=LA(Date.now()-this.#m)},250),this.#U()}#I(){let e=this.#f;if(e)try{e.state!=="inactive"&&e.stop()}catch{this.#O(e.mimeType||"video/webm")}}#O(e){let a=this.#m?Date.now()-this.#m:0;this.#A();let r=this.#f?.mimeType||e||"video/webm",s=new Blob(this.#p,{type:r});this.#p=[],this.#f=null,this.#a&&(this.#a.disabled=!1),this.#t&&(this.#t.disabled=!1);let i=typeof URL<"u"?URL.createObjectURL(s):void 0;this.#B({kind:"video",blob:s,dataUrl:i,mimeType:r,width:this.#e.videoWidth,height:this.#e.videoHeight,durationMs:a})}#A(){this.#x!=null&&(clearInterval(this.#x),this.#x=null),this.#s.hidden=!0,this.#s.textContent="",this.#m=0}#L(){let e=this.#f;if(this.#f=null,this.#p=[],this.#a&&(this.#a.disabled=!1),this.#t&&(this.#t.disabled=!1),e){e.ondataavailable=null,e.onstop=null;try{e.state!=="inactive"&&e.stop()}catch{}}}#N(){for(let e of this.#d?.getVideoTracks()??[])e.stop()}#T(){for(let e of this.#d?.getTracks()??[])e.stop();this.#d=null,this.#c=null,this.#e&&(this.#e.srcObject=null)}#R(){this.dispatchEvent(new CustomEvent("slicc-capture-cancel",{bubbles:!0,composed:!0})),this.#B(null)}#B(e){e&&this.dispatchEvent(new CustomEvent("slicc-capture",{detail:e,bubbles:!0,composed:!0})),this.#A(),this.#L(),this.#T();let a=this.#u;this.#u=null,this.hidden=!0,a?.(e)}#H(e){let a=e==="video";this.#n.setAttribute("aria-pressed",String(!a)),this.#l.setAttribute("aria-pressed",String(a)),this.#r.textContent=a?"Mic on \u2014 video will record audio.":"",this.#U(),this.#D()}#U(){let e=this.#i;if(e.replaceChildren(),this.mode==="photo"){e.className="slicc-capture__btn slicc-capture__btn--primary",e.setAttribute("part","snap"),e.setAttribute("aria-label","Snap photo"),e.append(b("camera",{size:14}),document.createTextNode(" Snap"));return}this.#f?(e.className="slicc-capture__btn slicc-capture__btn--rec",e.setAttribute("part","stop"),e.setAttribute("aria-label","Stop recording"),e.append(d("span",{class:"slicc-capture__square"}),document.createTextNode(" Stop"))):(e.className="slicc-capture__btn slicc-capture__btn--rec",e.setAttribute("part","record"),e.setAttribute("aria-label","Start recording"),e.append(d("span",{class:"slicc-capture__dot"}),document.createTextNode(" Record")))}#W(){if(this.mode==="photo"){this.#V();return}this.#f?this.#I():this.#z()}#q(){if(this.#h)return;this.#h=!0,this.#e=d("video",{class:"slicc-capture__video",part:"video",autoplay:!0,muted:!0,playsinline:!0}),this.#e.muted=!0,this.#r=d("div",{class:"slicc-capture__status"}),this.#t=d("select",{class:"slicc-capture__select",part:"picker","aria-label":"Camera",hidden:!0}),this.#t.addEventListener("change",()=>{this.#P(this.#t.value)}),this.#a=d("select",{class:"slicc-capture__select",part:"audio-picker","aria-label":"Microphone",hidden:!0}),this.#a.addEventListener("change",()=>{this.#E(this.#a.value)}),this.#n=d("button",{type:"button",class:"slicc-capture__mode-btn",part:"mode","aria-pressed":"true","aria-label":"Photo"},b("image",{size:14})),this.#n.addEventListener("click",()=>{this.mode="photo"}),this.#l=d("button",{type:"button",class:"slicc-capture__mode-btn",part:"mode","aria-pressed":"false","aria-label":"Video"},b("video",{size:14})),this.#l.addEventListener("click",()=>{this.#$()});let e=d("div",{class:"slicc-capture__mode",role:"group","aria-label":"Capture mode"},this.#n,this.#l);this.#s=d("span",{class:"slicc-capture__timer",hidden:!0}),this.#o=d("button",{type:"button",class:"slicc-capture__close",part:"cancel","aria-label":"Cancel"},b("x",{size:14})),this.#o.addEventListener("click",()=>this.#R()),this.#i=d("button",{type:"button",class:"slicc-capture__btn slicc-capture__btn--primary",part:"snap","aria-label":"Snap photo"}),this.#i.addEventListener("click",()=>this.#W());let a=d("div",{class:"slicc-capture__bar"},this.#t,this.#a,d("span",{class:"slicc-capture__spacer"}),this.#s,this.#i,e);this.replaceChildren(this.#e,this.#r,a,this.#o),this.#H(this.mode)}async#$(){if(this.mode="video",!this.#d||this.#d.getAudioTracks().length>0)return;let e=this.#v();if(!e)return;let a=this.#d.getVideoTracks()[0]?.getSettings?.().deviceId??this.preferredDevice??null,r=this.#b(this.preferredAudioDevice,"video");try{let s=a?await e.getUserMedia({video:{deviceId:{exact:a}},audio:r}):await e.getUserMedia({video:!0,audio:r});this.#T(),this.#d=s,this.#w(),this.#y(s),await this.#k(e)}catch{this.#r.textContent="Microphone unavailable \u2014 recording video only."}}};x("slicc-composer-capture",Da);var Pa=["off","low","medium","high","xhigh","max"],TA={off:{label:"Secco",gloss:"bone dry \u2014 not a drop (ask any prosecco)",tint:"var(--txt-3)"},low:{label:"Goccia",gloss:"one drop \u2014 bar-speak: \xABmacchiato, solo una goccia\xBB",tint:"color-mix(in srgb, var(--violet) 20%, var(--txt-3))"},medium:{label:"Bagnato",gloss:"properly wet",tint:"color-mix(in srgb, var(--violet) 40%, var(--txt-3))"},high:{label:"Affogato",gloss:"drowned \u2014 the menu item itself",tint:"color-mix(in srgb, var(--violet) 60%, var(--txt-3))"},xhigh:{label:"Inzuppato",gloss:"soaked through, biscotto-style",tint:"color-mix(in srgb, var(--violet) 80%, var(--txt-3))"},max:{label:"Sprofondato",gloss:"sunk to the bottom",tint:"var(--violet)"}},Al="max",HD="Opus 4.8",HA=[{name:"Opus 4.8",provider:"Anthropic",id:"claude-opus-4-8"},{name:"Sonnet 4.6",provider:"Anthropic",id:"claude-sonnet-4-6"},{name:"Haiku 4.5",provider:"Anthropic",id:"claude-haiku-4-5"}],DD=8;function PD(t){let e=typeof t=="string"?{name:t}:t;return{...e,name:e.name,id:e.id??e.name}}var RD="max",RA=13;function DA(){return b("sparkles",{size:RA,class:"ic",part:"model-icon"})}function BD(){return b("brain",{size:RA,class:"brain",part:"brain"})}function PA(){return b("chevron-down",{size:11,part:"caret"})}var Ra="http://www.w3.org/2000/svg";function zD(){let t=document.createElementNS(Ra,"svg");t.setAttribute("width","0"),t.setAttribute("height","0"),t.setAttribute("aria-hidden","true"),t.setAttribute("style","position:absolute");let e=document.createElementNS(Ra,"defs"),a=document.createElementNS(Ra,"linearGradient");a.setAttribute("id","meta-rainbow"),a.setAttribute("x1","0"),a.setAttribute("y1","0"),a.setAttribute("x2","1"),a.setAttribute("y2","0");let r=[["0%","#f43f5e"],["28%","#f59e0b"],["64%","#06b6d4"],["100%","#8b5cf6"]];for(let[s,i]of r){let o=document.createElementNS(Ra,"stop");o.setAttribute("offset",s),o.setAttribute("stop-color",i),a.appendChild(o)}return e.appendChild(a),t.appendChild(e),t}var OD=`
1514
+ `,EA="slicc-composer-capture-style";function AD(t){if(t.getElementById(EA))return;let e=t.createElement("style");e.id=EA,e.textContent=kD,(t.head??t.documentElement).appendChild(e)}var ED="photo",LD=["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"];function TD(){if(typeof MediaRecorder>"u")return"video/webm";for(let t of LD)if(MediaRecorder.isTypeSupported?.(t))return t;return"video/webm"}function LA(t){let e=Math.max(0,Math.floor(t/1e3)),a=Math.floor(e/60),r=e%60;return`${a}:${String(r).padStart(2,"0")}`}var Da=class extends HTMLElement{static observedAttributes=["mode","preferred-device","preferred-audio-device"];media=null;recorderFactory=null;#e;#t;#a;#r;#s;#i;#o;#n;#l;#h=!1;#d=null;#c=null;#u=null;#p=[];#m=0;#x=null;#f=null;#g=e=>{e.key==="Escape"&&this.#f&&this.#R()};connectedCallback(){AD(this.ownerDocument),this.#q(),this.ownerDocument.addEventListener("keydown",this.#g)}disconnectedCallback(){if(this.ownerDocument.removeEventListener("keydown",this.#g),this.#A(),this.#L(),this.#T(),this.#f){let e=this.#f;this.#f=null,e(null)}}attributeChangedCallback(e,a,r){e==="mode"&&this.#h&&this.#H(r??ED)}get mode(){return this.getAttribute("mode")==="video"?"video":"photo"}set mode(e){e==null?this.removeAttribute("mode"):this.setAttribute("mode",e)}get preferredDevice(){return this.getAttribute("preferred-device")}set preferredDevice(e){e==null?this.removeAttribute("preferred-device"):this.setAttribute("preferred-device",e)}get preferredAudioDevice(){return this.getAttribute("preferred-audio-device")}set preferredAudioDevice(e){e==null?this.removeAttribute("preferred-audio-device"):this.setAttribute("preferred-audio-device",e)}#v(){return this.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}#_(e,a){return this.recorderFactory?this.recorderFactory(e,a):new MediaRecorder(e,a)}async open(e){this.#q(),e&&(this.mode=e),this.#H(this.mode);let a=this.#v();if(!a)return null;try{this.#d=await this.#b(a,this.preferredDevice,this.preferredAudioDevice,this.mode)}catch{return null}return this.#w(),this.#y(this.#d),await this.#S(a),await this.#k(a),this.hidden=!1,new Promise(r=>{this.#f=r})}async#b(e,a,r,s){let i=this.#M(r,s);if(a)try{return await e.getUserMedia({video:{deviceId:{exact:a}},audio:i})}catch{}try{return await e.getUserMedia({video:!0,audio:i})}catch(o){if(i===!1)throw o;return this.#r.textContent="Microphone unavailable \u2014 recording video only.",e.getUserMedia({video:!0,audio:!1})}}#M(e,a){return a!=="video"?!1:e?{deviceId:{exact:e}}:!0}#w(){this.#c=this.#d?.getAudioTracks()[0]??null}#y(e){this.#e.srcObject=e,this.#e.muted=!0,this.#e.play?.()?.catch(()=>{});let a=e.getVideoTracks()[0]?.getSettings?.().facingMode;this.#e.toggleAttribute("data-mirrored",a!=="environment")}async#S(e){let a=[];try{a=(await e.enumerateDevices()).filter(i=>i.kind==="videoinput")}catch{a=[]}let r=Tt(a,"camera");this.#t.replaceChildren(...r.map(i=>d("option",{value:i.deviceId},i.label)));let s=this.#d?.getVideoTracks()[0]?.getSettings?.().deviceId;s&&(this.#t.value=s),this.#t.toggleAttribute("hidden",!Ta(r))}async#k(e){let a=[];try{a=(await e.enumerateDevices()).filter(i=>i.kind==="audioinput")}catch{a=[]}let r=Tt(a,"microphone");this.#a.replaceChildren(...r.map(i=>d("option",{value:i.deviceId},i.label)));let s=this.#c?.getSettings?.().deviceId??this.preferredAudioDevice??null;s&&r.some(i=>i.deviceId===s)&&(this.#a.value=s),this.#D()}#D(){if(!this.#a)return;let e=this.#a.options.length>=2,a=this.mode==="video"&&e;this.#a.toggleAttribute("hidden",!a)}async#P(e){let a=this.#v();if(a){this.#r.textContent="";try{let r=await a.getUserMedia({video:{deviceId:{exact:e}}});this.#N();let s=r;if(this.mode==="video"&&this.#c&&this.#c.readyState==="live")s.addTrack(this.#c);else if(this.mode==="video")try{let i=await a.getUserMedia({audio:this.#M(this.preferredAudioDevice,"video")});for(let o of i.getAudioTracks())this.#c=o,s.addTrack(o)}catch{this.#r.textContent="Microphone unavailable \u2014 recording video only."}this.#d=s,this.#y(s),this.dispatchEvent(new CustomEvent("slicc-capture-device-change",{detail:{deviceId:e,kind:"camera"},bubbles:!0,composed:!0}))}catch{this.#r.textContent="Could not switch camera \u2014 keeping the current one."}}}async#E(e){let a=this.#v();if(!a||!this.#d)return;this.#r.textContent="";let r;try{r=await a.getUserMedia({audio:{deviceId:{exact:e}}})}catch{this.#r.textContent="Could not switch microphone \u2014 keeping the current one.";return}let s=r.getAudioTracks()[0];if(!s){this.#r.textContent="Could not switch microphone \u2014 keeping the current one.";return}if(this.#c){try{this.#d.removeTrack(this.#c)}catch{}this.#c.stop()}this.#d.addTrack(s),this.#c=s,this.preferredAudioDevice=e,this.dispatchEvent(new CustomEvent("slicc-capture-device-change",{detail:{deviceId:e,kind:"microphone"},bubbles:!0,composed:!0}))}#V(){let e=this.ownerDocument.createElement("canvas");if(e.width=this.#e.videoWidth,e.height=this.#e.videoHeight,e.width===0||e.height===0){this.#r.textContent="No frame yet \u2014 give the camera a moment.";return}e.getContext("2d")?.drawImage(this.#e,0,0);let a="image/png",r=e.toDataURL(a);this.#B({kind:"image",dataUrl:r,mimeType:a,width:e.width,height:e.height})}#z(){if(!this.#d||this.#u)return;this.#p=[];let e=TD(),a;try{a=this.#_(this.#d,{mimeType:e})}catch{this.#r.textContent="Recording is not supported in this browser.";return}a.ondataavailable=r=>{r.data&&r.data.size>0&&this.#p.push(r.data)},a.onstop=()=>this.#O(e);try{a.start()}catch{this.#r.textContent="Could not start recording.";return}this.#u=a,this.#m=Date.now(),this.#a.disabled=!0,this.#t.disabled=!0,this.#s.hidden=!1,this.#s.textContent=LA(0),this.#x=setInterval(()=>{this.#s.textContent=LA(Date.now()-this.#m)},250),this.#U()}#I(){let e=this.#u;if(e)try{e.state!=="inactive"&&e.stop()}catch{this.#O(e.mimeType||"video/webm")}}#O(e){let a=this.#m?Date.now()-this.#m:0;this.#A();let r=this.#u?.mimeType||e||"video/webm",s=new Blob(this.#p,{type:r});this.#p=[],this.#u=null,this.#a&&(this.#a.disabled=!1),this.#t&&(this.#t.disabled=!1);let i=typeof URL<"u"?URL.createObjectURL(s):void 0;this.#B({kind:"video",blob:s,dataUrl:i,mimeType:r,width:this.#e.videoWidth,height:this.#e.videoHeight,durationMs:a})}#A(){this.#x!=null&&(clearInterval(this.#x),this.#x=null),this.#s.hidden=!0,this.#s.textContent="",this.#m=0}#L(){let e=this.#u;if(this.#u=null,this.#p=[],this.#a&&(this.#a.disabled=!1),this.#t&&(this.#t.disabled=!1),e){e.ondataavailable=null,e.onstop=null;try{e.state!=="inactive"&&e.stop()}catch{}}}#N(){for(let e of this.#d?.getVideoTracks()??[])e.stop()}#T(){for(let e of this.#d?.getTracks()??[])e.stop();this.#d=null,this.#c=null,this.#e&&(this.#e.srcObject=null)}#R(){this.dispatchEvent(new CustomEvent("slicc-capture-cancel",{bubbles:!0,composed:!0})),this.#B(null)}#B(e){e&&this.dispatchEvent(new CustomEvent("slicc-capture",{detail:e,bubbles:!0,composed:!0})),this.#A(),this.#L(),this.#T();let a=this.#f;this.#f=null,this.hidden=!0,a?.(e)}#H(e){let a=e==="video";this.#n.setAttribute("aria-pressed",String(!a)),this.#l.setAttribute("aria-pressed",String(a)),this.#r.textContent=a?"Mic on \u2014 video will record audio.":"",this.#U(),this.#D()}#U(){let e=this.#i;if(e.replaceChildren(),this.mode==="photo"){e.className="slicc-capture__btn slicc-capture__btn--primary",e.setAttribute("part","snap"),e.setAttribute("aria-label","Snap photo"),e.append(b("camera",{size:14}),document.createTextNode(" Snap"));return}this.#u?(e.className="slicc-capture__btn slicc-capture__btn--rec",e.setAttribute("part","stop"),e.setAttribute("aria-label","Stop recording"),e.append(d("span",{class:"slicc-capture__square"}),document.createTextNode(" Stop"))):(e.className="slicc-capture__btn slicc-capture__btn--rec",e.setAttribute("part","record"),e.setAttribute("aria-label","Start recording"),e.append(d("span",{class:"slicc-capture__dot"}),document.createTextNode(" Record")))}#W(){if(this.mode==="photo"){this.#V();return}this.#u?this.#I():this.#z()}#q(){if(this.#h)return;this.#h=!0,this.#e=d("video",{class:"slicc-capture__video",part:"video",autoplay:!0,muted:!0,playsinline:!0}),this.#e.muted=!0,this.#r=d("div",{class:"slicc-capture__status"}),this.#t=d("select",{class:"slicc-capture__select",part:"picker","aria-label":"Camera",hidden:!0}),this.#t.addEventListener("change",()=>{this.#P(this.#t.value)}),this.#a=d("select",{class:"slicc-capture__select",part:"audio-picker","aria-label":"Microphone",hidden:!0}),this.#a.addEventListener("change",()=>{this.#E(this.#a.value)}),this.#n=d("button",{type:"button",class:"slicc-capture__mode-btn",part:"mode","aria-pressed":"true","aria-label":"Photo"},b("image",{size:14})),this.#n.addEventListener("click",()=>{this.mode="photo"}),this.#l=d("button",{type:"button",class:"slicc-capture__mode-btn",part:"mode","aria-pressed":"false","aria-label":"Video"},b("video",{size:14})),this.#l.addEventListener("click",()=>{this.#$()});let e=d("div",{class:"slicc-capture__mode",role:"group","aria-label":"Capture mode"},this.#n,this.#l);this.#s=d("span",{class:"slicc-capture__timer",hidden:!0}),this.#o=d("button",{type:"button",class:"slicc-capture__close",part:"cancel","aria-label":"Cancel"},b("x",{size:14})),this.#o.addEventListener("click",()=>this.#R()),this.#i=d("button",{type:"button",class:"slicc-capture__btn slicc-capture__btn--primary",part:"snap","aria-label":"Snap photo"}),this.#i.addEventListener("click",()=>this.#W());let a=d("div",{class:"slicc-capture__bar"},this.#t,this.#a,d("span",{class:"slicc-capture__spacer"}),this.#s,this.#i,e);this.replaceChildren(this.#e,this.#r,a,this.#o),this.#H(this.mode)}async#$(){if(this.mode="video",!this.#d||this.#d.getAudioTracks().length>0)return;let e=this.#v();if(!e)return;let a=this.#d.getVideoTracks()[0]?.getSettings?.().deviceId??this.preferredDevice??null,r=this.#M(this.preferredAudioDevice,"video");try{let s=a?await e.getUserMedia({video:{deviceId:{exact:a}},audio:r}):await e.getUserMedia({video:!0,audio:r});this.#T(),this.#d=s,this.#w(),this.#y(s),await this.#k(e)}catch{this.#r.textContent="Microphone unavailable \u2014 recording video only."}}};x("slicc-composer-capture",Da);var Pa=["off","low","medium","high","xhigh","max"],TA={off:{label:"Secco",gloss:"bone dry \u2014 not a drop (ask any prosecco)",tint:"var(--txt-3)"},low:{label:"Goccia",gloss:"one drop \u2014 bar-speak: \xABmacchiato, solo una goccia\xBB",tint:"color-mix(in srgb, var(--violet) 20%, var(--txt-3))"},medium:{label:"Bagnato",gloss:"properly wet",tint:"color-mix(in srgb, var(--violet) 40%, var(--txt-3))"},high:{label:"Affogato",gloss:"drowned \u2014 the menu item itself",tint:"color-mix(in srgb, var(--violet) 60%, var(--txt-3))"},xhigh:{label:"Inzuppato",gloss:"soaked through, biscotto-style",tint:"color-mix(in srgb, var(--violet) 80%, var(--txt-3))"},max:{label:"Sprofondato",gloss:"sunk to the bottom",tint:"var(--violet)"}},Al="max",HD="Opus 4.8",HA=[{name:"Opus 4.8",provider:"Anthropic",id:"claude-opus-4-8"},{name:"Sonnet 4.6",provider:"Anthropic",id:"claude-sonnet-4-6"},{name:"Haiku 4.5",provider:"Anthropic",id:"claude-haiku-4-5"}],DD=8;function PD(t){let e=typeof t=="string"?{name:t}:t;return{...e,name:e.name,id:e.id??e.name}}var RD="max",RA=13;function DA(){return b("sparkles",{size:RA,class:"ic",part:"model-icon"})}function BD(){return b("brain",{size:RA,class:"brain",part:"brain"})}function PA(){return b("chevron-down",{size:11,part:"caret"})}var Ra="http://www.w3.org/2000/svg";function zD(){let t=document.createElementNS(Ra,"svg");t.setAttribute("width","0"),t.setAttribute("height","0"),t.setAttribute("aria-hidden","true"),t.setAttribute("style","position:absolute");let e=document.createElementNS(Ra,"defs"),a=document.createElementNS(Ra,"linearGradient");a.setAttribute("id","meta-rainbow"),a.setAttribute("x1","0"),a.setAttribute("y1","0"),a.setAttribute("x2","1"),a.setAttribute("y2","0");let r=[["0%","#f43f5e"],["28%","#f59e0b"],["64%","#06b6d4"],["100%","#8b5cf6"]];for(let[s,i]of r){let o=document.createElementNS(Ra,"stop");o.setAttribute("offset",s),o.setAttribute("stop-color",i),a.appendChild(o)}return e.appendChild(a),t.appendChild(e),t}var OD=`
1515
1515
  :host{display:block;}
1516
1516
  *{box-sizing:border-box;}
1517
1517
  .meta{display:flex;align-items:center;gap:8px;max-width:680px;margin:11px auto 0;font-family:var(--ui);}
@@ -1567,7 +1567,7 @@ slicc-composer-capture .slicc-capture__timer[hidden] {
1567
1567
  /* Narrow / extension-sidebar: the \u23CE / \u21E7\u23CE keyboard hints don't fit (and touch
1568
1568
  users have no keyboard) \u2014 drop them regardless of the narrow-chat attribute. */
1569
1569
  @media (max-width: 560px){ .hint{display:none;} }
1570
- `,FD=C(OD),Ba=class extends HTMLElement{static observedAttributes=["model","thinking","narrow","no-thinking"];#e;#t=null;#a=null;#r=null;#s=null;#i=null;#o=null;#n=null;#l=!1;#h="";#d=e=>{this.#l&&!e.composedPath().includes(this)&&this.#_()};#c=e=>{e.key==="Escape"&&this.#l&&(e.stopPropagation(),this.#_(),this.#r?.focus())};constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[FD]}connectedCallback(){this.#m()}disconnectedCallback(){this.#g(),document.removeEventListener("mousedown",this.#d),document.removeEventListener("keydown",this.#c,!0)}attributeChangedCallback(){this.isConnected&&this.#m()}get model(){return this.getAttribute("model")??HD}set model(e){e==null?this.removeAttribute("model"):this.setAttribute("model",e)}get models(){return(this.#n??[...HA]).map(e=>typeof e=="string"?e:{...e})}set models(e){this.#n=Array.isArray(e)?e.slice():null,this.isConnected&&this.#m()}get#f(){return(this.#n??HA).map(PD)}get#p(){return this.#n!==null&&this.#n.length===0}get thinking(){let e=this.getAttribute("thinking");return Pa.includes(e??"")?e:RD}set thinking(e){this.setAttribute("thinking",e)}get narrow(){return this.hasAttribute("narrow")}set narrow(e){this.toggleAttribute("narrow",e)}get noThinking(){return this.hasAttribute("no-thinking")}set noThinking(e){this.toggleAttribute("no-thinking",e)}get accented(){return this.thinking===Al}#m(){this.#g();let e=this.model,a=this.thinking,r=TA[a],s=a===Al,i=this.#p,o=i?d("button",{type:"button",class:"ctl msel",part:"model"},DA()," ","Add AI"):d("button",{type:"button",class:"ctl msel",part:"model","aria-haspopup":"menu","aria-expanded":"false"},DA()," ",e," ",d("span",{class:"cx"},PA())),n=d("div",{class:"menu",part:"model-menu",role:"menu"});if(this.#f.length>DD){let m=d("input",{class:"msearch",part:"model-search",type:"text",placeholder:"Search models\u2026","aria-label":"Search models"});m.value=this.#h,m.addEventListener("input",()=>{this.#h=m.value,this.#x()}),m.addEventListener("click",f=>f.stopPropagation()),n.append(m)}this.#o=d("div",{class:"mlist",role:"none"}),n.append(this.#o);let h=d("div",{class:"mwrap"},o,n),l=!this.noThinking&&!i,p=null;if(l){let m=BD();m.style.color=r.tint,p=d("button",{type:"button",class:`ctl tsel${s?" x":""}`,part:"thinking",title:r.gloss},m," ",d("span",{class:"tlabel"},r.label)," ",d("span",{class:"cx"},PA())),p.style.setProperty("--tw",r.tint)}let c=d("slot",{name:"hint"});xe(c,[d("span",{class:"kbd"},"\u23CE")," send ",d("span",{class:"sep"})," ",d("span",{class:"kbd"},"\u21E7\u23CE")," newline"]);let u=d("div",{class:"meta",part:"meta"},h,p??!1,d("div",{class:"mspacer"}),d("span",{class:"hint",part:"hint"},c));this.#e.replaceChildren(zD(),u),this.#i=h,this.#r=this.#e.querySelector(".msel"),this.#s=this.#e.querySelector(".tsel"),this.#x(),this.#b(),this.#u()}#x(){let e=this.#o;if(!e)return;let a=this.#h.trim().toLowerCase(),r=n=>!a||`${n.name} ${n.provider??""}`.toLowerCase().includes(a),s=this.#f.filter(r),i=this.model,o=[];for(let n of s){let h=n.name===i,l=d("button",{type:"button",class:"mitem",role:"menuitemradio","data-id":n.id,"aria-selected":h?"true":"false"},d("span",{class:"mname"},n.name),n.provider?d("span",{class:"mprov"},n.provider):!1,d("span",{class:"tick"},b("check",{size:14})));l.addEventListener("click",()=>this.#w(n.id)),o.push(l)}e.replaceChildren(...o.length?o:[d("div",{class:"mempty"},"No models match.")])}#u(){this.#r&&(this.#t=e=>{if(e.stopPropagation(),this.#p){this.dispatchEvent(new CustomEvent("add-ai",{bubbles:!0,composed:!0}));return}this.#v()},this.#r.addEventListener("click",this.#t)),this.#s&&(this.#a=()=>this.#y(),this.#s.addEventListener("click",this.#a))}#g(){this.#r&&this.#t&&this.#r.removeEventListener("click",this.#t),this.#s&&this.#a&&this.#s.removeEventListener("click",this.#a),this.#t=null,this.#a=null,this.#r=null,this.#s=null,this.#i=null,this.#o=null}get menuOpen(){return this.#l}openMenu(){this.#p||this.#M()}#v(){this.#l?this.#_():this.#M()}#M(){if(this.#l)return;this.#l=!0,this.#h="",this.#x(),this.#b();let e=this.#e.querySelector(".msearch");e&&(e.value="",requestAnimationFrame(()=>e.focus())),document.addEventListener("mousedown",this.#d),document.addEventListener("keydown",this.#c,!0)}#_(){this.#l&&(this.#l=!1,this.#b(),document.removeEventListener("mousedown",this.#d),document.removeEventListener("keydown",this.#c,!0))}#b(){this.#i?.classList.toggle("open",this.#l),this.#r?.setAttribute("aria-expanded",this.#l?"true":"false")}#w(e){let a=this.#f.find(r=>r.id===e)??{name:e,id:e,provider:void 0};this.#_(),a.name!==this.model&&(this.model=a.name),this.dispatchEvent(new CustomEvent("model-change",{detail:{model:a.name,provider:a.provider,id:a.id},bubbles:!0,composed:!0}))}#y(){let e=Pa.indexOf(this.thinking),a=Pa[(e+1)%Pa.length];this.thinking=a,this.dispatchEvent(new CustomEvent("thinking-change",{detail:{thinking:a,label:TA[a].label,accented:a===Al},bubbles:!0,composed:!0}))}};x("slicc-composer-meta",Ba);async function VD(t){let e=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(a)).map(r=>r.toString(16).padStart(2,"0")).join("")}async function BA(t,e={}){let a=(t??"").trim().toLowerCase();if(a==="")return null;let r=await VD(a),s=e.size??80,i=e.fallback??"mp";return`https://www.gravatar.com/avatar/${r}?s=${s}&d=${encodeURIComponent(i)}`}var ID=`
1570
+ `,FD=C(OD),Ba=class extends HTMLElement{static observedAttributes=["model","thinking","narrow","no-thinking"];#e;#t=null;#a=null;#r=null;#s=null;#i=null;#o=null;#n=null;#l=!1;#h="";#d=e=>{this.#l&&!e.composedPath().includes(this)&&this.#b()};#c=e=>{e.key==="Escape"&&this.#l&&(e.stopPropagation(),this.#b(),this.#r?.focus())};constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[FD]}connectedCallback(){this.#m()}disconnectedCallback(){this.#g(),document.removeEventListener("mousedown",this.#d),document.removeEventListener("keydown",this.#c,!0)}attributeChangedCallback(){this.isConnected&&this.#m()}get model(){return this.getAttribute("model")??HD}set model(e){e==null?this.removeAttribute("model"):this.setAttribute("model",e)}get models(){return(this.#n??[...HA]).map(e=>typeof e=="string"?e:{...e})}set models(e){this.#n=Array.isArray(e)?e.slice():null,this.isConnected&&this.#m()}get#u(){return(this.#n??HA).map(PD)}get#p(){return this.#n!==null&&this.#n.length===0}get thinking(){let e=this.getAttribute("thinking");return Pa.includes(e??"")?e:RD}set thinking(e){this.setAttribute("thinking",e)}get narrow(){return this.hasAttribute("narrow")}set narrow(e){this.toggleAttribute("narrow",e)}get noThinking(){return this.hasAttribute("no-thinking")}set noThinking(e){this.toggleAttribute("no-thinking",e)}get accented(){return this.thinking===Al}#m(){this.#g();let e=this.model,a=this.thinking,r=TA[a],s=a===Al,i=this.#p,o=i?d("button",{type:"button",class:"ctl msel",part:"model"},DA()," ","Add AI"):d("button",{type:"button",class:"ctl msel",part:"model","aria-haspopup":"menu","aria-expanded":"false"},DA()," ",e," ",d("span",{class:"cx"},PA())),n=d("div",{class:"menu",part:"model-menu",role:"menu"});if(this.#u.length>DD){let m=d("input",{class:"msearch",part:"model-search",type:"text",placeholder:"Search models\u2026","aria-label":"Search models"});m.value=this.#h,m.addEventListener("input",()=>{this.#h=m.value,this.#x()}),m.addEventListener("click",f=>f.stopPropagation()),n.append(m)}this.#o=d("div",{class:"mlist",role:"none"}),n.append(this.#o);let h=d("div",{class:"mwrap"},o,n),l=!this.noThinking&&!i,p=null;if(l){let m=BD();m.style.color=r.tint,p=d("button",{type:"button",class:`ctl tsel${s?" x":""}`,part:"thinking",title:r.gloss},m," ",d("span",{class:"tlabel"},r.label)," ",d("span",{class:"cx"},PA())),p.style.setProperty("--tw",r.tint)}let c=d("slot",{name:"hint"});xe(c,[d("span",{class:"kbd"},"\u23CE")," send ",d("span",{class:"sep"})," ",d("span",{class:"kbd"},"\u21E7\u23CE")," newline"]);let u=d("div",{class:"meta",part:"meta"},h,p??!1,d("div",{class:"mspacer"}),d("span",{class:"hint",part:"hint"},c));this.#e.replaceChildren(zD(),u),this.#i=h,this.#r=this.#e.querySelector(".msel"),this.#s=this.#e.querySelector(".tsel"),this.#x(),this.#M(),this.#f()}#x(){let e=this.#o;if(!e)return;let a=this.#h.trim().toLowerCase(),r=n=>!a||`${n.name} ${n.provider??""}`.toLowerCase().includes(a),s=this.#u.filter(r),i=this.model,o=[];for(let n of s){let h=n.name===i,l=d("button",{type:"button",class:"mitem",role:"menuitemradio","data-id":n.id,"aria-selected":h?"true":"false"},d("span",{class:"mname"},n.name),n.provider?d("span",{class:"mprov"},n.provider):!1,d("span",{class:"tick"},b("check",{size:14})));l.addEventListener("click",()=>this.#w(n.id)),o.push(l)}e.replaceChildren(...o.length?o:[d("div",{class:"mempty"},"No models match.")])}#f(){this.#r&&(this.#t=e=>{if(e.stopPropagation(),this.#p){this.dispatchEvent(new CustomEvent("add-ai",{bubbles:!0,composed:!0}));return}this.#v()},this.#r.addEventListener("click",this.#t)),this.#s&&(this.#a=()=>this.#y(),this.#s.addEventListener("click",this.#a))}#g(){this.#r&&this.#t&&this.#r.removeEventListener("click",this.#t),this.#s&&this.#a&&this.#s.removeEventListener("click",this.#a),this.#t=null,this.#a=null,this.#r=null,this.#s=null,this.#i=null,this.#o=null}get menuOpen(){return this.#l}openMenu(){this.#p||this.#_()}#v(){this.#l?this.#b():this.#_()}#_(){if(this.#l)return;this.#l=!0,this.#h="",this.#x(),this.#M();let e=this.#e.querySelector(".msearch");e&&(e.value="",requestAnimationFrame(()=>e.focus())),document.addEventListener("mousedown",this.#d),document.addEventListener("keydown",this.#c,!0)}#b(){this.#l&&(this.#l=!1,this.#M(),document.removeEventListener("mousedown",this.#d),document.removeEventListener("keydown",this.#c,!0))}#M(){this.#i?.classList.toggle("open",this.#l),this.#r?.setAttribute("aria-expanded",this.#l?"true":"false")}#w(e){let a=this.#u.find(r=>r.id===e)??{name:e,id:e,provider:void 0};this.#b(),a.name!==this.model&&(this.model=a.name),this.dispatchEvent(new CustomEvent("model-change",{detail:{model:a.name,provider:a.provider,id:a.id},bubbles:!0,composed:!0}))}#y(){let e=Pa.indexOf(this.thinking),a=Pa[(e+1)%Pa.length];this.thinking=a,this.dispatchEvent(new CustomEvent("thinking-change",{detail:{thinking:a,label:TA[a].label,accented:a===Al},bubbles:!0,composed:!0}))}};x("slicc-composer-meta",Ba);async function VD(t){let e=new TextEncoder().encode(t),a=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(a)).map(r=>r.toString(16).padStart(2,"0")).join("")}async function BA(t,e={}){let a=(t??"").trim().toLowerCase();if(a==="")return null;let r=await VD(a),s=e.size??80,i=e.fallback??"mp";return`https://www.gravatar.com/avatar/${r}?s=${s}&d=${encodeURIComponent(i)}`}var ID=`
1571
1571
  :host { display: inline-flex; }
1572
1572
  :host([hidden]) { display: none; }
1573
1573
 
@@ -1920,7 +1920,7 @@ slicc-input-card .toolbar slicc-add-menu {
1920
1920
  margin: 2px 0;
1921
1921
  }
1922
1922
  .slicc-dock .grow { flex: 1; }
1923
- `,VA="slicc-dock-style";function eP(t){if(t.getElementById(VA))return;let e=t.createElement("style");e.id=VA,e.textContent=QD,(t.head??t.documentElement).appendChild(e)}function Tl(t){return t==="sprinkle"?"sprinkle":"tool"}var Ia=class extends HTMLElement{static get observedAttributes(){return["active","system-tools"]}#e=[];#t=null;#a=null;#r=null;#s=!1;connectedCallback(){eP(this.ownerDocument),this.classList.add("slicc-dock"),this.setAttribute("part","rail"),this.setAttribute("role","toolbar"),this.setAttribute("aria-orientation","vertical"),this.#s||(this.#i(),this.#s=!0),this.#t||(this.#t=e=>this.#d(e),this.#a=e=>this.#c(e),this.#r=e=>this.#f(e),this.addEventListener("select",this.#t),this.addEventListener("collapse",this.#a),this.addEventListener("longpress",this.#r)),this.#l()}disconnectedCallback(){this.#t&&(this.removeEventListener("select",this.#t),this.#t=null),this.#a&&(this.removeEventListener("collapse",this.#a),this.#a=null),this.#r&&(this.removeEventListener("longpress",this.#r),this.#r=null)}attributeChangedCallback(e){this.#s&&(e==="active"?this.#h():e==="system-tools"&&this.#l())}get items(){return this.#e.map(e=>({...e}))}set items(e){this.#e=Array.isArray(e)?e.map(a=>({...a})):[],this.#s&&this.isConnected&&this.#l()}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}get systemTools(){return this.hasAttribute("system-tools")}set systemTools(e){this.toggleAttribute("system-tools",!!e)}selectItem(e){this.active=e,this.dispatchEvent(new CustomEvent("slicc-dock-select",{detail:{id:e,kind:this.#o(e)},bubbles:!0,composed:!0}))}clearActive(){this.active=null}collapse(){let e=this.active;this.active=null,e!=null&&this.dispatchEvent(new CustomEvent("slicc-dock-collapse",{detail:{id:e},bubbles:!0,composed:!0}))}#i(){let e=[...this.querySelectorAll("slicc-dock-item")];if(e.length===0)return;let a=[];for(let r of e){let s=Tl(r.getAttribute("kind")),i=r.getAttribute("item-id")??r.dataset.t??r.getAttribute("tip")??"";s==="tool"||i==="new"||i===""||a.push({id:i,icon:r.getAttribute("icon")??void 0,label:r.getAttribute("tip")??void 0,kind:"sprinkle",hue:r.getAttribute("hue")??void 0})}for(let r of e)r.remove();this.#e.length===0&&(this.#e=a)}#o(e){return OA.some(a=>a.id===e)?"tool":e===FA.id?"sprinkle":this.#e.find(a=>a.id===e)?.kind??"tool"}#n(e,a){let r=e.id,s=Tl(e.kind),i=e.icon??"",o=e.label??r,n=a!=null&&a===r,h=e.hue;return d("slicc-dock-item",{"data-t":r,"item-id":r,kind:s,icon:i||!1,tip:o,hue:h||!1,active:n})}#l(){let e=this.active,a=[];for(let r of this.#e)Tl(r.kind)==="sprinkle"&&a.push(this.#n(r,e));if(a.push(this.#n(FA,e)),a.push(d("div",{class:"grow"})),this.systemTools){a.push(d("div",{class:"div"}));for(let r of OA)a.push(this.#n(r,e))}this.replaceChildren(),xe(this,a)}#h(){let e=this.active;for(let a of this.querySelectorAll("slicc-dock-item"))a.toggleAttribute("active",a.dataset.t===e)}#d(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.selectItem(a))}#c(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.active!==a&&(this.active=a),this.collapse())}#f(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.active!==a&&this.selectItem(a),this.dispatchEvent(new CustomEvent("slicc-dock-longpress",{detail:{id:a,kind:this.#o(a)},bubbles:!0,composed:!0})))}#p(e){let a=e.detail;if(a&&typeof a.id=="string")return a.id;let r=e.target?.closest("slicc-dock-item");return r&&this.contains(r)?r.dataset.t??null:null}};x("slicc-dock",Ia);var tP=`
1923
+ `,VA="slicc-dock-style";function eP(t){if(t.getElementById(VA))return;let e=t.createElement("style");e.id=VA,e.textContent=QD,(t.head??t.documentElement).appendChild(e)}function Tl(t){return t==="sprinkle"?"sprinkle":"tool"}var Ia=class extends HTMLElement{static get observedAttributes(){return["active","system-tools"]}#e=[];#t=null;#a=null;#r=null;#s=!1;connectedCallback(){eP(this.ownerDocument),this.classList.add("slicc-dock"),this.setAttribute("part","rail"),this.setAttribute("role","toolbar"),this.setAttribute("aria-orientation","vertical"),this.#s||(this.#i(),this.#s=!0),this.#t||(this.#t=e=>this.#d(e),this.#a=e=>this.#c(e),this.#r=e=>this.#u(e),this.addEventListener("select",this.#t),this.addEventListener("collapse",this.#a),this.addEventListener("longpress",this.#r)),this.#l()}disconnectedCallback(){this.#t&&(this.removeEventListener("select",this.#t),this.#t=null),this.#a&&(this.removeEventListener("collapse",this.#a),this.#a=null),this.#r&&(this.removeEventListener("longpress",this.#r),this.#r=null)}attributeChangedCallback(e){this.#s&&(e==="active"?this.#h():e==="system-tools"&&this.#l())}get items(){return this.#e.map(e=>({...e}))}set items(e){this.#e=Array.isArray(e)?e.map(a=>({...a})):[],this.#s&&this.isConnected&&this.#l()}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}get systemTools(){return this.hasAttribute("system-tools")}set systemTools(e){this.toggleAttribute("system-tools",!!e)}selectItem(e){this.active=e,this.dispatchEvent(new CustomEvent("slicc-dock-select",{detail:{id:e,kind:this.#o(e)},bubbles:!0,composed:!0}))}clearActive(){this.active=null}collapse(){let e=this.active;this.active=null,e!=null&&this.dispatchEvent(new CustomEvent("slicc-dock-collapse",{detail:{id:e},bubbles:!0,composed:!0}))}#i(){let e=[...this.querySelectorAll("slicc-dock-item")];if(e.length===0)return;let a=[];for(let r of e){let s=Tl(r.getAttribute("kind")),i=r.getAttribute("item-id")??r.dataset.t??r.getAttribute("tip")??"";s==="tool"||i==="new"||i===""||a.push({id:i,icon:r.getAttribute("icon")??void 0,label:r.getAttribute("tip")??void 0,kind:"sprinkle",hue:r.getAttribute("hue")??void 0})}for(let r of e)r.remove();this.#e.length===0&&(this.#e=a)}#o(e){return OA.some(a=>a.id===e)?"tool":e===FA.id?"sprinkle":this.#e.find(a=>a.id===e)?.kind??"tool"}#n(e,a){let r=e.id,s=Tl(e.kind),i=e.icon??"",o=e.label??r,n=a!=null&&a===r,h=e.hue;return d("slicc-dock-item",{"data-t":r,"item-id":r,kind:s,icon:i||!1,tip:o,hue:h||!1,active:n})}#l(){let e=this.active,a=[];for(let r of this.#e)Tl(r.kind)==="sprinkle"&&a.push(this.#n(r,e));if(a.push(this.#n(FA,e)),a.push(d("div",{class:"grow"})),this.systemTools){a.push(d("div",{class:"div"}));for(let r of OA)a.push(this.#n(r,e))}this.replaceChildren(),xe(this,a)}#h(){let e=this.active;for(let a of this.querySelectorAll("slicc-dock-item"))a.toggleAttribute("active",a.dataset.t===e)}#d(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.selectItem(a))}#c(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.active!==a&&(this.active=a),this.collapse())}#u(e){let a=this.#p(e);a!=null&&(e.stopPropagation(),this.active!==a&&this.selectItem(a),this.dispatchEvent(new CustomEvent("slicc-dock-longpress",{detail:{id:a,kind:this.#o(a)},bubbles:!0,composed:!0})))}#p(e){let a=e.detail;if(a&&typeof a.id=="string")return a.id;let r=e.target?.closest("slicc-dock-item");return r&&this.contains(r)?r.dataset.t??null:null}};x("slicc-dock",Ia);var tP=`
1924
1924
  :host { display: none; }
1925
1925
  :host([open]) { display: block; }
1926
1926
  .overlay {
@@ -2223,7 +2223,7 @@ slicc-freezer-card .slicc-fzcard__meta {
2223
2223
  slicc-freezer-card[thawed] {
2224
2224
  background: color-mix(in srgb, var(--rose) 12%, transparent);
2225
2225
  }
2226
- `,NA="slicc-freezer-card-style";function cP(t){if(t.getElementById(NA))return;let e=t.createElement("style");e.id=NA,e.textContent=dP,(t.head??t.documentElement).appendChild(e)}var pP=1400,uP=14,$a=class extends HTMLElement{static observedAttributes=["title","meta","slug","icon","thawed"];#e;#t;#a;#r;#s=null;#i=null;#o=!1;#n=null;#l=()=>this.#d();#h=()=>{if(!this.#s)return;let e=this.getBoundingClientRect();this.#s.style.setProperty("--tip-x",`${e.right+8}px`),this.#s.style.setProperty("--tip-y",`${e.top+e.height/2}px`)};connectedCallback(){cP(this.ownerDocument),this.#c(),this.#f()}disconnectedCallback(){this.removeEventListener("click",this.#l),this.removeEventListener("pointerenter",this.#h),this.removeEventListener("focusin",this.#h),this.#n!=null&&(clearTimeout(this.#n),this.#n=null)}attributeChangedCallback(e,a,r){a===r||!this.#o||(e==="thawed"?this.#e.toggleAttribute("thawed",r!==null):e==="icon"?this.#p():this.#f())}get title(){return this.getAttribute("title")??""}set title(e){e==null?this.removeAttribute("title"):this.setAttribute("title",e)}get meta(){return this.getAttribute("meta")??""}set meta(e){e==null?this.removeAttribute("meta"):this.setAttribute("meta",e)}get slug(){return this.getAttribute("slug")??""}set slug(e){e==null?this.removeAttribute("slug"):this.setAttribute("slug",e)}get icon(){return this.getAttribute("icon")}set icon(e){e==null?this.removeAttribute("icon"):this.setAttribute("icon",e)}get expanded(){return this.hasAttribute("expanded")}set expanded(e){this.toggleAttribute("expanded",e)}get thawed(){return this.hasAttribute("thawed")}set thawed(e){this.toggleAttribute("thawed",e)}get hidden(){return this.hasAttribute("hidden")}set hidden(e){this.toggleAttribute("hidden",e)}get badge(){return this.#c(),this.#e}#d(){this.dispatchEvent(new CustomEvent("freezer-card-select",{bubbles:!0,composed:!0,detail:{slug:this.slug}})),this.flashThaw()}flashThaw(e=pP){this.#n!=null&&clearTimeout(this.#n),this.thawed=!0,this.#n=setTimeout(()=>{this.thawed=!1,this.#n=null},e)}#c(){if(this.#o)return;this.#o=!0;let e=this.querySelector(":scope > .slicc-fzcard__text");if(e instanceof HTMLElement){this.#t=e,this.#a=e.querySelector(".slicc-fzcard__title"),this.#r=e.querySelector(".slicc-fzcard__meta"),this.#e=this.querySelector(":scope > slicc-snowflake"),this.#s=this.querySelector(":scope > .slicc-fzcard__tip"),this.addEventListener("click",this.#l),this.addEventListener("pointerenter",this.#h),this.addEventListener("focusin",this.#h);return}let a=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("slicc-snowflake"),this.#e.setAttribute("part","badge"),this.#a=d("div",{class:"slicc-fzcard__title",part:"title"}),this.#r=d("div",{class:"slicc-fzcard__meta",part:"meta"}),this.#t=d("div",{class:"slicc-fzcard__text",part:"text"},this.#a,this.#r);for(let r of a)this.#a.appendChild(r);this.#s=d("span",{class:"slicc-fzcard__tip",part:"tip","aria-hidden":"true"}),this.replaceChildren(this.#e,this.#t,this.#s),this.addEventListener("click",this.#l),this.addEventListener("pointerenter",this.#h),this.addEventListener("focusin",this.#h)}#f(){if(!this.#o)return;let e=this.getAttribute("title");e!=null&&(this.#a.textContent=e),this.#r.textContent=this.meta,this.#s&&(this.#s.textContent=e??(this.#a.textContent||"")),this.#e.toggleAttribute("thawed",this.thawed),this.#p()}#p(){if(!this.#o)return;let e=this.getAttribute("icon");if(e){let a=b(e,{size:uP,class:"ic",part:"icon"});this.#i?this.#i.replaceWith(a):this.#e.appendChild(a),this.#i=a}else this.#i&&(this.#i.remove(),this.#i=null)}};x("slicc-freezer-card",$a);var fP="square-pen",mP="loader-circle",qA=16,xP="New chat",gP=350,vP=[["save","archive","Save & start new"],["skip","fast-forward","New chat \u2014 skip memory"],["erase","trash-2","Erase & start new"]],bP=`
2226
+ `,NA="slicc-freezer-card-style";function cP(t){if(t.getElementById(NA))return;let e=t.createElement("style");e.id=NA,e.textContent=dP,(t.head??t.documentElement).appendChild(e)}var pP=1400,uP=14,$a=class extends HTMLElement{static observedAttributes=["title","meta","slug","icon","thawed"];#e;#t;#a;#r;#s=null;#i=null;#o=!1;#n=null;#l=()=>this.#d();#h=()=>{if(!this.#s)return;let e=this.getBoundingClientRect();this.#s.style.setProperty("--tip-x",`${e.right+8}px`),this.#s.style.setProperty("--tip-y",`${e.top+e.height/2}px`)};connectedCallback(){cP(this.ownerDocument),this.#c(),this.#u()}disconnectedCallback(){this.removeEventListener("click",this.#l),this.removeEventListener("pointerenter",this.#h),this.removeEventListener("focusin",this.#h),this.#n!=null&&(clearTimeout(this.#n),this.#n=null)}attributeChangedCallback(e,a,r){a===r||!this.#o||(e==="thawed"?this.#e.toggleAttribute("thawed",r!==null):e==="icon"?this.#p():this.#u())}get title(){return this.getAttribute("title")??""}set title(e){e==null?this.removeAttribute("title"):this.setAttribute("title",e)}get meta(){return this.getAttribute("meta")??""}set meta(e){e==null?this.removeAttribute("meta"):this.setAttribute("meta",e)}get slug(){return this.getAttribute("slug")??""}set slug(e){e==null?this.removeAttribute("slug"):this.setAttribute("slug",e)}get icon(){return this.getAttribute("icon")}set icon(e){e==null?this.removeAttribute("icon"):this.setAttribute("icon",e)}get expanded(){return this.hasAttribute("expanded")}set expanded(e){this.toggleAttribute("expanded",e)}get thawed(){return this.hasAttribute("thawed")}set thawed(e){this.toggleAttribute("thawed",e)}get hidden(){return this.hasAttribute("hidden")}set hidden(e){this.toggleAttribute("hidden",e)}get badge(){return this.#c(),this.#e}#d(){this.dispatchEvent(new CustomEvent("freezer-card-select",{bubbles:!0,composed:!0,detail:{slug:this.slug}})),this.flashThaw()}flashThaw(e=pP){this.#n!=null&&clearTimeout(this.#n),this.thawed=!0,this.#n=setTimeout(()=>{this.thawed=!1,this.#n=null},e)}#c(){if(this.#o)return;this.#o=!0;let e=this.querySelector(":scope > .slicc-fzcard__text");if(e instanceof HTMLElement){this.#t=e,this.#a=e.querySelector(".slicc-fzcard__title"),this.#r=e.querySelector(".slicc-fzcard__meta"),this.#e=this.querySelector(":scope > slicc-snowflake"),this.#s=this.querySelector(":scope > .slicc-fzcard__tip"),this.addEventListener("click",this.#l),this.addEventListener("pointerenter",this.#h),this.addEventListener("focusin",this.#h);return}let a=Array.from(this.childNodes);this.#e=this.ownerDocument.createElement("slicc-snowflake"),this.#e.setAttribute("part","badge"),this.#a=d("div",{class:"slicc-fzcard__title",part:"title"}),this.#r=d("div",{class:"slicc-fzcard__meta",part:"meta"}),this.#t=d("div",{class:"slicc-fzcard__text",part:"text"},this.#a,this.#r);for(let r of a)this.#a.appendChild(r);this.#s=d("span",{class:"slicc-fzcard__tip",part:"tip","aria-hidden":"true"}),this.replaceChildren(this.#e,this.#t,this.#s),this.addEventListener("click",this.#l),this.addEventListener("pointerenter",this.#h),this.addEventListener("focusin",this.#h)}#u(){if(!this.#o)return;let e=this.getAttribute("title");e!=null&&(this.#a.textContent=e),this.#r.textContent=this.meta,this.#s&&(this.#s.textContent=e??(this.#a.textContent||"")),this.#e.toggleAttribute("thawed",this.thawed),this.#p()}#p(){if(!this.#o)return;let e=this.getAttribute("icon");if(e){let a=b(e,{size:uP,class:"ic",part:"icon"});this.#i?this.#i.replaceWith(a):this.#e.appendChild(a),this.#i=a}else this.#i&&(this.#i.remove(),this.#i=null)}};x("slicc-freezer-card",$a);var fP="square-pen",mP="loader-circle",qA=16,xP="New chat",gP=350,vP=[["save","archive","Save & start new"],["skip","fast-forward","New chat \u2014 skip memory"],["erase","trash-2","Erase & start new"]],bP=`
2227
2227
  :host { display: block; }
2228
2228
  :host([hidden]) { display: none; }
2229
2229
  *{ box-sizing: border-box; }
@@ -2479,7 +2479,7 @@ void main(){
2479
2479
  .canvas, .fallback { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
2480
2480
  .fallback { display: none; }
2481
2481
  :host([no-webgl]) .canvas { display: none; }
2482
- :host([no-webgl]) .fallback { display: block; }`,LP=C(EP),TP=2,HP=.35,DP=["u_res","u_scroll","u_time","u_energy","u_center","u_evt","u_freeze","u_dark","u_density","u_falloff","u_life","u_blink","u_thick","u_tint","u_brightness","u_contrast","u_noise","u_blur"];function ot(t,e,a,r){return Number.isFinite(t)?Math.max(e,Math.min(a,t)):r}function Hl(t,e){if(!t||typeof getComputedStyle!="function")return e;let a=document.createElement("span");a.style.color=t,a.style.display="none",document.body.appendChild(a);let r=getComputedStyle(a).color;a.remove();let s=r.match(/[\d.]+/g)?.map(Number);return!s||s.length<3?e:[s[0]/255,s[1]/255,s[2]/255]}var vt=class extends HTMLElement{static observedAttributes=["mode","tint","coverage","intensity","scroll","brightness","contrast","noise","blur"];#e;#t=null;#a=null;#r=null;#s=null;#i={};#o=-1;#n=0;#l=0;#h=0;#d=null;#c=!1;#f=null;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[LP];let e=d("canvas",{class:"canvas",part:"canvas"}),a=d("div",{class:"fallback",part:"fallback","aria-hidden":"true"});this.#e.replaceChildren(e,a),this.#t=e}connectedCallback(){if(this.#c=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,this.#p(),!this.#g()){this.setAttribute("no-webgl","");return}this.removeAttribute("no-webgl"),typeof ResizeObserver<"u"&&(this.#d=new ResizeObserver(()=>this.#m()),this.#d.observe(this)),this.#l=performance.now()/1e3,this.#c?this.#_():this.#b()}disconnectedCallback(){this.#w(),this.#d?.disconnect(),this.#d=null,this.#y()}attributeChangedCallback(e){this.isConnected&&(e==="mode"&&this.#a&&this.mode!==this.#f&&this.#u(),this.#p(),this.#m())}get mode(){let e=this.getAttribute("mode");return e&&kP.has(e)?e:"cone"}set mode(e){this.setAttribute("mode",e)}get coverage(){return ot(Number.parseFloat(this.getAttribute("coverage")??""),0,1,.66)}set coverage(e){this.setAttribute("coverage",String(e))}get intensity(){return ot(Number.parseFloat(this.getAttribute("intensity")??""),0,4,1)}set intensity(e){this.setAttribute("intensity",String(e))}get scrollOffset(){let e=Number.parseFloat(this.getAttribute("scroll")??"");return Number.isFinite(e)?e:0}set scrollOffset(e){this.setAttribute("scroll",String(e))}get brightness(){return ot(Number.parseFloat(this.getAttribute("brightness")??""),.5,1.5,1.2)}set brightness(e){this.setAttribute("brightness",String(e))}get contrast(){return ot(Number.parseFloat(this.getAttribute("contrast")??""),.5,2,.75)}set contrast(e){this.setAttribute("contrast",String(e))}get noise(){return ot(Number.parseFloat(this.getAttribute("noise")??""),0,.3,.04)}set noise(e){this.setAttribute("noise",String(e))}get blurAmount(){return ot(Number.parseFloat(this.getAttribute("blur")??""),0,1,.09)}set blurAmount(e){this.setAttribute("blur",String(e))}get noWebgl(){return this.hasAttribute("no-webgl")}pulse(e=1){this.#h=Math.min(1.4,this.#h+e),this.#c&&this.#_()}#p(){let e=this.#e.querySelector(".fallback");e&&(e.style.background=AP[this.mode])}#m(){this.#c&&this.#a&&this.#_()}#x(e,a,r){let s=e.createShader(a);return s?(e.shaderSource(s,r),e.compileShader(s),e.getShaderParameter(s,e.COMPILE_STATUS)?s:(e.deleteShader(s),null)):null}#u(){let e=this.#a;if(!e)return!1;let a=this.#x(e,e.VERTEX_SHADER,_P),r=this.#x(e,e.FRAGMENT_SHADER,CP[this.mode]);if(!a||!r)return!1;let s=e.createProgram();if(!s||(e.attachShader(s,a),e.attachShader(s,r),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS)))return!1;this.#r&&e.deleteProgram(this.#r),this.#r=s,e.useProgram(s),this.#o=e.getAttribLocation(s,"a_pos"),this.#i={};for(let i of DP)this.#i[i]=e.getUniformLocation(s,i);return this.#f=this.mode,!0}#g(){let e=this.#t;if(!e)return!1;let a={premultipliedAlpha:!0,alpha:!0,antialias:!0},r=null;try{r=e.getContext("webgl",a)??e.getContext("experimental-webgl",a)}catch{r=null}if(!r)return!1;if(this.#a=r,!this.#u())return this.#a=null,!1;let s=r.createBuffer();return s?(this.#s=s,r.bindBuffer(r.ARRAY_BUFFER,s),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),r.STATIC_DRAW),!0):(this.#a=null,!1)}#v(){let e=this.#t;if(!e)return;let a=Math.min(TP,typeof window<"u"&&window.devicePixelRatio||1),r=Math.max(1,e.clientWidth*a|0),s=Math.max(1,e.clientHeight*a|0);(e.width!==r||e.height!==s)&&(e.width=r,e.height=s)}#M(){if(typeof getComputedStyle!="function")return 0;let e=getComputedStyle(this).getPropertyValue("--ink").trim();if(!e)return 0;let[a,r,s]=Hl(e,[0,0,0]);return .2126*a+.7152*r+.0722*s>.5?1:0}#_(){let e=this.#a,a=this.#t,r=this.#r;if(!e||!a||!r||!this.#s)return;this.#v();let s=performance.now()/1e3-this.#l,i=.5+.5*Math.sin(s*.12),o=.5+.5*Math.sin(s*.097+1),n=.2*(1-i)+.46*i,h=.74*(1-o)+.3*o,l=this.#M(),p=Hl(this.getAttribute("tint")??"",[.545,.361,.965]),c=Hl(this.getAttribute("tint")??"",[.957,.247,.369]);e.viewport(0,0,a.width,a.height),e.useProgram(r),e.bindBuffer(e.ARRAY_BUFFER,this.#s),e.enableVertexAttribArray(this.#o),e.vertexAttribPointer(this.#o,2,e.FLOAT,!1,0,0);let u=this.#i;e.uniform2f(u.u_res??null,a.width,a.height),e.uniform1f(u.u_time??null,s),e.uniform1f(u.u_energy??null,this.#h),e.uniform2f(u.u_center??null,n,h),e.uniform3f(u.u_evt??null,c[0],c[1],c[2]),e.uniform1f(u.u_freeze??null,ot(this.coverage*this.intensity,0,1,.66)*2.2),e.uniform1f(u.u_dark??null,l),e.uniform1f(u.u_scroll??null,this.scrollOffset*HP/Math.max(1,a.clientHeight||a.height)),e.uniform1f(u.u_density??null,.29),e.uniform1f(u.u_falloff??null,.3),e.uniform1f(u.u_life??null,.35),e.uniform1f(u.u_blink??null,.05),e.uniform1f(u.u_thick??null,.02),e.uniform3f(u.u_tint??null,p[0],p[1],p[2]),e.uniform1f(u.u_brightness??null,this.brightness),e.uniform1f(u.u_contrast??null,this.contrast),e.uniform1f(u.u_noise??null,this.noise),e.uniform1f(u.u_blur??null,this.blurAmount),e.drawArrays(e.TRIANGLES,0,3),this.#h*=.95,this.#h<.001&&(this.#h=0)}#b(){if(this.#n)return;let e=()=>{this.#_(),this.#n=requestAnimationFrame(e)};this.#n=requestAnimationFrame(e)}#w(){this.#n&&cancelAnimationFrame(this.#n),this.#n=0}#y(){let e=this.#a;e&&(this.#s&&e.deleteBuffer(this.#s),this.#r&&e.deleteProgram(this.#r),e.getExtension("WEBGL_lose_context")?.loseContext()),this.#a=null,this.#r=null,this.#s=null,this.#f=null}};x("slicc-shader",vt);var Ga=class extends vt{connectedCallback(){this.getAttribute("mode")!=="freezer"&&this.setAttribute("mode","freezer"),super.connectedCallback()}};x("slicc-frost-shader",Ga);var WA=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],Za="top-right";var Rl="slicc-launcher-corner",$A=["disconnected","connected","error"],KA="disconnected",Me="follower-status",PP=new Set(WA),RP=new Set($A);function nt(t,e=Za){return t&&PP.has(t)?t:e}function Dt(t,e=KA){return t&&RP.has(t)?t:e}function Ya(t,e){return t>=6||t>=12&&e>=.6}function Bl({clientX:t,clientY:e,viewportWidth:a,viewportHeight:r,velocityXPxPerMs:s=0,velocityYPxPerMs:i=0,flickProjectionMs:o=180}){let n=UA(t+s*o,0,a),h=UA(e+i*o,0,r),l=n/a,p=h/r,c=l>1/3&&l<2/3,u=p>1/3&&p<2/3;if(c&&u){let g=p,y=1-p,T=l,P=1-l,H=Math.min(g,y,T,P);return H===g?"top":H===y?"bottom":H===T?"left":"right"}if(c)return p<.5?"top":"bottom";if(u)return l<.5?"left":"right";let m=l<.5?"left":"right";return`${p<.5?"top":"bottom"}-${m}`}function UA(t,e,a){return Math.min(Math.max(t,e),a)}var GA=`<?xml version="1.0" encoding="UTF-8"?>
2482
+ :host([no-webgl]) .fallback { display: block; }`,LP=C(EP),TP=2,HP=.35,DP=["u_res","u_scroll","u_time","u_energy","u_center","u_evt","u_freeze","u_dark","u_density","u_falloff","u_life","u_blink","u_thick","u_tint","u_brightness","u_contrast","u_noise","u_blur"];function ot(t,e,a,r){return Number.isFinite(t)?Math.max(e,Math.min(a,t)):r}function Hl(t,e){if(!t||typeof getComputedStyle!="function")return e;let a=document.createElement("span");a.style.color=t,a.style.display="none",document.body.appendChild(a);let r=getComputedStyle(a).color;a.remove();let s=r.match(/[\d.]+/g)?.map(Number);return!s||s.length<3?e:[s[0]/255,s[1]/255,s[2]/255]}var vt=class extends HTMLElement{static observedAttributes=["mode","tint","coverage","intensity","scroll","brightness","contrast","noise","blur"];#e;#t=null;#a=null;#r=null;#s=null;#i={};#o=-1;#n=0;#l=0;#h=0;#d=null;#c=!1;#u=null;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[LP];let e=d("canvas",{class:"canvas",part:"canvas"}),a=d("div",{class:"fallback",part:"fallback","aria-hidden":"true"});this.#e.replaceChildren(e,a),this.#t=e}connectedCallback(){if(this.#c=typeof matchMedia=="function"&&matchMedia("(prefers-reduced-motion: reduce)").matches,this.#p(),!this.#g()){this.setAttribute("no-webgl","");return}this.removeAttribute("no-webgl"),typeof ResizeObserver<"u"&&(this.#d=new ResizeObserver(()=>this.#m()),this.#d.observe(this)),this.#l=performance.now()/1e3,this.#c?this.#b():this.#M()}disconnectedCallback(){this.#w(),this.#d?.disconnect(),this.#d=null,this.#y()}attributeChangedCallback(e){this.isConnected&&(e==="mode"&&this.#a&&this.mode!==this.#u&&this.#f(),this.#p(),this.#m())}get mode(){let e=this.getAttribute("mode");return e&&kP.has(e)?e:"cone"}set mode(e){this.setAttribute("mode",e)}get coverage(){return ot(Number.parseFloat(this.getAttribute("coverage")??""),0,1,.66)}set coverage(e){this.setAttribute("coverage",String(e))}get intensity(){return ot(Number.parseFloat(this.getAttribute("intensity")??""),0,4,1)}set intensity(e){this.setAttribute("intensity",String(e))}get scrollOffset(){let e=Number.parseFloat(this.getAttribute("scroll")??"");return Number.isFinite(e)?e:0}set scrollOffset(e){this.setAttribute("scroll",String(e))}get brightness(){return ot(Number.parseFloat(this.getAttribute("brightness")??""),.5,1.5,1.2)}set brightness(e){this.setAttribute("brightness",String(e))}get contrast(){return ot(Number.parseFloat(this.getAttribute("contrast")??""),.5,2,.75)}set contrast(e){this.setAttribute("contrast",String(e))}get noise(){return ot(Number.parseFloat(this.getAttribute("noise")??""),0,.3,.04)}set noise(e){this.setAttribute("noise",String(e))}get blurAmount(){return ot(Number.parseFloat(this.getAttribute("blur")??""),0,1,.09)}set blurAmount(e){this.setAttribute("blur",String(e))}get noWebgl(){return this.hasAttribute("no-webgl")}pulse(e=1){this.#h=Math.min(1.4,this.#h+e),this.#c&&this.#b()}#p(){let e=this.#e.querySelector(".fallback");e&&(e.style.background=AP[this.mode])}#m(){this.#c&&this.#a&&this.#b()}#x(e,a,r){let s=e.createShader(a);return s?(e.shaderSource(s,r),e.compileShader(s),e.getShaderParameter(s,e.COMPILE_STATUS)?s:(e.deleteShader(s),null)):null}#f(){let e=this.#a;if(!e)return!1;let a=this.#x(e,e.VERTEX_SHADER,_P),r=this.#x(e,e.FRAGMENT_SHADER,CP[this.mode]);if(!a||!r)return!1;let s=e.createProgram();if(!s||(e.attachShader(s,a),e.attachShader(s,r),e.linkProgram(s),!e.getProgramParameter(s,e.LINK_STATUS)))return!1;this.#r&&e.deleteProgram(this.#r),this.#r=s,e.useProgram(s),this.#o=e.getAttribLocation(s,"a_pos"),this.#i={};for(let i of DP)this.#i[i]=e.getUniformLocation(s,i);return this.#u=this.mode,!0}#g(){let e=this.#t;if(!e)return!1;let a={premultipliedAlpha:!0,alpha:!0,antialias:!0},r=null;try{r=e.getContext("webgl",a)??e.getContext("experimental-webgl",a)}catch{r=null}if(!r)return!1;if(this.#a=r,!this.#f())return this.#a=null,!1;let s=r.createBuffer();return s?(this.#s=s,r.bindBuffer(r.ARRAY_BUFFER,s),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,3,-1,-1,3]),r.STATIC_DRAW),!0):(this.#a=null,!1)}#v(){let e=this.#t;if(!e)return;let a=Math.min(TP,typeof window<"u"&&window.devicePixelRatio||1),r=Math.max(1,e.clientWidth*a|0),s=Math.max(1,e.clientHeight*a|0);(e.width!==r||e.height!==s)&&(e.width=r,e.height=s)}#_(){if(typeof getComputedStyle!="function")return 0;let e=getComputedStyle(this).getPropertyValue("--ink").trim();if(!e)return 0;let[a,r,s]=Hl(e,[0,0,0]);return .2126*a+.7152*r+.0722*s>.5?1:0}#b(){let e=this.#a,a=this.#t,r=this.#r;if(!e||!a||!r||!this.#s)return;this.#v();let s=performance.now()/1e3-this.#l,i=.5+.5*Math.sin(s*.12),o=.5+.5*Math.sin(s*.097+1),n=.2*(1-i)+.46*i,h=.74*(1-o)+.3*o,l=this.#_(),p=Hl(this.getAttribute("tint")??"",[.545,.361,.965]),c=Hl(this.getAttribute("tint")??"",[.957,.247,.369]);e.viewport(0,0,a.width,a.height),e.useProgram(r),e.bindBuffer(e.ARRAY_BUFFER,this.#s),e.enableVertexAttribArray(this.#o),e.vertexAttribPointer(this.#o,2,e.FLOAT,!1,0,0);let u=this.#i;e.uniform2f(u.u_res??null,a.width,a.height),e.uniform1f(u.u_time??null,s),e.uniform1f(u.u_energy??null,this.#h),e.uniform2f(u.u_center??null,n,h),e.uniform3f(u.u_evt??null,c[0],c[1],c[2]),e.uniform1f(u.u_freeze??null,ot(this.coverage*this.intensity,0,1,.66)*2.2),e.uniform1f(u.u_dark??null,l),e.uniform1f(u.u_scroll??null,this.scrollOffset*HP/Math.max(1,a.clientHeight||a.height)),e.uniform1f(u.u_density??null,.29),e.uniform1f(u.u_falloff??null,.3),e.uniform1f(u.u_life??null,.35),e.uniform1f(u.u_blink??null,.05),e.uniform1f(u.u_thick??null,.02),e.uniform3f(u.u_tint??null,p[0],p[1],p[2]),e.uniform1f(u.u_brightness??null,this.brightness),e.uniform1f(u.u_contrast??null,this.contrast),e.uniform1f(u.u_noise??null,this.noise),e.uniform1f(u.u_blur??null,this.blurAmount),e.drawArrays(e.TRIANGLES,0,3),this.#h*=.95,this.#h<.001&&(this.#h=0)}#M(){if(this.#n)return;let e=()=>{this.#b(),this.#n=requestAnimationFrame(e)};this.#n=requestAnimationFrame(e)}#w(){this.#n&&cancelAnimationFrame(this.#n),this.#n=0}#y(){let e=this.#a;e&&(this.#s&&e.deleteBuffer(this.#s),this.#r&&e.deleteProgram(this.#r),e.getExtension("WEBGL_lose_context")?.loseContext()),this.#a=null,this.#r=null,this.#s=null,this.#u=null}};x("slicc-shader",vt);var Ga=class extends vt{connectedCallback(){this.getAttribute("mode")!=="freezer"&&this.setAttribute("mode","freezer"),super.connectedCallback()}};x("slicc-frost-shader",Ga);var WA=["top-left","top-right","bottom-left","bottom-right","top","right","bottom","left"],Za="top-right";var Rl="slicc-launcher-corner",$A=["disconnected","connected","error"],KA="disconnected",Me="follower-status",PP=new Set(WA),RP=new Set($A);function nt(t,e=Za){return t&&PP.has(t)?t:e}function Dt(t,e=KA){return t&&RP.has(t)?t:e}function Ya(t,e){return t>=6||t>=12&&e>=.6}function Bl({clientX:t,clientY:e,viewportWidth:a,viewportHeight:r,velocityXPxPerMs:s=0,velocityYPxPerMs:i=0,flickProjectionMs:o=180}){let n=UA(t+s*o,0,a),h=UA(e+i*o,0,r),l=n/a,p=h/r,c=l>1/3&&l<2/3,u=p>1/3&&p<2/3;if(c&&u){let g=p,y=1-p,T=l,P=1-l,H=Math.min(g,y,T,P);return H===g?"top":H===y?"bottom":H===T?"left":"right"}if(c)return p<.5?"top":"bottom";if(u)return l<.5?"left":"right";let m=l<.5?"left":"right";return`${p<.5?"top":"bottom"}-${m}`}function UA(t,e,a){return Math.min(Math.max(t,e),a)}var GA=`<?xml version="1.0" encoding="UTF-8"?>
2483
2483
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="100%" height="100%"><g transform="translate(151.53125, -171.3125) scale(1.25)"><g transform="translate(0, 21)"><g id="Cone">
2484
2484
  <path id="Cone_Bottom" data-name="Cone Bottom" d="M108.22,414.88l189.84,460.03c1.36,3.3,6.09,3.16,7.25-.22l159.34-463.34c.87-2.53-1.03-5.16-3.7-5.13l-349.18,3.32c-2.74.03-4.59,2.82-3.55,5.35Z" style="fill: rgb(34, 34, 34); stroke: rgb(255, 255, 255); stroke-linejoin: round; stroke-width: 20px;"></path>
2485
2485
  <g id="Waffle_Cross-Hatch" data-name="Waffle Cross-Hatch">
@@ -2800,7 +2800,7 @@ void main(){
2800
2800
  @media (prefers-reduced-motion: reduce) {
2801
2801
  .launcher, .sidebar, .backdrop { transition: none; }
2802
2802
  }
2803
- `,qP=C(NP);function QA(t){let e=t.replace(/<\?xml[^?]*\?>\s*/i,""),a=new DOMParser().parseFromString(e,"image/svg+xml");return document.importNode(a.documentElement,!0)}var UP=[{state:"disconnected",darkSvg:YA,lightSvg:jA},{state:"connected",darkSvg:XA,lightSvg:JA},{state:"error",darkSvg:GA,lightSvg:ZA}];function WP(){let t=d("span",{class:"logo",part:"logo"});for(let{state:e,darkSvg:a,lightSvg:r}of UP){let s=d("div",{class:"logo-icon logo-for-dark"});s.appendChild(QA(a));let i=d("div",{class:"logo-icon logo-for-light"});i.appendChild(QA(r));let o=d("span",{class:`logo-state logo-state-${e}`,"aria-hidden":"true"},s,i);t.appendChild(o)}return t}function eE(t,e,a){return Math.min(Math.max(t,e),a)}function $P(t){try{return nt(t?.localStorage.getItem(Rl))}catch{return Za}}function KP(t,e){try{t?.localStorage.setItem(Rl,e)}catch{}}var bt=class extends HTMLElement{static observedAttributes=["open","corner","app-url",Me];#e;#t;#a;#r;#s;#i;#o="";#n=null;#l=!1;#h=!1;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[qP],this.#d()}connectedCallback(){if(!this.hasAttribute("corner")){let e=$P(this.ownerDocument.defaultView);this.#h=!0,this.setAttribute("corner",e),this.#h=!1}this.#f()}attributeChangedCallback(e){if(!this.#h&&(e==="app-url"&&this.#f(),e==="corner"&&KP(this.ownerDocument.defaultView,this.corner),e===Me)){let a=this.getAttribute(Me);if(a!==null){let r=Dt(a);r!==a&&(this.#h=!0,this.setAttribute(Me,r),this.#h=!1)}}}get open(){return this.hasAttribute("open")}set open(e){this.open!==e&&(this.toggleAttribute("open",e),this.#c())}get corner(){return nt(this.getAttribute("corner"))}set corner(e){let a=nt(e);this.corner===a&&this.hasAttribute("corner")||this.setAttribute("corner",a)}get appUrl(){return this.getAttribute("app-url")?.trim()??""}set appUrl(e){let a=(e??"").trim();a?this.setAttribute("app-url",a):this.removeAttribute("app-url")}get followerStatus(){return Dt(this.getAttribute(Me))}set followerStatus(e){if(e==null){this.removeAttribute(Me);return}let a=Dt(e);this.getAttribute(Me)!==a&&this.setAttribute(Me,a)}show(){this.open=!0}hide(){this.open=!1}toggle(){this.open=!this.open}#d(){this.#t=d("button",{class:"launcher",part:"launcher",type:"button","aria-label":"Toggle SLICC"},WP(),d("span",{class:"tab-label",part:"tab-label"},"SLICC")),this.#t.addEventListener("click",a=>{if(this.#l){this.#l=!1,a.preventDefault(),a.stopImmediatePropagation();return}this.toggle()}),this.#t.addEventListener("dblclick",a=>{a.preventDefault(),this.dispatchEvent(new CustomEvent("slicc-launcher-focus",{bubbles:!0,composed:!0}))}),this.#t.addEventListener("pointerdown",this.#p),this.#t.addEventListener("pointermove",this.#m),this.#t.addEventListener("pointerup",this.#x),this.#t.addEventListener("pointercancel",this.#u),this.#a=d("div",{class:"backdrop",part:"backdrop"}),this.#a.addEventListener("click",()=>this.hide()),this.#s=d("iframe",{title:"SLICC overlay"}),this.#i=d("div",{class:"empty"},"Set the app-url attribute to load SLICC.");let e=d("div",{class:"viewport"},this.#s,this.#i);this.#r=d("aside",{class:"sidebar",part:"sidebar","aria-label":"SLICC launcher sidebar"},e),this.#e.replaceChildren(this.#a,this.#r,this.#t)}#c(){this.dispatchEvent(new CustomEvent("slicc-launcher-toggle",{detail:{open:this.open},bubbles:!0,composed:!0}))}#f(){let e=this.appUrl;if(this.#i.toggleAttribute("hidden",!!e),!e){this.#o&&(this.#o="",this.#s.removeAttribute("src"));return}e!==this.#o&&(this.#o=e,this.#s.src=e)}#p=e=>{if(!e.isPrimary||e.button!==0)return;let a=this.#t.getBoundingClientRect();this.#n={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startLeft:a.left,startTop:a.top,width:a.width,height:a.height,lastX:e.clientX,lastY:e.clientY,lastTimestamp:e.timeStamp,velocityX:0,velocityY:0,dragging:!1},this.#l=!1,this.#t.setPointerCapture(e.pointerId),e.preventDefault()};#m=e=>{let a=this.#n;if(!a||e.pointerId!==a.pointerId)return;let r=e.clientX-a.startX,s=e.clientY-a.startY,i=Math.hypot(r,s);!a.dragging&&Ya(i,0)&&(a.dragging=!0,this.setAttribute("dragging",""));let o=Math.max(e.timeStamp-a.lastTimestamp,1),n=(e.clientX-a.lastX)/o,h=(e.clientY-a.lastY)/o;if(a.velocityX=a.velocityX===0?n:a.velocityX*.35+n*.65,a.velocityY=a.velocityY===0?h:a.velocityY*.35+h*.65,a.lastX=e.clientX,a.lastY=e.clientY,a.lastTimestamp=e.timeStamp,!a.dragging)return;let l=Math.max(18,window.innerWidth-a.width-18),p=Math.max(18,window.innerHeight-a.height-18),c=eE(a.startLeft+r,18,l),u=eE(a.startTop+s,18,p);this.#t.style.left=`${c}px`,this.#t.style.top=`${u}px`,this.#t.style.right="auto",this.#t.style.bottom="auto",e.preventDefault()};#x=e=>{this.#g(e,!0)};#u=e=>{this.#g(e,!1)};#g(e,a){let r=this.#n;if(!r||e.pointerId!==r.pointerId)return;let s=Math.hypot(e.clientX-r.startX,e.clientY-r.startY),i=Math.hypot(r.velocityX,r.velocityY);if(a&&(r.dragging||Ya(s,i))){let n=Bl({clientX:e.clientX,clientY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,velocityXPxPerMs:r.velocityX,velocityYPxPerMs:r.velocityY});this.corner=n,this.dispatchEvent(new CustomEvent("slicc-launcher-move",{detail:{corner:n},bubbles:!0,composed:!0})),this.#l=!0,e.preventDefault()}this.#t.hasPointerCapture(e.pointerId)&&this.#t.releasePointerCapture(e.pointerId),this.#n=null,this.removeAttribute("dragging"),this.#t.style.left="",this.#t.style.top="",this.#t.style.right="",this.#t.style.bottom=""}};x("slicc-launcher",bt);var GP=new Set(["user","feedback","project"]),ZP={user:{hue:"--rose",label:"user"},feedback:{hue:"--cyan",label:"feedback"},project:{hue:"--violet",label:"project"}};function YP(t){return t==="feedback"||t==="project"?t:"user"}var XP=`
2803
+ `,qP=C(NP);function QA(t){let e=t.replace(/<\?xml[^?]*\?>\s*/i,""),a=new DOMParser().parseFromString(e,"image/svg+xml");return document.importNode(a.documentElement,!0)}var UP=[{state:"disconnected",darkSvg:YA,lightSvg:jA},{state:"connected",darkSvg:XA,lightSvg:JA},{state:"error",darkSvg:GA,lightSvg:ZA}];function WP(){let t=d("span",{class:"logo",part:"logo"});for(let{state:e,darkSvg:a,lightSvg:r}of UP){let s=d("div",{class:"logo-icon logo-for-dark"});s.appendChild(QA(a));let i=d("div",{class:"logo-icon logo-for-light"});i.appendChild(QA(r));let o=d("span",{class:`logo-state logo-state-${e}`,"aria-hidden":"true"},s,i);t.appendChild(o)}return t}function eE(t,e,a){return Math.min(Math.max(t,e),a)}function $P(t){try{return nt(t?.localStorage.getItem(Rl))}catch{return Za}}function KP(t,e){try{t?.localStorage.setItem(Rl,e)}catch{}}var bt=class extends HTMLElement{static observedAttributes=["open","corner","app-url",Me];#e;#t;#a;#r;#s;#i;#o="";#n=null;#l=!1;#h=!1;constructor(){super(),this.#e=this.attachShadow({mode:"open"}),this.#e.adoptedStyleSheets=[qP],this.#d()}connectedCallback(){if(!this.hasAttribute("corner")){let e=$P(this.ownerDocument.defaultView);this.#h=!0,this.setAttribute("corner",e),this.#h=!1}this.#u()}attributeChangedCallback(e){if(!this.#h&&(e==="app-url"&&this.#u(),e==="corner"&&KP(this.ownerDocument.defaultView,this.corner),e===Me)){let a=this.getAttribute(Me);if(a!==null){let r=Dt(a);r!==a&&(this.#h=!0,this.setAttribute(Me,r),this.#h=!1)}}}get open(){return this.hasAttribute("open")}set open(e){this.open!==e&&(this.toggleAttribute("open",e),this.#c())}get corner(){return nt(this.getAttribute("corner"))}set corner(e){let a=nt(e);this.corner===a&&this.hasAttribute("corner")||this.setAttribute("corner",a)}get appUrl(){return this.getAttribute("app-url")?.trim()??""}set appUrl(e){let a=(e??"").trim();a?this.setAttribute("app-url",a):this.removeAttribute("app-url")}get followerStatus(){return Dt(this.getAttribute(Me))}set followerStatus(e){if(e==null){this.removeAttribute(Me);return}let a=Dt(e);this.getAttribute(Me)!==a&&this.setAttribute(Me,a)}show(){this.open=!0}hide(){this.open=!1}toggle(){this.open=!this.open}#d(){this.#t=d("button",{class:"launcher",part:"launcher",type:"button","aria-label":"Toggle SLICC"},WP(),d("span",{class:"tab-label",part:"tab-label"},"SLICC")),this.#t.addEventListener("click",a=>{if(this.#l){this.#l=!1,a.preventDefault(),a.stopImmediatePropagation();return}this.toggle()}),this.#t.addEventListener("dblclick",a=>{a.preventDefault(),this.dispatchEvent(new CustomEvent("slicc-launcher-focus",{bubbles:!0,composed:!0}))}),this.#t.addEventListener("pointerdown",this.#p),this.#t.addEventListener("pointermove",this.#m),this.#t.addEventListener("pointerup",this.#x),this.#t.addEventListener("pointercancel",this.#f),this.#a=d("div",{class:"backdrop",part:"backdrop"}),this.#a.addEventListener("click",()=>this.hide()),this.#s=d("iframe",{title:"SLICC overlay"}),this.#i=d("div",{class:"empty"},"Set the app-url attribute to load SLICC.");let e=d("div",{class:"viewport"},this.#s,this.#i);this.#r=d("aside",{class:"sidebar",part:"sidebar","aria-label":"SLICC launcher sidebar"},e),this.#e.replaceChildren(this.#a,this.#r,this.#t)}#c(){this.dispatchEvent(new CustomEvent("slicc-launcher-toggle",{detail:{open:this.open},bubbles:!0,composed:!0}))}#u(){let e=this.appUrl;if(this.#i.toggleAttribute("hidden",!!e),!e){this.#o&&(this.#o="",this.#s.removeAttribute("src"));return}e!==this.#o&&(this.#o=e,this.#s.src=e)}#p=e=>{if(!e.isPrimary||e.button!==0)return;let a=this.#t.getBoundingClientRect();this.#n={pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startLeft:a.left,startTop:a.top,width:a.width,height:a.height,lastX:e.clientX,lastY:e.clientY,lastTimestamp:e.timeStamp,velocityX:0,velocityY:0,dragging:!1},this.#l=!1,this.#t.setPointerCapture(e.pointerId),e.preventDefault()};#m=e=>{let a=this.#n;if(!a||e.pointerId!==a.pointerId)return;let r=e.clientX-a.startX,s=e.clientY-a.startY,i=Math.hypot(r,s);!a.dragging&&Ya(i,0)&&(a.dragging=!0,this.setAttribute("dragging",""));let o=Math.max(e.timeStamp-a.lastTimestamp,1),n=(e.clientX-a.lastX)/o,h=(e.clientY-a.lastY)/o;if(a.velocityX=a.velocityX===0?n:a.velocityX*.35+n*.65,a.velocityY=a.velocityY===0?h:a.velocityY*.35+h*.65,a.lastX=e.clientX,a.lastY=e.clientY,a.lastTimestamp=e.timeStamp,!a.dragging)return;let l=Math.max(18,window.innerWidth-a.width-18),p=Math.max(18,window.innerHeight-a.height-18),c=eE(a.startLeft+r,18,l),u=eE(a.startTop+s,18,p);this.#t.style.left=`${c}px`,this.#t.style.top=`${u}px`,this.#t.style.right="auto",this.#t.style.bottom="auto",e.preventDefault()};#x=e=>{this.#g(e,!0)};#f=e=>{this.#g(e,!1)};#g(e,a){let r=this.#n;if(!r||e.pointerId!==r.pointerId)return;let s=Math.hypot(e.clientX-r.startX,e.clientY-r.startY),i=Math.hypot(r.velocityX,r.velocityY);if(a&&(r.dragging||Ya(s,i))){let n=Bl({clientX:e.clientX,clientY:e.clientY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,velocityXPxPerMs:r.velocityX,velocityYPxPerMs:r.velocityY});this.corner=n,this.dispatchEvent(new CustomEvent("slicc-launcher-move",{detail:{corner:n},bubbles:!0,composed:!0})),this.#l=!0,e.preventDefault()}this.#t.hasPointerCapture(e.pointerId)&&this.#t.releasePointerCapture(e.pointerId),this.#n=null,this.removeAttribute("dragging"),this.#t.style.left="",this.#t.style.top="",this.#t.style.right="",this.#t.style.bottom=""}};x("slicc-launcher",bt);var GP=new Set(["user","feedback","project"]),ZP={user:{hue:"--rose",label:"user"},feedback:{hue:"--cyan",label:"feedback"},project:{hue:"--violet",label:"project"}};function YP(t){return t==="feedback"||t==="project"?t:"user"}var XP=`
2804
2804
  :host {
2805
2805
  display: inline-flex;
2806
2806
  vertical-align: middle;
@@ -3101,7 +3101,7 @@ slicc-camera-dialog .slicc-camera__btn--snap {
3101
3101
  slicc-camera-dialog .slicc-camera__btn--snap:hover {
3102
3102
  background: color-mix(in srgb, var(--ink) 85%, var(--canvas));
3103
3103
  }
3104
- `,iE="slicc-camera-dialog-style";function fR(t){if(t.getElementById(iE))return;let e=t.createElement("style");e.id=iE,e.textContent=uR,(t.head??t.documentElement).appendChild(e)}var mR="Take a photo",ar=class extends HTMLElement{static observedAttributes=["heading","preferred-device"];media=null;#e;#t;#a;#r;#s=!1;#i=null;#o=null;connectedCallback(){fR(this.ownerDocument),this.#x()}disconnectedCallback(){this.#m()}attributeChangedCallback(e){e==="heading"&&this.#s&&this.#e.setAttribute("heading",this.heading)}get heading(){return this.getAttribute("heading")??mR}set heading(e){e==null?this.removeAttribute("heading"):this.setAttribute("heading",e)}get preferredDevice(){return this.getAttribute("preferred-device")}set preferredDevice(e){e==null?this.removeAttribute("preferred-device"):this.setAttribute("preferred-device",e)}#n(){return this.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}async open(){this.#x();let e=this.#n();if(!e)return null;try{this.#i=await this.#l(e,this.preferredDevice)}catch{return null}return this.#h(this.#i),await this.#d(e),this.#e.setAttribute("heading",this.heading),this.#e.show?.(),new Promise(a=>{this.#o=a})}async#l(e,a){if(a)try{return await e.getUserMedia({video:{deviceId:{exact:a}}})}catch{}return e.getUserMedia({video:!0})}#h(e){this.#t.srcObject=e,this.#t.play?.()?.catch(()=>{});let a=e.getVideoTracks()[0]?.getSettings?.().facingMode;this.#t.toggleAttribute("data-mirrored",a!=="environment")}async#d(e){let a=[];try{a=(await e.enumerateDevices()).filter(s=>s.kind==="videoinput")}catch{a=[]}this.#a.replaceChildren(...a.map((s,i)=>d("option",{value:s.deviceId},s.label||`Camera ${i+1}`)));let r=this.#i?.getVideoTracks()[0]?.getSettings?.().deviceId;r&&(this.#a.value=r),this.#a.toggleAttribute("hidden",a.length<2)}async#c(e){let a=this.#n();if(a){this.#r.textContent="";try{let r=await a.getUserMedia({video:{deviceId:{exact:e}}});this.#m(),this.#i=r,this.#h(r),this.dispatchEvent(new CustomEvent("slicc-camera-device-change",{detail:{deviceId:e},bubbles:!0,composed:!0}))}catch{this.#r.textContent="Could not switch camera \u2014 keeping the current one."}}}#f(){let e=this.ownerDocument.createElement("canvas");if(e.width=this.#t.videoWidth,e.height=this.#t.videoHeight,e.width===0||e.height===0){this.#r.textContent="No frame yet \u2014 give the camera a moment.";return}e.getContext("2d")?.drawImage(this.#t,0,0);let a=e.toDataURL("image/png");this.dispatchEvent(new CustomEvent("slicc-camera-capture",{detail:{dataUrl:a},bubbles:!0,composed:!0})),this.#p(a)}#p(e){this.#m();let a=this.#o;this.#o=null,this.#e.hide?.(),a?.(e)}#m(){for(let e of this.#i?.getTracks()??[])e.stop();this.#i=null,this.#t&&(this.#t.srcObject=null)}#x(){if(this.#s)return;this.#s=!0,this.#t=d("video",{class:"slicc-camera__video",part:"video",autoplay:!0,muted:!0,playsinline:!0}),this.#a=d("select",{class:"slicc-camera__select",part:"picker","aria-label":"Camera",hidden:!0}),this.#a.addEventListener("change",()=>{this.#c(this.#a.value)}),this.#r=d("div",{class:"slicc-camera__status"});let e=d("button",{type:"button",class:"slicc-camera__btn",part:"cancel",slot:"footer"},"Cancel");e.addEventListener("click",()=>this.#p(null));let a=d("button",{type:"button",class:"slicc-camera__btn slicc-camera__btn--snap",part:"snap",slot:"footer"},b("camera",{size:14})," Snap");a.addEventListener("click",()=>this.#f());let r=d("div",{class:"slicc-camera__body"},this.#t,this.#a,this.#r);this.#e=this.ownerDocument.createElement("slicc-dialog"),this.#e.setAttribute("heading",this.heading),this.#e.append(r,e,a),this.#e.addEventListener("slicc-dialog-close",()=>{this.#o&&this.#p(null)}),this.append(this.#e)}};x("slicc-camera-dialog",ar);var Mt={debug(t,e){e!==void 0?console.debug(`[slicc-permissions] ${t}`,e):console.debug(`[slicc-permissions] ${t}`)},error(t,e){e!==void 0?console.error(`[slicc-permissions] ${t}`,e):console.error(`[slicc-permissions] ${t}`)}},xR=new Set(["microphone","camera"]);function gR(t){return typeof navigator>"u"||!navigator.permissions?.query?Promise.resolve("prompt"):navigator.permissions.query({name:t}).then(e=>e.state)}var vR=`
3104
+ `,iE="slicc-camera-dialog-style";function fR(t){if(t.getElementById(iE))return;let e=t.createElement("style");e.id=iE,e.textContent=uR,(t.head??t.documentElement).appendChild(e)}var mR="Take a photo",ar=class extends HTMLElement{static observedAttributes=["heading","preferred-device"];media=null;#e;#t;#a;#r;#s=!1;#i=null;#o=null;connectedCallback(){fR(this.ownerDocument),this.#x()}disconnectedCallback(){this.#m()}attributeChangedCallback(e){e==="heading"&&this.#s&&this.#e.setAttribute("heading",this.heading)}get heading(){return this.getAttribute("heading")??mR}set heading(e){e==null?this.removeAttribute("heading"):this.setAttribute("heading",e)}get preferredDevice(){return this.getAttribute("preferred-device")}set preferredDevice(e){e==null?this.removeAttribute("preferred-device"):this.setAttribute("preferred-device",e)}#n(){return this.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}async open(){this.#x();let e=this.#n();if(!e)return null;try{this.#i=await this.#l(e,this.preferredDevice)}catch{return null}return this.#h(this.#i),await this.#d(e),this.#e.setAttribute("heading",this.heading),this.#e.show?.(),new Promise(a=>{this.#o=a})}async#l(e,a){if(a)try{return await e.getUserMedia({video:{deviceId:{exact:a}}})}catch{}return e.getUserMedia({video:!0})}#h(e){this.#t.srcObject=e,this.#t.play?.()?.catch(()=>{});let a=e.getVideoTracks()[0]?.getSettings?.().facingMode;this.#t.toggleAttribute("data-mirrored",a!=="environment")}async#d(e){let a=[];try{a=(await e.enumerateDevices()).filter(s=>s.kind==="videoinput")}catch{a=[]}this.#a.replaceChildren(...a.map((s,i)=>d("option",{value:s.deviceId},s.label||`Camera ${i+1}`)));let r=this.#i?.getVideoTracks()[0]?.getSettings?.().deviceId;r&&(this.#a.value=r),this.#a.toggleAttribute("hidden",a.length<2)}async#c(e){let a=this.#n();if(a){this.#r.textContent="";try{let r=await a.getUserMedia({video:{deviceId:{exact:e}}});this.#m(),this.#i=r,this.#h(r),this.dispatchEvent(new CustomEvent("slicc-camera-device-change",{detail:{deviceId:e},bubbles:!0,composed:!0}))}catch{this.#r.textContent="Could not switch camera \u2014 keeping the current one."}}}#u(){let e=this.ownerDocument.createElement("canvas");if(e.width=this.#t.videoWidth,e.height=this.#t.videoHeight,e.width===0||e.height===0){this.#r.textContent="No frame yet \u2014 give the camera a moment.";return}e.getContext("2d")?.drawImage(this.#t,0,0);let a=e.toDataURL("image/png");this.dispatchEvent(new CustomEvent("slicc-camera-capture",{detail:{dataUrl:a},bubbles:!0,composed:!0})),this.#p(a)}#p(e){this.#m();let a=this.#o;this.#o=null,this.#e.hide?.(),a?.(e)}#m(){for(let e of this.#i?.getTracks()??[])e.stop();this.#i=null,this.#t&&(this.#t.srcObject=null)}#x(){if(this.#s)return;this.#s=!0,this.#t=d("video",{class:"slicc-camera__video",part:"video",autoplay:!0,muted:!0,playsinline:!0}),this.#a=d("select",{class:"slicc-camera__select",part:"picker","aria-label":"Camera",hidden:!0}),this.#a.addEventListener("change",()=>{this.#c(this.#a.value)}),this.#r=d("div",{class:"slicc-camera__status"});let e=d("button",{type:"button",class:"slicc-camera__btn",part:"cancel",slot:"footer"},"Cancel");e.addEventListener("click",()=>this.#p(null));let a=d("button",{type:"button",class:"slicc-camera__btn slicc-camera__btn--snap",part:"snap",slot:"footer"},b("camera",{size:14})," Snap");a.addEventListener("click",()=>this.#u());let r=d("div",{class:"slicc-camera__body"},this.#t,this.#a,this.#r);this.#e=this.ownerDocument.createElement("slicc-dialog"),this.#e.setAttribute("heading",this.heading),this.#e.append(r,e,a),this.#e.addEventListener("slicc-dialog-close",()=>{this.#o&&this.#p(null)}),this.append(this.#e)}};x("slicc-camera-dialog",ar);var Mt={debug(t,e){e!==void 0?console.debug(`[slicc-permissions] ${t}`,e):console.debug(`[slicc-permissions] ${t}`)},error(t,e){e!==void 0?console.error(`[slicc-permissions] ${t}`,e):console.error(`[slicc-permissions] ${t}`)}},xR=new Set(["microphone","camera"]);function gR(t){return typeof navigator>"u"||!navigator.permissions?.query?Promise.resolve("prompt"):navigator.permissions.query({name:t}).then(e=>e.state)}var vR=`
3105
3105
  slicc-permissions {
3106
3106
  /* Invisible host by default \u2014 only the drop overlay paints, and only
3107
3107
  while a folder drag is in flight. Hosts can give the element a fixed
@@ -3272,7 +3272,7 @@ slicc-permissions .slicc-permissions__prompt-btn:disabled {
3272
3272
  transform: translateX(-50%) translateY(0);
3273
3273
  }
3274
3274
  }
3275
- `,oE="slicc-permissions-style";function bR(t){if(t.getElementById(oE))return;let e=t.createElement("style");e.id=oE,e.textContent=vR,(t.head??t.documentElement).appendChild(e)}function rr(t){let e=t.dataTransfer?.types;if(!e)return!1;for(let a=0;a<e.length;a++)if(e[a]==="Files")return!0;return!1}var sr=class extends HTMLElement{providers={};permissionQuery=null;#e;#t=!1;#a=0;#r=null;connectedCallback(){bR(this.ownerDocument),this.#y();let e=this.ownerDocument;e.addEventListener("dragenter",this.#v),e.addEventListener("dragover",this.#M),e.addEventListener("dragleave",this.#_),e.addEventListener("drop",this.#b)}disconnectedCallback(){let e=this.ownerDocument;e.removeEventListener("dragenter",this.#v),e.removeEventListener("dragover",this.#M),e.removeEventListener("dragleave",this.#_),e.removeEventListener("drop",this.#b),this.#a=0,this.removeAttribute("data-dropping"),this.#r&&this.#r.cancel()}async request(e,a){switch(e){case"camera":return this.#o(a);case"microphone":return this.#n(a);case"screenshare":return this.#h(a);case"usb":return this.#d(a);case"hid":return this.#c(a);case"serial":return this.#f(a);case"filesystem":return this.#p();case"popup":return this.#m(a);default:return null}}async prompt(e){if(!e.kinds.length)return{status:"granted",grants:[]};if(e.skipIfGranted){let a=await this.#s(e);if(a)return a}return this.#r&&this.#r.cancel(),new Promise(a=>{this.#S(e,a)})}async#s(e){if(!e.kinds.every(i=>xR.has(i)))return Mt.debug("prompt: showing dialog (a gesture-bound kind was requested)",{kinds:e.kinds}),null;let a=this.permissionQuery??gR,r;try{r=await Promise.all(e.kinds.map(i=>a(i)))}catch(i){return Mt.error("prompt: permission query threw; showing dialog",i),null}if(Mt.debug("prompt: queried permission state",{kinds:e.kinds,states:r}),!r.every(i=>i==="granted"))return Mt.debug("prompt: not all kinds granted; showing dialog"),null;let s=[];for(let i of e.kinds){let o=await this.request(i,e.requestOptions?.[i]);if(!o)return Mt.error("prompt: acquisition failed after granted state",{kind:i}),{status:"error",grants:s,reason:"error"};s.push(o)}return Mt.debug("prompt: short-circuited dialog (already granted)",{kinds:e.kinds}),{status:"granted",grants:s}}#i(){return this.providers.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}async#o(e){let a=this.#i();if(!a)return this.#u("camera","unavailable","mediaDevices unavailable");try{let r=await a.getUserMedia(e?.constraints??{video:!0});return this.#x({kind:"camera",stream:r})}catch(r){return this.#g("camera",r)}}async#n(e){let a=this.#i();if(!a)return this.#u("microphone","unavailable","mediaDevices unavailable");try{let r=await a.getUserMedia(e?.constraints??{audio:!0});return this.#x({kind:"microphone",stream:r})}catch(r){return this.#g("microphone",r)}}#l(){if(this.providers.screenshare)return this.providers.screenshare;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;return e&&typeof e.getDisplayMedia=="function"?{getDisplayMedia:a=>e.getDisplayMedia(a)}:null}async#h(e){let a=this.#l();if(!a)return this.#u("screenshare","unavailable","getDisplayMedia unavailable");try{let r=await a.getDisplayMedia(e?.constraints??{video:!0});return this.#x({kind:"screenshare",stream:r})}catch(r){return this.#g("screenshare",r)}}async#d(e){let a=this.providers.usb??globalThis.navigator?.usb??null;if(!a?.requestDevice)return this.#u("usb","unavailable","WebUSB unavailable");try{let r=await a.requestDevice({filters:e?.filters??[]});return r?this.#x({kind:"usb",device:r}):this.#u("usb","cancelled")}catch(r){return this.#g("usb",r)}}async#c(e){let a=this.providers.hid??globalThis.navigator?.hid??null;if(!a?.requestDevice)return this.#u("hid","unavailable","WebHID unavailable");try{let r=await a.requestDevice({filters:e?.filters??[]}),s=Array.isArray(r)?r:r?[r]:[];return s.length===0?this.#u("hid","cancelled"):this.#x({kind:"hid",device:s[0],devices:s})}catch(r){return this.#g("hid",r)}}async#f(e){let a=this.providers.serial??globalThis.navigator?.serial??null;if(!a?.requestPort)return this.#u("serial","unavailable","Web Serial unavailable");try{let r=await a.requestPort(e?.filters?.length?{filters:e.filters}:{});return r?this.#x({kind:"serial",port:r}):this.#u("serial","cancelled")}catch(r){return this.#g("serial",r)}}async#p(){let e=this.providers.filesystem??(typeof window<"u"&&"showDirectoryPicker"in window&&window||null);if(!e?.showDirectoryPicker)return this.#u("filesystem","unavailable","showDirectoryPicker unavailable");try{let a=await e.showDirectoryPicker({mode:"readwrite"});return this.#x({kind:"filesystem",handle:a,source:"picker",permission:"granted"})}catch(a){return this.#g("filesystem",a)}}#m(e){let a=e?.url;if(!a)return this.#u("popup","error","popup request missing url");let r=e?.features??"width=500,height=700,popup=yes",s=this.providers.popup??(typeof window<"u"?{open:(o,n)=>window.open(o,"_blank",n)}:null);if(!s)return this.#u("popup","unavailable","window.open unavailable");let i;try{i=s.open(a,r)}catch(o){return this.#g("popup",o)}return i?this.#x({kind:"popup",window:i}):this.#u("popup","error","window.open returned null (popup blocked?)")}#x(e){return this.dispatchEvent(new CustomEvent("slicc-permission-grant",{detail:e,bubbles:!0,composed:!0})),e}#u(e,a,r){return this.dispatchEvent(new CustomEvent("slicc-permission-deny",{detail:{kind:e,reason:a,message:r},bubbles:!0,composed:!0})),null}#g(e,a){return a instanceof Error&&(a.name==="AbortError"||a.name==="NotFoundError")?this.#u(e,"cancelled"):this.#u(e,"error",a instanceof Error?a.message:String(a))}#v=e=>{rr(e)&&(e.preventDefault(),this.#a++,this.setAttribute("data-dropping",""))};#M=e=>{rr(e)&&e.preventDefault()};#_=e=>{rr(e)&&(this.#a=Math.max(0,this.#a-1),this.#a===0&&this.removeAttribute("data-dropping"))};#b=e=>{if(!rr(e))return;e.preventDefault(),this.#a=0,this.removeAttribute("data-dropping");let a=e.dataTransfer?.items;if(!a?.length)return;let r=[];for(let s=0;s<a.length;s++){let i=a[s];i.kind!=="file"||typeof i.getAsFileSystemHandle!="function"||r.push(i.getAsFileSystemHandle())}r.length!==0&&this.#w(r)};async#w(e){let a;try{a=await Promise.all(e)}catch(o){this.#u("filesystem","error",o instanceof Error?o.message:String(o));return}let r=a.find(o=>o?.kind==="directory");if(!r){this.#u("filesystem","cancelled","no directory in drop");return}let s=r,i;if(s.requestPermission)try{i=await s.requestPermission({mode:"readwrite"})}catch(o){this.#u("filesystem","error",o instanceof Error?o.message:String(o));return}else i="granted";if(i!=="granted"){this.#u("filesystem","cancelled",`permission ${i}`);return}this.#x({kind:"filesystem",handle:r,source:"drop",permission:i})}#y(){if(this.#t)return;this.#t=!0;let e=d("div",{class:"slicc-permissions__drop-inner"},b("folder-up",{size:32}),d("div",null,"Drop a folder to mount it (read-write)"));this.#e=d("div",{class:"slicc-permissions__drop",part:"drop","aria-hidden":"true"},e),this.append(this.#e)}#S(e,a){let r=e.heading??_R(e.kinds),s=e.grantLabel??"Allow",i=e.cancelLabel??"Cancel",o=`slicc-permissions__heading-${Math.random().toString(36).slice(2,8)}`,n=`slicc-permissions__desc-${Math.random().toString(36).slice(2,8)}`,h=d("button",{type:"button",class:"slicc-permissions__prompt-btn","data-variant":"ghost",part:"prompt-cancel"},i),l=d("button",{type:"button",class:"slicc-permissions__prompt-btn","data-variant":"primary",part:"prompt-grant"},s),p=d("div",{class:"slicc-permissions__prompt-icons","aria-hidden":"true"},...e.kinds.map(P=>d("span",{class:"slicc-permissions__prompt-icon"},b(MR(P),{size:22})))),c=d("div",{class:"slicc-permissions__prompt",part:"prompt",role:"dialog","aria-modal":"true","aria-labelledby":o,"aria-describedby":n,tabindex:"-1",popover:"manual"},p,d("h2",{class:"slicc-permissions__prompt-heading",id:o},r),d("p",{class:"slicc-permissions__prompt-desc",id:n},e.description),d("div",{class:"slicc-permissions__prompt-actions"},h,l));this.append(c);let u=c;if(typeof u.showPopover=="function")try{u.showPopover()}catch{}let m=!1,f=this.ownerDocument.activeElement??null,g=()=>{if(c.removeEventListener("keydown",T),c.remove(),f&&typeof f.focus=="function")try{f.focus()}catch{}this.#r=null},y=(P,H)=>{if(!m){m=!0;for(let L of e.kinds)this.#u(L,P,H);g(),a({status:"cancelled",grants:[],reason:P,message:H})}},T=P=>{if(P.key==="Escape"){P.preventDefault(),y("cancelled");return}if(P.key==="Tab"){let H=[h,l],L=this.ownerDocument.activeElement,R=H.indexOf(L);if(R===-1){H[0].focus(),P.preventDefault();return}(P.shiftKey?H[(R-1+H.length)%H.length]:H[(R+1)%H.length]).focus(),P.preventDefault()}};h.addEventListener("click",()=>y("cancelled")),l.addEventListener("click",async()=>{if(m)return;m=!0,l.disabled=!0,h.disabled=!0;let P=[],H=null;for(let R of e.kinds){let O=await this.request(R,e.requestOptions?.[R]);if(O)P.push(O);else{H={kind:R,reason:"cancelled"};break}}let L=H?e.kinds.indexOf(H.kind):-1;if(H&&L>=0)for(let R=L+1;R<e.kinds.length;R++)this.#u(e.kinds[R],"cancelled");g(),a(H?{status:"cancelled",grants:P,reason:"cancelled"}:{status:"granted",grants:P})}),c.addEventListener("keydown",T),this.#r={cancel:()=>y("cancelled")},requestAnimationFrame(()=>{c.setAttribute("data-open",""),l.focus()})}};function MR(t){switch(t){case"camera":return"camera";case"microphone":return"mic";case"screenshare":return"monitor-up";case"usb":return"usb";case"hid":return"keyboard";case"serial":return"cable";case"filesystem":return"folder";case"popup":return"external-link"}}function nE(t){switch(t){case"camera":return"camera";case"microphone":return"microphone";case"screenshare":return"screen";case"usb":return"USB device";case"hid":return"HID device";case"serial":return"serial port";case"filesystem":return"folder";case"popup":return"sign-in window"}}function _R(t){if(t.length===1)return`Allow access to your ${nE(t[0])}?`;let e=t.map(nE),a=e.pop();return`Allow access to your ${e.join(", ")} and ${a}?`}x("slicc-permissions",sr);var yR=new Set(["top","bottom","left","right"]),wR=`
3275
+ `,oE="slicc-permissions-style";function bR(t){if(t.getElementById(oE))return;let e=t.createElement("style");e.id=oE,e.textContent=vR,(t.head??t.documentElement).appendChild(e)}function rr(t){let e=t.dataTransfer?.types;if(!e)return!1;for(let a=0;a<e.length;a++)if(e[a]==="Files")return!0;return!1}var sr=class extends HTMLElement{providers={};permissionQuery=null;#e;#t=!1;#a=0;#r=null;connectedCallback(){bR(this.ownerDocument),this.#y();let e=this.ownerDocument;e.addEventListener("dragenter",this.#v),e.addEventListener("dragover",this.#_),e.addEventListener("dragleave",this.#b),e.addEventListener("drop",this.#M)}disconnectedCallback(){let e=this.ownerDocument;e.removeEventListener("dragenter",this.#v),e.removeEventListener("dragover",this.#_),e.removeEventListener("dragleave",this.#b),e.removeEventListener("drop",this.#M),this.#a=0,this.removeAttribute("data-dropping"),this.#r&&this.#r.cancel()}async request(e,a){switch(e){case"camera":return this.#o(a);case"microphone":return this.#n(a);case"screenshare":return this.#h(a);case"usb":return this.#d(a);case"hid":return this.#c(a);case"serial":return this.#u(a);case"filesystem":return this.#p();case"popup":return this.#m(a);default:return null}}async prompt(e){if(!e.kinds.length)return{status:"granted",grants:[]};if(e.skipIfGranted){let a=await this.#s(e);if(a)return a}return this.#r&&this.#r.cancel(),new Promise(a=>{this.#S(e,a)})}async#s(e){if(!e.kinds.every(i=>xR.has(i)))return Mt.debug("prompt: showing dialog (a gesture-bound kind was requested)",{kinds:e.kinds}),null;let a=this.permissionQuery??gR,r;try{r=await Promise.all(e.kinds.map(i=>a(i)))}catch(i){return Mt.error("prompt: permission query threw; showing dialog",i),null}if(Mt.debug("prompt: queried permission state",{kinds:e.kinds,states:r}),!r.every(i=>i==="granted"))return Mt.debug("prompt: not all kinds granted; showing dialog"),null;let s=[];for(let i of e.kinds){let o=await this.request(i,e.requestOptions?.[i]);if(!o)return Mt.error("prompt: acquisition failed after granted state",{kind:i}),{status:"error",grants:s,reason:"error"};s.push(o)}return Mt.debug("prompt: short-circuited dialog (already granted)",{kinds:e.kinds}),{status:"granted",grants:s}}#i(){return this.providers.media??(typeof navigator<"u"?navigator.mediaDevices:null)??null}async#o(e){let a=this.#i();if(!a)return this.#f("camera","unavailable","mediaDevices unavailable");try{let r=await a.getUserMedia(e?.constraints??{video:!0});return this.#x({kind:"camera",stream:r})}catch(r){return this.#g("camera",r)}}async#n(e){let a=this.#i();if(!a)return this.#f("microphone","unavailable","mediaDevices unavailable");try{let r=await a.getUserMedia(e?.constraints??{audio:!0});return this.#x({kind:"microphone",stream:r})}catch(r){return this.#g("microphone",r)}}#l(){if(this.providers.screenshare)return this.providers.screenshare;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;return e&&typeof e.getDisplayMedia=="function"?{getDisplayMedia:a=>e.getDisplayMedia(a)}:null}async#h(e){let a=this.#l();if(!a)return this.#f("screenshare","unavailable","getDisplayMedia unavailable");try{let r=await a.getDisplayMedia(e?.constraints??{video:!0});return this.#x({kind:"screenshare",stream:r})}catch(r){return this.#g("screenshare",r)}}async#d(e){let a=this.providers.usb??globalThis.navigator?.usb??null;if(!a?.requestDevice)return this.#f("usb","unavailable","WebUSB unavailable");try{let r=await a.requestDevice({filters:e?.filters??[]});return r?this.#x({kind:"usb",device:r}):this.#f("usb","cancelled")}catch(r){return this.#g("usb",r)}}async#c(e){let a=this.providers.hid??globalThis.navigator?.hid??null;if(!a?.requestDevice)return this.#f("hid","unavailable","WebHID unavailable");try{let r=await a.requestDevice({filters:e?.filters??[]}),s=Array.isArray(r)?r:r?[r]:[];return s.length===0?this.#f("hid","cancelled"):this.#x({kind:"hid",device:s[0],devices:s})}catch(r){return this.#g("hid",r)}}async#u(e){let a=this.providers.serial??globalThis.navigator?.serial??null;if(!a?.requestPort)return this.#f("serial","unavailable","Web Serial unavailable");try{let r=await a.requestPort(e?.filters?.length?{filters:e.filters}:{});return r?this.#x({kind:"serial",port:r}):this.#f("serial","cancelled")}catch(r){return this.#g("serial",r)}}async#p(){let e=this.providers.filesystem??(typeof window<"u"&&"showDirectoryPicker"in window&&window||null);if(!e?.showDirectoryPicker)return this.#f("filesystem","unavailable","showDirectoryPicker unavailable");try{let a=await e.showDirectoryPicker({mode:"readwrite"});return this.#x({kind:"filesystem",handle:a,source:"picker",permission:"granted"})}catch(a){return this.#g("filesystem",a)}}#m(e){let a=e?.url;if(!a)return this.#f("popup","error","popup request missing url");let r=e?.features??"width=500,height=700,popup=yes",s=this.providers.popup??(typeof window<"u"?{open:(o,n)=>window.open(o,"_blank",n)}:null);if(!s)return this.#f("popup","unavailable","window.open unavailable");let i;try{i=s.open(a,r)}catch(o){return this.#g("popup",o)}return i?this.#x({kind:"popup",window:i}):this.#f("popup","error","window.open returned null (popup blocked?)")}#x(e){return this.dispatchEvent(new CustomEvent("slicc-permission-grant",{detail:e,bubbles:!0,composed:!0})),e}#f(e,a,r){return this.dispatchEvent(new CustomEvent("slicc-permission-deny",{detail:{kind:e,reason:a,message:r},bubbles:!0,composed:!0})),null}#g(e,a){return a instanceof Error&&(a.name==="AbortError"||a.name==="NotFoundError")?this.#f(e,"cancelled"):this.#f(e,"error",a instanceof Error?a.message:String(a))}#v=e=>{rr(e)&&(e.preventDefault(),this.#a++,this.setAttribute("data-dropping",""))};#_=e=>{rr(e)&&e.preventDefault()};#b=e=>{rr(e)&&(this.#a=Math.max(0,this.#a-1),this.#a===0&&this.removeAttribute("data-dropping"))};#M=e=>{if(!rr(e))return;e.preventDefault(),this.#a=0,this.removeAttribute("data-dropping");let a=e.dataTransfer?.items;if(!a?.length)return;let r=[];for(let s=0;s<a.length;s++){let i=a[s];i.kind!=="file"||typeof i.getAsFileSystemHandle!="function"||r.push(i.getAsFileSystemHandle())}r.length!==0&&this.#w(r)};async#w(e){let a;try{a=await Promise.all(e)}catch(o){this.#f("filesystem","error",o instanceof Error?o.message:String(o));return}let r=a.find(o=>o?.kind==="directory");if(!r){this.#f("filesystem","cancelled","no directory in drop");return}let s=r,i;if(s.requestPermission)try{i=await s.requestPermission({mode:"readwrite"})}catch(o){this.#f("filesystem","error",o instanceof Error?o.message:String(o));return}else i="granted";if(i!=="granted"){this.#f("filesystem","cancelled",`permission ${i}`);return}this.#x({kind:"filesystem",handle:r,source:"drop",permission:i})}#y(){if(this.#t)return;this.#t=!0;let e=d("div",{class:"slicc-permissions__drop-inner"},b("folder-up",{size:32}),d("div",null,"Drop a folder to mount it (read-write)"));this.#e=d("div",{class:"slicc-permissions__drop",part:"drop","aria-hidden":"true"},e),this.append(this.#e)}#S(e,a){let r=e.heading??_R(e.kinds),s=e.grantLabel??"Allow",i=e.cancelLabel??"Cancel",o=`slicc-permissions__heading-${Math.random().toString(36).slice(2,8)}`,n=`slicc-permissions__desc-${Math.random().toString(36).slice(2,8)}`,h=d("button",{type:"button",class:"slicc-permissions__prompt-btn","data-variant":"ghost",part:"prompt-cancel"},i),l=d("button",{type:"button",class:"slicc-permissions__prompt-btn","data-variant":"primary",part:"prompt-grant"},s),p=d("div",{class:"slicc-permissions__prompt-icons","aria-hidden":"true"},...e.kinds.map(P=>d("span",{class:"slicc-permissions__prompt-icon"},b(MR(P),{size:22})))),c=d("div",{class:"slicc-permissions__prompt",part:"prompt",role:"dialog","aria-modal":"true","aria-labelledby":o,"aria-describedby":n,tabindex:"-1",popover:"manual"},p,d("h2",{class:"slicc-permissions__prompt-heading",id:o},r),d("p",{class:"slicc-permissions__prompt-desc",id:n},e.description),d("div",{class:"slicc-permissions__prompt-actions"},h,l));this.append(c);let u=c;if(typeof u.showPopover=="function")try{u.showPopover()}catch{}let m=!1,f=this.ownerDocument.activeElement??null,g=()=>{if(c.removeEventListener("keydown",T),c.remove(),f&&typeof f.focus=="function")try{f.focus()}catch{}this.#r=null},y=(P,H)=>{if(!m){m=!0;for(let L of e.kinds)this.#f(L,P,H);g(),a({status:"cancelled",grants:[],reason:P,message:H})}},T=P=>{if(P.key==="Escape"){P.preventDefault(),y("cancelled");return}if(P.key==="Tab"){let H=[h,l],L=this.ownerDocument.activeElement,R=H.indexOf(L);if(R===-1){H[0].focus(),P.preventDefault();return}(P.shiftKey?H[(R-1+H.length)%H.length]:H[(R+1)%H.length]).focus(),P.preventDefault()}};h.addEventListener("click",()=>y("cancelled")),l.addEventListener("click",async()=>{if(m)return;m=!0,l.disabled=!0,h.disabled=!0;let P=[],H=null;for(let R of e.kinds){let O=await this.request(R,e.requestOptions?.[R]);if(O)P.push(O);else{H={kind:R,reason:"cancelled"};break}}let L=H?e.kinds.indexOf(H.kind):-1;if(H&&L>=0)for(let R=L+1;R<e.kinds.length;R++)this.#f(e.kinds[R],"cancelled");g(),a(H?{status:"cancelled",grants:P,reason:"cancelled"}:{status:"granted",grants:P})}),c.addEventListener("keydown",T),this.#r={cancel:()=>y("cancelled")},requestAnimationFrame(()=>{c.setAttribute("data-open",""),l.focus()})}};function MR(t){switch(t){case"camera":return"camera";case"microphone":return"mic";case"screenshare":return"monitor-up";case"usb":return"usb";case"hid":return"keyboard";case"serial":return"cable";case"filesystem":return"folder";case"popup":return"external-link"}}function nE(t){switch(t){case"camera":return"camera";case"microphone":return"microphone";case"screenshare":return"screen";case"usb":return"USB device";case"hid":return"HID device";case"serial":return"serial port";case"filesystem":return"folder";case"popup":return"sign-in window"}}function _R(t){if(t.length===1)return`Allow access to your ${nE(t[0])}?`;let e=t.map(nE),a=e.pop();return`Allow access to your ${e.join(", ")} and ${a}?`}x("slicc-permissions",sr);var yR=new Set(["top","bottom","left","right"]),wR=`
3276
3276
  :host { position: relative; display: inline-flex; }
3277
3277
  :host([hidden]) { display: none; }
3278
3278
  .tip {
@@ -4006,7 +4006,7 @@ slicc-press-button {
4006
4006
  .slicc-scoop-switcher .scoop { width: 34px; }
4007
4007
  .slicc-scoop-switcher slicc-pill.scoop { --pill-w: 34px; }
4008
4008
  }
4009
- `,wE="slicc-scoop-switcher-style";function TB(t){if(t.getElementById(wE))return;let e=t.createElement("style");e.id=wE,e.textContent=LB,(t.head??t.documentElement).appendChild(e)}function HB(t){return AB[t]??"var(--rose)"}function SE(t,e){let a=t.getAttribute("eyes");return a==="open"||a==="none"||a==="dead"?a:e}var wr=class extends HTMLElement{static get observedAttributes(){return["active","attention"]}#e=[];#t=null;#a=null;#r=!1;#s=null;#i=!1;#o=null;#n=e=>{let a=this.#f(e);a!==this.#o&&(this.#o=a,this.#m())};#l=()=>{this.#o!==null&&(this.#o=null,this.#m())};connectedCallback(){TB(this.ownerDocument),this.classList.add("slicc-scoop-switcher"),this.setAttribute("part","row"),this.#i||(this.#d(),this.#i=!0),this.#s||(this.#s=e=>this.#v(e),this.addEventListener("click",this.#s)),this.addEventListener("pointerover",this.#n),this.addEventListener("pointerleave",this.#l),this.#c(),this.#M(),requestAnimationFrame(()=>this.reflow())}disconnectedCallback(){this.#a?.disconnect(),this.#a=null,this.#s&&(this.removeEventListener("click",this.#s),this.#s=null),this.removeEventListener("pointerover",this.#n),this.removeEventListener("pointerleave",this.#l)}attributeChangedCallback(e){this.#i&&(e==="active"?this.#x():e==="attention"&&this.#m())}get scoops(){return this.#e.map(e=>({...e}))}set scoops(e){this.#e=Array.isArray(e)?e.map(a=>({...a})):[],this.#i&&this.isConnected&&(this.#c(),this.reflow())}get attention(){return this.getAttribute("attention")}set attention(e){e==null?this.removeAttribute("attention"):this.setAttribute("attention",e)}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}reflow(){if(!(!this.isConnected||this.#r)){this.#r=!0;try{this.#h()}finally{this.#r=!1}}}#h(){let e=[...this.querySelectorAll("slicc-pill.scoop")];for(let l of e)l.classList.remove("hide");let a=e.filter(l=>l.offsetParent!==null||l.offsetWidth>0);if(a.length===0){this.#u([]);return}let r=this.clientWidth;if(r<=0){this.#u([]),requestAnimationFrame(()=>{this.isConnected&&this.clientWidth>0&&this.reflow()});return}let s=a.map(l=>l.offsetWidth);if(s.reduce((l,p)=>l+p,0)+Il*Math.max(0,a.length-1)<=r+1){this.#u([]);return}let o=Math.max(0,r-EB),n=[],h=0;a.forEach((l,p)=>{if(p===0){h+=s[p];return}let c=Il+s[p];n.length===0&&h+c<=o?h+=c:(l.classList.add("hide"),n.push(l))}),this.#u(n)}select(e){this.active=e;let a=this.#e.find(r=>r.key===e)?.label??e;this.dispatchEvent(new CustomEvent("slicc-scoop-select",{detail:{id:e,key:e,label:a},bubbles:!0,composed:!0}))}#d(){let e=[...this.querySelectorAll("slicc-pill")];if(e.length===0)return;let a=e.map(r=>{let s=r.dataset.k??r.getAttribute("label")??"",i=r.getAttribute("type")==="cone"?"cone":"scoop";return{key:s,type:i,color:r.getAttribute("color")??void 0,label:r.getAttribute("label")??s,eyes:SE(r,i==="cone"?"open":"none"),ephemeral:r.classList.contains("ephemeral")}});for(let r of e)r.remove();this.#e.length===0&&(this.#e=a)}#c(){let e=this.active,a=this.#e.map(r=>{let s=r.key,i=r.type==="cone"||s==="cone"?"cone":"scoop",o=r.label??s,n=r.eyes??(i==="cone"?"open":"none"),h=e!=null&&e===s,l=HB(s);return d("slicc-pill",{class:`scoop${r.ephemeral?" ephemeral":""}`,"data-k":s,type:i,color:r.color?r.color:!1,eyes:n,fill:typeof r.fill=="number"&&Number.isFinite(r.fill)?String(Math.round(Math.min(100,Math.max(0,r.fill)))):!1,label:o,active:h,style:`--h:${l}`})});this.replaceChildren(...a),this.#m()}#f(e){let a=e.target?.closest?.("slicc-pill.scoop");return a&&this.contains(a)?a.dataset.k??null:null}#p(e){let a=this.#e.find(s=>s.key===e),r=a?.type==="cone"||e==="cone"?"cone":"scoop";return a?.eyes??(r==="cone"?"open":"none")}#m(){let e=this.attention;for(let a of this.querySelectorAll("slicc-pill.scoop")){let r=a.dataset.k??"",s=this.#o!==null?this.#o===r:e!==null&&e===r,i=this.#p(r);a.setAttribute("eyes",s?i:"none"),a.toggleAttribute("blink",s&&this.#o===null&&i==="open")}}#x(){let e=this.active;for(let a of this.querySelectorAll("slicc-pill.scoop")){let r=a.dataset.k===e;a.classList.toggle("active",r),a.toggleAttribute("active",r)}}#u(e){if(e.length===0){this.#t&&(this.#t.items=[]);return}let a=this.#g();a.items=e.map(r=>{let s=r.dataset.k??"";return{id:s,label:r.getAttribute("label")??s,type:r.getAttribute("type")==="cone"?"cone":"scoop",color:r.getAttribute("color")??void 0,eyes:SE(r,r.getAttribute("type")==="cone"?"open":"none")}})}#g(){if(this.#t)return this.#t;let e=this.ownerDocument.createElement("slicc-scoop-overflow");return e.addEventListener("slicc-scoop-select",a=>{let r=a.detail?.id;typeof r=="string"&&(a.stopPropagation(),this.select(r))}),this.after(e),this.#t=e,e}#v(e){let r=e.target?.closest("slicc-pill.scoop");if(!r||!this.contains(r))return;let s=r.dataset.k;s&&this.select(s)}#M(){this.#a||typeof ResizeObserver>"u"||(this.#a=new ResizeObserver(()=>this.reflow()),this.#a.observe(this),this.parentElement&&this.#a.observe(this.parentElement))}};x("slicc-scoop-switcher",wr);var CE={};var kE="slicc-tokens";function AE(t=document){if(t.getElementById(kE))return;let e=t.createElement("style");e.id=kE,e.textContent=CE,(t.head??t.documentElement).appendChild(e)}function Sr(t,e=document.body){e.classList.toggle("dark",t==="dark"),e.setAttribute("data-theme",t)}var PB=`
4009
+ `,wE="slicc-scoop-switcher-style";function TB(t){if(t.getElementById(wE))return;let e=t.createElement("style");e.id=wE,e.textContent=LB,(t.head??t.documentElement).appendChild(e)}function HB(t){return AB[t]??"var(--rose)"}function SE(t,e){let a=t.getAttribute("eyes");return a==="open"||a==="none"||a==="dead"?a:e}var wr=class extends HTMLElement{static get observedAttributes(){return["active","attention"]}#e=[];#t=null;#a=null;#r=!1;#s=null;#i=null;#o=!1;#n=null;#l=e=>{let a=this.#p(e);a!==this.#n&&(this.#n=a,this.#x())};#h=()=>{this.#n!==null&&(this.#n=null,this.#x())};connectedCallback(){TB(this.ownerDocument),this.classList.add("slicc-scoop-switcher"),this.setAttribute("part","row"),this.#o||(this.#c(),this.#o=!0),this.#i||(this.#i=e=>this.#_(e),this.addEventListener("click",this.#i)),this.addEventListener("pointerover",this.#l),this.addEventListener("pointerleave",this.#h),this.#u(),this.#b(),requestAnimationFrame(()=>this.reflow())}disconnectedCallback(){this.#a?.disconnect(),this.#a=null,this.#s!==null&&(cancelAnimationFrame(this.#s),this.#s=null),this.#i&&(this.removeEventListener("click",this.#i),this.#i=null),this.removeEventListener("pointerover",this.#l),this.removeEventListener("pointerleave",this.#h)}attributeChangedCallback(e){this.#o&&(e==="active"?this.#f():e==="attention"&&this.#x())}get scoops(){return this.#e.map(e=>({...e}))}set scoops(e){this.#e=Array.isArray(e)?e.map(a=>({...a})):[],this.#o&&this.isConnected&&(this.#u(),this.reflow())}get attention(){return this.getAttribute("attention")}set attention(e){e==null?this.removeAttribute("attention"):this.setAttribute("attention",e)}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}reflow(){if(!(!this.isConnected||this.#r)){this.#r=!0;try{this.#d()}finally{this.#r=!1}}}#d(){let e=[...this.querySelectorAll("slicc-pill.scoop")];for(let l of e)l.classList.remove("hide");let a=e.filter(l=>l.offsetParent!==null||l.offsetWidth>0);if(a.length===0){this.#g([]);return}let r=this.clientWidth;if(r<=0){this.#g([]),requestAnimationFrame(()=>{this.isConnected&&this.clientWidth>0&&this.reflow()});return}let s=a.map(l=>l.offsetWidth);if(s.reduce((l,p)=>l+p,0)+Il*Math.max(0,a.length-1)<=r+1){this.#g([]);return}let o=Math.max(0,r-EB),n=[],h=0;a.forEach((l,p)=>{if(p===0){h+=s[p];return}let c=Il+s[p];n.length===0&&h+c<=o?h+=c:(l.classList.add("hide"),n.push(l))}),this.#g(n)}select(e){this.active=e;let a=this.#e.find(r=>r.key===e)?.label??e;this.dispatchEvent(new CustomEvent("slicc-scoop-select",{detail:{id:e,key:e,label:a},bubbles:!0,composed:!0}))}#c(){let e=[...this.querySelectorAll("slicc-pill")];if(e.length===0)return;let a=e.map(r=>{let s=r.dataset.k??r.getAttribute("label")??"",i=r.getAttribute("type")==="cone"?"cone":"scoop";return{key:s,type:i,color:r.getAttribute("color")??void 0,label:r.getAttribute("label")??s,eyes:SE(r,i==="cone"?"open":"none"),ephemeral:r.classList.contains("ephemeral")}});for(let r of e)r.remove();this.#e.length===0&&(this.#e=a)}#u(){let e=this.active,a=this.#e.map(r=>{let s=r.key,i=r.type==="cone"||s==="cone"?"cone":"scoop",o=r.label??s,n=r.eyes??(i==="cone"?"open":"none"),h=e!=null&&e===s,l=HB(s);return d("slicc-pill",{class:`scoop${r.ephemeral?" ephemeral":""}`,"data-k":s,type:i,color:r.color?r.color:!1,eyes:n,fill:typeof r.fill=="number"&&Number.isFinite(r.fill)?String(Math.round(Math.min(100,Math.max(0,r.fill)))):!1,label:o,active:h,style:`--h:${l}`})});this.replaceChildren(...a),this.#x()}#p(e){let a=e.target?.closest?.("slicc-pill.scoop");return a&&this.contains(a)?a.dataset.k??null:null}#m(e){let a=this.#e.find(s=>s.key===e),r=a?.type==="cone"||e==="cone"?"cone":"scoop";return a?.eyes??(r==="cone"?"open":"none")}#x(){let e=this.attention;for(let a of this.querySelectorAll("slicc-pill.scoop")){let r=a.dataset.k??"",s=this.#n!==null?this.#n===r:e!==null&&e===r,i=this.#m(r);a.setAttribute("eyes",s?i:"none"),a.toggleAttribute("blink",s&&this.#n===null&&i==="open")}}#f(){let e=this.active;for(let a of this.querySelectorAll("slicc-pill.scoop")){let r=a.dataset.k===e;a.classList.toggle("active",r),a.toggleAttribute("active",r)}}#g(e){if(e.length===0){this.#t&&(this.#t.items=[]);return}let a=this.#v();a.items=e.map(r=>{let s=r.dataset.k??"";return{id:s,label:r.getAttribute("label")??s,type:r.getAttribute("type")==="cone"?"cone":"scoop",color:r.getAttribute("color")??void 0,eyes:SE(r,r.getAttribute("type")==="cone"?"open":"none")}})}#v(){if(this.#t)return this.#t;let e=this.ownerDocument.createElement("slicc-scoop-overflow");return e.addEventListener("slicc-scoop-select",a=>{let r=a.detail?.id;typeof r=="string"&&(a.stopPropagation(),this.select(r))}),this.after(e),this.#t=e,e}#_(e){let r=e.target?.closest("slicc-pill.scoop");if(!r||!this.contains(r))return;let s=r.dataset.k;s&&this.select(s)}#b(){this.#a||typeof ResizeObserver>"u"||(this.#a=new ResizeObserver(()=>{this.#s===null&&(this.#s=requestAnimationFrame(()=>{this.#s=null,this.reflow()}))}),this.#a.observe(this),this.parentElement&&this.#a.observe(this.parentElement))}};x("slicc-scoop-switcher",wr);var CE={};var kE="slicc-tokens";function AE(t=document){if(t.getElementById(kE))return;let e=t.createElement("style");e.id=kE,e.textContent=CE,(t.head??t.documentElement).appendChild(e)}function Sr(t,e=document.body){e.classList.toggle("dark",t==="dark"),e.setAttribute("data-theme",t)}var PB=`
4010
4010
  :host { display: inline-flex; flex: 0 0 auto; }
4011
4011
  .themetgl {
4012
4012
  font: inherit; font-family: var(--ui); font-size: 14px; line-height: 1;
@@ -4156,7 +4156,7 @@ slicc-tab-bar {
4156
4156
  slicc-tab-bar[hidden] {
4157
4157
  display: none;
4158
4158
  }
4159
- `,BE="slicc-tab-bar-style";function WB(t){if(t.getElementById(BE))return;let e=t.createElement("style");e.id=BE,e.textContent=UB,(t.head??t.documentElement).appendChild(e)}function zE(t){return t==="sprinkle"?"sprinkle":"tool"}var Tr=class extends HTMLElement{static observedAttributes=["active"];#e=[];#t=!1;#a=null;#r=null;#s=null;connectedCallback(){WB(this.ownerDocument),this.#l(),this.#p()}disconnectedCallback(){this.#h(),this.#t=!1}attributeChangedCallback(e){e==="active"&&this.isConnected&&this.#o()}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}get tabs(){return this.#e.map(e=>({...e}))}set tabs(e){this.#e=(e??[]).map(a=>({...a})),this.active!=null&&!this.#e.some(a=>a.id===this.active)&&this.#i(this.#e[0]?.id??null),this.#t=!1,this.isConnected&&this.#p()}addTab(e){let a={...e,kind:zE(e.kind)},r=this.#e.findIndex(s=>s.id===a.id);return r>=0?this.#e[r]=a:this.#e.push(a),this.#t=!1,this.isConnected&&this.#p(),this.selectTab(a.id),a}removeTab(e){let a=this.#e.findIndex(s=>s.id===e);if(a<0)return;let r=this.active===e;if(this.#e.splice(a,1),this.#t=!1,this.isConnected&&this.#p(),this.dispatchEvent(new CustomEvent("tab-close",{detail:{id:e},bubbles:!0,composed:!0})),r){let s=this.#e[0]?.id??null;s!=null?this.selectTab(s):this.#i(null)}}selectTab(e){this.#e.some(a=>a.id===e)&&this.active!==e&&(this.#i(e),this.dispatchEvent(new CustomEvent("tab-select",{detail:{id:e},bubbles:!0,composed:!0})))}#i(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e),this.#o()}#o(){let e=this.active;for(let a of this.querySelectorAll(":scope > slicc-tab")){let r=a.getAttribute("tab-id");a.toggleAttribute("active",r!=null&&r===e)}}#n(e){if(!(e instanceof Element))return null;let a=e.closest("slicc-tab");return!a||a.parentElement!==this?null:a.getAttribute("tab-id")}#l(){this.#r||(this.#r=e=>this.#d(e),this.#s=e=>this.#c(e),this.addEventListener("select",this.#r),this.addEventListener("close",this.#s),this.#a=e=>this.#f(e),this.addEventListener("click",this.#a))}#h(){this.#r&&this.removeEventListener("select",this.#r),this.#s&&this.removeEventListener("close",this.#s),this.#a&&this.removeEventListener("click",this.#a),this.#r=null,this.#s=null,this.#a=null}#d(e){if(e.target===this)return;let a=this.#n(e.target);a!=null&&(e.stopPropagation(),this.selectTab(a))}#c(e){if(e.target===this)return;let a=this.#n(e.target);a!=null&&(e.stopPropagation(),this.removeTab(a))}#f(e){let a=e.target;if(!(a instanceof Element))return;let r=a.closest("slicc-tab");if(!r||r.parentElement!==this)return;let s=r.getAttribute("tab-id");if(s==null)return;let i=a.closest(".x, [data-close]");if(i&&r.contains(i)){e.stopPropagation(),this.removeTab(s);return}this.selectTab(s)}#p(){if(this.#t)return;this.#t=!0;let e=this.active,a=[];for(let r of this.#e){let s=zE(r.kind);s!=="tool"&&a.push(d("slicc-tab",{"tab-id":r.id,kind:s,label:r.label,part:"tab",closable:r.closable?!0:void 0,glyph:r.glyph||void 0,active:e!=null&&e===r.id?!0:void 0}))}this.replaceChildren(...a)}};x("slicc-tab-bar",Tr);var OE={};var DV={background:"#0c0c0e",foreground:"#e7e7ea",cursor:"#e7e7ea",cursorAccent:"#0c0c0e",selectionBackground:"#8b5cf64d",selectionForeground:"#ffffff",black:"#0c0c0e",red:"#f43f5e",green:"#5bd17b",yellow:"#f59e0b",blue:"#3b82f6",magenta:"#8b5cf6",cyan:"#06b6d4",white:"#e7e7ea",brightBlack:"#8a8a93",brightRed:"#fb7185",brightGreen:"#86efac",brightYellow:"#fbbf24",brightBlue:"#60a5fa",brightMagenta:"#a78bfa",brightCyan:"#22d3ee",brightWhite:"#ffffff"},PV=`
4159
+ `,BE="slicc-tab-bar-style";function WB(t){if(t.getElementById(BE))return;let e=t.createElement("style");e.id=BE,e.textContent=UB,(t.head??t.documentElement).appendChild(e)}function zE(t){return t==="sprinkle"?"sprinkle":"tool"}var Tr=class extends HTMLElement{static observedAttributes=["active"];#e=[];#t=!1;#a=null;#r=null;#s=null;connectedCallback(){WB(this.ownerDocument),this.#l(),this.#p()}disconnectedCallback(){this.#h(),this.#t=!1}attributeChangedCallback(e){e==="active"&&this.isConnected&&this.#o()}get active(){return this.getAttribute("active")}set active(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e)}get tabs(){return this.#e.map(e=>({...e}))}set tabs(e){this.#e=(e??[]).map(a=>({...a})),this.active!=null&&!this.#e.some(a=>a.id===this.active)&&this.#i(this.#e[0]?.id??null),this.#t=!1,this.isConnected&&this.#p()}addTab(e){let a={...e,kind:zE(e.kind)},r=this.#e.findIndex(s=>s.id===a.id);return r>=0?this.#e[r]=a:this.#e.push(a),this.#t=!1,this.isConnected&&this.#p(),this.selectTab(a.id),a}removeTab(e){let a=this.#e.findIndex(s=>s.id===e);if(a<0)return;let r=this.active===e;if(this.#e.splice(a,1),this.#t=!1,this.isConnected&&this.#p(),this.dispatchEvent(new CustomEvent("tab-close",{detail:{id:e},bubbles:!0,composed:!0})),r){let s=this.#e[0]?.id??null;s!=null?this.selectTab(s):this.#i(null)}}selectTab(e){this.#e.some(a=>a.id===e)&&this.active!==e&&(this.#i(e),this.dispatchEvent(new CustomEvent("tab-select",{detail:{id:e},bubbles:!0,composed:!0})))}#i(e){e==null?this.removeAttribute("active"):this.setAttribute("active",e),this.#o()}#o(){let e=this.active;for(let a of this.querySelectorAll(":scope > slicc-tab")){let r=a.getAttribute("tab-id");a.toggleAttribute("active",r!=null&&r===e)}}#n(e){if(!(e instanceof Element))return null;let a=e.closest("slicc-tab");return!a||a.parentElement!==this?null:a.getAttribute("tab-id")}#l(){this.#r||(this.#r=e=>this.#d(e),this.#s=e=>this.#c(e),this.addEventListener("select",this.#r),this.addEventListener("close",this.#s),this.#a=e=>this.#u(e),this.addEventListener("click",this.#a))}#h(){this.#r&&this.removeEventListener("select",this.#r),this.#s&&this.removeEventListener("close",this.#s),this.#a&&this.removeEventListener("click",this.#a),this.#r=null,this.#s=null,this.#a=null}#d(e){if(e.target===this)return;let a=this.#n(e.target);a!=null&&(e.stopPropagation(),this.selectTab(a))}#c(e){if(e.target===this)return;let a=this.#n(e.target);a!=null&&(e.stopPropagation(),this.removeTab(a))}#u(e){let a=e.target;if(!(a instanceof Element))return;let r=a.closest("slicc-tab");if(!r||r.parentElement!==this)return;let s=r.getAttribute("tab-id");if(s==null)return;let i=a.closest(".x, [data-close]");if(i&&r.contains(i)){e.stopPropagation(),this.removeTab(s);return}this.selectTab(s)}#p(){if(this.#t)return;this.#t=!0;let e=this.active,a=[];for(let r of this.#e){let s=zE(r.kind);s!=="tool"&&a.push(d("slicc-tab",{"tab-id":r.id,kind:s,label:r.label,part:"tab",closable:r.closable?!0:void 0,glyph:r.glyph||void 0,active:e!=null&&e===r.id?!0:void 0}))}this.replaceChildren(...a)}};x("slicc-tab-bar",Tr);var OE={};var DV={background:"#0c0c0e",foreground:"#e7e7ea",cursor:"#e7e7ea",cursorAccent:"#0c0c0e",selectionBackground:"#8b5cf64d",selectionForeground:"#ffffff",black:"#0c0c0e",red:"#f43f5e",green:"#5bd17b",yellow:"#f59e0b",blue:"#3b82f6",magenta:"#8b5cf6",cyan:"#06b6d4",white:"#e7e7ea",brightBlack:"#8a8a93",brightRed:"#fb7185",brightGreen:"#86efac",brightYellow:"#fbbf24",brightBlue:"#60a5fa",brightMagenta:"#a78bfa",brightCyan:"#22d3ee",brightWhite:"#ffffff"},PV=`
4160
4160
  :host {
4161
4161
  display: flex;
4162
4162
  flex-direction: column;