@lism-css/mcp 0.23.0 → 0.26.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 +185 -159
  4. package/dist/data/guides/SKILL.md +164 -228
  5. package/dist/data/guides/antipatterns-layout.md +271 -0
  6. package/dist/data/guides/antipatterns.md +121 -196
  7. package/dist/data/guides/base-styles.md +10 -9
  8. package/dist/data/guides/components-core.md +27 -9
  9. package/dist/data/guides/components-ui.md +30 -51
  10. package/dist/data/guides/css-rules.md +104 -107
  11. package/dist/data/guides/customize.md +10 -7
  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 +246 -0
  32. package/dist/data/guides/property-class/bd.md +6 -71
  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 +33 -250
  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 +75 -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 +20 -16
  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 +56 -4
  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 +41 -18
  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 +21 -6
@@ -26,7 +26,6 @@ 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)
@@ -48,11 +47,11 @@ import { Button } from '@lism-css/ui/astro/Button';
48
47
  **構造:** `Accordion.Root > Accordion.Item > (Accordion.Heading > Accordion.Button) + Accordion.Panel`(`Accordion.Icon` は自動で含まれる)
49
48
 
50
49
  | Prop | 対象 | 型 | デフォルト | 説明 |
51
- |------|------|-----|----------|------|
50
+ | --- | --- | --- | --- | --- |
52
51
  | `allowMultiple` | Root | `boolean` | — | 複数アイテムの同時展開を許可 |
53
52
  | `isOpen` | Item / Button / Panel | `boolean` | `false` | アイテムを初期展開。Item・Button・Panel の3つ揃えて指定(Item=`data-opened` 付与、Button=`aria-expanded`、Panel=`hidden` 解除) |
54
53
  | `as` | Heading | `string` | `div` | 見出しのHTMLタグ。`div` 時は `role='heading'` が自動付与。`h2`〜`h6` 指定時は role なし |
55
- | `flow` | Panel | `string` | — | パネル内コンテンツ領域(`c--accordion_content`)のフロー余白 |
54
+ | `flow` | Panel | `string` | — | パネル内コンテンツ領域(`b--accordion_content`)のフロー余白 |
56
55
 
57
56
  ```jsx
58
57
  <Accordion.Root>
@@ -70,11 +69,11 @@ import { Button } from '@lism-css/ui/astro/Button';
70
69
 
71
70
  ソース: [Alert/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Alert)
72
71
 
73
- 短めの文言を目立たせて強調表示するアラートボックス。`type` プリセットによりアイコンとカラーが自動設定される。
72
+ 短めの文言を目立たせて強調表示するアラートボックス。`type` プリセットによりアイコンとカラーが自動設定される。`b--alert` クラスが付与される。
74
73
  プリセット: `alert`=alert/red, `point`=lightbulb/orange(`tip`も同じ), `warning`=warning/yellow, `check`=check-circle/green, `help`=question/purple, `info`=info/blue, `note`=note/gray。
75
74
 
76
75
  | Prop | 型 | デフォルト | 説明 |
77
- |------|-----|----------|------|
76
+ | --- | --- | --- | --- |
78
77
  | `type` | `'alert' \| 'point' \| 'tip' \| 'warning' \| 'check' \| 'help' \| 'info' \| 'note'` | `'alert'` | アラートタイプ。keycolor と icon の組み合わせプリセット |
79
78
  | `keycolor` | `string` | — | キーカラー |
80
79
  | `icon` | `ReactNode \| string` | — | カスタムアイコン |
@@ -90,13 +89,13 @@ import { Button } from '@lism-css/ui/astro/Button';
90
89
 
91
90
  ソース: [Avatar/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Avatar)
92
91
 
93
- アバター(プロフィール画像)コンポーネント。Frame ベースの円形画像表示。`c--avatar` クラスが付与される。
92
+ アバター(プロフィール画像)コンポーネント。Frame ベースの円形画像表示。`b--avatar` クラスが付与される。
94
93
 
95
94
  | Prop | 型 | デフォルト | 説明 |
96
- |------|-----|----------|------|
95
+ | --- | --- | --- | --- |
97
96
  | `src` | `string` | — | 画像URL |
98
97
  | `alt` | `string` | — | 代替テキスト |
99
- | `size` | `string` | `'1.5em'` | アバターのサイズ |
98
+ | `size` | `string` | `'2em'` | アバターのサイズ |
100
99
 
101
100
  ```jsx
102
101
  <Avatar src='/avatar.jpg' alt='User' size='48px' />
@@ -107,11 +106,11 @@ import { Button } from '@lism-css/ui/astro/Button';
107
106
 
108
107
  ソース: [Badge/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Badge)
109
108
 
110
- バッジ(ラベル)コンポーネント。`span` 要素としてインライン表示。`c--badge` クラスが付与される。
109
+ バッジ(ラベル)コンポーネント。`span` 要素としてインライン表示。`b--badge` クラスが付与される。
111
110
 
112
111
  | Prop | 型 | デフォルト | 説明 |
113
- |------|-----|----------|------|
114
- | `variant` | `string` | — | バリエーション(`'outline'` 等)。`c--badge--{variant}` クラスが出力 |
112
+ | --- | --- | --- | --- |
113
+ | `variant` | `string` | — | バリエーション(`'outline'` 等)。`b--badge--{variant}` クラスが出力 |
115
114
  | `keycolor` | `string` | — | キーカラー |
