@diagrammo/dgmo 0.86.0 → 0.87.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 (73) hide show
  1. package/dist/advanced.d.ts +0 -18
  2. package/dist/advanced.js +36 -35
  3. package/dist/block.js +5 -17
  4. package/dist/{chunk-FAV4RDVT.js → chunk-2A4DQAXG.js} +1 -1
  5. package/dist/{chunk-JIPUBFAM.js → chunk-5KGM44TG.js} +2 -2
  6. package/dist/{chunk-QJ2JOLFN.js → chunk-6I5UN4FD.js} +2 -2
  7. package/dist/{chunk-PKXKWHDW.js → chunk-AUS7V54P.js} +1 -1
  8. package/dist/{chunk-BF7JAFJI.js → chunk-B7CU2HW5.js} +2 -2
  9. package/dist/{chunk-X2VEJ5NT.js → chunk-BMUWF77V.js} +2 -2
  10. package/dist/{chunk-BP4BT5TH.js → chunk-CLQIXD2C.js} +1 -1
  11. package/dist/{chunk-QJFT5MAH.js → chunk-DSG6GBUQ.js} +2 -2
  12. package/dist/{chunk-EWSESGC2.js → chunk-EJS3K44P.js} +117 -78
  13. package/dist/{chunk-VEE777MD.js → chunk-FBKPSU3A.js} +3 -3
  14. package/dist/{chunk-5JO443MB.js → chunk-HAH5X345.js} +1 -1
  15. package/dist/{chunk-HBCAY3KR.js → chunk-HTNLLT34.js} +1 -1
  16. package/dist/{chunk-HUMQIRJK.js → chunk-HTPZDZKQ.js} +2 -2
  17. package/dist/{chunk-VPVWG2GH.js → chunk-J7Q4VPBJ.js} +1 -1
  18. package/dist/{chunk-3CQS3CIO.js → chunk-LL6D3MES.js} +1 -1
  19. package/dist/{chunk-QPE646M2.js → chunk-LPXC4I4R.js} +18 -1
  20. package/dist/{chunk-ERYHC4KJ.js → chunk-LSQGJN5H.js} +1 -1
  21. package/dist/{chunk-E6S2K6O2.js → chunk-N7XRBWXA.js} +2 -2
  22. package/dist/{chunk-WMIKC5XO.js → chunk-NPWVOFB3.js} +1 -1
  23. package/dist/{chunk-MYHPRQHR.js → chunk-O6MMQQLF.js} +3 -3
  24. package/dist/{chunk-GYORDNOM.js → chunk-P5V63L35.js} +1 -1
  25. package/dist/{chunk-4YA5XW43.js → chunk-PJQZWJ5I.js} +50 -28
  26. package/dist/{chunk-BHZE36F7.js → chunk-PUVTFUNH.js} +1 -1
  27. package/dist/{chunk-ETBXIKK6.js → chunk-Q2U5635V.js} +1 -1
  28. package/dist/{chunk-TW6WMZFW.js → chunk-QT3KDDXK.js} +156 -7
  29. package/dist/{chunk-ZGHV4QLK.js → chunk-RJNZHFNG.js} +1 -1
  30. package/dist/{chunk-FWNJDD4U.js → chunk-S7W75MIM.js} +3 -20
  31. package/dist/{chunk-C6FZZFYD.js → chunk-WZ23JJ7U.js} +1 -1
  32. package/dist/{chunk-LIYWJ6DV.js → chunk-XIFK423U.js} +108 -13
  33. package/dist/{chunk-4ELXLATB.js → chunk-XUDGZJTJ.js} +2 -2
  34. package/dist/{chunk-H6AFNCN3.js → chunk-XVSJYAK7.js} +1 -1
  35. package/dist/{chunk-LHBMQJC3.js → chunk-XWYR5T52.js} +2 -2
  36. package/dist/{chunk-QNKHJ5CK.js → chunk-YK4N6TBN.js} +4 -2
  37. package/dist/{chunk-XFMQSFS4.js → chunk-YMG7JDEY.js} +16 -6
  38. package/dist/chunk-Z6DXWULM.js +23 -0
  39. package/dist/{chunk-PBEH52A2.js → chunk-ZNNVI5SR.js} +1 -1
  40. package/dist/{flowchart-renderer-H72L7BEC.js → flowchart-renderer-THC6Y7EH.js} +7 -6
  41. package/dist/index.d.ts +68 -1
  42. package/dist/index.js +75 -7
  43. package/dist/{layout-QIPCNUSB.js → layout-BOVTLAOT.js} +7 -6
  44. package/dist/{layout-6JARW64V.js → layout-EHTYSMV4.js} +6 -5
  45. package/dist/{layout-YELNBVPC.js → layout-P6DTD4RT.js} +6 -5
  46. package/dist/{layout-T6TAB5OI.js → layout-RANVNAKI.js} +3 -3
  47. package/dist/{layout-FMKSENGL.js → layout-XUW444O5.js} +5 -4
  48. package/dist/{layout-search-AW5VBDCV.js → layout-search-VKSBUCDM.js} +57 -28
  49. package/dist/{renderer-AI2MD52D.js → renderer-222OTVQV.js} +3 -2
  50. package/dist/{renderer-UUWR7NGF.js → renderer-2KVQGGTT.js} +4 -3
  51. package/dist/{renderer-E5EKGIX2.js → renderer-2OOPQ4CH.js} +4 -3
  52. package/dist/{renderer-RLSR7N6I.js → renderer-3CTUWCO7.js} +5 -4
  53. package/dist/{renderer-CZJ4AMYV.js → renderer-3FF4QVGW.js} +3 -2
  54. package/dist/{renderer-R6VJDZFO.js → renderer-4BHOELCE.js} +4 -3
  55. package/dist/{renderer-425QUIYO.js → renderer-4BIMRO4X.js} +4 -3
  56. package/dist/{renderer-5JVVJBAS.js → renderer-A4LMOBZL.js} +8 -7
  57. package/dist/{renderer-3AOOLHJU.js → renderer-A6ACVK4X.js} +3 -2
  58. package/dist/{renderer-ML2CLU25.js → renderer-DCFQDBGJ.js} +4 -3
  59. package/dist/{renderer-ADX4DWRJ.js → renderer-ELYPDPNF.js} +3 -2
  60. package/dist/{renderer-RH4U3UVM.js → renderer-LODEVN3V.js} +3 -2
  61. package/dist/{renderer-E7WF75GY.js → renderer-NHPKNNBD.js} +5 -4
  62. package/dist/{renderer-JEEGPLMM.js → renderer-R34GJL7U.js} +8 -7
  63. package/dist/{renderer-2BWRW23Z.js → renderer-RENDISO5.js} +1 -1
  64. package/dist/{renderer-VKAJ52UO.js → renderer-SDUSBCJI.js} +3 -2
  65. package/dist/{renderer-RUGMKHX5.js → renderer-WH2HWE5Z.js} +3 -2
  66. package/dist/{renderer-V6LLASGN.js → renderer-X5A5VIRD.js} +5 -4
  67. package/dist/{renderer-EWJS2RAZ.js → renderer-YDAVCRTP.js} +3 -2
  68. package/dist/{state-renderer-DDVJ43HR.js → state-renderer-5IQ4OJUI.js} +7 -6
  69. package/gallery/fixtures/journey-map.dgmo +28 -0
  70. package/gallery/fixtures/mindmap.dgmo +31 -0
  71. package/gallery/fixtures/pert.dgmo +27 -0
  72. package/gallery/fixtures/wireframe.dgmo +30 -0
  73. package/package.json +2 -2
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  layoutClassDiagram
3
- } from "./chunk-BP4BT5TH.js";
4
- import "./chunk-HBCAY3KR.js";
3
+ } from "./chunk-CLQIXD2C.js";
4
+ import "./chunk-HTNLLT34.js";
5
5
  import "./chunk-6EK55ART.js";
