@cardenelabs/cdl 0.106.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/CHANGELOG.md +77 -1
- package/dist/index.cjs +132 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +132 -39
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +247 -154
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +247 -154
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/shape-basement.tsx +20 -8
- package/src/kinds/shape-blockchain.tsx +17 -10
- package/src/kinds/shape-commerce.tsx +15 -6
- package/src/kinds/shape-finance.tsx +15 -6
- package/src/kinds/shape-hardware.tsx +15 -7
- package/src/kinds/shape-region.tsx +63 -2
- package/src/layout/spec.ts +81 -0
- package/src/layout/text-width.ts +52 -4
- package/src/visual-validate.ts +25 -5
package/dist/react.js
CHANGED
|
@@ -837,6 +837,11 @@ function isHalfwidthKana(code) {
|
|
|
837
837
|
}
|
|
838
838
|
var EMOJI_ADVANCE_EM = 1.05;
|
|
839
839
|
var MONO_EMOJI_ADVANCE_EM = 1.16;
|
|
840
|
+
var DRAWN_CJK_RATIO = 1.08;
|
|
841
|
+
var DRAWN_ASCII_RATIO = 1.16;
|
|
842
|
+
function isAscii(code) {
|
|
843
|
+
return code < 128;
|
|
844
|
+
}
|
|
840
845
|
var WIDE_SYMBOL_ADVANCE_EM = 0.95;
|
|
841
846
|
function isEmoji(code) {
|
|
842
847
|
return code >= 126976 && code <= 129791 || // 絵文字の主要面
|
|
@@ -875,29 +880,31 @@ function measureTextWidth(text, opts = {}) {
|
|
|
875
880
|
const fontSize = opts.fontSize ?? 22;
|
|
876
881
|
const letterSpacing = opts.letterSpacing ?? 0;
|
|
877
882
|
const fontFamily = opts.fontFamily ?? "sans";
|
|
883
|
+
const bound = opts.bound ?? "layout";
|
|
878
884
|
let advanceEmSum = 0;
|
|
879
885
|
let charCount = 0;
|
|
880
886
|
const \u6587\u5B57\u5217 = CLUSTER_JOINER_RE.test(text) ? segmentGraphemes(text) : [...text];
|
|
881
887
|
for (const ch of \u6587\u5B57\u5217) {
|
|
882
888
|
charCount++;
|
|
883
889
|
const code = ch.codePointAt(0) ?? 0;
|
|
890
|
+
const \u5272\u308A\u623B\u3057 = bound === "drawn" && !isEmojiGrapheme(ch, code) ? isAscii(code) ? DRAWN_ASCII_RATIO : isCJK(code) ? DRAWN_CJK_RATIO : 1 : 1;
|
|
884
891
|
if (isEmojiGrapheme(ch, code)) {
|
|
885
892
|
advanceEmSum += fontFamily === "mono" ? MONO_EMOJI_ADVANCE_EM : EMOJI_ADVANCE_EM;
|
|
886
893
|
continue;
|
|
887
894
|
}
|
|
888
895
|
if (fontFamily === "mono") {
|
|
889
|
-
advanceEmSum += isCJK(code) ? 1.08 : JETBRAINS_MONO_ADVANCE_EM;
|
|
896
|
+
advanceEmSum += (isCJK(code) ? 1.08 : JETBRAINS_MONO_ADVANCE_EM) / \u5272\u308A\u623B\u3057;
|
|
890
897
|
continue;
|
|
891
898
|
}
|
|
892
899
|
if (isCJK(code)) {
|
|
893
|
-
advanceEmSum += 1.08;
|
|
900
|
+
advanceEmSum += 1.08 / \u5272\u308A\u623B\u3057;
|
|
894
901
|
continue;
|
|
895
902
|
}
|
|
896
903
|
const table = ch.length === 1 ? INTER_BOLD_ADVANCE_EM[ch] : void 0;
|
|
897
|
-
advanceEmSum += table !== void 0 ? table : defaultAdvanceEm(ch, code);
|
|
904
|
+
advanceEmSum += (table !== void 0 ? table : defaultAdvanceEm(ch, code)) / \u5272\u308A\u623B\u3057;
|
|
898
905
|
}
|
|
899
906
|
const w = advanceEmSum * fontSize + letterSpacing * charCount;
|
|
900
|
-
return Math.max(w, fontSize * 1.2);
|
|
907
|
+
return bound === "drawn" ? w : Math.max(w, fontSize * 1.2);
|
|
901
908
|
}
|
|
902
909
|
function \u53CE\u3081\u308B\u500D\u7387(text, opts, \u5E45) {
|
|
903
910
|
if (!(\u5E45 > 0) || !(opts.fontSize > 0)) return 1;
|
|
@@ -1038,6 +1045,51 @@ function titleFontSize(kind) {
|
|
|
1038
1045
|
return TITLE_FONT_SIZE.get(kind ?? "") ?? TITLE_FONT_SIZE_DEFAULT;
|
|
1039
1046
|
}
|
|
1040
1047
|
var TITLE_BOX_PADDING = 52;
|
|
1048
|
+
var KINDS_SCALING_TITLE_WHEN_LOW = /* @__PURE__ */ new Set(["actor", "event", "function", "storage"]);
|
|
1049
|
+
var KINDS_SCALING_TITLE_ALWAYS = /* @__PURE__ */ new Set([
|
|
1050
|
+
"card",
|
|
1051
|
+
"shape-file",
|
|
1052
|
+
"shape-folder",
|
|
1053
|
+
"shape-cloud",
|
|
1054
|
+
"shape-cylinder",
|
|
1055
|
+
"shape-hexagon",
|
|
1056
|
+
"shape-diamond",
|
|
1057
|
+
"shape-stack",
|
|
1058
|
+
"shape-person",
|
|
1059
|
+
"shape-server-rack",
|
|
1060
|
+
"shape-network-node",
|
|
1061
|
+
"shape-mobile-device",
|
|
1062
|
+
"shape-satellite",
|
|
1063
|
+
"shape-smart-contract",
|
|
1064
|
+
"shape-rpc-node",
|
|
1065
|
+
"shape-wallet",
|
|
1066
|
+
"shape-nft",
|
|
1067
|
+
"shape-token",
|
|
1068
|
+
"shape-blockchain",
|
|
1069
|
+
"shape-bitcoin-chain",
|
|
1070
|
+
"shape-ethereum-chain",
|
|
1071
|
+
"shape-blockchain-node",
|
|
1072
|
+
"shape-bank",
|
|
1073
|
+
"shape-trust-bank",
|
|
1074
|
+
"shape-payment-provider",
|
|
1075
|
+
"shape-credit-card",
|
|
1076
|
+
"shape-brokerage",
|
|
1077
|
+
"shape-exchange",
|
|
1078
|
+
"shape-atm",
|
|
1079
|
+
"shape-website",
|
|
1080
|
+
"shape-storefront",
|
|
1081
|
+
"shape-warehouse",
|
|
1082
|
+
"shape-online-shop",
|
|
1083
|
+
"shape-cdn-edge",
|
|
1084
|
+
"shape-api-gateway"
|
|
1085
|
+
]);
|
|
1086
|
+
var COMPACT_TITLE_MAX_H = 100;
|
|
1087
|
+
function titleScalesToFit(kind, h) {
|
|
1088
|
+
const k = kind ?? "";
|
|
1089
|
+
if (KINDS_SCALING_TITLE_ALWAYS.has(k)) return true;
|
|
1090
|
+
return KINDS_SCALING_TITLE_WHEN_LOW.has(k) && h < COMPACT_TITLE_MAX_H;
|
|
1091
|
+
}
|
|
1092
|
+
var MIN_TITLE_FONT_SIZE = 11;
|
|
1041
1093
|
var KINDS_DRAWN_BY_GENERIC = [
|
|
1042
1094
|
"person",
|
|
1043
1095
|
"user-group",
|
|
@@ -3140,6 +3192,111 @@ function requiredRowsWidth(rows, kind) {
|
|
|
3140
3192
|
if (kind === void 0) return Math.ceil(Math.max(storage, generic));
|
|
3141
3193
|
return Math.ceil(kind === "storage" ? storage : generic);
|
|
3142
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
|
+
}
|
|
3143
3300
|
function \u66F8\u3044\u305F\u5024\u304B\u63A7\u3048(\u66F8\u3044\u305F, \u63A7\u3048) {
|
|
3144
3301
|
const v = (\u66F8\u3044\u305F ?? "").trim();
|
|
3145
3302
|
return v === "" ? \u63A7\u3048 : v;
|
|
@@ -3149,14 +3306,22 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
|
|
|
3149
3306
|
const \u5B9F\u5E45 = textWidth(text, size, letterSpacing);
|
|
3150
3307
|
return \u5B9F\u5E45 > \u5E45 ? \u5E45 / \u5B9F\u5E45 : 1;
|
|
3151
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
|
+
}
|
|
3152
3317
|
var TITLE_MAX = 18;
|
|
3153
3318
|
var TITLE_MIN = 9;
|
|
3154
3319
|
var TITLE_RATIO = 0.17;
|
|
3155
3320
|
var SUB_RATIO = 0.72;
|
|
3156
3321
|
var LINE_GAP = 3;
|
|
3157
3322
|
var BOTTOM_PAD = 4;
|
|
3158
|
-
var
|
|
3159
|
-
var
|
|
3323
|
+
var ASCENT2 = 0.72;
|
|
3324
|
+
var DESCENT2 = 0.25;
|
|
3160
3325
|
var ART_GAP = 4;
|
|
3161
3326
|
var ART_MIN_BAND = 45;
|
|
3162
3327
|
var \u843D\u3068\u3057\u3066\u3082\u63CF\u304F\u7A2E\u5225 = {
|
|
@@ -3221,9 +3386,9 @@ function labelPlan(node) {
|
|
|
3221
3386
|
y -= \u540D\u524D\u5927 + LINE_GAP;
|
|
3222
3387
|
const \u80A9\u66F8 = \u80A9\u66F8\u3042\u308A2 ? { y, size: \u5C0F\u3055\u3044\u5B57 } : null;
|
|
3223
3388
|
const \u4E0A\u306E\u884C = \u80A9\u66F8 ?? \u540D\u524D;
|
|
3224
|
-
return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size *
|
|
3389
|
+
return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size * ASCENT2 };
|
|
3225
3390
|
};
|
|
3226
|
-
const \u5165\u308B = (\u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2) => \u7A4D\u3080(1, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, 1 *
|
|
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;
|
|
3227
3392
|
let \u8AAC\u660E\u3042\u308A = Boolean(node.subtitle);
|
|
3228
3393
|
let \u80A9\u66F8\u3042\u308A = Boolean(node.eyebrow);
|
|
3229
3394
|
const \u843D\u3068\u3057\u305F = [];
|
|
@@ -3241,14 +3406,14 @@ function labelPlan(node) {
|
|
|
3241
3406
|
for (let size = \u4E0A\u9650; size >= 1; size--) {
|
|
3242
3407
|
const \u5C0F\u3055\u3044\u5B572 = Math.max(1, Math.round(size * SUB_RATIO));
|
|
3243
3408
|
const \u4E0B\u306E\u884C\u5927 = \u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B572 : size;
|
|
3244
|
-
if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 *
|
|
3409
|
+
if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 * DESCENT2).\u4E0A\u7AEF >= \u5929) {
|
|
3245
3410
|
\u540D\u524D\u5927 = size;
|
|
3246
3411
|
break;
|
|
3247
3412
|
}
|
|
3248
3413
|
}
|
|
3249
|
-
if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (
|
|
3414
|
+
if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (ASCENT2 + DESCENT2);
|
|
3250
3415
|
const \u5C0F\u3055\u3044\u5B57 = Math.max(1, Math.round(\u540D\u524D\u5927 * SUB_RATIO));
|
|
3251
|
-
const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) *
|
|
3416
|
+
const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) * DESCENT2;
|
|
3252
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);
|
|
3253
3418
|
const \u4E0B\u4F59\u767D = Math.min(Math.max(BOTTOM_PAD, \u5F35\u308A\u51FA\u3057), \u5F35\u308A\u51FA\u3057 + \u4F59\u308A);
|
|
3254
3419
|
return \u7A4D\u3080(\u540D\u524D\u5927, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u4F59\u767D);
|
|
@@ -3308,16 +3473,19 @@ function bodyBand(node, opt) {
|
|
|
3308
3473
|
const h = Math.max(0, \u7BB1h - \u7E26\u4F59\u767D * ky);
|
|
3309
3474
|
return { x, y, w, h, cx: x + w / 2, cy: y + h / 2, \u53F3: x + w, \u5E95: y + h };
|
|
3310
3475
|
}
|
|
3311
|
-
function fitLabel(band, block, pos) {
|
|
3476
|
+
function fitLabel(band, block, pos, \u6A2A\u306E\u4E0B\u9650 = 0) {
|
|
3312
3477
|
const \u7E26 = block.\u4E0A + block.\u4E0B;
|
|
3313
3478
|
const \u6A2A = Math.max(0, block.\u5E45);
|
|
3314
3479
|
if (!(\u7E26 > 0)) return { k: 1, x: pos.x, y: pos.y };
|
|
3315
3480
|
if (!(band.h > 0) || !(band.w > 0)) return { k: 0, x: band.x + band.w / 2, y: band.y };
|
|
3316
|
-
const
|
|
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);
|
|
3317
3483
|
const \u534A = \u6A2A * k / 2;
|
|
3318
3484
|
return {
|
|
3319
3485
|
k,
|
|
3320
|
-
|
|
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)),
|
|
3321
3489
|
y: Math.max(band.y + block.\u4E0A * k, Math.min(pos.y, band.y + band.h - block.\u4E0B * k))
|
|
3322
3490
|
};
|
|
3323
3491
|
}
|
|
@@ -3370,111 +3538,6 @@ function \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u5B57\u3089)
|
|
|
3370
3538
|
return Math.max(1, Math.min(\u623B\u3057, \u4E0A\u9650));
|
|
3371
3539
|
}
|
|
3372
3540
|
|
|
3373
|
-
// src/kinds/compact-title.ts
|
|
3374
|
-
function estimateTextWidth(text, fontSize) {
|
|
3375
|
-
let w = 0;
|
|
3376
|
-
for (const ch of text) {
|
|
3377
|
-
const isFullWidth = /[\u3000-\u9FFF\uFF00-\uFFEF]/.test(ch);
|
|
3378
|
-
w += fontSize * (isFullWidth ? 1.05 : 0.62);
|
|
3379
|
-
}
|
|
3380
|
-
return w;
|
|
3381
|
-
}
|
|
3382
|
-
function fitTextSize(text, maxWidth, targetSize, minSize) {
|
|
3383
|
-
let size = targetSize;
|
|
3384
|
-
while (size > minSize && estimateTextWidth(text, size) > maxWidth) {
|
|
3385
|
-
size -= 1;
|
|
3386
|
-
}
|
|
3387
|
-
return size;
|
|
3388
|
-
}
|
|
3389
|
-
var COMPACT_MAX_H = 100;
|
|
3390
|
-
var COMPACT_PADDING_X = 16;
|
|
3391
|
-
var MIN_TEXT_SIZE = 11;
|
|
3392
|
-
var ASCENT2 = 0.72;
|
|
3393
|
-
var DESCENT2 = 0.25;
|
|
3394
|
-
var MIN_BAND_H = MIN_TEXT_SIZE * (ASCENT2 + DESCENT2);
|
|
3395
|
-
var EYEBROW_BASELINE = 38;
|
|
3396
|
-
var EYEBROW_SIZE = 18;
|
|
3397
|
-
var EYEBROW_GAP = 8;
|
|
3398
|
-
var BOTTOM_INSET = 4;
|
|
3399
|
-
var eyebrowBottom = () => EYEBROW_BASELINE + EYEBROW_SIZE * DESCENT2;
|
|
3400
|
-
var titleBandTop = (hasEyebrow) => eyebrowBottom() + EYEBROW_GAP ;
|
|
3401
|
-
var isCompactBox = (h) => h < COMPACT_MAX_H;
|
|
3402
|
-
function titlePlacement(node, \u901A\u5E38, opts = {}) {
|
|
3403
|
-
if (!isCompactBox(node.h)) {
|
|
3404
|
-
return { x: \u901A\u5E38.x, y: \u901A\u5E38.y, size: \u901A\u5E38.size, anchor: "start" };
|
|
3405
|
-
}
|
|
3406
|
-
const \u9AD8\u3055 = Math.max(0, node.h);
|
|
3407
|
-
const \u76EE\u5370\u3042\u308A = opts.hasEyebrow === true;
|
|
3408
|
-
const \u4E0A = \u76EE\u5370\u3042\u308A && \u9AD8\u3055 >= eyebrowBottom() ? titleBandTop() : 0;
|
|
3409
|
-
const \u751F\u306E\u5E2F = Math.max(0, \u9AD8\u3055 - \u4E0A);
|
|
3410
|
-
const \u4E0B\u4F59\u767D = \u751F\u306E\u5E2F >= MIN_BAND_H + BOTTOM_INSET ? BOTTOM_INSET : 0;
|
|
3411
|
-
const \u5E2F = \u751F\u306E\u5E2F - \u4E0B\u4F59\u767D;
|
|
3412
|
-
const \u5E45\u3067 = fitTextSize(
|
|
3413
|
-
node.title,
|
|
3414
|
-
Math.max(0, node.w - COMPACT_PADDING_X),
|
|
3415
|
-
\u901A\u5E38.size,
|
|
3416
|
-
MIN_TEXT_SIZE
|
|
3417
|
-
);
|
|
3418
|
-
const \u5E2F\u3067 = Math.floor(\u5E2F / (ASCENT2 + DESCENT2));
|
|
3419
|
-
const size = Math.max(MIN_TEXT_SIZE, Math.min(\u5E45\u3067, \u5E2F\u3067));
|
|
3420
|
-
const \u5B57\u9AD8 = size * (ASCENT2 + DESCENT2);
|
|
3421
|
-
const y = \u5B57\u9AD8 <= \u5E2F ? \u4E0A + \u5E2F / 2 + size * (ASCENT2 - DESCENT2) / 2 : \u4E0A > 0 ? \u4E0A + size * ASCENT2 : (\u9AD8\u3055 - \u5B57\u9AD8) / 2 + size * ASCENT2;
|
|
3422
|
-
return { x: node.w / 2, y, size, anchor: "middle" };
|
|
3423
|
-
}
|
|
3424
|
-
|
|
3425
|
-
// src/kinds/box-lines.ts
|
|
3426
|
-
var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
|
|
3427
|
-
var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
|
|
3428
|
-
var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
|
|
3429
|
-
var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
|
|
3430
|
-
function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
|
|
3431
|
-
return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
|
|
3432
|
-
}
|
|
3433
|
-
function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
|
|
3434
|
-
if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
|
|
3435
|
-
if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
|
|
3436
|
-
const \u7701\u7565 = "\u2026";
|
|
3437
|
-
const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
|
|
3438
|
-
if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
|
|
3439
|
-
let \u51FA = "";
|
|
3440
|
-
let \u5E45 = 0;
|
|
3441
|
-
for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
|
|
3442
|
-
const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
|
|
3443
|
-
if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
|
|
3444
|
-
\u5E45 += \u5B57\u306E\u5E452;
|
|
3445
|
-
\u51FA += c;
|
|
3446
|
-
}
|
|
3447
|
-
return `${\u51FA}${\u7701\u7565}`;
|
|
3448
|
-
}
|
|
3449
|
-
var \u7E2E\u3081\u306E\u4E0B\u9650 = MIN_TEXT_SIZE;
|
|
3450
|
-
function \u5E45\u306B\u53CE\u3081\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
|
|
3451
|
-
let size = fontSize;
|
|
3452
|
-
while (size > \u7E2E\u3081\u306E\u4E0B\u9650 && \u6E2C\u308B(text, size) > \u4F7F\u3048\u308B\u5E452) size -= 1;
|
|
3453
|
-
return { text: \u5E45\u3067\u5207\u308B(text, size, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B), fontSize: size };
|
|
3454
|
-
}
|
|
3455
|
-
function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
|
|
3456
|
-
const \u533A\u5207\u308A = Intl.Segmenter;
|
|
3457
|
-
if (typeof \u533A\u5207\u308A !== "function") return [...text];
|
|
3458
|
-
return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
|
|
3459
|
-
}
|
|
3460
|
-
function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30553) {
|
|
3461
|
-
const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
|
|
3462
|
-
if (\u5019\u88DC.length === 0) return [];
|
|
3463
|
-
const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30553 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
|
|
3464
|
-
const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
|
|
3465
|
-
const \u6B8B\u3059 = [...\u5019\u88DC];
|
|
3466
|
-
while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
|
|
3467
|
-
const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
|
|
3468
|
-
const \u53CE\u3081\u305F = \u6B8B\u3059.map((r) => ({ ...r, ...\u5E45\u306B\u53CE\u3081\u308B(r.text, r.fontSize, \u5E45) }));
|
|
3469
|
-
const \u7DCF\u9AD8 = \u9AD8\u3055(\u53CE\u3081\u305F);
|
|
3470
|
-
let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
|
|
3471
|
-
return \u53CE\u3081\u305F.map((r) => {
|
|
3472
|
-
const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
|
|
3473
|
-
\u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
|
|
3474
|
-
return { ...r, dy };
|
|
3475
|
-
});
|
|
3476
|
-
}
|
|
3477
|
-
|
|
3478
3541
|
// src/render/tone.ts
|
|
3479
3542
|
var TONE = {
|
|
3480
3543
|
accent: "var(--cdl-tone-accent, #2d6a8f)",
|
|
@@ -6131,12 +6194,23 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5
|
|
|
6131
6194
|
if (!isRenderedNode(n)) continue;
|
|
6132
6195
|
const titleTrimmed = n.title?.trim() ?? "";
|
|
6133
6196
|
if (!titleTrimmed) continue;
|
|
6134
|
-
const
|
|
6135
|
-
|
|
6197
|
+
const \u4F59\u767D = drawsTitleOutsideBox(n.kind) ? 0 : TITLE_BOX_PADDING;
|
|
6198
|
+
const \u4F7F\u3048\u308B\u5E452 = n.w - \u4F59\u767D;
|
|
6199
|
+
const \u5B9F\u5E45 = measureTextWidth(titleTrimmed, { fontSize: titleFontSize(n.kind), bound: "drawn" });
|
|
6200
|
+
if (titleScalesToFit(n.kind, n.h)) {
|
|
6201
|
+
const \u7E2E\u3081\u305F\u5927\u304D\u3055 = \u5B9F\u5E45 > 0 ? titleFontSize(n.kind) * Math.min(1, \u4F7F\u3048\u308B\u5E452 / \u5B9F\u5E45) : titleFontSize(n.kind);
|
|
6202
|
+
if (\u7E2E\u3081\u305F\u5927\u304D\u3055 < MIN_TITLE_FONT_SIZE) {
|
|
6203
|
+
push(
|
|
6204
|
+
"text-readability",
|
|
6205
|
+
`node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u306B\u53CE\u307E\u3089\u305A\u3001\u8AAD\u3081\u308B\u4E0B\u9650 ${MIN_TITLE_FONT_SIZE}px \u3092\u5272\u308B (\u7E2E\u3081\u3066 ${\u7E2E\u3081\u305F\u5927\u304D\u3055.toFixed(1)}px)`,
|
|
6206
|
+
"warn"
|
|
6207
|
+
);
|
|
6208
|
+
}
|
|
6209
|
+
} else if (\u5B9F\u5E45 > \u4F7F\u3048\u308B\u5E452 + 8) {
|
|
6136
6210
|
push(
|
|
6137
6211
|
"text-readability",
|
|
6138
6212
|
// 字ごとの実幅は小数になるので、読む人に出す時だけ丸める (判定は丸めない)
|
|
6139
|
-
`node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u3092\u8D85\u904E\u3059\u308B\u53EF\u80FD\u6027 (\u671F\u5F85 ${Math.round(
|
|
6213
|
+
`node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u3092\u8D85\u904E\u3059\u308B\u53EF\u80FD\u6027 (\u671F\u5F85 ${Math.round(\u5B9F\u5E45 + \u4F59\u767D)}px)`,
|
|
6140
6214
|
"warn"
|
|
6141
6215
|
);
|
|
6142
6216
|
}
|
|
@@ -11776,7 +11850,7 @@ function CardNode({ node, active }) {
|
|
|
11776
11850
|
const textAnchor = compact ? "middle" : "start";
|
|
11777
11851
|
const subtitleY = 124 - \u305A\u3089\u3057;
|
|
11778
11852
|
const \u6700\u5927\u306E\u884C\u9001\u308A = SUBTITLE_SIZE * \u884C\u9001\u308A\u306E\u500D\u7387;
|
|
11779
|
-
const \u4E8C\u884C\u304C\u5165\u308B = !compact && subtitleY - \u6700\u5927\u306E\u884C\u9001\u308A / 2 - SUBTITLE_SIZE *
|
|
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;
|
|
11780
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;
|
|
11781
11855
|
const subtitleSize = \u8AAC\u660E?.size ?? 21;
|
|
11782
11856
|
const \u884C\u9001\u308A = subtitleSize * \u884C\u9001\u308A\u306E\u500D\u7387;
|
|
@@ -16073,20 +16147,22 @@ var EYEBROW_TRACKING = 2;
|
|
|
16073
16147
|
var SUB_SIZE = 11;
|
|
16074
16148
|
var SUB_GAP = 4;
|
|
16075
16149
|
function labelBlock(node, pos, size, band) {
|
|
16076
|
-
const \u4E0A = node.eyebrow ? size + EYEBROW_GAP2 + EYEBROW_SIZE2 *
|
|
16077
|
-
const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE *
|
|
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;
|
|
16078
16152
|
const \u5E45 = Math.max(
|
|
16079
16153
|
textWidth(node.title ?? "", size),
|
|
16080
16154
|
node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
|
|
16081
16155
|
node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
|
|
16082
16156
|
);
|
|
16083
|
-
const
|
|
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);
|
|
16084
16159
|
return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
|
|
16085
16160
|
}
|
|
16086
16161
|
function commonLabel(node, pos, size, band) {
|
|
16087
16162
|
const \u584A = labelBlock(node, pos, size, band);
|
|
16088
16163
|
const k = \u584A.k;
|
|
16089
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));
|
|
16090
16166
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16091
16167
|
node.eyebrow && /* @__PURE__ */ jsx(
|
|
16092
16168
|
"text",
|
|
@@ -16098,7 +16174,7 @@ function commonLabel(node, pos, size, band) {
|
|
|
16098
16174
|
letterSpacing: EYEBROW_TRACKING * k,
|
|
16099
16175
|
textAnchor: "middle",
|
|
16100
16176
|
fill: "var(--cdl-tone-accent, #2d6a8f)",
|
|
16101
|
-
children: node.eyebrow
|
|
16177
|
+
children: \u5207\u308B(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING)
|
|
16102
16178
|
}
|
|
16103
16179
|
),
|
|
16104
16180
|
/* @__PURE__ */ jsx(
|
|
@@ -16111,7 +16187,7 @@ function commonLabel(node, pos, size, band) {
|
|
|
16111
16187
|
fontWeight: 700,
|
|
16112
16188
|
textAnchor: "middle",
|
|
16113
16189
|
fill: "var(--cdl-text, #1a1f2a)",
|
|
16114
|
-
children: node.title
|
|
16190
|
+
children: \u5207\u308B(node.title ?? "", size)
|
|
16115
16191
|
}
|
|
16116
16192
|
),
|
|
16117
16193
|
node.subtitle && /* @__PURE__ */ jsx(
|
|
@@ -16122,7 +16198,7 @@ function commonLabel(node, pos, size, band) {
|
|
|
16122
16198
|
fontSize: SUB_SIZE * k,
|
|
16123
16199
|
textAnchor: "middle",
|
|
16124
16200
|
fill: "var(--cdl-text-dim, #5a6270)",
|
|
16125
|
-
children: node.subtitle
|
|
16201
|
+
children: \u5207\u308B(node.subtitle, SUB_SIZE)
|
|
16126
16202
|
}
|
|
16127
16203
|
)
|
|
16128
16204
|
] });
|
|
@@ -16457,7 +16533,9 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
|
|
|
16457
16533
|
node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
|
|
16458
16534
|
node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
|
|
16459
16535
|
);
|
|
16460
|
-
const
|
|
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));
|
|
16461
16539
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
16462
16540
|
node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx(
|
|
16463
16541
|
"text",
|
|
@@ -16469,7 +16547,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
|
|
|
16469
16547
|
letterSpacing: EYEBROW_TRACKING * k,
|
|
16470
16548
|
textAnchor: "middle",
|
|
16471
16549
|
fill: "var(--cdl-tone-accent, #2d6a8f)",
|
|
16472
|
-
children: node.eyebrow
|
|
16550
|
+
children: \u5207\u308B(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING)
|
|
16473
16551
|
}
|
|
16474
16552
|
),
|
|
16475
16553
|
/* @__PURE__ */ jsx(
|
|
@@ -16482,7 +16560,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
|
|
|
16482
16560
|
fontWeight: 700,
|
|
16483
16561
|
textAnchor: "middle",
|
|
16484
16562
|
fill: "var(--cdl-text, #1a1f2a)",
|
|
16485
|
-
children: node.title
|
|
16563
|
+
children: \u5207\u308B(node.title ?? "", plan.\u540D\u524D.size)
|
|
16486
16564
|
}
|
|
16487
16565
|
),
|
|
16488
16566
|
node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx(
|
|
@@ -16493,7 +16571,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
|
|
|
16493
16571
|
fontSize: plan.\u8AAC\u660E.size * k,
|
|
16494
16572
|
textAnchor: "middle",
|
|
16495
16573
|
fill: "var(--cdl-text-dim, #5a6270)",
|
|
16496
|
-
children: node.subtitle
|
|
16574
|
+
children: \u5207\u308B(node.subtitle, plan.\u8AAC\u660E.size)
|
|
16497
16575
|
}
|
|
16498
16576
|
)
|
|
16499
16577
|
] });
|
|
@@ -17416,17 +17494,19 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxs(Fragment, { chil
|
|
|
17416
17494
|
var LABEL_EYEBROW_SPACING = 2;
|
|
17417
17495
|
function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
17418
17496
|
const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
17419
|
-
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
|
|
17420
|
-
|
|
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)) };
|
|
17421
17501
|
}
|
|
17422
17502
|
function bottomLabel(node, cx, plan) {
|
|
17423
17503
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
|
|
17424
17504
|
const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
17425
17505
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
17426
17506
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
17427
|
-
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:
|
|
17428
|
-
/* @__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:
|
|
17429
|
-
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:
|
|
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 })
|
|
17430
17510
|
] });
|
|
17431
17511
|
}
|
|
17432
17512
|
var RACK_SLOT_TOP = 20;
|
|
@@ -18221,13 +18301,22 @@ function blockchainNodeExtent(strokeWidth) {
|
|
|
18221
18301
|
return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
|
|
18222
18302
|
}
|
|
18223
18303
|
function bottomLabel2(node, cx, plan) {
|
|
18224
|
-
const \
|
|
18225
|
-
|
|
18226
|
-
|
|
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;
|
|
18227
18316
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18228
|
-
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:
|
|
18229
|
-
/* @__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:
|
|
18230
|
-
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:
|
|
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 })
|
|
18231
18320
|
] });
|
|
18232
18321
|
}
|
|
18233
18322
|
function EthereumDiamond({ cx, cy, h, colors }) {
|
|
@@ -18836,17 +18925,19 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
|
|
|
18836
18925
|
}
|
|
18837
18926
|
function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
18838
18927
|
const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
18839
|
-
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
|
|
18840
|
-
|
|
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)) };
|
|
18841
18932
|
}
|
|
18842
18933
|
function bottomLabel3(node, cx, plan) {
|
|
18843
18934
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
|
|
18844
18935
|
const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
18845
18936
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
18846
18937
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18847
|
-
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:
|
|
18848
|
-
/* @__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:
|
|
18849
|
-
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:
|
|
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 })
|
|
18850
18941
|
] });
|
|
18851
18942
|
}
|
|
18852
18943
|
var BANK_PEDIMENT_H = 44;
|
|
@@ -19319,17 +19410,19 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
|
|
|
19319
19410
|
}
|
|
19320
19411
|
function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
19321
19412
|
const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
19322
|
-
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
|
|
19323
|
-
|
|
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)) };
|
|
19324
19417
|
}
|
|
19325
19418
|
function bottomLabel4(node, cx, plan) {
|
|
19326
19419
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
|
|
19327
19420
|
const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
19328
19421
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
19329
19422
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19330
|
-
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:
|
|
19331
|
-
/* @__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:
|
|
19332
|
-
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:
|
|
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 })
|
|
19333
19426
|
] });
|
|
19334
19427
|
}
|
|
19335
19428
|
var DROP_SHADOW_D = 4;
|