@cardenelabs/cdl 0.107.0 → 0.108.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.js CHANGED
@@ -3192,6 +3192,111 @@ function requiredRowsWidth(rows, kind) {
3192
3192
  if (kind === void 0) return Math.ceil(Math.max(storage, generic));
3193
3193
  return Math.ceil(kind === "storage" ? storage : generic);
3194
3194
  }
3195
+
3196
+ // src/kinds/compact-title.ts
3197
+ function estimateTextWidth(text, fontSize) {
3198
+ let w = 0;
3199
+ for (const ch of text) {
3200
+ const isFullWidth = /[\u3000-\u9FFF\uFF00-\uFFEF]/.test(ch);
3201
+ w += fontSize * (isFullWidth ? 1.05 : 0.62);
3202
+ }
3203
+ return w;
3204
+ }
3205
+ function fitTextSize(text, maxWidth, targetSize, minSize) {
3206
+ let size = targetSize;
3207
+ while (size > minSize && estimateTextWidth(text, size) > maxWidth) {
3208
+ size -= 1;
3209
+ }
3210
+ return size;
3211
+ }
3212
+ var COMPACT_MAX_H = 100;
3213
+ var COMPACT_PADDING_X = 16;
3214
+ var MIN_TEXT_SIZE = 11;
3215
+ var ASCENT = 0.72;
3216
+ var DESCENT = 0.25;
3217
+ var MIN_BAND_H = MIN_TEXT_SIZE * (ASCENT + DESCENT);
3218
+ var EYEBROW_BASELINE = 38;
3219
+ var EYEBROW_SIZE = 18;
3220
+ var EYEBROW_GAP = 8;
3221
+ var BOTTOM_INSET = 4;
3222
+ var eyebrowBottom = () => EYEBROW_BASELINE + EYEBROW_SIZE * DESCENT;
3223
+ var titleBandTop = (hasEyebrow) => eyebrowBottom() + EYEBROW_GAP ;
3224
+ var isCompactBox = (h) => h < COMPACT_MAX_H;
3225
+ function titlePlacement(node, \u901A\u5E38, opts = {}) {
3226
+ if (!isCompactBox(node.h)) {
3227
+ return { x: \u901A\u5E38.x, y: \u901A\u5E38.y, size: \u901A\u5E38.size, anchor: "start" };
3228
+ }
3229
+ const \u9AD8\u3055 = Math.max(0, node.h);
3230
+ const \u76EE\u5370\u3042\u308A = opts.hasEyebrow === true;
3231
+ const \u4E0A = \u76EE\u5370\u3042\u308A && \u9AD8\u3055 >= eyebrowBottom() ? titleBandTop() : 0;
3232
+ const \u751F\u306E\u5E2F = Math.max(0, \u9AD8\u3055 - \u4E0A);
3233
+ const \u4E0B\u4F59\u767D = \u751F\u306E\u5E2F >= MIN_BAND_H + BOTTOM_INSET ? BOTTOM_INSET : 0;
3234
+ const \u5E2F = \u751F\u306E\u5E2F - \u4E0B\u4F59\u767D;
3235
+ const \u5E45\u3067 = fitTextSize(
3236
+ node.title,
3237
+ Math.max(0, node.w - COMPACT_PADDING_X),
3238
+ \u901A\u5E38.size,
3239
+ MIN_TEXT_SIZE
3240
+ );
3241
+ const \u5E2F\u3067 = Math.floor(\u5E2F / (ASCENT + DESCENT));
3242
+ const size = Math.max(MIN_TEXT_SIZE, Math.min(\u5E45\u3067, \u5E2F\u3067));
3243
+ const \u5B57\u9AD8 = size * (ASCENT + DESCENT);
3244
+ const y = \u5B57\u9AD8 <= \u5E2F ? \u4E0A + \u5E2F / 2 + size * (ASCENT - DESCENT) / 2 : \u4E0A > 0 ? \u4E0A + size * ASCENT : (\u9AD8\u3055 - \u5B57\u9AD8) / 2 + size * ASCENT;
3245
+ return { x: node.w / 2, y, size, anchor: "middle" };
3246
+ }
3247
+
3248
+ // src/kinds/box-lines.ts
3249
+ var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
3250
+ var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
3251
+ var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
3252
+ var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
3253
+ function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
3254
+ return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
3255
+ }
3256
+ function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
3257
+ if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
3258
+ if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
3259
+ const \u7701\u7565 = "\u2026";
3260
+ const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
3261
+ if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
3262
+ let \u51FA = "";
3263
+ let \u5E45 = 0;
3264
+ for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
3265
+ const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
3266
+ if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
3267
+ \u5E45 += \u5B57\u306E\u5E452;
3268
+ \u51FA += c;
3269
+ }
3270
+ return `${\u51FA}${\u7701\u7565}`;
3271
+ }
3272
+ var \u7E2E\u3081\u306E\u4E0B\u9650 = MIN_TEXT_SIZE;
3273
+ function \u5E45\u306B\u53CE\u3081\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
3274
+ let size = fontSize;
3275
+ while (size > \u7E2E\u3081\u306E\u4E0B\u9650 && \u6E2C\u308B(text, size) > \u4F7F\u3048\u308B\u5E452) size -= 1;
3276
+ return { text: \u5E45\u3067\u5207\u308B(text, size, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B), fontSize: size };
3277
+ }
3278
+ function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
3279
+ const \u533A\u5207\u308A = Intl.Segmenter;
3280
+ if (typeof \u533A\u5207\u308A !== "function") return [...text];
3281
+ return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
3282
+ }
3283
+ function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30553) {
3284
+ const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
3285
+ if (\u5019\u88DC.length === 0) return [];
3286
+ const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30553 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
3287
+ const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
3288
+ const \u6B8B\u3059 = [...\u5019\u88DC];
3289
+ while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
3290
+ const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
3291
+ const \u53CE\u3081\u305F = \u6B8B\u3059.map((r) => ({ ...r, ...\u5E45\u306B\u53CE\u3081\u308B(r.text, r.fontSize, \u5E45) }));
3292
+ const \u7DCF\u9AD8 = \u9AD8\u3055(\u53CE\u3081\u305F);
3293
+ let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
3294
+ return \u53CE\u3081\u305F.map((r) => {
3295
+ const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
3296
+ \u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
3297
+ return { ...r, dy };
3298
+ });
3299
+ }
3195
3300
  function \u66F8\u3044\u305F\u5024\u304B\u63A7\u3048(\u66F8\u3044\u305F, \u63A7\u3048) {
3196
3301
  const v = (\u66F8\u3044\u305F ?? "").trim();
3197
3302
  return v === "" ? \u63A7\u3048 : v;
@@ -3201,14 +3306,22 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
3201
3306
  const \u5B9F\u5E45 = textWidth(text, size, letterSpacing);
3202
3307
  return \u5B9F\u5E45 > \u5E45 ? \u5E45 / \u5B9F\u5E45 : 1;
3203
3308
  }