6
- import "./chunk-ZGHV4QLK.js";
6
+ import "./chunk-RJNZHFNG.js";
7
7
  import "./chunk-5DH3KYFH.js";
8
- import "./chunk-WMIKC5XO.js";
9
- import "./chunk-FWNJDD4U.js";
8
+ import "./chunk-NPWVOFB3.js";
9
+ import "./chunk-S7W75MIM.js";
10
+ import "./chunk-Z6DXWULM.js";
10
11
  import "./chunk-ICLB27PZ.js";
11
12
  import "./chunk-KAO7JL4I.js";
12
13
  import "./chunk-O753JUEZ.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  layoutSwimlane
3
- } from "./chunk-PKXKWHDW.js";
4
- import "./chunk-EWSESGC2.js";
5
- import "./chunk-TW6WMZFW.js";
3
+ } from "./chunk-AUS7V54P.js";
4
+ import "./chunk-EJS3K44P.js";
5
+ import "./chunk-QT3KDDXK.js";
6
6
  import "./chunk-KAO7JL4I.js";
7
7
  import "./chunk-5WRI5ZAA.js";
8
8
  export {
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  layoutGraph
3
- } from "./chunk-PBEH52A2.js";
3
+ } from "./chunk-ZNNVI5SR.js";
4
4
  import "./chunk-6EK55ART.js";
