@cardenelabs/cdl 0.112.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 +74 -1
- package/dist/index.cjs +45 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +45 -21
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +45 -21
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +45 -21
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/mind-map.tsx +121 -41
package/dist/react.js
CHANGED
|
@@ -5120,7 +5120,7 @@ function \u63CF\u304F\u6A2A\u306E\u7AEF(n) {
|
|
|
5120
5120
|
if (n.isRoot || !n.isLeaf) return [n.x - n.w / 2, n.x + n.w / 2];
|
|
5121
5121
|
const \u8D77\u70B9 = n.x + (n.side === "right" ? -n.w / 2 : n.w / 2);
|
|
5122
5122
|
const \u540D\u524D = \u653E\u5C04\u306E\u884C(n)[0];
|
|
5123
|
-
const \u5E45 =
|
|
5123
|
+
const \u5E45 = textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
|
|
5124
5124
|
return n.side === "right" ? [\u8D77\u70B9, \u8D77\u70B9 + \u5E45] : [\u8D77\u70B9 - \u5E45, \u8D77\u70B9];
|
|
5125
5125
|
}
|
|
5126
5126
|
function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
@@ -5193,30 +5193,52 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5193
5193
|
if (kids.length === 0) return 1;
|
|
5194
5194
|
return kids.reduce((sum, k) => sum + leafCountOf(k.id, seen), 0);
|
|
5195
5195
|
};
|
|
5196
|
-
const
|
|
5196
|
+
const leftBranches = firstLevel.slice(0, leftCount);
|
|
5197
|
+
const rightBranches = firstLevel.slice(leftCount);
|
|
5197
5198
|
const minLayer1XOffset = rootW / 2 + branchW / 2 + MIND_BOX_GAP;
|
|
5198
5199
|
const preferredSubDx = subBranchW + 20;
|
|
5199
|
-
const reserve = maxSubDepth > 0 ? branchW / 2 + maxSubDepth * preferredSubDx : 0;
|
|
5200
|
-
const maxLayer1XOffset = Math.max(minLayer1XOffset, canvasW / 2 - reserve);
|
|
5201
|
-
const layer1XOffset = Math.max(minLayer1XOffset, Math.min(canvasW * 0.32, maxLayer1XOffset));
|
|
5202
|
-
const room = canvasW / 2 - layer1XOffset;
|
|
5203
5200
|
const MIN_SUB_W = 56;
|
|
5204
5201
|
const PREFERRED_GAP = MIND_BOX_GAP;
|
|
5205
|
-
const
|
|
5206
|
-
|
|
5207
|
-
|
|
5208
|
-
|
|
5209
|
-
const
|
|
5210
|
-
|
|
5211
|
-
|
|
5212
|
-
|
|
5202
|
+
const \u679D\u306E\u540D\u524D\u306E\u5E45 = (title) => {
|
|
5203
|
+
const \u540D\u524D = \u653E\u5C04\u306E\u884C({ title, isRoot: false })[0];
|
|
5204
|
+
return textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
|
|
5205
|
+
};
|
|
5206
|
+
const \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B = (br) => {
|
|
5207
|
+
const maxSubDepth = subDepthOf(br.id, /* @__PURE__ */ new Set());
|
|
5208
|
+
const \u4E0A\u9650 = maxSubDepth > 0 ? canvasW / 2 - (branchW / 2 + maxSubDepth * preferredSubDx) : canvasW / 2 + branchW / 2 - \u679D\u306E\u540D\u524D\u306E\u5E45(br.title);
|
|
5209
|
+
const layer1XOffset = Math.floor(Math.max(minLayer1XOffset, \u4E0A\u9650));
|
|
5210
|
+
const room = canvasW / 2 - layer1XOffset;
|
|
5211
|
+
const gapRoom = maxSubDepth > 0 ? (room - branchW / 2 - maxSubDepth * MIN_SUB_W) / maxSubDepth : 0;
|
|
5212
|
+
const gap = Math.floor(Math.max(8, Math.min(PREFERRED_GAP, gapRoom)));
|
|
5213
|
+
const effSubW = maxSubDepth > 0 ? Math.floor(
|
|
5214
|
+
Math.max(1, Math.min(subBranchW, (room - branchW / 2 - maxSubDepth * gap) / maxSubDepth))
|
|
5215
|
+
) : subBranchW;
|
|
5216
|
+
const step1 = (branchW + effSubW) / 2 + gap;
|
|
5217
|
+
const stepN = effSubW + gap;
|
|
5218
|
+
return {
|
|
5219
|
+
layer1XOffset,
|
|
5220
|
+
effSubW,
|
|
5221
|
+
subOffset: (subDepth) => subDepth <= 0 ? 0 : step1 + (subDepth - 1) * stepN
|
|
5222
|
+
};
|
|
5223
|
+
};
|
|
5224
|
+
const \u6A2A\u306E\u5272\u4ED8\u8868 = new Map(
|
|
5225
|
+
firstLevel.map((br) => [br.id, \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br)])
|
|
5226
|
+
);
|
|
5227
|
+
const \u4E00\u756A\u5185\u5074\u306E\u96E2\u308C = Math.min(
|
|
5228
|
+
...firstLevel.length > 0 ? firstLevel.map((br) => \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id).layer1XOffset) : [minLayer1XOffset]
|
|
5229
|
+
);
|
|
5213
5230
|
const leavesOfSide = (brs) => Math.max(
|
|
5214
5231
|
1,
|
|
5215
5232
|
brs.reduce((sum, br) => sum + leafCountOf(br.id, /* @__PURE__ */ new Set()), 0)
|
|
5216
5233
|
);
|
|
5217
5234
|
const sideLaneCount = Math.max(leavesOfSide(leftBranches), leavesOfSide(rightBranches));
|
|
5218
5235
|
const laneBandH = Math.max(0, canvasH - BRANCH_BOX_H_MAX);
|
|
5219
|
-
const rowGap = sideLaneCount > 1 ? Math.min(
|
|
5236
|
+
const rowGap = sideLaneCount > 1 ? Math.min(
|
|
5237
|
+
laneBandH / (sideLaneCount - 1),
|
|
5238
|
+
// 帯は図で 1 つなので、**一番内側の枝** から上限を取る (#966)。
|
|
5239
|
+
// 外へ出た枝に合わせると、内側に残った枝の傾きが 45 度を超える
|
|
5240
|
+
\u7E26\u306E\u9593\u9694\u306E\u4E0A\u9650(\u4E00\u756A\u5185\u5074\u306E\u96E2\u308C)
|
|
5241
|
+
) : subBranchH + 14;
|
|
5220
5242
|
const effSubH = Math.min(SUB_BOX_H_MAX, rowGap * 0.7);
|
|
5221
5243
|
const effBranchH = Math.min(BRANCH_BOX_H_MAX, rowGap * 0.7);
|
|
5222
5244
|
const \u7AEF\u306E\u4F59\u308A = Math.max(effSubH, effBranchH) / 2;
|
|
@@ -5232,11 +5254,11 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5232
5254
|
const half = nodeHalfW.get(mindData.rootId) ?? rootW / 2;
|
|
5233
5255
|
return \u4E2D\u5FC3\u306Ex + (isLeft ? -half : half);
|
|
5234
5256
|
};
|
|
5235
|
-
const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef) => {
|
|
5257
|
+
const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef, \u6A2A) => {
|
|
5236
5258
|
placed.add(node.id);
|
|
5237
5259
|
const dirX = isLeft ? -1 : 1;
|
|
5238
|
-
const x = cx + dirX * (layer1XOffset + subOffset(subDepth));
|
|
5239
|
-
const w = subDepth === 0 ? branchW : effSubW;
|
|
5260
|
+
const x = cx + dirX * (\u6A2A.layer1XOffset + \u6A2A.subOffset(subDepth));
|
|
5261
|
+
const w = subDepth === 0 ? branchW : \u6A2A.effSubW;
|
|
5240
5262
|
const h = subDepth === 0 ? effBranchH : effSubH;
|
|
5241
5263
|
const myTone = node.tone ?? tone;
|
|
5242
5264
|
const kids = (childrenOf.get(node.id) ?? []).filter((k) => !placed.has(k.id));
|
|
@@ -5252,7 +5274,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5252
5274
|
isLeft,
|
|
5253
5275
|
myTone ?? MIND_TONES[i % MIND_TONES.length],
|
|
5254
5276
|
placed,
|
|
5255
|
-
laneRef
|
|
5277
|
+
laneRef,
|
|
5278
|
+
\u6A2A
|
|
5256
5279
|
)
|
|
5257
5280
|
);
|
|
5258
5281
|
y = (ys[0] + ys[ys.length - 1]) / 2;
|
|
@@ -5285,7 +5308,7 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5285
5308
|
const placed = /* @__PURE__ */ new Set();
|
|
5286
5309
|
brs.forEach((br, i) => {
|
|
5287
5310
|
const tone = br.tone ?? MIND_TONES[(toneBase + i) % MIND_TONES.length];
|
|
5288
|
-
placeSubtree(br, 0, isLeft, tone, placed, laneRef);
|
|
5311
|
+
placeSubtree(br, 0, isLeft, tone, placed, laneRef, \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id) ?? \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br));
|
|
5289
5312
|
});
|
|
5290
5313
|
};
|
|
5291
5314
|
placeSide(leftBranches, true, 0);
|
|
@@ -5296,7 +5319,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
5296
5319
|
let maxExtentX = rootW / 2;
|
|
5297
5320
|
let maxExtentY = rootH / 2;
|
|
5298
5321
|
for (const n of nodes) {
|
|
5299
|
-
|
|
5322
|
+
const [\u5DE6, \u53F3] = \u63CF\u304F\u6A2A\u306E\u7AEF(n);
|
|
5323
|
+
maxExtentX = Math.max(maxExtentX, Math.abs(\u5DE6 - cx), Math.abs(\u53F3 - cx));
|
|
5300
5324
|
maxExtentY = Math.max(maxExtentY, Math.abs(n.y - cy) + n.h / 2);
|
|
5301
5325
|
}
|
|
5302
5326
|
const scale = Math.min(1, drawableHalfW / maxExtentX, drawableHalfH / maxExtentY);
|