likec4 1.34.2 → 1.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { LikeC4Model } from '@likec4/core/model';
2
2
  import { UnknownLayouted } from './model/index.mjs';
3
- import { W as WorkspaceFolder, a as LikeC4Services, L as LikeC4LanguageServices, b as LikeC4Views, R as Range } from './shared/likec4.C6HFkgux.mjs';
3
+ import { W as WorkspaceFolder, a as LikeC4Services, L as LikeC4LanguageServices, b as LikeC4Views, R as Range } from './shared/likec4.CoVNuZKl.mjs';
4
4
  import { ProjectId, NonEmptyArray } from '@likec4/core';
5
5
  import { DiagramView } from '@likec4/core/types';
6
6
  export * from '@likec4/core/types';
7
7
  import 'type-fest';
8
- import '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.0/node_modules/@types/picomatch/posix.d.ts';
8
+ import '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/posix.d.ts';
9
9
  import '@likec4/core/utils';
10
10
 
11
11
  type Logger = {
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{LikeC4Model as o}from"@likec4/core/model";export{L as LikeC4}from"./shared/likec4.B5b4pT-B.mjs";import"node:fs";import"node:path";import"node:url";import"./shared/likec4.BeWJWU7_.mjs";import"tty";import"node:util";import"util";import"path";import"os";import"crypto";import"net";import"url";import"fs";import"child_process";import"@likec4/core";import"@likec4/core/types";import"events";import"@hpcc-js/wasm-graphviz";import"buffer";import"@likec4/core/compute-view";import"@likec4/core/utils";
1
+ import{LikeC4Model as o}from"@likec4/core/model";export{L as LikeC4}from"./shared/likec4.DWIqzE5d.mjs";import"node:fs";import"node:path";import"node:url";import"./shared/likec4.BeWJWU7_.mjs";import"tty";import"node:util";import"util";import"path";import"os";import"crypto";import"net";import"url";import"fs";import"child_process";import"@likec4/core";import"@likec4/core/types";import"events";import"@hpcc-js/wasm-graphviz";import"buffer";import"@likec4/core/compute-view";import"@likec4/core/utils";
2
2
  import"node:process";import"boxen";import"node:child_process";import"node:events";import"node:fs/promises";import"node:stream/promises";import"node:readline/promises";import"node:os";import"fs/promises";function t(r){return o.create(r)}export{t as createLikeC4Model};
@@ -2,7 +2,7 @@ import { Tagged, ValueOf, ConditionalPick, Writable, Simplify, MergeExclusive }
2
2
  import * as c4 from '@likec4/core';
3
3
  import { Fqn, EdgeId, AnyAux, aux, ComputedView, Specification, DiagramView, MultiMap as MultiMap$1, ProjectId, NonEmptyArray, NonEmptyReadonlyArray, ViewId, RelationId, DeploymentFqn, ViewChange } from '@likec4/core';
4
4
  import { LikeC4Model } from '@likec4/core/model';
5
- import picomatch from '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.0/node_modules/@types/picomatch/posix.d.ts';
5
+ import picomatch from '/home/runner/work/likec4/likec4/node_modules/.pnpm/@types+picomatch@4.0.2/node_modules/@types/picomatch/posix.d.ts';
6
6
  import { ProjectId as ProjectId$1, Fqn as Fqn$1 } from '@likec4/core/types';
7
7
  import { DefaultWeakMap, MultiMap as MultiMap$2 } from '@likec4/core/utils';
8
8
 
@@ -15717,13 +15717,14 @@ declare function readonly<TInput>(): ReadonlyAction<TInput>;
15717
15717
 
15718
15718
  declare const ProjectConfig: ObjectSchema<{
15719
15719
  readonly name: SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Project name cannot be empty">, ExcludesAction<string, "default", "Project name cannot be \"default\"">, ExcludesAction<string, ".", "Project name cannot contain \".\", try to use A-z, 0-9, _ and -">, ExcludesAction<string, "@", "Project name cannot contain \"@\", try to use A-z, 0-9, _ and -">, ExcludesAction<string, "#", "Project name cannot contain \"#\", try to use A-z, 0-9, _ and -">, DescriptionAction<string, "Project name, must be unique in the workspace">]>;
15720
+ readonly title: OptionalSchema<SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Project title cannot be empty if specified">, DescriptionAction<string, "A human readable title for the project">]>, undefined>;
15720
15721
  readonly contactPerson: OptionalSchema<SchemaWithPipe<readonly [StringSchema<undefined>, NonEmptyAction<string, "Contact person cannot be empty if specified">, DescriptionAction<string, "A person who has been involved in creating or maintaining this project">]>, undefined>;
15721
15722
  readonly exclude: OptionalSchema<SchemaWithPipe<readonly [ArraySchema<StringSchema<undefined>, undefined>, DescriptionAction<string[], "List of file patterns to exclude from the project, default is [\"**/node_modules/**/*\"]">]>, undefined>;
15722
15723
  }, undefined>;
15723
15724
  type ProjectConfig = InferOutput<typeof ProjectConfig>;
15724
15725
 
15725
15726
  /******************************************************************************
15726
- * This file was generated by langium-cli 3.5.0.
15727
+ * This file was generated by langium-cli 3.5.2.
15727
15728
  * DO NOT EDIT MANUALLY!
15728
15729
  ******************************************************************************/
15729
15730
 
@@ -16262,7 +16263,7 @@ interface LineProperty extends AstNode {
16262
16263
  }
16263
16264
  declare const LineProperty = "LineProperty";