5
- import "./chunk-ZGHV4QLK.js";
5
+ import "./chunk-RJNZHFNG.js";
6
6
  import "./chunk-5DH3KYFH.js";
7
- import "./chunk-WMIKC5XO.js";
8
- import "./chunk-FWNJDD4U.js";
7
+ import "./chunk-NPWVOFB3.js";
8
+ import "./chunk-S7W75MIM.js";
9
+ import "./chunk-Z6DXWULM.js";
9
10
  import "./chunk-ICLB27PZ.js";
10
11
  import "./chunk-KAO7JL4I.js";
11
12
  import "./chunk-NXMESY4J.js";
@@ -1,22 +1,23 @@
1
1
  import {
2
2
  computeNodeSize
3
- } from "./chunk-LIYWJ6DV.js";
3
+ } from "./chunk-XIFK423U.js";
4
4
  import {
5
5
  clipEndpointsToNodes,
6
6
  groupedTierCandidates
7
- } from "./chunk-EWSESGC2.js";
7
+ } from "./chunk-EJS3K44P.js";
8
8
  import {
9
9
  EDGE_LABEL_FONT_SIZE,
10
10
  NODE_HEIGHT,
11
11
  NODE_WIDTH,
12
12
  measureEdgeLabel
13
- } from "./chunk-TW6WMZFW.js";
14
- import "./chunk-HBCAY3KR.js";
13
+ } from "./chunk-QT3KDDXK.js";
14
+ import "./chunk-HTNLLT34.js";
15
15
  import "./chunk-6EK55ART.js";
16
- import "./chunk-ZGHV4QLK.js";
16
+ import "./chunk-RJNZHFNG.js";
17
17
  import "./chunk-5DH3KYFH.js";
18
- import "./chunk-WMIKC5XO.js";
19
- import "./chunk-FWNJDD4U.js";
18
+ import "./chunk-NPWVOFB3.js";
19
+ import "./chunk-S7W75MIM.js";
20
+ import "./chunk-Z6DXWULM.js";
20
21
  import "./chunk-ICLB27PZ.js";
21
22
  import "./chunk-KAO7JL4I.js";
22
23
  import "./chunk-O753JUEZ.js";
@@ -813,7 +814,8 @@ var ESCALATE_THRESHOLD = 4;
813
814
  var ESCALATE_MAX_N = 45;
814
815
  var ESCALATE_SEEDS = 18;
815
816
  var ESCALATE_REFINE = 10;
