schematex 0.3.2 → 0.3.3
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/ai/ai-sdk.cjs +25 -25
- package/dist/ai/ai-sdk.d.cts +1 -1
- package/dist/ai/ai-sdk.d.ts +1 -1
- package/dist/ai/ai-sdk.js +20 -20
- package/dist/ai/index.cjs +28 -28
- package/dist/ai/index.d.cts +1 -1
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.js +20 -20
- package/dist/browser.cjs +22 -22
- package/dist/browser.js +20 -20
- package/dist/{chunk-LFZZ4NCP.cjs → chunk-3WNW5Y7P.cjs} +48 -8
- package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
- package/dist/{chunk-MKKFIPKU.cjs → chunk-55UEHL57.cjs} +46 -46
- package/dist/{chunk-MKKFIPKU.cjs.map → chunk-55UEHL57.cjs.map} +1 -1
- package/dist/{chunk-BJ65PKDU.js → chunk-5U2W3HQA.js} +3 -3
- package/dist/{chunk-BJ65PKDU.js.map → chunk-5U2W3HQA.js.map} +1 -1
- package/dist/{chunk-75BMFCP5.cjs → chunk-5UCXMYE7.cjs} +44 -44
- package/dist/{chunk-75BMFCP5.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
- package/dist/{chunk-F6OROIHS.js → chunk-66XQBGX7.js} +3 -3
- package/dist/{chunk-F6OROIHS.js.map → chunk-66XQBGX7.js.map} +1 -1
- package/dist/{chunk-HIQPEAL7.js → chunk-6TIN33CA.js} +3 -3
- package/dist/{chunk-HIQPEAL7.js.map → chunk-6TIN33CA.js.map} +1 -1
- package/dist/{chunk-RNGYXGHS.js → chunk-6YUP3QMA.js} +19 -19
- package/dist/{chunk-RNGYXGHS.js.map → chunk-6YUP3QMA.js.map} +1 -1
- package/dist/{chunk-C3IVD7DI.cjs → chunk-7EWFVNYD.cjs} +25 -25
- package/dist/{chunk-C3IVD7DI.cjs.map → chunk-7EWFVNYD.cjs.map} +1 -1
- package/dist/{chunk-56LXBM45.js → chunk-AC3XH3LB.js} +4 -4
- package/dist/{chunk-56LXBM45.js.map → chunk-AC3XH3LB.js.map} +1 -1
- package/dist/{chunk-YTEEZV6J.cjs → chunk-APV4AWQ5.cjs} +422 -422
- package/dist/{chunk-YTEEZV6J.cjs.map → chunk-APV4AWQ5.cjs.map} +1 -1
- package/dist/{chunk-UK7JF5QB.cjs → chunk-AVIKQZSX.cjs} +37 -37
- package/dist/{chunk-UK7JF5QB.cjs.map → chunk-AVIKQZSX.cjs.map} +1 -1
- package/dist/{chunk-OK5RYX55.cjs → chunk-CWZKP3CJ.cjs} +26 -26
- package/dist/{chunk-OK5RYX55.cjs.map → chunk-CWZKP3CJ.cjs.map} +1 -1
- package/dist/{chunk-2J2QWNGI.js → chunk-FIVUMDLF.js} +26 -7
- package/dist/chunk-FIVUMDLF.js.map +1 -0
- package/dist/{chunk-ZTSO3S4P.js → chunk-FO7BLCEW.js} +3 -3
- package/dist/{chunk-ZTSO3S4P.js.map → chunk-FO7BLCEW.js.map} +1 -1
- package/dist/{chunk-6BKUD5EJ.js → chunk-GLFBHQSQ.js} +4 -4
- package/dist/{chunk-6BKUD5EJ.js.map → chunk-GLFBHQSQ.js.map} +1 -1
- package/dist/{chunk-ZNLEUL7T.js → chunk-GVCPFBAV.js} +4 -4
- package/dist/chunk-GVCPFBAV.js.map +1 -0
- package/dist/{chunk-KUXOHLGC.cjs → chunk-HOI6QKC6.cjs} +52 -52
- package/dist/{chunk-KUXOHLGC.cjs.map → chunk-HOI6QKC6.cjs.map} +1 -1
- package/dist/{chunk-L2KUGWFR.cjs → chunk-IAEABLIV.cjs} +46 -46
- package/dist/{chunk-L2KUGWFR.cjs.map → chunk-IAEABLIV.cjs.map} +1 -1
- package/dist/{chunk-M5ZC3LFJ.js → chunk-IQRRZPVZ.js} +3 -3
- package/dist/{chunk-M5ZC3LFJ.js.map → chunk-IQRRZPVZ.js.map} +1 -1
- package/dist/{chunk-H4CJTKEH.js → chunk-MNOO7STY.js} +5 -5
- package/dist/{chunk-H4CJTKEH.js.map → chunk-MNOO7STY.js.map} +1 -1
- package/dist/{chunk-XI6JOG76.cjs → chunk-N56YC75X.cjs} +45 -45
- package/dist/{chunk-XI6JOG76.cjs.map → chunk-N56YC75X.cjs.map} +1 -1
- package/dist/{chunk-X4F6VVEJ.js → chunk-PAG3BNIV.js} +3 -3
- package/dist/{chunk-X4F6VVEJ.js.map → chunk-PAG3BNIV.js.map} +1 -1
- package/dist/{chunk-W7GIQTJV.cjs → chunk-PG6TDGKI.cjs} +21 -21
- package/dist/{chunk-W7GIQTJV.cjs.map → chunk-PG6TDGKI.cjs.map} +1 -1
- package/dist/{chunk-7MVDN5UC.cjs → chunk-Q5OFA4I2.cjs} +35 -35
- package/dist/{chunk-7MVDN5UC.cjs.map → chunk-Q5OFA4I2.cjs.map} +1 -1
- package/dist/{chunk-BUN3CRMP.cjs → chunk-QOLBWCF5.cjs} +65 -65
- package/dist/{chunk-BUN3CRMP.cjs.map → chunk-QOLBWCF5.cjs.map} +1 -1
- package/dist/{chunk-2UJAVPA4.cjs → chunk-QXL7AY2H.cjs} +26 -26
- package/dist/{chunk-2UJAVPA4.cjs.map → chunk-QXL7AY2H.cjs.map} +1 -1
- package/dist/{chunk-WHJXRLFD.js → chunk-SYYBKDL7.js} +48 -8
- package/dist/chunk-SYYBKDL7.js.map +1 -0
- package/dist/{chunk-SE23X5OE.js → chunk-TQU44E46.js} +4 -4
- package/dist/{chunk-SE23X5OE.js.map → chunk-TQU44E46.js.map} +1 -1
- package/dist/{chunk-SFSZUOFT.js → chunk-U3KRKXF7.js} +3 -3
- package/dist/{chunk-SFSZUOFT.js.map → chunk-U3KRKXF7.js.map} +1 -1
- package/dist/{chunk-EYHD7LV3.cjs → chunk-UDGU73RL.cjs} +129 -129
- package/dist/{chunk-EYHD7LV3.cjs.map → chunk-UDGU73RL.cjs.map} +1 -1
- package/dist/{chunk-M3R6RCXY.js → chunk-UDJ2KN2A.js} +3 -3
- package/dist/{chunk-M3R6RCXY.js.map → chunk-UDJ2KN2A.js.map} +1 -1
- package/dist/{chunk-BJWMPPEA.js → chunk-UT4TIDAA.js} +3 -3
- package/dist/{chunk-BJWMPPEA.js.map → chunk-UT4TIDAA.js.map} +1 -1
- package/dist/{chunk-RODV6PC4.cjs → chunk-UWRTV6IV.cjs} +7 -7
- package/dist/{chunk-RODV6PC4.cjs.map → chunk-UWRTV6IV.cjs.map} +1 -1
- package/dist/{chunk-IT2TVXC7.js → chunk-WTF6JXHN.js} +4 -4
- package/dist/{chunk-IT2TVXC7.js.map → chunk-WTF6JXHN.js.map} +1 -1
- package/dist/{chunk-7BEJHG43.js → chunk-X5QJO4ZD.js} +3 -3
- package/dist/{chunk-7BEJHG43.js.map → chunk-X5QJO4ZD.js.map} +1 -1
- package/dist/{chunk-NFT6VW73.js → chunk-XV2DTN6G.js} +3 -3
- package/dist/{chunk-NFT6VW73.js.map → chunk-XV2DTN6G.js.map} +1 -1
- package/dist/{chunk-XUEROLSB.cjs → chunk-YUPG2M3I.cjs} +16 -16
- package/dist/chunk-YUPG2M3I.cjs.map +1 -0
- package/dist/{chunk-K5QG53GT.cjs → chunk-ZCW7YH3C.cjs} +26 -26
- package/dist/{chunk-K5QG53GT.cjs.map → chunk-ZCW7YH3C.cjs.map} +1 -1
- package/dist/{chunk-GYTWJ6VB.cjs → chunk-ZFNZ2FYI.cjs} +67 -48
- package/dist/chunk-ZFNZ2FYI.cjs.map +1 -0
- package/dist/{chunk-3YXXZ4LT.cjs → chunk-ZZJDGGC3.cjs} +33 -33
- package/dist/{chunk-3YXXZ4LT.cjs.map → chunk-ZZJDGGC3.cjs.map} +1 -1
- package/dist/diagrams/blockdiagram/index.cjs +6 -6
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/blockdiagram/index.js +2 -2
- package/dist/diagrams/circuit/index.cjs +8 -8
- package/dist/diagrams/circuit/index.d.cts +1 -1
- package/dist/diagrams/circuit/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.js +2 -2
- package/dist/diagrams/ecomap/index.cjs +8 -8
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/ecomap/index.js +3 -3
- package/dist/diagrams/entity/index.cjs +6 -6
- package/dist/diagrams/entity/index.d.cts +1 -1
- package/dist/diagrams/entity/index.d.ts +1 -1
- package/dist/diagrams/entity/index.js +2 -2
- package/dist/diagrams/fishbone/index.cjs +8 -8
- package/dist/diagrams/fishbone/index.d.cts +1 -1
- package/dist/diagrams/fishbone/index.d.ts +1 -1
- package/dist/diagrams/fishbone/index.js +2 -2
- package/dist/diagrams/flowchart/index.cjs +8 -8
- package/dist/diagrams/flowchart/index.d.cts +2 -2
- package/dist/diagrams/flowchart/index.d.ts +2 -2
- package/dist/diagrams/flowchart/index.js +2 -2
- package/dist/diagrams/genogram/index.cjs +10 -10
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/genogram/index.js +3 -3
- package/dist/diagrams/ladder/index.cjs +6 -6
- package/dist/diagrams/ladder/index.d.cts +1 -1
- package/dist/diagrams/ladder/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.js +2 -2
- package/dist/diagrams/logic/index.cjs +6 -6
- package/dist/diagrams/logic/index.d.cts +1 -1
- package/dist/diagrams/logic/index.d.ts +1 -1
- package/dist/diagrams/logic/index.js +2 -2
- package/dist/diagrams/orgchart/index.cjs +7 -7
- package/dist/diagrams/orgchart/index.d.cts +1 -1
- package/dist/diagrams/orgchart/index.d.ts +1 -1
- package/dist/diagrams/orgchart/index.js +2 -2
- package/dist/diagrams/pedigree/index.cjs +8 -8
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/pedigree/index.js +3 -3
- package/dist/diagrams/phylo/index.cjs +7 -7
- package/dist/diagrams/phylo/index.d.cts +1 -1
- package/dist/diagrams/phylo/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.js +2 -2
- package/dist/diagrams/sld/index.cjs +6 -6
- package/dist/diagrams/sld/index.d.cts +1 -1
- package/dist/diagrams/sld/index.d.ts +1 -1
- package/dist/diagrams/sld/index.js +2 -2
- package/dist/diagrams/sociogram/index.cjs +7 -7
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/sociogram/index.js +3 -3
- package/dist/diagrams/timing/index.cjs +5 -5
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/timing/index.js +2 -2
- package/dist/diagrams/venn/index.cjs +9 -9
- package/dist/diagrams/venn/index.d.cts +1 -1
- package/dist/diagrams/venn/index.d.ts +1 -1
- package/dist/diagrams/venn/index.js +2 -2
- package/dist/{index-dWDwG6BW.d.ts → index-D3u6vcA4.d.ts} +1 -1
- package/dist/{index-BrLxEzSQ.d.cts → index-bdfj6FpQ.d.cts} +1 -1
- package/dist/index.cjs +41 -41
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +19 -19
- package/dist/react.cjs +20 -20
- package/dist/react.js +19 -19
- package/dist/{types-BtiUg7Gx.d.cts → types-DnU2UlWz.d.cts} +2 -0
- package/dist/{types-BtiUg7Gx.d.ts → types-DnU2UlWz.d.ts} +2 -0
- package/package.json +1 -1
- package/dist/chunk-2J2QWNGI.js.map +0 -1
- package/dist/chunk-GYTWJ6VB.cjs.map +0 -1
- package/dist/chunk-LFZZ4NCP.cjs.map +0 -1
- package/dist/chunk-WHJXRLFD.js.map +0 -1
- package/dist/chunk-XUEROLSB.cjs.map +0 -1
- package/dist/chunk-ZNLEUL7T.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
|
|
4
4
|
|
|
5
5
|
// src/core/legend-parser.ts
|
|
6
6
|
var VALID_POSITIONS = /* @__PURE__ */ new Set([
|
|
@@ -358,7 +358,7 @@ function renderBottomInline(spec, sections, bySection, anchor, theme, config, pa
|
|
|
358
358
|
if (ri === 0) {
|
|
359
359
|
if (isTitleRow && sec.label) {
|
|
360
360
|
out.push(
|
|
361
|
-
|
|
361
|
+
chunk3WNW5Y7P_cjs.text(
|
|
362
362
|
{ x: startX, y: titleBaseline, class: "schematex-legend-title" },
|
|
363
363
|
sec.label
|
|
364
364
|
)
|
|
@@ -367,7 +367,7 @@ function renderBottomInline(spec, sections, bySection, anchor, theme, config, pa
|
|
|
367
367
|
if (startX + w > usedRight) usedRight = startX + w;
|
|
368
368
|
} else if (sec.label) {
|
|
369
369
|
out.push(
|
|
370
|
-
|
|
370
|
+
chunk3WNW5Y7P_cjs.text(
|
|
371
371
|
{ x: startX, y: sectionBaseline, class: "schematex-legend-section" },
|
|
372
372
|
sec.label
|
|
373
373
|
)
|
|
@@ -378,7 +378,7 @@ function renderBottomInline(spec, sections, bySection, anchor, theme, config, pa
|
|
|
378
378
|
const cx = startX + itemColX + cell.x;
|
|
379
379
|
const swatchY = yMid - SWATCH_H / 2;
|
|
380
380
|
const swatch = renderSwatch(cell.item, cx, swatchY, SWATCH_W, SWATCH_H, theme);
|
|
381
|
-
const label =
|
|
381
|
+
const label = chunk3WNW5Y7P_cjs.text(
|
|
382
382
|
{
|
|
383
383
|
x: cx + SWATCH_W + SWATCH_LABEL_GAP,
|
|
384
384
|
y: labelBaseline,
|
|
@@ -387,7 +387,7 @@ function renderBottomInline(spec, sections, bySection, anchor, theme, config, pa
|
|
|
387
387
|
cell.item.label
|
|
388
388
|
);
|
|
389
389
|
out.push(
|
|
390
|
-
|
|
390
|
+
chunk3WNW5Y7P_cjs.group(
|
|
391
391
|
{
|
|
392
392
|
class: "schematex-legend-row",
|
|
393
393
|
"data-legend-key": cell.item.key,
|
|
@@ -408,7 +408,7 @@ function renderBottomInline(spec, sections, bySection, anchor, theme, config, pa
|
|
|
408
408
|
);
|
|
409
409
|
const minRight = effectiveCanvasW - padding;
|
|
410
410
|
if (minRight > usedRight) usedRight = minRight;
|
|
411
|
-
const svg =
|
|
411
|
+
const svg = chunk3WNW5Y7P_cjs.group({ class: "schematex-legend" }, out);
|
|
412
412
|
const bbox = {
|
|
413
413
|
x: startX,
|
|
414
414
|
y: startY,
|
|
@@ -451,7 +451,7 @@ function renderBottomRight(spec, sections, bySection, anchor, theme, config, pad
|
|
|
451
451
|
if (showTitle) {
|
|
452
452
|
cursorY += ROW_H / 2;
|
|
453
453
|
out.push(
|
|
454
|
-
|
|
454
|
+
chunk3WNW5Y7P_cjs.text(
|
|
455
455
|
{
|
|
456
456
|
x: x + CARD_PAD,
|
|
457
457
|
y: cursorY + TITLE_FONT_SIZE / 2 - 2,
|
|
@@ -468,7 +468,7 @@ function renderBottomRight(spec, sections, bySection, anchor, theme, config, pad
|
|
|
468
468
|
if (s.title && s.id !== "_default") {
|
|
469
469
|
cursorY += ROW_H / 2;
|
|
470
470
|
out.push(
|
|
471
|
-
|
|
471
|
+
chunk3WNW5Y7P_cjs.text(
|
|
472
472
|
{
|
|
473
473
|
x: x + CARD_PAD,
|
|
474
474
|
y: cursorY + SECTION_FONT_SIZE / 2 - 1,
|
|
@@ -483,7 +483,7 @@ function renderBottomRight(spec, sections, bySection, anchor, theme, config, pad
|
|
|
483
483
|
const yMid = cursorY + ROW_H / 2;
|
|
484
484
|
const swatchY = yMid - SWATCH_H / 2;
|
|
485
485
|
const swatch = renderSwatch(it, x + CARD_PAD, swatchY, SWATCH_W, SWATCH_H, theme);
|
|
486
|
-
const label =
|
|
486
|
+
const label = chunk3WNW5Y7P_cjs.text(
|
|
487
487
|
{
|
|
488
488
|
x: x + CARD_PAD + SWATCH_W + SWATCH_LABEL_GAP,
|
|
489
489
|
y: yMid + FONT_SIZE / 2 - 2,
|
|
@@ -492,7 +492,7 @@ function renderBottomRight(spec, sections, bySection, anchor, theme, config, pad
|
|
|
492
492
|
it.label
|
|
493
493
|
);
|
|
494
494
|
out.push(
|
|
495
|
-
|
|
495
|
+
chunk3WNW5Y7P_cjs.group(
|
|
496
496
|
{
|
|
497
497
|
class: "schematex-legend-row",
|
|
498
498
|
"data-legend-key": it.key,
|
|
@@ -504,7 +504,7 @@ function renderBottomRight(spec, sections, bySection, anchor, theme, config, pad
|
|
|
504
504
|
cursorY += ROW_H;
|
|
505
505
|
}
|
|
506
506
|
}
|
|
507
|
-
const svg =
|
|
507
|
+
const svg = chunk3WNW5Y7P_cjs.group({ class: "schematex-legend" }, out);
|
|
508
508
|
return { svg, bbox: { x, y, w: boxW, h: boxH } };
|
|
509
509
|
}
|
|
510
510
|
function renderSwatch(item, x, y, w, h, theme) {
|
|
@@ -534,23 +534,23 @@ function renderShapeSwatch(item, x, y, w, h, theme) {
|
|
|
534
534
|
const innerR = Math.min(w, h) / 2 - 1;
|
|
535
535
|
switch (shape) {
|
|
536
536
|
case "circle":
|
|
537
|
-
return
|
|
537
|
+
return chunk3WNW5Y7P_cjs.circle({ cx, cy, r: innerR, fill: usedFill, stroke: usedStroke });
|
|
538
538
|
case "diamond": {
|
|
539
|
-
return
|
|
539
|
+
return chunk3WNW5Y7P_cjs.polygon({
|
|
540
540
|
points: `${cx},${cy - innerR} ${cx + innerR},${cy} ${cx},${cy + innerR} ${cx - innerR},${cy}`,
|
|
541
541
|
fill: usedFill,
|
|
542
542
|
stroke: usedStroke
|
|
543
543
|
});
|
|
544
544
|
}
|
|
545
545
|
case "triangle": {
|
|
546
|
-
return
|
|
546
|
+
return chunk3WNW5Y7P_cjs.polygon({
|
|
547
547
|
points: `${cx},${cy - innerR} ${cx + innerR},${cy + innerR * 0.8} ${cx - innerR},${cy + innerR * 0.8}`,
|
|
548
548
|
fill: usedFill,
|
|
549
549
|
stroke: usedStroke
|
|
550
550
|
});
|
|
551
551
|
}
|
|
552
552
|
case "concentric-square": {
|
|
553
|
-
const inner =
|
|
553
|
+
const inner = chunk3WNW5Y7P_cjs.rect({
|
|
554
554
|
x: x + 3,
|
|
555
555
|
y: y + 3,
|
|
556
556
|
width: w - 6,
|
|
@@ -558,7 +558,7 @@ function renderShapeSwatch(item, x, y, w, h, theme) {
|
|
|
558
558
|
fill: usedFill,
|
|
559
559
|
stroke: usedStroke
|
|
560
560
|
});
|
|
561
|
-
const outer =
|
|
561
|
+
const outer = chunk3WNW5Y7P_cjs.rect({
|
|
562
562
|
x: x + 1,
|
|
563
563
|
y: y + 1,
|
|
564
564
|
width: w - 2,
|
|
@@ -570,14 +570,14 @@ function renderShapeSwatch(item, x, y, w, h, theme) {
|
|
|
570
570
|
return inner + outer;
|
|
571
571
|
}
|
|
572
572
|
case "concentric-circle": {
|
|
573
|
-
const innerC =
|
|
573
|
+
const innerC = chunk3WNW5Y7P_cjs.circle({
|
|
574
574
|
cx,
|
|
575
575
|
cy,
|
|
576
576
|
r: innerR - 2,
|
|
577
577
|
fill: usedFill,
|
|
578
578
|
stroke: usedStroke
|
|
579
579
|
});
|
|
580
|
-
const outerC =
|
|
580
|
+
const outerC = chunk3WNW5Y7P_cjs.circle({
|
|
581
581
|
cx,
|
|
582
582
|
cy,
|
|
583
583
|
r: innerR,
|
|
@@ -589,7 +589,7 @@ function renderShapeSwatch(item, x, y, w, h, theme) {
|
|
|
589
589
|
}
|
|
590
590
|
case "square":
|
|
591
591
|
default:
|
|
592
|
-
return
|
|
592
|
+
return chunk3WNW5Y7P_cjs.rect({
|
|
593
593
|
x: x + 1,
|
|
594
594
|
y: y + 1,
|
|
595
595
|
width: w - 2,
|
|
@@ -600,7 +600,7 @@ function renderShapeSwatch(item, x, y, w, h, theme) {
|
|
|
600
600
|
}
|
|
601
601
|
}
|
|
602
602
|
function renderFillSwatch(item, x, y, w, h, theme) {
|
|
603
|
-
return
|
|
603
|
+
return chunk3WNW5Y7P_cjs.rect({
|
|
604
604
|
x: x + 1,
|
|
605
605
|
y: y + 1,
|
|
606
606
|
width: w - 2,
|
|
@@ -618,7 +618,7 @@ function renderFillPatternSwatch(item, x, y, w, h, theme) {
|
|
|
618
618
|
const color = item.color ?? theme.fill;
|
|
619
619
|
const color2 = item.color2 ?? "transparent";
|
|
620
620
|
const stroke = theme.stroke;
|
|
621
|
-
const baseRect =
|
|
621
|
+
const baseRect = chunk3WNW5Y7P_cjs.rect({
|
|
622
622
|
x: innerX,
|
|
623
623
|
y: innerY,
|
|
624
624
|
width: innerW,
|
|
@@ -628,27 +628,27 @@ function renderFillPatternSwatch(item, x, y, w, h, theme) {
|
|
|
628
628
|
});
|
|
629
629
|
switch (pattern) {
|
|
630
630
|
case "half-left":
|
|
631
|
-
return baseRect +
|
|
631
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH, fill: color });
|
|
632
632
|
case "half-right":
|
|
633
|
-
return baseRect +
|
|
633
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH, fill: color });
|
|
634
634
|
case "half-top":
|
|
635
|
-
return baseRect +
|
|
635
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX, y: innerY, width: innerW, height: innerH / 2, fill: color });
|
|
636
636
|
case "half-bottom":
|
|
637
|
-
return baseRect +
|
|
637
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX, y: innerY + innerH / 2, width: innerW, height: innerH / 2, fill: color });
|
|
638
638
|
case "quad-tl":
|
|
639
|
-
return baseRect +
|
|
639
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });
|
|
640
640
|
case "quad-tr":
|
|
641
|
-
return baseRect +
|
|
641
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });
|
|
642
642
|
case "quad-bl":
|
|
643
|
-
return baseRect +
|
|
643
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });
|
|
644
644
|
case "quad-br":
|
|
645
|
-
return baseRect +
|
|
645
|
+
return baseRect + chunk3WNW5Y7P_cjs.rect({ x: innerX + innerW / 2, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });
|
|
646
646
|
case "striped":
|
|
647
647
|
case "carrier": {
|
|
648
648
|
const stripes = [baseRect];
|
|
649
649
|
const stripeW = 2;
|
|
650
650
|
for (let sx = innerX; sx < innerX + innerW; sx += stripeW * 2) {
|
|
651
|
-
stripes.push(
|
|
651
|
+
stripes.push(chunk3WNW5Y7P_cjs.rect({
|
|
652
652
|
x: sx,
|
|
653
653
|
y: innerY,
|
|
654
654
|
width: Math.min(stripeW, innerX + innerW - sx),
|
|
@@ -662,13 +662,13 @@ function renderFillPatternSwatch(item, x, y, w, h, theme) {
|
|
|
662
662
|
const dots = [baseRect];
|
|
663
663
|
const cy = innerY + innerH / 2;
|
|
664
664
|
for (let dx = innerX + 3; dx < innerX + innerW - 1; dx += 4) {
|
|
665
|
-
dots.push(
|
|
665
|
+
dots.push(chunk3WNW5Y7P_cjs.circle({ cx: dx, cy, r: 1, fill: color }));
|
|
666
666
|
}
|
|
667
667
|
return dots.join("");
|
|
668
668
|
}
|
|
669
669
|
case "full":
|
|
670
670
|
default:
|
|
671
|
-
return
|
|
671
|
+
return chunk3WNW5Y7P_cjs.rect({
|
|
672
672
|
x: innerX,
|
|
673
673
|
y: innerY,
|
|
674
674
|
width: innerW,
|
|
@@ -687,7 +687,7 @@ function renderLineSwatch(item, x, y, w, h, theme) {
|
|
|
687
687
|
const dash = patternDasharray(item.pattern);
|
|
688
688
|
if (item.pattern === "double") {
|
|
689
689
|
const off = Math.max(2, sw);
|
|
690
|
-
return
|
|
690
|
+
return chunk3WNW5Y7P_cjs.line({ x1, y1: cy - off, x2, y2: cy - off, stroke, "stroke-width": sw }) + chunk3WNW5Y7P_cjs.line({ x1, y1: cy + off, x2, y2: cy + off, stroke, "stroke-width": sw });
|
|
691
691
|
}
|
|
692
692
|
if (item.pattern === "wavy") {
|
|
693
693
|
const amp = Math.min(h / 3, 3);
|
|
@@ -701,7 +701,7 @@ function renderLineSwatch(item, x, y, w, h, theme) {
|
|
|
701
701
|
sx = nx;
|
|
702
702
|
up = !up;
|
|
703
703
|
}
|
|
704
|
-
return
|
|
704
|
+
return chunk3WNW5Y7P_cjs.path({ d: segs.join(" "), fill: "none", stroke, "stroke-width": sw });
|
|
705
705
|
}
|
|
706
706
|
const attrs = {
|
|
707
707
|
x1,
|
|
@@ -713,7 +713,7 @@ function renderLineSwatch(item, x, y, w, h, theme) {
|
|
|
713
713
|
"stroke-linecap": "round"
|
|
714
714
|
};
|
|
715
715
|
if (dash) attrs["stroke-dasharray"] = dash;
|
|
716
|
-
return
|
|
716
|
+
return chunk3WNW5Y7P_cjs.line(attrs);
|
|
717
717
|
}
|
|
718
718
|
function renderMarkerSwatch(item, x, y, w, h, theme) {
|
|
719
719
|
const cx = x + w / 2;
|
|
@@ -724,20 +724,20 @@ function renderMarkerSwatch(item, x, y, w, h, theme) {
|
|
|
724
724
|
case "X":
|
|
725
725
|
case "x": {
|
|
726
726
|
const r = Math.min(w, h) / 3;
|
|
727
|
-
return
|
|
727
|
+
return chunk3WNW5Y7P_cjs.line({ x1: cx - r, y1: cy - r, x2: cx + r, y2: cy + r, stroke: color, "stroke-width": 1.6, "stroke-linecap": "round" }) + chunk3WNW5Y7P_cjs.line({ x1: cx + r, y1: cy - r, x2: cx - r, y2: cy + r, stroke: color, "stroke-width": 1.6, "stroke-linecap": "round" });
|
|
728
728
|
}
|
|
729
729
|
case "arrow": {
|
|
730
730
|
const x1 = x + 2;
|
|
731
731
|
const x2 = x + w - 4;
|
|
732
|
-
return
|
|
732
|
+
return chunk3WNW5Y7P_cjs.line({ x1, y1: cy, x2, y2: cy, stroke: color, "stroke-width": 1.6, "stroke-linecap": "round" }) + chunk3WNW5Y7P_cjs.polygon({ points: `${x2},${cy - 3} ${x + w - 1},${cy} ${x2},${cy + 3}`, fill: color });
|
|
733
733
|
}
|
|
734
734
|
case "star":
|
|
735
|
-
return
|
|
735
|
+
return chunk3WNW5Y7P_cjs.text(
|
|
736
736
|
{ x: cx, y: cy + 4, "text-anchor": "middle", "font-size": 14, fill: color },
|
|
737
737
|
"\u2605"
|
|
738
738
|
);
|
|
739
739
|
case "slash":
|
|
740
|
-
return
|
|
740
|
+
return chunk3WNW5Y7P_cjs.line({
|
|
741
741
|
x1: cx - 4,
|
|
742
742
|
y1: cy + 5,
|
|
743
743
|
x2: cx + 4,
|
|
@@ -748,13 +748,13 @@ function renderMarkerSwatch(item, x, y, w, h, theme) {
|
|
|
748
748
|
case "P":
|
|
749
749
|
case "C":
|
|
750
750
|
case "E":
|
|
751
|
-
return
|
|
751
|
+
return chunk3WNW5Y7P_cjs.text(
|
|
752
752
|
{ x: cx, y: cy + 4, "text-anchor": "middle", "font-size": 11, "font-weight": "bold", fill: color },
|
|
753
753
|
marker
|
|
754
754
|
);
|
|
755
755
|
case "dot":
|
|
756
756
|
default:
|
|
757
|
-
return
|
|
757
|
+
return chunk3WNW5Y7P_cjs.circle({ cx, cy, r: 3, fill: color });
|
|
758
758
|
}
|
|
759
759
|
}
|
|
760
760
|
function renderEdgeSwatch(item, x, y, w, h, theme) {
|
|
@@ -786,7 +786,7 @@ function buildStyleBlock(theme, fontFamily) {
|
|
|
786
786
|
.schematex-legend-section { font-size: ${SECTION_FONT_SIZE}px; font-weight: 600; fill: ${theme.textMuted}; letter-spacing: 0.6px; }
|
|
787
787
|
.schematex-legend-label { font-size: ${FONT_SIZE}px; fill: ${theme.text}; dominant-baseline: alphabetic; }
|
|
788
788
|
`;
|
|
789
|
-
return
|
|
789
|
+
return chunk3WNW5Y7P_cjs.el("style", {}, css);
|
|
790
790
|
}
|
|
791
791
|
function capitalize(s) {
|
|
792
792
|
if (!s) return s;
|
|
@@ -796,5 +796,5 @@ function capitalize(s) {
|
|
|
796
796
|
exports.applyLegendOverrides = applyLegendOverrides;
|
|
797
797
|
exports.parseLegendDirective = parseLegendDirective;
|
|
798
798
|
exports.renderLegend = renderLegend;
|
|
799
|
-
//# sourceMappingURL=chunk-
|
|
800
|
-
//# sourceMappingURL=chunk-
|
|
799
|
+
//# sourceMappingURL=chunk-5UCXMYE7.cjs.map
|
|
800
|
+
//# sourceMappingURL=chunk-5UCXMYE7.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/legend-parser.ts","../src/core/legend.ts"],"names":["line","text","group","circle","polygon","rect","path","el"],"mappings":"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","file":"chunk-75BMFCP5.cjs","sourcesContent":["/**\n * Shared DSL directive parser for the unified Legend system.\n *\n * Diagram parsers call `parseLegendDirective(line, overrides)` for each\n * non-content line. If the line is a `legend.*` directive, it is consumed\n * (overrides mutated in place) and the function returns true. Otherwise it\n * returns false and the caller continues normal parsing.\n *\n * Recognized forms (see docs/reference/LEGEND-SYSTEM.md):\n *\n * legend: on | off | <position> | on <position>\n * legend.title: \"...\"\n * legend.position: <position>\n * legend.columns: <n>\n * legend.label <key>: \"...\"\n * legend.hide: a, b, c\n * legend.section <id>: \"...\"\n * legend.section <id>.hide: true|false\n * legend.item <id>: \"...\" (kind: ..., color: ..., pattern: ..., shape: ..., marker: ..., section: ...)\n */\n\nimport type {\n LegendItem,\n LegendItemKind,\n LegendLinePattern,\n LegendOverrides,\n LegendPosition,\n} from \"./types\";\n\nconst VALID_POSITIONS: ReadonlySet<LegendPosition> = new Set<LegendPosition>([\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"outside-right\",\n \"outside-bottom\",\n \"right\",\n \"bottom-center\",\n \"none\",\n]);\n\nconst VALID_KINDS: ReadonlySet<LegendItemKind> = new Set<LegendItemKind>([\n \"shape\",\n \"fill\",\n \"fill-pattern\",\n \"line\",\n \"marker\",\n \"edge\",\n]);\n\nconst VALID_PATTERNS: ReadonlySet<LegendLinePattern> = new Set<LegendLinePattern>([\n \"solid\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"wavy\",\n \"zigzag\",\n \"broken\",\n]);\n\nexport function parseLegendDirective(\n rawLine: string,\n overrides: LegendOverrides\n): boolean {\n const line = rawLine.trim();\n if (!line.toLowerCase().startsWith(\"legend\")) return false;\n\n // `legend: ...` shorthand (toggle / position keyword)\n const masterMatch = line.match(/^legend\\s*:\\s*(.+)$/i);\n if (masterMatch && !line.toLowerCase().startsWith(\"legend.\")) {\n return applyMaster(masterMatch[1].trim(), overrides);\n }\n\n // `legend.title: \"...\"`\n const titleMatch = line.match(/^legend\\.title\\s*:\\s*(.+)$/i);\n if (titleMatch) {\n overrides.title = unquote(titleMatch[1].trim());\n return true;\n }\n\n // `legend.position: <pos>`\n const posMatch = line.match(/^legend\\.position\\s*:\\s*(.+)$/i);\n if (posMatch) {\n const pos = posMatch[1].trim().toLowerCase();\n if (VALID_POSITIONS.has(pos as LegendPosition)) {\n overrides.position = pos as LegendPosition;\n return true;\n }\n return false;\n }\n\n // `legend.columns: N`\n const colsMatch = line.match(/^legend\\.columns\\s*:\\s*(\\d+)\\s*$/i);\n if (colsMatch) {\n overrides.columns = Number.parseInt(colsMatch[1], 10);\n return true;\n }\n\n // `legend.label <key>: \"...\"`\n const labelMatch = line.match(/^legend\\.label\\s+([^\\s:]+)\\s*:\\s*(.+)$/i);\n if (labelMatch) {\n overrides.labels ??= {};\n overrides.labels[labelMatch[1]] = unquote(labelMatch[2].trim());\n return true;\n }\n\n // `legend.hide: a, b, c`\n const hideMatch = line.match(/^legend\\.hide\\s*:\\s*(.+)$/i);\n if (hideMatch) {\n const keys = hideMatch[1]\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n overrides.hide = (overrides.hide ?? []).concat(keys);\n return true;\n }\n\n // `legend.section <id>.hide: true|false`\n const sectionHideMatch = line.match(\n /^legend\\.section\\s+([^\\s.]+)\\.hide\\s*:\\s*(true|false)\\s*$/i\n );\n if (sectionHideMatch) {\n const id = sectionHideMatch[1];\n const flag = sectionHideMatch[2].toLowerCase() === \"true\";\n overrides.sections ??= {};\n overrides.sections[id] = { ...(overrides.sections[id] ?? {}), hidden: flag };\n return true;\n }\n\n // `legend.section <id>: \"...\"` (rename)\n const sectionMatch = line.match(/^legend\\.section\\s+([^\\s:]+)\\s*:\\s*(.+)$/i);\n if (sectionMatch) {\n const id = sectionMatch[1];\n overrides.sections ??= {};\n overrides.sections[id] = {\n ...(overrides.sections[id] ?? {}),\n title: unquote(sectionMatch[2].trim()),\n };\n return true;\n }\n\n // `legend.item <id>: \"label\" (kind: X, color: Y, ...)`\n const itemMatch = line.match(\n /^legend\\.item\\s+([^\\s:]+)\\s*:\\s*\"([^\"]*)\"\\s*(?:\\(([^)]*)\\))?\\s*$/i\n );\n if (itemMatch) {\n const item = buildItem(itemMatch[1], itemMatch[2], itemMatch[3]);\n if (item) {\n overrides.added ??= [];\n overrides.added.push(item);\n return true;\n }\n }\n\n return false;\n}\n\nfunction applyMaster(value: string, overrides: LegendOverrides): boolean {\n const parts = value.split(/\\s+/).filter(Boolean);\n let consumed = false;\n for (const tok of parts) {\n const t = tok.toLowerCase();\n if (t === \"on\" || t === \"off\" || t === \"auto\") {\n overrides.mode = t;\n consumed = true;\n } else if (VALID_POSITIONS.has(t as LegendPosition)) {\n overrides.position = t as LegendPosition;\n // A position keyword implies on (unless explicitly off)\n if (overrides.mode !== \"off\") overrides.mode = \"on\";\n consumed = true;\n } else {\n return false;\n }\n }\n return consumed;\n}\n\nfunction buildItem(\n id: string,\n label: string,\n attrsRaw: string | undefined\n): LegendItem | null {\n const item: LegendItem = { key: id, label, kind: \"fill\" };\n if (!attrsRaw) return item;\n\n for (const part of attrsRaw.split(\",\")) {\n const eq = part.indexOf(\":\");\n if (eq < 0) continue;\n const k = part.slice(0, eq).trim().toLowerCase();\n const v = part.slice(eq + 1).trim();\n switch (k) {\n case \"kind\":\n if (VALID_KINDS.has(v as LegendItemKind)) item.kind = v as LegendItemKind;\n else return null;\n break;\n case \"color\":\n item.color = v;\n break;\n case \"color2\":\n item.color2 = v;\n break;\n case \"pattern\":\n if (VALID_PATTERNS.has(v as LegendLinePattern))\n item.pattern = v as LegendLinePattern;\n break;\n case \"shape\":\n item.shape = v;\n break;\n case \"marker\":\n item.marker = v;\n break;\n case \"section\":\n item.section = v;\n break;\n case \"stroke-width\":\n case \"strokewidth\": {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) item.strokeWidth = n;\n break;\n }\n default:\n // Unknown attribute — ignore silently to keep DSL forward-compatible.\n break;\n }\n }\n return item;\n}\n\nfunction unquote(s: string): string {\n const m = s.match(/^\"(.*)\"$/);\n return m ? m[1] : s;\n}\n","/**\n * Shared legend renderer.\n *\n * Pipeline:\n * buildXxxLegend(ast, theme) → auto LegendSpec\n * applyLegendOverrides(spec, o) → final LegendSpec\n * renderLegend(spec, ...) → { svg, bbox }\n *\n * Standard positions (others are silently aliased):\n * - \"bottom-inline\" (default) horizontal strip below the diagram, no box.\n * - \"bottom-right\" compact overlay anchored at bottom-right corner.\n * - \"none\" not rendered.\n */\n\nimport type { BaseTheme } from \"./theme\";\nimport type {\n LegendItem,\n LegendLinePattern,\n LegendOverrides,\n LegendPosition,\n LegendSection,\n LegendSpec,\n} from \"./types\";\nimport {\n el,\n group,\n rect,\n circle,\n line as lineEl,\n path as pathEl,\n polygon,\n text as textEl,\n} from \"./svg\";\n\n// ─── Public API ──────────────────────────────────────────────\n\nexport function applyLegendOverrides(\n auto: LegendSpec,\n overrides: LegendOverrides | undefined\n): LegendSpec {\n if (!overrides) return resolveAuto(auto);\n\n const sections = auto.sections.map((s) => {\n const o = overrides.sections?.[s.id];\n if (!o) return s;\n return { ...s, title: o.title ?? s.title, hidden: o.hidden ?? s.hidden };\n });\n\n const hideSet = new Set<string>(overrides.hide ?? []);\n const hiddenSectionIds = new Set<string>(\n sections.filter((s) => s.hidden).map((s) => s.id)\n );\n\n const baseItems = auto.items.filter((it) => {\n if (hideSet.has(it.key)) return false;\n if (it.section && hiddenSectionIds.has(it.section)) return false;\n return true;\n });\n\n const renamedBase = baseItems.map((it) => {\n const newLabel = overrides.labels?.[it.key];\n return newLabel === undefined ? it : { ...it, label: newLabel };\n });\n\n const added = (overrides.added ?? []).map((it) => ({\n ...it,\n section: it.section ?? \"custom\",\n }));\n\n let finalSections = sections;\n if (added.some((it) => it.section === \"custom\") &&\n !finalSections.some((s) => s.id === \"custom\")) {\n finalSections = [...finalSections, { id: \"custom\", title: \"Custom\" }];\n }\n\n const items = [...renamedBase, ...added];\n\n let mode = overrides.mode ?? auto.mode;\n if (mode === \"auto\") mode = items.length > 0 ? \"on\" : \"off\";\n\n return {\n mode,\n title: overrides.title ?? auto.title,\n position: overrides.position ?? auto.position,\n columns: overrides.columns ?? auto.columns,\n sections: finalSections,\n items,\n };\n}\n\nfunction resolveAuto(spec: LegendSpec): LegendSpec {\n if (spec.mode !== \"auto\") return spec;\n return { ...spec, mode: spec.items.length > 0 ? \"on\" : \"off\" };\n}\n\nexport interface LegendRenderResult {\n svg: string;\n bbox: { x: number; y: number; w: number; h: number };\n}\n\nexport interface LegendAnchor {\n canvasWidth: number;\n canvasHeight: number;\n /** Side margin from the canvas edge. Default 16. */\n padding?: number;\n /** Top offset reserved for diagram title (used by bottom-right anchoring). */\n titleHeight?: number;\n}\n\nexport interface LegendRenderConfig {\n fontFamily: string;\n fontSize: number;\n}\n\nconst ZERO_BBOX = { x: 0, y: 0, w: 0, h: 0 } as const;\n\n// Standardize legacy positions onto one of the 3 supported placements.\nfunction normalizePosition(p: LegendPosition): \"bottom-inline\" | \"bottom-right\" | \"none\" {\n switch (p) {\n case \"bottom-inline\":\n case \"outside-bottom\":\n case \"bottom-left\":\n case \"bottom-center\":\n return \"bottom-inline\";\n case \"bottom-right\":\n case \"outside-right\":\n case \"right\":\n case \"top-right\":\n case \"top-left\":\n return \"bottom-right\";\n case \"none\":\n default:\n return p === \"none\" ? \"none\" : \"bottom-inline\";\n }\n}\n\nconst FONT_SIZE = 11;\nconst SECTION_FONT_SIZE = 9;\nconst TITLE_FONT_SIZE = 12;\nconst SWATCH_W = 22;\nconst SWATCH_H = 12;\nconst SWATCH_LABEL_GAP = 8;\nconst ITEM_GAP = 18;\nconst SECTION_LABEL_GAP = 14;\nconst ROW_H = 18;\nconst INLINE_TOP_GAP = 14;\nconst INLINE_BOTTOM_PAD = 8;\nconst CARD_PAD = 4;\n// Width estimates per character (account for measured rendering, not just font-size).\nconst CHAR_W = FONT_SIZE * 0.6;\n// Section labels are uppercase with 0.6px letter-spacing → bigger glyph footprint.\nconst SECTION_CHAR_W = SECTION_FONT_SIZE * 0.85;\nconst TITLE_CHAR_W = TITLE_FONT_SIZE * 0.65;\n// Minimum effective canvas width for bottom-inline layout. If the diagram is\n// narrower, the legend (and the SVG viewBox) is widened to this value to avoid\n// excessive wrapping into 5+ rows.\nconst MIN_INLINE_WIDTH = 480;\n\nexport function renderLegend(\n spec: LegendSpec,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig\n): LegendRenderResult {\n if (spec.mode === \"off\" || spec.position === \"none\" || spec.items.length === 0) {\n return { svg: \"\", bbox: { ...ZERO_BBOX } };\n }\n\n const padding = anchor.padding ?? 16;\n const layout = normalizePosition(spec.position);\n\n // Group items by section, preserving order.\n const itemsBySection = new Map<string, LegendItem[]>();\n for (const it of spec.items) {\n const sid = it.section ?? \"_default\";\n const arr = itemsBySection.get(sid) ?? [];\n arr.push(it);\n itemsBySection.set(sid, arr);\n }\n\n const declared = spec.sections.length\n ? spec.sections.filter(\n (s) => !s.hidden && (itemsBySection.get(s.id)?.length ?? 0) > 0\n )\n : [{ id: \"_default\", title: \"\" } as LegendSection];\n\n const declaredIds = new Set(declared.map((s) => s.id));\n const orderedSections: LegendSection[] = [...declared];\n for (const [sid] of itemsBySection) {\n if (!declaredIds.has(sid) && (itemsBySection.get(sid)?.length ?? 0) > 0) {\n orderedSections.push({ id: sid, title: capitalize(sid) });\n }\n }\n\n const showTitle = !!spec.title && spec.title !== \"Legend\";\n\n if (layout === \"bottom-inline\") {\n return renderBottomInline(\n spec,\n orderedSections,\n itemsBySection,\n anchor,\n theme,\n config,\n padding,\n showTitle\n );\n }\n return renderBottomRight(\n spec,\n orderedSections,\n itemsBySection,\n anchor,\n theme,\n config,\n padding,\n showTitle\n );\n}\n\n// ─── bottom-inline: horizontal flow strip below canvas ───────\n//\n// Layout rules:\n// - Each section gets its own row (or rows). Sections never share a row.\n// - All sections share a fixed left \"label column\" so swatches line up.\n// - Items wrap within a section if they don't fit in one row; the\n// continuation row is indented past the label column.\n// - Optional title (when explicitly set by user) is rendered as its own\n// leading row, also left-aligned in the label column.\n// - If canvas is narrower than MIN_INLINE_WIDTH, the legend is rendered\n// at MIN_INLINE_WIDTH and the bbox reflects this — caller grows viewBox.\n\nfunction renderBottomInline(\n spec: LegendSpec,\n sections: LegendSection[],\n bySection: Map<string, LegendItem[]>,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig,\n padding: number,\n showTitle: boolean\n): LegendRenderResult {\n const effectiveCanvasW = Math.max(anchor.canvasWidth, MIN_INLINE_WIDTH);\n const startX = padding;\n const endX = effectiveCanvasW - padding;\n const availW = Math.max(120, endX - startX);\n const startY = anchor.canvasHeight + INLINE_TOP_GAP;\n\n // Determine label-column width: max of all section label widths (uppercase).\n let labelColW = 0;\n for (const s of sections) {\n if (!s.title || s.id === \"_default\") continue;\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n const lw = SECTION_CHAR_W * s.title.length;\n if (lw > labelColW) labelColW = lw;\n }\n if (showTitle) {\n const tw = TITLE_CHAR_W * spec.title.length;\n if (tw > labelColW) labelColW = tw;\n }\n // Add right-side gap between label column and items.\n const itemColX = labelColW > 0 ? labelColW + SECTION_LABEL_GAP : 0;\n const itemAvailW = Math.max(80, availW - itemColX);\n\n function itemWidth(it: LegendItem): number {\n return SWATCH_W + SWATCH_LABEL_GAP + Math.ceil(it.label.length * CHAR_W);\n }\n\n // For each section, pack its items into rows that fit in itemAvailW.\n type SectionRows = {\n label: string | null;\n rows: { item: LegendItem; x: number }[][];\n };\n const sectionRows: SectionRows[] = [];\n\n if (showTitle) {\n sectionRows.push({ label: spec.title, rows: [[]] }); // title-only row\n // Title is rendered without items; we'll treat the title text via labelCol.\n }\n\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n const rows: { item: LegendItem; x: number }[][] = [];\n let row: { item: LegendItem; x: number }[] = [];\n let cursor = 0;\n for (const it of items) {\n const w = itemWidth(it);\n const gap = row.length > 0 ? ITEM_GAP : 0;\n if (cursor > 0 && cursor + gap + w > itemAvailW) {\n rows.push(row);\n row = [];\n cursor = 0;\n }\n const x = cursor + (cursor > 0 ? gap : 0);\n row.push({ item: it, x });\n cursor = x + w;\n }\n if (row.length > 0) rows.push(row);\n const label = s.title && s.id !== \"_default\" ? s.title.toUpperCase() : null;\n sectionRows.push({ label, rows });\n }\n\n // Build SVG.\n const out: string[] = [];\n out.push(buildStyleBlock(theme, config.fontFamily));\n\n let cursorY = startY;\n let usedRight = 0;\n\n for (let si = 0; si < sectionRows.length; si++) {\n const sec = sectionRows[si];\n const isTitleRow = showTitle && si === 0;\n for (let ri = 0; ri < sec.rows.length; ri++) {\n const yMid = cursorY + ROW_H / 2;\n const labelBaseline = yMid + FONT_SIZE / 2 - 2;\n const sectionBaseline = yMid + SECTION_FONT_SIZE / 2 - 1;\n const titleBaseline = yMid + TITLE_FONT_SIZE / 2 - 2;\n\n // Section/title label only on the first row of the section.\n if (ri === 0) {\n if (isTitleRow && sec.label) {\n out.push(\n textEl(\n { x: startX, y: titleBaseline, class: \"schematex-legend-title\" },\n sec.label\n )\n );\n const w = TITLE_CHAR_W * sec.label.length;\n if (startX + w > usedRight) usedRight = startX + w;\n } else if (sec.label) {\n out.push(\n textEl(\n { x: startX, y: sectionBaseline, class: \"schematex-legend-section\" },\n sec.label\n )\n );\n }\n }\n\n for (const cell of sec.rows[ri]) {\n const cx = startX + itemColX + cell.x;\n const swatchY = yMid - SWATCH_H / 2;\n const swatch = renderSwatch(cell.item, cx, swatchY, SWATCH_W, SWATCH_H, theme);\n const label = textEl(\n {\n x: cx + SWATCH_W + SWATCH_LABEL_GAP,\n y: labelBaseline,\n class: \"schematex-legend-label\",\n },\n cell.item.label\n );\n out.push(\n group(\n {\n class: \"schematex-legend-row\",\n \"data-legend-key\": cell.item.key,\n \"data-legend-section\": cell.item.section ?? \"\",\n },\n [swatch, label]\n )\n );\n const right = cx + itemWidth(cell.item);\n if (right > usedRight) usedRight = right;\n }\n\n cursorY += ROW_H;\n }\n }\n\n const totalRows = sectionRows.reduce(\n (sum, sec) => sum + Math.max(1, sec.rows.length),\n 0\n );\n\n // Force right edge to at least the effective canvas right padding so the\n // caller's viewBox grows to include any min-width expansion.\n const minRight = effectiveCanvasW - padding;\n if (minRight > usedRight) usedRight = minRight;\n\n const svg = group({ class: \"schematex-legend\" }, out);\n const bbox = {\n x: startX,\n y: startY,\n w: usedRight - startX,\n h: totalRows * ROW_H + INLINE_BOTTOM_PAD,\n };\n return { svg, bbox };\n}\n\n// ─── bottom-right: compact overlay card (no box) ─────────────\n\nfunction renderBottomRight(\n spec: LegendSpec,\n sections: LegendSection[],\n bySection: Map<string, LegendItem[]>,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig,\n padding: number,\n showTitle: boolean\n): LegendRenderResult {\n // Measure box width.\n let maxRowW = 0;\n if (showTitle) {\n maxRowW = Math.max(maxRowW, TITLE_CHAR_W * spec.title.length);\n }\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") {\n maxRowW = Math.max(maxRowW, SECTION_CHAR_W * s.title.length);\n }\n for (const it of items) {\n const w = SWATCH_W + SWATCH_LABEL_GAP + Math.ceil(it.label.length * CHAR_W);\n if (w > maxRowW) maxRowW = w;\n }\n }\n const boxW = maxRowW + CARD_PAD * 2;\n\n // Measure rows.\n let rowCount = 0;\n if (showTitle) rowCount++;\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") rowCount++;\n rowCount += items.length;\n }\n const boxH = rowCount * ROW_H + CARD_PAD * 2;\n\n const x = anchor.canvasWidth - boxW - padding;\n const y = anchor.canvasHeight - boxH - padding;\n\n const out: string[] = [];\n out.push(buildStyleBlock(theme, config.fontFamily));\n\n let cursorY = y + CARD_PAD;\n if (showTitle) {\n cursorY += ROW_H / 2;\n out.push(\n textEl(\n {\n x: x + CARD_PAD,\n y: cursorY + TITLE_FONT_SIZE / 2 - 2,\n class: \"schematex-legend-title\",\n },\n spec.title\n )\n );\n cursorY += ROW_H / 2;\n }\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") {\n cursorY += ROW_H / 2;\n out.push(\n textEl(\n {\n x: x + CARD_PAD,\n y: cursorY + SECTION_FONT_SIZE / 2 - 1,\n class: \"schematex-legend-section\",\n },\n s.title.toUpperCase()\n )\n );\n cursorY += ROW_H / 2;\n }\n for (const it of items) {\n const yMid = cursorY + ROW_H / 2;\n const swatchY = yMid - SWATCH_H / 2;\n const swatch = renderSwatch(it, x + CARD_PAD, swatchY, SWATCH_W, SWATCH_H, theme);\n const label = textEl(\n {\n x: x + CARD_PAD + SWATCH_W + SWATCH_LABEL_GAP,\n y: yMid + FONT_SIZE / 2 - 2,\n class: \"schematex-legend-label\",\n },\n it.label\n );\n out.push(\n group(\n {\n class: \"schematex-legend-row\",\n \"data-legend-key\": it.key,\n \"data-legend-section\": it.section ?? \"\",\n },\n [swatch, label]\n )\n );\n cursorY += ROW_H;\n }\n }\n\n const svg = group({ class: \"schematex-legend\" }, out);\n return { svg, bbox: { x, y, w: boxW, h: boxH } };\n}\n\n// ─── Swatch primitives ───────────────────────────────────────\n\nfunction renderSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n switch (item.kind) {\n case \"shape\":\n return renderShapeSwatch(item, x, y, w, h, theme);\n case \"fill\":\n return renderFillSwatch(item, x, y, w, h, theme);\n case \"fill-pattern\":\n return renderFillPatternSwatch(item, x, y, w, h, theme);\n case \"line\":\n return renderLineSwatch(item, x, y, w, h, theme);\n case \"marker\":\n return renderMarkerSwatch(item, x, y, w, h, theme);\n case \"edge\":\n return renderEdgeSwatch(item, x, y, w, h, theme);\n default:\n return renderFillSwatch(item, x, y, w, h, theme);\n }\n}\n\nfunction renderShapeSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const shape = item.shape ?? \"square\";\n const cx = x + w / 2;\n const cy = y + h / 2;\n // Resolution rule:\n // - if item.fill is set: it wins for fill, item.color (if any) is stroke, else theme.stroke.\n // - else: item.color (if any) is fill, theme.stroke is stroke.\n const usedFill = item.fill ?? item.color ?? theme.fill;\n const usedStroke = item.fill !== undefined ? (item.color ?? theme.stroke) : theme.stroke;\n const innerR = Math.min(w, h) / 2 - 1;\n switch (shape) {\n case \"circle\":\n return circle({ cx, cy, r: innerR, fill: usedFill, stroke: usedStroke });\n case \"diamond\": {\n return polygon({\n points: `${cx},${cy - innerR} ${cx + innerR},${cy} ${cx},${cy + innerR} ${cx - innerR},${cy}`,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n case \"triangle\": {\n return polygon({\n points: `${cx},${cy - innerR} ${cx + innerR},${cy + innerR * 0.8} ${cx - innerR},${cy + innerR * 0.8}`,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n case \"concentric-square\": {\n const inner = rect({\n x: x + 3,\n y: y + 3,\n width: w - 6,\n height: h - 6,\n fill: usedFill,\n stroke: usedStroke,\n });\n const outer = rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: \"none\",\n stroke: usedStroke,\n \"stroke-width\": 1.2,\n });\n return inner + outer;\n }\n case \"concentric-circle\": {\n const innerC = circle({\n cx,\n cy,\n r: innerR - 2,\n fill: usedFill,\n stroke: usedStroke,\n });\n const outerC = circle({\n cx,\n cy,\n r: innerR,\n fill: \"none\",\n stroke: usedStroke,\n \"stroke-width\": 1.2,\n });\n return innerC + outerC;\n }\n case \"square\":\n default:\n return rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n}\n\nfunction renderFillSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n return rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: item.color ?? theme.fill,\n stroke: theme.stroke,\n });\n}\n\nfunction renderFillPatternSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const pattern = item.shape ?? \"full\";\n const innerX = x + 1;\n const innerY = y + 1;\n const innerW = w - 2;\n const innerH = h - 2;\n const color = item.color ?? theme.fill;\n const color2 = item.color2 ?? \"transparent\";\n const stroke = theme.stroke;\n\n const baseRect = rect({\n x: innerX,\n y: innerY,\n width: innerW,\n height: innerH,\n fill: color2,\n stroke,\n });\n\n switch (pattern) {\n case \"half-left\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH, fill: color });\n case \"half-right\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH, fill: color });\n case \"half-top\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW, height: innerH / 2, fill: color });\n case \"half-bottom\":\n return baseRect + rect({ x: innerX, y: innerY + innerH / 2, width: innerW, height: innerH / 2, fill: color });\n case \"quad-tl\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-tr\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-bl\":\n return baseRect + rect({ x: innerX, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-br\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });\n case \"striped\":\n case \"carrier\": {\n const stripes: string[] = [baseRect];\n const stripeW = 2;\n for (let sx = innerX; sx < innerX + innerW; sx += stripeW * 2) {\n stripes.push(rect({\n x: sx,\n y: innerY,\n width: Math.min(stripeW, innerX + innerW - sx),\n height: innerH,\n fill: color,\n }));\n }\n return stripes.join(\"\");\n }\n case \"dotted\": {\n const dots: string[] = [baseRect];\n const cy = innerY + innerH / 2;\n for (let dx = innerX + 3; dx < innerX + innerW - 1; dx += 4) {\n dots.push(circle({ cx: dx, cy, r: 1, fill: color }));\n }\n return dots.join(\"\");\n }\n case \"full\":\n default:\n return rect({\n x: innerX,\n y: innerY,\n width: innerW,\n height: innerH,\n fill: color,\n stroke,\n });\n }\n}\n\nfunction renderLineSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const cy = y + h / 2;\n const x1 = x + 1;\n const x2 = x + w - 1;\n const stroke = item.color ?? theme.stroke;\n const sw = item.strokeWidth ?? 2;\n const dash = patternDasharray(item.pattern);\n\n if (item.pattern === \"double\") {\n const off = Math.max(2, sw);\n return (\n lineEl({ x1, y1: cy - off, x2, y2: cy - off, stroke, \"stroke-width\": sw }) +\n lineEl({ x1, y1: cy + off, x2, y2: cy + off, stroke, \"stroke-width\": sw })\n );\n }\n\n if (item.pattern === \"wavy\") {\n const amp = Math.min(h / 3, 3);\n const period = 6;\n const segs: string[] = [`M ${x1} ${cy}`];\n let sx = x1;\n let up = true;\n while (sx < x2) {\n const nx = Math.min(sx + period, x2);\n segs.push(`Q ${sx + period / 2} ${cy + (up ? -amp : amp)} ${nx} ${cy}`);\n sx = nx;\n up = !up;\n }\n return pathEl({ d: segs.join(\" \"), fill: \"none\", stroke, \"stroke-width\": sw });\n }\n\n const attrs: Record<string, string | number> = {\n x1,\n y1: cy,\n x2,\n y2: cy,\n stroke,\n \"stroke-width\": sw,\n \"stroke-linecap\": \"round\",\n };\n if (dash) attrs[\"stroke-dasharray\"] = dash;\n return lineEl(attrs);\n}\n\nfunction renderMarkerSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const color = item.color ?? theme.text;\n const marker = item.marker ?? \"dot\";\n switch (marker) {\n case \"X\":\n case \"x\": {\n const r = Math.min(w, h) / 3;\n return (\n lineEl({ x1: cx - r, y1: cy - r, x2: cx + r, y2: cy + r, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" }) +\n lineEl({ x1: cx + r, y1: cy - r, x2: cx - r, y2: cy + r, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" })\n );\n }\n case \"arrow\": {\n const x1 = x + 2;\n const x2 = x + w - 4;\n return (\n lineEl({ x1, y1: cy, x2, y2: cy, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" }) +\n polygon({ points: `${x2},${cy - 3} ${x + w - 1},${cy} ${x2},${cy + 3}`, fill: color })\n );\n }\n case \"star\":\n return textEl(\n { x: cx, y: cy + 4, \"text-anchor\": \"middle\", \"font-size\": 14, fill: color },\n \"★\"\n );\n case \"slash\":\n return lineEl({\n x1: cx - 4, y1: cy + 5,\n x2: cx + 4, y2: cy - 5,\n stroke: color, \"stroke-width\": 1.6,\n });\n case \"P\":\n case \"C\":\n case \"E\":\n return textEl(\n { x: cx, y: cy + 4, \"text-anchor\": \"middle\", \"font-size\": 11, \"font-weight\": \"bold\", fill: color },\n marker\n );\n case \"dot\":\n default:\n return circle({ cx, cy, r: 3, fill: color });\n }\n}\n\nfunction renderEdgeSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const linePart = renderLineSwatch(item, x, y, w, h, theme);\n if (!item.marker) return linePart;\n return linePart + renderMarkerSwatch(item, x + w - 8, y, 12, h, theme);\n}\n\nfunction patternDasharray(p: LegendLinePattern | undefined): string | null {\n switch (p) {\n case \"dashed\":\n return \"5,3\";\n case \"dotted\":\n return \"1.5,3\";\n case \"broken\":\n return \"2,8\";\n case \"zigzag\":\n return \"8,3,2,3\";\n case \"solid\":\n case undefined:\n return null;\n default:\n return null;\n }\n}\n\n// ─── Style block ─────────────────────────────────────────────\n\nfunction buildStyleBlock(theme: BaseTheme, fontFamily: string): string {\n const css = `\n.schematex-legend { font-family: ${fontFamily}; }\n.schematex-legend-title { font-size: ${TITLE_FONT_SIZE}px; font-weight: 700; fill: ${theme.text}; }\n.schematex-legend-section { font-size: ${SECTION_FONT_SIZE}px; font-weight: 600; fill: ${theme.textMuted}; letter-spacing: 0.6px; }\n.schematex-legend-label { font-size: ${FONT_SIZE}px; fill: ${theme.text}; dominant-baseline: alphabetic; }\n`;\n return el(\"style\", {}, css);\n}\n\nfunction capitalize(s: string): string {\n if (!s) return s;\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/legend-parser.ts","../src/core/legend.ts"],"names":["line","text","group","circle","polygon","rect","path","el"],"mappings":"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","file":"chunk-5UCXMYE7.cjs","sourcesContent":["/**\n * Shared DSL directive parser for the unified Legend system.\n *\n * Diagram parsers call `parseLegendDirective(line, overrides)` for each\n * non-content line. If the line is a `legend.*` directive, it is consumed\n * (overrides mutated in place) and the function returns true. Otherwise it\n * returns false and the caller continues normal parsing.\n *\n * Recognized forms (see docs/reference/LEGEND-SYSTEM.md):\n *\n * legend: on | off | <position> | on <position>\n * legend.title: \"...\"\n * legend.position: <position>\n * legend.columns: <n>\n * legend.label <key>: \"...\"\n * legend.hide: a, b, c\n * legend.section <id>: \"...\"\n * legend.section <id>.hide: true|false\n * legend.item <id>: \"...\" (kind: ..., color: ..., pattern: ..., shape: ..., marker: ..., section: ...)\n */\n\nimport type {\n LegendItem,\n LegendItemKind,\n LegendLinePattern,\n LegendOverrides,\n LegendPosition,\n} from \"./types\";\n\nconst VALID_POSITIONS: ReadonlySet<LegendPosition> = new Set<LegendPosition>([\n \"top-left\",\n \"top-right\",\n \"bottom-left\",\n \"bottom-right\",\n \"outside-right\",\n \"outside-bottom\",\n \"right\",\n \"bottom-center\",\n \"none\",\n]);\n\nconst VALID_KINDS: ReadonlySet<LegendItemKind> = new Set<LegendItemKind>([\n \"shape\",\n \"fill\",\n \"fill-pattern\",\n \"line\",\n \"marker\",\n \"edge\",\n]);\n\nconst VALID_PATTERNS: ReadonlySet<LegendLinePattern> = new Set<LegendLinePattern>([\n \"solid\",\n \"dashed\",\n \"dotted\",\n \"double\",\n \"wavy\",\n \"zigzag\",\n \"broken\",\n]);\n\nexport function parseLegendDirective(\n rawLine: string,\n overrides: LegendOverrides\n): boolean {\n const line = rawLine.trim();\n if (!line.toLowerCase().startsWith(\"legend\")) return false;\n\n // `legend: ...` shorthand (toggle / position keyword)\n const masterMatch = line.match(/^legend\\s*:\\s*(.+)$/i);\n if (masterMatch && !line.toLowerCase().startsWith(\"legend.\")) {\n return applyMaster(masterMatch[1].trim(), overrides);\n }\n\n // `legend.title: \"...\"`\n const titleMatch = line.match(/^legend\\.title\\s*:\\s*(.+)$/i);\n if (titleMatch) {\n overrides.title = unquote(titleMatch[1].trim());\n return true;\n }\n\n // `legend.position: <pos>`\n const posMatch = line.match(/^legend\\.position\\s*:\\s*(.+)$/i);\n if (posMatch) {\n const pos = posMatch[1].trim().toLowerCase();\n if (VALID_POSITIONS.has(pos as LegendPosition)) {\n overrides.position = pos as LegendPosition;\n return true;\n }\n return false;\n }\n\n // `legend.columns: N`\n const colsMatch = line.match(/^legend\\.columns\\s*:\\s*(\\d+)\\s*$/i);\n if (colsMatch) {\n overrides.columns = Number.parseInt(colsMatch[1], 10);\n return true;\n }\n\n // `legend.label <key>: \"...\"`\n const labelMatch = line.match(/^legend\\.label\\s+([^\\s:]+)\\s*:\\s*(.+)$/i);\n if (labelMatch) {\n overrides.labels ??= {};\n overrides.labels[labelMatch[1]] = unquote(labelMatch[2].trim());\n return true;\n }\n\n // `legend.hide: a, b, c`\n const hideMatch = line.match(/^legend\\.hide\\s*:\\s*(.+)$/i);\n if (hideMatch) {\n const keys = hideMatch[1]\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n overrides.hide = (overrides.hide ?? []).concat(keys);\n return true;\n }\n\n // `legend.section <id>.hide: true|false`\n const sectionHideMatch = line.match(\n /^legend\\.section\\s+([^\\s.]+)\\.hide\\s*:\\s*(true|false)\\s*$/i\n );\n if (sectionHideMatch) {\n const id = sectionHideMatch[1];\n const flag = sectionHideMatch[2].toLowerCase() === \"true\";\n overrides.sections ??= {};\n overrides.sections[id] = { ...(overrides.sections[id] ?? {}), hidden: flag };\n return true;\n }\n\n // `legend.section <id>: \"...\"` (rename)\n const sectionMatch = line.match(/^legend\\.section\\s+([^\\s:]+)\\s*:\\s*(.+)$/i);\n if (sectionMatch) {\n const id = sectionMatch[1];\n overrides.sections ??= {};\n overrides.sections[id] = {\n ...(overrides.sections[id] ?? {}),\n title: unquote(sectionMatch[2].trim()),\n };\n return true;\n }\n\n // `legend.item <id>: \"label\" (kind: X, color: Y, ...)`\n const itemMatch = line.match(\n /^legend\\.item\\s+([^\\s:]+)\\s*:\\s*\"([^\"]*)\"\\s*(?:\\(([^)]*)\\))?\\s*$/i\n );\n if (itemMatch) {\n const item = buildItem(itemMatch[1], itemMatch[2], itemMatch[3]);\n if (item) {\n overrides.added ??= [];\n overrides.added.push(item);\n return true;\n }\n }\n\n return false;\n}\n\nfunction applyMaster(value: string, overrides: LegendOverrides): boolean {\n const parts = value.split(/\\s+/).filter(Boolean);\n let consumed = false;\n for (const tok of parts) {\n const t = tok.toLowerCase();\n if (t === \"on\" || t === \"off\" || t === \"auto\") {\n overrides.mode = t;\n consumed = true;\n } else if (VALID_POSITIONS.has(t as LegendPosition)) {\n overrides.position = t as LegendPosition;\n // A position keyword implies on (unless explicitly off)\n if (overrides.mode !== \"off\") overrides.mode = \"on\";\n consumed = true;\n } else {\n return false;\n }\n }\n return consumed;\n}\n\nfunction buildItem(\n id: string,\n label: string,\n attrsRaw: string | undefined\n): LegendItem | null {\n const item: LegendItem = { key: id, label, kind: \"fill\" };\n if (!attrsRaw) return item;\n\n for (const part of attrsRaw.split(\",\")) {\n const eq = part.indexOf(\":\");\n if (eq < 0) continue;\n const k = part.slice(0, eq).trim().toLowerCase();\n const v = part.slice(eq + 1).trim();\n switch (k) {\n case \"kind\":\n if (VALID_KINDS.has(v as LegendItemKind)) item.kind = v as LegendItemKind;\n else return null;\n break;\n case \"color\":\n item.color = v;\n break;\n case \"color2\":\n item.color2 = v;\n break;\n case \"pattern\":\n if (VALID_PATTERNS.has(v as LegendLinePattern))\n item.pattern = v as LegendLinePattern;\n break;\n case \"shape\":\n item.shape = v;\n break;\n case \"marker\":\n item.marker = v;\n break;\n case \"section\":\n item.section = v;\n break;\n case \"stroke-width\":\n case \"strokewidth\": {\n const n = Number.parseFloat(v);\n if (Number.isFinite(n)) item.strokeWidth = n;\n break;\n }\n default:\n // Unknown attribute — ignore silently to keep DSL forward-compatible.\n break;\n }\n }\n return item;\n}\n\nfunction unquote(s: string): string {\n const m = s.match(/^\"(.*)\"$/);\n return m ? m[1] : s;\n}\n","/**\n * Shared legend renderer.\n *\n * Pipeline:\n * buildXxxLegend(ast, theme) → auto LegendSpec\n * applyLegendOverrides(spec, o) → final LegendSpec\n * renderLegend(spec, ...) → { svg, bbox }\n *\n * Standard positions (others are silently aliased):\n * - \"bottom-inline\" (default) horizontal strip below the diagram, no box.\n * - \"bottom-right\" compact overlay anchored at bottom-right corner.\n * - \"none\" not rendered.\n */\n\nimport type { BaseTheme } from \"./theme\";\nimport type {\n LegendItem,\n LegendLinePattern,\n LegendOverrides,\n LegendPosition,\n LegendSection,\n LegendSpec,\n} from \"./types\";\nimport {\n el,\n group,\n rect,\n circle,\n line as lineEl,\n path as pathEl,\n polygon,\n text as textEl,\n} from \"./svg\";\n\n// ─── Public API ──────────────────────────────────────────────\n\nexport function applyLegendOverrides(\n auto: LegendSpec,\n overrides: LegendOverrides | undefined\n): LegendSpec {\n if (!overrides) return resolveAuto(auto);\n\n const sections = auto.sections.map((s) => {\n const o = overrides.sections?.[s.id];\n if (!o) return s;\n return { ...s, title: o.title ?? s.title, hidden: o.hidden ?? s.hidden };\n });\n\n const hideSet = new Set<string>(overrides.hide ?? []);\n const hiddenSectionIds = new Set<string>(\n sections.filter((s) => s.hidden).map((s) => s.id)\n );\n\n const baseItems = auto.items.filter((it) => {\n if (hideSet.has(it.key)) return false;\n if (it.section && hiddenSectionIds.has(it.section)) return false;\n return true;\n });\n\n const renamedBase = baseItems.map((it) => {\n const newLabel = overrides.labels?.[it.key];\n return newLabel === undefined ? it : { ...it, label: newLabel };\n });\n\n const added = (overrides.added ?? []).map((it) => ({\n ...it,\n section: it.section ?? \"custom\",\n }));\n\n let finalSections = sections;\n if (added.some((it) => it.section === \"custom\") &&\n !finalSections.some((s) => s.id === \"custom\")) {\n finalSections = [...finalSections, { id: \"custom\", title: \"Custom\" }];\n }\n\n const items = [...renamedBase, ...added];\n\n let mode = overrides.mode ?? auto.mode;\n if (mode === \"auto\") mode = items.length > 0 ? \"on\" : \"off\";\n\n return {\n mode,\n title: overrides.title ?? auto.title,\n position: overrides.position ?? auto.position,\n columns: overrides.columns ?? auto.columns,\n sections: finalSections,\n items,\n };\n}\n\nfunction resolveAuto(spec: LegendSpec): LegendSpec {\n if (spec.mode !== \"auto\") return spec;\n return { ...spec, mode: spec.items.length > 0 ? \"on\" : \"off\" };\n}\n\nexport interface LegendRenderResult {\n svg: string;\n bbox: { x: number; y: number; w: number; h: number };\n}\n\nexport interface LegendAnchor {\n canvasWidth: number;\n canvasHeight: number;\n /** Side margin from the canvas edge. Default 16. */\n padding?: number;\n /** Top offset reserved for diagram title (used by bottom-right anchoring). */\n titleHeight?: number;\n}\n\nexport interface LegendRenderConfig {\n fontFamily: string;\n fontSize: number;\n}\n\nconst ZERO_BBOX = { x: 0, y: 0, w: 0, h: 0 } as const;\n\n// Standardize legacy positions onto one of the 3 supported placements.\nfunction normalizePosition(p: LegendPosition): \"bottom-inline\" | \"bottom-right\" | \"none\" {\n switch (p) {\n case \"bottom-inline\":\n case \"outside-bottom\":\n case \"bottom-left\":\n case \"bottom-center\":\n return \"bottom-inline\";\n case \"bottom-right\":\n case \"outside-right\":\n case \"right\":\n case \"top-right\":\n case \"top-left\":\n return \"bottom-right\";\n case \"none\":\n default:\n return p === \"none\" ? \"none\" : \"bottom-inline\";\n }\n}\n\nconst FONT_SIZE = 11;\nconst SECTION_FONT_SIZE = 9;\nconst TITLE_FONT_SIZE = 12;\nconst SWATCH_W = 22;\nconst SWATCH_H = 12;\nconst SWATCH_LABEL_GAP = 8;\nconst ITEM_GAP = 18;\nconst SECTION_LABEL_GAP = 14;\nconst ROW_H = 18;\nconst INLINE_TOP_GAP = 14;\nconst INLINE_BOTTOM_PAD = 8;\nconst CARD_PAD = 4;\n// Width estimates per character (account for measured rendering, not just font-size).\nconst CHAR_W = FONT_SIZE * 0.6;\n// Section labels are uppercase with 0.6px letter-spacing → bigger glyph footprint.\nconst SECTION_CHAR_W = SECTION_FONT_SIZE * 0.85;\nconst TITLE_CHAR_W = TITLE_FONT_SIZE * 0.65;\n// Minimum effective canvas width for bottom-inline layout. If the diagram is\n// narrower, the legend (and the SVG viewBox) is widened to this value to avoid\n// excessive wrapping into 5+ rows.\nconst MIN_INLINE_WIDTH = 480;\n\nexport function renderLegend(\n spec: LegendSpec,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig\n): LegendRenderResult {\n if (spec.mode === \"off\" || spec.position === \"none\" || spec.items.length === 0) {\n return { svg: \"\", bbox: { ...ZERO_BBOX } };\n }\n\n const padding = anchor.padding ?? 16;\n const layout = normalizePosition(spec.position);\n\n // Group items by section, preserving order.\n const itemsBySection = new Map<string, LegendItem[]>();\n for (const it of spec.items) {\n const sid = it.section ?? \"_default\";\n const arr = itemsBySection.get(sid) ?? [];\n arr.push(it);\n itemsBySection.set(sid, arr);\n }\n\n const declared = spec.sections.length\n ? spec.sections.filter(\n (s) => !s.hidden && (itemsBySection.get(s.id)?.length ?? 0) > 0\n )\n : [{ id: \"_default\", title: \"\" } as LegendSection];\n\n const declaredIds = new Set(declared.map((s) => s.id));\n const orderedSections: LegendSection[] = [...declared];\n for (const [sid] of itemsBySection) {\n if (!declaredIds.has(sid) && (itemsBySection.get(sid)?.length ?? 0) > 0) {\n orderedSections.push({ id: sid, title: capitalize(sid) });\n }\n }\n\n const showTitle = !!spec.title && spec.title !== \"Legend\";\n\n if (layout === \"bottom-inline\") {\n return renderBottomInline(\n spec,\n orderedSections,\n itemsBySection,\n anchor,\n theme,\n config,\n padding,\n showTitle\n );\n }\n return renderBottomRight(\n spec,\n orderedSections,\n itemsBySection,\n anchor,\n theme,\n config,\n padding,\n showTitle\n );\n}\n\n// ─── bottom-inline: horizontal flow strip below canvas ───────\n//\n// Layout rules:\n// - Each section gets its own row (or rows). Sections never share a row.\n// - All sections share a fixed left \"label column\" so swatches line up.\n// - Items wrap within a section if they don't fit in one row; the\n// continuation row is indented past the label column.\n// - Optional title (when explicitly set by user) is rendered as its own\n// leading row, also left-aligned in the label column.\n// - If canvas is narrower than MIN_INLINE_WIDTH, the legend is rendered\n// at MIN_INLINE_WIDTH and the bbox reflects this — caller grows viewBox.\n\nfunction renderBottomInline(\n spec: LegendSpec,\n sections: LegendSection[],\n bySection: Map<string, LegendItem[]>,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig,\n padding: number,\n showTitle: boolean\n): LegendRenderResult {\n const effectiveCanvasW = Math.max(anchor.canvasWidth, MIN_INLINE_WIDTH);\n const startX = padding;\n const endX = effectiveCanvasW - padding;\n const availW = Math.max(120, endX - startX);\n const startY = anchor.canvasHeight + INLINE_TOP_GAP;\n\n // Determine label-column width: max of all section label widths (uppercase).\n let labelColW = 0;\n for (const s of sections) {\n if (!s.title || s.id === \"_default\") continue;\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n const lw = SECTION_CHAR_W * s.title.length;\n if (lw > labelColW) labelColW = lw;\n }\n if (showTitle) {\n const tw = TITLE_CHAR_W * spec.title.length;\n if (tw > labelColW) labelColW = tw;\n }\n // Add right-side gap between label column and items.\n const itemColX = labelColW > 0 ? labelColW + SECTION_LABEL_GAP : 0;\n const itemAvailW = Math.max(80, availW - itemColX);\n\n function itemWidth(it: LegendItem): number {\n return SWATCH_W + SWATCH_LABEL_GAP + Math.ceil(it.label.length * CHAR_W);\n }\n\n // For each section, pack its items into rows that fit in itemAvailW.\n type SectionRows = {\n label: string | null;\n rows: { item: LegendItem; x: number }[][];\n };\n const sectionRows: SectionRows[] = [];\n\n if (showTitle) {\n sectionRows.push({ label: spec.title, rows: [[]] }); // title-only row\n // Title is rendered without items; we'll treat the title text via labelCol.\n }\n\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n const rows: { item: LegendItem; x: number }[][] = [];\n let row: { item: LegendItem; x: number }[] = [];\n let cursor = 0;\n for (const it of items) {\n const w = itemWidth(it);\n const gap = row.length > 0 ? ITEM_GAP : 0;\n if (cursor > 0 && cursor + gap + w > itemAvailW) {\n rows.push(row);\n row = [];\n cursor = 0;\n }\n const x = cursor + (cursor > 0 ? gap : 0);\n row.push({ item: it, x });\n cursor = x + w;\n }\n if (row.length > 0) rows.push(row);\n const label = s.title && s.id !== \"_default\" ? s.title.toUpperCase() : null;\n sectionRows.push({ label, rows });\n }\n\n // Build SVG.\n const out: string[] = [];\n out.push(buildStyleBlock(theme, config.fontFamily));\n\n let cursorY = startY;\n let usedRight = 0;\n\n for (let si = 0; si < sectionRows.length; si++) {\n const sec = sectionRows[si];\n const isTitleRow = showTitle && si === 0;\n for (let ri = 0; ri < sec.rows.length; ri++) {\n const yMid = cursorY + ROW_H / 2;\n const labelBaseline = yMid + FONT_SIZE / 2 - 2;\n const sectionBaseline = yMid + SECTION_FONT_SIZE / 2 - 1;\n const titleBaseline = yMid + TITLE_FONT_SIZE / 2 - 2;\n\n // Section/title label only on the first row of the section.\n if (ri === 0) {\n if (isTitleRow && sec.label) {\n out.push(\n textEl(\n { x: startX, y: titleBaseline, class: \"schematex-legend-title\" },\n sec.label\n )\n );\n const w = TITLE_CHAR_W * sec.label.length;\n if (startX + w > usedRight) usedRight = startX + w;\n } else if (sec.label) {\n out.push(\n textEl(\n { x: startX, y: sectionBaseline, class: \"schematex-legend-section\" },\n sec.label\n )\n );\n }\n }\n\n for (const cell of sec.rows[ri]) {\n const cx = startX + itemColX + cell.x;\n const swatchY = yMid - SWATCH_H / 2;\n const swatch = renderSwatch(cell.item, cx, swatchY, SWATCH_W, SWATCH_H, theme);\n const label = textEl(\n {\n x: cx + SWATCH_W + SWATCH_LABEL_GAP,\n y: labelBaseline,\n class: \"schematex-legend-label\",\n },\n cell.item.label\n );\n out.push(\n group(\n {\n class: \"schematex-legend-row\",\n \"data-legend-key\": cell.item.key,\n \"data-legend-section\": cell.item.section ?? \"\",\n },\n [swatch, label]\n )\n );\n const right = cx + itemWidth(cell.item);\n if (right > usedRight) usedRight = right;\n }\n\n cursorY += ROW_H;\n }\n }\n\n const totalRows = sectionRows.reduce(\n (sum, sec) => sum + Math.max(1, sec.rows.length),\n 0\n );\n\n // Force right edge to at least the effective canvas right padding so the\n // caller's viewBox grows to include any min-width expansion.\n const minRight = effectiveCanvasW - padding;\n if (minRight > usedRight) usedRight = minRight;\n\n const svg = group({ class: \"schematex-legend\" }, out);\n const bbox = {\n x: startX,\n y: startY,\n w: usedRight - startX,\n h: totalRows * ROW_H + INLINE_BOTTOM_PAD,\n };\n return { svg, bbox };\n}\n\n// ─── bottom-right: compact overlay card (no box) ─────────────\n\nfunction renderBottomRight(\n spec: LegendSpec,\n sections: LegendSection[],\n bySection: Map<string, LegendItem[]>,\n anchor: LegendAnchor,\n theme: BaseTheme,\n config: LegendRenderConfig,\n padding: number,\n showTitle: boolean\n): LegendRenderResult {\n // Measure box width.\n let maxRowW = 0;\n if (showTitle) {\n maxRowW = Math.max(maxRowW, TITLE_CHAR_W * spec.title.length);\n }\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") {\n maxRowW = Math.max(maxRowW, SECTION_CHAR_W * s.title.length);\n }\n for (const it of items) {\n const w = SWATCH_W + SWATCH_LABEL_GAP + Math.ceil(it.label.length * CHAR_W);\n if (w > maxRowW) maxRowW = w;\n }\n }\n const boxW = maxRowW + CARD_PAD * 2;\n\n // Measure rows.\n let rowCount = 0;\n if (showTitle) rowCount++;\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") rowCount++;\n rowCount += items.length;\n }\n const boxH = rowCount * ROW_H + CARD_PAD * 2;\n\n const x = anchor.canvasWidth - boxW - padding;\n const y = anchor.canvasHeight - boxH - padding;\n\n const out: string[] = [];\n out.push(buildStyleBlock(theme, config.fontFamily));\n\n let cursorY = y + CARD_PAD;\n if (showTitle) {\n cursorY += ROW_H / 2;\n out.push(\n textEl(\n {\n x: x + CARD_PAD,\n y: cursorY + TITLE_FONT_SIZE / 2 - 2,\n class: \"schematex-legend-title\",\n },\n spec.title\n )\n );\n cursorY += ROW_H / 2;\n }\n for (const s of sections) {\n const items = bySection.get(s.id) ?? [];\n if (items.length === 0) continue;\n if (s.title && s.id !== \"_default\") {\n cursorY += ROW_H / 2;\n out.push(\n textEl(\n {\n x: x + CARD_PAD,\n y: cursorY + SECTION_FONT_SIZE / 2 - 1,\n class: \"schematex-legend-section\",\n },\n s.title.toUpperCase()\n )\n );\n cursorY += ROW_H / 2;\n }\n for (const it of items) {\n const yMid = cursorY + ROW_H / 2;\n const swatchY = yMid - SWATCH_H / 2;\n const swatch = renderSwatch(it, x + CARD_PAD, swatchY, SWATCH_W, SWATCH_H, theme);\n const label = textEl(\n {\n x: x + CARD_PAD + SWATCH_W + SWATCH_LABEL_GAP,\n y: yMid + FONT_SIZE / 2 - 2,\n class: \"schematex-legend-label\",\n },\n it.label\n );\n out.push(\n group(\n {\n class: \"schematex-legend-row\",\n \"data-legend-key\": it.key,\n \"data-legend-section\": it.section ?? \"\",\n },\n [swatch, label]\n )\n );\n cursorY += ROW_H;\n }\n }\n\n const svg = group({ class: \"schematex-legend\" }, out);\n return { svg, bbox: { x, y, w: boxW, h: boxH } };\n}\n\n// ─── Swatch primitives ───────────────────────────────────────\n\nfunction renderSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n switch (item.kind) {\n case \"shape\":\n return renderShapeSwatch(item, x, y, w, h, theme);\n case \"fill\":\n return renderFillSwatch(item, x, y, w, h, theme);\n case \"fill-pattern\":\n return renderFillPatternSwatch(item, x, y, w, h, theme);\n case \"line\":\n return renderLineSwatch(item, x, y, w, h, theme);\n case \"marker\":\n return renderMarkerSwatch(item, x, y, w, h, theme);\n case \"edge\":\n return renderEdgeSwatch(item, x, y, w, h, theme);\n default:\n return renderFillSwatch(item, x, y, w, h, theme);\n }\n}\n\nfunction renderShapeSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const shape = item.shape ?? \"square\";\n const cx = x + w / 2;\n const cy = y + h / 2;\n // Resolution rule:\n // - if item.fill is set: it wins for fill, item.color (if any) is stroke, else theme.stroke.\n // - else: item.color (if any) is fill, theme.stroke is stroke.\n const usedFill = item.fill ?? item.color ?? theme.fill;\n const usedStroke = item.fill !== undefined ? (item.color ?? theme.stroke) : theme.stroke;\n const innerR = Math.min(w, h) / 2 - 1;\n switch (shape) {\n case \"circle\":\n return circle({ cx, cy, r: innerR, fill: usedFill, stroke: usedStroke });\n case \"diamond\": {\n return polygon({\n points: `${cx},${cy - innerR} ${cx + innerR},${cy} ${cx},${cy + innerR} ${cx - innerR},${cy}`,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n case \"triangle\": {\n return polygon({\n points: `${cx},${cy - innerR} ${cx + innerR},${cy + innerR * 0.8} ${cx - innerR},${cy + innerR * 0.8}`,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n case \"concentric-square\": {\n const inner = rect({\n x: x + 3,\n y: y + 3,\n width: w - 6,\n height: h - 6,\n fill: usedFill,\n stroke: usedStroke,\n });\n const outer = rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: \"none\",\n stroke: usedStroke,\n \"stroke-width\": 1.2,\n });\n return inner + outer;\n }\n case \"concentric-circle\": {\n const innerC = circle({\n cx,\n cy,\n r: innerR - 2,\n fill: usedFill,\n stroke: usedStroke,\n });\n const outerC = circle({\n cx,\n cy,\n r: innerR,\n fill: \"none\",\n stroke: usedStroke,\n \"stroke-width\": 1.2,\n });\n return innerC + outerC;\n }\n case \"square\":\n default:\n return rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: usedFill,\n stroke: usedStroke,\n });\n }\n}\n\nfunction renderFillSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n return rect({\n x: x + 1,\n y: y + 1,\n width: w - 2,\n height: h - 2,\n fill: item.color ?? theme.fill,\n stroke: theme.stroke,\n });\n}\n\nfunction renderFillPatternSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const pattern = item.shape ?? \"full\";\n const innerX = x + 1;\n const innerY = y + 1;\n const innerW = w - 2;\n const innerH = h - 2;\n const color = item.color ?? theme.fill;\n const color2 = item.color2 ?? \"transparent\";\n const stroke = theme.stroke;\n\n const baseRect = rect({\n x: innerX,\n y: innerY,\n width: innerW,\n height: innerH,\n fill: color2,\n stroke,\n });\n\n switch (pattern) {\n case \"half-left\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH, fill: color });\n case \"half-right\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH, fill: color });\n case \"half-top\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW, height: innerH / 2, fill: color });\n case \"half-bottom\":\n return baseRect + rect({ x: innerX, y: innerY + innerH / 2, width: innerW, height: innerH / 2, fill: color });\n case \"quad-tl\":\n return baseRect + rect({ x: innerX, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-tr\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-bl\":\n return baseRect + rect({ x: innerX, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });\n case \"quad-br\":\n return baseRect + rect({ x: innerX + innerW / 2, y: innerY + innerH / 2, width: innerW / 2, height: innerH / 2, fill: color });\n case \"striped\":\n case \"carrier\": {\n const stripes: string[] = [baseRect];\n const stripeW = 2;\n for (let sx = innerX; sx < innerX + innerW; sx += stripeW * 2) {\n stripes.push(rect({\n x: sx,\n y: innerY,\n width: Math.min(stripeW, innerX + innerW - sx),\n height: innerH,\n fill: color,\n }));\n }\n return stripes.join(\"\");\n }\n case \"dotted\": {\n const dots: string[] = [baseRect];\n const cy = innerY + innerH / 2;\n for (let dx = innerX + 3; dx < innerX + innerW - 1; dx += 4) {\n dots.push(circle({ cx: dx, cy, r: 1, fill: color }));\n }\n return dots.join(\"\");\n }\n case \"full\":\n default:\n return rect({\n x: innerX,\n y: innerY,\n width: innerW,\n height: innerH,\n fill: color,\n stroke,\n });\n }\n}\n\nfunction renderLineSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const cy = y + h / 2;\n const x1 = x + 1;\n const x2 = x + w - 1;\n const stroke = item.color ?? theme.stroke;\n const sw = item.strokeWidth ?? 2;\n const dash = patternDasharray(item.pattern);\n\n if (item.pattern === \"double\") {\n const off = Math.max(2, sw);\n return (\n lineEl({ x1, y1: cy - off, x2, y2: cy - off, stroke, \"stroke-width\": sw }) +\n lineEl({ x1, y1: cy + off, x2, y2: cy + off, stroke, \"stroke-width\": sw })\n );\n }\n\n if (item.pattern === \"wavy\") {\n const amp = Math.min(h / 3, 3);\n const period = 6;\n const segs: string[] = [`M ${x1} ${cy}`];\n let sx = x1;\n let up = true;\n while (sx < x2) {\n const nx = Math.min(sx + period, x2);\n segs.push(`Q ${sx + period / 2} ${cy + (up ? -amp : amp)} ${nx} ${cy}`);\n sx = nx;\n up = !up;\n }\n return pathEl({ d: segs.join(\" \"), fill: \"none\", stroke, \"stroke-width\": sw });\n }\n\n const attrs: Record<string, string | number> = {\n x1,\n y1: cy,\n x2,\n y2: cy,\n stroke,\n \"stroke-width\": sw,\n \"stroke-linecap\": \"round\",\n };\n if (dash) attrs[\"stroke-dasharray\"] = dash;\n return lineEl(attrs);\n}\n\nfunction renderMarkerSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const cx = x + w / 2;\n const cy = y + h / 2;\n const color = item.color ?? theme.text;\n const marker = item.marker ?? \"dot\";\n switch (marker) {\n case \"X\":\n case \"x\": {\n const r = Math.min(w, h) / 3;\n return (\n lineEl({ x1: cx - r, y1: cy - r, x2: cx + r, y2: cy + r, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" }) +\n lineEl({ x1: cx + r, y1: cy - r, x2: cx - r, y2: cy + r, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" })\n );\n }\n case \"arrow\": {\n const x1 = x + 2;\n const x2 = x + w - 4;\n return (\n lineEl({ x1, y1: cy, x2, y2: cy, stroke: color, \"stroke-width\": 1.6, \"stroke-linecap\": \"round\" }) +\n polygon({ points: `${x2},${cy - 3} ${x + w - 1},${cy} ${x2},${cy + 3}`, fill: color })\n );\n }\n case \"star\":\n return textEl(\n { x: cx, y: cy + 4, \"text-anchor\": \"middle\", \"font-size\": 14, fill: color },\n \"★\"\n );\n case \"slash\":\n return lineEl({\n x1: cx - 4, y1: cy + 5,\n x2: cx + 4, y2: cy - 5,\n stroke: color, \"stroke-width\": 1.6,\n });\n case \"P\":\n case \"C\":\n case \"E\":\n return textEl(\n { x: cx, y: cy + 4, \"text-anchor\": \"middle\", \"font-size\": 11, \"font-weight\": \"bold\", fill: color },\n marker\n );\n case \"dot\":\n default:\n return circle({ cx, cy, r: 3, fill: color });\n }\n}\n\nfunction renderEdgeSwatch(\n item: LegendItem,\n x: number,\n y: number,\n w: number,\n h: number,\n theme: BaseTheme\n): string {\n const linePart = renderLineSwatch(item, x, y, w, h, theme);\n if (!item.marker) return linePart;\n return linePart + renderMarkerSwatch(item, x + w - 8, y, 12, h, theme);\n}\n\nfunction patternDasharray(p: LegendLinePattern | undefined): string | null {\n switch (p) {\n case \"dashed\":\n return \"5,3\";\n case \"dotted\":\n return \"1.5,3\";\n case \"broken\":\n return \"2,8\";\n case \"zigzag\":\n return \"8,3,2,3\";\n case \"solid\":\n case undefined:\n return null;\n default:\n return null;\n }\n}\n\n// ─── Style block ─────────────────────────────────────────────\n\nfunction buildStyleBlock(theme: BaseTheme, fontFamily: string): string {\n const css = `\n.schematex-legend { font-family: ${fontFamily}; }\n.schematex-legend-title { font-size: ${TITLE_FONT_SIZE}px; font-weight: 700; fill: ${theme.text}; }\n.schematex-legend-section { font-size: ${SECTION_FONT_SIZE}px; font-weight: 600; fill: ${theme.textMuted}; letter-spacing: 0.6px; }\n.schematex-legend-label { font-size: ${FONT_SIZE}px; fill: ${theme.text}; dominant-baseline: alphabetic; }\n`;\n return el(\"style\", {}, css);\n}\n\nfunction capitalize(s: string): string {\n if (!s) return s;\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { el, group, text, circle, path, svgRoot, title, desc, defs } from './chunk-
|
|
1
|
+
import { el, group, text, circle, path, svgRoot, title, desc, defs } from './chunk-SYYBKDL7.js';
|
|
2
2
|
|
|
3
3
|
// src/diagrams/blockdiagram/parser.ts
|
|
4
4
|
var BlockDiagramParseError = class extends Error {
|
|
@@ -802,5 +802,5 @@ var blockdiagram = {
|
|
|
802
802
|
};
|
|
803
803
|
|
|
804
804
|
export { blockdiagram, layoutBlockDiagram, parseBlockDiagram, renderBlockDiagram };
|
|
805
|
-
//# sourceMappingURL=chunk-
|
|
806
|
-
//# sourceMappingURL=chunk-
|
|
805
|
+
//# sourceMappingURL=chunk-66XQBGX7.js.map
|
|
806
|
+
//# sourceMappingURL=chunk-66XQBGX7.js.map
|