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