16264
16265
  interface LinkProperty extends AstNode {
16265
- readonly $container: DeployedInstanceBody | DeploymentNodeBody | DeploymentRelationBody | DeploymentViewBody | DynamicViewBody | ElementBody | ElementViewBody | ExtendDeploymentBody | ExtendElementBody | RelationBody;
16266
+ readonly $container: DeployedInstanceBody | DeploymentNodeBody | DeploymentRelationBody | DeploymentViewBody | DynamicViewBody | ElementBody | ElementViewBody | ExtendDeploymentBody | ExtendElementBody | RelationBody | SpecificationDeploymentNodeKind | SpecificationElementKind;
16266
16267
  readonly $type: 'LinkProperty';
16267
16268
  key: 'link';
16268
16269
  title?: string;
@@ -16270,7 +16271,7 @@ interface LinkProperty extends AstNode {
16270
16271
  }
16271
16272
  declare const LinkProperty = "LinkProperty";
16272
16273
  interface MarkdownOrString extends AstNode {
16273
- readonly $container: ElementStringProperty | MetadataAttribute | NotationProperty | NotesProperty | RelationStringProperty | SpecificationRelationshipStringProperty | ViewStringProperty;
16274
+ readonly $container: ElementStringProperty | MetadataAttribute | NotationProperty | NotesProperty | RelationStringProperty | SpecificationElementStringProperty | SpecificationRelationshipStringProperty | ViewStringProperty;
16274
16275
  readonly $type: 'MarkdownOrString';
16275
16276
  markdown?: string;
16276
16277
  text?: string;
@@ -16306,6 +16307,7 @@ declare const ModelDeployments = "ModelDeployments";
16306
16307
  interface ModelViews extends AstNode {
16307
16308
  readonly $container: LikeC4Grammar;
16308
16309
  readonly $type: 'ModelViews';
16310
+ folder?: string;
16309
16311
  name: 'views';
16310
16312
  styles: Array<ViewRuleStyleOrGlobalRef>;
16311
16313
  views: Array<LikeC4View>;
@@ -16464,7 +16466,7 @@ interface SpecificationDeploymentNodeKind extends AstNode {
16464
16466
  readonly $container: SpecificationRule;
16465
16467
  readonly $type: 'SpecificationDeploymentNodeKind';
16466
16468
  kind: DeploymentNodeKind;
16467
- props: Array<ElementStyleProperty | SpecificationElementStringProperty>;
16469
+ props: Array<ElementStyleProperty | LinkProperty | SpecificationElementStringProperty>;
16468
16470
  tags?: Tags;
16469
16471
  }
16470
16472
  declare const SpecificationDeploymentNodeKind = "SpecificationDeploymentNodeKind";
@@ -16472,15 +16474,15 @@ interface SpecificationElementKind extends AstNode {
16472
16474
  readonly $container: SpecificationRule;
16473
16475
  readonly $type: 'SpecificationElementKind';
16474
16476
  kind: ElementKind;
16475
- props: Array<ElementStyleProperty | SpecificationElementStringProperty>;
16477
+ props: Array<ElementStyleProperty | LinkProperty | SpecificationElementStringProperty>;
16476
16478
  tags?: Tags;
16477
16479
  }
16478
16480
  declare const SpecificationElementKind = "SpecificationElementKind";
16479
16481
  interface SpecificationElementStringProperty extends AstNode {
16480
16482
  readonly $container: SpecificationDeploymentNodeKind | SpecificationElementKind;
16481
16483
  readonly $type: 'SpecificationElementStringProperty';
16482
- key: 'notation' | 'technology';
16483
- value: string;
16484
+ key: 'description' | 'notation' | 'technology' | 'title';
16485
+ value: MarkdownOrString;
16484
16486
  }
16485
16487
  declare const SpecificationElementStringProperty = "SpecificationElementStringProperty";
16486
16488
  interface SpecificationRelationshipKind extends AstNode {
@@ -17388,7 +17390,7 @@ declare const DocumentParserFromMixins: {
17388
17390
  isValid: IsValidFn;
17389
17391
  readonly services: LikeC4Services;
17390
17392
  readonly doc: ParsedLikeC4LangiumDocument;
17391
- readonly project: {
17393
+ get project(): {
17392
17394
  id: ProjectId;
17393
17395
  folder: ProjectId;
17394
17396
  config: Readonly<ProjectConfig>;
@@ -17481,7 +17483,7 @@ declare const DocumentParserFromMixins: {
17481
17483
  isValid: IsValidFn;
17482
17484
  readonly services: LikeC4Services;
17483
17485
  readonly doc: ParsedLikeC4LangiumDocument;
17484
- readonly project: {
17486
+ get project(): {
17485
17487
  id: ProjectId;
17486
17488
  folder: ProjectId;
17487
17489
  config: Readonly<ProjectConfig>;
@@ -17536,7 +17538,7 @@ declare const DocumentParserFromMixins: {
17536
17538
  isValid: IsValidFn;
17537
17539
  readonly services: LikeC4Services;
17538
17540
  readonly doc: ParsedLikeC4LangiumDocument;
17539
- readonly project: {
17541
+ get project(): {
17540
17542
  id: ProjectId;
17541
17543
  folder: ProjectId;
17542
17544
  config: Readonly<ProjectConfig>;
@@ -17605,7 +17607,7 @@ declare const DocumentParserFromMixins: {
17605
17607
  isValid: IsValidFn;
17606
17608
  readonly services: LikeC4Services;
17607
17609
  readonly doc: ParsedLikeC4LangiumDocument;
17608
- readonly project: {
17610
+ get project(): {
17609
17611
  id: ProjectId;
17610
17612
  folder: ProjectId;
17611
17613
  config: Readonly<ProjectConfig>;
@@ -17667,7 +17669,7 @@ declare const DocumentParserFromMixins: {
17667
17669
  isValid: IsValidFn;
17668
17670
  readonly services: LikeC4Services;
17669
17671
  readonly doc: ParsedLikeC4LangiumDocument;
17670
- readonly project: {
17672
+ get project(): {
17671
17673
  id: ProjectId;
17672
17674
  folder: ProjectId;
17673
17675
  config: Readonly<ProjectConfig>;
@@ -17737,7 +17739,7 @@ declare const DocumentParserFromMixins: {
17737
17739
  isValid: IsValidFn;
17738
17740
  readonly services: LikeC4Services;
17739
17741
  readonly doc: ParsedLikeC4LangiumDocument;
17740
- readonly project: {
17742
+ get project(): {
17741
17743
  id: ProjectId;
17742
17744
  folder: ProjectId;
17743
17745
  config: Readonly<ProjectConfig>;
@@ -17800,7 +17802,7 @@ declare const DocumentParserFromMixins: {
17800
17802
  isValid: IsValidFn;
17801
17803
  readonly services: LikeC4Services;
17802
17804
  readonly doc: ParsedLikeC4LangiumDocument;
17803
- readonly project: {
17805
+ get project(): {
17804
17806
  id: ProjectId;
17805
17807
  folder: ProjectId;
17806
17808
  config: Readonly<ProjectConfig>;
@@ -17843,7 +17845,7 @@ declare const DocumentParserFromMixins: {
17843
17845
  isValid: IsValidFn;
17844
17846
  readonly services: LikeC4Services;
17845
17847
  readonly doc: ParsedLikeC4LangiumDocument;
17846
- readonly project: {
17848
+ get project(): {
17847
17849
  id: ProjectId;
17848
17850
  folder: ProjectId;
17849
17851
  config: Readonly<ProjectConfig>;
@@ -17901,7 +17903,7 @@ declare const DocumentParserFromMixins: {
17901
17903
  isValid: IsValidFn;
17902
17904
  readonly services: LikeC4Services;
17903
17905
  readonly doc: ParsedLikeC4LangiumDocument;
17904
- readonly project: {
17906
+ get project(): {
17905
17907
  id: ProjectId;
17906
17908
  folder: ProjectId;
17907
17909
  config: Readonly<ProjectConfig>;
@@ -18008,21 +18010,42 @@ declare namespace ChangeView {
18008
18010
  }
18009
18011
 
18010
18012
  type GraphvizOut = {
18011
- dot: string;
18012
- diagram: DiagramView;
18013
+ readonly dot: string;
18014
+ readonly diagram: DiagramView;
18013
18015
  };
18014
18016
  type GraphvizSvgOut = {
18015
- id: ViewId;
18016
- dot: string;
18017
- svg: string;
18017
+ readonly id: ViewId;
18018
+ readonly dot: string;
18019
+ readonly svg: string;
18018
18020
  };
18019
18021
  interface LikeC4Views {
18020
18022
  readonly layouter: GraphvizLayouter;
18023
+ /**
18024
+ * Returns computed views (i.e. views with predicates computed)
18025
+ */
18021
18026
  computedViews(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<ComputedView[]>;
18022
- layoutAllViews(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<Array<Readonly<GraphvizOut>>>;
18027
+ /**
18028
+ * Returns all layouted views (i.e. views with layout computed)
18029
+ * Result includes dot and diagram
18030
+ */
18031
+ layoutAllViews(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<GraphvizOut[]>;
18032
+ /**
18033
+ * Returns layouted view (i.e. view with layout computed)
18034
+ * Result includes dot and diagram
18035
+ */
18023
18036
  layoutView(viewId: ViewId, projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<GraphvizOut | null>;
18037
+ /**
18038
+ * Returns diagrams (i.e. views with layout computed)
18039
+ */
18024
18040
  diagrams(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<Array<DiagramView>>;
18041
+ /**
18042
+ * Returns all layouted views as Graphviz output (i.e. views with layout computed)
18043
+ */
18025
18044
  viewsAsGraphvizOut(projectId?: ProjectId | undefined, cancelToken?: CancellationToken): Promise<Array<GraphvizSvgOut>>;
18045
+ /**
18046
+ * Open view in the preview panel.
18047
+ * (works only if running as a vscode extension)
18048
+ */
18026
18049
  openView(viewId: ViewId, projectId?: ProjectId | undefined): Promise<void>;
18027
18050
  }
18028
18051
 
@@ -0,0 +1,239 @@
1
+ import{invariant as de,isNonEmptyArray as ce}from"@likec4/core";import{relative as le}from"node:path";import{f as pe,g as J,T as ue,N as V,i as fe,n as x,j as U,u as N,l as ge,C as he,m as me,a as we,b as Ie,c as Ne,d as W,e as ye,h as G,L as ve}from"./likec4.DWIqzE5d.mjs";import{compareNatural as ke}from"@likec4/core/utils";import{u as Le}from"./likec4.BeWJWU7_.mjs";import{RichText as $e}from"@likec4/core/types";function je(...n){return Le(Se,n)}function Se(n,e){let i={};for(let t of e)t in n&&
2
+ (i[t]=n[t]);return i}function Ce(n){var e,i;if(n){if("astNode"in n)return Ee(n);if(Array.isArray(n))return n.reduce(z,void 0);{const t=n,r=Re(t)?Te((i=(e=t?.root)===null||e===void 0?void 0:e.astNode)!==null&&i!==void 0?i:t?.astNode):void 0;return C(t,r)}}else return}function Re(n){return typeof n<"u"&&"element"in n&&"text"in n}function Te(n){try{return J(n).uri.toString()}catch{return}}function Ee(n){var e,i;const{astNode:t,property:r,index:a}=n??{},s=(e=t?.$cstNode)!==null&&e!==void 0?e:t?.$textRegion;
3
+ if(!(t===void 0||s===void 0)){if(r===void 0)return C(s,O(t));{const o=d=>a!==void 0&&a>-1&&Array.isArray(t[r])?a<d.length?d[a]:void 0:d.reduce(z,void 0);if(!((i=s.assignments)===null||i===void 0)&&i[r]){const d=o(s.assignments[r]);return d&&C(d,O(t))}else if(t.$cstNode){const d=o(pe(t.$cstNode,r));return d&&C(d,O(t))}else return}}}function O(n){var e,i,t,r;return n.$cstNode?(i=(e=J(n))===null||e===void 0?void 0:e.uri)===null||i===void 0?void 0:i.toString():n.$textRegion?n.$textRegion.documentURI||
4
+ ((r=(t=new ue(n,a=>a.$container?[a.$container]:[]).find(a=>{var s;return(s=a.$textRegion)===null||s===void 0?void 0:s.documentURI}))===null||t===void 0?void 0:t.$textRegion)===null||r===void 0?void 0:r.documentURI):void 0}function C(n,e){var i,t;const r={offset:n.offset,end:(i=n.end)!==null&&i!==void 0?i:n.offset+n.length,length:(t=n.length)!==null&&t!==void 0?t:n.end-n.offset};return n.range&&(r.range=n.range),e??(e=n.fileURI),e&&(r.fileURI=e),r}function z(n,e){var i,t;if(n){if(!e)return n&&C(n)}else
5
+ return e&&C(e);const r=(i=n.end)!==null&&i!==void 0?i:n.offset+n.length,a=(t=e.end)!==null&&t!==void 0?t:e.offset+e.length,s=Math.min(n.offset,e.offset),o=Math.max(r,a),d=o-s,p={offset:s,end:o,length:d};if(n.range&&e.range&&(p.range={start:e.range.start.line<n.range.start.line||e.range.start.line===n.range.start.line&&e.range.start.character<n.range.start.character?e.range.start:n.range.start,end:e.range.end.line>n.range.end.line||e.range.end.line===n.range.end.line&&e.range.end.character>n.range.
6
+ end.character?e.range.end:n.range.end}),n.fileURI||e.fileURI){const u=n.fileURI,h=e.fileURI,f=u&&h&&u!==h?`<unmergable text regions of ${u}, ${h}>`:u??h;p.fileURI=f}return p}class Me{constructor(e){this.defaultIndentation=" ",this.pendingIndent=!0,this.currentIndents=[],this.recentNonImmediateIndents=[],this.traceData=[],this.lines=[[]],this.length=0,typeof e=="string"?this.defaultIndentation=e:typeof e=="number"&&(this.defaultIndentation="".padStart(e))}get content(){return this.lines.map(e=>e.
7
+ join("")).join("")}get contentLength(){return this.length}get currentLineNumber(){return this.lines.length-1}get currentLineContent(){return this.lines[this.currentLineNumber].join("")}get currentPosition(){return{offset:this.contentLength,line:this.currentLineNumber,character:this.currentLineContent.length}}append(e,i){if(e.length>0){const t=i&&this.currentPosition;this.lines[this.currentLineNumber].push(e),this.length+=e.length,t&&this.indentPendingTraceRegions(t)}}indentPendingTraceRegions(e){
8
+ for(let i=this.traceData.length-1;i>=0;i--){const t=this.traceData[i];t.targetStart&&t.targetStart.offset===e.offset&&(t.targetStart=this.currentPosition)}}increaseIndent(e){this.currentIndents.push(e),e.indentImmediately||this.recentNonImmediateIndents.push(e)}decreaseIndent(){this.currentIndents.pop()}get relevantIndents(){return this.currentIndents.filter(e=>!this.recentNonImmediateIndents.includes(e))}resetCurrentLine(){this.length-=this.lines[this.currentLineNumber].join("").length,this.lines[this.
9
+ currentLineNumber]=[],this.pendingIndent=!0,this.recentNonImmediateIndents.length=0}addNewLine(){this.lines.push([]),this.pendingIndent=!0,this.recentNonImmediateIndents.length=0}pushTraceRegion(e){const i=be(e,this.currentPosition,t=>{var r,a;return(a=(r=this.traceData[this.traceData.length-1])===null||r===void 0?void 0:r.children)===null||a===void 0?void 0:a.push(t)});return this.traceData.push(i),i}popTraceRegion(e){const i=this.traceData.pop();return this.assertTrue(i===e,"Trace region misma\
10
+ tch!"),i}getParentTraceSourceFileURI(){var e;for(let i=this.traceData.length-1;i>-1;i--){const t=(e=this.traceData[i].sourceRegion)===null||e===void 0?void 0:e.fileURI;if(t)return t}}assertTrue(e,i){if(!e)throw new Error(i)}}function be(n,e,i){const t={sourceRegion:n,targetRegion:void 0,children:[],targetStart:e,complete:r=>{var a,s;return t.targetRegion={offset:t.targetStart.offset,end:r.offset,length:r.offset-t.targetStart.offset,range:{start:{line:t.targetStart.line,character:t.targetStart.character},
11
+ end:{line:r.line,character:r.character}}},delete t.targetStart,((a=t.children)===null||a===void 0?void 0:a.length)===0&&delete t.children,!((s=t.targetRegion)===null||s===void 0)&&s.length&&i(t),delete t.complete,t}};return t}function xe(n,e){const i=new Me(e),t=i.pushTraceRegion(void 0);B(n,i),i.popTraceRegion(t),t.complete&&t.complete(i.currentPosition);const r=t.children&&t.children.length===1?t.children[0]:void 0,a=r?.targetRegion,s=t.targetRegion;return a&&r.sourceRegion&&a.offset===s.offset&&
12
+ a.length===s.length?{text:i.content,trace:r}:{text:i.content,trace:t}}function B(n,e){typeof n=="string"?Ue(n,e):n instanceof F?De(n,e):n instanceof g?H(n,e):n instanceof M&&_e(n,e)}function Y(n,e){return typeof n=="string"?n.length!==0:n instanceof g?n.contents.some(i=>Y(i,e)):n instanceof M?!(n.ifNotEmpty&&e.currentLineContent.length===0):!1}function Ue(n,e){n&&(q(e,!1),e.append(n))}function q(n,e){var i;if(n.pendingIndent){let t="";for(const r of n.relevantIndents.filter(a=>a.indentEmptyLines||
13
+ !e))t+=(i=r.indentation)!==null&&i!==void 0?i:n.defaultIndentation;n.append(t,!0),n.pendingIndent=!1}}function H(n,e){let i;const t=Ce(n.tracedSource);t&&(i=e.pushTraceRegion(t));for(const r of n.contents)B(r,e);if(i){e.popTraceRegion(i);const r=e.getParentTraceSourceFileURI();r&&t?.fileURI===r&&delete t.fileURI,i.complete&&i.complete(e.currentPosition)}}function De(n,e){var i;if(Y(n,e)){n.indentImmediately&&!e.pendingIndent&&e.append((i=n.indentation)!==null&&i!==void 0?i:e.defaultIndentation,!0);
14
+ try{e.increaseIndent(n),H(n,e)}finally{e.decreaseIndent()}}}function _e(n,e){n.ifNotEmpty&&!Pe(e.currentLineContent)?e.resetCurrentLine():(q(e,!0),e.append(n.lineDelimiter),e.addNewLine())}function Pe(n){return n.trimStart()!==""}Object.freeze("__\xABSKIP^NEW^LINE^IF^EMPTY\xBB__");const Oe=/\S|$/;function Ae(n){const e=n.filter(t=>t.length>0).map(t=>t.search(Oe)),i=e.length===0?0:Math.min(...e);return Math.max(0,i)}function $(n,...e){const i=Je(n),t=Ve(n,e,i);return Ge(t)}function Fe(n,e,i){return(t,...r)=>Be(
15
+ n,e,i)($(t,...r))}function Je(n){const e=n.join("_").split(V),i=e.length>1&&e[0].trim().length===0,t=i&&e.length>1&&e[e.length-1].trim().length===0;if(e.length===1||e.length!==0&&e[0].trim().length!==0||e.length===2&&e[1].trim().length===0)return{indentation:0,omitFirstLine:i,omitLastLine:t,trimLastLine:e.length!==1&&e[e.length-1].trim().length===0};{let r=i?e.slice(1):e;r=t?r.slice(0,r.length-1):r,r=r.filter(s=>s.length!==0);const a=Ae(r);return{indentation:a,omitFirstLine:i,omitLastLine:t&&(e[e.
16
+ length-1].length<a||!e[e.length-1].startsWith(r[0].substring(0,a)))}}}function Ve(n,e,{indentation:i,omitFirstLine:t,omitLastLine:r,trimLastLine:a}){const s=[];n.forEach((p,u)=>{s.push(...p.split(V).map((h,f)=>f===0||h.length<i?h:h.substring(i)).reduce(u===0?(h,f,m)=>m===0?t?[]:[f]:m===1&&h.length===0?[f]:h.concat(D,f):(h,f,m)=>m===0?[f]:h.concat(D,f),[]).filter(h=>!(typeof h=="string"&&h.length===0)).concat(E(e[u])?e[u]:e[u]!==void 0?{content:String(e[u])}:u<e.length?K:[]))});const o=s.length,d=o!==
17
+ 0?s[o-1]:void 0;return(r||a)&&typeof d=="string"&&d.trim().length===0?t&&o!==1&&s[o-2]===D?s.slice(0,o-2):s.slice(0,o-1):s}const D={isNewLine:!0},K={isUndefinedSegment:!0},X=n=>n===D,A=n=>n===K,We=n=>n.content!==void 0;function Ge(n){return n.reduce((i,t,r)=>A(t)?i:X(t)?{node:r!==0&&(A(n[r-1])||E(n[r-1]))||r>1&&typeof n[r-1]=="string"&&(A(n[r-2])||E(n[r-2]))?i.node.appendNewLineIfNotEmpty():i.node.appendNewLine()}:(()=>{var a;const s=(r===0||X(n[r-1]))&&typeof t=="string"&&t.length!==0?"".padStart(
18
+ t.length-t.trimStart().length):"",o=We(t)?t.content:t;let d;return{node:i.indented?i.node:s.length!==0?i.node.indent({indentation:s,indentImmediately:!1,indentedChildren:p=>d=p.append(o)}):i.node.append(o),indented:d??((a=i.indented)===null||a===void 0?void 0:a.append(o))}})(),{node:new g}).node}const ze=typeof process>"u"?`
19
+ `:process.platform==="win32"?`\r
20
+ `:`
21
+ `;function E(n){return n instanceof g||n instanceof F||n instanceof M}function j(n,e){return E(n)?xe(n,e).text:String(n)}class g{constructor(...e){this.contents=[],this.append(...e)}isEmpty(){return this.contents.length===0}trace(e,i,t){if(fe(e)){if(this.tracedSource={astNode:e,property:i,index:t},this.tracedSource.property===void 0&&this.tracedSource.index!==void 0&&this.tracedSource.index>-1)throw new Error("Generation support: 'property' argument must not be 'undefined' if a non-negative valu\
22
+ e is assigned to 'index' in 'CompositeGeneratorNode.trace(...)'.")}else this.tracedSource=e;return this}append(...e){for(const i of e)typeof i=="function"?i(this):i&&this.contents.push(i);return this}appendIf(e,...i){return e?this.append(...i):this}appendNewLine(){return this.append(c)}appendNewLineIf(e){return e?this.append(c):this}appendNewLineIfNotEmpty(){return this.append(Ye)}appendNewLineIfNotEmptyIf(e){return e?this.appendNewLineIfNotEmpty():this}appendTemplate(e,...i){return this.append(
23
+ $(e,...i))}appendTemplateIf(e){return e?(i,...t)=>this.appendTemplate(i,...t):()=>this}indent(e){const{indentedChildren:i,indentation:t,indentEmptyLines:r,indentImmediately:a}=Array.isArray(e)||typeof e=="function"?{indentedChildren:e}:typeof e=="object"?e:{},s=new F(t,a,r);return this.contents.push(s),Array.isArray(i)?s.append(...i):i&&s.append(i),this}appendTraced(e,i,t){return r=>this.append(new g().trace(e,i,t).append(r))}appendTracedIf(e,i,t,r){return e?this.appendTraced(typeof i=="function"?
24
+ i():i,t,r):()=>this}appendTracedTemplate(e,i,t){return(r,...a)=>this.append(Fe(e,i,t)(r,...a))}appendTracedTemplateIf(e,i,t,r){return e?this.appendTracedTemplate(typeof i=="function"?i():i,t,r):()=>this}}function Be(n,e,i){return t=>t instanceof g&&t.tracedSource===void 0?t.trace(n,e,i):new g().trace(n,e,i).append(t)}class F extends g{constructor(e,i=!0,t=!1){super(),this.indentImmediately=!0,this.indentEmptyLines=!1,typeof e=="string"?this.indentation=e:typeof e=="number"&&(this.indentation="".
25
+ padStart(e)),this.indentImmediately=i,this.indentEmptyLines=t}}class M{constructor(e,i=!1){this.ifNotEmpty=!1,this.lineDelimiter=e??ze,this.ifNotEmpty=i}}const c=new M,Ye=new M(void 0,!0),Q=n=>n===void 0||typeof n=="string"||E(n)?n:String(n);function y(n,e=Q,i={}){const t=typeof e=="function"?e:Q,{filter:r,prefix:a,suffix:s,separator:o,appendNewLineIfNotEmpty:d,skipNewLineAfterLastItem:p}=typeof e=="object"?e:i,u=typeof a=="function"?a:()=>a,h=typeof s=="function"?s:()=>s;return qe(n,(f,m,v,l)=>{
26
+ if(r&&!r(m,v,l))return f;const w=t(m,v,l);return w===void 0?f:(f??(f=new g)).append(u(m,v,l)).append(w).append(h(m,v,l)).appendIf(!l,o).appendNewLineIfNotEmptyIf(!f.isEmpty()&&!!d&&(!l||!p))})}function qe(n,e,i){const t=n[Symbol.iterator]();let r=t.next(),a=0,s=i;for(;!r.done;){const o=t.next();s=e(s,r.value,a,!!o.done),r=o,a++}return s}const He=n=>n.charAt(0).toLocaleUpperCase()+n.slice(1),Ke=n=>n.split(".").map(He).join(""),Xe=n=>Ke(n.parent?n.id.slice(n.parent.length+1):n.id),Qe=({autoLayout:n})=>{
27
+ switch(n.direction){case"TB":return"down";case"BT":return"up";case"LR":return"right";case"RL":return"left"}},Ze=({shape:n})=>{switch(n){case"queue":case"cylinder":case"rectangle":case"person":return n;case"storage":return"stored_data";case"mobile":case"browser":return"rectangle"}};function Z(n){const e=n.$view,{nodes:i,edges:t}=e,r=new Map,a=(o,d)=>{const p=Xe(o),u=(d?d+".":"")+p;r.set(o.id,u);const h=JSON.stringify(o.title),f=Ze(o);return new g().append(p,": {",c).indent({indentedChildren:m=>m.
28
+ append("label: ",h,c).appendIf(f!=="rectangle","shape: ",f,c).appendIf(o.children.length>0,c,y(i.filter(v=>v.parent===o.id),v=>a(v,u))),indentation:2}).append("}",c)},s=o=>new g().append(r.get(o.source)," -> ",r.get(o.target)).append(d=>o.label&&d.append(": ",JSON.stringify(o.label)));return j(new g().append("direction: ",Qe(e),c,c).append(y(i.filter(o=>x(o.parent)),o=>a(o),{appendNewLineIfNotEmpty:!0})).appendIf(t.length>0,c,y(t,o=>s(o),{appendNewLineIfNotEmpty:!0})))}const en=n=>n.charAt(0).toLocaleUpperCase()+
29
+ n.slice(1),nn=n=>n.split(".").map(en).join(""),tn=n=>nn(n.parent?n.id.slice(n.parent.length+1):n.id),rn=({shape:n})=>{switch(n){case"queue":case"cylinder":return["[(",")]"];case"person":return["[fa:fa-user ","]"];case"storage":return["([","])"];case"mobile":case"browser":case"rectangle":return["[","]"]}};function ee(n){const e=n.$view,{nodes:i,edges:t}=e,r=new Map,a=(o,d)=>{const p=tn(o),u=(d?d+".":"")+p;r.set(o.id,u);const h=o.title.replaceAll(`
30
+ `,"\\n"),f=rn(o),m=new g;return o.children.length>0?m.append("subgraph ",u,"[",JSON.stringify(o.title),"]",c).indent({indentedChildren:[y(i.filter(v=>v.parent===o.id),v=>a(v,u),{appendNewLineIfNotEmpty:!0})],indentation:2}).append("end",c):m.append(u,f[0],h,f[1]),m},s=o=>new g().append(r.get(o.source)," -.",o.label?' "'+o.label.replaceAll(`
31
+ `,"\\n")+'" .-':"-","> ",r.get(o.target));return j(new g().appendIf(e.title!==null&&e.title.length>0,"---",c,`title: ${JSON.stringify(e.title)}`,c,"---",c).append("graph ",e.autoLayout.direction,c).indent({indentedChildren:o=>{o.append(y(i.filter(d=>x(d.parent)),d=>a(d),{appendNewLineIfNotEmpty:!0})).appendIf(t.length>0,y(t,d=>s(d),{appendNewLineIfNotEmpty:!0}))},indentation:2}))}const on=n=>n.charAt(0).toLocaleUpperCase()+n.slice(1),_=n=>n.split(".").map(on).join(""),ne=n=>_(n.parent?n.id.slice(
32
+ n.parent.length+1):n.id),R=(n,e,i="#3b82f6")=>{switch(n){case"blue":case"primary":return"#3b82f6";case"amber":return"#a35829";case"gray":return"#737373";case"green":return"#428a4f";case"indigo":return"#6366f1";case"slate":case"muted":return"#64748b";case"red":return"#ac4d39";case"sky":case"secondary":return"#0284c7";case null:case void 0:return i;default:return e(n)||n}},an=({autoLayout:n})=>{switch(n.direction){case"TB":return"top to bottom";case"BT":return console.warn("Bottom to top direction\
33
+ 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"}},te=({shape:n})=>{switch(n){case"queue":case"rectangle":case"person":return n;case"storage":case"cylinder":return"database";case"mobile":case"browser":return"rectangle"}},T=n=>x(n)?null:JSON.stringify(n).slice(1,-1);function ie(n){const e=n.$view,i=n.$model.specification.customColors??
34
+ {},{nodes:t,edges:r}=e,a=new Map(Object.entries(i)),s=l=>w=>a.get(w)?.elements[l],o=l=>w=>a.get(w)?.relationships[l],d=new Map,p=()=>new g().append('title "',e.title||e.id,'"',c).append(an(e)," direction",c),u=()=>new g().append("hide stereotype",c).append("skinparam ranksep ","60",c).append("skinparam nodesep ","30",c).append("skinparam {",c).indent({indentedChildren:l=>l.append("arrowFontSize ","10",c).append("defaultTextAlignment ","center",c).append("wrapWidth ","200",c).append("maxMessageSi\
35
+ ze ","100",c).append("shadowing ","false",c),indentation:2}).append("}",c),h=l=>{const w=te(l),I=_(l.id);return new g().append("skinparam ",w,"<<",I,">>","{",c).indent({indentedChildren:L=>L.append("BackgroundColor ",R(l.color,s("fill")),c).append("FontColor ",a.has(l.color)?R(l.color,s("hiContrast")):"#FFFFFF",c).append("BorderColor ",R(l.color,s("stroke")),c),indentation:2}).append("}",c)},f=l=>{const w=te(l),I=_(l.id),L=T(l.title)||ne(l),k=T(l.technology);d.set(l.id,I);const b=$e.from(l.description);
36
+ return new g().append(w," ").append('"').append("==",L).appendIf(!!k,"\\n","<size:10>[",k,"]</size>").appendIf(b.nonEmpty,"\\n\\n",T(b.text)).append('"'," <<",I,">> ","as ",I,c)},m=l=>{const w=T(l.title)||ne(l),I=_(l.id);return d.set(l.id,I),new g().append('rectangle "',w,'" <<',I,">> as ",I," {",c).indent({indentedChildren:L=>L.append("skinparam ","RectangleBorderColor<<",I,">> ",R(l.color,s("fill")),c).append("skinparam ","RectangleFontColor<<",I,">> ",R(l.color,s("fill")),c).append("skinparam\
37
+ ","RectangleBorderStyle<<",I,">> ","dashed",c,c).append(y(t.filter(k=>k.parent===l.id),k=>k.children.length>0?m(k):f(k))),indentation:2}).append("}",c)},v=l=>{const w=T(l.technology)||"",I=T(l.label)||"",L=R(l.color,o("lineColor"),"#777777"),k=b=>`<color:${b}>`;return new g().append(d.get(l.source)," .[",L,",thickness=2].> ",d.get(l.target)).appendIf(!!(I||w),' : "',k(L)).appendIf(!!I,I,k(L)).appendIf(!!(I&&w),"\\n").appendIf(!!w,k(L),"<size:8>[",w,"]</size>").appendIf(!!(I||w),'"').append(c)};
38
+ return j(new g().append("@startuml",c).append(p(),c).append(u(),c).append(y(t.filter(l=>l.children.length==0),l=>h(l),{appendNewLineIfNotEmpty:!0})).append(y(t.filter(l=>x(l.parent)),l=>l.children.length>0?m(l):f(l),{appendNewLineIfNotEmpty:!0})).appendIf(r.length>0,c,y(r,l=>v(l),{appendNewLineIfNotEmpty:!0})).append("@enduml",c))}function S(n){return{matches:e=>{let{module:i,projectId:t}=e.match(/^likec4:plugin\/(?<projectId>.+)\/(?<module>.+)$/)?.groups??e.match(/^likec4:(?<module>.+)\/(?<projectId>.+)$/)?.
39
+ groups??{};return!i||!t?null:(i.endsWith(".js")&&(i=i.slice(0,-3)),i===n?t:null)},virtualId:e=>U("likec4:plugin",e,n)+".js"}}function P(n,e){return{id:`likec4:${n}`,virtualId:`likec4:plugin/${n}.js`,async load({likec4:i,logger:t,projects:r,assetsDir:a}){t.info(N.dim(`generating likec4:${n}`));const s=r.map(({id:o})=>{const d=U(`likec4:${n}`,o);return` case ${JSON.stringify(o)}: return await import(${JSON.stringify(d)})`});return`
40
+ export async function ${e}(projectId) {
41
+ switch (projectId) {
42
+ ${s.join(`
43
+ `)}
44
+ default: throw new Error('Unknown projectId: ' + projectId)
45
+ }
46
+ }
47
+ `}}}function sn(n){const e=new g;return e.appendTemplate`
48
+ /******************************************************************************
49
+ * This file was generated
50
+ * DO NOT EDIT MANUALLY!
51
+ ******************************************************************************/
52
+ /* eslint-disable */
53
+
54
+ export function d2Source(viewId) {
55
+ switch (viewId) {
56
+ `.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
57
+ case ${JSON.stringify(t.id)}: {
58
+ return ${JSON.stringify(Z(t))}
59
+ }
60
+ `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
61
+ default: {
62
+ throw new Error('Unknown viewId: ' + viewId)
63
+ }
64
+ `}}).append(c," }",c).appendTemplate`
65
+ }
66
+ `.append(c,c),j(e)}const dn={...S("d2"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:d2/${e}`));const t=await n.computedModel(e);return sn(t)}},cn=P("d2","loadD2Sources");function ln(n){const e=new g;return e.appendTemplate`
67
+ /******************************************************************************
68
+ * This file was generated
69
+ * DO NOT EDIT MANUALLY!
70
+ ******************************************************************************/
71
+ /* eslint-disable */
72
+
73
+ export function dotSource(viewId) {
74
+ switch (viewId) {
75
+ `.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y(Object.keys(n),t=>$`
76
+ case ${JSON.stringify(t)}: {
77
+ return ${JSON.stringify(n[t].dot)}
78
+ }
79
+ `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
80
+ default: {
81
+ throw new Error('Unknown viewId: ' + viewId)
82
+ }
83
+ `}}).append(c," }",c).appendTemplate`
84
+ }
85
+
86
+ export function svgSource(viewId) {
87
+ switch (viewId) {
88
+ `.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y(Object.keys(n),t=>$`
89
+ case ${JSON.stringify(t)}: {
90
+ return ${JSON.stringify(n[t].svg)}
91
+ }
92
+ `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
93
+ default: {
94
+ throw new Error('Unknown viewId: ' + viewId)
95
+ }
96
+ `}}).append(c," }",c,"}",c,c),j(e)}const pn={...S("dot"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:dot/${e}`));const t=await n.views.viewsAsGraphvizOut(e),r=ge(t,({id:a,svg:s,dot:o})=>[a,{dot:o,svg:s}]);return ln(r)}},un=P("dot","loadDotSources");function fn(n){const e=he(n.flatMap(r=>r.nodes.map(a=>a.icon)),Ie(r=>Ne(r)&&!(r.toLowerCase().startsWith("http:")||r.toLowerCase().startsWith("https:"))),we(),me(ke)),{imports:i,cases:t}=e.reduce((r,a,s)=>{const o=a.
97
+ startsWith("file:"),d="Icon"+s.toString().padStart(2,"0");if(o)return r.imports.push(`import ${d} from '${a}?inline'`),r.cases.push(` '${a}': () => jsx('img', { src: ${d} })`),r;const[p,u]=a.split(":");return r.imports.push(`import ${d} from 'likec4/icons/${p}/${u}'`),r.cases.push(` '${p}:${u}': ${d}`),r},{imports:[],cases:[]});return`
98
+ import { jsx } from 'react/jsx-runtime'
99
+ ${i.join(`
100
+ `)}
101
+
102
+ const Icons = {
103
+ ${t.join(`,
104
+ `)}
105
+ }
106
+ export function IconRenderer({ node }) {
107
+ const IconComponent = Icons[node.icon ?? '']
108
+ if (!IconComponent) {
109
+ return null
110
+ }
111
+ return jsx(IconComponent, {node})
112
+ }
113
+ `}const gn={...S("icons"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:icons/${e}`));const t=await n.views.computedViews(e);return fn(t)}},hn={id:"likec4:icons",virtualId:"likec4:plugin/icons.jsx",async load({likec4:n,projects:e,logger:i}){i.info(N.dim("generating likec4:icons"));const{imports:t,cases:r}=e.reduce((a,{id:s},o)=>{const d="Icons"+o.toString().padStart(2,"0"),p=U("likec4:icons",s);return a.imports.push(`import { IconRenderer as ${d} } from ${JSON.stringify(
114
+ p)}`),a.cases.push(` case ${JSON.stringify(s)}: return ${d}`),a},{imports:[],cases:[]});return`
115
+ ${t.join(`
116
+ `)}
117
+
118
+ export function ProjectIcons(projectId) {
119
+ switch (projectId) {
120
+ ${r.join(`
121
+ `)}
122
+ default:
123
+ throw new Error('Unknown projectId: ' + projectId)
124
+ }
125
+ }
126
+ `}};function mn(n){const e=new g;return e.appendTemplate`
127
+ /******************************************************************************
128
+ * This file was generated
129
+ * DO NOT EDIT MANUALLY!
130
+ ******************************************************************************/
131
+ /* eslint-disable */
132
+
133
+ export function mmdSource(viewId) {
134
+ switch (viewId) {
135
+ `.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
136
+ case ${JSON.stringify(t.id)}: {
137
+ return ${JSON.stringify(ee(t))}
138
+ }
139
+ `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
140
+ default: {
141
+ throw new Error('Unknown viewId: ' + viewId)
142
+ }
143
+ `}}).append(c," }",c).appendTemplate`
144
+ }
145
+
146
+ `.append(c,c),j(e)}const wn={...S("mmd"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating virtual:likec4/mmd/${e}`));const t=await n.computedModel(e);return mn(t)}},In=P("mmd","loadMmdSources"),Nn=n=>`
147
+ import { createHooksForModel, atom } from 'likec4/vite-plugin/internal'
148
+
149
+ export const $likec4data = atom(${W.stringify(n.$data)})
150
+
151
+ export const {
152
+ updateModel,
153
+ $likec4model,
154
+ useLikeC4Model,
155
+ useLikeC4Views,
156
+ useLikeC4View
157
+ }= /* @__PURE__ */ createHooksForModel($likec4data)
158
+
159
+ if (import.meta.hot) {
160
+ import.meta.hot.accept(md => {
161
+ if (!import.meta.hot.data.$update) {
162
+ import.meta.hot.data.$update = updateModel
163
+ }
164
+ const update = md.$likec4data?.value
165
+ if (update) {
166
+ import.meta.hot.data.$update(update)
167
+ } else {
168
+ import.meta.hot.invalidate()
169
+ }
170
+ })
171
+ }
172
+ `,yn={...S("model"),async load({likec4:n,projectId:e,logger:i,assetsDir:t}){i.info(N.dim(`generating likec4:model/${e}`));const r=await n.layoutedModel(e);return Nn(r)}},vn={id:"likec4:model",virtualId:"likec4:plugin/model.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){return e.info(N.dim("generating likec4:model")),`
173
+ export async function loadModel(projectId) {
174
+ switch (projectId) {
175
+ ${i.map(({id:r})=>{const a=U("likec4:model",r);return` case ${JSON.stringify(r)}: return await import(${JSON.stringify(a)})`}).join(`
176
+ `)}
177
+ default: throw new Error('Unknown projectId: ' + projectId)
178
+ }
179
+ }
180
+ `}},kn=n=>`
181
+ export const isSingleProject = ${n.length===1};
182
+ export const projects = ${W.stringify(n,null,2)};
183
+ `,Ln={id:"likec4:projects",virtualId:"likec4:plugin/projects.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){return e.info(N.dim("generating likec4:projects")),kn(ye(i,je(["id","title"])))}};function $n(n){const e=new g;return e.appendTemplate`
184
+ /******************************************************************************
185
+ * This file was generated
186
+ * DO NOT EDIT MANUALLY!
187
+ ******************************************************************************/
188
+ /* eslint-disable */
189
+
190
+ export function pumlSource(viewId) {
191
+ switch (viewId) {
192
+ `.appendNewLine().indent({indentation:4,indentedChildren(i){i.append(y([...n.views()],t=>$`
193
+ case ${JSON.stringify(t.id)}: {
194
+ return ${JSON.stringify(ie(t))}
195
+ }
196
+ `,{appendNewLineIfNotEmpty:!0})).appendTemplate`
197
+ default: {
198
+ throw new Error('Unknown viewId: ' + viewId)
199
+ }
200
+ `}}).append(c," }",c).appendTemplate`
201
+ }
202
+ `.append(c,c),j(e)}const jn={...S("puml"),async load({likec4:n,projectId:e,logger:i}){i.info(N.dim(`generating likec4:puml/${e}`));const t=await n.computedModel(e);return $n(t)}},Sn=P("puml","loadPumlSources"),re=n=>`
203
+ import { jsx as _jsx } from "react/jsx-runtime";
204
+ import { LikeC4ModelProvider as Provider, LikeC4View as GenericView, ReactLikeC4 as GenericReactLikeC4 } from 'likec4/react';
205
+ import { IconRenderer } from 'likec4:icons/${n}'
206
+
207
+ import { useLikeC4Model, useLikeC4Views, useLikeC4View } from 'likec4:model/${n}'
208
+
209
+ export function LikeC4ModelProvider({ children }) {
210
+ const likeC4Model = useLikeC4Model()
211
+ return (_jsx(Provider, { likec4model: likeC4Model, children: children }));
212
+ }
213
+ export function LikeC4View(props) {
214
+ return (_jsx(LikeC4ModelProvider, { children: _jsx(GenericView, { renderIcon: IconRenderer, ...props }) }));
215
+ }
216
+ export function ReactLikeC4(props) {
217
+ return (_jsx(LikeC4ModelProvider, { children: _jsx(GenericReactLikeC4, { renderIcon: IconRenderer, ...props }) }));
218
+ }
219
+
220
+ export {
221
+ useLikeC4Model,
222
+ useLikeC4View,
223
+ useLikeC4Views
224
+ }
225
+ `,Cn={...S("react"),async load({projectId:n,logger:e}){return e.info(N.dim(`generating likec4:react/${n}`)),re(n)}},Rn={id:"likec4:react",virtualId:"likec4:plugin/react.js",async load({logger:n,projects:e}){const i=G(e);return n.info(N.dim("generating likec4:react for")+" "+i.id),re(i.id)}},Tn=n=>`
226
+ export { IconRenderer } from 'likec4:icons/${n}'
227
+ export {
228
+ $likec4data,
229
+ $likec4model,
230
+ useLikeC4Model,
231
+ useLikeC4Views,
232
+ useLikeC4View
233
+ } from 'likec4:model/${n}'
234
+ export const projectId = ${JSON.stringify(n)}
235
+ `,En={id:"likec4:single-project",virtualId:"likec4:plugin/single-project.js",async load({likec4:n,logger:e,projects:i,assetsDir:t}){const r=G(i);return e.info(N.dim("generating likec4:single-project for")+" "+r.id),Tn(r.id)}},oe=[yn,gn,dn,pn,wn,jn],ae=[...oe,Cn],se=[Ln,vn,En,Rn,cn,un,In,Sn,hn],Mn=n=>{const e=n.toLowerCase();return e.endsWith(".c4")||e.endsWith(".likec4")||e.endsWith(".like-c4")};function bn({useOverviewGraph:n=!1,...e}){let i,t,r,a;return{name:"vite-plugin-likec4",async configResolved(s){
236
+ if(i=s.root,t=s.logger,n===!0){const o=s.resolve.alias.find(d=>d.find==="likec4/previews")?.replacement;o?(a=o,t.info(N.dim("likec4/previews alias")+" "+N.dim(a))):t.warn("likec4/previews alias not found")}e.languageServices?r=e.languageServices:r=(await ve.fromWorkspace(e.workspace??s.root,{logger:t,graphviz:e.graphviz??"wasm",printErrors:e.printErrors??!0,throwIfInvalid:e.throwIfInvalid??!1})).languageServices,a=r.workspaceUri.fsPath},resolveId(s){for(const o of ae){const d=o.matches(s);if(d)return o.
237
+ virtualId(d)}for(const o of se)if(o.id===s)return o.virtualId;return null},async load(s){for(const o of ae){const d=o.matches(s);if(d)return await o.load({logger:t,likec4:r,projectId:d,assetsDir:a,useOverviewGraph:n})}for(const o of se)if(o.virtualId===s){const d=(await r.projects()).map(p=>({id:p.id,title:p.config.title??p.id,folder:p.folder}));return de(ce(d)),await o.load({logger:t,likec4:r,projects:d,assetsDir:a,useOverviewGraph:n})}return null},configureServer(s){const o=r.projects().map(({
238
+ folder:p})=>p.fsPath);for(const p of o)t.info(`${N.dim("watch")} ${p}`);const d=p=>u=>{Mn(u)&&r.notifyUpdate({[p]:u})};s.watcher.add(o).on("add",d("changed")).on("change",d("changed")).on("unlink",d("removed")),r.builder.onModelParsed(async()=>{const[p]=r.getErrors();if(p){s.ws.send({type:"error",err:{name:"LikeC4ValidationError",message:`Validation failed
239
+ `+p.message.slice(0,500),stack:"",plugin:"vite-plugin-likec4",loc:{file:le(i,p.sourceFsPath),line:p.range.start.line+1,column:p.range.start.character+1}}});return}for(const u of r.projects())for(const h of oe){const f=s.moduleGraph.getModuleById(h.virtualId(u.id));if(f&&f.importers.size>0){t.info(`${N.green("reload")} ${N.dim(f.id??f.url)}`);try{await s.reloadModule(f)}catch(m){t.error(m)}}}})}}}export{g as C,bn as L,c as N,ee as a,Z as b,$ as e,ie as g,y as j,j as t};