likec4 1.58.0 → 1.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/__app__/codegen/webcomponent.mjs +14 -14
  2. package/__app__/src/chunks/AIChat.mjs +153 -156
  3. package/__app__/src/chunks/LikeC4Styles.mjs +1553 -1255
  4. package/__app__/src/chunks/ProjectsOverview.mjs +127 -130
  5. package/__app__/src/chunks/hooks.mjs +419 -106
  6. package/__app__/src/chunks/libs/@floating-ui.mjs +8 -8
  7. package/__app__/src/chunks/libs/@mantine.mjs +3039 -2135
  8. package/__app__/src/chunks/libs/@tanstack-ai.mjs +4 -4
  9. package/__app__/src/chunks/libs/@tanstack.mjs +93 -118
  10. package/__app__/src/chunks/libs/@xstate/react.mjs +30 -16
  11. package/__app__/src/chunks/libs/@xyflow/react.mjs +50 -26
  12. package/__app__/src/chunks/libs/bezier-js.mjs +11 -8
  13. package/__app__/src/chunks/libs/framer.mjs +1188 -1155
  14. package/__app__/src/chunks/libs/zod.mjs +191 -188
  15. package/__app__/src/chunks/rolldown-runtime.mjs +8 -1
  16. package/__app__/src/chunks/styled-system.mjs +23 -16
  17. package/__app__/src/main.mjs +23331 -10467
  18. package/__app__/src/style.css +1 -1
  19. package/dist/chunks/dist.mjs +10 -0
  20. package/dist/chunks/enableServer.mjs +1 -1
  21. package/dist/chunks/index.d.mts +9 -9
  22. package/dist/chunks/index2.d.mts +386 -229
  23. package/dist/chunks/libs/@chevrotain/gast.mjs +1 -1
  24. package/dist/chunks/libs/@chevrotain/regexp-to-ast.mjs +1 -1
  25. package/dist/chunks/libs/@logtape/logtape.mjs +3 -3
  26. package/dist/chunks/libs/@ts-graphviz/common.d.mts +1 -2
  27. package/dist/chunks/libs/@ts-graphviz/core.mjs +1 -1
  28. package/dist/chunks/libs/chevrotain-allstar.mjs +1 -1
  29. package/dist/chunks/libs/chevrotain.mjs +4 -4
  30. package/dist/chunks/libs/json5.mjs +1 -1
  31. package/dist/chunks/libs/langium.d.mts +2940 -2914
  32. package/dist/chunks/libs/langium.mjs +9 -9
  33. package/dist/chunks/libs/merge-error-cause.mjs +1 -1
  34. package/dist/chunks/libs/p-queue.mjs +1 -1
  35. package/dist/chunks/libs/package-manager-detector.mjs +1 -1
  36. package/dist/chunks/libs/pako.mjs +1 -1
  37. package/dist/chunks/libs/picomatch.mjs +1 -1
  38. package/dist/chunks/libs/remeda.mjs +1 -1
  39. package/dist/chunks/libs/ufo.mjs +1 -1
  40. package/dist/chunks/libs/unstorage.d.mts +1 -0
  41. package/dist/chunks/libs/which.mjs +1 -1
  42. package/dist/chunks/libs/zod.d.mts +48 -36
  43. package/dist/chunks/libs/zod.mjs +4 -4
  44. package/dist/chunks/logger.mjs +1 -0
  45. package/dist/chunks/node.mjs +57 -66
  46. package/dist/chunks/rolldown-runtime.mjs +1 -1
  47. package/dist/chunks/sequence-view.mjs +1 -1
  48. package/dist/chunks/vite-plugin.mjs +43 -43
  49. package/dist/cli/index.mjs +159 -157
  50. package/dist/index.d.mts +2 -3
  51. package/dist/index.mjs +1 -1
  52. package/dist/model/index.d.mts +5 -4
  53. package/dist/vite-plugin/index.d.mts +6 -9
  54. package/dist/vite-plugin/internal/index.d.mts +15 -10
  55. package/package.json +38 -38
  56. package/react/index.d.mts +761 -111
  57. package/react/index.mjs +13997 -10234
  58. package/__app__/src/chunks/DiagramActorProvider.mjs +0 -7638
  59. package/__app__/src/chunks/Markdown.mjs +0 -146
  60. package/__app__/src/chunks/NavigationPanel.mjs +0 -61
  61. package/__app__/src/chunks/adhoc-editor.mjs +0 -3386
  62. package/__app__/src/chunks/libs/@dagrejs/dagre.mjs +0 -1894
  63. package/__app__/src/chunks/libs/@tabler/icons-react.mjs +0 -252
  64. package/__app__/src/chunks/libs/remeda.mjs +0 -642
