schematex 0.4.2 → 0.5.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 (150) hide show
  1. package/README.md +24 -3
  2. package/dist/ai/ai-sdk.cjs +17 -15
  3. package/dist/ai/ai-sdk.cjs.map +1 -1
  4. package/dist/ai/ai-sdk.d.cts +2 -2
  5. package/dist/ai/ai-sdk.d.ts +2 -2
  6. package/dist/ai/ai-sdk.js +12 -10
  7. package/dist/ai/ai-sdk.js.map +1 -1
  8. package/dist/ai/index.cjs +20 -18
  9. package/dist/ai/index.d.cts +3 -3
  10. package/dist/ai/index.d.ts +3 -3
  11. package/dist/ai/index.js +12 -10
  12. package/dist/{api-BIj9t4Oc.d.cts → api-C5UcmT7n.d.cts} +1 -1
  13. package/dist/{api-BIj9t4Oc.d.ts → api-C5UcmT7n.d.ts} +1 -1
  14. package/dist/browser.cjs +14 -12
  15. package/dist/browser.cjs.map +1 -1
  16. package/dist/browser.d.cts +2 -2
  17. package/dist/browser.d.ts +2 -2
  18. package/dist/browser.js +12 -10
  19. package/dist/browser.js.map +1 -1
  20. package/dist/chunk-2KTQ75LN.js +67 -0
  21. package/dist/chunk-2KTQ75LN.js.map +1 -0
  22. package/dist/chunk-3KRL2EGN.cjs +70 -0
  23. package/dist/chunk-3KRL2EGN.cjs.map +1 -0
  24. package/dist/{chunk-YWDODCW2.js → chunk-3M6T7KB4.js} +60 -14
  25. package/dist/chunk-3M6T7KB4.js.map +1 -0
  26. package/dist/{chunk-OIZ4MYSF.cjs → chunk-3M6WB62Y.cjs} +43 -9
  27. package/dist/chunk-3M6WB62Y.cjs.map +1 -0
  28. package/dist/{chunk-DHHVYSQX.cjs → chunk-3YUUC6RN.cjs} +5145 -295
  29. package/dist/chunk-3YUUC6RN.cjs.map +1 -0
  30. package/dist/{chunk-JDBG5DU2.js → chunk-6OSUNBZY.js} +43 -9
  31. package/dist/chunk-6OSUNBZY.js.map +1 -0
  32. package/dist/{chunk-O5POCPXZ.cjs → chunk-EGSUMHCS.cjs} +21 -10
  33. package/dist/chunk-EGSUMHCS.cjs.map +1 -0
  34. package/dist/{chunk-Z5NGIM4Z.js → chunk-GTDQAN2Z.js} +5134 -287
  35. package/dist/chunk-GTDQAN2Z.js.map +1 -0
  36. package/dist/{chunk-J7JWMQD5.js → chunk-HUPDIRBX.js} +119 -4
  37. package/dist/chunk-HUPDIRBX.js.map +1 -0
  38. package/dist/{chunk-5FF2IT3C.js → chunk-IBRW3UOA.js} +51 -10
  39. package/dist/chunk-IBRW3UOA.js.map +1 -0
  40. package/dist/{chunk-YTLGK5BZ.js → chunk-IM4RCUHA.js} +238 -1788
  41. package/dist/chunk-IM4RCUHA.js.map +1 -0
  42. package/dist/{chunk-LPKVIRYT.js → chunk-JHDR56XO.js} +18 -9
  43. package/dist/chunk-JHDR56XO.js.map +1 -0
  44. package/dist/{chunk-GZY4CJ23.cjs → chunk-N7W5KZK7.cjs} +51 -10
  45. package/dist/chunk-N7W5KZK7.cjs.map +1 -0
  46. package/dist/{chunk-Z5UECSNM.cjs → chunk-NWPCY65Z.cjs} +240 -1790
  47. package/dist/chunk-NWPCY65Z.cjs.map +1 -0
  48. package/dist/chunk-PIV2A3HG.js +55 -0
  49. package/dist/chunk-PIV2A3HG.js.map +1 -0
  50. package/dist/{chunk-E2EJRVWS.cjs → chunk-QTNPMIO2.cjs} +158 -15
  51. package/dist/chunk-QTNPMIO2.cjs.map +1 -0
  52. package/dist/chunk-SBB6C4OP.cjs +57 -0
  53. package/dist/chunk-SBB6C4OP.cjs.map +1 -0
  54. package/dist/{chunk-K6RAUXRQ.cjs → chunk-TZTCIAYW.cjs} +7 -6
  55. package/dist/chunk-TZTCIAYW.cjs.map +1 -0
  56. package/dist/{chunk-KVP7AORH.js → chunk-UFTYX73U.js} +158 -15
  57. package/dist/chunk-UFTYX73U.js.map +1 -0
  58. package/dist/{chunk-6WORZSL3.cjs → chunk-VFZOPRQP.cjs} +60 -14
  59. package/dist/chunk-VFZOPRQP.cjs.map +1 -0
  60. package/dist/{chunk-WHNIK4LK.js → chunk-VJGMEGMR.js} +7 -6
  61. package/dist/chunk-VJGMEGMR.js.map +1 -0
  62. package/dist/{chunk-3MJKJX27.cjs → chunk-VZ5LDNHK.cjs} +18 -9
  63. package/dist/chunk-VZ5LDNHK.cjs.map +1 -0
  64. package/dist/{chunk-2Z543TC3.cjs → chunk-XRCY75UV.cjs} +119 -4
  65. package/dist/chunk-XRCY75UV.cjs.map +1 -0
  66. package/dist/{chunk-6XGSEG3K.js → chunk-ZL5RB4UV.js} +21 -10
  67. package/dist/chunk-ZL5RB4UV.js.map +1 -0
  68. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  69. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  70. package/dist/diagrams/circuit/index.cjs +7 -7
  71. package/dist/diagrams/circuit/index.d.cts +1 -1
  72. package/dist/diagrams/circuit/index.d.ts +1 -1
  73. package/dist/diagrams/circuit/index.js +1 -1
  74. package/dist/diagrams/ecomap/index.cjs +7 -6
  75. package/dist/diagrams/ecomap/index.d.cts +1 -1
  76. package/dist/diagrams/ecomap/index.d.ts +1 -1
  77. package/dist/diagrams/ecomap/index.js +2 -1
  78. package/dist/diagrams/entity/index.d.cts +1 -1
  79. package/dist/diagrams/entity/index.d.ts +1 -1
  80. package/dist/diagrams/fishbone/index.cjs +8 -7
  81. package/dist/diagrams/fishbone/index.d.cts +1 -1
  82. package/dist/diagrams/fishbone/index.d.ts +1 -1
  83. package/dist/diagrams/fishbone/index.js +2 -1
  84. package/dist/diagrams/flowchart/index.cjs +8 -7
  85. package/dist/diagrams/flowchart/index.d.cts +2 -2
  86. package/dist/diagrams/flowchart/index.d.ts +2 -2
  87. package/dist/diagrams/flowchart/index.js +2 -1
  88. package/dist/diagrams/genogram/index.cjs +9 -8
  89. package/dist/diagrams/genogram/index.d.cts +1 -1
  90. package/dist/diagrams/genogram/index.d.ts +1 -1
  91. package/dist/diagrams/genogram/index.js +2 -1
  92. package/dist/diagrams/ladder/index.cjs +7 -5
  93. package/dist/diagrams/ladder/index.d.cts +1 -1
  94. package/dist/diagrams/ladder/index.d.ts +1 -1
  95. package/dist/diagrams/ladder/index.js +3 -1
  96. package/dist/diagrams/logic/index.d.cts +1 -1
  97. package/dist/diagrams/logic/index.d.ts +1 -1
  98. package/dist/diagrams/orgchart/index.d.cts +1 -1
  99. package/dist/diagrams/orgchart/index.d.ts +1 -1
  100. package/dist/diagrams/pedigree/index.cjs +7 -6
  101. package/dist/diagrams/pedigree/index.d.cts +1 -1
  102. package/dist/diagrams/pedigree/index.d.ts +1 -1
  103. package/dist/diagrams/pedigree/index.js +2 -1
  104. package/dist/diagrams/phylo/index.d.cts +1 -1
  105. package/dist/diagrams/phylo/index.d.ts +1 -1
  106. package/dist/diagrams/sld/index.cjs +7 -5
  107. package/dist/diagrams/sld/index.d.cts +1 -1
  108. package/dist/diagrams/sld/index.d.ts +1 -1
  109. package/dist/diagrams/sld/index.js +3 -1
  110. package/dist/diagrams/sociogram/index.d.cts +1 -1
  111. package/dist/diagrams/sociogram/index.d.ts +1 -1
  112. package/dist/diagrams/timing/index.d.cts +1 -1
  113. package/dist/diagrams/timing/index.d.ts +1 -1
  114. package/dist/diagrams/venn/index.d.cts +1 -1
  115. package/dist/diagrams/venn/index.d.ts +1 -1
  116. package/dist/{index-CGK0xVls.d.ts → index-C9A0h-CB.d.cts} +1 -2
  117. package/dist/{index-OW8eDrKj.d.cts → index-CJai_TEZ.d.ts} +1 -2
  118. package/dist/index.cjs +37 -23
  119. package/dist/index.d.cts +10 -4
  120. package/dist/index.d.ts +10 -4
  121. package/dist/index.js +11 -9
  122. package/dist/react.cjs +12 -10
  123. package/dist/react.cjs.map +1 -1
  124. package/dist/react.d.cts +1 -1
  125. package/dist/react.d.ts +1 -1
  126. package/dist/react.js +11 -9
  127. package/dist/react.js.map +1 -1
  128. package/dist/{types-Gkyab1sL.d.ts → types-BOAsqHoU.d.cts} +3 -3
  129. package/dist/{types-Gkyab1sL.d.cts → types-BOAsqHoU.d.ts} +3 -3
  130. package/package.json +2 -2
  131. package/dist/chunk-2Z543TC3.cjs.map +0 -1
  132. package/dist/chunk-3MJKJX27.cjs.map +0 -1
  133. package/dist/chunk-5FF2IT3C.js.map +0 -1
  134. package/dist/chunk-6WORZSL3.cjs.map +0 -1
  135. package/dist/chunk-6XGSEG3K.js.map +0 -1
  136. package/dist/chunk-DHHVYSQX.cjs.map +0 -1
  137. package/dist/chunk-E2EJRVWS.cjs.map +0 -1
  138. package/dist/chunk-GZY4CJ23.cjs.map +0 -1
  139. package/dist/chunk-J7JWMQD5.js.map +0 -1
  140. package/dist/chunk-JDBG5DU2.js.map +0 -1
  141. package/dist/chunk-K6RAUXRQ.cjs.map +0 -1
  142. package/dist/chunk-KVP7AORH.js.map +0 -1
  143. package/dist/chunk-LPKVIRYT.js.map +0 -1
  144. package/dist/chunk-O5POCPXZ.cjs.map +0 -1
  145. package/dist/chunk-OIZ4MYSF.cjs.map +0 -1
  146. package/dist/chunk-WHNIK4LK.js.map +0 -1
  147. package/dist/chunk-YTLGK5BZ.js.map +0 -1
  148. package/dist/chunk-YWDODCW2.js.map +0 -1
  149. package/dist/chunk-Z5NGIM4Z.js.map +0 -1
  150. package/dist/chunk-Z5UECSNM.cjs.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { firstContentLine } from './chunk-2KTQ75LN.js';