3309
+ function \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055) {
3310
+ return \u5927\u304D\u3055 > MIN_TITLE_FONT_SIZE ? MIN_TITLE_FONT_SIZE / \u5927\u304D\u3055 : 0;
3311
+ }
3312
+ function \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u984C, \u5927\u304D\u3055, \u5B57\u9593, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
3313
+ const \u4E0B\u9650 = \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055);
3314
+ if (!(\u4E0B\u9650 > 0) || !(\u5E45\u4E0A\u9650 > 0)) return 0;
3315
+ return \u5E45\u3067\u5207\u308B(\u984C, \u5927\u304D\u3055 * \u4E0B\u9650, \u5E45\u4E0A\u9650, (u, f) => \u6E2C\u308B(u, f, \u5B57\u9593 * \u4E0B\u9650)) === "" ? 0 : \u4E0B\u9650;
3316
+ }
3204
3317
  var TITLE_MAX = 18;
3205
3318
  var TITLE_MIN = 9;
3206
3319
  var TITLE_RATIO = 0.17;
3207
3320
  var SUB_RATIO = 0.72;
3208
3321
  var LINE_GAP = 3;
3209
3322
  var BOTTOM_PAD = 4;
3210
- var ASCENT = 0.72;
3211
- var DESCENT = 0.25;
3323
+ var ASCENT2 = 0.72;
3324
+ var DESCENT2 = 0.25;
3212
3325
  var ART_GAP = 4;
