@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/dist/index.js CHANGED
@@ -16139,7 +16139,7 @@ function \u63CF\u304F\u6A2A\u306E\u7AEF(n) {
16139
16139
  if (n.isRoot || !n.isLeaf) return [n.x - n.w / 2, n.x + n.w / 2];
16140
16140
  const \u8D77\u70B9 = n.x + (n.side === "right" ? -n.w / 2 : n.w / 2);
16141
16141
  const \u540D\u524D = \u653E\u5C04\u306E\u884C(n)[0];
16142
- const \u5E45 = measureTextWidth(\u540D\u524D.text, { fontSize: \u540D\u524D.fontSize});
16142
+ const \u5E45 = textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
16143
16143
  return n.side === "right" ? [\u8D77\u70B9, \u8D77\u70B9 + \u5E45] : [\u8D77\u70B9 - \u5E45, \u8D77\u70B9];
16144
16144
  }
16145
16145
  function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
@@ -16212,38 +16212,52 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
16212
16212
  if (kids.length === 0) return 1;
16213
16213
  return kids.reduce((sum, k) => sum + leafCountOf(k.id, seen), 0);
16214
16214
  };
16215
- const maxSubDepth = firstLevel.length > 0 ? Math.max(0, ...firstLevel.map((br) => subDepthOf(br.id, /* @__PURE__ */ new Set()))) : 0;
16215
+ const leftBranches = firstLevel.slice(0, leftCount);
16216
+ const rightBranches = firstLevel.slice(leftCount);
16216
16217
  const minLayer1XOffset = rootW / 2 + branchW / 2 + MIND_BOX_GAP;
16217
16218
  const preferredSubDx = subBranchW + 20;
16218
- const reserve = maxSubDepth > 0 ? branchW / 2 + maxSubDepth * preferredSubDx : 0;
16219
- const maxLayer1XOffset = Math.max(minLayer1XOffset, canvasW / 2 - reserve);
16220
- const \u8449\u306E\u540D\u524D\u306E\u6700\u5927\u5E45 = Math.max(
16221
- 0,
16222
- ...firstLevel.filter((br) => (childrenOf.get(br.id) ?? []).length === 0).map((br) => {
16223
- const \u540D\u524D = \u653E\u5C04\u306E\u884C({ title: br.title, isRoot: false })[0];
16224
- return measureTextWidth(\u540D\u524D.text, { fontSize: \u540D\u524D.fontSize});
16225
- })
16226
- );
16227
- const \u540D\u524D\u3067\u6C7A\u307E\u308B\u4E0A\u9650 = canvasW / 2 + branchW / 2 - \u8449\u306E\u540D\u524D\u306E\u6700\u5927\u5E45;
16228
- const layer1XOffset = Math.max(minLayer1XOffset, Math.min(\u540D\u524D\u3067\u6C7A\u307E\u308B\u4E0A\u9650, maxLayer1XOffset));
16229
- const room = canvasW / 2 - layer1XOffset;
16230
16219
  const MIN_SUB_W = 56;
16231
16220
  const PREFERRED_GAP = MIND_BOX_GAP;
16232
- const gapRoom = maxSubDepth > 0 ? (room - branchW / 2 - maxSubDepth * MIN_SUB_W) / maxSubDepth : 0;
16233
- const gap = Math.max(8, Math.min(PREFERRED_GAP, gapRoom));
16234
- const effSubW = maxSubDepth > 0 ? Math.max(1, Math.min(subBranchW, (room - branchW / 2 - maxSubDepth * gap) / maxSubDepth)) : subBranchW;
16235
- const step1 = (branchW + effSubW) / 2 + gap;
16236
- const stepN = effSubW + gap;
16237
- const subOffset = (subDepth) => subDepth <= 0 ? 0 : step1 + (subDepth - 1) * stepN;
16238
- const leftBranches = firstLevel.slice(0, leftCount);
16239
- const rightBranches = firstLevel.slice(leftCount);
16221
+ const \u679D\u306E\u540D\u524D\u306E\u5E45 = (title) => {
16222
+ const \u540D\u524D = \u653E\u5C04\u306E\u884C({ title, isRoot: false })[0];
16223
+ return textWidth(\u540D\u524D.text, \u540D\u524D.fontSize);
16224
+ };
16225
+ const \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B = (br) => {
16226
+ const maxSubDepth = subDepthOf(br.id, /* @__PURE__ */ new Set());
16227
+ const \u4E0A\u9650 = maxSubDepth > 0 ? canvasW / 2 - (branchW / 2 + maxSubDepth * preferredSubDx) : canvasW / 2 + branchW / 2 - \u679D\u306E\u540D\u524D\u306E\u5E45(br.title);
16228
+ const layer1XOffset = Math.floor(Math.max(minLayer1XOffset, \u4E0A\u9650));
16229
+ const room = canvasW / 2 - layer1XOffset;
16230
+ const gapRoom = maxSubDepth > 0 ? (room - branchW / 2 - maxSubDepth * MIN_SUB_W) / maxSubDepth : 0;
16231
+ const gap = Math.floor(Math.max(8, Math.min(PREFERRED_GAP, gapRoom)));
16232
+ const effSubW = maxSubDepth > 0 ? Math.floor(
16233
+ Math.max(1, Math.min(subBranchW, (room - branchW / 2 - maxSubDepth * gap) / maxSubDepth))
16234
+ ) : subBranchW;
16235
+ const step1 = (branchW + effSubW) / 2 + gap;
16236
+ const stepN = effSubW + gap;
16237
+ return {
16238
+ layer1XOffset,
16239
+ effSubW,
16240
+ subOffset: (subDepth) => subDepth <= 0 ? 0 : step1 + (subDepth - 1) * stepN
16241
+ };
16242
+ };
16243
+ const \u6A2A\u306E\u5272\u4ED8\u8868 = new Map(
16244
+ firstLevel.map((br) => [br.id, \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br)])
16245
+ );
16246
+ const \u4E00\u756A\u5185\u5074\u306E\u96E2\u308C = Math.min(
16247
+ ...firstLevel.length > 0 ? firstLevel.map((br) => \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id).layer1XOffset) : [minLayer1XOffset]
16248
+ );
16240
16249
  const leavesOfSide = (brs) => Math.max(
16241
16250
  1,
16242
16251
  brs.reduce((sum, br) => sum + leafCountOf(br.id, /* @__PURE__ */ new Set()), 0)
16243
16252
  );
