diff --git a/.claude/commands/docs-update.md b/.claude/commands/docs-update.md
index 3cfae838e..129d3839d 100644
--- a/.claude/commands/docs-update.md
+++ b/.claude/commands/docs-update.md
@@ -27,8 +27,7 @@ argument-hint: "[対象ファイル/ディレクトリ... | root]"
| D | `property-class/` | プロパティクラス | `lism-css` の config・SCSS |
| E | `tokens/` | デザイントークン | `lism-css` の config・SCSS |
| F | `ui/` 直下 | `@lism-css/ui` コンポーネント(Blocks) | `lism-ui` のソース |
-| G | `ui/block-examples/` | パッケージ外の b-- 部品作例(Block Examples) | `lism-css` のコンポーネント |
-| G' | `ui/components/` | 独自 CSS なしの実装例(Components) | `lism-css` のコンポーネント |
+| G | `ui/examples/` | パッケージ外の部品・技法の実装例(Examples) | `lism-css` のコンポーネント |
| H | `customize/` とルート直下 | 概要・導入・カスタマイズガイド | `package.json`、ビルド設定、ソース全般 |
3件以下のグループは隣接グループと統合し、多いグループ(H 等)は分割してよい。
diff --git a/apps/site/src/config/redirects.ts b/apps/site/src/config/redirects.ts
index 2044cf4eb..bacb34111 100644
--- a/apps/site/src/config/redirects.ts
+++ b/apps/site/src/config/redirects.ts
@@ -91,33 +91,33 @@ export const astroRedirects: AstroRedirects = {
// purge -> customize/purge 移動(Customize セクション化に伴う統合)
'/docs/purge/': '/docs/customize/purge/',
'/en/docs/purge/': '/en/docs/customize/purge/',
- // Chat をパッケージから削除し、Block Examples の作例ページへ転換(#557)
- '/ui/chat/': '/ui/block-examples/chat/',
- '/en/ui/chat/': '/en/ui/block-examples/chat/',
- // 公開実績のある旧ui/examples/*だけをui/components/*へリダイレクトする(#557)
- '/ui/examples/banner/': '/ui/components/banner/',
- '/ui/examples/breadcrumb/': '/ui/components/breadcrumb/',
- '/ui/examples/card/': '/ui/components/card/',
- '/ui/examples/dividerlabel/': '/ui/components/dividerlabel/',
- '/ui/examples/reel/': '/ui/components/reel/',
- '/en/ui/examples/banner/': '/en/ui/components/banner/',
- '/en/ui/examples/breadcrumb/': '/en/ui/components/breadcrumb/',
- '/en/ui/examples/card/': '/en/ui/components/card/',
- '/en/ui/examples/dividerlabel/': '/en/ui/components/dividerlabel/',
- '/en/ui/examples/reel/': '/en/ui/components/reel/',
- // Steps は MDX を削除し、Timeline は MDX を draft 化して本番非公開にしたため、作例のある patterns へ誘導する。ui/examples/*からの連鎖も避ける
+ // ui/の作例ページは/ui/examples/{slug}/。公開実績のある旧URLだけを登録する
+ // 公開中の作例と同じURL(/ui/examples/card/等)は登録しない。静的ルートのリダイレクトが[...slug]の実ページより優先される
+ '/ui/chat/': '/ui/examples/chat/',
+ '/ui/block-examples/chat/': '/ui/examples/chat/',
+ '/ui/components/banner/': '/ui/examples/banner/',
+ '/ui/components/breadcrumb/': '/ui/examples/breadcrumb/',
+ '/ui/components/card/': '/ui/examples/card/',
+ '/ui/components/dividerlabel/': '/ui/examples/dividerlabel/',
+ '/ui/components/reel/': '/ui/examples/reel/',
+ '/en/ui/chat/': '/en/ui/examples/chat/',
+ '/en/ui/block-examples/chat/': '/en/ui/examples/chat/',
+ '/en/ui/components/banner/': '/en/ui/examples/banner/',
+ '/en/ui/components/breadcrumb/': '/en/ui/examples/breadcrumb/',
+ '/en/ui/components/card/': '/en/ui/examples/card/',
+ '/en/ui/components/dividerlabel/': '/en/ui/examples/dividerlabel/',
+ '/en/ui/components/reel/': '/en/ui/examples/reel/',
+ // Steps・Timeline・FAQ・Heroの作例はpatternsにある。旧URLから直接リダイレクトし、連鎖させない
'/ui/components/steps/': '/patterns/process/',
'/ui/examples/steps/': '/patterns/process/',
'/ui/block-examples/timeline/': '/patterns/process/',
- '/en/ui/components/steps/': '/en/patterns/process/',
- '/en/ui/examples/steps/': '/en/patterns/process/',
- '/en/ui/block-examples/timeline/': '/en/patterns/process/',
- // FAQ/Hero は patterns のカテゴリページへ直接リダイレクトし、ui/examples/*からの連鎖を避ける(#566)
'/ui/components/faq/': '/patterns/faq/',
- // Hero は MDX を draft 化して本番非公開にしたため、作例のある patterns へ誘導する
'/ui/components/hero/': '/patterns/hero/',
'/ui/examples/faq/': '/patterns/faq/',
'/ui/examples/hero/': '/patterns/hero/',
+ '/en/ui/components/steps/': '/en/patterns/process/',
+ '/en/ui/examples/steps/': '/en/patterns/process/',
+ '/en/ui/block-examples/timeline/': '/en/patterns/process/',
'/en/ui/components/faq/': '/en/patterns/faq/',
'/en/ui/components/hero/': '/en/patterns/hero/',
'/en/ui/examples/faq/': '/en/patterns/faq/',
diff --git a/apps/site/src/config/sidebar.ts b/apps/site/src/config/sidebar.ts
index 304eb2860..8b8a39ec9 100644
--- a/apps/site/src/config/sidebar.ts
+++ b/apps/site/src/config/sidebar.ts
@@ -212,12 +212,8 @@ const uiSidebar: SidebarSection[] = [
dir: 'ui', // content/ja/ui/ 直下のMDXを自動取得(パッケージ提供のUI)
},
{
- label: 'Block Examples',
- dir: 'ui/block-examples', // CSSをコピーして導入するb--部品の作例(#557)
- },
- {
- label: 'Components',
- dir: 'ui/components', // 独自CSSなしで組み立てる実装例(#557)
+ label: 'Examples',
+ dir: 'ui/examples', // パッケージ外の部品・技法の実装例
},
];
diff --git a/apps/site/src/content/en/changelog.mdx b/apps/site/src/content/en/changelog.mdx
index 6fc1fd449..33997b25e 100644
--- a/apps/site/src/content/en/changelog.mdx
+++ b/apps/site/src/content/en/changelog.mdx
@@ -181,7 +181,7 @@ Requires `lism-css` v0.27.0 or later.
- Removed `flow="s"` from Details.Content. To retain the previous spacing, set `.b--details_content { --flow--base: var(--flow--s) }` (#559).
- Added Tabs keyboard navigation and React support for `?lism-tab=`. Switched panels from `aria-hidden` to `hidden` and fixed out-of-range `defaultIndex` (#559).
- Improved Modal accessibility, fixed unintended closing during dragging and state restoration after closing, and limited `setEvent` to `dialog` elements (#563).
-- Removed Chat from the package. Copy the [example CSS](/en/ui/block-examples/chat/) together with its `@layer lism-block` wrapper (#564).
+- Removed Chat from the package. Copy the [example CSS](/en/ui/examples/chat/) together with its `@layer lism-block` wrapper (#564).
diff --git a/apps/site/src/content/en/ui/components/BalloonBox.mdx b/apps/site/src/content/en/ui/examples/BalloonBox.mdx
similarity index 96%
rename from apps/site/src/content/en/ui/components/BalloonBox.mdx
rename to apps/site/src/content/en/ui/examples/BalloonBox.mdx
index ec12660cb..deee48951 100644
--- a/apps/site/src/content/en/ui/components/BalloonBox.mdx
+++ b/apps/site/src/content/en/ui/examples/BalloonBox.mdx
@@ -9,7 +9,7 @@ import BalloonBox from '@/components/ex/BalloonBox/index.jsx';
Examples of speech-bubble style decorative boxes built with Lism.
-If you need a chat-style conversation UI (a sequence of speech bubbles), see the [Chat](/en/ui/block-examples/chat/) example as well.
+If you need a chat-style conversation UI (a sequence of speech bubbles), see the [Chat](/en/ui/examples/chat/) example as well.
## Source Code
diff --git a/apps/site/src/content/en/ui/components/Banner.mdx b/apps/site/src/content/en/ui/examples/Banner.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Banner.mdx
rename to apps/site/src/content/en/ui/examples/Banner.mdx
diff --git a/apps/site/src/content/en/ui/components/Breadcrumb.mdx b/apps/site/src/content/en/ui/examples/Breadcrumb.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Breadcrumb.mdx
rename to apps/site/src/content/en/ui/examples/Breadcrumb.mdx
diff --git a/apps/site/src/content/en/ui/components/Card.mdx b/apps/site/src/content/en/ui/examples/Card.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Card.mdx
rename to apps/site/src/content/en/ui/examples/Card.mdx
diff --git a/apps/site/src/content/en/ui/block-examples/Chat.mdx b/apps/site/src/content/en/ui/examples/Chat.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/block-examples/Chat.mdx
rename to apps/site/src/content/en/ui/examples/Chat.mdx
diff --git a/apps/site/src/content/en/ui/components/Decorations.mdx b/apps/site/src/content/en/ui/examples/Decorations.mdx
similarity index 99%
rename from apps/site/src/content/en/ui/components/Decorations.mdx
rename to apps/site/src/content/en/ui/examples/Decorations.mdx
index e8cbd3682..b596c11af 100644
--- a/apps/site/src/content/en/ui/components/Decorations.mdx
+++ b/apps/site/src/content/en/ui/examples/Decorations.mdx
@@ -7,7 +7,7 @@ draft: true
import { Grid, Flex, Decorator, Box, Spacer } from 'lism-css/astro';
import { DummyText } from '@lism-css/ui/astro/DummyText';
-import '../../../ja/ui/components/_opt-in/_decorations.css';
+import '../../../ja/ui/_opt-in/_decorations.css';
Examples of decorative boxes built with Lism.
diff --git a/apps/site/src/content/en/ui/components/DividerLabel.mdx b/apps/site/src/content/en/ui/examples/DividerLabel.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/DividerLabel.mdx
rename to apps/site/src/content/en/ui/examples/DividerLabel.mdx
diff --git a/apps/site/src/content/en/ui/components/Hero.mdx b/apps/site/src/content/en/ui/examples/Hero.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Hero.mdx
rename to apps/site/src/content/en/ui/examples/Hero.mdx
diff --git a/apps/site/src/content/en/ui/block-examples/List.mdx b/apps/site/src/content/en/ui/examples/List.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/block-examples/List.mdx
rename to apps/site/src/content/en/ui/examples/List.mdx
diff --git a/apps/site/src/content/en/ui/components/Others.mdx b/apps/site/src/content/en/ui/examples/Others.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Others.mdx
rename to apps/site/src/content/en/ui/examples/Others.mdx
diff --git a/apps/site/src/content/en/ui/components/Reel.mdx b/apps/site/src/content/en/ui/examples/Reel.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/components/Reel.mdx
rename to apps/site/src/content/en/ui/examples/Reel.mdx
diff --git a/apps/site/src/content/en/ui/block-examples/Table.mdx b/apps/site/src/content/en/ui/examples/Table.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/block-examples/Table.mdx
rename to apps/site/src/content/en/ui/examples/Table.mdx
diff --git a/apps/site/src/content/en/ui/block-examples/Timeline.mdx b/apps/site/src/content/en/ui/examples/Timeline.mdx
similarity index 100%
rename from apps/site/src/content/en/ui/block-examples/Timeline.mdx
rename to apps/site/src/content/en/ui/examples/Timeline.mdx
diff --git a/apps/site/src/content/ja/changelog.mdx b/apps/site/src/content/ja/changelog.mdx
index ffdbb4231..87feb9635 100644
--- a/apps/site/src/content/ja/changelog.mdx
+++ b/apps/site/src/content/ja/changelog.mdx
@@ -181,7 +181,7 @@ Lism CSSの各バージョンの変更点を記載します。
- Details.Contentの`flow="s"`を廃止しました。以前の間隔に戻すには`.b--details_content { --flow--base: var(--flow--s) }`を指定してください(#559)。
- Tabsのキーボード操作とReact版の`?lism-tab=`に対応しました。パネルを`aria-hidden`から`hidden`へ変更し、範囲外の`defaultIndex`による不具合も修正しました(#559)。
- Modalのアクセシビリティと開閉処理を改善し、ドラッグ時に誤って閉じる問題や、閉じた後の状態復元を修正しました。`setEvent`の対象は`dialog`要素に限定しました(#563)。
-- Chatをパッケージから削除しました。[実装例](/ui/block-examples/chat/)のCSSを`@layer lism-block`ごとコピーしてください(#564)。
+- Chatをパッケージから削除しました。[実装例](/ui/examples/chat/)のCSSを`@layer lism-block`ごとコピーしてください(#564)。
diff --git a/apps/site/src/content/ja/ui/components/_opt-in/_decorations.css b/apps/site/src/content/ja/ui/components/_opt-in/_decorations.css
deleted file mode 100644
index 274d06aff..000000000
--- a/apps/site/src/content/ja/ui/components/_opt-in/_decorations.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.l--flex--ltr {
- flex-direction: row;
-}
-.l--flex--rtl {
- flex-direction: row-reverse;
-}
-
-/* // rtlで左右を反転させないようにする */
-:where([dir='rtl']) {
- .l--flex--ltr {
- flex-direction: row-reverse;
- }
- .l--flex--rtl {
- flex-direction: row;
- }
-}
diff --git a/apps/site/src/content/ja/ui/components/BalloonBox.mdx b/apps/site/src/content/ja/ui/examples/BalloonBox.mdx
similarity index 94%
rename from apps/site/src/content/ja/ui/components/BalloonBox.mdx
rename to apps/site/src/content/ja/ui/examples/BalloonBox.mdx
index 8994beca3..e1bcd457d 100644
--- a/apps/site/src/content/ja/ui/components/BalloonBox.mdx
+++ b/apps/site/src/content/ja/ui/examples/BalloonBox.mdx
@@ -9,7 +9,7 @@ import BalloonBox from '@/components/ex/BalloonBox/index.jsx';
ふきだし風装飾ボックスの作成例を紹介します。
-チャットの会話風UI(ふきだしの連続表示)が必要な場合は、[Chat](/ui/block-examples/chat/) の実装例も参照してください。
+チャットの会話風UI(ふきだしの連続表示)が必要な場合は、[Chat](/ui/examples/chat/) の実装例も参照してください。
## Source Code
diff --git a/apps/site/src/content/ja/ui/components/Banner.mdx b/apps/site/src/content/ja/ui/examples/Banner.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Banner.mdx
rename to apps/site/src/content/ja/ui/examples/Banner.mdx
diff --git a/apps/site/src/content/ja/ui/components/Breadcrumb.mdx b/apps/site/src/content/ja/ui/examples/Breadcrumb.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Breadcrumb.mdx
rename to apps/site/src/content/ja/ui/examples/Breadcrumb.mdx
diff --git a/apps/site/src/content/ja/ui/components/Card.mdx b/apps/site/src/content/ja/ui/examples/Card.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Card.mdx
rename to apps/site/src/content/ja/ui/examples/Card.mdx
diff --git a/apps/site/src/content/ja/ui/block-examples/Chat.mdx b/apps/site/src/content/ja/ui/examples/Chat.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/block-examples/Chat.mdx
rename to apps/site/src/content/ja/ui/examples/Chat.mdx
diff --git a/apps/site/src/content/ja/ui/components/Decorations.mdx b/apps/site/src/content/ja/ui/examples/Decorations.mdx
similarity index 99%
rename from apps/site/src/content/ja/ui/components/Decorations.mdx
rename to apps/site/src/content/ja/ui/examples/Decorations.mdx
index 0dd954619..e38275478 100644
--- a/apps/site/src/content/ja/ui/components/Decorations.mdx
+++ b/apps/site/src/content/ja/ui/examples/Decorations.mdx
@@ -7,7 +7,7 @@ draft: true
import { Grid, Flex, Decorator, Box, Spacer } from 'lism-css/astro';
import { DummyText } from '@lism-css/ui/astro/DummyText';
-import './_opt-in/_decorations.css';
+import '../_opt-in/_decorations.css';
装飾ボックスの作成例を紹介します。
diff --git a/apps/site/src/content/ja/ui/components/DividerLabel.mdx b/apps/site/src/content/ja/ui/examples/DividerLabel.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/DividerLabel.mdx
rename to apps/site/src/content/ja/ui/examples/DividerLabel.mdx
diff --git a/apps/site/src/content/ja/ui/components/Hero.mdx b/apps/site/src/content/ja/ui/examples/Hero.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Hero.mdx
rename to apps/site/src/content/ja/ui/examples/Hero.mdx
diff --git a/apps/site/src/content/ja/ui/block-examples/List.mdx b/apps/site/src/content/ja/ui/examples/List.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/block-examples/List.mdx
rename to apps/site/src/content/ja/ui/examples/List.mdx
diff --git a/apps/site/src/content/ja/ui/components/Others.mdx b/apps/site/src/content/ja/ui/examples/Others.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Others.mdx
rename to apps/site/src/content/ja/ui/examples/Others.mdx
diff --git a/apps/site/src/content/ja/ui/components/Reel.mdx b/apps/site/src/content/ja/ui/examples/Reel.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/components/Reel.mdx
rename to apps/site/src/content/ja/ui/examples/Reel.mdx
diff --git a/apps/site/src/content/ja/ui/block-examples/Table.mdx b/apps/site/src/content/ja/ui/examples/Table.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/block-examples/Table.mdx
rename to apps/site/src/content/ja/ui/examples/Table.mdx
diff --git a/apps/site/src/content/ja/ui/block-examples/Timeline.mdx b/apps/site/src/content/ja/ui/examples/Timeline.mdx
similarity index 100%
rename from apps/site/src/content/ja/ui/block-examples/Timeline.mdx
rename to apps/site/src/content/ja/ui/examples/Timeline.mdx
diff --git a/apps/site/src/integrations/docs-md/build-llms-txt.test.ts b/apps/site/src/integrations/docs-md/build-llms-txt.test.ts
index cdb7c8239..4ae4cf12a 100644
--- a/apps/site/src/integrations/docs-md/build-llms-txt.test.ts
+++ b/apps/site/src/integrations/docs-md/build-llms-txt.test.ts
@@ -59,9 +59,8 @@ describe('classify', () => {
expect(classify('skills.mdx')).toBe('Getting Started');
});
- it('ui/block-examples と ui/components と property-class は Optional', () => {
- expect(classify('ui/block-examples/Chat.mdx')).toBe('Optional');
- expect(classify('ui/components/Foo.mdx')).toBe('Optional');
+ it('ui/examples と property-class は Optional', () => {
+ expect(classify('ui/examples/Chat.mdx')).toBe('Optional');
expect(classify('property-class/color.mdx')).toBe('Optional');
});
@@ -85,8 +84,7 @@ describe('toUrl', () => {
it('ui/ は /en/ 直下(slug は小文字化される)', () => {
expect(toUrl('ui/Accordion.mdx', 'https://lism-css.com')).toBe('https://lism-css.com/en/ui/accordion.md');
- expect(toUrl('ui/components/Banner.mdx', 'https://lism-css.com')).toBe('https://lism-css.com/en/ui/components/banner.md');
- expect(toUrl('ui/block-examples/Chat.mdx', 'https://lism-css.com')).toBe('https://lism-css.com/en/ui/block-examples/chat.md');
+ expect(toUrl('ui/examples/Banner.mdx', 'https://lism-css.com')).toBe('https://lism-css.com/en/ui/examples/banner.md');
});
it('docs 系の casing は小文字化される(公開 slug と一致させる)', () => {
diff --git a/apps/site/src/integrations/docs-md/build-llms-txt.ts b/apps/site/src/integrations/docs-md/build-llms-txt.ts
index 5e7fa653c..2598600f8 100644
--- a/apps/site/src/integrations/docs-md/build-llms-txt.ts
+++ b/apps/site/src/integrations/docs-md/build-llms-txt.ts
@@ -4,8 +4,8 @@
*
* セクション分類:
* - Getting Started: トップレベルの overview/installation/changelog/features/mcp/skills
- * - UI Components: ui/Xxx.mdx(パッケージ提供の Blocks。block-examples / components 配下を除く)
- * - Optional: ui/block-examples/*, ui/components/*, property-class/*
+ * - UI Components: ui/Xxx.mdx(パッケージ提供の Blocks。examples 配下を除く)
+ * - Optional: ui/examples/*, property-class/*
* - Documentation: それ以外すべて
*
* `_demo/` と `test.mdx`、`draft: true` のファイルは除外する。
@@ -62,9 +62,8 @@ export function parseFrontmatter(content: string): FrontMatter {
export function classify(rel: string): Section | null {
if (rel.startsWith('_demo/') || rel === 'test.mdx') return null;
const slug = rel.replace(/\.mdx$/, '');
- // ui/ 直下(パッケージ提供の Blocks)以外の作例・実装例は Optional 扱い(#557)
- if (rel.startsWith('ui/block-examples/')) return 'Optional';
- if (rel.startsWith('ui/components/')) return 'Optional';
+ // ui/ 直下(パッケージ提供の Blocks)以外の実装例は Optional 扱い
+ if (rel.startsWith('ui/examples/')) return 'Optional';
if (rel.startsWith('property-class/')) return 'Optional';
if (rel.startsWith('ui/')) return 'UI Components';
if (GS_SLUGS.has(slug)) return 'Getting Started';
diff --git a/apps/site/src/integrations/docs-md/build-ui-index-md.test.ts b/apps/site/src/integrations/docs-md/build-ui-index-md.test.ts
index 85d4ba62e..50614bd3c 100644
--- a/apps/site/src/integrations/docs-md/build-ui-index-md.test.ts
+++ b/apps/site/src/integrations/docs-md/build-ui-index-md.test.ts
@@ -15,7 +15,7 @@ async function writeFile(filePath: string, content: string) {
}
describe('buildUiIndexMd', () => {
- it('UI index markdown を3分類で生成し、draft と _ 始まりを除外する', async () => {
+ it('UI index markdown を2分類で生成し、draft と _ 始まりを除外する', async () => {
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'lism-ui-index-md-'));
const htmlPath = path.join(tmpDir, 'dist/ui/index.html');
const outputPath = path.join(tmpDir, 'dist/ui.md');
@@ -51,15 +51,15 @@ description: Button docs
body`
);
await writeFile(
- path.join(uiContentDir, 'block-examples/Chat.mdx'),
+ path.join(uiContentDir, 'examples/Chat.mdx'),
`---
title: Chat
-description: Chat block example
+description: Chat example
---
body`
);
await writeFile(
- path.join(uiContentDir, 'components/Banner.mdx'),
+ path.join(uiContentDir, 'examples/Banner.mdx'),
`---
title: Banner
description: Banner example
@@ -67,7 +67,7 @@ description: Banner example
body`
);
await writeFile(
- path.join(uiContentDir, 'components/Draft.mdx'),
+ path.join(uiContentDir, 'examples/Draft.mdx'),
`---
title: Draft
description: Draft example
@@ -100,16 +100,14 @@ body`
expect(md).toContain('## Blocks');
expect(md).toContain('- [Button](https://lism-css.com/ui/button.md): Button docs');
expect(md).toContain('- [ShapeDivider](https://lism-css.com/ui/shapedivider.md): Shape divider docs');
- expect(md).toContain('## Block Examples');
- expect(md).toContain('- [Chat](https://lism-css.com/ui/block-examples/chat.md): Chat block example');
- expect(md).toContain('## Components');
- expect(md).toContain('- [Banner](https://lism-css.com/ui/components/banner.md): Banner example');
+ expect(md).toContain('## Examples');
+ expect(md).toContain('- [Chat](https://lism-css.com/ui/examples/chat.md): Chat example');
+ expect(md).toContain('- [Banner](https://lism-css.com/ui/examples/banner.md): Banner example');
expect(md).not.toContain('Draft');
expect(md).not.toContain('Hidden');
expect(md.indexOf('[Button]')).toBeLessThan(md.indexOf('[ShapeDivider]'));
- // 見出しの並びは Blocks → Block Examples → Components
- expect(md.indexOf('## Blocks')).toBeLessThan(md.indexOf('## Block Examples'));
- expect(md.indexOf('## Block Examples')).toBeLessThan(md.indexOf('## Components'));
+ // 見出しの並びは Blocks → Examples
+ expect(md.indexOf('## Blocks')).toBeLessThan(md.indexOf('## Examples'));
} finally {
await fs.rm(tmpDir, { recursive: true, force: true });
}
diff --git a/apps/site/src/integrations/docs-md/build-ui-index-md.ts b/apps/site/src/integrations/docs-md/build-ui-index-md.ts
index 7cedb58a7..30be78856 100644
--- a/apps/site/src/integrations/docs-md/build-ui-index-md.ts
+++ b/apps/site/src/integrations/docs-md/build-ui-index-md.ts
@@ -8,7 +8,7 @@
*
* - frontmatter (title / description / url) は dist 側 index.html から抽出して同期を保つ
* - 本文は content/{lang}/ui/ 配下の `.mdx` から組み立てる(`_` 始まり / `draft: true` は除外)
- * - 見出しは Blocks(ui/ 直下)/ Block Examples(ui/block-examples/)/ Components(ui/components/)の3分類
+ * - 見出しは Blocks(ui/ 直下)/ Examples(ui/examples/)の2分類
* - リンクは個別ページの `.md`(`convert-html-to-md` が生成済み)を指す
*/
import fs from 'node:fs/promises';
@@ -54,10 +54,9 @@ export async function buildUiIndexMd(opts: {
// _opt-in / _demo など `_` 始まりは公開対象外なので走査時に除外
const files = await walkMdx(uiContentDir, { skipUnderscore: true });
- // ui/ 直下(パッケージ提供)/ block-examples/ / components/ の3分類(#557)
+ // ui/ 直下(パッケージ提供)/ examples/ の2分類
const blocks: Entry[] = [];
- const blockExamples: Entry[] = [];
- const components: Entry[] = [];
+ const examples: Entry[] = [];
for (const rel of files) {
const abs = path.join(uiContentDir, rel);
@@ -76,15 +75,13 @@ export async function buildUiIndexMd(opts: {
description: fm.description ?? '',
slug,
};
- if (rel.startsWith('block-examples/')) blockExamples.push(entry);
- else if (rel.startsWith('components/')) components.push(entry);
+ if (rel.startsWith('examples/')) examples.push(entry);
else blocks.push(entry);
}
const sortByTitle = (a: Entry, b: Entry) => a.title.localeCompare(b.title);
blocks.sort(sortByTitle);
- blockExamples.sort(sortByTitle);
- components.sort(sortByTitle);
+ examples.sort(sortByTitle);
const lines: string[] = ['---', `title: ${yamlString(meta.title)}`];
if (meta.description) lines.push(`description: ${yamlString(meta.description)}`);
@@ -100,20 +97,13 @@ export async function buildUiIndexMd(opts: {
for (const e of blocks) lines.push(formatEntry(e, uiUrlPrefix));
lines.push('');
}
- if (blockExamples.length > 0) {
- lines.push('## Block Examples', '');
- for (const e of blockExamples) lines.push(formatEntry(e, uiUrlPrefix));
- lines.push('');
- }
- if (components.length > 0) {
- lines.push('## Components', '');
- for (const e of components) lines.push(formatEntry(e, uiUrlPrefix));
+ if (examples.length > 0) {
+ lines.push('## Examples', '');
+ for (const e of examples) lines.push(formatEntry(e, uiUrlPrefix));
lines.push('');
}
await fs.mkdir(path.dirname(outputPath), { recursive: true });
await fs.writeFile(outputPath, lines.join('\n'));
- logger.info(
- `generated ${path.basename(outputPath)} (${blocks.length} blocks, ${blockExamples.length} block examples, ${components.length} components)`
- );
+ logger.info(`generated ${path.basename(outputPath)} (${blocks.length} blocks, ${examples.length} examples)`);
}
diff --git a/apps/site/src/lib/sidebarPosts.test.ts b/apps/site/src/lib/sidebarPosts.test.ts
index cec490f5e..3a1287613 100644
--- a/apps/site/src/lib/sidebarPosts.test.ts
+++ b/apps/site/src/lib/sidebarPosts.test.ts
@@ -7,21 +7,19 @@ function post(id: string, order?: number) {
return { id, data: { order } };
}
-// ui セクションと同じ3分類構成(Blocks / Block Examples / Components)
+// ui セクションと同じ2分類構成(Blocks / Examples)
const uiSections: SidebarSection[] = [
{ label: 'Blocks', dir: 'ui' },
- { label: 'Block Examples', dir: 'ui/block-examples' },
- { label: 'Components', dir: 'ui/components' },
+ { label: 'Examples', dir: 'ui/examples' },
];
describe('groupPostsBySidebarDirs', () => {
it('ネストしたdirは最長一致で分類される(ui直下とui/配下サブディレクトリを混同しない)', () => {
- const posts = [post('ui/Button', 1), post('ui/block-examples/Timeline', 1), post('ui/components/Card', 1), post('ui/components/Hero', 2)];
+ const posts = [post('ui/Button', 1), post('ui/examples/Card', 1), post('ui/examples/Hero', 2)];
const grouped = groupPostsBySidebarDirs(posts, uiSections);
expect(grouped['ui'].map((p) => p.id)).toEqual(['ui/Button']);
- expect(grouped['ui/block-examples'].map((p) => p.id)).toEqual(['ui/block-examples/Timeline']);
- expect(grouped['ui/components'].map((p) => p.id)).toEqual(['ui/components/Card', 'ui/components/Hero']);
+ expect(grouped['ui/examples'].map((p) => p.id)).toEqual(['ui/examples/Card', 'ui/examples/Hero']);
});
it('カテゴリ内はorder順にソートされる(未指定は999扱い・同順位は入力順を維持)', () => {
@@ -42,17 +40,18 @@ describe('groupPostsBySidebarDirs', () => {
});
describe('flattenPostsBySidebarOrder', () => {
- it('セクションの定義順にグループ境界が並ぶ(Blocks → Block Examples → Components)', () => {
+ it('セクションの定義順にグループ境界が並ぶ(Blocks → Examples)', () => {
const posts = [
// 入力順はシャッフルしておく
- post('ui/components/Card', 1),
+ post('ui/examples/Chat', 2),
post('ui/Button', 2),
- post('ui/block-examples/Timeline', 1),
+ post('ui/examples/Timeline', 1),
post('ui/Accordion', 1),
- post('ui/block-examples/Chat', 2),
+ post('ui/examples/Card', 1),
];
const ordered = flattenPostsBySidebarOrder(posts, uiSections).map((p) => p.id);
- expect(ordered).toEqual(['ui/Accordion', 'ui/Button', 'ui/block-examples/Timeline', 'ui/block-examples/Chat', 'ui/components/Card']);
+ // グループ内は order 順、同順位(Timeline / Card)は入力順
+ expect(ordered).toEqual(['ui/Accordion', 'ui/Button', 'ui/examples/Timeline', 'ui/examples/Card', 'ui/examples/Chat']);
});
it('items指定セクションは記載順で並び、dirセクションと重複しない', () => {
@@ -65,16 +64,16 @@ describe('flattenPostsBySidebarOrder', () => {
expect(ordered).toEqual(['b', 'a', 'core-components/box']);
});
- it('実際のuiサイドバー設定でも3分類の境界順で並ぶ(回帰テスト)', () => {
- const posts = [post('ui/components/Card', 1), post('ui/block-examples/Timeline', 1), post('ui/Button', 1)];
+ it('実際のuiサイドバー設定でも2分類の境界順で並ぶ(回帰テスト)', () => {
+ const posts = [post('ui/examples/Card', 1), post('ui/examples/Timeline', 2), post('ui/Button', 1)];
const ordered = flattenPostsBySidebarOrder(posts, sidebarConfig.sections.ui).map((p) => p.id);
- expect(ordered).toEqual(['ui/Button', 'ui/block-examples/Timeline', 'ui/components/Card']);
+ expect(ordered).toEqual(['ui/Button', 'ui/examples/Card', 'ui/examples/Timeline']);
});
});
describe('getPostUrl', () => {
it('ui/配下はサイト直下、それ以外は/docs/配下のURLになる', () => {
- expect(getPostUrl('ui/components/card')).toBe('/ui/components/card/');
+ expect(getPostUrl('ui/examples/card')).toBe('/ui/examples/card/');
expect(getPostUrl('core-components/box')).toBe('/docs/core-components/box/');
});
});
diff --git a/apps/site/src/lib/sidebarPosts.ts b/apps/site/src/lib/sidebarPosts.ts
index f7d3dd59f..52cdd33be 100644
--- a/apps/site/src/lib/sidebarPosts.ts
+++ b/apps/site/src/lib/sidebarPosts.ts
@@ -46,7 +46,7 @@ function getItemsReferencedSlugs(sectionItems: SidebarSection[]): Set {
/**
* サイドバー設定の dir 定義に基づいて記事をカテゴリ分けする
- * - dir は最長一致(例: `ui/components/Card` は `ui` より `ui/components` を優先)
+ * - dir は最長一致(例: `ui/examples/Card` は `ui` より `ui/examples` を優先)
* - items で直接参照されている記事は dir カテゴリに含めない
* - 各カテゴリ内は order 順にソート(未指定は999、同順位は入力順を維持)
*/
@@ -65,7 +65,7 @@ export function groupPostsBySidebarDirs(allPosts: T[]
if (itemsReferencedSlugs.has(post.id)) continue;
// sidebarConfigで定義されたdirと記事のslugをマッチング
- // 例: "ui/components/Card" は "ui" ではなく "ui/components" にマッチ
+ // 例: "ui/examples/Card" は "ui" ではなく "ui/examples" にマッチ
let category = '/';
for (const dir of configuredDirs) {
if (dir === '/') {
diff --git a/apps/site/src/pages/[lang]/ui/index.astro b/apps/site/src/pages/[lang]/ui/index.astro
index cca62c63b..2236231aa 100644
--- a/apps/site/src/pages/[lang]/ui/index.astro
+++ b/apps/site/src/pages/[lang]/ui/index.astro
@@ -31,11 +31,9 @@ const allUiPosts = await getUiPostsByLang(lang);
const byOrder = (a: (typeof allUiPosts)[number], b: (typeof allUiPosts)[number]) => (a.data.order ?? 999) - (b.data.order ?? 999);
-const blockExamplePosts = allUiPosts.filter((post) => post.id.startsWith('ui/block-examples/')).sort(byOrder);
+const examplePosts = allUiPosts.filter((post) => post.id.startsWith('ui/examples/')).sort(byOrder);
-const componentPosts = allUiPosts.filter((post) => post.id.startsWith('ui/components/')).sort(byOrder);
-
-const blockPosts = allUiPosts.filter((post) => !post.id.startsWith('ui/block-examples/') && !post.id.startsWith('ui/components/')).sort(byOrder);
+const blockPosts = allUiPosts.filter((post) => !post.id.startsWith('ui/examples/')).sort(byOrder);
const getPostUrl = (post: (typeof allUiPosts)[number]) => `/${lang}/ui/${post.id.replace('ui/', '')}/`;
---
@@ -56,29 +54,13 @@ const getPostUrl = (post: (typeof allUiPosts)[number]) => `/${lang}/ui/${post.id
{
- blockExamplePosts.length > 0 && (
-
-
-
- Examples of b-- parts you can adopt by copying their CSS.
-
-
-
- {blockExamplePosts.map((post) => (
-
- ))}
-
-
- )
- }
- {
- componentPosts.length > 0 && (
+ examplePosts.length > 0 && (
-
- Additional implementation examples and samples using Lism CSS and Lism UI.
+
+ Implementation examples of parts and techniques outside the package, built with Lism CSS.
- {componentPosts.map((post) => (
+ {examplePosts.map((post) => (
))}
diff --git a/apps/site/src/pages/ui/index.astro b/apps/site/src/pages/ui/index.astro
index 31ebaff4c..428c5aea8 100644
--- a/apps/site/src/pages/ui/index.astro
+++ b/apps/site/src/pages/ui/index.astro
@@ -12,11 +12,9 @@ const allUiPosts = await getUiPostsByLang(currentLang);
const byOrder = (a: (typeof allUiPosts)[number], b: (typeof allUiPosts)[number]) => (a.data.order ?? 999) - (b.data.order ?? 999);
-const blockExamplePosts = allUiPosts.filter((post) => post.id.startsWith('ui/block-examples/')).sort(byOrder);
+const examplePosts = allUiPosts.filter((post) => post.id.startsWith('ui/examples/')).sort(byOrder);
-const componentPosts = allUiPosts.filter((post) => post.id.startsWith('ui/components/')).sort(byOrder);
-
-const blockPosts = allUiPosts.filter((post) => !post.id.startsWith('ui/block-examples/') && !post.id.startsWith('ui/components/')).sort(byOrder);
+const blockPosts = allUiPosts.filter((post) => !post.id.startsWith('ui/examples/')).sort(byOrder);
const getPostUrl = (post: (typeof allUiPosts)[number]) => `/ui/${post.id.replace('ui/', '')}/`;
---
@@ -37,29 +35,13 @@ const getPostUrl = (post: (typeof allUiPosts)[number]) => `/ui/${post.id.replace
{
- blockExamplePosts.length > 0 && (
-
-
-
- CSSをコピーして導入するb--部品の作例です。
-
-
-
- {blockExamplePosts.map((post) => (
-
- ))}
-
-
- )
- }
- {
- componentPosts.length > 0 && (
+ examplePosts.length > 0 && (
-
- Lism CSS, Lism UIをベースにした、その他の実装例・サンプル集です。
+
+ Lism CSSで組み立てる、パッケージ外の部品・技法の実装例です。
- {componentPosts.map((post) => (
+ {examplePosts.map((post) => (
))}
diff --git a/docs/decisions.md b/docs/decisions.md
index e79ff6a11..a81f6b584 100644
--- a/docs/decisions.md
+++ b/docs/decisions.md
@@ -1,7 +1,17 @@
-基準日: 2026-10-01・コミット6cf68b0bc
+基準日: 2026-10-01・コミットa1ea2a076
# 意思決定の記録
+## 2026-10-01: docsの`ui/`は「Blocks / Examples」の2分類にし、作例のURLを`/ui/examples/`へ統一する
+
+2026-08-15に3分類(Blocks / Block Examples / Components)へ再編したが、StepsとTimelineをpatternsのProcessへ移した(#659)結果、Block Examplesの公開ページはChatだけになった。Timelineは`ui/`では`b--timeline`、patternsでは`c--timeline`で書かれており、接頭辞は導入側の運用で変わる。patternsも`_style.css`付きの作例を載せているため、CSSの有無と`b--` / `c--`は置き場所の境界にならない。
+
+- 決定: セクションに仕立てられる作例は`patterns/`へ置く。部品スケールでも、見出し付きのセクションとして成立するなら対象にする。#566の「部品スケールはpatternsへ移さない」を覆す。
+- 決定: セクションにならない部品と、技法の解説が本体のページは`ui/examples/`に置く。CSSの有無と`b--` / `c--`では分けず、ページ内で明示する。2026-08-15の3分類の決定を覆す。
+- 決定: URLは`/ui/examples/{slug}/`。公開実績のある`/ui/components/*`・`/ui/block-examples/*`はリダイレクトする。
+- 却下: URLを変えずラベルだけ統合する案。ディレクトリ名と分類がずれたまま残る。
+- 却下: 作例をdocs側へ移し`ui/`をパッケージ提供物だけにする案。docsのサイドバーは既に9セクションあり、作例が埋もれる。
+
## 2026-10-01: lism-cssの深いパスは`getLismProps`だけを公開APIにし、uiが使ったものは1.xの間できれば残す
lism-cssの`exports`は`./lib/*`・`./react/*`・`./astro/*`をワイルドカードで公開しており、内部モジュールもすべてimportできる。1.0.0以降は公開APIを壊す変更にメジャー更新が要るため、v1で互換を約束する範囲を決めた。uiのソースは`lism-css/lib/helper/atts`などの内部モジュールをimportしており、`lism-cli ui add`はそのソースを利用者のプロジェクトへそのままコピーする。コピーされたコードは利用者のlism-cssを直接importし、uiを更新しても置き換わらない。
diff --git a/documents/docs-md.md b/documents/docs-md.md
index e64cfd7f5..34e9e81d9 100644
--- a/documents/docs-md.md
+++ b/documents/docs-md.md
@@ -1,4 +1,4 @@
-基準日: 2026-09-19・コミット9feef9fa0
+基準日: 2026-10-01・コミットa1ea2a076
# docs-md integration 処理フロー
@@ -48,7 +48,7 @@
| 順 | セクション | 対象 |
| --- | --- | --- |
-| 1 | Optional | `ui/block-examples/*` / `ui/components/*` / `property-class/*` |
+| 1 | Optional | `ui/examples/*` / `property-class/*` |
| 2 | UI Components | 上記以外の`ui/`配下(`ui/DummyText`も含む) |
| 3 | Getting Started | トップレベルの`overview` / `installation` / `changelog` / `features` / `mcp` / `skills` |
| 4 | Documentation | 残り全部 |
@@ -63,7 +63,7 @@
- frontmatter(title / description / url): ビルド済み`dist/{lang}/ui/index.html`から`rehype-extract-meta`と同等の処理で取得し、一覧ページ本体と同期させる。
- 本文: `content/{ja,en}/ui/`を`walkMdx`で走査する。`_`始まりのファイル・ディレクトリと`draft: true`は除外。
-- 見出し: `ui/`直下は`## Blocks`、`block-examples/`は`## Block Examples`、`components/`は`## Components`。各タイトル昇順。
+- 見出し: `ui/`直下は`## Blocks`、`examples/`は`## Examples`。各タイトル昇順。
- リンク先: 各ページの`.md`(`convert-html-to-md.ts`の生成物)。
diff --git a/packages/mcp/src/data/docs-index.json b/packages/mcp/src/data/docs-index.json
index 3a77972d2..88b5e2118 100644
--- a/packages/mcp/src/data/docs-index.json
+++ b/packages/mcp/src/data/docs-index.json
@@ -1593,7 +1593,7 @@
"snippet": "アバター画像用のコンポーネント。円形の画像表示に使用。src 未指定時はルートに b--avatar--initial が付き、name の先頭1文字をイニシャルとして中央に表示し、alt は name より優先される代替テキスト(alt=\"\" で装飾扱い)。@lism-css/uiパッケージで提供。"
},
{
- "sourcePath": "ui/block-examples/Chat.mdx",
+ "sourcePath": "ui/examples/Chat.mdx",
"title": "Chat",
"description": "Lism CSS で実装するチャット風UI(b--chat)の実装例です。",
"category": "ui",
@@ -1657,7 +1657,7 @@
"snippet": "セクション間の波型などの装飾的な区切り要素。SVGベースの形状で区切りを表現。@lism-css/uiパッケージで提供。"
},
{
- "sourcePath": "ui/components/Card.mdx",
+ "sourcePath": "ui/examples/Card.mdx",
"title": "Card",
"description": "Lism CSS で実装するカード型コンテンツレイアウトの実装例です。",
"category": "ui",
@@ -1675,7 +1675,7 @@
"snippet": "Lism CSS を使ったカードレイアウトの実装例。WithSide+is--boxLink で縦横自動切り替えカード、is--coverLink でカード内別リンク配置、set--bdrsInner での内側角丸活用、ホバーでテキストを出現させる例など多様なパターンを紹介。"
},
{
- "sourcePath": "ui/components/Banner.mdx",
+ "sourcePath": "ui/examples/Banner.mdx",
"title": "Banner",
"description": "Lism CSS で実装するバナーリンクの実装例です。",
"category": "ui",
@@ -1684,7 +1684,7 @@
"snippet": "バナーの実装例。"
},
{
- "sourcePath": "ui/components/Breadcrumb.mdx",
+ "sourcePath": "ui/examples/Breadcrumb.mdx",
"title": "Breadcrumb",
"description": "Lism CSS で実装するパンくずリストナビゲーションの実装例です。",
"category": "ui",
@@ -1693,7 +1693,7 @@
"snippet": "パンくずリストの実装例。"
},
{
- "sourcePath": "ui/components/DividerLabel.mdx",
+ "sourcePath": "ui/examples/DividerLabel.mdx",
"title": "DividerLabel",
"description": "Lism CSS で実装する、ラベル付き区切り線コンポーネントの実装例です。",
"category": "ui",
@@ -1702,7 +1702,7 @@
"snippet": "ラベル付き区切り線の実装例。"
},
{
- "sourcePath": "ui/components/Reel.mdx",
+ "sourcePath": "ui/examples/Reel.mdx",
"title": "Reel",
"description": "Lism CSS で実装する、コンテンツを横スクロールで表示するリールコンポーネントの実装例です。",
"category": "ui",
diff --git a/packages/mcp/src/data/meta.ts b/packages/mcp/src/data/meta.ts
index 5111316c9..acc5e1efd 100644
--- a/packages/mcp/src/data/meta.ts
+++ b/packages/mcp/src/data/meta.ts
@@ -3,6 +3,6 @@ import { packageVersion } from '../lib/version.js';
export const meta: MetaInfo = {
generatedAt: '2026-10-01',
- sourceCommit: '41f90b398',
+ sourceCommit: 'a1ea2a076',
docsVersion: packageVersion,
};
diff --git a/packages/mcp/src/lib/search.ts b/packages/mcp/src/lib/search.ts
index febaa6725..135eae6f6 100644
--- a/packages/mcp/src/lib/search.ts
+++ b/packages/mcp/src/lib/search.ts
@@ -135,7 +135,7 @@ function getNextTool(entry: DocsEntry, guideTopics?: ReadonlySet): strin
return `get_props_system(prop: "${basename}")`;
}
// 実装例ページはパッケージ提供コンポーネントではないためget_componentでは解決できない。
- if (withoutExt.startsWith('ui/block-examples/') || withoutExt.startsWith('ui/components/')) {
+ if (withoutExt.startsWith('ui/examples/')) {
return null;
}
diff --git a/packages/mcp/src/tests/search.test.ts b/packages/mcp/src/tests/search.test.ts
index fee677343..e984a09de 100644
--- a/packages/mcp/src/tests/search.test.ts
+++ b/packages/mcp/src/tests/search.test.ts
@@ -85,22 +85,22 @@ describe('searchDocs', () => {
const mixedCaseEntries: DocsEntry[] = [
entry({ sourcePath: 'core-components/Group.mdx', title: 'Group', keywords: ['layout'] }),
entry({ sourcePath: 'ui/DummyText.mdx', title: 'DummyText', keywords: ['text'] }),
- entry({ sourcePath: 'ui/components/Card.mdx', title: 'Card', keywords: ['example'] }),
+ entry({ sourcePath: 'ui/examples/Card.mdx', title: 'Card', keywords: ['example'] }),
];
expect(searchDocs(mixedCaseEntries, 'Group')[0].url).toBe('https://lism-css.com/docs/core-components/group/');
expect(searchDocs(mixedCaseEntries, 'DummyText')[0].url).toBe('https://lism-css.com/ui/dummytext/');
- expect(searchDocs(mixedCaseEntries, 'Card')[0].url).toBe('https://lism-css.com/ui/components/card/');
+ expect(searchDocs(mixedCaseEntries, 'Card')[0].url).toBe('https://lism-css.com/ui/examples/card/');
});
it('ui/ 配下の URL は /docs/ を付けずサイト直下になる', () => {
const uiEntries: DocsEntry[] = [
entry({ sourcePath: 'ui/Accordion.mdx', title: 'Accordion', keywords: ['ui'] }),
- entry({ sourcePath: 'ui/components/Card.mdx', title: 'Card', keywords: ['example'] }),
- entry({ sourcePath: 'ui/block-examples/Timeline.mdx', title: 'Timeline', keywords: ['timeline'] }),
+ entry({ sourcePath: 'ui/examples/Card.mdx', title: 'Card', keywords: ['example'] }),
+ entry({ sourcePath: 'ui/examples/Timeline.mdx', title: 'Timeline', keywords: ['timeline'] }),
];
expect(searchDocs(uiEntries, 'Accordion')[0].url).toBe('https://lism-css.com/ui/accordion/');
- expect(searchDocs(uiEntries, 'Card')[0].url).toBe('https://lism-css.com/ui/components/card/');
- expect(searchDocs(uiEntries, 'Timeline')[0].url).toBe('https://lism-css.com/ui/block-examples/timeline/');
+ expect(searchDocs(uiEntries, 'Card')[0].url).toBe('https://lism-css.com/ui/examples/card/');
+ expect(searchDocs(uiEntries, 'Timeline')[0].url).toBe('https://lism-css.com/ui/examples/timeline/');
});
it('マッチしない場合は空配列を返す', () => {
@@ -125,15 +125,8 @@ describe('searchDocs — nextTool', () => {
expect(results[0].nextTool).toBe('get_component(name: "Accordion", package: "@lism-css/ui")');
});
- it('ui/components/ 配下は category=ui でも null を返す(get_component で解決できないため)', () => {
- const results = searchDocs([entry({ sourcePath: 'ui/components/Card.mdx', title: 'Card', keywords: ['example'], category: 'ui' })], 'Card', {
- guideTopics,
- });
- expect(results[0].nextTool).toBeNull();
- });
-
- it('ui/block-examples/ 配下は category=ui でも null を返す(get_component で解決できないため)', () => {
- const results = searchDocs([entry({ sourcePath: 'ui/block-examples/Chat.mdx', title: 'Chat', keywords: ['chat'], category: 'ui' })], 'Chat', {
+ it('ui/examples/ 配下は category=ui でも null を返す(get_component で解決できないため)', () => {
+ const results = searchDocs([entry({ sourcePath: 'ui/examples/Card.mdx', title: 'Card', keywords: ['example'], category: 'ui' })], 'Card', {
guideTopics,
});
expect(results[0].nextTool).toBeNull();
diff --git a/templates/lp/astro/src/pages/interior/_style.css b/templates/lp/astro/src/pages/interior/_style.css
index 9d5d126eb..dd01bd7f2 100644
--- a/templates/lp/astro/src/pages/interior/_style.css
+++ b/templates/lp/astro/src/pages/interior/_style.css
@@ -71,7 +71,7 @@
/**
* 横リール: 中央スナップ(has--snap の子へ --snapAlign が効く)
- * @see https://lism-css.com/ui/components/reel/
+ * @see https://lism-css.com/ui/examples/reel/
*/
.c--voice_reel {
--snapType: x mandatory;