@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/CHANGELOG.md +36 -1
- package/dist/index.cjs +79 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +79 -33
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +79 -33
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +79 -33
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/actor.tsx +15 -6
- package/src/kinds/card.tsx +15 -4
- package/src/kinds/event.tsx +13 -4
- package/src/kinds/function.tsx +13 -4
- package/src/kinds/generic.tsx +36 -17
- package/src/layout/spec.ts +57 -0
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 \
|
|
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 - \
|
|
6123
|
+
y1: 110 - \u305A\u3089\u3057,
|
|
6098
6124
|
x2: node.w - 26,
|
|
6099
|
-
y2: 110 - \
|
|
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 - \
|
|
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
|
|
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 - \
|
|
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 \
|
|
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 - \
|
|
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 \
|
|
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 - \
|
|
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
|
|
6859
|
-
const
|
|
6860
|
-
|
|
6861
|
-
|
|
6862
|
-
|
|
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
|
|
6912
|
-
|
|
6913
|
-
|
|
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,
|