@lism-css/mcp 0.24.0 → 0.27.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.
@@ -67,7 +67,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
67
67
  <Media as={Image} src="..." p="20" bd />
68
68
  // → Image コンポーネントに { className: '-p:20 -bd' } が渡される
69
69
 
70
- // className でコンポーネントクラスを付与(c--* も className に直接書く)
70
+ // className で独自クラスを付与(c--* も className に直接書く)
71
71
  <Lism className="c--myComponent" p="10">...</Lism>
72
72
  // → <div class="c--myComponent -p:10">...</div>
73
73
 
@@ -158,11 +158,10 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
158
158
 
159
159
  #### レスポンシブ指定
160
160
 
161
- レスポンシブ対応プロパティは、配列またはオブジェクトでブレイクポイント(`sm`,`md`)ごとの値を指定できます。(`lg`は要カスタマイズ)
162
-
161
+ レスポンシブ対応プロパティは、配列またはオブジェクトでブレイクポイント(`sm` / `md` / `lg`)ごとの値を指定できます。`xs` / `xl` は opt-in(→ [responsive.md](./responsive.md#ブレイクポイント))。
163
162
 
164
163
  ```jsx
165
- // 配列(base sm md の順)
164
+ // 配列([base, sm, md, lg] の順)
166
165
  <Lism p={['20', '30', '40']}>...</Lism>
167
166
  // <div class="-p:20 -p_sm -p_md" style="--p_sm:var(--s30);--p_md:var(--s40)">...</div>
168
167
 
@@ -190,6 +189,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
190
189
  | `isSide` | `is--side` |
191
190
  | `isSkipFlow` | `is--skipFlow` |
192
191
  | `hasTransition` | `has--transition` |
192
+ | `hasTransition="{props}"` | `has--transition` + `--transitionProps:{props}` |
193
193
  | `hasGutter` | `has--gutter` |
194
194
  | `hasSnap` | `has--snap` |
195
195
  | `hasMask` | `has--mask` |
@@ -218,6 +218,8 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
218
218
  | `<Link>` | `<a>`(固定) | — |
219
219
  | `<Media>` | `<img>` | `img`, `video`, `iframe`, `picture` |
220
220
 
221
+ デフォルト要素と同じ`as`(`<Text as="p">`、`<Inline as="span">`など)は書かず、要素を変える時だけ`as`を付ける。
222
+
221
223
  ```jsx
222
224
  <Heading level="3" fz="xl">見出し</Heading>
223
225
  // → <h3 class="-fz:xl">見出し</h3>
@@ -239,8 +241,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
239
241
  | `<Divider>` | `a--divider` | 区切り線 |
240
242
  | `<Decorator>` | `a--decorator` | 装飾要素(SCSS定義なし、クラス名のみ出力) |
241
243
 
242
-
243
- 各プリミティブの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `primitives/` 配下の各ファイルを参照。
244
+ 各プリミティブの詳細は `primitives/{クラス名}.md`(例: [`primitives/a--icon.md`](./primitives/a--icon.md))を参照。
244
245
 
245
246
 
246
247
  ## Trait Components
@@ -254,7 +255,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
254
255
  | `<Layer>` | `isLayer` | `is--layer` |
255
256
  | `<BoxLink>` | `isBoxLink` | `is--boxLink` |
256
257
 
257
- 各 Trait クラスの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `trait-class/` 配下の各ファイルを参照。`has--*` については [trait-class.md](./trait-class.md) を参照。
258
+ 各 Trait クラスの詳細は `trait-class/{クラス名}.md`(例: [`trait-class/is--container.md`](./trait-class/is--container.md))を参照。`has--*` については [trait-class.md](./trait-class.md) を参照。
258
259
 
259
260
 
260
261
  ## Layout Primitives
@@ -277,7 +278,7 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
277
278
  | `<SwitchColumns>` | `l--switchColumns` |
278
279
  | `<WithSide>` | `l--withSide` |
279
280
 
280
- 各プリミティブの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `primitives/` 配下の各ファイルを参照。
281
+ 各プリミティブの詳細は `primitives/{クラス名}.md`(例: [`primitives/l--stack.md`](./primitives/l--stack.md))を参照。
281
282
 
282
283
  ## `getLismProps()` — 外部コンポーネントとの連携
283
284
 
@@ -26,11 +26,12 @@ import { Button } from '@lism-css/ui/astro/Button';
26
26
  - [Badge](#badge)
27
27
  - [Button](#button)
28
28
  - [Callout](#callout)
29
- - [Chat](#chat)
30
29
  - [Details](#details)
31
30
  - [Modal](#modal)
32
31
  - [NavMenu](#navmenu)
32
+ - [Popover](#popover)
33
33
  - [Tabs](#tabs)
34
+ - [Tooltip](#tooltip)
34
35
  - [ShapeDivider](#shapedivider)
35
36
  - [DummyText](#dummytext)
36
37
  - [CLI でプロジェクトにコピーして使う](#cli-でプロジェクトにコピーして使う)
@@ -52,7 +53,7 @@ import { Button } from '@lism-css/ui/astro/Button';
52
53
  | `allowMultiple` | Root | `boolean` | — | 複数アイテムの同時展開を許可 |
53
54
  | `isOpen` | Item / Button / Panel | `boolean` | `false` | アイテムを初期展開。Item・Button・Panel の3つ揃えて指定(Item=`data-opened` 付与、Button=`aria-expanded`、Panel=`hidden` 解除) |
54
55
  | `as` | Heading | `string` | `div` | 見出しのHTMLタグ。`div` 時は `role='heading'` が自動付与。`h2`〜`h6` 指定時は role なし |
55
- | `flow` | Panel | `string` | — | パネル内コンテンツ領域(`c--accordion_content`)のフロー余白 |
56
+ | `flow` | Panel | `string` | — | パネル内コンテンツ領域(`b--accordion_content`)のフロー余白 |
56
57
 
57
58
  ```jsx
58
59
  <Accordion.Root>
@@ -70,7 +71,7 @@ import { Button } from '@lism-css/ui/astro/Button';
70
71
 
71
72
  ソース: [Alert/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Alert)
72
73
 
73
- 短めの文言を目立たせて強調表示するアラートボックス。`type` プリセットによりアイコンとカラーが自動設定される。
74
+ 短めの文言を目立たせて強調表示するアラートボックス。`type` プリセットによりアイコンとカラーが自動設定される。`b--alert` クラスが付与される。
74
75
  プリセット: `alert`=alert/red, `point`=lightbulb/orange(`tip`も同じ), `warning`=warning/yellow, `check`=check-circle/green, `help`=question/purple, `info`=info/blue, `note`=note/gray。
75
76
 
76
77
  | Prop | 型 | デフォルト | 説明 |
@@ -90,16 +91,19 @@ import { Button } from '@lism-css/ui/astro/Button';
90
91
 
91
92
  ソース: [Avatar/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Avatar)
92
93
 
93
- アバター(プロフィール画像)コンポーネント。Frame ベースの円形画像表示。`c--avatar` クラスが付与される。
94
+ アバター(プロフィール画像)コンポーネント。円形の画像表示で、`b--avatar` クラスが付与される。`src` ありは `l--frame`、`src` 未指定時は `l--center` に切り替わり、ルートに `b--avatar--initial`(背景色 `--base-2`)が付いて `name` の先頭1文字をイニシャルとして `span` で表示する(画像ロード失敗時の自動切替は無い)。
94
95
 
95
96
  | Prop | 型 | デフォルト | 説明 |
96
97
  | --- | --- | --- | --- |
97
- | `src` | `string` | — | 画像URL |
98
- | `alt` | `string` | — | 代替テキスト |
99
- | `size` | `string` | `'1.5em'` | アバターのサイズ |
98
+ | `src` | `string` | — | 画像URL。未指定なら `name` のイニシャルを表示 |
99
+ | `name` | `string` | — | ユーザー名。イニシャルの生成元。`alt` 未指定時は代替テキストにも使う |
100
+ | `alt` | `string` | — | 代替テキスト。指定時は `name` より優先。`alt=''` で装飾扱い(イニシャル表示時は `aria-hidden`) |
101
+ | `size` | `string` | `'2em'` | アバターのサイズ |
100
102
 
101
103
  ```jsx
102
104
  <Avatar src='/avatar.jpg' alt='User' size='48px' />
105
+ <Avatar name='Yamada Taro' size='48px' /> {/* イニシャル "Y" を表示 */}
106
+ <Avatar name='Yamada Taro' bgc='brand' c='base' /> {/* 背景色はルートの Prop で上書き可 */}
103
107
  ```
104
108
 
105
109
 
@@ -107,11 +111,11 @@ import { Button } from '@lism-css/ui/astro/Button';
107
111
 
108
112
  ソース: [Badge/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Badge)
109
113
 
110
- バッジ(ラベル)コンポーネント。`span` 要素としてインライン表示。`c--badge` クラスが付与される。
114
+ バッジ(ラベル)コンポーネント。`span` 要素としてインライン表示。`b--badge` クラスが付与される。
111
115
 
112
116
  | Prop | 型 | デフォルト | 説明 |
113
117
  | --- | --- | --- | --- |
114
- | `variant` | `string` | — | バリエーション(`'outline'` 等)。`c--badge--{variant}` クラスが出力 |
118
+ | `variant` | `string` | — | バリエーション(`'outline'` 等)。`b--badge--{variant}` クラスが出力 |
115
119
  | `keycolor` | `string` | — | キーカラー |
116
120
 
117
121
  ```jsx
@@ -123,11 +127,11 @@ import { Button } from '@lism-css/ui/astro/Button';
123
127
 
124
128
  ソース: [Button/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Button)
125
129
 
126
- ボタン型リンクコンポーネント。デフォルトで `a` 要素として出力。`c--button` クラスが付与される。
130
+ ボタン型リンクコンポーネント。デフォルトで `a` 要素として出力。`b--button` クラスが付与される。
127
131
 
128
132
  | Prop | 型 | デフォルト | 説明 |
129
133
  | --- | --- | --- | --- |
130
- | `variant` | `string` | — | バリエーション(`'fill'`, `'outline'` 等)。`c--button--{variant}` クラスが出力 |
134
+ | `variant` | `string` | — | バリエーション(`'fill'`, `'outline'` 等)。`b--button--{variant}` クラスが出力 |
131
135
  | `keycolor` | `string` | — | キーカラー |
132
136
  | `href` | `string` | — | リンク先URL |
133
137
 
@@ -140,7 +144,7 @@ import { Button } from '@lism-css/ui/astro/Button';
140
144
 
141
145
  ソース: [Callout/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Callout)
142
146
 
143
- 記事中の重要ポイントを示すコンポーネント。タイトルとアイコン付きの強調ボックス。`type` プリセットによりアイコンとカラーが自動設定される(プリセット内容は [Alert](#alert) と同一)。
147
+ 記事中の重要ポイントを示すコンポーネント。タイトルとアイコン付きの強調ボックス。`type` プリセットによりアイコンとカラーが自動設定される(プリセット内容は [Alert](#alert) と同一)。`b--callout` クラスが付与される。
144
148
 
145
149
  | Prop | 型 | デフォルト | 説明 |
146
150
  | --- | --- | --- | --- |
@@ -155,26 +159,6 @@ import { Button } from '@lism-css/ui/astro/Button';
155
159
  ```
156
160
 
157
161
 
158
- ## Chat
159
-
160
- ソース: [Chat/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Chat)
161
-
162
- チャット風の吹き出しコンポーネント。Grid ベースの会話形式 UI。`c--chat` クラスが付与される。
163
-
164
- | Prop | 型 | デフォルト | 説明 |
165
- | --- | --- | --- | --- |
166
- | `name` | `string` | — | 発言者の名前 |
167
- | `avatar` | `string` | — | アバター画像の src |
168
- | `variant` | `'speak' \| 'think'` | `'speak'` | チャットタイプ |
169
- | `direction` | `'start' \| 'end'` | `'start'` | 表示位置 |
170
- | `keycolor` | `string` | `'gray'` | キーカラー |
171
- | `flow` | `string` | `'s'` | コンテンツ要素のフロー余白 |
172
-
173
- ```jsx
174
- <Chat name='Alice' avatar='/alice.jpg'>Hello!</Chat>
175
- ```
176
-
177
-
178
162
  ## Details
179
163
 
180
164
  ソース: [Details/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Details)
@@ -231,7 +215,7 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
231
215
 
232
216
  ソース: [NavMenu/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/NavMenu)
233
217
 
234
- ナビゲーションメニューコンポーネント。`c--navMenu` クラスが付与される。
218
+ ナビゲーションメニューコンポーネント。`b--navMenu` クラスが付与される。
235
219
 
236
220
  **構造:** `NavMenu.Root > NavMenu.Item > NavMenu.Link`(`NavMenu.Nest` でネスト可能)
237
221
 
@@ -255,11 +239,45 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
255
239
  ```
256
240
 
257
241
 
242
+ ## Popover
243
+
244
+ ソース: [Popover/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Popover)
245
+
246
+ クリックで開くインタラクティブなパネル。ネイティブ Popover API(`popover` 属性)で開閉し、CSS Anchor Positioning でトリガーの隣に配置する。クライアント JS なし。開閉・外側クリック/Esc での light dismiss・フォーカス復帰・`aria-expanded` はブラウザに任せる。Anchor Positioning 非対応ブラウザでは画面中央のカードとして開く。ホバーで出す補足テキストは `Tooltip` を使う。
247
+
248
+ **構造:** `Popover.Root > Popover.Trigger + Popover.Popup > (Content + Popover.Close)`
249
+
250
+ | Prop | 対象 | 型 | デフォルト | 説明 |
251
+ | --- | --- | --- | --- | --- |
252
+ | `popoverId` | Root | `string` | 自動生成 | Trigger の `popovertarget`・Popup の `id`・Close の `popovertarget` に配布する ID。Root 配下では子に ID を指定しない |
253
+ | `popoverId` | Trigger / Close | `string` | — | Root 外で単体利用するときだけ指定(Popup の `id` と揃える) |
254
+ | `offset` | Root | `string` | `var(--s5)` | トリガーとの距離。`--popover-offset` 変数として出力 |
255
+ | `side` | Popup | `'top' \| 'bottom' \| 'start' \| 'end'` | `'bottom'` | 表示位置。`data-side` として出力。`start`/`end` は横方向で、書字方向に追従する inline 軸の論理方向(LTR では `start`=左)。viewport 端で自動反転 |
256
+ | `align` | Popup | `'start' \| 'center' \| 'end'` | `'center'` | トリガーに対する揃え。`data-align` として出力。`side` が `top`/`bottom` のとき書字方向、横方向のとき `start`=上・`end`=下 |
257
+ | `type` | Popup | `'auto' \| 'manual'` | `'auto'` | `popover` 属性の値。`manual` は light dismiss と Esc が無効になるので `Close` を必ず置く |
258
+ | `icon` / `srText` | Close | `string` | `'x'` / `'Close'` | 子要素が無いときのアイコンとスクリーンリーダー向けテキスト |
259
+
260
+ - CSS 変数(`--popover-offset`・`--popover-duration`)は Root(`.b--popover`)で受け取る。Root かその祖先に指定する。Popup に書いても効かない。
261
+ - Trigger / Close は `button` 要素でなければ `popovertarget` が効かない。
262
+ - 色・余白・角丸・影は Lism props(`bgc`・`p`・`bdrs`・`bxsh` 等)で上書きする。開閉フェードの時間は `--popover-duration`。
263
+ - フォームを含む場合は Popup に `role='dialog'` と `aria-label` を付ける。
264
+
265
+ ```jsx
266
+ <Popover.Root>
267
+ <Popover.Trigger>Open</Popover.Trigger>
268
+ <Popover.Popup side='bottom' align='start'>
269
+ Content
270
+ <Popover.Close srText='閉じる' />
271
+ </Popover.Popup>
272
+ </Popover.Root>
273
+ ```
274
+
275
+
258
276
  ## Tabs
259
277
 
260
278
  ソース: [Tabs/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Tabs)
261
279
 
262
- タブ切り替え UI。タブクリックでコンテンツパネルを切り替える。スタイリングはほぼなく動きのみ提供。
280
+ タブ切り替え UI。タブクリックまたは左右キー・Home/End でコンテンツパネルを切り替える。縦並びにする場合は `listProps` で `aria-orientation="vertical"` を指定すると上下キーに切り替わる。スタイリングはほぼなく動きのみ提供。
263
281
 
264
282
  **構造:** `Tabs.Root > Tabs.Item > (Tabs.Tab + Tabs.Panel)`(`Tabs.List` も利用可能)
265
283
 
@@ -268,7 +286,7 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
268
286
  | `tabId` | Root | `string` | — | タブを特定するための ID 文字列 |
269
287
  | `defaultIndex` | Root | `number` | `1` | 初期アクティブタブ(1始まり) |
270
288
  | `listProps` | Root | `object` | — | タブボタンリスト要素へ渡す props |
271
- | `variant` | Root | `string` | | バリエーション。`c--tabs--{variant}` クラスが出力 |
289
+ | `variant` | Root | `string` | `'default'` | バリエーション。`b--tabs--{variant}` クラスが出力。`'default'` のほか `'line'` を標準提供。独自 variant 指定時は既定バリアント(`b--tabs--default`)の装飾が適用されない |
272
290
 
273
291
  ```jsx
274
292
  <Tabs.Root>
@@ -284,6 +302,35 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
284
302
  ```
285
303
 
286
304
 
305
+ ## Tooltip
306
+
307
+ ソース: [Tooltip/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Tooltip)
308
+
309
+ ホバー / キーボードフォーカスで出る補足テキスト。表示制御は CSS のみで、JS は「Esc で閉じる」だけ(`scripts/tooltip.js`)。CSS Anchor Positioning でトリガーの隣に配置し、非対応ブラウザではトリガー基準の絶対配置にフォールバックする。中にリンク・ボタンを置かない(それは `Popover`)。重要な情報をツールチップだけに入れない(タッチでは見えない)。
310
+
311
+ **構造:** `Tooltip.Root > Tooltip.Trigger + Tooltip.Popup`(Popup は Root 直下に置く)
312
+
313
+ | Prop | 対象 | 型 | デフォルト | 説明 |
314
+ | --- | --- | --- | --- | --- |
315
+ | `tooltipId` | Root | `string` | 自動生成 | Trigger の `aria-describedby` と Popup の `id` に配布する ID。Root 配下では子に ID を指定しない |
316
+ | `tooltipId` | Trigger | `string` | — | Root 外で単体利用するときだけ指定(Popup の `id` と揃える) |
317
+ | `delay` | Root | `string` | `0.4s` | 表示までのディレイ。`--tooltip-delay` 変数として出力(退場猶予は `--tooltip-delay--close`、既定 `0.15s`) |
318
+ | `offset` | Root | `string` | `var(--s5)` | トリガーとの距離。`--tooltip-offset` 変数として出力 |
319
+ | `side` | Popup | `'top' \| 'bottom' \| 'start' \| 'end'` | `'top'` | 表示位置。`data-side` として出力。`start`/`end` は横方向で、書字方向に追従する inline 軸の論理方向(LTR では `start`=左)。viewport 端で自動反転 |
320
+ | `align` | Popup | `'start' \| 'center' \| 'end'` | `'center'` | `side` と直交する方向の揃え。`data-align` として出力。`side` が `top`/`bottom` のとき `start`/`end` は書字方向に追従 |
321
+
322
+ - CSS 変数(`--tooltip-offset`・`--tooltip-delay`・`--tooltip-delay--close`・`--tooltip-duration`)は Root(`.b--tooltip`)で受け取る。Root かその祖先に指定する。Popup に書いても効かない。
323
+ - Trigger の既定は `button`。`as='span'` 等にするなら `tabindex='0'` でフォーカス可能にする。
324
+ - 既定は反転配色(`--text` 背景・`--base` 文字)。色・余白・角丸は Lism props(`bgc`・`c`・`p`・`bdrs` 等)で上書きする。フェード時間は `--tooltip-duration`。
325
+
326
+ ```jsx
327
+ <Tooltip.Root>
328
+ <Tooltip.Trigger>Save</Tooltip.Trigger>
329
+ <Tooltip.Popup side='top'>Shortcut: ⌘S</Tooltip.Popup>
330
+ </Tooltip.Root>
331
+ ```
332
+
333
+
287
334
  ## ShapeDivider
288
335
 
289
336
  ソース: [ShapeDivider/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/ShapeDivider)
@@ -4,9 +4,10 @@
4
4
 
5
5
  - [CSS Layer 構造](#css-layer-構造)
6
6
  - [クラス分類とプレフィックス](#クラス分類とプレフィックス)
7
- - [Component Class(`c--`)](#component-classc--)
7
+ - [独自クラスの選び方(2分類)](#独自クラスの選び方2分類)
8
+ - [Block Class(`b--`)](#block-classb--)
9
+ - [Custom Class(`c--`)](#custom-classc--)
8
10
  - [カスタムCSS を追加する場合](#カスタムcss-を追加する場合)
9
- - [独自プレフィックス](#独自プレフィックス)
10
11
  - [CSS の配置場所](#css-の配置場所)
11
12
 
12
13
  [詳細](https://lism-css.com/docs/css-methodology.md)
@@ -24,16 +25,22 @@ Lism CSS は CSS Layers による詳細度管理を採用しています。
24
25
  Settings(トークン定義)
25
26
  → @layer lism-base(Reset CSS・トークン・set-- クラス)
26
27
  → @layer reset(リセットCSS)
28
+ → @layer lism-block(b-- Block Class — CSS でベーススタイルを管理する基礎部品)
27
29
  → @layer lism-trait(is-- / has-- Trait Class)
28
30
  → @layer lism-primitive
29
31
  → @layer layout(l-- Layout Primitive)
30
32
  → @layer atomic(a-- Atomic Primitive)
31
- → @layer lism-component(c-- Component Class BEM 構造を持つ UI 部品)
32
- → @layer lism-custom(ユーザーカスタマイズ用)
33
+ → @layer lism-custom(ユーザーの独自CSSc--)
33
34
  → @layer lism-utility(u-- ユーティリティクラス)
34
35
  → Property Class(レイヤー外 — 最も詳細度が高い)
35
36
  ```
36
37
 
38
+ `lism-block` は `lism-trait` / `lism-primitive` より弱い位置にあるため、`b--` のベーススタイルには、明示的に付与したクラス(`is--` / `has--` / `l--` など)が勝ちます。
39
+
40
+ なお、レイヤーによるこの優先関係が保証されるのは標準ビルド(`main.css` / `full.css`)だけです。`main_no_layer.css` / `full_no_layer.css` では、Property Class は常に `!important`、`u--` クラスはセレクタ二重化(`.u--trim.u--trim` = 0-2-0)で「Property Class > Utility Class > 単一クラス」の序列だけを再現し、それ以外は読み込み順と詳細度に依存します。
41
+
42
+ 独自クラス・上書きスタイルも対応するレイヤーに置きます。トークン・ベーススタイルの上書きは `@layer lism-base`、`b--` のベーススタイルは `@layer lism-block`、それ以外の独自クラス(`c--`)は `@layer lism-custom`(書き方は「カスタムCSS を追加する場合」)。
43
+
37
44
  ## クラス分類とプレフィックス
38
45
 
39
46
  [詳細](https://lism-css.com/docs/naming.md)
@@ -45,7 +52,8 @@ Lism CSSで定義されるクラスは、その役割とレイヤーの所属が
45
52
  | Set Class | ベーススタイル上書き・変数提供 | `set--` | `set--plain`, `set--revert`, `set--hov`, `set--bxsh` |
46
53
  | Layout Primitive | レイアウトの構成単位となる Primitive | `l--` | `l--grid`, `l--flex`, `l--stack` |
47
54
  | Atomic Primitive | レイアウトの最小単位となる Primitive | `a--` | `a--icon`, `a--divider` |
48
- | Component Class | BEM 構造を持つ UI 部品 | `c--` | `c--button`, `c--accordion` |
55
+ | Block Class | ベーススタイルを CSS 側で管理する基礎部品 | `b--` | `b--btn`, `b--badge`, `b--card` |
56
+ | Custom Class | Lism 本体に含まれない、ユーザーが自由に定義するカスタムクラス | `c--` | `c--featureList`, `c--header` |
49
57
  | `is--` Trait | 要素に役割(〜である)を宣言 | `is--` | `is--container`, `is--wrapper`, `is--layer`, `is--boxLink` |
50
58
  | `has--` Trait | 要素に機能(〜を持つ)を付与 | `has--` | `has--transition`, `has--gutter`, `has--snap`, `has--mask` |
51
59
  | Utility Class | 用途が明確な装飾系ユーティリティ | `u--` | `u--cbox`, `u--trim`, `u--divide`, `u--enclose` |
@@ -53,12 +61,14 @@ Lism CSSで定義されるクラスは、その役割とレイヤーの所属が
53
61
 
54
62
  **併用ルール:**
55
63
 
56
- - `l--` と `c--` は併用OK(例: `<div class="l--flex c--nav">`)
57
- - 同カテゴリ内の Primitive 併用は不可(例: `l--flex` `l--grid`、`a--icon` `a--divider` は同要素に付けない)
58
- - `l--` × `a--` は非推奨(役割的に同居しない想定)
59
- - `is--` / `has--` 同士は併用OK(Trait は複数併用できる)
60
- - `is--` / `has--` × `l--` / `a--` も併用OK
61
- - `c--` 同士の併用ルールとBEM構造は[Component Class(`c--`)](#component-classc--)を参照
64
+ - Primitive の併用は禁止(`l--`同士、`a--`同士、`l--`+`a--` はNG)
65
+ - Trait の併用は可 (`is--`同士 / `has--`同士、 `is--` + `has--` はOK)
66
+ - Trait + Primitive の併用は可 (`is--`/`has--` + `l--`/`a--` はOK)
67
+ - `b--` + Primitive / Trait の併用は可(`b--` + `l--`/`a--`/`is--`/`has--` OK
68
+ - `b--` + `b--` は禁止
69
+ - `c--` + `c--` は禁止
70
+ - `b--` + `c--` は禁止
71
+
62
72
 
63
73
  **`is--` と `has--` の判定軸:**
64
74
 
@@ -71,20 +81,21 @@ Lism CSSで定義されるクラスは、その役割とレイヤーの所属が
71
81
  class 属性にクラスを直接記述する場合は、以下の順序で並べてください。
72
82
 
73
83
  ```
74
- [customClass] [c--] [a--] [l--] [set--] [is--] [has--] [u--] [-]
84
+ [規約対象外クラス] [c--] [b--] [a--] [l--] [set--] [is--] [has--] [u--] [-]
75
85
  ```
76
86
 
77
- | # | 区分 | 例 |
78
- | --- | --- | --- |
79
- | 1 | 独自クラス(`customClass`) | `z--header`, `hoge` |
80
- | 2 | Component(`c--`) | `c--box`, `c--box--primary` |
81
- | 3 | Atomic Primitive(`a--`) | `a--icon`, `a--divider` |
82
- | 4 | Layout Primitive(`l--`) | `l--flex`, `l--columns` |
83
- | 5 | Set Class(`set--`) | `set--hov`, `set--bxsh` |
84
- | 6 | Trait Class 役割宣言(`is--`) | `is--wrapper`, `is--layer` |
85
- | 7 | Trait Class 機能付与(`has--`) | `has--transition`, `has--gutter` |
86
- | 8 | Utility Class(`u--`) | `u--cbox`, `u--trim` |
87
- | 9 | Property Class(`-`) | `-p:20`, `-bgc:base-2`, `-hov:-c` |
87
+ | # | 区分 |
88
+ | --- | --- |
89
+ | 1 | Lismの規約対象外のクラス(外部ライブラリ・JSフック等) |
90
+ | 2 | Custom(`c--`) |
91
+ | 3 | Block(`b--`) |
92
+ | 4 | Atomic Primitive(`a--`) |
93
+ | 5 | Layout Primitive(`l--`) |
94
+ | 6 | Set Class(`set--`) |
95
+ | 7 | Trait Class 役割宣言(`is--`) |
96
+ | 8 | Trait Class 機能付与(`has--`) |
97
+ | 9 | Utility Class(`u--`) |
98
+ | 10 | Property Class(`-{prop}:{value}`) |
88
99
 
89
100
  ```html
90
101
  <!-- OK -->
@@ -96,33 +107,73 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
96
107
 
97
108
  なお、`class` 属性内の並び順は CSS の適用結果(詳細度・カスケード順)には影響しません。この順序はあくまで可読性と一貫性のための整理です。
98
109
 
99
- ## Component Class(`c--`)
110
+ ## 独自クラスの選び方(2分類)
111
+
112
+ Lism CSS が提供するクラス(`set--` / `is--` / `has--` / `l--` / `a--` / `u--` / Property Class)以外の、ユーザーが自分で定義するクラスは次の2分類で命名します。
100
113
 
101
- `c--` プレフィックスで定義する **Component クラス** は、Primitive を組み合わせて作られた具体的な UI 部品です。`@layer lism-component` に配置され、コアの `lism-css` には含まれず、`@lism-css/ui` パッケージやユーザー定義として提供されます。
114
+ | 分類 | 命名 | | スタイルの書き方 |
115
+ | --- | --- | --- | --- |
116
+ | サイト共通で繰り返し使う基礎部品(ボタン・バッジ・カード級) | `b--{name}` | `b--btn`, `b--badge` | ベーススタイルを `@layer lism-block` で管理。BP切り替え・hover・例外的な調整は Property Class等を活用 |
117
+ | それ以外のカスタムクラス全般(コンポーネント・サイトの領域・ページ固有要素など粒度不問) | `c--{name}` | `c--featureList`, `c--header` | Lismクラス(Trait, Primitive, Property Class など)を中心に組む。何のパーツかを示す名前付けとしてだけ使うのも可。CSS を書く場合は `@layer lism-custom` で管理。 |
118
+
119
+ - `b--` にできるのは [Block Class(`b--`)](#block-classb--)の3条件をすべて満たす部品だけで、それ以外は `c--` にします。
120
+ - 迷ったら `c--` で始め、3条件を満たす部品としてベーススタイルを CSS 側で管理したくなった時点で `b--` へリネームして昇格します。
121
+ - 名前は camelCase で付けます。(例: `c--landingHero`)
102
122
 
103
- `c--` クラスは BEM 構造(Block / Modifier / Element)を持つことができ、それぞれ次の形式で定義します。
123
+ BEM 構造(本体クラス / Modifier / Element)を持つのは `b--` と `c--` のみです。`a--` / `l--` には適用しません。
104
124
 
105
125
  | 分類 | 形式 | 例 |
106
126
  | --- | --- | --- |
107
- | Block | `c--{name}` | `c--button`, `c--card` |
108
- | Modifier | `c--{name}--{modifier}` | `c--button--outline` |
109
- | Element | `c--{name}_{element}` | `c--card_header`, `c--card_body` |
127
+ | 本体クラス | `b--{name}` / `c--{name}` | `b--btn`, `c--pricing` |
128
+ | Modifier | `b--{name}--{modifier}` / `c--{name}--{modifier}` | `b--btn--outline`, `c--pricing--featured` |
129
+ | Element | `b--{name}_{element}` / `c--{name}_{element}` | `b--card_header`, `c--pricing_body` |
130
+
131
+ - Modifier は本体クラスと併記して使用: `.b--btn.b--btn--outline` / `.c--pricing.c--pricing--featured`
132
+ - Element は `_`(アンダースコア)一つ区切り。CSS で参照する子要素にだけ付ける([Custom Class(`c--`)](#custom-classc--))
133
+ - 同じプレフィックスの本体クラス同士の併用(`.b--xxx.b--yyy` / `.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
134
+ - 本体クラスと自身の Modifier: `.c--xxx.c--xxx--modifier`
135
+ - 本体クラスと他の本体クラスの Element: `.c--xxx.c--yyy_elem`
136
+
137
+ ### Block Class(`b--`)
138
+
139
+ `b--` プレフィックスで定義する **Block Class** は、サイト内で繰り返し使う基礎部品(ボタン・バッジ・カード級)で、ベーススタイルを CSS 側(`@layer lism-block`)で管理します。コアの `lism-css` は専用レイヤーを用意するだけで、`b--` クラス自体は提供しません。
140
+
141
+ 次の3条件を**すべて**満たす場合に `b--` を使います。満たさない場合は `c--` にします。
110
142
 
111
- - Modifier は Block と併記して使用: `.c--button.c--button--outline`
112
- - Element は `_`(アンダースコア)一つ区切り
113
- - Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
114
- - Block と自身の Modifier: `.c--xxx.c--xxx--modifier`
115
- - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
116
- - BEM の Modifier / Element 構造を持つのは `c--` のみ。`a--` / `l--` には適用しない
143
+ 1. サイト内の複数ページ・複数箇所で繰り返し使う共通部品である
144
+ 2. クラスを1つ付けるだけでベーススタイルがほぼ決まるようにしたい部品である
145
+ 3. 粒度がボタン・バッジ・カード級の自己完結した部品である
117
146
 
118
- `c--` を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`l--`, `is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることで CSS の記述量を削減できます。`c--` クラスにスタイルが全くなく、HTML 側での可視性を高める名前付けのためだけに利用しても構いません。
147
+ 例:
148
+ ```css
149
+ @layer lism-block {
150
+ .b--btn {
151
+ --bgc: transparent;
152
+ --bdc: transparent;
153
+ padding: var(--s10) var(--s20);
154
+ border-radius: var(--bdrs--20);
155
+ border: solid 1px var(--bdc);
156
+ background-color: var(--bgc);
157
+ }
158
+ .b--btn.b--btn--fill { --bgc: var(--brand); }
159
+ .b--btn.b--btn--outline { --bdc: currentColor; }
160
+ }
161
+ ```
162
+
163
+ - `b--` は他クラスと併用もできます。すべて CSS 側に書かなくてはいけないというわけではありません。
164
+ - `b--` はレイアウトスタイルも CSS 側で持てますし、`l--` 系クラスとの併用を前提にして組むこともできます。
165
+ - ブレイクポイント切り替え(`-p_sm` 等)、hover 系スタイル、その他例外的な調整には Property Class での調整が便利です。
166
+
167
+ ### Custom Class(`c--`)
119
168
 
120
- ### 作成例
169
+ `c--` プレフィックスで定義する **Custom Class** は、ユーザーが自由に定義できるカスタムクラスです(名前は `lism-custom` レイヤーと対応)。コンポーネント・サイトの領域(ヘッダーやサイドバーなど)・ページ固有の要素など、粒度を問わず使えます。
121
170
 
122
- `c--*`は意味名として残し、レイアウトと単一プロパティ値はPrimitive/Property Classへ寄せます。CSSへ残すのは、擬似要素・子孫セレクタ・状態セレクタなど、Props/Property Classで表現できないものだけです。
171
+ 他のLismクラス(Trait, Primitive, Property Class等)との組み合わせを前提に設計し、CSSへ残すのは、擬似要素・子孫セレクタ・状態セレクタなど、Props/Property Classで表現できないものだけです。(明確な意図があればCSSに一般的なスタイルを書くことも可)
172
+
173
+ スタイルが全くなく、何のパーツかを示す名前付けのためだけに使っても構いません。ただし名前付けだけで残すのは本体クラス(`c--{name}`)だけです。Element(`c--{name}_{element}`)は、子孫セレクタ・擬似要素・状態切替など CSS でその子要素を参照する時だけ付けます(NG→OK 例は [antipatterns-layout.md](./antipatterns-layout.md#css-の無い-element-クラスを付ける))。
123
174
 
124
175
  ```html
125
- <!-- HTMLで書く場合も、意味名 + Primitive + Property Class を優先 -->
176
+ <!-- HTMLで書く場合も、何のパーツかを示す名前 + Primitive + Property Class を優先 -->
126
177
  <div class="c--myCard l--stack -g:20 -p:30 -bdrs:20 -bxsh:20 -bd">...</div>
127
178
  ```
128
179
 
@@ -134,38 +185,37 @@ export default function MyCard(props) {
134
185
  ```
135
186
 
136
187
  ```css
137
- @layer lism-component {
188
+ @layer lism-custom {
138
189
  .c--myCard::before {
139
190
  /* 擬似要素など、Props/Property Classで表せないものだけを書く */
140
191
  }
141
192
  }
142
193
  ```
143
194
 
144
- CSSが空になる場合は、CSSファイル側に`.c--myCard {}`を書かず、マークアップ上の意味名として`c--myCard`だけ残して構いません。
195
+ CSSが空になる場合は、CSSファイル側に`.c--myCard {}`を書かず、何のパーツかを示す名前として`c--myCard`だけ残して構いません。
145
196
 
146
197
  ## カスタムCSS を追加する場合
147
198
 
148
199
  独自のスタイルを追加する場合は、対象に合った Lism の CSS Layer 内に記述してください。
149
200
 
150
201
  ```css
151
- /* カスタムコンポーネント → lism-component に追加 */
152
- @layer lism-component {
153
- .c--myCard[data-is-active]::before {
154
- border-color: var(--brand);
155
- }
202
+ /* ユーザーの独自CSS(c--) → lism-custom に追加 */
203
+ @layer lism-custom {
204
+ .c--myCard[data-is-active]::before { border-color: var(--brand); }
156
205
  }
157
206
 
207
+ /* b-- 基礎部品のベーススタイル → lism-block に追加 */
208
+ @layer lism-block { .b--badge { padding: var(--s5) var(--s10); } }
209
+
158
210
  /* ベーススタイルの拡張 → lism-base に追加 */
159
211
  @layer lism-base {
160
- .set--myTheme {
161
- --brand: #c00;
162
- }
212
+ .set--myTheme { --brand: #c00; }
163
213
  }
164
214
  ```
165
215
 
166
- カスタムCSS内でも、できる限り Lism のCSS変数(トークン)を使ってください。ただし、`padding`/`border-radius`/`font-size`/`color`などProperty Class/Propsへ移せる宣言は、CSSに書く前にマークアップ側へ移します(NG→OK例は[antipatterns.md](./antipatterns.md#property-class-で書けるのに-css-で書く)を参照)。
216
+ カスタムCSS内でも、できる限り Lism のCSS変数(トークン)を使ってください。`c--` CSSに残す宣言の基準は [Custom Class(`c--`)](#custom-classc--)、`b--` は [Block Class(`b--`)](#block-classb--) を参照。
167
217
 
168
- 明確にその数値に意図があり、トークン化・丸め・Property Class化ができない場合だけ、生のCSS値を例外として使用できます。その場合は実装プランに理由を残します。
218
+ トークン外の生のCSS値は、[antipatterns.md の「直書きしてよい例外」](./antipatterns.md#px--固定値の直書き)に該当する場合だけ使い、実装プランに理由を残します。
169
219
 
170
220
  **レイヤー外に書く場合:**
171
221
  `@layer` の外(レイヤーなし)でカスタムCSSを書くのは、**Property Class(`-{prop}:{value}`)を拡張する場合のみ**としてください。それ以外のカスタムスタイルは必ずいずれかの `@layer` 内に記述します。
@@ -175,43 +225,6 @@ CSSが空になる場合は、CSSファイル側に`.c--myCard {}`を書かず
175
225
  .-myProp\:myValue { ... }
176
226
  ```
177
227
 
178
- ## 独自プレフィックス
179
-
180
- Lism CSS の既存プレフィックス(`set--` / `is--` / `has--` / `l--` / `a--` / `c--` / `u--` / `-`)のどれにも該当しないクラスは、独自プレフィックスを付けても、プレフィックスなしで命名しても構いません。
181
-
182
- 代表的な例:
183
-
184
- | 分類 | 形式 | 例 |
185
- | --- | --- | --- |
186
- | ゾーニング(サイトの大まかな領域) | `z--{zoneName}` または `{zoneName}` | `z--header`, `z--main`, `z--sidebar`, `z--footer` |
187
- | ページ分類 | `p--{type}-{id\|slug}` または `{slug}Page` | `p--front`, `p--page--{slug}` |
188
-
189
- これらは、特に理由がなければ `@layer lism-custom` に配置することを推奨します。
190
-
191
- ```css
192
- @layer lism-custom {
193
- .z--header {
194
- /* ... */
195
- }
196
- .p--front {
197
- /* ... */
198
- }
199
- }
200
- ```
201
-
202
- ### `z--`/`p--`/`c--`の使い分け
203
-
204
- | 用途 | 推奨 | 理由 |
205
- | --- | --- | --- |
206
- | 再利用可能なUI部品 | `c--featureCard` | componentとして再利用され、Block/Element/Modifier構造を持てる |
207
- | サイトの大まかな領域 | `z--header`/`z--main`/`z--footer` | 再利用UIではなくゾーニングなので`c--`にしない |
208
- | ページ固有の領域 | `p--frontHero`/`p--postBody` | ページ依存の見た目をcomponent命名から分離する |
209
- | 外部JS・CMS・E2Eが参照するclass | 既存名を維持、または⏸ | 外部契約なのでrenameはユーザー確認が必要 |
210
-
211
- `c--header`や`c--sidebar`のような命名は、UI部品として再利用する意図がある場合だけ使います。サイト構造の領域名なら`z--header`、ページ限定なら`p--*`を優先してください。
212
-
213
- 公開API、CMS出力、外部JS、E2Eセレクタ、ドキュメントで案内済みのclass名を変える場合は、内部参照を全更新できる場合でも⏸としてユーザー確認します。CSSだけrenameしてJS/テスト/HTML生成側を漏らさないでください。
214
-
215
228
  ## CSS の配置場所
216
229
 
217
230
  ### グローバル CSS(サイト全体)
@@ -234,13 +247,6 @@ Lism のトークン変数のカスタマイズやベーススタイルの上書
234
247
  コンポーネント固有のスタイルは、そのコンポーネントを定義しているファイルに紐づけます。
235
248
 
236
249
  - `.jsx` / `.tsx` ファイル: CSS ファイルを `import` する
237
- - `.astro` ファイル: `import` するか、コンポーネントファイル内の `<style>` タグに記述
250
+ - `.astro` ファイル: `import` するか、コンポーネントファイル内の `<style>` タグに記述(`<style>` 内でも `@layer` で囲む)
238
251
 
239
- ```css
240
- /* コンポーネント用CSS は lism-component 内に定義する */
241
- @layer lism-component {
242
- .c--yourComponent {
243
- ...
244
- }
245
- }
246
- ```
252
+ 置くレイヤーは「カスタムCSS を追加する場合」と同じです。