@diagrammo/dgmo 0.24.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/internal.js CHANGED
@@ -838,7 +838,7 @@ function withTagAliases(base, aliases) {
838
838
  function isReservedKey(registry, key) {
839
839
  return registry.keys.has(key) || registry.tagAliases.has(key);
840
840
  }
841
- var SEQUENCE_REGISTRY, INFRA_REGISTRY, MAP_REGISTRY, ORG_REGISTRY, C4_REGISTRY, ER_REGISTRY, CLASS_REGISTRY, KANBAN_REGISTRY, SITEMAP_REGISTRY, GANTT_REGISTRY, PERT_REGISTRY, BOXES_AND_LINES_REGISTRY, TIMELINE_REGISTRY, MINDMAP_REGISTRY, TECH_RADAR_REGISTRY, CYCLE_REGISTRY, JOURNEY_MAP_REGISTRY, PYRAMID_REGISTRY, RING_REGISTRY, RACI_REGISTRY, WIREFRAME_REGISTRY;
841
+ var SEQUENCE_REGISTRY, INFRA_REGISTRY, MAP_REGISTRY, ORG_REGISTRY, C4_REGISTRY, ER_REGISTRY, KANBAN_REGISTRY, SITEMAP_REGISTRY, GANTT_REGISTRY, PERT_REGISTRY, BOXES_AND_LINES_REGISTRY, TIMELINE_REGISTRY, MINDMAP_REGISTRY, TECH_RADAR_REGISTRY, CYCLE_REGISTRY, JOURNEY_MAP_REGISTRY, PYRAMID_REGISTRY, RING_REGISTRY, RACI_REGISTRY;
842
842
  var init_reserved_key_registry = __esm({
843
843
  "src/utils/reserved-key-registry.ts"() {
844
844
  "use strict";
@@ -882,10 +882,6 @@ var init_reserved_key_registry = __esm({
882
882
  "description",
883
883
  "domain"
884
884
  ]);
885
- CLASS_REGISTRY = staticRegistry([
886
- "color",
887
- "description"
888
- ]);
889
885
  KANBAN_REGISTRY = staticRegistry([
890
886
  "color",
891
887
  "description",
@@ -961,7 +957,6 @@ var init_reserved_key_registry = __esm({
961
957
  "color",
962
958
  "description"
963
959
  ]);
964
- WIREFRAME_REGISTRY = staticRegistry([]);
965
960
  }
966
961
  });
967
962
 
@@ -4234,6 +4229,9 @@ var init_legend_layout = __esm({
4234
4229
  });
4235
4230
 
4236
4231
  // src/utils/legend-d3.ts
4232
+ function centerText(sel) {
4233
+ return sel.attr("dy", LEGEND_TEXT_DY);
4234
+ }
4237
4235
  function renderLegendD3(container, config, state, palette, isDark, callbacks, containerWidth) {
4238
4236
  const width = containerWidth ?? parseFloat(container.attr("width") || "800");
4239
4237
  let currentState = { ...state };
@@ -4316,21 +4314,21 @@ function renderCapsule(parent, capsule, palette, groupBg, pillBorder, _isDark, c
4316
4314
  const pill = capsule.pill;
4317
4315
  g.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", palette.bg);
4318
4316
  g.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", "none").attr("stroke", pillBorder).attr("stroke-width", 0.75);
4319
- g.append("text").attr("x", pill.x + pill.width / 2).attr("y", LEGEND_HEIGHT / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.text).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(capsule.groupName);
4317
+ g.append("text").attr("x", pill.x + pill.width / 2).attr("y", LEGEND_HEIGHT / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.text).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(capsule.groupName);
4320
4318
  if (capsule.gradient) {
4321
4319
  const gr = capsule.gradient;
4322
4320
  const gradId = `dgmo-legend-ramp-${capsule.groupName.toLowerCase().replace(/[^a-z0-9]+/g, "-")}`;
4323
4321
  const def = g.append("defs").append("linearGradient").attr("id", gradId);
4324
4322
  def.append("stop").attr("offset", "0%").attr("stop-color", mix(gr.hue, gr.base, 15));
4325
4323
  def.append("stop").attr("offset", "100%").attr("stop-color", gr.hue);
4326
- g.append("text").attr("x", gr.minX).attr("y", gr.textY).attr("dominant-baseline", "central").attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.minText);
4324
+ g.append("text").attr("x", gr.minX).attr("y", gr.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.minText);
4327
4325
  g.append("rect").attr("class", "dgmo-legend-gradient-ramp").attr("data-ramp-min", gr.min).attr("data-ramp-max", gr.max).attr("x", gr.rampX).attr("y", gr.rampY).attr("width", gr.rampW).attr("height", gr.rampH).attr("rx", 2).attr("fill", `url(#${gradId})`);
4328
- g.append("text").attr("x", gr.maxX).attr("y", gr.textY).attr("dominant-baseline", "central").attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.maxText);
4326
+ g.append("text").attr("x", gr.maxX).attr("y", gr.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.maxText);
4329
4327
  }
4330
4328
  for (const entry of capsule.entries) {
4331
4329
  const entryG = g.append("g").attr("data-legend-entry", entry.value.toLowerCase()).attr("data-series-name", entry.value).style("cursor", "pointer");
4332
4330
  entryG.append("circle").attr("cx", entry.dotCx).attr("cy", entry.dotCy).attr("r", LEGEND_DOT_R).attr("fill", entry.color);
4333
- entryG.append("text").attr("x", entry.textX).attr("y", entry.textY).attr("dominant-baseline", "central").attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("font-family", FONT_FAMILY).text(entry.displayValue ?? entry.value);
4331
+ entryG.append("text").attr("x", entry.textX).attr("y", entry.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("font-family", FONT_FAMILY).text(entry.displayValue ?? entry.value);
4334
4332
  if (callbacks?.onEntryHover) {
4335
4333
  const groupName = capsule.groupName;
4336
4334
  const entryValue = entry.value;
@@ -4350,7 +4348,7 @@ function renderCapsule(parent, capsule, palette, groupBg, pillBorder, _isDark, c
4350
4348
  function renderPill(parent, pill, palette, groupBg, callbacks) {
4351
4349
  const g = parent.append("g").attr("transform", `translate(${pill.x},${pill.y})`).attr("data-legend-group", pill.groupName.toLowerCase()).style("cursor", "pointer");
4352
4350
  g.append("rect").attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", groupBg);
4353
- g.append("text").attr("x", pill.width / 2).attr("y", pill.height / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(pill.groupName);
4351
+ g.append("text").attr("x", pill.width / 2).attr("y", pill.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(pill.groupName);
4354
4352
  if (callbacks?.onGroupToggle) {
4355
4353
  const cb = callbacks.onGroupToggle;
4356
4354
  const name = pill.groupName;
@@ -4373,7 +4371,7 @@ function renderControl(parent, ctrl, palette, _groupBg, pillBorder, _isDark, con
4373
4371
  textX = 8 + 14 + LEGEND_ENTRY_DOT_GAP + measureLegendText(ctrl.label, LEGEND_PILL_FONT_SIZE) / 2;
4374
4372
  }
4375
4373
  if (ctrl.label) {
4376
- g.append("text").attr("x", textX).attr("y", ctrl.height / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(ctrl.label);
4374
+ g.append("text").attr("x", textX).attr("y", ctrl.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(ctrl.label);
4377
4375
  }
4378
4376
  if (ctrl.children) {
4379
4377
  let cx = ctrl.width + 4;
@@ -4383,7 +4381,7 @@ function renderControl(parent, ctrl, palette, _groupBg, pillBorder, _isDark, con
4383
4381
  "fill",
4384
4382
  child.isActive ? palette.primary ?? palette.text : "none"
4385
4383
  ).attr("stroke", pillBorder).attr("stroke-width", 0.75);
4386
- childG.append("text").attr("x", child.width / 2).attr("y", ctrl.height / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", child.isActive ? palette.bg : palette.textMuted).attr("font-family", FONT_FAMILY).text(child.label);
4384
+ childG.append("text").attr("x", child.width / 2).attr("y", ctrl.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", child.isActive ? palette.bg : palette.textMuted).attr("font-family", FONT_FAMILY).text(child.label);
4387
4385
  const configCtrl2 = configControls?.find((c) => c.id === ctrl.id);
4388
4386
  const configChild = configCtrl2?.children?.find((c) => c.id === child.id);
4389
4387
  if (configChild?.onClick) {
@@ -4437,7 +4435,7 @@ function renderControlsGroup(parent, layout, palette, groupBg, pillBorder, callb
4437
4435
  } else {
4438
4436
  entryG.append("circle").attr("cx", tl.dotCx).attr("cy", tl.dotCy).attr("r", LEGEND_TOGGLE_DOT_R).attr("fill", "none").attr("stroke", palette.textMuted).attr("stroke-width", 1);
4439
4437
  }
4440
- entryG.append("text").attr("x", tl.textX).attr("y", tl.textY).attr("dominant-baseline", "central").attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("opacity", tl.active ? 1 : LEGEND_TOGGLE_OFF_OPACITY).attr("font-family", FONT_FAMILY).text(tl.label);
4438
+ entryG.append("text").attr("x", tl.textX).attr("y", tl.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("opacity", tl.active ? 1 : LEGEND_TOGGLE_OFF_OPACITY).attr("font-family", FONT_FAMILY).text(tl.label);
4441
4439
  if (callbacks?.onControlsToggle && toggle) {
4442
4440
  const cb = callbacks.onControlsToggle;
4443
4441
  const id = tl.id;
@@ -4450,6 +4448,7 @@ function renderControlsGroup(parent, layout, palette, groupBg, pillBorder, callb
4450
4448
  }
4451
4449
  }
4452
4450
  }
4451
+ var LEGEND_TEXT_DY;
4453
4452
  var init_legend_d3 = __esm({
4454
4453
  "src/utils/legend-d3.ts"() {
4455
4454
  "use strict";
@@ -4457,6 +4456,7 @@ var init_legend_d3 = __esm({
4457
4456
  init_legend_layout();
4458
4457
  init_color_utils();
4459
4458
  init_fonts();
4459
+ LEGEND_TEXT_DY = "0.32em";
4460
4460
  }
4461
4461
  });
4462
4462
 
@@ -4642,7 +4642,6 @@ var init_name_normalize = __esm({
4642
4642
  var parser_exports = {};
4643
4643
  __export(parser_exports, {
4644
4644
  isSequenceBlock: () => isSequenceBlock,
4645
- isSequenceMessage: () => isSequenceMessage,
4646
4645
  isSequenceNote: () => isSequenceNote,
4647
4646
  isSequenceSection: () => isSequenceSection,
4648
4647
  looksLikeSequence: () => looksLikeSequence,
@@ -4658,9 +4657,6 @@ function isHardRemovedToken(remainder) {
4658
4657
  }
4659
4658
  return { removed: false };
4660
4659
  }
4661
- function isSequenceMessage(el) {
4662
- return el.kind === "message";
4663
- }
4664
4660
  function isSequenceBlock(el) {
4665
4661
  return el.kind === "block";
4666
4662
  }
@@ -16381,6 +16377,9 @@ function parseMap(content) {
16381
16377
  break;
16382
16378
  // ── Cosmetic `no-*` opt-outs: bare flags, idempotent (mirror `no-legend`,
16383
16379
  // no dup warning); each defaults the feature ON when absent. ──
16380
+ case "no-title":
16381
+ d.noTitle = true;
16382
+ break;
16384
16383
  case "no-legend":
16385
16384
  d.noLegend = true;
16386
16385
  break;
@@ -16402,6 +16401,9 @@ function parseMap(content) {
16402
16401
  case "no-colorize":
16403
16402
  d.noColorize = true;
16404
16403
  break;
16404
+ case "no-cluster-pois":
16405
+ d.noClusterPois = true;
16406
+ break;
16405
16407
  }
16406
16408
  }
16407
16409
  function handleTag(trimmed, line12) {
@@ -16703,13 +16705,15 @@ var init_parser12 = __esm({
16703
16705
  "locale",
16704
16706
  "active-tag",
16705
16707
  "caption",
16708
+ "no-title",
16706
16709
  "no-legend",
16707
16710
  "no-coastline",
16708
16711
  "no-relief",
16709
16712
  "no-context-labels",
16710
16713
  "no-region-labels",
16711
16714
  "no-poi-labels",
16712
- "no-colorize"
16715
+ "no-colorize",
16716
+ "no-cluster-pois"
16713
16717
  ]);
16714
16718
  }
16715
16719
  });
@@ -37512,18 +37516,10 @@ var init_layout11 = __esm({
37512
37516
  // src/pert/renderer.ts
37513
37517
  var renderer_exports11 = {};
37514
37518
  __export(renderer_exports11, {
37515
- PERT_LEGEND_PILL_HEIGHT: () => PERT_LEGEND_PILL_HEIGHT,
37516
- highlightPertCriticalPath: () => highlightPertCriticalPath,
37517
- highlightPertSet: () => highlightPertSet,
37518
37519
  measurePertAnalysisBlock: () => measurePertAnalysisBlock,
37519
- pertLegendBlockWidth: () => pertLegendBlockWidth,
37520
- pertLegendEntries: () => pertLegendEntries,
37521
- renderLegendBlock: () => renderLegendBlock,
37522
37520
  renderPert: () => renderPert,
37523
37521
  renderPertAnalysisBlock: () => renderPertAnalysisBlock,
37524
- renderPertForExport: () => renderPertForExport,
37525
- resetPertCriticalPath: () => resetPertCriticalPath,
37526
- resetPertHighlight: () => resetPertHighlight
37522
+ renderPertForExport: () => renderPertForExport
37527
37523
  });
37528
37524
  import * as d3Selection12 from "d3-selection";
37529
37525
  import * as d3Shape8 from "d3-shape";
@@ -37608,16 +37604,14 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
37608
37604
  const standaloneFieldLegendWidthForExport = layout.width;
37609
37605
  const analysisBlockHeight = analysisLayer.analysisHasContent ? CAPTION_TOP_GAP + analysisLayer.analysisRowHeight : 0;
37610
37606
  const fieldLegendBlockHeight = analysisLayer.fieldLegendStandalone ? CAPTION_TOP_GAP + fieldLegendHeightFor(standaloneFieldLegendWidthForExport) : 0;
37611
- const showTopLegend = options.showTopLegend ?? true;
37612
- const legendEntries = showTopLegend ? pertLegendEntries(resolved) : [];
37607
+ const showLegend = options.showLegend ?? true;
37613
37608
  const tagLegendActive = resolveActiveTagGroup(
37614
37609
  resolved.tagGroups,
37615
37610
  resolved.options.activeTag,
37616
37611
  options.activeTagOverride
37617
37612
  );
37618
- const showTagLegend = showTopLegend && resolved.tagGroups.length > 0;
37619
- const tagLegendBlockHeight = showTagLegend ? LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0;
37620
- const legendBlockHeight = (legendEntries.length > 0 ? LEGEND_TOP_GAP + LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0) + tagLegendBlockHeight;
37613
+ const showTagLegend = showLegend && resolved.tagGroups.length > 0;
37614
+ const legendBlockHeight = showTagLegend ? LEGEND_TOP_GAP + LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0;
37621
37615
  const naturalChartWidth = layout.width + DIAGRAM_PADDING11 * 2;
37622
37616
  const minAnalysisRowW = analysisLayer.analysisHasContent ? analysisLayer.minContentWidth + 2 * DIAGRAM_PADDING11 : 0;
37623
37617
  const naturalWidth = Math.max(naturalChartWidth, minAnalysisRowW);
@@ -37640,8 +37634,7 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
37640
37634
  const sLegendTopGap = ctx.aesthetic(LEGEND_TOP_GAP);
37641
37635
  const sLegendBottomGap = ctx.aesthetic(LEGEND_BOTTOM_GAP);
37642
37636
  const sLegendPillHeight = ctx.structural(LEGEND_PILL_HEIGHT);
37643
- const sTagLegendBlockHeight = showTagLegend ? sLegendPillHeight + sLegendBottomGap : 0;
37644
- const sLegendBlockHeight = (legendEntries.length > 0 ? sLegendTopGap + sLegendPillHeight + sLegendBottomGap : 0) + sTagLegendBlockHeight;
37637
+ const sLegendBlockHeight = showTagLegend ? sLegendTopGap + sLegendPillHeight + sLegendBottomGap : 0;
37645
37638
  const sNodeRadius = ctx.structural(NODE_RADIUS2);
37646
37639
  const sNodeStrokeWidth = ctx.structural(NODE_STROKE_WIDTH10);
37647
37640
  const sNodeFontSize = ctx.text(NODE_FONT_SIZE4);
@@ -37673,17 +37666,8 @@ function renderPert(container, resolved, layout, palette, isDark, options = {})
37673
37666
  }
37674
37667
  const offsetX = Math.max(sDiagramPad, (svgW - layout.width) / 2);
37675
37668
  const offsetY = sDiagramPad + sTitleHeight + sLegendBlockHeight;
37676
- if (legendEntries.length > 0) {
37677
- renderLegendBlock(svg, legendEntries, {
37678
- x: 0,
37679
- y: sDiagramPad + sTitleHeight + sLegendTopGap,
37680
- width: svgW,
37681
- palette,
37682
- isDark
37683
- });
37684
- }
37685
37669
  if (showTagLegend) {
37686
- const tagLegendY = sDiagramPad + sTitleHeight + (legendEntries.length > 0 ? sLegendTopGap + sLegendPillHeight : sLegendTopGap);
37670
+ const tagLegendY = sDiagramPad + sTitleHeight + sLegendTopGap;
37687
37671
  renderTagLegendRow(svg, resolved, palette, isDark, {
37688
37672
  x: 0,
37689
37673
  y: tagLegendY,
@@ -37767,8 +37751,7 @@ function renderPertForExport(content, theme, palette, now) {
37767
37751
  }
37768
37752
  const captionBoxHeight = captionBullets.length > 0 ? captionBullets.length * CAPTION_LINE_HEIGHT + 2 * CAPTION_BOX_PADDING_Y + CAPTION_HEADER_BAND_HEIGHT : 0;
37769
37753
  const captionBlockHeight = captionBullets.length > 0 ? CAPTION_TOP_GAP + captionBoxHeight : 0;
37770
- const legendEntries = pertLegendEntries(resolved);
37771
- const legendBlockHeight = legendEntries.length > 0 ? LEGEND_TOP_GAP + LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0;
37754
+ const legendBlockHeight = resolved.tagGroups.length > 0 ? LEGEND_TOP_GAP + LEGEND_PILL_HEIGHT + LEGEND_BOTTOM_GAP : 0;
37772
37755
  const exportWidth = layout.width + DIAGRAM_PADDING11 * 2;
37773
37756
  const exportHeight = layout.height + DIAGRAM_PADDING11 * 2 + titleHeight + legendBlockHeight + captionBlockHeight;
37774
37757
  const container = document.createElement("div");
@@ -38308,22 +38291,22 @@ function renderEdges2(root, resolved, layout, palette, collapsedSet, sc = {}) {
38308
38291
  if (srcGroup && tgtGroup && srcGroup === tgtGroup && collapsedSet.has(srcGroup)) {
38309
38292
  continue;
38310
38293
  }
38311
- const isCritical2 = criticalSet.has(e.source) && criticalSet.has(e.target);
38294
+ const isCritical = criticalSet.has(e.source) && criticalSet.has(e.target);
38312
38295
  let band;
38313
38296
  if (mcOn) {
38314
38297
  const sc2 = critById.get(e.source);
38315
38298
  const tc = critById.get(e.target);
38316
38299
  const minC = sc2 === null || tc === null || sc2 === void 0 || tc === void 0 ? null : Math.min(sc2, tc);
38317
38300
  band = criticalityBand(minC);
38318
- if (band === null && isCritical2) band = "red";
38301
+ if (band === null && isCritical) band = "red";
38319
38302
  } else {
38320
- band = isCritical2 ? "red" : null;
38303
+ band = isCritical ? "red" : null;
38321
38304
  }
38322
38305
  const path = lineGenerator6(e.points);
38323
38306
  if (!path) continue;
38324
38307
  const sESW = sc.edgeStrokeWidth ?? EDGE_STROKE_WIDTH10;
38325
38308
  const sELFS = sc.edgeLabelFontSize ?? 10;
38326
- layer.append("path").attr("class", "pert-edge").attr("d", path).attr("fill", "none").attr("stroke", bandColor(band, palette, palette.textMuted)).attr("stroke-width", sESW).attr("marker-end", `url(#${bandArrow(band)})`).attr("data-source", e.source).attr("data-target", e.target).attr("data-critical", String(isCritical2)).attr("data-critical-path", String(isCritical2)).attr("data-criticality-band", band ?? "");
38309
+ layer.append("path").attr("class", "pert-edge").attr("d", path).attr("fill", "none").attr("stroke", bandColor(band, palette, palette.textMuted)).attr("stroke-width", sESW).attr("marker-end", `url(#${bandArrow(band)})`).attr("data-source", e.source).attr("data-target", e.target).attr("data-critical", String(isCritical)).attr("data-critical-path", String(isCritical)).attr("data-criticality-band", band ?? "");
38327
38310
  const parsedEdge = edgeByKey.get(`${e.source}->${e.target}`);
38328
38311
  const labelText = parsedEdge ? formatEdgeLabel(parsedEdge) : null;
38329
38312
  if (labelText) {
@@ -38375,7 +38358,7 @@ function renderNodes2(root, _defs, resolved, layout, palette, isDark, sizing, on
38375
38358
  const r = byId.get(node.id);
38376
38359
  if (!r) continue;
38377
38360
  if (r.activity.groupId && collapsedSet.has(r.activity.groupId)) continue;
38378
- const isCritical2 = r.isCriticalPath;
38361
+ const isCritical = r.isCriticalPath;
38379
38362
  const isTbd = tbdSet.has(node.id);
38380
38363
  const dashArray = isTbd ? "4,3" : "none";
38381
38364
  const isTopMu = topMuIds.has(node.id);
@@ -38383,14 +38366,14 @@ function renderNodes2(root, _defs, resolved, layout, palette, isDark, sizing, on
38383
38366
  let band;
38384
38367
  if (mcOn) {
38385
38368
  band = criticalityBand(r.criticality);
38386
- if (band === null && isCritical2) band = "red";
38369
+ if (band === null && isCritical) band = "red";
38387
38370
  } else {
38388
- band = isCritical2 ? "red" : null;
38371
+ band = isCritical ? "red" : null;
38389
38372
  }
38390
38373
  const g = layer.append("g").attr("class", "pert-node").attr("transform", `translate(${node.x}, ${node.y})`).attr("data-activity-id", node.id).attr("data-line-number", String(r.activity.lineNumber)).attr(
38391
38374
  "data-group-id",
38392
38375
  r.activity.groupId !== void 0 ? r.activity.groupId : ""
38393
- ).attr("data-critical-path", String(isCritical2)).attr("data-criticality-band", band ?? "").attr("data-duration-rank", isTopMu ? "top" : isBottomMu ? "bottom" : "");
38376
+ ).attr("data-critical-path", String(isCritical)).attr("data-criticality-band", band ?? "").attr("data-duration-rank", isTopMu ? "top" : isBottomMu ? "bottom" : "");
38394
38377
  if (r.activity.tags) {
38395
38378
  for (const [tagKey, tagValue] of Object.entries(r.activity.tags)) {
38396
38379
  g.attr(`data-tag-${tagKey}`, String(tagValue).toLowerCase());
@@ -38700,69 +38683,6 @@ function computeAnchorPinSet(resolved) {
38700
38683
  }
38701
38684
  return pinned;
38702
38685
  }
38703
- function isCritical(el, mcOn) {
38704
- if (mcOn) {
38705
- return HIGHLIGHT_BANDS.has(el.getAttribute("data-criticality-band") ?? "");
38706
- }
38707
- return el.getAttribute("data-critical-path") === "true";
38708
- }
38709
- function isInHighlightSet(el, kind, mcOn) {
38710
- if (kind === "critical") return isCritical(el, mcOn);
38711
- if (kind === "milestone") {
38712
- return el.getAttribute("data-milestone") === "true";
38713
- }
38714
- return el.hasAttribute("data-anchor");
38715
- }
38716
- function highlightPertSet(container, kind) {
38717
- const svg = container.querySelector("svg");
38718
- if (!svg) return;
38719
- const mcOn = Array.from(svg.querySelectorAll(".pert-edge")).some((e) => {
38720
- const b = e.getAttribute("data-criticality-band");
38721
- return b !== null && b !== "" && b !== "red";
38722
- });
38723
- const candidates = svg.querySelectorAll(
38724
- ".pert-node, .pert-edge, .pert-group-collapsed"
38725
- );
38726
- let anyMatch = false;
38727
- for (const el of candidates) {
38728
- if (isInHighlightSet(el, kind, mcOn)) {
38729
- anyMatch = true;
38730
- break;
38731
- }
38732
- }
38733
- if (!anyMatch) return;
38734
- svg.setAttribute("data-pert-highlight-active", kind);
38735
- for (const el of svg.querySelectorAll(".pert-node, .pert-edge")) {
38736
- el.setAttribute(
38737
- "opacity",
38738
- isInHighlightSet(el, kind, mcOn) ? "1" : String(FADE_OPACITY)
38739
- );
38740
- }
38741
- for (const el of svg.querySelectorAll(".pert-group")) {
38742
- const inSet = el.classList.contains("pert-group-collapsed") && isInHighlightSet(el, kind, mcOn);
38743
- el.setAttribute(
38744
- "opacity",
38745
- inSet ? "1" : String(FADE_OPACITY)
38746
- );
38747
- }
38748
- }
38749
- function highlightPertCriticalPath(container) {
38750
- highlightPertSet(container, "critical");
38751
- }
38752
- function resetPertHighlight(container) {
38753
- const svg = container.querySelector("svg");
38754
- if (!svg) return;
38755
- svg.removeAttribute("data-pert-highlight-active");
38756
- svg.removeAttribute("data-critical-path-active");
38757
- for (const el of svg.querySelectorAll(
38758
- ".pert-node, .pert-edge, .pert-group"
38759
- )) {
38760
- el.removeAttribute("opacity");
38761
- }
38762
- }
38763
- function resetPertCriticalPath(container) {
38764
- resetPertHighlight(container);
38765
- }
38766
38686
  function anchorAnnotationText(resolved) {
38767
38687
  const anchor = resolved.options.anchor;
38768
38688
  if (anchor === null) return null;
@@ -38815,70 +38735,6 @@ function renderCaptionBlock(svg, bullets, args) {
38815
38735
  if (i > 0) tspan.attr("dy", CAPTION_LINE_HEIGHT);
38816
38736
  });
38817
38737
  }
38818
- function pertLegendEntries(resolved) {
38819
- const entries = [];
38820
- if (resolved.activities.length > 0) {
38821
- entries.push({ kind: "critical", label: "Critical Path" });
38822
- }
38823
- if (resolved.options.anchor !== null) {
38824
- entries.push({ kind: "anchor", label: "Anchor" });
38825
- }
38826
- if (resolved.activities.some((a) => a.activity.isMilestone)) {
38827
- entries.push({ kind: "milestone", label: "Milestone" });
38828
- }
38829
- return entries;
38830
- }
38831
- function legendSwatchWidth(kind) {
38832
- if (kind === "critical") return LEGEND_DOT_R * 2;
38833
- if (kind === "anchor") return PIN_ICON_W;
38834
- return LEGEND_FONT_SIZE;
38835
- }
38836
- function legendPillWidth(entry) {
38837
- const labelW = measureLegendText(entry.label, LEGEND_FONT_SIZE);
38838
- return Math.ceil(
38839
- LEGEND_PILL_PADDING_X + legendSwatchWidth(entry.kind) + LEGEND_SWATCH_GAP + labelW + LEGEND_PILL_PADDING_X
38840
- );
38841
- }
38842
- function legendNaturalWidth(entries) {
38843
- if (entries.length === 0) return 0;
38844
- let total = 0;
38845
- for (const e of entries) total += legendPillWidth(e);
38846
- total += (entries.length - 1) * LEGEND_PILL_GAP;
38847
- return total;
38848
- }
38849
- function pertLegendBlockWidth(entries) {
38850
- return legendNaturalWidth(entries);
38851
- }
38852
- function renderLegendBlock(svg, entries, args) {
38853
- if (entries.length === 0) return;
38854
- const { x, y, width, palette, isDark } = args;
38855
- const groupBg = isDark ? mix(palette.surface, palette.bg, 50) : mix(palette.surface, palette.bg, 30);
38856
- const block = svg.append("g").attr("class", "pert-legend").attr("data-pert-legend", "");
38857
- const totalW = legendNaturalWidth(entries);
38858
- let pillX = x + (width - totalW) / 2;
38859
- for (const entry of entries) {
38860
- const pillW = legendPillWidth(entry);
38861
- const pill = block.append("g").attr("class", "pert-legend-entry").attr("data-legend-entry", entry.kind).attr("transform", `translate(${pillX}, ${y})`).style("cursor", "pointer");
38862
- pill.append("rect").attr("class", "pert-legend-pill").attr("width", pillW).attr("height", LEGEND_PILL_HEIGHT).attr("rx", LEGEND_PILL_HEIGHT / 2).attr("ry", LEGEND_PILL_HEIGHT / 2).attr("fill", groupBg);
38863
- const swatchW = legendSwatchWidth(entry.kind);
38864
- const swatchCx = LEGEND_PILL_PADDING_X + swatchW / 2;
38865
- const swatchCy = LEGEND_PILL_HEIGHT / 2;
38866
- if (entry.kind === "critical") {
38867
- pill.append("circle").attr("class", "pert-legend-swatch").attr("cx", swatchCx).attr("cy", swatchCy).attr("r", LEGEND_DOT_R).attr("fill", palette.colors.red);
38868
- } else if (entry.kind === "anchor") {
38869
- drawAnchorPin(
38870
- pill,
38871
- swatchCx - PIN_ICON_W / 2,
38872
- swatchCy,
38873
- palette.textMuted
38874
- );
38875
- } else {
38876
- pill.append("text").attr("class", "pert-legend-swatch").attr("x", swatchCx).attr("y", swatchCy).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-family", FONT_FAMILY).attr("font-size", LEGEND_FONT_SIZE + 1).attr("fill", palette.textMuted).text("\u25C6");
38877
- }
38878
- pill.append("text").attr("class", "pert-legend-label").attr("x", LEGEND_PILL_PADDING_X + swatchW + LEGEND_SWATCH_GAP).attr("y", swatchCy).attr("dominant-baseline", "central").attr("font-family", FONT_FAMILY).attr("font-size", LEGEND_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).text(entry.label);
38879
- pillX += pillW + LEGEND_PILL_GAP;
38880
- }
38881
- }
38882
38738
  function renderTagLegendRow(svg, resolved, palette, isDark, args) {
38883
38739
  if (resolved.tagGroups.length === 0) return;
38884
38740
  const { x, y, width, activeGroup, exportMode } = args;
@@ -39325,7 +39181,7 @@ function formatScurveDate(iso) {
39325
39181
  if (month < 0 || month > 11 || isNaN(day)) return iso;
39326
39182
  return `${SCURVE_MONTH_NAMES[month]} ${day}`;
39327
39183
  }
39328
- var DIAGRAM_PADDING11, NODE_FONT_SIZE4, NODE_CELL_FONT_SIZE2, NODE_RADIUS2, NODE_STROKE_WIDTH10, NODE_TOP_ROW_HEIGHT, NODE_BOTTOM_ROW_HEIGHT, EDGE_STROKE_WIDTH10, ARROWHEAD_W4, ARROWHEAD_H4, CONTAINER_RADIUS3, CONTAINER_LABEL_FONT_SIZE3, CONTAINER_HEADER_HEIGHT3, COLLAPSE_BAR_HEIGHT7, FADE_OPACITY, DURATION_FADE_OPACITY, PIN_ICON_W, PIN_ICON_H, LEGEND_PILL_HEIGHT, LEGEND_PILL_PADDING_X, LEGEND_PILL_GAP, LEGEND_SWATCH_GAP, LEGEND_FONT_SIZE, LEGEND_TOP_GAP, LEGEND_BOTTOM_GAP, FIELD_LEGEND_HEADER_BAND_HEIGHT, FIELD_LEGEND_CELL_VPAD, FIELD_LEGEND_LABEL_FONT_SIZE, FIELD_LEGEND_DESC_FONT_SIZE, FIELD_LEGEND_DESC_LINE_HEIGHT, FIELD_LEGEND_LABEL_DESC_GAP, FIELD_LEGEND_CELLS, lineGenerator6, FIELD_LEGEND_MIN_W, HIGHLIGHT_BANDS, SUB_BULLET_INDENT, CAPTION_HEADER_BAND_HEIGHT, TORNADO_TOP_N, TORNADO_ROW_HEIGHT, TORNADO_NAME_COL_W, TORNADO_BAR_FONT_SIZE, TORNADO_BAR_HEIGHT, SUMMARY_MIN_W, SUMMARY_MAX_W, ANALYSIS_GAP, COL1_VSTACK_GAP, TORNADO_MIN_W, SCURVE_MIN_W, SCURVE_BOX_HEIGHT, SCURVE_PLOT_PADDING_X, SCURVE_PLOT_PADDING_RIGHT, SCURVE_PLOT_PADDING_BOTTOM, SCURVE_TICK_FONT_SIZE, SCURVE_PERCENTILE_RADIUS, PERT_LEGEND_PILL_HEIGHT, DAYS_PER_UNIT, SCURVE_MONTH_NAMES, UNIT_TO_DAYS_LOCAL2;
39184
+ var DIAGRAM_PADDING11, NODE_FONT_SIZE4, NODE_CELL_FONT_SIZE2, NODE_RADIUS2, NODE_STROKE_WIDTH10, NODE_TOP_ROW_HEIGHT, NODE_BOTTOM_ROW_HEIGHT, EDGE_STROKE_WIDTH10, ARROWHEAD_W4, ARROWHEAD_H4, CONTAINER_RADIUS3, CONTAINER_LABEL_FONT_SIZE3, CONTAINER_HEADER_HEIGHT3, COLLAPSE_BAR_HEIGHT7, DURATION_FADE_OPACITY, PIN_ICON_W, PIN_ICON_H, LEGEND_PILL_HEIGHT, LEGEND_TOP_GAP, LEGEND_BOTTOM_GAP, FIELD_LEGEND_HEADER_BAND_HEIGHT, FIELD_LEGEND_CELL_VPAD, FIELD_LEGEND_LABEL_FONT_SIZE, FIELD_LEGEND_DESC_FONT_SIZE, FIELD_LEGEND_DESC_LINE_HEIGHT, FIELD_LEGEND_LABEL_DESC_GAP, FIELD_LEGEND_CELLS, lineGenerator6, FIELD_LEGEND_MIN_W, SUB_BULLET_INDENT, CAPTION_HEADER_BAND_HEIGHT, TORNADO_TOP_N, TORNADO_ROW_HEIGHT, TORNADO_NAME_COL_W, TORNADO_BAR_FONT_SIZE, TORNADO_BAR_HEIGHT, SUMMARY_MIN_W, SUMMARY_MAX_W, ANALYSIS_GAP, COL1_VSTACK_GAP, TORNADO_MIN_W, SCURVE_MIN_W, SCURVE_BOX_HEIGHT, SCURVE_PLOT_PADDING_X, SCURVE_PLOT_PADDING_RIGHT, SCURVE_PLOT_PADDING_BOTTOM, SCURVE_TICK_FONT_SIZE, SCURVE_PERCENTILE_RADIUS, DAYS_PER_UNIT, SCURVE_MONTH_NAMES, UNIT_TO_DAYS_LOCAL2;
39329
39185
  var init_renderer11 = __esm({
39330
39186
  "src/pert/renderer.ts"() {
39331
39187
  "use strict";
@@ -39354,15 +39210,10 @@ var init_renderer11 = __esm({
39354
39210
  CONTAINER_LABEL_FONT_SIZE3 = 13;
39355
39211
  CONTAINER_HEADER_HEIGHT3 = 28;
39356
39212
  COLLAPSE_BAR_HEIGHT7 = 6;
39357
- FADE_OPACITY = 0.15;
39358
39213
  DURATION_FADE_OPACITY = 0.55;
39359
39214
  PIN_ICON_W = 13;
39360
39215
  PIN_ICON_H = 13;
39361
39216
  LEGEND_PILL_HEIGHT = LEGEND_HEIGHT;
39362
- LEGEND_PILL_PADDING_X = 8;
39363
- LEGEND_PILL_GAP = 8;
39364
- LEGEND_SWATCH_GAP = LEGEND_ENTRY_DOT_GAP;
39365
- LEGEND_FONT_SIZE = LEGEND_PILL_FONT_SIZE;
39366
39217
  LEGEND_TOP_GAP = 12;
39367
39218
  LEGEND_BOTTOM_GAP = 12;
39368
39219
  FIELD_LEGEND_HEADER_BAND_HEIGHT = 26;
@@ -39399,7 +39250,6 @@ var init_renderer11 = __esm({
39399
39250
  ];
39400
39251
  lineGenerator6 = d3Shape8.line().x((d) => d.x).y((d) => d.y).curve(d3Shape8.curveBasis);
39401
39252
  FIELD_LEGEND_MIN_W = 220;
39402
- HIGHLIGHT_BANDS = /* @__PURE__ */ new Set(["red", "orange", "yellow"]);
39403
39253
  SUB_BULLET_INDENT = 20;
39404
39254
  CAPTION_HEADER_BAND_HEIGHT = CAPTION_LINE_HEIGHT + 8;
39405
39255
  TORNADO_TOP_N = 10;
@@ -39419,7 +39269,6 @@ var init_renderer11 = __esm({
39419
39269
  SCURVE_PLOT_PADDING_BOTTOM = 44;
39420
39270
  SCURVE_TICK_FONT_SIZE = 13;
39421
39271
  SCURVE_PERCENTILE_RADIUS = 4;
39422
- PERT_LEGEND_PILL_HEIGHT = LEGEND_PILL_HEIGHT;
39423
39272
  DAYS_PER_UNIT = {
39424
39273
  min: 1 / (60 * 24),
39425
39274
  h: 1 / 24,
@@ -40946,31 +40795,31 @@ function renderGantt(container, resolved, palette, isDark, options, exportDims)
40946
40795
  todayHoverG.on("mouseenter", () => {
40947
40796
  g.selectAll(".gantt-task").attr(
40948
40797
  "opacity",
40949
- FADE_OPACITY2
40798
+ FADE_OPACITY
40950
40799
  );
40951
40800
  g.selectAll(".gantt-milestone").attr(
40952
40801
  "opacity",
40953
- FADE_OPACITY2
40802
+ FADE_OPACITY
40954
40803
  );
40955
40804
  g.selectAll(
40956
40805
  ".gantt-group-bar, .gantt-group-summary"
40957
- ).attr("opacity", FADE_OPACITY2);
40958
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
40959
- svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY2);
40960
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
40806
+ ).attr("opacity", FADE_OPACITY);
40807
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
40808
+ svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY);
40809
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
40961
40810
  g.selectAll(
40962
40811
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
40963
- ).attr("opacity", FADE_OPACITY2);
40812
+ ).attr("opacity", FADE_OPACITY);
40964
40813
  g.selectAll(
40965
40814
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
40966
- ).attr("opacity", FADE_OPACITY2);
40815
+ ).attr("opacity", FADE_OPACITY);
40967
40816
  g.selectAll(".gantt-era-group").attr(
40968
40817
  "opacity",
40969
- FADE_OPACITY2
40818
+ FADE_OPACITY
40970
40819
  );
40971
40820
  g.selectAll(".gantt-marker-group").attr(
40972
40821
  "opacity",
40973
- FADE_OPACITY2
40822
+ FADE_OPACITY
40974
40823
  );
40975
40824
  showGanttDateIndicators(
40976
40825
  g,
@@ -41202,28 +41051,28 @@ function applyCriticalPathHighlight(svg, chartG) {
41202
41051
  const el = d3Selection13.select(this);
41203
41052
  el.attr(
41204
41053
  "opacity",
41205
- el.attr("data-critical-path") === "true" ? 1 : FADE_OPACITY2
41054
+ el.attr("data-critical-path") === "true" ? 1 : FADE_OPACITY
41206
41055
  );
41207
41056
  });
41208
- chartG.selectAll(".gantt-milestone").attr("opacity", FADE_OPACITY2);
41209
- chartG.selectAll(".gantt-group-bar, .gantt-group-summary").attr("opacity", FADE_OPACITY2);
41057
+ chartG.selectAll(".gantt-milestone").attr("opacity", FADE_OPACITY);
41058
+ chartG.selectAll(".gantt-group-bar, .gantt-group-summary").attr("opacity", FADE_OPACITY);
41210
41059
  svg.selectAll(".gantt-task-label").each(function() {
41211
41060
  const el = d3Selection13.select(this);
41212
41061
  el.attr(
41213
41062
  "opacity",
41214
- el.attr("data-critical-path") === "true" ? 1 : FADE_OPACITY2
41063
+ el.attr("data-critical-path") === "true" ? 1 : FADE_OPACITY
41215
41064
  );
41216
41065
  });
41217
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41218
- svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY2);
41219
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41220
- svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY2);
41221
- chartG.selectAll(".gantt-lane-band, .gantt-lane-accent").attr("opacity", FADE_OPACITY2);
41066
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41067
+ svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY);
41068
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41069
+ svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY);
41070
+ chartG.selectAll(".gantt-lane-band, .gantt-lane-accent").attr("opacity", FADE_OPACITY);
41222
41071
  chartG.selectAll(".gantt-dep-arrow, .gantt-dep-arrowhead").each(function() {
41223
41072
  const el = d3Selection13.select(this);
41224
41073
  el.attr(
41225
41074
  "opacity",
41226
- el.attr("data-critical-path") === "true" ? 0.7 : FADE_OPACITY2
41075
+ el.attr("data-critical-path") === "true" ? 0.7 : FADE_OPACITY
41227
41076
  );
41228
41077
  });
41229
41078
  }
@@ -41402,27 +41251,27 @@ function renderTagLegend(svg, chartG, tagGroups, activeGroupName, chartLeftMargi
41402
41251
  const el = d3Selection13.select(this);
41403
41252
  el.attr(
41404
41253
  "opacity",
41405
- el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY2
41254
+ el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY
41406
41255
  );
41407
41256
  });
41408
- chartG.selectAll(".gantt-milestone").attr("opacity", FADE_OPACITY2);
41409
- chartG.selectAll(".gantt-group-bar, .gantt-group-summary").attr("opacity", FADE_OPACITY2);
41257
+ chartG.selectAll(".gantt-milestone").attr("opacity", FADE_OPACITY);
41258
+ chartG.selectAll(".gantt-group-bar, .gantt-group-summary").attr("opacity", FADE_OPACITY);
41410
41259
  svg.selectAll(".gantt-task-label").each(function() {
41411
41260
  const el = d3Selection13.select(this);
41412
41261
  el.attr(
41413
41262
  "opacity",
41414
- el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY2
41263
+ el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY
41415
41264
  );
41416
41265
  });
41417
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41266
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41418
41267
  svg.selectAll(".gantt-lane-header").each(function() {
41419
41268
  const el = d3Selection13.select(this);
41420
41269
  el.attr(
41421
41270
  "opacity",
41422
- el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY2
41271
+ el.attr(`data-tag-${tagKey}`) === ev ? 1 : FADE_OPACITY
41423
41272
  );
41424
41273
  });
41425
- chartG.selectAll(".gantt-lane-band, .gantt-lane-accent").attr("opacity", FADE_OPACITY2);
41274
+ chartG.selectAll(".gantt-lane-band, .gantt-lane-accent").attr("opacity", FADE_OPACITY);
41426
41275
  } else {
41427
41276
  if (criticalPathActive) {
41428
41277
  applyCriticalPathHighlight(svg, chartG);
@@ -41527,27 +41376,27 @@ function renderErasAndMarkers(g, svg, resolved, xScale, innerHeight, palette, er
41527
41376
  eraG.on("mouseenter", () => {
41528
41377
  g.selectAll(".gantt-task").attr(
41529
41378
  "opacity",
41530
- FADE_OPACITY2
41379
+ FADE_OPACITY
41531
41380
  );
41532
41381
  g.selectAll(".gantt-milestone").attr(
41533
41382
  "opacity",
41534
- FADE_OPACITY2
41383
+ FADE_OPACITY
41535
41384
  );
41536
41385
  g.selectAll(
41537
41386
  ".gantt-group-bar, .gantt-group-summary"
41538
- ).attr("opacity", FADE_OPACITY2);
41539
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41540
- svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY2);
41541
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41387
+ ).attr("opacity", FADE_OPACITY);
41388
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41389
+ svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY);
41390
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41542
41391
  g.selectAll(
41543
41392
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
41544
- ).attr("opacity", FADE_OPACITY2);
41393
+ ).attr("opacity", FADE_OPACITY);
41545
41394
  g.selectAll(
41546
41395
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
41547
- ).attr("opacity", FADE_OPACITY2);
41396
+ ).attr("opacity", FADE_OPACITY);
41548
41397
  g.selectAll(".gantt-marker-group").attr(
41549
41398
  "opacity",
41550
- FADE_OPACITY2
41399
+ FADE_OPACITY
41551
41400
  );
41552
41401
  eraRect.attr("opacity", hoverEraOpacity);
41553
41402
  if (eraTruncated) eraLabel.text(era.label);
@@ -41605,31 +41454,31 @@ function renderErasAndMarkers(g, svg, resolved, xScale, innerHeight, palette, er
41605
41454
  markerG.on("mouseenter", () => {
41606
41455
  g.selectAll(".gantt-task").attr(
41607
41456
  "opacity",
41608
- FADE_OPACITY2
41457
+ FADE_OPACITY
41609
41458
  );
41610
41459
  g.selectAll(".gantt-milestone").attr(
41611
41460
  "opacity",
41612
- FADE_OPACITY2
41461
+ FADE_OPACITY
41613
41462
  );
41614
41463
  g.selectAll(
41615
41464
  ".gantt-group-bar, .gantt-group-summary"
41616
- ).attr("opacity", FADE_OPACITY2);
41617
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41618
- svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY2);
41619
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41465
+ ).attr("opacity", FADE_OPACITY);
41466
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41467
+ svg.selectAll(".gantt-task-label").attr("opacity", FADE_OPACITY);
41468
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41620
41469
  g.selectAll(
41621
41470
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
41622
- ).attr("opacity", FADE_OPACITY2);
41471
+ ).attr("opacity", FADE_OPACITY);
41623
41472
  g.selectAll(
41624
41473
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
41625
- ).attr("opacity", FADE_OPACITY2);
41474
+ ).attr("opacity", FADE_OPACITY);
41626
41475
  g.selectAll(".gantt-era-group").attr(
41627
41476
  "opacity",
41628
- FADE_OPACITY2
41477
+ FADE_OPACITY
41629
41478
  );
41630
41479
  g.selectAll(".gantt-marker-group").attr(
41631
41480
  "opacity",
41632
- FADE_OPACITY2
41481
+ FADE_OPACITY
41633
41482
  );
41634
41483
  markerG.attr("opacity", 1);
41635
41484
  markerLine.attr("opacity", 0.8);
@@ -41705,7 +41554,7 @@ function renderSprintBands(g, svg, resolved, xScale, innerHeight, palette) {
41705
41554
  const id = el.attr("data-task-id");
41706
41555
  el.attr(
41707
41556
  "opacity",
41708
- id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY2
41557
+ id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY
41709
41558
  );
41710
41559
  });
41711
41560
  g.selectAll(".gantt-milestone").each(function() {
@@ -41713,7 +41562,7 @@ function renderSprintBands(g, svg, resolved, xScale, innerHeight, palette) {
41713
41562
  const id = el.attr("data-task-id");
41714
41563
  el.attr(
41715
41564
  "opacity",
41716
- id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY2
41565
+ id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY
41717
41566
  );
41718
41567
  });
41719
41568
  svg.selectAll(".gantt-task-label").each(function() {
@@ -41721,7 +41570,7 @@ function renderSprintBands(g, svg, resolved, xScale, innerHeight, palette) {
41721
41570
  const id = el.attr("data-task-id");
41722
41571
  el.attr(
41723
41572
  "opacity",
41724
- id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY2
41573
+ id && overlappingTaskIds.has(id) ? 1 : FADE_OPACITY
41725
41574
  );
41726
41575
  });
41727
41576
  g.selectAll(
@@ -41731,7 +41580,7 @@ function renderSprintBands(g, svg, resolved, xScale, innerHeight, palette) {
41731
41580
  const name = el.attr("data-group");
41732
41581
  el.attr(
41733
41582
  "opacity",
41734
- name && overlappingGroupNames.has(name) ? 1 : FADE_OPACITY2
41583
+ name && overlappingGroupNames.has(name) ? 1 : FADE_OPACITY
41735
41584
  );
41736
41585
  });
41737
41586
  svg.selectAll(".gantt-group-label").each(function() {
@@ -41739,19 +41588,19 @@ function renderSprintBands(g, svg, resolved, xScale, innerHeight, palette) {
41739
41588
  const name = el.attr("data-group");
41740
41589
  el.attr(
41741
41590
  "opacity",
41742
- name && overlappingGroupNames.has(name) ? 1 : FADE_OPACITY2
41591
+ name && overlappingGroupNames.has(name) ? 1 : FADE_OPACITY
41743
41592
  );
41744
41593
  });
41745
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41594
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41746
41595
  g.selectAll(
41747
41596
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
41748
- ).attr("opacity", FADE_OPACITY2);
41597
+ ).attr("opacity", FADE_OPACITY);
41749
41598
  g.selectAll(
41750
41599
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
41751
- ).attr("opacity", FADE_OPACITY2);
41600
+ ).attr("opacity", FADE_OPACITY);
41752
41601
  g.selectAll(".gantt-marker-group").attr(
41753
41602
  "opacity",
41754
- FADE_OPACITY2
41603
+ FADE_OPACITY
41755
41604
  );
41756
41605
  sprintRect.attr("opacity", SPRINT_HOVER_OPACITY);
41757
41606
  const startVisible = rawSx >= chartMinX;
@@ -41820,20 +41669,20 @@ function highlightDeps(g, svg, taskId, resolved) {
41820
41669
  g.selectAll(".gantt-task").each(function() {
41821
41670
  const el = d3Selection13.select(this);
41822
41671
  const id = el.attr("data-task-id");
41823
- el.attr("opacity", id && related.has(id) ? 1 : FADE_OPACITY2);
41672
+ el.attr("opacity", id && related.has(id) ? 1 : FADE_OPACITY);
41824
41673
  });
41825
41674
  g.selectAll(".gantt-milestone").attr(
41826
41675
  "opacity",
41827
- FADE_OPACITY2
41676
+ FADE_OPACITY
41828
41677
  );
41829
41678
  g.selectAll(
41830
41679
  ".gantt-group-bar, .gantt-group-summary"
41831
- ).attr("opacity", FADE_OPACITY2);
41832
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41833
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41680
+ ).attr("opacity", FADE_OPACITY);
41681
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41682
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41834
41683
  g.selectAll(".gantt-lane-band, .gantt-lane-accent").attr(
41835
41684
  "opacity",
41836
- FADE_OPACITY2
41685
+ FADE_OPACITY
41837
41686
  );
41838
41687
  g.selectAll(
41839
41688
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
@@ -41842,52 +41691,52 @@ function highlightDeps(g, svg, taskId, resolved) {
41842
41691
  const from = el.attr("data-dep-from");
41843
41692
  const to = el.attr("data-dep-to");
41844
41693
  const isRelated = from && related.has(from) || to && related.has(to);
41845
- el.attr("opacity", isRelated ? 0.5 : FADE_OPACITY2);
41694
+ el.attr("opacity", isRelated ? 0.5 : FADE_OPACITY);
41846
41695
  });
41847
41696
  g.selectAll(".gantt-marker-group").attr(
41848
41697
  "opacity",
41849
- FADE_OPACITY2
41698
+ FADE_OPACITY
41850
41699
  );
41851
41700
  }
41852
41701
  function highlightGroup(g, svg, groupName) {
41853
41702
  g.selectAll(".gantt-task").each(function() {
41854
41703
  const el = d3Selection13.select(this);
41855
- el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY2);
41704
+ el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY);
41856
41705
  });
41857
41706
  g.selectAll(".gantt-milestone").each(function() {
41858
41707
  const el = d3Selection13.select(this);
41859
- el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY2);
41708
+ el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY);
41860
41709
  });
41861
41710
  g.selectAll(
41862
41711
  ".gantt-group-bar, .gantt-group-summary"
41863
41712
  ).each(function() {
41864
41713
  const el = d3Selection13.select(this);
41865
- el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY2);
41714
+ el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY);
41866
41715
  });
41867
41716
  svg.selectAll(".gantt-group-label").each(function() {
41868
41717
  const el = d3Selection13.select(this);
41869
- el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY2);
41718
+ el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY);
41870
41719
  });
41871
41720
  svg.selectAll(".gantt-task-label").each(function() {
41872
41721
  const el = d3Selection13.select(this);
41873
- el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY2);
41722
+ el.attr("opacity", el.attr("data-group") === groupName ? 1 : FADE_OPACITY);
41874
41723
  });
41875
41724
  svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").each(function() {
41876
41725
  const el = d3Selection13.select(this);
41877
41726
  el.attr(
41878
41727
  "opacity",
41879
- el.attr("data-group") === groupName ? 1 : FADE_OPACITY2
41728
+ el.attr("data-group") === groupName ? 1 : FADE_OPACITY
41880
41729
  );
41881
41730
  });
41882
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41883
- svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY2);
41731
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41732
+ svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY);
41884
41733
  g.selectAll(".gantt-lane-band, .gantt-lane-accent").attr(
41885
41734
  "opacity",
41886
- FADE_OPACITY2
41735
+ FADE_OPACITY
41887
41736
  );
41888
41737
  g.selectAll(".gantt-marker-group").attr(
41889
41738
  "opacity",
41890
- FADE_OPACITY2
41739
+ FADE_OPACITY
41891
41740
  );
41892
41741
  }
41893
41742
  function highlightLane(g, svg, tagKey, laneName) {
@@ -41895,105 +41744,105 @@ function highlightLane(g, svg, tagKey, laneName) {
41895
41744
  const laneValue = laneName.toLowerCase();
41896
41745
  g.selectAll(".gantt-task").each(function() {
41897
41746
  const el = d3Selection13.select(this);
41898
- el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY2);
41747
+ el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY);
41899
41748
  });
41900
41749
  g.selectAll(".gantt-milestone").each(function() {
41901
41750
  const el = d3Selection13.select(this);
41902
- el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY2);
41751
+ el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY);
41903
41752
  });
41904
41753
  svg.selectAll(".gantt-task-label").each(function() {
41905
41754
  const el = d3Selection13.select(this);
41906
- el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY2);
41755
+ el.attr("opacity", el.attr(tagAttr) === laneValue ? 1 : FADE_OPACITY);
41907
41756
  });
41908
41757
  svg.selectAll(".gantt-lane-header").each(function() {
41909
41758
  const el = d3Selection13.select(this);
41910
- el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY2);
41759
+ el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY);
41911
41760
  });
41912
41761
  g.selectAll(".gantt-lane-band-group").each(function() {
41913
41762
  const el = d3Selection13.select(this);
41914
- el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY2);
41763
+ el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY);
41915
41764
  });
41916
41765
  svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").each(function() {
41917
41766
  const el = d3Selection13.select(this);
41918
- el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY2);
41767
+ el.attr("opacity", el.attr("data-lane") === laneName ? 1 : FADE_OPACITY);
41919
41768
  });
41920
41769
  g.selectAll(
41921
41770
  ".gantt-group-bar, .gantt-group-summary"
41922
- ).attr("opacity", FADE_OPACITY2);
41923
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41924
- svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY2);
41771
+ ).attr("opacity", FADE_OPACITY);
41772
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41773
+ svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY);
41925
41774
  g.selectAll(".gantt-marker-group").attr(
41926
41775
  "opacity",
41927
- FADE_OPACITY2
41776
+ FADE_OPACITY
41928
41777
  );