3213
3326
  var ART_MIN_BAND = 45;
3214
3327
  var \u843D\u3068\u3057\u3066\u3082\u63CF\u304F\u7A2E\u5225 = {
@@ -3273,9 +3386,9 @@ function labelPlan(node) {
3273
3386
  y -= \u540D\u524D\u5927 + LINE_GAP;
3274
3387
  const \u80A9\u66F8 = \u80A9\u66F8\u3042\u308A2 ? { y, size: \u5C0F\u3055\u3044\u5B57 } : null;
3275
3388
  const \u4E0A\u306E\u884C = \u80A9\u66F8 ?? \u540D\u524D;
3276
- return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size * ASCENT };
3389
+ return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size * ASCENT2 };
3277
3390
  };
3278
- const \u5165\u308B = (\u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2) => \u7A4D\u3080(1, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, 1 * DESCENT).\u4E0A\u7AEF >= \u5929;
3391
+ const \u5165\u308B = (\u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2) => \u7A4D\u3080(1, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, 1 * DESCENT2).\u4E0A\u7AEF >= \u5929;
3279
3392
  let \u8AAC\u660E\u3042\u308A = Boolean(node.subtitle);
3280
3393
  let \u80A9\u66F8\u3042\u308A = Boolean(node.eyebrow);
3281
3394
  const \u843D\u3068\u3057\u305F = [];
@@ -3293,14 +3406,14 @@ function labelPlan(node) {
3293
3406
  for (let size = \u4E0A\u9650; size >= 1; size--) {
3294
3407
  const \u5C0F\u3055\u3044\u5B572 = Math.max(1, Math.round(size * SUB_RATIO));
3295
3408
  const \u4E0B\u306E\u884C\u5927 = \u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B572 : size;
3296
- if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 * DESCENT).\u4E0A\u7AEF >= \u5929) {
3409
+ if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 * DESCENT2).\u4E0A\u7AEF >= \u5929) {
3297
3410
  \u540D\u524D\u5927 = size;
3298
3411
  break;
3299
3412
  }
3300
3413
  }
3301
- if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (ASCENT + DESCENT);
3414
+ if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (ASCENT2 + DESCENT2);
3302
3415
  const \u5C0F\u3055\u3044\u5B57 = Math.max(1, Math.round(\u540D\u524D\u5927 * SUB_RATIO));
3303
- const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) * DESCENT;
3416
+ const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) * DESCENT2;
3304
3417
  const \u4F59\u308A = Math.max(0, \u7A4D\u3080(\u540D\u524D\u5927, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u5F35\u308A\u51FA\u3057).\u4E0A\u7AEF - \u5929);
3305
3418
  const \u4E0B\u4F59\u767D = Math.min(Math.max(BOTTOM_PAD, \u5F35\u308A\u51FA\u3057), \u5F35\u308A\u51FA\u3057 + \u4F59\u308A);
3306
3419
  return \u7A4D\u3080(\u540D\u524D\u5927, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u4F59\u767D);
@@ -3360,16 +3473,19 @@ function bodyBand(node, opt) {
3360
3473
  const h = Math.max(0, \u7BB1h - \u7E26\u4F59\u767D * ky);
3361
3474
  return { x, y, w, h, cx: x + w / 2, cy: y + h / 2, \u53F3: x + w, \u5E95: y + h };
3362
3475
  }
