@diagrammo/dgmo 0.93.0 → 0.94.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.
Files changed (112) hide show
  1. package/dist/advanced.d.ts +26 -18
  2. package/dist/advanced.js +58 -57
  3. package/dist/block.js +17 -17
  4. package/dist/chart-meta.js +9 -9
  5. package/dist/{charts-d3-ERYYVGP6.js → charts-d3-SZV2SFTM.js} +2 -2
  6. package/dist/{chunk-FIYW7JW4.js → chunk-2FDQEQID.js} +1 -1
  7. package/dist/{chunk-UVX3IYXF.js → chunk-2HSHWPTO.js} +4 -4
  8. package/dist/{chunk-J6AEKIRQ.js → chunk-2I4UQG7W.js} +1 -1
  9. package/dist/{chunk-M4NV5PPU.js → chunk-2MS623GW.js} +1 -1
  10. package/dist/{chunk-A5WIAMCT.js → chunk-2XMTZ5JR.js} +1 -1
  11. package/dist/{chunk-KPGPK4SK.js → chunk-3TWBMU7K.js} +4 -4
  12. package/dist/{chunk-P5FUWXPW.js → chunk-3ZP3QC47.js} +7 -5
  13. package/dist/{chunk-QDRCWVV3.js → chunk-4EX4OKGZ.js} +71 -8
  14. package/dist/{chunk-IESUM4N5.js → chunk-4SP6OUO7.js} +92 -59
  15. package/dist/{chunk-2TFXRBCD.js → chunk-4TEPDQHJ.js} +2 -2
  16. package/dist/{chunk-YDZIVDVR.js → chunk-5ZUZZDW5.js} +6 -6
  17. package/dist/{chunk-ADVGV3P7.js → chunk-6JCTW74W.js} +7 -5
  18. package/dist/{chunk-NMK7KJZZ.js → chunk-7IOZ6JE4.js} +4 -4
  19. package/dist/{chunk-NJJCTEBM.js → chunk-7SXV7NUS.js} +1 -1
  20. package/dist/{chunk-MB2SQF7N.js → chunk-7WEYXYLC.js} +1 -1
  21. package/dist/{chunk-4RY5D5RE.js → chunk-AM42TLSZ.js} +98 -93
  22. package/dist/{chunk-472EOHVW.js → chunk-AYUSD4Z6.js} +31 -5
  23. package/dist/{chunk-CYDM2XII.js → chunk-B25IWGDH.js} +54 -5
  24. package/dist/{chunk-7OWK5K5C.js → chunk-BH2SF4TT.js} +2 -2
  25. package/dist/{chunk-MUJVNSEW.js → chunk-C6G36F5S.js} +1 -1
  26. package/dist/{chunk-Q7Y6JQ3R.js → chunk-CIHHTS5B.js} +1 -1
  27. package/dist/{chunk-KPSSNGAE.js → chunk-DDIOWNHS.js} +4 -4
  28. package/dist/{chunk-KCMGIYPO.js → chunk-DLJJOCIT.js} +1 -1
  29. package/dist/{chunk-M6ZQAFPD.js → chunk-DNM3XZCK.js} +1 -1
  30. package/dist/{chunk-AUS7V54P.js → chunk-ERT7XDQW.js} +1 -1
  31. package/dist/{chunk-YXXIRM4C.js → chunk-FWVE373X.js} +2 -2
  32. package/dist/{chunk-USAGHYRD.js → chunk-G3HZ4PGE.js} +2 -2
  33. package/dist/{chunk-EQWC76GQ.js → chunk-GWQRTA5W.js} +2 -2
  34. package/dist/{chunk-GJXMG4S3.js → chunk-HHVIE45A.js} +1 -1
  35. package/dist/{chunk-TNV4F5WA.js → chunk-HI6R27YA.js} +2 -2
  36. package/dist/{chunk-IIV4SMJL.js → chunk-I37S3EZE.js} +4 -4
  37. package/dist/{chunk-4FT5KQ7H.js → chunk-IGJEKO2P.js} +1 -1
  38. package/dist/{chunk-KRU2LCIP.js → chunk-IHN6WDEY.js} +1 -1
  39. package/dist/{chunk-QT3KDDXK.js → chunk-IN7XI6NO.js} +0 -7
  40. package/dist/{chunk-4WQX55VX.js → chunk-IZHGT5HD.js} +31 -5
  41. package/dist/{chunk-WK5QEYFA.js → chunk-JT2BG7LM.js} +3 -3
  42. package/dist/{chunk-ZTLMEBAC.js → chunk-KBHT5XEY.js} +78 -3
  43. package/dist/{chunk-KHL652SX.js → chunk-KSZB7TIY.js} +1 -1
  44. package/dist/{chunk-VSOZZYLK.js → chunk-NERQSSYD.js} +20 -9
  45. package/dist/{chunk-U7U64UUN.js → chunk-NOQB4KMV.js} +4 -4
  46. package/dist/{chunk-UG7AQQNR.js → chunk-OSSTOSXU.js} +2 -2
  47. package/dist/{chunk-65GPEV5V.js → chunk-QKPOIJBT.js} +2 -2
  48. package/dist/{chunk-QJOVZ4TC.js → chunk-QPQWY5RU.js} +1 -1
  49. package/dist/{chunk-LNVB75QU.js → chunk-RBVFNUAL.js} +1 -1
  50. package/dist/{chunk-J43OCO22.js → chunk-RESEJSCV.js} +2 -2
  51. package/dist/{chunk-DAHQL57W.js → chunk-RITTLIDJ.js} +1 -1
  52. package/dist/{chunk-LUDUDBO6.js → chunk-S5Y3OO3V.js} +2 -2
  53. package/dist/{chunk-3GCASUWA.js → chunk-TASRGDYP.js} +1 -1
  54. package/dist/{chunk-LDDDKWL6.js → chunk-TDAGJJPZ.js} +1 -1
  55. package/dist/{chunk-42UJ23H3.js → chunk-UIEKW4SG.js} +1 -0
  56. package/dist/{chunk-CQYFZOUC.js → chunk-VBMRZCMQ.js} +1 -1
  57. package/dist/{chunk-D6PVMUCX.js → chunk-VDY2GR6U.js} +2 -2
  58. package/dist/{chunk-EJS3K44P.js → chunk-VGAMBOOC.js} +5 -3
  59. package/dist/chunk-WTTIODDV.js +9 -0
  60. package/dist/{chunk-5CBX66KB.js → chunk-XJQ6Z3FO.js} +2 -2
  61. package/dist/{chunk-XUTR7GNT.js → chunk-XKCRKD2B.js} +67 -28
  62. package/dist/{chunk-KCHQVED5.js → chunk-YQMIKX54.js} +43 -7
  63. package/dist/countdown.js +1 -1
  64. package/dist/{dgmo-router-CZN36TR3.js → dgmo-router-E5O7RJSW.js} +11 -11
  65. package/dist/{dimensions-7HHKO5BS.js → dimensions-DS6FWLRY.js} +2 -2
  66. package/dist/{flowchart-parser-4MZPWYK6.js → flowchart-parser-NZXASOZG.js} +5 -5
  67. package/dist/{flowchart-renderer-5XDN575E.js → flowchart-renderer-PTCRIANF.js} +14 -12
  68. package/dist/index.js +17 -17
  69. package/dist/layout-ISSBWBH7.js +24 -0
  70. package/dist/layout-IT4ZTV6C.js +24 -0
  71. package/dist/{layout-QXGPY7KA.js → layout-U3AH6M7J.js} +7 -6
  72. package/dist/{layout-5GHV7HNM.js → layout-VC3MXRB4.js} +11 -10
  73. package/dist/layout-VDCJOZSH.js +11 -0
  74. package/dist/{layout-search-EMTCDC3C.js → layout-search-BBX2BMEF.js} +9 -8
  75. package/dist/{parser-YX72VLDZ.js → parser-4RFY7D52.js} +5 -5
  76. package/dist/{parser-VKYUAT4Y.js → parser-7QKQ4P4P.js} +5 -5
  77. package/dist/{parser-OGF2CDA6.js → parser-TAYRTCPR.js} +5 -5
  78. package/dist/{redraw-T324XAF3.js → redraw-AHW7EUUF.js} +2 -2
  79. package/dist/{redraw-MSXU4ZD2.js → redraw-STZ4WJAI.js} +3 -3
  80. package/dist/{renderer-HYGTMBHT.js → renderer-2LYX6NHN.js} +3 -3
  81. package/dist/{renderer-GPAVVUET.js → renderer-3NLDX7DQ.js} +3 -3
  82. package/dist/{renderer-HJ54YXT3.js → renderer-4SE7R22T.js} +12 -12
  83. package/dist/{renderer-CNRQFIEI.js → renderer-53B523PM.js} +4 -4
  84. package/dist/{renderer-FL7EOSBU.js → renderer-7OGGV327.js} +3 -3
  85. package/dist/{renderer-37PLQHVB.js → renderer-BXD5KVSR.js} +2 -2
  86. package/dist/{renderer-5ITLW7MX.js → renderer-FMTLSOCX.js} +6 -4
  87. package/dist/{renderer-TSCSZ6CL.js → renderer-HX6ICPDX.js} +2 -2
  88. package/dist/{renderer-DD6T3C4J.js → renderer-ISQJ2ELA.js} +2 -2
  89. package/dist/{renderer-POBGKIUT.js → renderer-IXBOT6DU.js} +3 -3
  90. package/dist/{renderer-IHCWBFPI.js → renderer-J3GPDK73.js} +14 -13
  91. package/dist/{renderer-VI34SD5V.js → renderer-J7ZSTJUE.js} +6 -6
  92. package/dist/{renderer-GFALLIYT.js → renderer-JYHA6R2D.js} +3 -3
  93. package/dist/{renderer-GOXAP2IE.js → renderer-KJ3V5BYP.js} +2 -2
  94. package/dist/{renderer-XJMVG2WJ.js → renderer-LNP23NSM.js} +5 -5
  95. package/dist/{renderer-BO73LSVT.js → renderer-M5DUMITP.js} +3 -3
  96. package/dist/{renderer-GFGFHYWY.js → renderer-MWZC7TMD.js} +2 -2
  97. package/dist/{renderer-3F47TPZ2.js → renderer-O6RP52CQ.js} +2 -2
  98. package/dist/{renderer-PBKTAWQV.js → renderer-OUDHH5MV.js} +14 -13
  99. package/dist/{renderer-RDI2RYUP.js → renderer-PHLCYVSN.js} +3 -3
  100. package/dist/{renderer-VDBNC7A6.js → renderer-QTPWRRJ7.js} +2 -2
  101. package/dist/{renderer-J3QWK6IM.js → renderer-RUSQJFFC.js} +3 -3
  102. package/dist/{renderer-7Y3LR4R2.js → renderer-TINHO2IO.js} +2 -2
  103. package/dist/{renderer-EVKWGUGT.js → renderer-UTEEJDGB.js} +4 -3
  104. package/dist/{renderer-ISDKO3DI.js → renderer-WPN2SXGT.js} +2 -2
  105. package/dist/{renderer-6GJWADLO.js → renderer-XCLARXCK.js} +2 -2
  106. package/dist/{renderer-J6H4Q3RM.js → renderer-XOWDERU2.js} +4 -3
  107. package/dist/{state-parser-NPYTMRXP.js → state-parser-KPVW5CRI.js} +5 -5
  108. package/dist/{state-renderer-44K2KDX7.js → state-renderer-ZVEI265C.js} +14 -13
  109. package/package.json +1 -1
  110. package/dist/layout-33FHGDEV.js +0 -23
  111. package/dist/layout-FTOGDNUL.js +0 -23
  112. package/dist/layout-J3AGFZZ7.js +0 -10
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-24YPR5EH.js";
4
4
  import {
5
5
  layoutInlineHeader
6
- } from "./chunk-42UJ23H3.js";
6
+ } from "./chunk-UIEKW4SG.js";
7
7
  import {
8
8
  TITLE_FONT_SIZE,
9
9
  TITLE_FONT_WEIGHT,
@@ -30,10 +30,10 @@ import {
30
30
  } from "./chunk-VSAKEMDD.js";
31
31
  import {
32
32
  wrapDescriptionLines
33
- } from "./chunk-MB2SQF7N.js";
33
+ } from "./chunk-7WEYXYLC.js";
34
34
  import {
35
35
  renderInlineText
36
- } from "./chunk-65GPEV5V.js";
36
+ } from "./chunk-QKPOIJBT.js";
37
37
  import {
38
38
  FONT_FAMILY
39
39
  } from "./chunk-ICLB27PZ.js";
