kennel 0.2.44 → 0.2.45

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 (85) hide show
  1. package/dist/core/api-client.d.ts +1 -1
  2. package/dist/core/api-client.js +35 -2
  3. package/dist/core/runtime.js +548 -99
  4. package/dist/llm/worker.js +11 -2
  5. package/dist/notes/command.js +20 -4
  6. package/dist/package/preview.d.ts +1 -1
  7. package/dist/package/preview.js +760 -495
  8. package/dist/site/hot-viewer.js +4 -4
  9. package/dist/site/server-plugins.js +468 -30
  10. package/dist/site/viewer.d.ts +0 -3
  11. package/dist/site/viewer.js +11 -41
  12. package/dist/tui/launcher.d.ts +11 -0
  13. package/dist/{site/terminal.js → tui/launcher.js} +60 -15
  14. package/package.json +2 -2
  15. package/web/assets/{abnfDiagram-VRR7QNED-ooA_TyhC.js → abnfDiagram-VRR7QNED-D8mHNUwf.js} +1 -1
  16. package/web/assets/{arc-DqQkY48J.js → arc-DORR-Lbn.js} +1 -1
  17. package/web/assets/{architectureDiagram-ZJ3FMSHR-DaXzRGP0.js → architectureDiagram-ZJ3FMSHR-CnmL2DAX.js} +1 -1
  18. package/web/assets/ask-tray-KUTWZ4MV-VQJJAsDn.js +1 -0
  19. package/web/assets/{blockDiagram-677ZJIJ3-Br5Y_dbP.js → blockDiagram-677ZJIJ3-_SWUT5nP.js} +1 -1
  20. package/web/assets/{c4Diagram-LMCZKHZV-CWIy0S0N.js → c4Diagram-LMCZKHZV-r7ghc180.js} +1 -1
  21. package/web/assets/channel-r9-1szjb.js +1 -0
  22. package/web/assets/{chunk-2Q5K7J3B-8dxcuNwr.js → chunk-2Q5K7J3B-D_LeMwFJ.js} +1 -1
  23. package/web/assets/{chunk-32BRIVSS-DB27hz0Y.js → chunk-32BRIVSS-AeVZw1It.js} +1 -1
  24. package/web/assets/{chunk-5VM5RSS4-CTNxGtbA.js → chunk-5VM5RSS4-Bp_epQ8r.js} +1 -1
  25. package/web/assets/{chunk-EX3LRPZG-oKNLktOC.js → chunk-EX3LRPZG-Dz4n-DeM.js} +1 -1
  26. package/web/assets/{chunk-JWPE2WC7-DeQNmWoS.js → chunk-JWPE2WC7-B0MQp8TQ.js} +1 -1
  27. package/web/assets/{chunk-MOJQB5TN-BrW33Mrb.js → chunk-MOJQB5TN-Bkomqk1x.js} +1 -1
  28. package/web/assets/{chunk-RYQCIY6F-DEkTU6j-.js → chunk-RYQCIY6F-B0F7WMyE.js} +1 -1
  29. package/web/assets/{chunk-V7JOEXUC-BuDLgwdB.js → chunk-V7JOEXUC-BDifU9oY.js} +1 -1
  30. package/web/assets/{chunk-VR4S4FIN-BsNgrrKe.js → chunk-VR4S4FIN-Bgd4HCG_.js} +1 -1
  31. package/web/assets/{chunk-XXDRQBXY-DjT1Bydl.js → chunk-XXDRQBXY-BK8FhRs4.js} +1 -1
  32. package/web/assets/classDiagram-OUVF2IWQ-L_jmDmNd.js +1 -0
  33. package/web/assets/classDiagram-v2-EOCWNBFH-L_jmDmNd.js +1 -0
  34. package/web/assets/client-5Q4VI7ZT-BkTtFalV.js +52 -0
  35. package/web/assets/{cose-bilkent-JH36ORCC-BtAklxrd.js → cose-bilkent-JH36ORCC-Dm3k2U47.js} +1 -1
  36. package/web/assets/{cynefin-VYW2F7L2-DabtZWZy.js → cynefin-VYW2F7L2-DCnilF1f.js} +1 -1
  37. package/web/assets/{cynefinDiagram-TSTJHNR4-DVk8uQ8L.js → cynefinDiagram-TSTJHNR4-BrulEEQ9.js} +1 -1
  38. package/web/assets/{dagre-VKFMJZFB-CiAbBCor.js → dagre-VKFMJZFB-Dda61i4h.js} +1 -1
  39. package/web/assets/{diagram-FQU43EPY-DWp-OzJz.js → diagram-FQU43EPY-sTmDEDMM.js} +1 -1
  40. package/web/assets/{diagram-G47NLZAW-YDllS_1P.js → diagram-G47NLZAW-d-KQnPrm.js} +1 -1
  41. package/web/assets/{diagram-NH7WQ7WH-BH3l4yRj.js → diagram-NH7WQ7WH-DcRxa_ps.js} +1 -1
  42. package/web/assets/{diagram-OA4YK3LP-CszBvxdr.js → diagram-OA4YK3LP-CYzWtWvV.js} +1 -1
  43. package/web/assets/{diagram-WEI45ONY-bEhZeER6.js → diagram-WEI45ONY-FI3V_N07.js} +1 -1
  44. package/web/assets/document-view-TGFRNHKS-VSJS3BGw.js +24 -0
  45. package/web/assets/{ebnfDiagram-CCIWWBDH-DlpoUUO5.js → ebnfDiagram-CCIWWBDH-DcvVmQhu.js} +1 -1
  46. package/web/assets/{entity-search-page-YP4SPMBC-WryWZNPk.js → entity-search-page-RIYQYIJJ-Bed3y-5Q.js} +5 -5
  47. package/web/assets/{erDiagram-Q63AITRT-DROgehIM.js → erDiagram-Q63AITRT-DI5DBlBp.js} +1 -1
  48. package/web/assets/{flowDiagram-23GEKE2U-63pYiBzl.js → flowDiagram-23GEKE2U-Bz1AbRxB.js} +1 -1
  49. package/web/assets/{ganttDiagram-NO4QXBWP-tc34wKHJ.js → ganttDiagram-NO4QXBWP-ChKlhxeo.js} +1 -1
  50. package/web/assets/{gitGraphDiagram-IHSO6WYX-GOjqt583.js → gitGraphDiagram-IHSO6WYX-BtTqLSyY.js} +1 -1
  51. package/web/assets/{index-qmu99cjp.js → index-CDAH4UPU.js} +157 -157
  52. package/web/assets/{infoDiagram-FWYZ7A6U-CD5BwkLQ.js → infoDiagram-FWYZ7A6U-COpIz9uZ.js} +1 -1
  53. package/web/assets/{ishikawaDiagram-FXEZZL3T-yIweY6wR.js → ishikawaDiagram-FXEZZL3T-CB7Bdsfr.js} +1 -1
  54. package/web/assets/{journeyDiagram-5HDEW3XC-D3MeUGvn.js → journeyDiagram-5HDEW3XC-BMytnJBE.js} +1 -1
  55. package/web/assets/{kanban-definition-HUTT4EX6-CnZ5N79y.js → kanban-definition-HUTT4EX6-BFS4G0g-.js} +1 -1
  56. package/web/assets/{linear-s5G6iOMz.js → linear-DMUO2qBp.js} +1 -1
  57. package/web/assets/{linked-session-header-DOEX4FYM-CtTOXcZn.js → linked-session-header-7BUTWROP-DzEcA4Fq.js} +1 -1
  58. package/web/assets/{mermaid.core-BpUKp9r_.js → mermaid.core-BAj-Ltr-.js} +4 -4
  59. package/web/assets/{mindmap-definition-LN4V7U3C-Bp2QH5sN.js → mindmap-definition-LN4V7U3C-CjymOEvH.js} +1 -1
  60. package/web/assets/{pegDiagram-2B236MQR-lx1jDUmt.js → pegDiagram-2B236MQR-D64jiUPu.js} +1 -1
  61. package/web/assets/{pieDiagram-ENE6RG2P--kf2YNbw.js → pieDiagram-ENE6RG2P-CCbI5U6o.js} +1 -1
  62. package/web/assets/{plugin-host-modules-BKbxlu7U.js → plugin-host-modules-D7pHtNJn.js} +2 -2
  63. package/web/assets/{project-search-page-TZG7AZBQ-3W40ayYn.js → project-search-page-O6YRLDGU-1bPrifgb.js} +2 -2
  64. package/web/assets/{quadrantDiagram-ABIIQ3AL-Vr7zWQYV.js → quadrantDiagram-ABIIQ3AL-B7dN_Kn5.js} +1 -1
  65. package/web/assets/{railroadDiagram-RFXS5EU6-CqWD8KUC.js → railroadDiagram-RFXS5EU6-BPjAzqcL.js} +1 -1
  66. package/web/assets/{requirementDiagram-TGXJPOKE-BHUBdOVh.js → requirementDiagram-TGXJPOKE-BFhnnUWa.js} +1 -1
  67. package/web/assets/{sankeyDiagram-HTMAVEWB-Cw_ZddWI.js → sankeyDiagram-HTMAVEWB-W2UguUjW.js} +1 -1
  68. package/web/assets/{selection-popup-ABYH3A27-Gc-RFSWj.js → selection-popup-ABYH3A27-DsiLbG7S.js} +4 -4
  69. package/web/assets/{sequenceDiagram-DBY2YBRQ-CyCbkAfM.js → sequenceDiagram-DBY2YBRQ-DcOakOD4.js} +1 -1
  70. package/web/assets/{sizeCapture-X5ZJPWSS-BG6RM8rb.js → sizeCapture-X5ZJPWSS-D3N248Z6.js} +1 -1
  71. package/web/assets/{stateDiagram-2N3HPSRC-DKpZl5UU.js → stateDiagram-2N3HPSRC-Cir3yiDe.js} +1 -1
  72. package/web/assets/{stateDiagram-v2-6OUMAXLB-DHUy-0iS.js → stateDiagram-v2-6OUMAXLB-BwL0KYLn.js} +1 -1
  73. package/web/assets/{swimlanes-5IMT3BWC-D14uyHMH.js → swimlanes-5IMT3BWC-Dhq7FmZr.js} +2 -2
  74. package/web/assets/swimlanesDiagram-G3AALYLV-D4q-nPpB.js +8 -0
  75. package/web/assets/{timeline-definition-FHXFAJF6-f4WPhEXS.js → timeline-definition-FHXFAJF6-CMa1wjsI.js} +1 -1
  76. package/web/assets/{vennDiagram-L72KCM5P-lr4A8guw.js → vennDiagram-L72KCM5P-DvglazwQ.js} +1 -1
  77. package/web/assets/{wardleyDiagram-EHGQE667-CR-Im585.js → wardleyDiagram-EHGQE667-DcogrL32.js} +1 -1
  78. package/web/assets/{xychartDiagram-FW5EYKEG-DeNQfP7k.js → xychartDiagram-FW5EYKEG-BlsDcr_U.js} +1 -1
  79. package/web/index.html +1 -1
  80. package/dist/site/terminal.d.ts +0 -14
  81. package/web/assets/ask-tray-KUTWZ4MV-Ckn1y1Zw.js +0 -24
  82. package/web/assets/channel-BQxXBpeY.js +0 -1
  83. package/web/assets/classDiagram-OUVF2IWQ-BT1TSwZs.js +0 -1
  84. package/web/assets/classDiagram-v2-EOCWNBFH-BT1TSwZs.js +0 -1
  85. package/web/assets/swimlanesDiagram-G3AALYLV-C5riej52.js +0 -8
