From 7099360c96192e894c54047918f61662c26ab539 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Fri, 29 Aug 2025 15:28:39 +0900 Subject: [PATCH 01/13] =?UTF-8?q?=E5=90=84=E7=AB=A0=E3=81=AE=E7=9B=AE?= =?UTF-8?q?=E6=AC=A1=E8=A1=A8=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/[docs_id]/splitMarkdownClient.ts | 23 ++++++++ app/sidebar.tsx | 78 ++++++++++++++++++---------- package-lock.json | 23 ++++++++ package.json | 1 + 4 files changed, 98 insertions(+), 27 deletions(-) create mode 100644 app/[docs_id]/splitMarkdownClient.ts diff --git a/app/[docs_id]/splitMarkdownClient.ts b/app/[docs_id]/splitMarkdownClient.ts new file mode 100644 index 0000000..5715f8c --- /dev/null +++ b/app/[docs_id]/splitMarkdownClient.ts @@ -0,0 +1,23 @@ +import { MarkdownSection } from "./splitMarkdown"; + +export function splitMarkdownClient(content: string): MarkdownSection[] { + const lines = content.split("\n"); + const sections: MarkdownSection[] = []; + let current: MarkdownSection | null = null; + + for (const line of lines) { + const match = line.match(/^(#{1,6})\s+(.*)/); // 見出しを検出 + if (match) { + if (current) sections.push(current); // 前のセクションを保存 + current = { + level: match[1].length, // 見出しレベル(# の数) + title: match[2].trim(), // 見出しタイトル + content: "", // 内容は後続行で追加 + }; + } else if (current) { + current.content += line + "\n"; // セクション内容に追加 + } + } + if (current) sections.push(current); // 最後のセクションを保存 + return sections.map((s) => ({ ...s, content: s.content.trim() })); +} diff --git a/app/sidebar.tsx b/app/sidebar.tsx index eda32e1..6f3b5e0 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -1,6 +1,40 @@ +"use client"; import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { useState } from "react"; +import { split } from "react-ace"; +import useSWR from 'swr' +import { splitMarkdownClient } from "./[docs_id]/splitMarkdownClient"; +import { Section } from "./[docs_id]/section"; + + export function Sidebar() { + const fetcher = (url: string | URL | Request>) => fetch(url).then((r) => r.text()) + const pathname = usePathname(); + const docs_id = pathname.replace(/^\//, ""); + const { data, error, isLoading } = useSWR( + `/docs/${docs_id}.md`, + fetcher + ) + + if (isLoading) return
Loading...
+ if (error) return
Error: {error.message}
+ + const pages = [ + { id: "python-1", title: "1. 環境構築と基本思想" }, + { id: "python-2", title: "2. 基本構文とデータ型" }, + { id: "python-3", title: "3. リスト、タプル、辞書、セット" }, + { id: "python-4", title: "4. 制御構文と関数" }, + { id: "python-5", title: "5. モジュールとパッケージ" }, + { id: "python-6", title: "6. オブジェクト指向プログラミング" }, + { id: "python-7", title: "7. ファイルの入出力とコンテキストマネージャ" }, + { id: "python-8", title: "8. 例外処理" }, + { id: "python-9", title: "9. ジェネレータとデコレータ" }, + ]; + + + const splitmdcontent = splitMarkdownClient(data ?? "") return (
{/* todo: 背景色ほんとにこれでいい? */} @@ -8,35 +42,25 @@ export function Sidebar() { {/* サイドバーが常時表示されている場合のみ */} Navbar Title +
    -
  1. - 1. 環境構築と基本思想 -
  2. -
  3. - 2. 基本構文とデータ型 -
  4. -
  5. - 3. リスト、タプル、辞書、セット -
  6. -
  7. - 4. 制御構文と関数 -
  8. -
  9. - 5. モジュールとパッケージ -
  10. -
  11. - 6. オブジェクト指向プログラミング -
  12. -
  13. - 7. ファイルの入出力とコンテキストマネージャ -
  14. -
  15. - 8. 例外処理 -
  16. -
  17. - 9. ジェネレータとデコレータ -
  18. + {pages.map((page,i) => ( +
  19. + {page.title} + {page.id === docs_id && ( +
      + {splitmdcontent + .filter(section => section.level !== 1) + .map((section, idx) => ( +
    • {section.title}
    • + ))} +
    + )} + +
  20. + ))}
); } + diff --git a/package-lock.json b/package-lock.json index b34b94e..af61fd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "react-markdown": "^10.1.0", "react-syntax-highlighter": "^15.6.1", "remark-gfm": "^4.0.1", + "swr": "^2.3.6", "zod": "^4.0.17" }, "devDependencies": { @@ -19328,6 +19329,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swr": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.6.tgz", + "integrity": "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/tailwindcss": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz", @@ -19837,6 +19851,15 @@ "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", "license": "MIT" }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", diff --git a/package.json b/package.json index 6ad4485..7c60a9c 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "react-markdown": "^10.1.0", "react-syntax-highlighter": "^15.6.1", "remark-gfm": "^4.0.1", + "swr": "^2.3.6", "zod": "^4.0.17" }, "devDependencies": { From 7bb5828ec014e16080724d7230e601341dd065f9 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Fri, 29 Aug 2025 15:57:16 +0900 Subject: [PATCH 02/13] =?UTF-8?q?(=E6=9C=AA=E4=BD=BF=E7=94=A8=E3=81=AE?= =?UTF-8?q?=E9=96=A2=E6=95=B0=E5=89=8A=E9=99=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 6f3b5e0..ae57dfa 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -1,11 +1,8 @@ "use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { useState } from "react"; -import { split } from "react-ace"; import useSWR from 'swr' import { splitMarkdownClient } from "./[docs_id]/splitMarkdownClient"; -import { Section } from "./[docs_id]/section"; From a1fa061cc546820e41c8a0673db71209dbd19a56 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Fri, 29 Aug 2025 16:07:29 +0900 Subject: [PATCH 03/13] =?UTF-8?q?(=E6=9C=AA=E4=BD=BF=E7=94=A8=E5=A4=89?= =?UTF-8?q?=E6=95=B0i=E3=81=AE=E5=89=8A=E9=99=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index ae57dfa..8ef9a2e 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -41,7 +41,7 @@ export function Sidebar() {
    - {pages.map((page,i) => ( + {pages.map((page) => (
  1. {page.title} {page.id === docs_id && ( From 78b6a81b23352ec8b15d3ae01f0e64a36044ee81 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Fri, 29 Aug 2025 21:25:15 +0900 Subject: [PATCH 04/13] =?UTF-8?q?splitMarkdownClient=E3=81=AE=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/[docs_id]/splitMarkdown.ts | 6 ++---- app/[docs_id]/splitMarkdownClient.ts | 23 ----------------------- app/sidebar.tsx | 4 ++-- 3 files changed, 4 insertions(+), 29 deletions(-) delete mode 100644 app/[docs_id]/splitMarkdownClient.ts diff --git a/app/[docs_id]/splitMarkdown.ts b/app/[docs_id]/splitMarkdown.ts index 104e2e2..21dbbbf 100644 --- a/app/[docs_id]/splitMarkdown.ts +++ b/app/[docs_id]/splitMarkdown.ts @@ -1,5 +1,3 @@ -"use server"; - import { unified } from "unified"; import remarkParse from "remark-parse"; import remarkGfm from "remark-gfm"; @@ -13,9 +11,9 @@ export interface MarkdownSection { * Markdownコンテンツを見出しごとに分割し、 * 見出しのレベルとタイトル、内容を含むオブジェクトの配列を返す。 */ -export async function splitMarkdown( +export function splitMarkdown( content: string -): Promise { +): MarkdownSection[] { const tree = unified().use(remarkParse).use(remarkGfm).parse(content); // console.log(tree.children.map(({ type, position }) => ({ type, position: JSON.stringify(position) }))); const headingNodes = tree.children.filter((node) => node.type === "heading"); diff --git a/app/[docs_id]/splitMarkdownClient.ts b/app/[docs_id]/splitMarkdownClient.ts deleted file mode 100644 index 5715f8c..0000000 --- a/app/[docs_id]/splitMarkdownClient.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { MarkdownSection } from "./splitMarkdown"; - -export function splitMarkdownClient(content: string): MarkdownSection[] { - const lines = content.split("\n"); - const sections: MarkdownSection[] = []; - let current: MarkdownSection | null = null; - - for (const line of lines) { - const match = line.match(/^(#{1,6})\s+(.*)/); // 見出しを検出 - if (match) { - if (current) sections.push(current); // 前のセクションを保存 - current = { - level: match[1].length, // 見出しレベル(# の数) - title: match[2].trim(), // 見出しタイトル - content: "", // 内容は後続行で追加 - }; - } else if (current) { - current.content += line + "\n"; // セクション内容に追加 - } - } - if (current) sections.push(current); // 最後のセクションを保存 - return sections.map((s) => ({ ...s, content: s.content.trim() })); -} diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 8ef9a2e..0446cbe 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -2,7 +2,7 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; import useSWR from 'swr' -import { splitMarkdownClient } from "./[docs_id]/splitMarkdownClient"; +import { splitMarkdown } from "./[docs_id]/splitMarkdown"; @@ -31,7 +31,7 @@ export function Sidebar() { ]; - const splitmdcontent = splitMarkdownClient(data ?? "") + const splitmdcontent = splitMarkdown(data ?? "") return (
    {/* todo: 背景色ほんとにこれでいい? */} From d2abe89113a989ae4186dc5ed345ad7d2670999a Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 13:59:42 +0900 Subject: [PATCH 05/13] =?UTF-8?q?fetcher=E3=81=AE=E5=9E=8B=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3+list-disc,list-decimal=E3=81=AE=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 0446cbe..2e59d3d 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -1,13 +1,12 @@ "use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import useSWR from 'swr' +import useSWR, { Fetcher } from 'swr' import { splitMarkdown } from "./[docs_id]/splitMarkdown"; - +const fetcher: Fetcher = (url) => fetch(url).then((r) => r.text()) export function Sidebar() { - const fetcher = (url: string | URL | Request>) => fetch(url).then((r) => r.text()) const pathname = usePathname(); const docs_id = pathname.replace(/^\//, ""); const { data, error, isLoading } = useSWR( @@ -30,7 +29,6 @@ export function Sidebar() { { id: "python-9", title: "9. ジェネレータとデコレータ" }, ]; - const splitmdcontent = splitMarkdown(data ?? "") return (
    @@ -40,12 +38,12 @@ export function Sidebar() { Navbar Title -
      +
        {pages.map((page) => (
      1. {page.title} {page.id === docs_id && ( -
          +
            {splitmdcontent .filter(section => section.level !== 1) .map((section, idx) => ( From a5f41d2bf8176889168dacbb874e669e794666fe Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 14:16:46 +0900 Subject: [PATCH 06/13] =?UTF-8?q?isLoading=E5=8F=8A=E3=81=B3error=E3=81=AB?= =?UTF-8?q?=E3=81=8A=E3=81=91=E3=82=8B=E5=87=A6=E7=90=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 2e59d3d..51e9705 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -14,9 +14,6 @@ export function Sidebar() { fetcher ) - if (isLoading) return
            Loading...
            - if (error) return
            Error: {error.message}
            - const pages = [ { id: "python-1", title: "1. 環境構築と基本思想" }, { id: "python-2", title: "2. 基本構文とデータ型" }, @@ -29,6 +26,25 @@ export function Sidebar() { { id: "python-9", title: "9. ジェネレータとデコレータ" }, ]; + if (isLoading) return ( +
            +

            + {/* サイドバーが常時表示されている場合のみ */} + Navbar Title +

            +
              + {pages.map((page) => +
            1. + {page.title} +
            2. + )} +
            +
            + ) + if (error) return console.error() + + + const splitmdcontent = splitMarkdown(data ?? "") return (
            From a11eea7d5b0f6c2999f8991b521fbcc84e0d5f2d Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 14:29:38 +0900 Subject: [PATCH 07/13] =?UTF-8?q?error=E5=86=8D=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 51e9705..6561bc4 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -26,6 +26,7 @@ export function Sidebar() { { id: "python-9", title: "9. ジェネレータとデコレータ" }, ]; + if (error) return console.error(error) if (isLoading) return (

            @@ -40,8 +41,7 @@ export function Sidebar() { )}

    - ) - if (error) return console.error() + ) From 685b915e577ee85b156912e026bbcf00a5a8cfd2 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 14:38:31 +0900 Subject: [PATCH 08/13] =?UTF-8?q?error=E5=86=8D=E3=80=85=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 6561bc4..d7130af 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -26,7 +26,7 @@ export function Sidebar() { { id: "python-9", title: "9. ジェネレータとデコレータ" }, ]; - if (error) return console.error(error) + if (error) console.error("Sidebar fetch error:", error) if (isLoading) return (

    From 9d7a974555272d06fe526bc5764f053abafba866 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 16:08:11 +0900 Subject: [PATCH 09/13] =?UTF-8?q?=E5=90=84=E3=82=BB=E3=82=AF=E3=82=B7?= =?UTF-8?q?=E3=83=A7=E3=83=B3=E3=81=AB=E3=82=B8=E3=83=A3=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=81=99=E3=82=8B=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/[docs_id]/page.tsx | 4 +++- app/sidebar.tsx | 4 +++- app/terminal/python/pyodide.tsx | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/[docs_id]/page.tsx b/app/[docs_id]/page.tsx index cd09acd..9cb12dc 100644 --- a/app/[docs_id]/page.tsx +++ b/app/[docs_id]/page.tsx @@ -41,7 +41,9 @@ export default async function Page({ return (
    {splitMdContent.map((section, index) => ( -
    +
    +
    +
    ))}
    ); diff --git a/app/sidebar.tsx b/app/sidebar.tsx index d7130af..02134e4 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -63,7 +63,9 @@ export function Sidebar() { {splitmdcontent .filter(section => section.level !== 1) .map((section, idx) => ( -
  2. {section.title}
  3. +
  4. + {section.title} +
  5. ))} )} diff --git a/app/terminal/python/pyodide.tsx b/app/terminal/python/pyodide.tsx index bfaf16d..1fb34b7 100644 --- a/app/terminal/python/pyodide.tsx +++ b/app/terminal/python/pyodide.tsx @@ -289,7 +289,7 @@ export function PyodideProvider({ children }: { children: ReactNode }) { return output; }); }, - [files] + [files, writeFile] ); /** From dd903f852e85a8a1c23b0e3e176c8cc5e9965f6a Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 16:51:46 +0900 Subject: [PATCH 10/13] =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=87=E3=82=A3?= =?UTF-8?q?=E3=83=B3=E3=82=B0=E5=87=A6=E7=90=86=E5=A4=89=E6=9B=B4=EF=BC=8B?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3=E3=83=88=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 02134e4..2a88f27 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -27,21 +27,7 @@ export function Sidebar() { ]; if (error) console.error("Sidebar fetch error:", error) - if (isLoading) return ( -
    -

    - {/* サイドバーが常時表示されている場合のみ */} - Navbar Title -

    -
      - {pages.map((page) => -
    1. - {page.title} -
    2. - )} -
    -
    - ) + @@ -58,14 +44,20 @@ export function Sidebar() { {pages.map((page) => (
  6. {page.title} - {page.id === docs_id && ( + {page.id === docs_id && !isLoading &&(
      {splitmdcontent - .filter(section => section.level !== 1) - .map((section, idx) => ( + .slice(1) + .map((section, idx) => ( section.level===2 ?
    • {section.title}
    • + : +
        +
      • + {section.title} +
      • +
      ))}
    )} From 7f38b1408f19e253d25eee586652636129aebd52 Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 20:05:29 +0900 Subject: [PATCH 11/13] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E6=96=B9=E6=B3=95=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 2a88f27..835a0af 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -53,11 +53,9 @@ export function Sidebar() { {section.title}
  7. : -
      -
    • - {section.title} -
    • -
    +
  8. + {section.title} +
  9. ))} )} From 4e45fabbeee91cf3dc29f209715f966adc23130f Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 21:56:31 +0900 Subject: [PATCH 12/13] =?UTF-8?q?=E3=83=AA=E3=82=B9=E3=83=88=E3=81=AE?= =?UTF-8?q?=E8=A8=98=E8=BF=B0=E7=B0=A1=E7=95=A5=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 835a0af..8637d60 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -48,12 +48,8 @@ export function Sidebar() {
      {splitmdcontent .slice(1) - .map((section, idx) => ( section.level===2 ? -
    • - {section.title} -
    • - : -
    • + .map((section, idx) => ( +
    • {section.title}
    • ))} From 6899f4e02f7d30fe425d87046a62f91e83b1eebe Mon Sep 17 00:00:00 2001 From: Tatsu723 Date: Sat, 30 Aug 2025 22:01:24 +0900 Subject: [PATCH 13/13] =?UTF-8?q?level4=E4=BB=A5=E4=B8=8B=E3=81=B8?= =?UTF-8?q?=E3=81=AE=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/sidebar.tsx b/app/sidebar.tsx index 8637d60..21b7730 100644 --- a/app/sidebar.tsx +++ b/app/sidebar.tsx @@ -49,7 +49,7 @@ export function Sidebar() { {splitmdcontent .slice(1) .map((section, idx) => ( -
    • +
    • {section.title}
    • ))}