@lism-css/mcp 0.13.0 → 0.15.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 (42) hide show
  1. package/dist/data/docs-index.json +176 -85
  2. package/dist/data/guides/SKILL.md +29 -15
  3. package/dist/data/guides/base-styles.md +2 -0
  4. package/dist/data/guides/components-core.md +25 -20
  5. package/dist/data/guides/components-ui.md +16 -23
  6. package/dist/data/guides/css-rules.md +101 -26
  7. package/dist/data/guides/customize.md +220 -0
  8. package/dist/data/guides/naming.md +218 -0
  9. package/dist/data/guides/primitive-class.md +3 -90
  10. package/dist/data/guides/primitives/a--decorator.md +3 -5
  11. package/dist/data/guides/primitives/a--divider.md +4 -11
  12. package/dist/data/guides/primitives/a--spacer.md +1 -1
  13. package/dist/data/guides/primitives/l--box.md +1 -1
  14. package/dist/data/guides/primitives/l--flex.md +1 -1
  15. package/dist/data/guides/primitives/l--flow.md +1 -1
  16. package/dist/data/guides/primitives/l--fluidCols.md +31 -28
  17. package/dist/data/guides/primitives/l--frame.md +1 -1
  18. package/dist/data/guides/primitives/l--sideMain.md +1 -1
  19. package/dist/data/guides/prop-responsive.md +28 -3
  20. package/dist/data/guides/property-class/bd.md +127 -0
  21. package/dist/data/guides/property-class/hov.md +140 -0
  22. package/dist/data/guides/property-class/max-sz.md +99 -0
  23. package/dist/data/guides/property-class.md +52 -86
  24. package/dist/data/guides/set-class.md +62 -94
  25. package/dist/data/guides/tokens.md +24 -15
  26. package/dist/data/guides/trait-class/has--gutter.md +48 -0
  27. package/dist/data/guides/trait-class/has--mask.md +66 -0
  28. package/dist/data/guides/trait-class/has--snap.md +68 -0
  29. package/dist/data/guides/trait-class/has--transition.md +73 -0
  30. package/dist/data/guides/{primitives → trait-class}/is--boxLink.md +8 -8
  31. package/dist/data/guides/{primitives → trait-class}/is--container.md +2 -2
  32. package/dist/data/guides/{primitives → trait-class}/is--layer.md +2 -2
  33. package/dist/data/guides/{primitives → trait-class}/is--wrapper.md +2 -2
  34. package/dist/data/guides/trait-class.md +77 -0
  35. package/dist/data/guides/utility-class.md +0 -1
  36. package/dist/data/meta.js +2 -2
  37. package/dist/lib/load-markdown.js +1 -1
  38. package/dist/lib/search.js +8 -5
  39. package/dist/tools/get-component.js +7 -6
  40. package/dist/tools/get-guide.js +1 -1
  41. package/package.json +2 -2
  42. package/dist/data/guides/primitives/is--vertical.md +0 -52
