@lism-css/mcp 0.12.0 → 0.13.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 (43) hide show
  1. package/README.ja.md +1 -1
  2. package/dist/data/docs-index.json +202 -151
  3. package/dist/data/guides/SKILL.md +95 -54
  4. package/dist/data/guides/base-styles.md +2 -2
  5. package/dist/data/guides/components-core.md +84 -130
  6. package/dist/data/guides/components-ui.md +3 -3
  7. package/dist/data/guides/css-rules.md +41 -21
  8. package/dist/data/guides/primitive-class.md +148 -0
  9. package/dist/data/guides/primitives/a--decorator.md +45 -0
  10. package/dist/data/guides/primitives/a--divider.md +69 -0
  11. package/dist/data/guides/primitives/a--icon.md +105 -0
  12. package/dist/data/guides/primitives/a--spacer.md +63 -0
  13. package/dist/data/guides/primitives/is--boxLink.md +97 -0
  14. package/dist/data/guides/primitives/is--container.md +46 -0
  15. package/dist/data/guides/primitives/is--layer.md +71 -0
  16. package/dist/data/guides/primitives/is--vertical.md +52 -0
  17. package/dist/data/guides/primitives/is--wrapper.md +87 -0
  18. package/dist/data/guides/primitives/l--box.md +31 -0
  19. package/dist/data/guides/primitives/l--center.md +55 -0
  20. package/dist/data/guides/primitives/l--cluster.md +38 -0
  21. package/dist/data/guides/primitives/l--columns.md +72 -0
  22. package/dist/data/guides/primitives/l--flex.md +74 -0
  23. package/dist/data/guides/primitives/l--flow.md +134 -0
  24. package/dist/data/guides/primitives/l--fluidCols.md +68 -0
  25. package/dist/data/guides/primitives/l--frame.md +94 -0
  26. package/dist/data/guides/primitives/l--grid.md +68 -0
  27. package/dist/data/guides/primitives/l--sideMain.md +102 -0
  28. package/dist/data/guides/primitives/l--stack.md +56 -0
  29. package/dist/data/guides/primitives/l--switchCols.md +69 -0
  30. package/dist/data/guides/primitives/l--tileGrid.md +61 -0
  31. package/dist/data/guides/property-class.md +6 -5
  32. package/dist/data/guides/set-class.md +11 -9
  33. package/dist/data/guides/tokens.md +18 -0
  34. package/dist/data/guides/utility-class.md +9 -8
  35. package/dist/data/meta.js +2 -2
  36. package/dist/lib/load-markdown.d.ts +3 -2
  37. package/dist/lib/load-markdown.js +23 -5
  38. package/dist/lib/search.js +20 -1
  39. package/dist/tools/get-component.js +119 -30
  40. package/dist/tools/get-guide.js +1 -1
  41. package/dist/tools/search-docs.js +1 -1
  42. package/package.json +1 -1
  43. package/dist/data/guides/module-class.md +0 -162
@@ -20,11 +20,11 @@ Lism CSS は CSS Layers による詳細度管理を採用しています。
20
20
  Settings(トークン定義)
21
21
  → @layer lism-base(Reset CSS・トークン・.set--クラス)
22
22
  → @layer reset(リセットCSS)
23
- → @layer lism-modules
24
- → @layer state(.is-- ステートモジュール)
25
- → @layer layout(.l-- レイアウトモジュール)
26
- → @layer atomic(.a-- アトミックモジュール)
27
- .c-- sublayer なし(lism-modules 直下、または lism-custom で定義)
23
+ → @layer lism-primitive
24
+ → @layer trait(.is-- Trait Primitive)
25
+ → @layer layout(.l-- Layout Primitive)
26
+ → @layer atomic(.a-- Atomic Primitive)
27
+ @layer lism-component(.c-- Component Class BEM 構造を持つ UI 部品)
28
28
  → @layer lism-custom(ユーザーカスタマイズ用)
29
29
  → @layer lism-utility(.u-- ユーティリティクラス)
30
30
  → Property Class(レイヤー外 — 最も詳細度が高い)
@@ -33,46 +33,66 @@ Settings(トークン定義)
33
33
 
34
34
  ## 命名規則とプレフィックス
35
35
 