116
115
 
117
116
  ```jsx
@@ -123,11 +122,11 @@ import { Button } from '@lism-css/ui/astro/Button';
123
122
 
124
123
  ソース: [Button/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Button)
125
124
 
126
- ボタン型リンクコンポーネント。デフォルトで `a` 要素として出力。`c--button` クラスが付与される。
125
+ ボタン型リンクコンポーネント。デフォルトで `a` 要素として出力。`b--button` クラスが付与される。
127
126
 
128
127
  | Prop | 型 | デフォルト | 説明 |
129
- |------|-----|----------|------|
130
- | `variant` | `string` | — | バリエーション(`'fill'`, `'outline'` 等)。`c--button--{variant}` クラスが出力 |
128
+ | --- | --- | --- | --- |
129
+ | `variant` | `string` | — | バリエーション(`'fill'`, `'outline'` 等)。`b--button--{variant}` クラスが出力 |
131
130
  | `keycolor` | `string` | — | キーカラー |
132
131
  | `href` | `string` | — | リンク先URL |
133
132
 
@@ -140,11 +139,10 @@ import { Button } from '@lism-css/ui/astro/Button';
140
139
 
141
140
  ソース: [Callout/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Callout)
142
141
 
143
- 記事中の重要ポイントを示すコンポーネント。タイトルとアイコン付きの強調ボックス。`type` プリセットによりアイコンとカラーが自動設定される。
144
- プリセット: `alert`=alert/red, `point`=lightbulb/orange(`tip`も同じ), `warning`=warning/yellow, `check`=check-circle/green, `help`=question/purple, `info`=info/blue, `note`=note/gray。
142
+ 記事中の重要ポイントを示すコンポーネント。タイトルとアイコン付きの強調ボックス。`type` プリセットによりアイコンとカラーが自動設定される(プリセット内容は [Alert](#alert) と同一)。`b--callout` クラスが付与される。
145
143
 
146
144
  | Prop | 型 | デフォルト | 説明 |
147
- |------|-----|----------|------|
145
+ | --- | --- | --- | --- |
148
146
  | `type` | `'alert' \| 'point' \| 'tip' \| 'warning' \| 'check' \| 'help' \| 'info' \| 'note'` | `'note'` | コールアウトタイプ |
149
147
  | `keycolor` | `string` | — | キーカラー |
150
148
  | `icon` | `ReactNode \| string` | — | カスタムアイコン |
@@ -156,26 +154,6 @@ import { Button } from '@lism-css/ui/astro/Button';
156
154
  ```
157
155
 
158
156
 
159
- ## Chat
160
-
161
- ソース: [Chat/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Chat)
162
-
163
- チャット風の吹き出しコンポーネント。Grid ベースの会話形式 UI。`c--chat` クラスが付与される。
164
-
165
- | Prop | 型 | デフォルト | 説明 |
166
- |------|-----|----------|------|
167
- | `name` | `string` | — | 発言者の名前 |
168
- | `avatar` | `string` | — | アバター画像の src |
169
- | `variant` | `'speak' \| 'think'` | `'speak'` | チャットタイプ |
170
- | `direction` | `'start' \| 'end'` | `'start'` | 表示位置 |
171
- | `keycolor` | `string` | `'gray'` | キーカラー |
172
- | `flow` | `string` | `'s'` | コンテンツ要素のフロー余白 |
173
-
174
- ```jsx
175
- <Chat name='Alice' avatar='/alice.jpg'>Hello!</Chat>
176
- ```
177
-
178
-
179
157
  ## Details
180
158
 
181
159
  ソース: [Details/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Details)
@@ -185,8 +163,9 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
185
163
  **構造:** `Details.Root > Details.Summary > (Details.Title + Details.Icon) + Details.Content`
186
164
 
187
165
  | Prop | 対象 | 型 | デフォルト | 説明 |
188
- |------|------|-----|----------|------|
166
+ | --- | --- | --- | --- | --- |
189
167
  | `as` | Title | `string` | `'span'` | Title の HTML タグ |
168
+ | `open` | Root | `boolean` | — | 初期展開状態(`details` 要素の `open` 属性) |
190
169
  | `--duration` | Root | `string` | — | 展開アニメーションの秒数(style 経由で指定) |
191
170
 
