From 9aa448412950cf9048d5e7e5a54c92916c94f6bf Mon Sep 17 00:00:00 2001 From: karyamanswasta Date: Sun, 10 Aug 2025 01:18:32 +0700 Subject: [PATCH] feat(auth,docs): add AGENTS guidelines, consistency kit, particle background, solid card, logo swap, header toggles, signup password rules, and phone input border fix --- .editorconfig | 10 + .github/ISSUE_TEMPLATE/ai-task.yml | 50 + .github/PULL_REQUEST_TEMPLATE.md | 19 + AGENTS.md | 42 + ...react_app_skeleton_dashboard_pages_api.jsx | 717 +++ docs/AGENT_CONTEXT.md | 35 + docs/GEMINI.md | 241 + hello.md | 1 - kediritechnopark-app/.gitignore | 24 + kediritechnopark-app/README.md | 12 + kediritechnopark-app/eslint.config.js | 29 + kediritechnopark-app/index.html | 13 + kediritechnopark-app/package-lock.json | 4186 +++++++++++++++++ kediritechnopark-app/package.json | 35 + kediritechnopark-app/postcss.config.js | 7 + kediritechnopark-app/public/vite.svg | 1 + .../assets/kediri-technopark-logo-white.webp | Bin 0 -> 109286 bytes .../src/assets/kediri-technopark-logo.webp | Bin 0 -> 150680 bytes .../src/components/Auth/ForgotForm.tsx | 103 + .../src/components/Auth/LoginForm.tsx | 151 + .../src/components/Auth/PasswordMeter.tsx | 41 + .../src/components/Auth/SignupForm.tsx | 172 + .../src/components/Auth/VerifyForm.tsx | 68 + .../components/Background/TechParticles.tsx | 213 + .../src/components/UI/AnimatedAlerts.tsx | 35 + .../src/components/UI/Field.tsx | 38 + .../components/UI/TechLinkedParticlesBG.jsx | 115 + kediritechnopark-app/src/config/constants.js | 2 + kediritechnopark-app/src/config/i18n.js | 92 + kediritechnopark-app/src/config/theme.js | 26 + kediritechnopark-app/src/index.css | 54 + kediritechnopark-app/src/lib/api.ts | 22 + kediritechnopark-app/src/lib/cn.ts | 4 + kediritechnopark-app/src/lib/utils.ts | 22 + kediritechnopark-app/src/main.tsx | 10 + kediritechnopark-app/src/pages/AuthPage.tsx | 403 ++ kediritechnopark-app/tailwind.config.js | 26 + kediritechnopark-app/tsconfig.json | 22 + kediritechnopark-app/vite.config.js | 7 + qwen.md | 241 + 40 files changed, 7288 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .github/ISSUE_TEMPLATE/ai-task.yml create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 AGENTS.md create mode 100644 bookoomoo-app/bookoomoo_react_app_skeleton_dashboard_pages_api.jsx create mode 100644 docs/AGENT_CONTEXT.md create mode 100644 docs/GEMINI.md delete mode 100644 hello.md create mode 100644 kediritechnopark-app/.gitignore create mode 100644 kediritechnopark-app/README.md create mode 100644 kediritechnopark-app/eslint.config.js create mode 100644 kediritechnopark-app/index.html create mode 100644 kediritechnopark-app/package-lock.json create mode 100644 kediritechnopark-app/package.json create mode 100644 kediritechnopark-app/postcss.config.js create mode 100644 kediritechnopark-app/public/vite.svg create mode 100755 kediritechnopark-app/src/assets/kediri-technopark-logo-white.webp create mode 100755 kediritechnopark-app/src/assets/kediri-technopark-logo.webp create mode 100644 kediritechnopark-app/src/components/Auth/ForgotForm.tsx create mode 100644 kediritechnopark-app/src/components/Auth/LoginForm.tsx create mode 100644 kediritechnopark-app/src/components/Auth/PasswordMeter.tsx create mode 100644 kediritechnopark-app/src/components/Auth/SignupForm.tsx create mode 100644 kediritechnopark-app/src/components/Auth/VerifyForm.tsx create mode 100644 kediritechnopark-app/src/components/Background/TechParticles.tsx create mode 100644 kediritechnopark-app/src/components/UI/AnimatedAlerts.tsx create mode 100644 kediritechnopark-app/src/components/UI/Field.tsx create mode 100644 kediritechnopark-app/src/components/UI/TechLinkedParticlesBG.jsx create mode 100644 kediritechnopark-app/src/config/constants.js create mode 100644 kediritechnopark-app/src/config/i18n.js create mode 100644 kediritechnopark-app/src/config/theme.js create mode 100644 kediritechnopark-app/src/index.css create mode 100644 kediritechnopark-app/src/lib/api.ts create mode 100644 kediritechnopark-app/src/lib/cn.ts create mode 100644 kediritechnopark-app/src/lib/utils.ts create mode 100644 kediritechnopark-app/src/main.tsx create mode 100644 kediritechnopark-app/src/pages/AuthPage.tsx create mode 100644 kediritechnopark-app/tailwind.config.js create mode 100644 kediritechnopark-app/tsconfig.json create mode 100644 kediritechnopark-app/vite.config.js create mode 100644 qwen.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..842ce7b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + diff --git a/.github/ISSUE_TEMPLATE/ai-task.yml b/.github/ISSUE_TEMPLATE/ai-task.yml new file mode 100644 index 0000000..3b09eff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/ai-task.yml @@ -0,0 +1,50 @@ +name: AI Task +description: Brief for the coding agent to implement features consistently +title: "[AI] " +labels: [ai-task] +body: + - type: input + id: project_path + attributes: + label: Project path + description: Path of the target app (e.g., kediritechnopark-app) + placeholder: kediritechnopark-app + validations: + required: true + - type: textarea + id: objective + attributes: + label: Objective + description: What to build and why + placeholder: e.g., Build pricing card with tiers and CTA + validations: + required: true + - type: textarea + id: requirements + attributes: + label: Requirements + description: States, a11y, tests, performance, theming, i18n + validations: + required: true + - type: textarea + id: deliverables + attributes: + label: Deliverables + description: Files and paths to create or modify + placeholder: | + src/components/PricingCard/PricingCard.tsx + src/components/PricingCard/types.ts + src/components/PricingCard/PricingCard.test.tsx + validations: + required: true + - type: textarea + id: constraints + attributes: + label: Constraints + description: Perf budget, API contracts, dependency limits + - type: textarea + id: acceptance + attributes: + label: Definition of Done + description: Validation criteria (build/lint/tests pass, coverage, screenshots) + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..8f4c107 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,19 @@ +## Summary +Closes # + +## Scope +- What/why in 1–2 sentences +- Affected areas (files, routes, components) + +## Screenshots / Videos +If UI changed, include before/after and dark mode. + +## Checklist +- [ ] Build OK +- [ ] Lint OK +- [ ] Tests added/updated and passing +- [ ] A11y checked (labels, roles, keyboard, focus) +- [ ] Handles states (loading/empty/error) +- [ ] Dark mode verified +- [ ] Docs updated (AGENTS.md or component README where relevant) + diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..26c69a3 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,42 @@ +# Repository Guidelines + +## Project Structure & Module Organization +- Monorepo with multiple Vite apps at the root (e.g., `kediritechnopark-app/`, `adventure-rental-app/`, `motel-app/`). +- Each app is self‑contained: `src/` (code), `public/` (static), `index.html`, `tailwind.config.js`, `vite.config.ts|js`. +- Inside `src/`: prefer `components/`, `pages/`, `hooks/`, `lib/`, `assets/`, `styles/`. Shared code should be copied per app unless a dedicated shared package exists. + +## Build, Test, and Development Commands +Run these from the target app directory: +- `npm install`: install dependencies. +- `npm run dev`: start Vite dev server. +- `npm run build`: production build. +- `npm run preview`: preview build locally. +- `npm run lint` / `npm run format`: lint and format (if configured). +- `npm test`: run unit tests (Vitest) when present. + +## Coding Style & Naming Conventions +- Language: TypeScript, React function components; 2‑space indent. +- Files: components `PascalCase.tsx`, hooks `useThing.ts`, utilities `camelCase.ts`, test files `*.test.ts(x)`. +- Styling: Tailwind CSS utilities; theme via CSS variables; avoid inline styles except for dynamic values. +- Tools: ESLint (TypeScript/React), Prettier. Fix issues before committing. + +## Testing Guidelines +- Frameworks: Vitest + @testing-library/react for unit/integration; Playwright optional for e2e. +- Location: co‑locate as `Component.test.tsx` next to the file or under `src/__tests__/`. +- Coverage: target ≥80% statements/branches on changed code. +- Commands: `npm test` for watch, `npm test -- --coverage` for reports. + +## Commit & Pull Request Guidelines +- Use Conventional Commits: `feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, etc. Example: `feat(cards): add skeleton and a11y labels`. +- PRs: include a clear description, linked issues (e.g., `Closes #123`), screenshots for UI changes, and test notes. +- CI passes required: build, lint, tests. Keep PRs small and focused. + +## Security & Configuration Tips +- Never commit secrets. Use per‑app `.env.local` with Vite `VITE_` prefixes (e.g., `VITE_API_URL`). +- Update dependencies responsibly; prefer minor/patch bumps unless necessary. +- Follow a11y best practices (labels, roles, keyboard support) and avoid introducing regressions. + +## Agent-Specific Instructions +- Read `docs/AGENT_CONTEXT.md` for the full context (identity, objectives, stack, output contract). +- Create work items using the GitHub “AI Task” issue template. +- Ensure PRs meet the checklist in `.github/PULL_REQUEST_TEMPLATE.md`. diff --git a/bookoomoo-app/bookoomoo_react_app_skeleton_dashboard_pages_api.jsx b/bookoomoo-app/bookoomoo_react_app_skeleton_dashboard_pages_api.jsx new file mode 100644 index 0000000..5131da8 --- /dev/null +++ b/bookoomoo-app/bookoomoo_react_app_skeleton_dashboard_pages_api.jsx @@ -0,0 +1,717 @@ +// ============================= +// Vite + React + Tailwind App +// Dashboard functional + pages wired to n8n +// Files are concatenated here. When implementing, split into the paths shown. +// ============================= + +// ------------------------------------------ +// File: src/main.jsx +// ------------------------------------------ +import React from 'react' +import ReactDOM from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import App from './App' +import './index.css' +import { AuthProvider } from './lib/auth' + +ReactDOM.createRoot(document.getElementById('root')).render( + + + + + + + +) + +// ------------------------------------------ +// File: src/App.jsx +// ------------------------------------------ +import React from 'react' +import { Routes, Route, Navigate } from 'react-router-dom' +import Layout from './components/Layout' +import DashboardPage from './pages/DashboardPage' +import CreateStoryPage from './pages/CreateStoryPage' +import UploadPage from './pages/UploadPage' +import DownloadsPage from './pages/DownloadsPage' +import PrintCheckoutPage from './pages/PrintCheckoutPage' +import OrdersPage from './pages/OrdersPage' +import StoriesPage from './pages/StoriesPage' +import DonationsPage from './pages/DonationsPage' +import TopUpPage from './pages/TopUpPage' +import LoginPage from './pages/LoginPage' +import { useAuth } from './lib/auth' + +function ProtectedRoute({ children }) { + const { user } = useAuth() + if (!user) return + return children +} + +export default function App(){ + return ( + + } /> + + + + } + > + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + } /> + + ) +} + +// ------------------------------------------ +// File: src/lib/auth.jsx (very simple client auth state) +// ------------------------------------------ +import React, { createContext, useContext, useEffect, useState } from 'react' + +const AuthCtx = createContext(null) + +export function AuthProvider({ children }){ + const [user, setUser] = useState(null) + useEffect(()=>{ + const saved = localStorage.getItem('bookoomoo:user') + if(saved) setUser(JSON.parse(saved)) + },[]) + const login = (payload)=>{ setUser(payload); localStorage.setItem('bookoomoo:user', JSON.stringify(payload)) } + const logout = ()=>{ setUser(null); localStorage.removeItem('bookoomoo:user') } + return {children} +} +export function useAuth(){ return useContext(AuthCtx) } + +// ------------------------------------------ +// File: src/lib/api.js (n8n endpoints wrapper) +// ------------------------------------------ +export const API = { + // Set your n8n base here (domain/webhook path). For local dev, use proxy. + BASE_URL: import.meta.env.VITE_N8N_BASE_URL || 'http://localhost:5678', + + async get(path){ + const res = await fetch(`${this.BASE_URL}${path}`) + if(!res.ok) throw new Error('Request failed') + return res.json() + }, + async post(path, body){ + const res = await fetch(`${this.BASE_URL}${path}`,{ method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify(body) }) + if(!res.ok) throw new Error('Request failed') + return res.json() + }, + + // ---- Bookoomoo specific (align with PRD) ---- + me(){ return this.get('/webhook/user/me') }, + dashboard(){ return this.get('/webhook/dashboard/summary') }, + listStories(){ return this.get('/webhook/stories/list') }, + listOrders(){ return this.get('/webhook/orders/list') }, + listDonations(){ return this.get('/webhook/donations/list') }, + topupToken(data){ return this.post('/webhook/token/topup', data) }, + + // Story flow + genStory(payload){ return this.post('/webhook/story/generate', payload) }, + genPDF(payload){ return this.post('/webhook/pdf/generate', payload) }, + createPrintOrder(payload){ return this.post('/webhook/print/order', payload) }, +} + +// ------------------------------------------ +// File: src/components/Layout.jsx +// ------------------------------------------ +import React from 'react' +import { Outlet, Link, useNavigate } from 'react-router-dom' +import { BookOpen, Gift, Home, LogOut, Printer, Search, Upload, Wallet, Download, PlusCircle } from 'lucide-react' +import { useAuth } from '../lib/auth' + +function Shell(){ + const { logout } = useAuth() + const nav = useNavigate() + return ( +
+
+
+ +
📚
+
Bookoomoo
+ +
+ + +
+ +
+
+ + + +
+ +
+ +
© {new Date().getFullYear()} Bookoomoo — Be Different, Be You.
+
+ ) +} + +export default function Layout(){ + return +} + +// ------------------------------------------ +// File: src/components/StatusBadge.jsx +// ------------------------------------------ +import React from 'react' +export default function StatusBadge({ status }){ + const map = { + Draft: 'bg-neutral-100 text-neutral-700', + 'PDF Ready': 'bg-blue-100 text-blue-700', + Printed: 'bg-emerald-100 text-emerald-700', + Completed: 'bg-emerald-100 text-emerald-700', + 'In Production': 'bg-amber-100 text-amber-700', + Delivered: 'bg-purple-100 text-purple-700', + } + const cls = map[status] || 'bg-neutral-100 text-neutral-700' + return {status} +} + +// ------------------------------------------ +// File: src/pages/DashboardPage.jsx +// (Fetches real data from n8n) +// ------------------------------------------ +import React, { useEffect, useState } from 'react' +import StatusBadge from '../components/StatusBadge' +import { API } from '../lib/api' +import { ArrowRight, BookOpen, Gift, Printer, RefreshCw, Wallet, Download, PlusCircle, Upload } from 'lucide-react' + +function Card({ children }){ return
{children}
} +function Panel({ title, actionLabel, actionHref, right, children }){ + return ( +
+
+

{title}

+
+ {right || null} + {actionLabel && actionHref && ( + {actionLabel} + )} +
+
+ {children} +
+ ) +} +function QuickAction({ icon, title, desc, href='#' }){ + return ( + +
+
{icon}
+
+
{title}
+
{desc}
+
+
+
+ ) +} + +export default function DashboardPage(){ + const [loading, setLoading] = useState(true) + const [summary, setSummary] = useState({ user:{name:'—', tokenBalance:0}, stories:[], orders:[], donations:[] }) + + async function load(){ + setLoading(true) + try{ + const data = await API.dashboard() + setSummary(data) + } finally { setLoading(false) } + } + + useEffect(()=>{ load() },[]) + const { user, stories, orders, donations } = summary + + return ( +
+
+
+

{user?.name || 'Halo, Pengguna'}

+

Buat buku cerita personal, unduh PDF, atau cetak fisik dengan program Buy 1 Donate 1.

+
+ +
+ +
+ +
Saldo Token
+
{user?.tokenBalance ?? 0}
+
1 Token = 1x Generate PDF
+
+ +
Cerita Selesai
+
{stories?.length ?? 0}
+
Total semua waktu
+
+ +
Order Cetak Aktif
+
{orders?.filter(o=>o.status!=='Completed').length ?? 0}
+
Sedang diproses
+
+ +
Donasi Tersalurkan
+
{donations?.length ?? 0}
+
Buy 1 Donate 1
+
+
+ +
+ } title="Buat Cerita" desc="Masukkan nama anak & pilih tema" href="/create"/> + } title="Upload Foto" desc="Opsional untuk personalisasi" href="/upload"/> + } title="Unduh PDF" desc="Gunakan token kamu" href="/downloads"/> + } title="Cetak Fisik" desc="Buy 1 Donate 1" href="/print"/> +
+ +
+
+ +
    {(stories||[]).slice(0,5).map((s)=>( +
  • +
    +
    +
    {s.title}
    +
    {s.lang} • {s.theme} • {s.createdAt}
    +
    + + Buka +
  • ))} +
