From 6b5d30124940ce03e28eb444435044a790a7a1c6 Mon Sep 17 00:00:00 2001 From: ddryo <31400297+ddryo@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:51:16 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20docs=E3=81=AEui/=E3=82=92Blocks=20/=20E?= =?UTF-8?q?xamples=E3=81=AE2=E5=88=86=E9=A1=9E=E3=81=AB=E3=81=97=E3=80=81?= =?UTF-8?q?=E4=BD=9C=E4=BE=8B=E3=83=9A=E3=83=BC=E3=82=B8=E3=82=92/ui/examp?= =?UTF-8?q?les/=E3=81=B8=E7=B5=B1=E5=90=88=E3=81=97=E3=81=A6=E6=97=A7URL?= =?UTF-8?q?=E3=82=92=E3=83=AA=E3=83=80=E3=82=A4=E3=83=AC=E3=82=AF=E3=83=88?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01SdQQUP5KUna8zNFJ6cbPuD --- .claude/commands/docs-update.md | 3 +- apps/site/src/config/redirects.ts | 40 +++++++++---------- apps/site/src/config/sidebar.ts | 8 +--- apps/site/src/content/en/changelog.mdx | 2 +- .../{components => examples}/BalloonBox.mdx | 2 +- .../en/ui/{components => examples}/Banner.mdx | 0 .../{components => examples}/Breadcrumb.mdx | 0 .../en/ui/{components => examples}/Card.mdx | 0 .../ui/{block-examples => examples}/Chat.mdx | 0 .../{components => examples}/Decorations.mdx | 2 +- .../{components => examples}/DividerLabel.mdx | 0 .../en/ui/{components => examples}/Hero.mdx | 0 .../ui/{block-examples => examples}/List.mdx | 0 .../en/ui/{components => examples}/Others.mdx | 0 .../en/ui/{components => examples}/Reel.mdx | 0 .../ui/{block-examples => examples}/Table.mdx | 0 .../{block-examples => examples}/Timeline.mdx | 0 apps/site/src/content/ja/changelog.mdx | 2 +- .../ja/ui/components/_opt-in/_decorations.css | 16 -------- .../{components => examples}/BalloonBox.mdx | 2 +- .../ja/ui/{components => examples}/Banner.mdx | 0 .../{components => examples}/Breadcrumb.mdx | 0 .../ja/ui/{components => examples}/Card.mdx | 0 .../ui/{block-examples => examples}/Chat.mdx | 0 .../{components => examples}/Decorations.mdx | 2 +- .../{components => examples}/DividerLabel.mdx | 0 .../ja/ui/{components => examples}/Hero.mdx | 0 .../ui/{block-examples => examples}/List.mdx | 0 .../ja/ui/{components => examples}/Others.mdx | 0 .../ja/ui/{components => examples}/Reel.mdx | 0 .../ui/{block-examples => examples}/Table.mdx | 0 .../{block-examples => examples}/Timeline.mdx | 0 .../docs-md/build-llms-txt.test.ts | 8 ++-- .../integrations/docs-md/build-llms-txt.ts | 9 ++--- .../docs-md/build-ui-index-md.test.ts | 22 +++++----- .../integrations/docs-md/build-ui-index-md.ts | 28 +++++-------- apps/site/src/lib/sidebarPosts.test.ts | 29 +++++++------- apps/site/src/lib/sidebarPosts.ts | 4 +- apps/site/src/pages/[lang]/ui/index.astro | 30 +++----------- apps/site/src/pages/ui/index.astro | 30 +++----------- docs/decisions.md | 12 +++++- documents/docs-md.md | 6 +-- packages/mcp/src/data/docs-index.json | 12 +++--- packages/mcp/src/data/meta.ts | 2 +- packages/mcp/src/lib/search.ts | 2 +- packages/mcp/src/tests/search.test.ts | 23 ++++------- .../lp/astro/src/pages/interior/_style.css | 2 +- 47 files changed, 114 insertions(+), 184 deletions(-) rename apps/site/src/content/en/ui/{components => examples}/BalloonBox.mdx (96%) rename apps/site/src/content/en/ui/{components => examples}/Banner.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Breadcrumb.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Card.mdx (100%) rename apps/site/src/content/en/ui/{block-examples => examples}/Chat.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Decorations.mdx (99%) rename apps/site/src/content/en/ui/{components => examples}/DividerLabel.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Hero.mdx (100%) rename apps/site/src/content/en/ui/{block-examples => examples}/List.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Others.mdx (100%) rename apps/site/src/content/en/ui/{components => examples}/Reel.mdx (100%) rename apps/site/src/content/en/ui/{block-examples => examples}/Table.mdx (100%) rename apps/site/src/content/en/ui/{block-examples => examples}/Timeline.mdx (100%) delete mode 100644 apps/site/src/content/ja/ui/components/_opt-in/_decorations.css rename apps/site/src/content/ja/ui/{components => examples}/BalloonBox.mdx (94%) rename apps/site/src/content/ja/ui/{components => examples}/Banner.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Breadcrumb.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Card.mdx (100%) rename apps/site/src/content/ja/ui/{block-examples => examples}/Chat.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Decorations.mdx (99%) rename apps/site/src/content/ja/ui/{components => examples}/DividerLabel.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Hero.mdx (100%) rename apps/site/src/content/ja/ui/{block-examples => examples}/List.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Others.mdx (100%) rename apps/site/src/content/ja/ui/{components => examples}/Reel.mdx (100%) rename apps/site/src/content/ja/ui/{block-examples => examples}/Table.mdx (100%) rename apps/site/src/content/ja/ui/{block-examples => examples}/Timeline.mdx (100%) 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;