816
- var DEFAULT_SEARCH_BUDGET_MS = 5e3;
817
+ var SEARCH_WORK_CAP = 36e3;
818
+ var MIN_SEARCH_CANDIDATES = 6;
817
819
  function rng2(s) {
818
820
  return () => {
819
821
  s |= 0;
@@ -910,7 +912,7 @@ function countSplineCrossings(layout, floor = Infinity) {
910
912
  if (g.collapsed) center.set("__group_" + g.label, { x: g.x, y: g.y });
911
913
  const polys = flatPolys(layout);
912
914
  const edges = layout.edges;
913
- const R = 34;
915
+ const R2 = 34 * 34;
914
916
  let total = 0;
915
917
  for (let a = 0; a < polys.length; a++)
916
918
  for (let b = a + 1; b < polys.length; b++) {
@@ -928,6 +930,8 @@ function countSplineCrossings(layout, floor = Infinity) {
928
930
  for (let i = 1; i < ap.length; i++) {
929
931
  const a0 = ap[i - 1], a1 = ap[i];
930
932
  const axMin = a0.x < a1.x ? a0.x : a1.x, axMax = a0.x > a1.x ? a0.x : a1.x, ayMin = a0.y < a1.y ? a0.y : a1.y, ayMax = a0.y > a1.y ? a0.y : a1.y;
933
+ if (axMax < B.x0 || axMin > B.x1 || ayMax < B.y0 || ayMin > B.y1)
934
+ continue;
931
935
  for (let j = 1; j < bp.length; j++) {
932
936
  const b0 = bp[j - 1], b1 = bp[j];
933
937
  if (axMax < (b0.x < b1.x ? b0.x : b1.x)) continue;
@@ -936,9 +940,9 @@ function countSplineCrossings(layout, floor = Infinity) {
936
940
  if ((b0.y > b1.y ? b0.y : b1.y) < ayMin) continue;
937
941
  const p = segPoint(a0, a1, b0, b1);
938
942
  if (!p) continue;
939
- if (sh0 && Math.hypot(p.x - sh0.x, p.y - sh0.y) < R) continue;
940
- if (sh1 && Math.hypot(p.x - sh1.x, p.y - sh1.y) < R) continue;
941
- if (!hits.some((h) => Math.hypot(h.x - p.x, h.y - p.y) < 6))
943
+ if (sh0 && (p.x - sh0.x) ** 2 + (p.y - sh0.y) ** 2 < R2) continue;
944
+ if (sh1 && (p.x - sh1.x) ** 2 + (p.y - sh1.y) ** 2 < R2) continue;
945
+ if (!hits.some((h) => (h.x - p.x) ** 2 + (h.y - p.y) ** 2 < 36))
942
946
  hits.push(p);
943
947
  }
944
948
  }
@@ -947,19 +951,25 @@ function countSplineCrossings(layout, floor = Infinity) {
947
951
  }
948
952
  return total;
949
953
  }
950
- function pointSegDist(p, a, b) {
954
+ function pointSegDist2(p, a, b) {
951
955
  const dx = b.x - a.x, dy = b.y - a.y;
952
956
  const len2 = dx * dx + dy * dy;
953
- if (len2 < 1e-9) return Math.hypot(p.x - a.x, p.y - a.y);
954
- let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;
955
- t = Math.max(0, Math.min(1, t));
956
- return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));
957
+ let qx = p.x - a.x, qy = p.y - a.y;
958
+ if (len2 >= 1e-9) {
959
+ let t = (qx * dx + qy * dy) / len2;
960
+ t = t < 0 ? 0 : t > 1 ? 1 : t;
961
+ qx -= t * dx;
962
+ qy -= t * dy;
963
+ }
964
+ return qx * qx + qy * qy;
957
965
  }
958
- function distToPoly(p, poly) {
959
- let m = Infinity;
960
- for (let i = 1; i < poly.length; i++)
961
- m = Math.min(m, pointSegDist(p, poly[i - 1], poly[i]));
962
- return m;
966
+ function nearPoly(p, poly, dist) {
967
+ if (p.x < poly.x0 - dist || p.x > poly.x1 + dist || p.y < poly.y0 - dist || p.y > poly.y1 + dist)
968
+ return false;
969
+ const d2 = dist * dist, pts = poly.pts;
970
+ for (let i = 1; i < pts.length; i++)
971
+ if (pointSegDist2(p, pts[i - 1], pts[i]) < d2) return true;
972
+ return false;
963
973
  }
964
974
  function pointRectDist(p, r) {
965
975
  const dx = Math.max(r.x - r.w / 2 - p.x, 0, p.x - (r.x + r.w / 2));
@@ -1010,7 +1020,7 @@ function detectEdgeOverlaps(layout, opts) {
1010
1020
  };
1011
1021
  for (const p of A.pts) {
1012
1022
  const nearShared = shr0 !== void 0 && pointRectDist(p, shr0) < nodeClear || shr1 !== void 0 && pointRectDist(p, shr1) < nodeClear;
1013
- const covered = !nearShared && distToPoly(p, B.pts) < dist;
1023
+ const covered = !nearShared && nearPoly(p, B, dist);
1014
1024
  if (covered) {
1015
1025
  if (run.length)
1016
1026
  runLen += Math.hypot(
@@ -1434,8 +1444,6 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1434
1444
  const YIELD_EVERY_MS = 30;
1435
1445
  const searchStart = performance.now();
1436
1446
  let lastYield = searchStart;
1437
- const budgetMs = opts?.budgetMs ?? DEFAULT_SEARCH_BUDGET_MS;
1438
- const overBudget = () => budgetMs > 0 && performance.now() - searchStart > budgetMs;
1439
1447
  const collapsedGroupLabels = /* @__PURE__ */ new Set();
1440
1448
  if (collapseInfo) {
1441
1449
  const missing = /* @__PURE__ */ new Set();
@@ -1694,10 +1702,16 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1694
1702
  };
1695
1703
  }
1696
1704
  const n = parsed.nodes.length;
1697
- const seedCount = opts?.seeds ?? (n <= 12 ? 80 : n <= 22 ? 40 : n <= 35 ? 22 : 10);
1705
+ const seedCount = opts?.seeds ?? (n <= 12 ? 20 : n <= 22 ? 40 : n <= 35 ? 22 : 10);
1698
1706
  const REFINE_K = opts?.refineK ?? 6;
1699
1707
  const lambda = opts?.lambda ?? DEFAULT_LAMBDA;
1700
1708
  const prev = opts?.previousPositions;
1709
+ const searchSize = Math.max(1, n + parsed.edges.length);
1710
+ const maxCandidates = Math.max(
1711
+ MIN_SEARCH_CANDIDATES,
1712
+ Math.floor(SEARCH_WORK_CAP / Math.pow(searchSize, 1.5))
1713
+ );
1714
+ let attempts = 0;
1701
1715
  const configs = [];
1702
1716
  if (opts?.configs) {
1703
1717
  configs.push(...opts.configs);
@@ -1737,7 +1751,15 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1737
1751
  };
1738
1752
  const pool = [];
1739
1753
  const cfgOf = /* @__PURE__ */ new Map();
1754
+ const perfect = [];
1755
+ let seedsChecked = false;
1740
1756
  for (const cfg of configs) {
1757
+ if (!opts?.configs && cfg.seed !== void 0 && !seedsChecked) {
1758
+ seedsChecked = true;
1759
+ for (const lay of pool) if (badness(lay, 0) === 0) perfect.push(lay);
1760
+ if (perfect.length) break;
1761
+ }
1762
+ attempts++;
1741
1763
  try {
1742
1764
  const lay = place(cfg);
1743
1765
  pool.push(lay);
@@ -1745,7 +1767,7 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1745
1767
  } catch {
1746
1768
  }
1747
1769
  await step("Optimizing layout");
1748
- if (pool.length && overBudget()) break;
1770
+ if (pool.length && attempts >= maxCandidates) break;
1749
1771
  }
1750
1772
  if (!pool.length) {
1751
1773
  const plain = {
@@ -1813,6 +1835,12 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1813
1835
  if (cfg) topConfigs.push(cfg);
1814
1836
  await step("Refining layout");
1815
1837
  }
1838
+ for (const lay of perfect) {
1839
+ if (pool.indexOf(lay) < refineK) continue;
1840
+ consider(lay);
1841
+ const cfg = cfgOf.get(lay);
1842
+ if (cfg) topConfigs.push(cfg);
1843
+ }
1816
1844
  if (!opts?.configs && bestBad >= ESCALATE_THRESHOLD && n <= ESCALATE_MAX_N) {
1817
1845
  const extra = [];
1818
1846
  for (let s = seedCount; s < seedCount + ESCALATE_SEEDS; s++) {
@@ -1822,13 +1850,14 @@ async function layoutBoxesAndLinesSearch(parsed, collapseInfo, opts) {
1822
1850
  ranksep: 60,
1823
1851
  seed: s
1824
1852
  };
1853
+ attempts++;
1825
1854
  try {
1826
1855
  const lay = place(cfg);
1827
1856
  extra.push(lay);
1828
1857
  cfgOf.set(lay, cfg);
1829
1858
  } catch {
1830
1859
  }
1831
- if (overBudget()) break;
1860
+ if (attempts >= maxCandidates) break;
1832
1861
  }
1833
1862
  const extraKey = /* @__PURE__ */ new Map();
1834
1863
  for (const lay of extra)
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderGoal,
3
3
  renderGoalForExport
4
- } from "./chunk-H6AFNCN3.js";
4
+ } from "./chunk-XVSJYAK7.js";
5
5
  import "./chunk-LNO3ASX5.js";
6
- import "./chunk-FWNJDD4U.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-VLC6WNRD.js";
8
9
  import "./chunk-ICLB27PZ.js";
9
10
  import "./chunk-KAO7JL4I.js";
@@ -7,12 +7,13 @@ import {
7
7
  groupMessagesBySection,
8
8
  renderSequenceDiagram,
9
9
  summarizeSectionParticipation
10
- } from "./chunk-XFMQSFS4.js";
11
- import "./chunk-WMIKC5XO.js";
10
+ } from "./chunk-YMG7JDEY.js";
11
+ import "./chunk-NPWVOFB3.js";
12
12
  import {
13
13
  parseInlineMarkdown,
14
14
  truncateBareUrl
15
- } from "./chunk-FWNJDD4U.js";
15
+ } from "./chunk-S7W75MIM.js";
16
+ import "./chunk-Z6DXWULM.js";
16
17
  import "./chunk-24YPR5EH.js";
17
18
  import "./chunk-XCKNFFKM.js";
18
19
  import "./chunk-3DOQOXXI.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderRing,
3
3
  renderRingForExport
4
- } from "./chunk-QJ2JOLFN.js";
5
- import "./chunk-WMIKC5XO.js";
6
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-6I5UN4FD.js";
5
+ import "./chunk-NPWVOFB3.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-24YPR5EH.js";
8
9
  import "./chunk-VLC6WNRD.js";
9
10
  import "./chunk-ICLB27PZ.js";
@@ -3,11 +3,12 @@ import {
3
3
  focusEventLine,
4
4
  renderEventLine,
5
5
  renderEventLineForExport
6
- } from "./chunk-VEE777MD.js";
7
- import "./chunk-WMIKC5XO.js";
6
+ } from "./chunk-FBKPSU3A.js";
7
+ import "./chunk-NPWVOFB3.js";
8
8
  import "./chunk-R2K5L4UA.js";
9
- import "./chunk-FWNJDD4U.js";
10
- import "./chunk-QPE646M2.js";
9
+ import "./chunk-S7W75MIM.js";
10
+ import "./chunk-Z6DXWULM.js";
11
+ import "./chunk-LPXC4I4R.js";
11
12
  import "./chunk-YRYKTYMQ.js";
12
13
  import "./chunk-24YPR5EH.js";
13
14
  import "./chunk-XCKNFFKM.js";
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  renderKanban,
3
3
  renderKanbanForExport
4
- } from "./chunk-VPVWG2GH.js";
5
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-J7Q4VPBJ.js";
5
+ import "./chunk-S7W75MIM.js";
6
+ import "./chunk-Z6DXWULM.js";
6
7
  import "./chunk-24YPR5EH.js";
7
8
  import "./chunk-XCKNFFKM.js";
8
9
  import "./chunk-LD2JSKU3.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderPyramid,
3
3
  renderPyramidForExport
4
- } from "./chunk-X2VEJ5NT.js";
5
- import "./chunk-WMIKC5XO.js";
6
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-BMUWF77V.js";
5
+ import "./chunk-NPWVOFB3.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-24YPR5EH.js";
8
9
  import "./chunk-VLC6WNRD.js";
9
10
  import "./chunk-ICLB27PZ.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderCycle,
3
3
  renderCycleForExport
4
- } from "./chunk-QJFT5MAH.js";
5
- import "./chunk-WMIKC5XO.js";
6
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-DSG6GBUQ.js";
5
+ import "./chunk-NPWVOFB3.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-24YPR5EH.js";
8
9
  import "./chunk-XCKNFFKM.js";
9
10
  import "./chunk-VLC6WNRD.js";
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  renderClassDiagram,
3
3
  renderClassDiagramForExport
4
- } from "./chunk-LHBMQJC3.js";
5
- import "./chunk-BP4BT5TH.js";
6
- import "./chunk-5JO443MB.js";
7
- import "./chunk-HBCAY3KR.js";
4
+ } from "./chunk-XWYR5T52.js";
5
+ import "./chunk-CLQIXD2C.js";
6
+ import "./chunk-HAH5X345.js";
7
+ import "./chunk-HTNLLT34.js";
8
8
  import "./chunk-6EK55ART.js";