@@ -16,11 +16,11 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
16
16
  - [Lism Props](#lism-props)
17
17
  - [セマンティックコンポーネント](#セマンティックコンポーネント)
18
18
  - [Atomic Primitives](#atomic-primitives)
19
- - [Trait Primitives](#trait-primitives)
19
+ - [Trait Components](#trait-components)
20
20
  - [Layout Primitives](#layout-primitives)
21
21
  - [`getLismProps()`](#getlismprops--外部コンポーネントとの連携)
22
22
 
23
- [詳細](https://lism-css.com/docs/core-components/Lism/)
23
+ [詳細](https://lism-css.com/docs/core-components/lism-props/)
24
24
 
25
25
  ---
26
26
 
@@ -41,7 +41,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
41
41
 
42
42
  ソース: [props.ts](https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/config/defaults/props.ts)
43
43
 
44
- `<Lism>` で受け取れる Lism CSS 専用プロパティを **Lism Props** と呼びます。
44
+ `<Lism>`系コンポーネントで受け取れる Lism CSS 専用プロパティを **Lism Props** と呼びます。
45
45
 
46
46
 
47
47
  ### 共通 Props
@@ -51,10 +51,11 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
51
51
  | Prop | 説明 | 例 |
52
52
  |------|------|-----|
53
53
  | `as` | レンダリングする HTML 要素または外部コンポーネントを指定(デフォルト: `"div"`) | `as="section"`, `as={Image}` |
54
- | `lismClass` | コンポーネントの主要クラス名を指定。(`c--{lismClass}`) | `lismClass="c--myComponent"` |
55
- | `variant` | `lismClass` に対するバリエーションクラスを指定。(`c--{lismClass}--{variant}`) | `variant="secondary"` |
56
- | `layout` | レイアウトプリミティブ(`l--{layout}`)を指定。 | `layout="flow"` |
57
- | `set` | セットクラス(`set--{value}`)を指定。スペース区切りで複数指定可。値の先頭に `-` を付けると除外 | `set="gutter"`, `set="transition plain"`, `set="-plain"` |
54
+ | `lismClass` | コンポーネント基底となる `c--*` クラスを指定。`variant` による BEM 展開の対象 | `lismClass="c--myComponent"` |
55
+ | `variant` | `lismClass` 先頭クラスに対する BEM Modifier を付与(`c--` 専用。`a--` / `l--` には展開されない) | `variant="secondary"` |
56
+ | `layout` | レイアウトプリミティブ(`l--{layout}`)を指定 | `layout="flow"` |
57
+ | `atomic` | アトミックプリミティブ(`a--{atomic}`)を指定。`'divider'` / `'spacer'` / `'decorator'` が利用可能(`'icon'` は内部用) | `atomic="divider"` |
58
+ | `set` | セットクラス(`set--{value}`)を指定。スペース区切りで複数指定可。値の先頭に `-` を付けると除外 | `set="plain"`, `set="var:hov var:bxsh"`, `set="-plain"` |
58
59
  | `util` | ユーティリティクラス(`u--{value}`)を指定。`set` と同様に複数指定・`-` prefix 除外が可能 | `util="cbox"`, `util="cbox trim"`, `util="-trim"` |
59
60
  | `exProps` | Lism Propsの処理をスキップして外部コンポーネントに直接渡すpropsオブジェクト | `exProps={{ size: '1em' }}` |
60
61
 
@@ -80,12 +81,12 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
80
81
  // → p, fz は Lism が処理、size は HogeIcon に直接渡される
81
82
 
82
83
  // set でセットクラスを付与(layout と同じ要領)
83
- <Box set="shadow" p="30">...</Box>
84
- // → <div class="l--box set--shadow -p:30">...</div>
84
+ <Box set="var:bxsh" p="30">...</Box>
85
+ // → <div class="l--box set--var:bxsh -p:30">...</div>
85
86
 
86
87
  // set を複数指定(スペース区切り)
87
- <Stack set="shadow hov" p="30">...</Stack>
88
- // → <div class="l--stack set--shadow set--hov -p:30">...</div>
88
+ <Stack set="var:bxsh var:hov" p="30">...</Stack>
89
+ // → <div class="l--stack set--var:bxsh set--var:hov -p:30">...</div>
89
90
 
90
91
  // `-` prefix で除外(コンポーネント内部で適用済みの set を打ち消す用途)
91
92
  <AccordionButton set="-plain">...</AccordionButton>
@@ -112,8 +113,8 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
112
113
  | 値 | 出力形式 | 例 |
113
114
  |------|------|-----|
114
115
  | トークン値・プリセット値 | `-{prop}:{value}` クラスのみ | `fz='l'` → `class="-fz:l"` |
115
- | `true` または `"-"` | `-{prop}` クラスのみ(変数なし) | `bd` / `bd='-'` → `class="-bd"` |
116
- | `:` で始まる値 | 強制的にユーティリティクラス化 | `p=':hoge'` → `class="-p:hoge"` |
116
+ | `true` | `-{prop}` クラスのみ(変数なし) | `bd` / `bd={true}` → `class="-bd"` |
117
+ | `:` で始まる値 | 強制的にクラス化 | `p=':hoge'` → `class="-p:hoge"` |
117
118
  | その他の値(レスポンシブ対応プロパティ) | `-{prop}` + `--{prop}` | `fz='20px'` → `class="-fz"` + `style="--fz:20px"` |
118
119
  | その他の値(レスポンシブ非対応プロパティ) | `style` 属性に直接出力 | `o='0.7'` → `style="opacity:0.7"` |
119
120
  | その他の値(変数プロパティ) | `--{prop}` | `bdw='2px'` → `style="--bdw:2px"` (`border-width`としては出力されない) |
@@ -138,8 +139,8 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
138
139
  <Lism bd bdc="#000" bdw="2px">...</Lism>
139
140
  // 出力 → <div class="-bd" style="--bdc:#000;--bdw:2px">...</div>
140
141
 
141
- // `-` でクラスだけ出力(変数は親から継承したい場合などに使う)
142
- <Lism p='-' bdrs>...</Lism>
142
+ // `true` でクラスだけ出力(変数は親から継承したい場合などに使う)
143
+ <Lism p bdrs>...</Lism>
143
144
  // 出力 → <div class="-p -bdrs">...</div>
144
145
 
145
146
  // `:` で強制ユーティリティクラス化
@@ -176,7 +177,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
176
177
 
177
178
  ### Trait Props
178
179
 
179
- Trait Primitives クラス(`is--*`)を出力するためのプロパティ群です。
180
+ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ群です。
180
181
 
181
182
  | Prop | 出力クラス |
182
183
  |------|-----------|
@@ -189,7 +190,10 @@ Trait Primitives クラス(`is--*`)を出力するためのプロパティ
189
190
  | `isContainer` | `is--container` |
190
191
  | `isSide` | `is--side` |
191
192
  | `isSkipFlow` | `is--skipFlow` |
192
- | `isVertical` | `is--vertical` |
193
+ | `hasTransition` | `has--transition` |
194
+ | `hasGutter` | `has--gutter` |
195
+ | `hasSnap` | `has--snap` |
196
+ | `hasMask` | `has--mask` |
193
197
 
194
198
  ```jsx
195
199
  // Trait Props の使用例
@@ -236,12 +240,13 @@ Trait Primitives クラス(`is--*`)を出力するためのプロパティ
236
240
  | `<Divider>` | `a--divider` | 区切り線 |
237
241
  | `<Decorator>` | `a--decorator` | 装飾要素(SCSS定義なし、クラス名のみ出力) |
238
242
 
243
+
239
244
  各プリミティブの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `primitives/` 配下の各ファイルを参照。
240
245
 
241
246
 
242
- ## Trait Primitives
247
+ ## Trait Components
243
248
 
244
- `<Lism isXxx>`のエイリアスコンポーネントです。
249
+ `<Lism isXxx>`のエイリアスコンポーネントです。`is--*` クラスを出力します。
245
250
 
246
251
  | コンポーネント | 内部処理 | 出力クラス |
247
252
  |-------------|------------|-----------|
@@ -250,7 +255,7 @@ Trait Primitives クラス(`is--*`)を出力するためのプロパティ
250
255
  | `<Layer>` | `isLayer` | `is--layer` |
251
256
  | `<BoxLink>` | `isBoxLink` | `is--boxLink` |
252
257
 
253
- 各プリミティブの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `primitives/` 配下の各ファイルを参照。
258
+ Trait クラスの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `trait-class/` 配下の各ファイルを参照。`has--*` については [trait-class.md](./trait-class.md) を参照。
254
259
 
255
260
 
256
261
  ## Layout Primitives
@@ -25,7 +25,6 @@ import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/astro';
25
25
  - [Tabs](#tabs)
26
26
  - [ShapeDivider](#shapedivider)
27
27
  - [DummyText](#dummytext)
28
- - [DummyImage](#dummyimage)
29
28
  - [CLI でプロジェクトにコピーして使う](#cli-でプロジェクトにコピーして使う)
30
29
 
31
30
  [詳細](https://lism-css.com/ui/)
@@ -313,39 +312,33 @@ HTML の `details/summary` 要素をラップしたコンポーネント。Accor
313
312
  ```
314
313
 
315
314
 
316
- ## DummyImage
317
-
318
- ソース: [DummyImage/](https://github.com/lism-css/lism-css/tree/main/packages/lism-ui/src/components/DummyImage)
319
-
320
- ダミーのプレースホルダー画像を出力するコンポーネント。`cdn.lism-css.com` からダミー画像を取得。
321
-
322
- ```jsx
323
- <DummyImage />
324
- ```
325
-
326
-
327
315
  ## CLI でプロジェクトにコピーして使う
328
316
 
329
317
  `@lism-css/ui` の UI コンポーネントは、CLI コマンドで自分のプロジェクトにソースコードをコピーして使うこともできます。コピーしたファイルは自由にカスタマイズ可能です。
330
318
 
319
+ コンポーネント名は `import` するときと同じ PascalCase で指定します。
320
+
331
321
  ```bash
332
322
  # 初期設定(framework、出力先ディレクトリを対話的に設定)
333
- npx lism-ui init
323
+ npx lism-cli ui init
334
324
 
335
325
  # コンポーネントを追加
336
- npx lism-ui add Button Modal
337
- npx lism-ui add -a # 全コンポーネントを追加
326
+ npx lism-cli ui add Button Modal
327
+ npx lism-cli ui add NavMenu
328
+ npx lism-cli ui add --all # 全コンポーネントを追加
338
329
 
339
330
  # 利用可能なコンポーネント一覧を表示
340
- npx lism-ui list
331
+ npx lism-cli ui list
341
332
  ```
342
333
 
343
- `init` で生成される `lism-ui.json`:
334
+ `ui init` で生成される `lism.config.js` の `cli` セクション:
344
335
 
345
- ```json
346
- {
347
- "framework": "react",
348
- "componentsDir": "src/components/ui",
349
- "helperDir": "src/components/ui/_helper"
350
- }
336
+ ```js
337
+ export default {
338
+ cli: {
339
+ framework: 'react',
340
+ componentsDir: 'src/components/ui',
341
+ helperDir: 'src/components/ui/_helper',
342
+ },
343
+ };
351
344
  ```
@@ -3,12 +3,15 @@
3
3
  ## TOC
4
4
 
5
5
  - [CSS Layer 構造](#css-layer-構造)
6
- - [命名規則とプレフィックス](#命名規則とプレフィックス)
6
+ - [プレフィックスとクラス分類](#プレフィックスとクラス分類)
7
+ - [Component Class(`c--`)](#component-classc--)
7
8
  - [カスタムCSS を追加する場合](#カスタムcss-を追加する場合)
8
9
  - [CSS の配置場所](#css-の配置場所)
9
10
 
10
11
  [詳細](https://lism-css.com/docs/css-methodology/)
11
12
 
13
+ > **命名規則の詳細**: CSS変数名・クラス名・Property Class の `{prop}` / `{value}` の省略ルールについては [naming.md](./naming.md) を参照してください。
14
+
12
15
  ---
13
16
 
14
17
  ## CSS Layer 構造
@@ -20,8 +23,8 @@ Lism CSS は CSS Layers による詳細度管理を採用しています。
20
23
  Settings(トークン定義)
21
24
  → @layer lism-base(Reset CSS・トークン・.set--クラス)
22
25
  → @layer reset(リセットCSS)
26
+ → @layer lism-trait(.is-- / .has-- Trait Class)
23
27
  → @layer lism-primitive
24
- → @layer trait(.is-- Trait Primitive)
25
28
  → @layer layout(.l-- Layout Primitive)
26
29
  → @layer atomic(.a-- Atomic Primitive)
27
30
  → @layer lism-component(.c-- Component Class — BEM 構造を持つ UI 部品)
@@ -31,61 +34,133 @@ Settings(トークン定義)
31
34
  ```
32
35
 
33
36
 
34
- ## 命名規則とプレフィックス
37
+ ## クラス分類とプレフィックス
35
38
 
36
- [詳細](https://lism-css.com/docs/primitives/)
39
+ [詳細](https://lism-css.com/docs/naming/)
37
40
 
38
- クラス名のプレフィックスによって、役割とレイヤーの所属が決まります。
41
+ Lism CSSで定義されるクラスは、その役割とレイヤーの所属が決まっており、その分類によってプレフィックスが定められています。
39
42
 
40
- | プレフィックス | レイヤー | 役割 | 例 |
41
- |--------------|---------|------|-----|
42
- | `.set--` | lism-base | ベーススタイル上書き・トークン再定義 | `.set--plain`, `.set--transition` |
43
- | `.is--` | lism-primitive.trait | Trait Primitive(要素の静的特性) | `.is--container`, `.is--wrapper` |
44
- | `.l--` | lism-primitive.layout | Layout Primitive | `.l--grid`, `.l--flex`, `.l--stack` |
45
- | `.a--` | lism-primitive.atomic | Atomic Primitive | `.a--icon`, `.a--divider` |
46
- | `.c--` | lism-component | Component Class(BEM 構造を持つ UI 部品) | `.c--button`, `.c--accordion` |
47
- | `.u--` | lism-utility | 用途が明確なユーティリティ | `.u--cbox`, `.u--trim` |
48
- | `.-` | レイヤー外 | 単一プロパティ制御(Property Class) | `.-fz:l`, `.-p:20`, `.-d:none` |
43
+ | 分類 | 役割 | プレフィックス | 例 |
44
+ |---|---|---|---|
45
+ | Set Class | ベーススタイル上書き・変数提供 | `set--` | `.set--plain`, `.set--revert`, `.set--var:hov`, `.set--var:bxsh` |
46
+ | Layout Primitive | レイアウトの構成単位となる Primitive | `l--` | `.l--grid`, `.l--flex`, `.l--stack` |
47
+ | Atomic Primitive | レイアウトの最小単位となる Primitive | `a--` | `.a--icon`, `.a--divider` |
48
+ | Component Class | BEM 構造を持つ UI 部品 | `c--` | `.c--button`, `.c--accordion` |
49
+ | `is--` Trait | 要素に役割(〜である)を宣言 | `is--` | `.is--container`, `.is--wrapper`, `.is--layer`, `.is--boxLink` |
50
+ | `has--` Trait | 要素に機能(〜を持つ)を付与 | `has--` | `.has--transition`, `.has--gutter`, `.has--snap`, `.has--mask` |
51
+ | Utility Class | 用途が明確な装飾系ユーティリティ | `u--` | `.u--cbox`, `.u--trim`, `.u--collapseGrid` |
52
+ | Property Class | 単一プロパティの制御 | `-` | `.-fz:l`, `.-p:20`, `.-d:none` |
49
53
 
50
54
  **併用ルール:**
51
55
  - `.l--` と `.c--` は併用OK(例: `<div class="l--flex c--nav">`)
52
56
  - 同カテゴリ内の Primitive 併用は不可(例: `.l--flex` と `.l--grid`、`.a--icon` と `.a--divider` は同要素に付けない)
53
57
  - `.l--` × `.a--` は非推奨(役割的に同居しない想定)
54
- - `.is--` 同士は併用OK(Trait は複数併用できる)
55
- - `.is--` × `.l--` / `.a--` も併用OK
58
+ - `.is--` / `.has--` 同士は併用OK(Trait は複数併用できる)
59
+ - `.is--` / `.has--` × `.l--` / `.a--` も併用OK
56
60
  - `c--` の Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし以下は許容:
57
61
  - Block と自身の Modifier: `.c--button.c--button--outline`
58
62
  - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
59
63
  - 子要素: `.c--card_header`, `.c--card_body`(`c--` のみ Element を持つ。`_` 一つ区切り)
60
64
 
65
+ **`is--` と `has--` の判定軸:**
66
+
67
+ | | `is--` | `has--` |
68
+ |---|---|---|
69
+ | 意味 | 〜である(役割・存在の宣言) | 〜を持つ(機能の付与) |
70
+ | CSS 変数 | 必須ではない | 必須(カスタマイズポイントを提供) |
71
+
61
72
  **記述順序:**
62
- class 属性にクラスを直接記述する場合は、以下の順序で並べてください。粒度の大きい(塊としての役割を持つ)クラスから、粒度の小さい(単一プロパティ制御)クラスの順です。
73
+ class 属性にクラスを直接記述する場合は、以下の順序で並べてください。
63
74
 
64
75
  ```
65
- [customClass] [c--/a--] [l--] [is--*] [set--*] [u--*] [Property Class...]
76
+ [customClass] [c--] [a--] [l--] [set--] [is--] [has--] [u--] [-]
66
77
  ```
67
78
 
68
79
  | # | 区分 | 例 |
69
80
  |---|---|---|
70
- | 1 | 独自クラス(`customClass`) | `my-card`, `hoge` |
71
- | 2 | Component / Atomic Primitive(`c--` / `a--`) | `c--box`, `a--icon`, `c--box c--box--primary` |
72
- | 3 | Layout Primitive(`l--`) | `l--flex`, `l--grid` |
73
- | 4 | Trait Primitives(`is--`) | `is--wrapper`, `is--layer` |
74
- | 5 | Set Class(`set--`) | `set--hov`, `set--card` |
75
- | 6 | ユーティリティ(`u--`) | `u--cbox`, `u--trim` |
76
- | 7 | Property Class(`-`) | `-p:20`, `-bgc:base-2` |
81
+ | 1 | 独自クラス(`customClass`) | `z--header`, `hoge` |
82
+ | 2 | Component(`c--`) | `c--box`, `c--box--primary` |
83
+ | 3 | Atomic Primitive(`a--`) | `a--icon`, `a--divider` |
84
+ | 4 | Layout Primitive(`l--`) | `l--flex`, `l--columns` |
85
+ | 5 | Set Class(`set--`) | `set--var:hov`, `set--var:bxsh` |
86
+ | 6 | Trait Class 役割宣言(`is--`) | `is--wrapper`, `is--layer` |
87
+ | 7 | Trait Class 機能付与(`has--`) | `has--transition`, `has--gutter` |
88
+ | 8 | Utility Class(`u--`) | `u--cbox`, `u--trim` |
89
+ | 9 | Property Class(`-`) | `-p:20`, `-bgc:base-2`, `-hov:-c` |
77
90
 
78
91
  ```html
79
92
  <!-- OK -->
80
93
  <div class="c--nav l--flex -p:20 -g:20">...</div>
81
94
 
82
- <!-- NG: Property Class が先 -->
95
+ <!-- NG: Property Class が先 になっている -->
83
96
  <div class="-p:20 -g:20 l--flex c--nav">...</div>
84
97
  ```
85
98
 
86
99
  なお、`class` 属性内の並び順は CSS の適用結果(詳細度・カスケード順)には影響しません。この順序はあくまで可読性と一貫性のための整理です。
87
100
 
88
101
 
102
+ ## Component Class(`c--`)
103
+
104
+ `c--` プレフィックスで定義する **Component クラス** は、Primitive を組み合わせて作られた具体的な UI 部品です。`@layer lism-component` に配置され、コアの `lism-css` には含まれず、`@lism-css/ui` パッケージやユーザー定義として提供されます。
105
+
106
+ `c--` クラスは BEM 構造(Block / Modifier / Element)を持つことができ、それぞれ次の形式で定義します。
107
+
108
+ | 分類 | 形式 | 例 |
109
+ |---|---|---|
110
+ | Block | `.c--{name}` | `.c--button`, `.c--card` |
111
+ | Modifier | `.c--{name}--{modifier}` | `.c--button--outline` |
112
+ | Element | `.c--{name}_{element}` | `.c--card_header`, `.c--card_body` |
113
+
114
+ - Modifier は Block と併記して使用: `.c--button.c--button--outline`
115
+ - Element は `_`(アンダースコア)一つ区切り
116
+ - Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
117
+ - Block と自身の Modifier: `.c--xxx.c--xxx--variant`
118
+ - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
119
+ - `a--` / `l--` には `variant` の BEM 展開は適用されない**
120
+
121
+ `c--` を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`.l--`, `.is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることで CSS の記述量を削減できます。`c--` クラスにスタイルが全くなく、HTML 側での可視性を高める名前付けのためだけに利用しても構いません。
122
+
123
+
124
+ ### 作成例
125
+
126
+ `l--stack` と併用する前提でのカスタムクラス例:
127
+
128
+ ```css
129
+ @layer lism-component {
130
+ .c--myCard {
131
+ gap: var(--s20);
132
+ padding: var(--s30);
133
+ border-radius: var(--bdrs--20);
134
+ box-shadow: var(--bxsh--20);
135
+ border: 1px solid currentColor;
136
+ /* ... */
137
+ }
138
+ }
139
+ ```
140
+
141
+ ```html
142
+ <div class="c--myCard l--stack">
143
+ ...
144
+ </div>
145
+ ```
146
+
147
+ 素の HTML サイトではこのように `c--` クラスに CSS を書いてスタイリングしても問題ありませんが、React などでコンポーネントを作成できる場合は、特別な理由がない限り Property Class を活用してください。
148
+
149
+ ```jsx
150
+ export default function MyCard(props) {
151
+ return <Stack lismClass="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
152
+ }
153
+ ```
154
+
155
+ ```css
156
+ @layer lism-component {
157
+ .c--myCard {
158
+ /* 複雑なスタイルがあれば css で書く */
159
+ }
160
+ }
161
+ ```
162
+
163
+
89
164
  ## カスタムCSS を追加する場合
90
165
 
91
166
  独自のスタイルを追加する場合は、対象に合った Lism の CSS Layer 内に記述してください。
@@ -0,0 +1,220 @@
1
+ # カスタマイズ
2
+
3
+ `lism-css` パッケージから読み込む CSS や、コンポーネントが受け付ける Props の挙動を上書きしてカスタマイズする方法をまとめます。
4
+
5
+ ## TOC
6
+
7
+ - [`@layer` をオフにする](#layer-をオフにする)
8
+ - [SCSS でのカスタマイズ](#scss-でのカスタマイズ)
9
+ - [`lism.config.js` でのカスタマイズ](#lismconfigjs-でのカスタマイズ)
10
+ - [追加スタイルを読み込ませる方法](#追加スタイルを読み込ませる方法)
11
+
12
+ [詳細](https://lism-css.com/docs/customize/)
13
+
14
+ ---
15
+
16
+ ## `@layer` をオフにする
17
+
18
+ `lism-css/main.css` の代わりに `lism-css/main_no_layer.css` を読み込むだけで、`@layer` を使わない CSS に切り替えられます。
19
+
20
+ ```js
21
+ // 通常
22
+ import 'lism-css/main.css';
23
+
24
+ // @layer なしのCSSを読み込む場合はこちら
25
+ import 'lism-css/main_no_layer.css';
26
+ ```
27
+
28
+ `@layer` のオン・オフは SCSS 変数では管理されません。**読み込むファイル自体を切り替える**点に注意してください。
29
+
30
+
31
+ ## SCSS でのカスタマイズ
32
+
33
+ `lism-css/scss/_setting.scss` で定義された変数を `@use ... with (...)` で上書きできます。
34
+ 上書き定義をしてから `lism-css/scss/main.scss` を読み込むことでカスタマイズが反映されます。
35
+
36
+ ソース: [`_setting.scss`](https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/_setting.scss)
37
+
38
+ ### 上書き可能な変数
39
+
40
+ | 変数 | 用途 | デフォルト |
41
+ |------|------|-----------|
42
+ | `$breakpoints` | ブレイクポイント数値の定義 | `('sm': '480px', 'md': '800px', 'lg': '1120px')` |
43
+ | `$common_support_bp` | 主要な Property Class が共通サポートするブレイクポイント上限 | `'md'` |
44
+ | `$is_container_query` | コンテナクエリで出力するか(`1` = container query, `0` = media query) | `1` |
45
+ | `$default_important` | Property Class にデフォルトで `!important` を付与するか | `0` |
46
+ | `$props` | Property Class ごとの個別出力設定 | `prop-config` のデフォルト |
47
+
48
+ ### 基本フォーマット
49
+
50
+ ```scss
51
+ // 1. 設定変数を上書き
52
+ @use '../path-to/node_modules/lism-css/scss/setting' with (
53
+ $breakpoints: (
54
+ 'sm': '400px', // 個別キーの上書き可
55
+ ),
56
+ $common_support_bp: 'lg',
57
+ $is_container_query: 0,
58
+ $default_important: 1,
59
+ $props: (
60
+ // 個別 Prop の設定(後述)
61
+ )
62
+ );
63
+
64
+ // 2. main.scss を読み込む(@layer なしにする場合は main_no_layer)
65
+ @use '../path-to/node_modules/lism-css/scss/main';
66
+ ```
67
+
68
+ > Astro の場合、`../path-to/node_modules/` 部分は不要で `lism-css/scss/setting` のように書けます。
69
+
70
+ ### `$props` の個別カスタマイズ
71
+
72
+ 各 Property Class について、出力範囲やユーティリティクラスを追加できます。
73
+
74
+ ```scss
75
+ @use '../path-to/node_modules/lism-css/scss/setting' with (
76
+ $props: (
77
+ 'fz': (
78
+ important: 1, // .-fz:* に !important を付与
79
+ ),
80
+ 'h': (
81
+ bp: 0, // .-h_sm 等のブレイクポイント版を出力しない
82
+ ),
83
+ 'p': (
84
+ bp: 'lg', // .-p_sm / .-p_md / .-p_lg まで出力
85
+ utilities: (
86
+ 'box': '2em', // .-p:box { --p: 2em } を追加
87
+ ),
88
+ ),
89
+ )
90
+ );
91
+ @use '../path-to/node_modules/lism-css/scss/main';
92
+ ```
93
+
94
+ ### 注意点
95
+
96
+ SCSS を直接読み込む構成では、コンパイル時に `lism-css` 本体 CSS と読み込み順がずれる可能性があります。意図しない上書きが起きないよう、レイヤー順を確認してください。
97
+
98
+
99
+ ## `lism.config.js` でのカスタマイズ
100
+
101
+ プロジェクトのルート直下に `lism.config.js` を置くことで、**コンポーネントの挙動**(受け付ける props の値や、出力されるクラス名)をカスタマイズできます。
102
+
103
+ > **注意**: `lism.config.js` は HTML 出力(クラス名)を変えるだけで、追加されたクラスに対する CSS は別途読み込ませる必要があります([追加スタイルを読み込ませる方法](#追加スタイルを読み込ませる方法) を参照)。
104
+
105
+ ### フォーマット
106
+
107
+ ```js
108
+ // lism.config.js
109
+ export default {
110
+ props: {
111
+ // Property Class の出力をカスタマイズ
112
+ },
113
+ tokens: {
114
+ // トークン値を追加
115
+ },
116
+ traits: {
117
+ // Trait(is--* / has--*)用の props を追加
118
+ },
119
+ };
120
+ ```
121
+
122
+ デフォルト値は以下を参照:
123
+
124
+ - props: [`config/defaults/props.ts`](https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/config/defaults/props.ts)
125
+ - tokens: [`config/defaults/tokens.ts`](https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/config/defaults/tokens.ts)
126
+ - traits: [`config/defaults/traits.ts`](https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/config/defaults/traits.ts)
127
+
128
+ ### カスタマイズ例
129
+
130
+ ```js
131
+ // lism.config.js
132
+ import DEFAULT_CONFIG from 'lism-css/default-config';
133
+ const { props, tokens } = DEFAULT_CONFIG;
134
+
135
+ export default {
136
+ props: {
137
+ d: { presets: [...(props.d.presets || []), 'flex', 'grid'] },
138
+ p: { utils: { box: '2em' } },
139
+ },
140
+ tokens: {
141
+ bdrs: [...(tokens.bdrs || []), '5'],
142
+ },
143
+ traits: {
144
+ isHoge: 'is--hoge',
145
+ },
146
+ };
147
+ ```
148
+
149
+ これによってコンポーネント側で次のような挙動が追加されます:
150
+
151
+ | 入力 | 出力されるクラス |
152
+ |------|----------------|
153
+ | `d="flex"` | `-d:flex` |
154
+ | `d="grid"` | `-d:grid` |
155
+ | `p="box"` | `-p:box` |
156
+ | `bdrs="5"` | `-bdrs:5` |
157
+ | `isHoge` | `is--hoge` |
158
+
159
+ ```jsx
160
+ <Box p="box" d="flex" bdrs="5" isHoge>Box</Box>
161
+ // → <div class="l--box is--hoge -p:box -d:flex -bdrs:5">Box</div>
162
+ ```
163
+
164
+
165
+ ## 追加スタイルを読み込ませる方法
166
+
167
+ `lism.config.js` で props を増やしただけでは、対応するユーティリティクラスのスタイルは存在しません。次のいずれかでスタイルを追加してください。
168
+
169
+ ### 1. CLI コマンドで CSS を再ビルド
170
+
171
+ ```bash
172
+ npx lism-css build
173
+ ```
174
+
175
+ `lism.config.js` の内容に基づいて `lism-css/main.css` を再生成します。上記カスタマイズ例だと、以下のスタイルが自動生成されます:
176
+
177
+ ```css
178
+ .-d\:flex { display: flex; }
179
+ .-d\:grid { display: grid; }
180
+ .-p\:box { padding: 2em; }
181
+ .-bdrs\:5 { border-radius: var(--bdrs--5); }
182
+ ```
183
+
184
+ > **注意**:
185
+ > - トークン CSS 変数(例: `--bdrs--5`)と `is--*` クラスのスタイルは自動生成されないため、手動で追加してください。
186
+ > - `lism-css` パッケージ自体を上書きする処理のため、**パッケージ更新ごとに再実行**が必要です。
187
+
188
+ ### 2. 手動で CSS を追記
189
+
190
+ CLI を使わず、追加クラス分の CSS をプロジェクト側で書いて読み込ませる方法でも問題ありません。
191
+
192
+ ```css
193
+ :root { --bdrs--5: 0.125rem; }
194
+ .is--hoge { /* ... */ }
195
+ ```
196
+
197
+ ### 3. SCSS で `lism.config.js` と整合させる
198
+
199
+ SCSS 経由で読み込む構成なら、`lism.config.js` と同じ追加分を `$props` の `utilities` 設定として書いておけば、ビルドコマンドなしで反映できます。
200
+
201
+ ```scss
202
+ @use '../path-to/node_modules/lism-css/scss/setting' with (
203
+ $props: (
204
+ 'd': (
205
+ utilities: (
206
+ 'flex': 'flex',
207
+ 'grid': 'grid',
208
+ ),
209
+ ),
210
+ 'p': ( utilities: ( 'box': '2em' ) ),
211
+ 'bdrs': ( utilities: ( '5': 'var(--bdrs--5)' ) ),
212
+ )
213
+ );
214
+ @use '../path-to/node_modules/lism-css/scss/main';
215
+
216
+ // トークン追記
217
+ @layer lism-base {
218
+ :root { --bdrs--5: 0.125rem; }
219
+ }
220
+ ```