41929
41778
  }
41930
41779
  function highlightTask(g, svg, taskId) {
41931
41780
  g.selectAll(".gantt-task").each(function() {
41932
41781
  const el = d3Selection13.select(this);
41933
- el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY2);
41782
+ el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY);
41934
41783
  });
41935
41784
  g.selectAll(".gantt-milestone").attr(
41936
41785
  "opacity",
41937
- FADE_OPACITY2
41786
+ FADE_OPACITY
41938
41787
  );
41939
41788
  svg.selectAll(".gantt-task-label").each(function() {
41940
41789
  const el = d3Selection13.select(this);
41941
- el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY2);
41790
+ el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY);
41942
41791
  });
41943
41792
  g.selectAll(
41944
41793
  ".gantt-group-bar, .gantt-group-summary"
41945
- ).attr("opacity", FADE_OPACITY2);
41946
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41947
- svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY2);
41948
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41949
- svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY2);
41794
+ ).attr("opacity", FADE_OPACITY);
41795
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41796
+ svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY);
41797
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41798
+ svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY);
41950
41799
  g.selectAll(
41951
41800
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
41952
- ).attr("opacity", FADE_OPACITY2);
41801
+ ).attr("opacity", FADE_OPACITY);
41953
41802
  g.selectAll(
41954
41803
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
41955
- ).attr("opacity", FADE_OPACITY2);
41804
+ ).attr("opacity", FADE_OPACITY);
41956
41805
  g.selectAll(".gantt-marker-group").attr(
41957
41806
  "opacity",
41958
- FADE_OPACITY2
41807
+ FADE_OPACITY
41959
41808
  );
