@cardenelabs/cdl 0.18.1 → 0.20.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/react.cjs CHANGED
@@ -800,6 +800,54 @@ function buildDiagramAltText(topic, phase) {
800
800
  else if (body) parts.push(body);
801
801
  return parts.join(" ");
802
802
  }
803
+ var \u6BB5\u306E\u4F4D\u7F6E = {
804
+ actor: { \u76EE\u5370: { y: 38, size: 18 }, \u540D\u524D: { y: 86, size: 32 }, \u8AAC\u660E: { y: 140, size: 20 } },
805
+ function: { \u76EE\u5370: { y: 38, size: 18 }, \u540D\u524D: { y: 86, size: 24 }, \u8AAC\u660E: { y: 126, size: 20 } },
806
+ event: { \u76EE\u5370: { y: 38, size: 18 }, \u540D\u524D: { y: 88, size: 26 }, \u8AAC\u660E: { y: 128, size: 21 } },
807
+ card: { \u76EE\u5370: { y: 38, size: 18 }, \u540D\u524D: { y: 86, size: 24 }, \u8AAC\u660E: { y: 124, size: 21 } },
808
+ storage: {
809
+ \u76EE\u5370: { y: 38, size: 18 },
810
+ \u540D\u524D: { y: STORAGE_TITLE_BASELINE, size: STORAGE_TITLE_FONT },
811
+ \u8AAC\u660E: { y: 118, size: 20 }
812
+ }
813
+ };
814
+ var \u6C4E\u7528\u306E\u6BB5 = {
815
+ \u76EE\u5370: { y: 32, size: 17 },
816
+ \u540D\u524D: { y: GENERIC_TITLE_TOP, size: GENERIC_TITLE_FONT },
817
+ \u8AAC\u660E: { y: 96, size: 17 }
818
+ };
819
+ function \u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(kind, hasRows) {
820
+ if (hasRows) return false;
821
+ if (kind === void 0) return false;
822
+ if (genericTextCentered(kind, false)) return false;
823
+ return kind in \u6BB5\u306E\u4F4D\u7F6E || rendersRows(kind);
824
+ }
825
+ function \u6BB5\u3092\u5F15\u304F(kind) {
826
+ const \u56FA\u6709 = \u6BB5\u306E\u4F4D\u7F6E[kind];
827
+ if (\u56FA\u6709) return \u56FA\u6709;
828
+ if (rendersRows(kind)) return \u6C4E\u7528\u306E\u6BB5;
829
+ return null;
830
+ }
831
+ function \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052(kind, hasRows = false) {
832
+ if (!\u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(kind, hasRows)) return 0;
833
+ const \u6BB5 = \u6BB5\u3092\u5F15\u304F(kind);
834
+ if (!\u6BB5) return 0;
835
+ const \u4E0A\u3052\u308B = \u6BB5.\u540D\u524D.y - \u6BB5.\u76EE\u5370.y + (\u6BB5.\u76EE\u5370.size - \u6BB5.\u540D\u524D.size) * GLYPH_CAP_RATIO;
836
+ return Math.max(0, Math.round(\u4E0A\u3052\u308B));
837
+ }
838
+ function \u8AAC\u660E\u306A\u3057\u3067\u7E2E\u3080\u91CF(kind, hasRows = false) {
839
+ if (!\u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(kind, hasRows)) return 0;
840
+ const \u6BB5 = \u6BB5\u3092\u5F15\u304F(kind);
841
+ if (!\u6BB5) return 0;
842
+ return Math.max(0, \u6BB5.\u8AAC\u660E.y - \u6BB5.\u540D\u524D.y);
843
+ }
844
+ function \u4E2D\u8EAB\u304B\u3089\u51FA\u3059\u9AD8\u3055(kind, \u6E80\u8F09h, \u4E2D\u8EAB) {
845
+ if (!\u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(kind, \u4E2D\u8EAB.hasRows)) return \u6E80\u8F09h;
846
+ if (\u4E2D\u8EAB.hasValue) return \u6E80\u8F09h;
847
+ const \u5F15\u304F = (\u4E2D\u8EAB.hasEyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052(kind)) + (\u4E2D\u8EAB.hasSubtitle ? 0 : \u8AAC\u660E\u306A\u3057\u3067\u7E2E\u3080\u91CF(kind));
848
+ return Math.max(MIN_BOX_H, \u6E80\u8F09h - \u5F15\u304F);
849
+ }
850
+ var MIN_BOX_H = 44;
803
851
 