3363
- function fitLabel(band, block, pos) {
3476
+ function fitLabel(band, block, pos, \u6A2A\u306E\u4E0B\u9650 = 0) {
3364
3477
  const \u7E26 = block.\u4E0A + block.\u4E0B;
3365
3478
  const \u6A2A = Math.max(0, block.\u5E45);
3366
3479
  if (!(\u7E26 > 0)) return { k: 1, x: pos.x, y: pos.y };
3367
3480
  if (!(band.h > 0) || !(band.w > 0)) return { k: 0, x: band.x + band.w / 2, y: band.y };
3368
- const k = Math.min(1, band.h / \u7E26, \u6A2A > 0 ? band.w / \u6A2A : 1);
3481
+ const \u6A2A\u3067 = \u6A2A > 0 ? Math.max(band.w / \u6A2A, \u6A2A\u306E\u4E0B\u9650) : 1;
3482
+ const k = Math.min(1, band.h / \u7E26, \u6A2A\u3067);
3369
3483
  const \u534A = \u6A2A * k / 2;
3370
3484
  return {
3371
3485
  k,
3372
- x: Math.max(band.x + \u534A, Math.min(pos.x, band.x + band.w - \u534A)),
3486
+ // 下限で止めた塊は帯より広い。 その時は帯の中央に置いて左右へ均等に出す =
3487
+ // 寄せの式をそのまま当てると片側だけに出る (`compact-title.ts` と同じ判断)
3488
+ x: \u534A * 2 > band.w ? band.x + band.w / 2 : Math.max(band.x + \u534A, Math.min(pos.x, band.x + band.w - \u534A)),
3373
3489
  y: Math.max(band.y + block.\u4E0A * k, Math.min(pos.y, band.y + band.h - block.\u4E0B * k))
3374
3490
  };
3375
3491
  }
@@ -3422,111 +3538,6 @@ function \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u5B57\u3089)
3422
3538
  return Math.max(1, Math.min(\u623B\u3057, \u4E0A\u9650));
3423
3539
  }
3424
3540
 