@@ -2,25 +2,9 @@ import { execFileSync } from "node:child_process";
2
2
  import { existsSync, realpathSync, statSync } from "node:fs";
3
3
  import { createServer } from "node:net";
4
4
  import { dirname, isAbsolute, relative, resolve } from "node:path";
5
- import { readExternalPlugins } from "../plugins/external.js";
6
5
  import { previewKind } from "./kinds.js";
7
- import { openPreview, previewTerminal } from "./terminal.js";
8
- /** Installed-plugin view links for the terminal menu; each is hyperlinked. */
9
- export function pluginViewLinks(viewerUrl, root) {
10
- return readExternalPlugins().flatMap((plugin) => {
11
- const view = (subpath) => {
12
- const url = new URL(viewerUrl);
13
- url.pathname = `/folder/${encodeBase64Url(root)}/views/${encodeURIComponent(plugin.id)}${subpath ? `/${encodeURIComponent(subpath)}` : ""}`;
14
- // A query `folder` makes the route parser ignore the path and select Notes.
15
- url.searchParams.delete("folder");
16
- return url.href;
17
- };
18
- const views = [{ id: plugin.id, url: view() }];
19
- for (const item of plugin.views ?? [])
20
- views.push({ id: `${plugin.id} · ${item.label}`, url: view(item.subpath) });
21
- return views;
22
- });
23
- }
6
+ import { folderUrl } from "../core/api-client.js";
7
+ import { openPreview, previewTerminal } from "../tui/launcher.js";
24
8
  export function viewerFolder(root, value) {
25
9
  return resolve(value ?? root);
26
10
  }
