likec4 1.54.0 → 1.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,29 +1,29 @@
1
- import{t as e}from"./libs/birpc.mjs";import{C as t,D as n,I as r,W as i,Z as a,k as o,o as s,q as c,r as l,t as u,v as d,x as f,y as p}from"./libs/remeda.mjs";import{C as m,_ as h,c as g,g as _,i as v,l as y,m as b,o as x,p as ee,r as te,s as ne,t as S,y as C}from"./filesystem.mjs";import{t as w}from"./libs/defu.mjs";import{r as T,t as re}from"./libs/pathe.mjs";import{t as E}from"./libs/tinyrainbow.mjs";import{t as D}from"./libs/json5.mjs";import{a as O,i as k,n as A,r as j,t as M}from"./libs/langium.mjs";import{o as N}from"./libs/ufo.mjs";import{t as ie}from"./libs/pako.mjs";import"@likec4/core/model";import{LikeC4Styles as ae,invariant as oe,isNonEmptyArray as se,nonexhaustive as ce}from"@likec4/core";import{pathToFileURL as le}from"url";import{RichText as ue,flattenMarkdownOrString as de}from"@likec4/core/types";import{compareNatural as fe,invariant as pe,sortNaturalByFqn as me}from"@likec4/core/utils";function he(e){let t=C.getChild(`lang`),n=w(e,{useFileSystem:!0,manualLayouts:!0,watch:!1,graphviz:`wasm`}),r=n.graphviz===`binary`;return t.info(`${E.dim(`layout`)} ${r?`binary`:`wasm`}`),te({...n.useFileSystem?{...x(n.watch),...n.manualLayouts?y:g}:{...ne,...g},...v(r?new ee:new b)})}async function ge(e,t){let n=T(e),r=le(n).toString(),i=r.endsWith(`/`)?r:r+`/`,a=C.getChild(`lang`),o=w(t,{...h,useFileSystem:!0,manualLayouts:!0,watch:!1});if(S(o),o.mcp)throw Error(`MCP server is not supported in this build`);let s=he(o),c={name:re(n),uri:i},l=s.shared.workspace.WorkspaceManager;a.info(`${E.dim(`workspace:`)} ${n}`),l.initialize({capabilities:{},processId:null,rootUri:null,workspaceFolders:[c]}),await l.initializeWorkspace([c]);let u=s.shared.workspace.LangiumDocuments.userDocuments.toArray();if(u.length===0)throw a.error(`no LikeC4 sources found`),Error(`no LikeC4 sources found`);return a.info(`${E.dim(`workspace:`)} found ${u.length} source files`),_(s,C,t)}const P=C.getChild(`vite`);async function _e({logger:e,likec4:t},n){e.info([E.green(`adhoc:view`),E.dim(`project:`),n.projectId].join(` `));let r=await t.views.adhocView(n.predicates,n.projectId);return e.info([E.green(`adhoc:view`),`✅`].join(` `)),r}function ve(e){let t=e.split(`
1
+ import{t as e}from"./libs/birpc.mjs";import{C as t,D as n,I as r,W as i,Z as a,k as o,o as s,q as c,r as l,t as u,v as d,x as f,y as p}from"./libs/remeda.mjs";import{c as m,f as h,n as g}from"./node.mjs";import{a as _,i as v,n as y,r as b,t as x}from"./libs/langium.mjs";import{t as S}from"./libs/tinyrainbow.mjs";import{o as C}from"./libs/ufo.mjs";import{t as w}from"./libs/json5.mjs";import{t as T}from"./libs/pako.mjs";import"@likec4/core/model";import{LikeC4Styles as E,invariant as D,isNonEmptyArray as ee,nonexhaustive as O}from"@likec4/core";import{RichText as k,flattenMarkdownOrString as A}from"@likec4/core/types";import{compareNatural as j,invariant as M,sortNaturalByFqn as N}from"@likec4/core/utils";const P=m.getChild(`vite`);async function te({logger:e,likec4:t},n){e.info([S.green(`adhoc:view`),S.dim(`project:`),n.projectId].join(` `));let r=await t.views.adhocView(n.predicates,n.projectId);return e.info([S.green(`adhoc:view`),`✅`].join(` `)),r}function F(e){let t=e.split(`
2
2
  `),n=/^\s+at\s+/,r=t.findIndex(e=>n.test(e));return r===-1&&(r=1),{message:t.slice(0,r).join(`
3
3
  `),stack:t.slice(r).join(`
4
- `)}}function ye(e,{name:t,error:n}){e.hot.send({type:`error`,err:{...ve(n),name:t??`LikeC4PluginError`,plugin:`vite-plugin-likec4`}})}async function be({logger:e,likec4:t},n){e.info([E.green(`view:onChange`),E.dim(`project`),n.projectId,E.dim(`view`),n.viewId,E.dim(`change`),n.change.op].join(` `));let r=await t.editor.applyChange(n);if(!r.success){e.error(`Failed to apply view change:\n${r.error}`);let t=Error(r.error);throw t.stack=r.error,t}e.info([E.green(`view:onChange`),`✅`].join(` `))}function xe(t){let n=null,r=t.server;e({updateView:e=>be(t,e),calcAdhocView:e=>_e(t,e)},{on:e=>r.hot.on(`likec4:rpc`,e),post:e=>r.hot.send(`likec4:rpc`,e),onFunctionError:(e,i)=>{t.logger.error(`RPC error in ${i}`,{error:e});let a=e.stack??e.message;try{n!==a&&(n=a,ye(r,{name:e.name,error:a}))}catch(e){t.logger.error(`Failed to send error to client`,{error:e})}}})}const Se=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),Ce=e=>e.split(`.`).map(Se).join(``),we=e=>Ce(e.parent?e.id.slice(e.parent.length+1):e.id),Te=({autoLayout:e})=>{switch(e.direction){case`TB`:return`down`;case`BT`:return`up`;case`LR`:return`right`;case`RL`:return`left`}},Ee=({shape:e})=>{switch(e){case`queue`:case`cylinder`:case`rectangle`:case`document`:return e;case`person`:return`c4-person`;case`storage`:return`stored_data`;case`component`:case`bucket`:case`mobile`:case`browser`:return`rectangle`}};function De(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=we(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=JSON.stringify(e.title),c=Ee(e);return new A().append(n,`: {`,j).indent({indentedChildren:t=>t.append(`label: `,s,j).appendIf(c!==`rectangle`,`shape: `,c,j).appendIf(e.children.length>0,j,M(r.filter(t=>t.parent===e.id),e=>o(e,i))),indentation:2}).append(`}`,j)},s=e=>new A().append(a.get(e.source),` -> `,a.get(e.target)).append(t=>e.label&&t.append(`: `,JSON.stringify(e.label)));return k(new A().append(`direction: `,Te(t),j,j).append(M(r.filter(e=>n(e.parent)),e=>o(e),{appendNewLineIfNotEmpty:!0})).appendIf(i.length>0,j,M(i,e=>s(e),{appendNewLineIfNotEmpty:!0})))}const Oe=`data:page/id,likec4-`,F=1e4,I=`#dae8fc`,ke=`#2563eb`,L=`#1e40af`,Ae=`diagrams.drawio`,je=`#74c0fc`;function R(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&apos;`)}function Me(e){let t=e.split(/\r?\n/),n={},r={},i={},a={},o=!1,s=0;for(;s<t.length;){let e=t[s];if(e==null){s+=1;continue}if(e.trim()===`// <likec4.layout.drawio>`){o=!0,s+=1;let e=[];for(;s<t.length&&t[s]?.trim()!==`// </likec4.layout.drawio>`;){let n=t[s]?.trim();n?.startsWith(`// `)&&e.push(n.slice(3)),s+=1}if(e.length>0)try{let t=e.join(`
5
- `);n=JSON.parse(t)}catch{}s+=1;continue}if(e.trim()===`// <likec4.strokeColor.vertices>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.strokeColor.vertices>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)&&e.includes(`=`)){let t=e.slice(3).trim(),n=t.indexOf(`=`);if(n>0){let e=t.slice(0,n).trim(),i=t.slice(n+1).trim();e&&i&&(r[e]=i)}}s+=1}s+=1;continue}if(e.trim()===`// <likec4.strokeWidth.vertices>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.strokeWidth.vertices>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)&&e.includes(`=`)){let t=e.slice(3).trim(),n=t.indexOf(`=`);if(n>0){let e=t.slice(0,n).trim(),r=t.slice(n+1).trim();e&&r!==``&&(i[e]=r)}}s+=1}s+=1;continue}if(e.trim()===`// <likec4.edge.waypoints>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.edge.waypoints>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)){let t=e.slice(3).trim(),n=t.indexOf(` `);if(n>0){let e=t.slice(0,n).trim(),r=t.slice(n+1).trim();if(e&&r)try{let t=JSON.parse(r);Array.isArray(t)&&(a[e]=t)}catch{}}}s+=1}s+=1;continue}s+=1}return o?{layoutByView:n,strokeColorByFqn:r,strokeWidthByFqn:i,edgeWaypoints:a}:null}function Ne(e){let t=encodeURIComponent(e),n=new TextEncoder().encode(t);return Pe(ie.deflateRaw(n))}function Pe(e){if(typeof Buffer<`u`)return Buffer.from(e).toString(`base64`);let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}const z={getNotes(e){return e.notes},getSummary(e){return e.summary},getTags(e){return e.tags},getNavigateTo(e){return e.navigateTo},getIcon(e){return e.icon},getLinks(e){return e.links},getNotation(e){return e.notation},getCustomData(e){return e.customData},getChildren(e){return e.children}},B={getKind(e){return e.kind},getNotation(e){return e.notation},getLinks(e){return e.links},getMetadata(e){return e.metadata},getCustomData(e){return e.customData}};function Fe(e){return e.$styles??ae.DEFAULT}function V(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`)}function H(e){if(e==null)return``;let t=typeof e;if(t===`string`){let t=e;return t.trim()===``?``:t}return t===`number`||t===`boolean`?String(e):``}function Ie(e,t){return e&&t!==`none`||t===`dashed`?`dashed=1;`:``}function Le(e,t){return e===`none`?`0`:t||e?`1`:``}function Re(e,t){return{fill:e?.fill??I,stroke:t,font:e?.font??t}}function ze(e,t,n){return t&&t in e.theme.colors?t:n}function U(e,t,n){let r=Fe(e),i=ze(r,t??n,n);try{return r.colors(i)}catch{return ae.DEFAULT.colors(n)}}function Be(e){let t=`shape=rectangle;rounded=1;arcSize=12;`;switch(e){case`person`:return`shape=actor;`;case`rectangle`:case`browser`:case`mobile`:case`bucket`:return t;case`cylinder`:case`queue`:case`storage`:return`shape=cylinder3;whiteSpace=wrap;boundedLbl=1;backgroundOutline=1;size=15;`;case`document`:return`shape=document;whiteSpace=wrap;html=1;boundedLbl=1;`;case`component`:return`shape=component;`;default:return t}}function Ve(e,t){let n=U(e,t,`primary`).elements;return{fill:String(n.fill??I),stroke:String(n.stroke??ke),font:String(n.hiContrast??n.stroke??L)}}function He(e,t){let n=U(e,t??`gray`,`gray`);return String(n.relationships?.line??L)}function Ue(e,t){let n=U(e,t??`gray`,`gray`).relationships;return{font:String(n?.label??n?.line??L),background:String(n?.labelBg??`#ffffff`)}}function We(e,t){let n=e.x+e.width/2,r=e.y+e.height/2,i=t.x+t.width/2,a=t.y+t.height/2,o=i-n,s=a-r,c=Math.abs(o)>=Math.abs(s);return{exitX:c?o>=0?1:0:.5,exitY:c?.5:s>=0?1:0,entryX:c?o>=0?0:1:.5,entryY:c?.5:s>=0?0:1}}function Ge(e){if(Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`)return[[e[0],e[1]]];let t=e;return typeof t.x==`number`&&typeof t.y==`number`?[[t.x,t.y]]:[]}function Ke(e,t,n,r,i,a){return n?``:t===``?`<div style="box-sizing:border-box;width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;text-align:center;color:${r};font-family:${i};"><b style="font-size:${a}px;">${V(e)}</b></div>`:`<div style="box-sizing:border-box;width:100%;min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:${r};font-family:${i};"><b style="font-size:${a}px;">${V(e)}</b><br/><span style="font-weight:normal;font-size:${a}px;">${V(t)}</span></div>`}function W(e,t,n){n!=null&&n!==``&&e.push(`${t}=${encodeURIComponent(n)}`)}function qe(e,t,n){n!=null&&e.push(`${t}=${n}`)}function Je(e){return e===``?``:`link=${encodeURIComponent(`${Oe}${e}`)};`}function G(e){let t=e==null?null:de(e);return t!=null&&!o(t)?t.trim():``}function Ye(e){return!Array.isArray(e)||e.length===0?``:encodeURIComponent(JSON.stringify(e.map(e=>({url:e.url,title:e.title}))))}function Xe(e){return typeof e!=`object`||!e||Array.isArray(e)||Object.keys(e).length===0?``:encodeURIComponent(JSON.stringify(e))}const Ze=/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;function Qe(e){let t=[];return W(t,`likec4Description`,e.desc),W(t,`likec4Technology`,e.tech),W(t,`likec4Notes`,e.notes),W(t,`likec4Tags`,e.tagList),W(t,`likec4NavigateTo`,e.navTo),W(t,`likec4Icon`,e.iconName),W(t,`likec4Summary`,e.summaryStr),e.linksJson!==``&&t.push(`likec4Links=${e.linksJson}`),W(t,`likec4Border`,e.borderVal),qe(t,`likec4Opacity`,e.containerOpacityNum),W(t,`likec4StrokeWidth`,e.strokeWidth),e.colorNameForRoundtrip!==``&&t.push(`likec4ColorName=${e.colorNameForRoundtrip}`),W(t,`likec4Size`,e.nodeStyle?.size),W(t,`likec4Padding`,e.nodeStyle?.padding),W(t,`likec4TextSize`,e.nodeStyle?.textSize),W(t,`likec4IconPosition`,e.nodeStyle?.iconPosition),e.strokeHex&&Ze.test(e.strokeHex)&&W(t,`likec4StrokeColor`,e.strokeHex),W(t,`likec4Notation`,e.nodeNotation??void 0),t.length>0?t.join(`;`)+`;`:``}function $e(e,t,n,r){if(r?.profile!==`leanix`)return``;let i=[`bridgeManaged=true`,`likec4Id=${encodeURIComponent(e)}`,`likec4Kind=${encodeURIComponent(t)}`,`likec4ViewId=${encodeURIComponent(n)}`];r.projectId!=null&&r.projectId!==``&&i.push(`likec4ProjectId=${encodeURIComponent(r.projectId)}`);let a=r.leanixFactSheetTypeByKind?.[t];return a!=null&&a!==``&&i.push(`leanixFactSheetType=${encodeURIComponent(a)}`),i.join(`;`)+`;`}function et(e,t){return t?.profile===`leanix`?`bridgeManaged=true;likec4RelationId=${encodeURIComponent(e)};`:``}function tt(e){return!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).length===0?``:`
6
- <mxUserObject>`+Object.entries(e).map(([e,t])=>{let n=typeof t==`string`?t:t==null?``:String(t);return`<data key="${R(e)}">${R(n)}</data>`}).join(``)+`</mxUserObject>`}function nt(e){let t=[];return W(t,`likec4Description`,e.edgeDesc),W(t,`likec4Technology`,e.edgeTech),W(t,`likec4Notes`,e.edgeNotes),W(t,`likec4NavigateTo`,e.edgeNavTo),W(t,`likec4RelationshipKind`,e.edgeKind??void 0),W(t,`likec4Notation`,e.edgeNotation??void 0),e.edgeLinksJson!==``&&t.push(`likec4Links=${e.edgeLinksJson}`),e.edgeMetadataJson!==``&&t.push(`likec4Metadata=${e.edgeMetadataJson}`),t.length>0?t.join(`;`)+`;`:``}function rt(e){return e.label?R(e.label):``}function it(e,t){let n=t?.[`${e.source}|${e.target}|${e.id}`]??t?.[`${e.source}|${e.target}`],r=Array.isArray(n)?n.flatMap(Ge):[];return r.length>0?`<mxGeometry relative="1" as="geometry">${`<Array as="points">`+r.map(([e,t])=>`<mxPoint x="${Math.round(e)}" y="${Math.round(t)}"/>`).join(``)+`</Array>`}</mxGeometry>`:`<mxGeometry relative="1" as="geometry" />`}function at(e,t,n,r,i){let{bboxes:a,fontFamily:o}=t,s=a.get(e.source),c=a.get(e.target),l=s&&c?We(s,c):{exitX:1,exitY:.5,entryX:0,entryY:.5},u=`exitX=${l.exitX};exitY=${l.exitY};entryX=${l.entryX};entryY=${l.entryY};`,d=He(n,e.color),f=e.line===`dashed`?`dashed=1;`:e.line===`dotted`?`dashed=1;dashPattern=1 1;`:``,p=gt(e.head),m=e.tail==null||e.tail===`none`?`none`:gt(e.tail),h=nt({edgeDesc:G(e.description),edgeTech:G(e.technology),edgeNotes:G(e.notes),edgeNavTo:H(e.navigateTo),edgeKind:B.getKind(e),edgeNotation:B.getNotation(e),edgeLinksJson:Ye(B.getLinks(e)),edgeMetadataJson:Xe(B.getMetadata(e))}),g=et(e.id,i),_=Ue(n,e.color);return`endArrow=${p};startArrow=${m};html=1;rounded=0;${u}strokeColor=${d};strokeWidth=2;${f}${r===``?``:`fontColor=${_.font};fontSize=12;align=center;verticalAlign=middle;labelBackgroundColor=none;fontFamily=${encodeURIComponent(o)};`}${h}${g}`}function ot(e,t,n,r,i,a){let{defaultParentId:o}=t,s=i(e.source),c=i(e.target),l=rt(e),u=it(e,n?.edgeWaypoints);return`<mxCell id="${a}" value="${l}" style="${at(e,t,r,l,n)}" edge="1" parent="${o}" source="${s}" target="${c}">
7
- ${u}${tt(B.getCustomData(e))}
8
- </mxCell>`}function st(e,t,n){let{bboxes:r,defaultParentId:i,nodeIdsInView:a}=t,o=n(e.id),s=r.get(e.id),{width:c,height:l}=s,u=e.parent!=null&&a.has(e.parent)?n(e.parent):i,d=e.parent==null?void 0:r.get(e.parent);return{id:o,parentId:u,x:d==null?s.x+t.offsetX:s.x-d.x,y:d==null?s.y+t.offsetY:s.y-d.y,width:c,height:l}}function ct(e,t,n,r){let{containerNodeIds:i,effectiveStyles:a,fontFamily:o,containerTitleFontSizePx:s,containerTitleColor:c}=t,l=n?.strokeColorByNodeId,u=n?.strokeWidthByNodeId,d=i.has(e.id),f=e.kind??``,p=e.title,m=G(e.description),h=G(e.technology),g=G(z.getNotes(e)),_=z.getTags(e),v=Array.isArray(_)&&_.length>0?_.join(`,`):``,y=H(z.getNavigateTo(e)),b=H(z.getIcon(e)),x=f===`actor`||e.shape===`person`,ee=d?`shape=rectangle;rounded=0;container=1;collapsible=0;startSize=0;`:x?`shape=actor;`:Be(e.shape),te=l?.[e.id],ne=u?.[e.id],S=te?Re(Ve(r,e.color),te):Ve(r,e.color),C=S?.fill??I,w=S?.stroke??ke,T=S?.font??S?.stroke??L,re=`fillColor=${C};strokeColor=${w};fontColor=${T};`,E=e.style,D=a.fontSize(E?.textSize),O=R(Ke(p,m,d,T,o,D)),k=E?.border,A=ne??Le(k,d),j=A===``?``:`strokeWidth=${A};`,M=Ie(d,k),N=d===!0?E?.opacity??15:void 0,ie=N!=null&&d===!0?`fillOpacity=${Math.min(100,Math.max(0,N))};`:``,ae=Qe({desc:m,tech:h,notes:g,tagList:v,navTo:y,iconName:b,summaryStr:G(z.getSummary(e)),linksJson:Ye(z.getLinks(e)),borderVal:k,containerOpacityNum:N,strokeWidth:A,colorNameForRoundtrip:e.color?encodeURIComponent(String(e.color)):``,nodeStyle:E,strokeHex:w,nodeNotation:z.getNotation(e)})+$e(e.id,f,t.view.id,n),oe=tt(z.getCustomData(e)),se=Je(y);return{value:O,styleStr:`${d?`align=left;verticalAlign=top;overflow=fill;whiteSpace=wrap;html=1;`:`align=center;verticalAlign=middle;verticalLabelPosition=middle;labelPosition=center;fontSize=${D};fontStyle=1;spacingTop=4;spacingLeft=2;spacingRight=2;spacingBottom=2;overflow=fill;whiteSpace=wrap;html=1;fontFamily=${encodeURIComponent(o)};`}${ee}${re}${j}${M}${ie}${se}${ae}`,userObjectXml:oe,navTo:y,isContainer:d,title:p,fontFamily:o,containerTitleFontSizePx:s,containerTitleColor:c}}function lt(e,t,n,r,i,a){let o=st(e,t,i),s=ct(e,t,n,r);return{...o,value:s.value,styleStr:s.styleStr,userObjectXml:s.userObjectXml,navTo:s.navTo,isContainer:s.isContainer,fontFamily:s.fontFamily,...s.isContainer&&{title:s.title??``,titleCellId:String(a),containerTitleFontSizePx:s.containerTitleFontSizePx,containerTitleColor:s.containerTitleColor}}}function ut(e){let t=`<mxGeometry height="${Math.round(e.height)}" width="${Math.round(e.width)}" x="${Math.round(e.x)}" y="${Math.round(e.y)}" as="geometry" />`,n=e.userObjectXml===``?`\n ${t}`:`${e.userObjectXml}\n ${t}`,r=e.isContainer&&e.title!=null?R(e.title):e.value,i=e.navTo===``?`<mxCell id="${e.id}" value="${e.value}" style="${e.styleStr}" vertex="1" parent="${e.parentId}">\n ${n}\n</mxCell>`:`<UserObject label="${r}" link="${Oe}${R(e.navTo)}" id="${e.id}">\n <mxCell parent="${e.parentId}" style="${e.styleStr}" value="${e.value}" vertex="1">\n ${n}\n</mxCell>\n</UserObject>`;return e.isContainer?{vertexXml:i,titleCellXml:dt(e.title??``,e.titleCellId??e.id,e.navTo,e.id,e.fontFamily,e.containerTitleFontSizePx??12,e.containerTitleColor??je),isContainer:!0}:{vertexXml:i,isContainer:!1}}function dt(e,t,n,r,i,a,o){let s=R(e),c=Math.max(60,Math.min(260,e.length*8)),l=Je(n),u=`shape=text;html=1;fillColor=none;strokeColor=none;align=left;verticalAlign=top;fontSize=${a};fontStyle=1;fontColor=${o};fontFamily=${encodeURIComponent(i)};${l}`;if(n===``)return`<mxCell id="${t}" value="${s}" style="${u}" vertex="1" parent="${r}">\n <mxGeometry x="8" y="8" width="${c}" height="18" as="geometry" />\n</mxCell>`;let d=`<mxCell parent="${r}" style="${u}" value="${s}" vertex="1">\n <mxGeometry x="8" y="8" width="${c}" height="18" as="geometry" />\n</mxCell>`;return`<UserObject label="${R(e)}" link="${Oe}${R(n)}" id="${t}">\n ${d}\n</UserObject>`}function ft(e){return typeof e.title==`string`?e.title:null}function pt(e){let t=e.description;return typeof t==`object`&&t&&`txt`in t?String(t.txt):typeof t==`object`&&t&&`md`in t?String(t.md):typeof t==`string`?t:``}function mt(e,t){let n=[`bridgeManaged=true;`,`likec4ViewId=${encodeURIComponent(e.id)};`];return t.projectId!=null&&t.projectId!==``&&n.push(`likec4ProjectId=${encodeURIComponent(t.projectId)};`),n}function ht(e,t){let n=ft(e),r=pt(e),i=r.trim()===``?``:encodeURIComponent(r.trim()),a=e.notation,o=typeof a==`string`&&a!==``?a:void 0,s=o==null?``:encodeURIComponent(o),c=[`rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;`,`likec4ViewTitle=${encodeURIComponent(n??e.id)};`,i===``?``:`likec4ViewDescription=${i};`,s===``?``:`likec4ViewNotation=${s};`];return t?.profile===`leanix`&&c.push(...mt(e,t)),c.join(``)}function gt(e){switch(e){case`none`:return`none`;case`open`:case`onormal`:case`vee`:return`open`;case`diamond`:case`odiamond`:return`diamond`;case`dot`:case`odot`:return`oval`;case`crow`:return`block`;default:return`block`}}const K={x:0,y:0,width:120,height:60};function _t(e){return e.x===K.x&&e.y===K.y&&e.width===K.width&&e.height===K.height}function vt(e,t,n){let r=e=>`${e.x},${e.y},${e.width},${e.height}`,i=t.filter(e=>!n.has(e.id)),a=new Map;for(let t of i){let n=e.get(t.id);if(!n)continue;let i=r(n),o=a.get(i)??[];o.push(t),a.set(i,o)}for(let t of a.values()){if(t.length<=1)continue;let n=t[0],r=n?e.get(n.id):void 0;r&&_t(r)&&t.forEach((t,n)=>{e.set(t.id,{...r,x:r.x,y:r.y+n*(r.height+24)})})}}function yt(e,t,n,r,i,a){let o=[...n].filter(e=>t.has(e.id)).sort((e,t)=>(t.level??0)-(e.level??0));for(let t of o){let n=(z.getChildren(t)??[]).filter(e=>r.has(e));if(n.length===0||!_t(e.get(t.id)))continue;let o=1/0,s=1/0,c=-1/0,l=-1/0;for(let t of n){let n=e.get(t);n&&(o=Math.min(o,n.x),s=Math.min(s,n.y),c=Math.max(c,n.x+n.width),l=Math.max(l,n.y+n.height))}o!==1/0&&e.set(t.id,{x:o-i,y:s-a,width:c-o+2*i,height:l-s+2*a})}}function bt(e){let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.values())t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x+a.width),i=Math.max(i,a.y+a.height);t===1/0&&(t=0),n===1/0&&(n=0),r===-1/0&&(r=t+800),i===-1/0&&(i=n+600);let a=t+(r-t)/2,o=n+(i-n)/2;return{offsetX:800/2-a,offsetY:600/2-o,canvasWidth:800,canvasHeight:600}}function xt(e,t){let r=e.$view,{nodes:i}=r,a=t?.layoutOverride,o=[...i].sort((e,t)=>n(e.parent)&&n(t.parent)?0:n(e.parent)?-1:n(t.parent)?1:e.parent===t.parent?0:e.id.startsWith(t.id+`.`)?1:t.id.startsWith(e.id+`.`)?-1:0),s=e=>{let t=a?.[e.id];if(t)return t;let n=e;return{x:typeof n.x==`number`?n.x:Array.isArray(n.position)?n.position[0]:0,y:typeof n.y==`number`?n.y:Array.isArray(n.position)?n.position[1]:0,width:typeof n.width==`number`?n.width:n.size?.width??120,height:typeof n.height==`number`?n.height:n.size?.height??60}},c=new Map;for(let e of o)c.set(e.id,s(e));let l=new Set(i.map(e=>e.id)),u=new Set(i.filter(e=>{let t=z.getChildren(e);return Array.isArray(t)&&t.some(e=>l.has(e))}).map(e=>e.id));vt(c,o,u);let d=Fe(e),f=d.theme.spacing.xl;yt(c,u,o,l,f,d.theme.spacing.xl+d.theme.spacing.md);let{offsetX:p,offsetY:m,canvasWidth:h,canvasHeight:g}=bt(c);return{view:r,bboxes:c,containerNodeIds:u,sortedNodes:o,offsetX:p,offsetY:m,canvasWidth:h,canvasHeight:g,defaultParentId:`1`,rootId:`0`,effectiveStyles:d,fontFamily:`'IBM Plex Sans Variable',ui-sans-serif,system-ui,sans-serif`,containerTitleFontSizePx:Math.round(d.theme.textSizes.xs),containerTitleColor:je,nodeIdsInView:l}}function St(e,t){let n=e.$view,{edges:r}=n,i=t?.compressed!==!1,a=xt(e,t),{sortedNodes:o,defaultParentId:s,rootId:c,canvasWidth:l,canvasHeight:u}=a,d=new Map,f=2,p=e=>{let t=d.get(e);if(!t){if(f>=F)throw Error(`DrawIO cell ID range exhausted`);t=String(f++),d.set(e,t)}return t},m=[],h=[],g=[],_=F;for(let n of o){let r=ut(lt(n,a,t,e,p,_));r.isContainer?(m.push(r.vertexXml),r.titleCellXml&&m.push(r.titleCellXml),_++):h.push(r.vertexXml)}for(let n of r){if(f>=F)throw Error(`DrawIO cell ID range exhausted`);let r=String(f++);g.push(ot(n,a,t,e,p,r))}let v=[`<mxCell id="${s}" value="" style="${ht(n,t)}" vertex="1" parent="${c}">
4
+ `)}}function ne(e,{name:t,error:n}){e.hot.send({type:`error`,err:{...F(n),name:t??`LikeC4PluginError`,plugin:`vite-plugin-likec4`}})}async function re({logger:e,likec4:t},n){e.info([S.green(`view:onChange`),S.dim(`project`),n.projectId,S.dim(`view`),n.viewId,S.dim(`change`),n.change.op].join(` `));let r=await t.editor.applyChange(n);if(!r.success){e.error(`Failed to apply view change:\n${r.error}`);let t=Error(r.error);throw t.stack=r.error,t}e.info([S.green(`view:onChange`),`✅`].join(` `))}function ie(t){let n=null,r=t.server;e({updateView:e=>re(t,e),calcAdhocView:e=>te(t,e)},{on:e=>r.hot.on(`likec4:rpc`,e),post:e=>r.hot.send(`likec4:rpc`,e),onFunctionError:(e,i)=>{t.logger.error(`RPC error in ${i}`,{error:e});let a=e.stack??e.message;try{n!==a&&(n=a,ne(r,{name:e.name,error:a}))}catch(e){t.logger.error(`Failed to send error to client`,{error:e})}}})}const ae=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),oe=e=>e.split(`.`).map(ae).join(``),se=e=>oe(e.parent?e.id.slice(e.parent.length+1):e.id),ce=({autoLayout:e})=>{switch(e.direction){case`TB`:return`down`;case`BT`:return`up`;case`LR`:return`right`;case`RL`:return`left`}},le=({shape:e})=>{switch(e){case`queue`:case`cylinder`:case`rectangle`:case`document`:return e;case`person`:return`c4-person`;case`storage`:return`stored_data`;case`component`:case`bucket`:case`mobile`:case`browser`:return`rectangle`}};function ue(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=se(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=JSON.stringify(e.title),c=le(e);return new y().append(n,`: {`,b).indent({indentedChildren:t=>t.append(`label: `,s,b).appendIf(c!==`rectangle`,`shape: `,c,b).appendIf(e.children.length>0,b,x(r.filter(t=>t.parent===e.id),e=>o(e,i))),indentation:2}).append(`}`,b)},s=e=>new y().append(a.get(e.source),` -> `,a.get(e.target)).append(t=>e.label&&t.append(`: `,JSON.stringify(e.label)));return v(new y().append(`direction: `,ce(t),b,b).append(x(r.filter(e=>n(e.parent)),e=>o(e),{appendNewLineIfNotEmpty:!0})).appendIf(i.length>0,b,x(i,e=>s(e),{appendNewLineIfNotEmpty:!0})))}const de=`data:page/id,likec4-`,fe=1e4,pe=`#dae8fc`,me=`#2563eb`,I=`#1e40af`,he=`diagrams.drawio`,ge=`#74c0fc`;function L(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&apos;`)}function _e(e){let t=e.split(/\r?\n/),n={},r={},i={},a={},o=!1,s=0;for(;s<t.length;){let e=t[s];if(e==null){s+=1;continue}if(e.trim()===`// <likec4.layout.drawio>`){o=!0,s+=1;let e=[];for(;s<t.length&&t[s]?.trim()!==`// </likec4.layout.drawio>`;){let n=t[s]?.trim();n?.startsWith(`// `)&&e.push(n.slice(3)),s+=1}if(e.length>0)try{let t=e.join(`
5
+ `);n=JSON.parse(t)}catch{}s+=1;continue}if(e.trim()===`// <likec4.strokeColor.vertices>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.strokeColor.vertices>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)&&e.includes(`=`)){let t=e.slice(3).trim(),n=t.indexOf(`=`);if(n>0){let e=t.slice(0,n).trim(),i=t.slice(n+1).trim();e&&i&&(r[e]=i)}}s+=1}s+=1;continue}if(e.trim()===`// <likec4.strokeWidth.vertices>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.strokeWidth.vertices>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)&&e.includes(`=`)){let t=e.slice(3).trim(),n=t.indexOf(`=`);if(n>0){let e=t.slice(0,n).trim(),r=t.slice(n+1).trim();e&&r!==``&&(i[e]=r)}}s+=1}s+=1;continue}if(e.trim()===`// <likec4.edge.waypoints>`){for(o=!0,s+=1;s<t.length&&t[s]?.trim()!==`// </likec4.edge.waypoints>`;){let e=t[s]?.trim();if(e?.startsWith(`// `)){let t=e.slice(3).trim(),n=t.indexOf(` `);if(n>0){let e=t.slice(0,n).trim(),r=t.slice(n+1).trim();if(e&&r)try{let t=JSON.parse(r);Array.isArray(t)&&(a[e]=t)}catch{}}}s+=1}s+=1;continue}s+=1}return o?{layoutByView:n,strokeColorByFqn:r,strokeWidthByFqn:i,edgeWaypoints:a}:null}function ve(e){let t=encodeURIComponent(e),n=new TextEncoder().encode(t);return ye(T.deflateRaw(n))}function ye(e){if(typeof Buffer<`u`)return Buffer.from(e).toString(`base64`);let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}const R={getNotes(e){return e.notes},getSummary(e){return e.summary},getTags(e){return e.tags},getNavigateTo(e){return e.navigateTo},getIcon(e){return e.icon},getLinks(e){return e.links},getNotation(e){return e.notation},getCustomData(e){return e.customData},getChildren(e){return e.children}},z={getKind(e){return e.kind},getNotation(e){return e.notation},getLinks(e){return e.links},getMetadata(e){return e.metadata},getCustomData(e){return e.customData}};function be(e){return e.$styles??E.DEFAULT}function B(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`)}function V(e){if(e==null)return``;let t=typeof e;if(t===`string`){let t=e;return t.trim()===``?``:t}return t===`number`||t===`boolean`?String(e):``}function xe(e,t){return e&&t!==`none`||t===`dashed`?`dashed=1;`:``}function Se(e,t){return e===`none`?`0`:t||e?`1`:``}function Ce(e,t){return{fill:e?.fill??pe,stroke:t,font:e?.font??t}}function we(e,t,n){return t&&t in e.theme.colors?t:n}function H(e,t,n){let r=be(e),i=we(r,t??n,n);try{return r.colors(i)}catch{return E.DEFAULT.colors(n)}}function Te(e){let t=`shape=rectangle;rounded=1;arcSize=12;`;switch(e){case`person`:return`shape=actor;`;case`rectangle`:case`browser`:case`mobile`:case`bucket`:return t;case`cylinder`:case`queue`:case`storage`:return`shape=cylinder3;whiteSpace=wrap;boundedLbl=1;backgroundOutline=1;size=15;`;case`document`:return`shape=document;whiteSpace=wrap;html=1;boundedLbl=1;`;case`component`:return`shape=component;`;default:return t}}function Ee(e,t){let n=H(e,t,`primary`).elements;return{fill:String(n.fill??pe),stroke:String(n.stroke??me),font:String(n.hiContrast??n.stroke??I)}}function De(e,t){let n=H(e,t??`gray`,`gray`);return String(n.relationships?.line??I)}function Oe(e,t){let n=H(e,t??`gray`,`gray`).relationships;return{font:String(n?.label??n?.line??I),background:String(n?.labelBg??`#ffffff`)}}function ke(e,t){let n=e.x+e.width/2,r=e.y+e.height/2,i=t.x+t.width/2,a=t.y+t.height/2,o=i-n,s=a-r,c=Math.abs(o)>=Math.abs(s);return{exitX:c?o>=0?1:0:.5,exitY:c?.5:s>=0?1:0,entryX:c?o>=0?0:1:.5,entryY:c?.5:s>=0?0:1}}function Ae(e){if(Array.isArray(e)&&e.length>=2&&typeof e[0]==`number`&&typeof e[1]==`number`)return[[e[0],e[1]]];let t=e;return typeof t.x==`number`&&typeof t.y==`number`?[[t.x,t.y]]:[]}function je(e,t,n,r,i,a){return n?``:t===``?`<div style="box-sizing:border-box;width:100%;min-height:100%;display:flex;align-items:center;justify-content:center;text-align:center;color:${r};font-family:${i};"><b style="font-size:${a}px;">${B(e)}</b></div>`:`<div style="box-sizing:border-box;width:100%;min-height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:${r};font-family:${i};"><b style="font-size:${a}px;">${B(e)}</b><br/><span style="font-weight:normal;font-size:${a}px;">${B(t)}</span></div>`}function U(e,t,n){n!=null&&n!==``&&e.push(`${t}=${encodeURIComponent(n)}`)}function Me(e,t,n){n!=null&&e.push(`${t}=${n}`)}function Ne(e){return e===``?``:`link=${encodeURIComponent(`${de}${e}`)};`}function W(e){let t=e==null?null:A(e);return t!=null&&!o(t)?t.trim():``}function Pe(e){return!Array.isArray(e)||e.length===0?``:encodeURIComponent(JSON.stringify(e.map(e=>({url:e.url,title:e.title}))))}function Fe(e){return typeof e!=`object`||!e||Array.isArray(e)||Object.keys(e).length===0?``:encodeURIComponent(JSON.stringify(e))}const Ie=/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;function Le(e){let t=[];return U(t,`likec4Description`,e.desc),U(t,`likec4Technology`,e.tech),U(t,`likec4Notes`,e.notes),U(t,`likec4Tags`,e.tagList),U(t,`likec4NavigateTo`,e.navTo),U(t,`likec4Icon`,e.iconName),U(t,`likec4Summary`,e.summaryStr),e.linksJson!==``&&t.push(`likec4Links=${e.linksJson}`),U(t,`likec4Border`,e.borderVal),Me(t,`likec4Opacity`,e.containerOpacityNum),U(t,`likec4StrokeWidth`,e.strokeWidth),e.colorNameForRoundtrip!==``&&t.push(`likec4ColorName=${e.colorNameForRoundtrip}`),U(t,`likec4Size`,e.nodeStyle?.size),U(t,`likec4Padding`,e.nodeStyle?.padding),U(t,`likec4TextSize`,e.nodeStyle?.textSize),U(t,`likec4IconPosition`,e.nodeStyle?.iconPosition),e.strokeHex&&Ie.test(e.strokeHex)&&U(t,`likec4StrokeColor`,e.strokeHex),U(t,`likec4Notation`,e.nodeNotation??void 0),t.length>0?t.join(`;`)+`;`:``}function Re(e,t,n,r){if(r?.profile!==`leanix`)return``;let i=[`bridgeManaged=true`,`likec4Id=${encodeURIComponent(e)}`,`likec4Kind=${encodeURIComponent(t)}`,`likec4ViewId=${encodeURIComponent(n)}`];r.projectId!=null&&r.projectId!==``&&i.push(`likec4ProjectId=${encodeURIComponent(r.projectId)}`);let a=r.leanixFactSheetTypeByKind?.[t];return a!=null&&a!==``&&i.push(`leanixFactSheetType=${encodeURIComponent(a)}`),i.join(`;`)+`;`}function ze(e,t){return t?.profile===`leanix`?`bridgeManaged=true;likec4RelationId=${encodeURIComponent(e)};`:``}function Be(e){return!e||typeof e!=`object`||Array.isArray(e)||Object.keys(e).length===0?``:`
6
+ <mxUserObject>`+Object.entries(e).map(([e,t])=>{let n=typeof t==`string`?t:t==null?``:String(t);return`<data key="${L(e)}">${L(n)}</data>`}).join(``)+`</mxUserObject>`}function Ve(e){let t=[];return U(t,`likec4Description`,e.edgeDesc),U(t,`likec4Technology`,e.edgeTech),U(t,`likec4Notes`,e.edgeNotes),U(t,`likec4NavigateTo`,e.edgeNavTo),U(t,`likec4RelationshipKind`,e.edgeKind??void 0),U(t,`likec4Notation`,e.edgeNotation??void 0),e.edgeLinksJson!==``&&t.push(`likec4Links=${e.edgeLinksJson}`),e.edgeMetadataJson!==``&&t.push(`likec4Metadata=${e.edgeMetadataJson}`),t.length>0?t.join(`;`)+`;`:``}function He(e){return e.label?L(e.label):``}function Ue(e,t){let n=t?.[`${e.source}|${e.target}|${e.id}`]??t?.[`${e.source}|${e.target}`],r=Array.isArray(n)?n.flatMap(Ae):[];return r.length>0?`<mxGeometry relative="1" as="geometry">${`<Array as="points">`+r.map(([e,t])=>`<mxPoint x="${Math.round(e)}" y="${Math.round(t)}"/>`).join(``)+`</Array>`}</mxGeometry>`:`<mxGeometry relative="1" as="geometry" />`}function We(e,t,n,r,i){let{bboxes:a,fontFamily:o}=t,s=a.get(e.source),c=a.get(e.target),l=s&&c?ke(s,c):{exitX:1,exitY:.5,entryX:0,entryY:.5},u=`exitX=${l.exitX};exitY=${l.exitY};entryX=${l.entryX};entryY=${l.entryY};`,d=De(n,e.color),f=e.line===`dashed`?`dashed=1;`:e.line===`dotted`?`dashed=1;dashPattern=1 1;`:``,p=tt(e.head),m=e.tail==null||e.tail===`none`?`none`:tt(e.tail),h=Ve({edgeDesc:W(e.description),edgeTech:W(e.technology),edgeNotes:W(e.notes),edgeNavTo:V(e.navigateTo),edgeKind:z.getKind(e),edgeNotation:z.getNotation(e),edgeLinksJson:Pe(z.getLinks(e)),edgeMetadataJson:Fe(z.getMetadata(e))}),g=ze(e.id,i),_=Oe(n,e.color);return`endArrow=${p};startArrow=${m};html=1;rounded=0;${u}strokeColor=${d};strokeWidth=2;${f}${r===``?``:`fontColor=${_.font};fontSize=12;align=center;verticalAlign=middle;labelBackgroundColor=none;fontFamily=${encodeURIComponent(o)};`}${h}${g}`}function Ge(e,t,n,r,i,a){let{defaultParentId:o}=t,s=i(e.source),c=i(e.target),l=He(e),u=Ue(e,n?.edgeWaypoints);return`<mxCell id="${a}" value="${l}" style="${We(e,t,r,l,n)}" edge="1" parent="${o}" source="${s}" target="${c}">
7
+ ${u}${Be(z.getCustomData(e))}
8
+ </mxCell>`}function Ke(e,t,n){let{bboxes:r,defaultParentId:i,nodeIdsInView:a}=t,o=n(e.id),s=r.get(e.id),{width:c,height:l}=s,u=e.parent!=null&&a.has(e.parent)?n(e.parent):i,d=e.parent==null?void 0:r.get(e.parent);return{id:o,parentId:u,x:d==null?s.x+t.offsetX:s.x-d.x,y:d==null?s.y+t.offsetY:s.y-d.y,width:c,height:l}}function qe(e,t,n,r){let{containerNodeIds:i,effectiveStyles:a,fontFamily:o,containerTitleFontSizePx:s,containerTitleColor:c}=t,l=n?.strokeColorByNodeId,u=n?.strokeWidthByNodeId,d=i.has(e.id),f=e.kind??``,p=e.title,m=W(e.description),h=W(e.technology),g=W(R.getNotes(e)),_=R.getTags(e),v=Array.isArray(_)&&_.length>0?_.join(`,`):``,y=V(R.getNavigateTo(e)),b=V(R.getIcon(e)),x=f===`actor`||e.shape===`person`,S=d?`shape=rectangle;rounded=0;container=1;collapsible=0;startSize=0;`:x?`shape=actor;`:Te(e.shape),C=l?.[e.id],w=u?.[e.id],T=C?Ce(Ee(r,e.color),C):Ee(r,e.color),E=T?.fill??pe,D=T?.stroke??me,ee=T?.font??T?.stroke??I,O=`fillColor=${E};strokeColor=${D};fontColor=${ee};`,k=e.style,A=a.fontSize(k?.textSize),j=L(je(p,m,d,ee,o,A)),M=k?.border,N=w??Se(M,d),P=N===``?``:`strokeWidth=${N};`,te=xe(d,M),F=d===!0?k?.opacity??15:void 0,ne=F!=null&&d===!0?`fillOpacity=${Math.min(100,Math.max(0,F))};`:``,re=Le({desc:m,tech:h,notes:g,tagList:v,navTo:y,iconName:b,summaryStr:W(R.getSummary(e)),linksJson:Pe(R.getLinks(e)),borderVal:M,containerOpacityNum:F,strokeWidth:N,colorNameForRoundtrip:e.color?encodeURIComponent(String(e.color)):``,nodeStyle:k,strokeHex:D,nodeNotation:R.getNotation(e)})+Re(e.id,f,t.view.id,n),ie=Be(R.getCustomData(e)),ae=Ne(y);return{value:j,styleStr:`${d?`align=left;verticalAlign=top;overflow=fill;whiteSpace=wrap;html=1;`:`align=center;verticalAlign=middle;verticalLabelPosition=middle;labelPosition=center;fontSize=${A};fontStyle=1;spacingTop=4;spacingLeft=2;spacingRight=2;spacingBottom=2;overflow=fill;whiteSpace=wrap;html=1;fontFamily=${encodeURIComponent(o)};`}${S}${O}${P}${te}${ne}${ae}${re}`,userObjectXml:ie,navTo:y,isContainer:d,title:p,fontFamily:o,containerTitleFontSizePx:s,containerTitleColor:c}}function Je(e,t,n,r,i,a){let o=Ke(e,t,i),s=qe(e,t,n,r);return{...o,value:s.value,styleStr:s.styleStr,userObjectXml:s.userObjectXml,navTo:s.navTo,isContainer:s.isContainer,fontFamily:s.fontFamily,...s.isContainer&&{title:s.title??``,titleCellId:String(a),containerTitleFontSizePx:s.containerTitleFontSizePx,containerTitleColor:s.containerTitleColor}}}function Ye(e){let t=`<mxGeometry height="${Math.round(e.height)}" width="${Math.round(e.width)}" x="${Math.round(e.x)}" y="${Math.round(e.y)}" as="geometry" />`,n=e.userObjectXml===``?`\n ${t}`:`${e.userObjectXml}\n ${t}`,r=e.isContainer&&e.title!=null?L(e.title):e.value,i=e.navTo===``?`<mxCell id="${e.id}" value="${e.value}" style="${e.styleStr}" vertex="1" parent="${e.parentId}">\n ${n}\n</mxCell>`:`<UserObject label="${r}" link="${de}${L(e.navTo)}" id="${e.id}">\n <mxCell parent="${e.parentId}" style="${e.styleStr}" value="${e.value}" vertex="1">\n ${n}\n</mxCell>\n</UserObject>`;return e.isContainer?{vertexXml:i,titleCellXml:Xe(e.title??``,e.titleCellId??e.id,e.navTo,e.id,e.fontFamily,e.containerTitleFontSizePx??12,e.containerTitleColor??ge),isContainer:!0}:{vertexXml:i,isContainer:!1}}function Xe(e,t,n,r,i,a,o){let s=L(e),c=Math.max(60,Math.min(260,e.length*8)),l=Ne(n),u=`shape=text;html=1;fillColor=none;strokeColor=none;align=left;verticalAlign=top;fontSize=${a};fontStyle=1;fontColor=${o};fontFamily=${encodeURIComponent(i)};${l}`;if(n===``)return`<mxCell id="${t}" value="${s}" style="${u}" vertex="1" parent="${r}">\n <mxGeometry x="8" y="8" width="${c}" height="18" as="geometry" />\n</mxCell>`;let d=`<mxCell parent="${r}" style="${u}" value="${s}" vertex="1">\n <mxGeometry x="8" y="8" width="${c}" height="18" as="geometry" />\n</mxCell>`;return`<UserObject label="${L(e)}" link="${de}${L(n)}" id="${t}">\n ${d}\n</UserObject>`}function Ze(e){return typeof e.title==`string`?e.title:null}function Qe(e){let t=e.description;return typeof t==`object`&&t&&`txt`in t?String(t.txt):typeof t==`object`&&t&&`md`in t?String(t.md):typeof t==`string`?t:``}function $e(e,t){let n=[`bridgeManaged=true;`,`likec4ViewId=${encodeURIComponent(e.id)};`];return t.projectId!=null&&t.projectId!==``&&n.push(`likec4ProjectId=${encodeURIComponent(t.projectId)};`),n}function et(e,t){let n=Ze(e),r=Qe(e),i=r.trim()===``?``:encodeURIComponent(r.trim()),a=e.notation,o=typeof a==`string`&&a!==``?a:void 0,s=o==null?``:encodeURIComponent(o),c=[`rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;`,`likec4ViewTitle=${encodeURIComponent(n??e.id)};`,i===``?``:`likec4ViewDescription=${i};`,s===``?``:`likec4ViewNotation=${s};`];return t?.profile===`leanix`&&c.push(...$e(e,t)),c.join(``)}function tt(e){switch(e){case`none`:return`none`;case`open`:case`onormal`:case`vee`:return`open`;case`diamond`:case`odiamond`:return`diamond`;case`dot`:case`odot`:return`oval`;case`crow`:return`block`;default:return`block`}}const G={x:0,y:0,width:120,height:60};function nt(e){return e.x===G.x&&e.y===G.y&&e.width===G.width&&e.height===G.height}function rt(e,t,n){let r=e=>`${e.x},${e.y},${e.width},${e.height}`,i=t.filter(e=>!n.has(e.id)),a=new Map;for(let t of i){let n=e.get(t.id);if(!n)continue;let i=r(n),o=a.get(i)??[];o.push(t),a.set(i,o)}for(let t of a.values()){if(t.length<=1)continue;let n=t[0],r=n?e.get(n.id):void 0;r&&nt(r)&&t.forEach((t,n)=>{e.set(t.id,{...r,x:r.x,y:r.y+n*(r.height+24)})})}}function it(e,t,n,r,i,a){let o=[...n].filter(e=>t.has(e.id)).sort((e,t)=>(t.level??0)-(e.level??0));for(let t of o){let n=(R.getChildren(t)??[]).filter(e=>r.has(e));if(n.length===0||!nt(e.get(t.id)))continue;let o=1/0,s=1/0,c=-1/0,l=-1/0;for(let t of n){let n=e.get(t);n&&(o=Math.min(o,n.x),s=Math.min(s,n.y),c=Math.max(c,n.x+n.width),l=Math.max(l,n.y+n.height))}o!==1/0&&e.set(t.id,{x:o-i,y:s-a,width:c-o+2*i,height:l-s+2*a})}}function at(e){let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let a of e.values())t=Math.min(t,a.x),n=Math.min(n,a.y),r=Math.max(r,a.x+a.width),i=Math.max(i,a.y+a.height);t===1/0&&(t=0),n===1/0&&(n=0),r===-1/0&&(r=t+800),i===-1/0&&(i=n+600);let a=t+(r-t)/2,o=n+(i-n)/2;return{offsetX:800/2-a,offsetY:600/2-o,canvasWidth:800,canvasHeight:600}}function ot(e,t){let r=e.$view,{nodes:i}=r,a=t?.layoutOverride,o=[...i].sort((e,t)=>n(e.parent)&&n(t.parent)?0:n(e.parent)?-1:n(t.parent)?1:e.parent===t.parent?0:e.id.startsWith(t.id+`.`)?1:t.id.startsWith(e.id+`.`)?-1:0),s=e=>{let t=a?.[e.id];if(t)return t;let n=e;return{x:typeof n.x==`number`?n.x:Array.isArray(n.position)?n.position[0]:0,y:typeof n.y==`number`?n.y:Array.isArray(n.position)?n.position[1]:0,width:typeof n.width==`number`?n.width:n.size?.width??120,height:typeof n.height==`number`?n.height:n.size?.height??60}},c=new Map;for(let e of o)c.set(e.id,s(e));let l=new Set(i.map(e=>e.id)),u=new Set(i.filter(e=>{let t=R.getChildren(e);return Array.isArray(t)&&t.some(e=>l.has(e))}).map(e=>e.id));rt(c,o,u);let d=be(e),f=d.theme.spacing.xl;it(c,u,o,l,f,d.theme.spacing.xl+d.theme.spacing.md);let{offsetX:p,offsetY:m,canvasWidth:h,canvasHeight:g}=at(c);return{view:r,bboxes:c,containerNodeIds:u,sortedNodes:o,offsetX:p,offsetY:m,canvasWidth:h,canvasHeight:g,defaultParentId:`1`,rootId:`0`,effectiveStyles:d,fontFamily:`'IBM Plex Sans Variable',ui-sans-serif,system-ui,sans-serif`,containerTitleFontSizePx:Math.round(d.theme.textSizes.xs),containerTitleColor:ge,nodeIdsInView:l}}function st(e,t){let n=e.$view,{edges:r}=n,i=t?.compressed!==!1,a=ot(e,t),{sortedNodes:o,defaultParentId:s,rootId:c,canvasWidth:l,canvasHeight:u}=a,d=new Map,f=2,p=e=>{let t=d.get(e);if(!t){if(f>=fe)throw Error(`DrawIO cell ID range exhausted`);t=String(f++),d.set(e,t)}return t},m=[],h=[],g=[],_=fe;for(let n of o){let r=Ye(Je(n,a,t,e,p,_));r.isContainer?(m.push(r.vertexXml),r.titleCellXml&&m.push(r.titleCellXml),_++):h.push(r.vertexXml)}for(let n of r){if(f>=fe)throw Error(`DrawIO cell ID range exhausted`);let r=String(f++);g.push(Ge(n,a,t,e,p,r))}let v=[`<mxCell id="${s}" value="" style="${et(n,t)}" vertex="1" parent="${c}">
9
9
  <mxGeometry x="0" y="0" width="${l}" height="${u}" as="geometry" />
10
10
  </mxCell>`,...m,...h,...g].join(`
11
- `),y=(ft(n)??n.id).trim()||n.id,b=`<mxGraphModel dx="800" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
11
+ `),y=(Ze(n)??n.id).trim()||n.id,b=`<mxGraphModel dx="800" dy="800" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
12
12
  <root>
13
13
  <mxCell id="${c}" />
14
14
  ${v}
15
15
  </root>
16
- </mxGraphModel>`,x=i?Ne(b):b;return{name:y,id:n.id,content:x}}function Ct(e,t){let n=R(t??new Date().toISOString());return e.length===0?`<?xml version="1.0" encoding="UTF-8"?>
16
+ </mxGraphModel>`,x=i?ve(b):b;return{name:y,id:n.id,content:x}}function ct(e,t){let n=L(t??new Date().toISOString());return e.length===0?`<?xml version="1.0" encoding="UTF-8"?>
17
17
  <mxfile host="LikeC4" modified="${n}" agent="LikeC4" version="1.0" etag="" type="device">
18
18
  </mxfile>
19
19
  `:`<?xml version="1.0" encoding="UTF-8"?>
20
20
  <mxfile host="LikeC4" modified="${n}" agent="LikeC4" version="1.0" etag="" type="device"${e.length>1?` pages="${e.length}"`:``}>
21
- ${e.map(e=>` <diagram name="${R(e.name)}" id="likec4-${R(e.id)}">${e.content}</diagram>`).join(`
21
+ ${e.map(e=>` <diagram name="${L(e.name)}" id="likec4-${L(e.id)}">${e.content}</diagram>`).join(`
22
22
  `)}
23
23
  </mxfile>
24
- `}function wt(e,t){return Ct([St(e,t)],t?.modified)}function Tt(e,t,n){return Ct(e.map(e=>St(e,t?.[e.$view.id])),n)}function Et(e,t,n){let r={compressed:!1,...n};if(!t)return r;let i=t.layoutByView[e]?.nodes;return i!=null&&(r.layoutOverride=i),Object.keys(t.strokeColorByFqn).length>0&&(r.strokeColorByNodeId=t.strokeColorByFqn),Object.keys(t.strokeWidthByFqn).length>0&&(r.strokeWidthByNodeId=t.strokeWidthByFqn),Object.keys(t.edgeWaypoints).length>0&&(r.edgeWaypoints=t.edgeWaypoints),r}function Dt(e,t,n){let r=t?Me(t):null;return Object.fromEntries(e.map(e=>[e,Et(e,r,n)]))}function Ot(e){let t=Ne(e),n=JSON.stringify({type:`xml`,compressed:!0,data:t});return`https://app.diagrams.net/#create=`+encodeURIComponent(n)}const kt=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),At=e=>e.split(`.`).map(kt).join(``),jt=e=>At(e.parent?e.id.slice(e.parent.length+1):e.id),Mt=e=>e.replace(/\\?"/g,`'`),Nt=({shape:e,title:t})=>{let n=`label: ${JSON.stringify(t)}`;switch(e){case`queue`:return`@{ shape: horizontal-cylinder, ${n} }`;case`person`:return`@{ icon: "fa:user", shape: rounded, ${n} }`;case`storage`:return`@{ shape: disk, ${n} }`;case`cylinder`:return`@{ shape: cylinder, ${n} }`;case`mobile`:case`browser`:return`@{ shape: rounded, ${n} }`;case`bucket`:return`@{ shape: trap-t, ${n} }`;case`rectangle`:return`@{ shape: rectangle, ${n} }`;case`document`:return`@{ shape: doc, ${n} }`;case`component`:return`@{ shape: rectangle, ${n} }`;default:ce(e)}};function Pt(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=jt(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=new A;if(e.children.length>0){let t=Mt(e.title);s.append(`subgraph `,i,'["`',t,'`"]',j).indent({indentedChildren:[M(r.filter(t=>t.parent===e.id),e=>o(e,i),{appendNewLineIfNotEmpty:!0})],indentation:2}).append(`end`,j)}else s.append(i,Nt(e));return s},s=e=>new A().append(a.get(e.source),` -.`,e.label?' "`'+Mt(e.label)+'`" .-':`-`,`> `,a.get(e.target));return k(new A().append(`---`,j,`title: ${JSON.stringify(Mt(e.titleOrId))}`,j,`---`,j).append(`graph `,t.autoLayout.direction,j).indent({indentedChildren:e=>{e.append(M(r.filter(e=>n(e.parent)),e=>o(e),{appendNewLineIfNotEmpty:!0})).appendIf(i.length>0,M(i,e=>s(e),{appendNewLineIfNotEmpty:!0}))},indentation:2}))}function q(e){return e.length===0?`never`:e.sort(fe).map(e=>` | ${JSON.stringify(e)}`).join(`
25
- `).trimStart()}function Ft(e){let t=u(e);return t.length===0?`never`:a(t,me,p(e=>` | ${JSON.stringify(e.id)}`)).join(`
26
- `).trimStart()}function It(e,t={}){let{useCorePackage:n=!1}=t;return`
24
+ `}function lt(e,t){return ct([st(e,t)],t?.modified)}function ut(e,t,n){return ct(e.map(e=>st(e,t?.[e.$view.id])),n)}function dt(e,t,n){let r={compressed:!1,...n};if(!t)return r;let i=t.layoutByView[e]?.nodes;return i!=null&&(r.layoutOverride=i),Object.keys(t.strokeColorByFqn).length>0&&(r.strokeColorByNodeId=t.strokeColorByFqn),Object.keys(t.strokeWidthByFqn).length>0&&(r.strokeWidthByNodeId=t.strokeWidthByFqn),Object.keys(t.edgeWaypoints).length>0&&(r.edgeWaypoints=t.edgeWaypoints),r}function ft(e,t,n){let r=t?_e(t):null;return Object.fromEntries(e.map(e=>[e,dt(e,r,n)]))}function pt(e){let t=ve(e),n=JSON.stringify({type:`xml`,compressed:!0,data:t});return`https://app.diagrams.net/#create=`+encodeURIComponent(n)}const mt=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),ht=e=>e.split(`.`).map(mt).join(``),gt=e=>ht(e.parent?e.id.slice(e.parent.length+1):e.id),K=e=>e.replace(/\\?"/g,`'`),_t=({shape:e,title:t})=>{let n=`label: ${JSON.stringify(t)}`;switch(e){case`queue`:return`@{ shape: horizontal-cylinder, ${n} }`;case`person`:return`@{ icon: "fa:user", shape: rounded, ${n} }`;case`storage`:return`@{ shape: disk, ${n} }`;case`cylinder`:return`@{ shape: cylinder, ${n} }`;case`mobile`:case`browser`:return`@{ shape: rounded, ${n} }`;case`bucket`:return`@{ shape: trap-t, ${n} }`;case`rectangle`:return`@{ shape: rectangle, ${n} }`;case`document`:return`@{ shape: doc, ${n} }`;case`component`:return`@{ shape: rectangle, ${n} }`;default:O(e)}};function vt(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=gt(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=new y;if(e.children.length>0){let t=K(e.title);s.append(`subgraph `,i,'["`',t,'`"]',b).indent({indentedChildren:[x(r.filter(t=>t.parent===e.id),e=>o(e,i),{appendNewLineIfNotEmpty:!0})],indentation:2}).append(`end`,b)}else s.append(i,_t(e));return s},s=e=>new y().append(a.get(e.source),` -.`,e.label?' "`'+K(e.label)+'`" .-':`-`,`> `,a.get(e.target));return v(new y().append(`---`,b,`title: ${JSON.stringify(K(e.titleOrId))}`,b,`---`,b).append(`graph `,t.autoLayout.direction,b).indent({indentedChildren:e=>{e.append(x(r.filter(e=>n(e.parent)),e=>o(e),{appendNewLineIfNotEmpty:!0})).appendIf(i.length>0,x(i,e=>s(e),{appendNewLineIfNotEmpty:!0}))},indentation:2}))}function q(e){return e.length===0?`never`:e.sort(j).map(e=>` | ${JSON.stringify(e)}`).join(`
25
+ `).trimStart()}function yt(e){let t=u(e);return t.length===0?`never`:a(t,N,p(e=>` | ${JSON.stringify(e.id)}`)).join(`
26
+ `).trimStart()}function bt(e,t={}){let{useCorePackage:n=!1}=t;return`
27
27
  import type { Aux, SpecAux } from '${n?`@likec4/core/types`:`likec4/model`}';
28
28
 
29
29
  export type $Specs = SpecAux<
@@ -42,9 +42,9 @@ export type $Specs = SpecAux<
42
42
  export type $Aux = Aux<
43
43
  ${JSON.stringify(e.stage)},
44
44
  // Elements
45
- ${Ft(e.$data.elements)},
45
+ ${yt(e.$data.elements)},
46
46
  // Deployments
47
- ${Ft(e.$data.deployments.elements)},
47
+ ${yt(e.$data.deployments.elements)},
48
48
  // Views
49
49
  ${q(f(e.$data.views))},
50
50
  // Project ID
@@ -62,7 +62,7 @@ export type $DeploymentKind = $Aux['DeploymentKind']
62
62
  export type $Tag = $Aux['Tag']
63
63
  export type $Tags = readonly $Aux['Tag'][]
64
64
  export type $MetadataKey = $Aux['MetadataKey']
65
- `.trimStart()}function Lt(e,t={}){let n=It(e,t),{useCorePackage:r=!1}=t;return`
65
+ `.trimStart()}function xt(e,t={}){let n=bt(e,t),{useCorePackage:r=!1}=t;return`
66
66
  /* prettier-ignore-start */
67
67
  /* eslint-disable */
68
68
 
@@ -74,11 +74,11 @@ export type $MetadataKey = $Aux['MetadataKey']
74
74
  import { LikeC4Model } from '${r?`@likec4/core`:`likec4`}/model'
75
75
  ${n}
76
76
 
77
- export const likec4model: LikeC4Model<$Aux> = new LikeC4Model(${D.stringify(e.$data,{space:2,quote:`'`})} as any) as any
77
+ export const likec4model: LikeC4Model<$Aux> = new LikeC4Model(${w.stringify(e.$data,{space:2,quote:`'`})} as any) as any
78
78
 
79
79
  /* prettier-ignore-end */
80
- `.trimStart()}const Rt=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),J=e=>e.split(/[.-]/).map(Rt).join(``),zt=e=>J(e.parent?e.id.slice(e.parent.length+1):e.id),Y=(e,t,n=`#3b82f6`)=>e?t(e)??n:n,Bt=({autoLayout:e})=>{switch(e.direction){case`TB`:return`top to bottom`;case`BT`:return console.warn(`Bottom to top direction is not supported. Defaulting to top to bottom.`),`top to bottom`;case`LR`:return`left to right`;case`RL`:return console.warn(`Right to left direction is not supported. Defaulting to left to right.`),`left to right`}},Vt=({shape:e})=>{switch(e){case`queue`:case`rectangle`:case`person`:return e;case`storage`:case`cylinder`:return`database`;case`component`:return`component`;case`document`:case`mobile`:case`bucket`:case`browser`:return`rectangle`;default:ce(e)}},X=e=>o(e)?null:JSON.stringify(e).slice(1,-1).replace(/\\"/g,`"`);function Ht(e){let t=e.$view,r=e.$model.$styles.theme.colors,{nodes:i,edges:a}=t,s=e=>t=>t in r?r[t].elements[e]:void 0,c=e=>t=>t in r?r[t].relationships[e]:void 0,l=new Map,u=()=>new A().append(`title "`,e.titleOrId,`"`,j).append(Bt(t),` direction`,j),d=()=>new A().append(`hide stereotype`,j).append(`skinparam ranksep `,`60`,j).append(`skinparam nodesep `,`30`,j).append(`skinparam {`,j).indent({indentedChildren:e=>e.append(`arrowFontSize `,`10`,j).append(`defaultTextAlignment `,`center`,j).append(`wrapWidth `,`200`,j).append(`maxMessageSize `,`100`,j).append(`shadowing `,`false`,j),indentation:2}).append(`}`,j),f=e=>{let t=Vt(e),n=J(e.id);return new A().append(`skinparam `,t,`<<`,n,`>>`,`{`,j).indent({indentedChildren:t=>t.append(`BackgroundColor `,Y(e.color,s(`fill`)),j).append(`FontColor `,Y(e.color,s(`hiContrast`),`#FFFFFF`),j).append(`BorderColor `,Y(e.color,s(`stroke`)),j),indentation:2}).append(`}`,j)},p=e=>{let t=Vt(e),n=J(e.id),r=X(e.title)||zt(e),i=X(e.technology);l.set(e.id,n);let a=ue.from(e.description);return new A().append(t,` `).append(`"`).append(`==`,r).appendIf(!!i,`\\n<size:10>[`,i,`]</size>`).appendIf(a.nonEmpty,`\\n\\n`,X(a.text)).append(`"`,` <<`,n,`>> `,`as `,n,j)},m=e=>{let t=X(e.title)||zt(e),n=J(e.id);return l.set(e.id,n),new A().append(`rectangle "`,t,`" <<`,n,`>> as `,n,` {`,j).indent({indentedChildren:t=>t.append(`skinparam `,`RectangleBorderColor<<`,n,`>> `,Y(e.color,s(`fill`)),j).append(`skinparam `,`RectangleFontColor<<`,n,`>> `,Y(e.color,s(`fill`)),j).append(`skinparam `,`RectangleBorderStyle<<`,n,`>> `,`dashed`,j,j).append(M(i.filter(t=>t.parent===e.id),e=>e.children.length>0?m(e):p(e))),indentation:2}).append(`}`,j)},h=e=>{let t=e.technology||``,n=e.label||t,r=Y(e.color,c(`line`),`#777777`),i=e=>`<color:${r}>${e.replaceAll(`"`,`'`)}`,a=new A().append(l.get(e.source),` .[`,r,`,thickness=2].> `,l.get(e.target));return(n||t)&&(a.append(` : `,n.split(`
81
- `).map(e=>o(e)?e:i(e)).join(`\\n`)),t&&t!==n&&a.append(`\\n<size:8>[`,i(t),`]</size>`)),a.append(j)};return k(new A().append(`@startuml`,j).append(u(),j).append(d(),j).append(M(i.filter(e=>e.children.length==0),e=>f(e),{appendNewLineIfNotEmpty:!0})).append(M(i.filter(e=>n(e.parent)),e=>e.children.length>0?m(e):p(e),{appendNewLineIfNotEmpty:!0})).appendIf(a.length>0,j,M(a,e=>h(e),{appendNewLineIfNotEmpty:!0})).append(`@enduml`,j))}function Ut(e){return M(e,e=>O`${D.stringify(e.id)}`,{separator:` | `})}function Wt(e){let t=Array.from(e),n=new A;return n.appendTemplate`
80
+ `.trimStart()}const St=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),J=e=>e.split(/[.-]/).map(St).join(``),Ct=e=>J(e.parent?e.id.slice(e.parent.length+1):e.id),Y=(e,t,n=`#3b82f6`)=>e?t(e)??n:n,wt=({autoLayout:e})=>{switch(e.direction){case`TB`:return`top to bottom`;case`BT`:return console.warn(`Bottom to top direction is not supported. Defaulting to top to bottom.`),`top to bottom`;case`LR`:return`left to right`;case`RL`:return console.warn(`Right to left direction is not supported. Defaulting to left to right.`),`left to right`}},Tt=({shape:e})=>{switch(e){case`queue`:case`rectangle`:case`person`:return e;case`storage`:case`cylinder`:return`database`;case`component`:return`component`;case`document`:case`mobile`:case`bucket`:case`browser`:return`rectangle`;default:O(e)}},X=e=>o(e)?null:JSON.stringify(e).slice(1,-1).replace(/\\"/g,`"`);function Et(e){let t=e.$view,r=e.$model.$styles.theme.colors,{nodes:i,edges:a}=t,s=e=>t=>t in r?r[t].elements[e]:void 0,c=e=>t=>t in r?r[t].relationships[e]:void 0,l=new Map,u=()=>new y().append(`title "`,e.titleOrId,`"`,b).append(wt(t),` direction`,b),d=()=>new y().append(`hide stereotype`,b).append(`skinparam ranksep `,`60`,b).append(`skinparam nodesep `,`30`,b).append(`skinparam {`,b).indent({indentedChildren:e=>e.append(`arrowFontSize `,`10`,b).append(`defaultTextAlignment `,`center`,b).append(`wrapWidth `,`200`,b).append(`maxMessageSize `,`100`,b).append(`shadowing `,`false`,b),indentation:2}).append(`}`,b),f=e=>{let t=Tt(e),n=J(e.id);return new y().append(`skinparam `,t,`<<`,n,`>>`,`{`,b).indent({indentedChildren:t=>t.append(`BackgroundColor `,Y(e.color,s(`fill`)),b).append(`FontColor `,Y(e.color,s(`hiContrast`),`#FFFFFF`),b).append(`BorderColor `,Y(e.color,s(`stroke`)),b),indentation:2}).append(`}`,b)},p=e=>{let t=Tt(e),n=J(e.id),r=X(e.title)||Ct(e),i=X(e.technology);l.set(e.id,n);let a=k.from(e.description);return new y().append(t,` `).append(`"`).append(`==`,r).appendIf(!!i,`\\n<size:10>[`,i,`]</size>`).appendIf(a.nonEmpty,`\\n\\n`,X(a.text)).append(`"`,` <<`,n,`>> `,`as `,n,b)},m=e=>{let t=X(e.title)||Ct(e),n=J(e.id);return l.set(e.id,n),new y().append(`rectangle "`,t,`" <<`,n,`>> as `,n,` {`,b).indent({indentedChildren:t=>t.append(`skinparam `,`RectangleBorderColor<<`,n,`>> `,Y(e.color,s(`fill`)),b).append(`skinparam `,`RectangleFontColor<<`,n,`>> `,Y(e.color,s(`fill`)),b).append(`skinparam `,`RectangleBorderStyle<<`,n,`>> `,`dashed`,b,b).append(x(i.filter(t=>t.parent===e.id),e=>e.children.length>0?m(e):p(e))),indentation:2}).append(`}`,b)},h=e=>{let t=e.technology||``,n=e.label||t,r=Y(e.color,c(`line`),`#777777`),i=e=>`<color:${r}>${e.replaceAll(`"`,`'`)}`,a=new y().append(l.get(e.source),` .[`,r,`,thickness=2].> `,l.get(e.target));return(n||t)&&(a.append(` : `,n.split(`
81
+ `).map(e=>o(e)?e:i(e)).join(`\\n`)),t&&t!==n&&a.append(`\\n<size:8>[`,i(t),`]</size>`)),a.append(b)};return v(new y().append(`@startuml`,b).append(u(),b).append(d(),b).append(x(i.filter(e=>e.children.length==0),e=>f(e),{appendNewLineIfNotEmpty:!0})).append(x(i.filter(e=>n(e.parent)),e=>e.children.length>0?m(e):p(e),{appendNewLineIfNotEmpty:!0})).appendIf(a.length>0,b,x(a,e=>h(e),{appendNewLineIfNotEmpty:!0})).append(`@enduml`,b))}function Dt(e){return x(e,e=>_`${w.stringify(e.id)}`,{separator:` | `})}function Ot(e){let t=Array.from(e),n=new y;return n.appendTemplate`
82
82
  /******************************************************************************
83
83
  * This file was generated
84
84
  * DO NOT EDIT MANUALLY!
@@ -89,10 +89,10 @@ export const likec4model: LikeC4Model<$Aux> = new LikeC4Model(${D.stringify(e.$d
89
89
  // @ts-nocheck
90
90
 
91
91
  import type { DiagramView } from 'likec4'
92
- `.append(j,j),t.length===0?(n.append(`export {}`,j),k(n)):(n.appendTemplate`
93
- export type LikeC4ViewId = ${Ut(t)};
92
+ `.append(b,b),t.length===0?(n.append(`export {}`,b),v(n)):(n.appendTemplate`
93
+ export type LikeC4ViewId = ${Dt(t)};
94
94
  export const LikeC4Views = {
95
- `.indent({indentation:2,indentedChildren(e){e.appendNewLineIf(t.length>1).append(M(t,e=>O`${D.stringify(e.id)}: (${D.stringify(e)} as unknown) as DiagramView`,{separator:`,`,appendNewLineIfNotEmpty:!0}))}}).append(`} as const satisfies Record<LikeC4ViewId, DiagramView>`,j,j).appendTemplate`
95
+ `.indent({indentation:2,indentedChildren(e){e.appendNewLineIf(t.length>1).append(x(t,e=>_`${w.stringify(e.id)}: (${w.stringify(e)} as unknown) as DiagramView`,{separator:`,`,appendNewLineIfNotEmpty:!0}))}}).append(`} as const satisfies Record<LikeC4ViewId, DiagramView>`,b,b).appendTemplate`
96
96
  export type LikeC4Views = typeof LikeC4Views
97
97
 
98
98
  export function isLikeC4ViewId(value: unknown): value is LikeC4ViewId {
@@ -104,7 +104,7 @@ export const likec4model: LikeC4Model<$Aux> = new LikeC4Model(${D.stringify(e.$d
104
104
  }
105
105
 
106
106
  /* prettier-ignore-end */
107
- `.append(j),k(n))}function Gt(e,t={}){let{useCorePackage:n=!1}=t;pe(!e.isParsed(),`can not generate react types for parsed model`);let r=It(e,t);return`
107
+ `.append(b),v(n))}function kt(e,t={}){let{useCorePackage:n=!1}=t;M(!e.isParsed(),`can not generate react types for parsed model`);let r=bt(e,t);return`
108
108
  /* prettier-ignore-start */
109
109
  /* eslint-disable */
110
110
 
@@ -160,9 +160,9 @@ export {
160
160
  ReactLikeC4
161
161
  }
162
162
  /* prettier-ignore-end */
163
- `.trimStart()}function Kt(e){if(e.length===0)return!1;try{return JSON.parse(e),!0}catch{return!1}}function Z(e){if(typeof e!=`string`)throw TypeError(`hardenJsonStringLiteralForEmbeddedScript: expected JSON.stringify(...) output as a string`);if(!Kt(e))throw TypeError(`hardenJsonStringLiteralForEmbeddedScript: expected JSON.stringify(...) output (string, object, array, number, boolean, or null)`);return e.replaceAll(`<`,`\\u003C`).replaceAll(`>`,`\\u003E`).replaceAll(`/`,`\\u002F`).replaceAll(`\u2028`,`\\u2028`).replaceAll(`\u2029`,`\\u2029`)}function Q(e,t=`.js`){return{matches:n=>{let{module:r,projectId:i}=n.match(/^likec4:plugin\/(?<projectId>.+)\/(?<module>.+)$/)?.groups??n.match(/^likec4:(?<module>.+)\/(?<projectId>.+)$/)?.groups??{};return!r||!i?null:(r.endsWith(t)&&(r=r.slice(0,-t.length)),r===e?i:null)},virtualId:n=>N(`likec4:plugin`,n,e)+t}}function $(e,t){return{id:`likec4:${e}`,virtualId:`likec4:plugin/${e}.js`,async load({logger:n,projects:r}){return n.info(E.dim(`generating likec4:${e}`)),`
163
+ `.trimStart()}function At(e){if(e.length===0)return!1;try{return JSON.parse(e),!0}catch{return!1}}function Z(e){if(typeof e!=`string`)throw TypeError(`hardenJsonStringLiteralForEmbeddedScript: expected JSON.stringify(...) output as a string`);if(!At(e))throw TypeError(`hardenJsonStringLiteralForEmbeddedScript: expected JSON.stringify(...) output (string, object, array, number, boolean, or null)`);return e.replaceAll(`<`,`\\u003C`).replaceAll(`>`,`\\u003E`).replaceAll(`/`,`\\u002F`).replaceAll(`\u2028`,`\\u2028`).replaceAll(`\u2029`,`\\u2029`)}function Q(e,t=`.js`){return{matches:n=>{let{module:r,projectId:i}=n.match(/^likec4:plugin\/(?<projectId>.+)\/(?<module>.+)$/)?.groups??n.match(/^likec4:(?<module>.+)\/(?<projectId>.+)$/)?.groups??{};return!r||!i?null:(r.endsWith(t)&&(r=r.slice(0,-t.length)),r===e?i:null)},virtualId:n=>C(`likec4:plugin`,n,e)+t}}function $(e,t){return{id:`likec4:${e}`,virtualId:`likec4:plugin/${e}.js`,async load({logger:n,projects:r}){return n.info(S.dim(`generating likec4:${e}`)),`
164
164
  export let ${t}Fn = {
165
- ${r.map(({id:t})=>`${Z(JSON.stringify(t))}: () => import(${Z(JSON.stringify(N(`likec4:${e}`,t)))})`).join(`,
165
+ ${r.map(({id:t})=>`${Z(JSON.stringify(t))}: () => import(${Z(JSON.stringify(C(`likec4:${e}`,t)))})`).join(`,
166
166
  `)}
167
167
  }
168
168
 
@@ -194,7 +194,7 @@ if (import.meta.hot) {
194
194
  }
195
195
  })
196
196
  }
197
- `}}}function qt(e){let t=new A;return t.appendTemplate`
197
+ `}}}function jt(e){let t=new y;return t.appendTemplate`
198
198
  /******************************************************************************
199
199
  * This file was generated
200
200
  * DO NOT EDIT MANUALLY!
@@ -203,17 +203,17 @@ if (import.meta.hot) {
203
203
 
204
204
  export function d2Source(viewId) {
205
205
  switch (viewId) {
206
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M([...e.views()],e=>O`
206
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
207
207
  case ${JSON.stringify(e.id)}: {
208
- return ${JSON.stringify(De(e))}
208
+ return ${JSON.stringify(ue(e))}
209
209
  }
210
210
  `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
211
211
  default: {
212
212
  throw new Error('Unknown viewId: ' + viewId)
213
213
  }
214
- `}}).append(j,` }`,j).appendTemplate`
214
+ `}}).append(b,` }`,b).appendTemplate`
215
215
  }
216
- `.append(j,j),k(t)}const Jt={...Q(`d2`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:d2/${t.id}`)),qt(await e.computedModel(t.id))}},Yt=$(`d2`,`loadD2Sources`);function Xt(e){let t=new A;return t.appendTemplate`
216
+ `.append(b,b),v(t)}const Mt={...Q(`d2`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:d2/${t.id}`)),jt(await e.computedModel(t.id))}},Nt=$(`d2`,`loadD2Sources`);function Pt(e){let t=new y;return t.appendTemplate`
217
217
  /******************************************************************************
218
218
  * This file was generated
219
219
  * DO NOT EDIT MANUALLY!
@@ -222,7 +222,7 @@ if (import.meta.hot) {
222
222
 
223
223
  export function dotSource(viewId) {
224
224
  switch (viewId) {
225
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M(Object.keys(e),t=>O`
225
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x(Object.keys(e),t=>_`
226
226
  case ${JSON.stringify(t)}: {
227
227
  return ${JSON.stringify(e[t].dot)}
228
228
  }
@@ -230,12 +230,12 @@ if (import.meta.hot) {
230
230
  default: {
231
231
  throw new Error('Unknown viewId: ' + viewId)
232
232
  }
233
- `}}).append(j,` }`,j).appendTemplate`
233
+ `}}).append(b,` }`,b).appendTemplate`
234
234
  }
235
235
 
236
236
  export function svgSource(viewId) {
237
237
  switch (viewId) {
238
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M(Object.keys(e),t=>O`
238
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x(Object.keys(e),t=>_`
239
239
  case ${Z(JSON.stringify(t))}: {
240
240
  return ${Z(JSON.stringify(e[t].svg))}
241
241
  }
@@ -243,7 +243,7 @@ if (import.meta.hot) {
243
243
  default: {
244
244
  throw new Error('Unknown viewId: ' + viewId)
245
245
  }
246
- `}}).append(j,` }`,j,`}`,j,j),k(t)}const Zt={...Q(`dot`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:dot/${t.id}`)),Xt(d(await e.views.viewsAsGraphvizOut(t.id),({id:e,svg:t,dot:n})=>[e,{dot:n,svg:t}]))}},Qt=$(`dot`,`loadDotSources`);function $t(e){let t=new A;return t.appendTemplate`
246
+ `}}).append(b,` }`,b,`}`,b,b),v(t)}const Ft={...Q(`dot`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:dot/${t.id}`)),Pt(d(await e.views.viewsAsGraphvizOut(t.id),({id:e,svg:t,dot:n})=>[e,{dot:n,svg:t}]))}},It=$(`dot`,`loadDotSources`);function Lt(e){let t=new y;return t.appendTemplate`
247
247
  /******************************************************************************
248
248
  * This file was generated
249
249
  * DO NOT EDIT MANUALLY!
@@ -252,17 +252,17 @@ if (import.meta.hot) {
252
252
 
253
253
  export function drawioEditUrl(viewId) {
254
254
  switch (viewId) {
255
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M([...e.views()],e=>O`
255
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
256
256
  case ${JSON.stringify(e.id)}: {
257
- return ${JSON.stringify(Ot(wt(e)))}
257
+ return ${JSON.stringify(pt(lt(e)))}
258
258
  }
259
259
  `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
260
260
  default: {
261
261
  throw new Error('Unknown viewId: ' + viewId)
262
262
  }
263
- `}}).append(j,` }`,j).appendTemplate`
263
+ `}}).append(b,` }`,b).appendTemplate`
264
264
  }
265
- `.append(j,j),k(t)}const en={...Q(`drawio`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:drawio/${t.id}`)),$t(await e.layoutedModel(t.id))}},tn=$(`drawio`,`loadDrawioSources`);function nn(e){let{imports:n,cases:r}=a(e.flatMap(e=>e.nodes.map(e=>e.icon)),c(e=>t(e)&&!(e.toLowerCase().startsWith(`http:`)||e.toLowerCase().startsWith(`https:`))),l(),s(fe)).reduce((e,t,n)=>{let r=t.startsWith(`file:`),i=`Icon`+n.toString().padStart(2,`0`);if(r)return e.imports.push(`import ${i} from '${t}?inline'`),e.cases.push(` '${t}': () => jsx('img', { src: ${i} })`),e;let[a,o]=t.split(`:`);return e.imports.push(`import ${i} from '@likec4/icons/${a}/${o}'`),e.cases.push(` '${a}:${o}': ${i}`),e},{imports:[],cases:[]});return`
265
+ `.append(b,b),v(t)}const Rt={...Q(`drawio`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:drawio/${t.id}`)),Lt(await e.layoutedModel(t.id))}},zt=$(`drawio`,`loadDrawioSources`);function Bt(e){let{imports:n,cases:r}=a(e.flatMap(e=>e.nodes.map(e=>e.icon)),c(e=>t(e)&&!(e.toLowerCase().startsWith(`http:`)||e.toLowerCase().startsWith(`https:`))),l(),s(j)).reduce((e,t,n)=>{let r=t.startsWith(`file:`),i=`Icon`+n.toString().padStart(2,`0`);if(r)return e.imports.push(`import ${i} from '${t}?inline'`),e.cases.push(` '${t}': () => jsx('img', { src: ${i} })`),e;let[a,o]=t.split(`:`);return e.imports.push(`import ${i} from '@likec4/icons/${a}/${o}'`),e.cases.push(` '${a}:${o}': ${i}`),e},{imports:[],cases:[]});return`
266
266
  import { jsx } from 'react/jsx-runtime'
267
267
  ${n.join(`
268
268
  `)}
@@ -278,11 +278,11 @@ export function IconRenderer({ node, ...props }) {
278
278
  }
279
279
  return jsx(IconComponent, props)
280
280
  }
281
- `}const rn={...Q(`icons`,`.jsx`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:icons/${t.id}`)),nn(await e.views.computedViews(t.id))}},an=/^[a-zA-Z0-9_.-]+$/;function on(e){if(!an.test(e))throw Error(`Unsafe value for code generation: ${e}`);return JSON.stringify(e)}function sn(e){return JSON.stringify(e)}const cn={id:`likec4:icons`,virtualId:`likec4:plugin/icons.jsx`,async load({projects:e,logger:t}){return t.info(E.dim(`generating likec4:icons`)),`
281
+ `}const Vt={...Q(`icons`,`.jsx`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:icons/${t.id}`)),Bt(await e.views.computedViews(t.id))}},Ht=/^[a-zA-Z0-9_.-]+$/;function Ut(e){if(!Ht.test(e))throw Error(`Unsafe value for code generation: ${e}`);return JSON.stringify(e)}function Wt(e){return JSON.stringify(e)}const Gt={id:`likec4:icons`,virtualId:`likec4:plugin/icons.jsx`,async load({projects:e,logger:t}){return t.info(S.dim(`generating likec4:icons`)),`
282
282
  import { jsx } from 'react/jsx-runtime'
283
283
  import { lazy, Suspense } from 'react'
284
284
  export let ProjectIconsRegistry = {
285
- ${e.filter(e=>an.test(e.id)?!0:(t.warn(E.yellow(`Skipping project with unsafe id for icons registry: ${e.id}`)),!1)).map(e=>`${Z(on(e.id))}: lazy(() => import(${Z(sn(N(`likec4:icons`,e.id)))}).then(m => ({default: m.IconRenderer})))`).join(`,
285
+ ${e.filter(e=>Ht.test(e.id)?!0:(t.warn(S.yellow(`Skipping project with unsafe id for icons registry: ${e.id}`)),!1)).map(e=>`${Z(Ut(e.id))}: lazy(() => import(${Z(Wt(C(`likec4:icons`,e.id)))}).then(m => ({default: m.IconRenderer})))`).join(`,
286
286
  `)}
287
287
  }
288
288
 
@@ -315,7 +315,7 @@ if (import.meta.hot) {
315
315
  }
316
316
  })