@@ -0,0 +1,10 @@
1
+ import"./rolldown-runtime.mjs";import{a as e,i as t,n as r,r as o,t as s}from"./libs/@logtape/logtape.mjs";import{n as c,t as u}from"./libs/merge-error-cause.mjs";function serializeValue(e,t,r,o){if(typeof e?.toJSON==`function`&&(e=e.toJSON()),!(typeof e==`object`&&e))return e;if(t.has(e)){if(!r)return`[Circular]`;let o=t.get(e);return`[Circular ${o===``?`*`:`*${o}`}]`}t.set(e,o);let s=Array.isArray(e)?[]:{};for(let[c,u]of Object.entries(e))s[c]=serializeValue(u,t,r,o===``?c:`${o}.${c}`);return t.delete(e),s}function safeStringify(e,{indentation:t,trace:r}={}){let o=serializeValue(e,new WeakMap,r,``);return JSON.stringify(o,void 0,t)}const parseStack=e=>e.split(`
2
+ `).map(e=>e.trim().replace(`file://`,``));function indent(e,t=2){e=Array.isArray(e)?e:e.split(`
3
+ `);let r=` `.repeat(t);return e.map(e=>`${r}${e}`).join(`
4
+ `)}function loggable(e){if(typeof e==`string`)return e;if(e instanceof Error){let t=u(e);if(t.stack){let e=parseStack(t.stack);return t.message+`
5
+ `+indent(e.slice(1))}return t.message}return safeStringify(e,{indentation:` `})}function wrapError(e,t){return c(e,t)}function getErrorFromLogRecord(e){let t=Object.entries(e.properties).flatMap(([e,t])=>{if(t instanceof Error){let e=u(t);return e.stack&&=parseStack(e.stack).join(`
6
+ `),[e]}return e===`error`||e===`err`?[Error(loggable(t))]:[]});return t.length===0?null:t.length===1?t[0]:AggregateError(t)}function errorFromLogRecord(e){let t=getErrorFromLogRecord(e);return t&&typeof e.rawMessage==`string`?c(t,e.rawMessage+`
7
+ `):t}function appendErrorToMessage(e,t=!1){let r=getErrorFromLogRecord(e.record);if(r){let o=r.message;return r.stack&&(o=o+`
8
+ `+indent(r.stack.split(`
9
+ `).slice(1))),t&&(o=`${m.red}${o}${p}`),{...e,message:e.message+`
10
+ `+indent(o)}}return e}const d={trace:`TRACE`,debug:`DEBUG`,info:`INFO `,warning:`WARN `,error:`ERROR`,fatal:`FATAL`};function getMessageOnlyFormatter(){return getTextFormatter({format:({message:e})=>e})}const level=e=>d[e];function getTextFormatter(e){let r=e?.format??(({timestamp:e,level:t,category:r,message:o})=>`${e} ${t} ${r} ${o}`);return t({timestamp:`time`,level,category:`.`,...e,format:e=>r(appendErrorToMessage(e))})}const p=`\x1B[0m`,m={red:`\x1B[31m`};function getAnsiColorFormatter(e){let t=e?.format??(({timestamp:e,level:t,category:r,message:o})=>`${e} ${t} ${r} ${o}`);return o({timestamp:`time`,level,categoryStyle:`bold`,categoryColor:`cyan`,category:`.`,levelColors:{trace:`black`,debug:`blue`,info:`green`,warning:`yellow`,error:`red`,fatal:`magenta`},...e,format:e=>t(appendErrorToMessage(e,!0))})}function getConsoleFormatter(e){let t=e?.messageFormatter;return t?e=>{let{properties:r}=e;return r&&Object.keys(r).length>0?[t(e),r]:[t(e)]}:e=>{let{message:t,properties:r}=e;return r&&Object.keys(r).length>0?[...t,r]:t}}function getConsoleSink(e){return r({formatter:getConsoleFormatter(),...e})}function getConsoleStderrSink(e){let t=e?.formatter??getConsoleFormatter();return e=>{let r=t(e);if(typeof r==`string`){let e=r.replace(/\r?\n$/,``);console.error(e)}else console.error(...r)}}const h=e(`likec4`);function createLogger(e){return h.getChild(e)}function configureLogger(e){try{let{sinks:t={},loggers:r,...o}=e??{},c={console:getConsoleSink(),...t};s({reset:!0,...o,sinks:c,loggers:[{category:[`logtape`,`meta`],sinks:[`console`],lowestLevel:`warning`},...e?.loggers??[{category:`likec4`,sinks:[`console`],lowestLevel:`debug`}]]})}catch(e){console.error(e)}}var g={reset:[0,0],bold:[1,22,`\x1B[22m\x1B[1m`],dim:[2,22,`\x1B[22m\x1B[2m`],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]};function i(e){return String(e)}i.open=``,i.close=``;function B(){let e=typeof process<`u`?process:void 0,t=e?.env||{},r=t.FORCE_TTY!==`false`,o=e?.argv||[];return!(`NO_COLOR`in t||o.includes(`--no-color`))&&(`FORCE_COLOR`in t||o.includes(`--color`)||e?.platform===`win32`||r&&t.TERM!==`dumb`||`CI`in t)||typeof window<`u`&&!!window.chrome}function C({force:e}={}){let t=e||B(),a=(e,t,r,o)=>{let s=``,c=0;do s+=e.substring(c,o)+r,c=o+t.length,o=e.indexOf(t,c);while(~o);return s+e.substring(c)},l=(e,t,r=e)=>{let n=o=>{let s=String(o),c=s.indexOf(t,e.length);return~c?e+a(s,t,r,c)+t:e+s+t};return n.open=e,n.close=t,n},r={isColorSupported:t},f=e=>`\x1B[${e}m`;for(let e in g){let o=g[e];r[e]=t?l(f(o[0]),f(o[1]),o[2]):i}return r}var _=C();export{getConsoleSink as a,getAnsiColorFormatter as c,getTextFormatter as d,loggable as f,h as i,getConsoleFormatter as l,configureLogger as n,getConsoleStderrSink as o,wrapError as p,createLogger as r,errorFromLogRecord as s,_ as t,getMessageOnlyFormatter as u};
@@ -1 +1 @@
1
- import"./rolldown-runtime.mjs";import{S as e,_ as t,a as n,c as r,d as i,g as a,l as o,m as s}from"./libs/zod.mjs";import{u as c}from"./vite-plugin.mjs";import{ElementShapes as l}from"@likec4/core/styles";import{invariant as u}from"@likec4/core";import{Readable as d}from"node:stream";import{chat as f,convertMessagesToModelMessages as p,toServerSentEventsResponse as m,toolDefinition as h}from"@tanstack/ai";const g=t({id:e().meta({description:`Node ID`}),title:e(),shape:n(l),color:e().meta({description:`Node color, from theme or custom`}),icon:e().nullish(),parentId:e().nullish().meta({description:`Parent node ID (if node is nested)`}),children:r(e()).nullish().meta({description:`Nested node IDs (if node is compound)`}),x:a(),y:a(),width:a(),height:a(),modelFqn:e().nullish().meta({description:`Model element FQN (if node has reference)`})}),_=h({name:`read_ui`,description:`Read current UI state. Use arguments to include additional data.`,needsApproval:!1,inputSchema:t({selectedNode:o().default(!1).meta({description:`Include selected node (if any)`}),nodes:o().default(!1).meta({description:`Include all nodes from the view`})}),outputSchema:t({projectId:e(),editMode:o().meta({description:`Whether the UI is in edit mode`}),view:t({id:e(),title:e(),type:n([`element`,`deployment`,`dynamic`]).meta({description:`Type of the current view`})}).meta({description:`Current view`}),nodes:r(g).nullish(),selectedNode:g.nullish()})}),v=h({name:`update_ui`,description:`Update UI state by executing a command.`,needsApproval:!1,inputSchema:t({command:i(`type`,[t({type:s(`focus`),elementId:e().meta({description:`Element ID (FQN)`})}).meta({description:`Focus UI on an element by its FQN`}),t({type:s(`fitview`)}).meta({description:`Zoom out to fit all elements in the viewport, and clear any selection/focus`})])}),outputSchema:t({})}),y=h({name:`navigate_to`,description:`Navigates UI to another view`,needsApproval:!1,inputSchema:t({viewId:e().meta({description:`View ID`})}),outputSchema:t({})});async function readJsonBody(e){let t=[];c.info(`Reading request`);for await(let n of e){let e=Buffer.from(n).toString();process.stdout.write(e),t.push(e)}return JSON.parse(t.join(``))}function enableAIServer(e){let{ai:t,server:n,logger:r}=e;u(t,`AI is not configured`),n.middlewares.use(`/__likec4_ai`,async(e,n,i)=>{if(e.method!==`POST`){i();return}try{let i=await readJsonBody(d.toWeb(e)),a=p(i.messages??[]),o=m(f({...t,messages:a,debug:!0,conversationId:i.data.conversationId,systemPrompts:[`You are a helpful assistant that can answer questions about LikeC4 model and update UI.`],tools:[y,v,_]}));if(o.headers.forEach((e,t)=>{n.setHeader(t,e)}),n.writeHead(o.status,o.statusText),!o.body){n.end();return}d.fromWeb(o.body).on(`error`,e=>{r.error(`AI stream error`,{error:e}),n.writableEnded||n.end()}).pipe(n,{end:!0})}catch(e){r.error(`AI request failed`,{error:e}),n.headersSent?n.end():(n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e instanceof Error?e.message:String(e)})))}})}export{enableAIServer};
1
+ import"./rolldown-runtime.mjs";import{a as e,c as t,d as n,h as r,l as i,v as a,w as o,y as s}from"./libs/zod.mjs";import{n as c}from"./logger.mjs";import{ElementShapes as l}from"@likec4/core/styles";import{invariant as u}from"@likec4/core";import{Readable as d}from"node:stream";import{chat as f,convertMessagesToModelMessages as p,toServerSentEventsResponse as m,toolDefinition as h}from"@tanstack/ai";const g=s({id:o().meta({description:`Node ID`}),title:o(),shape:e(l),color:o().meta({description:`Node color, from theme or custom`}),icon:o().nullish(),parentId:o().nullish().meta({description:`Parent node ID (if node is nested)`}),children:t(o()).nullish().meta({description:`Nested node IDs (if node is compound)`}),x:a(),y:a(),width:a(),height:a(),modelFqn:o().nullish().meta({description:`Model element FQN (if node has reference)`})}),_=h({name:`read_ui`,description:`Read current UI state. Use arguments to include additional data.`,needsApproval:!1,inputSchema:s({selectedNode:i().default(!1).meta({description:`Include selected node (if any)`}),nodes:i().default(!1).meta({description:`Include all nodes from the view`})}),outputSchema:s({projectId:o(),editMode:i().meta({description:`Whether the UI is in edit mode`}),view:s({id:o(),title:o(),type:e([`element`,`deployment`,`dynamic`]).meta({description:`Type of the current view`})}).meta({description:`Current view`}),nodes:t(g).nullish(),selectedNode:g.nullish()})}),v=h({name:`update_ui`,description:`Update UI state by executing a command.`,needsApproval:!1,inputSchema:s({command:n(`type`,[s({type:r(`focus`),elementId:o().meta({description:`Element ID (FQN)`})}).meta({description:`Focus UI on an element by its FQN`}),s({type:r(`fitview`)}).meta({description:`Zoom out to fit all elements in the viewport, and clear any selection/focus`})])}),outputSchema:s({})}),y=h({name:`navigate_to`,description:`Navigates UI to another view`,needsApproval:!1,inputSchema:s({viewId:o().meta({description:`View ID`})}),outputSchema:s({})});async function readJsonBody(e){let t=[];c.info(`Reading request`);for await(let n of e){let e=Buffer.from(n).toString();process.stdout.write(e),t.push(e)}return JSON.parse(t.join(``))}function enableAIServer(e){let{ai:t,server:n,logger:r}=e;u(t,`AI is not configured`),n.middlewares.use(`/__likec4_ai`,async(e,n,i)=>{if(e.method!==`POST`){i();return}try{let i=await readJsonBody(d.toWeb(e)),a=p(i.messages??[]),o=m(f({...t,messages:a,debug:!0,conversationId:i.data.conversationId,systemPrompts:[`You are a helpful assistant that can answer questions about LikeC4 model and update UI.`],tools:[y,v,_]}));if(o.headers.forEach((e,t)=>{n.setHeader(t,e)}),n.writeHead(o.status,o.statusText),!o.body){n.end();return}d.fromWeb(o.body).on(`error`,e=>{r.error(`AI stream error`,{error:e}),n.writableEnded||n.end()}).pipe(n,{end:!0})}catch(e){r.error(`AI request failed`,{error:e}),n.headersSent?n.end():(n.writeHead(500,{"Content-Type":`application/json`}),n.end(JSON.stringify({error:e instanceof Error?e.message:String(e)})))}})}export{enableAIServer};
@@ -2,15 +2,15 @@ import { i as __name } from "./rolldown-runtime.mjs";
2
2
  import { _ as input, a as ZodDefault, b as $strict, c as ZodLiteral, d as ZodOptional, f as ZodPipe, g as ZodUnion, h as ZodTransform, i as ZodCustom, l as ZodNumber, m as ZodString, n as ZodArray, o as ZodEnum, p as ZodRecord, r as ZodBoolean, s as ZodInt, t as ZodAny, u as ZodObject, v as output, x as $strip, y as $partial } from "./libs/zod.mjs";