3425
- // src/kinds/compact-title.ts
3426
- function estimateTextWidth(text, fontSize) {
3427
- let w = 0;
3428
- for (const ch of text) {
3429
- const isFullWidth = /[\u3000-\u9FFF\uFF00-\uFFEF]/.test(ch);
3430
- w += fontSize * (isFullWidth ? 1.05 : 0.62);
3431
- }
3432
- return w;
3433
- }
3434
- function fitTextSize(text, maxWidth, targetSize, minSize) {
3435
- let size = targetSize;
3436
- while (size > minSize && estimateTextWidth(text, size) > maxWidth) {
3437
- size -= 1;
3438
- }
3439
- return size;
3440
- }
3441
- var COMPACT_MAX_H = 100;
3442
- var COMPACT_PADDING_X = 16;
3443
- var MIN_TEXT_SIZE = 11;
3444
- var ASCENT2 = 0.72;
3445
- var DESCENT2 = 0.25;
3446
- var MIN_BAND_H = MIN_TEXT_SIZE * (ASCENT2 + DESCENT2);
3447
- var EYEBROW_BASELINE = 38;
3448
- var EYEBROW_SIZE = 18;
3449
- var EYEBROW_GAP = 8;
3450
- var BOTTOM_INSET = 4;
3451
- var eyebrowBottom = () => EYEBROW_BASELINE + EYEBROW_SIZE * DESCENT2;
3452
- var titleBandTop = (hasEyebrow) => eyebrowBottom() + EYEBROW_GAP ;
3453
- var isCompactBox = (h) => h < COMPACT_MAX_H;
3454
- function titlePlacement(node, \u901A\u5E38, opts = {}) {
3455
- if (!isCompactBox(node.h)) {
3456
- return { x: \u901A\u5E38.x, y: \u901A\u5E38.y, size: \u901A\u5E38.size, anchor: "start" };
3457
- }
3458
- const \u9AD8\u3055 = Math.max(0, node.h);
3459
- const \u76EE\u5370\u3042\u308A = opts.hasEyebrow === true;
3460
- const \u4E0A = \u76EE\u5370\u3042\u308A && \u9AD8\u3055 >= eyebrowBottom() ? titleBandTop() : 0;
3461
- const \u751F\u306E\u5E2F = Math.max(0, \u9AD8\u3055 - \u4E0A);
3462
- const \u4E0B\u4F59\u767D = \u751F\u306E\u5E2F >= MIN_BAND_H + BOTTOM_INSET ? BOTTOM_INSET : 0;
3463
- const \u5E2F = \u751F\u306E\u5E2F - \u4E0B\u4F59\u767D;
3464
- const \u5E45\u3067 = fitTextSize(
3465
- node.title,
3466
- Math.max(0, node.w - COMPACT_PADDING_X),
3467
- \u901A\u5E38.size,
3468
- MIN_TEXT_SIZE
3469
- );
3470
- const \u5E2F\u3067 = Math.floor(\u5E2F / (ASCENT2 + DESCENT2));
3471
- const size = Math.max(MIN_TEXT_SIZE, Math.min(\u5E45\u3067, \u5E2F\u3067));
3472
- const \u5B57\u9AD8 = size * (ASCENT2 + DESCENT2);
3473
- const y = \u5B57\u9AD8 <= \u5E2F ? \u4E0A + \u5E2F / 2 + size * (ASCENT2 - DESCENT2) / 2 : \u4E0A > 0 ? \u4E0A + size * ASCENT2 : (\u9AD8\u3055 - \u5B57\u9AD8) / 2 + size * ASCENT2;
3474
- return { x: node.w / 2, y, size, anchor: "middle" };
3475
- }
3476
-
3477
- // src/kinds/box-lines.ts
3478
- var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
3479
- var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
3480
- var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
3481
- var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
3482
- function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
3483
- return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
3484
- }
3485
- function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
3486
- if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
3487
- if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
3488
- const \u7701\u7565 = "\u2026";
3489
- const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
3490
- if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
3491
- let \u51FA = "";
3492
- let \u5E45 = 0;
3493
- for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
3494
- const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
3495
- if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
3496
- \u5E45 += \u5B57\u306E\u5E452;
3497
- \u51FA += c;
3498
- }
3499
- return `${\u51FA}${\u7701\u7565}`;
3500
- }
3501
- var \u7E2E\u3081\u306E\u4E0B\u9650 = MIN_TEXT_SIZE;
3502
- function \u5E45\u306B\u53CE\u3081\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
3503
- let size = fontSize;
3504
- while (size > \u7E2E\u3081\u306E\u4E0B\u9650 && \u6E2C\u308B(text, size) > \u4F7F\u3048\u308B\u5E452) size -= 1;
3505
- return { text: \u5E45\u3067\u5207\u308B(text, size, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B), fontSize: size };
3506
- }
3507
- function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
3508
- const \u533A\u5207\u308A = Intl.Segmenter;
3509
- if (typeof \u533A\u5207\u308A !== "function") return [...text];
3510
- return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
3511
- }
3512
- function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30553) {
3513
- const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
3514
- if (\u5019\u88DC.length === 0) return [];
3515
- const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30553 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
3516
- const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
3517
- const \u6B8B\u3059 = [...\u5019\u88DC];
3518
- while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
3519
- const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
3520
- const \u53CE\u3081\u305F = \u6B8B\u3059.map((r) => ({ ...r, ...\u5E45\u306B\u53CE\u3081\u308B(r.text, r.fontSize, \u5E45) }));
3521
- const \u7DCF\u9AD8 = \u9AD8\u3055(\u53CE\u3081\u305F);
3522
- let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
3523
- return \u53CE\u3081\u305F.map((r) => {
3524
- const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
3525
- \u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
3526
- return { ...r, dy };
3527
- });
3528
- }
3529
-
3530
3541
  // src/render/tone.ts
