likec4 1.53.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.
Files changed (41) hide show
  1. package/__app__/src/likec4.js +9 -5
  2. package/__app__/src/routes/index.js +2 -2
  3. package/__app__/src/style.css +1 -1
  4. package/__app__/src/vendors.js +4023 -2281
  5. package/config/schema.json +77 -92
  6. package/dist/THIRD-PARTY-LICENSES.md +3 -69
  7. package/dist/_chunks/index.d.mts +1 -1
  8. package/dist/_chunks/index2.d.mts +10 -20
  9. package/dist/_chunks/libs/@chevrotain/cst-dts-gen.mjs +7 -7
  10. package/dist/_chunks/libs/@hono/mcp.mjs +35 -24
  11. package/dist/_chunks/libs/@hono/node-server.mjs +1 -1
  12. package/dist/_chunks/libs/@logtape/logtape.d.mts +3 -3
  13. package/dist/_chunks/libs/@logtape/logtape.mjs +3 -3
  14. package/dist/_chunks/libs/@modelcontextprotocol/sdk.mjs +8 -8
  15. package/dist/_chunks/libs/@nanostores/react.d.mts +22 -17
  16. package/dist/_chunks/libs/@nanostores/react.mjs +1 -1
  17. package/dist/_chunks/libs/ajv.mjs +1 -1
  18. package/dist/_chunks/libs/atomically.mjs +1 -1
  19. package/dist/_chunks/libs/conf.mjs +1 -1
  20. package/dist/_chunks/libs/defu.mjs +1 -1
  21. package/dist/_chunks/libs/find-up-simple.mjs +1 -1
  22. package/dist/_chunks/libs/p-timeout.mjs +1 -0
  23. package/dist/_chunks/libs/package-manager-detector.mjs +1 -1
  24. package/dist/_chunks/libs/pathe.mjs +1 -1
  25. package/dist/_chunks/libs/picomatch.mjs +1 -1
  26. package/dist/_chunks/libs/tinyrainbow.mjs +1 -1
  27. package/dist/_chunks/libs/zod.d.mts +2091 -0
  28. package/dist/_chunks/node.mjs +76 -1
  29. package/dist/_chunks/src2.mjs +69 -69
  30. package/dist/cli/index.mjs +1228 -97
  31. package/dist/config/index.d.mts +1 -1
  32. package/dist/index.d.mts +1 -1
  33. package/dist/index.mjs +1 -1
  34. package/dist/vite-plugin/index.d.mts +1 -1
  35. package/dist/vite-plugin/index.mjs +1 -1
  36. package/dist/vite-plugin/internal.mjs +1 -1
  37. package/package.json +32 -31
  38. package/react/index.d.mts +6 -0
  39. package/react/index.mjs +55 -37
  40. package/dist/_chunks/filesystem.mjs +0 -1231
  41. package/dist/_chunks/libs/@modelcontextprotocol/sdk.d.mts +0 -8725
