@cardenelabs/cdl 0.113.0 → 0.114.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/CHANGELOG.md +40 -1
- package/dist/index.cjs +43 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +43 -28
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +43 -28
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +43 -28
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/mind-map.tsx +113 -63
package/dist/react.cjs
CHANGED
|
@@ -5122,7 +5122,7 @@ function \u63CF\u304F\u6A2A\u306E\u7AEF(n) {
|
|
|
5122
5122
|
if (n.isRoot || !n.isLeaf) return [n.x - n.w / 2, n.x + n.w / 2];
|
|
5123
5123
|
const \u8D77\u70B9 = n.x + (n.side === "right" ? -n.w / 2 : n.w / 2);
|
|
5124
5124
|
const \u540D\u524D = \u653E\u5C04\u306E\u884C(n)[0];
|
|
5125
|
-
const \u5E45 =
|
|
5125
|
+
const \u5E45 = textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
|
|
5126
5126
|
return n.side === "right" ? [\u8D77\u70B9, \u8D77\u70B9 + \u5E45] : [\u8D77\u70B9 - \u5E45, \u8D77\u70B9];
|
|
5127
5127
|
}
|
|
5128
5128
|
function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
@@ -5195,38 +5195,52 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5195
5195
|
if (kids.length === 0) return 1;
|
|
5196
5196
|
return kids.reduce((sum, k) => sum + leafCountOf(k.id, seen), 0);
|
|
5197
5197
|
};
|
|
5198
|
-
const
|
|
5198
|
+
const leftBranches = firstLevel.slice(0, leftCount);
|
|
5199
|
+
const rightBranches = firstLevel.slice(leftCount);
|
|
5199
5200
|
const minLayer1XOffset = rootW / 2 + branchW / 2 + MIND_BOX_GAP;
|
|
5200
5201
|
const preferredSubDx = subBranchW + 20;
|
|
5201
|
-
const reserve = maxSubDepth > 0 ? branchW / 2 + maxSubDepth * preferredSubDx : 0;
|
|
5202
|
-
const maxLayer1XOffset = Math.max(minLayer1XOffset, canvasW / 2 - reserve);
|
|
5203
|
-
const \u8449\u306E\u540D\u524D\u306E\u6700\u5927\u5E45 = Math.max(
|
|
5204
|
-
0,
|
|
5205
|
-
...firstLevel.filter((br) => (childrenOf.get(br.id) ?? []).length === 0).map((br) => {
|
|
5206
|
-
const \u540D\u524D = \u653E\u5C04\u306E\u884C({ title: br.title, isRoot: false })[0];
|
|
5207
|
-
return measureTextWidth(\u540D\u524D.text, { fontSize: \u540D\u524D.fontSize});
|
|
5208
|
-
})
|
|
5209
|
-
);
|
|
5210
|
-
const \u540D\u524D\u3067\u6C7A\u307E\u308B\u4E0A\u9650 = canvasW / 2 + branchW / 2 - \u8449\u306E\u540D\u524D\u306E\u6700\u5927\u5E45;
|
|
5211
|
-
const layer1XOffset = Math.max(minLayer1XOffset, Math.min(\u540D\u524D\u3067\u6C7A\u307E\u308B\u4E0A\u9650, maxLayer1XOffset));
|
|
5212
|
-
const room = canvasW / 2 - layer1XOffset;
|
|
5213
5202
|
const MIN_SUB_W = 56;
|
|
5214
5203
|
const PREFERRED_GAP = MIND_BOX_GAP;
|
|
5215
|
-
const
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
const
|
|
5220
|
-
|
|
5221
|
-
|
|
5222
|
-
|
|
5204
|
+
const \u679D\u306E\u540D\u524D\u306E\u5E45 = (title) => {
|
|
5205
|
+
const \u540D\u524D = \u653E\u5C04\u306E\u884C({ title, isRoot: false })[0];
|
|
5206
|
+
return textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
|
|
5207
|
+
};
|
|
5208
|
+
const \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B = (br) => {
|
|
5209
|
+
const maxSubDepth = subDepthOf(br.id, /* @__PURE__ */ new Set());
|
|
5210
|
+
const \u4E0A\u9650 = maxSubDepth > 0 ? canvasW / 2 - (branchW / 2 + maxSubDepth * preferredSubDx) : canvasW / 2 + branchW / 2 - \u679D\u306E\u540D\u524D\u306E\u5E45(br.title);
|
|
5211
|
+
const layer1XOffset = Math.floor(Math.max(minLayer1XOffset, \u4E0A\u9650));
|
|
5212
|
+
const room = canvasW / 2 - layer1XOffset;
|
|
5213
|
+
const gapRoom = maxSubDepth > 0 ? (room - branchW / 2 - maxSubDepth * MIN_SUB_W) / maxSubDepth : 0;
|
|
5214
|
+
const gap = Math.floor(Math.max(8, Math.min(PREFERRED_GAP, gapRoom)));
|
|
5215
|
+
const effSubW = maxSubDepth > 0 ? Math.floor(
|
|
5216
|
+
Math.max(1, Math.min(subBranchW, (room - branchW / 2 - maxSubDepth * gap) / maxSubDepth))
|
|
5217
|
+
) : subBranchW;
|
|
5218
|
+
const step1 = (branchW + effSubW) / 2 + gap;
|
|
5219
|
+
const stepN = effSubW + gap;
|
|
5220
|
+
return {
|
|
5221
|
+
layer1XOffset,
|
|
5222
|
+
effSubW,
|
|
5223
|
+
subOffset: (subDepth) => subDepth <= 0 ? 0 : step1 + (subDepth - 1) * stepN
|
|
5224
|
+
};
|
|
5225
|
+
};
|
|
5226
|
+
const \u6A2A\u306E\u5272\u4ED8\u8868 = new Map(
|
|
5227
|
+
firstLevel.map((br) => [br.id, \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br)])
|
|
5228
|
+
);
|
|
5229
|
+
const \u4E00\u756A\u5185\u5074\u306E\u96E2\u308C = Math.min(
|
|
5230
|
+
...firstLevel.length > 0 ? firstLevel.map((br) => \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id).layer1XOffset) : [minLayer1XOffset]
|
|
5231
|
+
);
|
|
5223
5232
|
const leavesOfSide = (brs) => Math.max(
|
|
5224
5233
|
1,
|
|
5225
5234
|
brs.reduce((sum, br) => sum + leafCountOf(br.id, /* @__PURE__ */ new Set()), 0)
|
|
5226
5235
|
);
|
|
5227
5236
|
const sideLaneCount = Math.max(leavesOfSide(leftBranches), leavesOfSide(rightBranches));
|
|
5228
5237
|
const laneBandH = Math.max(0, canvasH - BRANCH_BOX_H_MAX);
|
|
5229
|
-
const rowGap = sideLaneCount > 1 ? Math.min(
|
|
5238
|
+
const rowGap = sideLaneCount > 1 ? Math.min(
|
|
5239
|
+
laneBandH / (sideLaneCount - 1),
|
|
5240
|
+
// 帯は図で 1 つなので、**一番内側の枝** から上限を取る (#966)。
|
|
5241
|
+
// 外へ出た枝に合わせると、内側に残った枝の傾きが 45 度を超える
|
|
5242
|
+
\u7E26\u306E\u9593\u9694\u306E\u4E0A\u9650(\u4E00\u756A\u5185\u5074\u306E\u96E2\u308C)
|
|
5243
|
+
) : subBranchH + 14;
|
|
5230
5244
|
const effSubH = Math.min(SUB_BOX_H_MAX, rowGap * 0.7);
|
|
5231
5245
|
const effBranchH = Math.min(BRANCH_BOX_H_MAX, rowGap * 0.7);
|
|
5232
5246
|
const \u7AEF\u306E\u4F59\u308A = Math.max(effSubH, effBranchH) / 2;
|
|
@@ -5242,11 +5256,11 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5242
5256
|
const half = nodeHalfW.get(mindData.rootId) ?? rootW / 2;
|
|
5243
5257
|
return \u4E2D\u5FC3\u306Ex + (isLeft ? -half : half);
|
|
5244
5258
|
};
|
|
5245
|
-
const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef) => {
|
|
5259
|
+
const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef, \u6A2A) => {
|
|
5246
5260
|
placed.add(node.id);
|
|
5247
5261
|
const dirX = isLeft ? -1 : 1;
|
|
5248
|
-
const x = cx + dirX * (layer1XOffset + subOffset(subDepth));
|
|
5249
|
-
const w = subDepth === 0 ? branchW : effSubW;
|
|
5262
|
+
const x = cx + dirX * (\u6A2A.layer1XOffset + \u6A2A.subOffset(subDepth));
|
|
5263
|
+
const w = subDepth === 0 ? branchW : \u6A2A.effSubW;
|
|
5250
5264
|
const h = subDepth === 0 ? effBranchH : effSubH;
|
|
5251
5265
|
const myTone = node.tone ?? tone;
|
|
5252
5266
|
const kids = (childrenOf.get(node.id) ?? []).filter((k) => !placed.has(k.id));
|
|
@@ -5262,7 +5276,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5262
5276
|
isLeft,
|
|
5263
5277
|
myTone ?? MIND_TONES[i % MIND_TONES.length],
|
|
5264
5278
|
placed,
|
|
5265
|
-
laneRef
|
|
5279
|
+
laneRef,
|
|
5280
|
+
\u6A2A
|
|
5266
5281
|
)
|
|
5267
5282
|
);
|
|
5268
5283
|
y = (ys[0] + ys[ys.length - 1]) / 2;
|
|
@@ -5295,7 +5310,7 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5295
5310
|
const placed = /* @__PURE__ */ new Set();
|
|
5296
5311
|
brs.forEach((br, i) => {
|
|
5297
5312
|
const tone = br.tone ?? MIND_TONES[(toneBase + i) % MIND_TONES.length];
|
|
5298
|
-
placeSubtree(br, 0, isLeft, tone, placed, laneRef);
|
|
5313
|
+
placeSubtree(br, 0, isLeft, tone, placed, laneRef, \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id) ?? \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br));
|
|
5299
5314
|
});
|
|
5300
5315
|
};
|
|
5301
5316
|
placeSide(leftBranches, true, 0);
|