@cardenelabs/cdl 0.21.1 → 0.22.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
@@ -848,6 +848,25 @@ function \u4E2D\u8EAB\u304B\u3089\u51FA\u3059\u9AD8\u3055(kind, \u6E80\u8F09h, \
848
848
  return Math.max(MIN_BOX_H, \u6E80\u8F09h - \u5F15\u304F);
849
849
  }
850
850
  var MIN_BOX_H = 44;
851
+ var CLOUD_CIRCLES = [
852
+ { cx: -0.8, cy: -0.05 + 0.08, r: 0.32 },
853
+ { cx: -0.4, cy: -0.05 - 0.05, r: 0.4 },
854
+ { cx: 0, cy: -0.05 - 0.1, r: 0.46 },
855
+ { cx: 0.4, cy: -0.05 - 0.05, r: 0.4 },
856
+ { cx: 0.8, cy: -0.05 + 0.08, r: 0.32 }
857
+ ];
858
+ var CLOUD_ART_CENTER_RISE = (() => {
859
+ const \u4E0A = Math.min(...CLOUD_CIRCLES.map((c) => c.cy - c.r));
860
+ const \u4E0B = Math.max(...CLOUD_CIRCLES.map((c) => c.cy + c.r));
861
+ return -(\u4E0A + \u4E0B) / 2;
862
+ })();
863
+ function \u4F59\u308A\u3092\u5206\u3051\u308B(kind, \u6E80\u8F09h, \u5B9F\u969B\u306Eh, \u4E2D\u8EAB) {
864
+ if (!\u6BB5\u3092\u7A4D\u3080\u7BB1\u304B(kind, \u4E2D\u8EAB.hasRows)) return 0;
865
+ if (\u4E2D\u8EAB.hasValue) return 0;
866
+ const \u8981\u308B\u9AD8\u3055 = \u4E2D\u8EAB\u304B\u3089\u51FA\u3059\u9AD8\u3055(kind, \u6E80\u8F09h, \u4E2D\u8EAB);
867
+ const \u4F59\u308A = \u5B9F\u969B\u306Eh - \u8981\u308B\u9AD8\u3055;
868
+ return \u4F59\u308A > 0 ? Math.round(\u4F59\u308A / 2) : 0;
869
+ }
851
870
 
852
871
  // src/layout/footer-shape.ts