41960
41809
  }
41961
41810
  function highlightMilestone(g, svg, taskId) {
41962
41811
  g.selectAll(".gantt-task").attr(
41963
41812
  "opacity",
41964
- FADE_OPACITY2
41813
+ FADE_OPACITY
41965
41814
  );
41966
41815
  g.selectAll(".gantt-milestone").each(function() {
41967
41816
  const el = d3Selection13.select(this);
41968
- el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY2);
41817
+ el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY);
41969
41818
  });
41970
41819
  svg.selectAll(".gantt-task-label").each(function() {
41971
41820
  const el = d3Selection13.select(this);
41972
- el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY2);
41821
+ el.attr("opacity", el.attr("data-task-id") === taskId ? 1 : FADE_OPACITY);
41973
41822
  });
41974
41823
  g.selectAll(
41975
41824
  ".gantt-group-bar, .gantt-group-summary"
41976
- ).attr("opacity", FADE_OPACITY2);
41977
- svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY2);
41978
- svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY2);
41979
- svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY2);
41980
- svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY2);
41825
+ ).attr("opacity", FADE_OPACITY);
41826
+ svg.selectAll(".gantt-group-label").attr("opacity", FADE_OPACITY);
41827
+ svg.selectAll(".gantt-group-band-bg, .gantt-group-band-accent").attr("opacity", FADE_OPACITY);
41828
+ svg.selectAll(".gantt-lane-header").attr("opacity", FADE_OPACITY);
41829
+ svg.selectAll(".gantt-lane-band-bg, .gantt-lane-band-accent").attr("opacity", FADE_OPACITY);
41981
41830
  g.selectAll(
41982
41831
  ".gantt-lane-band, .gantt-lane-accent, .gantt-lane-band-group"
41983
- ).attr("opacity", FADE_OPACITY2);
41832
+ ).attr("opacity", FADE_OPACITY);
41984
41833
  g.selectAll(
41985
41834
  ".gantt-dep-arrow, .gantt-dep-arrowhead"
41986
- ).attr("opacity", FADE_OPACITY2);
41835
+ ).attr("opacity", FADE_OPACITY);
41987
41836
  g.selectAll(".gantt-marker-group").attr(
41988
41837
  "opacity",
41989
- FADE_OPACITY2
41838
+ FADE_OPACITY
41990
41839
  );