3531
3542
  var TONE = {
3532
3543
  accent: "var(--cdl-tone-accent, #2d6a8f)",
@@ -11839,7 +11850,7 @@ function CardNode({ node, active }) {
11839
11850
  const textAnchor = compact ? "middle" : "start";
11840
11851
  const subtitleY = 124 - \u305A\u3089\u3057;
11841
11852
  const \u6700\u5927\u306E\u884C\u9001\u308A = SUBTITLE_SIZE * \u884C\u9001\u308A\u306E\u500D\u7387;
11842
- const \u4E8C\u884C\u304C\u5165\u308B = !compact && subtitleY - \u6700\u5927\u306E\u884C\u9001\u308A / 2 - SUBTITLE_SIZE * ASCENT2 > titleY + titleSize * DESCENT2 && subtitleY + \u6700\u5927\u306E\u884C\u9001\u308A / 2 + SUBTITLE_SIZE * DESCENT2 <= node.h - 4;
11853
+ const \u4E8C\u884C\u304C\u5165\u308B = !compact && subtitleY - \u6700\u5927\u306E\u884C\u9001\u308A / 2 - SUBTITLE_SIZE * ASCENT > titleY + titleSize * DESCENT && subtitleY + \u6700\u5927\u306E\u884C\u9001\u308A / 2 + SUBTITLE_SIZE * DESCENT <= node.h - 4;
11843
11854
  const \u8AAC\u660E = node.subtitle ? \u8AAC\u660E\u6587\u3092\u5272\u308A\u4ED8\u3051\u308B(node.subtitle, availableW, { \u4E8C\u884C\u307E\u3067: \u4E8C\u884C\u304C\u5165\u308B }) : void 0;
11844
11855
  const subtitleSize = \u8AAC\u660E?.size ?? 21;
11845
11856
  const \u884C\u9001\u308A = subtitleSize * \u884C\u9001\u308A\u306E\u500D\u7387;
@@ -16136,20 +16147,22 @@ var EYEBROW_TRACKING = 2;
16136
16147
  var SUB_SIZE = 11;
16137
16148
  var SUB_GAP = 4;
16138
16149
  function labelBlock(node, pos, size, band) {
16139
- const \u4E0A = node.eyebrow ? size + EYEBROW_GAP2 + EYEBROW_SIZE2 * ASCENT : size * ASCENT;
16140
- const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE * DESCENT : size * DESCENT;
16150
+ const \u4E0A = node.eyebrow ? size + EYEBROW_GAP2 + EYEBROW_SIZE2 * ASCENT2 : size * ASCENT2;
16151
+ const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE * DESCENT2 : size * DESCENT2;
16141
16152
  const \u5E45 = Math.max(
16142
16153
  textWidth(node.title ?? "", size),
16143
16154
  node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
16144
16155
  node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
16145
16156
  );
16146
- const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos);
16157
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth);
16158
+ const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos, \u4E0B\u9650);
16147
16159
  return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
16148
16160
  }
16149
16161
  function commonLabel(node, pos, size, band) {
16150
16162
  const \u584A = labelBlock(node, pos, size, band);
16151
16163
  const k = \u584A.k;
16152
16164
  const x = \u584A.x;
16165
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E45\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, band.w, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
16153
16166
  return /* @__PURE__ */ jsxs(Fragment, { children: [
16154
16167
  node.eyebrow && /* @__PURE__ */ jsx(
16155
16168
  "text",
@@ -16161,7 +16174,7 @@ function commonLabel(node, pos, size, band) {
16161
16174
  letterSpacing: EYEBROW_TRACKING * k,
16162
16175
  textAnchor: "middle",
16163
16176
  fill: "var(--cdl-tone-accent, #2d6a8f)",
16164
- children: node.eyebrow
16177
+ children: \u5207\u308B(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING)
16165
16178
  }
16166
16179
  ),
16167
16180
  /* @__PURE__ */ jsx(
@@ -16174,7 +16187,7 @@ function commonLabel(node, pos, size, band) {
16174
16187
  fontWeight: 700,
16175
16188
  textAnchor: "middle",
16176
16189
  fill: "var(--cdl-text, #1a1f2a)",
16177
- children: node.title
16190
+ children: \u5207\u308B(node.title ?? "", size)
16178
16191
  }
16179
16192
  ),
16180
16193
  node.subtitle && /* @__PURE__ */ jsx(
@@ -16185,7 +16198,7 @@ function commonLabel(node, pos, size, band) {
16185
16198
  fontSize: SUB_SIZE * k,
16186
16199
  textAnchor: "middle",
16187
16200
  fill: "var(--cdl-text-dim, #5a6270)",
16188
- children: node.subtitle
16201
+ children: \u5207\u308B(node.subtitle, SUB_SIZE)
16189
16202
  }
16190
16203
  )
16191
16204
  ] });
@@ -16520,7 +16533,9 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
16520
16533
  node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
16521
16534
  node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
16522
16535
  );