853
872
  var SHAPE_DRAW_UP_EXTENT = {
@@ -6059,7 +6078,14 @@ function ActorNode({ node, active, value }) {
6059
6078
  const x = node.cx - node.w / 2;
6060
6079
  const y = node.cy - node.h / 2;
6061
6080
  const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("actor");
6062
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u7E70\u308A\u4E0A\u3052, size: 32 }, { hasEyebrow: Boolean(node.eyebrow) });
6081
+ const \u4F59\u308A = \u4F59\u308A\u3092\u5206\u3051\u308B("actor", NODE_SIZE.actor.h, node.h, {
6082
+ hasEyebrow: Boolean(node.eyebrow),
6083
+ hasSubtitle: Boolean(node.subtitle),
6084
+ hasValue: Boolean(value),
6085
+ hasRows: false
6086
+ });
6087
+ const \u305A\u3089\u3057 = \u7E70\u308A\u4E0A\u3052 - \u4F59\u308A;
6088
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u305A\u3089\u3057, size: 32 }, { hasEyebrow: Boolean(node.eyebrow) });
6063
6089
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, children: [
6064
6090
  /* @__PURE__ */ jsxRuntime.jsx(
6065
6091
  "rect",
@@ -6075,7 +6101,7 @@ function ActorNode({ node, active, value }) {
6075
6101
  strokeWidth: active ? 3 : 1.25
6076
6102
  }
6077
6103
  ),
6078
- node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6104
+ node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38 - \u4F59\u308A, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6079
6105
  /* @__PURE__ */ jsxRuntime.jsx(
6080
6106
  "text",
6081
6107
  {
@@ -6094,13 +6120,13 @@ function ActorNode({ node, active, value }) {
6094
6120
  {
6095
6121
  "data-cdl-role": "node-row-divider",
6096
6122
  x1: 26,
6097
- y1: 110 - \u7E70\u308A\u4E0A\u3052,
6123
+ y1: 110 - \u305A\u3089\u3057,
6098
6124
  x2: node.w - 26,
6099
- y2: 110 - \u7E70\u308A\u4E0A\u3052,
6125
+ y2: 110 - \u305A\u3089\u3057,
6100
6126
  stroke: "var(--cdl-row-divider, #7e848e)"
6101
6127
  }
6102
6128
  ),
6103
- 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 }),
6129
+ node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 140 - \u305A\u3089\u3057, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
6104
6130
  value && /* @__PURE__ */ jsxRuntime.jsx(
6105
6131
  "text",
6106
6132
  {
@@ -6126,7 +6152,14 @@ function CardNode({ node, active }) {
6126
6152
  const compact = isCompactBox(node.h);
6127
6153
  const \u5C0F\u578B\u306B\u547C\u3073\u540D = compact && Boolean(node.subtitle);
6128
6154
  const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("card");
6129
- const titleY = compact ? \u5C0F\u578B\u306B\u547C\u3073\u540D ? node.h / 2 - 2 : node.h / 2 + 8 : 86 - \u7E70\u308A\u4E0A\u3052;
6155
+ const \u4F59\u308A = compact ? 0 : \u4F59\u308A\u3092\u5206\u3051\u308B("card", NODE_SIZE.card.h, node.h, {
6156
+ hasEyebrow: Boolean(node.eyebrow),
6157
+ hasSubtitle: Boolean(node.subtitle),
6158
+ hasValue: false,
6159
+ hasRows: false
6160
+ });
6161
+ const \u305A\u3089\u3057 = \u7E70\u308A\u4E0A\u3052 - \u4F59\u308A;
6162
+ const titleY = compact ? \u5C0F\u578B\u306B\u547C\u3073\u540D ? node.h / 2 - 2 : node.h / 2 + 8 : 86 - \u305A\u3089\u3057;
6130
6163
  const titleX = compact ? node.w / 2 : 26;
6131
6164
  const paddingX = compact ? 16 : 52;
6132
6165
  const availableW = node.w - paddingX;
@@ -6149,7 +6182,7 @@ function CardNode({ node, active }) {
6149
6182
  strokeWidth: active ? 3 : 1.25
6150
6183
  }
6151
6184
  ),
6152
- !compact && node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6185
+ !compact && node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38 - \u4F59\u308A, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6153
6186
  /* @__PURE__ */ jsxRuntime.jsx(
6154
6187
  "text",
6155
6188
  {
@@ -6163,7 +6196,7 @@ function CardNode({ node, active }) {
6163
6196
  children: node.title
6164
6197
  }
6165
6198
  ),
6166
- !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 }),
6199
+ !compact && node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 124 - \u305A\u3089\u3057, fontSize: subtitleSize, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle }),
6167
6200
  \u5C0F\u578B\u306B\u547C\u3073\u540D && /* @__PURE__ */ jsxRuntime.jsx(
6168
6201
  "text",
6169
6202
  {
@@ -6425,7 +6458,14 @@ function EventNode({
6425
6458
  const x = node.cx - node.w / 2;
6426
6459
  const y = node.cy - node.h / 2;
6427
6460
  const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("event");
6428
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 88 - \u7E70\u308A\u4E0A\u3052, size: 26 }, { hasEyebrow: Boolean(node.eyebrow) });
6461
+ const \u4F59\u308A = \u4F59\u308A\u3092\u5206\u3051\u308B("event", NODE_SIZE.event.h, node.h, {
6462
+ hasEyebrow: Boolean(node.eyebrow),
6463
+ hasSubtitle: Boolean(node.subtitle),
6464
+ hasValue: false,
6465
+ hasRows: false
6466
+ });
6467
+ const \u305A\u3089\u3057 = \u7E70\u308A\u4E0A\u3052 - \u4F59\u308A;
6468
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 88 - \u305A\u3089\u3057, size: 26 }, { hasEyebrow: Boolean(node.eyebrow) });
6429
6469
  const scale = active ? 0.78 + 0.22 * progress : 0.92;