9
- import "./chunk-ZGHV4QLK.js";
9
+ import "./chunk-RJNZHFNG.js";
10
10
  import "./chunk-5DH3KYFH.js";
11
- import "./chunk-WMIKC5XO.js";
12
- import "./chunk-FWNJDD4U.js";
11
+ import "./chunk-NPWVOFB3.js";
12
+ import "./chunk-S7W75MIM.js";
13
+ import "./chunk-Z6DXWULM.js";
13
14
  import "./chunk-24YPR5EH.js";
14
15
  import "./chunk-XCKNFFKM.js";
15
16
  import "./chunk-QFIXL3OK.js";
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  renderTechRadar,
3
3
  renderTechRadarForExport
4
- } from "./chunk-QNKHJ5CK.js";
5
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-YK4N6TBN.js";
5
+ import "./chunk-S7W75MIM.js";
6
+ import "./chunk-Z6DXWULM.js";
6
7
  import "./chunk-24YPR5EH.js";
7
8
  import "./chunk-VLC6WNRD.js";
8
9
  import "./chunk-LHL6HDUL.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderCountdown,
3
3
  renderCountdownForExport
4
- } from "./chunk-JIPUBFAM.js";
5
- import "./chunk-WMIKC5XO.js";
6
- import "./chunk-FWNJDD4U.js";
4
+ } from "./chunk-5KGM44TG.js";
5
+ import "./chunk-NPWVOFB3.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-ICLB27PZ.js";
8
9
  import "./chunk-WFA6IULY.js";
