From 8ca609a8897203abd60355c9c691fa006ce8d22c Mon Sep 17 00:00:00 2001 From: pkupuk Date: Wed, 11 Feb 2026 11:50:04 +0800 Subject: [PATCH] chore(infra): update build config and deployment scripts Update Docker configurations, nginx setup, and shared design tokens. Refresh lockfile. --- Dockerfile.backend | 58 ++ Dockerfile.frontend | 30 + branding.json | 85 +++ design-tokens.css | 160 +++++ docker-build-push.sh | 89 +++ docker-compose.coolify.yml | 49 ++ docker-compose.yml | 66 ++ nginx.conf | 27 + packages/shared/tailwind-config.mjs | 300 +++++++++ pnpm-lock.yaml | 931 ++++++++++++++++++++++++++-- 10 files changed, 1737 insertions(+), 58 deletions(-) create mode 100644 Dockerfile.backend create mode 100644 Dockerfile.frontend create mode 100644 branding.json create mode 100644 design-tokens.css create mode 100755 docker-build-push.sh create mode 100644 docker-compose.coolify.yml create mode 100644 docker-compose.yml create mode 100644 nginx.conf create mode 100644 packages/shared/tailwind-config.mjs diff --git a/Dockerfile.backend b/Dockerfile.backend new file mode 100644 index 0000000..ab895b2 --- /dev/null +++ b/Dockerfile.backend @@ -0,0 +1,58 @@ +# Payload CMS Dockerfile - Minimal ~200MB build +# Uses node-linker=hoisted to avoid pnpm symlinks in standalone output + +# Stage 1: Build +FROM node:22-alpine AS builder + +WORKDIR /app + +# Install pnpm +RUN corepack enable && corepack prepare pnpm@10.17.0 --activate + +# Copy workspace files +COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ +COPY apps/backend/package.json ./apps/backend/ +COPY packages/shared/package.json ./packages/shared/ + +# Install dependencies with hoisted node_modules (no symlinks) +# This makes standalone output work correctly +RUN pnpm install --frozen-lockfile --config.node-linker=hoisted + +# Copy source files +COPY apps/backend ./apps/backend +COPY packages/shared ./packages/shared + +# Build Next.js with standalone output +WORKDIR /app/apps/backend +RUN pnpm run build + +# Stage 2: Production (minimal image) +FROM node:22-alpine AS runner + +# Monorepo standalone structure: server.js is at apps/backend/server.js +WORKDIR /app/apps/backend + +ENV NODE_ENV=production +ENV PORT=3000 + +# Combine user creation into single layer +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs + +# Copy standalone (preserves monorepo structure with node_modules at root) +COPY --from=builder --chown=nextjs:nodejs /app/apps/backend/.next/standalone ./../../ + +# Copy static assets (not included in standalone by default) +COPY --from=builder --chown=nextjs:nodejs /app/apps/backend/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/apps/backend/public ./public + +USER nextjs + +EXPOSE 3000 + +# Health check for container orchestration +HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ + CMD node -e "require('http').get('http://localhost:3000/', (r) => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))" || exit 1 + +# Monorepo path: server.js is at /app/apps/backend/server.js +CMD ["node", "server.js"] diff --git a/Dockerfile.frontend b/Dockerfile.frontend new file mode 100644 index 0000000..9f43dcd --- /dev/null +++ b/Dockerfile.frontend @@ -0,0 +1,30 @@ +# Frontend Dockerfile - Multi-stage build +FROM node:18-alpine AS builder + +WORKDIR /app + +# Install pnpm +RUN npm install -g pnpm + +# Copy package files +COPY package.json pnpm-lock.yaml ./ +RUN pnpm install --frozen-lockfile + +# Copy source and build +COPY . . +RUN pnpm run build + +# Production stage - nginx for static site +FROM nginx:alpine AS production + +# Copy built files from builder stage +COPY --from=builder /app/dist /usr/share/nginx/html + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Expose port +EXPOSE 4321 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"] diff --git a/branding.json b/branding.json new file mode 100644 index 0000000..a92e293 --- /dev/null +++ b/branding.json @@ -0,0 +1,85 @@ +{ + "colorScheme": "light", + "fonts": [ + { + "family": "sans-serif", + "count": 73 + }, + { + "family": "Noto Sans TC", + "count": 68 + }, + { + "family": "Quicksand", + "count": 5 + } + ], + "colors": { + "primary": "#0000EE", + "accent": "#23608C", + "background": "#F2F2F2", + "textPrimary": "#23608C", + "link": "#23608C" + }, + "typography": { + "fontFamilies": { + "primary": "Noto Sans TC", + "heading": "Noto Sans TC" + }, + "fontStacks": { + "body": [ + "Noto Sans TC", + "sans-serif" + ], + "heading": [ + "Noto Sans TC", + "sans-serif" + ], + "paragraph": [ + "Quicksand", + "sans-serif" + ] + }, + "fontSizes": { + "h1": "64.41px", + "h2": "46px", + "body": "29.64px" + } + }, + "spacing": { + "baseUnit": 8, + "borderRadius": "0px" + }, + "components": {}, + "images": { + "logo": "https://cdn.prod.website-files.com/61f24aa108528b1962942c95/61f24aa108528b3886942cba_enchun.svg", + "favicon": "https://cdn.prod.website-files.com/61f24aa108528b1962942c95/6200ec44d8b8b96d8b782995_enchun%20ico-.png", + "ogImage": "https://cdn.prod.website-files.com/61f24aa108528b1962942c95/61f6972f64ea04254d02b655_Enchun%20digital%20marketing.png" + }, + "__framework_hints": [ + "Webflow" + ], + "__llm_logo_reasoning": { + "selectedIndex": 1, + "reasoning": "Strong indicators: header logo linking to homepage, header location, visible, class contains logo, reasonable size. Score: 95 (clear winner by 35 points)", + "confidence": 0.9 + }, + "__llm_button_reasoning": { + "primary": { + "index": -1, + "text": "N/A", + "reasoning": "LLM failed" + }, + "secondary": { + "index": -1, + "text": "N/A", + "reasoning": "LLM failed" + }, + "confidence": 0 + }, + "confidence": { + "buttons": 0, + "colors": 0, + "overall": 0 + } +} \ No newline at end of file diff --git a/design-tokens.css b/design-tokens.css new file mode 100644 index 0000000..fb14459 --- /dev/null +++ b/design-tokens.css @@ -0,0 +1,160 @@ +/** + * Design Tokens for enchun.tw + * Generated from branding.json + */ + +:root { + /* ======================================== + Color Tokens + ======================================== */ + + /* Primary Colors */ + --color-primary: #0000EE; + --color-accent: #23608C; + + /* Background Colors */ + --color-background: #F2F2F2; + --color-background-light: #FFFFFF; + --color-background-dark: #E5E5E5; + + /* Text Colors */ + --color-text-primary: #23608C; + --color-text-secondary: #666666; + --color-text-muted: #999999; + + /* Link Colors */ + --color-link: #23608C; + --color-link-hover: #1A4A6A; + --color-link-visited: #0000EE; + + /* ======================================== + Typography Tokens + ======================================== */ + + /* Font Families */ + --font-family-primary: 'Noto Sans TC', sans-serif; + --font-family-heading: 'Noto Sans TC', sans-serif; + --font-family-paragraph: 'Quicksand', sans-serif; + --font-family-body: 'Noto Sans TC', sans-serif; + + /* Font Stacks (fallbacks included) */ + --font-stack-body: 'Noto Sans TC', sans-serif; + --font-stack-heading: 'Noto Sans TC', sans-serif; + --font-stack-paragraph: 'Quicksand', sans-serif; + + /* Font Sizes */ + --font-size-h1: 64.41px; + --font-size-h2: 46px; + --font-size-h3: 32px; + --font-size-h4: 24px; + --font-size-body: 29.64px; + --font-size-small: 14px; + --font-size-xs: 12px; + + /* Font Weights */ + --font-weight-regular: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + + /* Line Heights */ + --line-height-tight: 1.2; + --line-height-normal: 1.5; + --line-height-relaxed: 1.75; + + /* ======================================== + Spacing Tokens + ======================================== */ + + /* Base Unit: 8px */ + --spacing-unit: 8px; + + /* Spacing Scale */ + --spacing-0: 0; + --spacing-1: 8px; /* 1 unit */ + --spacing-2: 16px; /* 2 units */ + --spacing-3: 24px; /* 3 units */ + --spacing-4: 32px; /* 4 units */ + --spacing-5: 40px; /* 5 units */ + --spacing-6: 48px; /* 6 units */ + --spacing-8: 64px; /* 8 units */ + --spacing-10: 80px; /* 10 units */ + --spacing-12: 96px; /* 12 units */ + --spacing-16: 128px; /* 16 units */ + + /* ======================================== + Border Tokens + ======================================== */ + + --border-radius-none: 0px; + --border-radius-sm: 4px; + --border-radius-md: 8px; + --border-radius-lg: 16px; + --border-radius-full: 9999px; + + /* Default border radius from branding */ + --border-radius: 0px; + + --border-width-thin: 1px; + --border-width-medium: 2px; + --border-width-thick: 4px; + + /* ======================================== + Shadow Tokens + ======================================== */ + + --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); + --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); + + /* ======================================== + Transition Tokens + ======================================== */ + + --transition-fast: 150ms ease; + --transition-normal: 250ms ease; + --transition-slow: 400ms ease; + + /* ======================================== + Z-Index Tokens + ======================================== */ + + --z-index-dropdown: 100; + --z-index-sticky: 200; + --z-index-fixed: 300; + --z-index-modal-backdrop: 400; + --z-index-modal: 500; + --z-index-popover: 600; + --z-index-tooltip: 700; + + /* ======================================== + Asset URLs + ======================================== */ + + --url-logo: url('https://cdn.prod.website-files.com/61f24aa108528b1962942c95/61f24aa108528b3886942cba_enchun.svg'); + --url-favicon: url('https://cdn.prod.website-files.com/61f24aa108528b1962942c95/6200ec44d8b8b96d8b782995_enchun%20ico-.png'); + --url-og-image: url('https://cdn.prod.website-files.com/61f24aa108528b1962942c95/61f6972f64ea04254d02b655_Enchun%20digital%20marketing.png'); +} + +/* ======================================== + Color Scheme: Light (default) + ======================================== */ + +[data-theme="light"], +:root { + color-scheme: light; +} + +/* ======================================== + Dark Mode Override (optional) + ======================================== */ + +[data-theme="dark"] { + --color-background: #1a1a1a; + --color-background-light: #2d2d2d; + --color-background-dark: #0d0d0d; + --color-text-primary: #e0e0e0; + --color-text-secondary: #b0b0b0; + --color-text-muted: #808080; +} diff --git a/docker-build-push.sh b/docker-build-push.sh new file mode 100755 index 0000000..eba2bee --- /dev/null +++ b/docker-build-push.sh @@ -0,0 +1,89 @@ +#!/bin/bash +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo -e "${GREEN}=== Enchun Docker Build & Push ===${NC}" +echo "" + +# Configuration +IMAGE_PREFIX="${DOCKER_USERNAME:-pukpuklouis}" +BACKEND_IMAGE="${IMAGE_PREFIX}/website-enchun-cms" +FRONTEND_IMAGE="${IMAGE_PREFIX}/website-enchun-web" + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo -e "${RED}Error: Docker is not installed or not running${NC}" + exit 1 +fi + +# Check if logged in to Docker Hub +if ! docker info | grep -q "Username"; then + echo -e "${YELLOW}Warning: Not logged in to Docker Hub${NC}" + echo -e "Please run: ${GREEN}docker login${NC}" + exit 1 +fi + +# Function to build and push image +build_and_push() { + local service=$1 + local image=$2 + local dockerfile=$3 + local context=$4 + + echo -e "${YELLOW}Building ${service}...${NC}" + echo -e " Dockerfile: ${dockerfile}" + echo -e " Context: ${context}" + docker build -t "${image}" -f "${dockerfile}" "${context}" + + if [ $? -ne 0 ]; then + echo -e "${RED}Error: Failed to build ${service}${NC}" + exit 1 + fi + + echo -e "${YELLOW}Pushing ${image}...${NC}" + docker push "${image}" + + if [ $? -ne 0 ]; then + echo -e "${RED}Error: Failed to push ${image}${NC}" + exit 1 + fi + + echo -e "${GREEN}✓ ${service} built and pushed successfully${NC}" +} + +# Main menu +echo "Select option:" +echo "1) Build and push frontend only" +echo "2) Build and push backend only" +echo "3) Build and push both" +echo "4) Exit" +echo "" +read -p "Enter choice: " choice + +case $choice in + 1) + build_and_push "frontend" "${FRONTEND_IMAGE}" "Dockerfile.frontend" "." + ;; + 2) + build_and_push "backend" "${BACKEND_IMAGE}" "Dockerfile.backend" "." + ;; + 3) + build_and_push "frontend" "${FRONTEND_IMAGE}" "Dockerfile.frontend" "." + build_and_push "backend" "${BACKEND_IMAGE}" "Dockerfile.backend" "." + ;; + 4) + echo "Exiting..." + exit 0 + ;; + *) + echo -e "${RED}Invalid option${NC}" + exit 1 + ;; +esac + +echo -e "${GREEN}=== Done ===${NC}" diff --git a/docker-compose.coolify.yml b/docker-compose.coolify.yml new file mode 100644 index 0000000..75a992d --- /dev/null +++ b/docker-compose.coolify.yml @@ -0,0 +1,49 @@ +# Docker Compose for Coolify deployment +# Use this for "Docker Compose" deployment type in Coolify + +services: + enchun-cms: + image: pukpuklouis/website-enchun-cms:latest + container_name: enchun-cms + restart: unless-stopped + + environment: + - NODE_ENV=production + - PORT=3000 # Explicitly set to match EXPOSE + - DATABASE_URI=${DATABASE_URI} + - PAYLOAD_SECRET=${PAYLOAD_SECRET} + - NEXT_PUBLIC_SERVER_URL=${NEXT_PUBLIC_SERVER_URL:-https://enchun-admin.anlstudio.cc} + + # Expose port 3000 (matches Next.js default) + expose: + - "3000" + + # Health check + healthcheck: + test: + [ + "CMD", + "node", + "-e", + "require('http').get('http://localhost:3000/', (r) => process.exit(r.statusCode < 500 ? 0 : 1)).on('error', () => process.exit(1))", + ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + + # Traefik labels for routing + labels: + - "traefik.enable=true" + - "traefik.http.routers.enchun-cms.rule=Host(`enchun-admin.anlstudio.cc`)" + - "traefik.http.routers.enchun-cms.entrypoints=http" + - "traefik.http.services.enchun-cms.loadbalancer.server.port=3000" + - "traefik.http.middlewares.enchun-gzip.compress=true" + - "traefik.http.routers.enchun-cms.middlewares=enchun-gzip" + + networks: + - coolify + +networks: + coolify: + external: true diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1133ccf --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,66 @@ +version: '3.8' + +services: + # Frontend (Astro) - Static site served with nginx + frontend: + build: + context: ./apps/frontend + dockerfile: Dockerfile.frontend + image: enchun-frontend:latest + container_name: enchun-frontend + ports: + - "4321:4321" + networks: + - enchun-network + environment: + - NODE_ENV=production + + # Backend (Payload CMS) + backend: + build: + context: ./apps/backend + dockerfile: Dockerfile.backend + image: enchun-backend:latest + container_name: enchun-backend + ports: + - "3000:3000" + environment: + # Database + - DATABASE_URI=${DATABASE_URI} + # Payload + - PAYLOAD_CMS_URL=http://localhost:3000 + - PAYLOAD_SECRET=${PAYLOAD_SECRET} + - NEXT_PUBLIC_SERVER_URL=${NEXT_PUBLIC_SERVER_URL} + # Preview + - PREVIEW_SECRET=${PREVIEW_SECRET} + # Resend + - RESEND_API_KEY=${RESEND_API_KEY} + - RESEND_FROM_EMAIL=${RESEND_FROM_EMAIL} + # R2 + - R2_ACCESS_KEY_ID=${R2_ACCESS_KEY_ID} + - R2_ACCOUNT_ID=${R2_ACCOUNT_ID} + - R2_BUCKET=${R2_BUCKET} + - R2_SECRET_ACCESS_KEY=${R2_SECRET_ACCESS_KEY} + # Velcer + - VERCEL_PROJECT_PRODUCTION_URL=${VERCEL_PROJECT_PRODUCTION_URL} + # Node options + - NODE_OPTIONS=--no-deprecation + networks: + - enchun-network + depends_on: + - frontend + + # Optional: MongoDB (if you need a containerized database) + # mongodb: + # image: mongo:7 + # container_name: enchun-mongodb + # ports: + # - "27017:27017" + # volumes: + # - mongodb_data:/data/db + # networks: + # - enchun-network + +networks: + enchun-network: + driver: bridge diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..c0a2f5e --- /dev/null +++ b/nginx.conf @@ -0,0 +1,27 @@ +server { + listen 4321; + server_name _; + root /usr/share/nginx/html; + + # Gzip compression + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/rss+xml text/x-component text/x-cross-domain-policy; + + # Cache static assets + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public"; + } + + location / { + try_files $uri $uri/ /index.html; + } + + # Security headers + add_header X-Frame-Options "SAMEORIGIN"; + add_header X-Content-Type-Options "nosniff"; + add_header X-XSS-Protection "1; mode=block"; +} diff --git a/packages/shared/tailwind-config.mjs b/packages/shared/tailwind-config.mjs new file mode 100644 index 0000000..cd933e5 --- /dev/null +++ b/packages/shared/tailwind-config.mjs @@ -0,0 +1,300 @@ +/** + * Shared Tailwind CSS Configuration + * Designed for Enchun Digital Marketing website migration + * + * Source: Webflow CSS extraction + * Date: 2026-01-31 + */ + +/** @type {import('tailwindcss').Config} */ +const config = { + darkMode: 'class', // Can use 'media' preference-based later + content: [], + theme: { + extend: { + // ============================================ + // 🎨 COLORS - From Webflow Extraction + // ============================================ + + colors: { + // Primary Colors (主要色) + primary: { + DEFAULT: '#3898EC', + dark: '#0082F3', + light: '#67AEE1', + hover: '#2895F7', + DEFAULTContrast: '#FFFFFF', + }, + secondary: { + DEFAULT: '#F39C12', + light: '#F6C456', + dark: '#D84038', + hover: '#E08E0B', + }, + accent: { + DEFAULT: '#D84038', + light: '#F6C456', + dark: '#EA384C', + }, + + // Neutral Colors (中性色 - Mapped to Tailwind defaults) + white: '#FFFFFF', + black: '#000000', + slate: { + 50: '#FAFAFA', // --color-gray-50 + 100: '#F5F5F5', // --color-gray-100 + 200: '#F3F3F3', // --color-gray-200 + 300: '#EEEEEE', // --color-gray-300 + 400: '#DDDDDD', // --color-gray-400 + 500: '#C8C8C8', // --color-gray-500 + 600: '#999999', // --color-gray-600 (text-muted) + 700: '#828282', // --color-gray-700 + 800: '#758696', // --color-gray-800 + 900: '#5D6C7B', // --color-gray-900 + 950: '#4F4F4F', // --color-gray-950 + }, + + // Text Colors (文字色) + text: { + primary: '#333333', // --color-text-primary + secondary: '#222222', // --color-text-secondary + muted: '#999999', // --color-text-muted + light: '#758696', // --color-text-light + inverse: '#FFFFFF', // --color-text-inverse + }, + + // Link Colors (連結色) + link: { + DEFAULT: '#3083BF', + hover: '#23608C', + }, + + // Border & Divider (邊框與分隔線) + border: '#E2E8F0', + divider: '#DDDDDD', + + // Category Colors (文章分類) + category: { + google: '#67AEE1', // Google小學堂 + meta: '#8974DE', // Meta小學堂 + news: '#3083BF', // 行銷時事最前線 + enchun: '#3898EC', // 恩群數位最新公告 + }, + + // Badge Colors (標籤) + badge: { + hot: '#EA384C', // Hot 標籤 (紅) + new: '#67AEE1', // New 標籤 (淡藍) + }, + + // Special Colors + background: '#F2F2F2', // Grey 6 - Main background from Webflow + surface: '#FAFAFA', + surface2: '#F3F3F3', + }, + + // ============================================ + // 🔤 TYPOGRAPHY - From Webflow + // ============================================ + + fontFamily: { + sans: [ + 'Noto Sans TC', + 'Quicksand', + 'Arial', + 'sans-serif', + ], + heading: [ + 'Noto Sans TC', + 'Quicksand', + 'Arial', + 'sans-serif', + ], + accent: [ + 'Quicksand', + 'Noto Sans TC', + 'sans-serif', + ], + }, + + fontSize: { + // Webflow-based scale + 'xs': ['0.75rem', { lineHeight: '1.5' }], // 12px + 'sm': ['0.875rem', { lineHeight: '1.5' }], // 14px + 'base': ['1rem', { lineHeight: '1.5' }], // 16px + 'lg': ['1.125rem', { lineHeight: '1.5' }], // 18px + 'xl': ['1.25rem', { lineHeight: '1.5' }], // 20px + '2xl': ['1.5rem', { lineHeight: '1.5' }], // 24px + '3xl': ['1.875rem', { lineHeight: '1.5' }], // 30px + '4xl': ['2.25rem', { lineHeight: '1.5' }], // 36px + '5xl': ['3rem', { lineHeight: '1.5' }], // 48px + // Extra sizes + '6xl': ['3.75rem', { lineHeight: '1' }], // 60px + '7xl': ['4.5rem', { lineHeight: '1' }], // 72px + }, + + fontWeight: { + light: '300', + normal: '400', + medium: '500', + semibold: '600', + bold: '700', + }, + + lineHeight: { + tight: '1.25', + snug: '1.375', + normal: '1.5', + relaxed: '1.625', + loose: '2', + }, + + // ============================================ + // 📏 SPACING - Tailwind Default + Custom + // ============================================ + + spacing: { + '18': '4.5rem', // 72px - container padding + '20': '5rem', // 80px - section padding + '24': '6rem', // 96px - large section + '32': '8rem', // 128px - extra large section + }, + + // ============================================ + // 📱 BREAKPOINTS - Webflow Original + // ============================================ + + screens: { + // Webflow breakpoints (max-width based) + 'xs': '479px', // < 479px (small mobile) + 'sm': '640px', // 640px+ (mobile landscape) + 'md': '768px', // 768px+ (tablet) + 'lg': '992px', // 992px+ (desktop - matches 991px closely) + 'xl': '1024px', // 1024px+ (large desktop) + '2xl': '1280px', // 1280px+ (xlarge desktop) + '3xl': '1536px', // 1536px+ (xxlarge desktop) + }, + + // ============================================ + // 🔲 BORDER RADIUS + // ============================================ + + borderRadius: { + DEFAULT: '0.375rem', // 6px + 'none': '0', + 'sm': '0.125rem', // 2px + DEFAULT: '0.375rem', // 6px + 'md': '0.5rem', // 8px + 'lg': '0.75rem', // 12px + 'xl': '1rem', // 16px + '2xl': '1.5rem', // 24px + '3xl': '2rem', // 32px + 'full': '9999px', + }, + + // ============================================ + // 💫 SHADOWS + // ============================================ + + boxShadow: { + sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)', + DEFAULT: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px 0 rgb(0 0 0 / 0.06)', + md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', + lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)', + xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)', + '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)', + inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)', + }, + + // ============================================ + // ⏱ TRANSITIONS + // ============================================ + + transitionDuration: { + '150': '150ms', + '200': '200ms', + '250': '250ms', + '300': '300ms', + '350': '350ms', + '400': '400ms', + '500': '500ms', + '600': '600ms', + '700': '700ms', + '1000': '1000ms', + }, + + transitionTimingFunction: { + DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)', + 'in': 'cubic-bezier(0.4, 0, 1, 1)', + 'out': 'cubic-bezier(0, 0, 0.2, 1)', + 'in-out': 'cubic-bezier(0.4, 0, 0.6, 1)', + }, + + // ============================================ + // 🎯 Z-INDEX LAYERS + // ============================================ + + zIndex: { + dropdown: 1000, + sticky: 1020, + modal: 1040, + popover: 1060, + tooltip: 1080, + }, + + // ============================================ + // 📐 LAYOUT + // ============================================ + + maxWidth: { + 'container': '1200px', // Max content width + 'container-sm': '640px', + 'container-md': '768px', + 'container-lg': '1024px', + 'container-xl': '1280px', + }, + + // Container padding + padding: { + 'container': '1.5rem', // 24px mobile + 'container-lg': '2rem', // 32px desktop + }, + + // Grid (Webflow uses 12-column grid) + gridTemplateColumns: { + 12: 'repeat(12, minmax(0, 1fr))', + }, + gap: { + 'DEFAULT': '1.25rem', // 20px - Webflow grid gap + '0': '0', + 'px': '1px', + }, + + // ============================================ + // 🎨 COMPONENT SPECIFIC + // ============================================ + + // Button styles + keyframes: { + fadeIn: { + '0%': { opacity: '0' }, + '100%': { opacity: '1' }, + }, + slideUp: { + '0%': { opacity: '0', transform: 'translateY(1rem)' }, + '100%': { opacity: '1', transform: 'translateY(0)' }, + }, + }, + + animation: { + 'fade-in': 'fadeIn 150ms ease-in-out', + 'slide-up': 'slideUp 250ms ease-in-out', + }, + }, + }, + plugins: [ + require('@tailwindcss/typography'), + ], +}; + +export default config; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c72f66b..800798e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,7 +118,7 @@ importers: version: 2.6.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.19(tsx@4.20.3)(yaml@2.8.2)) + version: 1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) devDependencies: '@eslint/eslintrc': specifier: ^3.2.0 @@ -128,7 +128,7 @@ importers: version: 1.54.1 '@tailwindcss/typography': specifier: ^0.5.13 - version: 0.5.19(tailwindcss@3.4.19(tsx@4.20.3)(yaml@2.8.2)) + version: 0.5.19(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) '@testing-library/react': specifier: 16.3.0 version: 16.3.0(@testing-library/dom@10.4.1)(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -146,19 +146,28 @@ importers: version: 19.1.6(@types/react@19.1.8) '@vitejs/plugin-react': specifier: 4.5.2 - version: 4.5.2(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + version: 4.5.2(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) autoprefixer: specifier: ^10.4.19 version: 10.4.23(postcss@8.5.6) + cheerio: + specifier: ^1.2.0 + version: 1.2.0 copyfiles: specifier: ^2.4.1 version: 2.4.1 + csv-parse: + specifier: ^6.1.0 + version: 6.1.0 eslint: specifier: ^9.16.0 version: 9.39.2(jiti@1.21.7) eslint-config-next: specifier: 15.4.4 version: 15.4.4(eslint@9.39.2(jiti@1.21.7))(typescript@5.7.3) + html-parse-stringify: + specifier: ^3.0.1 + version: 3.0.1 jsdom: specifier: 26.1.0 version: 26.1.0 @@ -176,31 +185,40 @@ importers: version: 3.8.0 tailwindcss: specifier: ^3.4.3 - version: 3.4.19(tsx@4.20.3)(yaml@2.8.2) + version: 3.4.19(tsx@4.21.0)(yaml@2.8.2) + tsx: + specifier: ^4.21.0 + version: 4.21.0 typescript: specifier: 5.7.3 version: 5.7.3 vite-tsconfig-paths: specifier: 5.1.4 - version: 5.1.4(typescript@5.7.3)(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + version: 5.1.4(typescript@5.7.3)(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: 3.2.3 - version: 3.2.3(@types/debug@4.1.12)(@types/node@22.5.4)(jiti@1.21.7)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + version: 3.2.3(@types/debug@4.1.12)(@types/node@22.5.4)(jiti@1.21.7)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) apps/frontend: dependencies: '@astrojs/cloudflare': specifier: ^12.6.12 - version: 12.6.12(astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.20.3)(typescript@5.7.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + version: 12.6.12(astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.21.0)(typescript@5.7.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) '@tailwindcss/vite': specifier: ^4.1.14 - version: 4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + version: 4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) + agentation: + specifier: ^2.1.1 + version: 2.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + agentation-mcp: + specifier: ^1.1.0 + version: 1.1.0 astro: specifier: 6.0.0-beta.1 - version: 6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.20.3)(typescript@5.7.3)(yaml@2.8.2) + version: 6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.21.0)(typescript@5.7.3)(yaml@2.8.2) better-auth: specifier: ^1.3.13 - version: 1.4.15(mongodb@6.16.0(@aws-sdk/credential-providers@3.971.0))(next@15.4.4(@babel/core@7.28.6)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + version: 1.4.15(better-sqlite3@12.6.2)(mongodb@6.16.0(@aws-sdk/credential-providers@3.971.0))(next@15.4.4(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) devDependencies: '@astrojs/check': specifier: ^0.9.6 @@ -1652,6 +1670,12 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -2122,6 +2146,16 @@ packages: peerDependencies: yjs: '>=13.5.22' + '@modelcontextprotocol/sdk@1.26.0': + resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + '@monaco-editor/loader@1.7.0': resolution: {integrity: sha512-gIwR1HrJrrx+vfyOhYmCZ0/JcWqG5kbfG7+d3f/C1LXk2EvzAbHSg3MQ5lO2sMlo9izoAZ04shohfKLVT6crVA==} @@ -3487,6 +3521,10 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3515,6 +3553,22 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agentation-mcp@1.1.0: + resolution: {integrity: sha512-KhT2e+jJjBItgJ1+dlHxDsR8sLRLg9Deqhv3D2LQBidT3LlKmeiLGdmTxN/kxVA58m5EjhT9VSab9cvpc0sS7g==} + engines: {node: '>=18.0.0'} + hasBin: true + + agentation@2.1.1: + resolution: {integrity: sha512-l1XNNahitelS0FaY+2r/Drea9Y3M5P7srMfgqZkvDRDCMA7GV/hsCqK4QI+p9mfFxL7j9HmzLXD54DlOmZIhsg==} + peerDependencies: + react: '>=18.0.0' + react-dom: '>=18.0.0' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -3523,6 +3577,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -3740,13 +3802,27 @@ packages: zod: optional: true + better-sqlite3@12.6.2: + resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} + engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} @@ -3789,6 +3865,10 @@ packages: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -3854,6 +3934,13 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} + engines: {node: '>=20.18.1'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3866,6 +3953,9 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + ci-info@4.3.1: resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} engines: {node: '>=8'} @@ -3931,6 +4021,14 @@ packages: console-table-printer@2.12.1: resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -3940,6 +4038,14 @@ packages: cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} @@ -3951,6 +4057,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -4011,6 +4121,9 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + csv-parse@6.1.0: + resolution: {integrity: sha512-CEE+jwpgLn+MmtCpVcPtiCZpVtB6Z2OKPTr34pycYYoL7sxdOkXDdQ4lRiw6ioC0q6BLqhc6cKweCVvral8yhw==} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -4065,10 +4178,18 @@ packages: decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4087,6 +4208,10 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} @@ -4163,6 +4288,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.267: resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} @@ -4178,6 +4306,13 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} @@ -4193,6 +4328,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} @@ -4408,6 +4547,10 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + eventemitter3@5.0.3: resolution: {integrity: sha512-PtkOSo5xZ4pjMIIUmYh5ewu/6CFDsyGTUkfz6tJ5wyHQtcgoStS0HwCLxvCaN3shgYHaCDkKxb3ykbhcP2jTTw==} @@ -4415,10 +4558,22 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.0.6: + resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + exit-hook@2.2.1: resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} engines: {node: '>=6'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} @@ -4427,6 +4582,16 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} + express-rate-limit@8.2.1: + resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -4484,10 +4649,17 @@ packages: resolution: {integrity: sha512-mROwiKLZf/Kwa/2Rol+OOZQn1eyTkPB3ZTwC0ExY6OLFCbgxHYZvBm7xI77NvfZFMKBsmuXfmLJnD4eEftEhrA==} engines: {node: '>=18'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-node-modules@2.1.3: resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} @@ -4527,9 +4699,20 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -4596,6 +4779,9 @@ packages: get-tsconfig@4.8.1: resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -4735,6 +4921,10 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hono@4.11.8: + resolution: {integrity: sha512-eVkB/CYCCei7K2WElZW9yYQFWssG0DhaDhVvr7wy5jJ22K+ck8fWW0EsLpB0sITUTvPnc97+rrbQqIr5iqiy9Q==} + engines: {node: '>=16.9.0'} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -4742,12 +4932,22 @@ packages: html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + html-parse-stringify@3.0.1: + resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -4764,6 +4964,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4805,6 +5009,14 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + ipaddr.js@2.2.0: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} @@ -4925,6 +5137,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -5047,6 +5262,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -5296,12 +5514,20 @@ packages: mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} memory-pager@1.5.0: resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -5406,11 +5632,23 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + miniflare@4.20251118.1: resolution: {integrity: sha512-uLSAE/DvOm392fiaig4LOaatxLjM7xzIniFRG5Y3yF9IduOYLLK/pkCPQNCgKQH3ou0YJRHnTN+09LPfqYNTQQ==} engines: {node: '>=18.0.0'} @@ -5431,6 +5669,9 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -5507,6 +5748,9 @@ packages: resolution: {integrity: sha512-yJBmDJr18xy47dbNVlHcgdPrulSn1nhSE6Ns9vTG+Nx9VPT6iV1MD6aQFp/t52zpf82FhLLTXAXr30NuCnxvwA==} engines: {node: ^20.0.0 || >=22.0.0} + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -5515,6 +5759,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neotraverse@0.6.18: resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} engines: {node: '>= 10'} @@ -5551,6 +5799,10 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + node-abi@3.87.0: + resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} + engines: {node: '>=10'} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -5622,6 +5874,10 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -5680,9 +5936,19 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -5704,6 +5970,9 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5762,6 +6031,10 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + playwright-core@1.54.1: resolution: {integrity: sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==} engines: {node: '>=18'} @@ -5835,6 +6108,11 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5873,6 +6151,10 @@ packages: property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -5884,6 +6166,10 @@ packages: resolution: {integrity: sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A==} engines: {node: '>=18'} + qs@6.14.1: + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} + engines: {node: '>=0.6'} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5897,6 +6183,14 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-datepicker@7.6.0: resolution: {integrity: sha512-9cQH6Z/qa4LrGhzdc3XoHbhrxNcMi9MKjZmYgF/1MNNaJwvdSjv3Xd+jjvrEEbKEf71ZgCA3n7fQbdwd70qCRw==} peerDependencies: @@ -6118,6 +6412,10 @@ packages: rou3@0.7.12: resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -6187,6 +6485,14 @@ packages: engines: {node: '>=10'} hasBin: true + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -6202,6 +6508,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sharp@0.33.5: resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -6247,6 +6556,12 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} @@ -6296,6 +6611,10 @@ packages: state-local@1.0.7: resolution: {integrity: sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} @@ -6369,6 +6688,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -6447,6 +6770,13 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -6500,6 +6830,10 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + token-types@6.1.2: resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==} engines: {node: '>=14.16'} @@ -6564,6 +6898,14 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + turbo-darwin-64@2.5.6: resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==} cpu: [x64] @@ -6606,6 +6948,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -6661,6 +7007,10 @@ packages: resolution: {integrity: sha512-Vqs8HTzjpQXZeXdpsfChQTlafcMQaaIwnGwLam1wudSSjlJeQ3bw1j+TLPePgrCnCpUXx7Ba5Pdpf5OBih62NQ==} engines: {node: '>=20.18.1'} + undici@7.19.2: + resolution: {integrity: sha512-4VQSpGEGsWzk0VYxyB/wVX/Q7qf9t5znLRgs0dzszr9w9Fej/8RVNQ+S20vdXSAyra/bJ7ZQfGv6ZMj7UEbzSg==} + engines: {node: '>=20.18.1'} + unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -6700,6 +7050,10 @@ packages: unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -6823,6 +7177,10 @@ packages: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} hasBin: true + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -6961,6 +7319,10 @@ packages: jsdom: optional: true + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + volar-service-css@0.0.68: resolution: {integrity: sha512-lJSMh6f3QzZ1tdLOZOzovLX0xzAadPhx8EKwraDLPxBndLCYfoTvnNuiFFV8FARrpAlW5C0WkH+TstPaCxr00Q==} peerDependencies: @@ -7270,6 +7632,11 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + zod-to-json-schema@3.25.1: + resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + peerDependencies: + zod: ^3.25 || ^4 + zod-validation-error@4.0.2: resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} engines: {node: '>=18.0.0'} @@ -7317,14 +7684,14 @@ snapshots: - prettier - prettier-plugin-astro - '@astrojs/cloudflare@12.6.12(astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.20.3)(typescript@5.7.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)': + '@astrojs/cloudflare@12.6.12(astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.21.0)(typescript@5.7.3)(yaml@2.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)': dependencies: '@astrojs/internal-helpers': 0.7.5 '@astrojs/underscore-redirects': 1.0.0 '@cloudflare/workers-types': 4.20260118.0 - astro: 6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.20.3)(typescript@5.7.3)(yaml@2.8.2) + astro: 6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.21.0)(typescript@5.7.3)(yaml@2.8.2) tinyglobby: 0.2.15 - vite: 6.4.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 6.4.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) wrangler: 4.50.0(@cloudflare/workers-types@4.20260118.0) transitivePeerDependencies: - '@types/node' @@ -8837,6 +9204,10 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@hono/node-server@1.19.9(hono@4.11.8)': + dependencies: + hono: 4.11.8 + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -9276,6 +9647,28 @@ snapshots: lexical: 0.35.0 yjs: 13.6.29 + '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.9(hono@4.11.8) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.2.1(express@5.2.1) + hono: 4.11.8 + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - supports-color + '@monaco-editor/loader@1.7.0': dependencies: state-local: 1.0.7 @@ -10391,22 +10784,22 @@ snapshots: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 - '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(tsx@4.20.3)(yaml@2.8.2))': + '@tailwindcss/typography@0.5.19(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.19(tsx@4.20.3)(yaml@2.8.2) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) '@tailwindcss/typography@0.5.19(tailwindcss@4.1.18)': dependencies: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.18 - '@tailwindcss/vite@4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2))': + '@tailwindcss/vite@4.1.18(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) '@testing-library/dom@10.4.1': dependencies: @@ -10693,7 +11086,7 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vitejs/plugin-react@4.5.2(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2))': + '@vitejs/plugin-react@4.5.2(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.6 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6) @@ -10701,7 +11094,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.11 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -10713,21 +11106,21 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.3(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2))': + '@vitest/mocker@3.2.3(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/mocker@3.2.3(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2))': + '@vitest/mocker@3.2.3(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) optional: true '@vitest/pretty-format@3.2.3': @@ -10810,6 +11203,11 @@ snapshots: '@vscode/l10n@0.0.18': {} + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -10824,10 +11222,28 @@ snapshots: agent-base@7.1.4: {} + agentation-mcp@1.1.0: + dependencies: + '@modelcontextprotocol/sdk': 1.26.0(zod@3.25.76) + better-sqlite3: 12.6.2 + zod: 3.25.76 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + + agentation@2.1.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + optionalDependencies: + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -10952,7 +11368,7 @@ snapshots: ast-types-flow@0.0.8: {} - astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.20.3)(typescript@5.7.3)(yaml@2.8.2): + astro@6.0.0-beta.1(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.55.2)(sass@1.77.4)(tsx@4.21.0)(typescript@5.7.3)(yaml@2.8.2): dependencies: '@astrojs/compiler': 0.0.0-render-script-20251003120459 '@astrojs/internal-helpers': 0.7.5 @@ -11006,8 +11422,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.17.4 vfile: 6.0.3 - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) - vitefu: 1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) + vitefu: 1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -11086,7 +11502,7 @@ snapshots: baseline-browser-mapping@2.9.15: {} - better-auth@1.4.15(mongodb@6.16.0(@aws-sdk/credential-providers@3.971.0))(next@15.4.4(@babel/core@7.28.6)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)): + better-auth@1.4.15(better-sqlite3@12.6.2)(mongodb@6.16.0(@aws-sdk/credential-providers@3.971.0))(next@15.4.4(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)): dependencies: '@better-auth/core': 1.4.15(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.5))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0) '@better-auth/telemetry': 1.4.15(@better-auth/core@1.4.15(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.21)(better-call@1.1.8(zod@4.3.5))(jose@6.1.3)(kysely@0.28.10)(nanostores@1.1.0)) @@ -11101,11 +11517,12 @@ snapshots: nanostores: 1.1.0 zod: 4.3.5 optionalDependencies: + better-sqlite3: 12.6.2 mongodb: 6.16.0(@aws-sdk/credential-providers@3.971.0) - next: 15.4.4(@babel/core@7.28.6)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) + next: 15.4.4(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - vitest: 3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vitest: 3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) better-call@1.1.8(zod@4.3.5): dependencies: @@ -11116,10 +11533,39 @@ snapshots: optionalDependencies: zod: 4.3.5 + better-sqlite3@12.6.2: + dependencies: + bindings: 1.5.0 + prebuild-install: 7.1.3 + binary-extensions@2.3.0: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bl@4.1.0: + dependencies: + buffer: 5.6.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + blake3-wasm@2.1.5: {} + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.14.1 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + body-scroll-lock@4.0.0-beta.0: {} boolbase@1.0.0: {} @@ -11171,6 +11617,8 @@ snapshots: dependencies: streamsearch: 1.1.0 + bytes@3.1.2: {} + cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -11227,6 +11675,29 @@ snapshots: check-error@2.1.3: {} + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.2.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.19.2 + whatwg-mimetype: 4.0.0 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -11247,6 +11718,8 @@ snapshots: dependencies: readdirp: 5.0.0 + chownr@1.1.4: {} + ci-info@4.3.1: {} class-variance-authority@0.7.1: @@ -11305,12 +11778,20 @@ snapshots: dependencies: simple-wcswidth: 1.1.2 + content-disposition@1.0.1: {} + + content-type@1.0.5: {} + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} cookie-es@1.2.2: {} + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + cookie@1.1.1: {} copyfiles@2.4.1: @@ -11325,6 +11806,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -11388,6 +11874,8 @@ snapshots: csstype@3.2.3: {} + csv-parse@6.1.0: {} + damerau-levenshtein@1.0.8: {} data-urls@5.0.0: @@ -11435,8 +11923,14 @@ snapshots: dependencies: character-entities: 2.0.2 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + deep-eql@5.0.2: {} + deep-extend@0.6.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -11455,6 +11949,8 @@ snapshots: defu@6.1.4: {} + depd@2.0.0: {} + dequal@2.0.3: {} destr@2.0.5: {} @@ -11524,6 +12020,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + ee-first@1.1.1: {} + electron-to-chromium@1.5.267: {} emmet@2.4.11: @@ -11537,6 +12035,13 @@ snapshots: emoji-regex@9.2.2: {} + encodeurl@2.0.0: {} + + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -11550,6 +12055,8 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -12070,18 +12577,66 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: {} + eventemitter3@5.0.3: {} events@3.3.0: {} + eventsource-parser@3.0.6: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.6 + exit-hook@2.2.1: {} + expand-template@2.0.3: {} + expand-tilde@2.0.2: dependencies: homedir-polyfill: 1.0.3 expect-type@1.3.0: {} + express-rate-limit@8.2.1(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.0.1 + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.0.1 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.1 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: {} fast-copy@3.0.2: {} @@ -12136,10 +12691,23 @@ snapshots: token-types: 6.1.2 uint8array-extras: 1.5.0 + file-uri-to-path@1.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-node-modules@2.1.3: dependencies: findup-sync: 4.0.0 @@ -12184,8 +12752,14 @@ snapshots: dependencies: is-callable: 1.2.7 + forwarded@0.2.0: {} + fraction.js@5.3.4: {} + fresh@2.0.0: {} + + fs-constants@1.0.0: {} + fs.realpath@1.0.0: {} fsevents@2.3.2: @@ -12253,6 +12827,8 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + github-from-package@0.0.0: {} + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -12453,16 +13029,37 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hono@4.11.8: {} + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 html-escaper@3.0.3: {} + html-parse-stringify@3.0.1: + dependencies: + void-elements: 3.1.0 + html-void-elements@3.0.0: {} + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + http-cache-semantics@4.2.0: {} + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -12483,6 +13080,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -12515,6 +13116,10 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + ip-address@10.0.1: {} + + ipaddr.js@1.9.1: {} + ipaddr.js@2.2.0: {} iron-webcrypto@1.2.1: {} @@ -12625,6 +13230,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -12756,6 +13363,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -13052,10 +13661,14 @@ snapshots: mdn-data@2.12.2: {} + media-typer@1.1.0: {} + memoize-one@6.0.0: {} memory-pager@1.5.0: {} + merge-descriptors@2.0.0: {} + merge2@1.4.1: {} merge@2.1.1: {} @@ -13292,8 +13905,16 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mime-db@1.54.0: {} + + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@3.0.0: {} + mimic-response@3.1.0: {} + miniflare@4.20251118.1: dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -13335,6 +13956,8 @@ snapshots: minimist@1.2.8: {} + mkdirp-classic@0.5.3: {} + mkdirp@1.0.4: {} monaco-editor@0.55.1: @@ -13400,10 +14023,14 @@ snapshots: nanostores@1.1.0: {} + napi-build-utils@2.0.0: {} + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} + negotiator@1.0.0: {} + neotraverse@0.6.18: {} next-sitemap@4.2.3(next@15.4.4(@babel/core@7.28.6)(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4)): @@ -13439,10 +14066,40 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@15.4.4(@playwright/test@1.54.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.77.4): + dependencies: + '@next/env': 15.4.4 + '@swc/helpers': 0.5.15 + caniuse-lite: 1.0.30001764 + postcss: 8.4.31 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + styled-jsx: 5.1.6(react@19.1.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.4.4 + '@next/swc-darwin-x64': 15.4.4 + '@next/swc-linux-arm64-gnu': 15.4.4 + '@next/swc-linux-arm64-musl': 15.4.4 + '@next/swc-linux-x64-gnu': 15.4.4 + '@next/swc-linux-x64-musl': 15.4.4 + '@next/swc-win32-arm64-msvc': 15.4.4 + '@next/swc-win32-x64-msvc': 15.4.4 + '@playwright/test': 1.54.1 + sass: 1.77.4 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + optional: true + nlcst-to-string@4.0.0: dependencies: '@types/nlcst': 2.0.3 + node-abi@3.87.0: + dependencies: + semver: 7.7.3 + node-fetch-native@1.6.7: {} node-mock-http@1.0.4: {} @@ -13518,6 +14175,10 @@ snapshots: on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -13598,10 +14259,21 @@ snapshots: parse-passwd@1.0.0: {} + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + parse5@7.3.0: dependencies: entities: 6.0.1 + parseurl@1.3.3: {} + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -13614,6 +14286,8 @@ snapshots: path-to-regexp@6.3.0: {} + path-to-regexp@8.3.0: {} + path-type@4.0.0: {} pathe@2.0.3: {} @@ -13709,6 +14383,8 @@ snapshots: pirates@4.0.7: {} + pkce-challenge@5.0.1: {} + playwright-core@1.54.1: {} playwright@1.54.1: @@ -13733,13 +14409,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.2): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.6 - tsx: 4.20.3 + tsx: 4.21.0 yaml: 2.8.2 postcss-nested@6.2.0(postcss@8.5.6): @@ -13771,6 +14447,21 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.1.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.87.0 + pump: 3.0.3 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.4 + tunnel-agent: 0.6.0 + prelude-ls@1.2.1: {} prettier@3.8.0: {} @@ -13806,6 +14497,11 @@ snapshots: property-information@7.1.0: {} + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -13815,6 +14511,10 @@ snapshots: qs-esm@7.0.2: {} + qs@6.14.1: + dependencies: + side-channel: 1.1.0 + queue-microtask@1.2.3: {} quick-format-unescaped@4.0.4: {} @@ -13823,6 +14523,20 @@ snapshots: range-parser@1.2.1: {} + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-datepicker@7.6.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@floating-ui/react': 0.27.16(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -14137,6 +14851,16 @@ snapshots: rou3@0.7.12: {} + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.3.0 + transitivePeerDependencies: + - supports-color + rrweb-cssom@0.8.0: {} run-parallel@1.2.0: @@ -14198,6 +14922,31 @@ snapshots: semver@7.7.3: {} + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + set-cookie-parser@2.7.2: {} set-function-length@1.2.2: @@ -14222,6 +14971,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + setprototypeof@1.2.0: {} + sharp@0.33.5: dependencies: color: 4.2.3 @@ -14356,6 +15107,14 @@ snapshots: siginfo@2.0.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + simple-swizzle@0.2.4: dependencies: is-arrayish: 0.3.4 @@ -14393,6 +15152,8 @@ snapshots: state-local@1.0.7: {} + statuses@2.0.2: {} + std-env@3.10.0: {} stop-iteration-iterator@1.1.0: @@ -14496,6 +15257,8 @@ snapshots: strip-bom@3.0.0: {} + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} strip-literal@3.1.0: @@ -14516,6 +15279,12 @@ snapshots: optionalDependencies: '@babel/core': 7.28.6 + styled-jsx@5.1.6(react@19.1.0): + dependencies: + client-only: 0.0.1 + react: 19.1.0 + optional: true + stylis@4.2.0: {} sucrase@3.35.1: @@ -14552,11 +15321,11 @@ snapshots: tailwind-merge@2.6.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.20.3)(yaml@2.8.2)): + tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)): dependencies: - tailwindcss: 3.4.19(tsx@4.20.3)(yaml@2.8.2) + tailwindcss: 3.4.19(tsx@4.21.0)(yaml@2.8.2) - tailwindcss@3.4.19(tsx@4.20.3)(yaml@2.8.2): + tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -14575,7 +15344,7 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.3)(yaml@2.8.2) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.11 @@ -14588,6 +15357,21 @@ snapshots: tapable@2.3.0: {} + tar-fs@2.1.4: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.3 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -14634,6 +15418,8 @@ snapshots: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: {} + token-types@6.1.2: dependencies: '@borewit/text-codec': 0.2.1 @@ -14689,10 +15475,21 @@ snapshots: tsx@4.20.3: dependencies: esbuild: 0.25.12 - get-tsconfig: 4.8.1 + get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 + tsx@4.21.0: + dependencies: + esbuild: 0.27.2 + get-tsconfig: 4.13.0 + optionalDependencies: + fsevents: 2.3.3 + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + turbo-darwin-64@2.5.6: optional: true @@ -14726,6 +15523,12 @@ snapshots: type-fest@4.41.0: {} + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -14788,6 +15591,8 @@ snapshots: undici@7.14.0: {} + undici@7.19.2: {} + unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -14854,6 +15659,8 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 + unpipe@1.0.0: {} + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.4 @@ -14933,6 +15740,8 @@ snapshots: uuid@10.0.0: {} + vary@1.1.2: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -14948,13 +15757,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite-node@3.2.3(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vite-node@3.2.3(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -14969,13 +15778,13 @@ snapshots: - tsx - yaml - vite-node@3.2.3(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vite-node@3.2.3(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: cac: 6.7.14 debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - '@types/node' - jiti @@ -14991,18 +15800,18 @@ snapshots: - yaml optional: true - vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)): dependencies: debug: 4.4.3 globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.7.3) optionalDependencies: - vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - typescript - vite@6.4.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vite@6.4.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -15015,10 +15824,10 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 sass: 1.77.4 - tsx: 4.20.3 + tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -15032,10 +15841,10 @@ snapshots: jiti: 1.21.7 lightningcss: 1.30.2 sass: 1.77.4 - tsx: 4.20.3 + tsx: 4.21.0 yaml: 2.8.2 - vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -15048,18 +15857,18 @@ snapshots: jiti: 2.6.1 lightningcss: 1.30.2 sass: 1.77.4 - tsx: 4.20.3 + tsx: 4.21.0 yaml: 2.8.2 - vitefu@1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)): + vitefu@1.1.1(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)): optionalDependencies: - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) - vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.5.4)(jiti@1.21.7)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vitest@3.2.3(@types/debug@4.1.12)(@types/node@22.5.4)(jiti@1.21.7)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + '@vitest/mocker': 3.2.3(vite@7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -15077,8 +15886,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) - vite-node: 3.2.3(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.3(@types/node@22.5.4)(jiti@1.21.7)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -15098,11 +15907,11 @@ snapshots: - tsx - yaml - vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2): + vitest@3.2.3(@types/debug@4.1.12)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2)) + '@vitest/mocker': 3.2.3(vite@7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -15120,8 +15929,8 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) - vite-node: 3.2.3(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.20.3)(yaml@2.8.2) + vite: 7.3.1(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) + vite-node: 3.2.3(jiti@2.6.1)(lightningcss@1.30.2)(sass@1.77.4)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -15141,6 +15950,8 @@ snapshots: - yaml optional: true + void-elements@3.1.0: {} + volar-service-css@0.0.68(@volar/language-service@2.4.28): dependencies: vscode-css-languageservice: 6.3.9 @@ -15476,6 +16287,10 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 + zod-to-json-schema@3.25.1(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod-validation-error@4.0.2(zod@4.3.5): dependencies: zod: 4.3.5