41991
41840
  }
41992
41841
  function highlightTaskLabel(svg, lineNumber) {
41993
41842
  const ln = String(lineNumber);
41994
41843
  svg.selectAll(".gantt-task-label").each(function() {
41995
41844
  const el = d3Selection13.select(this);
41996
- el.attr("opacity", el.attr("data-line-number") === ln ? 1 : FADE_OPACITY2);
41845
+ el.attr("opacity", el.attr("data-line-number") === ln ? 1 : FADE_OPACITY);
41997
41846
  });
41998
41847
  }
41999
41848
  function resetTaskLabels(svg) {
@@ -42267,7 +42116,7 @@ function renderTimeScaleHorizontal(g, scale, _innerWidth, innerHeight, textColor
42267
42116
  g.append("text").attr("class", "gantt-scale-tick").attr("x", tick.pos).attr("y", innerHeight + tickLen + 12).attr("text-anchor", "middle").attr("font-size", "10px").attr("fill", textColor).attr("opacity", opacity).text(tick.label);
42268
42117
  }
42269
42118
  }
42270
- var BAR_H, ROW_GAP, GROUP_GAP2, MILESTONE_SIZE, MIN_LEFT_MARGIN, BOTTOM_MARGIN, RIGHT_MARGIN, CHAR_W2, LABEL_PAD2, LABEL_GAP, BAND_ACCENT_W, BAND_RADIUS, bandClipCounter, JS_DAY_TO_WEEKDAY2, ERA_COLORS, SPRINT_BAND_OPACITY, SPRINT_HOVER_OPACITY, SPRINT_BOUNDARY_OPACITY, FADE_OPACITY2, MONTH_ABBR2;
42119
+ var BAR_H, ROW_GAP, GROUP_GAP2, MILESTONE_SIZE, MIN_LEFT_MARGIN, BOTTOM_MARGIN, RIGHT_MARGIN, CHAR_W2, LABEL_PAD2, LABEL_GAP, BAND_ACCENT_W, BAND_RADIUS, bandClipCounter, JS_DAY_TO_WEEKDAY2, ERA_COLORS, SPRINT_BAND_OPACITY, SPRINT_HOVER_OPACITY, SPRINT_BOUNDARY_OPACITY, FADE_OPACITY, MONTH_ABBR2;
42271
42120
  var init_renderer12 = __esm({
42272
42121
  "src/gantt/renderer.ts"() {
42273
42122
  "use strict";
@@ -42308,7 +42157,7 @@ var init_renderer12 = __esm({
42308
42157
  SPRINT_BAND_OPACITY = 0.05;
42309
42158
  SPRINT_HOVER_OPACITY = 0.12;
42310
42159
  SPRINT_BOUNDARY_OPACITY = 0.3;
42311
- FADE_OPACITY2 = 0.1;
42160
+ FADE_OPACITY = 0.1;
42312
42161
  MONTH_ABBR2 = [
42313
42162
  "Jan",
42314
42163
  "Feb",
@@ -47854,7 +47703,8 @@ function layoutMap(resolved, data, size, opts) {
47854
47703
  palette.bg,
47855
47704
  mutedBasemap ? isDark ? MUTED_FOREIGN_DARK : MUTED_FOREIGN_LIGHT : isDark ? FOREIGN_TINT_DARK : FOREIGN_TINT_LIGHT
47856
47705
  );
47857
- const colorizeActive = resolved.directives.noColorize !== true && !hasRamp && resolved.tagGroups.length === 0;
47706
+ const hasDirectColor = resolved.regions.some((r) => r.color !== void 0);
47707
+ const colorizeActive = resolved.directives.noColorize !== true && !hasRamp && !hasDirectColor && resolved.tagGroups.length === 0;
47858
47708
  const colorByIso = /* @__PURE__ */ new Map();
47859
47709
  if (colorizeActive) {
47860
47710
  const adjacency = /* @__PURE__ */ new Map();
@@ -47950,16 +47800,17 @@ function layoutMap(resolved, data, size, opts) {
47950
47800
  };
47951
47801
  }
47952
47802
  }
47803
+ const shownTitle = resolved.directives.noTitle ? null : resolved.title;
47953
47804
  const TITLE_GAP2 = 16;
47954
47805
  let topPad = FIT_PAD;
47955
- if (resolved.title && resolved.pois.length > 0) {
47806
+ if (shownTitle && resolved.pois.length > 0) {
47956
47807
  const bannerBottom = (resolved.subtitle ? TITLE_Y + TITLE_FONT_SIZE : TITLE_Y) + TITLE_FONT_SIZE / 2;
47957
47808
  topPad = Math.max(FIT_PAD, bannerBottom + TITLE_GAP2);
47958
47809
  }
47959
47810
  const legendBand = mapLegendBand(legend, {
47960
47811
  width,
47961
47812
  mode: opts.legendMode ?? "preview",
47962
- hasTitle: Boolean(resolved.title),
47813
+ hasTitle: Boolean(shownTitle),
47963
47814
  hasSubtitle: Boolean(resolved.subtitle)
47964
47815
  });
47965
47816
  if (legendBand > topPad) topPad = legendBand;
@@ -49048,7 +48899,7 @@ function layoutMap(resolved, data, size, opts) {
49048
48899
  width,
49049
48900
  height,
49050
48901
  background: water,
49051
- title: resolved.title,
48902
+ title: shownTitle,
49052
48903
  ...resolved.subtitle !== void 0 && { subtitle: resolved.subtitle },
49053
48904
  ...resolved.caption !== void 0 && { caption: resolved.caption },
49054
48905
  regions,
@@ -49457,9 +49308,10 @@ function renderMap(container, resolved, data, palette, isDark, onClickItem, expo
49457
49308
  wireSync(lt, leg.lineNumber);
49458
49309
  }
49459
49310
  });
49311
+ const clusterUi = !exportDims && !resolved.directives.noClusterPois;
49460
49312
  const gSpider = svg.append("g").attr("class", "dgmo-map-spider");
49461
49313
  for (const cl of layout.clusters) {
49462
- if (!exportDims) {
49314
+ if (clusterUi) {
49463
49315
  gSpider.append("circle").attr("cx", cl.cx).attr("cy", cl.cy).attr("r", cl.hitR).attr("fill", "transparent").attr("data-cluster-hit", cl.id).style("cursor", "pointer");
49464
49316
  }
49465
49317
  for (const leg of cl.legs) {
@@ -49551,13 +49403,18 @@ function renderMap(container, resolved, data, palette, isDark, onClickItem, expo
49551
49403
  }
49552
49404
  wireSync(t, lab.lineNumber);
49553
49405
  }
49554
- if (!exportDims && layout.clusters.length) {
49406
+ if (clusterUi && layout.clusters.length) {
49555
49407
  const gBadge = svg.append("g").attr("class", "dgmo-map-cluster-badges");
49556
49408
  for (const cl of layout.clusters) {
49557
49409
  const g = gBadge.append("g").attr("data-cluster", cl.id).style("opacity", 0).style("pointer-events", "none");
49558
49410
  const R = 9;
49559
49411
  g.append("circle").attr("cx", cl.cx).attr("cy", cl.cy).attr("r", R).attr("fill", mix(palette.textMuted, palette.bg, 35)).attr("stroke", palette.textMuted).attr("stroke-width", 1);
49560
49412
  g.append("circle").attr("cx", cl.cx).attr("cy", cl.cy).attr("r", R + 2.5).attr("fill", "none").attr("stroke", palette.textMuted).attr("stroke-width", 1);
49413
+ const beadR = R + 2.5;
49414
+ for (const leg of cl.legs) {
49415
+ const a = Math.atan2(leg.y2 - cl.cy, leg.x2 - cl.cx);
49416
+ g.append("circle").attr("class", "dgmo-map-cluster-bead").attr("cx", cl.cx + beadR * Math.cos(a)).attr("cy", cl.cy + beadR * Math.sin(a)).attr("r", 1.8).attr("fill", leg.color).attr("stroke", palette.bg).attr("stroke-width", 0.5);
49417
+ }
49561
49418
  emitText(
49562
49419
  g,
49563
49420
  cl.cx,
@@ -52482,10 +52339,12 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
52482
52339
  isDark ? 15 : 20
52483
52340
  ) : isDark ? palette.surface : palette.bg;
52484
52341
  const strokeColor = groupTagColor || palette.textMuted;
52485
- const groupG = svg.append("g").attr("class", "group-box-wrapper").attr("data-group-toggle", "").attr("data-group-line", String(group.lineNumber)).attr("cursor", "pointer");
52342
+ 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("cursor", "pointer");
52486
52343
  groupG.append("title").text("Click to collapse");
52487
- groupG.append("rect").attr("x", minX).attr("y", boxY).attr("width", maxX - minX).attr("height", boxH).attr("rx", 6).attr("fill", fillColor).attr("stroke", strokeColor).attr("stroke-width", 1).attr("stroke-opacity", 0.5).attr("class", "group-box");
52488
- groupG.append("text").attr("x", minX + 8).attr("y", boxY + GROUP_LABEL_SIZE + 4).attr("fill", strokeColor).attr("font-size", GROUP_LABEL_SIZE).attr("font-weight", "bold").attr("opacity", 0.7).attr("class", "group-label").text(group.name);
52344
+ groupG.append("rect").attr("x", minX).attr("y", boxY).attr("width", maxX - minX).attr("height", boxH).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");
52345
+ groupG.append("rect").attr("x", minX).attr("y", boxY).attr("width", maxX - minX).attr("height", participantStartY - boxY).attr("fill", "transparent").attr("class", "group-label-hit");
52346
+ groupG.append("text").attr("x", minX + 8).attr("y", boxY + GROUP_LABEL_SIZE + 4).attr("fill", strokeColor).attr("font-size", GROUP_LABEL_SIZE).attr("opacity", 0.7).attr("pointer-events", "none").attr("class", "group-chevron").text("\u25BE");
52347
+ groupG.append("text").attr("x", minX + 8 + GROUP_LABEL_SIZE + 2).attr("y", boxY + GROUP_LABEL_SIZE + 4).attr("fill", strokeColor).attr("font-size", GROUP_LABEL_SIZE).attr("font-weight", "bold").attr("opacity", 0.7).attr("pointer-events", "none").attr("class", "group-label").text(group.name);
52489
52348
  }
52490
52349
  const lifelineStartY = lifelineStartY0;
52491
52350
  participants.forEach((participant) => {
@@ -52527,7 +52386,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
52527
52386
  const participantG = svg.select(
52528
52387
  `.participant[data-participant-id="${participant.id}"]`
52529
52388
  );
52530
- participantG.attr("data-group-toggle", "").attr("data-group-line", String(meta.lineNumber)).attr("cursor", "pointer");
52389
+ participantG.attr("data-group-toggle", "").attr("data-group-line", String(meta.lineNumber)).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "false").attr("cursor", "pointer");
52531
52390
  participantG.append("title").text("Click to expand");
52532
52391
  const pFill = effectiveTagColor ? mix(
52533
52392
  effectiveTagColor,
@@ -54510,7 +54369,7 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
54510
54369
  neighbors2.get(link.source).add(link.target);
54511
54370
  neighbors2.get(link.target).add(link.source);
54512
54371
  }
54513
- const FADE_OPACITY3 = 0.1;
54372
+ const FADE_OPACITY2 = 0.1;
54514
54373
  function handleMouseEnter(hovered) {
54515
54374
  const connected = neighbors2.get(hovered);
54516
54375
  g.selectAll(".arc-link").each(function() {
@@ -54518,13 +54377,13 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
54518
54377
  const src = el.attr("data-source");
54519
54378
  const tgt = el.attr("data-target");
54520
54379
  const isRelated = src === hovered || tgt === hovered;
54521
- el.attr("stroke-opacity", isRelated ? 0.85 : FADE_OPACITY3);
54380
+ el.attr("stroke-opacity", isRelated ? 0.85 : FADE_OPACITY2);
54522
54381
  });
54523
54382
  g.selectAll(".arc-node").each(function() {
54524
54383
  const el = d3Selection23.select(this);
54525
54384
  const name = el.attr("data-node");
54526
54385
  const isRelated = name === hovered || connected.has(name);
54527
- el.attr("opacity", isRelated ? 1 : FADE_OPACITY3);
54386
+ el.attr("opacity", isRelated ? 1 : FADE_OPACITY2);
54528
54387
  });
54529
54388
  }
54530
54389
  function handleMouseLeave() {
@@ -54548,11 +54407,11 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
54548
54407
  g.selectAll(".arc-link").each(function() {
54549
54408
  const el = d3Selection23.select(this);
54550
54409
  const isRelated = members.has(el.attr("data-source")) || members.has(el.attr("data-target"));
54551
- el.attr("stroke-opacity", isRelated ? 0.85 : FADE_OPACITY3);
54410
+ el.attr("stroke-opacity", isRelated ? 0.85 : FADE_OPACITY2);
54552
54411
  });
54553
54412
  g.selectAll(".arc-node").each(function() {
54554
54413
  const el = d3Selection23.select(this);
54555
- el.attr("opacity", members.has(el.attr("data-node")) ? 1 : FADE_OPACITY3);
54414
+ el.attr("opacity", members.has(el.attr("data-node")) ? 1 : FADE_OPACITY2);
54556
54415
  });
54557
54416
  g.selectAll(".arc-group-band").each(function() {
54558
54417
  const el = d3Selection23.select(this);
@@ -55074,23 +54933,23 @@ function setupTimeline(container, parsed, palette, isDark, exportDims, activeTag
55074
54933
  };
55075
54934
  }
55076
54935
  function makeTimelineHoverHelpers() {
55077
- const FADE_OPACITY3 = 0.1;
54936
+ const FADE_OPACITY2 = 0.1;
55078
54937
  function fadeToGroup(g, groupName) {
55079
54938
  g.selectAll(".tl-event").each(function() {
55080
54939
  const el = d3Selection23.select(this);
55081
54940
  const evGroup = el.attr("data-group");
55082
- el.attr("opacity", evGroup === groupName ? 1 : FADE_OPACITY3);
54941
+ el.attr("opacity", evGroup === groupName ? 1 : FADE_OPACITY2);
55083
54942
  });
55084
54943
  g.selectAll(".tl-legend-item, .tl-lane-header").each(
55085
54944
  function() {
55086
54945
  const el = d3Selection23.select(this);
55087
54946
  const name = el.attr("data-group");
55088
- el.attr("opacity", name === groupName ? 1 : FADE_OPACITY3);
54947
+ el.attr("opacity", name === groupName ? 1 : FADE_OPACITY2);
55089
54948
  }
55090
54949
  );
55091
54950
  g.selectAll(".tl-marker").attr(
55092
54951
  "opacity",
55093
- FADE_OPACITY3
54952
+ FADE_OPACITY2
55094
54953
  );
55095
54954
  }
55096
54955
  function fadeToEra(g, eraStart, eraEnd) {
@@ -55100,40 +54959,40 @@ function makeTimelineHoverHelpers() {
55100
54959
  const endDate = el.attr("data-end-date");
55101
54960
  const evEnd = endDate ? parseFloat(endDate) : date;
55102
54961
  const inside = evEnd >= eraStart && date <= eraEnd;
55103
- el.attr("opacity", inside ? 1 : FADE_OPACITY3);
54962
+ el.attr("opacity", inside ? 1 : FADE_OPACITY2);
55104
54963
  });
55105
54964
  g.selectAll(".tl-legend-item, .tl-lane-header").attr(
55106
54965
  "opacity",
55107
- FADE_OPACITY3
54966
+ FADE_OPACITY2
55108
54967
  );
55109
54968
  g.selectAll(".tl-era").each(function() {
55110
54969
  const el = d3Selection23.select(this);
55111
54970
  const s = parseFloat(el.attr("data-era-start"));
55112
54971
  const e = parseFloat(el.attr("data-era-end"));
55113
54972
  const isSelf = s === eraStart && e === eraEnd;
55114
- el.attr("opacity", isSelf ? 1 : FADE_OPACITY3);
54973
+ el.attr("opacity", isSelf ? 1 : FADE_OPACITY2);
55115
54974
  });
55116
54975
  g.selectAll(".tl-marker").each(function() {
55117
54976
  const el = d3Selection23.select(this);
55118
54977
  const date = parseFloat(el.attr("data-marker-date"));
55119
54978
  const inside = date >= eraStart && date <= eraEnd;
55120
- el.attr("opacity", inside ? 1 : FADE_OPACITY3);
54979
+ el.attr("opacity", inside ? 1 : FADE_OPACITY2);
55121
54980
  });
55122
54981
  }
55123
54982
  function fadeToMarker(g, markerDate) {
55124
54983
  g.selectAll(".tl-event").attr(
55125
54984
  "opacity",
55126
- FADE_OPACITY3
54985
+ FADE_OPACITY2
55127
54986
  );
55128
- g.selectAll(".tl-era").attr("opacity", FADE_OPACITY3);
54987
+ g.selectAll(".tl-era").attr("opacity", FADE_OPACITY2);
55129
54988
  g.selectAll(".tl-legend-item, .tl-lane-header").attr(
55130
54989
  "opacity",
55131
- FADE_OPACITY3
54990
+ FADE_OPACITY2
55132
54991
  );
55133
54992
  g.selectAll(".tl-marker").each(function() {
55134
54993
  const el = d3Selection23.select(this);
55135
54994
  const date = parseFloat(el.attr("data-marker-date"));
55136
- el.attr("opacity", date === markerDate ? 1 : FADE_OPACITY3);
54995
+ el.attr("opacity", date === markerDate ? 1 : FADE_OPACITY2);
55137
54996
  });
55138
54997
  }
55139
54998
  function fadeReset(g) {
@@ -55147,15 +55006,15 @@ function makeTimelineHoverHelpers() {
55147
55006
  g.selectAll(".tl-event").each(function() {
55148
55007
  const el = d3Selection23.select(this);
55149
55008
  const val = el.attr(attrName);
55150
- el.attr("opacity", val === tagValue ? 1 : FADE_OPACITY3);
55009
+ el.attr("opacity", val === tagValue ? 1 : FADE_OPACITY2);
55151
55010
  });
55152
55011
  g.selectAll(".tl-legend-item, .tl-lane-header").attr(
55153
55012
  "opacity",
55154
- FADE_OPACITY3
55013
+ FADE_OPACITY2
55155
55014
  );
55156
55015
  g.selectAll(".tl-marker").attr(
55157
55016
  "opacity",
55158
- FADE_OPACITY3
55017
+ FADE_OPACITY2
55159
55018
  );
55160
55019
  g.selectAll(".tl-tag-legend-entry").each(function() {
55161
55020
  const el = d3Selection23.select(this);
@@ -55164,7 +55023,7 @@ function makeTimelineHoverHelpers() {
55164
55023
  const entryGroup = el.attr("data-tag-group");
55165
55024
  el.attr(
55166
55025
  "opacity",
55167
- entryGroup === tagKey && entryValue === tagValue ? 1 : FADE_OPACITY3
55026
+ entryGroup === tagKey && entryValue === tagValue ? 1 : FADE_OPACITY2
55168
55027
  );
55169
55028
  });
55170
55029
  }
@@ -55174,7 +55033,7 @@ function makeTimelineHoverHelpers() {
55174
55033
  }
55175
55034
  }
55176
55035
  return {
55177
- FADE_OPACITY: FADE_OPACITY3,
55036
+ FADE_OPACITY: FADE_OPACITY2,
55178
55037
  fadeToGroup,
55179
55038
  fadeToEra,
55180
55039
  fadeToMarker,
@@ -55186,7 +55045,7 @@ function makeTimelineHoverHelpers() {
55186
55045
  function renderTimelineTagLegendOverlay(container, parsed, palette, isDark, setup, hovers, onClickItem, exportDims, swimlaneTagGroup, activeTagGroup, onTagStateChange, viewMode, exportMode) {
55187
55046
  if (parsed.timelineTagGroups.length === 0) return;
55188
55047
  const { width, textColor, groupColorMap, solid } = setup;
55189
- const { FADE_OPACITY: FADE_OPACITY3, fadeReset, fadeToTagValue } = hovers;
55048
+ const { FADE_OPACITY: FADE_OPACITY2, fadeReset, fadeToTagValue } = hovers;
55190
55049
  const title = parsed.noTitle ? null : parsed.title;
55191
55050
  const { timelineEvents } = parsed;
55192
55051
  const LG_HEIGHT = LEGEND_HEIGHT;
@@ -55276,7 +55135,7 @@ function renderTimelineTagLegendOverlay(container, parsed, palette, isDark, setu
55276
55135
  const eg = el.attr("data-tag-group") ?? el.node()?.closest?.("[data-tag-group]")?.getAttribute("data-tag-group");
55277
55136
  el.attr(
55278
55137
  "opacity",
55279
- eg === tagKey && ev === tagVal ? 1 : FADE_OPACITY3
55138
+ eg === tagKey && ev === tagVal ? 1 : FADE_OPACITY2
55280
55139
  );
55281
55140
  });
55282
55141
  } else {
@@ -58091,6 +57950,9 @@ async function renderForExport(content, theme, palette, viewState, options) {
58091
57950
  const { renderSequenceDiagram: renderSequenceDiagram2 } = await Promise.resolve().then(() => (init_renderer20(), renderer_exports20));
58092
57951
  const seqParsed = parseSequenceDgmo2(content);
58093
57952
  if (seqParsed.error || seqParsed.participants.length === 0) return "";
57953
+ const collapsedSections = viewState?.cs ? new Set(viewState.cs) : void 0;
57954
+ const collapsedGroups = viewState?.cg ? new Set(viewState.cg.map(Number).filter((n) => Number.isFinite(n))) : void 0;
57955
+ const seqActiveTagGroup = viewState?.tag ?? options?.tagGroup;
58094
57956
  renderSequenceDiagram2(
58095
57957
  container,
58096
57958
  seqParsed,
@@ -58099,9 +57961,11 @@ async function renderForExport(content, theme, palette, viewState, options) {
58099
57961
  void 0,
58100
57962
  {
58101
57963
  exportWidth: EXPORT_WIDTH,
58102
- ...options?.tagGroup !== void 0 && {
58103
- activeTagGroup: options.tagGroup
58104
- }
57964
+ ...seqActiveTagGroup !== void 0 && {
57965
+ activeTagGroup: seqActiveTagGroup
57966
+ },
57967
+ ...collapsedSections !== void 0 && { collapsedSections },
57968
+ ...collapsedGroups !== void 0 && { collapsedGroups }
58105
57969
  }
58106
57970
  );
58107
57971
  } else if (parsed.type === "wordcloud") {
@@ -60601,6 +60465,7 @@ var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
60601
60465
  description: "Which tag group leads when several are present"
60602
60466
  },
60603
60467
  caption: { description: "Caption line (data-source attribution)" },
60468
+ "no-title": { description: "Suppress the title banner" },
60604
60469
  "no-legend": { description: "Suppress the legend" },
60605
60470
  "no-coastline": {
60606
60471
  description: "Turn off coastal water-lines (on by default)"
@@ -60617,6 +60482,9 @@ var COMPLETION_REGISTRY = /* @__PURE__ */ new Map([
60617
60482
  "no-poi-labels": { description: "Turn off POI labels (on by default)" },
60618
60483
  "no-colorize": {
60619
60484
  description: "Force plain green-land reference dress (regions are auto-coloured by default)"
60485
+ },
60486
+ "no-cluster-pois": {
60487
+ description: "Always fan out coincident POI markers instead of collapsing them into a count badge"
60620
60488
  }
60621
60489
  })
60622
60490
  ]
@@ -62076,7 +61944,6 @@ export {
62076
61944
  LEGEND_HEIGHT,
62077
61945
  METADATA_KEY_SET,
62078
61946
  MIN_PRIMARY_SCORE,
62079
- PERT_LEGEND_PILL_HEIGHT,
62080
61947
  PIPE_METADATA,
62081
61948
  RACI_ERROR_CODES,
62082
61949
  VARIANTS as RACI_VARIANTS,
@@ -62153,8 +62020,6 @@ export {
62153
62020
  gruvboxPalette,
62154
62021
  hexToHSL,
62155
62022
  hexToHSLString,
62156
- highlightPertCriticalPath,
62157
- highlightPertSet,
62158
62023
  hslToHex,
62159
62024
  inferParticipantType,
62160
62025
  inferRoles,
@@ -62244,8 +62109,6 @@ export {
62244
62109
  parseTimelineDate,
62245
62110
  parseVisualization,
62246
62111
  parseWireframe,
62247
- pertLegendBlockWidth,
62248
- pertLegendEntries,
62249
62112
  cellAppendMarker as raciCellAppendMarker,
62250
62113
  cellCycle as raciCellCycle,
62251
62114
  cellRemove as raciCellRemove,
@@ -62292,7 +62155,6 @@ export {
62292
62155
  renderPert,
62293
62156
  renderPertAnalysisBlock,
62294
62157
  renderPertForExport,
62295
- renderLegendBlock as renderPertLegendBlock,
62296
62158
  renderPyramid,
62297
62159
  renderPyramidForExport,
62298
62160
  renderQuadrant,
@@ -62314,8 +62176,6 @@ export {
62314
62176
  renderVenn,
62315
62177
  renderWireframe,
62316
62178
  renderWordCloud,
62317
- resetPertCriticalPath,
62318
- resetPertHighlight,
62319
62179
  resolveColor,
62320
62180
  resolveColorWithDiagnostic,
62321
62181
  resolveMap,