36
- [詳細](https://lism-css.com/docs/module-class/)
36
+ [詳細](https://lism-css.com/docs/primitives/)
37
37
 
38
38
  クラス名のプレフィックスによって、役割とレイヤーの所属が決まります。
39
39
 
40
40
  | プレフィックス | レイヤー | 役割 | 例 |
41
41
  |--------------|---------|------|-----|
42
42
  | `.set--` | lism-base | ベーススタイル上書き・トークン再定義 | `.set--plain`, `.set--transition` |
43
- | `.is--` | lism-modules | 付け外し可能な状態モジュール | `.is--container`, `.is--wrapper` |
44
- | `.l--` | lism-modules | レイアウト構成モジュール | `.l--grid`, `.l--flex`, `.l--stack` |
45
- | `.a--` | lism-modules | レイアウト最小単位モジュール | `.a--icon`, `.a--divider` |
46
- | `.c--` | lism-modules | 具体的な役割のコンポーネント | `.c--button`, `.c--accordion` |
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
47
  | `.u--` | lism-utility | 用途が明確なユーティリティ | `.u--cbox`, `.u--trim` |
48
48
  | `.-` | レイヤー外 | 単一プロパティ制御(Property Class) | `.-fz:l`, `.-p:20`, `.-d:none` |
49
49
 
50
50
  **併用ルール:**
51
51
  - `.l--` と `.c--` は併用OK(例: `<div class="l--flex c--nav">`)
52
- - 同カテゴリ内の併用は不可(例: `.l--flex` と `.l--grid` は同要素に付けない)
53
- - バリエーション: `.c--button.c--button--outline`
54
- - 子要素: `.c--card_header`, `.c--card_body`
52
+ - 同カテゴリ内の Primitive 併用は不可(例: `.l--flex` と `.l--grid`、`.a--icon` と `.a--divider` は同要素に付けない)
53
+ - `.l--` × `.a--` は非推奨(役割的に同居しない想定)
54
+ - `.is--` 同士は併用OK(Trait は複数併用できる)
55
+ - `.is--` × `.l--` / `.a--` も併用OK
56
+ - `c--` の Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし以下は許容:
57
+ - Block と自身の Modifier: `.c--button.c--button--outline`
58
+ - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
59
+ - 子要素: `.c--card_header`, `.c--card_body`(`c--` のみ Element を持つ。`_` 一つ区切り)
55
60
 
56
61
  **記述順序:**
57
- class 属性にクラスを直接記述する場合、Property Class(`-` プレフィックス)はモジュールクラスやユーティリティクラスの**後ろ**に書いてください。
62
+ class 属性にクラスを直接記述する場合は、以下の順序で並べてください。粒度の大きい(塊としての役割を持つ)クラスから、粒度の小さい(単一プロパティ制御)クラスの順です。
63
+
64
+ ```
65
+ [customClass] [c--/a--] [l--] [is--*] [set--*] [u--*] [Property Class...]
66
+ ```
67
+
68
+ | # | 区分 | 例 |
69
+ |---|---|---|
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` |
58
77
 
59
78
  ```html
60
- <!-- OK: モジュールクラス → Property Class -->
61
- <div class="l--flex c--nav -p:20 -g:20">...</div>
62
- <div class="l--box u--cbox -bd -p:20">...</div>
79
+ <!-- OK -->
80
+ <div class="c--nav l--flex -p:20 -g:20">...</div>
63
81
 
64
82
  <!-- NG: Property Class が先 -->
65
83
  <div class="-p:20 -g:20 l--flex c--nav">...</div>
66
84
  ```
67
85
 
86
+ なお、`class` 属性内の並び順は CSS の適用結果(詳細度・カスケード順)には影響しません。この順序はあくまで可読性と一貫性のための整理です。
87
+
68
88
 
69
89
  ## カスタムCSS を追加する場合
70
90
 
71
91
  独自のスタイルを追加する場合は、対象に合った Lism の CSS Layer 内に記述してください。
72
92
 
73
93
  ```css
74
- /* カスタムコンポーネント → lism-modules に追加 */
75
- @layer lism-modules {
94
+ /* カスタムコンポーネント → lism-component に追加 */
95
+ @layer lism-component {
76
96
  .c--my-card {
77
97
  border: 1px solid var(--brand);
78
98
  border-radius: var(--bdrs--20);
@@ -137,8 +157,8 @@ Lism のトークン変数のカスタマイズやベーススタイルの上書
137
157
  - `.astro` ファイル: `import` するか、コンポーネントファイル内の `<style>` タグに記述
138
158
 
139
159
  ```css
140
- /* コンポーネント用CSS は lism-modules 内に定義する */
141
- @layer lism-modules {
160
+ /* コンポーネント用CSS は lism-component 内に定義する */
161
+ @layer lism-component {
142
162
  .c--yourComponent {
143
163
  ...
144
164
  }
@@ -0,0 +1,148 @@
1
+ # Primitive クラス
2
+
3
+ Lism CSS では、レイアウトを組み立てる小さな積み木として **Primitive クラス**(`is--` / `l--` / `a--`)を提供します。これらはすべて `@layer lism-primitive` に属します(サブレイヤーは `trait` / `layout` / `atomic`)。
4
+
5
+ 具体的な UI 部品は **Component クラス**(`c--`)として `@layer lism-component` に配置されますが、コアの `lism-css` には含まれず、`@lism-css/ui` パッケージやユーザー定義として提供されます。
6
+
7
+ ## TOC
8
+
9
+ - [プレフィックス一覧](#プレフィックス一覧)
10
+ - [Trait Primitive(`is--`)](#trait-primitiveis--)
11
+ - [Layout Primitive(`l--`)](#layout-primitivel--)
12
+ - [Atomic Primitive(`a--`)](#atomic-primitivea--)
13
+ - [Component(`c--`)](#componentc--)
14
+
15
+ [詳細](https://lism-css.com/docs/primitives/)
16
+
17
+ ---
18
+
19
+ ## プレフィックス一覧
20
+
21
+ | プレフィックス | 種類 | サブレイヤー | 役割 |
22
+ |--------------|------|------------|------|
23
+ | `is--` | Trait Primitive | `lism-primitive.trait` | 要素に静的な構造的特性を付与する汎用クラス |
24
+ | `l--` | Layout Primitive | `lism-primitive.layout` | レイアウトの構成単位となる Primitive |
25
+ | `a--` | Atomic Primitive | `lism-primitive.atomic` | レイアウトの最小単位(アイコン・区切り線等) |
26
+ | `c--` | Component | `lism-component` | BEM 構造を持つ具体的な UI 部品 |
27
+
28
+ **併用ルール:**
29
+ - `is--` は他のすべての Primitive / Component と併用可能(複数の `is--` 同士もOK)
30
+ - `l--` と `c--` は併用可能(例: `class="l--flex c--nav"`)
31
+ - 同カテゴリ内の併用は不可(例: `l--flex` と `l--grid` は同要素に付けない)
32
+ - `c--` のみ Modifier との併記が可能(`.c--button.c--button--outline`)
33
+
34
+
35
+ ## Trait Primitive(`is--`)
36
+
37
+ [詳細](https://lism-css.com/docs/primitives/#trait-primitives)
38
+
39
+ 要素に**静的な構造的特性 (trait)** を付与するクラスです。他の Primitive / Component と自由に組み合わせられます。
40
+
41
+ | クラス | 用途 |
42
+ |--------|------|
43
+ | `is--container` | コンテナクエリの基準要素を定義する(`container-type: inline-size`を付与する)。Lism のレスポンシブ機能の判定基準となるラッパーに付与する |
44
+ | `is--wrapper` | 直下の子要素のコンテンツ幅を一括で制限する。`-contentSize:s` / `-contentSize:l` で事前定義したプリセットサイズを指定可能(デフォルト: `--sz--m`)。セクション・ヘッダー・フッター・記事コンテンツなどで、共通したコンテンツ幅を使用する |
45
+ | `is--layer` | 親要素全体に被さる絶対配置レイヤー(`position: absolute; inset: 0;`)。背景画像・カラーオーバーレイ・フィルターレイヤー・コンテンツ等を重ねて表示する |
46
+ | `is--boxLink` | ボックス全体をクリッカブルなリンク領域にする。自身を`a`タグにして利用するか、もしくは自身を`div`にして内部の`a`タグに`is--coverLink`を付与して使う |
47
+ | `is--coverLink` | 親要素全体に被さるクリック領域を持つリンク(`::before` を `inset: 0` で広げる)。`is--boxLink` と併用する |
48
+ | `is--vertical` | 縦書きモードを定義する(`writing-mode: var(--vertical-mode)`) |
49
+ | `is--skipFlow` | `l--flow` 直下で使用し、次の兄弟要素のフロー余白をゼロにする。`l--flow`の中にあるが`position:absolute`にしたい要素などに使用する |
50
+ | `is--side` | `l--sideMain` 直下で使用し、サイド側の要素であることを示す |
51
+
52
+ Lism コンポーネントでは `isContainer`, `isLayer` 等の Props として利用できます。
53
+
54
+
55
+ ## Layout Primitive(`l--`)
56
+
57
+ レイアウト構造を定義するメインの Primitive 群です。
58
+
59
+ | クラス | 用途 |
60
+ |--------|-------------|
61
+ | `l--box` | 汎用ボックス |
62
+ | `l--flex` | 横方向の基本的なFlexboxレイアウト |
63
+ | `l--stack` | 縦方向の縦積みFlexboxレイアウト(`flex-direction: column`)。 |
64
+ | `l--cluster` | タグの表示UIなど、複数要素を水平に並べて配置し、数が多ければ折り返すようなレイアウト。(`flex-wrap: wrap; align-items: center`) |
65
+ | `l--grid` | 基本的なGridレイアウト。 |
66
+ | `l--center` | 要素を縦横中央に配置するレイアウト(`place-content: center; place-items: center`) |
67
+ | `l--flow` | 記事コンテンツなどのフローレイアウト。子要素間の余白を `margin-block-start` で管理する。 |
68
+ | `l--frame` | アスペクト比や高さが固定されたメディア要素を配置する。直下のメディア要素に `object-fit: cover` を付与する。 |
69
+ | `l--columns` | `repeat`と`minmax(0, 1fr))`を使ったカラムレイアウト。レスポンシブ対応の`--cols`用のProperty Classでカラム数の切り替え可能。 |
70
+ | `l--tileGrid` | `--cols`だけではなく`--rows`も組み合わせた均等タイルグリッド(`grid-template: repeat(var(--rows,1), minmax(0, 1fr)) / repeat(var(--cols,1), minmax(0, 1fr))`) |
71
+ | `l--fluidCols` | ブレイクポイントに依存せず、自動段組のできる流動カラムレイアウト。`--cols: 16em`のようにして最小維持幅を指定できる。 |
72
+ | `l--sideMain` | 画像とコンテンツ、メインエリアとサイドバーなどの「"Side" + "Main"」に分かれ、横並びと縦並びが切り替わるレイアウト。"Main"が`--mainW`で指定したサイズ以上の横幅を維持できる範囲内で横並びを維持し、下回る場合は縦並びへ自動で切り替わる。横並びの間の"Side"の横幅は`--sideW`で指定する。 |
73
+ | `l--switchCols` | 任意のサイズで一括カラム切り替えができるカラムレイアウト。`--breakSize` で制御 |
74
+
75
+ それぞれ対応するLismコンポーネント(`<Flex>`, `<Stack>`, `<Cluster>` 等)があります。
76
+
77
+
78
+ ## Atomic Primitive(`a--`)
79
+
80
+ レイアウト構成物の最小単位となる Primitive です。
81
+
82
+ | クラス | 用途 |
83
+ |--------|------|
84
+ | `a--icon` | SVG アイコン。`flex-shrink: 0`, デフォルトサイズ `1em` |
85
+ | `a--divider` | 区切り線。`--bdc`, `--bds`, `--bdw` 変数でカスタマイズ |
86
+ | `a--spacer` | 空白要素(`min-height: 1px; min-width: 1px`) |
87
+ | `a--decorator` | 装飾用要素(SCSS定義なし、クラス名のみ出力) |
88
+
89
+ それぞれ対応するコンポーネント(`<Icon>`, `<Divider>`, `<Spacer>`, `<Decorator>`)があります。
90
+
91
+
92
+ ## Component(`c--`)
93
+
94
+ `c--` プレフィックスで定義する **Component クラス** は、Primitive を組み合わせて作られた具体的な UI 部品です。`@layer lism-component` に配置され、コアの `lism-css` には含まれず、`@lism-css/ui` パッケージやユーザー定義として提供されます。
95
+
96
+ `c--` クラスは BEM 構造(Block / Modifier / Element)を持つことができ、それぞれ次の形式で定義します。
97
+
98
+ | 分類 | 形式 | 例 |
99
+ |---|---|---|
100
+ | Block | `.c--{name}` | `.c--button`, `.c--card` |
101
+ | Modifier | `.c--{name}--{modifier}` | `.c--button--outline` |
102
+ | Element | `.c--{name}_{element}` | `.c--card_header`, `.c--card_body` |
103
+
104
+ - Modifier は Block と併記して使用: `.c--button.c--button--outline`
105
+ - Element は `_`(アンダースコア)一つ区切り
106
+ - Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
107
+ - Block と自身の Modifier: `.c--xxx.c--xxx--variant`
108
+ - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
109
+
110
+ `c--`を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`.l--`, `is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることでCSSの記述量を削減できます。`c--`クラスにスタイルが全くなく、HTML側での可視性を高める名前付けのためだけに利用しても構いません。
111
+
112
+ ### 作成例
113
+
114
+ `l--stack` と併用する前提でのカスタムクラス例
115
+
116
+ ```css
117
+ @layer lism-component {
118
+ .c--myCard {
119
+ gap: var(--s20);
120
+ padding: var(--s30);
121
+ border-radius: var(--bdrs--20);
122
+ box-shadow: var(--bxsh--20);
123
+ border: 1px solid currentColor;
124
+ /* ... */
125
+ }
126
+ }
127
+ ```
128
+
129
+ ```html
130
+ <div class="c--myCard l--stack">
131
+ ...
132
+ </div>
133
+ ```
134
+
135
+ 素のHTMLサイトではこのように`c--`クラスにCSSを書いてスタイリングしても大丈夫ですが、Reactなどでコンポーネントを作成できる場合は、特別な理由がない限りProperty Classを活用してください。
136
+
137
+ ```jsx
138
+ export default function MyCard(props) {
139
+ return <Stack lismClass="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
140
+ }
141
+ ```
142
+ ```css
143
+ @layer lism-component {
144
+ .c--myCard {
145
+ /* 複雑なスタイルあれば css で書く */
146
+ }
147
+ }
148
+ ```
@@ -0,0 +1,45 @@
1
+ # a--decorator / `<Decorator>`
2
+
3
+ コンテンツを装飾するための空要素として使うクラス。`<Decorator>` はデフォルトで `aria-hidden="true"` が付与されます。
4
+
5
+ ## 基本情報
6
+
7
+ - クラス名: `a--decorator`
8
+ - コンポーネント: `<Decorator>`
9
+ - ドキュメント(人間向け): https://lism-css.com/docs/primitives/a--decorator/
10
+
11
+ ## 専用Props
12
+
13
+ | Prop | 説明 |
14
+ |------|------|
15
+ | `size` | デコレーターのサイズを一括指定。この指定があると `w`(`width`)に値が渡され、自動で `ar="1/1"`(`aspect-ratio:1/1`)が付与される |
16
+ | `clipPath` | `style.clipPath` に渡す |
17
+ | `boxSizing` | `style.boxSizing` に渡す |
18
+
19
+ ## Usage
20
+
21
+ ### 使用例(コーナー装飾)
22
+
23
+ `pos="absolute"` と組み合わせて、親の四隅にコーナー枠を配置する例です。`bdc="current"` で文字色に追随します。
24
+
25
+ ```jsx
26
+ <Box p="30" pos="relative">
27
+ <p>本文テキスト...</p>
28
+ <Decorator size="1.25em" pos="absolute" t="0" l="0" bd-x-s bd-y-s bdc="current" />
29
+ <Decorator size="1.25em" pos="absolute" r="0" b="0" bd-x-e bd-y-e bdc="current" />
30
+ </Box>
31
+ ```
32
+
33
+ ```html
34
+ <div class="l--box -p:30 -pos:relative">
35
+ <p>本文テキスト...</p>
36
+ <div class="a--decorator -pos:absolute -t:0 -l:0 -bd-x-s -bd-y-s -bdc:current -ar:1/1 -w" style="--w:1.25em" aria-hidden="true"></div>
37
+ <div class="a--decorator -pos:absolute -r:0 -b:0 -bd-x-e -bd-y-e -bdc:current -ar:1/1 -w" style="--w:1.25em" aria-hidden="true"></div>
38
+ </div>
39
+ ```
40
+
41
+ ## 関連プリミティブ
42
+
43
+ - [a--spacer](./a--spacer.md) — 要素間スペース
44
+ - [a--divider](./a--divider.md) — 区切り線
45
+ - [is--layer](./is--layer.md) — `position: absolute` のオーバーレイ
@@ -0,0 +1,69 @@
1
+ # a--divider / `<Divider>`
2
+
3
+ コンテンツ間に区切り線を描画するクラス。`--bdc` は `var(--divider)` が初期セットされます。`<Divider>` はデフォルトで `aria-hidden="true"` が付与されます。
4
+
5
+ ## 基本情報
6
+
7
+ - クラス名: `a--divider`
8
+ - コンポーネント: `<Divider>`
9
+ - SCSSソース: https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/primitives/atomic/_divider.scss
10
+ - ドキュメント(人間向け): https://lism-css.com/docs/primitives/a--divider/
11
+
12
+ ## 専用Props
13
+
14
+ | Prop | 説明 |
15
+ |------|------|
16
+ | `bdw` / `bds` / `bdc` | 区切り線のボーダー幅 / スタイル / 色 |
17
+ | `isVertical` | 縦方向の区切り線にする(`is--vertical` クラス付与) |
18
+
19
+ ## Usage
20
+
21
+ ### 基本的な使い方
22
+
23
+ ```jsx
24
+ <Box bgc="base-2" py="40" ta="center">...Contents...</Box>
25
+ <Divider />
26
+ <Box bgc="base-2" py="40" ta="center">...Contents...</Box>
27
+ ```
28
+
29
+ ```html
30
+ <div class="l--box -bgc:base-2 -py:40 -ta:center">...Contents...</div>
31
+ <div class="a--divider" aria-hidden="true"></div>
32
+ <div class="l--box -bgc:base-2 -py:40 -ta:center">...Contents...</div>
33
+ ```
34
+
35
+ ### スタイルの変更
36
+
37
+ ```jsx
38
+ <Divider bds="dotted" bdw="4px" bdc="blue" />
39
+ ```
40
+
41
+ ```html
42
+ <div class="a--divider" aria-hidden="true" style="--bds: dotted; --bdw: 4px; --bdc: var(--blue)"></div>
43
+ ```
44
+
45
+ ### 縦方向の区切り線
46
+
47
+ `isVertical` を指定すると縦方向の区切り線になります。Flex 子要素として使うなら `aslf="stretch"` で高さいっぱいに伸ばせます。
48
+
49
+ ```jsx
50
+ <Flex ai="center" g="20">
51
+ <Box fx="1" bgc="base-2" py="40">...Contents...</Box>
52
+ <Divider isVertical bds="dashed" bdw="2px" aslf="stretch" />
53
+ <Box fx="1" bgc="base-2" py="40">...Contents...</Box>
54
+ </Flex>
55
+ ```
56
+
57
+ ```html
58
+ <div class="l--flex -g:20 -ai:center">
59
+ <div class="-fx:1 -bgc:base-2 -py:40">...Contents...</div>
60
+ <div class="a--divider is--vertical -aslf:stretch" style="--bds: dashed; --bdw: 2px" aria-hidden="true"></div>
61
+ <div class="-fx:1 -bgc:base-2 -py:40">...Contents...</div>
62
+ </div>
63
+ ```
64
+
65
+ ## 関連プリミティブ
66
+
67
+ - [a--spacer](./a--spacer.md) — 要素間のスペース確保
68
+ - [a--decorator](./a--decorator.md) — 装飾用空要素
69
+ - [a--icon](./a--icon.md) — アイコン要素
@@ -0,0 +1,105 @@
1
+ # a--icon / `<Icon>`
2
+
3
+ アイコン要素を表示するためのクラス。`flex-shrink: 0`、デフォルトサイズ `1em`。
4
+
5
+ ## 基本情報
6
+
7
+ - クラス名: `a--icon`
8
+ - コンポーネント: `<Icon>`
9
+ - SCSSソース: https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/primitives/atomic/_icon.scss
10
+ - ドキュメント(人間向け): https://lism-css.com/docs/primitives/a--icon/
11
+
12
+ ## 出力されるHTML構造
13
+
14
+ `<Icon>` は `label` の有無でアクセシビリティ属性を自動切り替えします。
15
+
16
+ ```html
17
+ <!-- label なし -->
18
+ <svg class="a--icon" aria-hidden="true">...</svg>
19
+
20
+ <!-- label あり -->
21
+ <svg class="a--icon" aria-label="..." role="img">...</svg>
22
+ ```
23
+
24
+ ## 専用Props
25
+
26
+ | Prop | 説明 |
27
+ |------|------|
28
+ | `icon` | アイコンを指定。文字列(プリセット名)・オブジェクト(`{as, ...exProps}`)のどちらでも可 |
29
+ | `size` | プリセットアイコン使用時の `width` / `height`(通常は `fz` で指定するほうが推奨) |
30
+ | `label` | `aria-label` として出力。指定があれば `role="img"`、なければ `aria-hidden="true"` |
31
+
32
+ ## Usage
33
+
34
+ `<Icon>` には**4つの使い方**があります。
35
+
36
+ ### 1. 外部パッケージのアイコンを使う(`as` + `exProps`)
37
+
38
+ `react-icons`, `@phosphor-icons/react`, `lucide-react` などのサードパーティアイコンコンポーネントを `as` で渡すと、Lism が未処理の props は自動的にそのコンポーネントに転送されます。外部コンポーネント専用の props を明示的に分離したい場合は `exProps` を使います。
39
+
40
+ ```jsx
41
+ import { SmileyIcon } from '@phosphor-icons/react';
42
+ import { Icon } from 'lism-css/react';
43
+
44
+ // 基本形
45
+ <Icon as={SmileyIcon} fz="2rem" />
46
+
47
+ // exProps で外部 props を明示的に分離
48
+ <Icon as={SmileyIcon} exProps={{ weight: 'fill', size: '3em' }} c="blue" />
49
+
50
+ // 上と同じ結果(Lism が "weight" を処理しないため最終的に SmileyIcon に渡る)
51
+ <Icon as={SmileyIcon} weight="fill" c="blue" />
52
+ ```
53
+
54
+ ### 2. `as` と `exProps` を `icon` prop に一括指定
55
+
56
+ `icon={{as: Component, ...exProps}}` の形式で、`as` と `exProps` を1つのオブジェクトとしてまとめて渡せます。アイコンを選択制にする親コンポーネントを作るときに便利です。
57
+
58
+ ```jsx
59
+ import { Home } from 'lucide-react';
60
+
61
+ <Icon icon={{ as: Home, strokeWidth: 1, size: 64 }} />
62
+
63
+ // 同じ結果(分割形式)
64
+ <Icon as={Home} exProps={{ strokeWidth: 1, size: 64 }} />
65
+ ```
66
+
67
+ ### 3. プリセットアイコンを使う
68
+
69
+ `lism-css` パッケージ内に [Phosphor Icons](https://phosphoricons.com/) ベースのプリセットアイコンが同梱されています。`icon="アイコン名"` の文字列で呼び出せます。
70
+
71
+ ```jsx
72
+ <Icon icon="menu" />
73
+ <Icon icon="lightbulb" fz="2xl" c="blue" />
74
+ <Icon icon="warning" size="40px" />
75
+ ```
76
+
77
+ プリセット一覧のエクスポート元:
78
+
79
+ ```jsx
80
+ import { phIcons, logoIcons } from 'lism-css/react/atomic/Icon/presets';
81
+ ```
82
+
83
+ ### 4. SVG の `path` を直接記述する
84
+
85
+ `viewBox` を指定すると `<svg>` 要素として出力されるため、子要素に `<path>` 等をそのまま書けます。
86
+
87
+ ```jsx
88
+ <Icon viewBox="0 0 256 256" label="Smiley icon" fz="4xl" c="blue">
89
+ <path d="M128,24A104,104,0,1,0,232,128..." />
90
+ </Icon>
91
+ ```
92
+
93
+ ### 5. `src` で画像をアイコンとして使う
94
+
95
+ `src` を指定すると `<img>` として出力されます(厳密には4パターンに加えて画像指定も可能)。
96
+
97
+ ```jsx
98
+ <Icon fz="4xl" src="/img/avatar01.jpg" alt="avatar" />
99
+ ```
100
+
101
+ ## 関連プリミティブ
102
+
103
+ - [a--divider](./a--divider.md) — 区切り線
104
+ - [a--spacer](./a--spacer.md) — 空白要素
105
+ - [a--decorator](./a--decorator.md) — 装飾用要素
@@ -0,0 +1,63 @@
1
+ # a--spacer / `<Spacer>`
2
+
3
+ 要素間のスペースを確保するクラス。`<Spacer>` はデフォルトで `aria-hidden="true"` が付与されます。
4
+
5
+ ## 基本情報
6
+
7
+ - クラス名: `a--spacer`
8
+ - コンポーネント: `<Spacer>`
9
+ - SCSSソース: https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/primitives/atomic/_spacer.scss
10
+ - ドキュメント(人間向け): https://lism-css.com/docs/primitives/a--spacer/
11
+
12
+ ## 専用Props
13
+
14
+ `<Spacer>` では **`w` / `h` に対して SPACE トークンの値**が使えます(他のコンポーネントでは SIZE トークンが優先されるため、スペースサイズを直感的に指定できる特殊対応)。
15
+
16
+ ## Usage
17
+
18
+ ### 縦方向のスペース
19
+
20
+ ```jsx
21
+ <p>Content...</p>
22
+ <Spacer h="100px" />
23
+ <p>Content...</p>
24
+ ```
25
+
26
+ ```html
27
+ <p>Content...</p>
28
+ <div class="a--spacer -h" style="--h:100px" aria-hidden="true"></div>
29
+ <p>Content...</p>
30
+ ```
31
+
32
+ ### SPACE トークンを使う
33
+
34
+ ```jsx
35
+ <p>Content...</p>
36
+ <Spacer h="60" />
37
+ <p>Content...</p>
38
+ ```
39
+
40
+ ```html
41
+ <p>Content...</p>
42
+ <div class="a--spacer -h" style="--h:var(--s60)" aria-hidden="true"></div>
43
+ <p>Content...</p>
44
+ ```
45
+
46
+ ### 横方向のスペーサー
47
+
48
+ Flex コンテナ内で `w` を指定すれば横方向のスペーサーとしても使えます。
49
+
50
+ ```jsx
51
+ <Flex g="10">
52
+ <Box p="20" bd>Box</Box>
53
+ <Spacer w="40" />
54
+ <Box p="20" bd>Box</Box>
55
+ <Box p="20" bd>Box</Box>
56
+ </Flex>
57
+ ```
58
+
59
+ ## 関連プリミティブ
60
+
61
+ - [a--divider](./a--divider.md) — 区切り線
62
+ - [a--decorator](./a--decorator.md) — 装飾用空要素
63
+ - [l--stack](./l--stack.md) — `gap` で余白を管理する縦積み
@@ -0,0 +1,97 @@
1
+ # is--boxLink / `<BoxLink>`
2
+
3
+ ボックス全体をクリック可能なリンク領域にするクラス。
4
+
5
+ ## 基本情報
6
+
7
+ - クラス名: `is--boxLink`
8
+ - コンポーネント: `<BoxLink>`
9
+ - SCSSソース: https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/primitives/trait/_boxLink.scss
10
+ - ドキュメント(人間向け): https://lism-css.com/docs/primitives/is--boxLink/
11
+
12
+ ## 専用Props
13
+
14
+ | Prop | 説明 |
15
+ |------|------|
16
+ | `href` | リンク先を指定。`href` があれば `<BoxLink>` 自体が `<a>` タグに、なければ `<div>` として出力される(**特殊挙動**) |
17
+
18
+ 通常の `<Lism>` エイリアスコンポーネントと異なり、`<BoxLink>` だけは `href` 指定の有無で出力タグが動的に切り替わります。
19
+
20
+ ## Usage
21
+
22
+ BoxLink には主に2通りの使い方があります。
23
+
24
+ ### パターン1: `<BoxLink>` 自身を `<a>` にする
25
+
26
+ `href` を指定すると `<BoxLink>` 自体が `<a>` タグとして出力されます。シンプルなカード全体リンクに最適。
27
+
28
+ ```jsx
29
+ <BoxLink href="/article/1" p="30" bgc="base" bd bdrs="30" hov="o">
30
+ <Group fz="xl" fw="bold">Heading text</Group>
31
+ <Text lh="s" my-s="15">記事の抜粋テキスト...</Text>
32
+ <Group fz="s" c="text-2" ta="right" lh="1" my-s="10">
33
+ MORE →
34
+ </Group>
35
+ </BoxLink>
36
+ ```
37
+
38
+ ```html
39
+ <a class="is--boxLink -hov:o -p:30 -bgc:base -bd -bdrs:30" href="/article/1">
40
+ <p class="-fz:xl -fw:bold">Heading text</p>
41
+ <p class="-c:text-2 -lh:s -my-s:15">記事の抜粋テキスト...</p>
42
+ <p class="-fz:s -c:text-2 -ta:right -lh:1 -my-s:10">MORE →</p>
43
+ </a>
44
+ ```
45
+
46
+ ### パターン2: `<div>` + 内部に `is--coverLink`
47
+
48
+ `<BoxLink>` は `<div>` にしたまま、内部のアンカー要素に `is--coverLink` クラスを付けてボックス全体をクリック可能にします。**BoxLink 内部にさらに別のリンクを配置したい場合はこちらを選ぶこと**。
49
+
50
+ ```jsx
51
+ <BoxLink as="section" p="30" bgc="base" bd bdrs="30" set="transition" hov="bxsh">
52
+ <Group fz="xl" fw="bold">
53
+ <Link isCoverLink href="/article/1">
54
+ Heading link text
55
+ </Link>
56
+ </Group>
57
+ <Text c="text-2" lh="s" my-s="15">記事の抜粋テキスト...</Text>
58
+ <Group my-s="10">
59
+ <a href="/tag/foo" className="-hov:o">Inner Link</a>
60
+ </Group>
61
+ </BoxLink>
62
+ ```
63
+
64
+ ```html
65
+ <div class="is--boxLink -hov:bxsh -p:30 -bgc:base -bd -bdrs:30 set--transition">
66
+ <div class="-fz:xl -fw:bold">
67
+ <a class="is--coverLink" href="/article/1">Heading link text</a>
68
+ </div>
69
+ <p class="-c:text-2 -lh:s -my-s:15">記事の抜粋テキスト...</p>
70
+ <div class="-my-s:10">
71
+ <a href="/tag/foo" class="-hov:o">Inner Link</a>
72
+ </div>
73
+ </div>
74
+ ```
75
+
76
+ ## Opt-in スタイル
77
+
78
+ ### Tabキーフォーカス時のアウトラインをボックス全体に広げる
79
+
80
+ パターン2 の場合、デフォルトでは Tab フォーカス時のアウトラインがリンクテキスト部分のみに表示されます。ボックス全体に広げたい場合は以下のCSSを追記してください。
81
+
82
+ ```css
83
+ @supports selector(:has(*)) {
84
+ .is--boxLink:has(.is--coverLink:focus-visible) {
85
+ outline: auto 1px;
86
+ outline: auto 1px -webkit-focus-ring-color;
87
+ }
88
+ .is--coverLink:focus {
89
+ outline: 0;
90
+ }
91
+ }
92
+ ```
93
+
94
+ ## 関連プリミティブ
95
+
96
+ - [is--container](./is--container.md) — コンテナクエリの基準要素
97
+ - [is--wrapper](./is--wrapper.md) — コンテンツ幅ラッパー