16523
- const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, \u5E45\u4E0A\u9650 / \u5E45) : 1;
16536
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth);
16537
+ const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, Math.max(\u5E45\u4E0A\u9650 / \u5E45, \u4E0B\u9650)) : 1;
16538
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E45\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, \u5E45\u4E0A\u9650, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
16524
16539
  return /* @__PURE__ */ jsxs(Fragment, { children: [
16525
16540
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx(
16526
16541
  "text",
@@ -16532,7 +16547,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
16532
16547
  letterSpacing: EYEBROW_TRACKING * k,
16533
16548
  textAnchor: "middle",
16534
16549
  fill: "var(--cdl-tone-accent, #2d6a8f)",
16535
- children: node.eyebrow
16550
+ children: \u5207\u308B(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING)
16536
16551
  }
16537
16552
  ),
16538
16553
  /* @__PURE__ */ jsx(
@@ -16545,7 +16560,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
16545
16560
  fontWeight: 700,
16546
16561
  textAnchor: "middle",
16547
16562
  fill: "var(--cdl-text, #1a1f2a)",
16548
- children: node.title
16563
+ children: \u5207\u308B(node.title ?? "", plan.\u540D\u524D.size)
16549
16564
  }
16550
16565
  ),
16551
16566
  node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx(
@@ -16556,7 +16571,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
16556
16571
  fontSize: plan.\u8AAC\u660E.size * k,
16557
16572
  textAnchor: "middle",
16558
16573
  fill: "var(--cdl-text-dim, #5a6270)",
16559
- children: node.subtitle
16574
+ children: \u5207\u308B(node.subtitle, plan.\u8AAC\u660E.size)
16560
16575
  }
16561
16576
  )
16562
16577
  ] });
@@ -17479,17 +17494,19 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxs(Fragment, { chil
17479
17494
  var LABEL_EYEBROW_SPACING = 2;
17480
17495
  function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
17481
17496
  const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
17482
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
17483
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
17497
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, textWidth))) : 1;
17498
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
17499
+ const spacing = \u5B57\u9593 * \u500D\u7387;
17500
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
17484
17501
  }
17485
17502
  function bottomLabel(node, cx, plan) {
17486
17503
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
17487
17504
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
17488
17505
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
17489
17506
  return /* @__PURE__ */ jsxs(Fragment, { children: [
17490
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
17491
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
17492
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
17507
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
17508
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
17509
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
17493
17510
  ] });
17494
17511
  }
17495
17512
  var RACK_SLOT_TOP = 20;
@@ -18284,13 +18301,22 @@ function blockchainNodeExtent(strokeWidth) {
18284
18301
  return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
18285
18302
  }