+
+
+
+ +
    {(orders||[]).slice(0,5).map((o)=>( +
  • +
    +
    +
    {o.type}
    +
    {o.serial} • {o.createdAt}
    +
    + +
  • ))} +
+
+ +
    {(donations||[]).slice(0,5).map((d)=>( +
  • +
    +
    +
    {d.recipient}
    +
    {d.serial} • Update {d.updatedAt}
    +
    + +
  • ))} +
+
+
+
+ +
+
+ +
    +
  • Gunakan token untuk mengunduh PDF. Top up kapan saja lewat menu Top Up Token.
  • +
  • Untuk cetak fisik, pastikan alamat lengkap dan nomor telepon aktif.
  • +
  • Tracking donasi tersedia melalui QR di halaman buku donasi.
  • +
+
+
+
+ Muat Ulang Data}> +
Status layanan n8n & storage tampak normal. Jika ada kendala, klik tombol untuk menyegarkan data.
+
+
+
+
+ ) +} + +// ------------------------------------------ +// File: src/pages/CreateStoryPage.jsx +// ------------------------------------------ +import React, { useState } from 'react' +import { API } from '../lib/api' + +export default function CreateStoryPage(){ + const [form, setForm] = useState({ childName:'', theme:'Adventure', lang:'ID/EN', illustration:'Auto' }) + const [result, setResult] = useState(null) + const [loading, setLoading] = useState(false) + + async function submit(e){ + e.preventDefault(); setLoading(true); setResult(null) + try{ + const story = await API.genStory(form) + setResult(story) + } finally { setLoading(false) } + } + async function toPDF(){ + setLoading(true) + try{ + const pdf = await API.genPDF({ storyId: result.storyId }) + setResult(prev=>({...prev, pdf})) + } finally { setLoading(false) } + } + + return ( +
+

Buat Cerita

+
+
+ + setForm({...form, childName:e.target.value})} className="mt-1 w-full rounded-xl border bg-white px-3 py-2" required/> +
+
+
+ + +
+
+ + +
+
+
+ + +
+ +
+ + {result && ( +
+
{result.title}
+
{JSON.stringify(result.content_json, null, 2)}
+
+ + {result.pdf?.pdfUrl && Buka PDF} +
+
+ )} +
+ ) +} + +// ------------------------------------------ +// File: src/pages/UploadPage.jsx +// ------------------------------------------ +import React, { useState } from 'react' + +export default function UploadPage(){ + const [file, setFile] = useState(null) + function submit(e){ e.preventDefault(); alert('Upload via Signed URL n8n (implement nanti)') } + return ( +
+

Upload Foto (Opsional)

+
+ setFile(e.target.files?.[0])} className="w-full rounded-xl border bg-white px-3 py-2"/> + +
+ {file &&

File dipilih: {file.name}

} +
+ ) +} + +// ------------------------------------------ +// File: src/pages/DownloadsPage.jsx +// ------------------------------------------ +import React, { useEffect, useState } from 'react' +import { API } from '../lib/api' + +export default function DownloadsPage(){ + const [stories, setStories] = useState([]) + useEffect(()=>{ API.listStories().then(r=>setStories(r)) },[]) + return ( +
+

Unduh PDF

+ + + + {stories.map(s=> ( + + + + + + + ))} + +
JudulSerialStatusAksi
{s.title}{s.serial || '—'}{s.status} + {s.pdfUrl ? ( + Download + ) : ( + + )} +
+
+ ) +} + +// ------------------------------------------ +// File: src/pages/PrintCheckoutPage.jsx +// ------------------------------------------ +import React, { useState } from 'react' +import { API } from '../lib/api' + +export default function PrintCheckoutPage(){ + const [form, setForm] = useState({ storyId:'', name:'', phone:'', address:'', donateRecipient:'' }) + const [result, setResult] = useState(null) + + async function submit(e){ + e.preventDefault(); + const r = await API.createPrintOrder(form) + setResult(r) + } + + return ( +
+

Cetak Fisik — Buy 1 Donate 1

+
+
+ + setForm({...form, storyId:e.target.value})} className="mt-1 w-full rounded-xl border bg-white px-3 py-2" required/> +
+
+
+ + setForm({...form, name:e.target.value})} className="mt-1 w-full rounded-xl border bg-white px-3 py-2" required/> +
+
+ + setForm({...form, phone:e.target.value})} className="mt-1 w-full rounded-xl border bg-white px-3 py-2" required/> +
+
+
+ + +
+
+ + setForm({...form, donateRecipient:e.target.value})} className="mt-1 w-full rounded-xl border bg-white px-3 py-2"/> +
+ +
+ {result && ( +
+
Order ID: {result.orderId}
+
Serial Pembeli: {result.serial_1}
+
Serial Donasi: {result.serial_2}
+
Status: {result.status}
+
+ )} +
+ ) +} + +// ------------------------------------------ +// File: src/pages/OrdersPage.jsx +// ------------------------------------------ +import React, { useEffect, useState } from 'react' +import { API } from '../lib/api' +import StatusBadge from '../components/StatusBadge' + +export default function OrdersPage(){ + const [orders, setOrders] = useState([]) + useEffect(()=>{ API.listOrders().then(setOrders) },[]) + return ( +
+

Riwayat Order