@@ -55,13 +39,6 @@ const loopbackHosts = new Set([
55
39
  function isLoopbackHost(host) {
56
40
  return loopbackHosts.has(host) || host.startsWith("127.");
57
41
  }
58
- function encodeBase64Url(value) {
59
- return Buffer.from(value, "utf8")
60
- .toString("base64")
61
- .replaceAll("+", "-")
62
- .replaceAll("/", "_")
63
- .replaceAll("=", "");
64
- }
65
42
  export function splitViewerArgs(input) {
66
43
  let hasHost = false;
67
44
  let hasRoot = false;
@@ -182,20 +159,13 @@ export function splitViewerArgs(input) {
182
159
  export function popUrl(host, port, options) {
183
160
  const scheme = options.tailscale ? "https" : "http";
184
161
  const authority = options.tailscale ? host : `${host}:${port}`;
185
- const url = new URL(`${scheme}://${authority}/`);
186
- if (options.plugin) {
187
- const { id, subpath } = options.plugin;
188
- url.pathname = `/folder/${encodeBase64Url(options.root)}/views/${encodeURIComponent(id)}${subpath ? `/${encodeURIComponent(subpath)}` : ""}`;
189
- return url.href;
190
- }
191
- if (!options.target) {
192
- url.pathname = `/folder/${encodeBase64Url(options.root)}/notes`;
193
- return url.href;
194
- }
195
- url.pathname = `/folder/${encodeBase64Url(options.root)}/document/${encodeBase64Url(relative(options.root, options.target))}`;
196
- if (options.watch)
197
- url.searchParams.set("watch", "1");
198
- return url.href;
162
+ return folderUrl(`${scheme}://${authority}/`, options.root, {
163
+ view: options.plugin
164
+ ? { pluginId: options.plugin.id, subpath: options.plugin.subpath }
165
+ : undefined,
166
+ document: options.target ? relative(options.root, options.target) : undefined,
167
+ watch: options.watch,
168
+ }).href;
199
169
  }
200
170
  function viewerPortWasExplicit(input) {
201
171
  return input.some((arg) => arg === "--port" || arg.startsWith("--port="));
@@ -329,7 +299,7 @@ export async function viewer(input, plugin) {
329
299
  existing.kernelKey === plugins.key &&
330
300
  isSameOrDescendant(existing.root, options.root)))) {
331
301
  const viewerUrl = popUrl(displayHost, options.port, options);
332
- const terminal = previewTerminal(viewerUrl, options, pluginViewLinks(viewerUrl, options.root));
302
+ const terminal = previewTerminal(viewerUrl, options);
333
303
  if (options.open)
334
304
  openPreview(viewerUrl);
335
305
  try {
@@ -359,7 +329,7 @@ export async function viewer(input, plugin) {
359
329
  execFileSync("tailscale", ["serve", "--bg", "--yes", options.port]);
360
330
  }
361
331
  const viewerUrl = popUrl(displayHost, options.port, options);
362
- const terminal = previewTerminal(viewerUrl, options, pluginViewLinks(viewerUrl, options.root));
332
+ const terminal = previewTerminal(viewerUrl, options);
363
333
  if (options.open)
364
334
  openPreview(viewerUrl);
365
335
  try {
@@ -0,0 +1,11 @@
1
+ import { openPreview } from "kennel-preview/runtime";
2
+ export { openPreview };
3
+ /** Folder dashboard; closing a reused preview never stops its server. */
4
+ export declare function previewTerminal(url: string, target: {
5
+ root: string;
6
+ target?: string;
7
+ }): {
8
+ close: () => void;
9
+ closed: Promise<void>;
10
+ interactive: boolean;
11
+ };
@@ -1,7 +1,10 @@
1
- // packages/preview/src/terminal.ts
2
- import { execFile, execFileSync } from "node:child_process";
1
+ // packages/cli/src/tui/launcher.ts
2
+ import { execFile as execFile2, execFileSync } from "node:child_process";
3
3
  import { basename } from "node:path";
4
4
  import { clearScreenDown, cursorTo, emitKeypressEvents } from "node:readline";
5
+
6
+ // packages/preview/src/runtime.ts
7
+ import { execFile } from "node:child_process";
5
8
  function openPreview(url) {
6
9
  const command = process.platform === "darwin" ? "/usr/bin/open" : process.platform === "win32" ? "explorer.exe" : "xdg-open";
7
10
  execFile(command, [url], (error) => {
@@ -9,11 +12,57 @@ function openPreview(url) {
9
12
  console.error(`Could not open browser: ${error.message}`);
10
13
  });
11
14
  }
15
+
16
+ // packages/cli/src/tui/launcher.ts
17
+ import { readExternalPlugins } from "../plugins/external.js";
18
+
19
+ // packages/plugins/src/client.ts
20
+ function folderPathId(path) {
21
+ const bytes = new TextEncoder().encode(path);
22
+ let binary = "";
23
+ for (const byte of bytes)
24
+ binary += String.fromCharCode(byte);
25
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
26
+ }
27
+
28
+ // packages/api/src/shared/viewer-route.ts
29
+ function folderPathId2(path) {
30
+ return folderPathId(path);
31
+ }
32
+ function folderHomeHref(folder) {
33
+ return `/folder/${folderPathId2(folder)}`;
34
+ }
35
+ function folderPluginHref(folder, pluginId, subpath = "") {
36
+ const base = `/folder/${folderPathId2(folder)}/views/${encodeURIComponent(pluginId)}`;
37
+ return subpath ? `${base}/${encodeURIComponent(subpath)}` : base;
38
+ }
39
+ function folderUrl(base, folder, options = {}) {
40
+ const current = new URL(base);
41
+ current.pathname = options.view ? folderPluginHref(folder, options.view.pluginId, options.view.subpath) : options.document ? folderDocumentHref(folder, options.document) : folderHomeHref(folder);
42
+ current.searchParams.delete("folder");
43
+ if (options.document && options.watch && !options.view) {
44
+ current.searchParams.set("watch", "1");
45
+ }
46
+ return current;
47
+ }
48
+ function folderDocumentHref(folder, document) {
49
+ return `/folder/${folderPathId2(folder)}/document/${folderPathId2(document)}`;
50
+ }
51
+ // packages/cli/src/tui/launcher.ts
52
+ function pluginViewLinks(viewerUrl, root) {
53
+ return readExternalPlugins().flatMap((plugin) => {
54
+ const view = (subpath) => folderUrl(viewerUrl, root, { view: { pluginId: plugin.id, subpath } }).href;
55
+ const views = [{ id: plugin.id, url: view() }];
56
+ for (const item of plugin.views ?? [])
57
+ views.push({ id: `${plugin.id} · ${item.label}`, url: view(item.subpath) });
58
+ return views;
59
+ });
60
+ }
12
61
  function copyPreviewLink(url) {
13
62
  const command = process.platform === "darwin" ? "/usr/bin/pbcopy" : process.platform === "win32" ? "clip" : process.env.WAYLAND_DISPLAY ? "wl-copy" : "xclip";
14
63
  const args = command === "xclip" ? ["-selection", "clipboard"] : [];
15
64
  return new Promise((done, fail) => {
16
- const child = execFile(command, args, (error) => error ? fail(error) : done());
65
+ const child = execFile2(command, args, (error) => error ? fail(error) : done());
17
66
  child.stdin?.on("error", fail);
18
67
  child.stdin?.end(url);
19
68
  });
@@ -31,8 +80,9 @@ function repositoryName(folder) {
31
80
  return;
32
81
  }
33
82
  }
34
- function previewTerminal(url, target, startShare, views) {
83
+ function previewTerminal(url, target) {
35
84
  url = new URL(url).href;
85
+ const views = pluginViewLinks(url, target.root);
36
86
  const input = process.stdin;
37
87
  const output = process.stdout;
38
88
  const terminal = Boolean(output.isTTY && process.env.TERM !== "dumb");
@@ -91,7 +141,10 @@ ${href}`) => terminal ? `\x1B]8;;${href}\x07${accent(label)}\x1B]8;;\x07` : plai
91
141
  status = "Preparing a private Tailscale link…";
92
142
  render();
93
143
  try {
94
- share ??= startShare(password);
144
+ share ??= (async () => {
145
+ const { startPreviewShare } = await import(new URL("../package/preview.js", import.meta.url).href);
146
+ return startPreviewShare({ ...target, ...password ? { password: true } : {} });
147
+ })();
95
148
  let active;
96
149
  try {
97
150
  active = await share;
@@ -147,7 +200,7 @@ ${href}`) => terminal ? `\x1B]8;;${href}\x07${accent(label)}\x1B]8;;\x07` : plai
147
200
  resolveClosed();
148
201
  };
149
202
  const actions = [
150
- ...(views ?? []).map((view) => ({ label: view.id, run: () => {
203
+ ...views.map((view) => ({ label: view.id, run: () => {
151
204
  openPreview(view.url);
152
205
  status = "Browser open requested.";
153
206
  }, view: view.url })),
@@ -214,15 +267,7 @@ ${link(name)}
214
267
  `);
215
268
  return { close, closed, interactive };
216
269
  }
217
-
218
- // packages/cli/src/site/terminal.ts
219
- function previewTerminal2(url, target, views) {
220
- return previewTerminal(url, target, async (password = false) => {
221
- const { startPreviewShare } = await import(new URL("../package/preview.js", import.meta.url).href);
222
- return startPreviewShare({ ...target, ...password ? { password: true } : {} });
223
- }, views);
224
- }
225
270
  export {
226
271
  openPreview,
227
- previewTerminal2 as previewTerminal
272
+ previewTerminal
228
273
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kennel",
3
- "version": "0.2.44",
3
+ "version": "0.2.45",
4
4
  "description": "Open-source pop-up previews for AI output: markdown, HTML artifacts, email, images, code, tables, notes, and calendars, from the terminal or your agent session.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -69,7 +69,7 @@
69
69
  "effect": "^3.19.7",
70
70
  "esbuild": "^0.27.0",
71
71
  "kennel-mcp": "https://registry.npmjs.org/%40raggle-ai%2fkennel-mcp/-/kennel-mcp-0.1.8.tgz",
72
- "kennel-plugins": "0.1.21",
72
+ "kennel-plugins": "0.1.22",
73
73
  "koffi": "^3.3.1",
74
74
  "lucide-react": "^0.562.0",
75
75
  "radix-ui": "^1.6.7",
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-BrW33Mrb.js";import{p as f}from"./chunk-JWPE2WC7-DeQNmWoS.js";import{_ as n,l as o}from"./mermaid.core-BpUKp9r_.js";import{b as c,M as d}from"./cynefin-VYW2F7L2-DabtZWZy.js";import"./index-qmu99cjp.js";import"./react-DELVxLrX.js";import"./markdown-BP-54rPU.js";import"./tanstack-CRaSxWtK.js";var v=c().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new d(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},C={parser:R,db:a,renderer:u,styles:p};export{C as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-Bkomqk1x.js";import{p as f}from"./chunk-JWPE2WC7-B0MQp8TQ.js";import{_ as n,l as o}from"./mermaid.core-BAj-Ltr-.js";import{b as c,M as d}from"./cynefin-VYW2F7L2-DCnilF1f.js";import"./index-CDAH4UPU.js";import"./react-DELVxLrX.js";import"./markdown-BP-54rPU.js";import"./tanstack-CRaSxWtK.js";var v=c().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new d(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},C={parser:R,db:a,renderer:u,styles:p};export{C as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as sn,ab as on,ac as fn}from"./mermaid.core-BpUKp9r_.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as sn,ab as on,ac as fn}from"./mermaid.core-BAj-Ltr-.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};