@lism-css/mcp 0.15.1 → 0.17.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.
@@ -280,6 +280,12 @@
280
280
  "description": "Lism CSS の各バージョンにおける変更履歴をまとめています。",
281
281
  "category": "guide",
282
282
  "headings": [
283
+ "lism-css v.0.17.0 (2026.05.09)",
284
+ "-max-sz:bleed の新設 (#360)",
285
+ "--REM 廃止と --fz--base の簡素化",
286
+ "a タグのリンク装飾スタイル廃止",
287
+ "Bug Fixes",
288
+ "lism-css v.0.16.1 (2026.04.29)",
283
289
  "lism-css v.0.16.0 (2026.04.21)",
284
290
  "`u--trimChildren` のリネームと除外方式の整理 (#324, #326)",
285
291
  "`u--collapseGrid` のリネームと `u--divide` の追加 (#323)",
@@ -313,7 +319,7 @@
313
319
  "v.0.8 (大幅な変更)"
314
320
  ],
315
321
  "keywords": ["changelog", "変更履歴", "更新", "バージョン"],
316
- "snippet": "Lism CSS の各バージョンにおける変更内容を記載。v.0.16.0 の破壊的変更として Layout Primitive 命名整理(l--sideMain → l--withSide, l--fluidCols → l--autoColumns, l--switchCols → l--switchColumns)、v.0.15.0 では u--trimChildren → u--trimAll へのリネームと除外方式整理(#324/#326)、u--collapseGrid → u--cells へのリネームと u--divide の新設(#323)、opacity トークンのセマンティック命名変更(#316)などがある。"
322
+ "snippet": "Lism CSS の各バージョンにおける変更内容を記載。v.0.17.0 の破壊的変更として -max-sz:container 廃止と -max-sz:bleed 新設(#360)、--REM 廃止と --fz--base の 1rem 統一、a タグのリンク装飾スタイル廃止など。v.0.16.0 では Layout Primitive 命名整理(l--sideMain → l--withSide, l--fluidCols → l--autoColumns, l--switchCols → l--switchColumns)、u--trimChildren → u--trimAll へのリネームと除外方式整理(#324/#326)、u--collapseGrid → u--cells へのリネームと u--divide の新設(#323)、opacity トークンのセマンティック命名変更(#316)などがある。"
317
323
  },
318
324
  {
319
325
  "sourcePath": "property-class/bd.mdx",
@@ -329,7 +335,7 @@
329
335
  "title": "-hov",
330
336
  "description": "hover時の挙動をコントロールする -hov プロパティクラスの使い方について解説します。",
331
337
  "category": "property-class",
332
- "headings": [".-hov:-{prop} の使い方", ".-hov:{preset} の使い方", ".-hov:in:{preset} の使い方", "トランジションを設定する方法"],
338
+ "headings": ["-hov:-{prop} の使い方", "-hov:{preset} の使い方", "-hov:in:{preset} の使い方", "トランジションを設定する方法"],
333
339
  "keywords": ["hover", "ホバー", "hov", "インタラクション", "animation", "set--var:hov", "has--transition", "transition"],
334
340
  "snippet": "ホバー関連のProp。-hov:-{prop} クラスでホバーエフェクトを設定。has--transition との組み合わせでアニメーション実現。set--var:hov と -hov:in:xxx クラスで親要素ホバー時の子要素スタイル制御も可能。"
335
341
  },
@@ -338,9 +344,9 @@
338
344
  "title": "-max-sz",
339
345
  "description": "コンテンツの最大幅を制御する -max-sz プロパティクラスの使い方について解説します。",
340
346
  "category": "property-class",
341
- "headings": ["-max-sz:full, -max-sz:container", "DEMOページ"],
342
- "keywords": ["max-sz", "max-inline-size", "最大サイズ", "幅", "full", "container"],
343
- "snippet": "max-sz (max-inline-size) の Prop。xs, s, m, l, xl のサイズトークンで最大幅を指定。-max-sz:full, -max-sz:container の特殊クラスも解説。"
347
+ "headings": ["full & bleed", "DEMOページ"],
348
+ "keywords": ["max-sz", "max-inline-size", "最大サイズ", "幅", "full", "bleed"],
349
+ "snippet": "max-sz (max-inline-size) の Prop。xs, s, m, l, xl のサイズトークンで最大幅を指定。-max-sz:full(親要素いっぱいに広がる)と -max-sz:bleed(最外側の is--container 幅まで広がる)特殊クラスも解説。"
344
350
  },