3
3
  import { LikeC4ProjectStylesConfig, LikeC4ProjectTheme, ProjectId, ThemeColorValues as ThemeColorValues$1, aux } from "@likec4/core/types";
4
4
  import { DeploymentElementModel, DeploymentRelationModel, ElementModel, LikeC4Model, LikeC4ViewModel, RelationshipModel } from "@likec4/core/model";
5
-
6
- //#region ../config/dist/index.d.mts
5
+ //#region ../config/dist/chunks/index.d.mts
7
6
  //#region src/schema.include.d.ts
8
7
  declare const IncludeSchema: ZodObject<{
9
8
  paths: ZodArray<ZodString>;
10
9
  maxDepth: ZodDefault<ZodNumber>;
11
10
  fileThreshold: ZodDefault<ZodNumber>;
12
11
  }, $strict>;
13
- type IncludeConfig = output<typeof IncludeSchema>; //#endregion
12
+ type IncludeConfig = output<typeof IncludeSchema>;
13
+ //#endregion
14
14
  //#region src/schema.d.ts
15
15
  interface VscodeURI {
16
16
  readonly scheme: string;
@@ -293,7 +293,8 @@ declare const LikeC4ProjectConfigOps: {
293
293
  parse: typeof parseProjectConfigJSON;
294
294
  validate: typeof validateProjectConfig;
295
295
  normalizeInclude: (include: input<typeof IncludeSchema> | undefined) => IncludeConfig;
296
- }; //#endregion
296
+ };
297
+ //#endregion
297
298
  //#region src/schema.theme.d.ts
