@cardenelabs/cdl 0.109.0 → 0.110.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -1
- package/dist/index.cjs +31 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +31 -21
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +31 -21
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +31 -21
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/shape-basement.tsx +16 -7
- package/src/kinds/shape-blockchain.tsx +9 -5
- package/src/kinds/shape-commerce.tsx +10 -9
- package/src/kinds/shape-finance.tsx +10 -9
- package/src/kinds/shape-hardware.tsx +10 -10
- package/src/kinds/shape-region.tsx +26 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,40 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.110.0] - 2026-09-30
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **題の下限が、題以外の行まで切っていた** (#957)
|
|
13
|
+
|
|
14
|
+
0.108.0 (#953) で入れた読める下限 (11px) の効き方が、題以外の行に及んでいた。
|
|
15
|
+
引く側 (見本帳) を 0.109.0 に上げると、記法に書いた補いの行が切られる図が出た。
|
|
16
|
+
|
|
17
|
+
`shape-diamond` の 260x260 の箱で実測した内訳。
|
|
18
|
+
|
|
19
|
+
| 版 | 肩書 | 題 | 説明 |
|
|
20
|
+
|---|---|---|---|
|
|
21
|
+
| 0.107.0 相当 | 8.32 `方針` | 10.40 `再送の判定` | 7.63 `間隔を倍に広げる · 最大 3 …` |
|
|
22
|
+
| 0.109.0 | 8.80 `方針` | 11.00 `再送の判定` | 8.07 `間隔を倍に広げる · 最大 …` |
|
|
23
|
+
| 0.110.0 (本版) | 8.32 `方針` | 10.40 `再送の判定` | 7.63 `間隔を倍に広げる · 最大 3 回` |
|
|
24
|
+
|
|
25
|
+
2 つ直した。
|
|
26
|
+
|
|
27
|
+
**1 つ目 = 塊の倍率は一番広い行で決まるのに、下限を題の大きさから出していた**。
|
|
28
|
+
この箱で一番広いのは説明の行 (14 字) で、題は 5 字しかない。 題を 0.6px 上げるために
|
|
29
|
+
説明から `3 回` を落としていた = 払うのと得るのが別の行になる。
|
|
30
|
+
|
|
31
|
+
下限を当てるのは **題が一番広い行のときだけ** にした。 行ごとに倍率を出す 4 種
|
|
32
|
+
(`shape-commerce` / `shape-finance` / `shape-hardware` / `shape-blockchain`) では、
|
|
33
|
+
下限を当てるのは題の行だけにした (#953 の対象外 scope と同じ)。
|
|
34
|
+
|
|
35
|
+
**2 つ目 = ちょうど収まる行を丸め誤差で切っていた**。
|
|
36
|
+
塊の倍率は一番広い行が帯にちょうど収まる値なので、切る側の測り直しが浮動小数で
|
|
37
|
+
髪の毛 1 本ぶん上回ると、収まっている行を切る。 切る判定に相対の余裕 (1e-9) を入れた。
|
|
38
|
+
|
|
39
|
+
これで **切られるのは、自分が入らない行だけ** になる。
|
|
40
|
+
題が一番広い行のときに下限で止めて切る振る舞い (#953) は変えていない。
|
|
41
|
+
|
|
8
42
|
## [0.109.0] - 2026-09-30
|
|
9
43
|
|
|
10
44
|
### Fixed
|
|
@@ -4383,7 +4417,8 @@ Initial OSS release.
|
|
|
4383
4417
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
4384
4418
|
行き止まりになる。
|
|
4385
4419
|
|
|
4386
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
4420
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.110.0...HEAD
|
|
4421
|
+
[0.110.0]: https://github.com/cardene777/cdl/compare/v0.109.0...v0.110.0
|
|
4387
4422
|
[0.109.0]: https://github.com/cardene777/cdl/compare/v0.108.0...v0.109.0
|
|
4388
4423
|
[0.108.0]: https://github.com/cardene777/cdl/compare/v0.107.0...v0.108.0
|
|
4389
4424
|
[0.107.0]: https://github.com/cardene777/cdl/compare/v0.106.0...v0.107.0
|
package/dist/index.cjs
CHANGED
|
@@ -14704,10 +14704,14 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
|
|
|
14704
14704
|
function \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055) {
|
|
14705
14705
|
return \u5927\u304D\u3055 > MIN_TITLE_FONT_SIZE ? MIN_TITLE_FONT_SIZE / \u5927\u304D\u3055 : 0;
|
|
14706
14706
|
}
|
|
14707
|
+
var \u5207\u308B\u4F59\u88D5 = 1e-9;
|
|
14708
|
+
function \u5E2F\u3067\u5207\u308B(text, \u5927\u304D\u3055, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
|
|
14709
|
+
return \u5E45\u3067\u5207\u308B(text, \u5927\u304D\u3055, \u5E45\u4E0A\u9650 * (1 + \u5207\u308B\u4F59\u88D5), \u6E2C\u308B);
|
|
14710
|
+
}
|
|
14707
14711
|
function \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u984C, \u5927\u304D\u3055, \u5B57\u9593, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
|
|
14708
14712
|
const \u4E0B\u9650 = \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055);
|
|
14709
14713
|
if (!(\u4E0B\u9650 > 0) || !(\u5E45\u4E0A\u9650 > 0)) return 0;
|
|
14710
|
-
return \
|
|
14714
|
+
return \u5E2F\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;
|
|
14711
14715
|
}
|
|
14712
14716
|
var TITLE_MAX = 18;
|
|
14713
14717
|
var TITLE_MIN = 9;
|
|
@@ -28721,7 +28725,8 @@ function labelBlock(node, pos, size, band) {
|
|
|
28721
28725
|
node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
|
|
28722
28726
|
node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
|
|
28723
28727
|
);
|
|
28724
|
-
const \
|
|
28728
|
+
const \u984C\u5E45 = textWidth(node.title ?? "", size);
|
|
28729
|
+
const \u4E0B\u9650 = \u984C\u5E45 >= \u5E45 ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth) : 0;
|
|
28725
28730
|
const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos, \u4E0B\u9650);
|
|
28726
28731
|
return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
|
|
28727
28732
|
}
|
|
@@ -28729,7 +28734,7 @@ function commonLabel(node, pos, size, band) {
|
|
|
28729
28734
|
const \u584A = labelBlock(node, pos, size, band);
|
|
28730
28735
|
const k = \u584A.k;
|
|
28731
28736
|
const x = \u584A.x;
|
|
28732
|
-
const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \
|
|
28737
|
+
const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E2F\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, band.w, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
|
|
28733
28738
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
28734
28739
|
node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
|
|
28735
28740
|
"text",
|
|
@@ -29100,9 +29105,10 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
|
|
|
29100
29105
|
node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
|
|
29101
29106
|
node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
|
|
29102
29107
|
);
|
|
29103
|
-
const \
|
|
29108
|
+
const \u984C\u5E45 = textWidth(node.title ?? "", plan.\u540D\u524D.size);
|
|
29109
|
+
const \u4E0B\u9650 = \u984C\u5E45 >= \u5E45 ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth) : 0;
|
|
29104
29110
|
const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, Math.max(\u5E45\u4E0A\u9650 / \u5E45, \u4E0B\u9650)) : 1;
|
|
29105
|
-
const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \
|
|
29111
|
+
const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E2F\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, \u5E45\u4E0A\u9650, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
|
|
29106
29112
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
29107
29113
|
node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
29108
29114
|
"text",
|
|
@@ -30059,16 +30065,17 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRu
|
|
|
30059
30065
|
)
|
|
30060
30066
|
] });
|
|
30061
30067
|
var LABEL_EYEBROW_SPACING = 2;
|
|
30062
|
-
function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
30068
|
+
function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
|
|
30063
30069
|
const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
30064
|
-
const \
|
|
30070
|
+
const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, textWidth) : 0;
|
|
30071
|
+
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
|
|
30065
30072
|
const size = \u5927\u304D\u3055 * \u500D\u7387;
|
|
30066
30073
|
const spacing = \u5B57\u9593 * \u500D\u7387;
|
|
30067
|
-
return { size, spacing, text: \
|
|
30074
|
+
return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
|
|
30068
30075
|
}
|
|
30069
30076
|
function bottomLabel(node, cx, plan) {
|
|
30070
30077
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
|
|
30071
|
-
const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
30078
|
+
const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
|
|
30072
30079
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
30073
30080
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
30074
30081
|
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 }),
|
|
@@ -30868,14 +30875,15 @@ function blockchainNodeExtent(strokeWidth) {
|
|
|
30868
30875
|
return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
|
|
30869
30876
|
}
|
|
30870
30877
|
function bottomLabel2(node, cx, plan) {
|
|
30871
|
-
const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593) => {
|
|
30878
|
+
const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593, \u984C\u304B = false) => {
|
|
30872
30879
|
const \u6E2C\u308B = (u, f, ls) => \u5B57\u306E\u5E45(u, f) + ls * [...u].length;
|
|
30873
|
-
const \
|
|
30880
|
+
const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(t, \u5927\u304D\u3055, \u5B57\u9593, node.w, \u6E2C\u308B) : 0;
|
|
30881
|
+
const \u500D\u7387 = Math.max(\u5E45\u306E\u500D\u7387(t, \u5927\u304D\u3055, \u5B57\u9593, node.w), \u4E0B\u9650);
|
|
30874
30882
|
const size = \u5927\u304D\u3055 * \u500D\u7387;
|
|
30875
|
-
return { \u500D\u7387, text: \
|
|
30883
|
+
return { \u500D\u7387, text: \u5E2F\u3067\u5207\u308B(t, size, node.w, (u, f) => \u5B57\u306E\u5E45(u, f) + \u5B57\u9593 * \u500D\u7387 * [...u].length) };
|
|
30876
30884
|
};
|
|
30877
30885
|
const \u80A9 = node.eyebrow && plan.\u80A9\u66F8 ? \u53CE\u3081\u308B(node.eyebrow, plan.\u80A9\u66F8.size, 2) : { \u500D\u7387: 1, text: node.eyebrow ?? "" };
|
|
30878
|
-
const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0);
|
|
30886
|
+
const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0, true);
|
|
30879
30887
|
const \u8AAC = node.subtitle && plan.\u8AAC\u660E ? \u53CE\u3081\u308B(node.subtitle, plan.\u8AAC\u660E.size, 0) : { \u500D\u7387: 1, text: node.subtitle ?? "" };
|
|
30880
30888
|
const \u80A9\u66F8\u500D\u7387 = \u80A9.\u500D\u7387;
|
|
30881
30889
|
const \u540D\u524D\u500D\u7387 = \u540D.\u500D\u7387;
|
|
@@ -31490,16 +31498,17 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
|
|
|
31490
31498
|
}
|
|
31491
31499
|
return \u5E45 + \u5B57\u9593 * \u5B57\u6570;
|
|
31492
31500
|
}
|
|
31493
|
-
function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
31501
|
+
function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
|
|
31494
31502
|
const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
31495
|
-
const \
|
|
31503
|
+
const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E45) : 0;
|
|
31504
|
+
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
|
|
31496
31505
|
const size = \u5927\u304D\u3055 * \u500D\u7387;
|
|
31497
31506
|
const spacing = \u5B57\u9593 * \u500D\u7387;
|
|
31498
|
-
return { size, spacing, text: \
|
|
31507
|
+
return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
|
|
31499
31508
|
}
|
|
31500
31509
|
function bottomLabel3(node, cx, plan) {
|
|
31501
31510
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
|
|
31502
|
-
const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
31511
|
+
const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
|
|
31503
31512
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
31504
31513
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
31505
31514
|
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 }),
|
|
@@ -31975,16 +31984,17 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
|
|
|
31975
31984
|
}
|
|
31976
31985
|
return \u5E45 + \u5B57\u9593 * \u5B57\u6570;
|
|
31977
31986
|
}
|
|
31978
|
-
function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
|
|
31987
|
+
function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
|
|
31979
31988
|
const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
|
|
31980
|
-
const \
|
|
31989
|
+
const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E452) : 0;
|
|
31990
|
+
const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
|
|
31981
31991
|
const size = \u5927\u304D\u3055 * \u500D\u7387;
|
|
31982
31992
|
const spacing = \u5B57\u9593 * \u500D\u7387;
|
|
31983
|
-
return { size, spacing, text: \
|
|
31993
|
+
return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
|
|
31984
31994
|
}
|
|
31985
31995
|
function bottomLabel4(node, cx, plan) {
|
|
31986
31996
|
const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
|
|
31987
|
-
const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
|
|
31997
|
+
const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
|
|
31988
31998
|
const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
|
|
31989
31999
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
31990
32000
|
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 }),
|