@@ -1,52 +1,52 @@
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{_ as m,c as h,d as g,f as _,h as v,i as y,l as b,m as x,o as ee,r as S,s as te,t as C,x as ne}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,memoizeProp as ce,nonexhaustive as le}from"@likec4/core";import{pathToFileURL as ue}from"url";import{RichText as de,flattenMarkdownOrString as fe}from"@likec4/core/types";import{compareNatural as pe,invariant as me,sortNaturalByFqn as he}from"@likec4/core/utils";function ge(e){let t=m.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`}`),S({...n.useFileSystem?{...ee(n.watch),...n.manualLayouts?b:h}:{...te,...h},...y(r?new g:new _)})}async function _e(e,t){let n=T(e),r=ue(n).toString(),i=r.endsWith(`/`)?r:r+`/`;return ce(globalThis,`likec4:`+n,async()=>{let e=m.getChild(`lang`),r=w(t,{...v,useFileSystem:!0,manualLayouts:!0,watch:!1});if(C(r),r.mcp)throw Error(`MCP server is not supported in this build`);let a=ge(r),o={name:re(n),uri:i},s=a.shared.workspace.WorkspaceManager;e.info(`${E.dim(`workspace:`)} ${n}`),s.initialize({capabilities:{},processId:null,rootUri:null,workspaceFolders:[o]}),await s.initializeWorkspace([o]);let c=a.shared.workspace.LangiumDocuments.userDocuments.toArray();if(c.length===0)throw e.error(`no LikeC4 sources found`),Error(`no LikeC4 sources found`);return e.info(`${E.dim(`workspace:`)} found ${c.length} source files`),x(a,m,t)})}const P=m.getChild(`vite`);async function ve({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 ye(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 be(e,{name:t,error:n}){e.hot.send({type:`error`,err:{...ye(n),name:t??`LikeC4PluginError`,plugin:`vite-plugin-likec4`}})}async function xe({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 Se(t){let n=null,r=t.server;e({updateView:e=>xe(t,e),calcAdhocView:e=>ve(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,be(r,{name:e.name,error:a}))}catch(e){t.logger.error(`Failed to send error to client`,{error:e})}}})}const Ce=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),we=e=>e.split(`.`).map(Ce).join(``),Te=e=>we(e.parent?e.id.slice(e.parent.length+1):e.id),Ee=({autoLayout:e})=>{switch(e.direction){case`TB`:return`down`;case`BT`:return`up`;case`LR`:return`right`;case`RL`:return`left`}},De=({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 Oe(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=Te(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=JSON.stringify(e.title),c=De(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: `,Ee(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 ke=`data:page/id,likec4-`,F=1e4,I=`#dae8fc`,Ae=`#2563eb`,L=`#1e40af`,je=`diagrams.drawio`,Me=`#74c0fc`;function R(e){return e.replaceAll(`&`,`&amp;`).replaceAll(`<`,`&lt;`).replaceAll(`>`,`&gt;`).replaceAll(`"`,`&quot;`).replaceAll(`'`,`&apos;`)}function Ne(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 Pe(e){let t=encodeURIComponent(e),n=new TextEncoder().encode(t);return Fe(ie.deflateRaw(n))}function Fe(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 Ie(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 Le(e,t){return e&&t!==`none`||t===`dashed`?`dashed=1;`:``}function Re(e,t){return e===`none`?`0`:t||e?`1`:``}function ze(e,t){return{fill:e?.fill??I,stroke:t,font:e?.font??t}}function Be(e,t,n){return t&&t in e.theme.colors?t:n}function U(e,t,n){let r=Ie(e),i=Be(r,t??n,n);try{return r.colors(i)}catch{return ae.DEFAULT.colors(n)}}function Ve(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 He(e,t){let n=U(e,t,`primary`).elements;return{fill:String(n.fill??I),stroke:String(n.stroke??Ae),font:String(n.hiContrast??n.stroke??L)}}function Ue(e,t){let n=U(e,t??`gray`,`gray`);return String(n.relationships?.line??L)}function We(e,t){let n=U(e,t??`gray`,`gray`).relationships;return{font:String(n?.label??n?.line??L),background:String(n?.labelBg??`#ffffff`)}}function Ge(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 Ke(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 qe(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 Je(e,t,n){n!=null&&e.push(`${t}=${n}`)}function Ye(e){return e===``?``:`link=${encodeURIComponent(`${ke}${e}`)};`}function G(e){let t=e==null?null:fe(e);return t!=null&&!o(t)?t.trim():``}function Xe(e){return!Array.isArray(e)||e.length===0?``:encodeURIComponent(JSON.stringify(e.map(e=>({url:e.url,title:e.title}))))}function Ze(e){return typeof e!=`object`||!e||Array.isArray(e)||Object.keys(e).length===0?``:encodeURIComponent(JSON.stringify(e))}const Qe=/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/;function $e(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),Je(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&&Qe.test(e.strokeHex)&&W(t,`likec4StrokeColor`,e.strokeHex),W(t,`likec4Notation`,e.nodeNotation??void 0),t.length>0?t.join(`;`)+`;`:``}function et(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 tt(e,t){return t?.profile===`leanix`?`bridgeManaged=true;likec4RelationId=${encodeURIComponent(e)};`:``}function nt(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 rt(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 it(e){return e.label?R(e.label):``}function at(e,t){let n=t?.[`${e.source}|${e.target}|${e.id}`]??t?.[`${e.source}|${e.target}`],r=Array.isArray(n)?n.flatMap(Ke):[];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 ot(e,t,n,r,i){let{bboxes:a,fontFamily:o}=t,s=a.get(e.source),c=a.get(e.target),l=s&&c?Ge(s,c):{exitX:1,exitY:.5,entryX:0,entryY:.5},u=`exitX=${l.exitX};exitY=${l.exitY};entryX=${l.entryX};entryY=${l.entryY};`,d=Ue(n,e.color),f=e.line===`dashed`?`dashed=1;`:e.line===`dotted`?`dashed=1;dashPattern=1 1;`:``,p=_t(e.head),m=e.tail==null||e.tail===`none`?`none`:_t(e.tail),h=rt({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:Xe(B.getLinks(e)),edgeMetadataJson:Ze(B.getMetadata(e))}),g=tt(e.id,i),_=We(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 st(e,t,n,r,i,a){let{defaultParentId:o}=t,s=i(e.source),c=i(e.target),l=it(e),u=at(e,n?.edgeWaypoints);return`<mxCell id="${a}" value="${l}" style="${ot(e,t,r,l,n)}" edge="1" parent="${o}" source="${s}" target="${c}">
7
- ${u}${nt(B.getCustomData(e))}
8
- </mxCell>`}function ct(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 lt(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;`:Ve(e.shape),S=l?.[e.id],te=u?.[e.id],C=S?ze(He(r,e.color),S):He(r,e.color),ne=C?.fill??I,w=C?.stroke??Ae,T=C?.font??C?.stroke??L,re=`fillColor=${ne};strokeColor=${w};fontColor=${T};`,E=e.style,D=a.fontSize(E?.textSize),O=R(qe(p,m,d,T,o,D)),k=E?.border,A=te??Re(k,d),j=A===``?``:`strokeWidth=${A};`,M=Le(d,k),N=d===!0?E?.opacity??15:void 0,ie=N!=null&&d===!0?`fillOpacity=${Math.min(100,Math.max(0,N))};`:``,ae=$e({desc:m,tech:h,notes:g,tagList:v,navTo:y,iconName:b,summaryStr:G(z.getSummary(e)),linksJson:Xe(z.getLinks(e)),borderVal:k,containerOpacityNum:N,strokeWidth:A,colorNameForRoundtrip:e.color?encodeURIComponent(String(e.color)):``,nodeStyle:E,strokeHex:w,nodeNotation:z.getNotation(e)})+et(e.id,f,t.view.id,n),oe=nt(z.getCustomData(e)),se=Ye(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 ut(e,t,n,r,i,a){let o=ct(e,t,i),s=lt(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 dt(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="${ke}${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:ft(e.title??``,e.titleCellId??e.id,e.navTo,e.id,e.fontFamily,e.containerTitleFontSizePx??12,e.containerTitleColor??Me),isContainer:!0}:{vertexXml:i,isContainer:!1}}function ft(e,t,n,r,i,a,o){let s=R(e),c=Math.max(60,Math.min(260,e.length*8)),l=Ye(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="${ke}${R(n)}" id="${t}">\n ${d}\n</UserObject>`}function pt(e){return typeof e.title==`string`?e.title:null}function mt(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 ht(e,t){let n=[`bridgeManaged=true;`,`likec4ViewId=${encodeURIComponent(e.id)};`];return t.projectId!=null&&t.projectId!==``&&n.push(`likec4ProjectId=${encodeURIComponent(t.projectId)};`),n}function gt(e,t){let n=pt(e),r=mt(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(...ht(e,t)),c.join(``)}function _t(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 vt(e){return e.x===K.x&&e.y===K.y&&e.width===K.width&&e.height===K.height}function yt(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&&vt(r)&&t.forEach((t,n)=>{e.set(t.id,{...r,x:r.x,y:r.y+n*(r.height+24)})})}}function bt(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||!vt(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 xt(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 St(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));yt(c,o,u);let d=Ie(e),f=d.theme.spacing.xl;bt(c,u,o,l,f,d.theme.spacing.xl+d.theme.spacing.md);let{offsetX:p,offsetY:m,canvasWidth:h,canvasHeight:g}=xt(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:Me,nodeIdsInView:l}}function Ct(e,t){let n=e.$view,{edges:r}=n,i=t?.compressed!==!1,a=St(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=dt(ut(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(st(n,a,t,e,p,r))}let v=[`<mxCell id="${s}" value="" style="${gt(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=(pt(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?Pe(b):b;return{name:y,id:n.id,content:x}}function wt(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 Tt(e,t){return wt([Ct(e,t)],t?.modified)}function Et(e,t,n){return wt(e.map(e=>Ct(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 Ot(e,t,n){let r=t?Ne(t):null;return Object.fromEntries(e.map(e=>[e,Dt(e,r,n)]))}function kt(e){let t=Pe(e),n=JSON.stringify({type:`xml`,compressed:!0,data:t});return`https://app.diagrams.net/#create=`+encodeURIComponent(n)}const At=e=>e.charAt(0).toLocaleUpperCase()+e.slice(1),jt=e=>e.split(`.`).map(At).join(``),Mt=e=>jt(e.parent?e.id.slice(e.parent.length+1):e.id),q=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:le(e)}};function Pt(e){let t=e.$view,{nodes:r,edges:i}=t,a=new Map,o=(e,t)=>{let n=Mt(e),i=(t?t+`.`:``)+n;a.set(e.id,i);let s=new A;if(e.children.length>0){let t=q(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?' "`'+q(e.label)+'`" .-':`-`,`> `,a.get(e.target));return k(new A().append(`---`,j,`title: ${JSON.stringify(q(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 J(e){return e.length===0?`never`:e.sort(pe).map(e=>` | ${JSON.stringify(e)}`).join(`
25
- `).trimStart()}function Ft(e){let t=u(e);return t.length===0?`never`:a(t,he,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<
30
30
  // Element kinds
31
- ${J(f(e.specification.elements))},
31
+ ${q(f(e.specification.elements))},
32
32
  // Deployment kinds
33
- ${J(f(e.specification.deployments??{}))},
33
+ ${q(f(e.specification.deployments??{}))},
34
34
  // Relationship kinds
35
- ${J(f(e.specification.relationships??{}))},
35
+ ${q(f(e.specification.relationships??{}))},
36
36
  // Tags
37
- ${J(f(e.specification.tags??{}))},
37
+ ${q(f(e.specification.tags??{}))},
38
38
  // Metadata keys
39
- ${J(e.specification.metadataKeys??[])}
39
+ ${q(e.specification.metadataKeys??[])}
40
40
  >
41
41
 
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
- ${J(f(e.$data.views))},
49
+ ${q(f(e.$data.views))},
50
50
  // Project ID
51
51
  ${JSON.stringify(e.projectId)},
52
52
  $Specs
@@ -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),Y=e=>e.split(/[.-]/).map(Rt).join(``),zt=e=>Y(e.parent?e.id.slice(e.parent.length+1):e.id),X=(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:le(e)}},Z=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=Y(e.id);return new A().append(`skinparam `,t,`<<`,n,`>>`,`{`,j).indent({indentedChildren:t=>t.append(`BackgroundColor `,X(e.color,s(`fill`)),j).append(`FontColor `,X(e.color,s(`hiContrast`),`#FFFFFF`),j).append(`BorderColor `,X(e.color,s(`stroke`)),j),indentation:2}).append(`}`,j)},p=e=>{let t=Vt(e),n=Y(e.id),r=Z(e.title)||zt(e),i=Z(e.technology);l.set(e.id,n);let a=de.from(e.description);return new A().append(t,` `).append(`"`).append(`==`,r).appendIf(!!i,`\\n<size:10>[`,i,`]</size>`).appendIf(a.nonEmpty,`\\n\\n`,Z(a.text)).append(`"`,` <<`,n,`>> `,`as `,n,j)},m=e=>{let t=Z(e.title)||zt(e),n=Y(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,`>> `,X(e.color,s(`fill`)),j).append(`skinparam `,`RectangleFontColor<<`,n,`>> `,X(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=X(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;me(!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 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}}const Kt={"<":`\\u003C`,">":`\\u003E`,"/":`\\u002F`,"\\":`\\\\`,"\b":`\\b`,"\f":`\\f`,"\n":`\\n`,"\r":`\\r`," ":`\\t`,"\0":`\\0`,"\u2028":`\\u2028`,"\u2029":`\\u2029`};function qt(e){return e.replace(/[<>\b\f\n\r\t\0\u2028\u2029\\]/g,e=>Kt[e])}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})=>{let n=qt(JSON.stringify(N(`likec4:${e}`,t)));return`${JSON.stringify(t)}: () => import(${n})`}).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 Jt(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(Oe(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 Yt={...Q(`d2`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:d2/${t.id}`)),Jt(await e.computedModel(t.id))}},Xt=$(`d2`,`loadD2Sources`);function Zt(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,20 +230,20 @@ 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`
239
- case ${JSON.stringify(t)}: {
240
- return ${JSON.stringify(e[t].svg)}
238
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x(Object.keys(e),t=>_`
239
+ case ${Z(JSON.stringify(t))}: {
240
+ return ${Z(JSON.stringify(e[t].svg))}
241
241
  }
242
242
  `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
243
243
  default: {
244
244
  throw new Error('Unknown viewId: ' + viewId)
245
245
  }
246
- `}}).append(j,` }`,j,`}`,j,j),k(t)}const Qt={...Q(`dot`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:dot/${t.id}`)),Zt(d(await e.views.viewsAsGraphvizOut(t.id),({id:e,svg:t,dot:n})=>[e,{dot:n,svg:t}]))}},$t=$(`dot`,`loadDotSources`);function en(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(kt(Tt(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 tn={...Q(`drawio`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:drawio/${t.id}`)),en(await e.layoutedModel(t.id))}},nn=$(`drawio`,`loadDrawioSources`);function rn(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(pe)).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 an={...Q(`icons`,`.jsx`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:icons/${t.id}`)),rn(await e.views.computedViews(t.id))}},on=/^[a-zA-Z0-9_.-]+$/;function sn(e){if(!on.test(e))throw Error(`Unsafe value for code generation: ${e}`);return JSON.stringify(e)}function cn(e){return JSON.stringify(e)}const ln={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=>on.test(e.id)?!0:(t.warn(E.yellow(`Skipping project with unsafe id for icons registry: ${e.id}`)),!1)).map(e=>({idLiteral:sn(e.id),pkgLiteral:cn(N(`likec4:icons`,e.id))})).map(({idLiteral:e,pkgLiteral:t})=>`${e}: lazy(() => import(${t}).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 un(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`
328
- case ${JSON.stringify(e.id)}: {
329
- return ${JSON.stringify(Pt(e))}
327
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
328
+ case ${Z(JSON.stringify(e.id))}: {
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 dn={...Q(`mmd`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating virtual:likec4/mmd/${t.id}`)),un(await e.computedModel(t.id))}},fn=$(`mmd`,`loadMmdSources`),pn=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
- `,mn={...Q(`model`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:model/${t.id}`)),pn(await e.layoutedModel(t.id))}},hn=$(`model`,`loadModel`),gn=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
- `,_n={id:`likec4:projects`,virtualId:`likec4:plugin/projects.js`,async load({logger:e,projects:t}){return e.info(E.dim(`generating likec4:projects`)),gn(p(t,e=>({id:e.id,title:e.title,landingPage:e.config.landingPage})))}},vn=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
- `,yn=()=>`
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
- `,bn={id:`likec4:projects-overview`,virtualId:`likec4:plugin/projects-overview.js`,async load({logger:e,projects:t,likec4:n}){return t.length<2?yn():(e.info(E.dim(`generating likec4:projects-overview`)),vn(await n.projectsOverview()))}};function xn(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`
430
- case ${JSON.stringify(e.id)}: {
431
- return ${JSON.stringify(Ht(e))}
429
+ `.appendNewLine().indent({indentation:4,indentedChildren(t){t.append(x([...e.views()],e=>_`
430
+ case ${Z(JSON.stringify(e.id))}: {
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 Sn={...Q(`puml`),async load({likec4:e,project:t,logger:n}){return n.info(E.dim(`generating likec4:puml/${t.id}`)),xn(await e.computedModel(t.id))}},Cn=$(`puml`,`loadPumlSources`),wn=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
- `,Tn={...Q(`react`),async load({project:e,logger:t}){return t.info(E.dim(`generating likec4:react/${e.id}`)),wn(e.id)}},En={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),wn(n.id)}},Dn={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
- `}},On=e=>`
489
+ `}},dn=e=>`
490
490
  export { IconRenderer } from 'likec4:icons/${e}'
491
491
  export {
492
492
  $likec4data,
@@ -495,5 +495,5 @@ export {
495
495
  useLikeC4Views,
496
496
  useLikeC4View
497
497
  } from 'likec4:model/${e}'
498
- export const projectId = ${JSON.stringify(e)}
499
- `,kn={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),On(n.id)}},An=[mn,an,Yt,Qt,dn,Sn,tn],jn=[...An,Tn],Mn=[_n,hn,bn,kn,En,Xt,$t,fn,Cn,nn,ln,Dn];function Nn({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 _e(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 jn){let n=t.matches(e);if(n)return t.virtualId(n)}for(let t of Mn)if(t.id===e)return t.virtualId;return null},async load(e){for(let t of jn){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 Mn)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;Se.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(ne(e))}};n.builder.onModelParsed(async()=>{let[e]=n.getErrors();if(e){t.send({type:`error`,err:{name:`LikeC4ValidationError`,...ye(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(_n.virtualId),await o(ln.virtualId),await o(hn.virtualId),a.length>1&&await o(bn.virtualId);return}for(let e of s)for(let t of An)await o(t.virtualId(e.id))})},async buildEnd(){a&&await n.dispose()}}}export{Lt as a,Tt as c,Oe as d,_e as f,Ht as i,Et as l,Gt as n,Pt as o,Wt as r,Ot as s,Nn as t,je as u};
498
+ export const projectId = ${Z(JSON.stringify(e))}
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};