refactor: rename project DADA → 云梦 (slug: yume)

- 所有 workspace 包 @dada/* → @yume/*,根包 dada → yume
- 全部导入路径同步更新
- 内部 ID 对齐:dada-ripple → yume-ripple,dada:custom → yume:custom
- 首页 / new / play 用户文案整段中文化,保留 smallcaps + 衬线 + 罗马数字排版语汇
- README 标题改为 "# 云梦",部署链接与目录树 slug 改为 yume
- 重新生成 pnpm-lock.yaml

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
yuanzonghao
2026-05-24 10:14:14 +08:00
parent d0f2868834
commit 2793c06278
28 changed files with 159 additions and 195 deletions
+3 -3
View File
@@ -1,4 +1,4 @@
# Dada # 云梦
> An AI-driven visual novel where every frame — scenes, dialogue, choices — is rendered by an AI, one frame at a time. You click. It paints. The story unfolds. > An AI-driven visual novel where every frame — scenes, dialogue, choices — is rendered by an AI, one frame at a time. You click. It paints. The story unfolds.
@@ -31,7 +31,7 @@ There is no traditional UI. There is only the image. The AI chooses the layout,
## One-click deploy ## One-click deploy
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/YOUR_USERNAME/dada&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL&envDescription=Three%20independently%20configurable%20providers.%20Any%20OpenAI-compatible%20endpoint%20works.&envLink=https://github.com/YOUR_USERNAME/dada%23environment-variables) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/YOUR_USERNAME/yume&env=TEXT_BASE_URL,TEXT_API_KEY,TEXT_MODEL,IMAGE_BASE_URL,IMAGE_API_KEY,IMAGE_MODEL,VISION_BASE_URL,VISION_API_KEY,VISION_MODEL&envDescription=Three%20independently%20configurable%20providers.%20Any%20OpenAI-compatible%20endpoint%20works.&envLink=https://github.com/YOUR_USERNAME/yume%23environment-variables)
After deploy, set the nine environment variables (see below) in your Vercel project. That's it. After deploy, set the nine environment variables (see below) in your Vercel project. That's it.
@@ -68,7 +68,7 @@ pnpm dev
## Project layout ## Project layout
``` ```
dada/ yume/
├── apps/web/ Next.js 16 app — pages + API routes ├── apps/web/ Next.js 16 app — pages + API routes
└── packages/ └── packages/
├── types/ shared TypeScript types ├── types/ shared TypeScript types
+1 -1
View File
@@ -1,5 +1,5 @@
# ============================================================= # =============================================================
# Dada — AI Visual Novel # 云梦 — AI 视觉小说
# Three independently configurable AI providers # Three independently configurable AI providers
# Any OpenAI-compatible endpoint works (OpenRouter, OpenAI, # Any OpenAI-compatible endpoint works (OpenRouter, OpenAI,
# Anthropic via OpenAI-compat proxy, Gemini, DeepSeek, Ollama). # Anthropic via OpenAI-compat proxy, Gemini, DeepSeek, Ollama).
+2 -2
View File
@@ -1,5 +1,5 @@
import { takeTurn } from "@dada/engine"; import { takeTurn } from "@yume/engine";
import type { InteractRequest } from "@dada/types"; import type { InteractRequest } from "@yume/types";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { loadEngineConfig } from "@/lib/config"; import { loadEngineConfig } from "@/lib/config";
+2 -2
View File
@@ -1,5 +1,5 @@
import { startSession } from "@dada/engine"; import { startSession } from "@yume/engine";
import type { StartRequest } from "@dada/types"; import type { StartRequest } from "@yume/types";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { loadEngineConfig } from "@/lib/config"; import { loadEngineConfig } from "@/lib/config";
+2 -2
View File
@@ -1,5 +1,5 @@
import { visionTurn } from "@dada/engine"; import { visionTurn } from "@yume/engine";
import type { VisionRequest } from "@dada/types"; import type { VisionRequest } from "@yume/types";
import { NextResponse } from "next/server"; import { NextResponse } from "next/server";
import { loadEngineConfig } from "@/lib/config"; import { loadEngineConfig } from "@/lib/config";
+1 -1
View File
@@ -54,7 +54,7 @@
} }
} }
@keyframes dada-ripple { @keyframes yume-ripple {
0% { 0% {
width: 14px; width: 14px;
height: 14px; height: 14px;
+2 -3
View File
@@ -2,9 +2,8 @@ import type { Metadata } from "next";
import "./globals.css"; import "./globals.css";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Dada — AI Visual Novel", title: "云梦 — AI 视觉小说",
description: description: "一部由 AI 实时绘制每一帧的开源视觉小说。",
"An open-source visual novel where every frame is generated by AI.",
}; };
export default function RootLayout({ export default function RootLayout({
+9 -10
View File
@@ -10,10 +10,10 @@ export default function NewPage() {
className="text-[10px] smallcaps text-clay-700 hover:text-clay-900 transition-colors flex items-center gap-2" className="text-[10px] smallcaps text-clay-700 hover:text-clay-900 transition-colors flex items-center gap-2"
> >
<i className="fa-solid fa-arrow-left text-[9px]" /> <i className="fa-solid fa-arrow-left text-[9px]" />
Dada
</Link> </Link>
<span className="text-[10px] smallcaps text-clay-500"> <span className="text-[10px] smallcaps text-clay-500">
Compose · a · world
</span> </span>
</header> </header>
@@ -21,23 +21,22 @@ export default function NewPage() {
<div className="grid grid-cols-12 gap-8 md:gap-16 max-w-6xl"> <div className="grid grid-cols-12 gap-8 md:gap-16 max-w-6xl">
<div className="col-span-12 md:col-span-4 animate-fade-in"> <div className="col-span-12 md:col-span-4 animate-fade-in">
<p className="text-[10px] smallcaps text-clay-500 mb-6"> <p className="text-[10px] smallcaps text-clay-500 mb-6">
· Untitled ·
</p> </p>
<h1 className="font-serif text-[44px] md:text-[64px] text-clay-900 leading-[0.96] mb-8"> <h1 className="font-serif text-[44px] md:text-[64px] text-clay-900 leading-[0.96] mb-8">
Write
<br /> <br />
<em className="italic text-clay-600">two</em> <em className="italic text-clay-600"></em>
<br /> <br />
paragraphs.
</h1> </h1>
<div className="hairline w-12 mb-6" /> <div className="hairline w-12 mb-6" />
<p className="font-serif text-base text-clay-700 leading-[1.7]"> <p className="font-serif text-base text-clay-700 leading-[1.7]">
The first sketches the world your story unfolds in. The second
describes how the world should look its medium, its mood, its
grain.
</p> </p>
<p className="font-serif italic text-sm text-clay-500 mt-5 leading-relaxed"> <p className="font-serif italic text-sm text-clay-500 mt-5 leading-relaxed">
Both fields accept any language. Specificity rewards specificity.
</p> </p>
</div> </div>
<div className="col-span-12 md:col-span-7 md:col-start-6"> <div className="col-span-12 md:col-span-7 md:col-start-6">
+26 -29
View File
@@ -10,11 +10,11 @@ export default function LandingPage() {
<header className="px-6 md:px-16 pt-7 md:pt-10 flex items-center justify-between"> <header className="px-6 md:px-16 pt-7 md:pt-10 flex items-center justify-between">
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<span className="text-[10px] smallcaps text-clay-700 font-medium"> <span className="text-[10px] smallcaps text-clay-700 font-medium">
Dada
</span> </span>
<span className="hairline w-10 hidden md:block" /> <span className="hairline w-10 hidden md:block" />
<span className="text-[10px] smallcaps text-clay-500 hidden md:block"> <span className="text-[10px] smallcaps text-clay-500 hidden md:block">
Frame · by · Frame · · ·
</span> </span>
</div> </div>
<nav className="flex items-center gap-5 text-[10px] smallcaps text-clay-600"> <nav className="flex items-center gap-5 text-[10px] smallcaps text-clay-600">
@@ -26,7 +26,7 @@ export default function LandingPage() {
</a> </a>
<span className="text-clay-300">·</span> <span className="text-clay-300">·</span>
<a href="#about" className="hover:text-clay-900 transition-colors"> <a href="#about" className="hover:text-clay-900 transition-colors">
About
</a> </a>
</nav> </nav>
</header> </header>
@@ -35,20 +35,19 @@ export default function LandingPage() {
<div className="grid grid-cols-12 gap-8"> <div className="grid grid-cols-12 gap-8">
<div className="col-span-12 md:col-span-7 animate-fade-in"> <div className="col-span-12 md:col-span-7 animate-fade-in">
<p className="text-[10px] smallcaps text-clay-500 mb-8"> <p className="text-[10px] smallcaps text-clay-500 mb-8">
An open-source experiment · MMXXVI · · · MMXXVI
</p> </p>
<h1 className="font-serif font-light text-[56px] md:text-[104px] leading-[0.94] text-clay-900 tracking-tight"> <h1 className="font-serif font-light text-[56px] md:text-[104px] leading-[0.94] text-clay-900 tracking-tight">
Every{" "} <em className="italic font-light text-clay-600"></em>
<em className="italic font-light text-clay-600">frame</em>
<br /> <br />
is painted on
<br /> <br />
<span className="text-ember-500 italic font-light">demand.</span> <span className="text-ember-500 italic font-light"></span>
</h1> </h1>
<p className="mt-10 md:mt-14 max-w-md font-serif text-lg md:text-xl text-clay-700 leading-[1.65]"> <p className="mt-10 md:mt-14 max-w-md font-serif text-lg md:text-xl text-clay-700 leading-[1.65]">
Dada is a visual novel where the <em>entire</em> interface scene, <em></em> AI
dialogue, choices is rendered by an AI, one frame at a time. You
click. It paints. The story unfolds.
</p> </p>
</div> </div>
@@ -56,13 +55,13 @@ export default function LandingPage() {
<div className="space-y-3"> <div className="space-y-3">
<div className="hairline w-12" /> <div className="hairline w-12" />
<p className="font-serif italic text-clay-600 text-base md:text-[17px] leading-relaxed max-w-[280px]"> <p className="font-serif italic text-clay-600 text-base md:text-[17px] leading-relaxed max-w-[280px]">
&ldquo;It is impossible to step into the same river twice. &ldquo;
</p> </p>
<p className="font-serif italic text-clay-600 text-base md:text-[17px] leading-relaxed max-w-[280px]"> <p className="font-serif italic text-clay-600 text-base md:text-[17px] leading-relaxed max-w-[280px]">
It is impossible to play the same Dada twice.&rdquo; &rdquo;
</p> </p>
<p className="text-[10px] smallcaps text-clay-500 pt-2"> <p className="text-[10px] smallcaps text-clay-500 pt-2">
README · v0.1 · v0.1
</p> </p>
</div> </div>
</aside> </aside>
@@ -76,10 +75,10 @@ export default function LandingPage() {
<section className="px-6 md:px-16 pt-14 md:pt-20 pb-16 md:pb-24"> <section className="px-6 md:px-16 pt-14 md:pt-20 pb-16 md:pb-24">
<div className="flex items-baseline justify-between mb-8 md:mb-10"> <div className="flex items-baseline justify-between mb-8 md:mb-10">
<h2 className="text-[10px] smallcaps text-clay-700 font-medium"> <h2 className="text-[10px] smallcaps text-clay-700 font-medium">
Four Doors
</h2> </h2>
<p className="text-[10px] smallcaps text-clay-500 hidden md:block"> <p className="text-[10px] smallcaps text-clay-500 hidden md:block">
Choose a world · or compose your own ·
</p> </p>
</div> </div>
@@ -98,14 +97,14 @@ export default function LandingPage() {
</span> </span>
<div className="flex-1 min-w-0"> <div className="flex-1 min-w-0">
<h3 className="font-serif text-3xl md:text-4xl text-clay-900 leading-tight mb-2.5"> <h3 className="font-serif text-3xl md:text-4xl text-clay-900 leading-tight mb-2.5">
Untitled
</h3> </h3>
<p className="text-sm text-clay-600 leading-relaxed max-w-md"> <p className="text-sm text-clay-600 leading-relaxed max-w-md">
Bring your own world. Describe it in your own words.
</p> </p>
</div> </div>
<span className="hidden md:flex items-center gap-3 text-[10px] tracking-[0.4em] text-clay-400 group-hover:text-ember-500 transition-colors duration-500 shrink-0 self-center"> <span className="hidden md:flex items-center gap-3 text-[10px] tracking-[0.4em] text-clay-400 group-hover:text-ember-500 transition-colors duration-500 shrink-0 self-center">
COMPOSE
<span className="w-7 h-px bg-current transition-all duration-500 group-hover:w-12" /> <span className="w-7 h-px bg-current transition-all duration-500 group-hover:w-12" />
</span> </span>
</div> </div>
@@ -119,30 +118,28 @@ export default function LandingPage() {
> >
<div className="col-span-12 md:col-span-3"> <div className="col-span-12 md:col-span-3">
<p className="text-[10px] smallcaps text-clay-500 mb-3"> <p className="text-[10px] smallcaps text-clay-500 mb-3">
Colophon · I · I
</p> </p>
<p className="font-serif italic text-clay-700 text-base leading-relaxed"> <p className="font-serif italic text-clay-700 text-base leading-relaxed">
A small open-source experiment in generative narrative. Self-host on Vercel
Vercel in a single click.
</p> </p>
</div> </div>
<div className="col-span-12 md:col-span-3 md:col-start-5"> <div className="col-span-12 md:col-span-3 md:col-start-5">
<p className="text-[10px] smallcaps text-clay-500 mb-3"> <p className="text-[10px] smallcaps text-clay-500 mb-3">
Colophon · II · II
</p> </p>
<ul className="font-serif text-clay-700 text-base leading-relaxed space-y-1"> <ul className="font-serif text-clay-700 text-base leading-relaxed space-y-1">
<li>Story · large language model</li> <li> · </li>
<li>Image · generative renderer</li> <li> · </li>
<li>Click · vision interpreter</li> <li> · </li>
</ul> </ul>
</div> </div>
<div className="col-span-12 md:col-span-3 md:col-start-9"> <div className="col-span-12 md:col-span-3 md:col-start-9">
<p className="text-[10px] smallcaps text-clay-500 mb-3"> <p className="text-[10px] smallcaps text-clay-500 mb-3">
Colophon · III · III
</p> </p>
<p className="font-serif italic text-clay-700 text-base leading-relaxed"> <p className="font-serif italic text-clay-700 text-base leading-relaxed">
All three are configured separately bring any OpenAI-compatible OpenAI
endpoint.
</p> </p>
</div> </div>
</section> </section>
+12 -12
View File
@@ -12,7 +12,7 @@ import type {
StartResponse, StartResponse,
StoryFrame, StoryFrame,
VisionResponse, VisionResponse,
} from "@dada/types"; } from "@yume/types";
function PlayInner() { function PlayInner() {
const router = useRouter(); const router = useRouter();
@@ -47,7 +47,7 @@ function PlayInner() {
payload = { worldSetting: p.worldSetting, styleGuide: p.styleGuide }; payload = { worldSetting: p.worldSetting, styleGuide: p.styleGuide };
} }
} else if (params.get("custom") === "1") { } else if (params.get("custom") === "1") {
const stored = sessionStorage.getItem("dada:custom"); const stored = sessionStorage.getItem("yume:custom");
if (stored) { if (stored) {
try { try {
payload = JSON.parse(stored); payload = JSON.parse(stored);
@@ -224,7 +224,7 @@ function PlayInner() {
<div className="min-h-screen flex flex-col items-center justify-center px-8"> <div className="min-h-screen flex flex-col items-center justify-center px-8">
<div className="max-w-md text-center animate-fade-in"> <div className="max-w-md text-center animate-fade-in">
<p className="text-[10px] smallcaps text-clay-500 mb-6"> <p className="text-[10px] smallcaps text-clay-500 mb-6">
An · error · occurred · · · ·
</p> </p>
<p className="font-serif italic text-clay-900 text-lg leading-[1.7] mb-10"> <p className="font-serif italic text-clay-900 text-lg leading-[1.7] mb-10">
{error} {error}
@@ -234,7 +234,7 @@ function PlayInner() {
className="text-[10px] smallcaps text-clay-700 hover:text-ember-500 transition-colors inline-flex items-center gap-3" className="text-[10px] smallcaps text-clay-700 hover:text-ember-500 transition-colors inline-flex items-center gap-3"
> >
<i className="fa-solid fa-arrow-left text-[9px]" /> <i className="fa-solid fa-arrow-left text-[9px]" />
Return
</Link> </Link>
</div> </div>
</div> </div>
@@ -249,10 +249,10 @@ function PlayInner() {
className="text-[10px] smallcaps text-clay-600 hover:text-clay-900 transition-colors flex items-center gap-2" className="text-[10px] smallcaps text-clay-600 hover:text-clay-900 transition-colors flex items-center gap-2"
> >
<i className="fa-solid fa-arrow-left text-[9px]" /> <i className="fa-solid fa-arrow-left text-[9px]" />
Dada
</Link> </Link>
<div className="flex items-center gap-3 text-[10px] smallcaps text-clay-500 num"> <div className="flex items-center gap-3 text-[10px] smallcaps text-clay-500 num">
<span>Frame · {String(turnNum).padStart(3, "0")}</span> <span> · {String(turnNum).padStart(3, "0")} · </span>
<span className="text-clay-300">·</span> <span className="text-clay-300">·</span>
<span className="hidden sm:inline truncate max-w-[180px]"> <span className="hidden sm:inline truncate max-w-[180px]">
{session?.id.slice(2, 14) ?? "—"} {session?.id.slice(2, 14) ?? "—"}
@@ -271,30 +271,30 @@ function PlayInner() {
<div className="mt-7 md:mt-9 max-w-md w-full text-center min-h-[64px] flex items-center justify-center"> <div className="mt-7 md:mt-9 max-w-md w-full text-center min-h-[64px] flex items-center justify-center">
{phase === "loading-first" && ( {phase === "loading-first" && (
<p className="text-[10px] smallcaps text-clay-500 animate-slow-pulse"> <p className="text-[10px] smallcaps text-clay-500 animate-slow-pulse">
Summoning · the · first · frame · · · · · ·
</p> </p>
)} )}
{phase === "interacting" && ( {phase === "interacting" && (
<div className="flex flex-col items-center gap-2 animate-fade-in"> <div className="flex flex-col items-center gap-2 animate-fade-in">
<p className="text-[10px] smallcaps text-clay-500 animate-slow-pulse"> <p className="text-[10px] smallcaps text-clay-500 animate-slow-pulse">
AI · is · painting · the · next · moment AI · · · · · · ·
</p> </p>
<p className="font-serif italic text-clay-400 text-xs"> <p className="font-serif italic text-clay-400 text-xs">
cached choices resolve in seconds · free-form takes longer ·
</p> </p>
</div> </div>
)} )}
{phase === "ready" && intent?.targetLabel && ( {phase === "ready" && intent?.targetLabel && (
<p className="font-serif italic text-clay-500 text-base leading-relaxed animate-fade-in max-w-[320px]"> <p className="font-serif italic text-clay-500 text-base leading-relaxed animate-fade-in max-w-[320px]">
<span className="text-[9px] smallcaps not-italic text-clay-400 mr-2 align-middle"> <span className="text-[9px] smallcaps not-italic text-clay-400 mr-2 align-middle">
Last · move · · · ·
</span> </span>
<span className="align-middle">{intent.targetLabel}</span> <span className="align-middle">{intent.targetLabel}</span>
</p> </p>
)} )}
{phase === "ready" && !intent && turnNum > 0 && ( {phase === "ready" && !intent && turnNum > 0 && (
<p className="text-[10px] smallcaps text-clay-400 animate-fade-in"> <p className="text-[10px] smallcaps text-clay-400 animate-fade-in">
Click · anywhere · to · respond · · · · · ·
</p> </p>
)} )}
</div> </div>
@@ -315,7 +315,7 @@ export default function PlayPage() {
fallback={ fallback={
<div className="min-h-screen flex items-center justify-center"> <div className="min-h-screen flex items-center justify-center">
<span className="text-[10px] smallcaps text-clay-500 animate-slow-pulse"> <span className="text-[10px] smallcaps text-clay-500 animate-slow-pulse">
Loading
</span> </span>
</div> </div>
} }
+6 -6
View File
@@ -19,7 +19,7 @@ export function CustomForm() {
if (!canSubmit) return; if (!canSubmit) return;
setSubmitting(true); setSubmitting(true);
sessionStorage.setItem( sessionStorage.setItem(
"dada:custom", "yume:custom",
JSON.stringify({ worldSetting, styleGuide }), JSON.stringify({ worldSetting, styleGuide }),
); );
router.push("/play?custom=1"); router.push("/play?custom=1");
@@ -64,7 +64,7 @@ export function CustomForm() {
value={styleGuide} value={styleGuide}
onChange={(e) => setStyleGuide(e.target.value)} onChange={(e) => setStyleGuide(e.target.value)}
rows={4} rows={4}
placeholder="例:Soft watercolor, warm afternoon light, anime visual novel style, classic dialogue panel⋯" placeholder="例:水彩柔光,午后暖意,动漫视觉小说画风,传统对话面板⋯"
className="w-full bg-transparent border-0 border-b border-clay-900/20 px-0 py-3 text-clay-900 font-serif text-lg leading-[1.7] focus:outline-none focus:border-clay-700 transition-colors resize-none placeholder:font-serif placeholder:italic placeholder:text-base placeholder:leading-[1.7]" className="w-full bg-transparent border-0 border-b border-clay-900/20 px-0 py-3 text-clay-900 font-serif text-lg leading-[1.7] focus:outline-none focus:border-clay-700 transition-colors resize-none placeholder:font-serif placeholder:italic placeholder:text-base placeholder:leading-[1.7]"
/> />
</div> </div>
@@ -72,17 +72,17 @@ export function CustomForm() {
<div className="pt-6 flex items-center justify-between"> <div className="pt-6 flex items-center justify-between">
<span className="text-[10px] smallcaps text-clay-500"> <span className="text-[10px] smallcaps text-clay-500">
{submitting {submitting
? "Summoning the first frame…" ? "正在唤起第一帧…"
: canSubmit : canSubmit
? "Ready when you are" ? "准 · 备 · 就 · 绪"
: "Two paragraphs · enough to begin"} : "两 · 段 · 即 · 可 · 开 · 场"}
</span> </span>
<button <button
type="submit" type="submit"
disabled={!canSubmit} disabled={!canSubmit}
className="group flex items-center gap-3 text-[10px] smallcaps text-clay-900 disabled:text-clay-300 disabled:cursor-not-allowed enabled:hover:text-ember-500 transition-colors duration-300" className="group flex items-center gap-3 text-[10px] smallcaps text-clay-900 disabled:text-clay-300 disabled:cursor-not-allowed enabled:hover:text-ember-500 transition-colors duration-300"
> >
Begin
<span className="w-10 h-px bg-current transition-all duration-300 group-enabled:group-hover:w-16" /> <span className="w-10 h-px bg-current transition-all duration-300 group-enabled:group-hover:w-16" />
<i className="fa-solid fa-arrow-right text-[9px]" /> <i className="fa-solid fa-arrow-right text-[9px]" />
</button> </button>
+3 -3
View File
@@ -71,7 +71,7 @@ export function PlayCanvas({
width: 30, width: 30,
height: 30, height: 30,
animation: animation:
"dada-ripple 1.6s cubic-bezier(0.16,1,0.3,1) infinite", "yume-ripple 1.6s cubic-bezier(0.16,1,0.3,1) infinite",
}} }}
/> />
<div <div
@@ -100,7 +100,7 @@ export function PlayCanvas({
> >
<div className="w-1.5 h-1.5 bg-clay-500 rounded-full animate-slow-pulse" /> <div className="w-1.5 h-1.5 bg-clay-500 rounded-full animate-slow-pulse" />
<p className="text-[9px] smallcaps text-clay-500 animate-slow-pulse"> <p className="text-[9px] smallcaps text-clay-500 animate-slow-pulse">
Painting · the · first · frame · · · · · ·
</p> </p>
</div> </div>
)} )}
@@ -113,7 +113,7 @@ export function PlayCanvas({
{dims ? `${dims.w} × ${dims.h} · png` : "—"} {dims ? `${dims.w} × ${dims.h} · png` : "—"}
</span> </span>
<span className="text-[9px] smallcaps text-clay-400"> <span className="text-[9px] smallcaps text-clay-400">
{phase === "ready" ? "Tap · anywhere" : "···"} {phase === "ready" ? "任 · 意 · 点 · 击" : "···"}
</span> </span>
</div> </div>
</div> </div>
+1 -1
View File
@@ -1,4 +1,4 @@
import type { EngineConfig } from "@dada/types"; import type { EngineConfig } from "@yume/types";
function readVar(name: string): string { function readVar(name: string): string {
const v = process.env[name]; const v = process.env[name];
+1 -1
View File
@@ -4,7 +4,7 @@ import type { NextConfig } from "next";
const config: NextConfig = { const config: NextConfig = {
reactStrictMode: true, reactStrictMode: true,
typedRoutes: false, typedRoutes: false,
transpilePackages: ["@dada/engine", "@dada/ai-client", "@dada/types"], transpilePackages: ["@yume/engine", "@yume/ai-client", "@yume/types"],
serverExternalPackages: ["sharp"], serverExternalPackages: ["sharp"],
turbopack: { turbopack: {
root: path.join(__dirname, "..", ".."), root: path.join(__dirname, "..", ".."),
+4 -4
View File
@@ -1,5 +1,5 @@
{ {
"name": "@dada/web", "name": "@yume/web",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module", "type": "module",
@@ -11,9 +11,9 @@
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@dada/ai-client": "workspace:*", "@yume/ai-client": "workspace:*",
"@dada/engine": "workspace:*", "@yume/engine": "workspace:*",
"@dada/types": "workspace:*", "@yume/types": "workspace:*",
"next": "^16.0.0", "next": "^16.0.0",
"react": "^19.0.0", "react": "^19.0.0",
"react-dom": "^19.0.0", "react-dom": "^19.0.0",
+5 -5
View File
@@ -1,17 +1,17 @@
{ {
"name": "dada", "name": "yume",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"description": "AI-driven visual novel", "description": "AI 驱动的视觉小说(云梦)",
"license": "UNLICENSED", "license": "UNLICENSED",
"packageManager": "pnpm@9.12.0", "packageManager": "pnpm@9.12.0",
"engines": { "engines": {
"node": ">=20" "node": ">=20"
}, },
"scripts": { "scripts": {
"dev": "pnpm --filter @dada/web dev", "dev": "pnpm --filter @yume/web dev",
"build": "pnpm --filter @dada/web build", "build": "pnpm --filter @yume/web build",
"start": "pnpm --filter @dada/web start", "start": "pnpm --filter @yume/web start",
"lint": "pnpm -r lint", "lint": "pnpm -r lint",
"typecheck": "pnpm -r typecheck" "typecheck": "pnpm -r typecheck"
}, },
+2 -2
View File
@@ -1,5 +1,5 @@
{ {
"name": "@dada/ai-client", "name": "@yume/ai-client",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module", "type": "module",
@@ -12,6 +12,6 @@
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@dada/types": "workspace:*" "@yume/types": "workspace:*"
} }
} }
+1 -1
View File
@@ -1,4 +1,4 @@
import type { ProviderConfig } from "@dada/types"; import type { ProviderConfig } from "@yume/types";
import { fetchWithRetry } from "./fetchWithRetry"; import { fetchWithRetry } from "./fetchWithRetry";
export type ChatMessage = { export type ChatMessage = {
+1 -1
View File
@@ -1,4 +1,4 @@
import type { ProviderConfig } from "@dada/types"; import type { ProviderConfig } from "@yume/types";
import { fetchWithRetry } from "./fetchWithRetry"; import { fetchWithRetry } from "./fetchWithRetry";
type ImageUrlPart = { type: string; image_url?: { url?: string } }; type ImageUrlPart = { type: string; image_url?: { url?: string } };
+1 -1
View File
@@ -1,4 +1,4 @@
import type { ProviderConfig } from "@dada/types"; import type { ProviderConfig } from "@yume/types";
import { fetchWithRetry } from "./fetchWithRetry"; import { fetchWithRetry } from "./fetchWithRetry";
export async function interpretClick( export async function interpretClick(
+3 -3
View File
@@ -1,5 +1,5 @@
{ {
"name": "@dada/engine", "name": "@yume/engine",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module", "type": "module",
@@ -12,8 +12,8 @@
"typecheck": "tsc --noEmit" "typecheck": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {
"@dada/ai-client": "workspace:*", "@yume/ai-client": "workspace:*",
"@dada/types": "workspace:*", "@yume/types": "workspace:*",
"sharp": "^0.33.5" "sharp": "^0.33.5"
} }
} }
+2 -2
View File
@@ -1,5 +1,5 @@
import { chat } from "@dada/ai-client"; import { chat } from "@yume/ai-client";
import type { ProviderConfig, Session, StoryFrame, UIElement } from "@dada/types"; import type { ProviderConfig, Session, StoryFrame, UIElement } from "@yume/types";
import { parseJsonLoose } from "./jsonParser"; import { parseJsonLoose } from "./jsonParser";
import { DIRECTOR_SYSTEM, buildDirectorUserMessage } from "./prompts"; import { DIRECTOR_SYSTEM, buildDirectorUserMessage } from "./prompts";
+1 -1
View File
@@ -8,7 +8,7 @@ import type {
StartResponse, StartResponse,
VisionRequest, VisionRequest,
VisionResponse, VisionResponse,
} from "@dada/types"; } from "@yume/types";
import { annotateClick } from "./annotate"; import { annotateClick } from "./annotate";
import { direct } from "./director"; import { direct } from "./director";
import { render } from "./renderer"; import { render } from "./renderer";
+1 -1
View File
@@ -1,4 +1,4 @@
import type { Session, StoryFrame, UIElement } from "@dada/types"; import type { Session, StoryFrame, UIElement } from "@yume/types";
export const DIRECTOR_SYSTEM = `你是一个交互视觉小说的编剧导演。每次根据世界观、画风和历史,输出当前画面要呈现的内容。 export const DIRECTOR_SYSTEM = `你是一个交互视觉小说的编剧导演。每次根据世界观、画风和历史,输出当前画面要呈现的内容。
+2 -2
View File
@@ -1,5 +1,5 @@
import { generateImage } from "@dada/ai-client"; import { generateImage } from "@yume/ai-client";
import type { ProviderConfig, StoryFrame } from "@dada/types"; import type { ProviderConfig, StoryFrame } from "@yume/types";
import { buildImagePrompt } from "./prompts"; import { buildImagePrompt } from "./prompts";
export async function render( export async function render(
+2 -2
View File
@@ -1,5 +1,5 @@
import { interpretClick } from "@dada/ai-client"; import { interpretClick } from "@yume/ai-client";
import type { ClickIntent, ProviderConfig, UIElement } from "@dada/types"; import type { ClickIntent, ProviderConfig, UIElement } from "@yume/types";
import { parseJsonLoose } from "./jsonParser"; import { parseJsonLoose } from "./jsonParser";
import { VISION_SYSTEM_PROMPT, buildVisionUserPrompt } from "./prompts"; import { VISION_SYSTEM_PROMPT, buildVisionUserPrompt } from "./prompts";
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"name": "@dada/types", "name": "@yume/types",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"type": "module", "type": "module",
+62 -93
View File
@@ -14,13 +14,13 @@ importers:
apps/web: apps/web:
dependencies: dependencies:
'@dada/ai-client': '@yume/ai-client':
specifier: workspace:* specifier: workspace:*
version: link:../../packages/ai-client version: link:../../packages/ai-client
'@dada/engine': '@yume/engine':
specifier: workspace:* specifier: workspace:*
version: link:../../packages/engine version: link:../../packages/engine
'@dada/types': '@yume/types':
specifier: workspace:* specifier: workspace:*
version: link:../../packages/types version: link:../../packages/types
next: next:
@@ -38,19 +38,19 @@ importers:
devDependencies: devDependencies:
'@types/node': '@types/node':
specifier: ^22.9.0 specifier: ^22.9.0
version: 22.19.18 version: 22.19.19
'@types/react': '@types/react':
specifier: ^19.0.0 specifier: ^19.0.0
version: 19.2.14 version: 19.2.15
'@types/react-dom': '@types/react-dom':
specifier: ^19.0.0 specifier: ^19.0.0
version: 19.2.3(@types/react@19.2.14) version: 19.2.3(@types/react@19.2.15)
autoprefixer: autoprefixer:
specifier: ^10.4.20 specifier: ^10.4.20
version: 10.5.0(postcss@8.5.14) version: 10.5.0(postcss@8.5.15)
postcss: postcss:
specifier: ^8.4.49 specifier: ^8.4.49
version: 8.5.14 version: 8.5.15
tailwindcss: tailwindcss:
specifier: ^3.4.15 specifier: ^3.4.15
version: 3.4.19 version: 3.4.19
@@ -60,16 +60,16 @@ importers:
packages/ai-client: packages/ai-client:
dependencies: dependencies:
'@dada/types': '@yume/types':
specifier: workspace:* specifier: workspace:*
version: link:../types version: link:../types
packages/engine: packages/engine:
dependencies: dependencies:
'@dada/ai-client': '@yume/ai-client':
specifier: workspace:* specifier: workspace:*
version: link:../ai-client version: link:../ai-client
'@dada/types': '@yume/types':
specifier: workspace:* specifier: workspace:*
version: link:../types version: link:../types
sharp: sharp:
@@ -139,183 +139,155 @@ packages:
resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm64@1.2.4': '@img/sharp-libvips-linux-arm64@1.2.4':
resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm@1.0.5': '@img/sharp-libvips-linux-arm@1.0.5':
resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-arm@1.2.4': '@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.2.4': '@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-riscv64@1.2.4': '@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.0.4': '@img/sharp-libvips-linux-s390x@1.0.4':
resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.2.4': '@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-x64@1.0.4': '@img/sharp-libvips-linux-x64@1.0.4':
resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linux-x64@1.2.4': '@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.0.4': '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-arm64@1.2.4': '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.0.4': '@img/sharp-libvips-linuxmusl-x64@1.0.4':
resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.2.4': '@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-linux-arm64@0.33.5': '@img/sharp-linux-arm64@0.33.5':
resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-arm64@0.34.5': '@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-arm@0.33.5': '@img/sharp-linux-arm@0.33.5':
resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-arm@0.34.5': '@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-ppc64@0.34.5': '@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-riscv64@0.34.5': '@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-s390x@0.33.5': '@img/sharp-linux-s390x@0.33.5':
resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-s390x@0.34.5': '@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-x64@0.33.5': '@img/sharp-linux-x64@0.33.5':
resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linux-x64@0.34.5': '@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.33.5': '@img/sharp-linuxmusl-arm64@0.33.5':
resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-arm64@0.34.5': '@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-x64@0.33.5': '@img/sharp-linuxmusl-x64@0.33.5':
resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-linuxmusl-x64@0.34.5': '@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@img/sharp-wasm32@0.33.5': '@img/sharp-wasm32@0.33.5':
resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
@@ -390,28 +362,24 @@ packages:
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [glibc]
'@next/swc-linux-arm64-musl@16.2.6': '@next/swc-linux-arm64-musl@16.2.6':
resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==} resolution: {integrity: sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
libc: [musl]
'@next/swc-linux-x64-gnu@16.2.6': '@next/swc-linux-x64-gnu@16.2.6':
resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==} resolution: {integrity: sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [glibc]
'@next/swc-linux-x64-musl@16.2.6': '@next/swc-linux-x64-musl@16.2.6':
resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==} resolution: {integrity: sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
libc: [musl]
'@next/swc-win32-arm64-msvc@16.2.6': '@next/swc-win32-arm64-msvc@16.2.6':
resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==} resolution: {integrity: sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg==}
@@ -440,16 +408,16 @@ packages:
'@swc/helpers@0.5.15': '@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@types/node@22.19.18': '@types/node@22.19.19':
resolution: {integrity: sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ==} resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==}
'@types/react-dom@19.2.3': '@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==} resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies: peerDependencies:
'@types/react': ^19.2.0 '@types/react': ^19.2.0
'@types/react@19.2.14': '@types/react@19.2.15':
resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} resolution: {integrity: sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==}
any-promise@1.3.0: any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -468,8 +436,8 @@ packages:
peerDependencies: peerDependencies:
postcss: ^8.1.0 postcss: ^8.1.0
baseline-browser-mapping@2.10.28: baseline-browser-mapping@2.10.32:
resolution: {integrity: sha512-Ic44hnOtFIgravCunj1ifSoQPSUrkNiJuH9Mf6jr2jjoA74icqV8wU0KuadXeOR8zuIJMOoTv0GuQjZ9ZYNMeA==} resolution: {integrity: sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
hasBin: true hasBin: true
@@ -490,8 +458,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
caniuse-lite@1.0.30001792: caniuse-lite@1.0.30001793:
resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==}
chokidar@3.6.0: chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -536,8 +504,8 @@ packages:
dlv@1.1.3: dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
electron-to-chromium@1.5.353: electron-to-chromium@1.5.361:
resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} resolution: {integrity: sha512-Q6Hts7N9FnJc5LeGRINFvLhCI9xZmNtTDe5ZbcVezQz7cU4a8Aua3GH1b8J2XY8Al9PF+OCwYqhgsOOheMdvkA==}
es-errors@1.3.0: es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
@@ -661,8 +629,9 @@ packages:
sass: sass:
optional: true optional: true
node-releases@2.0.38: node-releases@2.0.46:
resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} resolution: {integrity: sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==}
engines: {node: '>=18'}
normalize-path@3.0.0: normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@@ -745,8 +714,8 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
postcss@8.5.14: postcss@8.5.15:
resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14} engines: {node: ^10 || ^12 || >=14}
queue-microtask@1.2.3: queue-microtask@1.2.3:
@@ -783,8 +752,8 @@ packages:
scheduler@0.27.0: scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
semver@7.8.0: semver@7.8.1:
resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==}
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true hasBin: true
@@ -1105,15 +1074,15 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@types/node@22.19.18': '@types/node@22.19.19':
dependencies: dependencies:
undici-types: 6.21.0 undici-types: 6.21.0
'@types/react-dom@19.2.3(@types/react@19.2.14)': '@types/react-dom@19.2.3(@types/react@19.2.15)':
dependencies: dependencies:
'@types/react': 19.2.14 '@types/react': 19.2.15
'@types/react@19.2.14': '@types/react@19.2.15':
dependencies: dependencies:
csstype: 3.2.3 csstype: 3.2.3
@@ -1126,16 +1095,16 @@ snapshots:
arg@5.0.2: {} arg@5.0.2: {}
autoprefixer@10.5.0(postcss@8.5.14): autoprefixer@10.5.0(postcss@8.5.15):
dependencies: dependencies:
browserslist: 4.28.2 browserslist: 4.28.2
caniuse-lite: 1.0.30001792 caniuse-lite: 1.0.30001793
fraction.js: 5.3.4 fraction.js: 5.3.4
picocolors: 1.1.1 picocolors: 1.1.1
postcss: 8.5.14 postcss: 8.5.15
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
baseline-browser-mapping@2.10.28: {} baseline-browser-mapping@2.10.32: {}
binary-extensions@2.3.0: {} binary-extensions@2.3.0: {}
@@ -1145,15 +1114,15 @@ snapshots:
browserslist@4.28.2: browserslist@4.28.2:
dependencies: dependencies:
baseline-browser-mapping: 2.10.28 baseline-browser-mapping: 2.10.32
caniuse-lite: 1.0.30001792 caniuse-lite: 1.0.30001793
electron-to-chromium: 1.5.353 electron-to-chromium: 1.5.361
node-releases: 2.0.38 node-releases: 2.0.46
update-browserslist-db: 1.2.3(browserslist@4.28.2) update-browserslist-db: 1.2.3(browserslist@4.28.2)
camelcase-css@2.0.1: {} camelcase-css@2.0.1: {}
caniuse-lite@1.0.30001792: {} caniuse-lite@1.0.30001793: {}
chokidar@3.6.0: chokidar@3.6.0:
dependencies: dependencies:
@@ -1197,7 +1166,7 @@ snapshots:
dlv@1.1.3: {} dlv@1.1.3: {}
electron-to-chromium@1.5.353: {} electron-to-chromium@1.5.361: {}
es-errors@1.3.0: {} es-errors@1.3.0: {}
@@ -1285,8 +1254,8 @@ snapshots:
dependencies: dependencies:
'@next/env': 16.2.6 '@next/env': 16.2.6
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
baseline-browser-mapping: 2.10.28 baseline-browser-mapping: 2.10.32
caniuse-lite: 1.0.30001792 caniuse-lite: 1.0.30001793
postcss: 8.4.31 postcss: 8.4.31
react: 19.2.6 react: 19.2.6
react-dom: 19.2.6(react@19.2.6) react-dom: 19.2.6(react@19.2.6)
@@ -1305,7 +1274,7 @@ snapshots:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros
node-releases@2.0.38: {} node-releases@2.0.46: {}
normalize-path@3.0.0: {} normalize-path@3.0.0: {}
@@ -1325,28 +1294,28 @@ snapshots:
pirates@4.0.7: {} pirates@4.0.7: {}
postcss-import@15.1.0(postcss@8.5.14): postcss-import@15.1.0(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.14 postcss: 8.5.15
postcss-value-parser: 4.2.0 postcss-value-parser: 4.2.0
read-cache: 1.0.0 read-cache: 1.0.0
resolve: 1.22.12 resolve: 1.22.12
postcss-js@4.1.0(postcss@8.5.14): postcss-js@4.1.0(postcss@8.5.15):
dependencies: dependencies:
camelcase-css: 2.0.1 camelcase-css: 2.0.1
postcss: 8.5.14 postcss: 8.5.15
postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.14): postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.15):
dependencies: dependencies:
lilconfig: 3.1.3 lilconfig: 3.1.3
optionalDependencies: optionalDependencies:
jiti: 1.21.7 jiti: 1.21.7
postcss: 8.5.14 postcss: 8.5.15
postcss-nested@6.2.0(postcss@8.5.14): postcss-nested@6.2.0(postcss@8.5.15):
dependencies: dependencies:
postcss: 8.5.14 postcss: 8.5.15
postcss-selector-parser: 6.1.2 postcss-selector-parser: 6.1.2
postcss-selector-parser@6.1.2: postcss-selector-parser@6.1.2:
@@ -1362,7 +1331,7 @@ snapshots:
picocolors: 1.1.1 picocolors: 1.1.1
source-map-js: 1.2.1 source-map-js: 1.2.1
postcss@8.5.14: postcss@8.5.15:
dependencies: dependencies:
nanoid: 3.3.12 nanoid: 3.3.12
picocolors: 1.1.1 picocolors: 1.1.1
@@ -1400,13 +1369,13 @@ snapshots:
scheduler@0.27.0: {} scheduler@0.27.0: {}
semver@7.8.0: {} semver@7.8.1: {}
sharp@0.33.5: sharp@0.33.5:
dependencies: dependencies:
color: 4.2.3 color: 4.2.3
detect-libc: 2.1.2 detect-libc: 2.1.2
semver: 7.8.0 semver: 7.8.1
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-arm64': 0.33.5
'@img/sharp-darwin-x64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5
@@ -1432,7 +1401,7 @@ snapshots:
dependencies: dependencies:
'@img/colour': 1.1.0 '@img/colour': 1.1.0
detect-libc: 2.1.2 detect-libc: 2.1.2
semver: 7.8.0 semver: 7.8.1
optionalDependencies: optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.5 '@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.5 '@img/sharp-darwin-x64': 0.34.5
@@ -1499,11 +1468,11 @@ snapshots:
normalize-path: 3.0.0 normalize-path: 3.0.0
object-hash: 3.0.0 object-hash: 3.0.0
picocolors: 1.1.1 picocolors: 1.1.1
postcss: 8.5.14 postcss: 8.5.15
postcss-import: 15.1.0(postcss@8.5.14) postcss-import: 15.1.0(postcss@8.5.15)
postcss-js: 4.1.0(postcss@8.5.14) postcss-js: 4.1.0(postcss@8.5.15)
postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.14) postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.15)
postcss-nested: 6.2.0(postcss@8.5.14) postcss-nested: 6.2.0(postcss@8.5.15)
postcss-selector-parser: 6.1.2 postcss-selector-parser: 6.1.2
resolve: 1.22.12 resolve: 1.22.12
sucrase: 3.35.1 sucrase: 3.35.1