6430
6470
  const opacity = active ? 0.5 + 0.5 * progress : 0.65;
6431
6471
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -6448,7 +6488,7 @@ function EventNode({
6448
6488
  strokeWidth: active ? 3 : 1.25
6449
6489
  }
6450
6490
  ),
6451
- node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6491
+ node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38 - \u4F59\u308A, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6452
6492
  /* @__PURE__ */ jsxRuntime.jsx(
6453
6493
  "text",
6454
6494
  {
@@ -6467,7 +6507,7 @@ function EventNode({
6467
6507
  "text",
6468
6508
  {
6469
6509
  x: 26,
6470
- y: 128 - \u7E70\u308A\u4E0A\u3052,
6510
+ y: 128 - \u305A\u3089\u3057,
6471
6511
  fontSize: 21,
6472
6512
  fill: "var(--cdl-text-dim, #5a6270)",
6473
6513
  style: { fontFamily: "'JetBrains Mono', monospace" },
@@ -6484,7 +6524,14 @@ function FunctionNode({ node, active }) {
6484
6524
  const x = node.cx - node.w / 2;
6485
6525
  const y = node.cy - node.h / 2;
6486
6526
  const \u7E70\u308A\u4E0A\u3052 = node.eyebrow ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052("function");
6487
- const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u7E70\u308A\u4E0A\u3052, size: 24 }, { hasEyebrow: Boolean(node.eyebrow) });
6527
+ const \u4F59\u308A = \u4F59\u308A\u3092\u5206\u3051\u308B("function", NODE_SIZE.function.h, node.h, {
6528
+ hasEyebrow: Boolean(node.eyebrow),
6529
+ hasSubtitle: Boolean(node.subtitle),
6530
+ hasValue: false,
6531
+ hasRows: false
6532
+ });
6533
+ const \u305A\u3089\u3057 = \u7E70\u308A\u4E0A\u3052 - \u4F59\u308A;
6534
+ const \u540D\u524D = titlePlacement(node, { x: 26, y: 86 - \u305A\u3089\u3057, size: 24 }, { hasEyebrow: Boolean(node.eyebrow) });
6488
6535
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, children: [
6489
6536
  /* @__PURE__ */ jsxRuntime.jsx(
6490
6537
  "rect",
@@ -6501,7 +6548,7 @@ function FunctionNode({ node, active }) {
6501
6548
  strokeOpacity: active ? 1 : 0.5
6502
6549
  }
6503
6550
  ),
6504
- node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6551
+ node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 38 - \u4F59\u308A, fontSize: 18, fontWeight: 700, letterSpacing: 2, fill: accent, children: node.eyebrow }),
6505
6552
  /* @__PURE__ */ jsxRuntime.jsx(
6506
6553
  "text",
6507
6554
  {
@@ -6516,7 +6563,7 @@ function FunctionNode({ node, active }) {
6516
6563
  children: node.title
6517
6564
  }
6518
6565
  ),
6519
- 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 })
6566
+ node.subtitle && /* @__PURE__ */ jsxRuntime.jsx("text", { x: 26, y: 126 - \u305A\u3089\u3057, fontSize: 20, fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
6520
6567
  ] });
6521
6568
  }
6522
6569
  var ROW_GLYPH_HALF = 7;