804
852
  // src/layout/footer-shape.ts
805
853
  var SHAPE_DRAW_UP_EXTENT = {
@@ -1964,35 +2012,35 @@ var TOKENS = {
1964
2012
  contain_pad: 28,
1965
2013
  // node sizes (kind ごと、 unified row h は engine が max() で算出)
1966
2014
  node: {
1967
- actor: { w: 340, h: 200 },
1968
- function: { w: 380, h: 170 },
2015
+ actor: { w: 340, h: 165 },
2016
+ function: { w: 380, h: 151 },
1969
2017
  storage: { w: 400, h: 240 },
1970
- event: { w: 360, h: 200 },
2018
+ event: { w: 360, h: 156 },
1971
2019
  card: { w: 320, h: 150 },
1972
2020
  // 人系
1973
- person: { w: 280, h: 180 },
1974
- "user-group": { w: 320, h: 180 },
1975
- admin: { w: 280, h: 180 },
1976
- developer: { w: 280, h: 180 },
1977
- "external-user": { w: 300, h: 180 },
2021
+ person: { w: 280, h: 116 },
2022
+ "user-group": { w: 320, h: 116 },
2023
+ admin: { w: 280, h: 116 },
2024
+ developer: { w: 280, h: 116 },
2025
+ "external-user": { w: 300, h: 116 },
1978
2026
  // インフラ
1979
- database: { w: 320, h: 200 },
1980
- cache: { w: 280, h: 160 },
1981
- queue: { w: 340, h: 140 },
1982
- "message-bus": { w: 380, h: 140 },
2027
+ database: { w: 320, h: 172 },
2028
+ cache: { w: 280, h: 116 },
2029
+ queue: { w: 340, h: 116 },
2030
+ "message-bus": { w: 380, h: 116 },
1983
2031
  cloud: { w: 320, h: 180 },
1984
- cdn: { w: 320, h: 160 },
2032
+ cdn: { w: 320, h: 116 },
1985
2033
  // アプリ系
1986
- service: { w: 320, h: 180 },
1987
- api: { w: 320, h: 160 },
1988
- frontend: { w: 320, h: 180 },
1989
- backend: { w: 320, h: 180 },
1990
- webhook: { w: 320, h: 160 },
1991
- microservice: { w: 320, h: 180 },
2034
+ service: { w: 320, h: 116 },
2035
+ api: { w: 320, h: 116 },
2036
+ frontend: { w: 320, h: 116 },
2037
+ backend: { w: 320, h: 116 },
2038
+ webhook: { w: 320, h: 116 },
2039
+ microservice: { w: 320, h: 116 },
1992
2040
  // データ / 判定
1993
- signer: { w: 300, h: 180 },
1994
- oracle: { w: 320, h: 180 },
1995
- "merkle-tree": { w: 340, h: 220 },
2041
+ signer: { w: 300, h: 116 },
2042
+ oracle: { w: 320, h: 116 },
2043
+ "merkle-tree": { w: 340, h: 116 },
1996
2044
  decision: { w: 300, h: 180 },
1997
2045
  // Chart 系 (CAR-994 Phase A) ... 1 node に datum 配列を持ち、 kind 内で SVG geometry 描画。
1998
2046
  // 実際の w/h は preset chart() が w/h override で指定 (default fallback は preset 未指定時のみ)。
@@ -2269,7 +2317,7 @@ function layoutEdges(diag, nodes, lanes = []) {
2269
2317
  for (const p of list) parallelGroupedIds.add(p.e.id);
2270
2318
  }
2271
2319
  const distributedInParallel = /* @__PURE__ */ new Set();
2272
- const FAN_LABEL_GAP = 20;
2320
+ const FAN_LABEL_GAP = CLEARANCE_LABEL_LABEL;
2273
2321
  const computeEffectiveSides = (p) => {
2274
2322
  if (p.e.routing === "back-detour") {
2275
2323
  return { effFromSide: "top", effToSide: "top" };
@@ -2659,7 +2707,17 @@ function layoutEdges(diag, nodes, lanes = []) {
2659
2707
  const applyFanDispersion = (list, tracked) => {
2660
2708
  if (list.length < 2) return;
2661
2709
  const obstaclePatterns = new Set(list.map((r) => detectsBlockingObstacle(r.p)));
2662
- if (obstaclePatterns.size > 1) return;
2710
+ if (obstaclePatterns.size > 1) {
2711
+ const \u5F62\u3054\u3068 = /* @__PURE__ */ new Map();
2712
+ for (const r of list) {
2713
+ const \u5F62 = detectsBlockingObstacle(r.p);
2714
+ \u5F62\u3054\u3068.set(\u5F62, [...\u5F62\u3054\u3068.get(\u5F62) ?? [], r]);
2715
+ }
2716
+ for (const \u540C\u3058\u5F62 of \u5F62\u3054\u3068.values()) {
2717
+ if (\u540C\u3058\u5F62.length < list.length) applyFanDispersion(\u540C\u3058\u5F62, tracked);
2718
+ }
2719
+ return;
2720
+ }
2663
2721
  if (list.some((r) => r.e.overlay)) return;
2664
2722
  const items = list.map((r) => ({
2665
2723
  r,
@@ -3752,7 +3810,8 @@ function autoStorageHeight(n, defaultH) {
3752
3810
  if (n.h != null) return n.h;
3753
3811
  const \u5370\u3042\u308A = n.rowMarks !== void 0;
3754
3812
  const \u547C\u3073\u540D\u306E\u5206 = \u5370\u3042\u308A && n.subtitle ? SUBTITLE_ROW_SHIFT : 0;
3755
- if (!n.rows || n.rows.length === 0) return 150 + \u547C\u3073\u540D\u306E\u5206;
3813
+ const \u7E70\u308A\u4E0A\u3052 = n.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("storage");
3814
+ if (!n.rows || n.rows.length === 0) return 115 + \u547C\u3073\u540D\u306E\u5206 - \u7E70\u308A\u4E0A\u3052;
3756
3815
  const \u5FC5\u8981 = requiredRowsHeight("storage", n.rows.length) ?? defaultH;
3757
3816
  if (\u5370\u3042\u308A) return \u5FC5\u8981 + \u547C\u3073\u540D\u306E\u5206;
3758
3817
  return Math.max(defaultH, \u5FC5\u8981);
@@ -3763,6 +3822,16 @@ function autoRowsWidth(n, defaultW) {
3763
3822
  const required = requiredRowsWidth(n.rows, n.kind);
3764
3823
  return Math.max(defaultW, required);
3765
3824
  }
3825
+ function \u7BB1\u306E\u9AD8\u3055(n, \u65E2\u5B9Ah) {
3826
+ if (n.h != null) return n.h;
3827
+ if (n.kind === "storage") return autoStorageHeight(n, \u65E2\u5B9Ah);
3828
+ return \u4E2D\u8EAB\u304B\u3089\u51FA\u3059\u9AD8\u3055(n.kind, \u65E2\u5B9Ah, {
3829
+ hasEyebrow: Boolean(n.eyebrow),
3830
+ hasSubtitle: Boolean(n.subtitle),
3831
+ hasValue: Boolean(n.value),
3832
+ hasRows: (n.rows?.length ?? 0) > 0
3833
+ });
3834
+ }
3766
3835
  function requiredStackGapForEdgeLabels(diag, allStacks) {
3767
3836
  const byId = new Map(diag.nodes.map((n) => [n.id, n]));
3768
3837
  const rankOf = new Map(allStacks.map((stack, i) => [stack, i]));
@@ -3792,7 +3861,7 @@ function layoutNodes(diag, lanes) {
3792
3861
  const rowH = /* @__PURE__ */ new Map();
3793
3862
  for (const stack of allStacks) {
3794
3863
  const nodesAtStack = diag.nodes.filter((n) => n.stack === stack);
3795
- const h = Math.max(...nodesAtStack.map((n) => autoStorageHeight(n, NODE_SIZE[n.kind].h)));
3864
+ const h = Math.max(...nodesAtStack.map((n) => \u7BB1\u306E\u9AD8\u3055(n, NODE_SIZE[n.kind].h)));
3796
3865
  rowH.set(stack, h);
3797
3866
  }
3798
3867
  const rowCy = /* @__PURE__ */ new Map();
@@ -3845,8 +3914,8 @@ function layoutNodes(diag, lanes) {
3845
3914
  const cx = lane.x + lane.width / 2;
3846
3915
  const \u6BB5\u306E\u82AF = rowCy.get(n.stack);
3847
3916
  const \u6BB5\u306E\u9AD8\u3055 = rowH.get(n.stack);
3848
- const \u81EA\u524D\u306E\u9AD8\u3055 = n.rowMarks !== void 0;
3849
- const h = n.h ?? (\u81EA\u524D\u306E\u9AD8\u3055 ? autoStorageHeight(n, size.h) : \u6BB5\u306E\u9AD8\u3055);
3917
+ const \u81EA\u524D\u306E\u9AD8\u3055 = n.rowMarks !== void 0 || \u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(n.kind, (n.rows?.length ?? 0) > 0);
3918
+ const h = n.h ?? (\u81EA\u524D\u306E\u9AD8\u3055 ? \u7BB1\u306E\u9AD8\u3055(n, size.h) : \u6BB5\u306E\u9AD8\u3055);
3850
3919
  const cy = \u6BB5\u306E\u82AF;
3851
3920
  const w = autoRowsWidth(n, size.w);
3852
3921
  out.push({
@@ -5887,7 +5956,8 @@ function ActorNode({ node, active, value }) {
5887
5956
  const accent = nodeAccent(node, "var(--cdl-tone-accent, #2d6a8f)");
5888
5957
  const x = node.cx - node.w / 2;
5889
5958
  const y = node.cy - node.h / 2;
5890
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 86, size: 32 }, { hasEyebrow: Boolean(node.eyebrow) });
5959
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("actor");
5960
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u7E70\u308A\u4E0A\u3052, size: 32 }, { hasEyebrow: Boolean(node.eyebrow) });
5891
5961
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, children: [
5892
5962
  /* @__PURE__ */ jsxRuntime.jsx(
5893
5963
  "rect",
@@ -5922,13 +5992,13 @@ function ActorNode({ node, active, value }) {
5922
5992
  {
5923
5993
  "data-cdl-role": "node-row-divider",
5924
5994
  x1: 26,
5925
- y1: 110,
5995
+ y1: 110 - \u7E70\u308A\u4E0A\u3052,
5926
5996
  x2: node.w - 26,
5927
- y2: 110,
5997
+ y2: 110 - \u7E70\u308A\u4E0A\u3052,
5928
5998
  stroke: "var(--cdl-row-divider, #7e848e)"
5929
5999
  }
5930
6000
  ),
5931
- node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 140, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
6001
+ node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 140 - \u7E70\u308A\u4E0A\u3052, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
5932
6002
  value && /* @__PURE__ */ jsxRuntime.jsx(
5933
6003
  "text",
5934
6004
  {
@@ -5953,7 +6023,8 @@ function CardNode({ node, active }) {
5953
6023
  }
5954
6024
  const compact = isCompactBox(node.h);
5955
6025
  const \u5C0F\u578B\u306B\u547C\u3073\u540D = compact && Boolean(node.subtitle);
5956
- const titleY = compact ? \u5C0F\u578B\u306B\u547C\u3073\u540D ? node.h / 2 - 2 : node.h / 2 + 8 : 86;
6026
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("card");
6027
+ const titleY = compact ? \u5C0F\u578B\u306B\u547C\u3073\u540D ? node.h / 2 - 2 : node.h / 2 + 8 : 86 - \u7E70\u308A\u4E0A\u3052;
5957
6028
  const titleX = compact ? node.w / 2 : 26;
5958
6029
  const paddingX = compact ? 16 : 52;
5959
6030
  const availableW = node.w - paddingX;
@@ -5990,7 +6061,7 @@ function CardNode({ node, active }) {
5990
6061
  children: node.title
5991
6062
  }
5992
6063
  ),
5993
- !compact && node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 124, fontSize: subtitleSize, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
6064
+ !compact && node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 124 - \u7E70\u308A\u4E0A\u3052, fontSize: subtitleSize, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
5994
6065
  \u5C0F\u578B\u306B\u547C\u3073\u540D && /* @__PURE__ */ jsxRuntime.jsx(
5995
6066
  "text",
5996
6067
  {
@@ -6251,7 +6322,8 @@ function EventNode({
6251
6322
  const accent = nodeAccent(node, "var(--cdl-tone-success, #4ea36a)");
6252
6323
  const x = node.cx - node.w / 2;
6253
6324
  const y = node.cy - node.h / 2;
6254
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 88, size: 26 }, { hasEyebrow: Boolean(node.eyebrow) });
6325
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("event");
6326
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 88 - \u7E70\u308A\u4E0A\u3052, size: 26 }, { hasEyebrow: Boolean(node.eyebrow) });
6255
6327
  const scale = active ? 0.78 + 0.22 * progress : 0.92;
6256
6328
  const opacity = active ? 0.5 + 0.5 * progress : 0.65;
6257
6329
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -6293,7 +6365,7 @@ function EventNode({
6293
6365
  "text",
6294
6366
  {
6295
6367
  x: 26,
6296
- y: 128,
6368
+ y: 128 - \u7E70\u308A\u4E0A\u3052,
6297
6369
  fontSize: 21,
6298
6370
  fill: "var(--cdl-text-dim, #5a6270)",
6299
6371
  style: { fontFamily: "'JetBrains Mono', monospace" },
@@ -6309,7 +6381,8 @@ function FunctionNode({ node, active }) {
6309
6381
  const stroke = nodeAccent(node, active ? "var(--cdl-tone-accent, #2d6a8f)" : "var(--cdl-tone-teal, #2f8770)");
6310
6382
  const x = node.cx - node.w / 2;
6311
6383
  const y = node.cy - node.h / 2;
6312
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 86, size: 24 }, { hasEyebrow: Boolean(node.eyebrow) });
6384
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("function");
6385
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u7E70\u308A\u4E0A\u3052, size: 24 }, { hasEyebrow: Boolean(node.eyebrow) });
6313
6386
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, children: [
6314
6387
  /* @__PURE__ */ jsxRuntime.jsx(
6315
6388
  "rect",
@@ -6341,7 +6414,7 @@ function FunctionNode({ node, active }) {
6341
6414
  children: node.title
6342
6415
  }
6343
6416
  ),
6344
- node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 126, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
6417
+ node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 126 - \u7E70\u308A\u4E0A\u3052, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
6345
6418
  ] });
6346
6419
  }
6347
6420
  var ROW_GLYPH_HALF = 7;
@@ -6376,7 +6449,8 @@ function StorageNode({
6376
6449
  const accent = nodeAccent(node, "var(--cdl-tone-accent, #2d6a8f)");
6377
6450
  const x = node.cx - node.w / 2;
6378
6451
  const y = node.cy - node.h / 2;
6379
- const \u540D\u524D = titlePlacement(node, { x: 26, y: STORAGE_TITLE_BASELINE, size: STORAGE_TITLE_FONT }, { hasEyebrow: Boolean(node.eyebrow) });
6452
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow || rows.length > 0 ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("storage");
6453
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: STORAGE_TITLE_BASELINE - \u7E70\u308A\u4E0A\u3052, size: STORAGE_TITLE_FONT }, { hasEyebrow: Boolean(node.eyebrow) });
6380
6454
  const splits = rows.map((r) => splitRow(r));
6381
6455
  const leftMaxWidth = splits.reduce((m, s) => Math.max(m, displayWidth(s.left)), 0);
6382
6456
  const rightColX = ROW_PAD_X_PX + leftMaxWidth * STORAGE_CHAR_ADVANCE_PX + STORAGE_COL_GAP_PX;
@@ -6413,7 +6487,7 @@ function StorageNode({
6413
6487
  {
6414
6488
  "data-cdl-role": "node-subtitle",
6415
6489
  x: ROW_PAD_X_PX,
6416
- y: SUBTITLE_BASELINE,
6490
+ y: SUBTITLE_BASELINE - \u7E70\u308A\u4E0A\u3052,
6417
6491
  fontSize: SUBTITLE_FONT,
6418
6492
  fill: "var(--cdl-text-dim, #5a6270)",
6419
6493
  children: node.subtitle
@@ -6731,9 +6805,10 @@ function GenericNode({
6731
6805
  const textAnchor = centered ? "middle" : "start";
6732
6806
  const textX = centered ? w / 2 : 20;
6733
6807
  const cylinderShift = genericTextShift(node.kind);
6808
+ const \u7E70\u308A\u4E0A\u3052 = node.eyebrow || centered ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052(node.kind, hasRows);
6734
6809
  const eyebrowY = centered ? h / 2 - 26 : 32 + cylinderShift;
6735
- const titleY = genericTitleBaselineY(node.kind, h, hasRows);
6736
- const subtitleY = centered ? h / 2 + 28 : 96 + cylinderShift;
6810
+ const titleY = genericTitleBaselineY(node.kind, h, hasRows) - \u7E70\u308A\u4E0A\u3052;
6811
+ const subtitleY = centered ? h / 2 + 28 : 96 + cylinderShift - \u7E70\u308A\u4E0A\u3052;
6737
6812
  const iconX = centered ? w / 2 + 40 : w - 48;
6738
6813
  const iconY = centered ? h / 2 - 44 : 18 + cylinderShift;
6739
6814
  const dominantBaseline = centered ? "middle" : void 0;
@@ -8770,10 +8845,10 @@ function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
8770
8845
  if (typeof \u533A\u5207\u308A !== "function") return [...text];
8771
8846
  return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
8772
8847
  }
8773
- function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u3055) {
8848
+ function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30552) {
8774
8849
  const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
8775
8850
  if (\u5019\u88DC.length === 0) return [];
8776
- const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u3055 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
8851
+ const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30552 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
8777
8852
  const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
8778
8853
  const \u6B8B\u3059 = [...\u5019\u88DC];
8779
8854
  while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
@@ -9400,7 +9475,7 @@ function QuadrantNode({
9400
9475
  function \u7BB1\u306E\u6587\u5B57({
9401
9476
  \u884C,
9402
9477
  x,
9403
- \u7BB1\u306E\u9AD8\u3055,
9478
+ \u7BB1\u306E\u9AD8\u3055: \u7BB1\u306E\u9AD8\u30552,
9404
9479
  fill,
9405
9480
  \u540D\u524D\u306E\u592A\u3055
9406
9481
  }) {
@@ -9409,7 +9484,7 @@ function \u7BB1\u306E\u6587\u5B57({
9409
9484
  {
9410
9485
  "data-cdl-role": r.\u5F79\u5272 === "subtitle" ? "tree-node-subtitle" : void 0,
9411
9486
  x,
9412
- y: \u7BB1\u306E\u9AD8\u3055 / 2 + r.dy,
9487
+ y: \u7BB1\u306E\u9AD8\u30552 / 2 + r.dy,
9413
9488
  fontSize: r.fontSize,
9414
9489
  fontWeight: r.\u5F79\u5272 === "title" ? \u540D\u524D\u306E\u592A\u3055 : 500,
9415
9490
  textAnchor: "middle",