16244
16253
  const sideLaneCount = Math.max(leavesOfSide(leftBranches), leavesOfSide(rightBranches));
16245
16254
  const laneBandH = Math.max(0, canvasH - BRANCH_BOX_H_MAX);
16246
- const rowGap = sideLaneCount > 1 ? Math.min(laneBandH / (sideLaneCount - 1), \u7E26\u306E\u9593\u9694\u306E\u4E0A\u9650(layer1XOffset)) : subBranchH + 14;
16255
+ const rowGap = sideLaneCount > 1 ? Math.min(
16256
+ laneBandH / (sideLaneCount - 1),
16257
+ // 帯は図で 1 つなので、**一番内側の枝** から上限を取る (#966)。
16258
+ // 外へ出た枝に合わせると、内側に残った枝の傾きが 45 度を超える
16259
+ \u7E26\u306E\u9593\u9694\u306E\u4E0A\u9650(\u4E00\u756A\u5185\u5074\u306E\u96E2\u308C)
16260
+ ) : subBranchH + 14;
16247
16261
  const effSubH = Math.min(SUB_BOX_H_MAX, rowGap * 0.7);
16248
16262
  const effBranchH = Math.min(BRANCH_BOX_H_MAX, rowGap * 0.7);
16249
16263
  const \u7AEF\u306E\u4F59\u308A = Math.max(effSubH, effBranchH) / 2;
@@ -16259,11 +16273,11 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
16259
16273
  const half = nodeHalfW.get(mindData.rootId) ?? rootW / 2;
16260
16274
  return \u4E2D\u5FC3\u306Ex + (isLeft ? -half : half);
16261
16275
  };
16262
- const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef) => {
16276
+ const placeSubtree = (node, subDepth, isLeft, tone, placed, laneRef, \u6A2A) => {
16263
16277
  placed.add(node.id);
16264
16278
  const dirX = isLeft ? -1 : 1;
16265
- const x = cx + dirX * (layer1XOffset + subOffset(subDepth));
16266
- const w = subDepth === 0 ? branchW : effSubW;
16279
+ const x = cx + dirX * (\u6A2A.layer1XOffset + \u6A2A.subOffset(subDepth));
16280
+ const w = subDepth === 0 ? branchW : \u6A2A.effSubW;
16267
16281
  const h = subDepth === 0 ? effBranchH : effSubH;
16268
16282
  const myTone = node.tone ?? tone;
16269
16283
  const kids = (childrenOf.get(node.id) ?? []).filter((k) => !placed.has(k.id));
@@ -16279,7 +16293,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
16279
16293
  isLeft,
16280
16294
  myTone ?? MIND_TONES[i % MIND_TONES.length],
16281
16295
  placed,
16282
- laneRef
16296
+ laneRef,
16297
+ \u6A2A
16283
16298
  )
16284
16299
  );
16285
16300
  y = (ys[0] + ys[ys.length - 1]) / 2;
@@ -16312,7 +16327,7 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
16312
16327
  const placed = /* @__PURE__ */ new Set();
16313
16328
  brs.forEach((br, i) => {
16314
16329
  const tone = br.tone ?? MIND_TONES[(toneBase + i) % MIND_TONES.length];
16315
- placeSubtree(br, 0, isLeft, tone, placed, laneRef);
16330
+ placeSubtree(br, 0, isLeft, tone, placed, laneRef, \u6A2A\u306E\u5272\u4ED8\u8868.get(br.id) ?? \u679D\u306E\u6A2A\u3092\u6C7A\u3081\u308B(br));
16316
16331
  });
16317
16332
  };
16318
16333
  placeSide(leftBranches, true, 0);