@lism-css/mcp 0.23.0 → 0.24.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.
Files changed (73) hide show
  1. package/README.ja.md +15 -15
  2. package/README.md +5 -5
  3. package/dist/data/docs-index.json +51 -76
  4. package/dist/data/guides/SKILL.md +162 -229
  5. package/dist/data/guides/antipatterns-layout.md +268 -0
  6. package/dist/data/guides/antipatterns.md +118 -196
  7. package/dist/data/guides/base-styles.md +10 -9
  8. package/dist/data/guides/components-core.md +26 -8
  9. package/dist/data/guides/components-ui.md +21 -21
  10. package/dist/data/guides/css-rules.md +40 -57
  11. package/dist/data/guides/customize.md +7 -5
  12. package/dist/data/guides/naming.md +22 -41
  13. package/dist/data/guides/primitive-class.md +5 -5
  14. package/dist/data/guides/primitives/a--decorator.md +2 -28
  15. package/dist/data/guides/primitives/a--divider.md +1 -52
  16. package/dist/data/guides/primitives/a--icon.md +2 -76
  17. package/dist/data/guides/primitives/a--spacer.md +1 -49
  18. package/dist/data/guides/primitives/l--autoColumns.md +7 -54
  19. package/dist/data/guides/primitives/l--box.md +1 -21
  20. package/dist/data/guides/primitives/l--center.md +6 -39
  21. package/dist/data/guides/primitives/l--cluster.md +6 -26
  22. package/dist/data/guides/primitives/l--columns.md +7 -56
  23. package/dist/data/guides/primitives/l--flex.md +5 -62
  24. package/dist/data/guides/primitives/l--flow.md +11 -72
  25. package/dist/data/guides/primitives/l--frame.md +7 -78
  26. package/dist/data/guides/primitives/l--grid.md +5 -56
  27. package/dist/data/guides/primitives/l--stack.md +5 -44
  28. package/dist/data/guides/primitives/l--switchColumns.md +8 -53
  29. package/dist/data/guides/primitives/l--tileGrid.md +7 -44
  30. package/dist/data/guides/primitives/l--withSide.md +9 -79
  31. package/dist/data/guides/property-class/all-props.md +244 -0
  32. package/dist/data/guides/property-class/bd.md +5 -70
  33. package/dist/data/guides/property-class/hov.md +14 -73
  34. package/dist/data/guides/property-class/max-sz.md +3 -39
  35. package/dist/data/guides/property-class.md +31 -249
  36. package/dist/data/guides/references/authoring.md +246 -0
  37. package/dist/data/guides/references/page-sections.md +99 -0
  38. package/dist/data/guides/references/verification.md +73 -0
  39. package/dist/data/guides/responsive.md +44 -15
  40. package/dist/data/guides/set-class.md +2 -12
  41. package/dist/data/guides/tokens.md +15 -15
  42. package/dist/data/guides/trait-class/has--gutter.md +3 -31
  43. package/dist/data/guides/trait-class/has--mask.md +3 -36
  44. package/dist/data/guides/trait-class/has--snap.md +3 -34
  45. package/dist/data/guides/trait-class/has--transition.md +3 -41
  46. package/dist/data/guides/trait-class/is--boxLink.md +2 -63
  47. package/dist/data/guides/trait-class/is--container.md +2 -29
  48. package/dist/data/guides/trait-class/is--layer.md +1 -57
  49. package/dist/data/guides/trait-class/is--wrapper.md +3 -56
  50. package/dist/data/guides/trait-class.md +8 -8
  51. package/dist/data/guides/utility-class.md +1 -1
  52. package/dist/data/meta.js +4 -3
  53. package/dist/index.js +4 -1
  54. package/dist/lib/load-markdown.d.ts +4 -0
  55. package/dist/lib/load-markdown.js +10 -0
  56. package/dist/lib/response.d.ts +5 -0
  57. package/dist/lib/response.js +15 -2
  58. package/dist/lib/schemas.d.ts +35 -0
  59. package/dist/lib/schemas.js +13 -0
  60. package/dist/lib/search.d.ts +2 -0
  61. package/dist/lib/search.js +45 -2
  62. package/dist/lib/types.d.ts +5 -21
  63. package/dist/lib/version.d.ts +2 -0
  64. package/dist/lib/version.js +8 -0
  65. package/dist/tools/convert-css.js +37 -14
  66. package/dist/tools/get-component.js +2 -2
  67. package/dist/tools/get-guide.d.ts +2 -0
  68. package/dist/tools/get-guide.js +40 -17
  69. package/dist/tools/get-overview.js +2 -2
  70. package/dist/tools/get-props-system.js +8 -6
  71. package/dist/tools/get-tokens.js +2 -2
  72. package/dist/tools/search-docs.js +13 -7
  73. package/package.json +17 -2