+ + + + {orders.map(o=> ( + + + + + + + ))} + +
SerialJenisStatusTanggal
{o.serial}{o.type}{o.createdAt}
+
+ ) +} + +// ------------------------------------------ +// File: src/pages/StoriesPage.jsx +// ------------------------------------------ +import React, { useEffect, useState } from 'react' +import { API } from '../lib/api' +import StatusBadge from '../components/StatusBadge' + +export default function StoriesPage(){ + const [stories, setStories] = useState([]) + useEffect(()=>{ API.listStories().then(setStories) },[]) + return ( +
+

Cerita Saya

+ + + + {stories.map(s=> ( + + + + + + + + ))} + +
JudulTemaBahasaStatusCreated
{s.title}{s.theme}{s.lang}{s.createdAt}
+
+ ) +} + +// ------------------------------------------ +// File: src/pages/DonationsPage.jsx +// ------------------------------------------ +import React, { useEffect, useState } from 'react' +import { API } from '../lib/api' +import StatusBadge from '../components/StatusBadge' + +export default function DonationsPage(){ + const [donations, setDonations] = useState([]) + useEffect(()=>{ API.listDonations().then(setDonations) },[]) + return ( +
+

Tracking Donasi

+ + + + {donations.map(d=> ( + + + + + + + + ))} + +
SerialPenerimaStatusUpdateQR
{d.serial}{d.recipient}{d.updatedAt}{d.qrUrl ? Buka : '—'}
+
+ ) +} + +// ------------------------------------------ +// File: src/pages/TopUpPage.jsx +// ------------------------------------------ +import React, { useState } from 'react' +import { API } from '../lib/api' + +export default function TopUpPage(){ + const [amount, setAmount] = useState(1) + const [result, setResult] = useState(null) + async function submit(e){ e.preventDefault(); const r = await API.topupToken({ tokens: amount }); setResult(r) } + return ( +
+

Top Up Token

+
+
+ + setAmount(parseInt(e.target.value||'1'))} className="mt-1 w-full rounded-xl border bg-white px-3 py-2"/> +
+ +
+ {result && ( +
+
Invoice: {result.invoiceId}
+
Metode: {result.method}
+
Total: {result.total}
+ {result.qrisUrl && Bayar via QRIS} +
+ )} +
+ ) +} + +// ------------------------------------------ +// File: src/pages/LoginPage.jsx +// ------------------------------------------ +import React, { useState } from 'react' +import { useNavigate } from 'react-router-dom' +import { useAuth } from '../lib/auth' + +export default function LoginPage(){ + const nav = useNavigate(); + const { login } = useAuth() + const [email, setEmail] = useState('demo@bookoomoo.app') + const [pass, setPass] = useState('demo') + function submit(e){ e.preventDefault(); login({ id:1, name:'Demo User', email, tokenBalance: 3 }); nav('/') } + return ( +
+
+
Masuk ke Bookoomoo
+
+ + setEmail(e.target.value)} /> +
+
+ + setPass(e.target.value)} /> +
+ +
+
+ ) +} + +// ------------------------------------------ +// File: src/index.css (Tailwind base) +// ------------------------------------------ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Optional: smooth fonts */ +html { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } diff --git a/docs/AGENT_CONTEXT.md b/docs/AGENT_CONTEXT.md new file mode 100644 index 0000000..aa4fa46 --- /dev/null +++ b/docs/AGENT_CONTEXT.md @@ -0,0 +1,35 @@ +# Agent Context + +This repository uses a consistent product-engineering standard across apps. + +## Identity & Mission +- Senior FE Engineer + Product Designer (React, Vite, Tailwind). +- Objectives (in order): Type‑safety, A11y, Clean architecture, Performance, Visual polish, DX. + +## Tech Stack Defaults +- React + TypeScript, Vite, Tailwind (CSS variables for theming), Framer Motion, RHF + Zod, TanStack Query, lucide-react, Vitest/RTL, Playwright (optional). + +## Output Contract +- Deliver runnable code with file paths, minimal usage examples, states (loading/empty/error/success), A11y (labels, roles, keyboard), responsive (360/768/1280), and light/dark theming. + +## Structure & Conventions +- Folders: `src/components|pages|hooks|lib|assets|styles`. +- Names: Components `PascalCase.tsx`, hooks `useThing.ts`, utils `camelCase.ts`, tests `*.test.ts(x)`. +- Styling: Tailwind utilities; theme via `:root`/`.dark` CSS variables; avoid heavy deps. + +## Visual Language +- Typography: Poppins (headings), Inter/Roboto (body). Accent: orange. Subtle shadows/glass. Motion 160–300ms, respect reduced‑motion. + +## Forms & Data +- Forms: React Hook Form + Zod; inline errors with `aria-describedby`. +- Data: TanStack Query for async; cache keys per list/detail; optimistic updates where sensible. + +## Testing +- Unit/integration: Vitest + @testing-library/react; e2e: Playwright (critical journeys). Target ≥80% coverage on changed code. + +## Security & Config +- No secrets in git. Use `.env.local` with `VITE_` prefixes. Sanitize inputs; prefer HTTP‑only cookies for auth when applicable. + +## How to Brief the Agent +- Open an issue using “AI Task” template. Provide: app path (e.g., `kediritechnopark-app`), objective, requirements (states/a11y/tests), deliverables (files/paths), constraints, and definition of done. + diff --git a/docs/GEMINI.md b/docs/GEMINI.md new file mode 100644 index 0000000..af314d8 --- /dev/null +++ b/docs/GEMINI.md @@ -0,0 +1,241 @@ +## 1) Identity & Mission + +* **Identity**: Senior Frontend Engineer + Product Designer hybrid with expertise in **React, Vite, Tailwind**, and refined **UI/UX**. Combines engineering rigor with an artful visual sense. +* **Mission**: Deliver *production‑ready*, accessible, and well‑documented React components/pages with consistent patterns and tasteful aesthetics. + +--- + +## 2) Primary Objectives (in order) + +1. **Correctness & Type‑safety** (TypeScript by default) +2. **Accessibility (WCAG 2.2 AA)** & keyboard support +3. **Clean Architecture & Reusability** +4. **Performance & Bundle Hygiene** +5. **Visual Polish & Micro‑interactions** +6. **DX: clear comments, minimal setup friction** + +--- + +## 3) Non‑Goals / Guardrails + +* Do **not** introduce heavy dependencies unless justified. +* Do **not** produce pseudo‑code. Always runnable snippets or clear file diffs. +* Do **not** ignore error/empty/loading states. +* Do **not** ship unactionable placeholders (e.g., `TODO` without guidance). + +--- + +## 4) Tech Stack Defaults + +* **React + Vite + TypeScript** +* **Tailwind CSS** (utility‑first) with CSS variables for theming +* **Framer Motion** for motion +* **React Hook Form + Zod** for forms & validation +* **TanStack Query** for server state (when async data present) +* **lucide-react** for icons; optional shadcn/ui for primitives +* **Vitest + @testing-library/react** for unit/integration; **Playwright** for e2e + +> If the user’s request conflicts with defaults, adapt but state the trade‑offs. + +--- + +## 5) Output Contract (Always Follow) + +* **Deliver runnable code** with file paths (e.g., `src/components/...`), and any required `tailwind.config.js`/`index.css` changes. +* **Include minimal usage example** for each component. +* **Document props** (TS types) and behavior in concise comments. +* **Handle states**: loading, empty, error, success. +* **Accessibility**: proper roles, labels, focus management, ARIA where needed. +* **Responsive**: mobile‑first; verify at 360px, 768px, 1280px. +* **Theming**: light & dark out of the box via CSS variables or `.dark` class. + +--- + +## 6) Visual Language + +* **Typography**: Poppins for headings, Inter/Roboto for body. +* **Accents**: tasteful orange primary (customizable), subtle glows/shadows. +* **Surfaces**: soft glassmorphism (blur/opacity) used sparingly. +* **Motion**: 160–300ms ease; respect `prefers-reduced-motion`. +* **Layout**: grid‑first, consistent spacing rhythm. + +--- + +## 7) Tailwind Tokens (CSS Variables) + +Define tokens in `:root` and `.dark`: + +```css +:root { + --bg: 255 255 255; /* base background */ + --surface: 248 250 252; /* panels/cards */ + --text: 17 24 39; /* primary text */ + --primary: 255 115 0; /* orange accent */ + --accent: 14 165 233; /* supporting accent */ + --muted: 100 116 139; /* secondary text */ +} +.dark { + --bg: 2 6 23; + --surface: 15 23 42; + --text: 241 245 249; + --primary: 255 140 66; + --accent: 56 189 248; + --muted: 148 163 184; +} +``` + +Utility classes: + +```css +@tailwind base; @tailwind components; @tailwind utilities; +@layer base { body { @apply bg-[rgb(var(--bg))] text-[rgb(var(--text))] antialiased; } } +@layer components { + .card { @apply rounded-2xl bg-[rgb(var(--surface))]/80 backdrop-blur-xl shadow-lg; } + .btn { @apply inline-flex items-center justify-center rounded-xl px-4 py-2 font-medium transition; } + .btn-primary { @apply btn bg-[rgb(var(--primary))] text-white hover:brightness-110 active:brightness-90; } + .input { @apply w-full rounded-xl border border-slate-200/60 bg-white/60 px-3 py-2 outline-none focus:ring-2 focus:ring-[rgb(var(--accent))]; } +} +``` + +--- + +## 8) Component Blueprint (apply to all components) + +* **File**: colocate `Component.tsx`, `types.ts`, `stories.test.tsx` when relevant. +* **Props**: strictly typed, minimal; thoughtful defaults. +* **A11y**: labels, `aria-*`, keyboard nav; focus visible. +* **States**: render empty/loader/error/success UI. +* **Examples**: export a minimal demo in docs comment. +* **Motion**: hover/press feedback; reduced‑motion support. + +**Skeleton** + +```tsx +import { motion } from "framer-motion"; +import { cn } from "@/lib/cn"; + +type Props = { title: string; subtitle?: string; onClick?: () => void; className?: string }; +export function FeatureCard({ title, subtitle, onClick, className }: Props) { + return ( + +

{title}

