agent-whiteboard 1.1.0 → 1.2.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/CHANGELOG.md +21 -0
- package/README.md +49 -4
- package/dist/client/assets/{abnfDiagram-VCTEODGH-CcuBIZ5h.js → abnfDiagram-VCTEODGH-Dj8sd_5g.js} +1 -1
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CpMRoWIY.js → architectureDiagram-5GKGNRK7-B1QyVL0F.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-Dee0m4lz.js → blockDiagram-I7D4REHJ-CmU2SSFe.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-D_qs3YTM.js → c4Diagram-7LVT6UL2-DWmhp77c.js} +1 -1
- package/dist/client/assets/channel-C9ni1Via.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-CBwQ-uNF.js → chunk-2Q5K7J3B-CQLo8Sbv.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-yGvVHapR.js → chunk-5VM5RSS4-fJTWmTTt.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-BzFUf98n.js → chunk-F27PBJKO-DqzEf5gi.js} +1 -1
- package/dist/client/assets/{chunk-IMKFNOWR-D-Zj1GaL.js → chunk-IMKFNOWR-CMamLTz3.js} +1 -1
- package/dist/client/assets/{chunk-JWPE2WC7-C8Aj4MVR.js → chunk-JWPE2WC7-tyYPyD43.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-DZP2a-yV.js → chunk-POPQ4Y6H-XdY4rO_V.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-COihS1MQ.js → chunk-SVP7TREG-COvqzqaO.js} +1 -1
- package/dist/client/assets/{chunk-TICWLB2K-DNZTRqyJ.js → chunk-TICWLB2K-BsJSFuPC.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-BC_9L4PF.js → chunk-XXDRQBXY-HfVrYBJb.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-DktNEiGC.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-DktNEiGC.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-DrJ8c1cV.js → cose-bilkent-JH36ORCC-UXGdwSjS.js} +1 -1
- package/dist/client/assets/{cynefin-OW5HDTMX-CMVAR4fd.js → cynefin-OW5HDTMX-PWlPYnpn.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CdAQ0Lst.js → cynefinDiagram-5FMLGOSQ-CYE5H1wR.js} +1 -1
- package/dist/client/assets/{dagre-GXQ25YYZ-CybK0L_u.js → dagre-GXQ25YYZ-DaknBOKq.js} +1 -1
- package/dist/client/assets/{diagram-S7CK7UJ4-CHjTv5Sr.js → diagram-S7CK7UJ4-Dz7rZHxF.js} +1 -1
- package/dist/client/assets/{diagram-UQ7AKVKN-DfypPsGR.js → diagram-UQ7AKVKN-DzCi6tiS.js} +1 -1
- package/dist/client/assets/{diagram-VSXAHHWV-DHsmmCug.js → diagram-VSXAHHWV-TlUzhXgv.js} +1 -1
- package/dist/client/assets/{diagram-VX7I27RA-CHZoTi9k.js → diagram-VX7I27RA-Ds7jdzK7.js} +1 -1
- package/dist/client/assets/{diagram-Z3DM3KII-Ceb2h13y.js → diagram-Z3DM3KII-C--JD7cf.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-BlZ247wB.js → ebnfDiagram-PWID7BFC-Dw5OM-dL.js} +1 -1
- package/dist/client/assets/{erDiagram-RLTQ6QDP-BQdw-U-S.js → erDiagram-RLTQ6QDP-DXalBHjA.js} +1 -1
- package/dist/client/assets/{flowDiagram-HODETNUW-DjUWHA94.js → flowDiagram-HODETNUW-DcI3UqyE.js} +1 -1
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CXu2s5vq.js → ganttDiagram-EL5Y4UJY-DyrkIo6c.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-CwlsB28k.js → gitGraphDiagram-WWUBYQGX-fJKfGRcg.js} +1 -1
- package/dist/client/assets/index-CIhkXT_z.js +19 -0
- package/dist/client/assets/index-DEiH2AE7.css +1 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-C7nvTbsQ.js → infoDiagram-27XIBGKW-Cijiqswb.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DGFXG874.js → ishikawaDiagram-5VMMS53U-C1WqWU2l.js} +1 -1
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-BDdRMcmq.js → journeyDiagram-3NMN7TZE-7j05mbLR.js} +1 -1
- package/dist/client/assets/{kanban-definition-UXKFOSKX-C3fnvfeO.js → kanban-definition-UXKFOSKX-D5mGDfs_.js} +1 -1
- package/dist/client/assets/{layout-BfegUiqt.js → layout-KEin06-H.js} +1 -1
- package/dist/client/assets/{mermaid.core-DioArgDk.js → mermaid.core-CLvSDmrA.js} +5 -5
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-CFCbAUC0.js → mindmap-definition-YA3MSWOX-BsCqKd_d.js} +1 -1
- package/dist/client/assets/{pegDiagram-XKGWAZYB-B1ULJH6S.js → pegDiagram-XKGWAZYB-Du5lDU3W.js} +1 -1
- package/dist/client/assets/{pieDiagram-E7YTZNPT-B9H3HosU.js → pieDiagram-E7YTZNPT-hjv5Ao6B.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-eWc3HHkM.js → quadrantDiagram-AXDQQJYC-DNon8LWK.js} +1 -1
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-DT7c-KwW.js → railroadDiagram-O6MQD6OU-yNZz2zxo.js} +1 -1
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-Dk1yVWV5.js → requirementDiagram-BXWQKSXE-CZiiEUHW.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-B5a__hiX.js → sankeyDiagram-P5KCCOFB-D-u8ZQUV.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CkCIByRS.js → sequenceDiagram-WJ2MYXX4-BxjTf3q9.js} +1 -1
- package/dist/client/assets/{sizeCapture-INFHLROL-CnZIW94r.js → sizeCapture-INFHLROL-Dt4Wg8C5.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-89Sfaoz9.js → stateDiagram-D77RDMKH-B8BM6dln.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-MJauX84T.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-C7m88XIh.js → swimlanes-42K2YHIH-eGWrsWAA.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BYFu8tyL.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-BHKHgHq9.js → timeline-definition-24CTP7MA-CAM-3Qj9.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-BqKaRdWu.js → vennDiagram-4TSXK5OY-CuFEwwD0.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-XiDVRZV5.js → wardleyDiagram-VM6X3IG4-DI5yCVh0.js} +1 -1
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CxP4dIVd.js → xychartDiagram-S5SC5T6Z-BI0Bn-OQ.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/app.js +2 -0
- package/dist/server/export-html.js +4 -0
- package/dist/server/mcp.js +19 -4
- package/dist/server/quiz-submission.js +116 -0
- package/dist/server/quiz.js +110 -0
- package/dist/server/render-core.js +3 -2
- package/dist/server/routes/quiz.js +12 -0
- package/dist/server/routes/render.js +4 -4
- package/dist/server/validate.js +14 -0
- package/package.json +1 -1
- package/dist/client/assets/channel-9qggtmY_.js +0 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-BUnGzX-0.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BUnGzX-0.js +0 -1
- package/dist/client/assets/index-CFelVSRu.js +0 -19
- package/dist/client/assets/index-GF8Uj64S.css +0 -1
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CP--cdl-.js +0 -1
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DmG2scPu.js +0 -8
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Quiz payload parsing + validation (F44, F45, F47 in docs/03 §10).
|
|
2
|
+
//
|
|
3
|
+
// A quiz is a single-frame `render()` payload: JSON describing questions with
|
|
4
|
+
// predefined options. Mode is derived from the answer key (F45): every
|
|
5
|
+
// question has a `correct` option → "inline" (client scores); none do →
|
|
6
|
+
// "deferred" (the agent scores via wait_quiz); a mix is rejected.
|
|
7
|
+
const WEIGHT_EPSILON = 1e-6;
|
|
8
|
+
function isRecord(v) {
|
|
9
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
10
|
+
}
|
|
11
|
+
function fail(error) {
|
|
12
|
+
return { ok: false, error: `invalid quiz payload: ${error}` };
|
|
13
|
+
}
|
|
14
|
+
export function parseQuizPayload(payload) {
|
|
15
|
+
let raw;
|
|
16
|
+
try {
|
|
17
|
+
raw = JSON.parse(payload);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return fail("payload must be valid JSON");
|
|
21
|
+
}
|
|
22
|
+
if (!isRecord(raw))
|
|
23
|
+
return fail("payload must be a JSON object");
|
|
24
|
+
if (raw.title !== undefined && typeof raw.title !== "string")
|
|
25
|
+
return fail("title must be a string");
|
|
26
|
+
if (!Array.isArray(raw.questions) || raw.questions.length === 0) {
|
|
27
|
+
return fail("questions must be a non-empty array");
|
|
28
|
+
}
|
|
29
|
+
const questionIds = new Set();
|
|
30
|
+
let keyedCount = 0;
|
|
31
|
+
for (const [qi, q] of raw.questions.entries()) {
|
|
32
|
+
const where = `questions[${qi}]`;
|
|
33
|
+
if (!isRecord(q))
|
|
34
|
+
return fail(`${where} must be an object`);
|
|
35
|
+
if (typeof q.id !== "string" || q.id === "")
|
|
36
|
+
return fail(`${where}.id must be a non-empty string`);
|
|
37
|
+
if (questionIds.has(q.id))
|
|
38
|
+
return fail(`duplicate question id "${q.id}"`);
|
|
39
|
+
questionIds.add(q.id);
|
|
40
|
+
if (typeof q.text !== "string" || q.text === "")
|
|
41
|
+
return fail(`${where}.text must be a non-empty string`);
|
|
42
|
+
if (q.kind !== "single" && q.kind !== "multiple")
|
|
43
|
+
return fail(`${where}.kind must be "single" or "multiple"`);
|
|
44
|
+
if (q.scoring !== undefined && q.scoring !== "all_or_nothing" && q.scoring !== "partial") {
|
|
45
|
+
return fail(`${where}.scoring must be "all_or_nothing" or "partial"`);
|
|
46
|
+
}
|
|
47
|
+
if (q.scoring === "partial" && q.kind !== "multiple") {
|
|
48
|
+
return fail(`${where}: partial scoring is only valid for kind "multiple"`);
|
|
49
|
+
}
|
|
50
|
+
if (q.points !== undefined && (typeof q.points !== "number" || !Number.isFinite(q.points) || q.points <= 0)) {
|
|
51
|
+
return fail(`${where}.points must be a positive number`);
|
|
52
|
+
}
|
|
53
|
+
if (!Array.isArray(q.options) || q.options.length < 2) {
|
|
54
|
+
return fail(`${where}.options must be an array of at least 2 options`);
|
|
55
|
+
}
|
|
56
|
+
const optionIds = new Set();
|
|
57
|
+
let correctCount = 0;
|
|
58
|
+
let weightSum = 0;
|
|
59
|
+
let weightedCount = 0;
|
|
60
|
+
for (const [oi, o] of q.options.entries()) {
|
|
61
|
+
const ow = `${where}.options[${oi}]`;
|
|
62
|
+
if (!isRecord(o))
|
|
63
|
+
return fail(`${ow} must be an object`);
|
|
64
|
+
if (typeof o.id !== "string" || o.id === "")
|
|
65
|
+
return fail(`${ow}.id must be a non-empty string`);
|
|
66
|
+
if (optionIds.has(o.id))
|
|
67
|
+
return fail(`duplicate option id "${o.id}" in question "${q.id}"`);
|
|
68
|
+
optionIds.add(o.id);
|
|
69
|
+
if (typeof o.text !== "string" || o.text === "")
|
|
70
|
+
return fail(`${ow}.text must be a non-empty string`);
|
|
71
|
+
if (o.correct !== undefined && typeof o.correct !== "boolean")
|
|
72
|
+
return fail(`${ow}.correct must be a boolean`);
|
|
73
|
+
if (o.weight !== undefined) {
|
|
74
|
+
if (typeof o.weight !== "number" || !Number.isFinite(o.weight) || o.weight <= 0) {
|
|
75
|
+
return fail(`${ow}.weight must be a positive number`);
|
|
76
|
+
}
|
|
77
|
+
if (o.correct !== true)
|
|
78
|
+
return fail(`${ow}: weight is only valid on a correct option`);
|
|
79
|
+
if (q.scoring !== "partial")
|
|
80
|
+
return fail(`${ow}: weight requires scoring "partial"`);
|
|
81
|
+
weightSum += o.weight;
|
|
82
|
+
weightedCount++;
|
|
83
|
+
}
|
|
84
|
+
if (o.correct === true)
|
|
85
|
+
correctCount++;
|
|
86
|
+
}
|
|
87
|
+
if (correctCount > 0)
|
|
88
|
+
keyedCount++;
|
|
89
|
+
if (correctCount > 0 && q.kind === "single" && correctCount !== 1) {
|
|
90
|
+
return fail(`question "${q.id}" is single-choice but has ${correctCount} correct options`);
|
|
91
|
+
}
|
|
92
|
+
if (correctCount > 0 && q.scoring === "partial") {
|
|
93
|
+
if (weightedCount !== correctCount) {
|
|
94
|
+
return fail(`question "${q.id}": every correct option needs a weight under partial scoring`);
|
|
95
|
+
}
|
|
96
|
+
if (Math.abs(weightSum - 1) > WEIGHT_EPSILON) {
|
|
97
|
+
return fail(`question "${q.id}": correct option weights must sum to 1 (got ${weightSum})`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (keyedCount !== 0 && keyedCount !== raw.questions.length) {
|
|
102
|
+
return fail("answer key is mixed: either every question has a correct option (inline) or none does (deferred)");
|
|
103
|
+
}
|
|
104
|
+
return { ok: true, quiz: raw, mode: keyedCount === 0 ? "deferred" : "inline" };
|
|
105
|
+
}
|
|
106
|
+
/** Returns null on success, an error string on failure (validateFrame convention). */
|
|
107
|
+
export function validateQuizPayload(payload) {
|
|
108
|
+
const result = parseQuizPayload(payload);
|
|
109
|
+
return result.ok ? null : result.error;
|
|
110
|
+
}
|
|
@@ -5,7 +5,7 @@ import { cancelSlideshow } from "./slideshow.js";
|
|
|
5
5
|
import { broadcastReplace, broadcastStepFrames } from "./ws.js";
|
|
6
6
|
import { generateSnapshotId } from "./snapshot-writer.js";
|
|
7
7
|
import { assembleStepFramesPayload, persistContent } from "./persist.js";
|
|
8
|
-
import { validateFrame } from "./validate.js";
|
|
8
|
+
import { validateFrame, validateRenderPayload } from "./validate.js";
|
|
9
9
|
import { getCanvas, isStepSequence, seekStepFrame, setCanvas, setLastWorkspace, setStepFrames, stepCursor } from "./session.js";
|
|
10
10
|
import { appendFrame, commitBuilder, createBuilder } from "./step-frames-builder.js";
|
|
11
11
|
import { getViewport } from "./viewport-cache.js";
|
|
@@ -115,7 +115,8 @@ export function commitStepFramesResult(id, nodeToFrame) {
|
|
|
115
115
|
*/
|
|
116
116
|
export async function applyLoadedSnapshotResult(frames, workspace, title, nodeToFrame, snapshotId, rawPayload) {
|
|
117
117
|
for (const frame of frames) {
|
|
118
|
-
|
|
118
|
+
// A quiz is a single-frame render() type (F44): valid on its own, never inside a multi-frame sequence.
|
|
119
|
+
const validationError = frames.length === 1 ? await validateRenderPayload(frame.type, frame.payload) : await validateFrame(frame);
|
|
119
120
|
if (validationError) {
|
|
120
121
|
return { ok: false, error: validationError };
|
|
121
122
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { submitQuiz, waitForQuiz } from "../quiz-submission.js";
|
|
2
|
+
export function registerQuizRoutes(app) {
|
|
3
|
+
// Browser → server: the user's answers (and, for an inline quiz, the
|
|
4
|
+
// client-computed score). Resolves a pending wait_quiz, or is retained for the next one.
|
|
5
|
+
app.post("/quiz/submit", async (c) => {
|
|
6
|
+
const body = await c.req.json().catch(() => ({}));
|
|
7
|
+
const result = submitQuiz(body.answers, body.score);
|
|
8
|
+
return c.json(result, result.ok ? 200 : 400);
|
|
9
|
+
});
|
|
10
|
+
// REST twin of the MCP wait_quiz tool.
|
|
11
|
+
app.post("/wait-quiz", async (c) => c.json(await waitForQuiz()));
|
|
12
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { signalClick, signalDone, waitForClick, waitForDone } from "../interaction.js";
|
|
2
2
|
import { clearCanvas } from "../session.js";
|
|
3
3
|
import { broadcast } from "../ws.js";
|
|
4
|
-
import { FRAME_TYPES, nodeActionsSchema, nodeToFrameSchema,
|
|
4
|
+
import { FRAME_TYPES, RENDER_TYPES, nodeActionsSchema, nodeToFrameSchema, validateRenderPayload } from "../validate.js";
|
|
5
5
|
import { cancelSlideshow } from "../slideshow.js";
|
|
6
6
|
import { appendFrameAndBroadcast, commitRenderResult, commitStepFramesResult, initStepFramesResult, seekAndBroadcast, stepAndBroadcast, validateWorkspaceInput, } from "../render-core.js";
|
|
7
7
|
import { setViewport } from "../viewport-cache.js";
|
|
@@ -17,13 +17,13 @@ export function registerRenderRoutes(app) {
|
|
|
17
17
|
if (typeof body.payload !== "string") {
|
|
18
18
|
return c.json({ ok: false, error: "payload must be a string" }, 400);
|
|
19
19
|
}
|
|
20
|
-
if (!
|
|
21
|
-
return c.json({ ok: false, error: `type must be one of: ${
|
|
20
|
+
if (!RENDER_TYPES.includes(body.type)) {
|
|
21
|
+
return c.json({ ok: false, error: `type must be one of: ${RENDER_TYPES.join(", ")}` }, 400);
|
|
22
22
|
}
|
|
23
23
|
const type = body.type;
|
|
24
24
|
const { payload } = body;
|
|
25
25
|
const title = body.options?.title;
|
|
26
|
-
const validationError = await
|
|
26
|
+
const validationError = await validateRenderPayload(type, payload);
|
|
27
27
|
if (validationError) {
|
|
28
28
|
return c.json({ ok: false, error: validationError });
|
|
29
29
|
}
|
package/dist/server/validate.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Server-side payload validation helpers.
|
|
2
2
|
import mermaid from "mermaid";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
+
import { validateQuizPayload } from "./quiz.js";
|
|
4
5
|
/**
|
|
5
6
|
* Shared shape schemas for `node_actions` (wait_click) and `node_to_frame`
|
|
6
7
|
* (commit_step_frames) — the single implementation both MCP's zod
|
|
@@ -138,3 +139,16 @@ export async function validateFrame(frame) {
|
|
|
138
139
|
}
|
|
139
140
|
return null;
|
|
140
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Types accepted by render() — the frame types plus "quiz" (F44). Quiz is
|
|
144
|
+
* deliberately NOT a FRAME_TYPE: it is a single interactive page, not
|
|
145
|
+
* something that makes sense inside a slideshow or step-frames sequence
|
|
146
|
+
* (wait_quiz hands back one submission), so validateFrame() keeps rejecting it.
|
|
147
|
+
*/
|
|
148
|
+
export const RENDER_TYPES = [...FRAME_TYPES, "quiz"];
|
|
149
|
+
/** The one validator for render() payloads, shared by POST /render and the MCP `render` tool. */
|
|
150
|
+
export async function validateRenderPayload(type, payload) {
|
|
151
|
+
if (type === "quiz")
|
|
152
|
+
return validateQuizPayload(payload);
|
|
153
|
+
return validateFrame({ type, payload });
|
|
154
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-whiteboard",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A domain-agnostic interactive whiteboard for AI teacher agents — render diagrams, math, charts, and HTML to a local browser tab via MCP tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a0 as o,a1 as n}from"./mermaid.core-DioArgDk.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-TICWLB2K-DNZTRqyJ.js";import{_ as i}from"./mermaid.core-DioArgDk.js";import"./chunk-5VM5RSS4-yGvVHapR.js";import"./chunk-XXDRQBXY-BC_9L4PF.js";import"./chunk-POPQ4Y6H-DZP2a-yV.js";import"./chunk-F27PBJKO-BzFUf98n.js";import"./index-CFelVSRu.js";import"./step-BEQzeS8V.js";var f={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{f as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-TICWLB2K-DNZTRqyJ.js";import{_ as i}from"./mermaid.core-DioArgDk.js";import"./chunk-5VM5RSS4-yGvVHapR.js";import"./chunk-XXDRQBXY-BC_9L4PF.js";import"./chunk-POPQ4Y6H-DZP2a-yV.js";import"./chunk-F27PBJKO-BzFUf98n.js";import"./index-CFelVSRu.js";import"./step-BEQzeS8V.js";var f={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{f as diagram};
|