9
10
  import "./chunk-3DPOIW3W.js";
@@ -2,8 +2,9 @@ import {
2
2
  bracketExportDimensions,
3
3
  renderBracket,
4
4
  renderBracketForExport
5
- } from "./chunk-ETBXIKK6.js";
6
- import "./chunk-FWNJDD4U.js";
5
+ } from "./chunk-Q2U5635V.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-3DOQOXXI.js";
8
9
  import "./chunk-VLC6WNRD.js";
9
10
  import "./chunk-LHL6HDUL.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderMindmap,
3
3
  renderMindmapForExport
4
- } from "./chunk-3CQS3CIO.js";
4
+ } from "./chunk-LL6D3MES.js";
5
5
  import "./chunk-UIUXIDBX.js";
6
- import "./chunk-FWNJDD4U.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-24YPR5EH.js";
8
9
  import "./chunk-XCKNFFKM.js";
9
10
  import "./chunk-QFIXL3OK.js";
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  renderJourneyMap,
3
3
  renderJourneyMapForExport
4
- } from "./chunk-E6S2K6O2.js";
4
+ } from "./chunk-N7XRBWXA.js";
5
5
  import "./chunk-DOXBS7F5.js";
6
- import "./chunk-ZGHV4QLK.js";
6
+ import "./chunk-RJNZHFNG.js";
7
7
  import "./chunk-5DH3KYFH.js";