192
171
  ```jsx
@@ -209,7 +188,7 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
209
188
  **構造:** `Modal.OpenBtn + Modal.Root > Modal.Inner > Modal.Body + Modal.CloseBtn`
210
189
 
211
190
  | Prop | 対象 | 型 | デフォルト | 説明 |
212
- |------|------|-----|----------|------|
191
+ | --- | --- | --- | --- | --- |
213
192
  | `id` | Root | `string` | — | モーダルの ID(必須) |
214
193
  | `modalId` | OpenBtn / CloseBtn | `string` | — | 対象モーダルの ID |
215
194
  | `duration` | Root | `string` | — | アニメーション持続時間。`--duration` 変数として出力 |
@@ -231,12 +210,12 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
231
210
 
232
211
  ソース: [NavMenu/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/NavMenu)
233
212
 
234
- ナビゲーションメニューコンポーネント。`c--navMenu` クラスが付与される。
213
+ ナビゲーションメニューコンポーネント。`b--navMenu` クラスが付与される。
235
214
 
236
215
  **構造:** `NavMenu.Root > NavMenu.Item > NavMenu.Link`(`NavMenu.Nest` でネスト可能)
237
216
 
238
217
  | Prop | 対象 | 型 | デフォルト | 説明 |
239
- |------|------|-----|----------|------|
218
+ | --- | --- | --- | --- | --- |
240
219
  | `hovBgc` | Root | `string` | — | ホバー時の背景カラー。`--hov-bgc` 変数として出力 |
241
220
  | `hovC` | Root | `string` | — | ホバー時のテキストカラー。`--hov-c` 変数として出力 |
242
221
  | `itemP` | Root | `string` | — | 各アイテムのパディング。`--_item-p` 変数として出力 |
@@ -259,15 +238,16 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
259
238
 
260
239
  ソース: [Tabs/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/Tabs)
261
240
 
262
- タブ切り替え UI。タブクリックでコンテンツパネルを切り替える。スタイリングはほぼなく動きのみ提供。
241
+ タブ切り替え UI。タブクリックまたは左右キー・Home/End でコンテンツパネルを切り替える。縦並びにする場合は `listProps` で `aria-orientation="vertical"` を指定すると上下キーに切り替わる。スタイリングはほぼなく動きのみ提供。
263
242
 
264
243
  **構造:** `Tabs.Root > Tabs.Item > (Tabs.Tab + Tabs.Panel)`(`Tabs.List` も利用可能)
265
244
 
266
245
  | Prop | 対象 | 型 | デフォルト | 説明 |
267
- |------|------|-----|----------|------|
246
+ | --- | --- | --- | --- | --- |
268
247
  | `tabId` | Root | `string` | — | タブを特定するための ID 文字列 |
269
248
  | `defaultIndex` | Root | `number` | `1` | 初期アクティブタブ(1始まり) |
270
249
  | `listProps` | Root | `object` | — | タブボタンリスト要素へ渡す props |
250
+ | `variant` | Root | `string` | `'default'` | バリエーション。`b--tabs--{variant}` クラスが出力。`'default'` のほか `'line'` を標準提供。独自 variant 指定時は既定バリアント(`b--tabs--default`)の装飾が適用されない |
271
251
 
272
252
  ```jsx
273
253
  <Tabs.Root>
@@ -290,7 +270,7 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
290
270
  セクション間の波型などの装飾的な区切り要素。SVG ベースの形状で区切りを表現。
291
271
 
292
272
  | Prop | 型 | デフォルト | 説明 |
293
- |------|-----|----------|------|
273
+ | --- | --- | --- | --- |
294
274
  | `viewBox` | `string` | — | SVG の viewBox |
295
275
  | `level` | `number` | `5` | シェイプの高さレベル。`0` で非表示 |
296
276
  | `flip` | `'X' \| 'Y' \| 'XY'` | — | 反転方向。`data-flip` 属性として出力 |
@@ -313,7 +293,7 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
313
293
  ダミーテキストを生成するコンポーネント。プレビューやテスト用。複数の言語とテキスト長に対応。
314
294
 
315
295
  | Prop | 型 | デフォルト | 説明 |
316
- |------|-----|----------|------|
296
+ | --- | --- | --- | --- |
317
297
  | `lang` | `'ja' \| 'en' \| 'ar'` | `'en'` | テキストの言語 |
318
298
  | `length` | `'xs' \| 's' \| 'm' \| 'l' \| 'xl' \| 'codes'` | `'m'` | テキストの長さ。`'codes'` は `b`, `i`, `a`, `code` 要素を含むテキスト |
319
299
  | `pre` | `string` | — | テキストの前に表示する文字列 |
@@ -331,8 +311,8 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
331
311
  コンポーネント名は `import` するときと同じ PascalCase で指定します。
332
312
 
333
313
  ```bash
334
- # 初期設定(framework、出力先ディレクトリを対話的に設定)
335
- npx lism-cli ui init
314
+ # 初期設定(lism.config.js が無い場合に新規生成。framework 等を対話的に設定)
315
+ npx lism-cli init
336
316
 
337
317
  # コンポーネントを追加
338
318
  npx lism-cli ui add Button Modal
@@ -343,14 +323,13 @@ npx lism-cli ui add --all # 全コンポーネントを追加
343
323
  npx lism-cli ui list
344
324
  ```
345
325
 
346
- `ui init` で生成される `lism.config.js` の `cli` セクション:
326
+ `init` で生成される `lism.config.js` の `ui` セクション:
347
327
 
348
328
  ```js
349
329
  export default {
350
- cli: {
330
+ ui: {
351
331
  framework: 'react',
352
- componentsDir: 'src/components/ui',
353
- helperDir: 'src/components/ui/_helper',
332
+ dir: 'src/components/ui', // helper は常に {dir}/_helper に配置される
354
333
  },
355
334
  };
356
335
  ```
@@ -3,10 +3,11 @@
3
3
  ## TOC
4
4
 