@@ -6855,21 +6902,12 @@ function GenericNode({
6855
6902
  if (shape === "cloud") {
6856
6903
  const cx = w / 2;
6857
6904
  const cy = h / 2;
6858
- const cloudCenterY = cy - h * 0.05;
6859
- const usableW = w * 0.85;
6860
- const halfW = usableW / 2;
6861
- const circles = [
6862
- { cx: cx - halfW * 0.8, cy: cloudCenterY + h * 0.08, r: h * 0.32 },
6863
- // 左端
6864
- { cx: cx - halfW * 0.4, cy: cloudCenterY - h * 0.05, r: h * 0.4 },
6865
- // 左
6866
- { cx, cy: cloudCenterY - h * 0.1, r: h * 0.46 },
6867
- // 中央 (最大)
6868
- { cx: cx + halfW * 0.4, cy: cloudCenterY - h * 0.05, r: h * 0.4 },
6869
- // 右
6870
- { cx: cx + halfW * 0.8, cy: cloudCenterY + h * 0.08, r: h * 0.32 }
6871
- // 右端
6872
- ];
6905
+ const halfW = w * 0.85 / 2;
6906
+ const circles = CLOUD_CIRCLES.map((c) => ({
6907
+ cx: cx + halfW * c.cx,
6908
+ cy: cy + h * c.cy,
6909
+ r: h * c.r
6910
+ }));
6873
6911
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
6874
6912
  circles.map((c, i) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: c.cx, cy: c.cy, r: c.r, fill: "var(--cdl-node-fill, #ffffff)" }, `fill-${i}`)),
6875
6913
  circles.map((c, i) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -6908,11 +6946,19 @@ function GenericNode({
6908
6946
  const textX = centered ? w / 2 : 20;
6909
6947
  const cylinderShift = genericTextShift(node.kind);
6910
6948
  const \u7E70\u308A\u4E0A\u3052 = node.eyebrow || centered ? 0 : \u76EE\u5370\u306A\u3057\u306E\u7E70\u308A\u4E0A\u3052(node.kind, hasRows);
6911
- const eyebrowY = centered ? h / 2 - 26 : 32 + cylinderShift;
6912
- const titleY = genericTitleBaselineY(node.kind, h, hasRows) - \u7E70\u308A\u4E0A\u3052;
6913
- const subtitleY = centered ? h / 2 + 28 : 96 + cylinderShift - \u7E70\u308A\u4E0A\u3052;
6949
+ const \u4F59\u308A = centered ? 0 : \u4F59\u308A\u3092\u5206\u3051\u308B(node.kind, NODE_SIZE[node.kind]?.h ?? h, h, {
6950
+ hasEyebrow: Boolean(node.eyebrow),
6951
+ hasSubtitle: Boolean(node.subtitle),
6952
+ hasValue: Boolean(resolvedValue),
6953
+ hasRows
6954
+ });
6955
+ const \u305A\u3089\u3057 = \u7E70\u308A\u4E0A\u3052 - \u4F59\u308A;
6956
+ const \u7D75\u306E\u82AF = centered && STYLES[node.kind]?.shape === "cloud" ? h * CLOUD_ART_CENTER_RISE : 0;
6957
+ const eyebrowY = centered ? h / 2 - 26 - \u7D75\u306E\u82AF : 32 + cylinderShift + \u4F59\u308A;
6958
+ const titleY = genericTitleBaselineY(node.kind, h, hasRows) - \u305A\u3089\u3057 - \u7D75\u306E\u82AF;
6959
+ const subtitleY = centered ? h / 2 + 28 - \u7D75\u306E\u82AF : 96 + cylinderShift - \u305A\u3089\u3057;
6914
6960
  const iconX = centered ? w / 2 + 40 : w - 48;
6915
- const iconY = centered ? h / 2 - 44 : 18 + cylinderShift;
6961
+ const iconY = centered ? h / 2 - 44 - \u7D75\u306E\u82AF : 18 + cylinderShift;
6916
6962
  const dominantBaseline = centered ? "middle" : void 0;
6917
6963
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, "data-cdl-role": "node-body", children: [
6918
6964
  shapeEl,