@lism-css/mcp 0.11.0 → 0.12.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 (38) hide show
  1. package/README.ja.md +4 -2
  2. package/README.md +4 -2
  3. package/dist/data/docs-index.json +278 -51
  4. package/dist/data/guides/SKILL.md +113 -0
  5. package/dist/data/guides/base-styles.md +106 -0
  6. package/dist/data/guides/components-core.md +338 -0
  7. package/dist/data/guides/components-ui.md +351 -0
  8. package/dist/data/guides/css-rules.md +146 -0
  9. package/dist/data/guides/module-class.md +162 -0
  10. package/dist/data/guides/prop-responsive.md +54 -0
  11. package/dist/data/guides/property-class.md +400 -0
  12. package/dist/data/guides/set-class.md +190 -0
  13. package/dist/data/guides/tokens.md +210 -0
  14. package/dist/data/guides/utility-class.md +81 -0
  15. package/dist/index.js +4 -0
  16. package/dist/lib/load-data.js +2 -11
  17. package/dist/lib/load-markdown.d.ts +6 -0
  18. package/dist/lib/load-markdown.js +29 -0
  19. package/dist/lib/markdown-utils.d.ts +42 -0
  20. package/dist/lib/markdown-utils.js +158 -0
  21. package/dist/lib/schemas.d.ts +0 -242
  22. package/dist/lib/schemas.js +0 -64
  23. package/dist/lib/search.d.ts +2 -16
  24. package/dist/lib/search.js +9 -68
  25. package/dist/lib/types.d.ts +0 -64
  26. package/dist/tools/convert-css.js +96 -55
  27. package/dist/tools/get-component.js +60 -29
  28. package/dist/tools/get-guide.d.ts +2 -0
  29. package/dist/tools/get-guide.js +45 -0
  30. package/dist/tools/get-overview.js +26 -39
  31. package/dist/tools/get-props-system.js +45 -33
  32. package/dist/tools/get-tokens.js +9 -14
  33. package/dist/tools/search-docs.js +27 -9
  34. package/package.json +2 -2
  35. package/dist/data/components.json +0 -564
  36. package/dist/data/overview.json +0 -114
  37. package/dist/data/props-system.json +0 -1147
  38. package/dist/data/tokens.json +0 -148