298
299
  declare const ThemeColorValuesSchema: ZodPipe<ZodUnion<[ZodPipe<ZodObject<{
299
300
  elements: ZodUnion<[ZodPipe<ZodObject<{
@@ -469,9 +470,7 @@ declare const LikeC4StylesConfigSchema: ZodPipe<ZodObject<{
469
470
  customCss?: string | string[] | undefined;
470
471
  }>>;
471
472
  interface LikeC4StylesConfig extends output<typeof LikeC4StylesConfigSchema> {}
472
- type LikeC4StylesConfigInput = input<typeof LikeC4StylesConfigSchema>; //#endregion
473
- //#region src/filenames.d.ts
474
- /** All known LikeC4 config filenames (JSON and non-JSON). */
473
+ type LikeC4StylesConfigInput = input<typeof LikeC4StylesConfigSchema>;
475
474
  /** Returns true if the **basename** of the given path matches a known config filename. */
476
475
  declare function isLikeC4JsonConfig(filename: string): boolean;
477
476
  /**
@@ -481,7 +480,8 @@ declare function isLikeC4NonJsonConfig(filename: string): boolean;
481
480
  /**
482
481
  * Returns true if the **basename** of the given path matches a known LikeC4 config file (JSON or non-JSON).
483
482
  */
484
- declare function isLikeC4Config(filename: string): boolean; //#endregion
483
+ declare function isLikeC4Config(filename: string): boolean;
484
+ //#endregion
485
485
  //#region src/define-config.d.ts
486
486
  /**
487
487
  * Defines LikeC4 Project, allows custom generators that can be executed using CLI:
@@ -588,6 +588,6 @@ declare function defineTheme<const S extends LikeC4ConfigThemeInput>(theme: S):
588
588
  * }
589
589
  * })
590
590
  */
591
- declare function defineStyle<const S extends LikeC4StylesConfigInput>(styles: S): LikeC4ProjectStylesConfig; //#endregion
591
+ declare function defineStyle<const S extends LikeC4StylesConfigInput>(styles: S): LikeC4ProjectStylesConfig;
592
592
  //#endregion
593
593
  export { isLikeC4JsonConfig as _, LikeC4ProjectConfig as a, LikeC4ProjectJsonConfig as c, defineConfig as d, defineGenerators as f, isLikeC4Config as g, defineThemeColor as h, IncludeConfig as i, LikeC4StylesConfig as l, defineTheme as m, GeneratorFnContext as n, LikeC4ProjectConfigInput as o, defineStyle as p, GeneratorFnParams as r, LikeC4ProjectConfigOps as s, GeneratorFn as t, LikeC4StylesConfigInput as u, isLikeC4NonJsonConfig as v };