5
5
  - [CSS Layer 構造](#css-layer-構造)
6
- - [プレフィックスとクラス分類](#プレフィックスとクラス分類)
7
- - [Component Class(`c--`)](#component-classc--)
6
+ - [クラス分類とプレフィックス](#クラス分類とプレフィックス)
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` にはレイヤーがないため、読み込み順と詳細度に依存します。
41
+
42
+ ユーザーが定義する独自クラス・上書きスタイルは、役割に合わせて適切なレイヤーに配置します。
43
+ 例えば、トークンやベーススタイルの上書きは `@layer lism-base`、`b--` のベーススタイルは `@layer lism-block`、それ以外の独自クラス(`c--`)は `@layer lism-custom` に置きます。
37
44
 
38
45
  ## クラス分類とプレフィックス
39
46
 
@@ -42,31 +49,32 @@ Settings(トークン定義)
42
49
  Lism CSSで定義されるクラスは、その役割とレイヤーの所属が決まっており、その分類によってプレフィックスが定められています。
43
50
 
44
51
  | 分類 | 役割 | プレフィックス | 例 |
45
- |---|---|---|---|
52
+ | --- | --- | --- | --- |
46
53
  | Set Class | ベーススタイル上書き・変数提供 | `set--` | `set--plain`, `set--revert`, `set--hov`, `set--bxsh` |
47
54
  | Layout Primitive | レイアウトの構成単位となる Primitive | `l--` | `l--grid`, `l--flex`, `l--stack` |
48
55
  | Atomic Primitive | レイアウトの最小単位となる Primitive | `a--` | `a--icon`, `a--divider` |
49
- | Component Class | BEM 構造を持つ UI 部品 | `c--` | `c--button`, `c--accordion` |
56
+ | Block Class | ベーススタイルを CSS 側で管理する基礎部品 | `b--` | `b--btn`, `b--badge`, `b--card` |
57
+ | Custom Class | Lism 本体に含まれない、ユーザーが自由に定義するカスタムクラス | `c--` | `c--featureList`, `c--header` |
50
58
  | `is--` Trait | 要素に役割(〜である)を宣言 | `is--` | `is--container`, `is--wrapper`, `is--layer`, `is--boxLink` |
51
59
  | `has--` Trait | 要素に機能(〜を持つ)を付与 | `has--` | `has--transition`, `has--gutter`, `has--snap`, `has--mask` |
52
60
  | Utility Class | 用途が明確な装飾系ユーティリティ | `u--` | `u--cbox`, `u--trim`, `u--divide`, `u--enclose` |
53
61
  | Property Class | 単一プロパティの制御 | `-` | `-fz:l`, `-p:20`, `-d:none` |
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--` Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし以下は許容:
62
- - Block と自身の Modifier: `.c--button.c--button--outline`
63
- - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
64
- - 子要素: `c--card_header`, `c--card_body`(`c--` のみ Element を持つ。`_` 一つ区切り)
64
+
65
+ - Primitive の併用は禁止(`l--`同士、`a--`同士、`l--`+`a--` はNG)
66
+ - Trait の併用は可 (`is--`同士 / `has--`同士、 `is--` + `has--` はOK)
67
+ - Trait + Primitive の併用は可 (`is--`/`has--` + `l--`/`a--` OK)
68
+ - `b--` + Primitive / Trait の併用は可(`b--` + `l--`/`a--`/`is--`/`has--` OK
69
+ - `b--` + `b--` は禁止
70
+ - `c--` + `c--` は禁止
71
+ - `b--` + `c--` は禁止
72
+
65
73
 
66
74
  **`is--` と `has--` の判定軸:**
67
75
 
68
76
  | | `is--` | `has--` |
69
- |---|---|---|
77
+ | --- | --- | --- |
70
78
  | 意味 | 〜である(役割・存在の宣言) | 〜を持つ(機能の付与) |
71
79
  | CSS 変数 | 必須ではない | 必須(カスタマイズポイントを提供) |
72
80
 
@@ -74,20 +82,21 @@ Lism CSSで定義されるクラスは、その役割とレイヤーの所属が
74
82
  class 属性にクラスを直接記述する場合は、以下の順序で並べてください。
75
83
 
76
84
  ```
77
- [customClass] [c--] [a--] [l--] [set--] [is--] [has--] [u--] [-]
85
+ [規約対象外クラス] [c--] [b--] [a--] [l--] [set--] [is--] [has--] [u--] [-]
78
86
  ```
79
87
 
80
- | # | 区分 | 例 |
81
- |---|---|---|
82
- | 1 | 独自クラス(`customClass`) | `z--header`, `hoge` |
83
- | 2 | Component(`c--`) | `c--box`, `c--box--primary` |
84
- | 3 | Atomic Primitive(`a--`) | `a--icon`, `a--divider` |
85
- | 4 | Layout Primitive(`l--`) | `l--flex`, `l--columns` |
86
- | 5 | Set Class(`set--`) | `set--hov`, `set--bxsh` |
87
- | 6 | Trait Class 役割宣言(`is--`) | `is--wrapper`, `is--layer` |
88
- | 7 | Trait Class 機能付与(`has--`) | `has--transition`, `has--gutter` |
89
- | 8 | Utility Class(`u--`) | `u--cbox`, `u--trim` |
90
- | 9 | Property Class(`-`) | `-p:20`, `-bgc:base-2`, `-hov:-c` |
88
+ | # | 区分 |
89
+ | --- | --- |
90
+ | 1 | Lismの規約対象外のクラス(外部ライブラリ・JSフック等) |
91
+ | 2 | Custom(`c--`) |
92
+ | 3 | Block(`b--`) |
93
+ | 4 | Atomic Primitive(`a--`) |
94
+ | 5 | Layout Primitive(`l--`) |
95
+ | 6 | Set Class(`set--`) |
96
+ | 7 | Trait Class 役割宣言(`is--`) |
97
+ | 8 | Trait Class 機能付与(`has--`) |
98
+ | 9 | Utility Class(`u--`) |
99
+ | 10 | Property Class(`-{prop}:{value}`) |
91
100
 
92
101
  ```html
93
102
  <!-- OK -->
@@ -99,136 +108,124 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
99
108
 
100
109
  なお、`class` 属性内の並び順は CSS の適用結果(詳細度・カスケード順)には影響しません。この順序はあくまで可読性と一貫性のための整理です。
101
110
 
111
+ ## 独自クラスの選び方(2分類)
112
+
113
+ Lism CSS が提供するクラス(`set--` / `is--` / `has--` / `l--` / `a--` / `u--` / Property Class)以外の、ユーザーが自分で定義するクラスは次の2分類で命名します。
102
114
 
103
- ## Component Class(`c--`)
115
+ | 分類 | 命名 | 例 | スタイルの書き方 |
116
+ | --- | --- | --- | --- |
117
+ | サイト共通で繰り返し使う基礎部品(ボタン・バッジ・カード級) | `b--{name}` | `b--btn`, `b--badge` | ベーススタイルを `@layer lism-block` で管理。BP切り替え・hover・例外的な調整は Property Class等を活用 |
118
+ | それ以外のカスタムクラス全般(コンポーネント・サイトの領域・ページ固有要素など粒度不問) | `c--{name}` | `c--featureList`, `c--header` | Lismクラス(Trait, Primitive, Property Class など)を中心に組む。何のパーツかを示す名前付けとしてだけ使うのも可。CSS を書く場合は `@layer lism-custom` で管理。 |
104
119
 
105
- `c--` プレフィックスで定義する **Component クラス** は、Primitive を組み合わせて作られた具体的な UI 部品です。`@layer lism-component` に配置され、コアの `lism-css` には含まれず、`@lism-css/ui` パッケージやユーザー定義として提供されます。
120
+ - `b--` にできるのは [Block Class(`b--`)](#block-classb--)の3条件をすべて満たす部品だけで、それ以外は `c--` にします。
121
+ - 迷ったら `c--` で始め、3条件を満たす部品としてベーススタイルを CSS 側で管理したくなった時点で `b--` へリネームして昇格します。
122
+ - 名前は camelCase で付けます。(例: `c--landingHero`)
106
123
 
107
- `c--` クラスは BEM 構造(Block / Modifier / Element)を持つことができ、それぞれ次の形式で定義します。
124
+ BEM 構造(本体クラス / Modifier / Element)を持つのは `b--` と `c--` のみです。`a--` / `l--` には適用しません。
108
125
 
109
126
  | 分類 | 形式 | 例 |
110
- |---|---|---|
111
- | Block | `c--{name}` | `c--button`, `c--card` |
112
- | Modifier | `c--{name}--{modifier}` | `c--button--outline` |
113
- | Element | `c--{name}_{element}` | `c--card_header`, `c--card_body` |
127
+ | --- | --- | --- |
128
+ | 本体クラス | `b--{name}` / `c--{name}` | `b--btn`, `c--pricing` |
129
+ | Modifier | `b--{name}--{modifier}` / `c--{name}--{modifier}` | `b--btn--outline`, `c--pricing--featured` |
130
+ | Element | `b--{name}_{element}` / `c--{name}_{element}` | `b--card_header`, `c--pricing_body` |
114
131
 
115
- - Modifier Block と併記して使用: `.c--button.c--button--outline`
132
+ - Modifier は本体クラスと併記して使用: `.b--btn.b--btn--outline` / `.c--pricing.c--pricing--featured`
116
133
  - Element は `_`(アンダースコア)一つ区切り
117
- - Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
118
- - Block と自身の Modifier: `.c--xxx.c--xxx--modifier`
119
- - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
120
- - BEM の Modifier / Element 構造を持つのは `c--` のみ。`a--` / `l--` には適用しない
134
+ - 同じプレフィックスの本体クラス同士の併用(`.b--xxx.b--yyy` / `.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
135
+ - 本体クラスと自身の Modifier: `.c--xxx.c--xxx--modifier`
136
+ - 本体クラスと他の本体クラスの Element: `.c--xxx.c--yyy_elem`
121
137
 
122
- `c--` を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`l--`, `is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることで CSS の記述量を削減できます。`c--` クラスにスタイルが全くなく、HTML 側での可視性を高める名前付けのためだけに利用しても構いません。
138
+ ### Block Class(`b--`)
123
139
 
140
+ `b--` プレフィックスで定義する **Block Class** は、サイト内で繰り返し使う基礎部品(ボタン・バッジ・カード級)で、ベーススタイルを CSS 側(`@layer lism-block`)で管理します。コアの `lism-css` は専用レイヤーを用意するだけで、`b--` クラス自体は提供しません。
124
141
 
125
- ### 作成例
142
+ 次の3条件を**すべて**満たす場合に `b--` を使います。満たさない場合は `c--` にします。
126
143
 
127
- `l--stack` と併用する前提でのカスタムクラス例:
144
+ 1. サイト内の複数ページ・複数箇所で繰り返し使う共通部品である
145
+ 2. クラスを1つ付けるだけでベーススタイルがほぼ決まるようにしたい部品である
146
+ 3. 粒度がボタン・バッジ・カード級の自己完結した部品である
128
147
 
148
+ 例:
129
149
  ```css
130
- @layer lism-component {
131
- .c--myCard {
132
- gap: var(--s20);
133
- padding: var(--s30);
150
+ @layer lism-block {
151
+ .b--btn {
152
+ --bgc: transparent;
153
+ --bdc: transparent;
154
+ padding: var(--s10) var(--s20);
134
155
  border-radius: var(--bdrs--20);
135
- box-shadow: var(--bxsh--20);
136
- border: 1px solid currentColor;
137
- /* ... */
156
+ border: solid 1px var(--bdc);
157
+ background-color: var(--bgc);
138
158
  }
159
+ .b--btn.b--btn--fill { --bgc: var(--brand); }
160
+ .b--btn.b--btn--outline { --bdc: currentColor; }
139
161
  }
140
162
  ```
141
163
 
164
+ - `b--` は他クラスと併用もできます。すべて CSS 側に書かなくてはいけないというわけではありません。
165
+ - `b--` はレイアウトスタイルも CSS 側で持てますし、`l--` 系クラスとの併用を前提にして組むこともできます。
166
+ - ブレイクポイント切り替え(`-p_sm` 等)、hover 系スタイル、その他例外的な調整には Property Class での調整が便利です。
167
+
168
+ ### Custom Class(`c--`)
169
+
170
+ `c--` プレフィックスで定義する **Custom Class** は、ユーザーが自由に定義できるカスタムクラスです(名前は `lism-custom` レイヤーと対応)。コンポーネント・サイトの領域(ヘッダーやサイドバーなど)・ページ固有の要素など、粒度を問わず使えます。
171
+
172
+ 他のLismクラス(Trait, Primitive, Property Class等)との組み合わせを前提に設計し、CSSへ残すのは、擬似要素・子孫セレクタ・状態セレクタなど、Props/Property Classで表現できないものだけです。(明確な意図があればCSSに一般的なスタイルを書くことも可)
173
+
174
+ スタイルが全くなく、何のパーツかを示す名前付けのためだけに使っても構いません。
175
+
142
176
  ```html
143
- <div class="c--myCard l--stack">
144
- ...
145
- </div>
177
+ <!-- HTMLで書く場合も、何のパーツかを示す名前 + Primitive + Property Class を優先 -->
178
+ <div class="c--myCard l--stack -g:20 -p:30 -bdrs:20 -bxsh:20 -bd">...</div>
146
179
  ```
147
180
 
148
- 素の HTML サイトではこのように `c--` クラスに CSS を書いてスタイリングしても問題ありませんが、React などでコンポーネントを作成できる場合は、特別な理由がない限り Property Class を活用してください。
149
-
150
181
  ```jsx
182
+ // React/AstroコンポーネントではPropsを優先
151
183
  export default function MyCard(props) {
152
184
  return <Stack className="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
153
185
  }
154
186
  ```
155
187
 
156
188
  ```css
157
- @layer lism-component {
158
- .c--myCard {
159
- /* 複雑なスタイルがあれば css で書く */
189
+ @layer lism-custom {
190
+ .c--myCard::before {
191
+ /* 擬似要素など、Props/Property Classで表せないものだけを書く */
160
192
  }
161
193
  }
162
194
  ```
163
195
 
196
+ CSSが空になる場合は、CSSファイル側に`.c--myCard {}`を書かず、何のパーツかを示す名前として`c--myCard`だけ残して構いません。
164
197
 
165
198
  ## カスタムCSS を追加する場合
166
199
 
167
200
  独自のスタイルを追加する場合は、対象に合った Lism の CSS Layer 内に記述してください。
168
201
 
169
202
  ```css
170
- /* カスタムコンポーネント → lism-component に追加 */
171
- @layer lism-component {
172
- .c--my-card {
173
- border: 1px solid var(--brand);
174
- border-radius: var(--bdrs--20);
175
- padding: var(--s30);
176
- }
203
+ /* ユーザーの独自CSS(c--) → lism-custom に追加 */
204
+ @layer lism-custom {
205
+ .c--myCard[data-is-active]::before { border-color: var(--brand); }
177
206
  }
178
207
 
208
+ /* b-- 基礎部品のベーススタイル → lism-block に追加 */
209
+ @layer lism-block { .b--badge { padding: var(--s5) var(--s10); } }
210
+
179
211
  /* ベーススタイルの拡張 → lism-base に追加 */
180
212
  @layer lism-base {
181
- .set--my-theme {
182
- --brand: #c00;
183
- }
213
+ .set--myTheme { --brand: #c00; }
184
214
  }
185
215
  ```
186
216
 
187
- カスタムCSS内でも、できる限り Lism のCSS変数(トークン)を使ってください。
217
+ カスタムCSS内でも、できる限り Lism のCSS変数(トークン)を使ってください。また、`c--` のクラスでは、`padding`/`border-radius`/`font-size`/`color`などProperty Class/Propsへ移せる宣言を、CSSに書く前にマークアップ側へ移します(NG→OK例は[antipatterns.md](./antipatterns.md#property-class-で書けるのに-css-で書く)を参照)。ただし`b--`のベーススタイルは対象外で、トークンを使って`@layer lism-block`で管理します。
188
218
 
189
- ```css
190
- /* NG */
191
- .c--my-card { padding: 24px; border-radius: 8px; }
192
-
193
- /* OK */
194
- .c--my-card { padding: var(--s30); border-radius: var(--bdrs--20); }
195
- ```
196
-
197
- ただし、明確にその数値に意図がある場合は、生のCSS値を使用しても構いません。
219
+ 明確にその数値に意図があり、トークン化・丸め・Property Class化ができない場合だけ、生のCSS値を例外として使用できます。その場合は実装プランに理由を残します。
198
220
 
199
221
  **レイヤー外に書く場合:**
200
222
  `@layer` の外(レイヤーなし)でカスタムCSSを書くのは、**Property Class(`-{prop}:{value}`)を拡張する場合のみ**としてください。それ以外のカスタムスタイルは必ずいずれかの `@layer` 内に記述します。
201
223
 
202
224
  ```css
203
- /* OK: Property Class の拡張はレイヤー外 */
225
+ /* Property Class の拡張のみレイヤー外に書ける */
204
226
  .-myProp\:myValue { ... }
205
-
206
- /* NG: コンポーネントやユーティリティをレイヤー外に書かない */
207
- .c--my-card { ... }
208
- ```
209
-
210
-
211
- ### 独自プレフィックス
212
-
213
- Lism CSS の既存プレフィックス(`set--` / `is--` / `has--` / `l--` / `a--` / `c--` / `u--` / `-`)のどれにも該当しないクラスは、独自プレフィックスを付けても、プレフィックスなしで命名しても構いません。
214
-
215
- 代表的な例:
216
-
217
- | 分類 | 形式 | 例 |
218
- |---|---|---|
219
- | ゾーニング(サイトの大まかな領域) | `z--{zoneName}` または `{zoneName}` | `z--header`, `z--main`, `z--sidebar`, `z--footer` |
220
- | ページ分類 | `p--{type}-{id\|slug}` または `{slug}Page` | `p--front`, `p--page--{slug}` |
221
-
222
- これらは、特に理由がなければ `@layer lism-custom` に配置することを推奨します。
223
-
224
- ```css
225
- @layer lism-custom {
226
- .z--header { /* ... */ }
227
- .p--front { /* ... */ }
228
- }
229
227
  ```
230
228
 
231
-
232
229
  ## CSS の配置場所
233
230
 
234
231
  ### グローバル CSS(サイト全体)
@@ -254,8 +251,8 @@ Lism のトークン変数のカスタマイズやベーススタイルの上書
254
251
  - `.astro` ファイル: `import` するか、コンポーネントファイル内の `<style>` タグに記述
255
252
 
256
253
  ```css
257
- /* コンポーネント用CSS は lism-component 内に定義する */
258
- @layer lism-component {
254
+ /* 独自クラスの CSS は lism-custom 内に定義する(b-- のベーススタイルだけ lism-block) */
255
+ @layer lism-custom {
259
256
  .c--yourComponent {
260
257
  ...
261
258
  }
@@ -22,6 +22,7 @@
22
22
  ## `@layer` をオフにする
23
23
 
24
24
  `lism-css/main.css` の代わりに `lism-css/main_no_layer.css` を読み込むだけで、`@layer` を使わない CSS に切り替えられます。
25
+ なお、no-layer版ではレイヤーによる優先度管理(`b--`よりProperty Classが必ず強い等の保証)が効かず、読み込み順・詳細度に依存します。
25
26
 
26
27
  ```js
27
28
  // 通常
@@ -44,7 +45,7 @@ import 'lism-css/main_no_layer.css';
44
45
  ### 上書き可能な変数
45
46
 
46
47
  | 変数 | 用途 | デフォルト |
47
- |------|------|-----------|
48
+ | --- | --- | --- |
48
49
  | `$breakpoints` | ブレイクポイント数値の定義(`0` は無効=クエリを出力しない) | `('xs': 0, 'sm': '480px', 'md': '800px', 'lg': '1120px', 'xl': 0)` |
49
50
  | `$is_container_query` | コンテナクエリで出力するか(`1` = container query, `0` = media query) | `1` |
50
51
  | `$default_important` | Property Class にデフォルトで `!important` を付与するか | `0` |
@@ -102,7 +103,9 @@ SCSS を直接読み込む構成では、コンパイル時に `lism-css` 本体
102
103
 
103
104
  ## `lism.config.js` でのカスタマイズ
104
105
 
105
- プロジェクトのルート直下に `lism.config.js`(または `lism.config.mjs`)を置くことで、**コンポーネントの挙動**(受け付ける props の値や、出力されるクラス名)をカスタマイズできます。
106
+ プロジェクトのルート直下に `lism.config.js`(または `lism.config.ts` / `lism.config.mjs`)を置くことで、**コンポーネントの挙動**(受け付ける props の値や、出力されるクラス名)をカスタマイズできます。
107
+
108
+ 設定ファイルの型チェック・補完には `lism-css/config-types` の `LismConfig` 型を使います。`.ts` は `export default { ... } satisfies LismConfig`、`.js` は `/** @type {import('lism-css/config-types').LismConfig} */` を付けると、キー名の typo や値の形をエディタが検出します(コンポーネント側の prop/trait を解禁する生成物 `lism-env.d.ts` とは別物)。
106
109
 
107
110
  ### Vite / Astro プラグインの登録(推奨セットアップ)
108
111
 
@@ -138,7 +141,7 @@ export default defineConfig({
138
141
  - **動的CSSビルド**: `import 'lism-css/main.css'` 等を捕捉し、`lism.config.js` を反映済みの CSS をその場で生成する(props / tokens を追加すると CSS に自動反映される)
139
142
  - **型の自動生成**: 有効化したブレイクポイント・追加した props / traits を反映した `lism-env.d.ts` を起動時に自動生成する
140
143
 
141
- `lism.config.js` はプロジェクトルートから `lism.config.js` → `lism.config.mjs` の順で自動検出します。別の場所に置く場合は `configPath` で指定できます。
144
+ 設定ファイルはプロジェクトルートから `lism.config.ts` `lism.config.mjs` → `lism.config.js` の順で自動検出します。別の場所に置く場合は `configPath` で指定できます。
142
145
 
143
146
  ```js
144
147
  // Vite
@@ -182,7 +185,7 @@ export default {
182
185
 
183
186
  統合プラグイン(型自動生成が有効)を使っている場合、有効化したブレイクポイントを反映した `lism-env.d.ts` がプロジェクト直下に**自動生成**されます。型補完も有効化したブレイクポイントのキーを自動で提示するため、`BreakpointRegistry` をプロジェクト側の `.d.ts` で手書き拡張する必要はありません。`lism-env.d.ts` は git にコミットしてください(`astro check` 等の型チェックがこのファイルを拠り所にします)。
184
187
 
185
- > SCSS を直接利用する構成では、`@use 'lism-css/scss/setting' with ($breakpoints: ...)` で有効化する方法も引き続き利用できます([SCSS でのカスタマイズ](#scss-でのカスタマイズ) を参照)。
188
+ > SCSS を直接利用する構成では、`@use 'lism-css/scss/setting' with ($breakpoints: ...)` で有効化する方法も利用できます([SCSS でのカスタマイズ](#scss-でのカスタマイズ) を参照)。
186
189
 
187
190
  ### フォーマット
188
191
 
@@ -240,7 +243,7 @@ export default {
240
243
  これによってコンポーネント側で次のような挙動が追加されます:
241
244
 
242
245
  | 入力 | 出力されるクラス |
243
- |------|----------------|
246
+ | --- | --- |
244
247
  | `ta="justify"` | `-ta:justify` |
245
248
  | `p="box"` | `-p:box` |
246
249
  | `filter="blur"` | `-filter:blur` |
@@ -254,7 +257,7 @@ export default {
254
257
 
255
258
  ### 追加した prop / trait の型解禁
256
259
 
257
- 統合プラグイン(型自動生成が有効)を使っている場合、`lism.config.js` で追加した **prop / trait も `lism-env.d.ts` 経由で型側に自動解禁**されます(`CustomPropRegistry` / `CustomTraitRegistry` の拡張として出力)。そのため上記の `<Box filter="blur" ... isHoge>` のような新規 prop / trait も、エディタや `astro check` で型エラーになりません。手書きの型拡張は不要です(`lism-env.d.ts` は git にコミットしてください)。
260
+ 統合プラグイン(型自動生成が有効)を使っている場合、`lism.config.js` で追加した **prop / trait も `lism-env.d.ts` 経由で型側に自動解禁**されます(`CustomPropRegistry` / `CustomTraitRegistry` の拡張として出力)。そのため上記の `<Box filter="blur" ... isHoge>` のような新規 prop / trait も、エディタや `astro check` で型エラーになりません。手書きの型拡張は不要です。
258
261
 
259
262
  なお、既存 prop への値追加(`ta="justify"` 等)はもともと任意の文字列を受け付けるため、型エラーにはなりません(ただし補完候補には出ません)。
260
263
 
@@ -314,7 +317,7 @@ npx lism-css build --full # full.css / full_no_layer.css も生成
314
317
  ```
315
318
 
316
319
  > **注意**:
317
- > - `tokens` に値を書けば、`-lts:2xl` の **ユーティリティクラス**と、参照先の CSS 変数(`:root { --lts--2xl: .5em }` のような **値そのもの**)の両方が CLI ビルドでも出力されます。値が `'-'` のキーはカタログ登録のみで `:root` 宣言を出力しません(実値は手書きSCSS側)。
320
+ > - `tokens` に値を書けば、`-lts:2xl` の **ユーティリティクラス**と、参照先の CSS 変数(`:root { --lts--2xl: .5em }` のような **値そのもの**)の両方が CLI ビルドでも出力されます。値が `'-'` のキーはカタログ登録のみで `:root` 宣言を出力しません(`lh` のように CSS 変数を持たないものや、実値を手書きSCSS側へ置くもの)。
318
321
  > - `is--*` クラスのスタイルは自動生成されないため、手動で追加してください。
319
322
  > - `lism-css` パッケージ自体を上書きする処理のため、**パッケージ更新ごとに再実行**が必要です。
320
323