18286
18303
  function bottomLabel2(node, cx, plan) {
18287
- const \u80A9\u66F8\u500D\u7387 = node.eyebrow && plan.\u80A9\u66F8 ? \u5E45\u306E\u500D\u7387(node.eyebrow, plan.\u80A9\u66F8.size, 2, node.w) : 1;
18288
- const \u540D\u524D\u500D\u7387 = \u5E45\u306E\u500D\u7387(node.title, plan.\u540D\u524D.size, 0, node.w);
18289
- const \u8AAC\u660E\u500D\u7387 = node.subtitle && plan.\u8AAC\u660E ? \u5E45\u306E\u500D\u7387(node.subtitle, plan.\u8AAC\u660E.size, 0, node.w) : 1;
18304
+ const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593) => {
18305
+ const \u6E2C\u308B = (u, f, ls) => \u5B57\u306E\u5E45(u, f) + ls * [...u].length;
18306
+ const \u500D\u7387 = Math.max(\u5E45\u306E\u500D\u7387(t, \u5927\u304D\u3055, \u5B57\u9593, node.w), \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(t, \u5927\u304D\u3055, \u5B57\u9593, node.w, \u6E2C\u308B));
18307
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
18308
+ return { \u500D\u7387, text: \u5E45\u3067\u5207\u308B(t, size, node.w, (u, f) => \u5B57\u306E\u5E45(u, f) + \u5B57\u9593 * \u500D\u7387 * [...u].length) };
18309
+ };
18310
+ const \u80A9 = node.eyebrow && plan.\u80A9\u66F8 ? \u53CE\u3081\u308B(node.eyebrow, plan.\u80A9\u66F8.size, 2) : { \u500D\u7387: 1, text: node.eyebrow ?? "" };
18311
+ const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0);
18312
+ const \u8AAC = node.subtitle && plan.\u8AAC\u660E ? \u53CE\u3081\u308B(node.subtitle, plan.\u8AAC\u660E.size, 0) : { \u500D\u7387: 1, text: node.subtitle ?? "" };
18313
+ const \u80A9\u66F8\u500D\u7387 = \u80A9.\u500D\u7387;
18314
+ const \u540D\u524D\u500D\u7387 = \u540D.\u500D\u7387;
18315
+ const \u8AAC\u660E\u500D\u7387 = \u8AAC.\u500D\u7387;
18290
18316
  return /* @__PURE__ */ jsxs(Fragment, { children: [
18291
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: plan.\u80A9\u66F8.size * \u80A9\u66F8\u500D\u7387, fontWeight: 700, letterSpacing: 2 * \u80A9\u66F8\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
18292
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: plan.\u540D\u524D.size * \u540D\u524D\u500D\u7387, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
18293
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: plan.\u8AAC\u660E.size * \u8AAC\u660E\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
18317
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: plan.\u80A9\u66F8.size * \u80A9\u66F8\u500D\u7387, fontWeight: 700, letterSpacing: 2 * \u80A9\u66F8\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
18318
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: plan.\u540D\u524D.size * \u540D\u524D\u500D\u7387, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
18319
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: plan.\u8AAC\u660E.size * \u8AAC\u660E\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
18294
18320
  ] });
18295
18321
  }
18296
18322
  function EthereumDiamond({ cx, cy, h, colors }) {
@@ -18899,17 +18925,19 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
18899
18925
  }
18900
18926
  function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
18901
18927
  const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
18902
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
18903
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
18928
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E45))) : 1;
18929
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
18930
+ const spacing = \u5B57\u9593 * \u500D\u7387;
18931
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
18904
18932
  }
18905
18933
  function bottomLabel3(node, cx, plan) {
18906
18934
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
18907
18935
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
18908
18936
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
18909
18937
  return /* @__PURE__ */ jsxs(Fragment, { children: [
18910
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
18911
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
18912
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
18938
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
18939
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
18940
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
18913
18941
  ] });
18914
18942
  }
18915
18943
  var BANK_PEDIMENT_H = 44;
@@ -19382,17 +19410,19 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
19382
19410
  }
19383
19411
  function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
19384
19412
  const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
19385
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
19386
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
19413
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E452))) : 1;
19414
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
19415
+ const spacing = \u5B57\u9593 * \u500D\u7387;
19416
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
19387
19417
  }
19388
19418
  function bottomLabel4(node, cx, plan) {
19389
19419
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
19390
19420
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
19391
19421
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
19392
19422
  return /* @__PURE__ */ jsxs(Fragment, { children: [
19393
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
19394
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
19395
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
19423
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
19424
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
19425
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
19396
19426
  ] });
19397
19427
  }
19398
19428
  var DROP_SHADOW_D = 4;