の表示のたびに毎回全ファイルを読むのは非効率なので、
+ // cloudflareでない場合でも事前生成済みファイルがあれば利用
+ try {
+ const termsJson = await readPublicFile(
+ `docs/${langId}/termDefinitions.json`
+ );
+ return JSON.parse(termsJson) as TermDefinition[];
+ } catch (e) {
+ // not found?
+ console.warn(`failed to read docs/${langId}/termDefinitions.json:`, e);
+ }
+ const terms: TermDefinition[] = [];
+ const langEntry = await getPagesListForLang(langId);
+ const codeBlockRegex = /^(`{3,})(.*)\n([\s\S]*?)\n^\1/gm;
+ for (const page of langEntry.pages) {
+ const sections = await getMarkdownSections(langId, page.slug);
+ for (const section of sections) {
+ if (section.term && section.term.length >= 1) {
+ terms.push({
+ term: section.term,
+ page: page.slug,
+ id: section.id,
+ title: section.title,
+ rawContentWithoutCode: section.rawContent.replace(
+ codeBlockRegex,
+ ""
+ ),
+ });
+ }
+ }
+ }
+ return terms;
+ }
+}
diff --git a/scripts/generateDocsMeta.ts b/scripts/generateDocsMeta.ts
index aa7744c0..cb4b98c5 100644
--- a/scripts/generateDocsMeta.ts
+++ b/scripts/generateDocsMeta.ts
@@ -1,9 +1,14 @@
// Generates public/docs/{lang}/{pageId}/sections.yml for each page directory.
// Each sections.yml lists the .md files in that directory in display order.
-import { writeFile } from "node:fs/promises";
+import { unlink, writeFile } from "node:fs/promises";
import { join } from "node:path";
-import { getMarkdownSections, getPagesList } from "@/lib/docs";
+import {
+ getMarkdownSections,
+ getPagesList,
+ getTermDefinitions,
+} from "@/lib/docs";
+import { existsSync } from "node:fs";
const docsDir = join(process.cwd(), "public", "docs");
@@ -16,6 +21,19 @@ console.log(
);
for (const lang of langEntries) {
+ if (existsSync(join(docsDir, lang.id, "termDefinitions.json"))) {
+ await unlink(join(docsDir, lang.id, "termDefinitions.json"));
+ }
+ const terms = await getTermDefinitions(lang.id);
+ await writeFile(
+ join(docsDir, lang.id, "termDefinitions.json"),
+ JSON.stringify(terms),
+ "utf-8"
+ );
+ console.log(
+ `Generated ${lang.id}/termDefinitions.json (${terms.length} definitions, ${terms.reduce((sum, td) => sum + td.term.length, 0)} terms)`
+ );
+
for (const page of lang.pages) {
const sections = await getMarkdownSections(lang.id, page.slug);
await writeFile(
From dd6b823e918592722be02df5a919da06f4bf35da Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Tue, 28 Jul 2026 02:32:07 +0900
Subject: [PATCH 04/21] =?UTF-8?q?daisyui=E3=81=AEtooltip=E3=81=A7term?=
=?UTF-8?q?=E3=82=92=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/(docs)/@docs/[lang]/[pageId]/page.tsx | 24 +++---
app/lib/docs.ts | 8 +-
app/markdown/term.tsx | 96 ++++++++++++++---------
3 files changed, 78 insertions(+), 50 deletions(-)
diff --git a/app/(docs)/@docs/[lang]/[pageId]/page.tsx b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
index 154184e5..dc860432 100644
--- a/app/(docs)/@docs/[lang]/[pageId]/page.tsx
+++ b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
@@ -10,6 +10,7 @@ import {
import {
getMarkdownSections,
getPagesListForLang,
+ getTermDefinitions,
LangId,
PagePath,
PageSlug,
@@ -18,6 +19,7 @@ import { cacheLife, cacheTag } from "next/cache";
import { isCloudflare } from "@/lib/detectCloudflare";
import { DocsAutoRedirect } from "./autoRedirect";
import { dateReviver } from "@/lib/dateReviver";
+import { TermDefinitionProvider } from "@/markdown/term";
export async function generateMetadata({
params,
@@ -60,17 +62,21 @@ export default async function Page({
const context = await initContext();
const chatHistories = await getChatFromCache(path, context.userId);
+ const termDefinitions = await getTermDefinitions(lang);
+
return (
<>
-
+
+
+
>
);
diff --git a/app/lib/docs.ts b/app/lib/docs.ts
index 537990c2..26f3af3f 100644
--- a/app/lib/docs.ts
+++ b/app/lib/docs.ts
@@ -398,6 +398,7 @@ export async function getTermDefinitions(
}
const terms: TermDefinition[] = [];
const langEntry = await getPagesListForLang(langId);
+ const headingRegex = /^#+(.*)$/m;
const codeBlockRegex = /^(`{3,})(.*)\n([\s\S]*?)\n^\1/gm;
for (const page of langEntry.pages) {
const sections = await getMarkdownSections(langId, page.slug);
@@ -408,10 +409,9 @@ export async function getTermDefinitions(
page: page.slug,
id: section.id,
title: section.title,
- rawContentWithoutCode: section.rawContent.replace(
- codeBlockRegex,
- ""
- ),
+ rawContentWithoutCode: section.rawContent
+ .replace(codeBlockRegex, "")
+ .replace(headingRegex, ""),
});
}
}
diff --git a/app/markdown/term.tsx b/app/markdown/term.tsx
index fcbb6cab..3e1fdbb8 100644
--- a/app/markdown/term.tsx
+++ b/app/markdown/term.tsx
@@ -1,49 +1,71 @@
-import { JSX } from "react";
+"use client";
+
+import { createContext, JSX, ReactNode, useContext } from "react";
import { ExtraProps } from "react-markdown";
import { onlyText } from "react-children-utilities";
+import { LangId, TermDefinition } from "@/lib/docs";
+import Link from "next/link";
+import { StyledMarkdown } from "./markdown";
+
+const TermDefinitionContext = createContext<{
+ lang: LangId;
+ termDefinitions: TermDefinition[];
+} | null>(null);
+export function TermDefinitionProvider({
+ lang,
+ termDefinitions,
+ children,
+}: {
+ lang: LangId;
+ termDefinitions: TermDefinition[];
+ children: ReactNode;
+}) {
+ return (
+
+ {children}
+
+ );
+}
/**
* https://github.com/ut-code/utcode-learn/blob/main/src/components/Term/index.tsx をもとに独自実装
* Copyright (c) 2023 ut.code();
*/
export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
- // 動作確認用
- return <>[{props.children} → term:{onlyText(props.children)}]>;
+ // termDefinitionの取得がasync関数であり、clientコンポーネントから直接取得できないので、
+ // @docs/lang/pageId/page.tsx で取得したものをcontextに渡してそれを取得する
+ const { lang, termDefinitions } = useContext(TermDefinitionContext) ?? {};
+
+ if (!termDefinitions) {
+ return props.children;
+ }
- // const term = props.id
- // ? terms.find((term) => term.id === props.id)
- // : terms.find(
- // (term) =>
- // term.name === onlyText(props.children) ||
- // term.aliases.includes(onlyText(props.children)),
- // );
- // if (!term)
- // throw new Error(
- // `${props.id ? props.id : onlyText(props.children)}という用語は定義されていません`,
- // );
+ const termText = onlyText(props.children);
+ const term = termDefinitions.find((t) => t.term.includes(termText));
+ if (!term) {
+ console.error(`'${termText}'という用語は定義されていません`);
+ return props.children;
+ }
- // const wrap = (content: JSX.Element) => {
+ // [{props.children} → term:{onlyText(props.children)}]
- // return (
- //
- //
- // {term.definition}
- // {shouldLinkToReferencePage && (
- //
- // {referencePageTitle} へ
- //
- //
- // )}
- //
- // }
- // >
- // {content}
- //
- // );
- // };
+ return (
+
+
+
+
+ - {term.page}
+ - {term.title}
+
+
+
+
+
+ {props.children}
+
+
+ );
}
From 0eb26b4d9ce5ef7c8f1b6485d5f4281a8aeaed1b Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 00:31:05 +0900
Subject: [PATCH 05/21] =?UTF-8?q?daisyui=E3=81=AEtooltip=E3=81=8B=E3=82=89?=
=?UTF-8?q?floating-ui=E3=81=AB=E7=A7=BB=E8=A1=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
cannot be descendant of
エラーを避けるためportal型tooltipのほうがよい
---
app/markdown/term.tsx | 89 +++++++--
package-lock.json | 426 +++++++++++++++++++++++++++++++++---------
package.json | 1 +
3 files changed, 416 insertions(+), 100 deletions(-)
diff --git a/app/markdown/term.tsx b/app/markdown/term.tsx
index 3e1fdbb8..a27bbba1 100644
--- a/app/markdown/term.tsx
+++ b/app/markdown/term.tsx
@@ -1,11 +1,25 @@
"use client";
-import { createContext, JSX, ReactNode, useContext } from "react";
+import { createContext, JSX, ReactNode, useContext, useState } from "react";
import { ExtraProps } from "react-markdown";
import { onlyText } from "react-children-utilities";
import { LangId, TermDefinition } from "@/lib/docs";
import Link from "next/link";
import { StyledMarkdown } from "./markdown";
+import {
+ useFloating,
+ autoUpdate,
+ offset,
+ flip,
+ shift,
+ useHover,
+ useFocus,
+ useDismiss,
+ useRole,
+ useInteractions,
+ FloatingPortal,
+} from "@floating-ui/react";
+import clsx from "clsx";
const TermDefinitionContext = createContext<{
lang: LangId;
@@ -36,6 +50,37 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
// @docs/lang/pageId/page.tsx で取得したものをcontextに渡してそれを取得する
const { lang, termDefinitions } = useContext(TermDefinitionContext) ?? {};
+ // 1. Manage the tooltip's open state
+ const [isOpen, setIsOpen] = useState(false);
+
+ // 2. Setup Floating UI
+ const { refs, floatingStyles, context } = useFloating({
+ open: isOpen,
+ onOpenChange: setIsOpen,
+ placement: "top", // Preferred placement
+ // Make sure the tooltip stays anchored to the trigger when scrolling/resizing
+ whileElementsMounted: autoUpdate,
+ middleware: [
+ offset(2), // Gap between trigger and tooltip
+ flip(), // Flip to bottom if no space on top
+ shift(), // Keep tooltip on screen
+ ],
+ });
+
+ // 3. Setup interactions (trigger on hover, focus, and dismiss on click outside/escape)
+ const hover = useHover(context, { move: false });
+ const focus = useFocus(context);
+ const dismiss = useDismiss(context);
+ const role = useRole(context, { role: "tooltip" });
+
+ // Merge the interactions into prop getters
+ const { getReferenceProps, getFloatingProps } = useInteractions([
+ hover,
+ focus,
+ dismiss,
+ role,
+ ]);
+
if (!termDefinitions) {
return props.children;
}
@@ -47,25 +92,39 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
return props.children;
}
- // [{props.children} → term:{onlyText(props.children)}]
-
return (
-
-
-
-
- - {term.page}
- - {term.title}
-
-
-
-
+ <>
{props.children}
-
+ {isOpen && (
+
+
+
+
+ - {term.page}
+ - {term.title}
+
+
+
+
+
+ )}
+ >
);
}
diff --git a/package-lock.json b/package-lock.json
index 38786a0d..71977521 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
],
"dependencies": {
"@better-auth/drizzle-adapter": "^1.6.23",
+ "@floating-ui/react": "^0.27.20",
"@fontsource-variable/inconsolata": "^5.2.7",
"@fontsource/m-plus-rounded-1c": "^5.2.9",
"@google/genai": "^1.21.0",
@@ -1381,7 +1382,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -1634,7 +1634,6 @@
"resolved": "https://registry.npmjs.org/@better-auth/core/-/core-1.6.23.tgz",
"integrity": "sha512-beEhOs0uVeOxYOZKUfIEBd/nQV2Bd4/6wyLxZ0OFkn6CMTK2Vi+hXuZLnyPBeB6RdHpebEoJWiHqwHxBIxgPDQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.39.0",
"@standard-schema/spec": "^1.1.0",
@@ -1753,7 +1752,6 @@
"resolved": "https://registry.npmjs.org/@better-auth/utils/-/utils-0.4.2.tgz",
"integrity": "sha512-AUxrvu+HaaODsUyzDxFgwd/8RZ1yZaYo42LXKSrU2oGgR38pS1ij8nqQKNgtTWoYGpNevNXtCfgTy6loHveW9A==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@noble/hashes": "^2.0.1"
}
@@ -1762,8 +1760,7 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@better-fetch/fetch/-/fetch-1.3.1.tgz",
"integrity": "sha512-ABkD1WhyfPZprKRQI3bhATjeiFuNWC9PXhfGWqL+sg/gKrM977oFrYkdb4msM3hgUGonr7KlOsOFT5TU2rht9g==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/@bjorn3/browser_wasi_shim": {
"version": "0.3.0",
@@ -3071,6 +3068,59 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz",
+ "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz",
+ "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.8.0",
+ "@floating-ui/utils": "^0.2.12"
+ }
+ },
+ "node_modules/@floating-ui/react": {
+ "version": "0.27.20",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.20.tgz",
+ "integrity": "sha512-CMqMy7OaXl9W0eq1Uy7L7i2Y/anPvHmFmESd2CEw0t5YvZhcVCeo4MBevAmswRllX7Y2dEidA4ozGPunLSTQpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.1.9",
+ "@floating-ui/utils": "^0.2.12",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=17.0.0",
+ "react-dom": ">=17.0.0"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.9.tgz",
+ "integrity": "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.8.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz",
+ "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
+ "license": "MIT"
+ },
"node_modules/@fontsource-variable/inconsolata": {
"version": "5.2.8",
"resolved": "https://registry.npmjs.org/@fontsource-variable/inconsolata/-/inconsolata-5.2.8.tgz",
@@ -4152,7 +4202,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz",
"integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -4174,7 +4223,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
@@ -4537,7 +4585,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.7.1.tgz",
"integrity": "sha512-NAYIlsF8MPUsKqJMiDQJTMPOmlbawC1Iz/omMLygZ1C9am8fTKYjTaI+OZM+WTY3t3Glo0wnOg/6/pac6RGPPw==",
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@opentelemetry/core": "2.7.1",
"@opentelemetry/resources": "2.7.1",
@@ -4555,7 +4602,6 @@
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz",
"integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==",
"license": "Apache-2.0",
- "peer": true,
"engines": {
"node": ">=14"
}
@@ -4762,6 +4808,7 @@
}
],
"license": "CC-BY-4.0",
+ "peer": true,
"dependencies": {
"spacetrim": "0.11.59"
}
@@ -4836,6 +4883,7 @@
"integrity": "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"debug": "^4.4.3",
"extract-zip": "^2.0.1",
@@ -4858,6 +4906,7 @@
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -4872,7 +4921,8 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@puppeteer/browsers/node_modules/semver": {
"version": "7.8.5",
@@ -4880,6 +4930,7 @@
"integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -4893,6 +4944,7 @@
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4908,6 +4960,7 @@
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -4926,6 +4979,7 @@
"integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -7350,7 +7404,8 @@
"resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
"integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@tsconfig/node18": {
"version": "1.0.3",
@@ -7595,7 +7650,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz",
"integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"csstype": "^3.2.2"
}
@@ -7606,7 +7660,6 @@
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
"dev": true,
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^19.2.0"
}
@@ -7632,7 +7685,8 @@
"resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz",
"integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/tedious": {
"version": "4.0.14",
@@ -7654,7 +7708,8 @@
"resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz",
"integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@types/ws": {
"version": "8.18.1",
@@ -7662,6 +7717,7 @@
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "*"
}
@@ -7672,6 +7728,7 @@
"integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
"license": "MIT",
"optional": true,
+ "peer": true,
"dependencies": {
"@types/node": "*"
}
@@ -7721,7 +7778,6 @@
"integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.57.2",
"@typescript-eslint/types": "8.57.2",
@@ -8442,6 +8498,7 @@
"integrity": "sha512-8IXDiRG9wUUnpU6M/uzsVqIHJD/7o4y9RaOU2Jh/OdRJP/7rxwfGsa24Bv486rnMGdghztkwLCBJWG0jbeEtfw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@wdio/logger": "9.29.1",
"@wdio/types": "9.29.1",
@@ -8461,6 +8518,7 @@
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -8479,6 +8537,7 @@
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -8492,6 +8551,7 @@
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -8505,6 +8565,7 @@
"integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -8516,6 +8577,7 @@
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
@@ -8537,6 +8599,7 @@
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"devOptional": true,
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -8552,7 +8615,8 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"devOptional": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/@wdio/config/node_modules/minimatch": {
"version": "9.0.9",
@@ -8560,6 +8624,7 @@
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"brace-expansion": "^2.0.2"
},
@@ -8576,6 +8641,7 @@
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"devOptional": true,
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -8593,6 +8659,7 @@
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -8611,6 +8678,7 @@
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^6.2.2"
},
@@ -8627,6 +8695,7 @@
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -8645,6 +8714,7 @@
"integrity": "sha512-0ZAEIo6PNyMIJPlOGkIgyOJUjcd0pC8/QHlVAAe1c91/IcjZ1X+k0yidXHaboJdN7dq1XPUacmhRdtua0U5EZg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"chalk": "^5.1.2",
"loglevel": "^1.6.0",
@@ -8662,6 +8732,7 @@
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -8675,6 +8746,7 @@
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^6.2.2"
},
@@ -8690,7 +8762,8 @@
"resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.29.1.tgz",
"integrity": "sha512-NFlBQOA4zDb4D/ETpVMqDgbJyEqdhGRsJWybLOXG7PGlPwfcrfmTMHC1+Boq4KODgpwbhCmI9zIk2JQmGYIttQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@wdio/repl": {
"version": "9.16.2",
@@ -8698,6 +8771,7 @@
"integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "^20.1.0"
},
@@ -8711,6 +8785,7 @@
"integrity": "sha512-jp8jgMv6TS35G96YzHZxw3PVN0Dz6xQ6tnMAicndAJ8Jt9AIXb0ywIse4TjaFywakO3dLoEhlyA3ZtR26vmt+w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "^20.1.0"
},
@@ -8724,6 +8799,7 @@
"integrity": "sha512-jyt6b6FfdYwVbMISVhuyGC1xQGZj6xM03KhTHozH7a9/zu9b++94KRdT9HRbwX8zefjW0YeIC5+qWSIf7WWHZg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@puppeteer/browsers": "^2.2.0",
"@wdio/logger": "9.29.1",
@@ -8749,6 +8825,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
"integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
@@ -8758,25 +8835,29 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
"integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -8787,13 +8868,15 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
"integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -8806,6 +8889,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
"integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
@@ -8815,6 +8899,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
"integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
@@ -8823,13 +8908,15 @@
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
"integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -8846,6 +8933,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
"integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
@@ -8859,6 +8947,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
"integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
@@ -8871,6 +8960,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
"integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
@@ -8885,6 +8975,7 @@
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
"integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
@@ -8919,13 +9010,15 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "license": "BSD-3-Clause"
+ "license": "BSD-3-Clause",
+ "peer": true
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/@zip.js/zip.js": {
"version": "2.8.33",
@@ -8933,6 +9026,7 @@
"integrity": "sha512-Mc+s4DdDl9lmhFmkOmNDryC/b4rZm7y2/qBUQTCwPYGkQ8dkCeykILqEYBd+14ATuj93XWZJBrPe2x+cF9LcGA==",
"devOptional": true,
"license": "BSD-3-Clause",
+ "peer": true,
"engines": {
"bun": ">=0.7.0",
"deno": ">=1.0.0",
@@ -8975,7 +9069,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
"integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -9008,6 +9101,7 @@
"resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
"integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.13.0"
},
@@ -9154,6 +9248,7 @@
"integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"archiver-utils": "^5.0.2",
"async": "^3.2.4",
@@ -9173,6 +9268,7 @@
"integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"glob": "^10.0.0",
"graceful-fs": "^4.2.0",
@@ -9192,6 +9288,7 @@
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -9210,6 +9307,7 @@
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -9223,6 +9321,7 @@
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -9236,6 +9335,7 @@
"integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -9247,6 +9347,7 @@
"deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
@@ -9268,6 +9369,7 @@
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"devOptional": true,
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -9283,7 +9385,8 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"devOptional": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/archiver-utils/node_modules/minimatch": {
"version": "9.0.9",
@@ -9291,6 +9394,7 @@
"integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"brace-expansion": "^2.0.2"
},
@@ -9307,6 +9411,7 @@
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"devOptional": true,
"license": "BlueOak-1.0.0",
+ "peer": true,
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -9324,6 +9429,7 @@
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -9342,6 +9448,7 @@
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-regex": "^6.2.2"
},
@@ -9358,6 +9465,7 @@
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -9568,6 +9676,7 @@
"integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"tslib": "^2.0.1"
},
@@ -9587,7 +9696,8 @@
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/async-function": {
"version": "1.0.0",
@@ -9662,6 +9772,7 @@
"integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"peerDependencies": {
"react-native-b4a": "*"
},
@@ -9693,6 +9804,7 @@
"integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"peerDependencies": {
"bare-abort-controller": "*"
},
@@ -9708,6 +9820,7 @@
"integrity": "sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"bare-events": "^2.5.4",
"bare-path": "^3.0.0",
@@ -9732,7 +9845,8 @@
"resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz",
"integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==",
"devOptional": true,
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/bare-stream": {
"version": "2.13.3",
@@ -9740,6 +9854,7 @@
"integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"b4a": "^1.8.1",
"streamx": "^2.25.0",
@@ -9768,6 +9883,7 @@
"integrity": "sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"bare-path": "^3.0.0"
}
@@ -9810,6 +9926,7 @@
"integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.0.0"
}
@@ -9983,7 +10100,8 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"devOptional": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/bowser": {
"version": "2.14.1",
@@ -10040,7 +10158,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759",
@@ -10075,6 +10192,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
@@ -10086,6 +10204,7 @@
"integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -10320,6 +10439,7 @@
"integrity": "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"cheerio-select": "^2.1.0",
"dom-serializer": "^2.0.0",
@@ -10346,6 +10466,7 @@
"integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"boolbase": "^1.0.0",
"css-select": "^5.1.0",
@@ -10378,6 +10499,7 @@
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
"integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.0"
}
@@ -10580,6 +10702,7 @@
"integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"crc-32": "^1.2.0",
"crc32-stream": "^6.0.0",
@@ -10701,6 +10824,7 @@
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"crc32": "bin/crc32.njs"
},
@@ -10714,6 +10838,7 @@
"integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"crc-32": "^1.2.0",
"readable-stream": "^4.0.0"
@@ -10763,6 +10888,7 @@
"integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.1.0",
@@ -10779,13 +10905,15 @@
"resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.2.tgz",
"integrity": "sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/css-value": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz",
"integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==",
- "devOptional": true
+ "devOptional": true,
+ "peer": true
},
"node_modules/css-what": {
"version": "6.2.2",
@@ -10793,6 +10921,7 @@
"integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">= 6"
},
@@ -10829,6 +10958,7 @@
"integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 14"
}
@@ -10910,6 +11040,7 @@
"integrity": "sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
@@ -10995,6 +11126,7 @@
"integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ast-types": "^0.13.4",
"escodegen": "^2.1.0",
@@ -11094,6 +11226,7 @@
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.2",
@@ -11114,7 +11247,8 @@
"url": "https://github.com/sponsors/fb55"
}
],
- "license": "BSD-2-Clause"
+ "license": "BSD-2-Clause",
+ "peer": true
},
"node_modules/domhandler": {
"version": "5.0.3",
@@ -11122,6 +11256,7 @@
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"domelementtype": "^2.3.0"
},
@@ -11138,6 +11273,7 @@
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0",
@@ -11165,7 +11301,6 @@
"integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@drizzle-team/brocli": "^0.10.2",
"@esbuild-kit/esm-loader": "^2.5.5",
@@ -11181,7 +11316,6 @@
"resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz",
"integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==",
"license": "Apache-2.0",
- "peer": true,
"peerDependencies": {
"@aws-sdk/client-rds-data": ">=3",
"@cloudflare/workers-types": ">=4",
@@ -11373,7 +11507,6 @@
"resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz",
"integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==",
"license": "MIT",
- "peer": true,
"engines": {
"node": "^14.21.3 || >=16"
},
@@ -11399,6 +11532,7 @@
"integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/which": "^2.0.1",
"which": "^2.0.2"
@@ -11415,7 +11549,8 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"devOptional": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/edge-paths/node_modules/which": {
"version": "2.0.2",
@@ -11423,6 +11558,7 @@
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -11440,6 +11576,7 @@
"devOptional": true,
"hasInstallScript": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@wdio/logger": "^9.18.0",
"@zip.js/zip.js": "^2.8.11",
@@ -11463,6 +11600,7 @@
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"devOptional": true,
"license": "BlueOak-1.0.0",
+ "peer": true,
"engines": {
"node": ">=20"
}
@@ -11473,6 +11611,7 @@
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"isexe": "^4.0.0"
},
@@ -11537,6 +11676,7 @@
"integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.3",
"whatwg-encoding": "^3.1.1"
@@ -11551,6 +11691,7 @@
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -11564,6 +11705,7 @@
"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"once": "^1.4.0"
}
@@ -11600,6 +11742,7 @@
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -11869,6 +12012,7 @@
"integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
@@ -11891,7 +12035,6 @@
"integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.8.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -12077,7 +12220,6 @@
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@@ -12401,6 +12543,7 @@
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.8.x"
}
@@ -12411,6 +12554,7 @@
"integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"bare-events": "^2.7.0"
}
@@ -12519,6 +12663,7 @@
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"debug": "^4.1.1",
"get-stream": "^5.1.0",
@@ -12540,6 +12685,7 @@
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"pump": "^3.0.0"
},
@@ -12584,7 +12730,8 @@
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/fast-glob": {
"version": "3.3.1",
@@ -12712,6 +12859,7 @@
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"pend": "~1.2.0"
}
@@ -13134,6 +13282,7 @@
"devOptional": true,
"hasInstallScript": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@wdio/logger": "^9.18.0",
"@zip.js/zip.js": "^2.8.11",
@@ -13219,6 +13368,7 @@
"integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=16"
},
@@ -13288,6 +13438,7 @@
"integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"basic-ftp": "^5.0.2",
"data-uri-to-buffer": "^6.0.2",
@@ -13466,7 +13617,8 @@
"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/gzip-size": {
"version": "6.0.0",
@@ -13705,7 +13857,8 @@
"resolved": "https://registry.npmjs.org/htmlfy/-/htmlfy-0.8.1.tgz",
"integrity": "sha512-xWROBw9+MEGwxpotll0h672KCaLrKKiCYzsyN8ZgL9cQbVumFnyvsk2JqiB9ELAV1GLj1GG/jxZUjV9OZZi/yQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/htmlparser2": {
"version": "10.1.0",
@@ -13720,6 +13873,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
@@ -13733,6 +13887,7 @@
"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -13766,6 +13921,7 @@
"integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "^7.1.0",
"debug": "^4.3.4"
@@ -13840,7 +13996,8 @@
"url": "https://feross.org/support"
}
],
- "license": "BSD-3-Clause"
+ "license": "BSD-3-Clause",
+ "peer": true
},
"node_modules/ignore": {
"version": "5.3.2",
@@ -13856,7 +14013,8 @@
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/import-fresh": {
"version": "3.3.1",
@@ -13896,6 +14054,7 @@
"integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -13944,6 +14103,7 @@
"integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 12"
}
@@ -14539,6 +14699,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
@@ -14661,6 +14822,7 @@
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"devOptional": true,
"license": "(MIT OR GPL-3.0-or-later)",
+ "peer": true,
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
@@ -14673,14 +14835,16 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/jszip/node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"devOptional": true,
- "license": "(MIT AND Zlib)"
+ "license": "(MIT AND Zlib)",
+ "peer": true
},
"node_modules/jszip/node_modules/readable-stream": {
"version": "2.3.8",
@@ -14688,6 +14852,7 @@
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -14703,7 +14868,8 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/jszip/node_modules/string_decoder": {
"version": "1.1.1",
@@ -14711,6 +14877,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
@@ -14760,7 +14927,6 @@
"resolved": "https://registry.npmjs.org/kysely/-/kysely-0.28.17.tgz",
"integrity": "sha512-nbD8lB9EB3wNdMhOCdx5Li8DxnLbvKByylRLcJ1h+4SkrowVeECAyZlyiKMThF7xFdRz0jSQ2MoJr+wXux2y0Q==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=20.0.0"
}
@@ -14791,6 +14957,7 @@
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"readable-stream": "^2.0.5"
},
@@ -14803,7 +14970,8 @@
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/lazystream/node_modules/readable-stream": {
"version": "2.3.8",
@@ -14811,6 +14979,7 @@
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -14826,7 +14995,8 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/lazystream/node_modules/string_decoder": {
"version": "1.1.1",
@@ -14834,6 +15004,7 @@
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
@@ -14858,6 +15029,7 @@
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"immediate": "~3.0.5"
}
@@ -14868,7 +15040,6 @@
"integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==",
"devOptional": true,
"license": "MPL-2.0",
- "peer": true,
"dependencies": {
"detect-libc": "^2.0.3"
},
@@ -15129,6 +15300,7 @@
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz",
"integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=6.11.5"
},
@@ -15153,6 +15325,7 @@
}
],
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@promptbook/utils": "0.69.5",
"type-fest": "4.26.0",
@@ -15185,7 +15358,8 @@
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/lodash.get": {
"version": "4.4.2",
@@ -15213,7 +15387,8 @@
"resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
"integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/log-symbols": {
"version": "4.1.0",
@@ -15265,6 +15440,7 @@
"integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.6.0"
},
@@ -15278,7 +15454,8 @@
"resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
"integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/long": {
"version": "5.3.2",
@@ -15693,7 +15870,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/debug": "^4.0.0",
"debug": "^4.0.0",
@@ -16284,8 +16460,7 @@
"url": "https://opencollective.com/unified"
}
],
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/micromatch": {
"version": "4.0.8",
@@ -16417,6 +16592,7 @@
"resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz",
"integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
@@ -16476,13 +16652,15 @@
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/minimizer-webpack-plugin/node_modules/terser": {
"version": "5.49.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.49.0.tgz",
"integrity": "sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.15.0",
@@ -16510,7 +16688,8 @@
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
"integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/mkdirp": {
"version": "1.0.4",
@@ -16893,6 +17072,7 @@
"integrity": "sha512-t9VmxaqrmANnEOBhpSDI6HD192Ge48k8vmWqQQL7hSFEqHEYwZbbsu49+aKLWZeRvFs3j1pMhXOqqF4kPlvjkQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.0.0"
}
@@ -17016,7 +17196,8 @@
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/netmask": {
"version": "2.1.1",
@@ -17024,6 +17205,7 @@
"integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.4.0"
}
@@ -17033,7 +17215,6 @@
"resolved": "https://registry.npmjs.org/next/-/next-16.2.6.tgz",
"integrity": "sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@next/env": "16.2.6",
"@swc/helpers": "0.5.15",
@@ -17241,6 +17422,7 @@
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"boolbase": "^1.0.0"
},
@@ -17548,6 +17730,7 @@
"integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@tootallnate/quickjs-emscripten": "^0.23.0",
"agent-base": "^7.1.2",
@@ -17568,6 +17751,7 @@
"integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"degenerator": "^5.0.0",
"netmask": "^2.0.2"
@@ -17633,6 +17817,7 @@
"integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"entities": "^6.0.0"
},
@@ -17646,6 +17831,7 @@
"integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"domhandler": "^5.0.3",
"parse5": "^7.0.0"
@@ -17660,6 +17846,7 @@
"integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"parse5": "^7.0.0"
},
@@ -17673,6 +17860,7 @@
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
"devOptional": true,
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=0.12"
},
@@ -17771,7 +17959,8 @@
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/perfect-debounce": {
"version": "1.0.0",
@@ -17785,7 +17974,6 @@
"resolved": "https://registry.npmjs.org/pg/-/pg-8.19.0.tgz",
"integrity": "sha512-QIcLGi508BAHkQ3pJNptsFz5WQMlpGbuBGBaIaXsWK8mel2kQ/rThYI+DbgjUvZrIr7MiuEuc9LcChJoEZK1xQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"pg-connection-string": "^2.11.0",
"pg-pool": "^3.12.0",
@@ -18034,7 +18222,6 @@
"devOptional": true,
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"dependencies": {
"@prisma/config": "6.19.3",
"@prisma/engines": "6.19.3"
@@ -18069,6 +18256,7 @@
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.6.0"
}
@@ -18078,7 +18266,8 @@
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/progress": {
"version": "2.0.3",
@@ -18159,6 +18348,7 @@
"integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "^7.1.2",
"debug": "^4.3.4",
@@ -18179,6 +18369,7 @@
"integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"engines": {
"node": ">=12"
}
@@ -18195,6 +18386,7 @@
"integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -18232,7 +18424,6 @@
"resolved": "https://registry.npmjs.org/pyodide/-/pyodide-0.29.3.tgz",
"integrity": "sha512-22UBuhOJawj7vKUnS7/F3xK+515LJdjiMAHoCfuS6/PbHiOrSQVnYwDe+2sbVwiOZ3sMMexdXICew6NqOMQGgA==",
"license": "MPL-2.0",
- "peer": true,
"dependencies": {
"@types/emscripten": "^1.41.4",
"ws": "^8.5.0"
@@ -18261,7 +18452,8 @@
"resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz",
"integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/queue-microtask": {
"version": "1.2.3",
@@ -18333,7 +18525,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz",
"integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -18369,7 +18560,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz",
"integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.27.0"
},
@@ -18440,6 +18630,7 @@
"integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
@@ -18457,6 +18648,7 @@
"integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"minimatch": "^5.1.0"
}
@@ -18467,6 +18659,7 @@
"integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -18477,6 +18670,7 @@
"integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==",
"devOptional": true,
"license": "ISC",
+ "peer": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -18734,6 +18928,7 @@
"integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^2.0.1"
}
@@ -18743,7 +18938,8 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/ret": {
"version": "0.5.0",
@@ -18751,6 +18947,7 @@
"integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10"
}
@@ -18780,7 +18977,8 @@
"resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz",
"integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/rimraf": {
"version": "5.0.10",
@@ -18974,7 +19172,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz",
"integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -19076,6 +19273,7 @@
"integrity": "sha512-jkg4434cYgtrIF2AeY/X0Wmd2W73cK5qIEFE3hDrrQenJH/2SDJIXGvPAigfvQTcE9+H31zkiNHbUqcihEiMRA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.0.0"
}
@@ -19171,6 +19369,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"ret": "~0.5.0"
},
@@ -19223,7 +19422,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
"integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -19294,6 +19492,7 @@
"integrity": "sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"type-fest": "^4.31.0"
},
@@ -19310,6 +19509,7 @@
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
"devOptional": true,
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
"node": ">=16"
},
@@ -19405,7 +19605,8 @@
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/setprototypeof": {
"version": "1.2.0",
@@ -19596,6 +19797,7 @@
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
@@ -19607,6 +19809,7 @@
"integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ip-address": "^10.1.1",
"smart-buffer": "^4.2.0"
@@ -19622,6 +19825,7 @@
"integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"agent-base": "^7.1.2",
"debug": "^4.3.4",
@@ -19684,7 +19888,8 @@
"url": "https://github.com/hejny/spacetrim/blob/main/README.md#%EF%B8%8F-contributing"
}
],
- "license": "Apache-2.0"
+ "license": "Apache-2.0",
+ "peer": true
},
"node_modules/spdx-exceptions": {
"version": "2.5.0",
@@ -19797,6 +20002,7 @@
"integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"events-universal": "^1.0.0",
"fast-fifo": "^1.3.2",
@@ -19809,6 +20015,7 @@
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
@@ -20161,6 +20368,12 @@
"react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/tabbable": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz",
+ "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==",
+ "license": "MIT"
+ },
"node_modules/tailwindcss": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz",
@@ -20187,6 +20400,7 @@
"integrity": "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"pump": "^3.0.0",
"tar-stream": "^3.1.5"
@@ -20202,6 +20416,7 @@
"integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"b4a": "^1.6.4",
"bare-fs": "^4.5.5",
@@ -20215,6 +20430,7 @@
"integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"streamx": "^2.12.5"
}
@@ -20249,6 +20465,7 @@
"integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==",
"devOptional": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"b4a": "^1.6.4"
}
@@ -20923,6 +21140,7 @@
"integrity": "sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==",
"devOptional": true,
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
"node": ">=16"
},
@@ -21027,7 +21245,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -21099,7 +21316,6 @@
"resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz",
"integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==",
"license": "MIT",
- "peer": true,
"dependencies": {
"pathe": "^2.0.3"
}
@@ -21109,7 +21325,6 @@
"resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
"integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/unist": "^3.0.0",
"bail": "^2.0.0",
@@ -21297,6 +21512,7 @@
"integrity": "sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -21306,7 +21522,8 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"devOptional": true,
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/vary": {
"version": "1.1.2",
@@ -21351,7 +21568,6 @@
"integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==",
"devOptional": true,
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.27.0",
"fdir": "^6.5.0",
@@ -21433,6 +21649,7 @@
"os": [
"aix"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21449,6 +21666,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21465,6 +21683,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21481,6 +21700,7 @@
"os": [
"android"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21497,6 +21717,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21513,6 +21734,7 @@
"os": [
"darwin"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21529,6 +21751,7 @@
"os": [
"freebsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21545,6 +21768,7 @@
"os": [
"freebsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21561,6 +21785,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21577,6 +21802,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21593,6 +21819,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21609,6 +21836,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21625,6 +21853,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21641,6 +21870,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21657,6 +21887,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21673,6 +21904,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21689,6 +21921,7 @@
"os": [
"linux"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21705,6 +21938,7 @@
"os": [
"netbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21721,6 +21955,7 @@
"os": [
"netbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21737,6 +21972,7 @@
"os": [
"openbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21753,6 +21989,7 @@
"os": [
"openbsd"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21769,6 +22006,7 @@
"os": [
"openharmony"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21785,6 +22023,7 @@
"os": [
"sunos"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21801,6 +22040,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21817,6 +22057,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21833,6 +22074,7 @@
"os": [
"win32"
],
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -21963,6 +22205,7 @@
"integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"chalk": "^4.1.2",
"commander": "^9.3.0",
@@ -21981,6 +22224,7 @@
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -21998,6 +22242,7 @@
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": "^12.20.0 || >=14"
}
@@ -22008,6 +22253,7 @@
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -22020,6 +22266,7 @@
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz",
"integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"graceful-fs": "^4.1.2"
},
@@ -22042,6 +22289,7 @@
"integrity": "sha512-uhxYap3qQXC9H2V8SDr7vcy0blZETeri4goLwbw1TFq4EZHF1Dv503Zc0PAjfkNQJCD4/rzAyr07+EX72kx1pg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "^20.1.0",
"@types/ws": "^8.5.3",
@@ -22065,6 +22313,7 @@
"integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.17"
}
@@ -22075,6 +22324,7 @@
"integrity": "sha512-UIplAnvbjdE0tucHVR/8Uk0Y7rz72VaEx/s0Tq91fMdXm+m+Za16e+b5tObh4xEEfyCITODPfzgBva9rA+xApQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/node": "^20.11.30",
"@types/sinonjs__fake-timers": "^8.1.5",
@@ -22192,13 +22442,15 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz",
"integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==",
- "license": "MIT"
+ "license": "MIT",
+ "peer": true
},
"node_modules/webpack/node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
@@ -22212,6 +22464,7 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"license": "BSD-2-Clause",
+ "peer": true,
"engines": {
"node": ">=4.0"
}
@@ -22223,6 +22476,7 @@
"deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"iconv-lite": "0.6.3"
},
@@ -22236,6 +22490,7 @@
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
@@ -22249,6 +22504,7 @@
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18"
}
@@ -22390,7 +22646,6 @@
"integrity": "sha512-VlnjyH3AjVddpSK7J54nsCVgf8i2733pl8GjKttfNi7vN/hEjjAk20d2b1nDToOLKvRQpTewRnVkqaaeGHCaAw==",
"hasInstallScript": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"workerd": "bin/workerd"
},
@@ -22416,7 +22671,6 @@
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.90.1.tgz",
"integrity": "sha512-u2KrieKSMfRM0toTst/CfDtcRraeoVjmcExcMWgILM/ytq3qcDhuOAULoZSyPHzma43lfLJy1BC544drFyqe1A==",
"license": "MIT OR Apache-2.0",
- "peer": true,
"dependencies": {
"@cloudflare/kv-asset-handler": "0.5.0",
"@cloudflare/unenv-preset": "2.16.1",
@@ -23139,6 +23393,7 @@
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
@@ -23150,6 +23405,7 @@
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": "*"
}
@@ -23195,6 +23451,7 @@
"integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==",
"devOptional": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"archiver-utils": "^5.0.0",
"compress-commons": "^6.0.2",
@@ -23209,7 +23466,6 @@
"resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz",
"integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==",
"license": "MIT",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/package.json b/package.json
index 5d688933..2803a53c 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
},
"dependencies": {
"@better-auth/drizzle-adapter": "^1.6.23",
+ "@floating-ui/react": "^0.27.20",
"@fontsource-variable/inconsolata": "^5.2.7",
"@fontsource/m-plus-rounded-1c": "^5.2.9",
"@google/genai": "^1.21.0",
From 6e7769f361c1e0a7f7a4071c89306995934d4ab2 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 01:48:45 +0900
Subject: [PATCH 06/21] =?UTF-8?q?=E3=83=9A=E3=83=BC=E3=82=B8=E5=90=8D?=
=?UTF-8?q?=E3=81=AE=E6=83=85=E5=A0=B1=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/lib/docs.ts | 23 +++++++++++++----------
app/markdown/term.tsx | 8 ++++----
scripts/generateDocsMeta.ts | 2 +-
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/app/lib/docs.ts b/app/lib/docs.ts
index 26f3af3f..12405ab3 100644
--- a/app/lib/docs.ts
+++ b/app/lib/docs.ts
@@ -65,14 +65,15 @@ export const MarkdownSectionSchema = SectionFrontMatterSchema.extend({
});
export type MarkdownSection = z.output;
-export const TermDefinitionSchema = z.object({
- term: z.array(z.string()),
- page: z.string().transform((s) => s as PageSlug),
- id: z.string().transform((s) => s as SectionId),
- title: z.string(),
- rawContentWithoutCode: z.string(),
-});
-export type TermDefinition = z.output;
+export interface TermDefinition {
+ alias: string[];
+ pageSlug: PageSlug;
+ pageIndex: number;
+ pageName: string;
+ id: SectionId;
+ title: string;
+ rawContentWithoutCode: string;
+}
export const ReplacedRangeSchema = z.object({
start: z.number(),
@@ -405,8 +406,10 @@ export async function getTermDefinitions(
for (const section of sections) {
if (section.term && section.term.length >= 1) {
terms.push({
- term: section.term,
- page: page.slug,
+ alias: section.term,
+ pageSlug: page.slug,
+ pageIndex: page.index,
+ pageName: page.name,
id: section.id,
title: section.title,
rawContentWithoutCode: section.rawContent
diff --git a/app/markdown/term.tsx b/app/markdown/term.tsx
index a27bbba1..050d6c49 100644
--- a/app/markdown/term.tsx
+++ b/app/markdown/term.tsx
@@ -86,7 +86,7 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
}
const termText = onlyText(props.children);
- const term = termDefinitions.find((t) => t.term.includes(termText));
+ const term = termDefinitions.find((t) => t.alias.includes(termText));
if (!term) {
console.error(`'${termText}'という用語は定義されていません`);
return props.children;
@@ -97,7 +97,7 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
{props.children}
@@ -116,8 +116,8 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
)}
>
-
- - {term.page}
+
+ - {term.pageIndex}. {term.pageName}
- {term.title}
diff --git a/scripts/generateDocsMeta.ts b/scripts/generateDocsMeta.ts
index cb4b98c5..18e33dad 100644
--- a/scripts/generateDocsMeta.ts
+++ b/scripts/generateDocsMeta.ts
@@ -31,7 +31,7 @@ for (const lang of langEntries) {
"utf-8"
);
console.log(
- `Generated ${lang.id}/termDefinitions.json (${terms.length} definitions, ${terms.reduce((sum, td) => sum + td.term.length, 0)} terms)`
+ `Generated ${lang.id}/termDefinitions.json (${terms.length} definitions, ${terms.reduce((sum, td) => sum + td.alias.length, 0)} terms)`
);
for (const page of lang.pages) {
From 7a14bbfaf1a2fad5062d3b8e1086c25d9cdb6755 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 02:03:18 +0900
Subject: [PATCH 07/21] =?UTF-8?q?=E3=83=81=E3=83=A3=E3=83=83=E3=83=88?=
=?UTF-8?q?=E3=81=A8term=E3=81=AE=E4=B8=AD=E3=81=A7=E3=81=AF=E3=82=B3?=
=?UTF-8?q?=E3=83=BC=E3=83=89=E3=83=96=E3=83=AD=E3=83=83=E3=82=AF=E3=81=A8?=
=?UTF-8?q?=E3=83=81=E3=83=A3=E3=83=83=E3=83=88=E3=81=A8term=E3=82=92?=
=?UTF-8?q?=E7=84=A1=E5=8A=B9=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../@docs/[lang]/[pageId]/pageContent.tsx | 1 +
app/featureCard.tsx | 1 +
app/markdown/codeBlock.tsx | 9 +++++----
app/markdown/markdown.tsx | 17 +++++++++++++----
4 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx b/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
index 29bc52d3..55b98e18 100644
--- a/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
+++ b/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
@@ -159,6 +159,7 @@ export function PageContent(props: PageContentProps) {
diff --git a/app/featureCard.tsx b/app/featureCard.tsx
index 69ca1fb5..0d973b69 100644
--- a/app/featureCard.tsx
+++ b/app/featureCard.tsx
@@ -181,6 +181,7 @@ Pythonは整数 (\`int\`) と浮動小数点数 (\`float\`) を区別します
浮動小数点数 (\`float\`) は、他の言語の double 型に相当する倍精度浮動小数点数です。
`}
replacedRange={[{ start: 64, end: 120, id: "sample" }]}
+ interactive
/>
diff --git a/app/markdown/codeBlock.tsx b/app/markdown/codeBlock.tsx
index 9e2164e7..18f96038 100644
--- a/app/markdown/codeBlock.tsx
+++ b/app/markdown/codeBlock.tsx
@@ -9,18 +9,19 @@ import { ExtraProps } from "react-markdown";
import { StyledSyntaxHighlighter } from "./styledSyntaxHighlighter";
export function AutoCodeBlock({
+ interactive,
node,
className,
ref,
style,
...props
-}: JSX.IntrinsicElements["code"] & ExtraProps) {
+}: JSX.IntrinsicElements["code"] & ExtraProps & { interactive: boolean }) {
const match = /^language-(\w+)(-repl|-exec|-readonly)?\:?(.+)?$/.exec(
className || ""
);
if (match) {
const language = langConstants(match[1] as MarkdownLang | undefined);
- if (match[2] === "-exec" && match[3]) {
+ if (interactive && match[2] === "-exec" && match[3]) {
/*
```python-exec:main.py
hello, world!
@@ -40,7 +41,7 @@ export function AutoCodeBlock({
/>
);
}
- } else if (match[2] === "-repl") {
+ } else if (interactive && match[2] === "-repl") {
// repl付きの言語指定
if (!match[3]) {
console.error(
@@ -56,7 +57,7 @@ export function AutoCodeBlock({
/>
);
}
- } else if (match[3]) {
+ } else if (interactive && match[3]) {
// ファイル名指定がある場合、ファイルエディター
return (
{props.content}
@@ -30,7 +31,8 @@ export function StyledMarkdown(props: {
}
// TailwindCSSがh1などのタグのスタイルを消してしまうので、手動でスタイルを指定する必要がある
-const components: Components = {
+// チャット回答、term定義内などではコードブロックの操作やtermリンクを無効化したbaseComponentを使用
+const baseComponents: Components = {
h1: ({ children }) => {children},
h2: ({ children }) => {children},
h3: ({ children }) => {children},
@@ -55,8 +57,15 @@ const components: Components = {
),
hr: () => null,
- pre: ({ node, ...props }) => props.children,
- code: AutoCodeBlock,
+ pre: ({ children }) => children,
+ code: (props) => ,
+ ins: ({ children }) => children,
+ q: ({ children }) => children,
+};
+// ドキュメント本文で使うフルバージョン:
+const interactiveComponents: Components = {
+ ...baseComponents,
+ code: (props) => ,
ins: MultiHighlightTag,
q: Term,
};
From 13766cff2af032956c2ea5bde9da6bf9d90adaff Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 14:22:26 +0900
Subject: [PATCH 08/21] =?UTF-8?q?term=E8=89=B2=E5=A4=89=E6=9B=B4=E3=80=81?=
=?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E8=A1=A8=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/markdown/term.tsx | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/app/markdown/term.tsx b/app/markdown/term.tsx
index 050d6c49..ffbf1004 100644
--- a/app/markdown/term.tsx
+++ b/app/markdown/term.tsx
@@ -88,8 +88,17 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
const termText = onlyText(props.children);
const term = termDefinitions.find((t) => t.alias.includes(termText));
if (!term) {
- console.error(`'${termText}'という用語は定義されていません`);
- return props.children;
+ console.error(`'${termText}' という用語は定義されていません`);
+ return (
+
+
+ {props.children}
+
+
+ );
}
return (
@@ -98,7 +107,7 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
ref={refs.setReference}
{...getReferenceProps()}
href={`/${lang}/${term.pageSlug}#${term.id}`}
- className="inline-block link link-info decoration-dotted underline-offset-[0.2rem]"
+ className="link link-info decoration-dotted underline-offset-[0.2rem]"
>
{props.children}
@@ -110,14 +119,16 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
style={floatingStyles}
{...getFloatingProps()}
className={clsx(
- "max-w-sm rounded-box bg-primary-content/60 border border-primary text-base-content",
+ "max-w-sm rounded-box bg-base-100/60 border border-info text-base-content",
"p-1 shadow-xl backdrop-blur-xs z-50",
"text-justify"
)}
>
- - {term.pageIndex}. {term.pageName}
+ -
+ {term.pageIndex}. {term.pageName}
+
- {term.title}
From e0a2020d2c12c6b746b2eb436e88e55fcbb7cdb2 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 16:00:32 +0900
Subject: [PATCH 09/21] =?UTF-8?q?pagesList=E3=82=92=E4=BF=9D=E6=8C=81?=
=?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90=E3=83=AB?=
=?UTF-8?q?=E3=81=AAcontext=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=81pagesList?=
=?UTF-8?q?=E3=81=AE=E5=8F=96=E5=BE=97=E3=82=92=E6=B8=9B=E3=82=89=E3=81=99?=
=?UTF-8?q?=E4=BB=A3=E3=82=8F=E3=82=8A=E3=81=ABdocs=E3=81=AE=E5=90=84?=
=?UTF-8?q?=E7=A8=AE=E9=96=A2=E6=95=B0=E5=86=85=E3=81=A7=E3=83=91=E3=83=A9?=
=?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=E3=81=AE=E3=83=90=E3=83=AA=E3=83=87?=
=?UTF-8?q?=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/(docs)/@chat/chat/[chatId]/chatArea.tsx | 24 +++++++++++-----
app/(docs)/@chat/chat/[chatId]/page.tsx | 25 ++++++++---------
app/(docs)/@docs/[lang]/[pageId]/page.tsx | 14 ++--------
.../@docs/[lang]/[pageId]/pageContent.tsx | 28 +++++++++++--------
app/layout.tsx | 5 +++-
app/lib/docs.ts | 26 +++++++++++++----
app/markdown/term.tsx | 9 ++++--
app/pagesListContext.tsx | 26 +++++++++++++++++
app/sidebar.tsx | 4 ++-
9 files changed, 108 insertions(+), 53 deletions(-)
create mode 100644 app/pagesListContext.tsx
diff --git a/app/(docs)/@chat/chat/[chatId]/chatArea.tsx b/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
index e3300cc9..6b8038f7 100644
--- a/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
+++ b/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
@@ -4,9 +4,16 @@ import { ChatAreaStateUpdater } from "@/(docs)/chatAreaState";
import { useStreamingChatContext } from "@/(docs)/streamingChatContext";
import { deleteChatAction } from "@/actions/deleteChat";
import { ChatWithMessages } from "@/lib/chatHistory";
-import { LanguageEntry, MarkdownSection, PageEntry } from "@/lib/docs";
+import {
+ LangId,
+ LanguageEntry,
+ MarkdownSection,
+ PageEntry,
+ PageSlug,
+} from "@/lib/docs";
import { Heading } from "@/markdown/heading";
import { StyledMarkdown } from "@/markdown/markdown";
+import { usePagesListForLang } from "@/pagesListContext";
import clsx from "clsx";
import Link from "next/link";
import { useRouter } from "next/navigation";
@@ -70,12 +77,15 @@ export function ChatAreaContainer(props: {
interface Props {
chatId: string;
chatData: ChatWithMessages;
- targetLang: LanguageEntry | undefined;
- targetPage: PageEntry | undefined;
+ langId: LangId;
+ pageSlug: PageSlug;
targetSection: MarkdownSection | undefined;
}
export function ChatAreaContent(props: Props) {
- const { chatId, chatData, targetLang, targetPage, targetSection } = props;
+ const { chatId, chatData, langId, pageSlug, targetSection } = props;
+
+ const langEntry = usePagesListForLang(langId);
+ const pageEntry = langEntry?.pages.find((p) => p.slug === pageSlug);
const messagesAndDiffs = [
...chatData.messages.map((msg) => ({ type: "message" as const, ...msg })),
@@ -97,13 +107,13 @@ export function ChatAreaContent(props: Props) {
-
-
- {targetLang?.name}
+
+ {langEntry?.name}
-
- {targetPage?.index}. {targetPage?.name}
+ {pageEntry?.index}. {pageEntry?.name}
-
diff --git a/app/(docs)/@chat/chat/[chatId]/page.tsx b/app/(docs)/@chat/chat/[chatId]/page.tsx
index 00484739..726fbc6b 100644
--- a/app/(docs)/@chat/chat/[chatId]/page.tsx
+++ b/app/(docs)/@chat/chat/[chatId]/page.tsx
@@ -4,7 +4,11 @@ import {
getChatOne,
initContext,
} from "@/lib/chatHistory";
-import { getMarkdownSections, getPagesListForLang, LangId } from "@/lib/docs";
+import {
+ getMarkdownSections,
+ LangId,
+ PageSlug,
+} from "@/lib/docs";
import { ChatAreaContainer, ChatAreaContent } from "./chatArea";
import { cacheLife, cacheTag } from "next/cache";
import { isCloudflare } from "@/lib/detectCloudflare";
@@ -29,16 +33,11 @@ export default async function ChatPage({
);
}
- const targetLang = await getPagesListForLang(
- chatData.section.pagePath.split("/")[0] as LangId
- );
- const targetPage = targetLang?.pages.find(
- (page) => page.slug === chatData.section.pagePath.split("/")[1]
- );
- const sections =
- targetLang && targetPage
- ? await getMarkdownSections(targetLang.id, targetPage.slug)
- : [];
+ const [langId, pageSlug] = chatData.section.pagePath.split("/") as [
+ LangId,
+ PageSlug,
+ ];
+ const sections = await getMarkdownSections(langId, pageSlug);
const targetSection = sections.find((sec) => sec.id === chatData.sectionId);
return (
@@ -46,8 +45,8 @@ export default async function ChatPage({
diff --git a/app/(docs)/@docs/[lang]/[pageId]/page.tsx b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
index dc860432..ae168fb0 100644
--- a/app/(docs)/@docs/[lang]/[pageId]/page.tsx
+++ b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
@@ -46,14 +46,6 @@ export default async function Page({
params: Promise<{ lang: LangId; pageId: PageSlug }>;
}) {
const { lang, pageId } = await params;
- const langEntry = await getPagesListForLang(lang);
- const pageEntryIndex =
- langEntry?.pages.findIndex((p) => p.slug === pageId) ?? -1;
- const pageEntry = langEntry?.pages[pageEntryIndex];
- if (!langEntry || !pageEntry) notFound();
-
- const prevPage = langEntry.pages[pageEntryIndex - 1];
- const nextPage = langEntry.pages[pageEntryIndex + 1];
// server componentなのでuseMemoいらない
const path = { lang: lang, page: pageId };
@@ -70,10 +62,8 @@ export default async function Page({
diff --git a/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx b/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
index 55b98e18..e94d1501 100644
--- a/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
+++ b/app/(docs)/@docs/[lang]/[pageId]/pageContent.tsx
@@ -8,29 +8,35 @@ import clsx from "clsx";
import { PageTransition } from "./pageTransition";
import {
DynamicMarkdownSection,
- LanguageEntry,
+ LangId,
MarkdownSection,
- PageEntry,
PagePath,
+ PageSlug,
SectionId,
} from "@/lib/docs";
import { Heading } from "@/markdown/heading";
import Link from "next/link";
import { useChatId } from "@/(docs)/chatAreaState";
import { ChatWithMessages } from "@/lib/chatHistory";
+import { usePagesListForLang } from "@/pagesListContext";
interface PageContentProps {
splitMdContent: MarkdownSection[];
- langEntry: LanguageEntry;
- pageEntry: PageEntry;
- prevPage?: PageEntry;
- nextPage?: PageEntry;
+ langId: LangId;
+ pageSlug: PageSlug;
path: PagePath;
chatHistories: ChatWithMessages[];
}
export function PageContent(props: PageContentProps) {
const { setSidebarMdContent } = useSidebarMdContext();
- const { splitMdContent, pageEntry, path, chatHistories } = props;
+ const { splitMdContent, langId, pageSlug, path, chatHistories } = props;
+
+ const langEntry = usePagesListForLang(langId);
+ const pageEntryIndex =
+ langEntry?.pages.findIndex((p) => p.slug === pageSlug) ?? -1;
+ const pageEntry = langEntry?.pages[pageEntryIndex];
+ const prevPage = langEntry?.pages[pageEntryIndex - 1];
+ const nextPage = langEntry?.pages[pageEntryIndex + 1];
const [sectionInView, setSectionInView] = useState([]);
const sectionRefs = useRef>([]);
@@ -143,7 +149,7 @@ export function PageContent(props: PageContentProps) {
}}
>
- 第{pageEntry.index}章: {pageEntry.title}
+ 第{pageEntry?.index}章: {pageEntry?.title}
{dynamicMdContent.map((section, index) => (
@@ -173,8 +179,8 @@ export function PageContent(props: PageContentProps) {
))}
@@ -184,7 +190,7 @@ export function PageContent(props: PageContentProps) {
+
diff --git a/app/lib/docs.ts b/app/lib/docs.ts
index 12405ab3..9c8e9b95 100644
--- a/app/lib/docs.ts
+++ b/app/lib/docs.ts
@@ -67,9 +67,7 @@ export type MarkdownSection = z.output;
export interface TermDefinition {
alias: string[];
- pageSlug: PageSlug;
- pageIndex: number;
- pageName: string;
+ page: PageSlug;
id: SectionId;
title: string;
rawContentWithoutCode: string;
@@ -99,6 +97,9 @@ export type DynamicMarkdownSection = z.output<
/**
* 各言語のindex.ymlから読み込んだデータにid,index等を追加したデータ型
+ *
+ * getPagesList() で取得できるが、クライアントコンポーネントで頻繁に使うので、
+ * layout.tsxでcontextを初期化しておりusePagesList()で取得することもできる (pagesListContext.tsx)
*/
export interface LanguageEntry {
/**
@@ -216,6 +217,10 @@ export async function getPagesList(): Promise {
export async function getPagesListForLang(
langId: LangId
): Promise {
+ if (!(await getLanguageIds()).includes(langId)) {
+ notFound();
+ }
+
const raw = await readPublicFile(`docs/${langId}/index.yml`);
const data = yaml.load(raw) as IndexYml;
return {
@@ -269,6 +274,13 @@ export async function getMarkdownSections(
lang: LangId,
page: PageSlug
): Promise {
+ if (
+ /*!(await getLanguageIds()).includes(lang) || // getPagesListForLangのなかでチェック */
+ !(await getPagesListForLang(lang)).pages.some((p) => p.slug === page)
+ ) {
+ notFound();
+ }
+
if (isCloudflare()) {
const sectionsJson = await readPublicFile(
`docs/${lang}/${page}/sections.json`
@@ -380,6 +392,10 @@ export async function getRevisionOfMarkdownSection(
export async function getTermDefinitions(
langId: LangId
): Promise {
+ if (!(await getLanguageIds()).includes(langId)) {
+ notFound();
+ }
+
if (isCloudflare()) {
const termsJson = await readPublicFile(
`docs/${langId}/termDefinitions.json`
@@ -407,9 +423,7 @@ export async function getTermDefinitions(
if (section.term && section.term.length >= 1) {
terms.push({
alias: section.term,
- pageSlug: page.slug,
- pageIndex: page.index,
- pageName: page.name,
+ page: page.slug,
id: section.id,
title: section.title,
rawContentWithoutCode: section.rawContent
diff --git a/app/markdown/term.tsx b/app/markdown/term.tsx
index ffbf1004..a90d4040 100644
--- a/app/markdown/term.tsx
+++ b/app/markdown/term.tsx
@@ -20,6 +20,7 @@ import {
FloatingPortal,
} from "@floating-ui/react";
import clsx from "clsx";
+import { usePagesListForLang } from "@/pagesListContext";
const TermDefinitionContext = createContext<{
lang: LangId;
@@ -50,6 +51,8 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
// @docs/lang/pageId/page.tsx で取得したものをcontextに渡してそれを取得する
const { lang, termDefinitions } = useContext(TermDefinitionContext) ?? {};
+ const langEntry = usePagesListForLang(lang);
+
// 1. Manage the tooltip's open state
const [isOpen, setIsOpen] = useState(false);
@@ -101,12 +104,14 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
);
}
+ const pageEntry = langEntry?.pages.find((p) => p.slug === term.page);
+
return (
<>
{props.children}
@@ -127,7 +132,7 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
-
- {term.pageIndex}. {term.pageName}
+ {pageEntry?.index}. {pageEntry?.name}
- {term.title}
diff --git a/app/pagesListContext.tsx b/app/pagesListContext.tsx
new file mode 100644
index 00000000..d57be245
--- /dev/null
+++ b/app/pagesListContext.tsx
@@ -0,0 +1,26 @@
+"use client";
+
+import { createContext, ReactNode, useContext } from "react";
+import { LangId, LanguageEntry } from "./lib/docs";
+
+const PagesListContext = createContext(null!);
+
+export function PagesListContextProvider({
+ pagesList,
+ children,
+}: {
+ pagesList: LanguageEntry[];
+ children: ReactNode;
+}) {
+ return (
+
+ {children}
+
+ );
+}
+
+export const usePagesList = () => useContext(PagesListContext);
+export function usePagesListForLang(lang?: LangId) {
+ const pagesList = useContext(PagesListContext);
+ return pagesList.find((p) => p.id === lang);
+}
diff --git a/app/sidebar.tsx b/app/sidebar.tsx
index ac1787d3..7bdd7ff9 100644
--- a/app/sidebar.tsx
+++ b/app/sidebar.tsx
@@ -20,6 +20,7 @@ import {
import clsx from "clsx";
import { LanguageIcon } from "@/terminal/icons";
import { RuntimeLang } from "@my-code/runtime/languages";
+import { usePagesList } from "./pagesListContext";
export interface ISidebarMdContext {
loadedPath: PagePath | null;
@@ -78,11 +79,12 @@ export function SidebarMdProvider({ children }: { children: ReactNode }) {
);
}
-export function Sidebar({ pagesList }: { pagesList: LanguageEntry[] }) {
+export function Sidebar() {
const pathname = usePathname();
const pathnameMatch = pathname.match(/^\/([\w-_]+)\/([\w-_]+).*?/);
const currentLang = pathnameMatch?.[1] as LangId;
const currentPageId = pathnameMatch?.[2] as PageSlug;
+ const pagesList = usePagesList();
const sidebarContext = useSidebarMdContext();
// sidebarMdContextの情報が古かったら使わない
const sidebarMdContent =
From 182fe2a5b2c152b363c3015e4804ba52c8c90b23 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Wed, 29 Jul 2026 16:31:13 +0900
Subject: [PATCH 10/21] =?UTF-8?q?=E5=88=A5=E3=83=9A=E3=83=BC=E3=82=B8?=
=?UTF-8?q?=E3=81=B8=E3=81=AE=E5=86=85=E9=83=A8=E3=83=AA=E3=83=B3=E3=82=AF?=
=?UTF-8?q?=E3=82=92term=E3=81=A8=E5=90=8C=E6=A7=98=E3=81=AB=E5=AE=9F?=
=?UTF-8?q?=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 23 ++++++++-
app/(docs)/@docs/[lang]/[pageId]/page.tsx | 6 ++-
app/markdown/term.tsx | 62 +++++++++++++++++++++--
3 files changed, 86 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index 09b11f42..3df5880e 100644
--- a/README.md
+++ b/README.md
@@ -189,7 +189,28 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
````
- 練習問題のファイル名は不都合がなければ `practice(章番号)_(問題番号).拡張子` で統一。空でもよいのでファイルコードブロックとexecコードブロックを置く
-## markdown仕様
+### 内部リンク
+
+```
+[[用語]]
+```
+と書くと、`term: - 用語` が定義されている別のセクションへのリンクになり、ポップアップでその内容も表示されます。
+
+markdown書式も利用可能です。 `[[ほげ**ふが**]]` は `term: - ほげふが` へのリンクになり、表示は「ほげ**ふが**」になります。ただし `**[[ふが]]**` はリンクの色が優先されるのに対し `[[**ふが**]]` は強調の色が優先されます。
+
+```
+[[./1-foo]]
+[[./1]]
+```
+と書くと、同じ言語のページID `1-foo` またはindex `1` (ページのindexはindex.ymlの記述順で0-based) へのリンクになり、表示は「第1章」になります
+
+```
+[[./prev]]
+[[./next]]
+```
+と書くと、同じ言語の前のページ・次のページへのリンクになり、表示は「第1章」(実際の章番号)になります
+
+### コード実行環境仕様
実行環境の説明は ./packages/runtime/README.md を参照
diff --git a/app/(docs)/@docs/[lang]/[pageId]/page.tsx b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
index ae168fb0..842e0509 100644
--- a/app/(docs)/@docs/[lang]/[pageId]/page.tsx
+++ b/app/(docs)/@docs/[lang]/[pageId]/page.tsx
@@ -58,7 +58,11 @@ export default async function Page({
return (
<>
-
+
(null);
export function TermDefinitionProvider({
lang,
+ page,
termDefinitions,
children,
}: {
lang: LangId;
+ page: PageSlug;
termDefinitions: TermDefinition[];
children: ReactNode;
}) {
return (
-
+
{children}
);
@@ -49,7 +52,8 @@ export function TermDefinitionProvider({
export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
// termDefinitionの取得がasync関数であり、clientコンポーネントから直接取得できないので、
// @docs/lang/pageId/page.tsx で取得したものをcontextに渡してそれを取得する
- const { lang, termDefinitions } = useContext(TermDefinitionContext) ?? {};
+ const { lang, page, termDefinitions } =
+ useContext(TermDefinitionContext) ?? {};
const langEntry = usePagesListForLang(lang);
@@ -91,6 +95,58 @@ export default function Term(props: JSX.IntrinsicElements["q"] & ExtraProps) {
const termText = onlyText(props.children);
const term = termDefinitions.find((t) => t.alias.includes(termText));
if (!term) {
+ const internalLink = (pageEntry: PageEntry) => (
+
+
+ 第{pageEntry.index}章
+
+
+ );
+
+ // ./1, ./1-foo, ./next, ./prev →同じ言語のドキュメントへのリンクで、「第n章」
+ const pageIndexMatch = termText.match(/^.\/(\d+)$/);
+ const pageSlugMatch = termText.match(/^.\/([0-9a-zA-Z_-]+)$/);
+ if (
+ pageIndexMatch &&
+ langEntry &&
+ Number(pageIndexMatch[1]) < langEntry.pages.length
+ ) {
+ return internalLink(langEntry.pages[Number(pageIndexMatch[1])]);
+ }
+ if (
+ pageSlugMatch &&
+ langEntry?.pages.find((p) => p.slug === pageSlugMatch[1])
+ ) {
+ return internalLink(
+ langEntry.pages.find((p) => p.slug === pageSlugMatch[1])!
+ );
+ }
+ const currentPageIndex = langEntry?.pages.findIndex((p) => p.slug === page);
+ if (
+ pageSlugMatch &&
+ langEntry &&
+ pageSlugMatch[1] === "prev" &&
+ currentPageIndex !== undefined
+ ) {
+ // ./prev → 前のページ
+ return internalLink(langEntry.pages[currentPageIndex - 1]);
+ }
+ if (
+ pageSlugMatch &&
+ langEntry &&
+ pageSlugMatch[1] === "next" &&
+ currentPageIndex !== undefined
+ ) {
+ // ./next → 次のページ
+ return internalLink(langEntry.pages[currentPageIndex + 1]);
+ }
+
console.error(`'${termText}' という用語は定義されていません`);
return (
Date: Fri, 31 Jul 2026 00:43:35 +0900
Subject: [PATCH 11/21] =?UTF-8?q?alert=E3=81=A8blockquote=E3=82=92?=
=?UTF-8?q?=E5=AE=9F=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/daisyAlertIcon.tsx | 21 +++--
app/markdown/markdown.tsx | 33 +++++++
app/markdown/remarkGithubAlerts.ts | 145 +++++++++++++++++++++++++++++
app/page.tsx | 2 +-
app/terminal/editor.tsx | 2 +-
app/terminal/exec.tsx | 2 +-
app/terminal/page.tsx | 2 +-
app/terminal/repl.tsx | 2 +-
8 files changed, 196 insertions(+), 13 deletions(-)
create mode 100644 app/markdown/remarkGithubAlerts.ts
diff --git a/app/daisyAlertIcon.tsx b/app/daisyAlertIcon.tsx
index ebeef52e..7c3351c5 100644
--- a/app/daisyAlertIcon.tsx
+++ b/app/daisyAlertIcon.tsx
@@ -1,12 +1,17 @@
+import clsx from "clsx";
+
// https://daisyui.com/components/alert/ のコード例のsvgのコピペ
-export function DaisyInfoIcon() {
+/**
+ * 色を変える場合は のように使う
+ */
+export function DaisyInfoIcon({ className }: { className?: string }) {
return (
-
+
プログラミング未経験の方、何から始めればいいかわからない...という方は、
diff --git a/app/terminal/editor.tsx b/app/terminal/editor.tsx
index aef2e0f6..14d2547b 100644
--- a/app/terminal/editor.tsx
+++ b/app/terminal/editor.tsx
@@ -86,7 +86,7 @@ export function EditorComponent(props: EditorProps) {
return (
diff --git a/app/terminal/exec.tsx b/app/terminal/exec.tsx
index 7bf12e59..b6b7e28d 100644
--- a/app/terminal/exec.tsx
+++ b/app/terminal/exec.tsx
@@ -139,7 +139,7 @@ export function ExecFile(props: ExecProps) {
return (
diff --git a/app/terminal/page.tsx b/app/terminal/page.tsx
index c7b57a2c..ba9a32ec 100644
--- a/app/terminal/page.tsx
+++ b/app/terminal/page.tsx
@@ -308,7 +308,7 @@ function MochaTest() {
) : (
-
+
テストが完了しました
)}
diff --git a/app/terminal/repl.tsx b/app/terminal/repl.tsx
index ca90efeb..3af039ce 100644
--- a/app/terminal/repl.tsx
+++ b/app/terminal/repl.tsx
@@ -462,7 +462,7 @@ export function ReplTerminal({
return (
From f72dba007701e507478d7dec3ed9fa64258e64ea Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:10:35 +0900
Subject: [PATCH 12/21] =?UTF-8?q?blockquote=E3=81=A7=E3=81=AF=E3=81=AA?=
=?UTF-8?q?=E3=81=8Faside=E3=81=AB=E5=A4=89=E6=9B=B4=E3=80=81=E3=83=8D?=
=?UTF-8?q?=E3=82=B9=E3=83=88=E5=AF=BE=E5=BF=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/markdown/markdown.tsx | 27 ++++++++++++++++++++++++---
app/markdown/remarkGithubAlerts.ts | 2 +-
2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/app/markdown/markdown.tsx b/app/markdown/markdown.tsx
index dc4e093e..b0631d55 100644
--- a/app/markdown/markdown.tsx
+++ b/app/markdown/markdown.tsx
@@ -16,6 +16,7 @@ import {
DaisySuccessIcon,
DaisyWarningIcon,
} from "@/daisyAlertIcon";
+import { CSSProperties } from "react";
export function StyledMarkdown(props: {
content: string;
@@ -68,6 +69,20 @@ const baseComponents: Components = {
hr: () => null,
blockquote: ({ node, className, children, ...props }) => (
+ がmx-2 my-2を設定するので、その分広げて相殺
+ className="flex-1 w-full -m-2"
+ >
+ {children}
+
+
+ ),
+ aside: ({ node, className, children, ...props }) => (
+ // remarkGitHubAlerts.ts でalertをasideタグにしている
+
) : null}
- {/* がmx-2 my-2を設定するので、その分広げて相殺 */}
-
{children}
-
+ がmx-2 my-2を設定するので、その分広げて相殺
+ className="flex-1 w-full -m-2 self-center"
+ // alertネスト対応
+ style={{ "--alert-color": "initial" } as CSSProperties}
+ >
+ {children}
+
+
),
pre: ({ children }) => children,
code: (props) => ,
diff --git a/app/markdown/remarkGithubAlerts.ts b/app/markdown/remarkGithubAlerts.ts
index 81313221..40c0d11f 100644
--- a/app/markdown/remarkGithubAlerts.ts
+++ b/app/markdown/remarkGithubAlerts.ts
@@ -56,7 +56,7 @@ type Option = {
*/
export const remarkAlert: Plugin<[Option?], Root> = ({
legacyTitle = false,
- tagName = "blockquote",
+ tagName = "aside",
classNames = "",
} = {}) => {
return (tree) => {
From b3a931b88e98e0502383c2110e516e291b686c2c Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:17:51 +0900
Subject: [PATCH 13/21] =?UTF-8?q?readme=E3=81=ABalert=E3=81=AE=E8=AA=AC?=
=?UTF-8?q?=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/README.md b/README.md
index 3df5880e..3ef60816 100644
--- a/README.md
+++ b/README.md
@@ -189,6 +189,16 @@ Cloudflare Worker のビルドログとステータス表示が見れますが
````
- 練習問題のファイル名は不都合がなければ `practice(章番号)_(問題番号).拡張子` で統一。空でもよいのでファイルコードブロックとexecコードブロックを置く
+### Alert
+
+GitHubのalert記法の、`NOTE` `TIP` `WARNING` `CAUTION` が使えます。
+`IMPORTANT` はwarningに置き換えられます。
+
+```
+> [!NOTE]
+> Highlights information that users should take into account, even when skimming.
+```
+
### 内部リンク
```
From cdc518580b85d12d2d6b8ac6f1283f0f923030e2 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Fri, 31 Jul 2026 23:42:47 +0900
Subject: [PATCH 14/21] fix lint
---
app/(docs)/@chat/chat/[chatId]/chatArea.tsx | 8 +-------
app/sidebar.tsx | 8 +-------
2 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/app/(docs)/@chat/chat/[chatId]/chatArea.tsx b/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
index 6b8038f7..0f5413b0 100644
--- a/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
+++ b/app/(docs)/@chat/chat/[chatId]/chatArea.tsx
@@ -4,13 +4,7 @@ import { ChatAreaStateUpdater } from "@/(docs)/chatAreaState";
import { useStreamingChatContext } from "@/(docs)/streamingChatContext";
import { deleteChatAction } from "@/actions/deleteChat";
import { ChatWithMessages } from "@/lib/chatHistory";
-import {
- LangId,
- LanguageEntry,
- MarkdownSection,
- PageEntry,
- PageSlug,
-} from "@/lib/docs";
+import { LangId, MarkdownSection, PageSlug } from "@/lib/docs";
import { Heading } from "@/markdown/heading";
import { StyledMarkdown } from "@/markdown/markdown";
import { usePagesListForLang } from "@/pagesListContext";
diff --git a/app/sidebar.tsx b/app/sidebar.tsx
index 7bdd7ff9..1615ee93 100644
--- a/app/sidebar.tsx
+++ b/app/sidebar.tsx
@@ -1,13 +1,7 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
-import {
- DynamicMarkdownSection,
- LangId,
- LanguageEntry,
- PagePath,
- PageSlug,
-} from "@/lib/docs";
+import { DynamicMarkdownSection, LangId, PagePath, PageSlug } from "@/lib/docs";
import { AccountMenu } from "./accountMenu";
import { ThemeToggle } from "./themeToggle";
import {
From d87bc8dcf2201b3e40c1285de552c181826471b5 Mon Sep 17 00:00:00 2001
From: na-trium-144 <100704180+na-trium-144@users.noreply.github.com>
Date: Sat, 1 Aug 2026 15:52:12 +0900
Subject: [PATCH 15/21] =?UTF-8?q?tootlip=E3=81=8C=E9=9A=A0=E3=82=8C?=
=?UTF-8?q?=E3=82=8B=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A32?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/terminal/exec.tsx | 2 +-
app/terminal/modal.tsx | 1 +
app/terminal/repl.tsx | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/terminal/exec.tsx b/app/terminal/exec.tsx
index b6b7e28d..67f96b23 100644
--- a/app/terminal/exec.tsx
+++ b/app/terminal/exec.tsx
@@ -143,7 +143,7 @@ export function ExecFile(props: ExecProps) {
open={isModal}
setOpen={setIsModal}
>
-
+