1
2
  import { resolveFlowchartTheme } from './chunk-2VNMKOUO.js';
2
3
  import { text, title, desc, el, defs, group, svgRoot, rect, multilineText, path, polygon, circle, line } from './chunk-SYYBKDL7.js';
3
4
 
@@ -289,6 +290,47 @@ function parseCssProps(s) {
289
290
  }
290
291
  return props;
291
292
  }
293
+ function extractInlineClasses(line2) {
294
+ const pairs = [];
295
+ let out = line2;
296
+ const re = /:::([A-Za-z_][\w-]*)/g;
297
+ let m;
298
+ const hits = [];
299
+ while ((m = re.exec(out)) !== null) {
300
+ hits.push({ start: m.index, end: m.index + m[0].length, name: m[1] });
301
+ }
302
+ if (hits.length === 0) return { stripped: line2, pairs };
303
+ for (let h = hits.length - 1; h >= 0; h--) {
304
+ const hit = hits[h];
305
+ const before = out.slice(0, hit.start);
306
+ let cursor = before.length;
307
+ const lastCh = before[cursor - 1];
308
+ if (lastCh === "]" || lastCh === ")" || lastCh === "}") {
309
+ const closer = lastCh;
310
+ const opener = closer === "]" ? "[" : closer === ")" ? "(" : "{";
311
+ let depth = 0;
312
+ let i = cursor - 1;
313
+ for (; i >= 0; i--) {
314
+ if (before[i] === closer) depth++;
315
+ else if (before[i] === opener) {
316
+ depth--;
317
+ if (depth === 0) break;
318
+ }
319
+ }
320
+ if (i >= 0) cursor = i;
321
+ }
322
+ const idEnd = cursor;
323
+ let idStart = idEnd;
324
+ while (idStart > 0 && /[A-Za-z0-9_-]/.test(before[idStart - 1])) idStart--;
325
+ if (idStart === idEnd) {
326
+ continue;
327
+ }
328
+ const id = before.slice(idStart, idEnd);
329
+ pairs.push({ id, className: hit.name });
330
+ out = out.slice(0, hit.start) + out.slice(hit.end);
331
+ }
332
+ return { stripped: out, pairs };
333
+ }
292
334
  function parseFlowchart(source) {
293
335
  const lines = source.replace(/\r\n/g, "\n").split("\n");
294
336
  const ast = {
@@ -331,10 +373,18 @@ function parseFlowchart(source) {
331
373
  ast.title = mQuoted ? mQuoted[1] : extra;
332
374
  }
333
375
  const subgraphStack = [];
376
+ const pendingInlineClasses = [];
334
377
  for (let i = headerIdx + 1; i < lines.length; i++) {
335
- const raw = lines[i];
378
+ const rawOriginal = lines[i];
379
+ const originalTrimmed = rawOriginal.trim();
380
+ if (originalTrimmed.length === 0 || originalTrimmed.startsWith("%%")) {
381
+ continue;
382
+ }
383
+ const { stripped, pairs } = extractInlineClasses(rawOriginal);
384
+ for (const p of pairs) pendingInlineClasses.push(p);
385
+ const raw = stripped;
336
386
  const trimmed = raw.trim();
337
- if (trimmed.length === 0 || trimmed.startsWith("%%")) continue;
387
+ if (trimmed.length === 0) continue;
338
388
  const sgMatch = /^subgraph(?:\s+(.*))?$/.exec(trimmed);
339
389
  if (sgMatch) {
340
390
  const sg = parseSubgraphHeader(sgMatch[1] ?? "", ast.subgraphs.length);
@@ -457,6 +507,11 @@ function parseFlowchart(source) {
457
507
  ast.edges.push(edge);
458
508
  }
459
509
  }
510
+ for (const { id, className } of pendingInlineClasses) {
511
+ const existing = nodeMap.get(id);
512
+ if (!existing) continue;
513
+ existing.classes = [...existing.classes ?? [], className];
514
+ }
460
515
  return ast;
461
516
  }
462
517
 
@@ -767,15 +822,27 @@ function isFullWidth(code) {
767
822
  if (code >= 131072 && code <= 196607) return true;
768
823
  return false;
769
824
  }
770
- function measureLabelWidth(label) {
825
+ function labelLines(label) {
826
+ return String(label).split(/<br\s*\/?>|\n/i).map((line2) => line2.replace(/<\/?[bi]>/gi, ""));
827
+ }
828
+ function measureLineWidth(line2) {
771
829
  let w = 0;
772
- for (const ch of label) {
830
+ for (const ch of line2) {
773
831
  const code = ch.codePointAt(0) ?? 0;
774
832
  if (isFullWidth(code)) w += FC_CONST.cjkCharWidth;
775
833
  else w += FC_CONST.charWidth;
776
834
  }
777
835
  return w;
778
836
  }
837
+ function measureLabelWidth(label) {
838
+ const lines = labelLines(label);
839
+ let max = 0;
840
+ for (const line2 of lines) {
841
+ const w = measureLineWidth(line2);
842
+ if (w > max) max = w;
843
+ }
844
+ return max;
845
+ }
779
846
  function greedyFAS(nodeIds, edges) {
780
847
  const outAdj = /* @__PURE__ */ new Map();
781
848
  const inAdj = /* @__PURE__ */ new Map();
@@ -1208,6 +1275,85 @@ function laneBasedXCoords(layerNodes, pathOf, nodeSpacingX, segments) {
1208
1275
  }
1209
1276
  return result;
1210
1277
  }
1278
+ function enforceSequentialClusterLayers(ast, layerMap, edges) {
1279
+ const sgParent = /* @__PURE__ */ new Map();
1280
+ for (const sg of ast.subgraphs) {
1281
+ for (const childSg of sg.subgraphs) sgParent.set(childSg, sg.id);
1282
+ if (!sgParent.has(sg.id)) sgParent.set(sg.id, void 0);
1283
+ }
1284
+ const topLevel = ast.subgraphs.filter((sg) => !sgParent.get(sg.id));
1285
+ if (topLevel.length < 2) return;
1286
+ const collect = (sgId) => {
1287
+ const sg = ast.subgraphs.find((s) => s.id === sgId);
1288
+ if (!sg) return [];
1289
+ const ids = [...sg.children];
1290
+ for (const childSgId of sg.subgraphs) ids.push(...collect(childSgId));
1291
+ return ids;
1292
+ };
1293
+ const adjOut = /* @__PURE__ */ new Map();
1294
+ for (const e of edges) {
1295
+ if (!adjOut.has(e.from)) adjOut.set(e.from, []);
1296
+ adjOut.get(e.from).push(e.to);
1297
+ }
1298
+ const hasForwardEdge = (srcSgId, dstSgId) => {
1299
+ const srcIds = new Set(collect(srcSgId));
1300
+ const dstIds = new Set(collect(dstSgId));
1301
+ for (const id of srcIds) {
1302
+ for (const t of adjOut.get(id) ?? []) {
1303
+ if (dstIds.has(t)) return true;
1304
+ }
1305
+ }
1306
+ return false;
1307
+ };
1308
+ const chains = [];
1309
+ let cur = [];
1310
+ for (let i = 0; i < topLevel.length; i++) {
1311
+ const sg = topLevel[i];
1312
+ if (i === 0 || !hasForwardEdge(topLevel[i - 1].id, sg.id)) {
1313
+ if (cur.length > 1) chains.push(cur);
1314
+ cur = [sg.id];
1315
+ } else {
1316
+ cur.push(sg.id);
1317
+ }
1318
+ }
1319
+ if (cur.length > 1) chains.push(cur);
1320
+ if (chains.length === 0) return;
1321
+ for (const chain of chains) {
1322
+ let prevMax = -Infinity;
1323
+ for (const clusterId of chain) {
1324
+ const ids = collect(clusterId);
1325
+ if (ids.length === 0) continue;
1326
+ let curMin = Infinity;
1327
+ let curMax = -Infinity;
1328
+ for (const id of ids) {
1329
+ const l = layerMap.get(id) ?? 0;
1330
+ if (l < curMin) curMin = l;
1331
+ if (l > curMax) curMax = l;
1332
+ }
1333
+ const requiredMin = prevMax === -Infinity ? curMin : prevMax + 1;
1334
+ if (curMin < requiredMin) {
1335
+ const shift = requiredMin - curMin;
1336
+ const toShift = new Set(ids);
1337
+ const queue = [...ids];
1338
+ while (queue.length > 0) {
1339
+ const u = queue.shift();
1340
+ for (const t of adjOut.get(u) ?? []) {
1341
+ if (!toShift.has(t)) {
1342
+ toShift.add(t);
1343
+ queue.push(t);
1344
+ }
1345
+ }
1346
+ }
1347
+ for (const id of toShift) {
1348
+ layerMap.set(id, (layerMap.get(id) ?? 0) + shift);
1349
+ }
1350
+ prevMax = curMax + shift;
1351
+ } else {
1352
+ prevMax = curMax;
1353
+ }
1354
+ }
1355
+ }
1356
+ }
1211
1357
  function hasOverlappingTopLevelClusters(ast, layerMap, sgParent) {
1212
1358
  const topLevel = ast.subgraphs.filter((sg) => !sgParent.get(sg.id));
1213
1359
  if (topLevel.length < 2) return false;
@@ -1244,7 +1390,9 @@ function layoutFlowchart(ast) {
1244
1390
  Math.ceil(rawTextW) + FC_CONST.labelHPad * 2
1245
1391
  );
1246
1392
  let shapeW = Math.max(FC_CONST.minNodeWidth, labelW);
1247
- let shapeH = FC_CONST.nodeHeight;
1393
+ const nLines = labelLines(n.label).length;
1394
+ const multilineH = nLines > 1 ? FC_CONST.nodeHeight + (nLines - 1) * 14 : FC_CONST.nodeHeight;
1395
+ let shapeH = multilineH;
1248
1396
  if (n.shape === "diamond") {
1249
1397
  shapeW = Math.max(shapeW, labelW * 1.4);
1250
1398
  shapeH = Math.max(shapeH, 52);
@@ -1301,6 +1449,7 @@ function layoutFlowchart(ast) {
1301
1449
  };
1302
1450
  });
1303
1451
  const layerMap = longestPathLayers(allIds, ledges);
1452
+ enforceSequentialClusterLayers(ast, layerMap, ledges);
1304
1453
  let dummyCounter = 0;
1305
1454
  const dummies = [];
1306
1455
  const { updatedEdges } = insertDummies(ledges, layerMap, () => {
@@ -2077,14 +2226,8 @@ function renderFlowchart(text2, themeName = "default") {
2077
2226
  var flowchart = {
2078
2227
  type: "flowchart",
2079
2228
  detect(text2) {
2080
- for (const raw of text2.split(/\r?\n/)) {
2081
- const t = raw.trim();
2082
- if (t.length === 0) continue;
2083
- if (t.startsWith("%%")) continue;
2084
- const first = t.split(/\s+/)[0]?.toLowerCase() ?? "";
2085
- return first === "flowchart" || first === "graph";
2086
- }
2087
- return false;
2229
+ const first = firstContentLine(text2)?.split(/\s+/)[0]?.toLowerCase() ?? "";
2230
+ return first === "flowchart" || first === "graph";
2088
2231
  },
2089
2232
  parse: parseFlowchart,
2090
2233
  render(text2, config) {
@@ -2094,5 +2237,5 @@ var flowchart = {
2094
2237
  };
2095
2238
 
2096
2239
  export { FC_CONST, flowchart, layoutFlowchart, parseFlowchart, renderFlowchart, renderFlowchartAST };
2097
- //# sourceMappingURL=chunk-KVP7AORH.js.map
2098
- //# sourceMappingURL=chunk-KVP7AORH.js.map
2240
+ //# sourceMappingURL=chunk-UFTYX73U.js.map
2241
+ //# sourceMappingURL=chunk-UFTYX73U.js.map