@cardenelabs/cdl 0.32.0 → 0.34.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.d.cts CHANGED
@@ -1,2 +1,2 @@
1
1
  import 'react';
2
- export { q as CdlDiagramView, m as CdlDiagramViewProps } from './render-DjnLKv2Q.cjs';
2
+ export { q as CdlDiagramView, m as CdlDiagramViewProps } from './render-C2rcAsgk.cjs';
package/dist/react.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import 'react';
2
- export { q as CdlDiagramView, m as CdlDiagramViewProps } from './render-DjnLKv2Q.js';
2
+ export { q as CdlDiagramView, m as CdlDiagramViewProps } from './render-C2rcAsgk.js';
package/dist/react.js CHANGED
@@ -577,6 +577,7 @@ var KINDS_WITHOUT_TITLE_TEXT = /* @__PURE__ */ new Set([
577
577
  "chart-stat",
578
578
  "chart-waffle",
579
579
  "chart-stacked-bar",
580
+ "chart-slope",
580
581
  "gantt-timeline",
581
582
  "mind-map",
582
583
  "funnel-stages",
@@ -2312,8 +2313,10 @@ var NODE_KINDS = [
2312
2313
  "chart-radial",
2313
2314
  "chart-stat",
2314
2315
  // chart-stacked-bar は帯を割合で区切り時点を並べる形 (cdl#551)
2316
+ // chart-slope は 2 時点を直線でつなぎ増減と順位の入れ替わりを見せる形 (cdl#688)
2315
2317
  "chart-waffle",
2316
2318
  "chart-stacked-bar",
2319
+ "chart-slope",
2317
2320
  // Timeline / Mind 系 (2、 CAR-994 Phase B) ... 1 node に payload 配列、 SVG geometry render
2318
2321
  "gantt-timeline",
2319
2322
  "mind-map",
@@ -4448,6 +4451,7 @@ var GRID_ALIGNED_KINDS = /* @__PURE__ */ new Set([
4448
4451
  "chart-stat",
4449
4452
  "chart-waffle",
4450
4453
  "chart-stacked-bar",
4454
+ "chart-slope",
4451
4455
  "funnel-stages",
4452
4456
  "quadrant-matrix"
4453
4457
  ]);
@@ -6784,6 +6788,8 @@ var TOKENS = {
6784
6788
  "chart-waffle": { w: 640, h: 320 },
6785
6789
  // 帯を最大 2 本 + 下に一覧。 縦は帯 2 本ぶんで足りる (cdl#551)
6786
6790
  "chart-stacked-bar": { w: 640, h: 320 },
6791
+ // 左右 2 本の縦軸と、その外に名札。 縦は系列が縦に並ぶぶん要る (cdl#688)
6792
+ "chart-slope": { w: 640, h: 360 },
6787
6793
  // Timeline / Mind 系 (CAR-994 Phase B)
6788
6794
  "gantt-timeline": { w: 720, h: 360 },
6789
6795
  "mind-map": { w: 720, h: 480 },
@@ -9497,6 +9503,7 @@ var DRAW_KINDS = /* @__PURE__ */ new Set([
9497
9503
  "chart-line",
9498
9504
  "chart-bar",
9499
9505
  "chart-pie",
9506
+ "chart-slope",
9500
9507
  "journey-map",
9501
9508
  "mind-map",
9502
9509
  "tree-hierarchy",
@@ -13013,6 +13020,238 @@ function \u4E00\u89A7\u306E\u4E26\u3073(data, \u5DE6, \u53F3\u7AEF, \u7D1A) {
13013
13020
  });
13014
13021
  return out;
13015
13022
  }
13023
+
13024
+ // src/kinds/chart-number.ts
13025
+ function \u5B9F\u5024\u8868\u8A187(v) {
13026
+ return Number.isInteger(v) ? v.toLocaleString("en-US") : v.toLocaleString("en-US", { maximumFractionDigits: 1 });
13027
+ }
13028
+ var \u7DDA\u306E\u6700\u5C0F\u5E45 = 120;
13029
+ function ChartSlopeNode({
13030
+ node,
13031
+ active,
13032
+ stateValues = {},
13033
+ drawing = false,
13034
+ progress = 1
13035
+ }) {
13036
+ const x0 = node.cx - node.w / 2;
13037
+ const y0 = node.cy - node.h / 2;
13038
+ const data = resolveChartData(node.chartData ?? [], stateValues);
13039
+ const PAD = 24;
13040
+ const \u6642\u70B9\u306E\u7D1A = 12;
13041
+ const \u5024\u306E\u7D1A = 14;
13042
+ const \u540D\u524D\u306E\u4E0A\u9650\u7D1A = 13;
13043
+ const \u540D\u524D\u306E\u4E0B\u9650\u7D1A = 9;
13044
+ const \u8EF8\u304B\u3089\u5024\u307E\u3067 = 10;
13045
+ const \u5024\u304B\u3089\u540D\u524D\u307E\u3067 = 8;
13046
+ const \u524D\u3042\u308A = data.some((d) => d.previous !== void 0);
13047
+ const \u7CFB\u5217\u305F\u3061 = data.map((d, i) => ({
13048
+ \u540D\u524D: d.label ?? "",
13049
+ // 前を持たない件は 0 から立ち上げる。 件を落とすと左右で系列の数が変わり、色の並びが
13050
+ // 対応しなくなる (`chart-stacked-bar` と同じ判断)
13051
+ \u524D: d.previous ?? 0,
13052
+ \u4ECA: d.value,
13053
+ \u8272: \u5370\u306E\u82724(d.tone, i),
13054
+ \u672A\u89E3\u6C7A: d.unresolved === true
13055
+ }));
13056
+ const \u5168\u90E8\u306E\u5024 = \u524D\u3042\u308A ? \u7CFB\u5217\u305F\u3061.flatMap((s) => [s.\u524D, s.\u4ECA]) : \u7CFB\u5217\u305F\u3061.map((s) => s.\u4ECA);
13057
+ const \u6700\u5C0F = \u5168\u90E8\u306E\u5024.length > 0 ? Math.min(...\u5168\u90E8\u306E\u5024) : 0;
13058
+ const \u6700\u5927 = \u5168\u90E8\u306E\u5024.length > 0 ? Math.max(...\u5168\u90E8\u306E\u5024) : 0;
13059
+ const \u5C3A\u306E\u5E45 = \u6700\u5927 - \u6700\u5C0F;
13060
+ const \u4E0A\u7AEF = PAD + (\u524D\u3042\u308A ? \u6642\u70B9\u306E\u7D1A + 12 : 0) + 6;
13061
+ const \u4E0B\u7AEF = Math.max(\u4E0A\u7AEF + 10, node.h - PAD - 6);
13062
+ const y\u3092\u53D6\u308B = (v) => \u5C3A\u306E\u5E45 > 0 ? \u4E0B\u7AEF - (v - \u6700\u5C0F) / \u5C3A\u306E\u5E45 * (\u4E0B\u7AEF - \u4E0A\u7AEF) : (\u4E0A\u7AEF + \u4E0B\u7AEF) / 2;
13063
+ const \u5DE6\u306E\u5B57 = \u7CFB\u5217\u305F\u3061.map((s) => \u5B9F\u5024\u8868\u8A187(s.\u524D));
13064
+ const \u53F3\u306E\u5B57 = \u7CFB\u5217\u305F\u3061.map((s) => \u5B9F\u5024\u8868\u8A187(s.\u4ECA));
13065
+ const \u5DE6\u5024\u5E45 = Math.max(0, ...\u5DE6\u306E\u5B57.map((t) => textWidth(t, \u5024\u306E\u7D1A)));
13066
+ const \u53F3\u5024\u5E45 = Math.max(0, ...\u53F3\u306E\u5B57.map((t) => textWidth(t, \u5024\u306E\u7D1A)));
13067
+ const \u540D\u524D\u306B\u4F7F\u3048\u308B = Math.max(
13068
+ 0,
13069
+ (node.w - PAD * 2 - \u7DDA\u306E\u6700\u5C0F\u5E45 - (\u5DE6\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067) - (\u53F3\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067)) / 2
13070
+ );
13071
+ const \u540D\u524D\u306E\u7D1A = \u53CE\u3081\u308B\u7D1A2(\u7CFB\u5217\u305F\u3061.map((s) => s.\u540D\u524D), \u540D\u524D\u306B\u4F7F\u3048\u308B, \u540D\u524D\u306E\u4E0A\u9650\u7D1A, \u540D\u524D\u306E\u4E0B\u9650\u7D1A);
13072
+ const \u540D\u524D\u5E45 = Math.min(
13073
+ \u540D\u524D\u306B\u4F7F\u3048\u308B,
13074
+ Math.max(0, ...\u7CFB\u5217\u305F\u3061.map((s) => textWidth(s.\u540D\u524D, \u540D\u524D\u306E\u7D1A)))
13075
+ );
13076
+ const \u5DE6\u306E\u4F59\u767D = \u540D\u524D\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067 + \u5DE6\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067;
13077
+ const \u53F3\u306E\u4F59\u767D = \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u53F3\u5024\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067 + \u540D\u524D\u5E45;
13078
+ const \u5DE6\u8EF8x = \u524D\u3042\u308A ? Math.max(PAD, Math.min(PAD + \u5DE6\u306E\u4F59\u767D, node.w / 2 - \u7DDA\u306E\u6700\u5C0F\u5E45 / 2)) : Math.max(PAD, Math.min(node.w / 2, node.w - PAD));
13079
+ const \u53F3\u8EF8x = \u524D\u3042\u308A ? Math.min(node.w - PAD, Math.max(node.w - PAD - \u53F3\u306E\u4F59\u767D, node.w / 2 + \u7DDA\u306E\u6700\u5C0F\u5E45 / 2)) : \u5DE6\u8EF8x;
13080
+ const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
13081
+ const \u53F3\u3092\u51FA\u3059 = !drawing || \u4F38\u3073 >= 1;
13082
+ return /* @__PURE__ */ jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
13083
+ /* @__PURE__ */ jsx(
13084
+ "rect",
13085
+ {
13086
+ "data-cdl-role": "node-body",
13087
+ x: 0,
13088
+ y: 0,
13089
+ width: node.w,
13090
+ height: node.h,
13091
+ rx: 16,
13092
+ fill: "var(--cdl-node-fill, #ffffff)",
13093
+ stroke: active ? "var(--cdl-tone-accent, #2d6a8f)" : "var(--cdl-divider, #d4d4d8)",
13094
+ strokeWidth: active ? 3 : 1.25
13095
+ }
13096
+ ),
13097
+ (\u524D\u3042\u308A ? [\u5DE6\u8EF8x, \u53F3\u8EF8x] : [\u5DE6\u8EF8x]).map((x, i) => /* @__PURE__ */ jsx(
13098
+ "line",
13099
+ {
13100
+ "data-cdl-role": "chart-slope-axis",
13101
+ x1: x,
13102
+ y1: \u4E0A\u7AEF - 6,
13103
+ x2: x,
13104
+ y2: \u4E0B\u7AEF + 6,
13105
+ stroke: "var(--cdl-divider, #d4d4d8)",
13106
+ strokeWidth: 1
13107
+ },
13108
+ `axis-${i}`
13109
+ )),
13110
+ \u524D\u3042\u308A && /* @__PURE__ */ jsxs(Fragment, { children: [
13111
+ /* @__PURE__ */ jsx(
13112
+ "text",
13113
+ {
13114
+ "data-cdl-role": "chart-slope-period",
13115
+ x: \u5DE6\u8EF8x,
13116
+ y: PAD + \u6642\u70B9\u306E\u7D1A,
13117
+ textAnchor: "middle",
13118
+ fontSize: \u6642\u70B9\u306E\u7D1A,
13119
+ fontWeight: 700,
13120
+ fill: "var(--cdl-text-dim, #5a6270)",
13121
+ children: "\u524D"
13122
+ }
13123
+ ),
13124
+ /* @__PURE__ */ jsx(
13125
+ "text",
13126
+ {
13127
+ "data-cdl-role": "chart-slope-period",
13128
+ x: \u53F3\u8EF8x,
13129
+ y: PAD + \u6642\u70B9\u306E\u7D1A,
13130
+ textAnchor: "middle",
13131
+ fontSize: \u6642\u70B9\u306E\u7D1A,
13132
+ fontWeight: 700,
13133
+ fill: "var(--cdl-text-dim, #5a6270)",
13134
+ children: "\u4ECA"
13135
+ }
13136
+ )
13137
+ ] }),
13138
+ \u7CFB\u5217\u305F\u3061.map((s, i) => {
13139
+ const \u5DE6y = y\u3092\u53D6\u308B(s.\u524D);
13140
+ const \u53F3y = y\u3092\u53D6\u308B(s.\u4ECA);
13141
+ const \u672A\u89E3\u6C7A = s.\u672A\u89E3\u6C7A ? "true" : void 0;
13142
+ return /* @__PURE__ */ jsxs("g", { children: [
13143
+ \u524D\u3042\u308A && /* @__PURE__ */ jsx(
13144
+ "path",
13145
+ {
13146
+ "data-cdl-role": "chart-slope-line",
13147
+ "data-cdl-unresolved": \u672A\u89E3\u6C7A,
13148
+ d: `M ${\u5DE6\u8EF8x} ${\u5DE6y} L ${\u53F3\u8EF8x} ${\u53F3y}`,
13149
+ fill: "none",
13150
+ stroke: s.\u8272,
13151
+ strokeWidth: 2.5,
13152
+ strokeLinecap: "round",
13153
+ ...\u4F38\u3070\u3059dash(drawing, \u4F38\u3073)
13154
+ }
13155
+ ),
13156
+ \u524D\u3042\u308A && /* @__PURE__ */ jsx(
13157
+ "circle",
13158
+ {
13159
+ "data-cdl-role": "chart-slope-dot",
13160
+ "data-cdl-unresolved": \u672A\u89E3\u6C7A,
13161
+ cx: \u5DE6\u8EF8x,
13162
+ cy: \u5DE6y,
13163
+ r: 4,
13164
+ fill: s.\u8272
13165
+ }
13166
+ ),
13167
+ \u53F3\u3092\u51FA\u3059 && /* @__PURE__ */ jsx(
13168
+ "circle",
13169
+ {
13170
+ "data-cdl-role": "chart-slope-dot",
13171
+ "data-cdl-unresolved": \u672A\u89E3\u6C7A,
13172
+ cx: \u53F3\u8EF8x,
13173
+ cy: \u53F3y,
13174
+ r: 4,
13175
+ fill: s.\u8272
13176
+ }
13177
+ ),
13178
+ \u524D\u3042\u308A ? /* @__PURE__ */ jsxs(Fragment, { children: [
13179
+ /* @__PURE__ */ jsx(
13180
+ "text",
13181
+ {
13182
+ "data-cdl-role": "chart-slope-value",
13183
+ x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
13184
+ y: \u5DE6y + 5,
13185
+ textAnchor: "end",
13186
+ fontSize: \u5024\u306E\u7D1A,
13187
+ fontWeight: 600,
13188
+ fill: "var(--cdl-text, #1a1f2a)",
13189
+ children: \u5DE6\u306E\u5B57[i]
13190
+ }
13191
+ ),
13192
+ /* @__PURE__ */ jsx(
13193
+ "text",
13194
+ {
13195
+ "data-cdl-role": "chart-slope-name",
13196
+ x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067 - \u5DE6\u5024\u5E45 - \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
13197
+ y: \u5DE6y + 5,
13198
+ textAnchor: "end",
13199
+ fontSize: \u540D\u524D\u306E\u7D1A,
13200
+ fill: "var(--cdl-text-dim, #5a6270)",
13201
+ children: s.\u540D\u524D
13202
+ }
13203
+ )
13204
+ ] }) : /* @__PURE__ */ jsx(
13205
+ "text",
13206
+ {
13207
+ "data-cdl-role": "chart-slope-name",
13208
+ x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
13209
+ y: \u53F3y + 5,
13210
+ textAnchor: "end",
13211
+ fontSize: \u540D\u524D\u306E\u7D1A,
13212
+ fill: "var(--cdl-text-dim, #5a6270)",
13213
+ children: s.\u540D\u524D
13214
+ }
13215
+ ),
13216
+ \u53F3\u3092\u51FA\u3059 && /* @__PURE__ */ jsxs(Fragment, { children: [
13217
+ /* @__PURE__ */ jsx(
13218
+ "text",
13219
+ {
13220
+ "data-cdl-role": "chart-slope-value",
13221
+ x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067,
13222
+ y: \u53F3y + 5,
13223
+ fontSize: \u5024\u306E\u7D1A,
13224
+ fontWeight: 600,
13225
+ fill: "var(--cdl-text, #1a1f2a)",
13226
+ children: \u53F3\u306E\u5B57[i]
13227
+ }
13228
+ ),
13229
+ \u524D\u3042\u308A && /* @__PURE__ */ jsx(
13230
+ "text",
13231
+ {
13232
+ "data-cdl-role": "chart-slope-name",
13233
+ x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u53F3\u5024\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
13234
+ y: \u53F3y + 5,
13235
+ fontSize: \u540D\u524D\u306E\u7D1A,
13236
+ fill: "var(--cdl-text-dim, #5a6270)",
13237
+ children: s.\u540D\u524D
13238
+ }
13239
+ )
13240
+ ] })
13241
+ ] }, `slope-${i}`);
13242
+ })
13243
+ ] });
13244
+ }
13245
+ function \u5370\u306E\u82724(tone, idx) {
13246
+ if (tone) return TONE[tone];
13247
+ return chartSeriesColor(idx);
13248
+ }
13249
+ function \u53CE\u3081\u308B\u7D1A2(\u540D\u524D\u305F\u3061, \u5E45, \u4E0A\u9650, \u4E0B\u9650) {
13250
+ if (\u540D\u524D\u305F\u3061.length === 0) return \u4E0A\u9650;
13251
+ let \u7D1A = \u4E0A\u9650;
13252
+ while (\u7D1A > \u4E0B\u9650 && Math.max(...\u540D\u524D\u305F\u3061.map((n) => textWidth(n, \u7D1A))) > \u5E45) \u7D1A -= 1;
13253
+ return \u7D1A;
13254
+ }
13016
13255
  function ChartBarNode({
13017
13256
  node,
13018
13257
  active,
@@ -17692,6 +17931,17 @@ function CdlNodeView({
17692
17931
  return /* @__PURE__ */ jsx(ChartGaugeNode, { node: resolvedNode, active, stateValues });
17693
17932
  case "chart-stacked-bar":
17694
17933
  return /* @__PURE__ */ jsx(ChartStackedBarNode, { node: resolvedNode, active, stateValues });
17934
+ case "chart-slope":
17935
+ return /* @__PURE__ */ jsx(
17936
+ ChartSlopeNode,
17937
+ {
17938
+ node: resolvedNode,
17939
+ active,
17940
+ stateValues,
17941
+ drawing,
17942
+ progress
17943
+ }
17944
+ );
17695
17945
  case "chart-waffle":
17696
17946
  return /* @__PURE__ */ jsx(ChartWaffleNode, { node: resolvedNode, active, stateValues });
17697
17947
  case "chart-stat":