+ {subtitle &&

{subtitle}

} +
+ ); +} +``` + +--- + +## 9) Forms & Validation Standard + +* **React Hook Form** + **Zod** schema; inline error messages; `aria-describedby`. +* Mask sensitive inputs (OTP/phone). Provide helper text and constraints in UI. + +**Snippet** + +```tsx +const schema = z.object({ email: z.string().email(), password: z.string().min(8) }); +``` + +--- + +## 10) Data Layer Standard + +* Use **TanStack Query** for async: caching, retries, invalidation. +* Prefer optimistic updates; rollback on error. +* Keep list/detail caches in sync using keys with filters. + +--- + +## 11) Performance Budget + +* Lighthouse targets: **Perf ≥ 90**, **A11y ≥ 95**. +* Code splitting for routes and big components. +* Preload critical fonts; responsive images with width/height to avoid CLS. + +--- + +## 12) Testing Policy + +* Unit tests for logic/conditional rendering. +* Integration tests for forms + data fetch flows. +* E2E tests for critical journeys (auth, checkout/donation, settings). + +--- + +## 13) Security & Privacy + +* Sanitize input; escape HTML. +* Configure env via Vite; never commit secrets. +* Use HTTP‑only cookies for auth tokens when applicable. +* Respect CSP and same‑site cookies where relevant. + +--- + +## 14) Communication & Explanation Style + +* Be concise and practical. Explain *why* for key choices. +* Provide **copy‑paste ready** blocks and **setup steps** when needed. +* Offer alternatives if constraints exist, with trade‑offs. + +--- + +## 15) Response Template (use for every answer) + +1. **What you’ll build** (one sentence) +2. **Files & changes** (paths + code blocks) +3. **Usage example** (JSX snippet) +4. **Notes** (a11y, perf, UX choices) +5. **Next steps** (tests, variants, integrations) + +--- + +## 16) Do / Don’t Quicklist + +**Do** + +* Ship complete, minimal, elegant solutions. +* Cover states and a11y. +* Keep visual polish subtle and modern. +* Add brief inline comments for maintainers. + +**Don’t** + +* Over‑engineer or add heavy libs without reason. +* Leave missing imports, undefined vars, or failing builds. +* Ignore dark mode or responsive behavior. + +--- + +## 17) i18n + +* Externalize strings; support ID/EN switching. +* Use `Intl` for number/date formatting. + +--- + +## 18) Helper: `cn` utility + +```ts +export function cn(...classes: (string | undefined | null | false)[]) { + return classes.filter(Boolean).join(" "); +} +``` + +--- + +## 19) Example Ask (Prompt Format for Users) + +> Build a bilingual (ID/EN) login + OTP flow using React + Vite + Tailwind, with glassmorphism card, orange accent, particles background with depth‑of‑field, Framer Motion transitions, RHF + Zod validation, loading/error states, and A11y best practices. Include tests and dark mode. + +--- + +**End of System Instruction** + diff --git a/hello.md b/hello.md deleted file mode 100644 index 21fa8f4..0000000 --- a/hello.md +++ /dev/null @@ -1 +0,0 @@ -halo update diff --git a/kediritechnopark-app/.gitignore b/kediritechnopark-app/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/kediritechnopark-app/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/kediritechnopark-app/README.md b/kediritechnopark-app/README.md new file mode 100644 index 0000000..7059a96 --- /dev/null +++ b/kediritechnopark-app/README.md @@ -0,0 +1,12 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/kediritechnopark-app/eslint.config.js b/kediritechnopark-app/eslint.config.js new file mode 100644 index 0000000..cee1e2c --- /dev/null +++ b/kediritechnopark-app/eslint.config.js @@ -0,0 +1,29 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + parserOptions: { + ecmaVersion: 'latest', + ecmaFeatures: { jsx: true }, + sourceType: 'module', + }, + }, + rules: { + 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }], + }, + }, +]) diff --git a/kediritechnopark-app/index.html b/kediritechnopark-app/index.html new file mode 100644 index 0000000..891a938 --- /dev/null +++ b/kediritechnopark-app/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + + +
+ + + diff --git a/kediritechnopark-app/package-lock.json b/kediritechnopark-app/package-lock.json new file mode 100644 index 0000000..bfbdf26 --- /dev/null +++ b/kediritechnopark-app/package-lock.json @@ -0,0 +1,4186 @@ +{ + "name": "kediritechnopark-app", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kediritechnopark-app", + "version": "0.0.0", + "dependencies": { + "@hookform/resolvers": "^3.9.0", + "framer-motion": "^11.3.24", + "react": "^19.1.1", + "react-dom": "^19.1.1", + "react-hook-form": "^7.53.0", + "zod": "^3.23.8" + }, + "devDependencies": { + "@eslint/js": "^9.32.0", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.4.20", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "postcss": "^8.4.41", + "tailwindcss": "^3.4.14", + "typescript": "^5.6.3", + "vite": "^7.1.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.33.0.tgz", + "integrity": "sha512-5K1/mKhWaMfreBGJTwval43JJmkip0RmM+3+IuqupeSKNC/Th2Kc7ucaq5ovTSra/OOKB9c58CGSz3QMVbWt0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@hookform/resolvers": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz", + "integrity": "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==", + "license": "MIT", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", + "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", + "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001733", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", + "integrity": "sha512-e4QKw/O2Kavj2VQTKZWrwzkt3IxOmIlU6ajRb6LP64LHpBo1J67k2Hi4Vu/TgJWsNtynurfS0uK3MaUTCPfu5Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.199", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", + "integrity": "sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.33.0.tgz", + "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.33.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "11.18.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz", + "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==", + "license": "MIT", + "dependencies": { + "motion-dom": "^11.18.1", + "motion-utils": "^11.18.1", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/motion-dom": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz", + "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==", + "license": "MIT", + "dependencies": { + "motion-utils": "^11.18.1" + } + }, + "node_modules/motion-utils": { + "version": "11.18.1", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz", + "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", + "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", + "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.1" + } + }, + "node_modules/react-hook-form": { + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.1.tgz", + "integrity": "sha512-yJ+Mp7OyV+4S+afWo+QyoL9jFWD11QFH0i5i7JypnfTcA1rmgxCbiA8WwAICDEtZ1Z1hzrVhN8R8rGTqkTY8ZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/kediritechnopark-app/package.json b/kediritechnopark-app/package.json new file mode 100644 index 0000000..6021eb3 --- /dev/null +++ b/kediritechnopark-app/package.json @@ -0,0 +1,35 @@ +{ + "name": "kediritechnopark-app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1", + "framer-motion": "^11.3.24", + "react-hook-form": "^7.53.0", + "zod": "^3.23.8", + "@hookform/resolvers": "^3.9.0" + }, + "devDependencies": { + "@eslint/js": "^9.32.0", + "@types/react": "^19.1.9", + "@types/react-dom": "^19.1.7", + "@vitejs/plugin-react": "^4.7.0", + "eslint": "^9.32.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "vite": "^7.1.0", + "tailwindcss": "^3.4.14", + "postcss": "^8.4.41", + "autoprefixer": "^10.4.20", + "typescript": "^5.6.3" + } +} diff --git a/kediritechnopark-app/postcss.config.js b/kediritechnopark-app/postcss.config.js new file mode 100644 index 0000000..1d92651 --- /dev/null +++ b/kediritechnopark-app/postcss.config.js @@ -0,0 +1,7 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; + diff --git a/kediritechnopark-app/public/vite.svg b/kediritechnopark-app/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/kediritechnopark-app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/kediritechnopark-app/src/assets/kediri-technopark-logo-white.webp b/kediritechnopark-app/src/assets/kediri-technopark-logo-white.webp new file mode 100755 index 0000000000000000000000000000000000000000..d5445a96a82f90854d3c79c342df820b258530dc GIT binary patch literal 109286 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 literal 0 HcmV?d00001 diff --git a/kediritechnopark-app/src/assets/kediri-technopark-logo.webp b/kediritechnopark-app/src/assets/kediri-technopark-logo.webp new file mode 100755 index 0000000000000000000000000000000000000000..3dcd6f3a4cc6901464c48c9fb362c5643f014899 GIT binary patch literal 150680 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�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 amjo^eToSk>@c)2-l_)u0H=G;~_x}Syuf(hX literal 0 HcmV?d00001 diff --git a/kediritechnopark-app/src/components/Auth/ForgotForm.tsx b/kediritechnopark-app/src/components/Auth/ForgotForm.tsx new file mode 100644 index 0000000..0596e1e --- /dev/null +++ b/kediritechnopark-app/src/components/Auth/ForgotForm.tsx @@ -0,0 +1,103 @@ +import React, { useMemo, useState } from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import Field from "../UI/Field"; +import AnimatedAlerts from "../UI/AnimatedAlerts"; + +type Props = { + t: any; + palette: any; + loading: boolean; + globalOk?: string; + globalErr?: string; + shakeKey?: number; + onForgot: (data: { email?: string; whatsapp?: string }) => void; + go: (v: "login") => void; +}; + +type Mode = "email" | "whatsapp"; + +export default function ForgotForm({ t, palette, loading, globalOk, globalErr, shakeKey, onForgot, go }: Props) { + const [mode, setMode] = useState("email"); + + const schema = useMemo(() => + mode === "email" + ? z.object({ email: z.string().email(t.errEmail) }) + : z.object({ + whatsapp: z + .string() + .regex(/^\d+$/, t.errWADigits) + .transform((v) => (v.startsWith("0") ? `62${v.slice(1)}` : v.startsWith("8") ? `62${v}` : v)) + .refine((v) => v.startsWith("62"), t.errWAFormat), + }), + [mode, t] + ); + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ resolver: zodResolver(schema) }); + + const onSubmit = (data: any) => onForgot(data); + + return ( +

+ +
+ + +
+ + {mode === "email" ? ( + + + + ) : ( + +
+ +62 + +
+
+ )} + + + + + +

+ {t.backToLogin} {" "} + +

+ + ); +} diff --git a/kediritechnopark-app/src/components/Auth/LoginForm.tsx b/kediritechnopark-app/src/components/Auth/LoginForm.tsx new file mode 100644 index 0000000..c9aa483 --- /dev/null +++ b/kediritechnopark-app/src/components/Auth/LoginForm.tsx @@ -0,0 +1,151 @@ +import React, { useMemo } from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import Field from "../UI/Field"; +import AnimatedAlerts from "../UI/AnimatedAlerts"; + +type Props = { + t: any; + palette: any; + loading: boolean; + globalOk?: string; + globalErr?: string; + shakeKey?: number; + onLoginEmail: (data: { email: string; password: string }) => void; + onLoginWARequestOTP: (data: { whatsapp: string }) => void; + go: (v: "signup" | "forgot") => void; +}; + +type Mode = "email" | "whatsapp"; + +export default function LoginForm({ + t, + palette, + loading, + globalOk, + globalErr, + shakeKey, + onLoginEmail, + onLoginWARequestOTP, + go, +}: Props) { + const [mode, setMode] = React.useState("email"); + + const schema = useMemo(() => + mode === "email" + ? z.object({ + email: z.string().email(t.errEmail), + password: z.string().min(1, t.errPassReq), + }) + : z.object({ + whatsapp: z + .string() + .regex(/^\d+$/, t.errWADigits) + .transform((v) => (v.startsWith("0") ? `62${v.slice(1)}` : v.startsWith("8") ? `62${v}` : v)) + .refine((v) => v.startsWith("62"), t.errWAFormat), + }), + [mode, t] + ); + + const { + register, + handleSubmit, + formState: { errors }, + } = useForm({ resolver: zodResolver(schema) }); + + const onSubmit = (data: any) => { + if (mode === "email") onLoginEmail(data as { email: string; password: string }); + else onLoginWARequestOTP(data as { whatsapp: string }); + }; + + return ( +
+
+ + +
+ + {mode === "email" ? ( + <> + + + + + + + + ) : ( + +
+ +62 + +
+
+ )} + + + + + +
+ + +
+ + ); +} diff --git a/kediritechnopark-app/src/components/Auth/PasswordMeter.tsx b/kediritechnopark-app/src/components/Auth/PasswordMeter.tsx new file mode 100644 index 0000000..63264c3 --- /dev/null +++ b/kediritechnopark-app/src/components/Auth/PasswordMeter.tsx @@ -0,0 +1,41 @@ +import React from "react"; + +function checkPasswordStrength(pw: string) { + const rules = { + length: pw.length >= 8, + upper: /[A-Z]/.test(pw), + lower: /[a-z]/.test(pw), + number: /\d/.test(pw), + symbol: /[^A-Za-z0-9]/.test(pw), + } as const; + const passed = Object.values(rules).filter(Boolean).length; + const score = passed / 5; + return { rules, score, passed }; +} + +export default function PasswordMeter({ value }: { value: string }) { + const { rules, score } = checkPasswordStrength(value || ""); + const bars = 5; + const filled = Math.round(score * bars); + const Item = ({ ok, text }: { ok: boolean; text: string }) => ( +
  • • {text}
  • + ); + return ( +
    +
    +
    +
    +
      + + + + + +
    +
    + ); +} + diff --git a/kediritechnopark-app/src/components/Auth/SignupForm.tsx b/kediritechnopark-app/src/components/Auth/SignupForm.tsx new file mode 100644 index 0000000..3e127c3 --- /dev/null +++ b/kediritechnopark-app/src/components/Auth/SignupForm.tsx @@ -0,0 +1,172 @@ +import React from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; +import Field from "../UI/Field"; +import AnimatedAlerts from "../UI/AnimatedAlerts"; +// Password strength bar removed; replace with concise rule checklist + +type Props = { + t: any; + palette: any; + loading: boolean; + globalOk?: string; + globalErr?: string; + shakeKey?: number; + onSignup: (data: { name: string; email: string; whatsapp: string; password: string; confirm: string }) => void; + go: (v: "login") => void; + lang?: "ID" | "EN"; +}; + +const schema = z + .object({ + name: z.string().min(1, "Required"), + email: z.string().email("Invalid email"), + whatsapp: z + .string() + .regex(/^\d+$/, "Digits only") + .transform((v) => (v.startsWith("0") ? `62${v.slice(1)}` : v.startsWith("8") ? `62${v}` : v)) + .refine((v) => v.startsWith("62"), "Must start with 62xxxx."), + password: z.string().min(8, "At least 8 chars"), + confirm: z.string().min(1, "Required"), + }) + .refine((d) => d.password === d.confirm, { + message: "Passwords do not match", + path: ["confirm"], + }); + +type FormData = z.infer; + +export default function SignupForm({ t, palette, loading, globalOk, globalErr, shakeKey, onSignup, go, lang }: Props) { + const { + register, + handleSubmit, + watch, + formState: { errors }, + } = useForm({ resolver: zodResolver(schema) }); + + const onSubmit = (data: FormData) => onSignup(data); + + const pw = watch("password") || ""; + + function getRules(pwVal: string) { + return { + length: pwVal.length >= 8, + upper: /[A-Z]/.test(pwVal), + lower: /[a-z]/.test(pwVal), + number: /\d/.test(pwVal), + symbol: /[^A-Za-z0-9]/.test(pwVal), + }; + } + const rules = getRules(pw); + + const isID = lang === "ID"; + + return ( +
    + + + + + + + +
    + +62 + +
    +
    + + +
      +
    • + {rules.length ? ( + + + + ) : ( + + + + )} + {isID ? "≥ 8 karakter" : "≥ 8 characters"} +
    • +
    • + {rules.upper ? ( + + + + ) : ( + + + + )} + {isID ? "Huruf besar" : "Uppercase letter"} +
    • +
    • + {rules.lower ? ( + + + + ) : ( + + + + )} + {isID ? "Huruf kecil" : "Lowercase letter"} +
    • +
    • + {rules.number ? ( + + + + ) : ( + + + + )} + {isID ? "Angka" : "Number"} +
    • +
    • + {rules.symbol ? ( + + + + ) : ( + + + + )} + {isID ? "Simbol" : "Symbol"} +
    • +
    +
    + + + + + + + + +

    + {t.haveAcc} {" "} + +

    + + ); +} diff --git a/kediritechnopark-app/src/components/Auth/VerifyForm.tsx b/kediritechnopark-app/src/components/Auth/VerifyForm.tsx new file mode 100644 index 0000000..b88a3cb --- /dev/null +++ b/kediritechnopark-app/src/components/Auth/VerifyForm.tsx @@ -0,0 +1,68 @@ +import React, { useRef } from "react"; +import AnimatedAlerts from "../UI/AnimatedAlerts"; +import { onlyDigits } from "../../lib/utils"; + +type Props = { + t: any; + palette: any; + loading: boolean; + globalOk?: string; + globalErr?: string; + shakeKey?: number; + otp: string[]; + setOtp: (val: string[]) => void; + handleVerify: () => void; + go: (v: "login") => void; +}; + +export default function VerifyForm({ t, palette, loading, globalOk, globalErr, shakeKey, otp, setOtp, handleVerify, go }: Props) { + const otpRefs = useRef>([]); + + const submit = (e: React.FormEvent) => { + e.preventDefault(); + handleVerify(); + }; + + return ( +
    +

    {t.otpDesc}

    +
    + {otp.map((v, i) => ( + (otpRefs.current[i] = el)} + className="w-11 h-12 text-center border rounded-lg outline-none text-lg" + style={{ borderColor: palette.border }} + value={v} + inputMode="numeric" + maxLength={1} + onChange={(e) => { + const d = onlyDigits(e.target.value).slice(0, 1); + const next = [...otp]; + next[i] = d; + setOtp(next); + if (d && i < 5) otpRefs.current[i + 1]?.focus(); + }} + onKeyDown={(e) => { + if (e.key === "Backspace" && !otp[i] && i > 0) otpRefs.current[i - 1]?.focus(); + }} + aria-label={`OTP digit ${i + 1}`} + /> + ))} +
    + + + + + +

    + {t.notReceive} {" "} + +

    + + ); +} diff --git a/kediritechnopark-app/src/components/Background/TechParticles.tsx b/kediritechnopark-app/src/components/Background/TechParticles.tsx new file mode 100644 index 0000000..761b6cc --- /dev/null +++ b/kediritechnopark-app/src/components/Background/TechParticles.tsx @@ -0,0 +1,213 @@ +import React, { useEffect, useRef } from "react"; + +type Palette = { + bgFrom: string; + bgTo: string; + text: string; + glass: string; + border: string; + primary: string; + primaryHover: string; +}; + +type Props = { + palette: Palette; + className?: string; + // Approximate particles per (25k px^2). 2 is a good default. + density?: number; + // Speed multiplier to make motion faster/slower (1 = default). + speedMultiplier?: number; + // Depth-of-field intensity in pixels (higher = more blur off-focus). + dofIntensity?: number; +}; + +type Particle = { + ax: number; // anchor x (px) + ay: number; // anchor y (px) + x: number; // current x (px) + y: number; // current y (px) + phase: number; // oscillator phase + speed: number; // phase speed + ampX: number; // local oscillation amplitude x + ampY: number; // local oscillation amplitude y + radius: number; // base dot radius (px) + z: number; // 0..1 depth (0 near, 1 far) + hue: string; // color hex +}; + +function usePrefersReducedMotion() { + const ref = useRef(false); + useEffect(() => { + const mq = window.matchMedia("(prefers-reduced-motion: reduce)"); + ref.current = mq.matches; + const handler = () => (ref.current = mq.matches); + mq.addEventListener?.("change", handler); + return () => mq.removeEventListener?.("change", handler); + }, []); + return ref; +} + +export function TechParticles({ palette, className, density = 2, speedMultiplier = 1.2, dofIntensity = 6 }: Props) { + const canvasRef = useRef(null); + const motionPref = usePrefersReducedMotion(); + + useEffect(() => { + const canvas = canvasRef.current!; + const ctx = canvas.getContext("2d", { alpha: true })!; + + let width = 0; + let height = 0; + let dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1)); + let raf = 0; + let running = true; + let last = performance.now(); + // no parallax/pointer effect per request + + const colors = [palette.primary, palette.primaryHover]; + const rand = (min: number, max: number) => Math.random() * (max - min) + min; + const pick = (arr: T[]) => arr[Math.floor(Math.random() * arr.length)]; + let particles: Particle[] = []; + + function regenerateParticles() { + const areaK = (width * height) / 25000; // per 25k px + const count = Math.max(18, Math.min(120, Math.floor(areaK * density))); + particles = new Array(count).fill(0).map(() => { + const ax = Math.random() * width; + const ay = Math.random() * height; + const radius = rand(1, 2.2); + return { + ax, + ay, + x: ax, + y: ay, + phase: Math.random() * Math.PI * 2, + // faster by default, still gentle + speed: rand(0.8, 1.8), + ampX: rand(2, 8), + ampY: rand(2, 8), + radius, + z: Math.random(), + hue: pick(colors), + } as Particle; + }); + } + + function resize() { + width = canvas.clientWidth; + height = canvas.clientHeight; + dpr = Math.max(1, Math.min(2, window.devicePixelRatio || 1)); + canvas.width = Math.floor(width * dpr); + canvas.height = Math.floor(height * dpr); + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + regenerateParticles(); + } + + resize(); + const ro = new ResizeObserver(resize); + ro.observe(canvas); + window.addEventListener("resize", resize); + + function step(now: number) { + if (!running) return; + const dt = Math.min(1 / 15, (now - last) / 1000); + last = now; + + ctx.clearRect(0, 0, width, height); + + // soft gradient base + const grd = ctx.createLinearGradient(0, 0, 0, height); + grd.addColorStop(0, palette.bgFrom); + grd.addColorStop(1, palette.bgTo); + ctx.fillStyle = grd; + ctx.fillRect(0, 0, width, height); + + const reduced = motionPref.current; + + // update positions; each dot oscillates around its anchor (no center drift) + for (let p of particles) { + if (!reduced) p.phase += p.speed * dt * speedMultiplier; + p.x = p.ax + Math.cos(p.phase) * p.ampX; + p.y = p.ay + Math.sin(p.phase * 0.85) * p.ampY; + } + + // connections (constellation): nearby lines + const threshold = Math.min(120, Math.max(60, Math.min(width, height) * 0.14)); + for (let i = 0; i < particles.length; i++) { + const a = particles[i]; + for (let j = i + 1; j < particles.length; j++) { + const b = particles[j]; + const dx = a.x - b.x; + const dy = a.y - b.y; + const dist = Math.hypot(dx, dy); + if (dist > threshold) continue; + const near = 1 - dist / threshold; // 0..1 + // depth-of-field for lines: blur more if away from focal plane + const meanZ = (a.z + b.z) / 2; + const lineBlur = Math.abs(meanZ - 0.5) * dofIntensity; + ctx.save(); + // lines fade with distance and depth + ctx.globalAlpha = Math.max(0.06, 0.28 * near * (1 - meanZ * 0.5)); + (ctx as any).filter = `blur(${lineBlur}px)`; + ctx.strokeStyle = palette.primaryHover; + ctx.lineWidth = 0.6 + near * 0.7; + ctx.beginPath(); + ctx.moveTo(a.x, a.y); + ctx.lineTo(b.x, b.y); + ctx.stroke(); + ctx.restore(); + } + } + + // dots + for (const p of particles) { + // depth-of-field for dots + const blur = Math.abs(p.z - 0.5) * dofIntensity; + const size = p.radius * (1.1 + (1 - p.z) * 1.4); // near = larger + const alpha = 0.5 + (1 - p.z) * 0.35; // near = more opaque + ctx.save(); + ctx.globalAlpha = alpha; + (ctx as any).filter = `blur(${blur}px)`; + ctx.fillStyle = p.hue; + ctx.beginPath(); + ctx.arc(p.x, p.y, size, 0, Math.PI * 2); + ctx.fill(); + ctx.restore(); + } + + raf = requestAnimationFrame(step); + } + + function onVis() { + running = document.visibilityState === "visible"; + if (running) { + last = performance.now(); + raf = requestAnimationFrame(step); + } else { + cancelAnimationFrame(raf); + } + } + + document.addEventListener("visibilitychange", onVis); + + raf = requestAnimationFrame(step); + + return () => { + running = false; + cancelAnimationFrame(raf); + document.removeEventListener("visibilitychange", onVis); + window.removeEventListener("resize", resize); + ro.disconnect(); + }; + }, [palette, density]); + + return ( + + ); +} + +export default TechParticles; diff --git a/kediritechnopark-app/src/components/UI/AnimatedAlerts.tsx b/kediritechnopark-app/src/components/UI/AnimatedAlerts.tsx new file mode 100644 index 0000000..f83821e --- /dev/null +++ b/kediritechnopark-app/src/components/UI/AnimatedAlerts.tsx @@ -0,0 +1,35 @@ +import React from "react"; + +type Props = { + ok?: string; + err?: string; + shakeKey?: number; +}; + +export default function AnimatedAlerts({ ok, err, shakeKey }: Props) { + return ( + <> + {err && ( +
    + {err} +
    + )} + {ok && ( +
    + {ok} +
    + )} + + ); +} + diff --git a/kediritechnopark-app/src/components/UI/Field.tsx b/kediritechnopark-app/src/components/UI/Field.tsx new file mode 100644 index 0000000..71eb630 --- /dev/null +++ b/kediritechnopark-app/src/components/UI/Field.tsx @@ -0,0 +1,38 @@ +import React from "react"; + +type Props = { + label: string; + hint?: string; + error?: string; + id?: string; + children: React.ReactNode; +}; + +export default function Field({ label, hint, error, id, children }: Props) { + const describedBy = error ? `${id}-error` : hint ? `${id}-hint` : undefined; + return ( +
    + + {React.isValidElement(children) + ? React.cloneElement(children as React.ReactElement, { + id, + "aria-invalid": !!error || undefined, + "aria-describedby": describedBy, + }) + : children} + {hint && !error && ( +

    + {hint} +

    + )} + {error && ( +

    + {error} +

    + )} +
    + ); +} + diff --git a/kediritechnopark-app/src/components/UI/TechLinkedParticlesBG.jsx b/kediritechnopark-app/src/components/UI/TechLinkedParticlesBG.jsx new file mode 100644 index 0000000..9a8fcf7 --- /dev/null +++ b/kediritechnopark-app/src/components/UI/TechLinkedParticlesBG.jsx @@ -0,0 +1,115 @@ +import React, { useEffect, useRef } from "react"; +import { hexToRgba } from "../../lib/utils"; + +export default function TechLinkedParticlesBG({ theme, speed = 2 }) { + const canvasRef = useRef(null); + const DPR = typeof window !== "undefined" ? Math.min(2, window.devicePixelRatio || 1) : 1; + const mouse = useRef({ x: 0, y: 0 }); + + useEffect(() => { + const canvas = canvasRef.current; + const ctx = canvas.getContext("2d"); + let W = (canvas.width = window.innerWidth * DPR); + let H = (canvas.height = window.innerHeight * DPR); + + // 3 layers: near (sharp), mid (blur), far (more blur) + const layers = [ + { count: 60, size: [1.8, 2.6], speed: 0.22, blur: 0, linkDist: 130, color: theme.primary, alpha: 0.28 }, + { count: 70, size: [2.2, 3.6], speed: 0.12, blur: 4, linkDist: 170, color: theme.primary, alpha: 0.18 }, + { count: 60, size: [2.8, 4.6], speed: 0.06, blur: 10, linkDist: 210, color: "#64748b", alpha: 0.12 }, + ]; + const particles = layers.map((L, li) => + Array.from({ length: L.count }).map(() => ({ + x: Math.random() * W, + y: Math.random() * H, + r: (Math.random() * (L.size[1] - L.size[0]) + L.size[0]) * DPR, + vx: (Math.random() - 0.5) * L.speed * speed * DPR, + vy: (Math.random() - 0.5) * L.speed * speed * DPR, + layer: li, + tick: Math.random() * 1000, + })) + ); + + const onResize = () => { + W = canvas.width = window.innerWidth * DPR; + H = canvas.height = window.innerHeight * DPR; + }; + const onMouseMove = (e) => { + mouse.current.x = (e.clientX / window.innerWidth - 0.5) * 2; + mouse.current.y = (e.clientY / window.innerHeight - 0.5) * 2; + }; + window.addEventListener("resize", onResize); + window.addEventListener("mousemove", onMouseMove); + + let raf; + const draw = () => { + // background gradient + ctx.clearRect(0, 0, W, H); + const g = ctx.createLinearGradient(0, 0, 0, H); + g.addColorStop(0, theme.bgFrom); + g.addColorStop(1, theme.bgTo); + ctx.fillStyle = g; + ctx.fillRect(0, 0, W, H); + + layers.forEach((L, li) => { + // update + draw particles + ctx.filter = L.blur ? `blur(${L.blur}px)` : "none"; + particles[li].forEach((p) => { + p.x += p.vx; p.y += p.vy; p.tick += 0.002 + li * 0.001; + // gentle breathing scale for DoF feel + const breathe = 0.85 + Math.sin(p.tick * 2) * 0.15; + // wrap + if (p.x < -20) p.x = W + 20; + if (p.x > W + 20) p.x = -20; + if (p.y < -20) p.y = H + 20; + if (p.y > H + 20) p.y = -20; + + // parallax by layer + const par = (li + 1) * 5; + const ox = mouse.current.x * par * DPR; + const oy = mouse.current.y * par * DPR; + + ctx.beginPath(); + ctx.fillStyle = hexToRgba(L.color, L.alpha); + ctx.arc(p.x + ox, p.y + oy, p.r * breathe, 0, Math.PI * 2); + ctx.fill(); + }); + + // linked lines within layer (dynamic) + // (do this after drawing points to keep blur affecting only nodes) + ctx.filter = "none"; + for (let i = 0; i < particles[li].length; i++) { + const a = particles[li][i]; + for (let j = i + 1; j < particles[li].length; j++) { + const b = particles[li][j]; + const dx = a.x - b.x, dy = a.y - b.y; + const dist = Math.hypot(dx, dy); + if (dist < L.linkDist * DPR) { + const par = (li + 1) * 5; + const ox = mouse.current.x * par * DPR; + const oy = mouse.current.y * par * DPR; + const alpha = (1 - dist / (L.linkDist * DPR)) * L.alpha * 0.9; + ctx.strokeStyle = hexToRgba(L.color, alpha); + ctx.lineWidth = (li === 0 ? 1.2 : li === 1 ? 1 : 0.8) * DPR; + ctx.beginPath(); + ctx.moveTo(a.x + ox, a.y + oy); + ctx.lineTo(b.x + ox, b.y + oy); + ctx.stroke(); + } + } + } + }); + + raf = requestAnimationFrame(draw); + }; + draw(); + + return () => { + cancelAnimationFrame(raf); + window.removeEventListener("resize", onResize); + window.removeEventListener("mousemove", onMouseMove); + }; + }, [DPR, theme, speed]); + + return ; +} \ No newline at end of file diff --git a/kediritechnopark-app/src/config/constants.js b/kediritechnopark-app/src/config/constants.js new file mode 100644 index 0000000..c62bfe6 --- /dev/null +++ b/kediritechnopark-app/src/config/constants.js @@ -0,0 +1,2 @@ +// ganti ke webhook kamu +export const N8N_WEBHOOK_URL = import.meta.env.VITE_N8N_WEBHOOK_URL || "https://your-n8n.example/webhook/auth"; diff --git a/kediritechnopark-app/src/config/i18n.js b/kediritechnopark-app/src/config/i18n.js new file mode 100644 index 0000000..0ada922 --- /dev/null +++ b/kediritechnopark-app/src/config/i18n.js @@ -0,0 +1,92 @@ +export const T = { + ID: { + title: "Welcome Back 👋", + subtitle: "Akses akunmu dengan aman.", + login: "Masuk", + signup: "Buat Akun", + verify: "Verifikasi OTP", + forgot: "Lupa Password", + email: "Email", + password: "Password", + whatsapp: "WhatsApp", + viaEmail: "Via Email", + viaWA: "Via WhatsApp", + sendOTPWA: "Kirim OTP via WhatsApp", + loginBtn: "Login", + signupBtn: "Daftar", + verifyBtn: "Verifikasi", + resetBtn: "Kirim Reset", + notReceive: "Tidak menerima kode?", + resend: "Kirim ulang", + haveAcc: "Sudah punya akun?", + toLogin: "Masuk", + toSignup: "Buat akun", + backToLogin: "Kembali ke", + name: "Nama Lengkap", + confirmPass: "Konfirmasi Password", + otpDesc: "Masukkan kode 6 digit yang kami kirim.", + waHint: "Gunakan format 62xxxxxxxxxx (tanpa 0 di depan)", + enterEmailOrWA: "Isi salah satu: Email atau WhatsApp.", + tosNote: "Dengan masuk, kamu menyetujui Ketentuan Layanan & Kebijakan Privasi.", + // errors + errEmail: "Format email tidak valid.", + errPassReq: "Password wajib diisi.", + errNameReq: "Nama wajib diisi.", + errWAFormat: "Nomor WA harus format 62xxxxxxxxxx.", + errWADigits: "Nomor WA hanya boleh angka.", + errPassMismatch: "Konfirmasi password tidak cocok.", + errPassWeak: "Password belum memenuhi semua kriteria.", + errOTP: "Kode OTP harus 6 digit angka.", + // success + okLogin: "Login email berhasil.", + okSendOTP: "OTP dikirim ke WhatsApp.", + okSignup: "Signup berhasil. OTP dikirim untuk verifikasi.", + okVerify: "Verifikasi berhasil.", + okReset: "Tautan/kode reset dikirim.", + }, + EN: { + title: "Welcome Back 👋", + subtitle: "Securely access your account.", + login: "Login", + signup: "Sign Up", + verify: "Verify OTP", + forgot: "Forgot Password", + email: "Email", + password: "Password", + whatsapp: "WhatsApp", + viaEmail: "Via Email", + viaWA: "Via WhatsApp", + sendOTPWA: "Send OTP via WhatsApp", + loginBtn: "Login", + signupBtn: "Create Account", + verifyBtn: "Verify", + resetBtn: "Send Reset", + notReceive: "Didn't receive the code?", + resend: "Resend", + haveAcc: "Already have an account?", + toLogin: "Login", + toSignup: "Create one", + backToLogin: "Back to", + name: "Full Name", + confirmPass: "Confirm Password", + otpDesc: "Enter the 6‑digit code we sent you.", + waHint: "Use 62xxxxxxxxxx format (no leading 0)", + enterEmailOrWA: "Fill one: Email or WhatsApp.", + tosNote: "By signing in, you agree to our Terms & Privacy.", + // errors + errEmail: "Invalid email format.", + errPassReq: "Password is required.", + errNameReq: "Name is required.", + errWAFormat: "Phone must be in 62xxxxxxxxxx format.", + errWADigits: "Phone number must be digits only.", + errPassMismatch: "Passwords do not match.", + errPassWeak: "Password does not meet all requirements.", + errOTP: "OTP must be 6 digits.", + // success + okLogin: "Logged in with email.", + okSendOTP: "OTP sent via WhatsApp.", + okSignup: "Sign up successful. OTP sent for verification.", + okVerify: "Verification successful.", + okReset: "Reset link/code has been sent.", + }, +}; \ No newline at end of file diff --git a/kediritechnopark-app/src/config/theme.js b/kediritechnopark-app/src/config/theme.js new file mode 100644 index 0000000..790fffb --- /dev/null +++ b/kediritechnopark-app/src/config/theme.js @@ -0,0 +1,26 @@ +export const THEME = { + light: { + bgFrom: "#f6fbff", + bgTo: "#eaf5ff", + text: "#0b1220", + glass: "rgba(255,255,255,0.9)", + border: "#E5E7EB", + primary: "#2563EB", + primaryHover: "#1E4FD7", + }, + dark: { + bgFrom: "#0b1220", + bgTo: "#0f172a", + text: "#e6eefc", + glass: "rgba(255,255,255,0.08)", + border: "rgba(255,255,255,0.12)", + primary: "#4F86FF", + primaryHover: "#3B6FE6", + }, +}; + +export const COLORS = { + success: "#22C55E", + danger: "#EF4444", + amber: "#F59E0B", +}; \ No newline at end of file diff --git a/kediritechnopark-app/src/index.css b/kediritechnopark-app/src/index.css new file mode 100644 index 0000000..650ee8b --- /dev/null +++ b/kediritechnopark-app/src/index.css @@ -0,0 +1,54 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Theme tokens */ +:root { + --bg: 255 255 255; + --surface: 248 250 252; + --text: 17 24 39; + --primary: 255 115 0; + --accent: 14 165 233; + --muted: 100 116 139; +} +.dark { + --bg: 2 6 23; + --surface: 15 23 42; + --text: 241 245 249; + --primary: 255 140 66; + --accent: 56 189 248; + --muted: 148 163 184; +} + +@layer base { + html { font-family: Inter, system-ui, ui-sans-serif, sans-serif; } + body { @apply bg-[rgb(var(--bg))] text-[rgb(var(--text))] antialiased; } +} + +@layer components { + .card { @apply rounded-2xl bg-[rgb(var(--surface))]/80 backdrop-blur-xl shadow-lg; } + /* Consistent glassmorphism card for light/dark */ + /* More transparent + stronger blur for true glass effect */ + .glass-card { @apply rounded-2xl backdrop-blur-2xl backdrop-saturate-150 shadow-xl border bg-white/25 dark:bg-white/5 border-white/30 dark:border-white/10; } + /* Solid card (no transparency), uses theme surface */ + .solid-card { @apply rounded-2xl bg-[rgb(var(--surface))] shadow-xl border border-slate-200/70 dark:border-white/10; } + .btn { @apply inline-flex items-center justify-center rounded-xl px-4 py-2 font-medium transition; } + .btn-primary { @apply btn bg-[rgb(var(--primary))] text-white hover:brightness-110 active:brightness-90; } + .input { @apply w-full rounded-xl border border-slate-200/60 bg-white/60 px-3 py-2 outline-none focus:ring-2 focus:ring-[rgb(var(--accent))]; } +} + +/* micro animations used by alerts */ +@keyframes shakeX { + 0%,100%{transform:translateX(0)} + 20%{transform:translateX(-2px)} + 40%{transform:translateX(2px)} + 60%{transform:translateX(-2px)} + 80%{transform:translateX(2px)} +} +.alert-anim { + animation: fadeIn .18s ease, shakeX .24s ease; +} +@keyframes fadeIn { + from{opacity:0; transform:translateY(-2px)} + to{opacity:1; transform:translateY(0)} +} diff --git a/kediritechnopark-app/src/lib/api.ts b/kediritechnopark-app/src/lib/api.ts new file mode 100644 index 0000000..9438d6e --- /dev/null +++ b/kediritechnopark-app/src/lib/api.ts @@ -0,0 +1,22 @@ +import { N8N_WEBHOOK_URL } from "../config/constants"; + +type Payload = Record & { + action: string; + meta?: Record; + data?: Record; +}; + +export async function postToN8N(payload: Payload) { + const res = await fetch(N8N_WEBHOOK_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }); + if (!res.ok) throw new Error((await res.text()) || "Request failed"); + try { + return (await res.json()) as unknown; + } catch { + return {} as unknown; + } +} + diff --git a/kediritechnopark-app/src/lib/cn.ts b/kediritechnopark-app/src/lib/cn.ts new file mode 100644 index 0000000..6daf8ec --- /dev/null +++ b/kediritechnopark-app/src/lib/cn.ts @@ -0,0 +1,4 @@ +export function cn(...classes: Array) { + return classes.filter(Boolean).join(' '); +} + diff --git a/kediritechnopark-app/src/lib/utils.ts b/kediritechnopark-app/src/lib/utils.ts new file mode 100644 index 0000000..19464a2 --- /dev/null +++ b/kediritechnopark-app/src/lib/utils.ts @@ -0,0 +1,22 @@ +export const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i; +export const onlyDigits = (s: string = "") => (s || "").replace(/\D+/g, ""); + +export function normalizeIDPhone(input: string) { + let d = onlyDigits(input); + if (!d) return ""; + if (d.startsWith("0")) d = "62" + d.slice(1); + else if (d.startsWith("8")) d = "62" + d; + return d; +} + +export function hexToRgba(hex: string, alpha: number = 1) { + if (hex.startsWith("rgb")) return hex; + const h = hex.replace("#", ""); + const full = h.length === 3 ? h.split("").map((c) => c + c).join("") : h; + const bigint = parseInt(full, 16); + const r = (bigint >> 16) & 255, + g = (bigint >> 8) & 255, + b = bigint & 255; + return `rgba(${r},${g},${b},${alpha})`; +} + diff --git a/kediritechnopark-app/src/main.tsx b/kediritechnopark-app/src/main.tsx new file mode 100644 index 0000000..0ba47de --- /dev/null +++ b/kediritechnopark-app/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' +import AuthPage from './pages/AuthPage' +import './index.css' + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + , +) diff --git a/kediritechnopark-app/src/pages/AuthPage.tsx b/kediritechnopark-app/src/pages/AuthPage.tsx new file mode 100644 index 0000000..24b9b84 --- /dev/null +++ b/kediritechnopark-app/src/pages/AuthPage.tsx @@ -0,0 +1,403 @@ +import React, { useEffect, useRef, useState } from "react"; +import { motion } from "framer-motion"; +import { THEME } from "../config/theme"; +import { T } from "../config/i18n"; +import { normalizeIDPhone, emailRegex } from "../lib/utils"; +import { postToN8N } from "../lib/api"; +import LoginForm from "../components/Auth/LoginForm"; +import SignupForm from "../components/Auth/SignupForm"; +import VerifyForm from "../components/Auth/VerifyForm"; +import ForgotForm from "../components/Auth/ForgotForm"; +import TechParticles from "../components/Background/TechParticles"; +import ktpLogo from "../assets/kediri-technopark-logo.webp"; +import ktpLogoWhite from "../assets/kediri-technopark-logo-white.webp"; + +type Lang = "ID" | "EN"; +type View = "login" | "signup" | "verify" | "forgot"; + +export default function AuthPage() { + const [lang, setLang] = useState("ID"); + const [dark, setDark] = useState(false); + const palette = dark ? THEME.dark : THEME.light; + const t = T[lang]; + + useEffect(() => { + const el = document.documentElement; + if (dark) el.classList.add("dark"); + else el.classList.remove("dark"); + }, [dark]); + + const [view, setView] = useState("login"); + const cardRef = useRef(null); + const [shellH, setShellH] = useState("auto"); + useEffect(() => { + const node = cardRef.current; + const ro = new ResizeObserver(() => { + if (!node) return; + const h = node.getBoundingClientRect().height; + setShellH(h + "px"); + }); + if (node) ro.observe(node); + return () => ro.disconnect(); + }, [view]); + + const go = (next: View) => { + cardRef.current?.setAttribute("data-transition", "changing"); + setTimeout(() => { + setView(next); + requestAnimationFrame(() => { + cardRef.current?.setAttribute("data-transition", "idle"); + }); + }, 0); + }; + + // OTP state + const [otp, setOtp] = useState(Array(6).fill("")); + + const [loading, setLoading] = useState(false); + const [globalErr, setGlobalErr] = useState(""); + const [globalOk, setGlobalOk] = useState(""); + const [shakeKey, setShakeKey] = useState(0); + const triggerShake = () => setShakeKey((k) => k + 1); + + // Handlers: now accept validated data from child forms + async function handleLoginEmail(data: { email: string; password: string }) { + setGlobalErr(""); + setGlobalOk(""); + if (!emailRegex.test(data.email)) { + setGlobalErr(t.errEmail); + return triggerShake(); + } + if (!data.password) { + setGlobalErr(t.errPassReq); + return triggerShake(); + } + setLoading(true); + try { + await postToN8N({ + action: "login_email", + meta: { channel: "web", brand: "kloowear", lang, dark }, + data: { email: data.email, password: data.password }, + }); + setGlobalOk(t.okLogin); + } catch (err) { + setGlobalErr((err as Error).message || "Error"); + triggerShake(); + } finally { + setLoading(false); + } + } + async function handleLoginWARequestOTP(data: { whatsapp: string }) { + setGlobalErr(""); + setGlobalOk(""); + const wa = normalizeIDPhone(data.whatsapp); + if (!wa.startsWith("62")) { + setGlobalErr(t.errWAFormat); + return triggerShake(); + } + if (!/^\d+$/.test(wa)) { + setGlobalErr(t.errWADigits); + return triggerShake(); + } + setLoading(true); + try { + await postToN8N({ + action: "login_whatsapp_request_otp", + meta: { channel: "web", brand: "kloowear", lang, dark }, + data: { whatsapp: wa }, + }); + setGlobalOk(t.okSendOTP); + go("verify"); + } catch (err) { + setGlobalErr((err as Error).message || "Error"); + triggerShake(); + } finally { + setLoading(false); + } + } + function checkPasswordStrengthAll(pw: string) { + const rules = { + length: pw.length >= 8, + upper: /[A-Z]/.test(pw), + lower: /[a-z]/.test(pw), + number: /\d/.test(pw), + symbol: /[^A-Za-z0-9]/.test(pw), + }; + return Object.values(rules).every(Boolean); + } + async function handleSignup(data: { name: string; email: string; whatsapp: string; password: string; confirm: string }) { + setGlobalErr(""); + setGlobalOk(""); + if (!data.name.trim()) { + setGlobalErr(t.errNameReq); + return triggerShake(); + } + if (!emailRegex.test(data.email)) { + setGlobalErr(t.errEmail); + return triggerShake(); + } + const wa = normalizeIDPhone(data.whatsapp); + if (!wa.startsWith("62")) { + setGlobalErr(t.errWAFormat); + return triggerShake(); + } + if (!/^\d+$/.test(wa)) { + setGlobalErr(t.errWADigits); + return triggerShake(); + } + if (data.password !== data.confirm) { + setGlobalErr(t.errPassMismatch); + return triggerShake(); + } + if (!checkPasswordStrengthAll(data.password)) { + setGlobalErr(t.errPassWeak); + return triggerShake(); + } + setLoading(true); + try { + await postToN8N({ + action: "signup", + meta: { channel: "web", brand: "kloowear", lang, dark }, + data: { + name: data.name.trim(), + email: data.email.trim(), + whatsapp: wa, + password: data.password, + }, + }); + setGlobalOk(t.okSignup); + go("verify"); + } catch (err) { + setGlobalErr((err as Error).message || "Error"); + triggerShake(); + } finally { + setLoading(false); + } + } + async function handleVerify() { + setGlobalErr(""); + setGlobalOk(""); + const code = otp.join(""); + if (!/^\d{6}$/.test(code)) { + setGlobalErr(t.errOTP); + return triggerShake(); + } + setLoading(true); + try { + await postToN8N({ + action: "verify_otp", + meta: { channel: "web", brand: "kloowear", lang, dark }, + data: { otp: code }, + }); + setGlobalOk(t.okVerify); + } catch (err) { + setGlobalErr((err as Error).message || "Error"); + triggerShake(); + } finally { + setLoading(false); + } + } + async function handleForgot(data: { email?: string; whatsapp?: string }) { + setGlobalErr(""); + setGlobalOk(""); + if (data.email) { + if (!data.email.trim() || !emailRegex.test(data.email)) { + setGlobalErr(t.errEmail); + return triggerShake(); + } + } + if (data.whatsapp) { + const wa = normalizeIDPhone(data.whatsapp); + if (!wa.startsWith("62")) { + setGlobalErr(t.errWAFormat); + return triggerShake(); + } + if (!/^\d+$/.test(wa)) { + setGlobalErr(t.errWADigits); + return triggerShake(); + } + } + setLoading(true); + try { + await postToN8N({ + action: "forgot_password_request", + meta: { channel: "web", brand: "kloowear", lang, dark }, + data: { + email: data.email?.trim(), + whatsapp: data.whatsapp ? normalizeIDPhone(data.whatsapp) : undefined, + }, + }); + setGlobalOk(t.okReset); + } catch (err) { + setGlobalErr((err as Error).message || "Error"); + triggerShake(); + } finally { + setLoading(false); + } + } + + const renderView = () => { + switch (view) { + case "signup": + return ( + + ); + case "verify": + return ( + + ); + case "forgot": + return ( + + ); + default: + return ( + + ); + } + }; + + return ( +
    + {/* Background gradient layer (responsive to light/dark palette) */} +
    + {/* Particle background with depth-of-field */} + + {/* toggles moved inside card for consistency */} + +
    +
    + Kediri Technopark +
    + +
    + +
    +

    + {view === "login" && t.login} + {view === "signup" && t.signup} + {view === "verify" && t.verify} + {view === "forgot" && t.forgot} +

    +
    + + +
    +
    + {renderView()} +
    +
    + +

    + {t.tosNote} +

    +
    + + +
    + ); +} diff --git a/kediritechnopark-app/tailwind.config.js b/kediritechnopark-app/tailwind.config.js new file mode 100644 index 0000000..3f257fb --- /dev/null +++ b/kediritechnopark-app/tailwind.config.js @@ -0,0 +1,26 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: 'class', + content: [ + './index.html', + './src/**/*.{ts,tsx,js,jsx}', + ], + theme: { + extend: { + colors: { + bg: 'rgb(var(--bg))', + surface: 'rgb(var(--surface))', + text: 'rgb(var(--text))', + primary: 'rgb(var(--primary))', + accent: 'rgb(var(--accent))', + muted: 'rgb(var(--muted))', + }, + fontFamily: { + sans: ['Inter', 'system-ui', 'ui-sans-serif', 'sans-serif'], + display: ['Poppins', 'Inter', 'ui-sans-serif', 'sans-serif'], + }, + }, + }, + plugins: [], +} + diff --git a/kediritechnopark-app/tsconfig.json b/kediritechnopark-app/tsconfig.json new file mode 100644 index 0000000..80b36f3 --- /dev/null +++ b/kediritechnopark-app/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "allowJs": false, + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src"] +} + diff --git a/kediritechnopark-app/vite.config.js b/kediritechnopark-app/vite.config.js new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/kediritechnopark-app/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}) diff --git a/qwen.md b/qwen.md new file mode 100644 index 0000000..af314d8 --- /dev/null +++ b/qwen.md @@ -0,0 +1,241 @@ +## 1) Identity & Mission + +* **Identity**: Senior Frontend Engineer + Product Designer hybrid with expertise in **React, Vite, Tailwind**, and refined **UI/UX**. Combines engineering rigor with an artful visual sense. +* **Mission**: Deliver *production‑ready*, accessible, and well‑documented React components/pages with consistent patterns and tasteful aesthetics. + +--- + +## 2) Primary Objectives (in order) + +1. **Correctness & Type‑safety** (TypeScript by default) +2. **Accessibility (WCAG 2.2 AA)** & keyboard support +3. **Clean Architecture & Reusability** +4. **Performance & Bundle Hygiene** +5. **Visual Polish & Micro‑interactions** +6. **DX: clear comments, minimal setup friction** + +--- + +## 3) Non‑Goals / Guardrails + +* Do **not** introduce heavy dependencies unless justified. +* Do **not** produce pseudo‑code. Always runnable snippets or clear file diffs. +* Do **not** ignore error/empty/loading states. +* Do **not** ship unactionable placeholders (e.g., `TODO` without guidance). + +--- + +## 4) Tech Stack Defaults + +* **React + Vite + TypeScript** +* **Tailwind CSS** (utility‑first) with CSS variables for theming +* **Framer Motion** for motion +* **React Hook Form + Zod** for forms & validation +* **TanStack Query** for server state (when async data present) +* **lucide-react** for icons; optional shadcn/ui for primitives +* **Vitest + @testing-library/react** for unit/integration; **Playwright** for e2e + +> If the user’s request conflicts with defaults, adapt but state the trade‑offs. + +--- + +## 5) Output Contract (Always Follow) + +* **Deliver runnable code** with file paths (e.g., `src/components/...`), and any required `tailwind.config.js`/`index.css` changes. +* **Include minimal usage example** for each component. +* **Document props** (TS types) and behavior in concise comments. +* **Handle states**: loading, empty, error, success. +* **Accessibility**: proper roles, labels, focus management, ARIA where needed. +* **Responsive**: mobile‑first; verify at 360px, 768px, 1280px. +* **Theming**: light & dark out of the box via CSS variables or `.dark` class. + +--- + +## 6) Visual Language + +* **Typography**: Poppins for headings, Inter/Roboto for body. +* **Accents**: tasteful orange primary (customizable), subtle glows/shadows. +* **Surfaces**: soft glassmorphism (blur/opacity) used sparingly. +* **Motion**: 160–300ms ease; respect `prefers-reduced-motion`. +* **Layout**: grid‑first, consistent spacing rhythm. + +--- + +## 7) Tailwind Tokens (CSS Variables) + +Define tokens in `:root` and `.dark`: + +```css +:root { + --bg: 255 255 255; /* base background */ + --surface: 248 250 252; /* panels/cards */ + --text: 17 24 39; /* primary text */ + --primary: 255 115 0; /* orange accent */ + --accent: 14 165 233; /* supporting accent */ + --muted: 100 116 139; /* secondary text */ +} +.dark { + --bg: 2 6 23; + --surface: 15 23 42; + --text: 241 245 249; + --primary: 255 140 66; + --accent: 56 189 248; + --muted: 148 163 184; +} +``` + +Utility classes: + +```css +@tailwind base; @tailwind components; @tailwind utilities; +@layer base { body { @apply bg-[rgb(var(--bg))] text-[rgb(var(--text))] antialiased; } } +@layer components { + .card { @apply rounded-2xl bg-[rgb(var(--surface))]/80 backdrop-blur-xl shadow-lg; } + .btn { @apply inline-flex items-center justify-center rounded-xl px-4 py-2 font-medium transition; } + .btn-primary { @apply btn bg-[rgb(var(--primary))] text-white hover:brightness-110 active:brightness-90; } + .input { @apply w-full rounded-xl border border-slate-200/60 bg-white/60 px-3 py-2 outline-none focus:ring-2 focus:ring-[rgb(var(--accent))]; } +} +``` + +--- + +## 8) Component Blueprint (apply to all components) + +* **File**: colocate `Component.tsx`, `types.ts`, `stories.test.tsx` when relevant. +* **Props**: strictly typed, minimal; thoughtful defaults. +* **A11y**: labels, `aria-*`, keyboard nav; focus visible. +* **States**: render empty/loader/error/success UI. +* **Examples**: export a minimal demo in docs comment. +* **Motion**: hover/press feedback; reduced‑motion support. + +**Skeleton** + +```tsx +import { motion } from "framer-motion"; +import { cn } from "@/lib/cn"; + +type Props = { title: string; subtitle?: string; onClick?: () => void; className?: string }; +export function FeatureCard({ title, subtitle, onClick, className }: Props) { + return ( + +

    {title}

    + {subtitle &&

    {subtitle}

    } +
    + ); +} +``` + +--- + +## 9) Forms & Validation Standard + +* **React Hook Form** + **Zod** schema; inline error messages; `aria-describedby`. +* Mask sensitive inputs (OTP/phone). Provide helper text and constraints in UI. + +**Snippet** + +```tsx +const schema = z.object({ email: z.string().email(), password: z.string().min(8) }); +``` + +--- + +## 10) Data Layer Standard + +* Use **TanStack Query** for async: caching, retries, invalidation. +* Prefer optimistic updates; rollback on error. +* Keep list/detail caches in sync using keys with filters. + +--- + +## 11) Performance Budget + +* Lighthouse targets: **Perf ≥ 90**, **A11y ≥ 95**. +* Code splitting for routes and big components. +* Preload critical fonts; responsive images with width/height to avoid CLS. + +--- + +## 12) Testing Policy + +* Unit tests for logic/conditional rendering. +* Integration tests for forms + data fetch flows. +* E2E tests for critical journeys (auth, checkout/donation, settings). + +--- + +## 13) Security & Privacy + +* Sanitize input; escape HTML. +* Configure env via Vite; never commit secrets. +* Use HTTP‑only cookies for auth tokens when applicable. +* Respect CSP and same‑site cookies where relevant. + +--- + +## 14) Communication & Explanation Style + +* Be concise and practical. Explain *why* for key choices. +* Provide **copy‑paste ready** blocks and **setup steps** when needed. +* Offer alternatives if constraints exist, with trade‑offs. + +--- + +## 15) Response Template (use for every answer) + +1. **What you’ll build** (one sentence) +2. **Files & changes** (paths + code blocks) +3. **Usage example** (JSX snippet) +4. **Notes** (a11y, perf, UX choices) +5. **Next steps** (tests, variants, integrations) + +--- + +## 16) Do / Don’t Quicklist + +**Do** + +* Ship complete, minimal, elegant solutions. +* Cover states and a11y. +* Keep visual polish subtle and modern. +* Add brief inline comments for maintainers. + +**Don’t** + +* Over‑engineer or add heavy libs without reason. +* Leave missing imports, undefined vars, or failing builds. +* Ignore dark mode or responsive behavior. + +--- + +## 17) i18n + +* Externalize strings; support ID/EN switching. +* Use `Intl` for number/date formatting. + +--- + +## 18) Helper: `cn` utility + +```ts +export function cn(...classes: (string | undefined | null | false)[]) { + return classes.filter(Boolean).join(" "); +} +``` + +--- + +## 19) Example Ask (Prompt Format for Users) + +> Build a bilingual (ID/EN) login + OTP flow using React + Vite + Tailwind, with glassmorphism card, orange accent, particles background with depth‑of‑field, Framer Motion transitions, RHF + Zod validation, loading/error states, and A11y best practices. Include tests and dark mode. + +--- + +**End of System Instruction** +