schematex 0.3.2 → 0.3.4

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 (202) hide show
  1. package/README.md +20 -1
  2. package/dist/ai/ai-sdk.cjs +25 -25
  3. package/dist/ai/ai-sdk.d.cts +1 -1
  4. package/dist/ai/ai-sdk.d.ts +1 -1
  5. package/dist/ai/ai-sdk.js +20 -20
  6. package/dist/ai/index.cjs +28 -28
  7. package/dist/ai/index.d.cts +1 -1
  8. package/dist/ai/index.d.ts +1 -1
  9. package/dist/ai/index.js +20 -20
  10. package/dist/browser.cjs +22 -22
  11. package/dist/browser.js +20 -20
  12. package/dist/{chunk-UK7JF5QB.cjs → chunk-3MJKJX27.cjs} +37 -38
  13. package/dist/chunk-3MJKJX27.cjs.map +1 -0
  14. package/dist/{chunk-HIQPEAL7.js → chunk-3RAVPXLN.js} +4 -4
  15. package/dist/{chunk-HIQPEAL7.js.map → chunk-3RAVPXLN.js.map} +1 -1
  16. package/dist/{chunk-LFZZ4NCP.cjs → chunk-3WNW5Y7P.cjs} +48 -8
  17. package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
  18. package/dist/{chunk-XUEROLSB.cjs → chunk-4THC4VUA.cjs} +17 -17
  19. package/dist/chunk-4THC4VUA.cjs.map +1 -0
  20. package/dist/{chunk-K5QG53GT.cjs → chunk-5COUZTVA.cjs} +27 -27
  21. package/dist/{chunk-K5QG53GT.cjs.map → chunk-5COUZTVA.cjs.map} +1 -1
  22. package/dist/{chunk-F6OROIHS.js → chunk-5CTERELC.js} +4 -4
  23. package/dist/{chunk-F6OROIHS.js.map → chunk-5CTERELC.js.map} +1 -1
  24. package/dist/{chunk-ZNLEUL7T.js → chunk-5SKT7RYR.js} +5 -5
  25. package/dist/chunk-5SKT7RYR.js.map +1 -0
  26. package/dist/{chunk-75BMFCP5.cjs → chunk-5UCXMYE7.cjs} +44 -44
  27. package/dist/{chunk-75BMFCP5.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
  28. package/dist/{chunk-GYTWJ6VB.cjs → chunk-6ULC3UHJ.cjs} +68 -49
  29. package/dist/chunk-6ULC3UHJ.cjs.map +1 -0
  30. package/dist/{chunk-3YXXZ4LT.cjs → chunk-6WORZSL3.cjs} +34 -34
  31. package/dist/{chunk-3YXXZ4LT.cjs.map → chunk-6WORZSL3.cjs.map} +1 -1
  32. package/dist/{chunk-6BKUD5EJ.js → chunk-6XGSEG3K.js} +4 -5
  33. package/dist/chunk-6XGSEG3K.js.map +1 -0
  34. package/dist/{chunk-OK5RYX55.cjs → chunk-CQP5YHVK.cjs} +26 -27
  35. package/dist/chunk-CQP5YHVK.cjs.map +1 -0
  36. package/dist/{chunk-2UJAVPA4.cjs → chunk-CS67UBP3.cjs} +27 -27
  37. package/dist/{chunk-2UJAVPA4.cjs.map → chunk-CS67UBP3.cjs.map} +1 -1
  38. package/dist/{chunk-YTEEZV6J.cjs → chunk-DBMZEZLF.cjs} +425 -425
  39. package/dist/chunk-DBMZEZLF.cjs.map +1 -0
  40. package/dist/{chunk-NFT6VW73.js → chunk-DHKKDIVT.js} +4 -4
  41. package/dist/chunk-DHKKDIVT.js.map +1 -0
  42. package/dist/{chunk-H4CJTKEH.js → chunk-DNZV4V4R.js} +5 -5
  43. package/dist/{chunk-H4CJTKEH.js.map → chunk-DNZV4V4R.js.map} +1 -1
  44. package/dist/{chunk-ZTSO3S4P.js → chunk-FO7BLCEW.js} +3 -3
  45. package/dist/{chunk-ZTSO3S4P.js.map → chunk-FO7BLCEW.js.map} +1 -1
  46. package/dist/{chunk-EYHD7LV3.cjs → chunk-H5JYZ5YS.cjs} +130 -130
  47. package/dist/chunk-H5JYZ5YS.cjs.map +1 -0
  48. package/dist/{chunk-RNGYXGHS.js → chunk-HKJRHXGZ.js} +22 -22
  49. package/dist/chunk-HKJRHXGZ.js.map +1 -0
  50. package/dist/{chunk-X4F6VVEJ.js → chunk-I6VEXSUK.js} +3 -4
  51. package/dist/chunk-I6VEXSUK.js.map +1 -0
  52. package/dist/{chunk-MKKFIPKU.cjs → chunk-IFR34VTL.cjs} +47 -47
  53. package/dist/chunk-IFR34VTL.cjs.map +1 -0
  54. package/dist/{chunk-BJ65PKDU.js → chunk-IURM4ZWE.js} +4 -4
  55. package/dist/chunk-IURM4ZWE.js.map +1 -0
  56. package/dist/{chunk-M5ZC3LFJ.js → chunk-IZMAZOQI.js} +4 -4
  57. package/dist/chunk-IZMAZOQI.js.map +1 -0
  58. package/dist/{chunk-RODV6PC4.cjs → chunk-J3Y2QDJR.cjs} +7 -7
  59. package/dist/{chunk-RODV6PC4.cjs.map → chunk-J3Y2QDJR.cjs.map} +1 -1
  60. package/dist/{chunk-BUN3CRMP.cjs → chunk-K6RAUXRQ.cjs} +65 -66
  61. package/dist/chunk-K6RAUXRQ.cjs.map +1 -0
  62. package/dist/{chunk-IT2TVXC7.js → chunk-LPKVIRYT.js} +4 -5
  63. package/dist/chunk-LPKVIRYT.js.map +1 -0
  64. package/dist/{chunk-W7GIQTJV.cjs → chunk-MIKCKV27.cjs} +22 -22
  65. package/dist/chunk-MIKCKV27.cjs.map +1 -0
  66. package/dist/{chunk-KUXOHLGC.cjs → chunk-O5POCPXZ.cjs} +52 -53
  67. package/dist/chunk-O5POCPXZ.cjs.map +1 -0
  68. package/dist/{chunk-BJWMPPEA.js → chunk-PWI4NFYR.js} +4 -4
  69. package/dist/chunk-PWI4NFYR.js.map +1 -0
  70. package/dist/{chunk-WHJXRLFD.js → chunk-SYYBKDL7.js} +48 -8
  71. package/dist/chunk-SYYBKDL7.js.map +1 -0
  72. package/dist/{chunk-L2KUGWFR.cjs → chunk-T47A6XUK.cjs} +47 -47
  73. package/dist/chunk-T47A6XUK.cjs.map +1 -0
  74. package/dist/{chunk-SFSZUOFT.js → chunk-TWAC2IIS.js} +4 -4
  75. package/dist/chunk-TWAC2IIS.js.map +1 -0
  76. package/dist/{chunk-XI6JOG76.cjs → chunk-V4OVUBLA.cjs} +46 -46
  77. package/dist/chunk-V4OVUBLA.cjs.map +1 -0
  78. package/dist/{chunk-2J2QWNGI.js → chunk-VRE5VWDQ.js} +27 -8
  79. package/dist/chunk-VRE5VWDQ.js.map +1 -0
  80. package/dist/{chunk-SE23X5OE.js → chunk-WHNIK4LK.js} +4 -5
  81. package/dist/chunk-WHNIK4LK.js.map +1 -0
  82. package/dist/{chunk-C3IVD7DI.cjs → chunk-WIFGBWET.cjs} +25 -26
  83. package/dist/chunk-WIFGBWET.cjs.map +1 -0
  84. package/dist/{chunk-7MVDN5UC.cjs → chunk-XSNNGYXZ.cjs} +36 -36
  85. package/dist/chunk-XSNNGYXZ.cjs.map +1 -0
  86. package/dist/{chunk-7BEJHG43.js → chunk-YWDODCW2.js} +4 -4
  87. package/dist/{chunk-7BEJHG43.js.map → chunk-YWDODCW2.js.map} +1 -1
  88. package/dist/{chunk-M3R6RCXY.js → chunk-ZKDL6Y3O.js} +4 -4
  89. package/dist/chunk-ZKDL6Y3O.js.map +1 -0
  90. package/dist/{chunk-56LXBM45.js → chunk-ZQZNWAHH.js} +4 -5
  91. package/dist/chunk-ZQZNWAHH.js.map +1 -0
  92. package/dist/diagrams/blockdiagram/index.cjs +6 -6
  93. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  94. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  95. package/dist/diagrams/blockdiagram/index.js +2 -2
  96. package/dist/diagrams/circuit/index.cjs +8 -8
  97. package/dist/diagrams/circuit/index.d.cts +1 -1
  98. package/dist/diagrams/circuit/index.d.ts +1 -1
  99. package/dist/diagrams/circuit/index.js +2 -2
  100. package/dist/diagrams/ecomap/index.cjs +8 -8
  101. package/dist/diagrams/ecomap/index.d.cts +1 -1
  102. package/dist/diagrams/ecomap/index.d.ts +1 -1
  103. package/dist/diagrams/ecomap/index.js +3 -3
  104. package/dist/diagrams/entity/index.cjs +6 -6
  105. package/dist/diagrams/entity/index.d.cts +1 -1
  106. package/dist/diagrams/entity/index.d.ts +1 -1
  107. package/dist/diagrams/entity/index.js +2 -2
  108. package/dist/diagrams/fishbone/index.cjs +8 -8
  109. package/dist/diagrams/fishbone/index.d.cts +1 -1
  110. package/dist/diagrams/fishbone/index.d.ts +1 -1
  111. package/dist/diagrams/fishbone/index.js +2 -2
  112. package/dist/diagrams/flowchart/index.cjs +8 -8
  113. package/dist/diagrams/flowchart/index.d.cts +2 -2
  114. package/dist/diagrams/flowchart/index.d.ts +2 -2
  115. package/dist/diagrams/flowchart/index.js +2 -2
  116. package/dist/diagrams/genogram/index.cjs +10 -10
  117. package/dist/diagrams/genogram/index.d.cts +1 -1
  118. package/dist/diagrams/genogram/index.d.ts +1 -1
  119. package/dist/diagrams/genogram/index.js +3 -3
  120. package/dist/diagrams/ladder/index.cjs +6 -6
  121. package/dist/diagrams/ladder/index.d.cts +1 -1
  122. package/dist/diagrams/ladder/index.d.ts +1 -1
  123. package/dist/diagrams/ladder/index.js +2 -2
  124. package/dist/diagrams/logic/index.cjs +6 -6
  125. package/dist/diagrams/logic/index.d.cts +1 -1
  126. package/dist/diagrams/logic/index.d.ts +1 -1
  127. package/dist/diagrams/logic/index.js +2 -2
  128. package/dist/diagrams/orgchart/index.cjs +7 -7
  129. package/dist/diagrams/orgchart/index.d.cts +1 -1
  130. package/dist/diagrams/orgchart/index.d.ts +1 -1
  131. package/dist/diagrams/orgchart/index.js +2 -2
  132. package/dist/diagrams/pedigree/index.cjs +8 -8
  133. package/dist/diagrams/pedigree/index.d.cts +1 -1
  134. package/dist/diagrams/pedigree/index.d.ts +1 -1
  135. package/dist/diagrams/pedigree/index.js +3 -3
  136. package/dist/diagrams/phylo/index.cjs +7 -7
  137. package/dist/diagrams/phylo/index.d.cts +1 -1
  138. package/dist/diagrams/phylo/index.d.ts +1 -1
  139. package/dist/diagrams/phylo/index.js +2 -2
  140. package/dist/diagrams/sld/index.cjs +6 -6
  141. package/dist/diagrams/sld/index.d.cts +1 -1
  142. package/dist/diagrams/sld/index.d.ts +1 -1
  143. package/dist/diagrams/sld/index.js +2 -2
  144. package/dist/diagrams/sociogram/index.cjs +7 -7
  145. package/dist/diagrams/sociogram/index.d.cts +1 -1
  146. package/dist/diagrams/sociogram/index.d.ts +1 -1
  147. package/dist/diagrams/sociogram/index.js +3 -3
  148. package/dist/diagrams/timing/index.cjs +5 -5
  149. package/dist/diagrams/timing/index.d.cts +1 -1
  150. package/dist/diagrams/timing/index.d.ts +1 -1
  151. package/dist/diagrams/timing/index.js +2 -2
  152. package/dist/diagrams/venn/index.cjs +9 -9
  153. package/dist/diagrams/venn/index.d.cts +1 -1
  154. package/dist/diagrams/venn/index.d.ts +1 -1
  155. package/dist/diagrams/venn/index.js +2 -2
  156. package/dist/export.cjs +1 -1
  157. package/dist/export.cjs.map +1 -1
  158. package/dist/export.d.cts +1 -1
  159. package/dist/export.d.ts +1 -1
  160. package/dist/export.js +1 -1
  161. package/dist/export.js.map +1 -1
  162. package/dist/{index-dWDwG6BW.d.ts → index-D3u6vcA4.d.ts} +1 -1
  163. package/dist/{index-BrLxEzSQ.d.cts → index-bdfj6FpQ.d.cts} +1 -1
  164. package/dist/index.cjs +41 -41
  165. package/dist/index.d.cts +2 -2
  166. package/dist/index.d.ts +2 -2
  167. package/dist/index.js +19 -19
  168. package/dist/react.cjs +20 -20
  169. package/dist/react.js +19 -19
  170. package/dist/{types-BtiUg7Gx.d.cts → types-DnU2UlWz.d.cts} +2 -0
  171. package/dist/{types-BtiUg7Gx.d.ts → types-DnU2UlWz.d.ts} +2 -0
  172. package/package.json +1 -1
  173. package/dist/chunk-2J2QWNGI.js.map +0 -1
  174. package/dist/chunk-56LXBM45.js.map +0 -1
  175. package/dist/chunk-6BKUD5EJ.js.map +0 -1
  176. package/dist/chunk-7MVDN5UC.cjs.map +0 -1
  177. package/dist/chunk-BJ65PKDU.js.map +0 -1
  178. package/dist/chunk-BJWMPPEA.js.map +0 -1
  179. package/dist/chunk-BUN3CRMP.cjs.map +0 -1
  180. package/dist/chunk-C3IVD7DI.cjs.map +0 -1
  181. package/dist/chunk-EYHD7LV3.cjs.map +0 -1
  182. package/dist/chunk-GYTWJ6VB.cjs.map +0 -1
  183. package/dist/chunk-IT2TVXC7.js.map +0 -1
  184. package/dist/chunk-KUXOHLGC.cjs.map +0 -1
  185. package/dist/chunk-L2KUGWFR.cjs.map +0 -1
  186. package/dist/chunk-LFZZ4NCP.cjs.map +0 -1
  187. package/dist/chunk-M3R6RCXY.js.map +0 -1
  188. package/dist/chunk-M5ZC3LFJ.js.map +0 -1
  189. package/dist/chunk-MKKFIPKU.cjs.map +0 -1
  190. package/dist/chunk-NFT6VW73.js.map +0 -1
  191. package/dist/chunk-OK5RYX55.cjs.map +0 -1
  192. package/dist/chunk-RNGYXGHS.js.map +0 -1
  193. package/dist/chunk-SE23X5OE.js.map +0 -1
  194. package/dist/chunk-SFSZUOFT.js.map +0 -1
  195. package/dist/chunk-UK7JF5QB.cjs.map +0 -1
  196. package/dist/chunk-W7GIQTJV.cjs.map +0 -1
  197. package/dist/chunk-WHJXRLFD.js.map +0 -1
  198. package/dist/chunk-X4F6VVEJ.js.map +0 -1
  199. package/dist/chunk-XI6JOG76.cjs.map +0 -1
  200. package/dist/chunk-XUEROLSB.cjs.map +0 -1
  201. package/dist/chunk-YTEEZV6J.cjs.map +0 -1
  202. package/dist/chunk-ZNLEUL7T.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk75BMFCP5_cjs = require('./chunk-75BMFCP5.cjs');
3
+ var chunk5UCXMYE7_cjs = require('./chunk-5UCXMYE7.cjs');
4
4
  var chunkD7EHZFK4_cjs = require('./chunk-D7EHZFK4.cjs');
5
- var chunkLFZZ4NCP_cjs = require('./chunk-LFZZ4NCP.cjs');
5
+ var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
6
6
 
7
7
  // src/diagrams/sociogram/parser.ts
8
8
  var SociogramParseError = class extends Error {
@@ -105,7 +105,7 @@ function parseSociogram(text2) {
105
105
  const trimmed = raw.trim();
106
106
  lineIdx++;
107
107
  if (!trimmed || trimmed.startsWith("#")) continue;
108
- if (chunk75BMFCP5_cjs.parseLegendDirective(trimmed, legendOverrides)) {
108
+ if (chunk5UCXMYE7_cjs.parseLegendDirective(trimmed, legendOverrides)) {
109
109
  hasLegendOverrides = true;
110
110
  continue;
111
111
  }
@@ -637,7 +637,6 @@ function buildCSS(ast, t) {
637
637
  return `
638
638
  .schematex-sociogram {${chunkD7EHZFK4_cjs.cssCustomProperties(t)}
639
639
  font-family: system-ui, -apple-system, sans-serif;
640
- background: ${t.bg};
641
640
  }
642
641
  .schematex-sociogram-node { fill: ${t.accent}; stroke: ${t.accent}; stroke-width: ${chunkD7EHZFK4_cjs.STROKE_WIDTH.normal}; }
643
642
  .schematex-sociogram-node-star { fill: ${rf.star}; stroke: ${t.warn}; stroke-width: ${chunkD7EHZFK4_cjs.STROKE_WIDTH.thick}; }
@@ -664,7 +663,7 @@ function buildDefs(t) {
664
663
  { id: "sociogram-arrow-neutral", fill: vc.neutral }
665
664
  ];
666
665
  const markerEls = markers.map(
667
- (m) => chunkLFZZ4NCP_cjs.el(
666
+ (m) => chunk3WNW5Y7P_cjs.el(
668
667
  "marker",
669
668
  {
670
669
  id: m.id,
@@ -675,10 +674,10 @@ function buildDefs(t) {
675
674
  markerHeight: "8",
676
675
  orient: "auto"
677
676
  },
678
- chunkLFZZ4NCP_cjs.el("path", { d: "M 0 0 L 10 5 L 0 10 z", fill: m.fill })
677
+ chunk3WNW5Y7P_cjs.el("path", { d: "M 0 0 L 10 5 L 0 10 z", fill: m.fill })
679
678
  )
680
679
  );
681
- return chunkLFZZ4NCP_cjs.el("defs", {}, markerEls);
680
+ return chunk3WNW5Y7P_cjs.el("defs", {}, markerEls);
682
681
  }
683
682
  function edgeStrokeWidth(weight) {
684
683
  if (weight <= 1) return 1;
@@ -734,14 +733,14 @@ function renderNodes(layout, t) {
734
733
  "data-node-id": node.id
735
734
  };
736
735
  if (fill) attrs.fill = fill;
737
- nodeEls.push(chunkLFZZ4NCP_cjs.circle(attrs));
736
+ nodeEls.push(chunk3WNW5Y7P_cjs.circle(attrs));
738
737
  if (role === "star") {
739
738
  const badgeX = x + radius * 0.6;
740
739
  const badgeY = y - radius * 0.6;
741
740
  const s = 6;
742
741
  const points = starPoints(badgeX, badgeY, s, s * 0.4, 5);
743
742
  nodeEls.push(
744
- chunkLFZZ4NCP_cjs.polygon({
743
+ chunk3WNW5Y7P_cjs.polygon({
745
744
  points,
746
745
  fill: t.warn,
747
746
  class: "schematex-sociogram-star-badge"
@@ -750,7 +749,7 @@ function renderNodes(layout, t) {
750
749
  }
751
750
  const label = node.label ?? node.id;
752
751
  labelEls.push(
753
- chunkLFZZ4NCP_cjs.text(
752
+ chunk3WNW5Y7P_cjs.text(
754
753
  {
755
754
  x,
756
755
  y: y + radius + LABEL_GAP + LABEL_FONT_SIZE,
@@ -803,12 +802,12 @@ function renderEdges(layout) {
803
802
  };
804
803
  if (markers.end) attrs["marker-end"] = markers.end;
805
804
  if (markers.start) attrs["marker-start"] = markers.start;
806
- edgeEls.push(chunkLFZZ4NCP_cjs.line(attrs));
805
+ edgeEls.push(chunk3WNW5Y7P_cjs.line(attrs));
807
806
  if (edge.label) {
808
807
  const mx = (x1 + x2) / 2;
809
808
  const my = (y1 + y2) / 2;
810
809
  edgeLabelEls.push(
811
- chunkLFZZ4NCP_cjs.text(
810
+ chunk3WNW5Y7P_cjs.text(
812
811
  { x: mx, y: my - 6, class: "schematex-sociogram-edge-label" },
813
812
  edge.label
814
813
  )
@@ -830,7 +829,7 @@ function renderGroupLabels(layout, t) {
830
829
  const cx = memberNodes.reduce((s, n) => s + n.x, 0) / memberNodes.length;
831
830
  const minY = Math.min(...memberNodes.map((n) => n.y - n.radius));
832
831
  elements.push(
833
- chunkLFZZ4NCP_cjs.text(
832
+ chunk3WNW5Y7P_cjs.text(
834
833
  {
835
834
  x: cx,
836
835
  y: minY - 14,
@@ -854,44 +853,44 @@ function renderSociogram(layout, options = {}) {
854
853
  const { edgeEls, edgeLabelEls } = renderEdges(layout);
855
854
  const { nodeEls, labelEls } = renderNodes(layout, t);
856
855
  const groupLabelEls = renderGroupLabels(layout, t);
857
- const titleEl = ast.title ? chunkLFZZ4NCP_cjs.text(
856
+ const titleEl = ast.title ? chunk3WNW5Y7P_cjs.text(
858
857
  { x: totalWidth / 2, y: 20, class: "schematex-sociogram-title" },
859
858
  ast.title
860
859
  ) : "";
861
860
  const transformY = titleOffset;
862
861
  const transform = transformY ? `translate(0,${transformY})` : void 0;
863
862
  const svgContent = [
864
- chunkLFZZ4NCP_cjs.title(`Sociogram${ast.title ? `: ${ast.title}` : ""}`),
865
- chunkLFZZ4NCP_cjs.desc(
863
+ chunk3WNW5Y7P_cjs.title(`Sociogram${ast.title ? `: ${ast.title}` : ""}`),
864
+ chunk3WNW5Y7P_cjs.desc(
866
865
  `Sociogram with ${ast.nodes.length} members and ${ast.edges.length} connections`
867
866
  ),
868
- chunkLFZZ4NCP_cjs.el("style", {}, css),
867
+ chunk3WNW5Y7P_cjs.el("style", {}, css),
869
868
  defsStr
870
869
  ];
871
870
  if (titleEl) svgContent.push(titleEl);
872
871
  if (groupLabelEls.length > 0) {
873
872
  svgContent.push(
874
- chunkLFZZ4NCP_cjs.group({ class: "schematex-sociogram-groups", transform }, groupLabelEls)
873
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-sociogram-groups", transform }, groupLabelEls)
875
874
  );
876
875
  }
877
876
  svgContent.push(
878
- chunkLFZZ4NCP_cjs.group({ class: "schematex-sociogram-edges", transform }, [
877
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-sociogram-edges", transform }, [
879
878
  ...edgeEls,
880
879
  ...edgeLabelEls
881
880
  ])
882
881
  );
883
882
  svgContent.push(
884
- chunkLFZZ4NCP_cjs.group({ class: "schematex-sociogram-nodes", transform }, nodeEls)
883
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-sociogram-nodes", transform }, nodeEls)
885
884
  );
886
885
  svgContent.push(
887
- chunkLFZZ4NCP_cjs.group({ class: "schematex-sociogram-labels", transform }, labelEls)
886
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-sociogram-labels", transform }, labelEls)
888
887
  );
889
888
  let finalWidth = totalWidth;
890
889
  let finalHeight = totalHeight;
891
890
  const autoSpec = buildSociogramLegend(ast, t);
892
- const finalSpec = chunk75BMFCP5_cjs.applyLegendOverrides(autoSpec, ast.legendOverrides);
891
+ const finalSpec = chunk5UCXMYE7_cjs.applyLegendOverrides(autoSpec, ast.legendOverrides);
893
892
  if (finalSpec.mode === "on" && finalSpec.items.length > 0) {
894
- const { svg: legendSvg, bbox: lb } = chunk75BMFCP5_cjs.renderLegend(
893
+ const { svg: legendSvg, bbox: lb } = chunk5UCXMYE7_cjs.renderLegend(
895
894
  finalSpec,
896
895
  {
897
896
  canvasWidth: totalWidth,
@@ -910,7 +909,7 @@ function renderSociogram(layout, options = {}) {
910
909
  if (overflowY > finalHeight) finalHeight = overflowY;
911
910
  }
912
911
  }
913
- return chunkLFZZ4NCP_cjs.svgRoot(
912
+ return chunk3WNW5Y7P_cjs.svgRoot(
914
913
  {
915
914
  class: "schematex-diagram schematex-sociogram",
916
915
  viewBox: `0 0 ${finalWidth} ${finalHeight}`,
@@ -940,5 +939,5 @@ exports.layoutSociogram = layoutSociogram;
940
939
  exports.parseSociogram = parseSociogram;
941
940
  exports.renderSociogram = renderSociogram;
942
941
  exports.sociogram = sociogram;
943
- //# sourceMappingURL=chunk-C3IVD7DI.cjs.map
944
- //# sourceMappingURL=chunk-C3IVD7DI.cjs.map
942
+ //# sourceMappingURL=chunk-WIFGBWET.cjs.map
943
+ //# sourceMappingURL=chunk-WIFGBWET.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/diagrams/sociogram/parser.ts","../src/diagrams/sociogram/layout.ts","../src/diagrams/sociogram/legend.ts","../src/diagrams/sociogram/renderer.ts","../src/diagrams/sociogram/index.ts"],"names":["line","text","parseLegendDirective","clean","props","cssCustomProperties","STROKE_WIDTH","FONT_SIZE","el","circle","polygon","resolveBaseTheme","title","desc","group","applyLegendOverrides","renderLegend","svgRoot"],"mappings":"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","file":"chunk-WIFGBWET.cjs","sourcesContent":["import { parseLegendDirective } from \"../../core/legend-parser\";\n\nexport class SociogramParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"SociogramParseError\";\n }\n}\n\n// ─── AST Types ──────────────────────────────────────────────\n\nexport type SociogramLayout = \"circular\" | \"force-directed\" | \"concentric\";\nexport type EdgeValence = \"positive\" | \"negative\" | \"neutral\";\nexport type EdgeDirection = \"one-way\" | \"mutual\" | \"undirected\";\nexport type NodeRole = \"star\" | \"isolate\" | \"bridge\" | \"neglectee\" | \"rejected\";\nexport type SizingMode = \"uniform\" | \"in-degree\" | \"betweenness\";\nexport type ColoringMode = \"default\" | \"group\" | \"role\";\n\nexport interface SociogramNode {\n id: string;\n label?: string;\n group?: string;\n role?: NodeRole;\n size?: \"small\" | \"medium\" | \"large\";\n properties?: Record<string, string>;\n}\n\nexport interface SociogramEdge {\n from: string;\n to: string;\n direction: EdgeDirection;\n valence: EdgeValence;\n weight: number;\n label?: string;\n}\n\nexport interface SociogramGroup {\n id: string;\n label?: string;\n color?: string;\n members: string[];\n}\n\nexport interface SociogramConfig {\n layout: SociogramLayout;\n sizing: SizingMode;\n coloring: ColoringMode;\n highlight: string[];\n}\n\nexport interface SociogramAST {\n type: \"sociogram\";\n title?: string;\n config: SociogramConfig;\n nodes: SociogramNode[];\n edges: SociogramEdge[];\n groups: SociogramGroup[];\n legendOverrides?: import(\"../../core/types\").LegendOverrides;\n}\n\n// ─── Edge Operator Parsing ──────────────────────────────────\n\ninterface EdgeOp {\n direction: EdgeDirection;\n valence: EdgeValence;\n weight: number;\n}\n\nconst EDGE_OPS: [string, EdgeOp][] = [\n [\"<===>\", { direction: \"mutual\", valence: \"positive\", weight: 4 }],\n [\"===>\" , { direction: \"one-way\", valence: \"positive\", weight: 4 }],\n [\"<===\", { direction: \"one-way\", valence: \"positive\", weight: 4 }],\n [\"<==>\", { direction: \"mutual\", valence: \"positive\", weight: 3 }],\n [\"==>\" , { direction: \"one-way\", valence: \"positive\", weight: 3 }],\n [\"<==\", { direction: \"one-way\", valence: \"positive\", weight: 3 }],\n [\"===\", { direction: \"undirected\", valence: \"positive\", weight: 3 }],\n [\"<x->\", { direction: \"mutual\", valence: \"negative\", weight: 2 }],\n [\"-x>\", { direction: \"one-way\", valence: \"negative\", weight: 2 }],\n [\"<x-\", { direction: \"one-way\", valence: \"negative\", weight: 2 }],\n [\"-x-\", { direction: \"undirected\", valence: \"negative\", weight: 2 }],\n [\"<.->\", { direction: \"mutual\", valence: \"neutral\", weight: 2 }],\n [\".->\", { direction: \"one-way\", valence: \"neutral\", weight: 2 }], // part of -.>\n [\"-.-\", { direction: \"undirected\", valence: \"neutral\", weight: 2 }],\n [\"<->\", { direction: \"mutual\", valence: \"positive\", weight: 2 }],\n [\"->\", { direction: \"one-way\", valence: \"positive\", weight: 2 }],\n [\"<-\", { direction: \"one-way\", valence: \"positive\", weight: 2 }],\n [\"--\", { direction: \"undirected\", valence: \"positive\", weight: 2 }],\n];\n\nfunction findEdgeOp(line: string): { leftId: string; rightId: string; op: EdgeOp; rest: string } | null {\n for (const [opStr, op] of EDGE_OPS) {\n const idx = line.indexOf(` ${opStr} `);\n if (idx === -1) continue;\n\n const leftId = line.slice(0, idx).trim();\n const afterOp = line.slice(idx + opStr.length + 2).trim();\n\n if (!leftId || !/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(leftId)) continue;\n\n // Right side: ID [props]\n const rightMatch = afterOp.match(/^([a-zA-Z][a-zA-Z0-9_-]*)(.*)/);\n if (!rightMatch) continue;\n\n const rightId = rightMatch[1];\n const rest = rightMatch[2].trim();\n\n // Handle reverse direction\n if (opStr === \"<-\" || opStr === \"<==\" || opStr === \"<===\" || opStr === \"<x-\") {\n return { leftId: rightId, rightId: leftId, op: { ...op, direction: \"one-way\" }, rest };\n }\n\n return { leftId, rightId, op, rest };\n }\n\n // Try -.> which has the dot embedded\n const dashDotMatch = line.match(/^([a-zA-Z][a-zA-Z0-9_-]*)\\s+-\\.>\\s+([a-zA-Z][a-zA-Z0-9_-]*)(.*)/);\n if (dashDotMatch) {\n return {\n leftId: dashDotMatch[1],\n rightId: dashDotMatch[2],\n op: { direction: \"one-way\", valence: \"neutral\", weight: 2 },\n rest: dashDotMatch[3].trim(),\n };\n }\n\n return null;\n}\n\n// ─── Property Parsing ───────────────────────────────────────\n\nfunction parseProperties(propsStr: string): Record<string, string> {\n const result: Record<string, string> = {};\n // Match key: \"value\" or key: value pairs\n const regex = /(\\w[\\w-]*):\\s*(?:\"([^\"]*)\"|([^\\s,\\]]+))/g;\n let match;\n while ((match = regex.exec(propsStr)) !== null) {\n result[match[1]] = match[2] ?? match[3];\n }\n return result;\n}\n\nfunction extractProps(line: string): { clean: string; props: Record<string, string> } {\n const bracketMatch = line.match(/\\[([^\\]]*)\\]/);\n if (!bracketMatch) return { clean: line, props: {} };\n const clean = line.slice(0, bracketMatch.index).trim();\n const props = parseProperties(bracketMatch[1]);\n return { clean, props };\n}\n\n// ─── Main Parser ────────────────────────────────────────────\n\nexport function parseSociogram(text: string): SociogramAST {\n const lines = text.split(\"\\n\");\n let lineIdx = 0;\n\n // Skip empty lines\n while (lineIdx < lines.length && !lines[lineIdx].trim()) lineIdx++;\n\n // Parse header\n const headerLine = lines[lineIdx]?.trim() ?? \"\";\n if (!headerLine.toLowerCase().startsWith(\"sociogram\")) {\n throw new SociogramParseError(\"Sociogram must start with 'sociogram'\");\n }\n lineIdx++;\n\n let titleStr: string | undefined;\n const titleMatch = headerLine.match(/\"([^\"]+)\"/);\n if (titleMatch) titleStr = titleMatch[1];\n\n const config: SociogramConfig = {\n layout: \"circular\",\n sizing: \"uniform\",\n coloring: \"default\",\n highlight: [\"stars\", \"isolates\"],\n };\n\n const nodes: SociogramNode[] = [];\n const edges: SociogramEdge[] = [];\n const groups: SociogramGroup[] = [];\n const nodeIds = new Set<string>();\n const legendOverrides: import(\"../../core/types\").LegendOverrides = {};\n let hasLegendOverrides = false;\n\n let currentGroup: SociogramGroup | null = null;\n\n while (lineIdx < lines.length) {\n const raw = lines[lineIdx];\n const trimmed = raw.trim();\n lineIdx++;\n\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n\n // Legend directives (legend.title, legend.position, legend.label, etc.)\n if (parseLegendDirective(trimmed, legendOverrides)) {\n hasLegendOverrides = true;\n continue;\n }\n\n // Config line\n if (trimmed.startsWith(\"config:\")) {\n const configBody = trimmed.slice(7).trim();\n const eqIdx = configBody.indexOf(\"=\");\n if (eqIdx !== -1) {\n const key = configBody.slice(0, eqIdx).trim();\n const val = configBody.slice(eqIdx + 1).trim();\n switch (key) {\n case \"layout\":\n if ([\"circular\", \"force-directed\", \"concentric\"].includes(val)) {\n config.layout = val as SociogramLayout;\n }\n break;\n case \"sizing\":\n if ([\"uniform\", \"in-degree\", \"betweenness\"].includes(val)) {\n config.sizing = val as SizingMode;\n }\n break;\n case \"coloring\":\n if ([\"default\", \"group\", \"role\"].includes(val)) {\n config.coloring = val as ColoringMode;\n }\n break;\n case \"highlight\":\n config.highlight = val.split(\",\").map((s) => s.trim());\n break;\n }\n }\n continue;\n }\n\n // Group definition\n if (trimmed.startsWith(\"group \")) {\n const { clean, props } = extractProps(trimmed.slice(6).trim());\n const groupId = clean.split(/\\s/)[0];\n currentGroup = {\n id: groupId,\n label: props.label ?? groupId,\n color: props.color,\n members: [],\n };\n groups.push(currentGroup);\n continue;\n }\n\n // Check indentation for group members\n const indent = raw.search(/\\S/);\n if (currentGroup && indent >= 4) {\n const { clean, props } = extractProps(trimmed);\n const memberId = clean.split(/\\s/)[0];\n if (memberId && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(memberId)) {\n currentGroup.members.push(memberId);\n if (!nodeIds.has(memberId)) {\n nodeIds.add(memberId);\n nodes.push({\n id: memberId,\n label: props.label,\n group: currentGroup.id,\n role: props.role as NodeRole | undefined,\n size: props.size as \"small\" | \"medium\" | \"large\" | undefined,\n });\n }\n continue;\n }\n }\n\n if (indent < 4) {\n currentGroup = null;\n }\n\n // Try edge parsing\n const edgeResult = findEdgeOp(trimmed);\n if (edgeResult) {\n const { leftId, rightId, op, rest } = edgeResult;\n const edgeProps = extractProps(rest).props;\n\n // Auto-register nodes\n for (const id of [leftId, rightId]) {\n if (!nodeIds.has(id)) {\n nodeIds.add(id);\n nodes.push({ id });\n }\n }\n\n const weight = edgeProps.weight ? Number(edgeProps.weight) : op.weight;\n\n edges.push({\n from: leftId,\n to: rightId,\n direction: op.direction,\n valence: op.valence,\n weight,\n label: edgeProps.label,\n });\n continue;\n }\n\n // Node definition: ID [props]\n const { clean, props } = extractProps(trimmed);\n const nodeId = clean.split(/\\s/)[0];\n if (nodeId && /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(nodeId) && !nodeIds.has(nodeId)) {\n nodeIds.add(nodeId);\n const node: SociogramNode = {\n id: nodeId,\n label: props.label,\n group: props.group,\n role: props.role as NodeRole | undefined,\n size: props.size as \"small\" | \"medium\" | \"large\" | undefined,\n };\n nodes.push(node);\n\n // Auto-add to group by group property\n if (props.group) {\n let grp = groups.find((g) => g.id === props.group);\n if (!grp) {\n grp = { id: props.group, members: [] };\n groups.push(grp);\n }\n grp.members.push(nodeId);\n }\n }\n }\n\n return {\n type: \"sociogram\",\n title: titleStr,\n config,\n nodes,\n edges,\n groups,\n legendOverrides: hasLegendOverrides ? legendOverrides : undefined,\n };\n}\n","import type {\n SociogramAST,\n SociogramNode,\n SociogramEdge,\n NodeRole,\n} from \"./parser\";\n\nexport interface SociogramLayoutNode {\n node: SociogramNode;\n x: number;\n y: number;\n radius: number;\n computedRole?: NodeRole;\n}\n\nexport interface SociogramLayoutEdge {\n edge: SociogramEdge;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface SociogramLayoutResult {\n width: number;\n height: number;\n nodes: SociogramLayoutNode[];\n edges: SociogramLayoutEdge[];\n ast: SociogramAST;\n}\n\n// ─── Metrics ────────────────────────────────────────────────\n\nfunction computeInDegree(nodeId: string, edges: SociogramEdge[]): number {\n let count = 0;\n for (const e of edges) {\n if (e.to === nodeId) count++;\n if (e.direction === \"mutual\" && e.from === nodeId) count++;\n if (e.direction === \"undirected\" && e.from === nodeId) count++;\n }\n return count;\n}\n\nfunction computeOutDegree(nodeId: string, edges: SociogramEdge[]): number {\n let count = 0;\n for (const e of edges) {\n if (e.from === nodeId) count++;\n if (e.direction === \"mutual\" && e.to === nodeId) count++;\n if (e.direction === \"undirected\" && e.to === nodeId) count++;\n }\n return count;\n}\n\nfunction autoDetectRole(\n node: SociogramNode,\n inDeg: number,\n outDeg: number,\n meanIn: number,\n sdIn: number,\n rejectionCount: number\n): NodeRole | undefined {\n if (node.role) return node.role;\n if (inDeg === 0 && outDeg === 0) return \"isolate\";\n if (inDeg === 0 && outDeg > 0) return \"neglectee\";\n if (rejectionCount >= 2) return \"rejected\";\n if (sdIn > 0 && inDeg >= meanIn + 1.5 * sdIn) return \"star\";\n return undefined;\n}\n\n// ─── Node Radius ────────────────────────────────────────────\n\nconst BASE_RADIUS = 20;\n\nfunction computeNodeRadius(\n node: SociogramNode,\n inDeg: number,\n sizing: string\n): number {\n if (node.size === \"small\") return 14;\n if (node.size === \"large\") return 30;\n if (sizing === \"in-degree\") {\n return Math.min(40, Math.max(14, 14 + inDeg * 4));\n }\n return BASE_RADIUS;\n}\n\n// ─── Circular Layout ────────────────────────────────────────\n\nfunction layoutCircular(ast: SociogramAST): SociogramLayoutResult {\n const n = ast.nodes.length;\n const radius = Math.max(120, n * 22);\n const canvasSize = radius * 2 + 160;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n // Compute metrics\n const inDegrees = new Map<string, number>();\n const outDegrees = new Map<string, number>();\n const rejections = new Map<string, number>();\n\n for (const node of ast.nodes) {\n inDegrees.set(node.id, computeInDegree(node.id, ast.edges));\n outDegrees.set(node.id, computeOutDegree(node.id, ast.edges));\n rejections.set(node.id, 0);\n }\n\n for (const e of ast.edges) {\n if (e.valence === \"negative\") {\n rejections.set(e.to, (rejections.get(e.to) ?? 0) + 1);\n }\n }\n\n const inVals = Array.from(inDegrees.values());\n const meanIn = inVals.reduce((a, b) => a + b, 0) / (inVals.length || 1);\n const sdIn = Math.sqrt(\n inVals.reduce((sum, v) => sum + (v - meanIn) ** 2, 0) / (inVals.length || 1)\n );\n\n // Sort nodes: group members adjacent, then by id\n const sortedNodes = [...ast.nodes];\n if (ast.groups.length > 0) {\n const groupOrder = new Map<string, number>();\n ast.groups.forEach((g, i) => {\n for (const m of g.members) groupOrder.set(m, i);\n });\n sortedNodes.sort((a, b) => {\n const ga = groupOrder.get(a.id) ?? 999;\n const gb = groupOrder.get(b.id) ?? 999;\n if (ga !== gb) return ga - gb;\n return a.id.localeCompare(b.id);\n });\n }\n\n const angleStep = (2 * Math.PI) / n;\n const startAngle = -Math.PI / 2;\n\n const layoutNodes: SociogramLayoutNode[] = sortedNodes.map((node, i) => {\n const angle = startAngle + i * angleStep;\n const inDeg = inDegrees.get(node.id) ?? 0;\n const outDeg = outDegrees.get(node.id) ?? 0;\n const rej = rejections.get(node.id) ?? 0;\n const nodeRadius = computeNodeRadius(node, inDeg, ast.config.sizing);\n const computedRole = autoDetectRole(node, inDeg, outDeg, meanIn, sdIn, rej);\n\n return {\n node,\n x: cx + radius * Math.cos(angle),\n y: cy + radius * Math.sin(angle),\n radius: nodeRadius,\n computedRole,\n };\n });\n\n const layoutEdges = computeEdgePositions(layoutNodes, ast.edges);\n\n return {\n width: canvasSize,\n height: canvasSize,\n nodes: layoutNodes,\n edges: layoutEdges,\n ast,\n };\n}\n\n// ─── Force-Directed Layout ─────────────────────────────────\n\nfunction layoutForceDirected(ast: SociogramAST): SociogramLayoutResult {\n const n = ast.nodes.length;\n const canvasSize = n <= 8 ? 400 : n <= 20 ? 600 : n <= 40 ? 800 : 1000;\n const padding = 60;\n\n // Compute metrics\n const inDegrees = new Map<string, number>();\n const outDegrees = new Map<string, number>();\n const rejections = new Map<string, number>();\n\n for (const node of ast.nodes) {\n inDegrees.set(node.id, computeInDegree(node.id, ast.edges));\n outDegrees.set(node.id, computeOutDegree(node.id, ast.edges));\n rejections.set(node.id, 0);\n }\n\n for (const e of ast.edges) {\n if (e.valence === \"negative\") {\n rejections.set(e.to, (rejections.get(e.to) ?? 0) + 1);\n }\n }\n\n const inVals = Array.from(inDegrees.values());\n const meanIn = inVals.reduce((a, b) => a + b, 0) / (inVals.length || 1);\n const sdIn = Math.sqrt(\n inVals.reduce((sum, v) => sum + (v - meanIn) ** 2, 0) / (inVals.length || 1)\n );\n\n // Initialize positions in a circle\n const initRadius = canvasSize * 0.3;\n const cx = canvasSize / 2;\n const cy = canvasSize / 2;\n\n const positions: { x: number; y: number }[] = ast.nodes.map((_, i) => {\n const angle = (2 * Math.PI * i) / n - Math.PI / 2;\n return {\n x: cx + initRadius * Math.cos(angle),\n y: cy + initRadius * Math.sin(angle),\n };\n });\n\n // Build adjacency for edges\n const nodeIdx = new Map<string, number>();\n ast.nodes.forEach((node, i) => nodeIdx.set(node.id, i));\n\n // Fruchterman-Reingold\n const area = (canvasSize - 2 * padding) ** 2;\n const k = Math.sqrt(area / Math.max(n, 1));\n const maxIterations = 200;\n let temperature = canvasSize / 8;\n const coolingRate = 0.95;\n const minDist = 60;\n\n for (let iter = 0; iter < maxIterations; iter++) {\n const disp: { dx: number; dy: number }[] = positions.map(() => ({ dx: 0, dy: 0 }));\n\n // Repulsive forces between all pairs\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1);\n const force = (k * k) / dist;\n const fx = (dx / dist) * force;\n const fy = (dy / dist) * force;\n disp[i].dx += fx;\n disp[i].dy += fy;\n disp[j].dx -= fx;\n disp[j].dy -= fy;\n }\n }\n\n // Attractive forces along edges\n for (const edge of ast.edges) {\n const i = nodeIdx.get(edge.from);\n const j = nodeIdx.get(edge.to);\n if (i === undefined || j === undefined) continue;\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.max(Math.sqrt(dx * dx + dy * dy), 1);\n const force = (dist * dist) / k;\n const fx = (dx / dist) * force;\n const fy = (dy / dist) * force;\n disp[i].dx -= fx;\n disp[i].dy -= fy;\n disp[j].dx += fx;\n disp[j].dy += fy;\n }\n\n // Apply displacements, clamp to temperature\n for (let i = 0; i < n; i++) {\n const mag = Math.sqrt(disp[i].dx ** 2 + disp[i].dy ** 2);\n if (mag > 0) {\n const scale = Math.min(mag, temperature) / mag;\n positions[i].x += disp[i].dx * scale;\n positions[i].y += disp[i].dy * scale;\n }\n // Keep within bounds\n positions[i].x = Math.max(padding, Math.min(canvasSize - padding, positions[i].x));\n positions[i].y = Math.max(padding, Math.min(canvasSize - padding, positions[i].y));\n }\n\n // Enforce minimum distance\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const dx = positions[i].x - positions[j].x;\n const dy = positions[i].y - positions[j].y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist < minDist && dist > 0) {\n const push = (minDist - dist) / 2;\n const nx = dx / dist;\n const ny = dy / dist;\n positions[i].x += nx * push;\n positions[i].y += ny * push;\n positions[j].x -= nx * push;\n positions[j].y -= ny * push;\n }\n }\n }\n\n temperature *= coolingRate;\n }\n\n const layoutNodes: SociogramLayoutNode[] = ast.nodes.map((node, i) => {\n const inDeg = inDegrees.get(node.id) ?? 0;\n const outDeg = outDegrees.get(node.id) ?? 0;\n const rej = rejections.get(node.id) ?? 0;\n const nodeRadius = computeNodeRadius(node, inDeg, ast.config.sizing);\n const computedRole = autoDetectRole(node, inDeg, outDeg, meanIn, sdIn, rej);\n return {\n node,\n x: positions[i].x,\n y: positions[i].y,\n radius: nodeRadius,\n computedRole,\n };\n });\n\n const layoutEdges = computeEdgePositions(layoutNodes, ast.edges);\n\n return {\n width: canvasSize,\n height: canvasSize,\n nodes: layoutNodes,\n edges: layoutEdges,\n ast,\n };\n}\n\n// ─── Edge Position Calculation ──────────────────────────────\n\nfunction computeEdgePositions(\n nodes: SociogramLayoutNode[],\n edges: SociogramEdge[]\n): SociogramLayoutEdge[] {\n const nodeMap = new Map<string, SociogramLayoutNode>();\n for (const n of nodes) nodeMap.set(n.node.id, n);\n\n return edges.map((edge) => {\n const fromNode = nodeMap.get(edge.from);\n const toNode = nodeMap.get(edge.to);\n if (!fromNode || !toNode) {\n return { edge, x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n\n // Compute edge-to-edge (subtract radius from endpoints)\n const dx = toNode.x - fromNode.x;\n const dy = toNode.y - fromNode.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n if (dist === 0) return { edge, x1: fromNode.x, y1: fromNode.y, x2: toNode.x, y2: toNode.y };\n\n const nx = dx / dist;\n const ny = dy / dist;\n const markerGap = 10;\n\n return {\n edge,\n x1: fromNode.x + nx * (fromNode.radius + 2),\n y1: fromNode.y + ny * (fromNode.radius + 2),\n x2: toNode.x - nx * (toNode.radius + markerGap),\n y2: toNode.y - ny * (toNode.radius + markerGap),\n };\n });\n}\n\n// ─── Main Layout ────────────────────────────────────────────\n\nexport function layoutSociogram(ast: SociogramAST): SociogramLayoutResult {\n switch (ast.config.layout) {\n case \"force-directed\":\n return layoutForceDirected(ast);\n case \"circular\":\n default:\n return layoutCircular(ast);\n }\n}\n","/**\n * Auto-derive a LegendSpec from a sociogram AST.\n *\n * Sections (each emitted only when the corresponding encoding is present):\n * 1. Groups — color swatch per declared group (emits when coloring=\"group\"\n * or any group has an explicit color)\n * 2. Roles — sociometric role markers (star, isolate, neglectee, rejected)\n * — only roles actually used in the chart\n * 3. Ties — edge valence (positive solid, negative dashed red, neutral\n * dotted grey) — only valences actually used\n */\n\nimport type { SociogramAST, EdgeValence, NodeRole } from \"./parser\";\nimport type {\n LegendItem,\n LegendSection,\n LegendSpec,\n} from \"../../core/types\";\nimport type { BaseTheme } from \"../../core/theme\";\n\nconst SECTIONS: LegendSection[] = [\n { id: \"groups\", title: \"Groups\" },\n { id: \"roles\", title: \"Roles\" },\n { id: \"ties\", title: \"Ties\" },\n];\n\nexport function buildSociogramLegend(\n ast: SociogramAST,\n theme: BaseTheme\n): LegendSpec {\n const items: LegendItem[] = [];\n\n // Groups: when coloring=group or groups have explicit colors, list each.\n const colorByGroup = ast.config.coloring === \"group\" || ast.groups.some(g => g.color);\n if (colorByGroup) {\n ast.groups.forEach((g, i) => {\n const color = g.color ?? theme.palette[i % theme.palette.length];\n items.push({\n key: `group.${g.id}`,\n label: g.label ?? humanize(g.id),\n kind: \"fill\",\n color,\n section: \"groups\",\n });\n });\n }\n\n // Roles: emit each role actually used (star/isolate/neglectee/rejected).\n // \"bridge\" is excluded — it's a structural notion (no special visual).\n const usedRoles = new Set<NodeRole>();\n for (const n of ast.nodes) {\n if (n.role) usedRoles.add(n.role);\n }\n const roleOrder: NodeRole[] = [\"star\", \"isolate\", \"neglectee\", \"rejected\"];\n for (const r of roleOrder) {\n if (!usedRoles.has(r)) continue;\n items.push(roleItem(r, theme));\n }\n\n // Ties: emit each valence used.\n const usedValences = new Set<EdgeValence>();\n for (const e of ast.edges) usedValences.add(e.valence);\n const valOrder: EdgeValence[] = [\"positive\", \"negative\", \"neutral\"];\n for (const v of valOrder) {\n if (!usedValences.has(v)) continue;\n items.push(valenceItem(v, theme));\n }\n\n return {\n mode: \"auto\",\n title: \"Legend\",\n position: \"bottom-inline\",\n columns: 1,\n sections: SECTIONS,\n items,\n };\n}\n\nfunction roleItem(r: NodeRole, theme: BaseTheme): LegendItem {\n switch (r) {\n case \"star\":\n return {\n key: `role.${r}`,\n label: \"Star (sociometric center)\",\n kind: \"shape\",\n shape: \"circle\",\n fill: theme.warn,\n color: theme.warn,\n section: \"roles\",\n };\n case \"isolate\":\n return {\n key: `role.${r}`,\n label: \"Isolate\",\n kind: \"shape\",\n shape: \"circle\",\n fill: theme.fillMuted,\n color: theme.neutral,\n section: \"roles\",\n };\n case \"neglectee\":\n return {\n key: `role.${r}`,\n label: \"Neglectee\",\n kind: \"shape\",\n shape: \"circle\",\n fill: theme.fillMuted,\n color: theme.accent,\n section: \"roles\",\n };\n case \"rejected\":\n return {\n key: `role.${r}`,\n label: \"Rejected\",\n kind: \"shape\",\n shape: \"circle\",\n fill: theme.negative,\n color: theme.negative,\n section: \"roles\",\n };\n default:\n return {\n key: `role.${r}`,\n label: humanize(r),\n kind: \"shape\",\n shape: \"circle\",\n section: \"roles\",\n };\n }\n}\n\nfunction valenceItem(v: EdgeValence, theme: BaseTheme): LegendItem {\n switch (v) {\n case \"positive\":\n return {\n key: `valence.${v}`,\n label: \"Positive tie\",\n kind: \"line\",\n color: theme.positive,\n pattern: \"solid\",\n strokeWidth: 2,\n section: \"ties\",\n };\n case \"negative\":\n return {\n key: `valence.${v}`,\n label: \"Negative tie\",\n kind: \"line\",\n color: theme.negative,\n pattern: \"dashed\",\n strokeWidth: 2,\n section: \"ties\",\n };\n case \"neutral\":\n return {\n key: `valence.${v}`,\n label: \"Neutral tie\",\n kind: \"line\",\n color: theme.neutral,\n pattern: \"dotted\",\n strokeWidth: 2,\n section: \"ties\",\n };\n }\n}\n\nfunction humanize(s: string): string {\n return s.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n","import type { SociogramAST, NodeRole } from \"./parser\";\nimport type { SociogramLayoutResult, SociogramLayoutNode } from \"./layout\";\nimport {\n svgRoot,\n el,\n group,\n circle,\n line,\n text,\n title,\n desc,\n polygon,\n} from \"../../core/svg\";\nimport { cssCustomProperties, resolveBaseTheme, FONT_SIZE, STROKE_WIDTH, type BaseTheme } from \"../../core/theme\";\nimport { applyLegendOverrides, renderLegend } from \"../../core/legend\";\nimport { buildSociogramLegend } from \"./legend\";\n\n// ─── Constants ──────────────────────────────────────────────\n\nconst LABEL_GAP = 4;\nconst LABEL_FONT_SIZE = 11;\n\nfunction valenceColors(t: BaseTheme) {\n return { positive: t.positive, negative: t.negative, neutral: t.neutral };\n}\n\nfunction roleFills(t: BaseTheme) {\n return { star: t.warn, isolate: t.fillMuted, rejected: t.negative };\n}\n\n// ─── CSS ────────────────────────────────────────────────────\n\nfunction buildCSS(ast: SociogramAST, t: BaseTheme): string {\n const vc = valenceColors(t);\n const rf = roleFills(t);\n const groupColors = ast.groups.map((g, i) => {\n const color = g.color ?? t.palette[i % t.palette.length];\n return `.schematex-sociogram-group-${g.id} { fill: ${color}; stroke: ${color}; }`;\n });\n\n return `\n.schematex-sociogram {${cssCustomProperties(t)}\n font-family: system-ui, -apple-system, sans-serif;\n}\n.schematex-sociogram-node { fill: ${t.accent}; stroke: ${t.accent}; stroke-width: ${STROKE_WIDTH.normal}; }\n.schematex-sociogram-node-star { fill: ${rf.star}; stroke: ${t.warn}; stroke-width: ${STROKE_WIDTH.thick}; }\n.schematex-sociogram-node-isolate { fill: ${rf.isolate}; stroke: ${t.neutral}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-node-neglectee { fill: ${t.fillMuted}; stroke: ${t.accent}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-node-rejected { fill: ${rf.rejected}; stroke: ${t.negative}; stroke-width: ${STROKE_WIDTH.normal}; stroke-dasharray: 4 3; }\n.schematex-sociogram-edge { stroke-linecap: round; }\n.schematex-sociogram-edge-positive { stroke: ${vc.positive}; }\n.schematex-sociogram-edge-negative { stroke: ${vc.negative}; stroke-dasharray: 6 3; }\n.schematex-sociogram-edge-neutral { stroke: ${vc.neutral}; stroke-dasharray: 2 3; }\n.schematex-sociogram-label { font-size: ${LABEL_FONT_SIZE}px; fill: ${t.text}; text-anchor: middle; }\n.schematex-sociogram-edge-label { font-size: ${FONT_SIZE.small}px; fill: ${t.textMuted}; text-anchor: middle; }\n.schematex-sociogram-title { font-size: ${FONT_SIZE.title}px; font-weight: bold; fill: ${t.text}; text-anchor: middle; }\n.schematex-sociogram-star-badge { font-size: 10px; fill: ${t.warn}; }\n.schematex-sociogram-group-label { font-size: 13px; font-weight: bold; fill-opacity: 0.7; text-anchor: middle; }\n${groupColors.join(\"\\n\")}\n`.trim();\n}\n\n// ─── Defs (Arrow Markers) ───────────────────────────────────\n\nfunction buildDefs(t: BaseTheme): string {\n const vc = valenceColors(t);\n const markers = [\n { id: \"sociogram-arrow\", fill: vc.positive },\n { id: \"sociogram-arrow-negative\", fill: vc.negative },\n { id: \"sociogram-arrow-neutral\", fill: vc.neutral },\n ];\n\n const markerEls = markers.map((m) =>\n el(\n \"marker\",\n {\n id: m.id,\n viewBox: \"0 0 10 10\",\n refX: \"9\",\n refY: \"5\",\n markerWidth: \"8\",\n markerHeight: \"8\",\n orient: \"auto\",\n },\n el(\"path\", { d: \"M 0 0 L 10 5 L 0 10 z\", fill: m.fill })\n )\n );\n\n return el(\"defs\", {}, markerEls);\n}\n\n// ─── Edge Weight → Stroke Width ─────────────────────────────\n\nfunction edgeStrokeWidth(weight: number): number {\n if (weight <= 1) return 1;\n if (weight === 2) return 2;\n if (weight === 3) return 3.5;\n return 5;\n}\n\n// ─── Node Rendering ─────────────────────────────────────────\n\nfunction getNodeClass(role?: NodeRole): string {\n if (!role) return \"schematex-sociogram-node\";\n switch (role) {\n case \"star\": return \"schematex-sociogram-node schematex-sociogram-node-star\";\n case \"isolate\": return \"schematex-sociogram-node schematex-sociogram-node-isolate\";\n case \"neglectee\": return \"schematex-sociogram-node schematex-sociogram-node-neglectee\";\n case \"rejected\": return \"schematex-sociogram-node schematex-sociogram-node-rejected\";\n case \"bridge\": return \"schematex-sociogram-node\";\n default: return \"schematex-sociogram-node\";\n }\n}\n\nfunction getNodeFill(\n node: SociogramLayoutNode,\n ast: SociogramAST,\n t: BaseTheme\n): string | undefined {\n const role = node.computedRole ?? node.node.role;\n const rf = roleFills(t);\n\n if (ast.config.coloring === \"role\" && role) {\n return rf[role as keyof typeof rf];\n }\n\n if (ast.config.coloring === \"group\" && node.node.group) {\n const gIdx = ast.groups.findIndex((g) => g.id === node.node.group);\n if (gIdx >= 0) {\n return ast.groups[gIdx].color ?? t.palette[gIdx % t.palette.length];\n }\n }\n\n return undefined;\n}\n\nfunction renderNodes(\n layout: SociogramLayoutResult,\n t: BaseTheme\n): { nodeEls: string[]; labelEls: string[] } {\n const nodeEls: string[] = [];\n const labelEls: string[] = [];\n const { ast } = layout;\n\n for (const layoutNode of layout.nodes) {\n const { node, x, y, radius, computedRole } = layoutNode;\n const role = computedRole ?? node.role;\n const cls = getNodeClass(role);\n const fill = getNodeFill(layoutNode, ast, t);\n\n const attrs: Record<string, string | number | undefined> = {\n cx: x,\n cy: y,\n r: radius,\n class: cls,\n \"data-node-id\": node.id,\n };\n if (fill) attrs.fill = fill;\n\n nodeEls.push(circle(attrs));\n\n // Star badge\n if (role === \"star\") {\n const badgeX = x + radius * 0.6;\n const badgeY = y - radius * 0.6;\n const s = 6;\n const points = starPoints(badgeX, badgeY, s, s * 0.4, 5);\n nodeEls.push(\n polygon({\n points,\n fill: t.warn,\n class: \"schematex-sociogram-star-badge\",\n })\n );\n }\n\n // Label\n const label = node.label ?? node.id;\n labelEls.push(\n text(\n {\n x,\n y: y + radius + LABEL_GAP + LABEL_FONT_SIZE,\n class: \"schematex-sociogram-label\",\n \"data-node-id\": node.id,\n },\n label\n )\n );\n }\n\n return { nodeEls, labelEls };\n}\n\nfunction starPoints(\n cx: number,\n cy: number,\n outerR: number,\n innerR: number,\n points: number\n): string {\n const coords: string[] = [];\n for (let i = 0; i < points * 2; i++) {\n const angle = (Math.PI * i) / points - Math.PI / 2;\n const r = i % 2 === 0 ? outerR : innerR;\n coords.push(`${cx + r * Math.cos(angle)},${cy + r * Math.sin(angle)}`);\n }\n return coords.join(\" \");\n}\n\n// ─── Edge Rendering ─────────────────────────────────────────\n\nfunction getMarkerUrl(valence: string, direction: string): {\n start?: string;\n end?: string;\n} {\n if (direction === \"undirected\") return {};\n\n const markerId =\n valence === \"negative\"\n ? \"sociogram-arrow-negative\"\n : valence === \"neutral\"\n ? \"sociogram-arrow-neutral\"\n : \"sociogram-arrow\";\n\n if (direction === \"mutual\") {\n return {\n start: `url(#${markerId})`,\n end: `url(#${markerId})`,\n };\n }\n\n return { end: `url(#${markerId})` };\n}\n\nfunction renderEdges(layout: SociogramLayoutResult): {\n edgeEls: string[];\n edgeLabelEls: string[];\n} {\n const edgeEls: string[] = [];\n const edgeLabelEls: string[] = [];\n\n for (const layoutEdge of layout.edges) {\n const { edge, x1, y1, x2, y2 } = layoutEdge;\n const valenceClass = `schematex-sociogram-edge-${edge.valence}`;\n const markers = getMarkerUrl(edge.valence, edge.direction);\n const sw = edgeStrokeWidth(edge.weight);\n\n const attrs: Record<string, string | number | undefined> = {\n x1,\n y1,\n x2,\n y2,\n class: `schematex-sociogram-edge ${valenceClass}`,\n \"stroke-width\": sw,\n \"data-from\": edge.from,\n \"data-to\": edge.to,\n };\n\n if (markers.end) attrs[\"marker-end\"] = markers.end;\n if (markers.start) attrs[\"marker-start\"] = markers.start;\n\n edgeEls.push(line(attrs));\n\n // Edge label\n if (edge.label) {\n const mx = (x1 + x2) / 2;\n const my = (y1 + y2) / 2;\n edgeLabelEls.push(\n text(\n { x: mx, y: my - 6, class: \"schematex-sociogram-edge-label\" },\n edge.label\n )\n );\n }\n }\n\n return { edgeEls, edgeLabelEls };\n}\n\n// ─── Group Background Labels ────────────────────────────────\n\nfunction renderGroupLabels(layout: SociogramLayoutResult, t: BaseTheme): string[] {\n const elements: string[] = [];\n const { ast } = layout;\n\n for (let gi = 0; gi < ast.groups.length; gi++) {\n const grp = ast.groups[gi];\n const memberNodes = layout.nodes.filter(\n (n) => n.node.group === grp.id\n );\n if (memberNodes.length === 0) continue;\n\n const color = grp.color ?? t.palette[gi % t.palette.length];\n const cx = memberNodes.reduce((s, n) => s + n.x, 0) / memberNodes.length;\n const minY = Math.min(...memberNodes.map((n) => n.y - n.radius));\n\n elements.push(\n text(\n {\n x: cx,\n y: minY - 14,\n class: \"schematex-sociogram-group-label\",\n fill: color,\n },\n grp.label ?? grp.id\n )\n );\n }\n\n return elements;\n}\n\n// ─── Main Renderer ──────────────────────────────────────────\n\nexport function renderSociogram(\n layout: SociogramLayoutResult,\n options: { theme?: string } = {}\n): string {\n const { ast } = layout;\n const t = resolveBaseTheme(options.theme ?? \"default\");\n\n const css = buildCSS(ast, t);\n const defsStr = buildDefs(t);\n\n const titleOffset = ast.title ? 30 : 0;\n const totalWidth = layout.width;\n const totalHeight = layout.height + titleOffset;\n\n const { edgeEls, edgeLabelEls } = renderEdges(layout);\n const { nodeEls, labelEls } = renderNodes(layout, t);\n const groupLabelEls = renderGroupLabels(layout, t);\n\n const titleEl = ast.title\n ? text(\n { x: totalWidth / 2, y: 20, class: \"schematex-sociogram-title\" },\n ast.title\n )\n : \"\";\n\n const transformY = titleOffset;\n const transform = transformY ? `translate(0,${transformY})` : undefined;\n\n const svgContent: string[] = [\n title(`Sociogram${ast.title ? `: ${ast.title}` : \"\"}`),\n desc(\n `Sociogram with ${ast.nodes.length} members and ${ast.edges.length} connections`\n ),\n el(\"style\", {}, css),\n defsStr,\n ];\n\n if (titleEl) svgContent.push(titleEl);\n\n if (groupLabelEls.length > 0) {\n svgContent.push(\n group({ class: \"schematex-sociogram-groups\", transform }, groupLabelEls)\n );\n }\n\n svgContent.push(\n group({ class: \"schematex-sociogram-edges\", transform }, [\n ...edgeEls,\n ...edgeLabelEls,\n ])\n );\n\n svgContent.push(\n group({ class: \"schematex-sociogram-nodes\", transform }, nodeEls)\n );\n\n svgContent.push(\n group({ class: \"schematex-sociogram-labels\", transform }, labelEls)\n );\n\n // Compose legend\n let finalWidth = totalWidth;\n let finalHeight = totalHeight;\n const autoSpec = buildSociogramLegend(ast, t);\n const finalSpec = applyLegendOverrides(autoSpec, ast.legendOverrides);\n if (finalSpec.mode === \"on\" && finalSpec.items.length > 0) {\n const { svg: legendSvg, bbox: lb } = renderLegend(\n finalSpec,\n {\n canvasWidth: totalWidth,\n canvasHeight: totalHeight,\n padding: 16,\n titleHeight: titleOffset,\n },\n t,\n { fontFamily: \"system-ui, sans-serif\", fontSize: 12 }\n );\n if (legendSvg) {\n svgContent.push(legendSvg);\n const overflowX = lb.x + lb.w + 8;\n const overflowY = lb.y + lb.h + 8;\n if (overflowX > finalWidth) finalWidth = overflowX;\n if (overflowY > finalHeight) finalHeight = overflowY;\n }\n }\n\n return svgRoot(\n {\n class: \"schematex-diagram schematex-sociogram\",\n viewBox: `0 0 ${finalWidth} ${finalHeight}`,\n width: finalWidth,\n height: finalHeight,\n },\n svgContent\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseSociogram } from \"./parser\";\nimport { layoutSociogram } from \"./layout\";\nimport { renderSociogram } from \"./renderer\";\n\nexport const sociogram: DiagramPlugin = {\n type: \"sociogram\",\n\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"sociogram\");\n },\n\n parse: parseSociogram,\n\n render(text: string, config): string {\n const ast = parseSociogram(text);\n const layout = layoutSociogram(ast);\n return renderSociogram(layout, { theme: config?.theme });\n },\n};\n\nexport { parseSociogram } from \"./parser\";\nexport { layoutSociogram } from \"./layout\";\nexport { renderSociogram } from \"./renderer\";\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkD7EHZFK4_cjs = require('./chunk-D7EHZFK4.cjs');
4
- var chunkLFZZ4NCP_cjs = require('./chunk-LFZZ4NCP.cjs');
4
+ var chunk3WNW5Y7P_cjs = require('./chunk-3WNW5Y7P.cjs');
5
5
 
6
6
  // src/diagrams/logic/parser.ts
7
7
  var LogicParseError = class extends Error {
@@ -579,7 +579,7 @@ function renderGateBody(n, style) {
579
579
  const g = n.geometry;
580
580
  if (style === "iec") {
581
581
  out.push(
582
- chunkLFZZ4NCP_cjs.el("rect", {
582
+ chunk3WNW5Y7P_cjs.el("rect", {
583
583
  x: 0,
584
584
  y: 0,
585
585
  width: g.width,
@@ -589,7 +589,7 @@ function renderGateBody(n, style) {
589
589
  );
590
590
  if (g.iecLabel) {
591
591
  out.push(
592
- chunkLFZZ4NCP_cjs.text(
592
+ chunk3WNW5Y7P_cjs.text(
593
593
  {
594
594
  x: g.width / 2,
595
595
  y: g.height / 2 + 4,
@@ -602,13 +602,13 @@ function renderGateBody(n, style) {
602
602
  }
603
603
  } else {
604
604
  out.push(
605
- chunkLFZZ4NCP_cjs.el("path", { d: g.ansiPath, class: "schematex-logic-gate-body" })
605
+ chunk3WNW5Y7P_cjs.el("path", { d: g.ansiPath, class: "schematex-logic-gate-body" })
606
606
  );
607
607
  }
608
608
  if (g.outputBubble) {
609
609
  const op = g.outputPins[0];
610
610
  out.push(
611
- chunkLFZZ4NCP_cjs.circle({
611
+ chunk3WNW5Y7P_cjs.circle({
612
612
  cx: op.x - 4,
613
613
  cy: op.y,
614
614
  r: 4,
@@ -620,7 +620,7 @@ function renderGateBody(n, style) {
620
620
  const cp = g.inputPins.find((p) => p.id === g.clockPin);
621
621
  if (cp) {
622
622
  out.push(
623
- chunkLFZZ4NCP_cjs.polygon({
623
+ chunk3WNW5Y7P_cjs.polygon({
624
624
  points: `${cp.x},${cp.y - 5} ${cp.x + 8},${cp.y} ${cp.x},${cp.y + 5}`,
625
625
  class: "schematex-logic-clock-tri"
626
626
  })
@@ -630,7 +630,7 @@ function renderGateBody(n, style) {
630
630
  for (const op of g.outputPins) {
631
631
  if (op.bubble && op.id !== "out") {
632
632
  out.push(
633
- chunkLFZZ4NCP_cjs.circle({
633
+ chunk3WNW5Y7P_cjs.circle({
634
634
  cx: op.x + 4,
635
635
  cy: op.y,
636
636
  r: 4,
@@ -642,7 +642,7 @@ function renderGateBody(n, style) {
642
642
  for (const pin of g.inputPins) {
643
643
  if (pin.label && pin.id !== g.clockPin) {
644
644
  out.push(
645
- chunkLFZZ4NCP_cjs.text(
645
+ chunk3WNW5Y7P_cjs.text(
646
646
  {
647
647
  x: pin.x + 5,
648
648
  y: pin.y + 3,
@@ -656,7 +656,7 @@ function renderGateBody(n, style) {
656
656
  for (const pin of g.outputPins) {
657
657
  if (pin.label) {
658
658
  out.push(
659
- chunkLFZZ4NCP_cjs.text(
659
+ chunk3WNW5Y7P_cjs.text(
660
660
  {
661
661
  x: pin.x - 6,
662
662
  y: pin.y + 3,
@@ -672,7 +672,7 @@ function renderGateBody(n, style) {
672
672
  const labelX = g.width / 2;
673
673
  const labelY = g.height + 14;
674
674
  out.push(
675
- chunkLFZZ4NCP_cjs.text(
675
+ chunk3WNW5Y7P_cjs.text(
676
676
  {
677
677
  x: labelX,
678
678
  y: labelY,
@@ -695,8 +695,8 @@ function renderLogic(ast, config) {
695
695
  const moduleSvgs = [];
696
696
  for (const m of layout.modules) {
697
697
  moduleSvgs.push(
698
- chunkLFZZ4NCP_cjs.group({ "data-module-id": m.id }, [
699
- chunkLFZZ4NCP_cjs.el("rect", {
698
+ chunk3WNW5Y7P_cjs.group({ "data-module-id": m.id }, [
699
+ chunk3WNW5Y7P_cjs.el("rect", {
700
700
  x: m.x,
701
701
  y: m.y,
702
702
  width: m.width,
@@ -704,7 +704,7 @@ function renderLogic(ast, config) {
704
704
  rx: 6,
705
705
  class: "schematex-logic-module"
706
706
  }),
707
- chunkLFZZ4NCP_cjs.text(
707
+ chunk3WNW5Y7P_cjs.text(
708
708
  {
709
709
  x: m.x + 10,
710
710
  y: m.y + 14,
@@ -718,7 +718,7 @@ function renderLogic(ast, config) {
718
718
  for (const n of layout.nodes) {
719
719
  if (n.kind === "gate") {
720
720
  gateSvgs.push(
721
- chunkLFZZ4NCP_cjs.group(
721
+ chunk3WNW5Y7P_cjs.group(
722
722
  {
723
723
  transform: `translate(${n.x}, ${n.y})`,
724
724
  "data-gate-id": n.id,
@@ -730,8 +730,8 @@ function renderLogic(ast, config) {
730
730
  } else if (n.kind === "input") {
731
731
  const cy = PORT_H2 / 2;
732
732
  portSvgs.push(
733
- chunkLFZZ4NCP_cjs.group({ transform: `translate(${n.x}, ${n.y})`, "data-port": "input" }, [
734
- chunkLFZZ4NCP_cjs.text(
733
+ chunk3WNW5Y7P_cjs.group({ transform: `translate(${n.x}, ${n.y})`, "data-port": "input" }, [
734
+ chunk3WNW5Y7P_cjs.text(
735
735
  {
736
736
  x: 0,
737
737
  y: cy + 4,
@@ -740,14 +740,14 @@ function renderLogic(ast, config) {
740
740
  },
741
741
  n.label
742
742
  ),
743
- chunkLFZZ4NCP_cjs.el("line", {
743
+ chunk3WNW5Y7P_cjs.el("line", {
744
744
  x1: PORT_SIZE2 - 12,
745
745
  y1: cy,
746
746
  x2: n.isActiveLow ? PORT_SIZE2 - 8 : PORT_SIZE2,
747
747
  y2: cy,
748
748
  class: "schematex-logic-wire"
749
749
  }),
750
- n.isActiveLow ? chunkLFZZ4NCP_cjs.circle({
750
+ n.isActiveLow ? chunk3WNW5Y7P_cjs.circle({
751
751
  cx: PORT_SIZE2 - 4,
752
752
  cy,
753
753
  r: 4,
@@ -758,15 +758,15 @@ function renderLogic(ast, config) {
758
758
  } else if (n.kind === "output") {
759
759
  const cy = PORT_H2 / 2;
760
760
  portSvgs.push(
761
- chunkLFZZ4NCP_cjs.group({ transform: `translate(${n.x}, ${n.y})`, "data-port": "output" }, [
762
- chunkLFZZ4NCP_cjs.el("line", {
761
+ chunk3WNW5Y7P_cjs.group({ transform: `translate(${n.x}, ${n.y})`, "data-port": "output" }, [
762
+ chunk3WNW5Y7P_cjs.el("line", {
763
763
  x1: 0,
764
764
  y1: cy,
765
765
  x2: 12,
766
766
  y2: cy,
767
767
  class: "schematex-logic-wire"
768
768
  }),
769
- chunkLFZZ4NCP_cjs.text(
769
+ chunk3WNW5Y7P_cjs.text(
770
770
  {
771
771
  x: 16,
772
772
  y: cy + 4,
@@ -783,7 +783,7 @@ function renderLogic(ast, config) {
783
783
  const extras = [];
784
784
  if (w.isActiveLow) {
785
785
  extras.push(
786
- chunkLFZZ4NCP_cjs.circle({
786
+ chunk3WNW5Y7P_cjs.circle({
787
787
  cx: w.toX - 4,
788
788
  cy: w.toY,
789
789
  r: 4,
@@ -792,7 +792,7 @@ function renderLogic(ast, config) {
792
792
  );
793
793
  }
794
794
  return [
795
- chunkLFZZ4NCP_cjs.path({
795
+ chunk3WNW5Y7P_cjs.path({
796
796
  d: w.path,
797
797
  class: "schematex-logic-wire",
798
798
  "data-from": w.fromNode,
@@ -802,7 +802,7 @@ function renderLogic(ast, config) {
802
802
  ].join("");
803
803
  });
804
804
  const css = `
805
- .schematex-logic { background: ${t.bg}; font-family: system-ui, -apple-system, sans-serif; }
805
+ .schematex-logic { font-family: system-ui, -apple-system, sans-serif; }
806
806
  .schematex-logic-gate-body { fill: none; stroke: ${t.strokeHeavy}; stroke-width: 1.75; stroke-linejoin: round; }
807
807
  .schematex-logic-bubble { fill: ${t.bg}; stroke: ${t.strokeHeavy}; stroke-width: 1.5; }
808
808
  .schematex-logic-clock-tri { fill: none; stroke: ${t.strokeHeavy}; stroke-width: 1.5; stroke-linejoin: round; }
@@ -815,7 +815,7 @@ function renderLogic(ast, config) {
815
815
  .schematex-logic-module { fill: none; stroke: ${t.textMuted}; stroke-width: 1.25; stroke-dasharray: 6 4; }
816
816
  .schematex-logic-module-label { font: 11px sans-serif; fill: ${t.textMuted}; font-style: italic; }
817
817
  `.trim();
818
- const titleSvg = ast.title ? chunkLFZZ4NCP_cjs.text(
818
+ const titleSvg = ast.title ? chunk3WNW5Y7P_cjs.text(
819
819
  {
820
820
  x: width / 2,
821
821
  y: 18,
@@ -824,7 +824,7 @@ function renderLogic(ast, config) {
824
824
  },
825
825
  ast.title
826
826
  ) : "";
827
- return chunkLFZZ4NCP_cjs.svgRoot(
827
+ return chunk3WNW5Y7P_cjs.svgRoot(
828
828
  {
829
829
  class: "schematex-logic",
830
830
  viewBox: `0 0 ${width} ${height + (ast.title ? 20 : 0)}`,
@@ -834,18 +834,18 @@ function renderLogic(ast, config) {
834
834
  "data-diagram-type": "logic"
835
835
  },
836
836
  [
837
- chunkLFZZ4NCP_cjs.title(ast.title ?? "Logic Gate Diagram"),
838
- chunkLFZZ4NCP_cjs.desc(
837
+ chunk3WNW5Y7P_cjs.title(ast.title ?? "Logic Gate Diagram"),
838
+ chunk3WNW5Y7P_cjs.desc(
839
839
  `Logic gate diagram with ${ast.gates.length} gates, ${ast.inputs.length} inputs, ${ast.outputs.length} outputs`
840
840
  ),
841
- chunkLFZZ4NCP_cjs.defs([chunkLFZZ4NCP_cjs.el("style", {}, css)]),
842
- chunkLFZZ4NCP_cjs.group(
841
+ chunk3WNW5Y7P_cjs.defs([chunk3WNW5Y7P_cjs.el("style", {}, css)]),
842
+ chunk3WNW5Y7P_cjs.group(
843
843
  { transform: `translate(0, ${ast.title ? 20 : 0})` },
844
844
  [
845
- chunkLFZZ4NCP_cjs.group({ class: "schematex-logic-modules" }, moduleSvgs),
846
- chunkLFZZ4NCP_cjs.group({ class: "schematex-logic-wires" }, wireSvgs),
847
- chunkLFZZ4NCP_cjs.group({ class: "schematex-logic-gates" }, gateSvgs),
848
- chunkLFZZ4NCP_cjs.group({ class: "schematex-logic-ports" }, portSvgs)
845
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-logic-modules" }, moduleSvgs),
846
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-logic-wires" }, wireSvgs),
847
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-logic-gates" }, gateSvgs),
848
+ chunk3WNW5Y7P_cjs.group({ class: "schematex-logic-ports" }, portSvgs)
849
849
  ]
850
850
  ),
851
851
  titleSvg
@@ -871,5 +871,5 @@ exports.layoutLogic = layoutLogic;
871
871
  exports.logic = logic;
872
872
  exports.parseLogic = parseLogic;
873
873
  exports.renderLogic = renderLogic;
874
- //# sourceMappingURL=chunk-7MVDN5UC.cjs.map
875
- //# sourceMappingURL=chunk-7MVDN5UC.cjs.map
874
+ //# sourceMappingURL=chunk-XSNNGYXZ.cjs.map
875
+ //# sourceMappingURL=chunk-XSNNGYXZ.cjs.map