compasso 0.1.0 → 0.3.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.
- package/README.md +126 -8
- package/dist/chunk-F47C6ZEB.js +1041 -0
- package/dist/chunk-F47C6ZEB.js.map +1 -0
- package/dist/chunk-JP4N42AY.js +497 -0
- package/dist/chunk-JP4N42AY.js.map +1 -0
- package/dist/chunk-LRHHUJFZ.js +703 -0
- package/dist/chunk-LRHHUJFZ.js.map +1 -0
- package/dist/{chunk-E456YKAJ.js → chunk-O3BT2O42.js} +69 -10
- package/dist/chunk-O3BT2O42.js.map +1 -0
- package/dist/{chunk-L5CYESBI.js → chunk-Q6DVTCXD.js} +9 -24
- package/dist/chunk-Q6DVTCXD.js.map +1 -0
- package/dist/{chunk-5RRRE2GF.js → chunk-RWPGGWO5.js} +9 -28
- package/dist/chunk-RWPGGWO5.js.map +1 -0
- package/dist/chunk-ZBDABVIO.js +252 -0
- package/dist/chunk-ZBDABVIO.js.map +1 -0
- package/dist/core/index.cjs +74 -7
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +33 -29
- package/dist/core/index.d.ts +33 -29
- package/dist/core/index.js +1 -1
- package/dist/ecomap/index.cjs +43 -28
- package/dist/ecomap/index.cjs.map +1 -1
- package/dist/ecomap/index.js +2 -2
- package/dist/fault-tree/index.cjs +782 -0
- package/dist/fault-tree/index.cjs.map +1 -0
- package/dist/fault-tree/index.d.cts +148 -0
- package/dist/fault-tree/index.d.ts +148 -0
- package/dist/fault-tree/index.js +4 -0
- package/dist/fault-tree/index.js.map +1 -0
- package/dist/fishbone/index.cjs +314 -0
- package/dist/fishbone/index.cjs.map +1 -0
- package/dist/fishbone/index.d.cts +91 -0
- package/dist/fishbone/index.d.ts +91 -0
- package/dist/fishbone/index.js +4 -0
- package/dist/fishbone/index.js.map +1 -0
- package/dist/genogram/index.cjs +47 -32
- package/dist/genogram/index.cjs.map +1 -1
- package/dist/genogram/index.d.cts +7 -4
- package/dist/genogram/index.d.ts +7 -4
- package/dist/genogram/index.js +2 -2
- package/dist/index.cjs +2622 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -2
- package/dist/index.d.ts +12 -2
- package/dist/index.js +7 -3
- package/dist/kinship-DqEklrDN.d.ts +51 -0
- package/dist/kinship-Dy_ijjJV.d.cts +51 -0
- package/dist/labels-CBQ_3Ec9.d.cts +123 -0
- package/dist/labels-CYbM5XV7.d.cts +83 -0
- package/dist/labels-CYbM5XV7.d.ts +83 -0
- package/dist/labels-DNqRkWuI.d.ts +123 -0
- package/dist/labels-iZjijjtK.d.cts +64 -0
- package/dist/labels-iZjijjtK.d.ts +64 -0
- package/dist/locales/pt-br.cjs +94 -0
- package/dist/locales/pt-br.cjs.map +1 -1
- package/dist/locales/pt-br.d.cts +14 -2
- package/dist/locales/pt-br.d.ts +14 -2
- package/dist/locales/pt-br.js +88 -1
- package/dist/locales/pt-br.js.map +1 -1
- package/dist/pedigree/index.cjs +1151 -0
- package/dist/pedigree/index.cjs.map +1 -0
- package/dist/pedigree/index.d.cts +155 -0
- package/dist/pedigree/index.d.ts +155 -0
- package/dist/pedigree/index.js +4 -0
- package/dist/pedigree/index.js.map +1 -0
- package/dist/phylo/index.cjs +553 -0
- package/dist/phylo/index.cjs.map +1 -0
- package/dist/phylo/index.d.cts +158 -0
- package/dist/phylo/index.d.ts +158 -0
- package/dist/phylo/index.js +4 -0
- package/dist/phylo/index.js.map +1 -0
- package/dist/text-DuO_PwYw.d.cts +45 -0
- package/dist/text-DuO_PwYw.d.ts +45 -0
- package/dist/types-BnMG7TCd.d.cts +66 -0
- package/dist/types-BnMG7TCd.d.ts +66 -0
- package/dist/xml-DDae1eUr.d.cts +4 -0
- package/dist/xml-DDae1eUr.d.ts +4 -0
- package/package.json +100 -26
- package/dist/chunk-5RRRE2GF.js.map +0 -1
- package/dist/chunk-E456YKAJ.js.map +0 -1
- package/dist/chunk-L5CYESBI.js.map +0 -1
- package/dist/kinship-BARO5-qz.d.cts +0 -115
- package/dist/kinship-Bkf87Jhu.d.ts +0 -115
package/dist/genogram/index.cjs
CHANGED
|
@@ -51,22 +51,56 @@ var CHAR_W = 0.6;
|
|
|
51
51
|
function estimateTextWidth(text, fontPx) {
|
|
52
52
|
return text.length * fontPx * CHAR_W;
|
|
53
53
|
}
|
|
54
|
-
function wrapLabel(label, perLine) {
|
|
54
|
+
function wrapLabel(label, perLine, maxLines = 2) {
|
|
55
55
|
if (label.length <= perLine) return [label];
|
|
56
56
|
const cap = (s) => s.length > perLine ? s.slice(0, Math.max(1, perLine - 1)) + "\u2026" : s;
|
|
57
|
-
|
|
58
|
-
let line2 = "";
|
|
57
|
+
const lines = [""];
|
|
59
58
|
for (const word of label.split(/\s+/)) {
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
const last = lines.length - 1;
|
|
60
|
+
const current = lines[last];
|
|
61
|
+
if (current === "" || (current + " " + word).length <= perLine) {
|
|
62
|
+
lines[last] = current === "" ? word : `${current} ${word}`;
|
|
63
|
+
} else if (lines.length < maxLines) {
|
|
64
|
+
lines.push(word);
|
|
62
65
|
} else {
|
|
63
|
-
|
|
66
|
+
lines[last] = `${current} ${word}`;
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
|
-
|
|
69
|
+
if (lines.length > 1 && lines[lines.length - 1] === "") lines.pop();
|
|
70
|
+
return lines.map(cap);
|
|
71
|
+
}
|
|
72
|
+
function wrapLabelBalanced(label, maxLines) {
|
|
73
|
+
const perLine = Math.min(26, Math.max(14, Math.ceil(label.length / 2) + 2));
|
|
74
|
+
return wrapLabel(label, perLine, maxLines);
|
|
75
|
+
}
|
|
76
|
+
function clampLabel(label, maxChars) {
|
|
77
|
+
if (maxChars === void 0 || label.length <= maxChars) return label;
|
|
78
|
+
return label.slice(0, Math.max(1, maxChars - 1)) + "\u2026";
|
|
67
79
|
}
|
|
68
80
|
var FONT_FAMILY = "Helvetica, Arial, sans-serif";
|
|
69
81
|
|
|
82
|
+
// src/core/legend.ts
|
|
83
|
+
var LEGEND_ROW_H = 18;
|
|
84
|
+
var LEGEND_PAD = 16;
|
|
85
|
+
var LEGEND_SWATCH_W = 22;
|
|
86
|
+
var LEGEND_GAP = 14;
|
|
87
|
+
var LEGEND_FONT = 11;
|
|
88
|
+
var LEGEND_TEXT_FILL = "#52525b";
|
|
89
|
+
function legendBlock(entries, startY) {
|
|
90
|
+
if (entries.length === 0) return { svg: "", width: 0, height: startY };
|
|
91
|
+
const rows = entries.map((entry, i) => {
|
|
92
|
+
const rowCenterY = startY + i * LEGEND_ROW_H + LEGEND_ROW_H / 2;
|
|
93
|
+
const textX = LEGEND_PAD + LEGEND_SWATCH_W + LEGEND_GAP;
|
|
94
|
+
return entry.swatch(LEGEND_PAD, rowCenterY) + `<text x="${textX}" y="${rowCenterY + LEGEND_FONT * 0.32}" font-family="${FONT_FAMILY}" font-size="${LEGEND_FONT}" fill="${LEGEND_TEXT_FILL}">${xmlEscape(entry.label)}</text>`;
|
|
95
|
+
});
|
|
96
|
+
const widestLabel = entries.reduce((m, e) => Math.max(m, estimateTextWidth(e.label, LEGEND_FONT)), 0);
|
|
97
|
+
return {
|
|
98
|
+
svg: `<g data-compasso-legend="true">${rows.join("")}</g>`,
|
|
99
|
+
width: LEGEND_PAD + LEGEND_SWATCH_W + LEGEND_GAP + widestLabel + LEGEND_PAD,
|
|
100
|
+
height: startY + entries.length * LEGEND_ROW_H + LEGEND_PAD / 2
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
70
104
|
// src/core/stroke.ts
|
|
71
105
|
var EDGE_STROKE = {
|
|
72
106
|
plain: { width: 1.5, dash: null, opacity: 0.6 },
|
|
@@ -197,14 +231,6 @@ function shapeForSex(sex) {
|
|
|
197
231
|
if (sex === "female") return "circle";
|
|
198
232
|
return "diamond";
|
|
199
233
|
}
|
|
200
|
-
function wrapNodeLabel(displayLabel) {
|
|
201
|
-
const perLine = Math.min(26, Math.max(14, Math.ceil(displayLabel.length / 2) + 2));
|
|
202
|
-
return wrapLabel(displayLabel, perLine);
|
|
203
|
-
}
|
|
204
|
-
function clampLabel2(label, maxChars) {
|
|
205
|
-
if (maxChars === void 0 || label.length <= maxChars) return label;
|
|
206
|
-
return label.slice(0, Math.max(1, maxChars - 1)) + "\u2026";
|
|
207
|
-
}
|
|
208
234
|
var STUB_OFFSETS = [9, -9, 18, -18, 26, -26];
|
|
209
235
|
var ARRIVAL_HALF = NODE_SIZE / 2 - 8;
|
|
210
236
|
function stubOffset(slot) {
|
|
@@ -428,7 +454,7 @@ function computeGenogramLayout(people, unions, parentLinks, relationships, opts
|
|
|
428
454
|
}
|
|
429
455
|
const measured = /* @__PURE__ */ new Map();
|
|
430
456
|
for (const p of people) {
|
|
431
|
-
const lines =
|
|
457
|
+
const lines = wrapLabelBalanced(clampLabel(p.label, opts.maxLabelChars));
|
|
432
458
|
const contentW = Math.max(NODE_SIZE, lines.reduce((m, l) => Math.max(m, estimateTextWidth(l, LABEL_FONT)), 0));
|
|
433
459
|
measured.set(p.id, { person: p, lines, contentW });
|
|
434
460
|
}
|
|
@@ -992,11 +1018,6 @@ var STRUCT_WIDTH = 1.5;
|
|
|
992
1018
|
var STRUCT_OPACITY = 0.75;
|
|
993
1019
|
var DOTTED_DASH = [2, 3];
|
|
994
1020
|
var DOTTED_OPACITY = 0.55;
|
|
995
|
-
var LEGEND_ROW_H = 18;
|
|
996
|
-
var LEGEND_PAD = 16;
|
|
997
|
-
var LEGEND_SWATCH_W = 22;
|
|
998
|
-
var LEGEND_GAP = 14;
|
|
999
|
-
var LEGEND_FONT = 11;
|
|
1000
1021
|
function glyphSvg(shape, cx, cy, half) {
|
|
1001
1022
|
const stroke = `fill="transparent" stroke="${GLYPH_STROKE}" stroke-width="2"`;
|
|
1002
1023
|
if (shape === "square") {
|
|
@@ -1132,17 +1153,11 @@ function genogramLayoutSvg(layout, opts = {}) {
|
|
|
1132
1153
|
label: labels.isolated
|
|
1133
1154
|
});
|
|
1134
1155
|
}
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
return entry.swatch(LEGEND_PAD, rowCenterY) + `<text x="${textX}" y="${rowCenterY + LEGEND_FONT * 0.32}" font-family="${FONT_FAMILY}" font-size="${LEGEND_FONT}" fill="${GLYPH_STROKE}">${xmlEscape(entry.label)}</text>`;
|
|
1141
|
-
});
|
|
1142
|
-
parts.push(`<g data-compasso-legend="true">${rows.join("")}</g>`);
|
|
1143
|
-
const widestLabel = entries.reduce((m, e) => Math.max(m, estimateTextWidth(e.label, LEGEND_FONT)), 0);
|
|
1144
|
-
width = Math.max(width, LEGEND_PAD + LEGEND_SWATCH_W + LEGEND_GAP + widestLabel + LEGEND_PAD);
|
|
1145
|
-
height = startY + entries.length * LEGEND_ROW_H + LEGEND_PAD / 2;
|
|
1156
|
+
const block = legendBlock(entries, layout.height);
|
|
1157
|
+
if (block.svg !== "") {
|
|
1158
|
+
parts.push(block.svg);
|
|
1159
|
+
width = Math.max(width, block.width);
|
|
1160
|
+
height = block.height;
|
|
1146
1161
|
}
|
|
1147
1162
|
}
|
|
1148
1163
|
return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${width} ${height}" width="${width}" height="${height}" role="img" aria-label="${xmlEscape(labels.ariaLabel)}">` + parts.join("") + `</svg>`;
|