8
- import "./chunk-WMIKC5XO.js";
9
- import "./chunk-FWNJDD4U.js";
8
+ import "./chunk-NPWVOFB3.js";
9
+ import "./chunk-S7W75MIM.js";
10
+ import "./chunk-Z6DXWULM.js";
10
11
  import "./chunk-24YPR5EH.js";
11
12
  import "./chunk-XCKNFFKM.js";
12
13
  import "./chunk-LD2JSKU3.js";
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  renderERDiagram,
3
3
  renderERDiagramForExport
4
- } from "./chunk-HUMQIRJK.js";
5
- import "./chunk-FAV4RDVT.js";
6
- import "./chunk-5JO443MB.js";
7
- import "./chunk-HBCAY3KR.js";
4
+ } from "./chunk-HTPZDZKQ.js";
5
+ import "./chunk-2A4DQAXG.js";
6
+ import "./chunk-HAH5X345.js";
7
+ import "./chunk-HTNLLT34.js";
8
8
  import "./chunk-6EK55ART.js";
9
- import "./chunk-ZGHV4QLK.js";
9
+ import "./chunk-RJNZHFNG.js";
10
10
  import "./chunk-5DH3KYFH.js";
11
- import "./chunk-WMIKC5XO.js";
12
- import "./chunk-FWNJDD4U.js";
11
+ import "./chunk-NPWVOFB3.js";
12
+ import "./chunk-S7W75MIM.js";
13
+ import "./chunk-Z6DXWULM.js";
13
14
  import "./chunk-24YPR5EH.js";
14
15
  import "./chunk-XCKNFFKM.js";
15
16
  import "./chunk-3DOQOXXI.js";
@@ -3,7 +3,7 @@ import {
3
3
  renderPert,
4
4
  renderPertAnalysisBlock,
5
5
  renderPertForExport
6
- } from "./chunk-GYORDNOM.js";
6
+ } from "./chunk-P5V63L35.js";
7
7
  import "./chunk-MGBV4JEI.js";
8
8
  import "./chunk-N4XHXBDQ.js";
9
9
  import "./chunk-24YPR5EH.js";
@@ -2,11 +2,12 @@ import {
2
2
  computeInfraLegendGroups,
3
3
  parseAndLayoutInfra,
4
4
  renderInfra
5
- } from "./chunk-ERYHC4KJ.js";
5
+ } from "./chunk-LSQGJN5H.js";
6
6
  import "./chunk-ICZ7M6IZ.js";
7
7
  import "./chunk-3FCSOYN4.js";
8
8
  import "./chunk-XBJJP2HN.js";
9
- import "./chunk-FWNJDD4U.js";
9
+ import "./chunk-S7W75MIM.js";
10
+ import "./chunk-Z6DXWULM.js";
10
11
  import "./chunk-24YPR5EH.js";
11
12
  import "./chunk-XCKNFFKM.js";
12
13
  import "./chunk-3DOQOXXI.js";
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  renderSitemap,
3
3
  renderSitemapForExport
4
- } from "./chunk-BHZE36F7.js";
4
+ } from "./chunk-PUVTFUNH.js";
5
5
  import "./chunk-R2K5L4UA.js";
6
- import "./chunk-FWNJDD4U.js";
6
+ import "./chunk-S7W75MIM.js";
7
+ import "./chunk-Z6DXWULM.js";
7
8
  import "./chunk-24YPR5EH.js";
8
9
  import "./chunk-XCKNFFKM.js";
9
10
  import "./chunk-3DOQOXXI.js";
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  renderBoxesAndLines,
3
3
  renderBoxesAndLinesForExport
4
- } from "./chunk-MYHPRQHR.js";
5
- import "./chunk-5JO443MB.js";
4
+ } from "./chunk-O6MMQQLF.js";
5
+ import "./chunk-HAH5X345.js";
6
6
  import "./chunk-XBJJP2HN.js";
7
7
  import "./chunk-5DH3KYFH.js";
