@lism-css/mcp 0.22.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.
- package/README.ja.md +15 -15
- package/README.md +5 -5
- package/dist/data/docs-index.json +232 -96
- package/dist/data/guides/SKILL.md +162 -224
- package/dist/data/guides/antipatterns-layout.md +268 -0
- package/dist/data/guides/antipatterns.md +118 -196
- package/dist/data/guides/base-styles.md +14 -12
- package/dist/data/guides/components-core.md +26 -8
- package/dist/data/guides/components-ui.md +28 -24
- package/dist/data/guides/css-rules.md +40 -57
- package/dist/data/guides/customize.md +121 -37
- package/dist/data/guides/naming.md +23 -42
- package/dist/data/guides/primitive-class.md +5 -5
- package/dist/data/guides/primitives/a--decorator.md +2 -28
- package/dist/data/guides/primitives/a--divider.md +1 -52
- package/dist/data/guides/primitives/a--icon.md +2 -76
- package/dist/data/guides/primitives/a--spacer.md +1 -49
- package/dist/data/guides/primitives/l--autoColumns.md +7 -54
- package/dist/data/guides/primitives/l--box.md +1 -21
- package/dist/data/guides/primitives/l--center.md +6 -39
- package/dist/data/guides/primitives/l--cluster.md +6 -26
- package/dist/data/guides/primitives/l--columns.md +7 -56
- package/dist/data/guides/primitives/l--flex.md +5 -62
- package/dist/data/guides/primitives/l--flow.md +11 -72
- package/dist/data/guides/primitives/l--frame.md +7 -78
- package/dist/data/guides/primitives/l--grid.md +5 -56
- package/dist/data/guides/primitives/l--stack.md +5 -44
- package/dist/data/guides/primitives/l--switchColumns.md +8 -53
- package/dist/data/guides/primitives/l--tileGrid.md +7 -44
- package/dist/data/guides/primitives/l--withSide.md +9 -79
- package/dist/data/guides/property-class/all-props.md +244 -0
- package/dist/data/guides/property-class/bd.md +5 -70
- package/dist/data/guides/property-class/hov.md +14 -73
- package/dist/data/guides/property-class/max-sz.md +3 -39
- package/dist/data/guides/property-class.md +31 -249
- package/dist/data/guides/references/authoring.md +246 -0
- package/dist/data/guides/references/page-sections.md +99 -0
- package/dist/data/guides/references/verification.md +73 -0
- package/dist/data/guides/responsive.md +68 -20
- package/dist/data/guides/set-class.md +2 -12
- package/dist/data/guides/tokens.md +31 -31
- package/dist/data/guides/trait-class/has--gutter.md +3 -31
- package/dist/data/guides/trait-class/has--mask.md +3 -36
- package/dist/data/guides/trait-class/has--snap.md +3 -34
- package/dist/data/guides/trait-class/has--transition.md +3 -41
- package/dist/data/guides/trait-class/is--boxLink.md +2 -63
- package/dist/data/guides/trait-class/is--container.md +2 -29
- package/dist/data/guides/trait-class/is--layer.md +1 -57
- package/dist/data/guides/trait-class/is--wrapper.md +11 -60
- package/dist/data/guides/trait-class.md +8 -8
- package/dist/data/guides/utility-class.md +1 -1
- package/dist/data/meta.js +4 -3
- package/dist/index.js +4 -1
- package/dist/lib/load-markdown.d.ts +4 -0
- package/dist/lib/load-markdown.js +10 -0
- package/dist/lib/markdown-utils.d.ts +1 -1
- package/dist/lib/response.d.ts +5 -0
- package/dist/lib/response.js +15 -2
- package/dist/lib/schemas.d.ts +35 -0
- package/dist/lib/schemas.js +13 -0
- package/dist/lib/search.d.ts +2 -0
- package/dist/lib/search.js +45 -2
- package/dist/lib/types.d.ts +5 -21
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.js +8 -0
- package/dist/tools/convert-css.js +38 -15
- package/dist/tools/get-component.js +2 -2
- package/dist/tools/get-guide.d.ts +2 -0
- package/dist/tools/get-guide.js +40 -17
- package/dist/tools/get-overview.js +2 -2
- package/dist/tools/get-props-system.js +8 -6
- package/dist/tools/get-tokens.js +2 -2
- package/dist/tools/search-docs.js +13 -7
- package/package.json +17 -2
|
@@ -2,87 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
AI が Lism CSS のコードを生成する際に間違いやすい記法と、その正しい書き方をカタログ化したもの。コードを書く前に該当カテゴリを確認すること。
|
|
4
4
|
|
|
5
|
+
値・スタイル宣言系はこのファイル、構造・レイアウト・レスポンシブ系は [antipatterns-layout.md](./antipatterns-layout.md) に分けている。
|
|
6
|
+
|
|
5
7
|
## TOC
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
### 値・スタイル宣言系(このファイル)
|
|
10
|
+
|
|
8
11
|
- [px / 固定値の直書き](#px--固定値の直書き)
|
|
9
12
|
- [Property Class で書けるのに CSS で書く](#property-class-で書けるのに-css-で書く)
|
|
10
|
-
- [
|
|
11
|
-
- [
|
|
12
|
-
- [
|
|
13
|
+
- [Token typo(存在しない値)](#token-typo存在しない値)
|
|
14
|
+
- [`c--*` CSS を `@layer lism-component` に入れない](#c---css-を-layer-lism-component-に入れない)
|
|
15
|
+
- [hover を component CSS に書いて負ける](#hover-を-component-css-に書いて負ける)
|
|
16
|
+
- [Reset 済みプロパティの再指定](#reset-済みプロパティの再指定)
|
|
13
17
|
- [`--keycolor` の誤用](#--keycolor-の誤用)
|
|
14
18
|
- [Prop 型ミス](#prop-型ミス)
|
|
15
|
-
- [レイアウト選択ミス](#レイアウト選択ミス)
|
|
16
|
-
- [レスポンシブ抜け](#レスポンシブ抜け)
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## Token typo(存在しない値)
|
|
21
|
-
|
|
22
|
-
Lism CSS側が用意しているトークン値と異なるものを書かないように注意する。
|
|
23
|
-
正確な一覧は [tokens.md](./tokens.md) を参照すること。
|
|
24
|
-
|
|
25
|
-
ただし、ユーザーが独自に追加定義することは可能。あくまでデフォルトで用意されていないもので間違えやすいものを紹介しておく。
|
|
26
|
-
|
|
27
|
-
### カラー
|
|
28
|
-
|
|
29
|
-
| NG | OK | 理由 |
|
|
30
|
-
|---|---|---|
|
|
31
|
-
| `bgc="primary"` | `bgc="brand"` | セマンティックカラーに `primary`/`secondary` は無い。ブランド色は `brand`/`accent` |
|
|
32
|
-
| `bgc="secondary"` | `bgc="base-2"` | サブ背景色は `base-2`(`base-3` がユーザーによって追加定義されている可能性もある) |
|
|
33
|
-
| `c="muted"` | `c="text-2"` | 補助テキスト色は `text-2` |
|
|
34
|
-
| `c="danger"` | `c="red"` | パレットカラーから選ぶ(`red` / `orange` 等) |
|
|
35
|
-
|
|
36
|
-
- セマンティックカラー: `base` / `base-2` / `text` / `text-2` / `divider` / `link` / `brand` / `accent` / `neutral`
|
|
37
|
-
- パレットカラー: `red` / `blue` / `green` / `yellow` / `purple` / `orange` / `pink` / `gray` / `white` / `black`
|
|
38
|
-
|
|
39
|
-
### スペース(`p` / `m` / `g` 等)
|
|
40
|
-
|
|
41
|
-
スペーストークンの数値は**離散的**で、`5/10/15/20/25/30/35/40/50/60/70/80` のみが用意されている。`8/12/14/45/65/75` 等を書きそうになったら、必ず最寄りトークンに丸めるか、ユーザーに方針確認すること(→ [SKILL.md のデザイン取り込みフロー](./SKILL.md#デザインデータ取り込み時のフロー))。
|
|
42
19
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
| NG | OK | 理由 |
|
|
61
|
-
|---|---|---|
|
|
62
|
-
| `bdrs="sm"`, `bdrs="round"` | `bdrs="20"`, `bdrs="99"` | 角丸トークンは `10` / `20` / `30` / `40` / `99` / `inner` |
|
|
63
|
-
| `bxsh="xs"`, `bxsh="sm"` | `bxsh="10"`, `bxsh="20"` | shadowトークンは `10` / `20` / `30` / `40` / `50` |
|
|
64
|
-
|
|
65
|
-
### プリセット外の値を Lism Props に渡している
|
|
66
|
-
|
|
67
|
-
Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}` クラスとして出力される。それ以外の値はそのまま出力されてCSSとして無効になる。
|
|
68
|
-
|
|
69
|
-
```JSX
|
|
70
|
-
// NG: 事前定義されたトークン値に合致しないため、-lts:2xl は出力されない
|
|
71
|
-
<Text lts="2xl">...</Text>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
独自にProperty Classを拡張したりトークン値を増やしたりする場合は、 [property-class.md の `:value` 記法](./property-class.md)を活用するか、[`lism.config.js`による拡張](./customize.md)が必要。
|
|
20
|
+
### 構造・レイアウト・レスポンシブ系(antipatterns-layout.md)
|
|
21
|
+
|
|
22
|
+
- [レイアウト選択ミス](./antipatterns-layout.md#レイアウト選択ミス)
|
|
23
|
+
- [Astro/React Primitive を使わず素の HTML で組む](./antipatterns-layout.md#astroreact-primitive-を使わず素の-html-で組む)
|
|
24
|
+
- [ボタン装飾を reset から自作する](./antipatterns-layout.md#ボタン装飾を-reset-から自作する)
|
|
25
|
+
- [`Frame` 未使用のメディア枠手組み](./antipatterns-layout.md#frame-未使用のメディア枠手組み)
|
|
26
|
+
- [全面リンクの手組み(`BoxLink` 未使用)](./antipatterns-layout.md#全面リンクの手組みboxlink-未使用)
|
|
27
|
+
- [primitive 既定値の重複指定](./antipatterns-layout.md#primitive-既定値の重複指定)
|
|
28
|
+
- [サイト最外殻を `Wrapper` に使う](./antipatterns-layout.md#サイト最外殻を-wrapper-に使う)
|
|
29
|
+
- [row 方向の `Flex` / `Cluster` 直下に `Wrapper` を置く](./antipatterns-layout.md#row-方向の-flex--cluster-直下に-wrapper-を置く)
|
|
30
|
+
- [セクション外殻を `Flex` + `min-h` で組む](./antipatterns-layout.md#セクション外殻を-flex--min-h-で組む)
|
|
31
|
+
- [標準 HTML 属性を `exProps` に入れる](./antipatterns-layout.md#標準-html-属性を-exprops-に入れる)
|
|
32
|
+
- [レスポンシブ抜け](./antipatterns-layout.md#レスポンシブ抜け)
|
|
33
|
+
- [レスポンシブ配列の冗長指定](./antipatterns-layout.md#レスポンシブ配列の冗長指定)
|
|
34
|
+
- [`is--` の誤用(状態・バリエーション)](./antipatterns-layout.md#is---の誤用状態バリエーション)
|
|
35
|
+
- [カスタムクラスを全て `c--` にしてしまう](./antipatterns-layout.md#カスタムクラスを全て-c---にしてしまう)
|
|
36
|
+
- [クラス名の命名ミス](./antipatterns-layout.md#クラス名の命名ミス)
|
|
75
37
|
|
|
76
38
|
---
|
|
77
39
|
|
|
78
40
|
## px / 固定値の直書き
|
|
79
41
|
|
|
80
|
-
デザインデータ由来の px / rem / em をそのまま書くと、Lism CSS のスケール統一が崩れる。**書く前に [
|
|
42
|
+
デザインデータ由来の px / rem / em をそのまま書くと、Lism CSS のスケール統一が崩れる。**書く前に [デザインデータ取り込みフロー](./references/authoring.md#デザインデータ取り込みフロー) に従うこと**。入力種別ごとの既定動作と、丸め/カスタムトークン化/直書き例外(A/B/C)の選択肢の定義はフロー側が正本。確認なしに固定値を採用しない。
|
|
81
43
|
|
|
82
44
|
### スペース・サイズ
|
|
83
45
|
|
|
84
46
|
| NG | OK | 理由 |
|
|
85
|
-
|
|
47
|
+
| --- | --- | --- |
|
|
86
48
|
| `padding: 3px 10px` | `padding: var(--s5) var(--s10)` または Props で `py="5" px="10"` | `3px` はトークン外。最寄りは `--s5`(4px) |
|
|
87
49
|
| `min-width: 28px; height: 28px` | `min-w` / `h` をトークン値に丸める、または基準値を上書き | `28px` はトークン外 |
|
|
88
50
|
| `gap: var(--s5); padding: var(--s10) var(--s15)` を CSS で直書き | `<Lism g="5" py="10" px="15">` | Property Class / Props で書ける |
|
|
@@ -90,17 +52,25 @@ Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}`
|
|
|
90
52
|
### 角丸・ボーダー
|
|
91
53
|
|
|
92
54
|
| NG | OK | 理由 |
|
|
93
|
-
|
|
55
|
+
| --- | --- | --- |
|
|
94
56
|
| `border-radius: 2px` | `border-radius: var(--bdrs--10)`(4px) | 角丸トークンの最小は `--bdrs--10`(4px)。`2px` はトークン外 |
|
|
95
57
|
| `border-radius: 6px` | `--bdrs--10`(4px)か `--bdrs--20`(8px)に丸める | 6px はトークン外 |
|
|
96
58
|
|
|
97
59
|
### タイポグラフィ
|
|
98
60
|
|
|
99
61
|
| NG | OK | 理由 |
|
|
100
|
-
|
|
62
|
+
| --- | --- | --- |
|
|
101
63
|
| `font-size: 13px` を直書き | `font-size: var(--fz--xs)` または Props で `fz="xs"` | フォントサイズは調和数列スケール。固定値は避ける |
|
|
102
64
|
| `letter-spacing: 0.02 / 0.12 / 0.14 / 0.18 / 0.2 / 0.24em` を散在 | `--lts--s/-l/-xl` を使う、または独自の `--lts--*` を `global.css` で追加 | デフォルトの `lts` トークンは `s/l/xl` のみ。多種混在はデザイントークンとして不健全 |
|
|
103
65
|
|
|
66
|
+
### 実測pxの包括例外化(例外の自作)
|
|
67
|
+
|
|
68
|
+
「正確に再現して」等のユーザー指示を根拠に「ページ固有の実測値として採用」のような例外カテゴリを自作し、実測pxを一括採用してはいけない。`✅例外`にできるのは下記「直書きしてよい例外」に該当する場合だけで、ユーザー指示や実測値であることは根拠にならない。
|
|
69
|
+
|
|
70
|
+
| NG | OK | 理由 |
|
|
71
|
+
| --- | --- | --- |
|
|
72
|
+
| 実装プランに「『正確に再現』に基づくページ固有実測値として採用」と書き、実測pxを一括直書きして自分で✅ | 入力が画像のみなら最寄りトークンへ丸める(丸め先は`tokens.md`で照合)。px固定が必要と判断したら、その方針自体を⏸にする | 例外の許可リストに新カテゴリを自作しない。包括免除は値照合そのものを消す |
|
|
73
|
+
|
|
104
74
|
### 直書きしてよい例外
|
|
105
75
|
|
|
106
76
|
- 1px / -1px の罫線・視覚補正(border / margin の打ち消し)
|
|
@@ -114,93 +84,112 @@ Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}`
|
|
|
114
84
|
`c--*` を定義したくなったら、まず宣言ごとに Property Class へ落とせるか確認する。落とせる宣言を CSS に書くと、CSS が肥大化し、Property Class の利点(差分上書きの容易さ・読みやすさ)が失われる。
|
|
115
85
|
|
|
116
86
|
| NG(CSS 直書き) | OK(Property Class) |
|
|
117
|
-
|
|
87
|
+
| --- | --- |
|
|
118
88
|
| `.c--tag { font-size: var(--fz--xs); padding: var(--s10); background: var(--base-2); border-radius: var(--bdrs--10); }` | `<span class="c--tag -fz:xs -p:10 -bgc:base-2 -bdrs:10">` |
|
|
119
89
|
| `.c--eyebrow { font-size: var(--fz--2xs); color: var(--text-2); text-transform: uppercase; }` | `<span class="c--eyebrow -fz:2xs -c:text-2 -tt:uppercase">` |
|
|
120
90
|
|
|
121
|
-
|
|
122
91
|
CSS に残すのは、基本的には `::before` / `> li` などの「Primitive / Trait / Property Class で書けないセレクタ」を伴う宣言。単一要素への装飾束は呼び出し側マークアップに移す。
|
|
123
92
|
|
|
124
|
-
|
|
125
|
-
|
|
93
|
+
なお、CSS が空になっても `c--*` クラス名は意味名としてマークアップに残して構わない(→ [css-rules.md の作成例](./css-rules.md#作成例))。
|
|
126
94
|
|
|
127
95
|
---
|
|
128
96
|
|
|
129
|
-
##
|
|
97
|
+
## Token typo(存在しない値)
|
|
98
|
+
|
|
99
|
+
Lism CSS側が用意しているトークン値と異なるものを書かないように注意する。
|
|
100
|
+
正確な一覧は [tokens.md](./tokens.md) を参照すること。
|
|
101
|
+
|
|
102
|
+
ただし、ユーザーが独自に追加定義することは可能。あくまでデフォルトで用意されていないもので間違えやすいものを紹介しておく。
|
|
103
|
+
|
|
104
|
+
### カラー
|
|
105
|
+
|
|
106
|
+
| NG | OK | 理由 |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| `bgc="primary"` | `bgc="brand"` | セマンティックカラーに `primary`/`secondary` は無い。ブランド色は `brand`/`accent` |
|
|
109
|
+
| `bgc="secondary"` | `bgc="base-2"` | サブ背景色は `base-2`(`base-3` がユーザーによって追加定義されている可能性もある) |
|
|
110
|
+
| `c="muted"` | `c="text-2"` | 補助テキスト色は `text-2` |
|
|
111
|
+
| `c="danger"` | `c="red"` | パレットカラーから選ぶ(`red` / `orange` 等) |
|
|
112
|
+
|
|
113
|
+
- セマンティックカラー: `base` / `base-2` / `text` / `text-2` / `divider` / `link` / `brand` / `accent` / `neutral`
|
|
114
|
+
- パレットカラー: `red` / `blue` / `green` / `yellow` / `purple` / `orange` / `pink` / `gray` / `white` / `black`
|
|
130
115
|
|
|
131
|
-
|
|
116
|
+
### スペース(`p` / `m` / `g` 等)
|
|
132
117
|
|
|
133
|
-
|
|
118
|
+
スペーストークンの数値は**離散的**で、`5/10/15/20/25/30/35/40/50/60/70/80` のみが用意されている。`8/12/14/45/65/75` 等を書きそうになったら、必ず最寄りトークンに丸めるか、ユーザーに方針確認すること(→ [デザインデータ取り込みフロー](./references/authoring.md#デザインデータ取り込みフロー))。
|
|
134
119
|
|
|
135
|
-
|
|
120
|
+
| NG | OK | 理由 |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| `p="8"` | `p="10"` | スペーストークンは離散値のみ。tailwindのような4の倍数で連続するスケールではない |
|
|
123
|
+
| `g="6"` | `g="5"` | 同上 |
|
|
124
|
+
| `m="45"`, `m="55"` | `m="40"` or `m="50"` | `40` 以降の中間値は用意されていない(前半は `5/15/25/35` まで補完済み) |
|
|
125
|
+
| `m="100"` | `m="80"` | 上限は `80`(ユーザーが追加定義している可能性はある) |
|
|
136
126
|
|
|
137
|
-
###
|
|
127
|
+
### フォントサイズ(`fz`)
|
|
138
128
|
|
|
139
|
-
|
|
129
|
+
| NG | OK | 理由 |
|
|
130
|
+
| --- | --- | --- |
|
|
131
|
+
| `fz="14"` | `fz="s"` | `fz` は文字列キー(数値は不可) |
|
|
132
|
+
| `fz="large"`, `fz="md"` | `fz="l"` | 略号は `2xs` / `xs` / `s` / `m` / `l` / `xl` / `2xl` … |
|
|
140
133
|
|
|
141
|
-
|
|
142
|
-
|---|---|
|
|
143
|
-
| `<a class="c--catTab is--active">` + `.c--catTab.is--active { ... }` | `<a class="c--catTab" data-is-active>` + `.c--catTab[data-is-active] { ... }` |
|
|
144
|
-
| `<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] { ... }` |
|
|
145
|
-
| `<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] { ... }` |
|
|
134
|
+
### 角丸 / 影
|
|
146
135
|
|
|
147
|
-
|
|
136
|
+
| NG | OK | 理由 |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| `bdrs="sm"`, `bdrs="round"` | `bdrs="20"`, `bdrs="99"` | 角丸トークンは `10` / `20` / `30` / `40` / `99` / `inner` |
|
|
139
|
+
| `bxsh="xs"`, `bxsh="sm"` | `bxsh="10"`, `bxsh="20"` | shadowトークンは `10` / `20` / `30` / `40` / `50` |
|
|
140
|
+
|
|
141
|
+
### プリセット外の値を Lism Props に渡している
|
|
142
|
+
|
|
143
|
+
Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}` クラスとして出力される。それ以外の値はそのまま出力されてCSSとして無効になる。
|
|
144
|
+
|
|
145
|
+
```JSX
|
|
146
|
+
// NG: 事前定義されたトークン値に合致しないため、-lts:2xl は出力されない
|
|
147
|
+
<Text lts="2xl">...</Text>
|
|
148
|
+
```
|
|
148
149
|
|
|
149
|
-
|
|
150
|
-
- `data-*` は HTML 標準の状態表現で、JS からの切替(`element.dataset.isActive = ''` / `delete element.dataset.isActive`)も自然
|
|
151
|
-
- ARIA 属性で意味が表せる場合(`aria-current` / `aria-disabled` / `aria-selected` 等)は ARIA を優先し、その属性自体を CSS セレクタにする
|
|
150
|
+
独自にProperty Classを拡張したりトークン値を増やしたりする場合は、 [property-class.md の `:value` 記法](./property-class.md)を活用するか、[`lism.config.js`による拡張](./customize.md)が必要。
|
|
152
151
|
|
|
153
|
-
|
|
152
|
+
---
|
|
154
153
|
|
|
155
|
-
|
|
154
|
+
## `c--*` CSS を `@layer lism-component` に入れない
|
|
155
|
+
|
|
156
|
+
`.c--*`のCSSは基本的に`@layer lism-component`内に置く。Astroの`<style>`内でも同じ。Layer外に置くと、Lism内部レイヤーやProperty Classとの優先順位設計が崩れる。
|
|
156
157
|
|
|
157
158
|
| NG | OK |
|
|
158
|
-
|
|
159
|
-
|
|
|
160
|
-
| `<
|
|
159
|
+
| --- | --- |
|
|
160
|
+
| `.c--hero { padding: var(--s40); }` | `@layer lism-component { .c--hero::before { ... } }` |
|
|
161
|
+
| `<style>.c--card { ... }</style>` | `<style>@layer lism-component { .c--card { ... } }</style>` |
|
|
161
162
|
|
|
162
|
-
|
|
163
|
+
ただし、`padding`/`gap`/`font-size`/`color`などProps/Property Classへ移せる宣言は、Layerへ入れる前にマークアップ側へ移す。
|
|
164
|
+
また、詳細度の関係で`@layer`の外で書く必要がある場合は外に出してよい。
|
|
163
165
|
|
|
164
166
|
---
|
|
165
167
|
|
|
166
|
-
##
|
|
167
|
-
|
|
168
|
-
`c--` は「**コンポーネント**(再利用可能な UI 部品)」を表すプレフィックス。**カスタムクラスを必ず `c--` で命名する必要はない**。サイトの大まかな領域(header / sidebar / main / footer 等)やページ固有のスタイルなど、再利用が前提でないクラスは、独自プレフィックス(`z--` / `p--` 等)やプレフィックスなしの命名も選択肢として検討すること。
|
|
168
|
+
## hover を component CSS に書いて負ける
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
hover効果は`-hov:*`、`hov={{}}`、`set--hov`、`has--transition`を優先する。component CSSの`:hover`へ単純な色・影・transformを直接書くと、Property Classやhover変数の設計と競合しやすい。
|
|
171
171
|
|
|
172
|
-
|
|
|
173
|
-
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
|
|
|
172
|
+
| NG | OK | 理由 |
|
|
173
|
+
| --- | --- | --- |
|
|
174
|
+
| `.c--button:hover { box-shadow: var(--bxsh--20); }` | `<Button hov={{ bxsh: '20' }} hasTransition>` | hover用Property Classを使う |
|
|
175
|
+
| `.c--card:hover { background: var(--base-2); }` | `<Box hov={{ bgc: 'base-2' }} hasTransition>` | hover時の値はPropsで宣言できる |
|
|
176
|
+
| `.c--link:hover { --keycolor: var(--brand); }` | `set--hov`や`hov={{ ... }}`を検討 | hover変数の仕組みに寄せる |
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
擬似要素や複雑な子孫セレクタが必要なhoverだけCSSに残す。
|
|
179
179
|
|
|
180
180
|
---
|
|
181
181
|
|
|
182
|
-
##
|
|
183
|
-
|
|
184
|
-
Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `set--` 等)に続く名称は **camelCase** で書くのが規約。kebab-case で書くと、BEM の Modifier 区切り(`--`)と視覚的に紛れて読みにくくなる。
|
|
182
|
+
## Reset 済みプロパティの再指定
|
|
185
183
|
|
|
186
|
-
|
|
184
|
+
Lism CSSのreset/base styleで既に初期化されている値を、念のために再指定しない。特に`margin:0`系はHTML要素側で処理済みなので、意図的な差分が無い限り追加しない。
|
|
187
185
|
|
|
188
186
|
| NG | OK | 理由 |
|
|
189
|
-
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
|
|
|
193
|
-
| `is--side-bar` / `has--gutter-x` | `is--sideBar` / `has--gutterX` | `is--` / `has--` / `u--` 等にも同じ規則が適用される |
|
|
187
|
+
| --- | --- | --- |
|
|
188
|
+
| `<p class="-m:0">` | `<p>` | resetで`margin:0`済み。不要なProperty Classがノイズになる |
|
|
189
|
+
| `<Heading m="0">` | `<Heading>` | 見出しmarginもbase側の前提を確認し、同値なら書かない |
|
|
190
|
+
| `.c--body { margin: 0; }` | `.c--body {}`または削除 | reset済みの宣言をcomponent CSSへ再掲しない |
|
|
194
191
|
|
|
195
|
-
|
|
196
|
-
// NG: kebab-case
|
|
197
|
-
<Stack className="c--feature-card" />
|
|
198
|
-
<div className="c--user-profile c--user-profile--compact" />
|
|
199
|
-
|
|
200
|
-
// OK: camelCase
|
|
201
|
-
<Stack className="c--featureCard" />
|
|
202
|
-
<div className="c--userProfile c--userProfile--compact" />
|
|
203
|
-
```
|
|
192
|
+
例外として、特定の外部CSS配下・埋め込みHTML・resetが効かない隔離領域で打ち消しが必要な場合は、理由を残して指定する。
|
|
204
193
|
|
|
205
194
|
---
|
|
206
195
|
|
|
@@ -211,13 +200,13 @@ Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `se
|
|
|
211
200
|
### `:root` でのグローバル上書き
|
|
212
201
|
|
|
213
202
|
| NG | OK | 理由 |
|
|
214
|
-
|
|
203
|
+
| --- | --- | --- |
|
|
215
204
|
| `:root { --keycolor: #c8553d; }` | `:root { --brand: #c8553d; }`(または `--accent` / `--link`) | サイト共通の色は `--brand` / `--accent` / `--link` などのセマンティックカラーで定義する |
|
|
216
205
|
|
|
217
206
|
### アクセントカラーとしての `keycolor` 参照
|
|
218
207
|
|
|
219
208
|
| NG | OK | 理由 |
|
|
220
|
-
|
|
209
|
+
| --- | --- | --- |
|
|
221
210
|
| `<Link c="keycolor">` | `<Link c="brand">` または `<Link c="link">` | リンク・hover などの恒常的なアクセントは `brand` / `link` を使う |
|
|
222
211
|
| `hov={{ c: 'keycolor' }}` | `hov={{ c: 'brand' }}` | 同上 |
|
|
223
212
|
| `border-inline-start: 3px solid var(--keycolor)`(CSS 直書き) | `border-inline-start: 3px solid var(--brand)` | 同上 |
|
|
@@ -239,7 +228,7 @@ Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `se
|
|
|
239
228
|
</Lism>
|
|
240
229
|
```
|
|
241
230
|
|
|
242
|
-
詳細: [tokens.md のキーカラー変数セクション](./tokens.md
|
|
231
|
+
詳細: [tokens.md のキーカラー変数セクション](./tokens.md#キーカラー変数---keycolor)
|
|
243
232
|
|
|
244
233
|
---
|
|
245
234
|
|
|
@@ -248,88 +237,21 @@ Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `se
|
|
|
248
237
|
### Heading の `level` は文字列
|
|
249
238
|
|
|
250
239
|
| NG | OK | 理由 |
|
|
251
|
-
|
|
240
|
+
| --- | --- | --- |
|
|
252
241
|
| `<Heading level={3}>` | `<Heading level="3">` | `level` は `'1'` 〜 `'6'` の文字列 union 型 |
|
|
253
242
|
|
|
254
243
|
### レスポンシブ値は配列 or オブジェクト
|
|
255
244
|
|
|
256
245
|
| NG | OK | 理由 |
|
|
257
|
-
|
|
246
|
+
| --- | --- | --- |
|
|
258
247
|
| `<Columns cols="1,2,3">` | `<Columns cols={[1, 2, 3]}>` | レスポンシブは配列 |
|
|
259
248
|
| `<Box p="20 30 40">` | `<Box p={[20, 30, 40]}>` | 同上 |
|
|
260
249
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
## レイアウト選択ミス
|
|
264
|
-
|
|
265
|
-
詳細な選択基準は [primitive-class.md](./primitive-class.md#カラムレイアウト-primitive-の使い分けガイド) の使い分けガイドを参照。
|
|
266
|
-
|
|
267
|
-
### Grid 直書き vs Columns
|
|
268
|
-
|
|
269
|
-
| NG | OK | 理由 |
|
|
270
|
-
|---|---|---|
|
|
271
|
-
| `<Grid gtc="repeat(3, 1fr)">` | `<Columns cols={3}>` | 等幅 N 列は Columns で宣言的に書く |
|
|
272
|
-
| `<Grid gtc={['1fr', '1fr 1fr', '1fr 1fr 1fr']}>` | `<Columns cols={[1, 2, 3]}>` | BP 切替も Columns のほうが簡潔 |
|
|
273
|
-
|
|
274
|
-
### コンテンツ幅のハードコード
|
|
275
|
-
|
|
276
|
-
| NG | OK | 理由 |
|
|
277
|
-
|---|---|---|
|
|
278
|
-
| `style={{ maxWidth: '1200px' }}` | `<Box max-sz="l">` | ヘッダーやセクションなど、コンテンツサイズにはトークン値(`xs` / `s` / `m` / `l` / `xl` / `bleed`)をできるだけ活用する |
|
|
250
|
+
### BP 非対応 Prop への配列指定
|
|
279
251
|
|
|
280
|
-
|
|
252
|
+
レスポンシブ配列を渡せるのは BP 対応の Prop だけ。BP 対応可否は [all-props.md](./property-class/all-props.md) の BP 列で確認する。
|
|
281
253
|
|
|
282
254
|
| NG | OK | 理由 |
|
|
283
|
-
|
|
284
|
-
| `<Grid
|
|
285
|
-
| `<Flex>` で 2 カラム強制横並び | `<WithSide>` | 縦並びへの切替が必要なら WithSide |
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## レスポンシブ抜け
|
|
290
|
-
|
|
291
|
-
### `is--container` 祖先なしで BP 値を使用
|
|
292
|
-
|
|
293
|
-
レスポンシブ値(配列・オブジェクト・`-{prop}_{bp}` クラス)は、デフォルト設定(SCSS 側 `$is_container_query: 1`)では `@container` クエリで発火するため、祖先要素のいずれかに `is--container`(コンポーネントなら `isContainer` prop)が必須。
|
|
294
|
-
|
|
295
|
-
※ プロジェクトの SCSS 設定で `$is_container_query: 0` にして `@media` クエリ運用に切り替えている場合は、`is--container` 祖先は不要。
|
|
255
|
+
| --- | --- | --- |
|
|
256
|
+
| `<Grid cg={['40', null, '80']}>` | `<Grid g={['40', null, '80']}>` または `<Grid cg="40">` | `cg` / `rg` は BP 非対応。レスポンシブにするなら BP 対応の `g` を使うか、単一値にする |
|
|
296
257
|
|
|
297
|
-
```jsx
|
|
298
|
-
// NG: container 祖先がないので sm/md 値が発火しない
|
|
299
|
-
<div>
|
|
300
|
-
<Box p={[20, 30, 40]}>...</Box>
|
|
301
|
-
</div>
|
|
302
|
-
|
|
303
|
-
// OK: 祖先に isContainer
|
|
304
|
-
<Stack isContainer>
|
|
305
|
-
<Box p={[20, 30, 40]}>...</Box>
|
|
306
|
-
</Stack>
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
### BP 専用クラスをベース値なしで使う
|
|
310
|
-
|
|
311
|
-
BP 専用クラス(`-{prop}_{bp}`)やコンポーネントの BP キー(`{ sm: ... }` 等)だけを指定すると、BP 未満では値が空になり意図しないレイアウト崩れを起こす。必ずベース値とセットで指定する。
|
|
312
|
-
|
|
313
|
-
```jsx
|
|
314
|
-
// NG: sm 未満で p が未指定になる
|
|
315
|
-
<Box p={{ sm: 30 }}>...</Box>
|
|
316
|
-
|
|
317
|
-
// OK: ベース値(base / 配列の先頭)を必ず添える
|
|
318
|
-
<Box p={{ base: 20, sm: 30 }}>...</Box>
|
|
319
|
-
<Box p={[20, 30]}>...</Box>
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
生 HTML / クラス指定で書く場合も同様:
|
|
323
|
-
|
|
324
|
-
| NG | OK | 理由 |
|
|
325
|
-
|---|---|---|
|
|
326
|
-
| `<div class="-p_sm" style="--p_sm: var(--s30)">` | `<div class="-p:20 -p_sm" style="--p_sm: var(--s30)">` | BP 未満では値が空になるため、ベースクラス `-{prop}:{value}` も必要 |
|
|
327
|
-
|
|
328
|
-
### ブレイクポイントの誤用
|
|
329
|
-
|
|
330
|
-
Lism CSS の標準出力で有効な BP は `sm: 480px` / `md: 800px` まで。`lg` 以降を使う場合は SCSS 設定で出力範囲を拡張する必要がある。`xs` は BP キーとして存在しない。
|
|
331
|
-
|
|
332
|
-
| NG | OK | 理由 |
|
|
333
|
-
|---|---|---|
|
|
334
|
-
| `<Box p={{ xs: 10, sm: 20 }}>` | `<Box p={{ base: 10, sm: 20 }}>` | デフォルトは `base`(`xs` キーは無い) |
|
|
335
|
-
| `cols={[1, 2, 3, 4]}` | `cols={[1, 2, 3]}` | 標準出力では `[base, sm, md]` までが有効。`lg` 以降は SCSS 設定が必要 |
|
|
@@ -21,9 +21,10 @@ Lism CSS は `@layer lism-base` レイヤーで、Reset CSS・HTML要素のベ
|
|
|
21
21
|
|
|
22
22
|
- `box-sizing: border-box` の全要素適用
|
|
23
23
|
- `margin: 0` の全要素適用(`<dialog>` を除く)
|
|
24
|
-
- `overflow: clip` を `<html>`
|
|
25
|
-
- `body` に `min-height: 100dvh`
|
|
26
|
-
- メディア要素(`img`, `video`, `iframe`)に `max-inline-size: 100
|
|
24
|
+
- `overflow-x: clip` を `<html>` に適用(横スクロール防止)。`:modal[open]` がある間は `overflow: clip`
|
|
25
|
+
- `body` に `min-height: 100dvh`、`overflow: inherit`
|
|
26
|
+
- メディア要素(`svg`, `img`, `video`, `audio`, `iframe`, `object`, `canvas`)に `max-inline-size: 100%`。`img` / `video` には `block-size: auto`
|
|
27
|
+
- クラスを持つリスト(`menu`, `:is(ul, ol)[class]`)は `list-style: none` + `padding: 0`
|
|
27
28
|
- フォーム要素のフォント・カラー継承
|
|
28
29
|
|
|
29
30
|
|
|
@@ -37,13 +38,13 @@ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイル
|
|
|
37
38
|
### 全要素の行間
|
|
38
39
|
|
|
39
40
|
| 変数 | 用途 |
|
|
40
|
-
|
|
41
|
+
| --- | --- |
|
|
41
42
|
| `--hl` | half-leading(行間の上下余白量)。`line-height: calc(1em + var(--hl) * 2)` として全要素に適用 |
|
|
42
43
|
|
|
43
44
|
### body
|
|
44
45
|
|
|
45
46
|
| 変数 | 用途 |
|
|
46
|
-
|
|
47
|
+
| --- | --- |
|
|
47
48
|
| `--fz--base` | ベースフォントサイズ |
|
|
48
49
|
| `--ff--base` | ベースフォントファミリー |
|
|
49
50
|
| `--lts--base` | ベース字間 |
|
|
@@ -55,7 +56,7 @@ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイル
|
|
|
55
56
|
### 見出し(h1〜h6)
|
|
56
57
|
|
|
57
58
|
| 変数 | 用途 |
|
|
58
|
-
|
|
59
|
+
| --- | --- |
|
|
59
60
|
| `--headings-ff` | 全見出し共通のフォントファミリー(デフォルト: `inherit`) |
|
|
60
61
|
| `--headings-fw` | 全見出し共通のフォントウェイト(デフォルト: `var(--fw--bold)`) |
|
|
61
62
|
|
|
@@ -64,22 +65,22 @@ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイル
|
|
|
64
65
|
### リンク(a)
|
|
65
66
|
|
|
66
67
|
| 変数 | フォールバック | 用途 |
|
|
67
|
-
|
|
68
|
+
| --- | --- | --- |
|
|
68
69
|
| `--link-c` | `var(--link)` | リンクテキスト色 |
|
|
69
70
|
| `--link-td` | `underline` | テキスト装飾の種類 |
|
|
70
71
|
|
|
71
72
|
### リスト(ul, ol)
|
|
72
73
|
|
|
73
|
-
class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動で復活する(`_html.scss
|
|
74
|
+
class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動で復活する(`_html.scss`)。クラス付きで箇条書き表示を維持したい場合は [`set--revert`](./set-class.md#set--revert) を付与する。
|
|
74
75
|
|
|
75
76
|
| 変数 | フォールバック | 用途 |
|
|
76
|
-
|
|
77
|
+
| --- | --- | --- |
|
|
77
78
|
| `--list-ps` | `1.75em` | リストの `padding-inline-start` |
|
|
78
79
|
|
|
79
80
|
### テーブル(td, th)
|
|
80
81
|
|
|
81
82
|
| 変数 | フォールバック | 用途 |
|
|
82
|
-
|
|
83
|
+
| --- | --- | --- |
|
|
83
84
|
| `--cells-p` | `0.625em 0.875em` | セルのパディング |
|
|
84
85
|
|
|
85
86
|
`td` と `th` の両方に `--cells-p` が適用される。色や最小幅などのカスタマイズは必要な要素にスタイルを直接当てる。
|
|
@@ -87,7 +88,7 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
|
|
|
87
88
|
### フォーム要素
|
|
88
89
|
|
|
89
90
|
| 変数 | フォールバック | 用途 |
|
|
90
|
-
|
|
91
|
+
| --- | --- | --- |
|
|
91
92
|
| `--controls-bgc` | `var(--base-2)` | 背景色 |
|
|
92
93
|
| `--controls-bdc` | `var(--divider)` | ボーダー色 |
|
|
93
94
|
| `--controls-p` | `0.25em 0.5em` | パディング |
|
|
@@ -97,5 +98,6 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
|
|
|
97
98
|
### その他
|
|
98
99
|
|
|
99
100
|
| 変数 | 対象 | 用途 |
|
|
100
|
-
|
|
101
|
+
| --- | --- | --- |
|
|
101
102
|
| `--focus-offset` | `:focus-visible` | アウトラインのオフセット(デフォルト: `0px`) |
|
|
103
|
+
| `--o--pp` | `:disabled` | 無効状態の不透明度(デフォルト: `0.5`) |
|
|
@@ -19,6 +19,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
19
19
|
- [Trait Components](#trait-components)
|
|
20
20
|
- [Layout Primitives](#layout-primitives)
|
|
21
21
|
- [`getLismProps()`](#getlismprops--外部コンポーネントとの連携)
|
|
22
|
+
- [AstroでのラップコンポーネントのProps型](#astroでのラップコンポーネントのprops型)
|
|
22
23
|
|
|
23
24
|
[詳細](https://lism-css.com/docs/core-components/lism-props.md)
|
|
24
25
|
|
|
@@ -49,7 +50,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
49
50
|
すべての Lism コンポーネントで使えるpropsです。
|
|
50
51
|
|
|
51
52
|
| Prop | 説明 | 例 |
|
|
52
|
-
|
|
53
|
+
| --- | --- | --- |
|
|
53
54
|
| `as` | レンダリングする HTML 要素または外部コンポーネントを指定(デフォルト: `"div"`) | `as="section"`, `as={Image}` |
|
|
54
55
|
| `layout` | レイアウトプリミティブ(`l--{layout}`)を指定 | `layout="flow"` |
|
|
55
56
|
| `atomic` | アトミックプリミティブ(`a--{atomic}`)を指定。`'divider'` / `'spacer'` / `'decorator'` が利用可能(`'icon'` は内部用) | `atomic="divider"` |
|
|
@@ -109,14 +110,14 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
109
110
|
`prop={value}`で指定した値(`value`)によって、基本的な出力は以下のように分類されます。
|
|
110
111
|
|
|
111
112
|
| 値 | 出力形式 | 例 |
|
|
112
|
-
|
|
113
|
+
| --- | --- | --- |
|
|
113
114
|
| トークン値・プリセット値 | `-{prop}:{value}` クラスのみ | `fz='l'` → `class="-fz:l"` |
|
|
114
115
|
| `true` | `-{prop}` クラスのみ(変数なし) | `bd` / `bd={true}` → `class="-bd"` |
|
|
115
116
|
| `:` で始まる値 | 強制的にクラス化 | `p=':hoge'` → `class="-p:hoge"` |
|
|
116
117
|
| その他の値(レスポンシブ対応プロパティ) | `-{prop}` + `--{prop}` | `fz='20px'` → `class="-fz"` + `style="--fz:20px"` |
|
|
117
118
|
| その他の値(レスポンシブ非対応プロパティ) | `style` 属性に直接出力 | `o='0.7'` → `style="opacity:0.7"` |
|
|
118
119
|
| その他の値(変数プロパティ) | `--{prop}` | `bdw='2px'` → `style="--bdw:2px"` (`border-width`としては出力されない) |
|
|
119
|
-
| レスポンシブ指定値 | 上記いずれかのベース出力 + `-{prop}_{bp}` + `--{prop}_{bp}` | `p={[10,20]}` → `class="-p:10 -p_sm"` + `style="--p_sm:var(--s20)"
|
|
120
|
+
| レスポンシブ指定値 | 上記いずれかのベース出力 + `-{prop}_{bp}` + `--{prop}_{bp}` | `p={[10,20]}` → `class="-p:10 -p_sm"` + `style="--p_sm:var(--s20)"` |
|
|
120
121
|
|
|
121
122
|
補足:
|
|
122
123
|
- **レスポンシブ対応プロパティ**かどうかは、 `props.ts`で`bp: 1`がセットされているかどうかで分かります。
|
|
@@ -178,7 +179,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
178
179
|
Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ群です。
|
|
179
180
|
|
|
180
181
|
| Prop | 出力クラス |
|
|
181
|
-
|
|
182
|
+
| --- | --- |
|
|
182
183
|
| `isWrapper` | `is--wrapper` |
|
|
183
184
|
| `isWrapper="{s\|m\|l\|xl}"` | `is--wrapper` + `-contentSize:{s\|m\|l\|xl}` |
|
|
184
185
|
| `isWrapper="{value}"` | `is--wrapper` + `-contentSize` + `--contentSize:{value}` |
|
|
@@ -208,7 +209,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
|
|
|
208
209
|
`Lism` の `as` エイリアスとして機能するコンポーネント群です。layout クラスは付与されず、HTML のセマンティクスを表現するために使います。
|
|
209
210
|
|
|
210
211
|
| コンポーネント | デフォルト要素 | 許容タグ |
|
|
211
|
-
|
|
212
|
+
| --- | --- | --- |
|
|
212
213
|
| `<Text>` | `<p>` | `p`, `div`, `blockquote`, `address`, `figcaption`, `pre` |
|
|
213
214
|
| `<Heading>` | `<h2>` | `h1`〜`h6`(`level` prop で指定) |
|
|
214
215
|
| `<Inline>` | `<span>` | `span`, `em`, `strong`, `small`, `code`, `time`, `i`, `b`, `mark`, `abbr`, `cite`, `kbd`, `label` |
|
|
@@ -232,7 +233,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
|
|
|
232
233
|
## Atomic Primitives
|
|
233
234
|
|
|
234
235
|
| コンポーネント | 出力クラス | 用途 |
|
|
235
|
-
|
|
236
|
+
| --- | --- | --- |
|
|
236
237
|
| `<Icon>` | `a--icon` | SVG アイコン・アイコンフォント |
|
|
237
238
|
| `<Spacer>` | `a--spacer` | 空白要素 |
|
|
238
239
|
| `<Divider>` | `a--divider` | 区切り線 |
|
|
@@ -247,7 +248,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
|
|
|
247
248
|
`<Lism isXxx>`のエイリアスコンポーネントです。`is--*` クラスを出力します。
|
|
248
249
|
|
|
249
250
|
| コンポーネント | 内部処理 | 出力クラス |
|
|
250
|
-
|
|
251
|
+
| --- | --- | --- |
|
|
251
252
|
| `<Container>` | `isContainer` | `is--container` |
|
|
252
253
|
| `<Wrapper>` | `isWrapper` | `is--wrapper` |
|
|
253
254
|
| `<Layer>` | `isLayer` | `is--layer` |
|
|
@@ -261,7 +262,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
|
|
|
261
262
|
内部で `layout` prop が固定されており、対応する `l--{layout}` クラスが自動で出力されます。各コンポーネントの専用 Props(`cols`, `rows`, `breakSize`, `sideW`/`mainW`, `flow` など)は、それぞれの詳細ファイルを参照してください。
|
|
262
263
|
|
|
263
264
|
| コンポーネント | 出力クラス |
|
|
264
|
-
|
|
265
|
+
| --- | --- |
|
|
265
266
|
| `<Box>` | `l--box` |
|
|
266
267
|
| `<Flex>` | `l--flex` |
|
|
267
268
|
| `<Stack>` | `l--stack` |
|
|
@@ -293,3 +294,20 @@ function MyComponent({ children }) {
|
|
|
293
294
|
return <div {...lismProps}>{children}</div>;
|
|
294
295
|
}
|
|
295
296
|
```
|
|
297
|
+
|
|
298
|
+
## AstroでのラップコンポーネントのProps型
|
|
299
|
+
|
|
300
|
+
Astroで`<Lism>`をラップする独自コンポーネントのProps型は、`interface extends`ではなく交差型(`&`)で合成する。`Lism`のProps型は`layout`による discriminated union を含むため、`interface extends`はTSエラーになる。
|
|
301
|
+
|
|
302
|
+
```ts
|
|
303
|
+
import { Lism } from 'lism-css/astro';
|
|
304
|
+
import type { ComponentProps } from 'astro/types';
|
|
305
|
+
|
|
306
|
+
type LismProps = ComponentProps<typeof Lism>;
|
|
307
|
+
|
|
308
|
+
// NG: interface Props extends LismProps { class?: string } → TSエラー
|
|
309
|
+
// OK: 交差型で合成
|
|
310
|
+
type Props = LismProps & { class?: string };
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
この制約は`<Lism>`に限らず、`<Text>`や`<Wrapper>`など layout Prop を受け取れるコンポーネント全般に共通する。`<Cluster>`など layout 固定のレイアウトコンポーネントのみ union を含まず`interface extends`も通るが、交差型に統一する。
|