@@ -64,7 +64,17 @@ import {
64
64
  import * as d3Selection from "d3-selection";
65
65
 
66
66
  // src/sequence/collapse.ts
67
- function applyCollapseProjection(parsed, collapsedGroups) {
67
+ function isCollapsibleGroup(group) {
68
+ return group.participantIds.length > 1;
69
+ }
70
+ function collapsedGroupId(group, groups) {
71
+ const shared = groups.some((g) => g !== group && g.name === group.name);
72
+ return shared ? `${group.name}@${group.lineNumber}` : group.name;
73
+ }
74
+ function applyCollapseProjection(parsed, requestedGroups) {
75
+ const collapsedGroups = new Set(
76
+ parsed.groups.filter((g) => requestedGroups.has(g.lineNumber) && isCollapsibleGroup(g)).map((g) => g.lineNumber)
77
+ );
68
78
  if (collapsedGroups.size === 0) {
69
79
  return {
70
80
  participants: parsed.participants,
@@ -88,37 +98,37 @@ function applyCollapseProjection(parsed, collapsedGroups) {
88
98
  return false;
89
99
  };
90
100
  const memberToGroup = /* @__PURE__ */ new Map();
91
- const collapsedGroupNames = /* @__PURE__ */ new Set();
101
+ const virtualIds = /* @__PURE__ */ new Set();
102
+ const groupById = /* @__PURE__ */ new Map();
92
103
  const byDepth = [...parsed.groups].sort((a, b) => a.depth - b.depth);
93
104
  for (const group of byDepth) {
94
105
  if (!collapsedGroups.has(group.lineNumber)) continue;
95
106
  if (insideCollapsed(group)) continue;
96
- collapsedGroupNames.add(group.name);
107
+ const id = collapsedGroupId(group, parsed.groups);
108
+ virtualIds.add(id);
109
+ groupById.set(id, group);
97
110
  for (const memberId of group.participantIds) {
98
111
  if (!memberToGroup.has(memberId)) {
99
- memberToGroup.set(memberId, group.name);
112
+ memberToGroup.set(memberId, id);
100
113
  }
101
114
  }
102
115
  }
103
116
  const participants = [];
104
117
  const insertedGroups = /* @__PURE__ */ new Set();
105
118
  for (const p of parsed.participants) {
106
- const groupName = memberToGroup.get(p.id);
107
- if (groupName) {
108
- if (!insertedGroups.has(groupName)) {
109
- insertedGroups.add(groupName);
110
- const group = parsed.groups.find(
111
- (g) => g.name === groupName && collapsedGroups.has(g.lineNumber)
112
- );
119
+ const groupId = memberToGroup.get(p.id);
120
+ if (groupId) {
121
+ if (!insertedGroups.has(groupId)) {
122
+ insertedGroups.add(groupId);
123
+ const group = groupById.get(groupId);
113
124
  participants.push({
114
- id: groupName,
115
- // already ParticipantId from memberToGroup value type
116
- label: groupName,
125
+ id: groupId,
126
+ label: group.name,
117
127
  type: "default",
118
128
  lineNumber: group.lineNumber
119
129
  });
120
130
  }
121
- } else if (collapsedGroupNames.has(p.id)) {
131
+ } else if (virtualIds.has(p.id)) {
122
132
  } else {
123
133
  participants.push(p);
124
134
  }
@@ -617,6 +627,22 @@ function applyPositionOverrides(participants) {
617
627
  }
618
628
  return result;
619
629
  }
630
+ function foldCollapsedParticipants(parsed, view) {
631
+ const expanded = applyPositionOverrides(
632
+ applyGroupOrdering(parsed.participants, parsed.groups, parsed.messages)
633
+ );
634
+ const byId = new Map(view.participants.map((p) => [p.id, p]));
635
+ const result = [];
636
+ const placed = /* @__PURE__ */ new Set();
637
+ for (const p of expanded) {
638
+ const id = view.collapsedGroupIds.get(p.id) ?? p.id;
639
+ const target = byId.get(id);
640
+ if (!target || placed.has(id)) continue;
641
+ placed.add(id);
642
+ result.push(target);
643
+ }
644
+ return result;
645
+ }
620
646
  function applyGroupOrdering(participants, groups, messages = []) {
621
647
  const idToGroup = /* @__PURE__ */ new Map();
622
648
  for (const group of groups) {
@@ -720,9 +746,17 @@ function layoutSequence(parsed, containerWidth, options) {
720
746
  }
721
747
  function layoutSequencePass(parsed, containerWidth, options, fit) {
722
748
  const { title, options: parsedOptions } = parsed;
723
- const effectiveCollapsedGroups = options?.collapsedGroups ? new Set(options.collapsedGroups) : new Set(
749
+ const requestedCollapsedGroups = options?.collapsedGroups ? new Set(options.collapsedGroups) : new Set(
724
750
  parsed.groups.filter((g) => g.collapsed).map((g) => g.lineNumber)
725
751
  );
752
+ const collapsibleGroupLines = new Set(
753
+ parsed.groups.filter(isCollapsibleGroup).map((g) => g.lineNumber)
754
+ );
755
+ const effectiveCollapsedGroups = new Set(
756
+ parsed.groups.map((g) => g.lineNumber).filter(
757
+ (line) => requestedCollapsedGroups.has(line) && collapsibleGroupLines.has(line)
758
+ )
759
+ );
726
760
  const collapsed = effectiveCollapsedGroups.size > 0 ? applyCollapseProjection(parsed, effectiveCollapsedGroups) : null;
727
761
  const messages = collapsed ? collapsed.messages : parsed.messages;
728
762
  const elements = collapsed ? collapsed.elements : parsed.elements;
@@ -742,9 +776,8 @@ function layoutSequencePass(parsed, containerWidth, options, fit) {
742
776
  if (number === void 0) return step.label;
743
777
  return step.label ? `${number}. ${step.label}` : String(number);
744
778
  };
745
- const sourceParticipants = collapsed ? collapsed.participants : parsed.participants;
746
- const participants = applyPositionOverrides(
747
- applyGroupOrdering(sourceParticipants, groups, messages)
779
+ const participants = collapsed ? foldCollapsedParticipants(parsed, collapsed) : applyPositionOverrides(
780
+ applyGroupOrdering(parsed.participants, parsed.groups, parsed.messages)
748
781
  );
749
782
  if (participants.length === 0) return null;
750
783
  const groupBoundaryIds = /* @__PURE__ */ new Set();
@@ -1496,7 +1529,8 @@ function layoutSequencePass(parsed, containerWidth, options, fit) {
1496
1529
  const padBottom = hasExpandedGroup ? groupBottomPad(group.depth, maxGroupDepth) : 0;
1497
1530
  const height = sBoxH + padTop + padBottom;
1498
1531
  const barHeight = ctx.structural(COLLAPSE_BAR_HEIGHT);
1499
- collapsedGroupBoxes.set(group.name, {
1532
+ collapsedGroupBoxes.set(collapsedGroupId(group, parsed.groups), {
1533
+ name: group.name,
1500
1534
  lineNumber: group.lineNumber,
1501
1535
  depth: group.depth,
1502
1536
  participantIds: group.participantIds,
@@ -2040,7 +2074,14 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
2040
2074
  const groupTagColor = getTagColor(groupTagValue);
2041
2075
  const fillColor = groupTagColor ? mix(groupTagColor, themeBaseBg(palette, isDark), isDark ? 15 : 20) : isDark ? palette.surface : palette.bg;
2042
2076
  const strokeColor = groupTagColor ?? palette.textMuted;
2043
- const groupG = svg.append("g").attr("class", "group-box-wrapper").attr("data-group-toggle", "").attr("data-group-line", String(group.lineNumber)).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "true").attr("aria-label", groupToggleName(group.name, group.participantIds)).attr("cursor", "pointer");
2077
+ const source = parsed.groups.find((g) => g.lineNumber === group.lineNumber);
2078
+ const collapsible = source !== void 0 && isCollapsibleGroup(source);
2079
+ const groupG = svg.append("g").attr("class", "group-box-wrapper");
2080
+ if (collapsible) groupG.attr("data-group-toggle", "");
2081
+ groupG.attr("data-group-line", String(group.lineNumber));
2082
+ if (collapsible) {
2083
+ groupG.attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "true").attr("aria-label", groupToggleName(group.name, group.participantIds)).attr("cursor", "pointer");
2084
+ }
2044
2085
  groupG.append("rect").attr("x", frame.x).attr("y", frame.y).attr("width", frame.width).attr("height", frame.height).attr("rx", 6).attr("fill", fillColor).attr("stroke", strokeColor).attr("stroke-width", 1).attr("stroke-opacity", 0.5).attr("pointer-events", "none").attr("class", "group-box");
2045
2086
  groupG.append("rect").attr("x", frame.x).attr("y", frame.y).attr("width", frame.width).attr("height", frame.headerHeight).attr("fill", "transparent").attr("class", "group-label-hit");
2046
2087
  groupG.append("text").attr("x", frame.labelX).attr("y", frame.labelY).attr("text-anchor", "middle").attr("fill", strokeColor).attr("font-size", sGroupLabelSize).attr("font-weight", GROUP_LABEL_WEIGHT).attr("opacity", 0.7).attr("pointer-events", "none").attr("class", "group-label").text(group.name);
@@ -2077,10 +2118,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
2077
2118
  const participantG = svg.select(
2078
2119
  `.participant[data-participant-id="${participant.id}"]`
2079
2120
  );
2080
- participantG.attr("data-group-toggle", "").attr("data-group-line", String(meta.lineNumber)).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "false").attr(
2081
- "aria-label",
2082
- groupToggleName(participant.id, meta.participantIds)
2083
- ).attr("cursor", "pointer");
2121
+ participantG.attr("data-group-toggle", "").attr("data-group-line", String(meta.lineNumber)).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "false").attr("aria-label", groupToggleName(meta.name, meta.participantIds)).attr("cursor", "pointer");
2084
2122
  const pFill = effectiveTagColor ? mix(effectiveTagColor, themeBaseBg(palette, isDark), isDark ? 30 : 40) : isDark ? mix(palette.overlay, palette.surface, 50) : mix(palette.bg, palette.surface, 50);
2085
2123
  const pStroke = effectiveTagColor ?? palette.border;
2086
2124
  participantG.append("rect").attr("x", -boxW / 2).attr("y", -padTop).attr("width", boxW).attr("height", fullH).attr("rx", 6).attr("fill", pFill).attr("stroke", pStroke).attr("stroke-width", 1.5);
@@ -2424,6 +2462,7 @@ export {
2424
2462
  buildRenderSequence,
2425
2463
  computeActivations,
2426
2464
  applyPositionOverrides,
2465
+ foldCollapsedParticipants,
2427
2466
  applyGroupOrdering,
2428
2467
  layoutSequence,
2429
2468
  renderSequenceDiagram,
@@ -28,7 +28,7 @@ import {
28
28
  } from "./chunk-2CW5ZTNH.js";
29
29
  import {
30
30
  layoutInlineHeader
31
- } from "./chunk-42UJ23H3.js";
31
+ } from "./chunk-UIEKW4SG.js";
32
32
  import {
33
33
  TITLE_FONT_SIZE,
34
34
  TITLE_FONT_WEIGHT,
@@ -1219,6 +1219,13 @@ function renderFunnel(svg, chart, width, height, colors, palette, isDark, topIns
1219
1219
  }
1220
1220
 
1221
1221
  // src/charts-d3/heatmap.ts
1222
+ var ROW_LABEL_SHARE = 0.35;
1223
+ var COL_LABEL_MAX_W = 140;
1224
+ var COL_BAND_SHARE = 0.3;
1225
+ var COL_ANGLE = 40 * Math.PI / 180;
1226
+ var ROW_FONT = 13;
1227
+ var COL_FONT = 12;
1228
+ var EDGE_GAP = 4;
1222
1229
  function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bgColor, topInset) {
1223
1230
  const rows = chart.heatmapRows ?? [];
1224
1231
  if (rows.length === 0) return;
@@ -1257,11 +1264,39 @@ function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bg
1257
1264
  const targetL = isDark ? 72 : 30;
1258
1265
  return hslToHex(h, targetS, targetL);
1259
1266
  };
1260
- const rowLabelW = Math.max(0, ...rows.map((r) => measureText(r.label, 13))) + 16;
1267
+ const rowLabelMax = width * ROW_LABEL_SHARE;
1268
+ const rowShown = rows.map(
1269
+ (r) => truncateText(r.label, ROW_FONT, rowLabelMax)
1270
+ );
1271
+ const rowLabelW = Math.max(0, ...rowShown.map((t) => measureText(t, ROW_FONT))) + 16;
1261
1272
  const left = 20 + rowLabelW;
1262
- const top = topInset + 28;
1263
- const right = 24;
1264
1273
  const bottom = 24;
1274
+ const cw0 = (width - left - 24) / ncols;
1275
+ const rotate = cols.some((c) => measureText(c, COL_FONT) > cw0 * 0.85);
1276
+ const colShown = rotate ? cols.map(
1277
+ (c) => truncateText(
1278
+ c,
1279
+ COL_FONT,
1280
+ Math.min(
1281
+ COL_LABEL_MAX_W,
1282
+ height * COL_BAND_SHARE / Math.sin(COL_ANGLE)
1283
+ )
1284
+ )
1285
+ ) : cols;
1286
+ const colW = colShown.map((c) => measureText(c, COL_FONT));
1287
+ const sin = Math.sin(COL_ANGLE);
1288
+ const cos = Math.cos(COL_ANGLE);
1289
+ const band = rotate ? Math.max(28, 8 + Math.max(0, ...colW) * sin + COL_FONT * cos + EDGE_GAP) : 28;
1290
+ const top = topInset + band;
1291
+ let right = 24;
1292
+ if (rotate) {
1293
+ const P = width - left;
1294
+ colW.forEach((w, i) => {
1295
+ const reach = w * cos + COL_FONT * 0.25 * sin;
1296
+ const need = P - ncols * (P - EDGE_GAP - reach) / (i + 0.5);
1297
+ right = Math.max(right, need);
1298
+ });
1299
+ }
1265
1300
  const plotW = width - left - right;
1266
1301
  const plotH = height - top - bottom;
1267
1302
  const cw = plotW / ncols;
@@ -1277,10 +1312,10 @@ function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bg
1277
1312
  11,
1278
1313
  Math.min(ch * 0.55, cw * 0.7 * REF / maxValueW)
1279
1314
  );
1280
- const rotate = cols.some((c) => measureText(c, 12) > cw * 0.85);
1281
1315
  cols.forEach((c, ci) => {
1282
1316
  const x = left + ci * cw + cw / 2;
1283
- const t = svg.append("text").attr("class", "dgmo-axis-label").attr("data-filter-attr", "data-col-key").attr("data-filter-value", c).attr("fill", textColor).attr("font-size", 12).attr("font-family", FONT_FAMILY).text(c);
1317
+ const t = svg.append("text").attr("class", "dgmo-axis-label").attr("data-filter-attr", "data-col-key").attr("data-filter-value", c).attr("fill", textColor).attr("font-size", COL_FONT).attr("font-family", FONT_FAMILY).text(colShown[ci]);
1318
+ if (colShown[ci] !== c) t.append("title").text(c);
1284
1319
  if (rotate) {
1285
1320
  t.attr("transform", `translate(${x},${top - 8}) rotate(-40)`).attr(
1286
1321
  "text-anchor",
@@ -1291,7 +1326,8 @@ function renderHeatmap(svg, chart, width, height, palette, isDark, textColor, bg
1291
1326
  }
1292
1327
  });
1293
1328
  rows.forEach((row, ri) => {
1294
- svg.append("text").attr("class", "dgmo-axis-label").attr("data-filter-attr", "data-row-key").attr("data-filter-value", row.label).attr("x", left - 10).attr("y", top + ri * ch + ch / 2 + 4).attr("text-anchor", "end").attr("fill", textColor).attr("font-size", 13).attr("font-family", FONT_FAMILY).text(row.label);
1329
+ const rowLabel = svg.append("text").attr("class", "dgmo-axis-label").attr("data-filter-attr", "data-row-key").attr("data-filter-value", row.label).attr("x", left - 10).attr("y", top + ri * ch + ch / 2 + 4).attr("text-anchor", "end").attr("fill", textColor).attr("font-size", ROW_FONT).attr("font-family", FONT_FAMILY).text(rowShown[ri]);
1330
+ if (rowShown[ri] !== row.label) rowLabel.append("title").text(row.label);
1295
1331
  row.values.forEach((v, ci) => {
1296
1332
  const t = maxValue === minValue ? 0.5 : (v - minValue) / (maxValue - minValue);
1297
1333
  const ramp = gradientAt(t);
package/dist/countdown.js CHANGED
@@ -217,7 +217,7 @@ function redrawIfStale(node, svg, now2, resolvedMs, tz) {
217
217
  }
218
218
  if (!svg.hasAttribute("data-dgmo-countdown-redraw")) return;
219
219
  redrawing.add(svg);
220
- void import("./redraw-T324XAF3.js").then((m) => {
220
+ void import("./redraw-AHW7EUUF.js").then((m) => {
221
221
  m.redrawCountdown(svg, resolvedMs);
222
222
  redrawing.delete(svg);
223
223
  }).catch(() => {
@@ -6,7 +6,7 @@ import {
6
6
  isExtendedChartType,
7
7
  knownChartTypeIds,
8
8
  parseDgmo
9
- } from "./chunk-YDZIVDVR.js";
9
+ } from "./chunk-5ZUZZDW5.js";
10
10
  import "./chunk-H6BT45SN.js";
11
11
  import "./chunk-3PP746YM.js";
12
12
  import "./chunk-NM5V5EKY.js";
@@ -43,12 +43,12 @@ import "./chunk-BRGRIZQB.js";
43
43
  import "./chunk-XSVWUOUZ.js";
44
44
  import "./chunk-JXGSTBW6.js";
45
45
  import "./chunk-H7AXCRO7.js";
46
- import "./chunk-A5WIAMCT.js";
46
+ import "./chunk-2XMTZ5JR.js";
47
47
  import {
48
48
  looksLikeC4,
49
49
  looksLikeGantt,
50
50
  parseDgmoChartType
51
- } from "./chunk-UVX3IYXF.js";
51
+ } from "./chunk-2HSHWPTO.js";
52
52
  import "./chunk-KRPLP5LP.js";
53
53
  import "./chunk-KBDMEOLI.js";
54
54
  import "./chunk-VSAKEMDD.js";
@@ -56,25 +56,25 @@ import "./chunk-5OTA2PUH.js";
56
56
  import "./chunk-ZECJ7Q6C.js";
57
57
  import "./chunk-CDM6XMOT.js";
58
58
  import "./chunk-2SKMEL7V.js";
59
- import "./chunk-M6ZQAFPD.js";
59
+ import "./chunk-DNM3XZCK.js";
60
60
  import "./chunk-TIVMAITN.js";
61
- import "./chunk-M4NV5PPU.js";
61
+ import "./chunk-2MS623GW.js";
62
62
  import "./chunk-NXMESY4J.js";
63
63
  import "./chunk-EQW6HOP4.js";
64
64
  import "./chunk-MKSTL6DR.js";
65
65
  import "./chunk-CYTFO2LF.js";
66
- import "./chunk-Q7Y6JQ3R.js";
66
+ import "./chunk-CIHHTS5B.js";
67
67
  import "./chunk-C3Z4DX3V.js";
68
68
  import "./chunk-IYULMRBE.js";
69
- import "./chunk-KCMGIYPO.js";
69
+ import "./chunk-DLJJOCIT.js";
70
70
  import "./chunk-GXCDD6NG.js";
71
71
  import "./chunk-FMAVHTYB.js";
72
72
  import "./chunk-N7VMGZCU.js";
73
- import "./chunk-NJJCTEBM.js";
73
+ import "./chunk-7SXV7NUS.js";
74
74
  import "./chunk-NOTA6TEI.js";
75
- import "./chunk-D6PVMUCX.js";
76
- import "./chunk-MB2SQF7N.js";
77
- import "./chunk-65GPEV5V.js";
75
+ import "./chunk-VDY2GR6U.js";
76
+ import "./chunk-7WEYXYLC.js";
77
+ import "./chunk-QKPOIJBT.js";
78
78
  import "./chunk-ICLB27PZ.js";
79
79
  import "./chunk-GI5R5B3S.js";
80
80
  import "./chunk-4WW3SGMH.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  mapContentAspect,
3
3
  mapExportDimensions
4
- } from "./chunk-J6AEKIRQ.js";
5
- import "./chunk-4RY5D5RE.js";
4
+ } from "./chunk-2I4UQG7W.js";
5
+ import "./chunk-AM42TLSZ.js";
6
6
  import "./chunk-AXLF3KRE.js";
7
7
  import "./chunk-KMU65FYM.js";
8
8
  import "./chunk-VLC6WNRD.js";
@@ -2,15 +2,15 @@ import {
2
2
  extractSymbols,
3
3
  looksLikeFlowchart,
4
4
  parseFlowchart
5
- } from "./chunk-M6ZQAFPD.js";
5
+ } from "./chunk-DNM3XZCK.js";
6
6
  import "./chunk-TIVMAITN.js";
7
7
  import "./chunk-NXMESY4J.js";
8
8
  import "./chunk-N7VMGZCU.js";
9
- import "./chunk-NJJCTEBM.js";
9
+ import "./chunk-7SXV7NUS.js";
10
10
  import "./chunk-NOTA6TEI.js";
11
- import "./chunk-D6PVMUCX.js";
12
- import "./chunk-MB2SQF7N.js";
13
- import "./chunk-65GPEV5V.js";
11
+ import "./chunk-VDY2GR6U.js";
12
+ import "./chunk-7WEYXYLC.js";
13
+ import "./chunk-QKPOIJBT.js";
14
14
  import "./chunk-ICLB27PZ.js";
15
15
  import "./chunk-TIIZIAGS.js";
16
16
  import "./chunk-KAO7JL4I.js";
@@ -1,29 +1,31 @@
1
1
  import {
2
2
  renderFlowchart,
3
3
  renderFlowchartForExport
4
- } from "./chunk-472EOHVW.js";
4
+ } from "./chunk-AYUSD4Z6.js";
5
5
  import "./chunk-26EVL454.js";
6
- import "./chunk-WK5QEYFA.js";
7
- import "./chunk-LDDDKWL6.js";
6
+ import "./chunk-JT2BG7LM.js";
7
+ import "./chunk-TDAGJJPZ.js";
8
8
  import "./chunk-XBJJP2HN.js";
9
- import "./chunk-ADVGV3P7.js";
10
- import "./chunk-EJS3K44P.js";
11
- import "./chunk-P5FUWXPW.js";
12
- import "./chunk-QT3KDDXK.js";
9
+ import "./chunk-6JCTW74W.js";
10
+ import "./chunk-VGAMBOOC.js";
11
+ import "./chunk-3ZP3QC47.js";
12
+ import "./chunk-WTTIODDV.js";
13
+ import "./chunk-IN7XI6NO.js";
13
14
  import "./chunk-EPDBWATV.js";
14
15
  import "./chunk-CYRB2JTN.js";
15
16
  import "./chunk-24YPR5EH.js";
17
+ import "./chunk-UIEKW4SG.js";
16
18
  import "./chunk-VLC6WNRD.js";
17
19
  import "./chunk-XCKNFFKM.js";
18
- import "./chunk-M6ZQAFPD.js";
20
+ import "./chunk-DNM3XZCK.js";
19
21
  import "./chunk-TIVMAITN.js";
20
22
  import "./chunk-NXMESY4J.js";
21
23
  import "./chunk-N7VMGZCU.js";
22
- import "./chunk-NJJCTEBM.js";
24
+ import "./chunk-7SXV7NUS.js";
23
25
  import "./chunk-NOTA6TEI.js";
24
- import "./chunk-D6PVMUCX.js";
25
- import "./chunk-MB2SQF7N.js";
26
- import "./chunk-65GPEV5V.js";
26
+ import "./chunk-VDY2GR6U.js";
27
+ import "./chunk-7WEYXYLC.js";
28
+ import "./chunk-QKPOIJBT.js";
27
29
  import "./chunk-ICLB27PZ.js";
28
30
  import "./chunk-TIIZIAGS.js";
29
31
  import "./chunk-UOCWYLYT.js";
package/dist/index.js CHANGED
@@ -11,20 +11,20 @@ import {
11
11
  } from "./chunk-SQAG3UXH.js";
12
12
  import {
13
13
  render
14
- } from "./chunk-IESUM4N5.js";
14
+ } from "./chunk-4SP6OUO7.js";
15
15
  import {
16
16
  D3_DATA_CHART_TYPES,
17
17
  renderDataChartD3,
18
18
  supportsD3DataChart
19
- } from "./chunk-KCHQVED5.js";
19
+ } from "./chunk-YQMIKX54.js";
20
20
  import {
21
21
  renderErrorCard
22
- } from "./chunk-FIYW7JW4.js";
22
+ } from "./chunk-2FDQEQID.js";
23
23
  import {
24
24
  getDiagnosticSpec,
25
25
  listDiagnosticCodes,
26
26
  parseDgmo
27
- } from "./chunk-YDZIVDVR.js";
27
+ } from "./chunk-5ZUZZDW5.js";
28
28
  import "./chunk-H6BT45SN.js";
29
29
  import "./chunk-3PP746YM.js";
30
30
  import "./chunk-NM5V5EKY.js";
@@ -51,9 +51,9 @@ import "./chunk-PGSGJLUR.js";
51
51
  import "./chunk-7PJBJ2DU.js";
52
52
  import "./chunk-EPDBWATV.js";
53
53
  import "./chunk-3GUEYQGL.js";
54
- import "./chunk-3GCASUWA.js";
54
+ import "./chunk-TASRGDYP.js";
55
55
  import "./chunk-6XLMTAEX.js";
56
- import "./chunk-VSOZZYLK.js";
56
+ import "./chunk-NERQSSYD.js";
57
57
  import "./chunk-BQO24BDM.js";
58
58
  import "./chunk-R6EGUTIV.js";
59
59
  import "./chunk-QQJUTGQH.js";
@@ -74,9 +74,9 @@ import "./chunk-BRGRIZQB.js";
74
74
  import "./chunk-XSVWUOUZ.js";
75
75
  import "./chunk-JXGSTBW6.js";
76
76
  import "./chunk-H7AXCRO7.js";
77
- import "./chunk-A5WIAMCT.js";
77
+ import "./chunk-2XMTZ5JR.js";
78
78
  import "./chunk-24YPR5EH.js";
79
- import "./chunk-42UJ23H3.js";
79
+ import "./chunk-UIEKW4SG.js";
80
80
  import "./chunk-VLC6WNRD.js";
81
81
  import {
82
82
  GRID_DASH
@@ -87,7 +87,7 @@ import {
87
87
  decodeDiagramUrl,
88
88
  encodeDiagramUrl
89
89
  } from "./chunk-6OSGENN5.js";
90
- import "./chunk-UVX3IYXF.js";
90
+ import "./chunk-2HSHWPTO.js";
91
91
  import "./chunk-KRPLP5LP.js";
92
92
  import "./chunk-KBDMEOLI.js";
93
93
  import "./chunk-VSAKEMDD.js";
@@ -95,9 +95,9 @@ import "./chunk-5OTA2PUH.js";
95
95
  import "./chunk-ZECJ7Q6C.js";
96
96
  import "./chunk-CDM6XMOT.js";
97
97
  import "./chunk-2SKMEL7V.js";
98
- import "./chunk-M6ZQAFPD.js";
98
+ import "./chunk-DNM3XZCK.js";
99
99
  import "./chunk-TIVMAITN.js";
100
- import "./chunk-M4NV5PPU.js";
100
+ import "./chunk-2MS623GW.js";
101
101
  import "./chunk-NXMESY4J.js";
102
102
  import "./chunk-EQW6HOP4.js";
103
103
  import "./chunk-MKSTL6DR.js";
@@ -105,10 +105,10 @@ import {
105
105
  choosePalette,
106
106
  extractPaletteDirective
107
107
  } from "./chunk-CYTFO2LF.js";
108
- import "./chunk-Q7Y6JQ3R.js";
108
+ import "./chunk-CIHHTS5B.js";
109
109
  import "./chunk-C3Z4DX3V.js";
110
110
  import "./chunk-IYULMRBE.js";
111
- import "./chunk-KCMGIYPO.js";
111
+ import "./chunk-DLJJOCIT.js";
112
112
  import {
113
113
  palettes
114
114
  } from "./chunk-GXCDD6NG.js";
@@ -117,13 +117,13 @@ import {
117
117
  resolvePaletteOrFallback
118
118
  } from "./chunk-FMAVHTYB.js";
119
119
  import "./chunk-N7VMGZCU.js";
120
- import "./chunk-NJJCTEBM.js";
120
+ import "./chunk-7SXV7NUS.js";
121
121
  import "./chunk-NOTA6TEI.js";
122
- import "./chunk-D6PVMUCX.js";
123
- import "./chunk-MB2SQF7N.js";
122
+ import "./chunk-VDY2GR6U.js";
123
+ import "./chunk-7WEYXYLC.js";
124
124
  import {
125
125
  safeHref
126
- } from "./chunk-65GPEV5V.js";
126
+ } from "./chunk-QKPOIJBT.js";
127
127
  import "./chunk-ICLB27PZ.js";
128
128
  import "./chunk-GI5R5B3S.js";
129
129
  import "./chunk-4WW3SGMH.js";
@@ -0,0 +1,24 @@
1
+ import {
2
+ layoutERDiagram
3
+ } from "./chunk-HI6R27YA.js";
4
+ import "./chunk-TDAGJJPZ.js";
5
+ import "./chunk-6JCTW74W.js";
6
+ import "./chunk-VGAMBOOC.js";
7
+ import "./chunk-3ZP3QC47.js";
8
+ import "./chunk-WTTIODDV.js";
9
+ import "./chunk-IN7XI6NO.js";
10
+ import "./chunk-7SXV7NUS.js";
11
+ import "./chunk-NOTA6TEI.js";
12
+ import "./chunk-VDY2GR6U.js";
13
+ import "./chunk-7WEYXYLC.js";
14
+ import "./chunk-QKPOIJBT.js";
15
+ import "./chunk-ICLB27PZ.js";
16
+ import "./chunk-TIIZIAGS.js";
17
+ import "./chunk-KAO7JL4I.js";
18
+ import "./chunk-6GXLAKUH.js";
19
+ import "./chunk-3J7O3CU6.js";
20
+ import "./chunk-BYU54C3S.js";
21
+ import "./chunk-YLJ4XMA6.js";
22
+ export {
23
+ layoutERDiagram
24
+ };
@@ -0,0 +1,24 @@
1
+ import {
2
+ layoutClassDiagram
3
+ } from "./chunk-RESEJSCV.js";
4
+ import "./chunk-TDAGJJPZ.js";
5
+ import "./chunk-6JCTW74W.js";
6
+ import "./chunk-VGAMBOOC.js";
7
+ import "./chunk-3ZP3QC47.js";
8
+ import "./chunk-WTTIODDV.js";
9
+ import "./chunk-IN7XI6NO.js";
10
+ import "./chunk-7SXV7NUS.js";
11
+ import "./chunk-NOTA6TEI.js";
12
+ import "./chunk-VDY2GR6U.js";
13
+ import "./chunk-7WEYXYLC.js";
14
+ import "./chunk-QKPOIJBT.js";
15
+ import "./chunk-ICLB27PZ.js";
16
+ import "./chunk-TIIZIAGS.js";
17
+ import "./chunk-KAO7JL4I.js";
18
+ import "./chunk-6GXLAKUH.js";
19
+ import "./chunk-3J7O3CU6.js";
20
+ import "./chunk-BYU54C3S.js";
21
+ import "./chunk-YLJ4XMA6.js";
22
+ export {
23
+ layoutClassDiagram
24
+ };
@@ -1,13 +1,14 @@
1
1
  import {
2
2
  computeNodeSize,
3
3
  layoutBoxesAndLines
4
- } from "./chunk-P5FUWXPW.js";
5
- import "./chunk-QT3KDDXK.js";
6
- import "./chunk-NJJCTEBM.js";
4
+ } from "./chunk-3ZP3QC47.js";
5
+ import "./chunk-WTTIODDV.js";
6
+ import "./chunk-IN7XI6NO.js";
7
+ import "./chunk-7SXV7NUS.js";
7
8
  import "./chunk-NOTA6TEI.js";
8
- import "./chunk-D6PVMUCX.js";
9
- import "./chunk-MB2SQF7N.js";
10
- import "./chunk-65GPEV5V.js";
9
+ import "./chunk-VDY2GR6U.js";
10
+ import "./chunk-7WEYXYLC.js";
11
+ import "./chunk-QKPOIJBT.js";
11
12
  import "./chunk-ICLB27PZ.js";
12
13
  import "./chunk-TIIZIAGS.js";
13
14
  import "./chunk-KAO7JL4I.js";
@@ -2,18 +2,19 @@ import {
2
2
  NODE_LABEL_LINE_HEIGHT,
3
3
  layoutGraph,
4
4
  wrapNodeLabel
5
- } from "./chunk-WK5QEYFA.js";
6
- import "./chunk-LDDDKWL6.js";
7
- import "./chunk-ADVGV3P7.js";
8
- import "./chunk-EJS3K44P.js";
9
- import "./chunk-P5FUWXPW.js";
10
- import "./chunk-QT3KDDXK.js";
5
+ } from "./chunk-JT2BG7LM.js";
6
+ import "./chunk-TDAGJJPZ.js";
7
+ import "./chunk-6JCTW74W.js";
8
+ import "./chunk-VGAMBOOC.js";
9
+ import "./chunk-3ZP3QC47.js";
10
+ import "./chunk-WTTIODDV.js";
11
+ import "./chunk-IN7XI6NO.js";
11
12
  import "./chunk-NXMESY4J.js";
12
- import "./chunk-NJJCTEBM.js";
13
+ import "./chunk-7SXV7NUS.js";
13
14
  import "./chunk-NOTA6TEI.js";
14
- import "./chunk-D6PVMUCX.js";
15
- import "./chunk-MB2SQF7N.js";
16
- import "./chunk-65GPEV5V.js";
15
+ import "./chunk-VDY2GR6U.js";
16
+ import "./chunk-7WEYXYLC.js";
17
+ import "./chunk-QKPOIJBT.js";
17
18
  import "./chunk-ICLB27PZ.js";
18
19
  import "./chunk-TIIZIAGS.js";
19
20
  import "./chunk-KAO7JL4I.js";
@@ -0,0 +1,11 @@
1
+ import {
2
+ layoutSwimlane
3
+ } from "./chunk-ERT7XDQW.js";
4
+ import "./chunk-VGAMBOOC.js";
5
+ import "./chunk-WTTIODDV.js";
6
+ import "./chunk-IN7XI6NO.js";
7
+ import "./chunk-KAO7JL4I.js";
8
+ import "./chunk-YLJ4XMA6.js";
9
+ export {
10
+ layoutSwimlane
11
+ };