317
317
  }
318
- `}};function ln(e){let t=new A;return t.appendTemplate`
318
+ `}};function Kt(e){let t=new y;return t.appendTemplate`
319
319
  /******************************************************************************
320
320
  * This file was generated
321
321
  * DO NOT EDIT MANUALLY!
@@ -324,21 +324,21 @@ if (import.meta.hot) {
324
324
 
325
325
  export function mmdSource(viewId) {
326
326
  switch (viewId) {
327
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M([...e.views()],e=>O`
327
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
328
328
  case ${Z(JSON.stringify(e.id))}: {
329
- return ${Z(JSON.stringify(Pt(e)))}
329
+ return ${Z(JSON.stringify(vt(e)))}
330
330
  }
331
331
  `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
332
332
  default: {
333
333
  throw new Error('Unknown viewId: ' + viewId)
334
334
  }
335
- `}}).append(j,` }`,j).appendTemplate`
335
+ `}}).append(b,` }`,b).appendTemplate`
336
336
  }
337
337
 
338
- `.append(j,j),k(t)}const un={...Q(`mmd`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating virtual:likec4/mmd/${t.id}`)),ln(await e.computedModel(t.id))}},dn=$(`mmd`,`loadMmdSources`),fn=e=>`
338
+ `.append(b,b),v(t)}const qt={...Q(`mmd`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating virtual:likec4/mmd/${t.id}`)),Kt(await e.computedModel(t.id))}},Jt=$(`mmd`,`loadMmdSources`),Yt=e=>`
339
339
  import { createHooksForModel, atom } from 'likec4/vite-plugin/internal'
340
340
 
341
- export const $likec4data = atom(${D.stringify(e.$data)})
341
+ export const $likec4data = atom(${w.stringify(e.$data)})
342
342
 
343
343
  export const {
344
344
  updateModel,
@@ -361,11 +361,11 @@ if (import.meta.hot) {
361
361
  }
362
362
  })
363
363
  }
364
- `,pn={...Q(`model`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:model/${t.id}`)),fn(await e.layoutedModel(t.id))}},mn=$(`model`,`loadModel`),hn=e=>`
364
+ `,Xt={...Q(`model`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:model/${t.id}`)),Yt(await e.layoutedModel(t.id))}},Zt=$(`model`,`loadModel`),Qt=e=>`
365
365
  import { atom, useStore } from 'likec4/vite-plugin/internal'
366
366
 
367
367
  export const isSingleProject = ${e.length===1};
368
- export const projects = ${D.stringify(e,null,2)};
368
+ export const projects = ${w.stringify(e,null,2)};
369
369
 
370
370
  export const $projects = atom([...projects])
371
371
 
@@ -391,10 +391,10 @@ if (import.meta.hot) {
391
391
  }
392
392
  })
393
393
  }
394
- `,gn={id:`likec4:projects`,virtualId:`likec4:plugin/projects.js`,async load({logger:e,projects:t}){return e.info(E.dim(`generating likec4:projects`)),hn(p(t,e=>({id:e.id,title:e.title,landingPage:e.config.landingPage})))}},_n=e=>`
394
+ `,$t={id:`likec4:projects`,virtualId:`likec4:plugin/projects.js`,async load({logger:e,projects:t}){return e.info(S.dim(`generating likec4:projects`)),Qt(p(t,e=>({id:e.id,title:e.title,landingPage:e.config.landingPage})))}},en=e=>`
395
395
  import { atom, useStore } from 'likec4/vite-plugin/internal'
396
396
 
397
- export const $viewdata = atom(${D.stringify(e)})
397
+ export const $viewdata = atom(${w.stringify(e)})
398
398
 
399
399
  export function useLikeC4ProjectsOverview() {
400
400
  return useStore($viewdata)
@@ -413,11 +413,11 @@ if (import.meta.hot) {
413
413
  }
414
414
  })
415
415
  }
416
- `,vn=()=>`
416
+ `,tn=()=>`
417
417
  export function useLikeC4ProjectsOverview() {
418
418
  throw new Error('No projects overview available for this workspace: single project mode is enabled')
419
419
  }
420
- `,yn={id:`likec4:projects-overview`,virtualId:`likec4:plugin/projects-overview.js`,async load({logger:e,projects:t,likec4:n}){return t.length<2?vn():(e.info(E.dim(`generating likec4:projects-overview`)),_n(await n.projectsOverview()))}};function bn(e){let t=new A;return t.appendTemplate`
420
+ `,nn={id:`likec4:projects-overview`,virtualId:`likec4:plugin/projects-overview.js`,async load({logger:e,projects:t,likec4:n}){return t.length<2?tn():(e.info(S.dim(`generating likec4:projects-overview`)),en(await n.projectsOverview()))}};function rn(e){let t=new y;return t.appendTemplate`
421
421
  /******************************************************************************
422
422
  * This file was generated
423
423
  * DO NOT EDIT MANUALLY!
@@ -426,17 +426,17 @@ export function useLikeC4ProjectsOverview() {
426
426
 
427
427
  export function pumlSource(viewId) {
428
428
  switch (viewId) {
429
- `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(M([...e.views()],e=>O`
429
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
430
430
  case ${Z(JSON.stringify(e.id))}: {
431
- return ${Z(JSON.stringify(Ht(e)))}
431
+ return ${Z(JSON.stringify(Et(e)))}
432
432
  }
433
433
  `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
434
434
  default: {
435
435
  throw new Error('Unknown viewId: ' + viewId)
436
436
  }
437
- `}}).append(j,` }`,j).appendTemplate`
437
+ `}}).append(b,` }`,b).appendTemplate`
438
438
  }
439
- `.append(j,j),k(t)}const xn={...Q(`puml`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:puml/${t.id}`)),bn(await e.computedModel(t.id))}},Sn=$(`puml`,`loadPumlSources`),Cn=e=>`
439
+ `.append(b,b),v(t)}const an={...Q(`puml`),async load({likec4:e,project:t,logger:n}){return n.info(S.dim(`generating likec4:puml/${t.id}`)),rn(await e.computedModel(t.id))}},on=$(`puml`,`loadPumlSources`),sn=e=>`
440
440
  import { jsx as _jsx } from "react/jsx-runtime";
441
441
  import { LikeC4ModelProvider as Provider, LikeC4View as GenericView, ReactLikeC4 as GenericReactLikeC4 } from 'likec4/react';
442
442
  import { IconRenderer } from 'likec4:icons/${e}'
@@ -459,7 +459,7 @@ export {
459
459
  useLikeC4View,
460
460
  useLikeC4Views
461
461
  }
462
- `,wn={...Q(`react`),async load({project:e,logger:t}){return t.info(E.dim(`generating likec4:react/${e.id}`)),Cn(e.id)}},Tn={id:`likec4:react`,virtualId:`likec4:plugin/react.js`,async load({logger:e,projects:t}){let n=i(t);return e.info(E.dim(`generating likec4:react for`)+` `+n.id),Cn(n.id)}},En={id:`likec4:rpc`,virtualId:`likec4:plugin/rpc.js`,async load({logger:e}){return e.info(E.dim(`generating likec4:rpc`)),`
462
+ `,cn={...Q(`react`),async load({project:e,logger:t}){return t.info(S.dim(`generating likec4:react/${e.id}`)),sn(e.id)}},ln={id:`likec4:react`,virtualId:`likec4:plugin/react.js`,async load({logger:e,projects:t}){let n=i(t);return e.info(S.dim(`generating likec4:react for`)+` `+n.id),sn(n.id)}},un={id:`likec4:rpc`,virtualId:`likec4:plugin/rpc.js`,async load({logger:e}){return e.info(S.dim(`generating likec4:rpc`)),`
463
463
  import { createRpc } from 'likec4/vite-plugin/internal'
464
464
 
465
465
  export const isRpcAvailable = !!import.meta.hot
@@ -486,7 +486,7 @@ export const likec4rpc = rpc ?? {
486
486
  throw new Error('likec4rpc.calcAdhocView is not available in production')
487
487
  },
488
488
  }
489
- `}},Dn=e=>`
489
+ `}},dn=e=>`
490
490
  export { IconRenderer } from 'likec4:icons/${e}'
491
491
  export {
492
492
  $likec4data,
@@ -496,4 +496,4 @@ export {
496
496
  useLikeC4View
497
497
  } from 'likec4:model/${e}'
498
498
  export const projectId = ${Z(JSON.stringify(e))}
499
- `,On={id:`likec4:single-project`,virtualId:`likec4:plugin/single-project.js`,async load({logger:e,projects:t}){let n=i(t);return e.info(E.dim(`generating likec4:single-project for`)+` `+n.id),Dn(n.id)}},kn=[pn,rn,Jt,Zt,un,xn,en],An=[...kn,wn],jn=[gn,mn,yn,On,Tn,Yt,Qt,dn,Sn,tn,cn,En];function Mn({environments:e,...t}){let n,i,a=t.watch??!1;return{name:`vite-plugin-likec4`,applyToEnvironment(t){return e?e.includes(t.name):!0},async configResolved(e){if(t.languageServices)n=t.languageServices;else{let r=a=t.watch??e.mode===`development`;n=(await ge(t.workspace??e.root,{graphviz:t.graphviz??`wasm`,configureLogger:`console`,printErrors:t.printErrors??!0,throwIfInvalid:t.throwIfInvalid??!1,watch:r})).languageServices}i=n.workspaceUri.fsPath},resolveId(e){for(let t of An){let n=t.matches(e);if(n)return t.virtualId(n)}for(let t of jn)if(t.id===e)return t.virtualId;return null},async load(e){for(let t of An){let r=t.matches(e);if(r){let e=n.project(r);return await t.load({logger:P,likec4:n,project:e,assetsDir:i})}}for(let t of jn)if(t.virtualId===e){let e=n.projects();return oe(se(e)),await t.load({logger:P,likec4:n,projects:e,assetsDir:i})}return null},configureServer(e){let t=e.hot;xe.call(this,{logger:P,likec4:n,server:e});let i=()=>p(n.projects(),e=>({id:e.id,title:e.title,folder:e.folder.toString(),landingPage:e.config.landingPage})),a=i(),o=async t=>{let n=e.moduleGraph.getModuleById(t);if(n&&n.importers.size>0)try{await e.reloadModule(n)}catch(e){P.error(m(e))}};n.builder.onModelParsed(async()=>{let[e]=n.getErrors();if(e){t.send({type:`error`,err:{name:`LikeC4ValidationError`,...ve(e.message),plugin:`vite-plugin-likec4`,loc:{file:e.sourceFsPath,line:e.line,column:e.range.start.character+1}}});return}let s=i();if(!r(s,a)){a=s,await o(gn.virtualId),await o(cn.virtualId),await o(mn.virtualId),a.length>1&&await o(yn.virtualId);return}for(let e of s)for(let t of kn)await o(t.virtualId(e.id))})},async buildEnd(){a&&await n.dispose()}}}export{Lt as a,wt as c,De as d,ge as f,Ht as i,Tt as l,Gt as n,Pt as o,Wt as r,Dt as s,Mn as t,Ae as u};
499
+ `,fn={id:`likec4:single-project`,virtualId:`likec4:plugin/single-project.js`,async load({logger:e,projects:t}){let n=i(t);return e.info(S.dim(`generating likec4:single-project for`)+` `+n.id),dn(n.id)}},pn=[Xt,Vt,Mt,Ft,qt,an,Rt],mn=[...pn,cn],hn=[$t,Zt,nn,fn,ln,Nt,It,Jt,on,zt,Gt,un];function gn({environments:e,...t}){let n,i,a=t.watch??!1;return{name:`vite-plugin-likec4`,applyToEnvironment(t){return e?e.includes(t.name):!0},async configResolved(e){if(t.languageServices)n=t.languageServices;else{let r=a=t.watch??e.mode===`development`;n=(await g(t.workspace??e.root,{graphviz:t.graphviz??`wasm`,configureLogger:`console`,printErrors:t.printErrors??!0,throwIfInvalid:t.throwIfInvalid??!1,watch:r})).languageServices}i=n.workspaceUri.fsPath},resolveId(e){for(let t of mn){let n=t.matches(e);if(n)return t.virtualId(n)}for(let t of hn)if(t.id===e)return t.virtualId;return null},async load(e){for(let t of mn){let r=t.matches(e);if(r){let e=n.project(r);return await t.load({logger:P,likec4:n,project:e,assetsDir:i})}}for(let t of hn)if(t.virtualId===e){let e=n.projects();return D(ee(e)),await t.load({logger:P,likec4:n,projects:e,assetsDir:i})}return null},configureServer(e){let t=e.hot;ie.call(this,{logger:P,likec4:n,server:e});let i=()=>p(n.projects(),e=>({id:e.id,title:e.title,folder:e.folder.toString(),landingPage:e.config.landingPage})),a=i(),o=async t=>{let n=e.moduleGraph.getModuleById(t);if(n&&n.importers.size>0)try{await e.reloadModule(n)}catch(e){P.error(h(e))}};n.builder.onModelParsed(async()=>{let[e]=n.getErrors();if(e){t.send({type:`error`,err:{name:`LikeC4ValidationError`,...F(e.message),plugin:`vite-plugin-likec4`,loc:{file:e.sourceFsPath,line:e.line,column:e.range.start.character+1}}});return}let s=i();if(!r(s,a)){a=s,await o($t.virtualId),await o(Gt.virtualId),await o(Zt.virtualId),a.length>1&&await o(nn.virtualId);return}for(let e of s)for(let t of pn)await o(t.virtualId(e.id))})},async buildEnd(){a&&await n.dispose()}}}export{xt as a,lt as c,ue as d,Et as i,ut as l,kt as n,vt as o,Ot as r,ft as s,gn as t,he as u};