@@ -0,0 +1,268 @@
1
+ # アンチパターン辞書(構造・レイアウト・レスポンシブ編)
2
+
3
+ [antipatterns.md](./antipatterns.md)の分冊。値・スタイル宣言系のNG→OKはそちらを参照。
4
+
5
+ ## TOC
6
+
7
+ - [レイアウト選択ミス](#レイアウト選択ミス)
8
+ - [Astro/React Primitive を使わず素の HTML で組む](#astroreact-primitive-を使わず素の-html-で組む)
9
+ - [ボタン装飾を reset から自作する](#ボタン装飾を-reset-から自作する)
10
+ - [`Frame` 未使用のメディア枠手組み](#frame-未使用のメディア枠手組み)
11
+ - [全面リンクの手組み(`BoxLink` 未使用)](#全面リンクの手組みboxlink-未使用)
12
+ - [primitive 既定値の重複指定](#primitive-既定値の重複指定)
13
+ - [サイト最外殻を `Wrapper` に使う](#サイト最外殻を-wrapper-に使う)
14
+ - [row 方向の `Flex` / `Cluster` 直下に `Wrapper` を置く](#row-方向の-flex--cluster-直下に-wrapper-を置く)
15
+ - [セクション外殻を `Flex` + `min-h` で組む](#セクション外殻を-flex--min-h-で組む)
16
+ - [標準 HTML 属性を `exProps` に入れる](#標準-html-属性を-exprops-に入れる)
17
+ - [レスポンシブ抜け](#レスポンシブ抜け)
18
+ - [レスポンシブ配列の冗長指定](#レスポンシブ配列の冗長指定)
19
+ - [`is--` の誤用(状態・バリエーション)](#is---の誤用状態バリエーション)
20
+ - [カスタムクラスを全て `c--` にしてしまう](#カスタムクラスを全て-c---にしてしまう)
21
+ - [クラス名の命名ミス](#クラス名の命名ミス)
22
+
23
+ ---
24
+
25
+ ## レイアウト選択ミス
26
+
27
+ 詳細な選択基準は [primitive-class.md](./primitive-class.md#カラムレイアウト-primitive-の使い分けガイド) の使い分けガイドを参照。
28
+
29
+ ### Grid 直書き vs Columns
30
+
31
+ | NG | OK | 理由 |
32
+ | --- | --- | --- |
33
+ | `<Grid gtc="repeat(3, 1fr)">` | `<Columns cols={3}>` | 等幅 N 列は Columns で宣言的に書く |
34
+ | `<Grid gtc={['1fr', '1fr 1fr', '1fr 1fr 1fr']}>` | `<Columns cols={[1, 2, 3]}>` | BP 切替も Columns のほうが簡潔 |
35
+
36
+ ### コンテンツ幅のハードコード
37
+
38
+ | NG | OK | 理由 |
39
+ | --- | --- | --- |
40
+ | `style={{ maxWidth: '1200px' }}` | `<Box max-sz="l">` | ヘッダーやセクションなど、コンテンツサイズにはトークン値(`xs` / `s` / `m` / `l` / `xl` / `bleed`)をできるだけ活用する |
41
+
42
+ ### サイドバー型レイアウト
43
+
44
+ | NG | OK | 理由 |
45
+ | --- | --- | --- |
46
+ | `<Grid gtc="1fr 240px">` で固定 | `<WithSide sideW="240px">` | コンテンツ幅で自動切替したいなら WithSide |
47
+ | `<Flex>` で 2 カラム強制横並び | `<WithSide>` | 縦並びへの切替が必要なら WithSide |
48
+
49
+ ## Astro/React Primitive を使わず素の HTML で組む
50
+
51
+ Astro/Reactで実装しているのに、`lism-css/astro`や`lism-css/react`のPrimitiveをimportせず、素の`<div>`とCSSだけで構造を作るのは避ける。
52
+
53
+ | NG | OK | 理由 |
54
+ | --- | --- | --- |
55
+ | `<div class="c--features">`+CSSで縦並び | `<Stack class="c--features" g="40">` | 縦並びは`Stack`に任せる |
56
+
57
+ カラムの選択ミスは[レイアウト選択ミス](#レイアウト選択ミス)、メディア枠は[`Frame` 未使用のメディア枠手組み](#frame-未使用のメディア枠手組み)を参照。
58
+
59
+ 実装前チェックC1では、採用Primitiveと、その詳細ファイルで確認した内容を実装プランに書く。
60
+
61
+ ## ボタン装飾を reset から自作する
62
+
63
+ `<button>`を整える時は、`@lism-css/ui`の`Button`で足りるかを先に確認し、素の`<button>`にはreset済みの`set--plain`を使う。`appearance`/`border`/`background`等のリセットを独自CSSで書き直さない。
64
+
65
+ | NG | OK | 理由 |
66
+ | --- | --- | --- |
67
+ | `.c--btn { appearance: none; border: none; background: none; ... }` | `<button class="set--plain c--btn ...">` | ブラウザデフォルトのリセットは`set--plain`が持つ |
68
+
69
+ ## `Frame` 未使用のメディア枠手組み
70
+
71
+ 画像・動画・iframeの枠は`Frame`が既定で`overflow:hidden`と直下メディアのfitを持つ。アスペクト比つきのメディア枠を`Lism`/`div`で手組みしない。
72
+
73
+ | NG | OK | 理由 |
74
+ | --- | --- | --- |
75
+ | `<Lism ov="hidden" ar="16/9"><img /></Lism>` | `<Frame ar="16/9"><img /></Frame>` | メディア枠は`Frame`で宣言する |
76
+ | `<div class="-ov:hidden -ar:16/9"><img class="-w:100% -h:100%" /></div>` | `<div class="l--frame -ar:16/9"><img /></div>` | 直下`img/video/iframe`のfitは`l--frame`既定 |
77
+
78
+ `object-fit:contain`や`object-position`など既定と違う意図がある場合だけ、差分として追加する。
79
+
80
+ ## 全面リンクの手組み(`BoxLink` 未使用)
81
+
82
+ カード等のボックス全体をリンク化する時は`BoxLink`/`is--boxLink`に任せる。absolute配置の擬似要素やオーバーレイ`<a>`で全面リンクを手組みしない。
83
+
84
+ | NG | OK | 理由 |
85
+ | --- | --- | --- |
86
+ | `.c--card a::after { position: absolute; inset: 0; }` | `<BoxLink href="...">…</BoxLink>` | クリック領域・重なり順・タグ切替(`href`有無で`a`/`div`)は`is--boxLink`が担う |
87
+
88
+ 内部に別のリンクやボタンを重ねる場合は`trait-class/is--boxLink.md`と公式ドキュメントを確認する。
89
+
90
+ ## primitive 既定値の重複指定
91
+
92
+ Primitiveが既に持つCSSと同じ値を、Lism Props/Property Classで重ねない。既定の挙動は各`primitives/l--*.md`の「既定の挙動」を確認する。
93
+
94
+ | NG | OK | 理由 |
95
+ | --- | --- | --- |
96
+ | `<Cluster fxw="wrap" ai="center" g="15">` | `<Cluster g="15">` | `Cluster`は`flex-wrap:wrap`/`align-items:center`を既定で持つ。gapは既定ではないので残す |
97
+ | `<Frame ov="hidden" ar="16/9">` | `<Frame ar="16/9">` | `Frame`は`overflow:hidden`を既定で持つ |
98
+ | `<Frame><img className="-w:100% -h:100%" style={{ objectFit: 'cover' }} /></Frame>` | `<Frame><img /></Frame>` | 直下メディアの`width/height/object-fit:cover`は既定 |
99
+
100
+ プロジェクトCSSでPrimitive既定を上書きしている場合や、既定と違う意図的上書きの場合は例外として残す。
101
+
102
+ ## サイト最外殻を `Wrapper` に使う
103
+
104
+ `Wrapper`/`is--wrapper`は幅制限したい直下領域に使う。サイト全体の最外殻やbody直下のゾーニングには使わない。最外殻は`z--*`などの領域名で扱い、幅制限が必要な内側だけ`Wrapper`にする。
105
+
106
+ | NG | OK | 理由 |
107
+ | --- | --- | --- |
108
+ | `<Wrapper className="c--site">...全体...</Wrapper>` | `<div className="z--site"><Wrapper>...本文幅...</Wrapper></div>` | 最外殻と幅制限の責務を分ける |
109
+ | `<main className="is--wrapper">`をページ全体に付与 | `<main className="z--main"><Wrapper>...</Wrapper></main>` | ゾーニングは`z--*`、幅制限は`Wrapper` |
110
+
111
+ `Wrapper`直下の子要素には幅に関する既定が当たるため、最外殻に置くと予期しない幅制御を生むことがある。
112
+
113
+ ## row 方向の `Flex` / `Cluster` 直下に `Wrapper` を置く
114
+
115
+ `is--wrapper`は直下の子に幅を配るだけで、自身の幅を決める宣言を持たない。row方向のflexアイテムになるとコンテンツ幅まで縮み、内側の`jc="between"`等が広がる余地を失う。外殻は`Group`等のブロック要素にする。
116
+
117
+ | NG | OK | 理由 |
118
+ | --- | --- | --- |
119
+ | `<Flex as="header" ai="center"><Wrapper>...</Wrapper></Flex>` | `<Group as="header" py="20"><Wrapper>...</Wrapper></Group>` | flexアイテム化した`Wrapper`は幅が縮み、両端寄せ等が効かなくなる |
120
+
121
+ ## セクション外殻を `Flex` + `min-h` で組む
122
+
123
+ ヘッダー等のセクション外殻を、デザイン実測の高さを再現するために`Flex`+`ai="center"`+`min-h`で組まない。高さは`py`とコンテンツが決める(→ [page-sections.md](./references/page-sections.md))。
124
+
125
+ | NG | OK | 理由 |
126
+ | --- | --- | --- |
127
+ | `<Flex as="header" ai="center" min-h="77px">` | `<Group as="header" py="20">` | セクションの高さをデザインpxで固定しない |
128
+
129
+ ## 標準 HTML 属性を `exProps` に入れる
130
+
131
+ `width`/`height`/`loading`/`decoding`/`alt`/`aria-*`/`data-*`などの標準属性は、`exProps`に包まずそのまま渡す。`exProps`は標準Propsで表現しにくい拡張用途に限定する。
132
+
133
+ | NG | OK | 理由 |
134
+ | --- | --- | --- |
135
+ | `<Media exProps={{ width: 960, height: 640, loading: 'lazy' }} />` | `<Media width={960} height={640} loading="lazy" />` | 標準HTML属性は直接渡す |
136
+ | `<Lism exProps={{ 'aria-label': '閉じる' }} />` | `<Lism aria-label="閉じる" />` | ARIA/data属性も直接渡す |
137
+
138
+ コンポーネント側の型が直接属性を受けない場合は、型定義や透過設計を先に確認する。
139
+
140
+ ## レスポンシブ抜け
141
+
142
+ ### `is--container` 祖先なしで BP 値を使用
143
+
144
+ レスポンシブ値(配列・オブジェクト・`-{prop}_{bp}` クラス)は、デフォルト設定(SCSS 側 `$is_container_query: 1`)では `@container` クエリで発火するため、祖先要素のいずれかに `is--container`(コンポーネントなら `isContainer` prop)が必須。
145
+
146
+ ※ プロジェクトの SCSS 設定で `$is_container_query: 0` にして `@media` クエリ運用に切り替えている場合は、`is--container` 祖先は不要。
147
+
148
+ ```jsx
149
+ // NG: container 祖先がないので sm/md 値が発火しない
150
+ <div>
151
+ <Box p={[20, 30, 40]}>...</Box>
152
+ </div>
153
+
154
+ // OK: 祖先に isContainer
155
+ <Stack isContainer>
156
+ <Box p={[20, 30, 40]}>...</Box>
157
+ </Stack>
158
+ ```
159
+
160
+ ### BP 専用クラスをベース値なしで使う
161
+
162
+ BP 専用クラス(`-{prop}_{bp}`)やコンポーネントの BP キー(`{ sm: ... }` 等)だけを指定すると、BP 未満では値が空になり意図しないレイアウト崩れを起こす。必ずベース値とセットで指定する。
163
+
164
+ ```jsx
165
+ // NG: sm 未満で p が未指定になる
166
+ <Box p={{ sm: 30 }}>...</Box>
167
+
168
+ // OK: ベース値(base / 配列の先頭)を必ず添える
169
+ <Box p={{ base: 20, sm: 30 }}>...</Box>
170
+ <Box p={[20, 30]}>...</Box>
171
+ ```
172
+
173
+ 生 HTML / クラス指定で書く場合も同様:
174
+
175
+ | NG | OK | 理由 |
176
+ | --- | --- | --- |
177
+ | `<div class="-p_sm" style="--p_sm: var(--s30)">` | `<div class="-p:20 -p_sm" style="--p_sm: var(--s30)">` | BP 未満では値が空になるため、ベースクラス `-{prop}:{value}` も必要 |
178
+
179
+ ### ブレイクポイントの誤用
180
+
181
+ Lism CSS の標準出力で有効な BP は `sm: 480px` / `md: 800px` / `lg: 1120px`。`xs` は BP キーとして存在しない。
182
+
183
+ | NG | OK | 理由 |
184
+ | --- | --- | --- |
185
+ | `<Box p={{ xs: 10, sm: 20 }}>` | `<Box p={{ base: 10, sm: 20 }}>` | デフォルトは `base`(`xs` キーは無い) |
186
+ | `cols={[1, 2, 3, 4, 5]}` | `cols={[1, 2, 3, 4]}` | 標準出力では `[base, sm, md, lg]` までが有効。`xl` 以降は SCSS 設定が必要 |
187
+
188
+ ## レスポンシブ配列の冗長指定
189
+
190
+ 配列Propsでは、前のBPと同じ値を繰り返さない。値を変えないBPは`null`でスキップし、全BPで同じ値なら単一値にする。
191
+
192
+ | NG | OK | 理由 |
193
+ | --- | --- | --- |
194
+ | `fxd={['column', 'column', 'row']}` | `fxd={['column', null, 'row']}` | `sm`で変化しない値はスキップできる |
195
+ | `p={['20', '20', '20']}` | `p="20"` | 全BP同値なら単一値でよい |
196
+ | `cols={[1, 1, 3]}` | `cols={[1, null, 3]}` | 重複BPを省略して意図を読みやすくする |
197
+
198
+ ただし、既存コードの型・生成仕様で`null`スキップが使えない箇所では、既存パターンを優先する。レスポンシブ差分を単一値化して消さないこと。
199
+
200
+ ## `is--` の誤用(状態・バリエーション)
201
+
202
+ Lism CSS の `is--` プレフィックスは「**〜である**」という**役割・存在の宣言**を表す trait 用(`is--container` / `is--wrapper` / `is--layer` / `is--boxLink` / `is--coverLink` / `is--skipFlow` / `is--side` 等)。ユーザーが独自に `is--*` を追加することは可能だが、**その要素の役割(trait)を宣言するもの**であることが条件で、**状態管理やスタイルバリエーション目的に流用しない**(`is--active` / `is--current` / `is--solid` などは誤用)。
203
+
204
+ → 詳細: [trait-class.md](./trait-class.md#is---trait役割宣言)
205
+
206
+ `is--` と紛れがちな 2 つの用途は、Lism では別の手段で表現する:
207
+
208
+ ### 1. 状態管理 → `data-*` 属性を使う
209
+
210
+ オン/オフが切り替わる状態(active / current / disabled / open / selected 等)は、`is--*` クラスを増やさず HTML の `data-*` 属性で表現する。CSS は属性セレクタで書く。
211
+
212
+ | NG | OK |
213
+ | --- | --- |
214
+ | `<a class="c--catTab is--active">` + `.c--catTab.is--active { ... }` | `<a class="c--catTab" data-is-active>` + `.c--catTab[data-is-active] { ... }` |
215
+ | `<li class="c--pager_num is--current">` + `.c--pager_num.is--current { ... }` | `<li class="c--pager_num" aria-current="page">` + `.c--pager_num[aria-current] { ... }` |
216
+ | `<a class="c--pager_nav is--disabled">` + `.c--pager_nav.is--disabled { ... }` | `<a class="c--pager_nav" data-is-disabled>` + `.c--pager_nav[data-is-disabled] { ... }` |
217
+
218
+ 理由:
219
+
220
+ - `is--*` は「役割宣言」用の trait であり、状態を表すクラスを `is--*` として増やすと意味体系(trait か state か)が混在して読みにくくなる
221
+ - `data-*` は HTML 標準の状態表現で、JS からの切替(`element.dataset.isActive = ''` / `delete element.dataset.isActive`)も自然
222
+ - ARIA 属性で意味が表せる場合(`aria-current` / `aria-disabled` / `aria-selected` 等)は ARIA を優先し、その属性自体を CSS セレクタにする
223
+
224
+ ### 2. スタイルバリエーション → BEM Modifier `c--{name}--{variant}`
225
+
226
+ 「同じコンポーネントの見た目違い」は、Lism CSS 公式の BEM Modifier 記法で表現する(→ [css-rules.md の Component Class](./css-rules.md#component-classc--))。
227
+
228
+ | NG | OK |
229
+ | --- | --- |
230
+ | `<span class="c--tag is--solid">` + `.c--tag.is--solid { ... }` | `<span class="c--tag c--tag--solid">` + `.c--tag.c--tag--solid { ... }` |
231
+ | `<button class="c--button is--outline">` | `<button class="c--button c--button--outline">` |
232
+
233
+ なお、Modifier であってもまずは [Property Class で表現できないか](./antipatterns.md#property-class-で書けるのに-css-で書く) を検討すること。「色だけ違う」程度ならマークアップ側で `-bgc:* -c:*` を差し替えるだけで済むことも多い。
234
+
235
+ ## カスタムクラスを全て `c--` にしてしまう
236
+
237
+ `c--` は「**コンポーネント**(再利用可能な UI 部品)」を表すプレフィックス。**カスタムクラスを必ず `c--` で命名する必要はない**。サイトの大まかな領域(header / sidebar / main / footer 等)やページ固有のスタイルなど、再利用が前提でないクラスは、独自プレフィックス(`z--` / `p--` 等)やプレフィックスなしの命名も選択肢として検討すること。
238
+
239
+ → 使い分け表と配置レイヤー: [css-rules.md の独自プレフィックス](./css-rules.md#独自プレフィックス)
240
+
241
+ `c--header` のような命名も間違いとまでは言えないが、「カスタムクラス=必ず `c--`」ではないことに注意する。
242
+
243
+ ## クラス名の命名ミス
244
+
245
+ Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `set--` 等)に続く名称は **camelCase** で書くのが規約。kebab-case で書くと、BEM の Modifier 区切り(`--`)と視覚的に紛れて読みにくくなる。
246
+
247
+ → 詳細: [naming.md](./naming.md#クラスの命名規則)
248
+
249
+ | NG | OK | 理由 |
250
+ | --- | --- | --- |
251
+ | `c--my-card` | `c--myCard` | プレフィックス後の名称は camelCase |
252
+ | `c--my-card--primary` | `c--myCard--primary` | Modifier 区切り `--` と単語区切り `-` が混在して読みにくい |
253
+ | `c--card_my-elem` | `c--card_myElem` | Element 名(`_` 後)も camelCase |
254
+ | `is--side-bar` / `has--gutter-x` | `is--sideBar` / `has--gutterX` | `is--` / `has--` / `u--` 等にも同じ規則が適用される |
255
+ | `c--hero__inner` / `c--featureCard__title` | `c--hero_inner` / `c--featureCard_title` | Element 区切りは `_` ひとつ。BEM 風の `__` は使わない |
256
+
257
+ ```jsx
258
+ // NG: kebab-case
259
+ <Stack className="c--feature-card" />
260
+ <div className="c--user-profile c--user-profile--compact" />
261
+
262
+ // OK: camelCase
263
+ <Stack className="c--featureCard" />
264
+ <div className="c--userProfile c--userProfile--compact" />
265
+ ```
266
+
267
+ Modifierだけは`--`ふたつを使う: `c--featureCard--featured`。
268
+