turtlecode 0.3.29 → 0.3.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/assets/{_basePickBy-B_iojEAt.js → _basePickBy-N3Rrk-vx.js} +1 -1
- package/assets/assets/{_baseUniq-U_Pc1B-R.js → _baseUniq-BJj7tnk-.js} +1 -1
- package/assets/assets/{arc-y7TA3kL0.js → arc-CyJnbLxJ.js} +1 -1
- package/assets/assets/{architectureDiagram-2XIMDMQ5-BtuBr_8D.js → architectureDiagram-2XIMDMQ5-BIdL9h41.js} +1 -1
- package/assets/assets/{auth-callback-D6fEUSOP.js → auth-callback--2HzJsuz.js} +1 -1
- package/assets/assets/{blockDiagram-WCTKOSBZ-DPpbARm_.js → blockDiagram-WCTKOSBZ-C07nXbUx.js} +1 -1
- package/assets/assets/{c4Diagram-IC4MRINW-DT82jRyc.js → c4Diagram-IC4MRINW-DS7V7F-1.js} +1 -1
- package/assets/assets/channel-DvIrsRJg.js +1 -0
- package/assets/assets/{chunk-4BX2VUAB-DT9Cii3i.js → chunk-4BX2VUAB-yFvdxolC.js} +1 -1
- package/assets/assets/{chunk-55IACEB6-k-YCbdfk.js → chunk-55IACEB6-BA9pkhvM.js} +1 -1
- package/assets/assets/{chunk-FMBD7UC4-B8vZVids.js → chunk-FMBD7UC4-B4VN0d-V.js} +1 -1
- package/assets/assets/{chunk-JSJVCQXG-P9SBgzjq.js → chunk-JSJVCQXG-omZgDaV7.js} +1 -1
- package/assets/assets/{chunk-KX2RTZJC-BVt0fO5A.js → chunk-KX2RTZJC-ztXM5Djy.js} +1 -1
- package/assets/assets/{chunk-NQ4KR5QH-B-xqpclb.js → chunk-NQ4KR5QH-dHE0ZuWB.js} +1 -1
- package/assets/assets/{chunk-QZHKN3VN-8OzF2T1z.js → chunk-QZHKN3VN-BEG1f8Ya.js} +1 -1
- package/assets/assets/{chunk-WL4C6EOR-CYQPYawR.js → chunk-WL4C6EOR-BEuuYfob.js} +1 -1
- package/assets/assets/classDiagram-VBA2DB6C-C88--hvr.js +1 -0
- package/assets/assets/classDiagram-v2-RAHNMMFH-C88--hvr.js +1 -0
- package/assets/assets/clone-C9sv_Gd7.js +1 -0
- package/assets/assets/{cose-bilkent-S5V4N54A-CWWJH6JP.js → cose-bilkent-S5V4N54A-CkT30vHH.js} +1 -1
- package/assets/assets/{cssMode-5IvXkP6K.js → cssMode-Crdd6rxC.js} +1 -1
- package/assets/assets/{dagre-KLK3FWXG-DJuf5yL5.js → dagre-KLK3FWXG-B79Hqe7-.js} +1 -1
- package/assets/assets/{design-panel-DGxOeM2o.js → design-panel-CwIXBdlj.js} +1 -1
- package/assets/assets/{diagram-E7M64L7V-E4hkPMxk.js → diagram-E7M64L7V-BPAofL_W.js} +1 -1
- package/assets/assets/{diagram-IFDJBPK2-TFQC2GU2.js → diagram-IFDJBPK2-vvXpK24E.js} +1 -1
- package/assets/assets/{diagram-P4PSJMXO-DeTjCOyW.js → diagram-P4PSJMXO-C2qkUebz.js} +1 -1
- package/assets/assets/{dialog-clone-project-CAfI0lHh.js → dialog-clone-project-BrKWUYXl.js} +1 -1
- package/assets/assets/{dialog-connect-provider-B0LPEC99.js → dialog-connect-provider-7tX-xRZL.js} +2 -2
- package/assets/assets/{dialog-create-project-DgZYKQLe.js → dialog-create-project-CW9LT3D2.js} +1 -1
- package/assets/assets/{dialog-edit-project-DDzRssw5.js → dialog-edit-project-O4U5b8ol.js} +1 -1
- package/assets/assets/{dialog-fork-D2bQrrpP.js → dialog-fork-BGB1p_WN.js} +1 -1
- package/assets/assets/{dialog-manage-models-tJeOYGFh.js → dialog-manage-models-Bv2TlHCk.js} +1 -1
- package/assets/assets/{dialog-select-directory-CjI5IZBg.js → dialog-select-directory-BcSZ1oGG.js} +3 -3
- package/assets/assets/{dialog-select-file-COsv0m3J.js → dialog-select-file-knACRhov.js} +1 -1
- package/assets/assets/{dialog-select-mcp-B96RaTdf.js → dialog-select-mcp-Bl5lp99i.js} +1 -1
- package/assets/assets/{dialog-select-model-unpaid-DEY-u5MJ.js → dialog-select-model-unpaid-Ctm2rNRh.js} +2 -2
- package/assets/assets/{dialog-select-provider-DpwHcs_z.js → dialog-select-provider-C7RGnkr9.js} +1 -1
- package/assets/assets/{dialog-select-server-uqL2WKd-.js → dialog-select-server-C-mZa40h.js} +1 -1
- package/assets/assets/{dialog-settings-CXEAJdw0.js → dialog-settings-CbAocywb.js} +1 -1
- package/assets/assets/{erDiagram-INFDFZHY-9Hmz-EGm.js → erDiagram-INFDFZHY-B_1jSDsN.js} +1 -1
- package/assets/assets/{flowDiagram-PKNHOUZH-4kZKRPZR.js → flowDiagram-PKNHOUZH-DL7zenZL.js} +1 -1
- package/assets/assets/{freemarker2-SvgbhnJ2.js → freemarker2-D-xEseuD.js} +1 -1
- package/assets/assets/{ganttDiagram-A5KZAMGK-DAqQvIYI.js → ganttDiagram-A5KZAMGK-xtjBjl6B.js} +1 -1
- package/assets/assets/{ghostty-web-DZbVeO6H.js → ghostty-web-DcW4-bgZ.js} +1 -1
- package/assets/assets/{gitGraphDiagram-K3NZZRJ6-wnUF9rfV.js → gitGraphDiagram-K3NZZRJ6-CJh7Bry5.js} +1 -1
- package/assets/assets/{graph-k_yNWxmC.js → graph-CXDahgnR.js} +1 -1
- package/assets/assets/{handlebars-B2ONVutZ.js → handlebars-5ALNpHk2.js} +1 -1
- package/assets/assets/{home-M9U5I_mN.js → home-BUVPQB3m.js} +1 -1
- package/assets/assets/{html-DmnoTn9a.js → html-CHAGqZXz.js} +1 -1
- package/assets/assets/{htmlMode-COQ2FePW.js → htmlMode-fNBL8FMD.js} +1 -1
- package/assets/assets/{index-9S5eLovl.css → index-DaZ5Dq2D.css} +1 -1
- package/assets/assets/{index-Ck426Hvx.js → index-sV80fC6e.js} +262 -262
- package/assets/assets/{infoDiagram-LFFYTUFH-Cq59-9s7.js → infoDiagram-LFFYTUFH-Cb2N8Rmn.js} +1 -1
- package/assets/assets/{ishikawaDiagram-PHBUUO56-BohmBc5G.js → ishikawaDiagram-PHBUUO56-CWHDIa9W.js} +1 -1
- package/assets/assets/{javascript-0JqfZ-ZK.js → javascript-Vf2sfTG4.js} +1 -1
- package/assets/assets/{journeyDiagram-4ABVD52K-CPHl3wPm.js → journeyDiagram-4ABVD52K-eorxKZRb.js} +1 -1
- package/assets/assets/{jsonMode-BZ4_MoUH.js → jsonMode-DMGLkpWk.js} +1 -1
- package/assets/assets/{kanban-definition-K7BYSVSG-DUTAJe6Q.js → kanban-definition-K7BYSVSG-EMK6r2A2.js} +1 -1
- package/assets/assets/{layout-BvYQlcGB.js → layout-CoF9Td2L.js} +1 -1
- package/assets/assets/{liquid-DL0F7vFb.js → liquid-DcmTL6U0.js} +1 -1
- package/assets/assets/{list-ChIlMjYm.js → list-CLZeXp14.js} +1 -1
- package/assets/assets/{mdx-BTXLl_TQ.js → mdx-B-oWMJfj.js} +1 -1
- package/assets/assets/{mermaid.core-8TjZbLRD.js → mermaid.core-CHVX5Fzd.js} +5 -5
- package/assets/assets/{mindmap-definition-YRQLILUH-C6lKdbbb.js → mindmap-definition-YRQLILUH-FsxP4pDH.js} +1 -1
- package/assets/assets/{model-viewer-CeIucdad.js → model-viewer-BvaX0wNH.js} +1 -1
- package/assets/assets/{pieDiagram-SKSYHLDU-DozGYWW7.js → pieDiagram-SKSYHLDU-GAm1iVlk.js} +1 -1
- package/assets/assets/{python-BTFINbZn.js → python-C8DZqmfh.js} +1 -1
- package/assets/assets/{quadrantDiagram-337W2JSQ-dUO9Q20A.js → quadrantDiagram-337W2JSQ-XzW4K1ys.js} +1 -1
- package/assets/assets/{razor-BvR9Hnqa.js → razor-CodakSwM.js} +1 -1
- package/assets/assets/{requirementDiagram-Z7DCOOCP-K8_TdzHK.js → requirementDiagram-Z7DCOOCP-B4kQSOdN.js} +1 -1
- package/assets/assets/{sankeyDiagram-WA2Y5GQK-BstnZ38B.js → sankeyDiagram-WA2Y5GQK-Bp758Awe.js} +1 -1
- package/assets/assets/{select-D2r3Hs22.js → select-BHYc7SUw.js} +1 -1
- package/assets/assets/{sequenceDiagram-2WXFIKYE-Cn6skN5F.js → sequenceDiagram-2WXFIKYE-D5GiKInF.js} +1 -1
- package/assets/assets/{server-row-BwUYMVVB.js → server-row-CWV_jIiI.js} +1 -1
- package/assets/assets/{session-CU929GsB.js → session-BwFpmVuz.js} +26 -26
- package/assets/assets/{stateDiagram-RAJIS63D-B-iHRuam.js → stateDiagram-RAJIS63D-9bZjuK82.js} +1 -1
- package/assets/assets/stateDiagram-v2-FVOUBMTO-2ijHmPyg.js +1 -0
- package/assets/assets/{status-popover-body-CHGxemen.js → status-popover-body-CoN8l0x0.js} +2 -2
- package/assets/assets/{switch-mNVnqcUl.js → switch-9h7QitbM.js} +1 -1
- package/assets/assets/{tag-3NQn3mEK.js → tag-f5ASMI1e.js} +1 -1
- package/assets/assets/{timeline-definition-YZTLITO2-C3Q6oQ9i.js → timeline-definition-YZTLITO2-IoSy8mo5.js} +1 -1
- package/assets/assets/{treemap-KZPCXAKY-D3fK9Jyz.js → treemap-KZPCXAKY-BdvVd6gn.js} +1 -1
- package/assets/assets/{trellis-badge-demo-CNkMd4YG.js → trellis-badge-demo-b3oKaku9.js} +1 -1
- package/assets/assets/{tsMode-CxEfAf9Z.js → tsMode-lBn9bETR.js} +1 -1
- package/assets/assets/{typescript-I4Xe9fRj.js → typescript-CbRn7zwa.js} +1 -1
- package/assets/assets/{vennDiagram-LZ73GAT5-Cx1RzW9o.js → vennDiagram-LZ73GAT5-5Veyw-K5.js} +1 -1
- package/assets/assets/{xlsx-editor-BURweVsy.js → xlsx-editor-bjFHigvu.js} +1 -1
- package/assets/assets/{xml-Z8-6vgF3.js → xml-uUks6gPd.js} +1 -1
- package/assets/assets/{xychartDiagram-JWTSCODW-BWNqIjxZ.js → xychartDiagram-JWTSCODW-BWsoDNBQ.js} +1 -1
- package/assets/assets/{yaml-CfXlO5Lk.js → yaml-DkL0OuWH.js} +1 -1
- package/assets/index.html +2 -2
- package/package.json +13 -13
- package/assets/assets/channel-B5ZdBKid.js +0 -1
- package/assets/assets/classDiagram-VBA2DB6C-B_GKGoPY.js +0 -1
- package/assets/assets/classDiagram-v2-RAHNMMFH-B_GKGoPY.js +0 -1
- package/assets/assets/clone-Dq4a-r80.js +0 -1
- package/assets/assets/stateDiagram-v2-FVOUBMTO-DBUaNCVy.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as ft,h as j,m as r,l as a,n as G,B as ce,q as P,G as Mt,t as b,bQ as Vt,v as Qe,p as Dt,bR as Jt,bS as qt,i as ae,O as fe,$ as Q,bT as Bt,S as m,aI as De,j as _e,F as ge,bU as dt,bV as zn,s as me,bW as Kt,a6 as Wt,bX as En,z as ut,P as he,a7 as Pn,bY as An,bZ as gt,b1 as jn,Q as Ke,b_ as Ht,b$ as Yt,c0 as pt,c1 as bt,c2 as mt,c3 as Qt,J as R,c4 as Ot,c5 as Dn,c6 as Bn,c7 as On,c8 as Un,c9 as Xt,ca as Zt,cb as Rn,b9 as en,o as vt,Y as Nn,cc as Gn}from"./index-Ck426Hvx.js";import{R as Mn,I as Vn}from"./session-CU929GsB.js";import"./select-D2r3Hs22.js";import"./list-ChIlMjYm.js";import"./tag-3NQn3mEK.js";import"./transform-BwXaE9hv.js";var Jn=b('<form class="flex flex-col gap-4 p-6 pt-0"><textarea autofocus rows=4 placeholder="A cute turtle riding a snowboard down a snowy slope..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded-md px-3 py-2 text-13-regular resize-none focus:ring-1 focus:ring-primary-base"></textarea><div class="flex items-end justify-between gap-4"><div class="flex min-w-0 flex-col gap-1.5"><label class="text-12-medium text-text-weak">Provider</label><p class="text-11-regular text-text-weaker"></p></div><div class="flex shrink-0 gap-2">'),qn=b('<div class="text-12-regular text-text-destructive">');const We=[{id:"auto",label:"Auto",hint:"Prefer Gemini when configured; falls back to OpenAI if Gemini fails"},{id:"gemini",label:"Gemini",hint:"gemini-2.5-flash-image"},{id:"openai",label:"OpenAI",hint:"gpt-image-2 — needs OPENAI_API_KEY in project .env"}];function Kn(e){const t=ft(),[l,o]=j(""),[n,k]=j("auto"),[z,h]=j(!1),[S,F]=j();async function y(u){u.preventDefault();const T=l().trim();if(!(!T||z())){h(!0),F(void 0);try{await e.onGenerate({prompt:T,provider:n()}),t.close()}catch(I){F(I instanceof Error?I.message:Vt(I,"Image generation failed"))}finally{h(!1)}}}return r(Mt,{title:"Generate image asset",description:"Describe the image you want. It will be saved to .trellis/media.",class:"w-full max-w-[480px] mx-auto",get children(){var u=Jn(),T=u.firstChild,I=T.nextSibling,x=I.firstChild,L=x.firstChild,B=L.nextSibling,A=x.nextSibling;return u.addEventListener("submit",y),T.$$input=w=>{o(w.currentTarget.value),F(void 0)},a(u,(()=>{var w=G(()=>!!S());return()=>w()?(()=>{var J=qn();return a(J,S),J})():null})(),I),a(x,r(Mn,{options:We,get current(){return We.find(w=>w.id===n())??We[0]},value:w=>w.id,label:w=>w.label,onSelect:w=>{w&&k(w.id),F(void 0)},size:"small",fill:!0,class:"w-full max-w-[20rem]"}),B),a(B,()=>We.find(w=>w.id===n())?.hint),a(A,r(ce,{type:"button",variant:"ghost",size:"large",onClick:()=>t.close(),children:"Cancel"}),null),a(A,r(ce,{type:"submit",variant:"primary",size:"large",get disabled(){return z()||!l().trim()},get children(){return z()?"Generating...":"Generate"}}),null),P(()=>T.value=l()),u}})}Qe(["input"]);var Wn=b('<form class="flex flex-col gap-4 p-6 pt-0"><textarea rows=3 placeholder="Optional description for agents and CMS editors..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded-md px-3 py-2 text-13-regular resize-none focus:ring-1 focus:ring-primary-base"></textarea><div class="flex justify-end gap-2">');function Hn(e){const t=ft(),[l,o]=j(""),[n,k]=j(""),[z,h]=j(""),[S,F]=j(!1),[y,u]=j();async function T(I){I.preventDefault();const x=l().trim();if(!(!x||S())){F(!0),u(void 0);try{await e.onCreate({url:x,title:n().trim()||void 0,description:z().trim()||void 0}),t.close()}catch(L){u(L instanceof Error?L.message:String(L))}finally{F(!1)}}}return r(Mt,{title:"Add link asset",description:"Save a reusable bookmark as a Trellis Asset. No file is stored locally.",class:"w-full max-w-[480px] mx-auto",get children(){var I=Wn(),x=I.firstChild,L=x.nextSibling;return I.addEventListener("submit",T),a(I,r(Dt,{autofocus:!0,type:"url",label:"URL",placeholder:"https://example.com/docs",get value(){return l()},onChange:B=>{o(B),u(void 0)},get error(){return y()},get validationState(){return y()?"invalid":void 0}}),x),a(I,r(Dt,{type:"text",label:"Title",placeholder:"Optional display title",get value(){return n()},onChange:k}),x),x.$$input=B=>h(B.currentTarget.value),a(L,r(ce,{type:"button",variant:"ghost",size:"large",onClick:()=>t.close(),children:"Cancel"}),null),a(L,r(ce,{type:"submit",variant:"primary",size:"large",get disabled(){return S()||!l().trim()},get children(){return S()?"Saving...":"Add link"}}),null),P(()=>x.value=z()),I}})}Qe(["input"]);const Yn={size:"1024x1024",output_format:"png"};function Qn(e,t){return`${e.replace(/\/+$/,"")}/file/media/generate?directory=${encodeURIComponent(t)}`}function Xn(e){return{prompt:e.prompt,provider:e.provider,...Yn}}function Zn(e,t,l){return{url:Qn(e,t),body:Xn(l)}}function ht(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function er(e){const t=Jt(e);if(!t)return null;const l=t.library==="lucide"?t.key:`${t.library}-${t.key}`;return`icon:${ht(l)}`}function tr(e,t){const l=Jt(e);if(!l)return null;const o=er(e);if(!o)return null;const n=l.library==="lucide"?`lucide:${l.key}`:qt(l.library,l.key);return[{e:o,a:"type",v:"Icon"},{e:o,a:"key",v:l.key},{e:o,a:"library",v:l.library},{e:o,a:"catalogRef",v:n},{e:o,a:"createdAt",v:new Date().toISOString()}]}function tn(e){return`font:${ht(e)}`}function Ut(e){const t=tn(e.family),l=[{e:t,a:"type",v:"Font"},{e:t,a:"family",v:e.family},{e:t,a:"variants",v:JSON.stringify(e.variants??["regular"])},{e:t,a:"createdAt",v:new Date().toISOString()}];return e.category&&l.push({e:t,a:"category",v:e.category}),e.catalogRef&&l.push({e:t,a:"catalogRef",v:e.catalogRef}),e.tags?.length&&l.push({e:t,a:"tags",v:e.tags.join(", ")}),l}function nr(e){return`palette:${ht(e)}`}function rr(e){const t=nr(e.name),l=[{e:t,a:"type",v:"ColorPalette"},{e:t,a:"name",v:e.name},{e:t,a:"swatches",v:JSON.stringify(e.swatches)},{e:t,a:"createdAt",v:new Date().toISOString()}];return e.description&&l.push({e:t,a:"description",v:e.description}),e.tags?.length&&l.push({e:t,a:"tags",v:e.tags.join(", ")}),l}const Ye=[{family:"Inter",category:"sans-serif",variants:["regular","500","600","700"]},{family:"Roboto",category:"sans-serif",variants:["regular","500","700"]},{family:"Open Sans",category:"sans-serif",variants:["regular","600","700"]},{family:"Montserrat",category:"sans-serif",variants:["regular","600","700"]},{family:"Poppins",category:"sans-serif",variants:["regular","600","700"]},{family:"Lora",category:"serif",variants:["regular","600","700"]},{family:"JetBrains Mono",category:"monospace",variants:["regular","500","700"]},{family:"Fira Code",category:"monospace",variants:["regular","500","700"]}],ar={primary:"#18181b",secondary:"#52525b",accent:"#2563eb",surface:"#fafafa",background:"#ffffff",border:"#e4e4e7",success:"#16a34a",warning:"#f59e0b",danger:"#dc2626"};function se(e,t){if(typeof e!="string"||!e.trim())return t;try{return JSON.parse(e)}catch{return t}}function p(e,t,l){return e.find(o=>o.e===t&&o.a===l)?.v}const ve="project-brand:config";function ir(e,t){const l=String(p(e,t,"name")??t),o=se(p(e,t,"swatches"),{});if(Object.keys(o).length)return{id:t,name:l,swatches:o}}function lr(e,t){const l=String(p(e,t,"family")??"");if(l)return{id:t,family:l}}function sr(e,t,l){const o=String(p(e,l,"key")??"");if(o)return{id:l,key:o,library:String(p(e,l,"library")??"lucide")}}function or(e,t,l){const o=e.id,n=se(p(t,o,"paletteIds"),e.palettes.map(y=>y.id)),k=se(p(t,o,"fontIds"),e.fonts.map(y=>y.id)),z=se(p(t,o,"enabledIconIds"),e.icons.map(y=>y.id)),h=n.map(y=>ir(t,y)).filter(y=>!!y),S=k.map(y=>lr(t,y)).filter(y=>!!y),F=(z.length?z:l.filter(y=>y.type==="Icon").map(y=>y.id)).map(y=>sr(t,l,y)).filter(y=>!!y);return{...e,name:String(p(t,o,"name")??e.name),description:typeof p(t,o,"description")=="string"?String(p(t,o,"description")):e.description,logoPath:typeof p(t,o,"logoPath")=="string"?String(p(t,o,"logoPath")):e.logoPath,primaryPaletteId:typeof p(t,o,"primaryPaletteId")=="string"?String(p(t,o,"primaryPaletteId")):e.primaryPaletteId,headingFontId:typeof p(t,o,"headingFontId")=="string"?String(p(t,o,"headingFontId")):e.headingFontId,bodyFontId:typeof p(t,o,"bodyFontId")=="string"?String(p(t,o,"bodyFontId")):e.bodyFontId,monoFontId:typeof p(t,o,"monoFontId")=="string"?String(p(t,o,"monoFontId")):e.monoFontId,iconLibrary:String(p(t,o,"iconLibrary")??e.iconLibrary),semantics:se(p(t,o,"semantics"),e.semantics),palettes:h.length?h:e.palettes,fonts:S.length?S:e.fonts,icons:F.length?F:e.icons}}function Rt(e,t){const l=se(p(e,ve,"resolvedSnapshot"),null);if(l?.name){const u=typeof p(e,ve,"activeBrandId")=="string"?String(p(e,ve,"activeBrandId")):l.activeBrandId,T=p(e,ve,"activeBrandVersion"),I=typeof T=="number"?T:l.activeBrandVersion;return or({...l,activeBrandId:u,activeBrandVersion:I},e,t)}const n=String(p(e,ve,"localBrandId")??"")||t.find(u=>u.type==="Brand")?.id||t.find(u=>u.id.startsWith("brand:"))?.id||"";if(!n)return null;const k=se(p(e,n,"paletteIds"),[]),z=se(p(e,n,"fontIds"),[]),h=se(p(e,n,"enabledIconIds"),[]),S=k.map(u=>{const T=String(p(e,u,"name")??u),I=se(p(e,u,"swatches"),{});return{id:u,name:T,swatches:I}}).filter(u=>Object.keys(u.swatches).length>0),F=z.map(u=>({id:u,family:String(p(e,u,"family")??u)})).filter(u=>u.family),y=(h.length?h:t.filter(u=>u.type==="Icon").map(u=>u.id)).map(u=>({id:u,key:String(p(e,u,"key")??u),library:String(p(e,u,"library")??"lucide")})).filter(u=>u.key);return{id:n,name:String(p(e,n,"name")??"Brand"),description:typeof p(e,n,"description")=="string"?String(p(e,n,"description")):void 0,logoPath:typeof p(e,n,"logoPath")=="string"?String(p(e,n,"logoPath")):void 0,primaryPaletteId:typeof p(e,n,"primaryPaletteId")=="string"?String(p(e,n,"primaryPaletteId")):void 0,headingFontId:typeof p(e,n,"headingFontId")=="string"?String(p(e,n,"headingFontId")):void 0,bodyFontId:typeof p(e,n,"bodyFontId")=="string"?String(p(e,n,"bodyFontId")):void 0,monoFontId:typeof p(e,n,"monoFontId")=="string"?String(p(e,n,"monoFontId")):void 0,iconLibrary:String(p(e,n,"iconLibrary")??"lucide"),semantics:se(p(e,n,"semantics"),void 0),palettes:S,fonts:F,icons:y}}function cr(e){const t={...e,resolvedAt:new Date().toISOString()};return[{e:ve,a:"type",v:"ProjectBrandConfig"},{e:ve,a:"localBrandId",v:e.id},{e:ve,a:"resolvedSnapshot",v:JSON.stringify(t)},{e:ve,a:"createdAt",v:new Date().toISOString()}]}const je=new Map,lt=new Map;function nn(e,t=32){try{const l=new URL(e).hostname;return l?`https://www.google.com/s2/favicons?domain=${encodeURIComponent(l)}&sz=${t}`:void 0}catch{return}}function dr(e){return je.get(e)}function Nt(e){const t=je.get(e.url);je.set(e.url,{...t,...e})}async function rn(e,t,l,o){const n=je.get(o);if(n)return n;const k=lt.get(o);if(k)return k;const z=(async()=>{try{const h=new URLSearchParams({url:o,directory:l}),S=await e(`${t}/file/media/link/preview?${h}`);if(!S.ok)return;const F=await S.json();return je.set(o,F),F}catch{return}finally{lt.delete(o)}})();return lt.set(o,z),z}async function Gt(e,t,l,o){const n=[...new Set(o.filter(Boolean))];await Promise.allSettled(n.map(k=>rn(e,t,l,k)))}var ur=b("<div class=brand-type-specimen><div class=brand-type-specimen-label></div><div class=brand-type-specimen-sample>"),gr=b("<button type=button class=brand-palette-bar><span class=brand-palette-bar-label><span class=brand-palette-bar-hex></span><span class=brand-palette-bar-role>"),fr=b("<input type=color class=sr-only>"),pr=b('<div class=brand-voice-editor><label class=brand-field-label for=brand-voice-description>Brand voice</label><textarea id=brand-voice-description class=brand-voice-textarea rows=4 placeholder="Describe how this brand sounds in copy…"></textarea><label class=brand-field-label for=brand-voice-adjectives>Adjectives</label><div class=brand-tag-field><input id=brand-voice-adjectives type=text class=brand-tag-input>'),br=b("<span class=brand-voice-tag><button type=button class=brand-voice-tag-remove>"),mr=b("<img alt class=brand-logo-image>"),vr=b("<span class=brand-bento-cell-hint>Saving…"),hr=b('<p class="brand-bento-muted brand-icon-empty">No icons enabled yet. Add icons from the Icons section.'),yr=b('<div class=brand-bento><header class="brand-bento-cell brand-bento-hero"><div class=brand-bento-hero-copy><p class=brand-bento-eyebrow>Brand guide</p><input type=text class="brand-bento-title brand-bento-title-input"aria-label="Brand name"></div></header><div class="brand-bento-pair brand-bento-pair--logo-voice"><section class="brand-bento-cell brand-bento-logo"aria-label="Brand logo"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Logo mark</span><span class=brand-bento-cell-hint>SVG or PNG</span></div><button type=button class=brand-logo-drop title="Upload brand logo"><span class=brand-logo-overlay></span></button><input type=file accept=image/svg+xml,image/png,image/jpeg,image/webp,image/avif class=sr-only></section><section class="brand-bento-cell brand-bento-voice"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Voice & semantics</span></div></section></div><div class="brand-bento-pair brand-bento-pair--type-icons"><section class="brand-bento-cell brand-bento-type"><div class="brand-bento-cell-head brand-bento-cell-head--stacked"><span class=brand-bento-cell-title>Typography</span><label class=brand-font-select-wrap><span class=sr-only>Font family</span><select class=brand-font-select></select></label></div><div class=brand-type-stack></div></section><section class="brand-bento-cell brand-bento-icons"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Icon system</span><span class="brand-bento-cell-hint capitalize"> · <!> enabled</span></div><div class=brand-icon-grid>'),wr=b("<div class=brand-logo-placeholder><span>Drop or click to upload"),xr=b("<option>"),$r=b("<div class=brand-icon-cell><span class=brand-icon-name>"),kr=b('<section class="brand-bento-cell brand-bento-palette"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Colors</span></div><div class=brand-palette-strip>');const _r=e=>e.replace(/^#/,"").toUpperCase(),Sr=e=>{const t=e.replace(/^#/,"");if(!/^[0-9a-f]{3}([0-9a-f]{3})?$/i.test(t))return"#f8fafc";const l=t.length===3?[...t].map(h=>h+h).join(""):t,o=parseInt(l.slice(0,2),16)/255,n=parseInt(l.slice(2,4),16)/255,k=parseInt(l.slice(4,6),16)/255;return .2126*o+.7152*n+.0722*k>.55?"#0a0a0a":"#f8fafc"},Cr=e=>{const t=e.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test(t)?`#${[...t].map(l=>l+l).join("")}`.toLowerCase():/^[0-9a-f]{6}$/i.test(t)?`#${t}`.toLowerCase():e},Ir=e=>{const t=Cr(e);return/^#[0-9a-f]{6}$/i.test(t)?t:"#000000"},Lr=e=>{const t=new Set,l=[],o=n=>{const k=n.trim().toLowerCase();!k||t.has(k)||(t.add(k),l.push(n.trim()))};for(const n of e?.adjectives??[])o(n);for(const n of e?.tone??[])o(n);for(const n of e?.mood??[])o(n);for(const n of e?.values??[])o(n);return l};function Fr(e){return e.library==="lucide"?e.key:qt(e.library,e.key)}function He(e){return(()=>{var t=ur(),l=t.firstChild,o=l.nextSibling;return a(l,()=>e.label),a(o,()=>e.sample),P(n=>{var k=!!e.large,z=`"${e.family}", system-ui, sans-serif`;return k!==n.e&&o.classList.toggle("brand-type-specimen-sample--lg",n.e=k),z!==n.t&&me(o,"font-family",n.t=z),n},{e:void 0,t:void 0}),t})()}function Tr(e){let t;const l=()=>{e.disabled||t?.click()},o=n=>{e.onSave(e.role,n.currentTarget.value)};return[(()=>{var n=gr(),k=n.firstChild,z=k.firstChild,h=z.nextSibling;return n.$$click=l,a(z,()=>_r(e.color)),a(h,()=>e.role),P(S=>{var F=e.color,y=Sr(e.color),u=e.disabled,T=`Edit ${e.role} color`;return F!==S.e&&me(n,"background-color",S.e=F),y!==S.t&&me(n,"color",S.t=y),u!==S.a&&(n.disabled=S.a=u),T!==S.o&&Q(n,"title",S.o=T),S},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=fr();return n.addEventListener("change",o),_e(k=>{t=k},n),P(()=>n.disabled=e.disabled),P(()=>n.value=Ir(e.color)),n})()]}function zr(e){const[t,l]=j(""),[o,n]=j([]),[k,z]=j("");fe(()=>{const u=e.semantics;l(u?.voice??""),n(Lr(u)),z("")});const h=async(u,T)=>{const I=e.semantics;await e.onSave({...I,voice:u.trim()||void 0,adjectives:T.length?T:void 0})},S=u=>{const T=u.split(/[,;]+/).map(L=>L.trim()).filter(Boolean);if(!T.length)return;const I=new Set(o().map(L=>L.toLowerCase())),x=[...o()];for(const L of T){const B=L.toLowerCase();I.has(B)||(I.add(B),x.push(L))}n(x),z(""),h(t(),x)},F=u=>{const T=o().filter((I,x)=>x!==u);n(T),h(t(),T)},y=u=>{if(u.key==="Enter"||u.key===","){u.preventDefault(),S(k());return}u.key==="Backspace"&&!k()&&o().length&&F(o().length-1)};return(()=>{var u=pr(),T=u.firstChild,I=T.nextSibling,x=I.nextSibling,L=x.nextSibling,B=L.firstChild;return I.addEventListener("blur",()=>void h(t(),o())),I.$$input=A=>l(A.currentTarget.value),L.$$click=()=>document.getElementById("brand-voice-adjectives")?.focus(),a(L,r(ge,{get each(){return o()},children:(A,w)=>(()=>{var J=br(),O=J.firstChild;return a(J,A,O),O.$$click=M=>{M.stopPropagation(),F(w())},Q(O,"aria-label",`Remove ${A}`),a(O,r(zn,{class:"size-3"})),P(()=>O.disabled=e.saving),J})()}),B),B.addEventListener("blur",()=>{k().trim()&&S(k())}),B.$$keydown=y,B.$$input=A=>z(A.currentTarget.value),P(A=>{var w=e.saving,J=!!e.saving,O=o().length?"Add another…":"Type and press Enter…",M=e.saving;return w!==A.e&&(I.disabled=A.e=w),J!==A.t&&L.classList.toggle("brand-tag-field--disabled",A.t=J),O!==A.a&&Q(B,"placeholder",A.a=O),M!==A.o&&(B.disabled=A.o=M),A},{e:void 0,t:void 0,a:void 0,o:void 0}),P(()=>I.value=t()),P(()=>B.value=k()),u})()}function Er(e){const t=ae(()=>{const x=e.snapshot;return x.palettes.find(L=>L.id===x.primaryPaletteId)??x.palettes[0]}),l=ae(()=>e.snapshot.icons.slice(0,12)),o=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.headingFontId)?.family??"Inter",n=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.bodyFontId)?.family??"Inter",k=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.monoFontId)?.family??"JetBrains Mono",z=ae(()=>{const x=new Set,L=[],B=A=>{const w=A.trim();!w||x.has(w)||(x.add(w),L.push(w))};for(const A of e.snapshot.fonts)B(A.family);for(const A of Ye)B(A.family);return L}),[h,S]=j(e.snapshot.name);fe(()=>{S(e.snapshot.name)});let F;const y=()=>F?.click(),u=x=>{const L=x.currentTarget.files?.[0];L&&e.onUploadLogo(L),x.currentTarget.value=""},T=()=>{const x=h().trim();!x||x===e.snapshot.name||e.onSaveName(x)},I=()=>e.savingBrand||e.savingSemantics;return(()=>{var x=yr(),L=x.firstChild,B=L.firstChild,A=B.firstChild,w=A.nextSibling,J=L.nextSibling,O=J.firstChild,M=O.firstChild,pe=M.nextSibling,de=pe.firstChild,Be=pe.nextSibling,Se=O.nextSibling,Ce=Se.firstChild;Ce.firstChild;var Oe=J.nextSibling,Ue=Oe.firstChild,Ie=Ue.firstChild,Xe=Ie.firstChild,Re=Xe.nextSibling,Ze=Re.firstChild,oe=Ze.nextSibling,ie=Ie.nextSibling,q=Ue.nextSibling,we=q.firstChild,Le=we.firstChild,xe=Le.nextSibling,Fe=xe.firstChild,Te=Fe.nextSibling;Te.nextSibling;var le=we.nextSibling;return w.$$keydown=E=>{E.key==="Enter"&&E.currentTarget.blur()},w.addEventListener("blur",T),w.$$input=E=>S(E.currentTarget.value),pe.$$click=y,a(pe,r(m,{get when(){return e.logoUrl},get fallback(){return(()=>{var E=wr(),W=E.firstChild;return a(E,r(Bt,{class:"size-8 opacity-60"}),W),E})()},get children(){var E=mr();return P(()=>Q(E,"src",e.logoUrl)),E}}),de),a(de,r(m,{get when(){return e.uploadingLogo},get fallback(){return r(Bt,{class:"size-5"})},get children(){return r(De,{})}})),Be.addEventListener("change",u),_e(E=>{F=E},Be),a(Ce,r(m,{get when(){return e.savingSemantics},get children(){return vr()}}),null),a(Se,r(zr,{get semantics(){return e.snapshot.semantics},get saving(){return e.savingSemantics},get onSave(){return e.onSaveSemantics}}),null),oe.addEventListener("change",E=>void e.onSaveFontFamily(E.currentTarget.value)),a(oe,r(ge,{get each(){return z()},children:E=>(()=>{var W=xr();return W.value=E,a(W,E),W})()})),a(ie,r(He,{label:"Display",get family(){return o()},sample:"Aa",large:!0}),null),a(ie,r(He,{label:"Heading",get family(){return o()},sample:"The quick brown fox"}),null),a(ie,r(He,{label:"Body",get family(){return n()},sample:"Design systems stay coherent when type scales match intent."}),null),a(ie,r(He,{label:"Mono",get family(){return k()},sample:'const brand = "on-brand"'}),null),a(xe,()=>e.snapshot.iconLibrary,Fe),a(xe,()=>e.snapshot.icons.length,Te),a(le,r(ge,{get each(){return l()},children:E=>(()=>{var W=$r(),be=W.firstChild;return a(W,r(dt,{type:"Icon",get icon(){return Fr(E)},size:22,class:"text-text-strong"}),be),a(be,()=>E.key),P(()=>Q(W,"title",E.key)),W})()}),null),a(le,r(m,{get when(){return l().length===0},get children(){return hr()}}),null),a(x,r(m,{get when(){return t()},children:E=>(()=>{var W=kr(),be=W.firstChild,ye=be.nextSibling;return a(ye,r(ge,{get each(){return Object.entries(E().swatches)},children:([$e,Ne])=>r(Tr,{role:$e,color:Ne,get disabled(){return I()},onSave:(Ge,Me)=>e.onSaveSwatch(E().id,Ge,Me)})})),P(()=>Q(W,"aria-label",`Color palette ${E().name}`)),W})()}),null),P(E=>{var W=I(),be=e.uploadingLogo,ye=I();return W!==E.e&&(w.disabled=E.e=W),be!==E.t&&(pe.disabled=E.t=be),ye!==E.a&&(oe.disabled=E.a=ye),E},{e:void 0,t:void 0,a:void 0}),P(()=>w.value=h()),P(()=>oe.value=o()),x})()}Qe(["click","input","keydown"]);const Pr=new Set(["design","trellis_store_mutate","cms"]);function Ar(e){if(e.type!=="message.part.updated")return!1;const t=e.properties?.part;return!t||t.type!=="tool"||t.state.status!=="completed"?!1:Pr.has(t.tool)}var jr=b('<div class="size-full flex items-center justify-center">'),Dr=b('<div class="flex flex-col items-center gap-2 text-text-weaker px-3 text-center"><span class="text-10-medium uppercase tracking-wider break-all">'),Br=b("<img loading=lazy>",!0,!1,!1),Or=b("<div class=link-asset-preview-loading>"),Ur=b("<div class=link-asset-preview>"),Rr=b('<div class=link-asset-preview-fallback><span class="text-10-medium uppercase tracking-wider break-all px-2 text-center">'),Nr=b("<img alt class=link-asset-preview-favicon loading=lazy>",!0,!1,!1),Gr=b("<img alt class=link-asset-preview-image loading=lazy>",!0,!1,!1),Mr=b('<div class="flex items-center gap-1.5 min-w-0"><span class="text-12-medium text-text-base truncate">'),Vr=b('<img alt class="size-3.5 rounded-sm shrink-0 bg-background-base object-contain"loading=lazy>',!0,!1,!1),Jr=b("<div class=design-loading-state><span>"),qr=b('<div class="flex flex-col items-center gap-2 text-text-weaker group-hover:scale-110 transition-transform duration-300 px-2 text-center"><span class="text-10-medium uppercase tracking-wider break-all px-1">'),Kr=b('<div class=relative><input type=text class="h-7 pl-8 pr-3 bg-surface-raised-base border-none rounded-md text-12-regular w-48 focus:ring-1 focus:ring-primary-base transition-all">'),Wr=b("<div class=design-loading-strip><span>"),Hr=b("<div class=asset-grid>"),Yr=b("<div class=icon-grid>"),Qr=b('<div class="flex flex-col gap-2 p-6">'),Xr=b('<div class="flex justify-center px-6 pb-8">'),Zr=b('<div class=design-panel><input type=file class=hidden><div class=design-sidebar><div class="h-10 flex items-center px-3 border-b border-border-weaker-base shrink-0"><span class="text-xs font-medium text-text-weak opacity-80 uppercase tracking-wider"></span></div><div class="design-sidebar-items flex-1 overflow-y-auto p-2 flex flex-col gap-0.5"></div></div><div class=design-content><div class=design-header><div class="flex items-center gap-4"><h2 class="text-12-medium text-text-strong uppercase tracking-wide"></h2></div><div class="flex items-center gap-2"></div></div><div class="flex-1 overflow-y-auto"><div class="section-content-enter mx-auto w-full">'),ea=b('<button class="stagger-item design-section-btn"><span class=design-section-label><span class=truncate></span></span><span class=design-section-count>'),ta=b('<div class="py-20 flex flex-col items-center justify-center gap-4 animate-in fade-in zoom-in-95 duration-300"><div class="size-16 rounded-full bg-surface-raised-base flex items-center justify-center text-text-weaker"></div><div class=text-center><div class="text-16-medium text-text-base mb-1">No <!> yet</div><div class="text-14-regular text-text-weaker max-w-[320px]">'),na=b('<div class="text-10-regular text-text-weaker flex items-center justify-between"><span></span><span>'),ra=b('<div class="stagger-item asset-card group"><div class=asset-preview></div><div class=asset-info>'),aa=b('<div class="text-12-medium text-text-base truncate mb-0.5">'),ia=b("<div class=mb-0.5>"),la=b('<div class="text-10-regular text-text-weaker truncate mb-1">'),sa=b('<div class="stagger-item icon-grid-card group"><div class=icon-grid-preview></div><div class="icon-grid-label truncate"></div><div class="icon-grid-meta truncate">'),oa=b("<span class=text-text-weaker> · "),ca=b('<div class="flex items-center gap-1 mt-1">'),da=b('<div class="stagger-item flex items-center justify-between p-3 bg-surface-raised-base rounded-lg border border-border-weaker-base hover:border-border-base transition-all group"><div class="flex items-center gap-3 min-w-0"><div class="size-8 rounded bg-background-base flex items-center justify-center text-text-weak border border-border-weaker-base shrink-0"></div><div class=min-w-0><div class="text-13-medium text-text-base truncate"></div><div class="text-11-regular text-text-weaker truncate">'),ua=b('<span class="size-3 rounded-full border border-border-weaker-base">'),ga=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">URL</label><a target=_blank rel=noreferrer class="text-13-regular text-primary-base break-all hover:underline">'),fa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Palette</label><div class="flex flex-wrap gap-1.5">'),pa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Tone</label><div class="text-12-regular text-text-base break-words">'),ba=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Tags</label><div class="text-12-regular text-text-base break-words">'),ma=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Audio Type</label><div class="text-12-regular text-text-base capitalize">'),va=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">BPM</label><div class="text-12-regular text-text-base">'),ha=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Key</label><div class="text-12-regular text-text-base">'),ya=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Genre</label><div class="text-12-regular text-text-base break-words">'),wa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Mood</label><div class="text-12-regular text-text-base break-words">'),xa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Transcript</label><textarea rows=8 readonly class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-12-regular resize-none">'),$a=b('<div class=detail-sidebar><div class="h-12 flex items-center justify-between px-4 border-b border-border-weaker-base shrink-0"><span class="text-13-semibold text-text-base">Asset Details</span></div><div class="flex-1 overflow-y-auto p-4 flex flex-col gap-6"><div class="aspect-square rounded-lg bg-background-base border border-border-weaker-base flex items-center justify-center overflow-hidden shrink-0"></div><div class="flex flex-col gap-4"><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block"></label><div class="text-13-regular text-text-base break-all"></div></div><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Title</label><input type=text placeholder="Add a title..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-13-regular"></div><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Alt Text</label><textarea rows=2 placeholder="Describe for accessibility..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-13-regular resize-none"></textarea></div><div><div class="flex items-center justify-between mb-1.5"><label class="text-11-medium text-text-weaker uppercase">Description</label></div><textarea rows=4 placeholder="Semantic description for agents and CMS..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-12-regular resize-none"></textarea></div><div class="grid grid-cols-2 gap-4 pt-2 border-t border-border-weaker-base"><div><label class="text-11-medium text-text-weaker uppercase mb-1 block">Size</label><div class="text-12-regular text-text-base"></div></div><div><label class="text-11-medium text-text-weaker uppercase mb-1 block">Type</label><div class="text-12-regular text-text-base uppercase"></div></div></div></div></div><div class="p-4 border-t border-border-weaker-base flex flex-col gap-2">'),ka=b('<audio controls class="w-full px-4">'),_a=b('<div class="flex flex-col items-center gap-2 text-text-weaker p-4"><span class="text-12-medium uppercase tracking-wider">'),Sa=b('<div class="flex items-center gap-1.5 border border-border-weaker-base bg-surface-raised-base rounded px-1.5 py-1 min-w-0"><span class="text-11-regular text-text-base font-mono truncate">'),Ca=b('<span class="size-4 shrink-0 rounded-sm border border-border-weaker-base">');const Ia=new Set(["assets","videos","documents","models","audio","links","sprites"]),La=["Brand","Icon","ColorPalette","Font","DesignComponent","DesignToken"],st=500,Pe=120;function yt(e,t){if(!e||typeof IntersectionObserver>"u"){t();return}const l=new IntersectionObserver(o=>{o.some(n=>n.isIntersecting)&&(l.disconnect(),t())},{rootMargin:"320px 0px"});return l.observe(e),()=>l.disconnect()}const ee=e=>Ia.has(e),Ae=e=>e==="brand"||e==="icons"||e==="colors"||e==="type",ot=(e,t)=>e==="assets"?t.category==="image":e==="videos"?t.category==="video":e==="documents"?t.category==="document":e==="models"?t.category==="model3d"||t.category==="texture":e==="links"?t.category==="link":e==="sprites"?t.category==="spritesheet"||t.path.includes(".trellis/media/sprites/")||t.path.includes(".trellis/sprites/"):t.category==="audio",Fa=e=>e==="assets"?"image/*":e==="videos"?"video/*":e==="documents"?".pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,application/pdf":e==="models"?".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.dae,.blend,.usd,.abc,.hdr,.exr,.ktx,.ktx2,.dds,.tga,.psd":e==="sprites"?"image/png,image/webp,image/gif":"audio/*",ct=e=>e==="image"||e==="video"||e==="audio"||e==="document",Ta=e=>{const t=e.toLowerCase();return["png","jpg","jpeg","gif","webp","svg","ico","bmp","avif"].includes(t)?"image":["glb","gltf","obj","fbx","usdz","stl","ply","dae","blend","usd","abc"].includes(t)?"model3d":["hdr","exr","ktx","ktx2","dds","tga","psd"].includes(t)?"texture":["mp4","m4v","mov","webm","ogv","avi","mkv"].includes(t)?"video":["mp3","wav","ogg","flac","aac","m4a","opus"].includes(t)?"audio":["pdf","doc","docx","xls","xlsx","ppt","pptx"].includes(t)?"document":"other"};function an(e){const t=Wt();let l;const[o,n]=j(!1),[k]=ut(()=>o()?e.path:void 0,async h=>{const S=en(t.url,h,t.directory),F=await t.fetch(S);if(!F.ok)throw new Error(`Failed to load image (${F.status})`);return URL.createObjectURL(await F.blob())});vt(()=>{const h=yt(l,()=>n(!0));h&&he(h)}),fe(()=>{const h=k();he(()=>{h&&URL.revokeObjectURL(h)})});const z=()=>{if(!(k.loading||k.error))return k()};return(()=>{var h=jr(),S=l;return typeof S=="function"?_e(S,h):l=h,a(h,r(m,{get when(){return z()},get fallback(){return(()=>{var F=Dr(),y=F.firstChild;return a(F,r(m,{get when(){return G(()=>!!o())()&&k.loading},get fallback(){return r(Gn,{class:"size-8"})},get children(){return r(De,{class:"size-5"})}}),y),a(y,()=>e.name),F})()},children:F=>(()=>{var y=Br();return P(u=>{var T=F(),I=e.name,x=e.class;return T!==u.e&&Q(y,"src",u.e=T),I!==u.t&&Q(y,"alt",u.t=I),x!==u.a&&Nn(y,u.a=x),u},{e:void 0,t:void 0,a:void 0}),y})()})),h})()}function ln(e){let t;const l=(()=>{const w=dr(e.url);if(w)return w;if(e.previewImage||e.previewFavicon)return{url:e.url,image:e.previewImage,favicon:e.previewFavicon}})(),[o,n]=j(l),[k,z]=j(!o()?.image&&!e.previewImage),[h,S]=j(!!(o()?.image??e.previewImage)),[F,y]=j(!1),[u,T]=j(!1);let I=!1;vt(()=>{const w=yt(t,()=>T(!0));w&&he(w)}),fe(()=>{!u()||I||(I=!0,e.load(e.url).then(w=>{w&&n(w),z(!1);const J=w?.image??e.previewImage;S(!!J),y(!J)}))});const x=()=>o()?.image??e.previewImage,L=()=>o()?.favicon??e.previewFavicon??nn(e.url,64),B=()=>!!x()&&!F(),A=()=>k()||B()&&h();return(()=>{var w=Ur(),J=t;return typeof J=="function"?_e(J,w):t=w,a(w,r(m,{get when(){return G(()=>!!B())()?x():void 0},keyed:!0,get fallback(){return(()=>{var O=Rr(),M=O.firstChild;return a(O,r(m,{get when(){return L()},get fallback(){return r(Xt,{class:"size-8"})},children:pe=>(()=>{var de=Nr();return P(()=>Q(de,"src",pe())),de})()}),M),a(M,()=>e.title),O})()},children:O=>(()=>{var M=Gr();return M.addEventListener("error",()=>{S(!1),y(!0)}),M.addEventListener("load",()=>{S(!1),y(!1)}),Q(M,"src",O),M})()}),null),a(w,r(m,{get when(){return A()},get children(){var O=Or();return a(O,r(De,{class:"size-5 text-text-weaker"})),O}}),null),w})()}function za(e){let t;const[l,o]=j(nn(e.url,32)),[n,k]=j(!1);let z=!1;return vt(()=>{const h=yt(t,()=>k(!0));h&&he(h)}),fe(()=>{!n()||z||(z=!0,e.load(e.url).then(h=>{h?.favicon&&o(h.favicon)}))}),(()=>{var h=Mr(),S=h.firstChild,F=t;return typeof F=="function"?_e(F,h):t=h,a(h,r(m,{get when(){return l()},children:y=>(()=>{var u=Vr();return u.addEventListener("error",T=>{T.currentTarget.style.display="none"}),P(()=>Q(u,"src",y())),u})()}),S),a(S,()=>e.title),P(()=>Q(S,"title",e.title)),h})()}function Ea(e){return(()=>{var t=Jr(),l=t.firstChild;return a(t,r(De,{class:"size-5 text-text-weaker"}),l),a(l,()=>e.label),t})()}function Pa(e){return r(m,{get when(){return G(()=>e.asset.category==="link")()&&e.asset.url},get fallback(){return r(m,{get when(){return e.asset.category==="image"},get fallback(){return(()=>{var t=qr(),l=t.firstChild;return a(t,r(m,{get when(){return e.asset.category==="video"},get fallback(){return r(m,{get when(){return e.asset.category==="audio"},get fallback(){return r(m,{get when(){return e.asset.category==="model3d"||e.asset.category==="texture"},get fallback(){return r(m,{get when(){return e.asset.category==="document"},get fallback(){return r(Qt,{class:"size-8"})},get children(){return r(mt,{class:"size-8"})}})},get children(){return r(pt,{class:"size-8"})}})},get children(){return r(Zt,{class:"size-8"})}})},get children(){return r(bt,{class:"size-8"})}}),l),a(l,()=>e.asset.ext),t})()},get children(){return r(an,{get path(){return e.asset.path},get name(){return e.asset.name},class:"size-full object-contain group-hover:scale-110 transition-transform duration-500 ease-out"})}})},children:t=>r(ln,{get url(){return t()},get title(){return e.asset.title?.trim()||e.asset.name},get previewImage(){return e.asset.previewImage},get previewFavicon(){return e.asset.previewFavicon},get load(){return e.load}})})}const Aa=e=>{if(typeof window>"u")return e==="assets"?"assets":"brand";const l=new URLSearchParams(window.location.search).get("section");return e==="assets"?l&&ee(l)?l:"assets":l&&!ee(l)?l:"brand"},ja=[{id:"brand",label:"Brand",icon:Dn,description:"Project identity, tone, and linked design defaults.",panel:"design"},{id:"icons",label:"Icons",icon:Bn,description:"Project-enabled icon set for UI and CMS.",panel:"design"},{id:"colors",label:"Colors",icon:gt,description:"Color palettes and semantic roles.",panel:"design"},{id:"type",label:"Type",icon:Ht,description:"Project fonts and typographic choices.",panel:"design"},{id:"tokens",label:"Tokens",icon:Yt,description:"Design tokens like spacing, radius, and motion.",panel:"design"},{id:"components",label:"Components",icon:On,description:"Reusable UI components and elements.",panel:"design"},{id:"assets",label:"Images",icon:Un,description:"Images and visual media files.",panel:"assets"},{id:"videos",label:"Videos",icon:bt,description:"Video clips and motion media.",panel:"assets"},{id:"documents",label:"Documents",icon:mt,description:"PDFs, docs, spreadsheets, and presentations.",panel:"assets"},{id:"links",label:"Links",icon:Xt,description:"Reusable bookmarks and external references.",panel:"assets"},{id:"audio",label:"Audio",icon:Zt,description:"Sound effects, music, and voice clips.",panel:"assets"},{id:"models",label:"3D models",icon:pt,description:"3D models, meshes, and texture maps.",panel:"assets"},{id:"sprites",label:"Sprite sheets",icon:Rn,description:"2D pixel art atlases and sprite sheets (graph projections coming).",panel:"assets"}];function sn(e){const t=Wt(),l=ft(),o=En(),[n,k]=j(Aa(e.panel)),z=()=>ja.filter(i=>i.panel===e.panel),[h,S]=j(""),[F,y]=j([]),[u,T]=j(!1),I=async()=>{try{const i=await t.fetch(`${t.url}/file/media/list?directory=${encodeURIComponent(t.directory)}`);return i.ok?await i.json():[]}catch{return[]}},[x,{refetch:L}]=ut(()=>e.panel==="assets"?`${t.url}:${t.directory}`:void 0,I,{initialValue:[]}),B=async()=>{if(e.panel!=="design")return{entities:[],facts:[]};const i=[];try{for(const c of La)for(let g=0;;g+=st){const f=await t.fetch(Ot(t.url,t.directory,`/store/entities?type=${encodeURIComponent(c)}&limit=${st}&offset=${g}`));if(!f.ok)break;const $=await f.json();if(i.push(...$),$.length<st)break}const s=[];for(let c=0;c<i.length;c+=12){const g=i.slice(c,c+12),f=await Promise.all(g.map(async $=>{try{const X=await t.fetch(Ot(t.url,t.directory,`/store/entity/${encodeURIComponent($.id)}`));return X.ok?await X.json():void 0}catch{return}}));for(const $ of f)$&&s.push(...$.facts)}return{entities:i,facts:s}}catch{return{entities:i,facts:[]}}},[A,{refetch:w}]=ut(()=>e.panel==="design"?`${t.url}:${t.directory}`:void 0,B,{initialValue:{entities:[],facts:[]}});fe(()=>{const i=s=>{const c=s.detail;if(!c)return;if(c.section){const $=c.section;if(ee($)&&e.panel!=="assets"||!ee($)&&e.panel!=="design")return;k($)}const g=J(),f=c.path?g.find($=>$.path===c.path):c.entity?g.find($=>$.path.includes(c.entity.split(":").pop()??"")||$.url?.includes(c.entity.split(":").pop()??"")):void 0;f&&M(f)};window.addEventListener("design-navigate",i),he(()=>window.removeEventListener("design-navigate",i))}),fe(()=>{if(e.panel!=="design")return;const i=t.event.listen(s=>{if(Ar(s.details)){w();return}if(s.details.type!=="file.watcher.updated")return;const c=s.details.properties,g=c.file?.replace(/^\/+/,"");g&&(g.includes(".trellis/brand")&&(c.event==="add"||c.event==="change"||c.event==="unlink")&&w(),!(!g.includes(".trellis/media")&&!g.includes(".trellis/assets"))&&(c.event==="add"||c.event==="change"||c.event==="unlink")&&L())});he(i)});const J=ae(()=>{const i=x()??[];return[...F().filter(c=>!i.some(g=>g.path===c.path)),...i]}),[O,M]=j(null),[pe,de]=j(!1),[Be,Se]=j(!1),[Ce,Oe]=j(!1),[Ue,Ie]=j(!1),[Xe,Re]=j(!1),[Ze,oe]=j(!1),ie=()=>A()?.entities??[],q=()=>A()?.facts??[],we=ae(()=>ie().filter(i=>i.type==="DesignComponent")),Le=ae(()=>ie().filter(i=>i.type==="DesignToken")),xe=ae(()=>ie().filter(i=>i.type==="Icon")),Fe=ae(()=>ie().filter(i=>i.type==="ColorPalette")),Te=ae(()=>ie().filter(i=>i.type==="Font")),le=ae(()=>Rt(q(),ie())),E=ae(()=>{const i=J();return{brand:le()?1:0,icons:xe().length,colors:Fe().length,type:Te().length,assets:i.filter(s=>s.category==="image").length,videos:i.filter(s=>s.category==="video").length,documents:i.filter(s=>s.category==="document").length,links:i.filter(s=>s.category==="link").length,models:i.filter(s=>s.category==="model3d"||s.category==="texture").length,audio:i.filter(s=>s.category==="audio").length,components:we().length,tokens:Le().length,sprites:i.filter(s=>ot("sprites",s)).length}}),W=()=>{const i=h().toLowerCase();if(n()==="brand")return[];if(ee(n())){const s=J().filter(c=>ot(n(),c));return i?s.filter(c=>c.name.toLowerCase().includes(i)||c.path.toLowerCase().includes(i)||c.url?.toLowerCase().includes(i)||c.title?.toLowerCase().includes(i)||c.description?.toLowerCase().includes(i)||c.tone?.toLowerCase().includes(i)||c.tags?.some(g=>g.toLowerCase().includes(i))):s}if(n()==="icons"){const s=xe();return i?s.filter(c=>{const g=String(p(q(),c.id,"key")??""),f=String(p(q(),c.id,"library")??"");return`${g} ${f} ${c.id}`.toLowerCase().includes(i)}):s}if(n()==="colors"){const s=Fe();return i?s.filter(c=>`${String(p(q(),c.id,"name")??"")} ${c.id}`.toLowerCase().includes(i)):s}if(n()==="type"){const s=Te();return i?s.filter(c=>`${String(p(q(),c.id,"family")??"")} ${c.id}`.toLowerCase().includes(i)):s}if(n()==="components"){const s=we();return i?s.filter(c=>q().find(f=>f.e===c.id&&f.a==="label")?.v?.toLowerCase().includes(i)):s}if(n()==="tokens"){const s=Le();return i?s.filter(c=>q().find(f=>f.e===c.id&&f.a==="label")?.v?.toLowerCase().includes(i)):s}return[]},[be,ye]=j(Pe);fe(Pn(()=>`${n()}:${h()}`,()=>ye(Pe)));const $e=ae(()=>W().slice(0,be())),Ne=ae(()=>Math.max(0,W().length-$e().length)),Ge=()=>ee(n())?x.loading:e.panel==="design"&&A.loading,Me=()=>Ge()&&W().length===0&&!(n()==="brand"&&le()),wt=()=>ee(n())?"Loading assets...":"Loading design inventory...",xt=i=>{if(!i)return"0 B";const s=1024,c=["B","KB","MB","GB"],g=Math.floor(Math.log(i)/Math.log(s));return parseFloat((i/Math.pow(s,g)).toFixed(1))+" "+c[g]},$t=i=>en(t.url,i,t.directory),et=i=>rn(s=>t.fetch(s),t.url,t.directory,i);fe(()=>{const i=J().filter(f=>f.category==="link"&&!!f.url);if(!i.length)return;const s=i.slice(0,Pe);for(const f of s)(f.previewImage||f.previewFavicon)&&Nt({url:f.url,image:f.previewImage,favicon:f.previewFavicon,title:f.title});const c=()=>Gt(f=>t.fetch(f),t.url,t.directory,s.map(f=>f.url));if(typeof window<"u"&&"requestIdleCallback"in window){const f=window.requestIdleCallback(()=>void c(),{timeout:2500});he(()=>window.cancelIdleCallback(f));return}const g=setTimeout(()=>void c(),250);he(()=>clearTimeout(g))});const Ve=i=>i.title?.trim()||i.name,on=i=>i.description?.trim()||i.alt?.trim()||i.tone?.trim(),cn=i=>/^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(i.trim())?i.trim():void 0,kt=(i,s)=>{y(g=>g.map(f=>f.path===i?{...f,...s}:f));const c=O();c?.path===i&&M({...c,...s})},tt=async(i,s=!1)=>{const c=await t.fetch(`${t.url}/file/media/describe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:i.path,force:s})});if(!c.ok)return;const g=await c.json();!g.description&&!g.tone&&!g.tags?.length&&!g.palette?.length&&!g.transcript&&!g.audioAnalysis||(kt(i.path,g),await L())},ke=async()=>{const i=Rt(q(),ie());if(!i){R({variant:"error",title:"No brand to refresh"});return}const s=await o.assert(cr(i));s&&await w(),R(s?{title:"Brand snapshot refreshed"}:{variant:"error",title:"Failed to refresh brand"})},dn=async i=>{const s=le();if(!s)return;if(!i.type.startsWith("image/")){R({variant:"error",title:"Logo must be an image file"});return}const g=`logo.${i.name.match(/\.(svg|png|jpe?g|webp|avif)$/i)?.[1]?.toLowerCase()??(i.type.includes("svg")?"svg":"png")}`;Ie(!0);try{const f=new FormData;f.append("file",i,g),f.append("path",".trellis/brand"),f.append("name",g);const $=await t.fetch(`${t.url}/file/upload?directory=${encodeURIComponent(t.directory)}`,{method:"POST",body:f});if(!$.ok){const Y=await $.json().catch(()=>({}));throw new Error(Y.error??"Upload failed")}const X=await $.json();if(!await o.assert([{e:s.id,a:"logoPath",v:X.path}]))throw new Error("Failed to save logo on brand");await ke(),R({title:"Brand logo updated"})}catch(f){R({variant:"error",title:"Logo upload failed",description:f instanceof Error?f.message:String(f)})}finally{Ie(!1)}},un=async i=>{const s=le();if(s){Re(!0);try{if(!await o.assert([{e:s.id,a:"semantics",v:JSON.stringify(i)}])){R({variant:"error",title:"Failed to update brand voice"});return}await ke()}finally{Re(!1)}}},gn=async i=>{const s=le();if(!(!s||!i.trim())){oe(!0);try{if(!await o.assert([{e:s.id,a:"name",v:i.trim()}])){R({variant:"error",title:"Failed to update brand name"});return}await ke()}finally{oe(!1)}}},fn=async(i,s,c)=>{const g=le();if(!g)return;const f=g.palettes.find($=>$.id===i);if(f){oe(!0);try{const $={...f.swatches,[s]:c};if(!await o.assert([{e:i,a:"swatches",v:JSON.stringify($)}])){R({variant:"error",title:"Failed to update color"});return}await ke()}finally{oe(!1)}}},pn=async i=>{const s=le();if(!s||!i.trim())return;const c=i.trim(),g=tn(c),f=Ye.find($=>$.family===c);oe(!0);try{const $=[];if(!s.fonts.some(Y=>Y.id===g)){const Y=Ut({family:c,category:f?.category,variants:f?[...f.variants]:["regular"]});Y&&$.push(...Y)}const X=[...new Set([...s.fonts.map(Y=>Y.id),g])];if($.push({e:s.id,a:"fontIds",v:JSON.stringify(X)},{e:s.id,a:"headingFontId",v:g},{e:s.id,a:"bodyFontId",v:g}),!await o.assert($)){R({variant:"error",title:"Failed to update typography"});return}await ke()}finally{oe(!1)}},_t=async()=>{if(n()==="brand")return;if(n()==="icons"){T(!0);return}if(n()==="type"){const f=window.prompt(`Font family (${Ye.map(Y=>Y.family).join(", ")}, …):`,"Inter");if(!f?.trim())return;const $=Ye.find(Y=>Y.family.toLowerCase()===f.trim().toLowerCase()),X=Ut({family:f.trim(),category:$?.category,variants:$?[...$.variants]:["regular"],catalogRef:$?`google-fonts:${$.family}`:void 0}),re=await o.assert(X);re&&await w(),R(re?{title:"Font added"}:{variant:"error",title:"Failed to add font"});return}if(n()==="colors"){const f=window.prompt("Palette name:","Custom");if(!f?.trim())return;const $=rr({name:f.trim(),swatches:{...ar},tags:["custom"]}),X=await o.assert($);X&&await w(),R(X?{title:"Palette added"}:{variant:"error",title:"Failed to add palette"});return}if(n()==="links"){xn();return}if(ee(n())){ze?.click();return}const i=window.prompt(`Enter ${n().slice(0,-1)} name:`);if(!i)return;const s=`design:${n()}:${Date.now()}`,c=n()==="components"?"DesignComponent":"DesignToken";await o.assert([{e:s,a:"type",v:c},{e:s,a:"label",v:i},{e:s,a:"createdAt",v:new Date().toISOString()}])?(await w(),R({title:`${n().slice(0,-1)} added`})):R({variant:"error",title:"Failed to add item"})},St=async i=>{if(!confirm("Delete this item?"))return;const s=q().filter(g=>g.e===i);await o.retract(s)&&(await w(),R({title:"Item deleted"}))},bn=async i=>{if(ct(i.category)){Se(!0);try{if(await tt(i,!0),O()?.path===i.path){const c=J().find(g=>g.path===i.path);c&&M(c)}R({title:"Semantic metadata generated"})}catch{R({variant:"error",title:"Metadata analysis failed",description:"Check GEMINI_API_KEY or try Regenerate in the asset panel."})}finally{Se(!1)}}},mn=async i=>{const s=i.target;if(!s.files?.length)return;const c=s.files[0],g=new FormData;g.append("file",c),g.append("path",".trellis/media");try{const f=await t.fetch(`${t.url}/file/upload?directory=${encodeURIComponent(t.directory)}`,{method:"POST",body:g});if(f.ok){const $=await f.json(),X=$.path.split(".").pop()?.toLowerCase()??"bin",re={path:$.path,name:$.path.split("/").pop()??c.name,ext:X,category:Ta(X),size:$.size};y(Y=>[re,...Y]),M(re),R({title:"Asset uploaded",description:ct(re.category)?"Analyzing with Gemini…":void 0}),await L(),ct(re.category)&&await bn(re)}else{const $=await f.json();R({variant:"error",title:"Upload failed",description:$.error})}}catch(f){R({variant:"error",title:"Upload failed",description:String(f)})}finally{s.value=""}},nt=async i=>{const s=O();if(s){de(!0);try{(await t.fetch(`${t.url}/file/media/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:s.path,...i})})).ok?(R({title:"Metadata updated"}),kt(s.path,i),await L()):R({variant:"error",title:"Update failed"})}catch(c){R({variant:"error",title:"Update failed",description:String(c)})}finally{de(!1)}}},vn=async()=>{const i=O();if(i){de(!0);try{await tt(i,!0),R({title:"Metadata generated"})}catch{R({variant:"error",title:"Generation failed"})}finally{de(!1)}}},hn=async i=>{Oe(!0);try{const{url:s,body:c}=Zn(t.url,t.directory,i),g=await t.fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!g.ok){const $=await g.json().catch(()=>null);throw new Error(Vt($,`Image generation failed (${g.status})`))}const f=await g.json();y($=>[f,...$]),k("assets"),M(f),R({title:"Image asset generated",description:f.name}),await L()}finally{Oe(!1)}},yn=()=>{l.show(()=>r(Kn,{onGenerate:hn}))},wn=async i=>{const s=await t.fetch(`${t.url}/file/media/link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!s.ok){const g=await s.json().catch(()=>({error:"Failed to add link"}));throw new Error(g.error??"Failed to add link")}const c=await s.json();y(g=>[c,...g]),k("links"),M(c),R({title:"Link asset added",description:c.url}),c.url&&(Nt({url:c.url,image:c.previewImage,favicon:c.previewFavicon,title:c.title}),Gt(g=>t.fetch(g),t.url,t.directory,[c.url])),await L(),tt(c).catch(()=>{})},xn=()=>{l.show(()=>r(Hn,{onCreate:wn}))};let ze;return fe(()=>{const i=n();!ee(i)||!ze||(ze.accept=Fa(i))}),(()=>{var i=Zr(),s=i.firstChild,c=s.nextSibling,g=c.firstChild,f=g.firstChild,$=g.nextSibling,X=c.nextSibling,re=X.firstChild,Y=re.firstChild,$n=Y.firstChild,Je=Y.nextSibling,Ct=re.nextSibling,qe=Ct.firstChild;s.addEventListener("change",mn);var It=ze;return typeof It=="function"?_e(It,s):ze=s,a(f,()=>e.panel==="assets"?"Assets":"Design"),a($,r(ge,{get each(){return z()},children:(d,v)=>(()=>{var V=ea(),N=V.firstChild,ne=N.firstChild,U=N.nextSibling;return V.$$click=()=>{k(d.id),M(null)},a(N,r(d.icon,{class:"size-4 opacity-70 shrink-0"}),ne),a(ne,()=>d.label),a(U,()=>E()[d.id]),P(C=>{var D=`${v()*50}ms`,te=n()===d.id;return D!==C.e&&me(V,"animation-delay",C.e=D),te!==C.t&&V.classList.toggle("active",C.t=te),C},{e:void 0,t:void 0}),V})()})),a($n,()=>z().find(d=>d.id===n())?.label),a(Y,r(m,{get when(){return ee(n())||Ae(n())&&n()!=="brand"},get children(){var d=Kr(),v=d.firstChild;return a(d,r(An,{class:"absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-weaker"}),v),v.$$input=V=>S(V.currentTarget.value),P(()=>Q(v,"placeholder",Ae(n())?"Search design inventory...":"Search assets...")),P(()=>v.value=h()),d}}),null),a(Je,r(m,{get when(){return ee(n())},get children(){return r(ce,{size:"small",variant:"secondary",onClick:()=>L(),children:"Refresh"})}}),null),a(Je,r(m,{get when(){return n()==="assets"},get children(){return r(ce,{size:"small",variant:"secondary",onClick:yn,get disabled(){return Ce()},get children(){return[r(gt,{class:"size-3.5 mr-1.5"}),G(()=>Ce()?"Generating...":"Generate")]}})}}),null),a(Je,r(m,{get when(){return n()==="brand"},get children(){return r(ce,{size:"small",variant:"secondary",onClick:()=>void ke(),children:"Refresh snapshot"})}}),null),a(Je,r(m,{get when(){return n()!=="brand"},get children(){return r(ce,{size:"small",variant:"primary",onClick:_t,get children(){return[r(jn,{class:"size-3.5 mr-1.5"}),"Add"," ",G(()=>G(()=>!!ee(n()))()?"Asset":G(()=>n()==="type")()?"Font":G(()=>n()==="colors")()?"Palette":G(()=>n()==="icons")()?"Icon":n().slice(0,-1))]}})}}),null),a(Ct,r(m,{get when(){return G(()=>!!Ge())()&&!Me()},get children(){var d=Wr(),v=d.firstChild;return a(d,r(De,{class:"size-3.5 text-text-weaker"}),v),a(v,wt),d}}),qe),a(qe,r(m,{get when(){return G(()=>n()==="brand")()&&le()||ee(n())&&W().length>0||Ae(n())&&n()!=="brand"&&W().length>0||n()==="components"&&we().length>0||n()==="tokens"&&Le().length>0},get fallback(){return r(m,{get when(){return!Me()},get fallback(){return r(Ea,{get label(){return wt()}})},get children(){var d=ta(),v=d.firstChild,V=v.nextSibling,N=V.firstChild,ne=N.firstChild,U=ne.nextSibling;U.nextSibling;var C=N.nextSibling;return a(v,()=>{const D=z().find(te=>te.id===n())?.icon;return r(D,{class:"size-8"})}),a(N,n,U),a(C,()=>n()==="brand"&&"Seed defaults or open a project with Trellis initialized to create a project brand.",null),a(C,()=>n()==="icons"&&"Enable icons from the Lucide or custom catalog for this project.",null),a(C,()=>n()==="colors"&&"Create palettes with semantic roles like primary, surface, and accent.",null),a(C,()=>n()==="type"&&"Add fonts from the curated catalog to build your project type system.",null),a(C,()=>n()==="assets"&&"Images and visual media in .trellis/media will appear here.",null),a(C,()=>n()==="videos"&&"Upload MP4, MOV, WebM, and other video files for your project.",null),a(C,()=>n()==="documents"&&"Upload PDFs, Word docs, spreadsheets, and presentations.",null),a(C,()=>n()==="links"&&"Save bookmarks and external URLs as reusable Trellis assets.",null),a(C,()=>n()==="models"&&"Upload GLB, GLTF, OBJ, HDR, and other 3D or texture files.",null),a(C,()=>n()==="audio"&&"Upload MP3, WAV, and other audio files for your project.",null),a(C,()=>n()==="sprites"&&"Upload atlas PNGs to .trellis/media/sprites. Graph-backed regions and animations are defined in specs/sprite-atlas-graph.md.",null),a(C,()=>n()==="components"&&"Components defined in your project will appear here.",null),a(C,()=>n()==="tokens"&&"Centralize your styling with theme-aware tokens.",null),a(d,r(m,{get when(){return G(()=>!!(ee(n())||Ae(n())&&n()!=="brand"||n()==="components"||n()==="tokens"))()&&n()!=="brand"},get children(){return r(ce,{variant:"secondary",class:"mt-2",onClick:_t,get children(){return["Add your first"," ",G(()=>G(()=>!!ee(n()))()?"asset":G(()=>n()==="type")()?"font":G(()=>n()==="colors")()?"palette":G(()=>n()==="icons")()?"icon":n().slice(0,-1))]}})}}),null),d}})},get children(){return[r(m,{get when(){return G(()=>n()==="brand")()&&le()},children:d=>r(Er,{get snapshot(){return d()},get logoUrl(){return G(()=>!!d().logoPath)()?$t(d().logoPath):void 0},get uploadingLogo(){return Ue()},get savingSemantics(){return Xe()},get savingBrand(){return Ze()},onUploadLogo:dn,onSaveSemantics:un,onSaveName:gn,onSaveSwatch:fn,onSaveFontFamily:pn})}),r(m,{get when(){return ee(n())},get children(){var d=Hr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=ra(),ne=N.firstChild,U=ne.nextSibling;return N.$$click=()=>M(v),a(ne,r(Pa,{asset:v,load:et})),a(U,r(m,{get when(){return G(()=>v.category==="link")()&&v.url},get fallback(){return(()=>{var C=aa();return a(C,()=>Ve(v)),P(()=>Q(C,"title",Ve(v))),C})()},children:C=>(()=>{var D=ia();return a(D,r(za,{get url(){return C()},get title(){return Ve(v)},load:et})),D})()}),null),a(U,r(m,{get when(){return on(v)},children:C=>(()=>{var D=la();return a(D,C),P(()=>Q(D,"title",C())),D})()}),null),a(U,r(m,{get when(){return v.category!=="link"},get children(){var C=na(),D=C.firstChild,te=D.nextSibling;return a(D,()=>v.ext.toUpperCase()),a(te,()=>xt(v.size)),C}}),null),P(C=>{var D=`${V()*30}ms`,te=O()?.path===v.path;return D!==C.e&&me(N,"animation-delay",C.e=D),te!==C.t&&N.classList.toggle("selected",C.t=te),C},{e:void 0,t:void 0}),N})()})),d}}),r(m,{get when(){return n()==="icons"},get children(){var d=Yr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=sa(),ne=N.firstChild,U=ne.nextSibling,C=U.nextSibling;return a(ne,r(dt,{type:"Icon",get icon(){return String(p(q(),v.id,"catalogRef")??p(q(),v.id,"key")??"thing")},size:28})),a(U,()=>String(p(q(),v.id,"key")??v.id)),a(C,()=>String(p(q(),v.id,"library")??"lucide")),a(N,r(Ke,{icon:"trash",variant:"ghost",class:"icon-grid-delete opacity-0 group-hover:opacity-100",onClick:()=>void St(v.id),"aria-label":"Delete icon"}),null),P(D=>{var te=`${V()*25}ms`,Z=String(p(q(),v.id,"key")??v.id);return te!==D.e&&me(N,"animation-delay",D.e=te),Z!==D.t&&Q(U,"title",D.t=Z),D},{e:void 0,t:void 0}),N})()})),d}}),r(m,{get when(){return G(()=>!!(Ae(n())&&n()!=="brand"))()&&n()!=="icons"||n()==="components"||n()==="tokens"},get children(){var d=Qr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=da(),ne=N.firstChild,U=ne.firstChild,C=U.nextSibling,D=C.firstChild,te=D.nextSibling;return a(U,r(m,{get when(){return n()==="icons"},get fallback(){return r(m,{get when(){return n()==="colors"},get fallback(){return r(m,{get when(){return n()==="type"},get fallback(){return r(Yt,{class:"size-4"})},get children(){return r(Ht,{class:"size-4"})}})},get children(){return r(gt,{class:"size-4"})}})},get children(){return r(dt,{type:"Icon",get icon(){return String(p(q(),v.id,"catalogRef")??p(q(),v.id,"key")??"thing")},size:16})}})),a(D,r(m,{get when(){return n()==="icons"},get fallback(){return r(m,{get when(){return n()==="colors"},get fallback(){return r(m,{get when(){return n()==="type"},get fallback(){return q().find(Z=>Z.e===v.id&&Z.a==="label")?.v},get children(){return String(p(q(),v.id,"family")??v.id)}})},get children(){return String(p(q(),v.id,"name")??v.id)}})},get children(){return[G(()=>String(p(q(),v.id,"key")??v.id)),(()=>{var Z=oa();return Z.firstChild,a(Z,()=>String(p(q(),v.id,"library")??"lucide"),null),Z})()]}})),a(te,()=>v.id),a(C,r(m,{get when(){return n()==="colors"},get children(){var Z=ca();return a(Z,r(ge,{get each(){return Object.values(se(p(q(),v.id,"swatches"),{})).slice(0,6)},children:rt=>(()=>{var Ee=ua();return me(Ee,"background-color",rt),Ee})()})),Z}}),null),a(N,r(Ke,{icon:"trash-2",variant:"ghost",size:"small",class:"opacity-0 group-hover:opacity-100 transition-opacity text-text-destructive",onClick:()=>St(v.id)}),null),P(Z=>me(N,"animation-delay",`${V()*20}ms`)),N})()})),d}}),r(m,{get when(){return Ne()>0},get children(){var d=Xr();return a(d,r(ce,{variant:"secondary",onClick:()=>ye(v=>v+Pe),get children(){return["Show ",G(()=>Math.min(Pe,Ne()))," more"]}})),d}})]}})),a(i,r(m,{get when(){return O()},children:d=>r(m,{get when(){return G(()=>!!ee(n()))()&&ot(n(),d())},get children(){var v=$a(),V=v.firstChild;V.firstChild;var N=V.nextSibling,ne=N.firstChild,U=ne.nextSibling,C=U.firstChild,D=C.firstChild,te=D.nextSibling,Z=C.nextSibling,rt=Z.firstChild,Ee=rt.nextSibling,Lt=Z.nextSibling,kn=Lt.firstChild,Ft=kn.nextSibling,Tt=Lt.nextSibling,at=Tt.firstChild;at.firstChild;var zt=at.nextSibling,ue=Tt.nextSibling,Et=ue.firstChild,_n=Et.firstChild,Sn=_n.nextSibling,Cn=Et.nextSibling,In=Cn.firstChild,Ln=In.nextSibling,Fn=N.nextSibling;return a(V,r(Ke,{icon:"plus",variant:"ghost",size:"small",class:"rotate-45",onClick:()=>M(null)}),null),a(ne,r(m,{get when(){return d().category==="image"},get fallback(){return r(m,{get when(){return d().category==="audio"},get fallback(){return r(m,{get when(){return d().category==="link"},get fallback(){return(()=>{var _=_a(),K=_.firstChild;return a(_,r(m,{get when(){return d().category==="model3d"||d().category==="texture"},get fallback(){return r(m,{get when(){return d().category==="video"},get fallback(){return r(m,{get when(){return d().category==="document"},get fallback(){return r(Qt,{class:"size-12"})},get children(){return r(mt,{class:"size-12"})}})},get children(){return r(bt,{class:"size-12"})}})},get children(){return r(pt,{class:"size-12"})}}),K),a(K,()=>d().ext),_})()},get children(){return r(m,{get when(){return d().url},keyed:!0,children:_=>r(ln,{url:_,get title(){return Ve(d())},get previewImage(){return d().previewImage},get previewFavicon(){return d().previewFavicon},load:et})})}})},get children(){var _=ka();return P(()=>Q(_,"src",$t(d().path))),_}})},get children(){return r(an,{get path(){return d().path},get name(){return d().name},class:"size-full object-contain"})}})),a(D,()=>d().category==="link"?"Asset ID":"File Name"),a(te,()=>d().name),a(U,r(m,{get when(){return d().url},get children(){var _=ga(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().url),P(()=>Q(H,"href",d().url)),_}}),Z),Ee.addEventListener("blur",_=>nt({title:_.currentTarget.value})),Ft.addEventListener("blur",_=>nt({alt:_.currentTarget.value})),a(at,r(Ke,{icon:"palette",variant:"ghost",size:"small",onClick:vn,get disabled(){return pe()||Be()}}),null),zt.addEventListener("blur",_=>nt({description:_.currentTarget.value})),a(U,r(m,{get when(){return d().palette?.length},get children(){var _=fa(),K=_.firstChild,H=K.nextSibling;return a(H,r(ge,{get each(){return d().palette},children:Pt=>(()=>{var it=Sa(),At=it.firstChild;return a(it,r(m,{get when(){return cn(Pt)},children:Tn=>(()=>{var jt=Ca();return P(Da=>me(jt,"background-color",Tn())),jt})()}),At),a(At,Pt),it})()})),_}}),ue),a(U,r(m,{get when(){return d().tone},get children(){var _=pa(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().tone),_}}),ue),a(U,r(m,{get when(){return d().tags?.length},get children(){var _=ba(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().tags?.join(", ")),_}}),ue),a(U,r(m,{get when(){return G(()=>d().category==="audio")()&&(d().audioContentType||d().kind)},get children(){var _=ma(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioContentType||d().kind),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.bpm},get children(){var _=va(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.bpm),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.key},get children(){var _=ha(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.key),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.genre?.length},get children(){var _=ya(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.genre?.join(", ")),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.mood?.length},get children(){var _=wa(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.mood?.join(", ")),_}}),ue),a(U,r(m,{get when(){return d().transcript},get children(){var _=xa(),K=_.firstChild,H=K.nextSibling;return P(()=>H.value=d().transcript||""),_}}),ue),a(Sn,()=>xt(d().size)),a(Ln,()=>d().ext),a(Fn,r(ce,{variant:"secondary",class:"w-full text-text-destructive hover:bg-red-500/10",onClick:async()=>{confirm("Delete this asset?")&&(await t.fetch(`${t.url}/file/delete?directory=${encodeURIComponent(t.directory)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:d().path})}),M(null),y(_=>_.filter(K=>K.path!==d().path)),await L())},children:"Delete Asset"})),P(()=>Ee.value=d().title||""),P(()=>Ft.value=d().alt||""),P(()=>zt.value=d().description||""),v}})}),null),a(i,r(Vn,{get open(){return u()},value:"",color:"#818cf8",type:"Icon",onClose:()=>T(!1),onSelect:async d=>{T(!1);const v=tr(d);if(!v)return;const V=await o.assert(v);V&&await w(),R(V?{title:"Icon added"}:{variant:"error",title:"Failed to add icon"})}}),null),P(d=>{var v=n()!=="brand",V=n()==="brand";return v!==d.e&&qe.classList.toggle("max-w-5xl",d.e=v),V!==d.t&&qe.classList.toggle("max-w-[72rem]",d.t=V),d},{e:void 0,t:void 0}),i})()}function Ma(){return r(Kt,{get children(){return r(sn,{panel:"assets"})}})}function Va(){return r(Kt,{get children(){return r(sn,{panel:"design"})}})}Qe(["input","click"]);export{Ma as AssetsPanel,Va as DesignPanel};
|
|
1
|
+
import{c as ft,h as j,m as r,l as a,n as G,B as ce,q as P,G as Mt,t as b,bQ as Vt,v as Qe,p as Dt,bR as Jt,bS as qt,i as ae,O as fe,$ as Q,bT as Bt,S as m,aI as De,j as _e,F as ge,bU as dt,bV as zn,s as me,bW as Kt,a6 as Wt,bX as En,z as ut,P as he,a7 as Pn,bY as An,bZ as gt,b1 as jn,Q as Ke,b_ as Ht,b$ as Yt,c0 as pt,c1 as bt,c2 as mt,c3 as Qt,J as R,c4 as Ot,c5 as Dn,c6 as Bn,c7 as On,c8 as Un,c9 as Xt,ca as Zt,cb as Rn,b9 as en,o as vt,Y as Nn,cc as Gn}from"./index-sV80fC6e.js";import{R as Mn,I as Vn}from"./session-BwFpmVuz.js";import"./select-BHYc7SUw.js";import"./list-CLZeXp14.js";import"./tag-f5ASMI1e.js";import"./transform-BwXaE9hv.js";var Jn=b('<form class="flex flex-col gap-4 p-6 pt-0"><textarea autofocus rows=4 placeholder="A cute turtle riding a snowboard down a snowy slope..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded-md px-3 py-2 text-13-regular resize-none focus:ring-1 focus:ring-primary-base"></textarea><div class="flex items-end justify-between gap-4"><div class="flex min-w-0 flex-col gap-1.5"><label class="text-12-medium text-text-weak">Provider</label><p class="text-11-regular text-text-weaker"></p></div><div class="flex shrink-0 gap-2">'),qn=b('<div class="text-12-regular text-text-destructive">');const We=[{id:"auto",label:"Auto",hint:"Prefer Gemini when configured; falls back to OpenAI if Gemini fails"},{id:"gemini",label:"Gemini",hint:"gemini-2.5-flash-image"},{id:"openai",label:"OpenAI",hint:"gpt-image-2 — needs OPENAI_API_KEY in project .env"}];function Kn(e){const t=ft(),[l,o]=j(""),[n,k]=j("auto"),[z,h]=j(!1),[S,F]=j();async function y(u){u.preventDefault();const T=l().trim();if(!(!T||z())){h(!0),F(void 0);try{await e.onGenerate({prompt:T,provider:n()}),t.close()}catch(I){F(I instanceof Error?I.message:Vt(I,"Image generation failed"))}finally{h(!1)}}}return r(Mt,{title:"Generate image asset",description:"Describe the image you want. It will be saved to .trellis/media.",class:"w-full max-w-[480px] mx-auto",get children(){var u=Jn(),T=u.firstChild,I=T.nextSibling,x=I.firstChild,L=x.firstChild,B=L.nextSibling,A=x.nextSibling;return u.addEventListener("submit",y),T.$$input=w=>{o(w.currentTarget.value),F(void 0)},a(u,(()=>{var w=G(()=>!!S());return()=>w()?(()=>{var J=qn();return a(J,S),J})():null})(),I),a(x,r(Mn,{options:We,get current(){return We.find(w=>w.id===n())??We[0]},value:w=>w.id,label:w=>w.label,onSelect:w=>{w&&k(w.id),F(void 0)},size:"small",fill:!0,class:"w-full max-w-[20rem]"}),B),a(B,()=>We.find(w=>w.id===n())?.hint),a(A,r(ce,{type:"button",variant:"ghost",size:"large",onClick:()=>t.close(),children:"Cancel"}),null),a(A,r(ce,{type:"submit",variant:"primary",size:"large",get disabled(){return z()||!l().trim()},get children(){return z()?"Generating...":"Generate"}}),null),P(()=>T.value=l()),u}})}Qe(["input"]);var Wn=b('<form class="flex flex-col gap-4 p-6 pt-0"><textarea rows=3 placeholder="Optional description for agents and CMS editors..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded-md px-3 py-2 text-13-regular resize-none focus:ring-1 focus:ring-primary-base"></textarea><div class="flex justify-end gap-2">');function Hn(e){const t=ft(),[l,o]=j(""),[n,k]=j(""),[z,h]=j(""),[S,F]=j(!1),[y,u]=j();async function T(I){I.preventDefault();const x=l().trim();if(!(!x||S())){F(!0),u(void 0);try{await e.onCreate({url:x,title:n().trim()||void 0,description:z().trim()||void 0}),t.close()}catch(L){u(L instanceof Error?L.message:String(L))}finally{F(!1)}}}return r(Mt,{title:"Add link asset",description:"Save a reusable bookmark as a Trellis Asset. No file is stored locally.",class:"w-full max-w-[480px] mx-auto",get children(){var I=Wn(),x=I.firstChild,L=x.nextSibling;return I.addEventListener("submit",T),a(I,r(Dt,{autofocus:!0,type:"url",label:"URL",placeholder:"https://example.com/docs",get value(){return l()},onChange:B=>{o(B),u(void 0)},get error(){return y()},get validationState(){return y()?"invalid":void 0}}),x),a(I,r(Dt,{type:"text",label:"Title",placeholder:"Optional display title",get value(){return n()},onChange:k}),x),x.$$input=B=>h(B.currentTarget.value),a(L,r(ce,{type:"button",variant:"ghost",size:"large",onClick:()=>t.close(),children:"Cancel"}),null),a(L,r(ce,{type:"submit",variant:"primary",size:"large",get disabled(){return S()||!l().trim()},get children(){return S()?"Saving...":"Add link"}}),null),P(()=>x.value=z()),I}})}Qe(["input"]);const Yn={size:"1024x1024",output_format:"png"};function Qn(e,t){return`${e.replace(/\/+$/,"")}/file/media/generate?directory=${encodeURIComponent(t)}`}function Xn(e){return{prompt:e.prompt,provider:e.provider,...Yn}}function Zn(e,t,l){return{url:Qn(e,t),body:Xn(l)}}function ht(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function er(e){const t=Jt(e);if(!t)return null;const l=t.library==="lucide"?t.key:`${t.library}-${t.key}`;return`icon:${ht(l)}`}function tr(e,t){const l=Jt(e);if(!l)return null;const o=er(e);if(!o)return null;const n=l.library==="lucide"?`lucide:${l.key}`:qt(l.library,l.key);return[{e:o,a:"type",v:"Icon"},{e:o,a:"key",v:l.key},{e:o,a:"library",v:l.library},{e:o,a:"catalogRef",v:n},{e:o,a:"createdAt",v:new Date().toISOString()}]}function tn(e){return`font:${ht(e)}`}function Ut(e){const t=tn(e.family),l=[{e:t,a:"type",v:"Font"},{e:t,a:"family",v:e.family},{e:t,a:"variants",v:JSON.stringify(e.variants??["regular"])},{e:t,a:"createdAt",v:new Date().toISOString()}];return e.category&&l.push({e:t,a:"category",v:e.category}),e.catalogRef&&l.push({e:t,a:"catalogRef",v:e.catalogRef}),e.tags?.length&&l.push({e:t,a:"tags",v:e.tags.join(", ")}),l}function nr(e){return`palette:${ht(e)}`}function rr(e){const t=nr(e.name),l=[{e:t,a:"type",v:"ColorPalette"},{e:t,a:"name",v:e.name},{e:t,a:"swatches",v:JSON.stringify(e.swatches)},{e:t,a:"createdAt",v:new Date().toISOString()}];return e.description&&l.push({e:t,a:"description",v:e.description}),e.tags?.length&&l.push({e:t,a:"tags",v:e.tags.join(", ")}),l}const Ye=[{family:"Inter",category:"sans-serif",variants:["regular","500","600","700"]},{family:"Roboto",category:"sans-serif",variants:["regular","500","700"]},{family:"Open Sans",category:"sans-serif",variants:["regular","600","700"]},{family:"Montserrat",category:"sans-serif",variants:["regular","600","700"]},{family:"Poppins",category:"sans-serif",variants:["regular","600","700"]},{family:"Lora",category:"serif",variants:["regular","600","700"]},{family:"JetBrains Mono",category:"monospace",variants:["regular","500","700"]},{family:"Fira Code",category:"monospace",variants:["regular","500","700"]}],ar={primary:"#18181b",secondary:"#52525b",accent:"#2563eb",surface:"#fafafa",background:"#ffffff",border:"#e4e4e7",success:"#16a34a",warning:"#f59e0b",danger:"#dc2626"};function se(e,t){if(typeof e!="string"||!e.trim())return t;try{return JSON.parse(e)}catch{return t}}function p(e,t,l){return e.find(o=>o.e===t&&o.a===l)?.v}const ve="project-brand:config";function ir(e,t){const l=String(p(e,t,"name")??t),o=se(p(e,t,"swatches"),{});if(Object.keys(o).length)return{id:t,name:l,swatches:o}}function lr(e,t){const l=String(p(e,t,"family")??"");if(l)return{id:t,family:l}}function sr(e,t,l){const o=String(p(e,l,"key")??"");if(o)return{id:l,key:o,library:String(p(e,l,"library")??"lucide")}}function or(e,t,l){const o=e.id,n=se(p(t,o,"paletteIds"),e.palettes.map(y=>y.id)),k=se(p(t,o,"fontIds"),e.fonts.map(y=>y.id)),z=se(p(t,o,"enabledIconIds"),e.icons.map(y=>y.id)),h=n.map(y=>ir(t,y)).filter(y=>!!y),S=k.map(y=>lr(t,y)).filter(y=>!!y),F=(z.length?z:l.filter(y=>y.type==="Icon").map(y=>y.id)).map(y=>sr(t,l,y)).filter(y=>!!y);return{...e,name:String(p(t,o,"name")??e.name),description:typeof p(t,o,"description")=="string"?String(p(t,o,"description")):e.description,logoPath:typeof p(t,o,"logoPath")=="string"?String(p(t,o,"logoPath")):e.logoPath,primaryPaletteId:typeof p(t,o,"primaryPaletteId")=="string"?String(p(t,o,"primaryPaletteId")):e.primaryPaletteId,headingFontId:typeof p(t,o,"headingFontId")=="string"?String(p(t,o,"headingFontId")):e.headingFontId,bodyFontId:typeof p(t,o,"bodyFontId")=="string"?String(p(t,o,"bodyFontId")):e.bodyFontId,monoFontId:typeof p(t,o,"monoFontId")=="string"?String(p(t,o,"monoFontId")):e.monoFontId,iconLibrary:String(p(t,o,"iconLibrary")??e.iconLibrary),semantics:se(p(t,o,"semantics"),e.semantics),palettes:h.length?h:e.palettes,fonts:S.length?S:e.fonts,icons:F.length?F:e.icons}}function Rt(e,t){const l=se(p(e,ve,"resolvedSnapshot"),null);if(l?.name){const u=typeof p(e,ve,"activeBrandId")=="string"?String(p(e,ve,"activeBrandId")):l.activeBrandId,T=p(e,ve,"activeBrandVersion"),I=typeof T=="number"?T:l.activeBrandVersion;return or({...l,activeBrandId:u,activeBrandVersion:I},e,t)}const n=String(p(e,ve,"localBrandId")??"")||t.find(u=>u.type==="Brand")?.id||t.find(u=>u.id.startsWith("brand:"))?.id||"";if(!n)return null;const k=se(p(e,n,"paletteIds"),[]),z=se(p(e,n,"fontIds"),[]),h=se(p(e,n,"enabledIconIds"),[]),S=k.map(u=>{const T=String(p(e,u,"name")??u),I=se(p(e,u,"swatches"),{});return{id:u,name:T,swatches:I}}).filter(u=>Object.keys(u.swatches).length>0),F=z.map(u=>({id:u,family:String(p(e,u,"family")??u)})).filter(u=>u.family),y=(h.length?h:t.filter(u=>u.type==="Icon").map(u=>u.id)).map(u=>({id:u,key:String(p(e,u,"key")??u),library:String(p(e,u,"library")??"lucide")})).filter(u=>u.key);return{id:n,name:String(p(e,n,"name")??"Brand"),description:typeof p(e,n,"description")=="string"?String(p(e,n,"description")):void 0,logoPath:typeof p(e,n,"logoPath")=="string"?String(p(e,n,"logoPath")):void 0,primaryPaletteId:typeof p(e,n,"primaryPaletteId")=="string"?String(p(e,n,"primaryPaletteId")):void 0,headingFontId:typeof p(e,n,"headingFontId")=="string"?String(p(e,n,"headingFontId")):void 0,bodyFontId:typeof p(e,n,"bodyFontId")=="string"?String(p(e,n,"bodyFontId")):void 0,monoFontId:typeof p(e,n,"monoFontId")=="string"?String(p(e,n,"monoFontId")):void 0,iconLibrary:String(p(e,n,"iconLibrary")??"lucide"),semantics:se(p(e,n,"semantics"),void 0),palettes:S,fonts:F,icons:y}}function cr(e){const t={...e,resolvedAt:new Date().toISOString()};return[{e:ve,a:"type",v:"ProjectBrandConfig"},{e:ve,a:"localBrandId",v:e.id},{e:ve,a:"resolvedSnapshot",v:JSON.stringify(t)},{e:ve,a:"createdAt",v:new Date().toISOString()}]}const je=new Map,lt=new Map;function nn(e,t=32){try{const l=new URL(e).hostname;return l?`https://www.google.com/s2/favicons?domain=${encodeURIComponent(l)}&sz=${t}`:void 0}catch{return}}function dr(e){return je.get(e)}function Nt(e){const t=je.get(e.url);je.set(e.url,{...t,...e})}async function rn(e,t,l,o){const n=je.get(o);if(n)return n;const k=lt.get(o);if(k)return k;const z=(async()=>{try{const h=new URLSearchParams({url:o,directory:l}),S=await e(`${t}/file/media/link/preview?${h}`);if(!S.ok)return;const F=await S.json();return je.set(o,F),F}catch{return}finally{lt.delete(o)}})();return lt.set(o,z),z}async function Gt(e,t,l,o){const n=[...new Set(o.filter(Boolean))];await Promise.allSettled(n.map(k=>rn(e,t,l,k)))}var ur=b("<div class=brand-type-specimen><div class=brand-type-specimen-label></div><div class=brand-type-specimen-sample>"),gr=b("<button type=button class=brand-palette-bar><span class=brand-palette-bar-label><span class=brand-palette-bar-hex></span><span class=brand-palette-bar-role>"),fr=b("<input type=color class=sr-only>"),pr=b('<div class=brand-voice-editor><label class=brand-field-label for=brand-voice-description>Brand voice</label><textarea id=brand-voice-description class=brand-voice-textarea rows=4 placeholder="Describe how this brand sounds in copy…"></textarea><label class=brand-field-label for=brand-voice-adjectives>Adjectives</label><div class=brand-tag-field><input id=brand-voice-adjectives type=text class=brand-tag-input>'),br=b("<span class=brand-voice-tag><button type=button class=brand-voice-tag-remove>"),mr=b("<img alt class=brand-logo-image>"),vr=b("<span class=brand-bento-cell-hint>Saving…"),hr=b('<p class="brand-bento-muted brand-icon-empty">No icons enabled yet. Add icons from the Icons section.'),yr=b('<div class=brand-bento><header class="brand-bento-cell brand-bento-hero"><div class=brand-bento-hero-copy><p class=brand-bento-eyebrow>Brand guide</p><input type=text class="brand-bento-title brand-bento-title-input"aria-label="Brand name"></div></header><div class="brand-bento-pair brand-bento-pair--logo-voice"><section class="brand-bento-cell brand-bento-logo"aria-label="Brand logo"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Logo mark</span><span class=brand-bento-cell-hint>SVG or PNG</span></div><button type=button class=brand-logo-drop title="Upload brand logo"><span class=brand-logo-overlay></span></button><input type=file accept=image/svg+xml,image/png,image/jpeg,image/webp,image/avif class=sr-only></section><section class="brand-bento-cell brand-bento-voice"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Voice & semantics</span></div></section></div><div class="brand-bento-pair brand-bento-pair--type-icons"><section class="brand-bento-cell brand-bento-type"><div class="brand-bento-cell-head brand-bento-cell-head--stacked"><span class=brand-bento-cell-title>Typography</span><label class=brand-font-select-wrap><span class=sr-only>Font family</span><select class=brand-font-select></select></label></div><div class=brand-type-stack></div></section><section class="brand-bento-cell brand-bento-icons"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Icon system</span><span class="brand-bento-cell-hint capitalize"> · <!> enabled</span></div><div class=brand-icon-grid>'),wr=b("<div class=brand-logo-placeholder><span>Drop or click to upload"),xr=b("<option>"),$r=b("<div class=brand-icon-cell><span class=brand-icon-name>"),kr=b('<section class="brand-bento-cell brand-bento-palette"><div class=brand-bento-cell-head><span class=brand-bento-cell-title>Colors</span></div><div class=brand-palette-strip>');const _r=e=>e.replace(/^#/,"").toUpperCase(),Sr=e=>{const t=e.replace(/^#/,"");if(!/^[0-9a-f]{3}([0-9a-f]{3})?$/i.test(t))return"#f8fafc";const l=t.length===3?[...t].map(h=>h+h).join(""):t,o=parseInt(l.slice(0,2),16)/255,n=parseInt(l.slice(2,4),16)/255,k=parseInt(l.slice(4,6),16)/255;return .2126*o+.7152*n+.0722*k>.55?"#0a0a0a":"#f8fafc"},Cr=e=>{const t=e.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test(t)?`#${[...t].map(l=>l+l).join("")}`.toLowerCase():/^[0-9a-f]{6}$/i.test(t)?`#${t}`.toLowerCase():e},Ir=e=>{const t=Cr(e);return/^#[0-9a-f]{6}$/i.test(t)?t:"#000000"},Lr=e=>{const t=new Set,l=[],o=n=>{const k=n.trim().toLowerCase();!k||t.has(k)||(t.add(k),l.push(n.trim()))};for(const n of e?.adjectives??[])o(n);for(const n of e?.tone??[])o(n);for(const n of e?.mood??[])o(n);for(const n of e?.values??[])o(n);return l};function Fr(e){return e.library==="lucide"?e.key:qt(e.library,e.key)}function He(e){return(()=>{var t=ur(),l=t.firstChild,o=l.nextSibling;return a(l,()=>e.label),a(o,()=>e.sample),P(n=>{var k=!!e.large,z=`"${e.family}", system-ui, sans-serif`;return k!==n.e&&o.classList.toggle("brand-type-specimen-sample--lg",n.e=k),z!==n.t&&me(o,"font-family",n.t=z),n},{e:void 0,t:void 0}),t})()}function Tr(e){let t;const l=()=>{e.disabled||t?.click()},o=n=>{e.onSave(e.role,n.currentTarget.value)};return[(()=>{var n=gr(),k=n.firstChild,z=k.firstChild,h=z.nextSibling;return n.$$click=l,a(z,()=>_r(e.color)),a(h,()=>e.role),P(S=>{var F=e.color,y=Sr(e.color),u=e.disabled,T=`Edit ${e.role} color`;return F!==S.e&&me(n,"background-color",S.e=F),y!==S.t&&me(n,"color",S.t=y),u!==S.a&&(n.disabled=S.a=u),T!==S.o&&Q(n,"title",S.o=T),S},{e:void 0,t:void 0,a:void 0,o:void 0}),n})(),(()=>{var n=fr();return n.addEventListener("change",o),_e(k=>{t=k},n),P(()=>n.disabled=e.disabled),P(()=>n.value=Ir(e.color)),n})()]}function zr(e){const[t,l]=j(""),[o,n]=j([]),[k,z]=j("");fe(()=>{const u=e.semantics;l(u?.voice??""),n(Lr(u)),z("")});const h=async(u,T)=>{const I=e.semantics;await e.onSave({...I,voice:u.trim()||void 0,adjectives:T.length?T:void 0})},S=u=>{const T=u.split(/[,;]+/).map(L=>L.trim()).filter(Boolean);if(!T.length)return;const I=new Set(o().map(L=>L.toLowerCase())),x=[...o()];for(const L of T){const B=L.toLowerCase();I.has(B)||(I.add(B),x.push(L))}n(x),z(""),h(t(),x)},F=u=>{const T=o().filter((I,x)=>x!==u);n(T),h(t(),T)},y=u=>{if(u.key==="Enter"||u.key===","){u.preventDefault(),S(k());return}u.key==="Backspace"&&!k()&&o().length&&F(o().length-1)};return(()=>{var u=pr(),T=u.firstChild,I=T.nextSibling,x=I.nextSibling,L=x.nextSibling,B=L.firstChild;return I.addEventListener("blur",()=>void h(t(),o())),I.$$input=A=>l(A.currentTarget.value),L.$$click=()=>document.getElementById("brand-voice-adjectives")?.focus(),a(L,r(ge,{get each(){return o()},children:(A,w)=>(()=>{var J=br(),O=J.firstChild;return a(J,A,O),O.$$click=M=>{M.stopPropagation(),F(w())},Q(O,"aria-label",`Remove ${A}`),a(O,r(zn,{class:"size-3"})),P(()=>O.disabled=e.saving),J})()}),B),B.addEventListener("blur",()=>{k().trim()&&S(k())}),B.$$keydown=y,B.$$input=A=>z(A.currentTarget.value),P(A=>{var w=e.saving,J=!!e.saving,O=o().length?"Add another…":"Type and press Enter…",M=e.saving;return w!==A.e&&(I.disabled=A.e=w),J!==A.t&&L.classList.toggle("brand-tag-field--disabled",A.t=J),O!==A.a&&Q(B,"placeholder",A.a=O),M!==A.o&&(B.disabled=A.o=M),A},{e:void 0,t:void 0,a:void 0,o:void 0}),P(()=>I.value=t()),P(()=>B.value=k()),u})()}function Er(e){const t=ae(()=>{const x=e.snapshot;return x.palettes.find(L=>L.id===x.primaryPaletteId)??x.palettes[0]}),l=ae(()=>e.snapshot.icons.slice(0,12)),o=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.headingFontId)?.family??"Inter",n=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.bodyFontId)?.family??"Inter",k=()=>e.snapshot.fonts.find(x=>x.id===e.snapshot.monoFontId)?.family??"JetBrains Mono",z=ae(()=>{const x=new Set,L=[],B=A=>{const w=A.trim();!w||x.has(w)||(x.add(w),L.push(w))};for(const A of e.snapshot.fonts)B(A.family);for(const A of Ye)B(A.family);return L}),[h,S]=j(e.snapshot.name);fe(()=>{S(e.snapshot.name)});let F;const y=()=>F?.click(),u=x=>{const L=x.currentTarget.files?.[0];L&&e.onUploadLogo(L),x.currentTarget.value=""},T=()=>{const x=h().trim();!x||x===e.snapshot.name||e.onSaveName(x)},I=()=>e.savingBrand||e.savingSemantics;return(()=>{var x=yr(),L=x.firstChild,B=L.firstChild,A=B.firstChild,w=A.nextSibling,J=L.nextSibling,O=J.firstChild,M=O.firstChild,pe=M.nextSibling,de=pe.firstChild,Be=pe.nextSibling,Se=O.nextSibling,Ce=Se.firstChild;Ce.firstChild;var Oe=J.nextSibling,Ue=Oe.firstChild,Ie=Ue.firstChild,Xe=Ie.firstChild,Re=Xe.nextSibling,Ze=Re.firstChild,oe=Ze.nextSibling,ie=Ie.nextSibling,q=Ue.nextSibling,we=q.firstChild,Le=we.firstChild,xe=Le.nextSibling,Fe=xe.firstChild,Te=Fe.nextSibling;Te.nextSibling;var le=we.nextSibling;return w.$$keydown=E=>{E.key==="Enter"&&E.currentTarget.blur()},w.addEventListener("blur",T),w.$$input=E=>S(E.currentTarget.value),pe.$$click=y,a(pe,r(m,{get when(){return e.logoUrl},get fallback(){return(()=>{var E=wr(),W=E.firstChild;return a(E,r(Bt,{class:"size-8 opacity-60"}),W),E})()},get children(){var E=mr();return P(()=>Q(E,"src",e.logoUrl)),E}}),de),a(de,r(m,{get when(){return e.uploadingLogo},get fallback(){return r(Bt,{class:"size-5"})},get children(){return r(De,{})}})),Be.addEventListener("change",u),_e(E=>{F=E},Be),a(Ce,r(m,{get when(){return e.savingSemantics},get children(){return vr()}}),null),a(Se,r(zr,{get semantics(){return e.snapshot.semantics},get saving(){return e.savingSemantics},get onSave(){return e.onSaveSemantics}}),null),oe.addEventListener("change",E=>void e.onSaveFontFamily(E.currentTarget.value)),a(oe,r(ge,{get each(){return z()},children:E=>(()=>{var W=xr();return W.value=E,a(W,E),W})()})),a(ie,r(He,{label:"Display",get family(){return o()},sample:"Aa",large:!0}),null),a(ie,r(He,{label:"Heading",get family(){return o()},sample:"The quick brown fox"}),null),a(ie,r(He,{label:"Body",get family(){return n()},sample:"Design systems stay coherent when type scales match intent."}),null),a(ie,r(He,{label:"Mono",get family(){return k()},sample:'const brand = "on-brand"'}),null),a(xe,()=>e.snapshot.iconLibrary,Fe),a(xe,()=>e.snapshot.icons.length,Te),a(le,r(ge,{get each(){return l()},children:E=>(()=>{var W=$r(),be=W.firstChild;return a(W,r(dt,{type:"Icon",get icon(){return Fr(E)},size:22,class:"text-text-strong"}),be),a(be,()=>E.key),P(()=>Q(W,"title",E.key)),W})()}),null),a(le,r(m,{get when(){return l().length===0},get children(){return hr()}}),null),a(x,r(m,{get when(){return t()},children:E=>(()=>{var W=kr(),be=W.firstChild,ye=be.nextSibling;return a(ye,r(ge,{get each(){return Object.entries(E().swatches)},children:([$e,Ne])=>r(Tr,{role:$e,color:Ne,get disabled(){return I()},onSave:(Ge,Me)=>e.onSaveSwatch(E().id,Ge,Me)})})),P(()=>Q(W,"aria-label",`Color palette ${E().name}`)),W})()}),null),P(E=>{var W=I(),be=e.uploadingLogo,ye=I();return W!==E.e&&(w.disabled=E.e=W),be!==E.t&&(pe.disabled=E.t=be),ye!==E.a&&(oe.disabled=E.a=ye),E},{e:void 0,t:void 0,a:void 0}),P(()=>w.value=h()),P(()=>oe.value=o()),x})()}Qe(["click","input","keydown"]);const Pr=new Set(["design","trellis_store_mutate","cms"]);function Ar(e){if(e.type!=="message.part.updated")return!1;const t=e.properties?.part;return!t||t.type!=="tool"||t.state.status!=="completed"?!1:Pr.has(t.tool)}var jr=b('<div class="size-full flex items-center justify-center">'),Dr=b('<div class="flex flex-col items-center gap-2 text-text-weaker px-3 text-center"><span class="text-10-medium uppercase tracking-wider break-all">'),Br=b("<img loading=lazy>",!0,!1,!1),Or=b("<div class=link-asset-preview-loading>"),Ur=b("<div class=link-asset-preview>"),Rr=b('<div class=link-asset-preview-fallback><span class="text-10-medium uppercase tracking-wider break-all px-2 text-center">'),Nr=b("<img alt class=link-asset-preview-favicon loading=lazy>",!0,!1,!1),Gr=b("<img alt class=link-asset-preview-image loading=lazy>",!0,!1,!1),Mr=b('<div class="flex items-center gap-1.5 min-w-0"><span class="text-12-medium text-text-base truncate">'),Vr=b('<img alt class="size-3.5 rounded-sm shrink-0 bg-background-base object-contain"loading=lazy>',!0,!1,!1),Jr=b("<div class=design-loading-state><span>"),qr=b('<div class="flex flex-col items-center gap-2 text-text-weaker group-hover:scale-110 transition-transform duration-300 px-2 text-center"><span class="text-10-medium uppercase tracking-wider break-all px-1">'),Kr=b('<div class=relative><input type=text class="h-7 pl-8 pr-3 bg-surface-raised-base border-none rounded-md text-12-regular w-48 focus:ring-1 focus:ring-primary-base transition-all">'),Wr=b("<div class=design-loading-strip><span>"),Hr=b("<div class=asset-grid>"),Yr=b("<div class=icon-grid>"),Qr=b('<div class="flex flex-col gap-2 p-6">'),Xr=b('<div class="flex justify-center px-6 pb-8">'),Zr=b('<div class=design-panel><input type=file class=hidden><div class=design-sidebar><div class="h-10 flex items-center px-3 border-b border-border-weaker-base shrink-0"><span class="text-xs font-medium text-text-weak opacity-80 uppercase tracking-wider"></span></div><div class="design-sidebar-items flex-1 overflow-y-auto p-2 flex flex-col gap-0.5"></div></div><div class=design-content><div class=design-header><div class="flex items-center gap-4"><h2 class="text-12-medium text-text-strong uppercase tracking-wide"></h2></div><div class="flex items-center gap-2"></div></div><div class="flex-1 overflow-y-auto"><div class="section-content-enter mx-auto w-full">'),ea=b('<button class="stagger-item design-section-btn"><span class=design-section-label><span class=truncate></span></span><span class=design-section-count>'),ta=b('<div class="py-20 flex flex-col items-center justify-center gap-4 animate-in fade-in zoom-in-95 duration-300"><div class="size-16 rounded-full bg-surface-raised-base flex items-center justify-center text-text-weaker"></div><div class=text-center><div class="text-16-medium text-text-base mb-1">No <!> yet</div><div class="text-14-regular text-text-weaker max-w-[320px]">'),na=b('<div class="text-10-regular text-text-weaker flex items-center justify-between"><span></span><span>'),ra=b('<div class="stagger-item asset-card group"><div class=asset-preview></div><div class=asset-info>'),aa=b('<div class="text-12-medium text-text-base truncate mb-0.5">'),ia=b("<div class=mb-0.5>"),la=b('<div class="text-10-regular text-text-weaker truncate mb-1">'),sa=b('<div class="stagger-item icon-grid-card group"><div class=icon-grid-preview></div><div class="icon-grid-label truncate"></div><div class="icon-grid-meta truncate">'),oa=b("<span class=text-text-weaker> · "),ca=b('<div class="flex items-center gap-1 mt-1">'),da=b('<div class="stagger-item flex items-center justify-between p-3 bg-surface-raised-base rounded-lg border border-border-weaker-base hover:border-border-base transition-all group"><div class="flex items-center gap-3 min-w-0"><div class="size-8 rounded bg-background-base flex items-center justify-center text-text-weak border border-border-weaker-base shrink-0"></div><div class=min-w-0><div class="text-13-medium text-text-base truncate"></div><div class="text-11-regular text-text-weaker truncate">'),ua=b('<span class="size-3 rounded-full border border-border-weaker-base">'),ga=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">URL</label><a target=_blank rel=noreferrer class="text-13-regular text-primary-base break-all hover:underline">'),fa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Palette</label><div class="flex flex-wrap gap-1.5">'),pa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Tone</label><div class="text-12-regular text-text-base break-words">'),ba=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Tags</label><div class="text-12-regular text-text-base break-words">'),ma=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Audio Type</label><div class="text-12-regular text-text-base capitalize">'),va=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">BPM</label><div class="text-12-regular text-text-base">'),ha=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Key</label><div class="text-12-regular text-text-base">'),ya=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Genre</label><div class="text-12-regular text-text-base break-words">'),wa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Mood</label><div class="text-12-regular text-text-base break-words">'),xa=b('<div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Transcript</label><textarea rows=8 readonly class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-12-regular resize-none">'),$a=b('<div class=detail-sidebar><div class="h-12 flex items-center justify-between px-4 border-b border-border-weaker-base shrink-0"><span class="text-13-semibold text-text-base">Asset Details</span></div><div class="flex-1 overflow-y-auto p-4 flex flex-col gap-6"><div class="aspect-square rounded-lg bg-background-base border border-border-weaker-base flex items-center justify-center overflow-hidden shrink-0"></div><div class="flex flex-col gap-4"><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block"></label><div class="text-13-regular text-text-base break-all"></div></div><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Title</label><input type=text placeholder="Add a title..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-13-regular"></div><div><label class="text-11-medium text-text-weaker uppercase mb-1.5 block">Alt Text</label><textarea rows=2 placeholder="Describe for accessibility..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-13-regular resize-none"></textarea></div><div><div class="flex items-center justify-between mb-1.5"><label class="text-11-medium text-text-weaker uppercase">Description</label></div><textarea rows=4 placeholder="Semantic description for agents and CMS..."class="w-full bg-surface-raised-base border border-border-weaker-base rounded px-2 py-1.5 text-12-regular resize-none"></textarea></div><div class="grid grid-cols-2 gap-4 pt-2 border-t border-border-weaker-base"><div><label class="text-11-medium text-text-weaker uppercase mb-1 block">Size</label><div class="text-12-regular text-text-base"></div></div><div><label class="text-11-medium text-text-weaker uppercase mb-1 block">Type</label><div class="text-12-regular text-text-base uppercase"></div></div></div></div></div><div class="p-4 border-t border-border-weaker-base flex flex-col gap-2">'),ka=b('<audio controls class="w-full px-4">'),_a=b('<div class="flex flex-col items-center gap-2 text-text-weaker p-4"><span class="text-12-medium uppercase tracking-wider">'),Sa=b('<div class="flex items-center gap-1.5 border border-border-weaker-base bg-surface-raised-base rounded px-1.5 py-1 min-w-0"><span class="text-11-regular text-text-base font-mono truncate">'),Ca=b('<span class="size-4 shrink-0 rounded-sm border border-border-weaker-base">');const Ia=new Set(["assets","videos","documents","models","audio","links","sprites"]),La=["Brand","Icon","ColorPalette","Font","DesignComponent","DesignToken"],st=500,Pe=120;function yt(e,t){if(!e||typeof IntersectionObserver>"u"){t();return}const l=new IntersectionObserver(o=>{o.some(n=>n.isIntersecting)&&(l.disconnect(),t())},{rootMargin:"320px 0px"});return l.observe(e),()=>l.disconnect()}const ee=e=>Ia.has(e),Ae=e=>e==="brand"||e==="icons"||e==="colors"||e==="type",ot=(e,t)=>e==="assets"?t.category==="image":e==="videos"?t.category==="video":e==="documents"?t.category==="document":e==="models"?t.category==="model3d"||t.category==="texture":e==="links"?t.category==="link":e==="sprites"?t.category==="spritesheet"||t.path.includes(".trellis/media/sprites/")||t.path.includes(".trellis/sprites/"):t.category==="audio",Fa=e=>e==="assets"?"image/*":e==="videos"?"video/*":e==="documents"?".pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,application/pdf":e==="models"?".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.dae,.blend,.usd,.abc,.hdr,.exr,.ktx,.ktx2,.dds,.tga,.psd":e==="sprites"?"image/png,image/webp,image/gif":"audio/*",ct=e=>e==="image"||e==="video"||e==="audio"||e==="document",Ta=e=>{const t=e.toLowerCase();return["png","jpg","jpeg","gif","webp","svg","ico","bmp","avif"].includes(t)?"image":["glb","gltf","obj","fbx","usdz","stl","ply","dae","blend","usd","abc"].includes(t)?"model3d":["hdr","exr","ktx","ktx2","dds","tga","psd"].includes(t)?"texture":["mp4","m4v","mov","webm","ogv","avi","mkv"].includes(t)?"video":["mp3","wav","ogg","flac","aac","m4a","opus"].includes(t)?"audio":["pdf","doc","docx","xls","xlsx","ppt","pptx"].includes(t)?"document":"other"};function an(e){const t=Wt();let l;const[o,n]=j(!1),[k]=ut(()=>o()?e.path:void 0,async h=>{const S=en(t.url,h,t.directory),F=await t.fetch(S);if(!F.ok)throw new Error(`Failed to load image (${F.status})`);return URL.createObjectURL(await F.blob())});vt(()=>{const h=yt(l,()=>n(!0));h&&he(h)}),fe(()=>{const h=k();he(()=>{h&&URL.revokeObjectURL(h)})});const z=()=>{if(!(k.loading||k.error))return k()};return(()=>{var h=jr(),S=l;return typeof S=="function"?_e(S,h):l=h,a(h,r(m,{get when(){return z()},get fallback(){return(()=>{var F=Dr(),y=F.firstChild;return a(F,r(m,{get when(){return G(()=>!!o())()&&k.loading},get fallback(){return r(Gn,{class:"size-8"})},get children(){return r(De,{class:"size-5"})}}),y),a(y,()=>e.name),F})()},children:F=>(()=>{var y=Br();return P(u=>{var T=F(),I=e.name,x=e.class;return T!==u.e&&Q(y,"src",u.e=T),I!==u.t&&Q(y,"alt",u.t=I),x!==u.a&&Nn(y,u.a=x),u},{e:void 0,t:void 0,a:void 0}),y})()})),h})()}function ln(e){let t;const l=(()=>{const w=dr(e.url);if(w)return w;if(e.previewImage||e.previewFavicon)return{url:e.url,image:e.previewImage,favicon:e.previewFavicon}})(),[o,n]=j(l),[k,z]=j(!o()?.image&&!e.previewImage),[h,S]=j(!!(o()?.image??e.previewImage)),[F,y]=j(!1),[u,T]=j(!1);let I=!1;vt(()=>{const w=yt(t,()=>T(!0));w&&he(w)}),fe(()=>{!u()||I||(I=!0,e.load(e.url).then(w=>{w&&n(w),z(!1);const J=w?.image??e.previewImage;S(!!J),y(!J)}))});const x=()=>o()?.image??e.previewImage,L=()=>o()?.favicon??e.previewFavicon??nn(e.url,64),B=()=>!!x()&&!F(),A=()=>k()||B()&&h();return(()=>{var w=Ur(),J=t;return typeof J=="function"?_e(J,w):t=w,a(w,r(m,{get when(){return G(()=>!!B())()?x():void 0},keyed:!0,get fallback(){return(()=>{var O=Rr(),M=O.firstChild;return a(O,r(m,{get when(){return L()},get fallback(){return r(Xt,{class:"size-8"})},children:pe=>(()=>{var de=Nr();return P(()=>Q(de,"src",pe())),de})()}),M),a(M,()=>e.title),O})()},children:O=>(()=>{var M=Gr();return M.addEventListener("error",()=>{S(!1),y(!0)}),M.addEventListener("load",()=>{S(!1),y(!1)}),Q(M,"src",O),M})()}),null),a(w,r(m,{get when(){return A()},get children(){var O=Or();return a(O,r(De,{class:"size-5 text-text-weaker"})),O}}),null),w})()}function za(e){let t;const[l,o]=j(nn(e.url,32)),[n,k]=j(!1);let z=!1;return vt(()=>{const h=yt(t,()=>k(!0));h&&he(h)}),fe(()=>{!n()||z||(z=!0,e.load(e.url).then(h=>{h?.favicon&&o(h.favicon)}))}),(()=>{var h=Mr(),S=h.firstChild,F=t;return typeof F=="function"?_e(F,h):t=h,a(h,r(m,{get when(){return l()},children:y=>(()=>{var u=Vr();return u.addEventListener("error",T=>{T.currentTarget.style.display="none"}),P(()=>Q(u,"src",y())),u})()}),S),a(S,()=>e.title),P(()=>Q(S,"title",e.title)),h})()}function Ea(e){return(()=>{var t=Jr(),l=t.firstChild;return a(t,r(De,{class:"size-5 text-text-weaker"}),l),a(l,()=>e.label),t})()}function Pa(e){return r(m,{get when(){return G(()=>e.asset.category==="link")()&&e.asset.url},get fallback(){return r(m,{get when(){return e.asset.category==="image"},get fallback(){return(()=>{var t=qr(),l=t.firstChild;return a(t,r(m,{get when(){return e.asset.category==="video"},get fallback(){return r(m,{get when(){return e.asset.category==="audio"},get fallback(){return r(m,{get when(){return e.asset.category==="model3d"||e.asset.category==="texture"},get fallback(){return r(m,{get when(){return e.asset.category==="document"},get fallback(){return r(Qt,{class:"size-8"})},get children(){return r(mt,{class:"size-8"})}})},get children(){return r(pt,{class:"size-8"})}})},get children(){return r(Zt,{class:"size-8"})}})},get children(){return r(bt,{class:"size-8"})}}),l),a(l,()=>e.asset.ext),t})()},get children(){return r(an,{get path(){return e.asset.path},get name(){return e.asset.name},class:"size-full object-contain group-hover:scale-110 transition-transform duration-500 ease-out"})}})},children:t=>r(ln,{get url(){return t()},get title(){return e.asset.title?.trim()||e.asset.name},get previewImage(){return e.asset.previewImage},get previewFavicon(){return e.asset.previewFavicon},get load(){return e.load}})})}const Aa=e=>{if(typeof window>"u")return e==="assets"?"assets":"brand";const l=new URLSearchParams(window.location.search).get("section");return e==="assets"?l&&ee(l)?l:"assets":l&&!ee(l)?l:"brand"},ja=[{id:"brand",label:"Brand",icon:Dn,description:"Project identity, tone, and linked design defaults.",panel:"design"},{id:"icons",label:"Icons",icon:Bn,description:"Project-enabled icon set for UI and CMS.",panel:"design"},{id:"colors",label:"Colors",icon:gt,description:"Color palettes and semantic roles.",panel:"design"},{id:"type",label:"Type",icon:Ht,description:"Project fonts and typographic choices.",panel:"design"},{id:"tokens",label:"Tokens",icon:Yt,description:"Design tokens like spacing, radius, and motion.",panel:"design"},{id:"components",label:"Components",icon:On,description:"Reusable UI components and elements.",panel:"design"},{id:"assets",label:"Images",icon:Un,description:"Images and visual media files.",panel:"assets"},{id:"videos",label:"Videos",icon:bt,description:"Video clips and motion media.",panel:"assets"},{id:"documents",label:"Documents",icon:mt,description:"PDFs, docs, spreadsheets, and presentations.",panel:"assets"},{id:"links",label:"Links",icon:Xt,description:"Reusable bookmarks and external references.",panel:"assets"},{id:"audio",label:"Audio",icon:Zt,description:"Sound effects, music, and voice clips.",panel:"assets"},{id:"models",label:"3D models",icon:pt,description:"3D models, meshes, and texture maps.",panel:"assets"},{id:"sprites",label:"Sprite sheets",icon:Rn,description:"2D pixel art atlases and sprite sheets (graph projections coming).",panel:"assets"}];function sn(e){const t=Wt(),l=ft(),o=En(),[n,k]=j(Aa(e.panel)),z=()=>ja.filter(i=>i.panel===e.panel),[h,S]=j(""),[F,y]=j([]),[u,T]=j(!1),I=async()=>{try{const i=await t.fetch(`${t.url}/file/media/list?directory=${encodeURIComponent(t.directory)}`);return i.ok?await i.json():[]}catch{return[]}},[x,{refetch:L}]=ut(()=>e.panel==="assets"?`${t.url}:${t.directory}`:void 0,I,{initialValue:[]}),B=async()=>{if(e.panel!=="design")return{entities:[],facts:[]};const i=[];try{for(const c of La)for(let g=0;;g+=st){const f=await t.fetch(Ot(t.url,t.directory,`/store/entities?type=${encodeURIComponent(c)}&limit=${st}&offset=${g}`));if(!f.ok)break;const $=await f.json();if(i.push(...$),$.length<st)break}const s=[];for(let c=0;c<i.length;c+=12){const g=i.slice(c,c+12),f=await Promise.all(g.map(async $=>{try{const X=await t.fetch(Ot(t.url,t.directory,`/store/entity/${encodeURIComponent($.id)}`));return X.ok?await X.json():void 0}catch{return}}));for(const $ of f)$&&s.push(...$.facts)}return{entities:i,facts:s}}catch{return{entities:i,facts:[]}}},[A,{refetch:w}]=ut(()=>e.panel==="design"?`${t.url}:${t.directory}`:void 0,B,{initialValue:{entities:[],facts:[]}});fe(()=>{const i=s=>{const c=s.detail;if(!c)return;if(c.section){const $=c.section;if(ee($)&&e.panel!=="assets"||!ee($)&&e.panel!=="design")return;k($)}const g=J(),f=c.path?g.find($=>$.path===c.path):c.entity?g.find($=>$.path.includes(c.entity.split(":").pop()??"")||$.url?.includes(c.entity.split(":").pop()??"")):void 0;f&&M(f)};window.addEventListener("design-navigate",i),he(()=>window.removeEventListener("design-navigate",i))}),fe(()=>{if(e.panel!=="design")return;const i=t.event.listen(s=>{if(Ar(s.details)){w();return}if(s.details.type!=="file.watcher.updated")return;const c=s.details.properties,g=c.file?.replace(/^\/+/,"");g&&(g.includes(".trellis/brand")&&(c.event==="add"||c.event==="change"||c.event==="unlink")&&w(),!(!g.includes(".trellis/media")&&!g.includes(".trellis/assets"))&&(c.event==="add"||c.event==="change"||c.event==="unlink")&&L())});he(i)});const J=ae(()=>{const i=x()??[];return[...F().filter(c=>!i.some(g=>g.path===c.path)),...i]}),[O,M]=j(null),[pe,de]=j(!1),[Be,Se]=j(!1),[Ce,Oe]=j(!1),[Ue,Ie]=j(!1),[Xe,Re]=j(!1),[Ze,oe]=j(!1),ie=()=>A()?.entities??[],q=()=>A()?.facts??[],we=ae(()=>ie().filter(i=>i.type==="DesignComponent")),Le=ae(()=>ie().filter(i=>i.type==="DesignToken")),xe=ae(()=>ie().filter(i=>i.type==="Icon")),Fe=ae(()=>ie().filter(i=>i.type==="ColorPalette")),Te=ae(()=>ie().filter(i=>i.type==="Font")),le=ae(()=>Rt(q(),ie())),E=ae(()=>{const i=J();return{brand:le()?1:0,icons:xe().length,colors:Fe().length,type:Te().length,assets:i.filter(s=>s.category==="image").length,videos:i.filter(s=>s.category==="video").length,documents:i.filter(s=>s.category==="document").length,links:i.filter(s=>s.category==="link").length,models:i.filter(s=>s.category==="model3d"||s.category==="texture").length,audio:i.filter(s=>s.category==="audio").length,components:we().length,tokens:Le().length,sprites:i.filter(s=>ot("sprites",s)).length}}),W=()=>{const i=h().toLowerCase();if(n()==="brand")return[];if(ee(n())){const s=J().filter(c=>ot(n(),c));return i?s.filter(c=>c.name.toLowerCase().includes(i)||c.path.toLowerCase().includes(i)||c.url?.toLowerCase().includes(i)||c.title?.toLowerCase().includes(i)||c.description?.toLowerCase().includes(i)||c.tone?.toLowerCase().includes(i)||c.tags?.some(g=>g.toLowerCase().includes(i))):s}if(n()==="icons"){const s=xe();return i?s.filter(c=>{const g=String(p(q(),c.id,"key")??""),f=String(p(q(),c.id,"library")??"");return`${g} ${f} ${c.id}`.toLowerCase().includes(i)}):s}if(n()==="colors"){const s=Fe();return i?s.filter(c=>`${String(p(q(),c.id,"name")??"")} ${c.id}`.toLowerCase().includes(i)):s}if(n()==="type"){const s=Te();return i?s.filter(c=>`${String(p(q(),c.id,"family")??"")} ${c.id}`.toLowerCase().includes(i)):s}if(n()==="components"){const s=we();return i?s.filter(c=>q().find(f=>f.e===c.id&&f.a==="label")?.v?.toLowerCase().includes(i)):s}if(n()==="tokens"){const s=Le();return i?s.filter(c=>q().find(f=>f.e===c.id&&f.a==="label")?.v?.toLowerCase().includes(i)):s}return[]},[be,ye]=j(Pe);fe(Pn(()=>`${n()}:${h()}`,()=>ye(Pe)));const $e=ae(()=>W().slice(0,be())),Ne=ae(()=>Math.max(0,W().length-$e().length)),Ge=()=>ee(n())?x.loading:e.panel==="design"&&A.loading,Me=()=>Ge()&&W().length===0&&!(n()==="brand"&&le()),wt=()=>ee(n())?"Loading assets...":"Loading design inventory...",xt=i=>{if(!i)return"0 B";const s=1024,c=["B","KB","MB","GB"],g=Math.floor(Math.log(i)/Math.log(s));return parseFloat((i/Math.pow(s,g)).toFixed(1))+" "+c[g]},$t=i=>en(t.url,i,t.directory),et=i=>rn(s=>t.fetch(s),t.url,t.directory,i);fe(()=>{const i=J().filter(f=>f.category==="link"&&!!f.url);if(!i.length)return;const s=i.slice(0,Pe);for(const f of s)(f.previewImage||f.previewFavicon)&&Nt({url:f.url,image:f.previewImage,favicon:f.previewFavicon,title:f.title});const c=()=>Gt(f=>t.fetch(f),t.url,t.directory,s.map(f=>f.url));if(typeof window<"u"&&"requestIdleCallback"in window){const f=window.requestIdleCallback(()=>void c(),{timeout:2500});he(()=>window.cancelIdleCallback(f));return}const g=setTimeout(()=>void c(),250);he(()=>clearTimeout(g))});const Ve=i=>i.title?.trim()||i.name,on=i=>i.description?.trim()||i.alt?.trim()||i.tone?.trim(),cn=i=>/^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(i.trim())?i.trim():void 0,kt=(i,s)=>{y(g=>g.map(f=>f.path===i?{...f,...s}:f));const c=O();c?.path===i&&M({...c,...s})},tt=async(i,s=!1)=>{const c=await t.fetch(`${t.url}/file/media/describe`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:i.path,force:s})});if(!c.ok)return;const g=await c.json();!g.description&&!g.tone&&!g.tags?.length&&!g.palette?.length&&!g.transcript&&!g.audioAnalysis||(kt(i.path,g),await L())},ke=async()=>{const i=Rt(q(),ie());if(!i){R({variant:"error",title:"No brand to refresh"});return}const s=await o.assert(cr(i));s&&await w(),R(s?{title:"Brand snapshot refreshed"}:{variant:"error",title:"Failed to refresh brand"})},dn=async i=>{const s=le();if(!s)return;if(!i.type.startsWith("image/")){R({variant:"error",title:"Logo must be an image file"});return}const g=`logo.${i.name.match(/\.(svg|png|jpe?g|webp|avif)$/i)?.[1]?.toLowerCase()??(i.type.includes("svg")?"svg":"png")}`;Ie(!0);try{const f=new FormData;f.append("file",i,g),f.append("path",".trellis/brand"),f.append("name",g);const $=await t.fetch(`${t.url}/file/upload?directory=${encodeURIComponent(t.directory)}`,{method:"POST",body:f});if(!$.ok){const Y=await $.json().catch(()=>({}));throw new Error(Y.error??"Upload failed")}const X=await $.json();if(!await o.assert([{e:s.id,a:"logoPath",v:X.path}]))throw new Error("Failed to save logo on brand");await ke(),R({title:"Brand logo updated"})}catch(f){R({variant:"error",title:"Logo upload failed",description:f instanceof Error?f.message:String(f)})}finally{Ie(!1)}},un=async i=>{const s=le();if(s){Re(!0);try{if(!await o.assert([{e:s.id,a:"semantics",v:JSON.stringify(i)}])){R({variant:"error",title:"Failed to update brand voice"});return}await ke()}finally{Re(!1)}}},gn=async i=>{const s=le();if(!(!s||!i.trim())){oe(!0);try{if(!await o.assert([{e:s.id,a:"name",v:i.trim()}])){R({variant:"error",title:"Failed to update brand name"});return}await ke()}finally{oe(!1)}}},fn=async(i,s,c)=>{const g=le();if(!g)return;const f=g.palettes.find($=>$.id===i);if(f){oe(!0);try{const $={...f.swatches,[s]:c};if(!await o.assert([{e:i,a:"swatches",v:JSON.stringify($)}])){R({variant:"error",title:"Failed to update color"});return}await ke()}finally{oe(!1)}}},pn=async i=>{const s=le();if(!s||!i.trim())return;const c=i.trim(),g=tn(c),f=Ye.find($=>$.family===c);oe(!0);try{const $=[];if(!s.fonts.some(Y=>Y.id===g)){const Y=Ut({family:c,category:f?.category,variants:f?[...f.variants]:["regular"]});Y&&$.push(...Y)}const X=[...new Set([...s.fonts.map(Y=>Y.id),g])];if($.push({e:s.id,a:"fontIds",v:JSON.stringify(X)},{e:s.id,a:"headingFontId",v:g},{e:s.id,a:"bodyFontId",v:g}),!await o.assert($)){R({variant:"error",title:"Failed to update typography"});return}await ke()}finally{oe(!1)}},_t=async()=>{if(n()==="brand")return;if(n()==="icons"){T(!0);return}if(n()==="type"){const f=window.prompt(`Font family (${Ye.map(Y=>Y.family).join(", ")}, …):`,"Inter");if(!f?.trim())return;const $=Ye.find(Y=>Y.family.toLowerCase()===f.trim().toLowerCase()),X=Ut({family:f.trim(),category:$?.category,variants:$?[...$.variants]:["regular"],catalogRef:$?`google-fonts:${$.family}`:void 0}),re=await o.assert(X);re&&await w(),R(re?{title:"Font added"}:{variant:"error",title:"Failed to add font"});return}if(n()==="colors"){const f=window.prompt("Palette name:","Custom");if(!f?.trim())return;const $=rr({name:f.trim(),swatches:{...ar},tags:["custom"]}),X=await o.assert($);X&&await w(),R(X?{title:"Palette added"}:{variant:"error",title:"Failed to add palette"});return}if(n()==="links"){xn();return}if(ee(n())){ze?.click();return}const i=window.prompt(`Enter ${n().slice(0,-1)} name:`);if(!i)return;const s=`design:${n()}:${Date.now()}`,c=n()==="components"?"DesignComponent":"DesignToken";await o.assert([{e:s,a:"type",v:c},{e:s,a:"label",v:i},{e:s,a:"createdAt",v:new Date().toISOString()}])?(await w(),R({title:`${n().slice(0,-1)} added`})):R({variant:"error",title:"Failed to add item"})},St=async i=>{if(!confirm("Delete this item?"))return;const s=q().filter(g=>g.e===i);await o.retract(s)&&(await w(),R({title:"Item deleted"}))},bn=async i=>{if(ct(i.category)){Se(!0);try{if(await tt(i,!0),O()?.path===i.path){const c=J().find(g=>g.path===i.path);c&&M(c)}R({title:"Semantic metadata generated"})}catch{R({variant:"error",title:"Metadata analysis failed",description:"Check GEMINI_API_KEY or try Regenerate in the asset panel."})}finally{Se(!1)}}},mn=async i=>{const s=i.target;if(!s.files?.length)return;const c=s.files[0],g=new FormData;g.append("file",c),g.append("path",".trellis/media");try{const f=await t.fetch(`${t.url}/file/upload?directory=${encodeURIComponent(t.directory)}`,{method:"POST",body:g});if(f.ok){const $=await f.json(),X=$.path.split(".").pop()?.toLowerCase()??"bin",re={path:$.path,name:$.path.split("/").pop()??c.name,ext:X,category:Ta(X),size:$.size};y(Y=>[re,...Y]),M(re),R({title:"Asset uploaded",description:ct(re.category)?"Analyzing with Gemini…":void 0}),await L(),ct(re.category)&&await bn(re)}else{const $=await f.json();R({variant:"error",title:"Upload failed",description:$.error})}}catch(f){R({variant:"error",title:"Upload failed",description:String(f)})}finally{s.value=""}},nt=async i=>{const s=O();if(s){de(!0);try{(await t.fetch(`${t.url}/file/media/update`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:s.path,...i})})).ok?(R({title:"Metadata updated"}),kt(s.path,i),await L()):R({variant:"error",title:"Update failed"})}catch(c){R({variant:"error",title:"Update failed",description:String(c)})}finally{de(!1)}}},vn=async()=>{const i=O();if(i){de(!0);try{await tt(i,!0),R({title:"Metadata generated"})}catch{R({variant:"error",title:"Generation failed"})}finally{de(!1)}}},hn=async i=>{Oe(!0);try{const{url:s,body:c}=Zn(t.url,t.directory,i),g=await t.fetch(s,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!g.ok){const $=await g.json().catch(()=>null);throw new Error(Vt($,`Image generation failed (${g.status})`))}const f=await g.json();y($=>[f,...$]),k("assets"),M(f),R({title:"Image asset generated",description:f.name}),await L()}finally{Oe(!1)}},yn=()=>{l.show(()=>r(Kn,{onGenerate:hn}))},wn=async i=>{const s=await t.fetch(`${t.url}/file/media/link`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!s.ok){const g=await s.json().catch(()=>({error:"Failed to add link"}));throw new Error(g.error??"Failed to add link")}const c=await s.json();y(g=>[c,...g]),k("links"),M(c),R({title:"Link asset added",description:c.url}),c.url&&(Nt({url:c.url,image:c.previewImage,favicon:c.previewFavicon,title:c.title}),Gt(g=>t.fetch(g),t.url,t.directory,[c.url])),await L(),tt(c).catch(()=>{})},xn=()=>{l.show(()=>r(Hn,{onCreate:wn}))};let ze;return fe(()=>{const i=n();!ee(i)||!ze||(ze.accept=Fa(i))}),(()=>{var i=Zr(),s=i.firstChild,c=s.nextSibling,g=c.firstChild,f=g.firstChild,$=g.nextSibling,X=c.nextSibling,re=X.firstChild,Y=re.firstChild,$n=Y.firstChild,Je=Y.nextSibling,Ct=re.nextSibling,qe=Ct.firstChild;s.addEventListener("change",mn);var It=ze;return typeof It=="function"?_e(It,s):ze=s,a(f,()=>e.panel==="assets"?"Assets":"Design"),a($,r(ge,{get each(){return z()},children:(d,v)=>(()=>{var V=ea(),N=V.firstChild,ne=N.firstChild,U=N.nextSibling;return V.$$click=()=>{k(d.id),M(null)},a(N,r(d.icon,{class:"size-4 opacity-70 shrink-0"}),ne),a(ne,()=>d.label),a(U,()=>E()[d.id]),P(C=>{var D=`${v()*50}ms`,te=n()===d.id;return D!==C.e&&me(V,"animation-delay",C.e=D),te!==C.t&&V.classList.toggle("active",C.t=te),C},{e:void 0,t:void 0}),V})()})),a($n,()=>z().find(d=>d.id===n())?.label),a(Y,r(m,{get when(){return ee(n())||Ae(n())&&n()!=="brand"},get children(){var d=Kr(),v=d.firstChild;return a(d,r(An,{class:"absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-weaker"}),v),v.$$input=V=>S(V.currentTarget.value),P(()=>Q(v,"placeholder",Ae(n())?"Search design inventory...":"Search assets...")),P(()=>v.value=h()),d}}),null),a(Je,r(m,{get when(){return ee(n())},get children(){return r(ce,{size:"small",variant:"secondary",onClick:()=>L(),children:"Refresh"})}}),null),a(Je,r(m,{get when(){return n()==="assets"},get children(){return r(ce,{size:"small",variant:"secondary",onClick:yn,get disabled(){return Ce()},get children(){return[r(gt,{class:"size-3.5 mr-1.5"}),G(()=>Ce()?"Generating...":"Generate")]}})}}),null),a(Je,r(m,{get when(){return n()==="brand"},get children(){return r(ce,{size:"small",variant:"secondary",onClick:()=>void ke(),children:"Refresh snapshot"})}}),null),a(Je,r(m,{get when(){return n()!=="brand"},get children(){return r(ce,{size:"small",variant:"primary",onClick:_t,get children(){return[r(jn,{class:"size-3.5 mr-1.5"}),"Add"," ",G(()=>G(()=>!!ee(n()))()?"Asset":G(()=>n()==="type")()?"Font":G(()=>n()==="colors")()?"Palette":G(()=>n()==="icons")()?"Icon":n().slice(0,-1))]}})}}),null),a(Ct,r(m,{get when(){return G(()=>!!Ge())()&&!Me()},get children(){var d=Wr(),v=d.firstChild;return a(d,r(De,{class:"size-3.5 text-text-weaker"}),v),a(v,wt),d}}),qe),a(qe,r(m,{get when(){return G(()=>n()==="brand")()&&le()||ee(n())&&W().length>0||Ae(n())&&n()!=="brand"&&W().length>0||n()==="components"&&we().length>0||n()==="tokens"&&Le().length>0},get fallback(){return r(m,{get when(){return!Me()},get fallback(){return r(Ea,{get label(){return wt()}})},get children(){var d=ta(),v=d.firstChild,V=v.nextSibling,N=V.firstChild,ne=N.firstChild,U=ne.nextSibling;U.nextSibling;var C=N.nextSibling;return a(v,()=>{const D=z().find(te=>te.id===n())?.icon;return r(D,{class:"size-8"})}),a(N,n,U),a(C,()=>n()==="brand"&&"Seed defaults or open a project with Trellis initialized to create a project brand.",null),a(C,()=>n()==="icons"&&"Enable icons from the Lucide or custom catalog for this project.",null),a(C,()=>n()==="colors"&&"Create palettes with semantic roles like primary, surface, and accent.",null),a(C,()=>n()==="type"&&"Add fonts from the curated catalog to build your project type system.",null),a(C,()=>n()==="assets"&&"Images and visual media in .trellis/media will appear here.",null),a(C,()=>n()==="videos"&&"Upload MP4, MOV, WebM, and other video files for your project.",null),a(C,()=>n()==="documents"&&"Upload PDFs, Word docs, spreadsheets, and presentations.",null),a(C,()=>n()==="links"&&"Save bookmarks and external URLs as reusable Trellis assets.",null),a(C,()=>n()==="models"&&"Upload GLB, GLTF, OBJ, HDR, and other 3D or texture files.",null),a(C,()=>n()==="audio"&&"Upload MP3, WAV, and other audio files for your project.",null),a(C,()=>n()==="sprites"&&"Upload atlas PNGs to .trellis/media/sprites. Graph-backed regions and animations are defined in specs/sprite-atlas-graph.md.",null),a(C,()=>n()==="components"&&"Components defined in your project will appear here.",null),a(C,()=>n()==="tokens"&&"Centralize your styling with theme-aware tokens.",null),a(d,r(m,{get when(){return G(()=>!!(ee(n())||Ae(n())&&n()!=="brand"||n()==="components"||n()==="tokens"))()&&n()!=="brand"},get children(){return r(ce,{variant:"secondary",class:"mt-2",onClick:_t,get children(){return["Add your first"," ",G(()=>G(()=>!!ee(n()))()?"asset":G(()=>n()==="type")()?"font":G(()=>n()==="colors")()?"palette":G(()=>n()==="icons")()?"icon":n().slice(0,-1))]}})}}),null),d}})},get children(){return[r(m,{get when(){return G(()=>n()==="brand")()&&le()},children:d=>r(Er,{get snapshot(){return d()},get logoUrl(){return G(()=>!!d().logoPath)()?$t(d().logoPath):void 0},get uploadingLogo(){return Ue()},get savingSemantics(){return Xe()},get savingBrand(){return Ze()},onUploadLogo:dn,onSaveSemantics:un,onSaveName:gn,onSaveSwatch:fn,onSaveFontFamily:pn})}),r(m,{get when(){return ee(n())},get children(){var d=Hr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=ra(),ne=N.firstChild,U=ne.nextSibling;return N.$$click=()=>M(v),a(ne,r(Pa,{asset:v,load:et})),a(U,r(m,{get when(){return G(()=>v.category==="link")()&&v.url},get fallback(){return(()=>{var C=aa();return a(C,()=>Ve(v)),P(()=>Q(C,"title",Ve(v))),C})()},children:C=>(()=>{var D=ia();return a(D,r(za,{get url(){return C()},get title(){return Ve(v)},load:et})),D})()}),null),a(U,r(m,{get when(){return on(v)},children:C=>(()=>{var D=la();return a(D,C),P(()=>Q(D,"title",C())),D})()}),null),a(U,r(m,{get when(){return v.category!=="link"},get children(){var C=na(),D=C.firstChild,te=D.nextSibling;return a(D,()=>v.ext.toUpperCase()),a(te,()=>xt(v.size)),C}}),null),P(C=>{var D=`${V()*30}ms`,te=O()?.path===v.path;return D!==C.e&&me(N,"animation-delay",C.e=D),te!==C.t&&N.classList.toggle("selected",C.t=te),C},{e:void 0,t:void 0}),N})()})),d}}),r(m,{get when(){return n()==="icons"},get children(){var d=Yr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=sa(),ne=N.firstChild,U=ne.nextSibling,C=U.nextSibling;return a(ne,r(dt,{type:"Icon",get icon(){return String(p(q(),v.id,"catalogRef")??p(q(),v.id,"key")??"thing")},size:28})),a(U,()=>String(p(q(),v.id,"key")??v.id)),a(C,()=>String(p(q(),v.id,"library")??"lucide")),a(N,r(Ke,{icon:"trash",variant:"ghost",class:"icon-grid-delete opacity-0 group-hover:opacity-100",onClick:()=>void St(v.id),"aria-label":"Delete icon"}),null),P(D=>{var te=`${V()*25}ms`,Z=String(p(q(),v.id,"key")??v.id);return te!==D.e&&me(N,"animation-delay",D.e=te),Z!==D.t&&Q(U,"title",D.t=Z),D},{e:void 0,t:void 0}),N})()})),d}}),r(m,{get when(){return G(()=>!!(Ae(n())&&n()!=="brand"))()&&n()!=="icons"||n()==="components"||n()==="tokens"},get children(){var d=Qr();return a(d,r(ge,{get each(){return $e()},children:(v,V)=>(()=>{var N=da(),ne=N.firstChild,U=ne.firstChild,C=U.nextSibling,D=C.firstChild,te=D.nextSibling;return a(U,r(m,{get when(){return n()==="icons"},get fallback(){return r(m,{get when(){return n()==="colors"},get fallback(){return r(m,{get when(){return n()==="type"},get fallback(){return r(Yt,{class:"size-4"})},get children(){return r(Ht,{class:"size-4"})}})},get children(){return r(gt,{class:"size-4"})}})},get children(){return r(dt,{type:"Icon",get icon(){return String(p(q(),v.id,"catalogRef")??p(q(),v.id,"key")??"thing")},size:16})}})),a(D,r(m,{get when(){return n()==="icons"},get fallback(){return r(m,{get when(){return n()==="colors"},get fallback(){return r(m,{get when(){return n()==="type"},get fallback(){return q().find(Z=>Z.e===v.id&&Z.a==="label")?.v},get children(){return String(p(q(),v.id,"family")??v.id)}})},get children(){return String(p(q(),v.id,"name")??v.id)}})},get children(){return[G(()=>String(p(q(),v.id,"key")??v.id)),(()=>{var Z=oa();return Z.firstChild,a(Z,()=>String(p(q(),v.id,"library")??"lucide"),null),Z})()]}})),a(te,()=>v.id),a(C,r(m,{get when(){return n()==="colors"},get children(){var Z=ca();return a(Z,r(ge,{get each(){return Object.values(se(p(q(),v.id,"swatches"),{})).slice(0,6)},children:rt=>(()=>{var Ee=ua();return me(Ee,"background-color",rt),Ee})()})),Z}}),null),a(N,r(Ke,{icon:"trash-2",variant:"ghost",size:"small",class:"opacity-0 group-hover:opacity-100 transition-opacity text-text-destructive",onClick:()=>St(v.id)}),null),P(Z=>me(N,"animation-delay",`${V()*20}ms`)),N})()})),d}}),r(m,{get when(){return Ne()>0},get children(){var d=Xr();return a(d,r(ce,{variant:"secondary",onClick:()=>ye(v=>v+Pe),get children(){return["Show ",G(()=>Math.min(Pe,Ne()))," more"]}})),d}})]}})),a(i,r(m,{get when(){return O()},children:d=>r(m,{get when(){return G(()=>!!ee(n()))()&&ot(n(),d())},get children(){var v=$a(),V=v.firstChild;V.firstChild;var N=V.nextSibling,ne=N.firstChild,U=ne.nextSibling,C=U.firstChild,D=C.firstChild,te=D.nextSibling,Z=C.nextSibling,rt=Z.firstChild,Ee=rt.nextSibling,Lt=Z.nextSibling,kn=Lt.firstChild,Ft=kn.nextSibling,Tt=Lt.nextSibling,at=Tt.firstChild;at.firstChild;var zt=at.nextSibling,ue=Tt.nextSibling,Et=ue.firstChild,_n=Et.firstChild,Sn=_n.nextSibling,Cn=Et.nextSibling,In=Cn.firstChild,Ln=In.nextSibling,Fn=N.nextSibling;return a(V,r(Ke,{icon:"plus",variant:"ghost",size:"small",class:"rotate-45",onClick:()=>M(null)}),null),a(ne,r(m,{get when(){return d().category==="image"},get fallback(){return r(m,{get when(){return d().category==="audio"},get fallback(){return r(m,{get when(){return d().category==="link"},get fallback(){return(()=>{var _=_a(),K=_.firstChild;return a(_,r(m,{get when(){return d().category==="model3d"||d().category==="texture"},get fallback(){return r(m,{get when(){return d().category==="video"},get fallback(){return r(m,{get when(){return d().category==="document"},get fallback(){return r(Qt,{class:"size-12"})},get children(){return r(mt,{class:"size-12"})}})},get children(){return r(bt,{class:"size-12"})}})},get children(){return r(pt,{class:"size-12"})}}),K),a(K,()=>d().ext),_})()},get children(){return r(m,{get when(){return d().url},keyed:!0,children:_=>r(ln,{url:_,get title(){return Ve(d())},get previewImage(){return d().previewImage},get previewFavicon(){return d().previewFavicon},load:et})})}})},get children(){var _=ka();return P(()=>Q(_,"src",$t(d().path))),_}})},get children(){return r(an,{get path(){return d().path},get name(){return d().name},class:"size-full object-contain"})}})),a(D,()=>d().category==="link"?"Asset ID":"File Name"),a(te,()=>d().name),a(U,r(m,{get when(){return d().url},get children(){var _=ga(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().url),P(()=>Q(H,"href",d().url)),_}}),Z),Ee.addEventListener("blur",_=>nt({title:_.currentTarget.value})),Ft.addEventListener("blur",_=>nt({alt:_.currentTarget.value})),a(at,r(Ke,{icon:"palette",variant:"ghost",size:"small",onClick:vn,get disabled(){return pe()||Be()}}),null),zt.addEventListener("blur",_=>nt({description:_.currentTarget.value})),a(U,r(m,{get when(){return d().palette?.length},get children(){var _=fa(),K=_.firstChild,H=K.nextSibling;return a(H,r(ge,{get each(){return d().palette},children:Pt=>(()=>{var it=Sa(),At=it.firstChild;return a(it,r(m,{get when(){return cn(Pt)},children:Tn=>(()=>{var jt=Ca();return P(Da=>me(jt,"background-color",Tn())),jt})()}),At),a(At,Pt),it})()})),_}}),ue),a(U,r(m,{get when(){return d().tone},get children(){var _=pa(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().tone),_}}),ue),a(U,r(m,{get when(){return d().tags?.length},get children(){var _=ba(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().tags?.join(", ")),_}}),ue),a(U,r(m,{get when(){return G(()=>d().category==="audio")()&&(d().audioContentType||d().kind)},get children(){var _=ma(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioContentType||d().kind),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.bpm},get children(){var _=va(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.bpm),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.key},get children(){var _=ha(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.key),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.genre?.length},get children(){var _=ya(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.genre?.join(", ")),_}}),ue),a(U,r(m,{get when(){return d().audioAnalysis?.mood?.length},get children(){var _=wa(),K=_.firstChild,H=K.nextSibling;return a(H,()=>d().audioAnalysis?.mood?.join(", ")),_}}),ue),a(U,r(m,{get when(){return d().transcript},get children(){var _=xa(),K=_.firstChild,H=K.nextSibling;return P(()=>H.value=d().transcript||""),_}}),ue),a(Sn,()=>xt(d().size)),a(Ln,()=>d().ext),a(Fn,r(ce,{variant:"secondary",class:"w-full text-text-destructive hover:bg-red-500/10",onClick:async()=>{confirm("Delete this asset?")&&(await t.fetch(`${t.url}/file/delete?directory=${encodeURIComponent(t.directory)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:d().path})}),M(null),y(_=>_.filter(K=>K.path!==d().path)),await L())},children:"Delete Asset"})),P(()=>Ee.value=d().title||""),P(()=>Ft.value=d().alt||""),P(()=>zt.value=d().description||""),v}})}),null),a(i,r(Vn,{get open(){return u()},value:"",color:"#818cf8",type:"Icon",onClose:()=>T(!1),onSelect:async d=>{T(!1);const v=tr(d);if(!v)return;const V=await o.assert(v);V&&await w(),R(V?{title:"Icon added"}:{variant:"error",title:"Failed to add icon"})}}),null),P(d=>{var v=n()!=="brand",V=n()==="brand";return v!==d.e&&qe.classList.toggle("max-w-5xl",d.e=v),V!==d.t&&qe.classList.toggle("max-w-[72rem]",d.t=V),d},{e:void 0,t:void 0}),i})()}function Ma(){return r(Kt,{get children(){return r(sn,{panel:"assets"})}})}function Va(){return r(Kt,{get children(){return r(sn,{panel:"design"})}})}Qe(["input","click"]);export{Ma as AssetsPanel,Va as DesignPanel};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as w,E as ee,G as te,I as de,d as he,l as J,aV as P,b as pe,a as ue,p as fe,q as me,g as ge,s as ye,F as Se,aW as ve,y as xe}from"./mermaid.core-8TjZbLRD.js";import{s as be}from"./chunk-KX2RTZJC-BVt0fO5A.js";import{p as we}from"./chunk-4BX2VUAB-DT9Cii3i.js";import{p as Ce}from"./treemap-KZPCXAKY-D3fK9Jyz.js";import{s as Y}from"./transform-BwXaE9hv.js";import{b as H}from"./defaultLocale-DX6XiGOO.js";import{o as Z}from"./ordinal-Cboi1Yqb.js";import"./index-Ck426Hvx.js";import"./_baseUniq-U_Pc1B-R.js";import"./_basePickBy-B_iojEAt.js";import"./clone-Dq4a-r80.js";import"./init-Gi6I4Gst.js";function Te(e){var a=0,n=e.children,l=n&&n.length;if(!l)a=1;else for(;--l>=0;)a+=n[l].value;e.value=a}function Le(){return this.eachAfter(Te)}function $e(e,a){let n=-1;for(const l of this)e.call(a,l,++n,this);return this}function Ae(e,a){for(var n=this,l=[n],o,i,d=-1;n=l.pop();)if(e.call(a,n,++d,this),o=n.children)for(i=o.length-1;i>=0;--i)l.push(o[i]);return this}function Fe(e,a){for(var n=this,l=[n],o=[],i,d,h,m=-1;n=l.pop();)if(o.push(n),i=n.children)for(d=0,h=i.length;d<h;++d)l.push(i[d]);for(;n=o.pop();)e.call(a,n,++m,this);return this}function ke(e,a){let n=-1;for(const l of this)if(e.call(a,l,++n,this))return l}function Ne(e){return this.eachAfter(function(a){for(var n=+e(a.data)||0,l=a.children,o=l&&l.length;--o>=0;)n+=l[o].value;a.value=n})}function Me(e){return this.eachBefore(function(a){a.children&&a.children.sort(e)})}function _e(e){for(var a=this,n=ze(a,e),l=[a];a!==n;)a=a.parent,l.push(a);for(var o=l.length;e!==n;)l.splice(o,0,e),e=e.parent;return l}function ze(e,a){if(e===a)return e;var n=e.ancestors(),l=a.ancestors(),o=null;for(e=n.pop(),a=l.pop();e===a;)o=e,e=n.pop(),a=l.pop();return o}function Ve(){for(var e=this,a=[e];e=e.parent;)a.push(e);return a}function De(){return Array.from(this)}function Pe(){var e=[];return this.eachBefore(function(a){a.children||e.push(a)}),e}function Be(){var e=this,a=[];return e.each(function(n){n!==e&&a.push({source:n.parent,target:n})}),a}function*Ee(){var e=this,a,n=[e],l,o,i;do for(a=n.reverse(),n=[];e=a.pop();)if(yield e,l=e.children)for(o=0,i=l.length;o<i;++o)n.push(l[o]);while(n.length)}function K(e,a){e instanceof Map?(e=[void 0,e],a===void 0&&(a=Ie)):a===void 0&&(a=We);for(var n=new j(e),l,o=[n],i,d,h,m;l=o.pop();)if((d=a(l.data))&&(m=(d=Array.from(d)).length))for(l.children=d,h=m-1;h>=0;--h)o.push(i=d[h]=new j(d[h])),i.parent=l,i.depth=l.depth+1;return n.eachBefore(Oe)}function Re(){return K(this).eachBefore(He)}function We(e){return e.children}function Ie(e){return Array.isArray(e)?e[1]:null}function He(e){e.data.value!==void 0&&(e.value=e.data.value),e.data=e.data.data}function Oe(e){var a=0;do e.height=a;while((e=e.parent)&&e.height<++a)}function j(e){this.data=e,this.depth=this.height=0,this.parent=null}j.prototype=K.prototype={constructor:j,count:Le,each:$e,eachAfter:Fe,eachBefore:Ae,find:ke,sum:Ne,sort:Me,path:_e,ancestors:Ve,descendants:De,leaves:Pe,links:Be,copy:Re,[Symbol.iterator]:Ee};function Ge(e){if(typeof e!="function")throw new Error;return e}function O(){return 0}function G(e){return function(){return e}}function qe(e){e.x0=Math.round(e.x0),e.y0=Math.round(e.y0),e.x1=Math.round(e.x1),e.y1=Math.round(e.y1)}function Xe(e,a,n,l,o){for(var i=e.children,d,h=-1,m=i.length,c=e.value&&(l-a)/e.value;++h<m;)d=i[h],d.y0=n,d.y1=o,d.x0=a,d.x1=a+=d.value*c}function Ye(e,a,n,l,o){for(var i=e.children,d,h=-1,m=i.length,c=e.value&&(o-n)/e.value;++h<m;)d=i[h],d.x0=a,d.x1=l,d.y0=n,d.y1=n+=d.value*c}var je=(1+Math.sqrt(5))/2;function Ue(e,a,n,l,o,i){for(var d=[],h=a.children,m,c,p=0,b=0,r=h.length,x,S,v=a.value,u,g,N,k,V,E,M;p<r;){x=o-n,S=i-l;do u=h[b++].value;while(!u&&b<r);for(g=N=u,E=Math.max(S/x,x/S)/(v*e),M=u*u*E,V=Math.max(N/M,M/g);b<r;++b){if(u+=c=h[b].value,c<g&&(g=c),c>N&&(N=c),M=u*u*E,k=Math.max(N/M,M/g),k>V){u-=c;break}V=k}d.push(m={value:u,dice:x<S,children:h.slice(p,b)}),m.dice?Xe(m,n,l,o,v?l+=S*u/v:i):Ye(m,n,l,v?n+=x*u/v:o,i),v-=u,p=b}return d}const Ze=(function e(a){function n(l,o,i,d,h){Ue(a,l,o,i,d,h)}return n.ratio=function(l){return e((l=+l)>1?l:1)},n})(je);function Je(){var e=Ze,a=!1,n=1,l=1,o=[0],i=O,d=O,h=O,m=O,c=O;function p(r){return r.x0=r.y0=0,r.x1=n,r.y1=l,r.eachBefore(b),o=[0],a&&r.eachBefore(qe),r}function b(r){var x=o[r.depth],S=r.x0+x,v=r.y0+x,u=r.x1-x,g=r.y1-x;u<S&&(S=u=(S+u)/2),g<v&&(v=g=(v+g)/2),r.x0=S,r.y0=v,r.x1=u,r.y1=g,r.children&&(x=o[r.depth+1]=i(r)/2,S+=c(r)-x,v+=d(r)-x,u-=h(r)-x,g-=m(r)-x,u<S&&(S=u=(S+u)/2),g<v&&(v=g=(v+g)/2),e(r,S,v,u,g))}return p.round=function(r){return arguments.length?(a=!!r,p):a},p.size=function(r){return arguments.length?(n=+r[0],l=+r[1],p):[n,l]},p.tile=function(r){return arguments.length?(e=Ge(r),p):e},p.padding=function(r){return arguments.length?p.paddingInner(r).paddingOuter(r):p.paddingInner()},p.paddingInner=function(r){return arguments.length?(i=typeof r=="function"?r:G(+r),p):i},p.paddingOuter=function(r){return arguments.length?p.paddingTop(r).paddingRight(r).paddingBottom(r).paddingLeft(r):p.paddingTop()},p.paddingTop=function(r){return arguments.length?(d=typeof r=="function"?r:G(+r),p):d},p.paddingRight=function(r){return arguments.length?(h=typeof r=="function"?r:G(+r),p):h},p.paddingBottom=function(r){return arguments.length?(m=typeof r=="function"?r:G(+r),p):m},p.paddingLeft=function(r){return arguments.length?(c=typeof r=="function"?r:G(+r),p):c},p}var ae=class{constructor(){this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.setAccTitle=pe,this.getAccTitle=ue,this.setDiagramTitle=fe,this.getDiagramTitle=me,this.getAccDescription=ge,this.setAccDescription=ye}static{w(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){const e=Se,a=te();return ee({...e.treemap,...a.treemap??{}})}addNode(e,a){this.nodes.push(e),this.levels.set(e,a),a===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,a){const n=this.classes.get(e)??{id:e,styles:[],textStyles:[]},l=a.replace(/\\,/g,"§§§").replace(/,/g,";").replace(/§§§/g,",").split(";");l&&l.forEach(o=>{ve(o)&&(n?.textStyles?n.textStyles.push(o):n.textStyles=[o]),n?.styles?n.styles.push(o):n.styles=[o]}),this.classes.set(e,n)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){xe(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}};function ne(e){if(!e.length)return[];const a=[],n=[];return e.forEach(l=>{const o={name:l.name,children:l.type==="Leaf"?void 0:[]};for(o.classSelector=l?.classSelector,l?.cssCompiledStyles&&(o.cssCompiledStyles=l.cssCompiledStyles),l.type==="Leaf"&&l.value!==void 0&&(o.value=l.value);n.length>0&&n[n.length-1].level>=l.level;)n.pop();if(n.length===0)a.push(o);else{const i=n[n.length-1].node;i.children?i.children.push(o):i.children=[o]}l.type!=="Leaf"&&n.push({node:o,level:l.level})}),a}w(ne,"buildHierarchy");var Ke=w((e,a)=>{we(e,a);const n=[];for(const i of e.TreemapRows??[])i.$type==="ClassDefStatement"&&a.addClass(i.className??"",i.styleText??"");for(const i of e.TreemapRows??[]){const d=i.item;if(!d)continue;const h=i.indent?parseInt(i.indent):0,m=Qe(d),c=d.classSelector?a.getStylesForClass(d.classSelector):[],p=c.length>0?c:void 0,b={level:h,name:m,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:p};n.push(b)}const l=ne(n),o=w((i,d)=>{for(const h of i)a.addNode(h,d),h.children&&h.children.length>0&&o(h.children,d+1)},"addNodesRecursively");o(l,0)},"populate"),Qe=w(e=>e.name?String(e.name):"","getItemName"),le={parser:{yy:void 0},parse:w(async e=>{try{const n=await Ce("treemap",e);J.debug("Treemap AST:",n);const l=le.parser?.yy;if(!(l instanceof ae))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ke(n,l)}catch(a){throw J.error("Error parsing treemap:",a),a}},"parse")},et=10,B=10,q=25,tt=w((e,a,n,l)=>{const o=l.db,i=o.getConfig(),d=i.padding??et,h=o.getDiagramTitle(),m=o.getRoot(),{themeVariables:c}=te();if(!m)return;const p=h?30:0,b=de(a),r=i.nodeWidth?i.nodeWidth*B:960,x=i.nodeHeight?i.nodeHeight*B:500,S=r,v=x+p;b.attr("viewBox",`0 0 ${S} ${v}`),he(b,v,S,i.useMaxWidth);let u;try{const t=i.valueFormat||",";if(t==="$0,0")u=w(s=>"$"+H(",")(s),"valueFormat");else if(t.startsWith("$")&&t.includes(",")){const s=/\.\d+/.exec(t),f=s?s[0]:"";u=w(C=>"$"+H(","+f)(C),"valueFormat")}else if(t.startsWith("$")){const s=t.substring(1);u=w(f=>"$"+H(s||"")(f),"valueFormat")}else u=H(t)}catch(t){J.error("Error creating format function:",t),u=H(",")}const g=Z().range(["transparent",c.cScale0,c.cScale1,c.cScale2,c.cScale3,c.cScale4,c.cScale5,c.cScale6,c.cScale7,c.cScale8,c.cScale9,c.cScale10,c.cScale11]),N=Z().range(["transparent",c.cScalePeer0,c.cScalePeer1,c.cScalePeer2,c.cScalePeer3,c.cScalePeer4,c.cScalePeer5,c.cScalePeer6,c.cScalePeer7,c.cScalePeer8,c.cScalePeer9,c.cScalePeer10,c.cScalePeer11]),k=Z().range([c.cScaleLabel0,c.cScaleLabel1,c.cScaleLabel2,c.cScaleLabel3,c.cScaleLabel4,c.cScaleLabel5,c.cScaleLabel6,c.cScaleLabel7,c.cScaleLabel8,c.cScaleLabel9,c.cScaleLabel10,c.cScaleLabel11]);h&&b.append("text").attr("x",S/2).attr("y",p/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);const V=b.append("g").attr("transform",`translate(0, ${p})`).attr("class","treemapContainer"),E=K(m).sum(t=>t.value??0).sort((t,s)=>(s.value??0)-(t.value??0)),Q=Je().size([r,x]).paddingTop(t=>t.children&&t.children.length>0?q+B:0).paddingInner(d).paddingLeft(t=>t.children&&t.children.length>0?B:0).paddingRight(t=>t.children&&t.children.length>0?B:0).paddingBottom(t=>t.children&&t.children.length>0?B:0).round(!0)(E),re=Q.descendants().filter(t=>t.children&&t.children.length>0),R=V.selectAll(".treemapSection").data(re).enter().append("g").attr("class","treemapSection").attr("transform",t=>`translate(${t.x0},${t.y0})`);R.append("rect").attr("width",t=>t.x1-t.x0).attr("height",q).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",t=>t.depth===0?"display: none;":""),R.append("clipPath").attr("id",(t,s)=>`clip-section-${a}-${s}`).append("rect").attr("width",t=>Math.max(0,t.x1-t.x0-12)).attr("height",q),R.append("rect").attr("width",t=>t.x1-t.x0).attr("height",t=>t.y1-t.y0).attr("class",(t,s)=>`treemapSection section${s}`).attr("fill",t=>g(t.data.name)).attr("fill-opacity",.6).attr("stroke",t=>N(t.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",t=>{if(t.depth===0)return"display: none;";const s=P({cssCompiledStyles:t.data.cssCompiledStyles});return s.nodeStyles+";"+s.borderStyles.join(";")}),R.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",q/2).attr("dominant-baseline","middle").text(t=>t.depth===0?"":t.data.name).attr("font-weight","bold").attr("style",t=>{if(t.depth===0)return"display: none;";const s="dominant-baseline: middle; font-size: 12px; fill:"+k(t.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")}).each(function(t){if(t.depth===0)return;const s=Y(this),f=t.data.name;s.text(f);const C=t.x1-t.x0,L=6;let $;i.showValues!==!1&&t.value?$=C-10-30-10-L:$=C-L-6;const A=Math.max(15,$),y=s.node();if(y.getComputedTextLength()>A){let T=f;for(;T.length>0;){if(T=f.substring(0,T.length-1),T.length===0){s.text("..."),y.getComputedTextLength()>A&&s.text("");break}if(s.text(T+"..."),y.getComputedTextLength()<=A)break}}}),i.showValues!==!1&&R.append("text").attr("class","treemapSectionValue").attr("x",t=>t.x1-t.x0-10).attr("y",q/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(t=>t.value?u(t.value):"").attr("font-style","italic").attr("style",t=>{if(t.depth===0)return"display: none;";const s="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+k(t.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")});const se=Q.leaves(),X=V.selectAll(".treemapLeafGroup").data(se).enter().append("g").attr("class",(t,s)=>`treemapNode treemapLeafGroup leaf${s}${t.data.classSelector?` ${t.data.classSelector}`:""}x`).attr("transform",t=>`translate(${t.x0},${t.y0})`);X.append("rect").attr("width",t=>t.x1-t.x0).attr("height",t=>t.y1-t.y0).attr("class","treemapLeaf").attr("fill",t=>t.parent?g(t.parent.data.name):g(t.data.name)).attr("style",t=>P({cssCompiledStyles:t.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",t=>t.parent?g(t.parent.data.name):g(t.data.name)).attr("stroke-width",3),X.append("clipPath").attr("id",(t,s)=>`clip-${a}-${s}`).append("rect").attr("width",t=>Math.max(0,t.x1-t.x0-4)).attr("height",t=>Math.max(0,t.y1-t.y0-4)),X.append("text").attr("class","treemapLabel").attr("x",t=>(t.x1-t.x0)/2).attr("y",t=>(t.y1-t.y0)/2).attr("style",t=>{const s="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+k(t.data.name)+";",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")}).attr("clip-path",(t,s)=>`url(#clip-${a}-${s})`).text(t=>t.data.name).each(function(t){const s=Y(this),f=t.x1-t.x0,C=t.y1-t.y0,L=s.node(),$=4,D=f-2*$,A=C-2*$;if(D<10||A<10){s.style("display","none");return}let y=parseInt(s.style("font-size"),10);const _=8,F=28,T=.6,z=6,W=2;for(;L.getComputedTextLength()>D&&y>_;)y--,s.style("font-size",`${y}px`);let I=Math.max(z,Math.min(F,Math.round(y*T))),U=y+W+I;for(;U>A&&y>_&&(y--,I=Math.max(z,Math.min(F,Math.round(y*T))),!(I<z&&y===_));)s.style("font-size",`${y}px`),U=y+W+I;s.style("font-size",`${y}px`),(L.getComputedTextLength()>D||y<_||A<y)&&s.style("display","none")}),i.showValues!==!1&&X.append("text").attr("class","treemapValue").attr("x",s=>(s.x1-s.x0)/2).attr("y",function(s){return(s.y1-s.y0)/2}).attr("style",s=>{const f="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+k(s.data.name)+";",C=P({cssCompiledStyles:s.data.cssCompiledStyles});return f+C.labelStyles.replace("color:","fill:")}).attr("clip-path",(s,f)=>`url(#clip-${a}-${f})`).text(s=>s.value?u(s.value):"").each(function(s){const f=Y(this),C=this.parentNode;if(!C){f.style("display","none");return}const L=Y(C).select(".treemapLabel");if(L.empty()||L.style("display")==="none"){f.style("display","none");return}const $=parseFloat(L.style("font-size")),D=28,A=.6,y=6,_=2,F=Math.max(y,Math.min(D,Math.round($*A)));f.style("font-size",`${F}px`);const z=(s.y1-s.y0)/2+$/2+_;f.attr("y",z);const W=s.x1-s.x0,oe=s.y1-s.y0-4,ce=W-8;f.node().getComputedTextLength()>ce||z+F>oe||F<y?f.style("display","none"):f.style("display",null)});const ie=i.diagramPadding??8;be(b,ie,"flowchart",i?.useMaxWidth||!1)},"draw"),at=w(function(e,a){return a.db.getClasses()},"getClasses"),nt={draw:tt,getClasses:at},lt={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelColor:"black",labelFontSize:"12px",valueFontSize:"10px",valueColor:"black",titleColor:"black",titleFontSize:"14px"},rt=w(({treemap:e}={})=>{const a=ee(lt,e);return`
|
|
1
|
+
import{_ as w,E as ee,G as te,I as de,d as he,l as J,aV as P,b as pe,a as ue,p as fe,q as me,g as ge,s as ye,F as Se,aW as ve,y as xe}from"./mermaid.core-CHVX5Fzd.js";import{s as be}from"./chunk-KX2RTZJC-ztXM5Djy.js";import{p as we}from"./chunk-4BX2VUAB-yFvdxolC.js";import{p as Ce}from"./treemap-KZPCXAKY-BdvVd6gn.js";import{s as Y}from"./transform-BwXaE9hv.js";import{b as H}from"./defaultLocale-DX6XiGOO.js";import{o as Z}from"./ordinal-Cboi1Yqb.js";import"./index-sV80fC6e.js";import"./_baseUniq-BJj7tnk-.js";import"./_basePickBy-N3Rrk-vx.js";import"./clone-C9sv_Gd7.js";import"./init-Gi6I4Gst.js";function Te(e){var a=0,n=e.children,l=n&&n.length;if(!l)a=1;else for(;--l>=0;)a+=n[l].value;e.value=a}function Le(){return this.eachAfter(Te)}function $e(e,a){let n=-1;for(const l of this)e.call(a,l,++n,this);return this}function Ae(e,a){for(var n=this,l=[n],o,i,d=-1;n=l.pop();)if(e.call(a,n,++d,this),o=n.children)for(i=o.length-1;i>=0;--i)l.push(o[i]);return this}function Fe(e,a){for(var n=this,l=[n],o=[],i,d,h,m=-1;n=l.pop();)if(o.push(n),i=n.children)for(d=0,h=i.length;d<h;++d)l.push(i[d]);for(;n=o.pop();)e.call(a,n,++m,this);return this}function ke(e,a){let n=-1;for(const l of this)if(e.call(a,l,++n,this))return l}function Ne(e){return this.eachAfter(function(a){for(var n=+e(a.data)||0,l=a.children,o=l&&l.length;--o>=0;)n+=l[o].value;a.value=n})}function Me(e){return this.eachBefore(function(a){a.children&&a.children.sort(e)})}function _e(e){for(var a=this,n=ze(a,e),l=[a];a!==n;)a=a.parent,l.push(a);for(var o=l.length;e!==n;)l.splice(o,0,e),e=e.parent;return l}function ze(e,a){if(e===a)return e;var n=e.ancestors(),l=a.ancestors(),o=null;for(e=n.pop(),a=l.pop();e===a;)o=e,e=n.pop(),a=l.pop();return o}function Ve(){for(var e=this,a=[e];e=e.parent;)a.push(e);return a}function De(){return Array.from(this)}function Pe(){var e=[];return this.eachBefore(function(a){a.children||e.push(a)}),e}function Be(){var e=this,a=[];return e.each(function(n){n!==e&&a.push({source:n.parent,target:n})}),a}function*Ee(){var e=this,a,n=[e],l,o,i;do for(a=n.reverse(),n=[];e=a.pop();)if(yield e,l=e.children)for(o=0,i=l.length;o<i;++o)n.push(l[o]);while(n.length)}function K(e,a){e instanceof Map?(e=[void 0,e],a===void 0&&(a=Ie)):a===void 0&&(a=We);for(var n=new j(e),l,o=[n],i,d,h,m;l=o.pop();)if((d=a(l.data))&&(m=(d=Array.from(d)).length))for(l.children=d,h=m-1;h>=0;--h)o.push(i=d[h]=new j(d[h])),i.parent=l,i.depth=l.depth+1;return n.eachBefore(Oe)}function Re(){return K(this).eachBefore(He)}function We(e){return e.children}function Ie(e){return Array.isArray(e)?e[1]:null}function He(e){e.data.value!==void 0&&(e.value=e.data.value),e.data=e.data.data}function Oe(e){var a=0;do e.height=a;while((e=e.parent)&&e.height<++a)}function j(e){this.data=e,this.depth=this.height=0,this.parent=null}j.prototype=K.prototype={constructor:j,count:Le,each:$e,eachAfter:Fe,eachBefore:Ae,find:ke,sum:Ne,sort:Me,path:_e,ancestors:Ve,descendants:De,leaves:Pe,links:Be,copy:Re,[Symbol.iterator]:Ee};function Ge(e){if(typeof e!="function")throw new Error;return e}function O(){return 0}function G(e){return function(){return e}}function qe(e){e.x0=Math.round(e.x0),e.y0=Math.round(e.y0),e.x1=Math.round(e.x1),e.y1=Math.round(e.y1)}function Xe(e,a,n,l,o){for(var i=e.children,d,h=-1,m=i.length,c=e.value&&(l-a)/e.value;++h<m;)d=i[h],d.y0=n,d.y1=o,d.x0=a,d.x1=a+=d.value*c}function Ye(e,a,n,l,o){for(var i=e.children,d,h=-1,m=i.length,c=e.value&&(o-n)/e.value;++h<m;)d=i[h],d.x0=a,d.x1=l,d.y0=n,d.y1=n+=d.value*c}var je=(1+Math.sqrt(5))/2;function Ue(e,a,n,l,o,i){for(var d=[],h=a.children,m,c,p=0,b=0,r=h.length,x,S,v=a.value,u,g,N,k,V,E,M;p<r;){x=o-n,S=i-l;do u=h[b++].value;while(!u&&b<r);for(g=N=u,E=Math.max(S/x,x/S)/(v*e),M=u*u*E,V=Math.max(N/M,M/g);b<r;++b){if(u+=c=h[b].value,c<g&&(g=c),c>N&&(N=c),M=u*u*E,k=Math.max(N/M,M/g),k>V){u-=c;break}V=k}d.push(m={value:u,dice:x<S,children:h.slice(p,b)}),m.dice?Xe(m,n,l,o,v?l+=S*u/v:i):Ye(m,n,l,v?n+=x*u/v:o,i),v-=u,p=b}return d}const Ze=(function e(a){function n(l,o,i,d,h){Ue(a,l,o,i,d,h)}return n.ratio=function(l){return e((l=+l)>1?l:1)},n})(je);function Je(){var e=Ze,a=!1,n=1,l=1,o=[0],i=O,d=O,h=O,m=O,c=O;function p(r){return r.x0=r.y0=0,r.x1=n,r.y1=l,r.eachBefore(b),o=[0],a&&r.eachBefore(qe),r}function b(r){var x=o[r.depth],S=r.x0+x,v=r.y0+x,u=r.x1-x,g=r.y1-x;u<S&&(S=u=(S+u)/2),g<v&&(v=g=(v+g)/2),r.x0=S,r.y0=v,r.x1=u,r.y1=g,r.children&&(x=o[r.depth+1]=i(r)/2,S+=c(r)-x,v+=d(r)-x,u-=h(r)-x,g-=m(r)-x,u<S&&(S=u=(S+u)/2),g<v&&(v=g=(v+g)/2),e(r,S,v,u,g))}return p.round=function(r){return arguments.length?(a=!!r,p):a},p.size=function(r){return arguments.length?(n=+r[0],l=+r[1],p):[n,l]},p.tile=function(r){return arguments.length?(e=Ge(r),p):e},p.padding=function(r){return arguments.length?p.paddingInner(r).paddingOuter(r):p.paddingInner()},p.paddingInner=function(r){return arguments.length?(i=typeof r=="function"?r:G(+r),p):i},p.paddingOuter=function(r){return arguments.length?p.paddingTop(r).paddingRight(r).paddingBottom(r).paddingLeft(r):p.paddingTop()},p.paddingTop=function(r){return arguments.length?(d=typeof r=="function"?r:G(+r),p):d},p.paddingRight=function(r){return arguments.length?(h=typeof r=="function"?r:G(+r),p):h},p.paddingBottom=function(r){return arguments.length?(m=typeof r=="function"?r:G(+r),p):m},p.paddingLeft=function(r){return arguments.length?(c=typeof r=="function"?r:G(+r),p):c},p}var ae=class{constructor(){this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.setAccTitle=pe,this.getAccTitle=ue,this.setDiagramTitle=fe,this.getDiagramTitle=me,this.getAccDescription=ge,this.setAccDescription=ye}static{w(this,"TreeMapDB")}getNodes(){return this.nodes}getConfig(){const e=Se,a=te();return ee({...e.treemap,...a.treemap??{}})}addNode(e,a){this.nodes.push(e),this.levels.set(e,a),a===0&&(this.outerNodes.push(e),this.root??=e)}getRoot(){return{name:"",children:this.outerNodes}}addClass(e,a){const n=this.classes.get(e)??{id:e,styles:[],textStyles:[]},l=a.replace(/\\,/g,"§§§").replace(/,/g,";").replace(/§§§/g,",").split(";");l&&l.forEach(o=>{ve(o)&&(n?.textStyles?n.textStyles.push(o):n.textStyles=[o]),n?.styles?n.styles.push(o):n.styles=[o]}),this.classes.set(e,n)}getClasses(){return this.classes}getStylesForClass(e){return this.classes.get(e)?.styles??[]}clear(){xe(),this.nodes=[],this.levels=new Map,this.outerNodes=[],this.classes=new Map,this.root=void 0}};function ne(e){if(!e.length)return[];const a=[],n=[];return e.forEach(l=>{const o={name:l.name,children:l.type==="Leaf"?void 0:[]};for(o.classSelector=l?.classSelector,l?.cssCompiledStyles&&(o.cssCompiledStyles=l.cssCompiledStyles),l.type==="Leaf"&&l.value!==void 0&&(o.value=l.value);n.length>0&&n[n.length-1].level>=l.level;)n.pop();if(n.length===0)a.push(o);else{const i=n[n.length-1].node;i.children?i.children.push(o):i.children=[o]}l.type!=="Leaf"&&n.push({node:o,level:l.level})}),a}w(ne,"buildHierarchy");var Ke=w((e,a)=>{we(e,a);const n=[];for(const i of e.TreemapRows??[])i.$type==="ClassDefStatement"&&a.addClass(i.className??"",i.styleText??"");for(const i of e.TreemapRows??[]){const d=i.item;if(!d)continue;const h=i.indent?parseInt(i.indent):0,m=Qe(d),c=d.classSelector?a.getStylesForClass(d.classSelector):[],p=c.length>0?c:void 0,b={level:h,name:m,type:d.$type,value:d.value,classSelector:d.classSelector,cssCompiledStyles:p};n.push(b)}const l=ne(n),o=w((i,d)=>{for(const h of i)a.addNode(h,d),h.children&&h.children.length>0&&o(h.children,d+1)},"addNodesRecursively");o(l,0)},"populate"),Qe=w(e=>e.name?String(e.name):"","getItemName"),le={parser:{yy:void 0},parse:w(async e=>{try{const n=await Ce("treemap",e);J.debug("Treemap AST:",n);const l=le.parser?.yy;if(!(l instanceof ae))throw new Error("parser.parser?.yy was not a TreemapDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");Ke(n,l)}catch(a){throw J.error("Error parsing treemap:",a),a}},"parse")},et=10,B=10,q=25,tt=w((e,a,n,l)=>{const o=l.db,i=o.getConfig(),d=i.padding??et,h=o.getDiagramTitle(),m=o.getRoot(),{themeVariables:c}=te();if(!m)return;const p=h?30:0,b=de(a),r=i.nodeWidth?i.nodeWidth*B:960,x=i.nodeHeight?i.nodeHeight*B:500,S=r,v=x+p;b.attr("viewBox",`0 0 ${S} ${v}`),he(b,v,S,i.useMaxWidth);let u;try{const t=i.valueFormat||",";if(t==="$0,0")u=w(s=>"$"+H(",")(s),"valueFormat");else if(t.startsWith("$")&&t.includes(",")){const s=/\.\d+/.exec(t),f=s?s[0]:"";u=w(C=>"$"+H(","+f)(C),"valueFormat")}else if(t.startsWith("$")){const s=t.substring(1);u=w(f=>"$"+H(s||"")(f),"valueFormat")}else u=H(t)}catch(t){J.error("Error creating format function:",t),u=H(",")}const g=Z().range(["transparent",c.cScale0,c.cScale1,c.cScale2,c.cScale3,c.cScale4,c.cScale5,c.cScale6,c.cScale7,c.cScale8,c.cScale9,c.cScale10,c.cScale11]),N=Z().range(["transparent",c.cScalePeer0,c.cScalePeer1,c.cScalePeer2,c.cScalePeer3,c.cScalePeer4,c.cScalePeer5,c.cScalePeer6,c.cScalePeer7,c.cScalePeer8,c.cScalePeer9,c.cScalePeer10,c.cScalePeer11]),k=Z().range([c.cScaleLabel0,c.cScaleLabel1,c.cScaleLabel2,c.cScaleLabel3,c.cScaleLabel4,c.cScaleLabel5,c.cScaleLabel6,c.cScaleLabel7,c.cScaleLabel8,c.cScaleLabel9,c.cScaleLabel10,c.cScaleLabel11]);h&&b.append("text").attr("x",S/2).attr("y",p/2).attr("class","treemapTitle").attr("text-anchor","middle").attr("dominant-baseline","middle").text(h);const V=b.append("g").attr("transform",`translate(0, ${p})`).attr("class","treemapContainer"),E=K(m).sum(t=>t.value??0).sort((t,s)=>(s.value??0)-(t.value??0)),Q=Je().size([r,x]).paddingTop(t=>t.children&&t.children.length>0?q+B:0).paddingInner(d).paddingLeft(t=>t.children&&t.children.length>0?B:0).paddingRight(t=>t.children&&t.children.length>0?B:0).paddingBottom(t=>t.children&&t.children.length>0?B:0).round(!0)(E),re=Q.descendants().filter(t=>t.children&&t.children.length>0),R=V.selectAll(".treemapSection").data(re).enter().append("g").attr("class","treemapSection").attr("transform",t=>`translate(${t.x0},${t.y0})`);R.append("rect").attr("width",t=>t.x1-t.x0).attr("height",q).attr("class","treemapSectionHeader").attr("fill","none").attr("fill-opacity",.6).attr("stroke-width",.6).attr("style",t=>t.depth===0?"display: none;":""),R.append("clipPath").attr("id",(t,s)=>`clip-section-${a}-${s}`).append("rect").attr("width",t=>Math.max(0,t.x1-t.x0-12)).attr("height",q),R.append("rect").attr("width",t=>t.x1-t.x0).attr("height",t=>t.y1-t.y0).attr("class",(t,s)=>`treemapSection section${s}`).attr("fill",t=>g(t.data.name)).attr("fill-opacity",.6).attr("stroke",t=>N(t.data.name)).attr("stroke-width",2).attr("stroke-opacity",.4).attr("style",t=>{if(t.depth===0)return"display: none;";const s=P({cssCompiledStyles:t.data.cssCompiledStyles});return s.nodeStyles+";"+s.borderStyles.join(";")}),R.append("text").attr("class","treemapSectionLabel").attr("x",6).attr("y",q/2).attr("dominant-baseline","middle").text(t=>t.depth===0?"":t.data.name).attr("font-weight","bold").attr("style",t=>{if(t.depth===0)return"display: none;";const s="dominant-baseline: middle; font-size: 12px; fill:"+k(t.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")}).each(function(t){if(t.depth===0)return;const s=Y(this),f=t.data.name;s.text(f);const C=t.x1-t.x0,L=6;let $;i.showValues!==!1&&t.value?$=C-10-30-10-L:$=C-L-6;const A=Math.max(15,$),y=s.node();if(y.getComputedTextLength()>A){let T=f;for(;T.length>0;){if(T=f.substring(0,T.length-1),T.length===0){s.text("..."),y.getComputedTextLength()>A&&s.text("");break}if(s.text(T+"..."),y.getComputedTextLength()<=A)break}}}),i.showValues!==!1&&R.append("text").attr("class","treemapSectionValue").attr("x",t=>t.x1-t.x0-10).attr("y",q/2).attr("text-anchor","end").attr("dominant-baseline","middle").text(t=>t.value?u(t.value):"").attr("font-style","italic").attr("style",t=>{if(t.depth===0)return"display: none;";const s="text-anchor: end; dominant-baseline: middle; font-size: 10px; fill:"+k(t.data.name)+"; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")});const se=Q.leaves(),X=V.selectAll(".treemapLeafGroup").data(se).enter().append("g").attr("class",(t,s)=>`treemapNode treemapLeafGroup leaf${s}${t.data.classSelector?` ${t.data.classSelector}`:""}x`).attr("transform",t=>`translate(${t.x0},${t.y0})`);X.append("rect").attr("width",t=>t.x1-t.x0).attr("height",t=>t.y1-t.y0).attr("class","treemapLeaf").attr("fill",t=>t.parent?g(t.parent.data.name):g(t.data.name)).attr("style",t=>P({cssCompiledStyles:t.data.cssCompiledStyles}).nodeStyles).attr("fill-opacity",.3).attr("stroke",t=>t.parent?g(t.parent.data.name):g(t.data.name)).attr("stroke-width",3),X.append("clipPath").attr("id",(t,s)=>`clip-${a}-${s}`).append("rect").attr("width",t=>Math.max(0,t.x1-t.x0-4)).attr("height",t=>Math.max(0,t.y1-t.y0-4)),X.append("text").attr("class","treemapLabel").attr("x",t=>(t.x1-t.x0)/2).attr("y",t=>(t.y1-t.y0)/2).attr("style",t=>{const s="text-anchor: middle; dominant-baseline: middle; font-size: 38px;fill:"+k(t.data.name)+";",f=P({cssCompiledStyles:t.data.cssCompiledStyles});return s+f.labelStyles.replace("color:","fill:")}).attr("clip-path",(t,s)=>`url(#clip-${a}-${s})`).text(t=>t.data.name).each(function(t){const s=Y(this),f=t.x1-t.x0,C=t.y1-t.y0,L=s.node(),$=4,D=f-2*$,A=C-2*$;if(D<10||A<10){s.style("display","none");return}let y=parseInt(s.style("font-size"),10);const _=8,F=28,T=.6,z=6,W=2;for(;L.getComputedTextLength()>D&&y>_;)y--,s.style("font-size",`${y}px`);let I=Math.max(z,Math.min(F,Math.round(y*T))),U=y+W+I;for(;U>A&&y>_&&(y--,I=Math.max(z,Math.min(F,Math.round(y*T))),!(I<z&&y===_));)s.style("font-size",`${y}px`),U=y+W+I;s.style("font-size",`${y}px`),(L.getComputedTextLength()>D||y<_||A<y)&&s.style("display","none")}),i.showValues!==!1&&X.append("text").attr("class","treemapValue").attr("x",s=>(s.x1-s.x0)/2).attr("y",function(s){return(s.y1-s.y0)/2}).attr("style",s=>{const f="text-anchor: middle; dominant-baseline: hanging; font-size: 28px;fill:"+k(s.data.name)+";",C=P({cssCompiledStyles:s.data.cssCompiledStyles});return f+C.labelStyles.replace("color:","fill:")}).attr("clip-path",(s,f)=>`url(#clip-${a}-${f})`).text(s=>s.value?u(s.value):"").each(function(s){const f=Y(this),C=this.parentNode;if(!C){f.style("display","none");return}const L=Y(C).select(".treemapLabel");if(L.empty()||L.style("display")==="none"){f.style("display","none");return}const $=parseFloat(L.style("font-size")),D=28,A=.6,y=6,_=2,F=Math.max(y,Math.min(D,Math.round($*A)));f.style("font-size",`${F}px`);const z=(s.y1-s.y0)/2+$/2+_;f.attr("y",z);const W=s.x1-s.x0,oe=s.y1-s.y0-4,ce=W-8;f.node().getComputedTextLength()>ce||z+F>oe||F<y?f.style("display","none"):f.style("display",null)});const ie=i.diagramPadding??8;be(b,ie,"flowchart",i?.useMaxWidth||!1)},"draw"),at=w(function(e,a){return a.db.getClasses()},"getClasses"),nt={draw:tt,getClasses:at},lt={sectionStrokeColor:"black",sectionStrokeWidth:"1",sectionFillColor:"#efefef",leafStrokeColor:"black",leafStrokeWidth:"1",leafFillColor:"#efefef",labelColor:"black",labelFontSize:"12px",valueFontSize:"10px",valueColor:"black",titleColor:"black",titleFontSize:"14px"},rt=w(({treemap:e}={})=>{const a=ee(lt,e);return`
|
|
2
2
|
.treemapNode.section {
|
|
3
3
|
stroke: ${a.sectionStrokeColor};
|
|
4
4
|
stroke-width: ${a.sectionStrokeWidth};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as k,g as I,q as R,p as E,a as F,b as _,_ as l,I as D,y as G,E as f,F as z,G as C,l as P,$ as W,d as B}from"./mermaid.core-
|
|
1
|
+
import{s as k,g as I,q as R,p as E,a as F,b as _,_ as l,I as D,y as G,E as f,F as z,G as C,l as P,$ as W,d as B}from"./mermaid.core-CHVX5Fzd.js";import{p as V}from"./chunk-4BX2VUAB-yFvdxolC.js";import{p as H}from"./treemap-KZPCXAKY-BdvVd6gn.js";import"./index-sV80fC6e.js";import"./transform-BwXaE9hv.js";import"./_baseUniq-BJj7tnk-.js";import"./_basePickBy-N3Rrk-vx.js";import"./clone-C9sv_Gd7.js";var x={showLegend:!0,ticks:5,max:null,min:0,graticule:"circle"},w={axes:[],curves:[],options:x},m=structuredClone(w),j=z.radar,q=l(()=>f({...j,...C().radar}),"getConfig"),b=l(()=>m.axes,"getAxes"),N=l(()=>m.curves,"getCurves"),U=l(()=>m.options,"getOptions"),X=l(a=>{m.axes=a.map(t=>({name:t.name,label:t.label??t.name}))},"setAxes"),Y=l(a=>{m.curves=a.map(t=>({name:t.name,label:t.label??t.name,entries:Z(t.entries)}))},"setCurves"),Z=l(a=>{if(a[0].axis==null)return a.map(e=>e.value);const t=b();if(t.length===0)throw new Error("Axes must be populated before curves for reference entries");return t.map(e=>{const r=a.find(s=>s.axis?.$refText===e.name);if(r===void 0)throw new Error("Missing entry for axis "+e.label);return r.value})},"computeCurveEntries"),J=l(a=>{const t=a.reduce((e,r)=>(e[r.name]=r,e),{});m.options={showLegend:t.showLegend?.value??x.showLegend,ticks:t.ticks?.value??x.ticks,max:t.max?.value??x.max,min:t.min?.value??x.min,graticule:t.graticule?.value??x.graticule}},"setOptions"),K=l(()=>{G(),m=structuredClone(w)},"clear"),$={getAxes:b,getCurves:N,getOptions:U,setAxes:X,setCurves:Y,setOptions:J,getConfig:q,clear:K,setAccTitle:_,getAccTitle:F,setDiagramTitle:E,getDiagramTitle:R,getAccDescription:I,setAccDescription:k},Q=l(a=>{V(a,$);const{axes:t,curves:e,options:r}=a;$.setAxes(t),$.setCurves(e),$.setOptions(r)},"populate"),tt={parse:l(async a=>{const t=await H("radar",a);P.debug(t),Q(t)},"parse")},et=l((a,t,e,r)=>{const s=r.db,o=s.getAxes(),i=s.getCurves(),n=s.getOptions(),c=s.getConfig(),d=s.getDiagramTitle(),u=D(t),p=at(u,c),g=n.max??Math.max(...i.map(y=>Math.max(...y.entries))),h=n.min,v=Math.min(c.width,c.height)/2;rt(p,o,v,n.ticks,n.graticule),st(p,o,v,c),M(p,o,i,h,g,n.graticule,c),T(p,i,n.showLegend,c),p.append("text").attr("class","radarTitle").text(d).attr("x",0).attr("y",-c.height/2-c.marginTop)},"draw"),at=l((a,t)=>{const e=t.width+t.marginLeft+t.marginRight,r=t.height+t.marginTop+t.marginBottom,s={x:t.marginLeft+t.width/2,y:t.marginTop+t.height/2};return B(a,r,e,t.useMaxWidth??!0),a.attr("viewBox",`0 0 ${e} ${r}`),a.append("g").attr("transform",`translate(${s.x}, ${s.y})`)},"drawFrame"),rt=l((a,t,e,r,s)=>{if(s==="circle")for(let o=0;o<r;o++){const i=e*(o+1)/r;a.append("circle").attr("r",i).attr("class","radarGraticule")}else if(s==="polygon"){const o=t.length;for(let i=0;i<r;i++){const n=e*(i+1)/r,c=t.map((d,u)=>{const p=2*u*Math.PI/o-Math.PI/2,g=n*Math.cos(p),h=n*Math.sin(p);return`${g},${h}`}).join(" ");a.append("polygon").attr("points",c).attr("class","radarGraticule")}}},"drawGraticule"),st=l((a,t,e,r)=>{const s=t.length;for(let o=0;o<s;o++){const i=t[o].label,n=2*o*Math.PI/s-Math.PI/2;a.append("line").attr("x1",0).attr("y1",0).attr("x2",e*r.axisScaleFactor*Math.cos(n)).attr("y2",e*r.axisScaleFactor*Math.sin(n)).attr("class","radarAxisLine"),a.append("text").text(i).attr("x",e*r.axisLabelFactor*Math.cos(n)).attr("y",e*r.axisLabelFactor*Math.sin(n)).attr("class","radarAxisLabel")}},"drawAxes");function M(a,t,e,r,s,o,i){const n=t.length,c=Math.min(i.width,i.height)/2;e.forEach((d,u)=>{if(d.entries.length!==n)return;const p=d.entries.map((g,h)=>{const v=2*Math.PI*h/n-Math.PI/2,y=A(g,r,s,c),S=y*Math.cos(v),O=y*Math.sin(v);return{x:S,y:O}});o==="circle"?a.append("path").attr("d",L(p,i.curveTension)).attr("class",`radarCurve-${u}`):o==="polygon"&&a.append("polygon").attr("points",p.map(g=>`${g.x},${g.y}`).join(" ")).attr("class",`radarCurve-${u}`)})}l(M,"drawCurves");function A(a,t,e,r){const s=Math.min(Math.max(a,t),e);return r*(s-t)/(e-t)}l(A,"relativeRadius");function L(a,t){const e=a.length;let r=`M${a[0].x},${a[0].y}`;for(let s=0;s<e;s++){const o=a[(s-1+e)%e],i=a[s],n=a[(s+1)%e],c=a[(s+2)%e],d={x:i.x+(n.x-o.x)*t,y:i.y+(n.y-o.y)*t},u={x:n.x-(c.x-i.x)*t,y:n.y-(c.y-i.y)*t};r+=` C${d.x},${d.y} ${u.x},${u.y} ${n.x},${n.y}`}return`${r} Z`}l(L,"closedRoundCurve");function T(a,t,e,r){if(!e)return;const s=(r.width/2+r.marginRight)*3/4,o=-(r.height/2+r.marginTop)*3/4,i=20;t.forEach((n,c)=>{const d=a.append("g").attr("transform",`translate(${s}, ${o+c*i})`);d.append("rect").attr("width",12).attr("height",12).attr("class",`radarLegendBox-${c}`),d.append("text").attr("x",16).attr("y",0).attr("class","radarLegendText").text(n.label)})}l(T,"drawLegend");var nt={draw:et},ot=l((a,t)=>{let e="";for(let r=0;r<a.THEME_COLOR_LIMIT;r++){const s=a[`cScale${r}`];e+=`
|
|
2
2
|
.radarCurve-${r} {
|
|
3
3
|
color: ${s};
|
|
4
4
|
fill: ${s};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as b,E as m,I as $,d as B,l as u,b as C,a as S,p as D,q as T,g as E,s as F,F as P,G as z,y as A}from"./mermaid.core-
|
|
1
|
+
import{_ as b,E as m,I as $,d as B,l as u,b as C,a as S,p as D,q as T,g as E,s as F,F as P,G as z,y as A}from"./mermaid.core-CHVX5Fzd.js";import{p as W}from"./chunk-4BX2VUAB-yFvdxolC.js";import{p as _}from"./treemap-KZPCXAKY-BdvVd6gn.js";import"./index-sV80fC6e.js";import"./transform-BwXaE9hv.js";import"./_baseUniq-BJj7tnk-.js";import"./_basePickBy-N3Rrk-vx.js";import"./clone-C9sv_Gd7.js";var N=P.packet,w=class{constructor(){this.packet=[],this.setAccTitle=C,this.getAccTitle=S,this.setDiagramTitle=D,this.getDiagramTitle=T,this.getAccDescription=E,this.setAccDescription=F}static{b(this,"PacketDB")}getConfig(){const t=m({...N,...z().packet});return t.showBits&&(t.paddingY+=10),t}getPacket(){return this.packet}pushWord(t){t.length>0&&this.packet.push(t)}clear(){A(),this.packet=[]}},I=1e4,L=b((t,e)=>{W(t,e);let r=-1,o=[],n=1;const{bitsPerRow:l}=e.getConfig();for(let{start:a,end:i,bits:d,label:c}of t.blocks){if(a!==void 0&&i!==void 0&&i<a)throw new Error(`Packet block ${a} - ${i} is invalid. End must be greater than start.`);if(a??=r+1,a!==r+1)throw new Error(`Packet block ${a} - ${i??a} is not contiguous. It should start from ${r+1}.`);if(d===0)throw new Error(`Packet block ${a} is invalid. Cannot have a zero bit field.`);for(i??=a+(d??1)-1,d??=i-a+1,r=i,u.debug(`Packet block ${a} - ${r} with label ${c}`);o.length<=l+1&&e.getPacket().length<I;){const[p,s]=M({start:a,end:i,bits:d,label:c},n,l);if(o.push(p),p.end+1===n*l&&(e.pushWord(o),o=[],n++),!s)break;({start:a,end:i,bits:d,label:c}=s)}}e.pushWord(o)},"populate"),M=b((t,e,r)=>{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*r)return[t,void 0];const o=e*r-1,n=e*r;return[{start:t.start,end:o,label:t.label,bits:o-t.start},{start:n,end:t.end,label:t.label,bits:t.end-n}]},"getNextFittingBlock"),v={parser:{yy:void 0},parse:b(async t=>{const e=await _("packet",t),r=v.parser?.yy;if(!(r instanceof w))throw new Error("parser.parser?.yy was not a PacketDB. This is due to a bug within Mermaid, please report this issue at https://github.com/mermaid-js/mermaid/issues.");u.debug(e),L(e,r)},"parse")},Y=b((t,e,r,o)=>{const n=o.db,l=n.getConfig(),{rowHeight:a,paddingY:i,bitWidth:d,bitsPerRow:c}=l,p=n.getPacket(),s=n.getDiagramTitle(),h=a+i,g=h*(p.length+1)-(s?0:a),k=d*c+2,f=$(e);f.attr("viewBox",`0 0 ${k} ${g}`),B(f,g,k,l.useMaxWidth);for(const[x,y]of p.entries())G(f,y,x,l);f.append("text").text(s).attr("x",k/2).attr("y",g-h/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),G=b((t,e,r,{rowHeight:o,paddingX:n,paddingY:l,bitWidth:a,bitsPerRow:i,showBits:d})=>{const c=t.append("g"),p=r*(o+l)+l;for(const s of e){const h=s.start%i*a+1,g=(s.end-s.start+1)*a-n;if(c.append("rect").attr("x",h).attr("y",p).attr("width",g).attr("height",o).attr("class","packetBlock"),c.append("text").attr("x",h+g/2).attr("y",p+o/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(s.label),!d)continue;const k=s.end===s.start,f=p-2;c.append("text").attr("x",h+(k?g/2:0)).attr("y",f).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",k?"middle":"start").text(s.start),k||c.append("text").attr("x",h+g).attr("y",f).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(s.end)}},"drawWord"),O={draw:Y},j={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},q=b(({packet:t}={})=>{const e=m(j,t);return`
|
|
2
2
|
.packetByte {
|
|
3
3
|
font-size: ${e.byteFontSize};
|
|
4
4
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as x,y as v,f as $,H as w,m as i,l,I as _,p as k,n as m,B as f,G as C,t as y}from"./index-
|
|
1
|
+
import{c as x,y as v,f as $,H as w,m as i,l,I as _,p as k,n as m,B as f,G as C,t as y}from"./index-sV80fC6e.js";var D=y('<form class="flex flex-col gap-4 p-6 pt-0"><div class="flex items-center gap-2 text-12-regular text-text-weak"><span></span></div><div class="flex justify-end gap-2">'),S=y('<p class="text-12-regular text-red-500">');function z(b){const u=x(),g=v(),r=$(),[t,a]=w({url:"",busy:!1,error:""});async function p(){const e=t.url.trim();if(!(!e||t.busy)){a("busy",!0),a("error","");try{const n=await g.fetch(`${g.url}/global/clone`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e})}),s=await n.json();if(!n.ok){a("error",s.error||r.t("dialog.clone.error"));return}b.onSelect(s.path),u.close()}catch{a("error",r.t("dialog.clone.error"))}finally{a("busy",!1)}}}function h(e){e.preventDefault(),p()}return i(C,{get title(){return r.t("dialog.clone.title")},class:"w-full max-w-[440px] mx-auto",get children(){var e=D(),n=e.firstChild,s=n.firstChild,c=n.nextSibling;return e.addEventListener("submit",h),l(n,i(_,{name:"branch",size:"small",class:"shrink-0 text-icon-weak"}),s),l(s,()=>r.t("dialog.clone.description")),l(e,i(k,{autofocus:!0,type:"url",placeholder:"https://github.com/owner/repo",get value(){return t.url},onChange:o=>a("url",o),onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),p())}}),c),l(e,(()=>{var o=m(()=>!!t.error);return()=>o()&&(()=>{var d=S();return l(d,()=>t.error),d})()})(),c),l(c,i(f,{type:"button",variant:"ghost",size:"large",onClick:()=>u.close(),get children(){return r.t("common.cancel")}}),null),l(c,i(f,{type:"submit",variant:"primary",size:"large",get disabled(){return!t.url.trim()||t.busy},get children(){return m(()=>!!t.busy)()?r.t("common.loading"):r.t("dialog.clone.action")}}),null),e}})}export{z as DialogCloneProject};
|