@@ -0,0 +1,113 @@
1
+ ---
2
+ name: lism-css-guide
3
+ description: "Lism CSS の実装ガイド。HTML・CSS・SCSSの編集、UIやページレイアウトの実装・コーディング、JSX・React・Astroでコンポーネントを実装・編集する時に参照。ユーティリティクラス・デザイントークン・レイアウトモジュール・命名規則・CSSのLayer規則・レスポンシブ対応・ベーススタイリングのルール・CSS設計を提供する。"
4
+ ---
5
+
6
+ # Lism CSS Best Practices
7
+
8
+ このプロジェクトは CSS フレームワーク「Lism CSS」を使用しています。
9
+
10
+ Lism CSS は、WEBサイトの骨組みをテンポ良くサクっと作るための軽量なCSS設計フレームワークです。デザインに自然と心地よいリズムを生み出すトークン設計、レイアウトファーストなモジュール設計、CSS変数を活かした柔軟でレスポンシブなユーティリティ設計が特徴です。ビルドや設定は不要で、CSSを読み込むだけでも使えます。Every Layout のレイアウトプリミティブとハーモニックモジュラースケーリング、Tailwind CSS のユーティリティファーストアプローチ、ITCSS のレイヤー設計を融合した独自のCSS設計体系です。
11
+
12
+ MCP サーバー (`@lism-css/mcp`) が利用可能な場合は、コンポーネントやPropsの詳細情報をそちらから取得してください。
13
+
14
+ > **バージョン情報:** このガイドは `lism-css@0.12.0` / `@lism-css/ui@0.12.0` 時点の情報に基づいています。プロジェクトで使用中のバージョンを確認し、このガイドのバージョンと異なる場合はユーザーに通知してください。
15
+
16
+ 公式ドキュメント: https://lism-css.com/docs/overview/
17
+
18
+
19
+ ## パッケージ構成
20
+
21
+ | npm パッケージ名 | 用途 |
22
+ |-----------|------|
23
+ | `lism-css` | コアCSSフレームワーク。レイアウトモジュール、デザイントークン、Property Class、React/Astroコンポーネントを提供 |
24
+ | `@lism-css/ui` | `lism-css` の上に構築されたインタラクティブな UI コンポーネントライブラリ。Accordion, Modal, Tabs 等を React/Astro で提供 |
25
+
26
+
27
+ ## インストール
28
+
29
+ ### CDN(CSSのみ)
30
+
31
+ ```html
32
+ <link href="https://cdn.jsdelivr.net/npm/lism-css@0.12.0/dist/css/main.css" rel="stylesheet" />
33
+ ```
34
+
35
+ ### npm パッケージ
36
+
37
+ ```bash
38
+ npm i lism-css
39
+ # UI コンポーネントも使う場合
40
+ npm i @lism-css/ui
41
+ ```
42
+
43
+ ### CSS 読み込み
44
+
45
+ ```js
46
+ import 'lism-css/main.css';
47
+ ```
48
+
49
+ ### コンポーネント読み込み
50
+
51
+ ```jsx
52
+ // React
53
+ import { Box, Flex, Stack, Grid, Text, Media } from 'lism-css/react';
54
+ import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/react';
55
+
56
+ // Astro
57
+ import { Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
58
+ import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/astro';
59
+ ```
60
+
61
+
62
+ ## 実装ルール
63
+
64
+ ### 基本: できる限りLism CSSの用意しているクラス・CSS変数・コンポーネントを使って書く
65
+
66
+ まずは以下のチェックリストを確認しながら、Lism CSS でできることが何かを考えてから実装方針を立ててください。
67
+
68
+ - `l--`,`a--`,`is--`, `c--`などのModule Classを用いることができるか?(React, Astroの場合は `Lism`, `Stack`, `Flex`, `Grid`, `Columns` 等のコンポーネントを利用して構築できるか?)
69
+ - `set--`系クラス、`u--`系クラスは使えないか?
70
+ - Property Class (`-{prop}:{value}` or `<Lism prop="value">`))を使ってスタイリングできるか?
71
+ - 値をレスポンシブに切り替える時は Lism の Property Class (`-{prop}_{bp}` or `<Lism prop={[...]}>`)を使って実装できるか?
72
+ - カラー・余白・フォントサイズ・タイポグラフィ・行間(ハーフレディング)・サイズ・角丸・シャドウなどはトークン値を流用できないか?
73
+ - その他、LismのクラスやCSS変数でできることかどうか
74
+
75
+ ### ネイティブ CSS で書くもの(必要に応じて適切な @layer 内で書くこと)
76
+ - アニメーションやhoverエフェクトは、Lismになければ適宜クラスを追加して使用する
77
+ - コンポーネントの実装も、Lismになければ適宜`c--`クラスを追加して使用する(`@layer lism-modules`内で定義すること)
78
+ - 複雑なセレクタ(`:nth-child`, `::before`, `::after` 等)を使用する必要があるスタイル
79
+ - カスタムプロパティを使った独自の計算式が必要なスタイル
80
+ - Lism のトークンやモジュールでカバーできない特殊なスタイル
81
+
82
+ ### コンポーネント化のルール
83
+ - 同じスタイルの組み合わせが3箇所以上で使われる場合は、コンポーネントとして切り出すことを検討する
84
+ - コンポーネントはできる限り `<Lism>`系コアモジュールやレイアウトモジュール(`Stack`, `Flex`, `Grid`, `Columns` 等)をベースに構築し、Lism Propsを活用して作成すること
85
+ - カスタムクラスが必要な場合は `.c--{name}` の命名規則に従う
86
+
87
+
88
+ ## 詳細リファレンス
89
+
90
+ このスキルには以下の詳細ファイルが含まれます。必要に応じて参照してください。
91
+
92
+ | ファイル | 内容 | 公式ドキュメント |
93
+ |---------|------|----------------|
94
+ | [tokens.md](./tokens.md) | デザイントークン・CSS変数 — 余白・フォントサイズ・角丸・影・カラー・パレット | [tokens](https://lism-css.com/docs/tokens/) |
95
+ | [base-styles.md](./base-styles.md) | ベーススタイリング — Reset CSS・HTML要素のベーススタイル・CSS変数(トークン) | [base-styles](https://lism-css.com/docs/base-styles/) |
96
+ | [set-class.md](./set-class.md) | `set--` クラス — `set--plain`/`set--shadow`/`set--hov`/`set--transition` 等のセットアップクラス | [set](https://lism-css.com/docs/set/) |
97
+ | [module-class.md](./module-class.md) | モジュールクラス — `is--`/`l--`/`a--`/`c--` クラスの一覧と用途 | [state](https://lism-css.com/docs/state/), [module-class](https://lism-css.com/docs/module-class/) |
98
+ | [utility-class.md](./utility-class.md) | ユーティリティクラス — `u--` クラスの一覧・SCSS ソースリンク・Property Class との違い | [utility-class](https://lism-css.com/docs/utility-class/) |
99
+ | [property-class.md](./property-class.md) | Property Class — `-{prop}:{value}` 記法・主要Prop一覧・特殊Prop(ボーダー・ホバー)・出力タイプ | [property-class](https://lism-css.com/docs/property-class/) |
100
+ | [prop-responsive.md](./prop-responsive.md) | レスポンシブ対応 — ブレークポイント・コンテナクエリ・HTML/コンポーネントでの指定方法 | [responsive](https://lism-css.com/docs/responsive/) |
101
+ | [components-core.md](./components-core.md) | コンポーネントシステム — コア・セマンティック・レイアウト・ステート・アトミック一覧、Lism Props、getLismProps | [components](https://lism-css.com/docs/components/) |
102
+ | [components-ui.md](./components-ui.md) | UIコンポーネント(`@lism-css/ui`)— Accordion・Modal・Tabs・Button 等の Props・構造・CLI | [components](https://lism-css.com/docs/components/) |
103
+ | [css-rules.md](./css-rules.md) | CSS設計ルール — Layer構造・命名規則・プレフィックス・カスタムCSS追加ルール | [css-methodology](https://lism-css.com/docs/css-methodology/) |
104
+
105
+ 各ファイルの冒頭にはTOC(目次)があり、セクションごとの詳細URL・ソースURLがまとめて記載されています。
106
+
107
+
108
+ ## このスキルのアップデート方法
109
+
110
+ skills.sh のコマンドを利用してください。
111
+
112
+ - `npx skills check` でアップデートの有無を確認
113
+ - `npx skills update` でアップデートを実行
@@ -0,0 +1,106 @@
1
+ # ベーススタイリング
2
+
3
+ Lism CSS は `@layer lism-base` レイヤーで、Reset CSS・HTML要素のベーススタイル・CSS変数(トークン)を定義しています。
4
+
5
+ > ここではHTML要素のベーススタイリングについての概要を記載しています。トークン定義については [tokens.md](./tokens.md) を参照してください。
6
+
7
+ ## TOC
8
+
9
+ - [Reset CSS](#reset-css)
10
+ - [HTML 要素のベーススタイル](#html-要素のベーススタイル)
11
+
12
+ [詳細](https://lism-css.com/docs/base-styles/)
13
+
14
+ ---
15
+
16
+ ## Reset CSS
17
+
18
+ ソース: [`reset.scss`](https://github.com/lism-css/lism-css/blob/main/packages/lism-css/src/scss/reset.scss)
19
+
20
+ `@layer lism-base.reset` として定義される最小限のリセットスタイルです。
21
+
22
+ - `box-sizing: border-box` の全要素適用
23
+ - `margin: 0` の全要素適用(`<dialog>` を除く)
24
+ - `overflow: clip` を `<html>` に適用(横スクロール防止)
25
+ - `body` に `min-height: 100dvh`
26
+ - メディア要素(`img`, `video`, `iframe`)に `max-inline-size: 100%`, `block-size: auto`
27
+ - フォーム要素のフォント・カラー継承
28
+
29
+
30
+ ## HTML 要素のベーススタイル
31
+
32
+ ソース: [`_html.scss`](https://github.com/lism-css/lism-css/blob/main/packages/lism-css/src/scss/base/_html.scss)
33
+
34
+ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイルを適用しています。
35
+ その中で、専用のCSS変数を使って値を調整できるようにしている部分をここでは紹介します。具体的なスタイルの詳細は、githubのソースコードを読んでください。
36
+
37
+ ### 全要素の行間
38
+
39
+ | 変数 | 用途 |
40
+ |------|------|
41
+ | `--hl` | half-leading(行間の上下余白量)。`line-height: calc(1em + var(--hl) * 2)` として全要素に適用 |
42
+
43
+ ### body
44
+
45
+ | 変数 | 用途 |
46
+ |------|------|
47
+ | `--fz--base` | ベースフォントサイズ |
48
+ | `--ff--base` | ベースフォントファミリー |
49
+ | `--lts--base` | ベース字間 |
50
+ | `--text` | テキスト色 |
51
+ | `--base` | 背景色 |
52
+ | `--under-offset` | `text-underline-offset`(デフォルト: `0.125em`) |
53
+
54
+ ### 見出し(h1〜h6)
55
+
56
+ | 変数 | 用途 |
57
+ |------|------|
58
+ | `--headings-ff` | 全見出し共通のフォントファミリー(デフォルト: `inherit`) |
59
+ | `--headings-fw` | 全見出し共通のフォントウェイト(デフォルト: `var(--fw--bold)`) |
60
+
61
+ 各レベルのフォントサイズは `--fz--3xl`(h1)〜 `--fz--m`(h5, h6)がセットされている。
62
+
63
+ ### リンク(a)
64
+
65
+ | 変数 | フォールバック | 用途 |
66
+ |------|------------|------|
67
+ | `--link-c` | `var(--link)` | リンクテキスト色 |
68
+ | `--link-td` | `underline` | テキスト装飾の種類 |
69
+ | `--link-td-thickness` | `auto` | 下線の太さ |
70
+ | `--link-td-color` | `currentColor` | 下線の色 |
71
+
72
+ ### リスト(ul, ol)
73
+
74
+ | 変数 | フォールバック | 用途 |
75
+ |------|------------|------|
76
+ | `--list-px-s` | `var(--s30)` | リストの `padding-inline-start` |
77
+
78
+ ### テーブル(table, td, th)
79
+
80
+ | 変数 | フォールバック | 用途 |
81
+ |------|------------|------|
82
+ | `--td-c` | `inherit` | セルのテキスト色 |
83
+ | `--td-bgc` | `transparent` | セルの背景色 |
84
+ | `--td-p` | `var(--s10)` | セルのパディング |
85
+ | `--td-min-sz` | `initial` | セルの最小幅 |
86
+ | `--th-c` | `var(--td-c)` | 見出しセルのテキスト色 |
87
+ | `--th-bgc` | `var(--td-bgc)` | 見出しセルの背景色 |
88
+ | `--th-p` | `var(--td-p)` | 見出しセルのパディング |
89
+ | `--th-min-sz` | `var(--td-min-sz)` | 見出しセルの最小幅 |
90
+
91
+ `th` は `td` の変数をフォールバックとして参照するため、`--td-*` だけで両方に反映される。
92
+
93
+ ### フォーム要素
94
+
95
+ | 変数 | フォールバック | 用途 |
96
+ |------|------------|------|
97
+ | `--controls-bgc` | `var(--base-2)` | 背景色 |
98
+ | `--controls-bdc` | `var(--divider)` | ボーダー色 |
99
+ | `--controls-p` | `var(--s5) var(--s10)` | パディング |
100
+ | `--controls-bdrs` | `var(--bdrs--10)` | 角丸 |
101
+
102
+ ### その他
103
+
104
+ | 変数 | 対象 | 用途 |
105
+ |------|------|------|
106
+ | `--focus-offset` | `:focus-visible` | アウトラインのオフセット(デフォルト: `0px`) |
@@ -0,0 +1,338 @@
1
+ # コンポーネントシステム
2
+
3
+ Lism CSS(`lism-css`パッケージ)は React / Astro 向けのコンポーネントを提供しています。
4
+
5
+ ```jsx
6
+ // React
7
+ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/react';
8
+
9
+ // Astro
10
+ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
11
+ ```
12
+
13
+ ## TOC
14
+
15
+ - [コアコンポーネント: `<Lism>`](#コアコンポーネント-lism)
16
+ - [Lism Props](#lism-props)
17
+ - [セマンティックコンポーネント](#セマンティックコンポーネント)
18
+ - [レイアウトコンポーネント(Layout Modules)](#レイアウトコンポーネントlayout-modules)
19
+ - [ステートコンポーネント(State Modules)](#ステートコンポーネントstate-modules)
20
+ - [アトミックコンポーネント(Atomic Modules)](#アトミックコンポーネントatomic-modules)
21
+ - [Layout 優先の原則](#layout-優先の原則-layout-isstate-vs-state-layout)
22
+ - [`getLismProps()`](#getlismprops--外部コンポーネントとの連携)
23
+
24
+ [詳細](https://lism-css.com/docs/components/)
25
+
26
+ ---
27
+
28
+ ## コアコンポーネント: `<Lism>`
29
+
30
+ `Lism` はすべてのコンポーネントの基盤です。Lism Props を受け取り、CSS クラスとインラインスタイルに変換して HTML を出力します。
31
+
32
+ ```jsx
33
+ <Lism p="20" fz="l" c="brand">コンテンツ</Lism>
34
+ // → <div class="-p:20 -fz:l -c:brand">コンテンツ</div>
35
+ ```
36
+
37
+
38
+ ## Lism Props
39
+
40
+ ソース: [props.ts](https://github.com/lism-css/lism-css/blob/main/packages/lism-css/config/defaults/props.ts)
41
+
42
+ `<Lism>` で受け取れる Lism CSS 専用プロパティを **Lism Props** と呼びます。
43
+
44
+
45
+ ### 共通 Props
46
+
47
+ すべての Lism コンポーネントで使えるプロップスです。
48
+
49
+ | Prop | 説明 | 例 |
50
+ |------|------|-----|
51
+ | `as` | レンダリングする HTML 要素または外部コンポーネントを指定(デフォルト: `'div'`) | `as="section"`, `as={Image}` |
52
+ | `lismClass` | コンポーネントの主要クラス名を指定。出力順序が高めになる | `lismClass='c--myComponent'` |
53
+ | `variant` | `lismClass` に対するバリエーションクラスを出力 | `variant='secondary'` |
54
+ | `layout` | レイアウトモジュールを指定し `l--{layout}` クラスを出力 | `layout='flow'` |
55
+ | `exProps` | Lism Props処理をスキップして外部コンポーネントに直接渡す属性のオブジェクト | `exProps={{ size: '1em' }}` |
56
+
57
+ ```jsx
58
+ // as で HTML 要素を指定
59
+ <Lism as="section" p="30">...</Lism>
60
+ // → <section class="-p:30">...</section>
61
+
62
+ // as で外部コンポーネントを指定
63
+ <Media as={Image} src="..." p="20" bd />
64
+ // → Image コンポーネントに { className: '-p:20 -bd' } が渡される
65
+
66
+ // lismClass でコンポーネントクラスを付与
67
+ <Lism lismClass="c--myComponent" p="10">...</Lism>
68
+ // → <div class="c--myComponent -p:10">...</div>
69
+
70
+ // variant でバリエーション
71
+ <Lism lismClass="c--myComponent" variant="secondary">...</Lism>
72
+ // → <div class="c--myComponent c--myComponent--secondary">...</div>
73
+
74
+ // exProps で外部コンポーネント用プロパティを明示的に分離
75
+ <Icon as={HogeIcon} exProps={{ size: "1em" }} p="10" fz="l">...</Icon>
76
+ // → p, fz は Lism が処理、size は HogeIcon に直接渡される
77
+ ```
78
+
79
+
80
+ ### CSS Props
81
+
82
+ 主要な CSS プロパティに対して省略記法(Shorthand)で指定できます。値に応じて **Property Class**(`-{prop}:{value}`)やインラインスタイルに変換されます。
83
+
84
+ 各プロパティで受け付けるトークン値・プリセット値の詳細は [property-class.md](./property-class.md) を参照。
85
+ もしくは、[定義ファイルの`props.ts`](https://github.com/lism-css/lism-css/blob/main/packages/lism-css/config/defaults/props.ts) を読んでください。
86
+
87
+ `prop={value}`で指定した値(`value`)によって、基本的な出力は以下のように分類されます。
88
+
89
+ | 値 | 出力形式 | 例 |
90
+ |------|------|-----|
91
+ | トークン値・プリセット値 | `-{prop}:{value}` クラスのみ | `fz='l'` → `class="-fz:l"` |
92
+ | `true` または `"-"` | `-{prop}` クラスのみ(変数なし) | `bd` / `bd='-'` → `class="-bd"` |
93
+ | `:` で始まる値 | 強制的にユーティリティクラス化 | `p=':hoge'` → `class="-p:hoge"` |
94
+ | その他の値(レスポンシブ対応プロパティ) | `-{prop}` + `--{prop}` | `fz='20px'` → `class="-fz"` + `style="--fz:20px"` |
95
+ | その他の値(レスポンシブ非対応プロパティ) | `style` 属性に直接出力 | `o='0.7'` → `style="opacity:0.7"` |
96
+ | その他の値(変数プロパティ) | `--{prop}` | `bdw='2px'` → `style="--bdw:2px"` (`border-width`としては出力されない) |
97
+ | レスポンシブ指定値 | 上記いずれかのベース出力 + `-{prop}_{bp}` + `--{prop}_{bp}` | `p={[10,20]}` → `class="-p:10 -p_sm"` + `style="--p_sm:var(--s20)"`|
98
+
99
+ 補足:
100
+ - **レスポンシブ対応プロパティ**かどうかは、 `props.ts`で`bp: 1`がセットされているかどうかで分かります。
101
+ - **変数プロパティ**とは、`bds`, `bdc`, `bdw`, `keycolor`, `cols`, `rows`といった一部のプロパティ(`props.ts`で`isVar`がセットされているもの)のこと。これらはCSSプロパティがそのままstyle属性に出力されることはなく、常にCSS 変数(`--{prop}`)が使用されます。
102
+
103
+
104
+
105
+ ```jsx
106
+ // トークン値 → クラスのみ
107
+ <Lism fz='l' p='20'>...</Lism>
108
+ // 出力 → <div class="-fz:l -p:20">...</div>
109
+
110
+ // カラートークン(クラス化されていない場合)→ クラス + CSS変数
111
+ <Lism c='red'>...</Lism>
112
+ // 出力 → <div class="-c" style="--c:var(--red)">...</div>
113
+
114
+ // CSS変数のみ出力される特殊パターン
115
+ <Lism bd bdc="#000" bdw="2px">...</Lism>
116
+ // 出力 → <div class="-bd" style="--bdc:#000;--bdw:2px">...</div>
117
+
118
+ // `-` でクラスだけ出力(変数は親から継承したい場合などに使う)
119
+ <Lism p='-' bdrs>...</Lism>
120
+ // 出力 → <div class="-p -bdrs">...</div>
121
+
122
+ // `:` で強制ユーティリティクラス化
123
+ <Lism p=':hoge'>...</Lism>
124
+ // 出力 → <div class="-p:hoge">...</div>
125
+
126
+ // カスタム値(BP対応プロパティ) → クラス + CSS変数
127
+ <Lism fz='20px'>...</Lism>
128
+ // 出力 → <div class="-fz" style="--fz:20px">...</div>
129
+
130
+ // カスタム値(BP非対応プロパティ)→ style属性にプロパティ直書き
131
+ <Lism o='0.7'>...</Lism>
132
+ // 出力 → <div style="opacity:0.7">...</div>
133
+ ```
134
+
135
+
136
+ #### レスポンシブ指定
137
+
138
+ レスポンシブ対応プロパティは、配列またはオブジェクトでブレイクポイント(`sm`,`md`)ごとの値を指定できます。(`lg`は要カスタマイズ)
139
+
140
+
141
+ ```jsx
142
+ // 配列(base → sm → md の順)
143
+ <Lism p={['20', '30', '40']}>...</Lism>
144
+ // <div class="-p:20 -p_sm -p_md" style="--p_sm:var(--s30);--p_md:var(--s40)">...</div>
145
+
146
+ // 途中のBPをスキップ(smを飛ばしてmd のみ指定)
147
+ <Lism p={['20', null, '40']}>...</Lism>
148
+ // → <div class="-p_md" style="--p_md:var(--s40)">...</div>
149
+ ```
150
+
151
+ デフォルトで**コンテナクエリ**を採用しているため、先祖にコンテナ要素(`is--container`が出力される`<Container>`または`isContainer`の指定)が必要です。
152
+
153
+
154
+ ### State Props
155
+
156
+ State Modules クラス(`is--*` / `set--*`)を出力するためのプロパティ群です。
157
+
158
+ | Prop | 出力クラス | 用途 |
159
+ |------|-----------|------|
160
+ | `isWrapper(='{s\|l}')` | `is--wrapper` + `-contentSize:{s\|l}` | コンテンツ幅制限 |
161
+ | `isLayer` | `is--layer` | 絶対配置レイヤー(inset:0) |
162
+ | `isLinkBox` | `is--linkBox` | ボックス全体リンク化 |
163
+ | `isContainer` | `is--container` | コンテナクエリ対象 |
164
+ | `isSide` | `is--side` | サイド要素 |
165
+ | `isSkipFlow` | `is--skipFlow` | Flow 余白をスキップ |
166
+ | `isVertical` | `is--vertical` | 縦書き方向 |
167
+ | `set="gutter"` | `set--gutter` | 左右ガター余白 |
168
+ | `set="shadow"` | `set--shadow` | シャドウ付与 |
169
+ | `set="hov"` | `set--hov` | ホバー効果 |
170
+ | `set="transition"` | `set--transition` | トランジション |
171
+ | `set="plain"` | `set--plain` | プレーン状態 |
172
+
173
+ ```jsx
174
+ // State Props の使用例
175
+ <Stack isLayer>背景レイヤー</Stack>
176
+ // → <div class="l--stack is--layer">...</div>
177
+
178
+ <Flex isWrapper="l">コンテンツ</Flex>
179
+ // → <div class="l--flex is--wrapper -contentSize:l">...</div>
180
+ ```
181
+
182
+
183
+ ## セマンティックコンポーネント
184
+
185
+ `Lism` の `as` エイリアスとして機能するコンポーネント群です。layout クラスは付与されず、HTML のセマンティクスを表現するために使います。
186
+
187
+ | コンポーネント | デフォルト要素 | 許容タグ |
188
+ |-------------|-------------|---------|
189
+ | `<Text>` | `<p>` | `p`, `div`, `blockquote`, `address`, `figcaption`, `pre` |
190
+ | `<Heading>` | `<h2>` | `h1`〜`h6`(`level` prop で指定) |
191
+ | `<Inline>` | `<span>` | `span`, `em`, `strong`, `small`, `code`, `time`, `i`, `b`, `mark`, `abbr`, `cite`, `kbd` |
192
+ | `<Group>` | `<div>` | `div`, `section`, `article`, `figure`, `nav`, `aside`, `header`, `footer`, `main`, `fieldset`, `hgroup` |
193
+ | `<List>` | `<ul>` | `ul`, `ol`, `dl` |
194
+ | `<Link>` | `<a>`(固定) | — |
195
+ | `<Media>` | `<img>` | `img`, `video`, `iframe`, `picture` |
196
+
197
+ ```jsx
198
+ <Heading level="3" fz="xl">見出し</Heading>
199
+ // → <h3 class="-fz:xl">見出し</h3>
200
+
201
+ <Text as="blockquote" p="30">引用文</Text>
202
+ // → <blockquote class="-p:30">引用文</blockquote>
203
+
204
+ <Group as="section" p="40">
205
+ <Text>本文</Text>
206
+ </Group>
207
+ ```
208
+
209
+ ### `<HTML>` コンポーネント
210
+
211
+ 任意の HTML タグを直接レンダリングするためのコンポーネント。セマンティックコンポーネントがカバーしない要素に使います。
212
+
213
+
214
+ ## レイアウトコンポーネント(Layout Modules)
215
+
216
+ レイアウト構造を定義するメインのコンポーネント群です。内部で `layout` prop が固定されており、対応する `l--{layout}` クラスが自動で出力されます。
217
+
218
+ | コンポーネント | layout | 出力クラス | 用途 |
219
+ |-------------|--------|-----------|------|
220
+ | `<Box>` | `box` | `l--box` | 汎用ボックス |
221
+ | `<Flex>` | `flex` | `l--flex` | Flexbox(横方向) |
222
+ | `<Stack>` | `stack` | `l--stack` | 縦積み(flex-direction: column) |
223
+ | `<Cluster>` | `cluster` | `l--cluster` | 折り返し Flex(flex-wrap) |
224
+ | `<Grid>` | `grid` | `l--grid` | CSS Grid |
225
+ | `<Flow>` | `flow` | `l--flow` | フローコンテンツ(子要素間に余白) |
226
+ | `<Center>` | `center` | `l--center` | 中央配置 |
227
+ | `<Frame>` | `frame` | `l--frame` | アスペクト比フレーム |
228
+ | `<Columns>` | `columns` | `l--columns` | CSS columns |
229
+ | `<TileGrid>` | `tileGrid` | `l--tileGrid` | 均等タイルグリッド(cols x rows) |
230
+ | `<FluidCols>` | `fluidCols` | `l--fluidCols` | auto-fill/auto-fit グリッド |
231
+ | `<SwitchCols>` | `switchCols` | `l--switchCols` | レスポンシブカラム切り替え |
232
+ | `<SideMain>` | `sideMain` | `l--sideMain` | サイド+メインの2カラム |
233
+
234
+ ### レイアウト固有の Props
235
+
236
+ 一部のレイアウトコンポーネントには専用の props があります。
237
+
238
+ ```jsx
239
+ // Grid: template 系 props
240
+ <Grid gtc="1fr 1fr" gtr="auto">...</Grid>
241
+
242
+ // TileGrid: 均等タイルグリッド
243
+ <TileGrid cols="3" rows="2" g="20">...</TileGrid>
244
+
245
+ // SwitchCols: 切り替えブレークポイント
246
+ <SwitchCols breakSize="480px">...</SwitchCols>
247
+
248
+ // SideMain: サイド幅とメイン幅
249
+ <SideMain sideW="200px" mainW="1fr">...</SideMain>
250
+
251
+ // FluidCols: auto-fill モード
252
+ <FluidCols autoFill>...</FluidCols>
253
+
254
+ // Flow: 子要素間の余白
255
+ <Flow flow="30">...</Flow>
256
+ ```
257
+
258
+
259
+ ## ステートコンポーネント(State Modules)
260
+
261
+ 要素に構造的な振る舞い(状態)を付与するコンポーネント群です。内部で `is--` クラスを出力します。
262
+
263
+ | コンポーネント | 内部の state | 出力クラス | 用途 |
264
+ |-------------|------------|-----------|------|
265
+ | `<Container>` | `isContainer` + `isWrapper` | `is--container is--wrapper` | コンテナクエリ対象 + 幅制限 |
266
+ | `<Wrapper>` | `isWrapper` | `is--wrapper` | コンテンツ幅制限 |
267
+ | `<Layer>` | `isLayer` | `is--layer` | 絶対配置レイヤー(inset: 0) |
268
+ | `<LinkBox>` | `isLinkBox` | `is--linkBox` | ボックス全体リンク化 |
269
+
270
+ ```jsx
271
+ <Container size="l">...</Container>
272
+ // → <div class="is--container is--wrapper -contentSize:l">...</div>
273
+
274
+ <Wrapper contentSize="s">...</Wrapper>
275
+ // → <div class="is--wrapper -contentSize:s">...</div>
276
+ ```
277
+
278
+
279
+ ## アトミックコンポーネント(Atomic Modules)
280
+
281
+ 特定の役割を持つ単機能コンポーネントです。
282
+
283
+ | コンポーネント | 出力クラス | 用途 |
284
+ |-------------|-----------|------|
285
+ | `<Icon>` | `a--icon` | SVG アイコン・アイコンフォント |
286
+ | `<Spacer>` | `a--spacer` | 空白要素 |
287
+ | `<Divider>` | `a--divider` | 区切り線 |
288
+ | `<Decorator>` | `a--decorator` | 装飾要素(SCSS定義なし、クラス名のみ出力) |
289
+
290
+ ```jsx
291
+ <Icon as={LucideArrowRight} fz="xl" />
292
+ <Media as="img" src="/image.jpg" alt="説明" ar="16/9" />
293
+ ```
294
+
295
+
296
+ ## Layout 優先の原則: `<Layout isState>` vs `<State layout="...">`
297
+
298
+ レイアウトとステートの両方の性質を持つ場合、以下の2つの書き方で同じ出力が得られます。
299
+
300
+ ```jsx
301
+ // 方法A: レイアウトコンポーネント + is-- prop(推奨)
302
+ <Stack isLayer>...</Stack>
303
+ // → <div class="l--stack is--layer">...</div>
304
+
305
+ // 方法B: Lism で layout を指定
306
+ <Lism layout="stack" isLayer>...</Lism>
307
+ // → <div class="l--stack is--layer">...</div>
308
+ ```
309
+
310
+ **`<Layout isState>` の形式で書いてください(Layout 優先)。** レイアウトコンポーネントを軸にして、ステートを付加する書き方がコードの意図を明確にします。
311
+
312
+ ```jsx
313
+ // OK: Layout 優先
314
+ <Stack isLayer>背景レイヤー</Stack>
315
+ <Flex isWrapper="l">コンテンツ</Flex>
316
+ <Grid isContainer>グリッド</Grid>
317
+
318
+ // NG: State 優先(避ける)
319
+ <Layer layout="stack">背景レイヤー</Layer>
320
+ <Wrapper layout="flex">コンテンツ</Wrapper>
321
+ ```
322
+
323
+
324
+ ## `getLismProps()` — 外部コンポーネントとの連携
325
+
326
+ なんらかの理由で`as`に外部コンポーネントを渡せない場合、`getLismProps()` を使うことでも `<Lism>`が処理できるプロパティ群を `className` と `style` に変換することができます。
327
+
328
+ ```jsx
329
+ import getLismProps from 'lism-css/lib/getLismProps';
330
+
331
+ function MyComponent({ children }) {
332
+ // Lism Props を getLismProps() で 変換
333
+ const lismProps = getLismProps({ p: '20', fz: 'l', c: 'red' });
334
+ // → { className: '-p:20 -fz:l -c', style: {'--c': 'var(--red)'} }
335
+
336
+ return <div {...lismProps}>{children}</div>;
337
+ }
338
+ ```