8
- import "./chunk-WMIKC5XO.js";
9
- import "./chunk-FWNJDD4U.js";
8
+ import "./chunk-NPWVOFB3.js";
9
+ import "./chunk-S7W75MIM.js";
10
+ import "./chunk-Z6DXWULM.js";
10
11
  import "./chunk-24YPR5EH.js";
11
12
  import "./chunk-XCKNFFKM.js";
12
13
  import "./chunk-3DOQOXXI.js";
@@ -6,10 +6,11 @@ import {
6
6
  renderC4ContextForExport,
7
7
  renderC4Deployment,
8
8
  renderC4DeploymentForExport
9
- } from "./chunk-C6FZZFYD.js";
9
+ } from "./chunk-WZ23JJ7U.js";
10
10
  import "./chunk-DAX42XVH.js";
11
11
  import "./chunk-XBJJP2HN.js";
12
- import "./chunk-FWNJDD4U.js";
12
+ import "./chunk-S7W75MIM.js";
13
+ import "./chunk-Z6DXWULM.js";
13
14
  import "./chunk-XCKNFFKM.js";
14
15
  import "./chunk-LD2JSKU3.js";
15
16
  import "./chunk-VLC6WNRD.js";
@@ -1,16 +1,17 @@
1
1
  import {
2
2
  renderState,
3
3
  renderStateForExport
4
- } from "./chunk-BF7JAFJI.js";
4
+ } from "./chunk-B7CU2HW5.js";
5
5
  import "./chunk-26EVL454.js";
6
- import "./chunk-PBEH52A2.js";
7
- import "./chunk-5JO443MB.js";
6
+ import "./chunk-ZNNVI5SR.js";
7
+ import "./chunk-HAH5X345.js";
8
8
  import "./chunk-XBJJP2HN.js";
9
9
  import "./chunk-6EK55ART.js";
10
- import "./chunk-ZGHV4QLK.js";
10
+ import "./chunk-RJNZHFNG.js";
11
11
  import "./chunk-5DH3KYFH.js";
12
- import "./chunk-WMIKC5XO.js";
13
- import "./chunk-FWNJDD4U.js";
12
+ import "./chunk-NPWVOFB3.js";
13
+ import "./chunk-S7W75MIM.js";
14
+ import "./chunk-Z6DXWULM.js";
14
15
  import "./chunk-EPDBWATV.js";
15
16
  import "./chunk-24YPR5EH.js";
16
17
  import "./chunk-XCKNFFKM.js";
@@ -0,0 +1,28 @@
1
+ journey-map Customer Onboarding
2
+
3
+ persona New Customer color: blue
4
+ Team lead at a 40-person company
5
+ Evaluating the product on a two-week trial
6
+
7
+ [Discover]
8
+ Reads a comparison article score: 3, emotion: Curious
9
+ thought: Could this replace the spreadsheet we keep fighting?
10
+ Watches the product demo score: 4, emotion: Interested
11
+
12
+ [Sign Up]
13
+ Creates an account score: 4, emotion: Hopeful
14
+ description: Email, password and a workspace name
15
+ Waits for the verification email score: 2, emotion: Impatient
16
+ pain: The email lands in spam and takes ten minutes to find
17
+
18
+ [First Use]
19
+ Imports existing data score: 2, emotion: Frustrated
20
+ pain: The CSV importer rejects two columns without saying why
21
+ opportunity: Show a preview with the rejected columns highlighted
22
+ Invites the team score: 4, emotion: Relieved
23
+
24
+ [Adopt]
25
+ Runs the first weekly review in the tool score: 5, emotion: Confident
26
+ description: The whole team works from one shared board
27
+ Upgrades to a paid plan score: 4, emotion: Satisfied
28
+ thought: Worth it if it saves an hour a week
@@ -0,0 +1,31 @@
1
+ mindmap Product Launch Plan
2
+
3
+ tag Priority as p
4
+ Must red
5
+ Should orange
6
+ Could green
7
+
8
+ tag Owner as o
9
+ Product blue
10
+ Engineering teal
11
+ Marketing purple
12
+
13
+ Launch p: Must, o: Product
14
+ Scope
15
+ Core features description: Everything the beta asked for
16
+ Integrations p: Should
17
+ Calendar sync
18
+ Chat notifications p: Could
19
+ Pricing tiers
20
+ Readiness o: Engineering
21
+ Load testing p: Must
22
+ Monitoring
23
+ Rollback plan description: One command, rehearsed twice
24
+ Messaging o: Marketing, collapsed
25
+ Landing page
26
+ Launch post
27
+ Customer emails
28
+ Support
29
+ Help articles p: Should
30
+ Onboarding call
31
+ FAQ p: Could