345
351
  {
346
352
  "sourcePath": "core-components/Lism.mdx",
@@ -9,7 +9,7 @@ description: "Lism CSS の設計・実装に関するガイド。CSSの編集・
9
9
 
10
10
  調和と統一感を生み出すデザイントークン設計、`@layer`で管理されるプリミティブ設計、CSS変数を活かした柔軟でレスポンシブなユーティリティ設計が特徴です。
11
11
 
12
- > **バージョン情報:** このガイドは `lism-css@0.16.0` / `@lism-css/ui@0.16.0` 時点の情報に基づいています。プロジェクトで使用中のバージョンを確認し、このガイドのバージョンと異なる場合はユーザーに通知してください。
12
+ > **バージョン情報:** このガイドは `lism-css@0.17.0` / `@lism-css/ui@0.17.0` 時点の情報に基づいています。プロジェクトで使用中のバージョンを確認し、このガイドのバージョンと異なる場合はユーザーに通知してください。
13
13
 
14
14
  公式ドキュメント: https://lism-css.com/docs/overview.md
15
15
 
@@ -38,11 +38,15 @@ import 'lism-css/main.css';
38
38
  ```jsx
39
39
  // React
40
40
  import { Flex, Stack, Grid, Columns } from 'lism-css/react';
41
- import { Accordion, Tabs, Button } from '@lism-css/ui/react';
41
+ import { Accordion } from '@lism-css/ui/react/Accordion';
42
+ import { Tabs } from '@lism-css/ui/react/Tabs';
43
+ import { Button } from '@lism-css/ui/react/Button';
42
44
 
43
45
  // Astro
44
46
  import { Flex, Stack, Grid, Columns } from 'lism-css/astro';
45
- import { Accordion, Tabs, Button } from '@lism-css/ui/astro';
47
+ import { Accordion } from '@lism-css/ui/astro/Accordion';
48
+ import { Tabs } from '@lism-css/ui/astro/Tabs';
49
+ import { Button } from '@lism-css/ui/astro/Button';
46
50
  ```
47
51
 
48
52
 
@@ -53,32 +57,96 @@ import { Accordion, Tabs, Button } from '@lism-css/ui/astro';
53
57
  レイアウト選択ミスや典型的な記法ミスを避けるため、コード生成の前に以下を確認すること:
54
58
 
55
59
  - **どの Primitive を使うか迷ったら** → [primitive-class.md の「カラムレイアウト Primitive の使い分けガイド」](./primitive-class.md#カラムレイアウト-primitive-の使い分けガイド) — 比較表と用途別の選び方で判断材料を提供
56
- - **コードを書く前のチェック** → [antipatterns.md](./antipatterns.md) — Token typo / Prop 型ミス / レイアウト選択ミス / レスポンシブ抜けの NG → OK カタログ
60
+ - **コードを書く前のチェック** → [antipatterns.md](./antipatterns.md) — Token typo / px 直書き / Prop 型ミス / レイアウト選択ミス / レスポンシブ抜けの NG → OK カタログ
61
+
62
+ ### プリフライト・プリミティブ選定(必須)
63
+
64
+ 実装対象の UI 構造を見て、**まずどのプリミティブ/コンポーネントを使うかを決めること**。ここを飛ばすと `<div>` + Property Class でゴリ押すコードになり、レイアウトの一貫性が失われる。
65
+
66
+ 検討順:
67
+
68
+ 1. **レイアウトプリミティブ** — `Stack` / `Flex` / `Cluster` / `Grid` / `Columns` / `WithSide` / `Center` / `Frame` / `Flow` / `TileGrid` / `AutoColumns` / `SwitchColumns` / `Box` のいずれかで構造を組めないか?
69
+ 2. **Trait クラス** — `Container`(`is--container`) / `Wrapper`(`is--wrapper`) / `Layer`(`is--layer`) / `BoxLink`(`is--boxLink`) で表現すべき役割が無いか?
70
+ 3. **Atomic プリミティブ** — `Icon` / `Divider` / `Spacer` / `Decorator` で置き換えられる装飾要素が無いか?
71
+ 4. **UI コンポーネント** — `@lism-css/ui` の `Accordion` / `Modal` / `Tabs` / `Button` / `Badge` / `Callout` 等で済む UI が無いか?
72
+
73
+ 判断に迷う場合:
74
+
75
+ - カラム系の使い分け → [primitive-class.md の使い分けガイド](./primitive-class.md#カラムレイアウト-primitive-の使い分けガイド)
76
+ - 典型的な選択ミス → [antipatterns.md のレイアウト選択ミス](./antipatterns.md#レイアウト選択ミス)
77
+
78
+ ### プリフライト・トークン照合(必須)
79
+
80
+ コードを書き始める前に、**これから使う予定の数値・キー名・カラー名をすべて列挙し、[tokens.md](./tokens.md) の値リストと照合すること**。照合が済むまでコードを書かない。
81
+
82
+ 頻出ミス(spacing 中間値・角丸/影の数値外し・fz の他FW混入・存在しないカラー名・`--keycolor` 誤用 など)の NG → OK 例は [antipatterns.md](./antipatterns.md) を参照。
83
+
84
+ 照合中に「該当トークンが無い/揺れる」値が見つかった場合は、そのまま実装に進まず [デザインデータ取り込み時のフロー](#デザインデータ取り込み時のフロー) に従ってユーザー確認すること。
85
+
86
+ ### プリフライト・c-- 定義時の分解(必須)
87
+
88
+ `c--*` を新規に定義する/既存に追記する前に、書こうとしている各 CSS 宣言を以下の 2 グループに分解する:
89
+
90
+ 1. **Property Class / Props で書ける宣言** — マークアップ側に `-{prop}:{value}` または Lism Props として移す。CSS に書かない。
91
+ 2. **CSS でしか書けない宣言** — 擬似クラス・擬似要素・状態切替・子孫セレクタなど。これらは `.c--*` の CSS に残す。
92
+
93
+ **CSS が 1 行も残らなくても、`c--*` クラス名はマークアップに付けたまま残してよい。**
94
+ むしろコンポーネントとしての意味づけがソースから読み取れるので、空の `c--*` クラスは付けておくことを推奨する(CSS ファイル側にセレクタを書く必要は無い)。
95
+
96
+ 例:
97
+
98
+ NG(全部 CSS に書く)
99
+
100
+ ```css
101
+ .c--tag {
102
+ font-size: var(--fz--xs);
103
+ padding: var(--s10);
104
+ background-color: var(--base-2);
105
+ border-radius: var(--bdrs--10);
106
+ }
107
+ ```
108
+
109
+ OK(Property Class でマークアップに移し、`c--tag` は意味づけとして残す)
110
+
111
+ ```html
112
+ <span class="c--tag -fz:xs -p:10 -bgc:base-2 -bdrs:10">React</span>
113
+ ```
114
+
115
+ `.c--tag` の CSS には、`:hover` 等の擬似クラスや、Modifier(`.c--tag--solid`)・状態切替(`[data-is-active]` 等)の宣言が出てきた時にだけ書く。そういう宣言が無ければ CSS は空のままで OK(クラス名はマークアップに残す)。
116
+
117
+ > **注意**: `is--*` は「〜である(役割・存在の宣言)」を表す trait 用プレフィックス。ユーザー定義の `is--*` を追加することは可能だが、**状態管理(`is--active` 等)やスタイルバリエーション(`is--solid` 等)への流用は誤用**。状態は `data-*` 属性、バリエーションは BEM Modifier(`c--{name}--{variant}`)で表現する。詳細: [antipatterns.md の `is--` の誤用](./antipatterns.md#is---の誤用状態バリエーション)
118
+
119
+ 詳細な NG → OK 例は [antipatterns.md の「Property Class で書けるのに CSS で書く」](./antipatterns.md#property-class-で書けるのに-css-で書く) を参照。
57
120
 
58
121
  ### 基本方針: できる限りLism CSSの用意しているクラス・CSS変数・コンポーネントを使って書く
59
122
 
60
- まずは以下のチェックリストを確認しながら、Lism CSS でできることが何かを考えてから実装方針を立ててください。
123
+ プリフライトでプリミティブとトークンを決めたら、細部を以下のチェックリストで検討する:
61
124
 
62
- - `l--`,`a--`,`is--` などの Primitive Class や `c--` などの Component Class を用いることができるか?(React, Astroの場合は `Lism`, `Stack`, `Flex`, `Columns` 等のコンポーネントを利用して構築できるか?)
63
125
  - Lism の用意している `set--`系クラス、`u--`系クラスは使えないか?
64
126
  - Property Class (`-{prop}:{value}` or `<Lism prop="value">`))を使ってスタイリングできるか?
65
127
  - 値をレスポンシブに切り替える時は Lism の Property Class (`-{prop}_{bp}` or `<Lism prop={[...]}>`)を使って実装できるか?
66
128
  - カラー・余白・フォントサイズ・タイポグラフィ・行間(ハーフレディング)・サイズ・角丸・シャドウなどはトークン値を流用できないか?
67
129
  - その他、Lismが用意するCSS変数を活用できないか?
68
130
 
69
- ### ネイティブCSS で書くもの(必要に応じて適切な `@layer` 内で書くこと)
131
+ ### ネイティブCSS で書くかどうか
132
+
133
+ `c--*` クラスを定義する際、Primitive Class / Trait Class / Property Class / Lism Props で書ける宣言は CSS に直接書かない。
134
+
135
+ CSS(`@layer lism-component` 等)に書くのは、以下のいずれかに該当する宣言のみ:
136
+
137
+ - 擬似クラス・擬似要素(`:focus`, `::before`, `::after`, `:nth-child` 等)
138
+ - 状態切替(data属性で管理する`[data-is-active]`等)で複数プロパティを切り替える場合
139
+ - 自分でクラスを付けられない子孫要素のスタイル(MDX/markdown レンダリング配下の `h2` / `p` / `blockquote` 等)
140
+ - その他、Lism の既存クラスで表現できないスタイル。(計算式・特殊なスタイル、アニメーションなど。)
141
+
142
+
143
+ ### コンポーネント化のルール(CSS ではなくマークアップで束ねる)
70
144
 
71
- - Lismにないアニメーションやhoverエフェクト(適宜クラスを追加して使用する)
72
- - 独自コンポーネントの実装に合わせた`c--`クラス(`@layer lism-component`内で定義する)
73
- - 複雑なセレクタ(`:nth-child`, `::before`, `::after` 等)を使用する必要があるスタイル
74
- - カスタムプロパティを使った独自の計算式が必要なスタイル
75
- - その他、Lism のトークンやプリミティブでカバーできない特殊なスタイル
145
+ 同じ Property Class の組み合わせが 3 箇所以上で繰り返されるなら、**まず Astro/React コンポーネントとして切り出して Props で共通化** することを検討する。CSS の `c--*` を新設して中にスタイルを書くのはそれができない場合の手段とする。
76
146
 
77
- ### コンポーネント化のルール
147
+ - コンポーネントはできる限り `<Lism>` 系コアコンポーネントやレイアウトプリミティブ(`Stack`, `Flex`, `Columns` 等)をベースに構築する。
148
+ - カスタムコンポーネントクラスは `c--{name}` の命名規則に従う(CSS が空でも意味づけとして付ける)。
78
149
 
79
- - 同じスタイルの組み合わせが3箇所以上で使われる場合は、コンポーネントとして切り出すことを検討する。
80
- - コンポーネントはできる限り `<Lism>`系コアコンポーネントやレイアウトプリミティブ(`Stack`, `Flex`, `Columns` 等)をベースに構築すること。
81
- - カスタムクラスが必要な場合は `c--{name}` の命名規則に従う。
82
150
 
83
151
  ### 間違いやすい例
84
152
 
@@ -103,6 +171,40 @@ import { Accordion, Tabs, Button } from '@lism-css/ui/astro';
103
171
  ページ全体のデザインデータを渡された時、サイト幅やセクションエリアのサイズをpxでハードコーディングする前に、`--sz--`トークンを活用できないかをまずは考えてください。
104
172
  `<Lism as="section" max-sz="m"`>(`-max-sz:m`クラス) などの指定でコンテンツ幅を管理することができます。
105
173
 
174
+ ### デザインデータ取り込み時のフロー
175
+
176
+ Figma 等のデザインデータから値を読み取って実装する場合、px / rem / em の固定値が含まれることが多い。**実装に着手する前に**以下の手順でユーザーに方針を確認すること。確認せずに px 直書きで進めない。
177
+
178
+ #### 手順
179
+
180
+ 1. **px / rem / em で書かれた値を抽出**(spacing / radius / size / fz / lh / lts / shadow など)
181
+ 2. **対応するトークン候補と差分を表で提示**
182
+
183
+ | デザイン値 | 最寄りトークン | 差分 |
184
+ |---|---|---|
185
+ | `padding: 12px` | `--s15`(≒12px) | 一致 |
186
+ | `padding: 3px` | `--s5`(≒4px) | +1px |
187
+ | `border-radius: 6px` | `--bdrs--10`(4px)/`--bdrs--20`(8px) | ±2px |
188
+ | `font-size: 13px` | `--fz--xs`(mol/(mol+2)) | スケール基準でズレる |
189
+
190
+ 3. **ユーザーに方針を確認**(候補は以下の3択)
191
+
192
+ - **A. デザイン値を優先して px / rem / em で直書きする**
193
+ - 一貫性より忠実度を優先するケース。デザイントークンの恩恵は失う。
194
+ - **B. 最寄りトークンに丸める(推奨)**
195
+ - 一貫性・スケーラビリティを優先。微差は許容する。
196
+ - **C. トークン全体の基準値を上書きする**
197
+ - デザインのスケールに合わせて、`--s-unit` / `--fz-mol` などの基準変数や、 `--s10`, `--fz--xl` , `--bdrs--10` などの**具体的な各トークン変数を `global.css` で再定義**することで、トークン全体をデザインデータに揃える。
198
+ - 既存トークンの上書きで吸収できない場合に限り、`--s25` 等のカスタムトークンを追加する。
199
+
200
+ 4. 確認結果に従って実装する。
201
+
202
+ #### 確認不要な例外
203
+
204
+ - 1px / -1px の罫線・視覚補正(border / margin の打ち消し)
205
+ - transform / vertical-align 等の微調整値(数 px 単位)
206
+ - ブラウザ仕様上 px 必須の値(`media query`、`@container` の `min-width` 等)
207
+
106
208
 
107
209
  ## 詳細リファレンス
108
210
 
@@ -114,7 +216,7 @@ import { Accordion, Tabs, Button } from '@lism-css/ui/astro';
114
216
  - [base-styles.md](./base-styles.md) — HTML要素のベーススタイリング。(Reset CSSやHTML要素の基本スタイルをカスタマイズできるCSS変数)
115
217
  - [set-class.md](./set-class.md) — ベーススタイル・変数セットに使用する`set--` クラスの一覧と用途。
116
218
  - [primitive-class.md](./primitive-class.md) — レイアウトを組み立てる Primitive クラス(`l--`/`a--`)の一覧と用途。カラムレイアウト系の使い分けガイドも含む。
117
- - [antipatterns.md](./antipatterns.md) — AI が生成しがちな NG パターンと OK 対応。Token typo / Prop 型ミス / レイアウト選択ミス / レスポンシブ抜け。
219
+ - [antipatterns.md](./antipatterns.md) — AI が生成しがちな NG パターンと OK 対応。Token typo / px 直書き / `--keycolor` 誤用 / Prop 型ミス / レイアウト選択ミス / レスポンシブ抜け。
118
220
  - [trait-class.md](./trait-class.md) — 要素に役割・機能を宣言する Trait クラス(`is--`/`has--`)の一覧と用途。
119
221
  - [utility-class.md](./utility-class.md) — 具体的な用途・装飾・機能を持つユーティリティクラス(`u--` クラス)の一覧と用途。
120
222
  - [property-class.md](./property-class.md) — 単一のCSSプロパティに対応するProperty Class(`-{prop}:{value}`形式のクラス)の一覧・記法。
@@ -169,7 +271,7 @@ import { Accordion, Tabs, Button } from '@lism-css/ui/astro';
169
271
 
170
272
  - `-bd` / `-bd-{side}` 系: [property-class/bd.md](./property-class/bd.md)
171
273
  - `-hov:*` 系: [property-class/hov.md](./property-class/hov.md)
172
- - `-max-sz:full` / `-max-sz:container`: [property-class/max-sz.md](./property-class/max-sz.md)
274
+ - `-max-sz:full` / `-max-sz:bleed`: [property-class/max-sz.md](./property-class/max-sz.md)
173
275
 
174
276
 
175
277
  ## このスキルファイル自身のアップデート方法
@@ -5,6 +5,11 @@ AI が Lism CSS のコードを生成する際に間違いやすい記法と、
5
5
  ## TOC
6
6
 
7
7
  - [Token typo(存在しない値)](#token-typo存在しない値)
8
+ - [px / 固定値の直書き](#px--固定値の直書き)
9
+ - [Property Class で書けるのに CSS で書く](#property-class-で書けるのに-css-で書く)
10
+ - [`is--` の誤用(状態・バリエーション)](#is---の誤用状態バリエーション)
11
+ - [クラス名の命名ミス(kebab-case)](#クラス名の命名ミスkebab-case)
12
+ - [`--keycolor` の誤用](#--keycolor-の誤用)
8
13
  - [Prop 型ミス](#prop-型ミス)
9
14
  - [レイアウト選択ミス](#レイアウト選択ミス)
10
15
  - [レスポンシブ抜け](#レスポンシブ抜け)
@@ -32,10 +37,13 @@ Lism CSS側が用意しているトークン値と異なるものを書かない
32
37
 
33
38
  ### スペース(`p` / `m` / `g` 等)
34
39
 
40
+ スペーストークンに**中間値は存在しない**(`5/10/15/20/30/40/50/60/70/80` のみ)。`8/12/14/25/35/45/65/75` 等を書きそうになったら、必ず最寄りトークンに丸めるか、ユーザーに方針確認すること(→ [SKILL.md のデザイン取り込みフロー](./SKILL.md#デザインデータ取り込み時のフロー))。
41
+
35
42
  | NG | OK | 理由 |
36
43
  |---|---|---|
37
44
  | `p="8"` | `p="10"` | スペーストークンは`5/10/15/20/30/40/50/60/70/80`。tailwindのような4の倍数ではない |
38
45
  | `g="6"` | `g="5"` | 同上 |
46
+ | `m="25"`, `m="35"` | `m="20"` or `m="30"` | 中間値は存在しない |
39
47
  | `m="100"` | `m="80"` | 上限は `80`(ユーザーが追加定義している可能性はある) |
40
48
 
41
49
  ### フォントサイズ(`fz`)
@@ -53,6 +61,169 @@ Lism CSS側が用意しているトークン値と異なるものを書かない
53
61
  | `bdrs="sm"`, `bdrs="round"` | `bdrs="20"`, `bdrs="99"` | 角丸トークンは `10` / `20` / `30` / `40` / `99` / `inner` |
54
62
  | `bxsh="xs"`, `bxsh="sm"` | `bxsh="10"`, `bxsh="20"` | shadowトークンは `10` / `20` / `30` / `40` / `50` |
55
63
 
64
+ ### プリセット外の値を Lism Props に渡している
65
+
66
+ Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}` クラスとして出力される。それ以外の値はそのまま出力されてCSSとして無効になる。
67
+
68
+ ```JSX
69
+ // NG: 事前定義されたトークン値に合致しないため、-lts:2xl は出力されない
70
+ <Text lts="2xl">...</Text>
71
+ ```
72
+
73
+ 独自にProperty Classを拡張したりトークン値を増やしたりする場合は、 [property-class.md の `:value` 記法](./property-class.md)を活用するか、[`lism.config.js`による拡張](./customize.md)が必要。
74
+
75
+ ---
76
+
77
+ ## px / 固定値の直書き
78
+
79
+ デザインデータ由来の px / rem / em をそのまま書くと、Lism CSS のスケール統一が崩れる。**書く前に [SKILL.md のデザインデータ取り込み時のフロー](./SKILL.md#デザインデータ取り込み時のフロー) に従い、ユーザーに「A: そのまま採用 / B: 最寄りトークンに丸める / C: トークン基準値を上書きする」を確認すること**。確認なしに固定値を採用しない。
80
+
81
+ ### スペース・サイズ
82
+
83
+ | NG | OK | 理由 |
84
+ |---|---|---|
85
+ | `padding: 3px 10px` | `padding: var(--s5) var(--s10)` または Props で `py="5" px="10"` | `3px` はトークン外。最寄りは `--s5`(4px) |
86
+ | `min-width: 28px; height: 28px` | `min-w` / `h` をトークン値に丸める、または基準値を上書き | `28px` はトークン外 |
87
+ | `gap: var(--s5); padding: var(--s10) var(--s15)` を CSS で直書き | `<Lism g="5" py="10" px="15">` | Property Class / Props で書ける |
88
+
89
+ ### 角丸・ボーダー
90
+
91
+ | NG | OK | 理由 |
92
+ |---|---|---|
93
+ | `border-radius: 2px` | `border-radius: var(--bdrs--10)`(4px) | 角丸トークンの最小は `--bdrs--10`(4px)。`2px` はトークン外 |
94
+ | `border-radius: 6px` | `--bdrs--10`(4px)か `--bdrs--20`(8px)に丸める | 6px はトークン外 |
95
+
96
+ ### タイポグラフィ
97
+
98
+ | NG | OK | 理由 |
99
+ |---|---|---|
100
+ | `font-size: 13px` を直書き | `font-size: var(--fz--xs)` または Props で `fz="xs"` | フォントサイズは調和数列スケール。固定値は避ける |
101
+ | `letter-spacing: 0.02 / 0.12 / 0.14 / 0.18 / 0.2 / 0.24em` を散在 | `--lts--s/-l/-xl` を使う、または独自の `--lts--*` を `global.css` で追加 | デフォルトの `lts` トークンは `s/l/xl` のみ。多種混在はデザイントークンとして不健全 |
102
+
103
+ ### 直書きしてよい例外
104
+
105
+ - 1px / -1px の罫線・視覚補正(border / margin の打ち消し)
106
+ - transform / vertical-align 等の微調整値(数 px 単位)
107
+ - `media query` / `@container` の閾値など、ブラウザ仕様上 px 必須の値
108
+
109
+ ---
110
+
111
+ ## Property Class で書けるのに CSS で書く
112
+
113
+ `c--*` を定義したくなったら、まず宣言ごとに Property Class へ落とせるか確認する。落とせる宣言を CSS に書くと、CSS が肥大化し、Property Class の利点(差分上書きの容易さ・読みやすさ)が失われる。
114
+
115
+ | NG(CSS 直書き) | OK(Property Class) |
116
+ |---|---|
117
+ | `.c--tag { font-size: var(--fz--xs); padding: var(--s10); background: var(--base-2); border-radius: var(--bdrs--10); }` | `<span class="c--tag -fz:xs -p:10 -bgc:base-2 -bdrs:10">` |
118
+ | `.c--eyebrow { font-size: var(--fz--2xs); color: var(--text-2); text-transform: uppercase; }` | `<span class="c--eyebrow -fz:2xs -c:text-2 -tt:uppercase">` |
119
+
120
+
121
+ CSS に残すのは、基本的には `::before` / `> li` などの「Primitive / Trait / Property Class で書けないセレクタ」を伴う宣言。単一要素への装飾束は呼び出し側マークアップに移す。
122
+
123
+ なお、**CSS が空になっても `c--*` クラス名はマークアップに残して構わない**(むしろ推奨)。コンポーネントとしての役割をソースから読み取りやすくする目的で、意味づけ用に付けたままにする。
124
+
125
+
126
+ ---
127
+
128
+ ## `is--` の誤用(状態・バリエーション)
129
+
130
+ Lism CSS の `is--` プレフィックスは「**〜である**」という**役割・存在の宣言**を表す trait 用(`is--container` / `is--wrapper` / `is--layer` / `is--boxLink` / `is--coverLink` / `is--skipFlow` / `is--side` 等)。ユーザーが独自に `is--*` を追加することは可能だが、**その要素の役割(trait)を宣言するもの**であることが条件で、**状態管理やスタイルバリエーション目的に流用しない**(`is--active` / `is--current` / `is--solid` などは誤用)。
131
+
132
+ → 詳細: [trait-class.md](./trait-class.md#is-trait役割宣言)
133
+
134
+ `is--` と紛れがちな 2 つの用途は、Lism では別の手段で表現する:
135
+
136
+ ### 1. 状態管理 → `data-*` 属性を使う
137
+
138
+ オン/オフが切り替わる状態(active / current / disabled / open / selected 等)は、`is--*` クラスを増やさず HTML の `data-*` 属性で表現する。CSS は属性セレクタで書く。
139
+
140
+ | NG | OK |
141
+ |---|---|
142
+ | `<a class="c--catTab is--active">` + `.c--catTab.is--active { ... }` | `<a class="c--catTab" data-is-active>` + `.c--catTab[data-is-active] { ... }` |
143
+ | `<li class="c--pager_num is--current">` + `.c--pager_num.is--current { ... }` | `<li class="c--pager_num" aria-current="page">` + `.c--pager_num[aria-current] { ... }` |
144
+ | `<a class="c--pager_nav is--disabled">` + `.c--pager_nav.is--disabled { ... }` | `<a class="c--pager_nav" data-is-disabled>` + `.c--pager_nav[data-is-disabled] { ... }` |
145
+
146
+ 理由:
147
+
148
+ - `is--*` は「役割宣言」用の trait であり、状態を表すクラスを `is--*` として増やすと意味体系(trait か state か)が混在して読みにくくなる
149
+ - `data-*` は HTML 標準の状態表現で、JS からの切替(`element.dataset.isActive = ''` / `delete element.dataset.isActive`)も自然
150
+ - ARIA 属性で意味が表せる場合(`aria-current` / `aria-disabled` / `aria-selected` 等)は ARIA を優先し、その属性自体を CSS セレクタにする
151
+
152
+ ### 2. スタイルバリエーション → BEM Modifier `c--{name}--{variant}`
153
+
154
+ 「同じコンポーネントの見た目違い」は、Lism CSS 公式の BEM Modifier 記法で表現する(→ [css-rules.md の Component Class](./css-rules.md#component-classc--))。
155
+
156
+ | NG | OK |
157
+ |---|---|
158
+ | `<span class="c--tag is--solid">` + `.c--tag.is--solid { ... }` | `<span class="c--tag c--tag--solid">` + `.c--tag.c--tag--solid { ... }` |
159
+ | `<button class="c--button is--outline">` | `<button class="c--button c--button--outline">` |
160
+
161
+ なお、「色だけ違う」程度ならマークアップ側で `-bgc:* -c:*` を差し替えるだけで済むことも多い。
162
+
163
+ ---
164
+
165
+ ## クラス名の命名ミス(kebab-case)
166
+
167
+ Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `set--` 等)に続く名称は **camelCase** で書くのが規約。kebab-case で書くと、BEM の Modifier 区切り(`--`)と視覚的に紛れて読みにくくなる。
168
+
169
+ → 詳細: [naming.md](./naming.md#クラス名)
170
+
171
+ | NG | OK | 理由 |
172
+ |---|---|---|
173
+ | `c--my-card` | `c--myCard` | プレフィックス後の名称は camelCase |
174
+ | `c--my-card--primary` | `c--myCard--primary` | Modifier 区切り `--` と単語区切り `-` が混在して読みにくい |
175
+ | `c--card_my-elem` | `c--card_myElem` | Element 名(`_` 後)も camelCase |
176
+ | `is--side-bar` / `has--gutter-x` | `is--sideBar` / `has--gutterX` | `is--` / `has--` / `u--` 等にも同じ規則が適用される |
177
+
178
+ ```jsx
179
+ // NG: kebab-case
180
+ <Stack className="c--feature-card" />
181
+ <div className="c--user-profile c--user-profile--compact" />
182
+
183
+ // OK: camelCase
184
+ <Stack className="c--featureCard" />
185
+ <div className="c--userProfile c--userProfile--compact" />
186
+ ```
187
+
188
+ ---
189
+
190
+ ## `--keycolor` の誤用
191
+
192
+ `--keycolor` は要素単位で「軸となる色」を切り替えるための**ローカル変数**。サイト全体のブランドカラーやリンクカラーには使わない。
193
+
194
+ ### `:root` でのグローバル上書き
195
+
196
+ | NG | OK | 理由 |
197
+ |---|---|---|
198
+ | `:root { --keycolor: #c8553d; }` | `:root { --brand: #c8553d; }`(または `--accent` / `--link`) | サイト共通の色は `--brand` / `--accent` / `--link` などのセマンティックカラーで定義する |
199
+
200
+ ### アクセントカラーとしての `keycolor` 参照
201
+
202
+ | NG | OK | 理由 |
203
+ |---|---|---|
204
+ | `<Link c="keycolor">` | `<Link c="brand">` または `<Link c="link">` | リンク・hover などの恒常的なアクセントは `brand` / `link` を使う |
205
+ | `hov={{ c: 'keycolor' }}` | `hov={{ c: 'brand' }}` | 同上 |
206
+ | `border-inline-start: 3px solid var(--keycolor)`(CSS 直書き) | `border-inline-start: 3px solid var(--brand)` | 同上 |
207
+
208
+ ### `--keycolor` を使うべき場面
209
+
210
+ 「**そのボックス/コンポーネント自身の軸色**」を切り替えたい時のみ:
211
+
212
+ ```html
213
+ <!-- u--cbox や c--callout など、ボックス全体の色味を局所的に切り替える -->
214
+ <div class="u--cbox" style="--keycolor: var(--red)">
215
+ <p class="-c" style="--c: var(--keycolor)">danger 用カラーリング</p>
216
+ </div>
217
+ ```
218
+
219
+ ```jsx
220
+ <Lism class="u--cbox" keycolor="var(--red)">
221
+ <Text c="keycolor">...</Text>
222
+ </Lism>
223
+ ```
224
+
225
+ 詳細: [tokens.md のキーカラー変数セクション](./tokens.md#キーカラー変数-keycolor)
226
+
56
227
  ---
57
228
 
58
229
  ## Prop 型ミス
@@ -87,7 +258,7 @@ Lism CSS側が用意しているトークン値と異なるものを書かない
87
258
 
88
259
  | NG | OK | 理由 |
89
260
  |---|---|---|
90
- | `style={{ maxWidth: '1200px' }}` | `<Box max-sz="l">` | ヘッダーやセクションなど、コンテンツサイズにはトークン値(`xs` / `s` / `m` / `l` / `xl` / `container`)をできるだけ活用する |
261
+ | `style={{ maxWidth: '1200px' }}` | `<Box max-sz="l">` | ヘッダーやセクションなど、コンテンツサイズにはトークン値(`xs` / `s` / `m` / `l` / `xl` / `bleed`)をできるだけ活用する |
91
262
 
92
263
  ### サイドバー型レイアウト
93
264
 
@@ -66,8 +66,6 @@ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイル
66
66
  |------|------------|------|
67
67
  | `--link-c` | `var(--link)` | リンクテキスト色 |
68
68
  | `--link-td` | `underline` | テキスト装飾の種類 |
69
- | `--link-td-thickness` | `auto` | 下線の太さ |
70
- | `--link-td-color` | `currentColor` | 下線の色 |
71
69
 
72
70
  ### リスト(ul, ol)
73
71
 
@@ -75,7 +73,7 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
75
73
 
76
74
  | 変数 | フォールバック | 用途 |
77
75
  |------|------------|------|
78
- | `--list-px-s` | `var(--s30)` | リストの `padding-inline-start` |
76
+ | `--list-px-s` | `1.75em` | リストの `padding-inline-start` |
79
77
 
80
78
  ### テーブル(table, td, th)
81
79
 
@@ -83,7 +81,7 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
83
81
  |------|------------|------|
84
82
  | `--td-c` | `inherit` | セルのテキスト色 |
85
83
  | `--td-bgc` | `transparent` | セルの背景色 |
86
- | `--td-p` | `var(--s10)` | セルのパディング |
84
+ | `--td-p` | `var(--s10) var(--s15)` | セルのパディング |
87
85
  | `--td-min-sz` | `initial` | セルの最小幅 |
88
86
  | `--th-c` | `var(--td-c)` | 見出しセルのテキスト色 |
89
87
  | `--th-bgc` | `var(--td-bgc)` | 見出しセルの背景色 |
@@ -51,8 +51,6 @@ 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--*` クラスを指定。`variant` による BEM 展開の対象 | `lismClass="c--myComponent"` |
55
- | `variant` | `lismClass` 先頭クラスに対する BEM Modifier を付与(`c--` 専用。`a--` / `l--` には展開されない) | `variant="secondary"` |
56
54
  | `layout` | レイアウトプリミティブ(`l--{layout}`)を指定 | `layout="flow"` |
57
55
  | `atomic` | アトミックプリミティブ(`a--{atomic}`)を指定。`'divider'` / `'spacer'` / `'decorator'` が利用可能(`'icon'` は内部用) | `atomic="divider"` |
58
56
  | `set` | セットクラス(`set--{value}`)を指定。スペース区切りで複数指定可。値の先頭に `-` を付けると除外 | `set="plain"`, `set="var:hov var:bxsh"`, `set="-plain"` |
@@ -68,12 +66,12 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
68
66
  <Media as={Image} src="..." p="20" bd />
69
67
  // → Image コンポーネントに { className: '-p:20 -bd' } が渡される
70
68
 
71
- // lismClass でコンポーネントクラスを付与
72
- <Lism lismClass="c--myComponent" p="10">...</Lism>
69
+ // className でコンポーネントクラスを付与(c--* も className に直接書く)
70
+ <Lism className="c--myComponent" p="10">...</Lism>
73
71
  // → <div class="c--myComponent -p:10">...</div>
74
72
 
75
- // variant でバリエーション
76
- <Lism lismClass="c--myComponent" variant="secondary">...</Lism>
73
+ // BEM Modifier も className にそのまま列挙する
74
+ <Lism className="c--myComponent c--myComponent--secondary">...</Lism>
77
75
  // → <div class="c--myComponent c--myComponent--secondary">...</div>
78
76
 
79
77
  // exProps で外部コンポーネント用プロパティを明示的に分離
@@ -2,12 +2,20 @@
2
2
 
3
3
  `@lism-css/ui` パッケージには、Lism CSS の上に構築されたインタラクティブな UI コンポーネントが含まれます。
4
4
 
5
+ import は **コンポーネント単位の deep path** (`@lism-css/ui/{react,astro}/<Component>`)から行うこと。`@lism-css/ui/react` / `@lism-css/ui/astro` からの一括 import は使わない。
6
+
5
7
  ```jsx
6
8
  // React
7
- import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/react';
9
+ import { Accordion } from '@lism-css/ui/react/Accordion';
10
+ import { Tabs } from '@lism-css/ui/react/Tabs';
11
+ import { Modal } from '@lism-css/ui/react/Modal';
12
+ import { Button } from '@lism-css/ui/react/Button';
8
13
 
9
14
  // Astro
10
- import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/astro';
15
+ import { Accordion } from '@lism-css/ui/astro/Accordion';
16
+ import { Tabs } from '@lism-css/ui/astro/Tabs';
17
+ import { Modal } from '@lism-css/ui/astro/Modal';
18
+ import { Button } from '@lism-css/ui/astro/Button';
11
19
  ```
12
20
 
13
21
  ## TOC
@@ -114,9 +114,9 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
114
114
  - Modifier は Block と併記して使用: `.c--button.c--button--outline`
115
115
  - Element は `_`(アンダースコア)一つ区切り
116
116
  - Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
117
- - Block と自身の Modifier: `.c--xxx.c--xxx--variant`
117
+ - Block と自身の Modifier: `.c--xxx.c--xxx--modifier`
118
118
  - Block と他 Block の Element: `.c--xxx.c--yyy_elem`
119
- - `a--` / `l--` には `variant` の BEM 展開は適用されない**
119
+ - BEM の Modifier / Element 構造を持つのは `c--` のみ。`a--` / `l--` には適用しない
120
120
 
121
121
  `c--` を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`l--`, `is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることで CSS の記述量を削減できます。`c--` クラスにスタイルが全くなく、HTML 側での可視性を高める名前付けのためだけに利用しても構いません。
122
122
 
@@ -148,7 +148,7 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
148
148
 
149
149
  ```jsx
150
150
  export default function MyCard(props) {
151
- return <Stack lismClass="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
151
+ return <Stack className="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
152
152
  }
153
153
  ```
154
154
 
@@ -98,10 +98,32 @@ SCSS を直接読み込む構成では、コンパイル時に `lism-css` 本体
98
98
 
99
99
  ## `lism.config.js` でのカスタマイズ
100
100
 
101
- プロジェクトのルート直下に `lism.config.js` を置くことで、**コンポーネントの挙動**(受け付ける props の値や、出力されるクラス名)をカスタマイズできます。
101
+ プロジェクトのルート直下に `lism.config.js`(または `lism.config.mjs`)を置くことで、**コンポーネントの挙動**(受け付ける props の値や、出力されるクラス名)をカスタマイズできます。
102
102
 
103
103
  > **注意**: `lism.config.js` は HTML 出力(クラス名)を変えるだけで、追加されたクラスに対する CSS は別途読み込ませる必要があります([追加スタイルを読み込ませる方法](#追加スタイルを読み込ませる方法) を参照)。
104
104
 
105
+ ### Vite プラグインの登録(必須)
106
+
107
+ `lism.config.js` を読み込ませるには、Vite(または Astro)の設定ファイルで `lism-css/vite-plugin` を登録する必要があります。**未登録の場合、ファイルを置いてもデフォルト設定のまま**になります。
108
+
109
+ ```js
110
+ // astro.config.mjs
111
+ import { defineConfig } from 'astro/config';
112
+ import lismCss from 'lism-css/vite-plugin';
113
+
114
+ export default defineConfig({
115
+ vite: {
116
+ plugins: [lismCss()],
117
+ },
118
+ });
119
+ ```
120
+
121
+ プラグインはプロジェクトルートから `lism.config.js` → `lism.config.mjs` の順で自動検出します。別の場所に置く場合は `configPath` で指定できます。
122
+
123
+ ```js
124
+ plugins: [lismCss({ configPath: './config/lism.config.js' })],
125
+ ```
126
+
105
127
  ### フォーマット
106
128
 
107
129
  ```js
@@ -134,11 +156,16 @@ const { props, tokens } = DEFAULT_CONFIG;
134
156
 
135
157
  export default {
136
158
  props: {
137
- d: { presets: [...(props.d.presets || []), 'flex', 'grid'] },
159
+ // 既存propにpresetsを追加
160
+ ta: { presets: [...(props.ta.presets || []), 'justify'] },
161
+ // 既存propにutility値を追加
138
162
  p: { utils: { box: '2em' } },
163
+ // 新しいpropの追加(filterはデフォルトに含まれない)
164
+ filter: { utils: { blur: 'blur(3px)' } },
139
165
  },
140
166
  tokens: {
141
- bdrs: [...(tokens.bdrs || []), '5'],
167
+ // tokenClass:1 のpropは、tokens を追加するだけで自動でユーティリティ化される
168
+ lts: [...(tokens.lts || []), '2xl'],
142
169
  },
143
170
  traits: {
144
171
  isHoge: 'is--hoge',
@@ -150,15 +177,15 @@ export default {
150
177
 
151
178
  | 入力 | 出力されるクラス |
152
179
  |------|----------------|
153
- | `d="flex"` | `-d:flex` |
154
- | `d="grid"` | `-d:grid` |
180
+ | `ta="justify"` | `-ta:justify` |
155
181
  | `p="box"` | `-p:box` |
156
- | `bdrs="5"` | `-bdrs:5` |
182
+ | `filter="blur"` | `-filter:blur` |
183
+ | `lts="2xl"` | `-lts:2xl` |
157
184
  | `isHoge` | `is--hoge` |
158
185
 
159
186
  ```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>
187
+ <Box p="box" ta="justify" filter="blur" lts="2xl" isHoge>Box</Box>
188
+ // → <div class="l--box is--hoge -p:box -ta:justify -filter:blur -lts:2xl">Box</div>
162
189
  ```
163
190
 
164
191
 
@@ -166,7 +193,31 @@ export default {
166
193
 
167
194
  `lism.config.js` で props を増やしただけでは、対応するユーティリティクラスのスタイルは存在しません。次のいずれかでスタイルを追加してください。
168
195
 
169
- ### 1. CLI コマンドで CSS を再ビルド
196
+ ### 1. 軽微な追加であれば手書きで済ませる(推奨ライト)
197
+
198
+ カスタムトークンが少数で済むなら、CLI 再ビルドや SCSS 構成変更まで踏み込まず、Lism Props の `:value` 記法(→ [property-class.md](./property-class.md))と `global.css` への手書きで十分。
199
+
200
+ ```css
201
+ /* global.css */
202
+ @layer lism-base {
203
+ :root {
204
+ --lts--2xl: 0.15em;
205
+ }
206
+ }
207
+
208
+ /* Property Class は @layer を付けない */
209
+ .-lts\:2xl {
210
+ letter-spacing: var(--lts--2xl);
211
+ }
212
+ ```
213
+
214
+ ```jsx
215
+ <Text lts=":2xl">...</Text>
216
+ ```
217
+
218
+ トークンを体系的に拡張したい場合のみ、後述の CLI / SCSS 経由に切り替える。
219
+
220
+ ### 2. CLI コマンドで CSS を再ビルド
170
221
 
171
222
  ```bash
172
223
  npx lism-css build
@@ -175,46 +226,49 @@ npx lism-css build
175
226
  `lism.config.js` の内容に基づいて `lism-css/main.css` を再生成します。上記カスタマイズ例だと、以下のスタイルが自動生成されます:
176
227
 
177
228
  ```css
178
- .-d\:flex { display: flex; }
179
- .-d\:grid { display: grid; }
229
+ .-ta\:justify { text-align: justify; }
180
230
  .-p\:box { padding: 2em; }
181
- .-bdrs\:5 { border-radius: var(--bdrs--5); }
231
+ .-filter\:blur { filter: blur(3px); }
232
+ .-lts\:2xl { letter-spacing: var(--lts--2xl); }
182
233
  ```
183
234
 
184
235
  > **注意**:
185
- > - トークン CSS 変数(例: `--bdrs--5`)と `is--*` クラスのスタイルは自動生成されないため、手動で追加してください。
236
+ > - 生成されるのはあくまで `var(--lts--2xl)` を参照する **ユーティリティクラスまで**。参照先の CSS 変数(`:root { --lts--2xl: ... }` のような **値そのもの** の定義)と `is--*` クラスのスタイルは自動生成されないため、手動で追加してください。
186
237
  > - `lism-css` パッケージ自体を上書きする処理のため、**パッケージ更新ごとに再実行**が必要です。
187
238
 
188
- ### 2. 手動で CSS を追記
239
+ ### 3. 手動で CSS を追記
189
240
 
190
241
  CLI を使わず、追加クラス分の CSS をプロジェクト側で書いて読み込ませる方法でも問題ありません。
191
242
 
192
243
  ```css
193
- :root { --bdrs--5: 0.125rem; }
194
- .is--hoge { /* ... */ }
244
+ @layer lism-base {
245
+ :root {
246
+ --lts--2xl: 0.15em;
247
+ }
248
+ }
249
+
250
+ @layer lism-trait {
251
+ .is--hoge { /* ... */ }
252
+ }
195
253
  ```
196
254
 
197
- ### 3. SCSS で `lism.config.js` と整合させる
255
+ ### 4. SCSS で `lism.config.js` と整合させる
198
256
 
199
257
  SCSS 経由で読み込む構成なら、`lism.config.js` と同じ追加分を `$props` の `utilities` 設定として書いておけば、ビルドコマンドなしで反映できます。
200
258
 
201
259
  ```scss
202
260
  @use '../path-to/node_modules/lism-css/scss/setting' with (
203
261
  $props: (
204
- 'd': (
205
- utilities: (
206
- 'flex': 'flex',
207
- 'grid': 'grid',
208
- ),
209
- ),
262
+ 'ta': ( utilities: ( 'justify': 'justify' ) ),
210
263
  'p': ( utilities: ( 'box': '2em' ) ),
211
- 'bdrs': ( utilities: ( '5': 'var(--bdrs--5)' ) ),
264
+ 'filter': ( utilities: ( 'blur': 'blur(3px)' ) ),
265
+ 'lts': ( utilities: ( '2xl': 'var(--lts--2xl)' ) ),
212
266
  )
213
267
  );
214
268
  @use '../path-to/node_modules/lism-css/scss/main';
215
269
 
216
270
  // トークン追記
217
271
  @layer lism-base {
218
- :root { --bdrs--5: 0.125rem; }
272
+ :root { --lts--2xl: 0.15em; }
219
273
  }
220
274
  ```
@@ -1,10 +1,10 @@
1
1
  # -max-sz(最大幅)
2
2
 
3
- コンテンツの最大幅(`max-inline-size`)を制御する Property Class。標準のコンテンツサイズトークン(`xs`〜`xl`)に加え、特殊挙動の `full` / `container` を持つ。
3
+ コンテンツの最大幅(`max-inline-size`)を制御する Property Class。標準のコンテンツサイズトークン(`xs`〜`xl`)に加え、特殊挙動の `full` / `bleed` を持つ。
4
4
 
5
5
  ## 基本情報
6
6
 
7
- - クラス名: `-max-sz:{xs|s|m|l|xl|full|container}`
7
+ - クラス名: `-max-sz:{xs|s|m|l|xl|full|bleed}`
8
8
  - Lism props: `max-sz`(`<Lism max-sz="m">` 等)
9
9
  - SCSSソース: https://raw.githubusercontent.com/lism-css/lism-css/main/packages/lism-css/src/scss/props/_size.scss
10
10
  - 公式ドキュメント: https://lism-css.com/docs/property-class/max-sz.md
@@ -32,26 +32,30 @@
32
32
  max-inline-size: 100%;
33
33
 
34
34
  :where(.has--gutter) > & {
35
+ inline-size: auto;
35
36
  max-inline-size: calc(100% + var(--gutter-size) * 2);
36
37
  margin-inline: calc(var(--gutter-size) * -1);
37
38
  }
38
39
  }
39
40
  ```
40
41
 
41
- `has--gutter` の内側で全幅画像・全幅バナーなどを配置したい時に使う。
42
+ `has--gutter` の内側で全幅画像・全幅バナーなどを配置したい時に使う。`inline-size: auto` は、親が `is--wrapper` の場合に当たる `inline-size: 100%` を打ち消し、負 margin による hang を効かせるためのリセット。
42
43
 
43
- ### `-max-sz:container`
44
+ ### `-max-sz:bleed`
44
45
 
45
- **コンテナ要素を基準としたサイズ**まで広がる。`is--container` ごとに `--sz--container` が更新されるため、直近の container を基準にサイズ決定される。
46
+ **最外側の `is--container` 幅**まで広がる。本文幅やネストされた container を突き抜け、ページ全体の full-bleed 表現を実現する。`is--container` が祖先に存在しない場合は、ビューポート幅(`100svi`)まで広がる fallback として動作する。
46
47
 
47
48
  ```scss
48
- .-max-sz\:container {
49
- max-inline-size: var(--sz--container, 100cqi);
50
- margin-inline: calc(50% - var(--sz--container) / 2);
49
+ .-max-sz\:bleed {
50
+ inline-size: auto;
51
+ max-inline-size: var(--sz--bleed, 100svi);
52
+ margin-inline: calc(50% - var(--sz--bleed, 100svi) / 2);
51
53
  }
52
54
  ```
53
55
 
54
- `margin-inline` で中央配置されるので、`is--wrapper` の内側にあっても container 基準の幅に広げつつ中央に揃う。
56
+ `--sz--bleed` は最外側の `is--container` 直下の子要素でだけ `100cqi` に上書きされ、ネストされた `is--container` は再度上書きしないため、内側の子要素は外側の値を inherit で参照する。
57
+
58
+ `margin-inline` で中央配置されるので、`is--wrapper` の内側にあっても最外側 container 基準の幅に広げつつ中央に揃う。`inline-size: auto` も同じく、`is--wrapper > *` で当たる `inline-size: 100%` を打ち消すためのリセット。
55
59
 
56
60
  ## Usage
57
61
 
@@ -74,14 +78,14 @@
74
78
  </div>
75
79
  ```
76
80
 
77
- ### container 基準のサイズ
81
+ ### 最外側 container 基準のサイズ(full-bleed)
78
82
 
79
83
  ```html
80
84
  <div class="is--container">
81
85
  <div class="is--wrapper -contentSize:s">
82
86
  <p>狭めのコンテンツ</p>
83
- <div class="-max-sz:container">
84
- container 基準まで広がる要素
87
+ <div class="-max-sz:bleed">
88
+ 最外側 container 幅まで広がる要素(ネストされた is--container も突き抜ける)
85
89
  </div>
86
90
  </div>
87
91
  </div>
@@ -94,6 +98,6 @@
94
98
 
95
99
  ## 関連
96
100
 
97
- - [`is--container`](../trait-class/is--container.md) — `-max-sz:container` の基準となるコンテナ
101
+ - [`is--container`](../trait-class/is--container.md) — `-max-sz:bleed` の基準となるコンテナ
98
102
  - [`is--wrapper`](../trait-class/is--wrapper.md) — コンテンツ幅の制限
99
103
  - [`has--gutter`](../trait-class/has--gutter.md) — `-max-sz:full` と組み合わせる左右余白
@@ -6,6 +6,7 @@ CSS Layer の外(最も高い詳細度)に配置され、`-{prop}(:{value})`
6
6
  ## TOC
7
7
 
8
8
  - [基本書式](#基本書式)
9
+ - [プリセット外の値をクラス化する(`:value` 記法、Lism Props 限定)](#プリセット外の値をクラス化するvalue-記法lism-props-限定)
9
10
  - [表の読み方](#表の読み方)
10
11
  - [全 Prop 一覧](#全-prop-一覧)
11
12
  - [特殊な Property Class](#特殊な-property-class)
@@ -22,7 +23,7 @@ CSS Layer の外(最も高い詳細度)に配置され、`-{prop}(:{value})`
22
23
 
23
24
  - [property-class/bd.md](./property-class/bd.md) — ボーダー(`-bd` / `-bd-{side}` 系)
24
25
  - [property-class/hov.md](./property-class/hov.md) — ホバー(`-hov:*` 系)
25
- - [property-class/max-sz.md](./property-class/max-sz.md) — 最大幅(`-max-sz:full` / `-max-sz:container` 等)
26
+ - [property-class/max-sz.md](./property-class/max-sz.md) — 最大幅(`-max-sz:full` / `-max-sz:bleed` 等)
26
27
 
27
28
  ---
28
29
 
@@ -47,6 +48,16 @@ CSS Layer の外(最も高い詳細度)に配置され、`-{prop}(:{value})`
47
48
  ```
48
49
 
49
50
 
51
+ ### プリセット外の値をクラス化する(`:value` 記法、Lism Props 限定)
52
+
53
+ Lism コンポーネントの Propsに渡す値の頭に `:` を付けると、 **強制的に Property Class を出力**できる。cssを追記してトークン値を独自に増やした場合などに活用できる。
54
+
55
+ ```jsx
56
+ <Text lts=":2xl">...</Text>
57
+ // → <p class="-lts:2xl">...</Text>
58
+ ```
59
+
60
+
50
61
  ## 表の読み方
51
62
 
52
63
  | カラム | 説明 |
@@ -72,7 +83,7 @@ CSS Layer の外(最も高い詳細度)に配置され、`-{prop}(:{value})`
72
83
  | `fs` | `font-style` | `-fs:italic` | — |
73
84
  | `lh` | `line-height`(`--hl` 経由) | `-lh:base`, `-lh:xs`, `-lh:s`, `-lh:l`, `-lh:1` | — |
74
85
  | `hl` | `--hl` 変数のみ | — | `-hl_sm`, `-hl_md` |
75
- | `lts` | `letter-spacing` | `-lts:base`, `-lts:s`, `-lts:l` | — |
86
+ | `lts` | `letter-spacing` | `-lts:base`, `-lts:s`, `-lts:l`, `-lts:xl` | — |
76
87
  | `ta` | `text-align` | `-ta:center`, `-ta:left`, `-ta:right` | — |
77
88
  | `td` | `text-decoration` | `-td:none` | — |
78
89
  | `tt` | `text-transform` | `-tt:upper`, `-tt:lower` | — |
@@ -103,14 +114,14 @@ CSS Layer の外(最も高い詳細度)に配置され、`-{prop}(:{value})`
103
114
  | `max-h` | `max-height` | `-max-h:100%` | `-max-h_sm`, `-max-h_md` |
104
115
  | `sz` | `inline-size` | — | — |
105
116
  | `min-sz` | `min-inline-size` | — | — |
106
- | `max-sz` | `max-inline-size` | `-max-sz:xs`, `-max-sz:s`, `-max-sz:m`, `-max-sz:l`, `-max-sz:xl`, `-max-sz:full`, `-max-sz:container` | — |
117
+ | `max-sz` | `max-inline-size` | `-max-sz:xs`, `-max-sz:s`, `-max-sz:m`, `-max-sz:l`, `-max-sz:xl`, `-max-sz:full`, `-max-sz:bleed` | — |
107
118
  | `bsz` | `block-size` | — | — |
108
119
  | `min-bsz` | `min-block-size` | — | — |
109
120
  | `max-bsz` | `max-block-size` | — | — |
110
121
 
111
122
  **`max-sz` の特殊クラス:**
112
123
  - `-max-sz:full` — `has--gutter` 内では gutter 分を含めた全幅に拡張
113
- - `-max-sz:container` — コンテナ幅に合わせる(`margin-inline` で中央配置)
124
+ - `-max-sz:bleed` — 最外側の `is--container` 幅まで広がる(`margin-inline` で中央配置、`is--container` 祖先がなければ `100svi` まで広がる)
114
125
 
115
126
  → 詳細は [property-class/max-sz.md](./property-class/max-sz.md) 参照
116
127
 
@@ -31,13 +31,13 @@ CSSコードを書く場合やコンポーネントのPropsに値を指定する
31
31
  | 余白 (space) | `5`, `10`, `15`, `20`, `30`, `40`, `50`, `60`, `70`, `80` | `--s{N}` | `--s20` |
32
32
  | フォントサイズ (fz) | `root`, `base`, `2xs`, `xs`, `s`, `m`, `l`, `xl`, `2xl`, `3xl`, `4xl`, `5xl` | `--fz--{key}` | `--fz--l` |
33
33
  | ハーフレディング・行間 (lh/hl) | `base`, `xs`, `s`, `l` | `--hl--{key}` | `--hl--s` |
34
- | 字間 (lts) | `base`, `s`, `l` | `--lts--{key}` | `--lts--s` |
34
+ | 字間 (lts) | `base`, `s`, `l`, `xl` | `--lts--{key}` | `--lts--s` |
35
35
  | フォント (ff) | `base`, `accent`, `mono` | `--ff--{key}` | `--ff--mono` |
36
36
  | ウェイト (fw) | `light`, `normal`, `bold` | `--fw--{key}` | `--fw--bold` |
37
37
  | 透明度 (o) | `mp`, `p`, `pp`, `ppp` | `--o--{key}` | `--o--p` |
38
38
  | 角丸 (bdrs) | `10`, `20`, `30`, `40`, `99`, `inner` | `--bdrs--{key}` | `--bdrs--20` |
39
39
  | 影 (bxsh) | `10`, `20`, `30`, `40`, `50` | `--bxsh--{N}` | `--bxsh--20` |
40
- | サイズ (sz) | `xs`, `s`, `m`, `l`, `xl`, `container` | `--sz--{key}` | `--sz--l` |
40
+ | サイズ (sz) | `xs`, `s`, `m`, `l`, `xl`, `bleed` | `--sz--{key}` | `--sz--l` |
41
41
  | アスペクト比 (ar) | `og` | `--ar--{key}` | `--ar--og` |
42
42
  | フロー余白 (flow) | `s`, `l` | `--flow--{key}` | `--flow--s` |
43
43
  | セマンティックカラー (c) | `base`, `base-2`, `text`, `text-2`, `divider`, `link`, `brand`, `accent` | `--{name}` | `--brand` |
@@ -83,7 +83,7 @@ CSSコードを書く場合やコンポーネントのPropsに値を指定する
83
83
  | `--fz--s` | `calc(1em * var(--fz-mol) / (var(--fz-mol) + 1))` | S(mol/(mol+1)) |
84
84
  | `--fz--xs` | `calc(1em * var(--fz-mol) / (var(--fz-mol) + 2))` | XS(mol/(mol+2)) |
85
85
  | `--fz--2xs` | `calc(1em * var(--fz-mol) / (var(--fz-mol) + 3))` | 最小(mol/(mol+3)) |
86
- | `--fz--base` | `var(--REM)` | 本文の基本フォントサイズ(≒ 1rem) |
86
+ | `--fz--base` | `1rem` | 本文の基本フォントサイズ |
87
87
  | `--fz--root` | — | `:root` のフォントサイズ |
88
88
 
89
89
  `--fz-mol` を上書きすることでスケール全体を調整可能(7以上の値に対応)。
@@ -106,8 +106,9 @@ CSSコードを書く場合やコンポーネントのPropsに値を指定する
106
106
  | CSS変数 | 値 | 説明 |
107
107
  |---------|-----|------|
108
108
  | `--lts--base` | `normal` | 基本の文字間隔 |
109
- | `--lts--s` | `-0.05em` | 狭めの文字間隔 |
109
+ | `--lts--s` | `-0.025em` | 狭めの文字間隔 |
110
110
  | `--lts--l` | `0.05em` | 広めの文字間隔 |
111
+ | `--lts--xl` | `0.1em` | より広い文字間隔 |
111
112
 
112
113
 
113
114
  ## フォント (ff)
@@ -39,12 +39,14 @@
39
39
 
40
40
  子要素側は `p={['10', '30']}` のようなブレイクポイント配列指定にすることで、親の `is--container` を基準としたコンテナクエリで値が切り替わります。
41
41
 
42
- ## `--sz--container` の提供
42
+ ## `--sz--bleed` の提供
43
43
 
44
- `is--container` は直下の子要素に `--sz--container: 100cqi` をセットします。`-max-sz:container` はこの値を参照しており、`is--container` 基準の幅まで広がります。
44
+ 最外側の `is--container` は直下の子要素に `--sz--bleed: 100cqi` をセットします。`-max-sz:bleed` はこの値を参照しており、最外側の `is--container` 基準の幅まで広がります(ネストされた `is--container` は `--sz--bleed` を再上書きしないため、内側の子要素は外側の値を inherit で参照します)。
45
45
 
46
46
  `has--gutter` と併用した場合は `calc(100cqi + var(--gutter-size) * 2)` に自動調整され、gutter 分を含めた端〜端の幅になります。
47
47
 
48
+ `@property --sz--bleed` の `initial-value` は `100svi` のため、`is--container` が祖先に存在しない場合はビューポート幅まで広がる fallback として動作します。
49
+
48
50
  ## 関連プリミティブ
49
51
 
50
52
  - [is--wrapper](./is--wrapper.md) — コンテンツ幅ラッパー(`isContainer` と併用可)
@@ -80,6 +80,21 @@
80
80
  </div>
81
81
  ```
82
82
 
83
+ ## 直下の子要素の挙動
84
+
85
+ `is--wrapper` 直下の子要素には次のスタイルが当たる:
86
+
87
+ ```scss
88
+ .is--wrapper > * {
89
+ inline-size: 100%;
90
+ max-inline-size: min(100%, var(--contentSize));
91
+ margin-inline: auto;
92
+ }
93
+ ```
94
+
95
+ - `inline-size: 100%` により、自然幅が `--contentSize` 未満の要素(短い段落、`<table>` など)も常に親幅まで広げてから `max-inline-size` で制限される。これにより `l--stack` などの flex 縦並び配下でも横幅が揃い、ガタつきが起きない
96
+ - `<table>` を直下に置くと内容依存の自然幅にはならず、常に wrapper 幅まで広がる。テーブルの自然幅を保ちたい場合は `is--wrapper` を直接の親にしないように、間に別の要素を挟む
97
+
83
98
  ## 関連プリミティブ
84
99
 
85
100
  - [is--container](./is--container.md) — コンテナクエリ基準(`isContainer` と併用可)
package/dist/data/meta.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export const meta = {
2
- generatedAt: '2026-04-27',
3
- sourceCommit: '09525769',
2
+ generatedAt: '2026-05-09',
3
+ sourceCommit: 'e7352b46',
4
4
  docsVersion: '0.1.0',
5
5
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lism-css/mcp",
3
- "version": "0.15.1",
3
+ "version": "0.17.0",
4
4
  "description": "MCP server for lism-css documentation and API reference.",
5
5
  "type": "module",
6
6
  "bin": {