From eb63a4804725b5ac34d6b23a897301c840e4a403 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 29 Jul 2026 15:29:35 +0700 Subject: [PATCH] feat: initialize product-site app with Next.js, i18n routing, and custom brand configurations --- .devcontainer/devcontainer.json | 7 +- .vscode/settings.json | 24 +- apps/landing/src/app.tsx | 19 +- apps/product-site/.gitignore | 41 + apps/product-site/CLAUDE.md | 1 + apps/product-site/README.md | 36 + apps/product-site/eslint.config.mjs | 3 + apps/product-site/messages/en.json | 216 ++ apps/product-site/messages/id.json | 216 ++ apps/product-site/next.config.ts | 10 + apps/product-site/package.json | 32 + apps/product-site/postcss.config.mjs | 7 + apps/product-site/src/app/[locale]/layout.tsx | 66 + apps/product-site/src/app/[locale]/page.tsx | 790 +++++++ apps/product-site/src/app/globals.css | 2098 +++++++++++++++++ .../src/components/DestinationsCarousel.tsx | 227 ++ .../src/components/LanguageSwitcher.tsx | 39 + apps/product-site/src/i18n/request.ts | 15 + apps/product-site/src/i18n/routing.ts | 10 + apps/product-site/src/middleware.ts | 8 + apps/product-site/tsconfig.json | 22 + package.json | 3 + packages/brand/public/favicon.svg | 8 +- packages/brand/public/logo-primary.png | Bin 0 -> 2363 bytes packages/brand/public/logo-primary.svg | 4 + packages/configs/eslint/nextjs.js | 61 + packages/configs/eslint/nextjs.mjs | 21 + packages/configs/eslint/package.json | 4 +- packages/configs/typescript/nextjs.json | 26 + packages/core-api/package.json | 5 + packages/core-i18n/package.json | 10 +- pnpm-lock.yaml | 1996 ++++++++++++++-- 32 files changed, 5829 insertions(+), 196 deletions(-) create mode 100644 apps/product-site/.gitignore create mode 100644 apps/product-site/CLAUDE.md create mode 100644 apps/product-site/README.md create mode 100644 apps/product-site/eslint.config.mjs create mode 100644 apps/product-site/messages/en.json create mode 100644 apps/product-site/messages/id.json create mode 100644 apps/product-site/next.config.ts create mode 100644 apps/product-site/package.json create mode 100644 apps/product-site/postcss.config.mjs create mode 100644 apps/product-site/src/app/[locale]/layout.tsx create mode 100644 apps/product-site/src/app/[locale]/page.tsx create mode 100644 apps/product-site/src/app/globals.css create mode 100644 apps/product-site/src/components/DestinationsCarousel.tsx create mode 100644 apps/product-site/src/components/LanguageSwitcher.tsx create mode 100644 apps/product-site/src/i18n/request.ts create mode 100644 apps/product-site/src/i18n/routing.ts create mode 100644 apps/product-site/src/middleware.ts create mode 100644 apps/product-site/tsconfig.json create mode 100644 packages/brand/public/logo-primary.png create mode 100644 packages/brand/public/logo-primary.svg create mode 100644 packages/configs/eslint/nextjs.js create mode 100644 packages/configs/eslint/nextjs.mjs create mode 100644 packages/configs/typescript/nextjs.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5d1677a..7121463 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -18,8 +18,9 @@ // 4173: VitePress Docs (Preview) // 5173: Web App (Must be strictly 5173 for Electron IPC compatibility) // 3000: Landing App (Isolated from Vite's default 517x blast radius) + // 3001: Company Profile App // 3005: Showcase App - "forwardPorts": [6060, 4173, 5173, 3000, 3005], + "forwardPorts": [6060, 4173, 5173, 3000, 3001, 3005], "portsAttributes": { "6060": { @@ -41,6 +42,10 @@ "3000": { "label": "Landing App (Public)", "onAutoForward": "notify" + }, + "3001": { + "label": "Product Site App", + "onAutoForward": "notify" } }, diff --git a/.vscode/settings.json b/.vscode/settings.json index 16bfb9c..02c75ed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,5 +4,27 @@ "mode": "auto" } ], - "cSpell.words": ["dtos", "mantine", "Menlo", "mgmt", "Millis", "Pandang", "Segoe", "TDTO", "Ujung", "VITE", "WITA"] + "cSpell.words": [ + "bento", + "cemail", + "checkin", + "cmsg", + "Cpolyline", + "Csvg", + "dtos", + "janky", + "mantine", + "Menlo", + "mgmt", + "Millis", + "Pandang", + "psuedo", + "qrcode", + "rfid", + "Segoe", + "TDTO", + "Ujung", + "VITE", + "WITA" + ] } diff --git a/apps/landing/src/app.tsx b/apps/landing/src/app.tsx index 6abf839..9480081 100644 --- a/apps/landing/src/app.tsx +++ b/apps/landing/src/app.tsx @@ -16,12 +16,9 @@ export default function App() {

- Enterprise-grade solutions for modern businesses. - This page is served from{' '} - - apps/landing - {' '} - on port 5174. + Enterprise-grade solutions for modern businesses. This page is served from{' '} + apps/landing on + port 5174.

@@ -33,12 +30,12 @@ export default function App() { ✅ @repo/ui workspace link verified — Button component rendered successfully.

-
-

Enterprise Web App

- +
+

Enterprise Web App

+ +
+
- - ); } diff --git a/apps/product-site/.gitignore b/apps/product-site/.gitignore new file mode 100644 index 0000000..5ef6a52 --- /dev/null +++ b/apps/product-site/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/product-site/CLAUDE.md b/apps/product-site/CLAUDE.md new file mode 100644 index 0000000..43c994c --- /dev/null +++ b/apps/product-site/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/apps/product-site/README.md b/apps/product-site/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/apps/product-site/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/apps/product-site/eslint.config.mjs b/apps/product-site/eslint.config.mjs new file mode 100644 index 0000000..1341e32 --- /dev/null +++ b/apps/product-site/eslint.config.mjs @@ -0,0 +1,3 @@ +import { nextjsConfig } from "@repo/eslint-config/nextjs.mjs"; + +export default nextjsConfig; diff --git a/apps/product-site/messages/en.json b/apps/product-site/messages/en.json new file mode 100644 index 0000000..fe565c3 --- /dev/null +++ b/apps/product-site/messages/en.json @@ -0,0 +1,216 @@ +{ + "Metadata": { + "title": "Pintu Masuk — Manage Visitors, From Tickets to Gates", + "description": "The First Integrated Ticketing and Access Platform in Indonesia" + }, + "Nav": { + "home": "Home", + "solutions": "Solutions", + "industries": "Industries", + "pricing": "Pricing", + "contact": "Contact", + "demo": "Schedule Demo" + }, + "Hero": { + "title1": "Manage Visitors.", + "title2": "From Tickets to Gates.", + "desc": "Manage the entire visitor journey in one platform, from ticket sales, access validation, queue management, to operational reporting. Keeps running even when internet connection is not always available.", + "subtitle": "The First Integrated Ticketing and Access Platform in Indonesia", + "cta": "Learn more", + "stats": { + "timeAccess": "Time access", + "seconds": "seconds", + "avgValidation": "Avg validation time", + "ticketsSold": "Tickets sold", + "todayAllChannels": "Today · all channels", + "sync": "Synchronization", + "txSynced": "transactions Successfully synced", + "visitorOps": "Visitor operations", + "activeZones": "3 active queue zones" + } + }, + "Why": { + "title": "Built for non-stop operations", + "desc": "More than just a ticketing system, Pintu Masuk is an access infrastructure that keeps working when signals drop, queues lengthen, and when you need quick data-driven decisions.", + "items": { + "offline": { + "title": "Offline-first", + "desc": "Transactions remain recorded locally when internet drops, then sync automatically once the network returns." + }, + "speed": { + "title": "Speed Validation", + "desc": "QR, RFID, and gate barriers validated in milliseconds, even during peak queue times." + }, + "flexibility": { + "title": "Flexibility Model", + "desc": "Cloud, on-premise, perpetual license, or rental can be tailored to your duration and infrastructure." + } + } + }, + "Ecosystem": { + "title": "Four steps. One ecosystem.", + "desc": "Each stage is integrated into one platform, allowing data to flow automatically from ticket purchase to operational reporting without manual processes or repetitive input.", + "ticketing": { + "title": "Ticketing", + "desc": "Sell tickets online via web, apps, or counters. Prices and quotas are always synced in one system." + }, + "access": { + "title": "Access Management", + "desc": "Validate tickets using QR Code, RFID, or automated gates. Fast, accurate process completed in seconds." + }, + "visitor": { + "title": "Visitor Operations", + "desc": "Manage queues, zone capacities, and visit schedules in real-time for a more orderly experience." + }, + "report": { + "title": "Report", + "desc": "Monitor transactions, visitor numbers, occupancy, and operational performance through a single dashboard." + }, + "stats": { + "qr": "QR Code", + "gate": "Gate Barrier", + "rfid": "RFID", + "avg": "average", + "queue": "124 visitors in queue", + "revenue": "Revenue", + "visitors": "Visitor", + "checkin": "Check-in" + } + }, + "Destinations": { + "title": "One platform, designed for every type of destination", + "desc": "Pintu Masuk adapts to your business processes, because we believe every industry has different visitor flows and operational needs.", + "title21": "One platform,", + "title22": "Various applications for every need.", + "desc2": "Ticket sales, check-ins, to zone occupancies are updated in real-time without needing to wait to know what's happening.", + "items": { + "themePark": { + "title": "Theme Park", + "desc": "Manage daily rides and tickets with a more efficient queuing system." + }, + "event": { + "title": "Event & Festival", + "desc": "Handle thousands of visitors with fast ticket sales and access validation." + }, + "museum": { + "title": "Museum", + "desc": "Create a more organized visit experience through schedule and capacity management." + }, + "stadium": { + "title": "Stadium & Venue", + "desc": "Speed up entry processes with accurate ticket validation, even when queues overflow." + }, + "exhibition": { + "title": "Exhibition", + "desc": "Flexible for multi-day exhibitions with integrated ticket access settings." + } + }, + "apps": { + "online": { + "title": "Online Booking", + "desc": "Manage reservations and ticket purchases from various digital channels." + }, + "cashier": { + "title": "Buy at Cashier", + "desc": "Ticket sales at the cashier to serve visitors directly." + }, + "pos": { + "title": "Offline POS (Multi Outlet)", + "desc": "Record transactions, redeem bookings, and operate cashiers without relying on internet." + }, + "queue": { + "title": "Queue App", + "desc": "Helps manage entry queues for a more comfortable visitor experience." + }, + "admin": { + "title": "Web Admin", + "desc": "Control center to manage master data, transactions, and system synchronization." + } + } + }, + "Pricing": { + "title1": "Start according to needs,", + "title2": "grow without limits", + "desc": "No need to pay more for unused features. Choose the most suitable package, then upgrade anytime as your operations grow.", + "contactUs": "Contact Us", + "whatYouGet": "What you get", + "rental": { + "title": "Rental", + "tags": [ + "Event", + "Festival", + "Concert" + ], + "desc": "Practical solution for short-duration events. Rent complete devices and systems, ready to use in days.", + "f1": "Ticketing & QR check-in", + "f2": "Gate & scanner device rental", + "f3": "Real-time monitoring dashboard", + "f4": "Visitor reports D+1", + "f5": "Fast setup & teardown (ready D-1)" + }, + "subscription": { + "title": "Subscription", + "tags": [ + "Tourist attraction", + "Waterpark" + ], + "desc": "Monthly subscription model for destinations operating daily, without initial infrastructure investment.", + "f1": "All Rental features", + "f2": "Multi outlet & multi gate", + "f3": "Quota & visit schedule management", + "f4": "Monthly operational dashboard", + "f5": "Automatic feature updates" + }, + "onPremise": { + "title": "On-Premise", + "tags": [ + "Enterprise", + "Institution" + ], + "desc": "System runs on your own servers and networks, for full control over data and security.", + "f1": "All Subscription features", + "f2": "Local server installation", + "f3": "Internal system integration (SSO, ERP)", + "f4": "Advanced access & security control", + "f5": "Dedicated deployment support" + }, + "buyOut": { + "title": "Buy Out", + "tags": [ + "Company", + "Integrator", + "Developer" + ], + "desc": "Solution with permanent license for organizations wanting long-term implementation and broader operational control.", + "f1": "Permanent License", + "f2": "Complete technical documentation", + "f3": "Internal engineering team training", + "f4": "Free from ongoing license fees", + "f5": "Priority support for first year" + } + }, + "Contact": { + "eyebrow": "Contact us", + "title": "Let's discuss your operational needs", + "desc": "Our team is ready to help determine the most suitable package for the scale and type of your event or destination.", + "email": "Email", + "phone": "Phone / WhatsApp", + "office": "Office", + "address": "Jl. Soekarno-Hatta No.409, Karasak, Kec. Astanaanyar, Bandung City, West Java 40243", + "form": { + "title": "Send a message to our team", + "name": "Full name", + "needs": "Tell us your needs", + "submit": "Send Message", + "note": "Our team responds within 1x24 hours on working days.", + "placeholderName": "John Doe", + "placeholderEmail": "name@company.com", + "placeholderNeeds": "Type of event or destination, estimated number of visitors, and the package you are considering." + } + }, + "Footer": { + "desc": "Manage integrated ticketing and access for theme parks, events, museums, and venues across Indonesia.", + "links": "Quick Links", + "copyright": "Pintu Masuk. All rights reserved." + } +} \ No newline at end of file diff --git a/apps/product-site/messages/id.json b/apps/product-site/messages/id.json new file mode 100644 index 0000000..02d34d3 --- /dev/null +++ b/apps/product-site/messages/id.json @@ -0,0 +1,216 @@ +{ + "Metadata": { + "title": "Pintu Masuk — Kelola Pengunjung, Dari Tiket Hingga Gerbang", + "description": "Platform Tiket dan Akses Terintegrasi Pertama di Indonesia" + }, + "Nav": { + "home": "Beranda", + "solutions": "Solusi", + "industries": "Industri", + "pricing": "Paket", + "contact": "Kontak", + "demo": "Jadwalkan Demo" + }, + "Hero": { + "title1": "Kelola Pengunjung.", + "title2": "Dari Tiket Hingga Gerbang.", + "desc": "Kelola seluruh perjalanan pengunjung dalam satu platform, mulai dari penjualan tiket, validasi akses, manajemen antrean, hingga pelaporan operasional. Tetap berjalan meski koneksi internet tidak selalu tersedia.", + "subtitle": "Platform Tiket dan Akses Terintegrasi Pertama di Indonesia", + "cta": "Lihat selengkapnya", + "stats": { + "timeAccess": "Time access", + "seconds": "detik", + "avgValidation": "Rerata waktu validasi", + "ticketsSold": "Tiket terjual", + "todayAllChannels": "Hari ini · semua kanal", + "sync": "Sinkronisasi", + "txSynced": "transaksi Berhasil disinkronkan", + "visitorOps": "Visitor operations", + "activeZones": "3 zona antrean aktif" + } + }, + "Why": { + "title": "Dibangun untuk operasional yang tidak boleh berhenti", + "desc": "Bukan hanya sekadar sistem tiket, Pintu Masuk adalah infrastruktur akses yang tetap bekerja saat sinyal hilang, saat antrean memanjang, dan saat kamu butuh keputusan cepat berbasis data.", + "items": { + "offline": { + "title": "Offline-first", + "desc": "Transaksi tetap tercatat lokal saat internet putus, lalu sinkron otomatis begitu jaringan kembali." + }, + "speed": { + "title": "Speed Validation", + "desc": "QR, RFID, dan gate barrier tervalidasi dalam hitungan milidetik, bahkan saat antrean sedang padat." + }, + "flexibility": { + "title": "Flexibility Model", + "desc": "Cloud, on-premise, perpetual license, atau rental dapat disesuaikan dengan durasi dan infrastruktur kamu." + } + } + }, + "Ecosystem": { + "title": "Empat langkah. Satu ekosistem.", + "desc": "Setiap tahap saling terintegrasi dalam satu platform, sehingga data mengalir otomatis dari pembelian tiket hingga pelaporan operasional tanpa proses manual atau input berulang.", + "ticketing": { + "title": "Ticketing", + "desc": "Jual tiket online melalui web, aplikasi, atau loket. Harga dan kuota selalu tersinkron dalam satu sistem." + }, + "access": { + "title": "Access Management", + "desc": "Validasi tiket menggunakan QR Code, RFID, atau gate otomatis. Proses cepat, akurat, dan selesai dalam hitungan detik." + }, + "visitor": { + "title": "Visitor Operations", + "desc": "Atur antrean, kapasitas zona, dan jadwal kunjungan secara real-time untuk pengalaman yang lebih tertib." + }, + "report": { + "title": "Report", + "desc": "Pantau transaksi, jumlah pengunjung, okupansi, dan performa operasional melalui satu dashboard." + }, + "stats": { + "qr": "QR Code", + "gate": "Gate Barrier", + "rfid": "RFID", + "avg": "rata-rata", + "queue": "124 pengunjung dalam antrean", + "revenue": "Revenue", + "visitors": "Visitor", + "checkin": "Check-in" + } + }, + "Destinations": { + "title": "Satu platform, dirancang untuk setiap jenis destinasi", + "desc": "Pintu Masuk beradaptasi dengan proses bisnis Anda, karena Kami percaya setiap industri memiliki alur pengunjung dan kebutuhan operasional yang berbeda.", + "title21": "Satu platform,", + "title22": "Berbagai aplikasi untuk setiap kebutuhan.", + "desc2": "Penjualan tiket, check-in, hingga okupansi zona diperbarui secara real-time tanpa perlu menunggu untuk tahu apa yang sedang terjadi.", + "items": { + "themePark": { + "title": "Theme Park", + "desc": "Kelola wahana dan tiket harian dengan sistem antrean yang lebih efisien." + }, + "event": { + "title": "Event & Festival", + "desc": "Tangani ribuan pengunjung dengan penjualan tiket dan validasi akses yang cepat." + }, + "museum": { + "title": "Museum", + "desc": "Ciptakan pengalaman kunjungan yang lebih tertata melalui pengaturan jadwal dan kapasitas." + }, + "stadium": { + "title": "Stadium & Venue", + "desc": "Percepat proses masuk dengan validasi tiket yang akurat, bahkan saat antrean membludak." + }, + "exhibition": { + "title": "Exhibition", + "desc": "Fleksibel untuk pameran beberapa hari dengan pengaturan akses tiket yang terintegrasi." + } + }, + "apps": { + "online": { + "title": "Pemesanan Online", + "desc": "Kelola reservasi dan pembelian tiket dari berbagai kanal digital." + }, + "cashier": { + "title": "Beli di Kasir", + "desc": "Penjualan tiket di kasir untuk melayani pengunjung secara langsung." + }, + "pos": { + "title": "POS Offline (Multi Outlet)", + "desc": "Catat transaksi, redeem booking, dan operasikan kasir tanpa bergantung pada internet." + }, + "queue": { + "title": "Queue App", + "desc": "Membantu mengatur antrean masuk agar pengalaman pengunjung lebih nyaman." + }, + "admin": { + "title": "Web Admin", + "desc": "Pusat kontrol untuk mengelola data master, transaksi, dan sinkronisasi sistem." + } + } + }, + "Pricing": { + "title1": "Mulai sesuai kebutuhan,", + "title2": "berkembang tanpa batas", + "desc": "Tidak perlu membayar lebih untuk fitur yang tidak digunakan. Pilih paket yang paling sesuai, lalu tingkatkan kapan saja seiring berkembangnya operasional Anda.", + "contactUs": "Hubungi Kami", + "whatYouGet": "Yang kamu dapatkan", + "rental": { + "title": "Rental", + "tags": [ + "Event", + "Festival", + "Konser" + ], + "desc": "Solusi praktis untuk acara berdurasi pendek. Sewa perangkat dan sistem lengkap, siap pakai dalam hitungan hari.", + "f1": "Ticketing & QR check-in", + "f2": "Sewa perangkat gate & scanner", + "f3": "Dashboard monitoring real-time", + "f4": "Laporan pengunjung H+1", + "f5": "Setup & teardown cepat (siap H-1)" + }, + "subscription": { + "title": "Subscription", + "tags": [ + "Tempat wisata", + "Waterpark" + ], + "desc": "Model langganan bulanan untuk destinasi yang beroperasi setiap hari, tanpa investasi infrastruktur di awal.", + "f1": "Semua fitur Rental", + "f2": "Multi outlet & multi gate", + "f3": "Manajemen kuota & jadwal kunjungan", + "f4": "Dashboard operasional bulanan", + "f5": "Update fitur otomatis" + }, + "onPremise": { + "title": "On-Premise", + "tags": [ + "Enterprise", + "Instansi" + ], + "desc": "Sistem berjalan di server dan jaringan milik kamu sendiri, untuk kontrol penuh atas data dan keamanan.", + "f1": "Semua fitur Subscription", + "f2": "Instalasi di server lokal", + "f3": "Integrasi sistem internal (SSO, ERP)", + "f4": "Kontrol akses & keamanan lanjutan", + "f5": "Dukungan deployment khusus" + }, + "buyOut": { + "title": "Buy Out", + "tags": [ + "Perusahaan", + "Integrator", + "Developer" + ], + "desc": "Solusi dengan lisensi permanen untuk organisasi yang menginginkan implementasi jangka panjang dan kontrol operasional yang lebih luas.", + "f1": "Lisensi Permanen", + "f2": "Dokumentasi teknis lengkap", + "f3": "Pelatihan tim engineering internal", + "f4": "Bebas biaya lisensi berkelanjutan", + "f5": "Priority support 1 tahun pertama" + } + }, + "Contact": { + "eyebrow": "Hubungi kami", + "title": "Mari diskusikan kebutuhan operasional kamu", + "desc": "Tim kami siap membantu menentukan paket yang paling sesuai dengan skala dan jenis acara atau destinasi kamu.", + "email": "Email", + "phone": "Telepon / WhatsApp", + "office": "Kantor", + "address": "Jl. Soekarno-Hatta No.409, Karasak, Kec. Astanaanyar, Kota Bandung, Jawa Barat 40243", + "form": { + "title": "Kirim pesan ke tim kami", + "name": "Nama lengkap", + "needs": "Ceritakan kebutuhan kamu", + "submit": "Kirim Pesan", + "note": "Tim kami merespons dalam 1x24 jam pada hari kerja.", + "placeholderName": "John Doe", + "placeholderEmail": "nama@perusahaan.com", + "placeholderNeeds": "Jenis acara atau destinasi, estimasi jumlah pengunjung, dan paket yang kamu pertimbangkan." + } + }, + "Footer": { + "desc": "Kelola tiket dan akses terintegrasi untuk taman hiburan, event, museum, dan venue di seluruh Indonesia.", + "links": "Quick Links", + "copyright": "Pintu Masuk. Seluruh hak cipta dilindungi." + } +} \ No newline at end of file diff --git a/apps/product-site/next.config.ts b/apps/product-site/next.config.ts new file mode 100644 index 0000000..815c259 --- /dev/null +++ b/apps/product-site/next.config.ts @@ -0,0 +1,10 @@ +import type { NextConfig } from "next"; +import createNextIntlPlugin from 'next-intl/plugin'; + +const withNextIntl = createNextIntlPlugin(); + +const nextConfig: NextConfig = { + /* config options here */ +}; + +export default withNextIntl(nextConfig); diff --git a/apps/product-site/package.json b/apps/product-site/package.json new file mode 100644 index 0000000..c2626dd --- /dev/null +++ b/apps/product-site/package.json @@ -0,0 +1,32 @@ +{ + "name": "product-site", + "version": "0.1.0", + "private": true, + "scripts": { + "copy:brand": "node ../../packages/brand/scripts/copy-brand-assets.js", + "dev": "pnpm run copy:brand && next dev", + "build": "pnpm run copy:brand && next build", + "start": "next start", + "lint": "eslint \"src/**/*.ts*\"", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/brand": "workspace:*", + "next": "16.2.12", + "next-intl": "^4.13.4", + "react": "19.2.4", + "react-dom": "19.2.4" + }, + "devDependencies": { + "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.2.12", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/apps/product-site/postcss.config.mjs b/apps/product-site/postcss.config.mjs new file mode 100644 index 0000000..61e3684 --- /dev/null +++ b/apps/product-site/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/apps/product-site/src/app/[locale]/layout.tsx b/apps/product-site/src/app/[locale]/layout.tsx new file mode 100644 index 0000000..c072e36 --- /dev/null +++ b/apps/product-site/src/app/[locale]/layout.tsx @@ -0,0 +1,66 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono, Instrument_Sans } from "next/font/google"; +import { NextIntlClientProvider } from 'next-intl'; +import { getMessages, getTranslations } from 'next-intl/server'; +import { notFound } from 'next/navigation'; +import { routing } from '@/i18n/routing'; +import "../globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +const instrumentSans = Instrument_Sans({ + variable: "--font-instrument-sans", + subsets: ["latin"], +}); + +export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise { + const { locale } = await params; + const t = await getTranslations({ locale, namespace: 'Metadata' }); + return { + title: t('title'), + description: t('description'), + icons: { + icon: "/brand/favicon.svg" + } + }; +} + +export default async function RootLayout({ + children, + params, +}: Readonly<{ + children: React.ReactNode; + params: Promise<{ locale: string }>; +}>) { + const { locale } = await params; + if (!routing.locales.includes(locale as any)) { + notFound(); + } + + const messages = await getMessages(); + + return ( + + + + + + + {children} + + + + ); +} + diff --git a/apps/product-site/src/app/[locale]/page.tsx b/apps/product-site/src/app/[locale]/page.tsx new file mode 100644 index 0000000..6ec526c --- /dev/null +++ b/apps/product-site/src/app/[locale]/page.tsx @@ -0,0 +1,790 @@ +'use client'; + +import { useTranslations } from 'next-intl'; +import { LanguageSwitcher } from '@/components/LanguageSwitcher'; +import { useEffect, useState } from 'react'; +import { DestinationsCarousel } from '@/components/DestinationsCarousel'; + +export default function Page() { + const t = useTranslations(); + const [isScrolled, setIsScrolled] = useState(false); + const [isMenuOpen, setIsMenuOpen] = useState(false); + + useEffect(() => { + const handleScroll = () => { + const floating = window.scrollY > 60; + setIsScrolled(floating); + document.body.classList.toggle('nav-is-floating', floating); + }; + window.addEventListener('scroll', handleScroll, { passive: true }); + handleScroll(); + + const yearSpan = document.getElementById('current-year'); + if (yearSpan) yearSpan.textContent = new Date().getFullYear().toString(); + + // Reveal animation: report bars + access ring + const grid = document.getElementById('bentoGrid'); + let obs: IntersectionObserver; + if (grid) { + const bars = grid.querySelectorAll('.report-bar'); + const ring = grid.querySelector('.ring-progress'); + let done = false; + obs = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting && !done) { + done = true; + bars.forEach((bar, i) => { + setTimeout(() => { + if (bar.dataset.w) bar.style.width = bar.dataset.w; + }, i * 150); + }); + if (ring && ring.dataset.dash) { + setTimeout(() => { + ring.style.strokeDasharray = ring.dataset.dash!; + }, 200); + } + obs.disconnect(); + } + }); + }, + { threshold: 0.35 }, + ); + obs.observe(grid); + } + + return () => { + window.removeEventListener('scroll', handleScroll); + if (obs) obs.disconnect(); + }; + }, []); + + return ( +
+ {/* ============ NAV + HERO ============ */} +
+
+ +
+ +
+

+ {t('Hero.title1')} +
+ {t('Hero.title2')} +

+ +
+
+
+ +
+
{t('Hero.stats.timeAccess')}
+
+ 0.4{t('Hero.stats.seconds')} +
+
{t('Hero.stats.avgValidation')}
+
+
+
+ +
+
{t('Hero.stats.ticketsSold')}
+
1.249
+
{t('Hero.stats.todayAllChannels')}
+
+
+
+ +
+
{t('Hero.stats.sync')}
+
12
+
{t('Hero.stats.txSynced')}
+
+
+
+ +
+
{t('Hero.stats.visitorOps')}
+
+ + + + +
+
{t('Hero.stats.activeZones')}
+
+
+ +
+ + + {t('Hero.subtitle')} + +

{t('Hero.desc')}

+ + {t('Hero.cta')} + + +
+
+
+
+ + {/* ============ WHY SECTION ============ */} +
+
+
+

{t('Why.title')}

+

{t('Why.desc')}

+
+ +
+
+ +
+
+
+ +
+

{t('Why.items.offline.title')}

+

{t('Why.items.offline.desc')}

+
+
+
+ +
+

{t('Why.items.speed.title')}

+

{t('Why.items.speed.desc')}

+
+
+
+ +
+

{t('Why.items.flexibility.title')}

+

{t('Why.items.flexibility.desc')}

+
+
+
+
+ + {/* ============ ECOSYSTEM / BENTO ============ */} +
+
+
+

{t('Ecosystem.title')}

+

{t('Ecosystem.desc')}

+
+ +
+ {/* Ticketing */} +
+

{t('Ecosystem.ticketing.title')}

+

{t('Ecosystem.ticketing.desc')}

+
+
+
+
+ TX24409198-8798 + TX24409198-8797 + TX24409198-8798 + TX24409198-8901 + TX24409198-8811 +
+
+
+
+ TX24409198-8801 + TX24409198-8787 + TX24409198-8786 + TX24409198-8901 + TX24409198-8881 +
+
+
+
+ TX24409198-8902 + TX24409198-8788 + TX24409198-8790 + TX24409198-8905 + TX24409198-8812 +
+
+
+
+
+ + {/* Access Management */} +
+
+
+
+ {t('Ecosystem.stats.qr')} + +
+
+ {t('Ecosystem.stats.gate')} + +
+
+ {t('Ecosystem.stats.rfid')} + +
+
+
+ + + + + + + + + + + +
+ 0.4s + {t('Ecosystem.stats.avg')} +
+
+
+

{t('Ecosystem.access.title')}

+

{t('Ecosystem.access.desc')}

+
+ + {/* Visitor Operations */} +
+
+
+
+
+
+
+
+
+ {t('Ecosystem.stats.queue')} +
+
+
+
+
+
+
+
+
+
+
+
+

{t('Ecosystem.visitor.title')}

+

{t('Ecosystem.visitor.desc')}

+
+ + {/* Report */} +
+

{t('Ecosystem.report.title')}

+

{t('Ecosystem.report.desc')}

+
+
+
+
+ Rp32.5M + {t('Ecosystem.stats.revenue')} +
+
+
+
+
+ 1,284 + {t('Ecosystem.stats.visitors')} +
+
+
+
+
+ 1,120,240 + {t('Ecosystem.stats.checkin')} +
+
+
+
+
+
+
+ + {/* ============ DESTINATIONS (carousel) ============ */} +
+
+ +

{t('Destinations.title')}

+

{t('Destinations.desc')}

+
+ } + > +
+

{t('Destinations.items.themePark.title')}

+

{t('Destinations.items.themePark.desc')}

+
+ +
+
+
+

{t('Destinations.items.event.title')}

+

{t('Destinations.items.event.desc')}

+
+ +
+
+
+

{t('Destinations.items.museum.title')}

+

{t('Destinations.items.museum.desc')}

+
+ +
+
+
+

{t('Destinations.items.stadium.title')}

+

{t('Destinations.items.stadium.desc')}

+
+ +
+
+
+

{t('Destinations.items.exhibition.title')}

+

{t('Destinations.items.exhibition.desc')}

+
+ +
+
+ + +
+ +
+
+
+

+ {t('Destinations.title21')} +
+ {t('Destinations.title22')} +

+

{t('Destinations.desc2')}

+
+ + + + + + + + + + +
+
+
+
+ +
+

{t('Destinations.apps.online.title')}

+

{t('Destinations.apps.online.desc')}

+
+ +
+
+ +
+

{t('Destinations.apps.cashier.title')}

+

{t('Destinations.apps.cashier.desc')}

+
+
+ +
+ + + + {/* */} + + + + +
+ +
+
+ +
+

{t('Destinations.apps.pos.title')}

+

{t('Destinations.apps.pos.desc')}

+
+ +
+ + + {/* */} + + + + +
+ +
+
+ +
+

{t('Destinations.apps.queue.title')}

+

{t('Destinations.apps.queue.desc')}

+
+ +
+ + + {/* */} + + + + +
+ +
+
+ +
+

{t('Destinations.apps.admin.title')}

+

{t('Destinations.apps.admin.desc')}

+
+
+
+
+ + {/* ============ PRICING ============ */} +
+
+
+

+ {t('Pricing.title1')} +
+ {t('Pricing.title2')} +

+

{t('Pricing.desc')}

+
+ +
+
+

{t('Pricing.rental.title')}

+
+ {t('Pricing.rental.tags.0')} + {t('Pricing.rental.tags.1')} + {t('Pricing.rental.tags.2')} +
+

{t('Pricing.rental.desc')}

+ + {t('Pricing.contactUs')} + + {t('Pricing.whatYouGet')} +
    +
  • + + {t('Pricing.rental.f1')} +
  • +
  • + + {t('Pricing.rental.f2')} +
  • +
  • + + {t('Pricing.rental.f3')} +
  • +
  • + + {t('Pricing.rental.f4')} +
  • +
  • + + {t('Pricing.rental.f5')} +
  • +
+
+ +
+

{t('Pricing.subscription.title')}

+
+ {t('Pricing.subscription.tags.0')} + {t('Pricing.subscription.tags.1')} +
+

{t('Pricing.subscription.desc')}

+ + {t('Pricing.contactUs')} + + {t('Pricing.whatYouGet')} +
    +
  • + + {t('Pricing.subscription.f1')} +
  • +
  • + + {t('Pricing.subscription.f2')} +
  • +
  • + + {t('Pricing.subscription.f3')} +
  • +
  • + + {t('Pricing.subscription.f4')} +
  • +
  • + + {t('Pricing.subscription.f5')} +
  • +
+
+ +
+

{t('Pricing.onPremise.title')}

+
+ {t('Pricing.onPremise.tags.0')} + {t('Pricing.onPremise.tags.1')} +
+

{t('Pricing.onPremise.desc')}

+ + {t('Pricing.contactUs')} + + {t('Pricing.whatYouGet')} +
    +
  • + + {t('Pricing.onPremise.f1')} +
  • +
  • + + {t('Pricing.onPremise.f2')} +
  • +
  • + + {t('Pricing.onPremise.f3')} +
  • +
  • + + {t('Pricing.onPremise.f4')} +
  • +
  • + + {t('Pricing.onPremise.f5')} +
  • +
+
+ +
+

{t('Pricing.buyOut.title')}

+
+ {t('Pricing.buyOut.tags.0')} + {t('Pricing.buyOut.tags.1')} + {t('Pricing.buyOut.tags.2')} +
+

{t('Pricing.buyOut.desc')}

+ + {t('Pricing.contactUs')} + + {t('Pricing.whatYouGet')} +
    +
  • + + {t('Pricing.buyOut.f1')} +
  • +
  • + + {t('Pricing.buyOut.f2')} +
  • +
  • + + {t('Pricing.buyOut.f3')} +
  • +
  • + + {t('Pricing.buyOut.f4')} +
  • +
  • + + {t('Pricing.buyOut.f5')} +
  • +
+
+
+
+
+ + {/* ============ CONTACT ============ */} +
+
+
+
+ + + {t('Contact.eyebrow')} + +

{t('Contact.title')}

+

{t('Contact.desc')}

+ +
+
+
+ +
+
+ {t('Contact.email')} + hello@pintumasuk.id +
+
+
+
+ +
+
+ {t('Contact.phone')} + +62 812-3456-7890 +
+
+
+
+ +
+
+ {t('Contact.office')} + {t('Contact.address')} +
+
+
+
+ +
+

{t('Contact.form.title')}

+
e.preventDefault()}> +
+
+ + +
+
+ + +
+
+
+ + +
+ +

{t('Contact.form.note')}

+
+
+
+
+
+ + {/* ============ FOOTER ============ */} + +
+ ); +} diff --git a/apps/product-site/src/app/globals.css b/apps/product-site/src/app/globals.css new file mode 100644 index 0000000..38d67ea --- /dev/null +++ b/apps/product-site/src/app/globals.css @@ -0,0 +1,2098 @@ +@import 'tailwindcss'; + +@theme { + /* Orange Scale */ + --color-orange-50: #fef0e7; + --color-orange-100: #fedac1; + --color-orange-200: #fdc39b; + --color-orange-300: #fcaa75; + --color-orange-400: #fb924f; + --color-orange-500: #f66b0e; + --color-orange-600: #d65a06; + --color-orange-700: #ab4804; + --color-orange-800: #803603; + --color-orange-900: #552402; + + /* Lime Scale */ + --color-lime-50: #f7fee5; + --color-lime-100: #ecfcbe; + --color-lime-200: #dff997; + --color-lime-300: #d2f770; + --color-lime-400: #c6f449; + --color-lime-500: #b9f001; + --color-lime-600: #93bf00; + --color-lime-700: #6d8e00; + --color-lime-800: #475d00; + --color-lime-900: #222d00; + + /* Navy/Blue Scale */ + --color-blue-50: #eef3f6; + --color-blue-100: #d4e1ea; + --color-blue-200: #b9d0dd; + --color-blue-300: #9fbdd1; + --color-blue-400: #84acc4; + --color-blue-500: #699ab8; + --color-blue-600: #205375; + --color-blue-700: #1a425d; + --color-blue-800: #15354a; + --color-blue-900: #112b3c; + + /* Other Brand Colors */ + --color-cream-50: #f5f6f3; + --color-white-10: rgba(255, 255, 255, 0.1); + --color-ink-900: #112b3c; + --color-ink-600: #51606c; + --color-ink-400: #8b98a2; + --color-line: #e1e5e3; + --color-line-dark: rgba(255, 255, 255, 0.14); + + /* Fonts */ + --font-display: var(--font-instrument-sans), 'Instrument Sans', sans-serif; + --font-body: var(--font-geist-sans), 'Geist', sans-serif; + --font-mono: var(--font-geist-mono), 'IBM Plex Mono', monospace; + + /* Radii */ + --radius-2xl: 28px; + --radius-xl: 20px; + --radius-lg: 16px; + --radius-md: 12px; + --radius-sm: 8px; + --radius-full: 999px; + + /* Brand Scales */ + --color-brand-1-50: var(--color-blue-50); + --color-brand-1-100: var(--color-blue-100); + --color-brand-1-200: var(--color-blue-200); + --color-brand-1-300: var(--color-blue-300); + --color-brand-1-400: var(--color-blue-400); + --color-brand-1-500: var(--color-blue-500); + --color-brand-1-600: var(--color-blue-600); + --color-brand-1-700: var(--color-blue-700); + --color-brand-1-800: var(--color-blue-800); + --color-brand-1-900: var(--color-blue-900); + + --color-brand-2-50: var(--color-orange-50); + --color-brand-2-100: var(--color-orange-100); + --color-brand-2-200: var(--color-orange-200); + --color-brand-2-300: var(--color-orange-300); + --color-brand-2-400: var(--color-orange-400); + --color-brand-2-500: var(--color-orange-500); + --color-brand-2-600: var(--color-orange-600); + --color-brand-2-700: var(--color-orange-700); + --color-brand-2-800: var(--color-orange-800); + --color-brand-2-900: var(--color-orange-900); + + --color-brand-3-50: var(--color-lime-50); + --color-brand-3-100: var(--color-lime-100); + --color-brand-3-200: var(--color-lime-200); + --color-brand-3-300: var(--color-lime-300); + --color-brand-3-400: var(--color-lime-400); + --color-brand-3-500: var(--color-lime-500); + --color-brand-3-600: var(--color-lime-600); + --color-brand-3-700: var(--color-lime-700); + --color-brand-3-800: var(--color-lime-800); + --color-brand-3-900: var(--color-lime-900); +} + +@layer base { + * { + box-sizing: border-box; + } + + html { + scroll-behavior: smooth; + } + + body { + margin: 0; + font-family: var(--font-body); + color: var(--color-ink-900); + background: var(--color-white); + -webkit-font-smoothing: antialiased; + } + + h1, + h2, + h3, + h4 { + font-family: var(--font-display); + margin: 0; + letter-spacing: -0.02em; + color: var(--color-ink-900); + font-weight: 700; + } + + p { + margin: 0; + } + ul { + margin: 0; + padding: 0; + list-style: none; + } + svg { + display: block; + } + img { + max-width: 100%; + display: block; + } + button { + font-family: inherit; + } + + a:focus-visible, + button:focus-visible, + input:focus-visible, + textarea:focus-visible { + outline: 2px solid var(--color-brand-2-500); + outline-offset: 2px; + } +} + +/* Animations that are hard to replicate purely via utility classes */ +@layer utilities { + .nav-floating { + position: fixed; + top: 16px; + left: 50%; + transform: translateX(-50%); + width: calc(100% - 40px); + max-width: 1120px; + background: var(--color-brand-1-900); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 24px 48px -20px rgba(0, 0, 0, 0.55); + z-index: 1000; + animation: navFloatIn 0.4s cubic-bezier(0.16, 0.8, 0.44, 1); + } + + @keyframes navFloatIn { + from { + opacity: 0; + transform: translate(-50%, -16px); + } + to { + opacity: 1; + transform: translate(-50%, 0); + } + } + + .drift-a { + animation: driftA 7s ease-in-out infinite; + } + + .drift-b { + animation: driftB 8s ease-in-out infinite; + } + + @keyframes driftA { + 0%, + 100% { + transform: translateX(0); + } + 50% { + transform: translateX(-210px); + } + } + + @keyframes driftB { + 0%, + 100% { + transform: translateX(-24px); + } + 50% { + transform: translateX(10px); + } + } + + .chip-pulse { + animation: chipPulse 2.6s ease-out infinite; + } + + @keyframes chipPulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.05); + } + 100% { + transform: scale(1); + } + } + + /* Specific background overlays that need psuedo elements */ + .hero-bg { + background-image: radial-gradient(circle, rgba(255, 255, 255, 0.09) 1.3px, transparent 1px); + background-size: 22px 22px; + } + + .hero-bg::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 46%; + height: 100%; + background: linear-gradient(155deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 55%); + clip-path: polygon(38% 0, 100% 0, 100% 100%, 68% 100%); + opacity: 0.9; + pointer-events: none; + } + + .why-card-decorator { + position: relative; + overflow: hidden; + } + + .why-card-decorator::after { + content: ''; + position: absolute; + right: -65px; + bottom: -85px; + width: 150px; + height: 150px; + border-radius: 20%; + background: var(--color-brand-2-500); + transform: rotate(-29deg); + } + + .why-card-decorator::before { + content: ''; + position: absolute; + top: -22px; + right: -106px; + width: 172px; + height: 178px; + border-radius: 20%; + background: linear-gradient(170deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 85%); + transform: rotate(-16deg); + } +} + +@media (prefers-reduced-motion: reduce) { + * { + animation: none !important; + transition: none !important; + } +} + +.container { + width: 100%; + max-width: 1180px; + margin: 0 auto; + padding: 0 32px; +} + +.container-lg { + width: 100%; + max-width: 1480px; + margin: 0 auto; + padding: 0 18px; +} + +/* ---------- Buttons ---------- */ +.btn { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 13px 22px; + border-radius: var(--radius-sm); + font-family: var(--font-body); + font-weight: 600; + font-size: 14px; + border: none; + cursor: pointer; + transition: + transform 0.15s ease, + background 0.15s ease; +} + +.btn:hover { + transform: translateY(-1px); +} + +.btn-orange { + background: var(--color-brand-2-500); + color: var(--color-white); +} + +.btn-navy { + background: var(--color-brand-1-600); + color: var(--color-white); +} + +.btn-border-orange { + border: 1px solid var(--color-brand-2-500); + color: var(--color-white); +} + +.btn-orange:hover { + background: var(--color-brand-2-600); +} + +.btn-orange svg { + stroke: var(--color-white); +} + +.btn-icon-circle { + width: 20px; + height: 20px; + border-radius: 50%; + background: rgba(255, 255, 255, 0.25); + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.btn-icon-circle i { + font-size: 12px; + color: #fff; + line-height: 1; +} + +.eyebrow { + display: inline-flex; + align-items: center; + gap: 8px; + font-size: 13px; + font-weight: 600; + letter-spacing: 0.02em; + font-family: var(--font-body); +} + +.eyebrow-light { + color: var(--color-line); +} + +.eyebrow-pill { + border: 1px solid rgba(255, 255, 255, 0.25); + background-color: var(--color-white-10); + border-radius: var(--radius-full); + padding: 9px 18px 9px 14px; +} + +.dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--color-white); + flex-shrink: 0; +} + +.dot-orange { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--color-brand-2-500); + flex-shrink: 0; +} + +/* ---------- Nav ---------- */ +.nav { + position: relative; + z-index: 20; + display: flex; + align-items: center; + justify-content: space-between; + padding: 26px 0; + transition: + background 0.35s ease, + box-shadow 0.35s ease, + padding 0.35s ease, + border-color 0.35s ease; +} + +.nav.nav-floating { + position: fixed; + top: 16px; + left: 50%; + transform: translateX(-50%); + width: calc(100% - 40px); + max-width: 1120px; + background: var(--color-brand-1-900); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: var(--radius-md); + padding: 12px 26px; + box-shadow: 0 24px 48px -20px rgba(0, 0, 0, 0.55); + z-index: 1000; + animation: navFloatIn 0.4s cubic-bezier(0.16, 0.8, 0.44, 1); +} + +@keyframes navFloatIn { + from { + opacity: 0; + transform: translate(-50%, -16px); + } + + to { + opacity: 1; + transform: translate(-50%, 0); + } +} + +.nav-spacer { + display: none; + height: 0; +} + +.nav-floating ~ .nav-spacer, +body.nav-is-floating .nav-spacer { + display: block; + height: 74px; +} + +.brand { + display: flex; + align-items: center; + gap: 10px; +} + +.brand-mark { + /* height: 34px; */ + width: 150px; + border-radius: var(--radius-md); + display: flex; + align-items: center; + justify-content: center; +} + +.brand-name { + background-image: url('/brand/logo.png'); + font-family: var(--font-body); + font-weight: 700; + font-size: 16.5px; +} + +.nav-links { + display: flex; + align-items: center; + gap: 32px; +} + +.nav-divider { + width: 1px; + height: 24px; + background-color: rgba(255, 255, 255, 0.2); +} + +.nav-links a { + font-family: var(--font-body); + font-size: 14px; + font-weight: 500; + opacity: 0.85; +} + +.nav-links a:hover { + opacity: 1; +} + +.nav-toggle { + display: none; + background: none; + border: none; + cursor: pointer; + padding: 4px; +} + +/* ---------- Hero ---------- */ +.hero { + position: relative; + background: var(--color-brand-1-900); + background-image: radial-gradient(circle, rgba(255, 255, 255, 0.09) 1.3px, transparent 1px); + background-size: 22px 22px; + overflow: hidden; +} + +.hero::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 46%; + height: 100%; + background: linear-gradient(155deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 55%); + clip-path: polygon(38% 0, 100% 0, 100% 100%, 68% 100%); + opacity: 0.9; + pointer-events: none; +} + +.hero-inner { + position: relative; + z-index: 2; + padding: 8px 0 64px; +} + +.hero h1 { + color: var(--color-white); + font-size: 60px; + line-height: 1.08; + font-weight: 800; + margin-top: 44px; +} + +.stat-row { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + margin: 44px 0px; +} + +.stat-card { + background: var(--color-white); + border-radius: var(--radius-lg); + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 18px 18px 16px; + box-shadow: 0 20px 40px -18px rgba(0, 0, 0, 0.45); +} + +.stat-icon { + width: 42px; + height: 42px; + border-radius: var(--radius-sm); + background: var(--color-cream-50); + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 14px; +} + +.stat-icon svg { + width: 18px; + height: 18px; + stroke: var(--color-brand-1-900); +} + +.stat-icon i { + font-size: 18px; + color: var(--color-brand-1-900); + line-height: 1; +} + +.stat-label { + font-size: 12px; + color: var(--color-ink-400); + text-transform: uppercase; + font-family: var(--font-mono); +} + +.stat-value { + font-family: var(--font-body); + font-weight: 800; + font-size: 36px; + margin-top: 6px; +} + +.stat-value span { + font-size: 12px; + font-weight: 600; + color: var(--color-ink-400); + margin-left: 3px; +} + +.stat-sub { + font-size: 14px; + color: var(--color-ink-400); + margin-top: 4px; +} + +.stat-bars { + display: flex; + align-items: flex-end; + gap: 3px; + height: 48px; + margin-bottom: 12px; +} + +.stat-bars span { + width: 16px; + border-radius: 2px; + background: var(--color-brand-3-400); + display: block; +} + +.hero-body { + max-width: 720px; +} + +.hero-body p { + color: rgba(255, 255, 255, 0.62); + font-size: 18px; + line-height: 1.7; + margin-top: 14px; +} + +.hero-body .btn { + margin-top: 26px; +} + +/* ---------- Why section ---------- */ +.why { + padding: 120px 0 100px; +} + +.why-grid { + display: grid; + grid-template-columns: 0.85fr 1fr; + gap: 64px; + align-items: start; +} + +.why h2 { + font-size: 34px; + line-height: 1.18; +} + +.why-grid p { + color: var(--color-ink-600); + font-size: 15px; + line-height: 1.75; + margin-top: 18px; + max-width: 420px; +} + +.why-arrow { + margin-top: 56px; + width: 58px; + height: 58px; + border-radius: var(--radius-lg); + background: var(--color-cream-50); + display: flex; + align-items: center; + justify-content: center; +} + +.why-arrow i.uil { + font-size: 24px; + color: var(--color-brand-1-600); +} + +/* sticky headline: stays in view while the 3 point-cards scroll past on the right */ +.why-sticky { + position: sticky; + top: 168px; +} + +.why-cards { + display: flex; + flex-direction: column; + gap: 28px; +} +.why-card { + position: relative; + background: var(--color-cream-50); + border-radius: var(--radius-xl); + padding: 30px 32px; + overflow: hidden; +} + +.why-card::after { + content: ''; + position: absolute; + right: -65px; + bottom: -85px; + width: 150px; + height: 150px; + border-radius: 20%; + background: var(--color-brand-2-500); + transform: rotate(-29deg); +} + +.why-card::before { + content: ''; + position: absolute; + top: -22px; + right: -106px; + width: 172px; + height: 178px; + border-radius: 20%; + background: linear-gradient(170deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 85%); + transform: rotate(-16deg); +} + +.why-card-icon { + width: 38px; + height: 38px; + border-radius: var(--radius-md); + background: var(--color-white); + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 20px; + position: relative; + z-index: 1; +} + +.why-card-icon svg { + width: 18px; + height: 18px; + stroke: var(--color-brand-1-900); +} + +.why-card h3 { + font-size: 18px; + position: relative; + margin-top: 42px; + z-index: 1; +} + +.why-card p { + font-size: 14px; + color: var(--color-ink-600); + line-height: 1.65; + margin-top: 8px; + max-width: 78%; + position: relative; + z-index: 1; +} + +/* ---------- Ecosystem / bento ---------- */ +.ecosystem { + padding: 100px 0 120px; + background: var(--color-white); +} + +.ecosystem-head { + text-align: center; + max-width: 640px; + margin: 0 auto 56px; +} + +.ecosystem-head h2 { + font-size: 32px; +} + +.ecosystem-head p { + color: var(--color-ink-600); + font-size: 15px; + line-height: 1.7; + margin-top: 14px; +} + +.bento { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; + grid-auto-rows: 1fr; +} + +.bento-card { + background: var(--color-cream-50); + border-radius: var(--radius-md); + padding: 32px 34px; + min-height: 360px; + min-width: 0; + width: 100%; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.bento-card h3 { + font-size: 20px; +} + +.bento-card > p { + font-size: 14px; + color: var(--color-ink-600); + line-height: 1.65; + margin-top: 8px; + max-width: auto; +} + +.bento-illustration { + margin-bottom: 24px; + flex: 1; + display: flex; + flex-direction: column; + justify-content: center; +} + +/* ticketing pills — ambient marquee drift */ +.ticket-rows { + display: flex; + flex-direction: column; + justify-content: end; + flex: 1; + gap: 18px; +} + +.ticket-row { + position: relative; + overflow: hidden; +} + +.ticket-row::before, +.ticket-row::after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + width: 26px; + z-index: 2; +} + +.ticket-row::before { + left: 0; + background: linear-gradient(to right, var(--color-cream-50), transparent); +} + +.ticket-row::after { + right: 0; + background: linear-gradient(to left, var(--color-cream-50), transparent); +} + +.ticket-track { + display: flex; + gap: 8px; + white-space: nowrap; +} + +.ticket-track.drift-a { + animation: driftA 7s ease-in-out infinite; +} + +.ticket-track.drift-b { + animation: driftB 8s ease-in-out infinite; +} + +@keyframes driftA { + 0%, + 100% { + transform: translateX(0); + } + + 50% { + transform: translateX(-210px); + } +} + +@keyframes driftB { + 0%, + 100% { + transform: translateX(-24px); + } + + 50% { + transform: translateX(10px); + } +} + +.pill { + border-radius: var(--radius-sm); + padding: 12px; + font-size: 12px; + font-weight: 600; + font-family: var(--font-mono); + display: inline-flex; + align-items: center; +} +.pill-navy { + background: var(--color-brand-1-900); + color: var(--color-white); +} +.pill-outline { + background: transparent; + border: 1px solid var(--color-line); + color: var(--color-ink-400); +} +.pill-lime { + background: var(--color-brand-3-400); + color: var(--color-brand-1-900); +} +.pill-orange { + background: var(--color-brand-2-500); + color: var(--color-white); +} + +.ticket-track .pill { + position: relative; + padding-left: 16px; + padding-right: 16px; +} + +.ticket-track .pill::before, +.ticket-track .pill::after { + content: ''; + position: absolute; + top: 50%; + width: 12px; + height: 12px; + border-radius: 50%; + background: var(--color-cream-50); + transform: translateY(-50%); +} +.ticket-track .pill::before { + left: -4px; +} +.ticket-track .pill::after { + right: -4px; +} + +/* access management */ +.access-illustration { + display: flex; + flex-direction: row; + align-items: center; + gap: 48px; + justify-content: left; +} + +.chip-row { + display: flex; + gap: 12px; +} + +.chip { + width: 86px; + height: 122px; + padding: 16px 0; + border-radius: var(--radius-lg); + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + gap: 6px; + border: 1px solid var(--color-line); +} + +.chip i { + font-size: 26px; + color: var(--color-brand-1-900); +} + +.chip span { + font-size: 12px; + color: var(--color-ink-400); + text-align: center; + font-weight: 600; + font-family: var(--font-mono); +} + +.chip.active { + background: var(--color-brand-3-400); + /* border-color: var(--color-brand-1-900); */ + animation: chipPulse 2.6s ease-out infinite; +} + +.chip.active svg { + stroke: var(--color-brand-1-900); +} + +.chip.active span { + color: var(--color-brand-1-900); +} + +@keyframes chipPulse { + 0%, + 100% { + box-shadow: 0 0 0 0 rgba(185, 240, 1, 0.55); + } + + 50% { + box-shadow: 0 0 0 9px rgba(185, 240, 1, 0); + } +} + +.ring-wrap { + position: relative; + width: 140px; + height: 140px; + flex-shrink: 0; +} + +.ring-wrap .ring-text { + position: absolute; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.ring-text b { + font-size: 15px; + font-family: var(--font-body); +} + +.ring-text small { + font-size: 8.5px; + color: var(--color-ink-400); +} + +.ring-progress { + stroke-dasharray: 0 213.6; + transition: stroke-dasharray 1.2s cubic-bezier(0.16, 0.8, 0.44, 1); +} + +/* report bars — reveal on scroll */ +.report-bars { + display: flex; + flex-direction: column; + justify-content: end; + gap: 18px; + flex: 1; +} + +.report-bar-row { + display: flex; + align-items: center; + gap: 16px; +} + +.report-bar { + height: 42px; + border-radius: var(--radius-full); + flex-shrink: 0; + width: 0; + transition: width 1.1s cubic-bezier(0.16, 0.8, 0.44, 1); +} + +.report-bar-value b { + display: block; + font-size: 14px; + font-family: var(--font-body); +} + +.report-bar-value small { + font-size: 10px; + color: var(--color-ink-400); +} + +/* visitor operations */ +.visitor-illustration { + margin-bottom: 22px; +} + +.avatar-row { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 16px; +} + +.avatar-stack { + display: flex; +} + +.avatar { + width: 28px; + height: 28px; + border-radius: 50%; + border: 2px solid var(--color-cream-50); + margin-left: -9px; + display: flex; + align-items: center; + justify-content: center; +} + +.avatar:first-child { + margin-left: 0; +} + +.avatar-row span { + font-size: 12px; + color: var(--color-ink-600); +} + +.zone-grid { + display: grid; + grid-template-columns: repeat(4, 92px); + gap: 12px; +} + +.zone-cell { + height: 84px; + border-radius: var(--radius-md); + animation: zonePulse 2.8s ease-in-out infinite; +} + +.zone-cell:nth-child(1) { + animation-delay: 0s; +} + +.zone-cell:nth-child(2) { + animation-delay: 0.15s; +} + +.zone-cell:nth-child(3) { + animation-delay: 0.3s; +} + +.zone-cell:nth-child(4) { + animation-delay: 0.45s; +} + +.zone-cell:nth-child(5) { + animation-delay: 0.6s; +} + +.zone-cell:nth-child(6) { + animation-delay: 0.75s; +} + +.zone-cell:nth-child(7) { + animation-delay: 0.9s; +} + +.zone-cell:nth-child(8) { + animation-delay: 1.05s; +} + +@keyframes zonePulse { + 0%, + 100% { + opacity: 1; + } + + 50% { + opacity: 0.4; + } +} + +.bento-r1 { + grid-column: 1/2; + grid-row: 1/2; +} + +.bento-r2 { + grid-column: 2/3; + grid-row: 1/2; +} + +.bento-r3 { + grid-column: 1/2; + grid-row: 2/3; +} + +.bento-r4 { + grid-column: 2/3; + grid-row: 2/3; +} + +/* ---------- Destinations (carousel) ---------- */ +.destinations { + background-color: var(--color-brand-1-900); + background-image: + radial-gradient(circle, rgba(255, 255, 255, 0.07) 1px, transparent 1px), + linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 70%); + background-size: + 22px 22px, + 100% 100%; + padding: 110px 0 90px; + height: 680px; +} + +.destinations-head-row { + display: flex; + justify-content: space-between; + align-items: flex-end; + gap: 24px; + margin-bottom: 44px; + flex-wrap: wrap; +} + +.destinations-head { + max-width: 600px; +} + +.destinations-head h2 { + width: 420px; + color: var(--color-white); + font-size: 32px; + line-height: 1.2; +} + +.destinations-head p { + color: rgba(255, 255, 255, 0.6); + font-size: 15px; + line-height: 1.7; + margin-top: 14px; +} + +.dest-controls { + display: flex; + gap: 10px; + flex-shrink: 0; +} + +.dest-btn { + width: 44px; + height: 44px; + border-radius: 50%; + border: 1px solid var(--color-line-dark); + background: transparent; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: background 0.15s; +} + +.dest-btn:hover { + background: rgba(255, 255, 255, 0.08); +} + +.dest-btn i { + font-size: 28px; + color: #fff; +} + +.dest-viewport { + overflow: hidden; + padding: 52px 0 46px; + /* generous vertical room so the active card's shadow/lift never gets clipped */ + margin: -24px 0 -46px; +} + +.dest-track { + display: flex; + gap: 16px; + will-change: transform; + transition: transform 0.5s cubic-bezier(0.16, 0.8, 0.44, 1); +} + +.dest-track.no-anim { + transition: none; +} + +.dest-card { + flex: 0 0 auto; + width: 200px; + cursor: pointer; + background: var(--color-brand-1-600); + border: 1px solid var(--color-line-dark); + border-radius: var(--radius-xl); + padding: 30px 22px; + min-height: 216px; + display: flex; + flex-direction: column; + justify-content: space-between; + transition: + background 0.4s ease, + transform 0.5s cubic-bezier(0.16, 0.8, 0.44, 1), + box-shadow 0.4s ease, + width 0.5s cubic-bezier(0.16, 0.8, 0.44, 1); + cursor: pointer; +} + +.dest-card h4 { + color: var(--color-white); + font-size: 18px; +} + +.dest-card p { + color: rgba(255, 255, 255, 0.6); + font-size: 14px; + line-height: 1.6; + margin-top: 8px; +} + +.dest-icon { + width: 40px; + height: 40px; + border-radius: var(--radius-md); + background: rgba(255, 255, 255, 0.1); + display: flex; + align-items: center; + justify-content: center; + order: 2; + margin-top: 18px; +} + +.dest-icon i { + font-size: 24px; + color: var(--color-brand-1-600); +} + +/* NOTE: width/padding/min-height are intentionally NOT changed here — animating those + forces layout reflow every frame and is what made this carousel feel janky before. + The "active" look is done with transform:scale (GPU-only) so width stays fixed at + 228px for every card, which the carousel JS's position math also depends on. */ +.dest-card.active { + background: var(--color-white); + box-shadow: 0 30px 60px -20px rgba(0, 0, 0, 0.5); + transform: translateY(-20px) scale(1.045); + width: 320px; +} + +.dest-card.active h4 { + color: var(--color-brand-1-900); +} + +.dest-card.active p { + color: var(--color-ink-600); +} + +.dest-card.active .dest-icon { + background: var(--color-brand-3-400); +} + +.dest-card.active .dest-icon i { + color: var(--color-brand-1-900); +} + +.dest-dots { + display: flex; + justify-content: center; + gap: 8px; + margin-top: 36px; +} + +.dest-dots button { + width: 7px; + height: 7px; + padding: 0; + border: none; + border-radius: 50%; + background: rgba(255, 255, 255, 0.25); + cursor: pointer; + transition: + width 0.25s, + background 0.25s; +} + +.dest-dots button.on { + background: var(--color-brand-2-500); + width: 20px; + border-radius: 4px; +} + +/* ---------- Dashboard Showcase ---------- */ +.dash-showcase { + padding: 112px 0 118px; + background: var(--color-white); +} +.dash-head { + max-width: 640px; + margin: 0 0 52px auto; + text-align: right; +} +.dash-head h2 { + font-size: 32px; + line-height: 1.25; +} +.dash-head p { + color: var(--color-ink-600); + font-size: 15px; + line-height: 1.7; + margin-top: 14px; +} + +/* business-flow diagram: online booking / direct cashier both funnel into +POS Offline, which registers the visitor into Queue App, syncing into +Web Admin once online. */ +.dash-flow { + display: flex; + align-items: center; + justify-content: center; + gap: 0; +} +.dash-flow-row { + display: flex; + flex-direction: column; + gap: 16px; + flex-shrink: 0; +} + +.dash-source-card { + background: var(--color-cream-50); + border: 1px solid var(--color-line); + border-radius: var(--radius-xl); + padding: 22px 22px; + text-align: left; + transition: + transform 0.2s ease, + box-shadow 0.2s ease, + border-color 0.2s ease; +} +/* NEW: hover effect — card lifts with a soft shadow and an accent-colored border */ +.dash-source-card:hover { + transform: translateY(-5px); + box-shadow: 0 22px 40px -22px rgba(17, 43, 60, 0.3); + border-color: var(--color-brand-1-600); +} +.dash-source-card.accent:hover { + border-color: var(--color-brand-3-400); + box-shadow: 0 22px 40px -18px rgba(0, 0, 0, 0.45); +} +.dash-source-card.wide { + max-width: 230px; + min-width: 180px; +} +.dash-source-card.accent { + background: var(--color-brand-1-900); + border-color: var(--color-brand-1-900); + color: var(--color-brand-3-400); +} +.dash-source-card.accent h4 { + color: var(--color-white); +} +.dash-source-card.accent p { + color: rgba(255, 255, 255, 0.62); +} +.dash-source-card.accent .dash-source-icon { + background: rgba(255, 255, 255, 0.1); +} +.dash-source-card.accent .dash-source-icon svg { + stroke: var(--color-brand-3-400); +} + +.dash-source-icon { + width: 40px; + height: 40px; + border-radius: var(--radius-md); + background: var(--color-white); + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 14px; + flex-shrink: 0; +} +.dash-source-icon i { + font-size: 18px; +} +.dash-source-card h4 { + font-size: 14px; +} +.dash-source-card p { + font-size: 12px; + color: var(--color-ink-600); + line-height: 1.55; + margin-top: 6px; +} + +/* animated dashed connector between flow steps */ +/* CHANGED: connector arrows — thicker, curved, animated navy→orange gradient stroke (was a flat straight ink-400 dash) */ +.dash-flow-arrow { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 44px; +} +.dash-flow-arrow svg.flow-curve { + width: 100%; + height: 20px; + overflow: visible; +} +.flow-dash { + fill: none; + stroke: url(#flowGrad); + stroke-width: 3; + stroke-linecap: round; + stroke-dasharray: 5 7; + vector-effect: non-scaling-stroke; + animation: flowDash 1s linear infinite; +} +.flow-head { + fill: none; + stroke: var(--color-brand-2-500); + stroke-width: 3; + stroke-linecap: round; + stroke-linejoin: round; + vector-effect: non-scaling-stroke; +} +@keyframes flowDash { + to { + stroke-dashoffset: -24; + } +} + +/* NEW: merge connector — two separate curved arrows (Order Online + Buy at Cashier) flowing into POS Offline */ +.dash-flow-merge { + align-self: stretch; + flex-shrink: 0; + width: 60px; + min-height: 150px; +} +.dash-flow-merge svg.flow-curve { + width: 100%; + height: 100%; + overflow: visible; +} + +/* NEW: plain animated arrow (uil-style chevron) shown only on mobile in place of the curved gradient connector */ +.flow-simple { + display: none; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + color: var(--color-brand-2-500); +} +.flow-simple i { + font-size: 24px; + margin: 12px 0px; + animation: flowBounce 1.2s ease-in-out infinite; +} +@keyframes flowBounce { + 0%, + 100% { + transform: translateY(-3px); + opacity: 0.55; + } + 50% { + transform: translateY(4px); + opacity: 1; + } +} + +@media (max-width: 900px) { + .dash-head { + text-align: left; + margin: 0 0 44px; + } + .dash-flow { + flex-direction: column; + align-items: stretch; + } + .dash-flow-row { + flex-direction: row; + flex-wrap: wrap; + } + + .dash-source-icon { + align-items: center; + } + .dash-source-card.wide { + text-align: center; + max-width: none; + flex: 1 1; + justify-items: center; + height: 100%; + } + .dash-flow-arrow { + width: 100%; + /* height: 34px; */ + } + .dash-flow-merge { + width: 100%; + min-height: 34px; + } + .flow-curve { + display: none; + } + .flow-simple { + display: flex; + } +} + +/* ---------- Pricing ---------- */ +.pricing { + background-color: var(--color-brand-1-900); + background-image: + radial-gradient(circle, rgba(255, 255, 255, 0.06) 2px, transparent 1px), + linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 70%); + background-size: + 22px 22px, + 100% 100%; + padding: 112px 0 120px; +} + +.pricing-head { + text-align: center; + max-width: 620px; + margin: 0 auto 52px; +} + +.pricing-head h2 { + color: var(--color-white); + font-size: 32px; +} + +.pricing-head p { + color: rgba(255, 255, 255, 0.6); + font-size: 15px; + line-height: 1.7; + margin-top: 14px; +} + +.pricing-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 18px; +} + +.price-card { + background: var(--color-white); + border-radius: var(--radius-md); + padding: 22px 20px 24px; + display: flex; + flex-direction: column; + border: 1px solid transparent; + transition: + transform 0.3s cubic-bezier(0.16, 0.8, 0.44, 1), + box-shadow 0.3s ease, + border-color 0.3s ease; +} + +.price-card:hover { + transform: translateY(-6px); + box-shadow: 0 30px 60px -24px rgba(17, 43, 60, 0.35); + border-color: var(--color-brand-2-500); +} + +.price-card:hover .btn-orange { + background: var(--color-brand-1-900); +} + +.price-card h3 { + font-size: 18px; + margin-bottom: 14px; +} + +.price-tags { + display: flex; + flex-wrap: wrap; + gap: 2px; + margin-bottom: 18px; + min-height: 42px; +} + +.tag { + font-size: 10px; + height: fit-content; + font-weight: 600; + color: var(--color-white); + border: 1px solid var(--color-line); + border-radius: var(--radius-full); + padding: 4px 10px; + background-color: var(--color-brand-1-600); + font-family: var(--font-body); +} + +.price-desc { + min-height: 20px; + font-size: 13px; + color: var(--color-ink-600); + line-height: 1.6; + margin-bottom: 20px; +} + +.price-card .btn-orange { + width: 100%; + justify-content: center; + margin-bottom: 22px; + transition: + transform 0.15s ease, + background 0.2s ease; +} + +.price-card .feat-label { + font-size: 11.5px; + font-weight: 700; + color: var(--color-ink-400); + text-transform: uppercase; + letter-spacing: 0.03em; + margin-bottom: 12px; + display: block; + font-family: var(--font-body); +} + +.feat-list { + display: flex; + flex-direction: column; + gap: 10px; +} + +.feat-list li { + display: flex; + align-items: flex-start; + gap: 8px; + font-size: 13px; + color: var(--color-ink-600); + line-height: 1.5; +} + +.feat-list svg { + width: 15px; + height: 15px; + stroke: var(--color-brand-2-500); + flex-shrink: 0; + margin-top: 2px; +} + +/* ---------- Contact ---------- */ +.contact { + background: var(--color-cream-50); + padding: 110px 0; +} + +.contact-card { + display: grid; + grid-template-columns: 0.9fr 1.1fr; + border-radius: var(--radius-2xl); + overflow: hidden; + box-shadow: 0 30px 60px -32px rgba(17, 43, 60, 0.3); +} + +.contact-info { + background-color: var(--color-brand-1-900); + background-image: + radial-gradient(circle, rgba(255, 255, 255, 0.07) 1.8px, transparent 1px), + linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 75%); + background-size: + 28px 28px, + 100% 100%; + padding: 52px 46px; + position: relative; + overflow: hidden; +} + +.contact-info h2 { + color: var(--color-white); + font-size: 27px; + line-height: 1.25; + position: relative; + z-index: 1; +} + +.contact-info > p { + color: rgba(255, 255, 255, 0.62); + margin-top: 14px; + font-size: 14px; + line-height: 1.7; + max-width: 394px; + position: relative; + z-index: 1; +} + +.contact-list { + margin-top: 36px; + display: flex; + flex-direction: column; + gap: 20px; + position: relative; + z-index: 1; +} + +.contact-item { + display: flex; + gap: 14px; + align-items: flex-start; +} + +.contact-item .ci-icon { + width: 38px; + height: 38px; + border-radius: var(--radius-md); + background: rgba(255, 255, 255, 0.08); + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.contact-item i { + font-size: 14px; + color: white; +} + +.contact-item b { + display: block; + font-size: 14px; + color: var(--color-white); + font-family: var(--font-body); + font-weight: 600; +} + +.contact-item span { + font-size: 12px; + color: rgba(255, 255, 255, 0.58); +} + +.contact-form { + background: var(--color-white); + padding: 52px 46px; +} + +.contact-form h3 { + font-size: 16px; + margin-bottom: 22px; +} + +.field-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} + +.field { + margin-bottom: 16px; +} + +.field label { + font-size: 12px; + font-weight: 600; + color: var(--color-ink-900); + margin-bottom: 6px; + display: block; + font-family: var(--font-body); +} + +.field input, +.field textarea { + width: 100%; + border: 1px solid var(--color-line); + border-radius: var(--radius-md); + padding: 12px 14px; + font-family: var(--font-body); + font-size: 14px; + color: var(--color-ink-900); + background: var(--color-cream-50); + transition: + border-color 0.15s ease, + background 0.15s ease; +} + +.field input:hover, +.field textarea:hover { + border-color: #c7cdc9; +} + +.field input:focus, +.field textarea:focus { + outline: none; + border-color: var(--color-brand-2-500); + background: var(--color-white); + box-shadow: 0 0 0 3px rgba(246, 107, 14, 0.12); +} + +.field textarea { + min-height: 110px; + resize: vertical; +} + +.contact-form .btn-orange { + width: 100%; + justify-content: center; + margin-top: 4px; +} + +.form-note { + font-size: 11.5px; + color: var(--color-ink-400); + margin-top: 12px; + text-align: center; +} + +@media (max-width: 520px) { + .field-row { + grid-template-columns: 1fr; + } +} + +/* ---------- Footer ---------- */ +.footer { + background-color: var(--color-brand-1-900); + background-image: linear-gradient(160deg, var(--color-brand-1-600) 0%, var(--color-brand-1-900) 65%); + border-top: 1px solid var(--color-line-dark); + padding: 56px 0 28px; +} + +.footer-top { + display: flex; + justify-content: space-between; + gap: 40px; + flex-wrap: wrap; + margin-bottom: 44px; +} + +.footer-brand p { + color: rgba(255, 255, 255, 0.5); + font-size: 14px; + line-height: 1.7; + margin-top: 14px; + max-width: 360px; +} + +.footer-brand p.address { + margin-top: 54px; +} + +.footer-cols { + display: flex; + gap: 64px; + flex-wrap: wrap; +} + +.footer-col { + width: 180px; +} + +.footer-col h5 { + color: var(--color-white); + font-size: 13px; + font-family: var(--font-body); + margin-bottom: 14px; +} + +.footer-col a { + display: block; + color: rgba(255, 255, 255, 0.55); + font-size: 14px; + margin-bottom: 10px; +} + +.footer-col a:hover { + color: var(--color-white); +} + +.footer-bottom { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 12px; + padding-top: 24px; + border-top: 1px solid var(--color-line-dark); +} + +.footer-bottom p { + color: rgba(255, 255, 255, 0.4); + font-size: 12px; +} + +.footer-social { + display: flex; + gap: 10px; +} + +.footer-social a { + width: 34px; + height: 34px; + border-radius: 50%; + border: 1px solid var(--color-line-dark); + display: flex; + align-items: center; + justify-content: center; +} + +.footer-social i { + font-size: 12px; + color: white; + stroke: rgba(255, 255, 255, 0.7); +} + +/* ---------- Responsive ---------- */ +@media (max-width: 980px) { + .hero h1 { + font-size: 38px; + } + + .stat-row { + grid-template-columns: repeat(2, 1fr); + } + + .why-grid { + grid-template-columns: 1fr; + gap: 36px; + } + + .why-sticky { + position: static; + } + + .bento { + grid-template-columns: 1fr; + } + + .bento-r1, + .bento-r2, + .bento-r3, + .bento-r4 { + grid-column: auto; + grid-row: auto; + } + + .pricing-grid { + grid-template-columns: repeat(2, 1fr); + } + + .contact-card { + grid-template-columns: 1fr; + } +} + +@media (max-width: 680px) { + .container { + padding: 0 20px; + } + + .nav-links { + position: absolute; + top: 100%; + left: 0; + right: 0; + background: rgba(253, 253, 253, 1); + border-radius: var(--radius-md); + flex-direction: column; + align-items: flex-start; + padding: 20px 20px 26px; + gap: 32px; + box-shadow: 0 20px 30px -20px rgba(0, 0, 0, 0.2); + display: none; + } + + .nav-links.open { + display: flex; + } + + .nav-divider { + width: 100%; + height: 1px; + background-color: rgba(0, 0, 0, 0.1); + } + + .nav-links a { + width: 100% !important; + align-items: center; + text-align: center; + justify-content: center; + color: var(--color-ink-900) !important; + } + + .nav-links .btn { + color: var(--color-white) !important; + width: 100% !important; + justify-content: center; + } + + .nav-toggle { + display: block; + } + + .stat-row { + grid-template-columns: 1fr 1fr; + } + + .access-illustration { + flex-direction: column; + align-items: flex-start; + } + + .pricing-grid { + grid-template-columns: 1fr; + } + + .footer-top { + flex-direction: column; + } + + .destinations-head-row { + align-items: flex-start; + } + + .contact-info, + .contact-form { + padding: 36px 26px; + } +} diff --git a/apps/product-site/src/components/DestinationsCarousel.tsx b/apps/product-site/src/components/DestinationsCarousel.tsx new file mode 100644 index 0000000..07c8269 --- /dev/null +++ b/apps/product-site/src/components/DestinationsCarousel.tsx @@ -0,0 +1,227 @@ +"use client"; + +import { useEffect, useRef } from "react"; + +export function DestinationsCarousel({ + header, + children +}: { + header: React.ReactNode; + children: React.ReactNode; +}) { + const viewportRef = useRef(null); + const trackRef = useRef(null); + const dotsRef = useRef(null); + const prevBtnRef = useRef(null); + const nextBtnRef = useRef(null); + + useEffect(() => { + const viewport = viewportRef.current; + const track = trackRef.current; + const dotsWrap = dotsRef.current; + if (!track || !viewport || !dotsWrap) return; + + const realCards = Array.from(track.children) as HTMLElement[]; + const n = realCards.length; + if (n === 0) return; + + const CARD_WIDTH = 200; + const ACTIVE_WIDTH = 320; + const GAP = 16; + let isAnimating = false; + + function realIndexOf(pos: number) { + return ((pos % n) + n) % n; + } + + function widthOfSlot(i: number, activeReal: number) { + return realIndexOf(i) === activeReal ? ACTIVE_WIDTH : CARD_WIDTH; + } + + dotsWrap.innerHTML = ""; + const dots: HTMLButtonElement[] = []; + realCards.forEach((c, i) => { + const d = document.createElement("button"); + d.setAttribute("aria-label", "Ke slide " + (i + 1)); + d.addEventListener("click", () => { + goTo(i); + resetAutoplay(); + }); + dotsWrap.appendChild(d); + dots.push(d); + }); + + const beforeClones = realCards.map((c) => { + const cl = c.cloneNode(true) as HTMLElement; + cl.setAttribute("aria-hidden", "true"); + return cl; + }); + const afterClones = realCards.map((c) => { + const cl = c.cloneNode(true) as HTMLElement; + cl.setAttribute("aria-hidden", "true"); + return cl; + }); + + track.innerHTML = ""; + beforeClones.concat(realCards, afterClones).forEach((el) => { + track.appendChild(el); + }); + + const slots = Array.from(track.children) as HTMLElement[]; + let position = n + 2; + + function render(instant: boolean) { + if (instant) track!.classList.add("no-anim"); + else track!.classList.remove("no-anim"); + + const activeReal = realIndexOf(position); + + let offset = 0; + for (let i = 0; i < position; i++) { + offset += widthOfSlot(i, activeReal) + GAP; + } + offset += widthOfSlot(position, activeReal) / 2; + + const viewportRect = viewport!.getBoundingClientRect(); + const translate = viewportRect.width / 2 - offset; + track!.style.transform = "translateX(" + translate + "px)"; + + slots.forEach((s, i) => { + const isActive = realIndexOf(i) === activeReal; + s.classList.toggle("active", isActive); + }); + dots.forEach((d, i) => { + d.classList.toggle("on", i === activeReal); + }); + + if (instant) { + void track!.offsetWidth; + track!.classList.remove("no-anim"); + } + } + + function goToPosition(pos: number) { + position = pos; + isAnimating = true; + render(false); + } + + function next() { + if (isAnimating) return; + goToPosition(position + 1); + } + + function prev() { + if (isAnimating) return; + goToPosition(position - 1); + } + + function goTo(realIndex: number) { + if (isAnimating) return; + goToPosition(n + realIndex); + } + + const onTransitionEnd = (e: TransitionEvent) => { + if (e.target !== track || e.propertyName !== "transform") return; + if (position >= 2 * n) { + position -= n; + render(true); + } else if (position < n) { + position += n; + render(true); + } + isAnimating = false; + }; + track.addEventListener("transitionend", onTransitionEnd); + + const onPrevClick = () => { prev(); resetAutoplay(); }; + const onNextClick = () => { next(); resetAutoplay(); }; + + const prevBtn = prevBtnRef.current; + const nextBtn = nextBtnRef.current; + if (prevBtn) prevBtn.addEventListener("click", onPrevClick); + if (nextBtn) nextBtn.addEventListener("click", onNextClick); + + const onTrackClick = (e: MouseEvent) => { + const target = e.target as HTMLElement; + const card = target.closest('.dest-card') as HTMLElement; + if (!card || isAnimating) return; + + const slotsArray = Array.from(track.children) as HTMLElement[]; + const slotIndex = slotsArray.indexOf(card); + + if (slotIndex !== -1) { + goToPosition(slotIndex); + resetAutoplay(); + } + }; + track.addEventListener("click", onTrackClick); + + let autoplayTimer: ReturnType; + function startAutoplay() { + autoplayTimer = setInterval(next, 5000); + } + function stopAutoplay() { + clearInterval(autoplayTimer); + } + function resetAutoplay() { + stopAutoplay(); + startAutoplay(); + } + viewport.addEventListener("mouseenter", stopAutoplay); + viewport.addEventListener("mouseleave", startAutoplay); + + const onResize = () => render(true); + window.addEventListener("resize", onResize); + + render(true); + startAutoplay(); + + return () => { + stopAutoplay(); + window.removeEventListener("resize", onResize); + track.removeEventListener("transitionend", onTransitionEnd); + track.removeEventListener("click", onTrackClick); + viewport.removeEventListener("mouseenter", stopAutoplay); + viewport.removeEventListener("mouseleave", startAutoplay); + if (prevBtn) prevBtn.removeEventListener("click", onPrevClick); + if (nextBtn) nextBtn.removeEventListener("click", onNextClick); + + track.innerHTML = ""; + realCards.forEach((c) => track.appendChild(c)); + dotsWrap.innerHTML = ""; + }; + }, [header, children]); + + return ( + <> +
+ {header} +
+ + +
+
+ +
+
+ {children} +
+
+ +
+ + ); +} diff --git a/apps/product-site/src/components/LanguageSwitcher.tsx b/apps/product-site/src/components/LanguageSwitcher.tsx new file mode 100644 index 0000000..ea426c5 --- /dev/null +++ b/apps/product-site/src/components/LanguageSwitcher.tsx @@ -0,0 +1,39 @@ +'use client'; + +import { usePathname, useRouter } from '@/i18n/routing'; +import { useLocale } from 'next-intl'; +import { ChangeEvent } from 'react'; + +export function LanguageSwitcher() { + const locale = useLocale(); + const router = useRouter(); + const pathname = usePathname(); + + function onSelectChange(event: ChangeEvent) { + const nextLocale = event.target.value; + router.replace(pathname, { locale: nextLocale }); + } + + return ( + + ); +} diff --git a/apps/product-site/src/i18n/request.ts b/apps/product-site/src/i18n/request.ts new file mode 100644 index 0000000..678a2a2 --- /dev/null +++ b/apps/product-site/src/i18n/request.ts @@ -0,0 +1,15 @@ +import {getRequestConfig} from 'next-intl/server'; +import {routing} from './routing'; + +export default getRequestConfig(async ({requestLocale}) => { + let locale = await requestLocale; + + if (!locale || !routing.locales.includes(locale as any)) { + locale = routing.defaultLocale; + } + + return { + locale, + messages: (await import(`../../messages/${locale}.json`)).default + }; +}); diff --git a/apps/product-site/src/i18n/routing.ts b/apps/product-site/src/i18n/routing.ts new file mode 100644 index 0000000..220cfc4 --- /dev/null +++ b/apps/product-site/src/i18n/routing.ts @@ -0,0 +1,10 @@ +import {defineRouting} from 'next-intl/routing'; +import {createNavigation} from 'next-intl/navigation'; + +export const routing = defineRouting({ + locales: ['en', 'id'], + defaultLocale: 'en' +}); + +export const {Link, redirect, usePathname, useRouter} = + createNavigation(routing); diff --git a/apps/product-site/src/middleware.ts b/apps/product-site/src/middleware.ts new file mode 100644 index 0000000..84283db --- /dev/null +++ b/apps/product-site/src/middleware.ts @@ -0,0 +1,8 @@ +import createMiddleware from 'next-intl/middleware'; +import {routing} from './i18n/routing'; + +export default createMiddleware(routing); + +export const config = { + matcher: ['/', '/(id|en)/:path*'] +}; diff --git a/apps/product-site/tsconfig.json b/apps/product-site/tsconfig.json new file mode 100644 index 0000000..d1a5693 --- /dev/null +++ b/apps/product-site/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "@repo/typescript-config/nextjs.json", + "compilerOptions": { + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"] + } + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts", + "**/*.mts" + ], + "exclude": ["node_modules"] +} diff --git a/package.json b/package.json index c04febc..f63c84f 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,14 @@ "build:docs-dev": "turbo run build --filter=docs-dev", "build:desktop": "turbo run build --filter=desktop", "build:showcase": "turbo run build --filter=showcase", + "build:product-site": "turbo run build --filter=product-site", "dev": "turbo run dev", "dev:web": "turbo run dev --filter=web", "dev:landing": "turbo run dev --filter=landing", "dev:docs-dev": "turbo run dev --filter=docs-dev", "dev:desktop": "turbo run dev --filter=web --filter=desktop --parallel", "dev:showcase": "turbo run dev --filter=showcase", + "dev:product-site": "turbo run dev --filter=product-site", "package:desktop": "pnpm run build:desktop && pnpm --filter desktop run package", "package:mac": "pnpm run build:desktop && pnpm --filter desktop run package:mac", "package:win": "pnpm run build:desktop && pnpm --filter desktop run package:win", @@ -27,6 +29,7 @@ "typecheck:landing": "turbo run typecheck --filter=landing", "typecheck:desktop": "turbo run typecheck --filter=desktop", "typecheck:showcase": "turbo run typecheck --filter=showcase", + "typecheck:product-site": "turbo run typecheck --filter=product-site", "check:all": "turbo run lint typecheck test", "clean:workspaces": "rm -rf node_modules **/*/node_modules .turbo **/*/.turbo dist **/*/dist out **/*/out web-dist **/*/web-dist release **/*/release", "nuke": "pnpm run clean:workspaces && pnpm install && pnpm build" diff --git a/packages/brand/public/favicon.svg b/packages/brand/public/favicon.svg index 7abbacf..d73eeaf 100644 --- a/packages/brand/public/favicon.svg +++ b/packages/brand/public/favicon.svg @@ -1,6 +1,4 @@ - - - - - + + + diff --git a/packages/brand/public/logo-primary.png b/packages/brand/public/logo-primary.png new file mode 100644 index 0000000000000000000000000000000000000000..3715f387ae6d8b5e90e7d4ac06316605805ec5bd GIT binary patch literal 2363 zcmV-B3B>k^P)7a_Z@DqzTiUbJD)R2 zSF(stWWl;`G7%AT#w7D4D9{th-zdarv(DHz@={ILSP+D{GgOQ|0b%$dA|hako!=hF zV7o^CqEEd{(ut8jL_`E0hQZ}PQsI0i(;Y{hFJjgB=1)FhGM;=pDh8GYmxrk9so{wt z_+wP-z%_U$>2+u$GTIPto7yytpP`aK*iRwpTAxjCNMF0!SE^ap+FyYU!c5FJ9+nGO zJ&aG{*BfJLP=YAO?z7lZH%CvnV+n3Im1*TZDE=Pd>%F*mDdi)%p1SMVq0MV_kRYVq zAu3V(kx`aIEzk1*8%(MPBgsE->azV|!<<-$O!!LLjl6t*{>7_4(Z5&UqUgOoG$dW5 za=C)-3E;Y&1(|RBTe%Sblphiyygw={sN|pEzxnGex|E@ zg}>lV9kzSwWs{MP1NAexFi?Oye(IIo>UfvdcuKH!o83VF=l(nb_fDKz#ND;N66{rI zE)E8g_ND$Fs#A&2J!@&h_1R^chLf``dMcB2qt7Tf#}-0%!9LEV{!cQeQ>+%D`SKZ^ z@t^R?w)weAz_dVjt^X43jOX@Ag2~Z-4>eK*+%}T;65XSxMlI!C7|+E}#{Wx+TGdUBJPB%PK@`Z)CuN=6xG6KUF+&DISV+>QIGoRJ;z%p^aLNEAL`Ae z4^nvRrYBjSwG2Z0O1*3{`YTk%G+qm%>4|QrONAq5`zTP&_YQrmo!QqB z=di)Dk7kWNztrLj~z*Rru8pEV|j#r5~xQN zf~RC6*Bu?d4OXo1GwI@pqCc-Xx5BH#`D9okbR!-bMO@=4sjR=jMHp|+4AvEeq)UAD z+wq~KMm>t4Sy$y)iDnom&UH*KUWRG$)gO<<`LE_bh5hhdf?K2kCo}RW_UyTz)o}7A z(8sA46p*Xl>oYdja97J+E2N7F1BVjgQ2Tp{Fj`M9HQ4Y3Tv<@RqhDL|J+SoR{>-<9 z$K`8Ci5NLvl*G9V(4aDKGvsE62pbc)^XBM=ERgS8!$zuqS|=TuGIxzII={@Xm@FZ} zMR#C}2&PUNn){Uj_l>fl(FgN>G5SySn!$#7%26*<$)k^mNTUk-%WI-m{ca^Xo`M@l zYUH2RMnfO{o$TXsaR*r5kzT;iA5_8TE^eJ3Sr2(X3*=jbI)csA8P*GFAioIYzwKIA z*ZsC(%%?_Kn-A`yq3m5?EN+4~bWzZ_L+N7`I-WD1fsxO33T_CS5aDu}1pI57A9`>p zy1{y2MFX+CLqrp-^=wYrW>E6s=1eK*J>45?WCY_{1XZ-K*tspb)yGNe%mhAv zJpsf8F%ULRwcSXBl>+la-co)Y$lt{R1E(W;;eAVaQ1_)Sts>?Lx?#X1ZH`yvYVbf~ z)R}dF1es45h?Pg^f<#1sIws&_N%Z@eAKHu(1tK;bjp8D8Pa)s}6$7T|hB68#S$)V^ z?LVFh>X^USxrHAvU(71UFVd125r!pVW@yIamU5_Df$jEcd*q#i{xzPh2Fq2HW#H44aw zNlzW#z@SBUsJh)NqkP{VZxfi0CS=RG-4;W)mM5PjeyCnz&G*o+ub(aB!)-Fdn;Y|n z&LKC7_#Cg)B~YG(8vi+L?s1B79!Wb(oNQ80UI+5eHGHjfk~hSoUZNR%b}sXu!G4|- z&uvrQ=NqXwK=Fb%m7;R=4g&Qru)eraXMK$e^&fJ#^qDF}6+g-{-Zu&C5cY->BCu6} z;#X$mXXx(}WyFwgz@ssRB4z!Y>07iIvSb==#8RJi{Y^YY#ei)gf^AmQTi39o<6Ro# zO+;U9(wppDT!um2pz`Sq0`*2o;Ps*+8`Pfm_C7u9_4-eyMsRL9p_E$$ASLbHrGy@i8uEh zjr}z%X4%<=sDb#kDoi=z>Q*tz;^lD4C6azF2A?s zs#gyQA|fJYz!pBuWJ!vMh`1-V_*)D3+}i{j5fO1ulsaGeV<*1~18&dZhcZ9)vYNRl hV4I~2L_~ap_#c%BlI9(+K4Aa=002ovPDHLkV1h;)g3bT{ literal 0 HcmV?d00001 diff --git a/packages/brand/public/logo-primary.svg b/packages/brand/public/logo-primary.svg new file mode 100644 index 0000000..245f7cf --- /dev/null +++ b/packages/brand/public/logo-primary.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/configs/eslint/nextjs.js b/packages/configs/eslint/nextjs.js new file mode 100644 index 0000000..095a24e --- /dev/null +++ b/packages/configs/eslint/nextjs.js @@ -0,0 +1,61 @@ +const { resolve } = require("node:path"); + +const project = resolve(process.cwd(), "tsconfig.json"); + +/* + * This is a custom ESLint configuration for use with + * Next.js apps. + * + * This config extends the Vercel Engineering Style Guide. + * For more information, see https://github.com/vercel/style-guide + * + */ + +module.exports = { + extends: [ + ...[ + "@vercel/style-guide/eslint/node", + "@vercel/style-guide/eslint/typescript", + "@vercel/style-guide/eslint/browser", + "@vercel/style-guide/eslint/react", + "@vercel/style-guide/eslint/next", + ].map(require.resolve), + "turbo", + ], + parserOptions: { + project, + }, + globals: { + React: true, + JSX: true, + }, + settings: { + "import/resolver": { + typescript: { + project, + }, + node: { + extensions: [".mjs", ".js", ".jsx", ".ts", ".tsx"], + }, + }, + }, + ignorePatterns: ["node_modules/", "dist/"], + // add rules configurations here + rules: { + "import/no-default-export": "off", + "unicorn/filename-case": "off", + "react/jsx-sort-props": "off", + "import/order": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/require-await": "off", + "react/no-unescaped-entities": "off", + "react/display-name": "off", + "@next/next/no-img-element": "off", + "@typescript-eslint/no-misused-promises": "off" + }, +}; diff --git a/packages/configs/eslint/nextjs.mjs b/packages/configs/eslint/nextjs.mjs new file mode 100644 index 0000000..42877cd --- /dev/null +++ b/packages/configs/eslint/nextjs.mjs @@ -0,0 +1,21 @@ +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +export const nextjsConfig = [ + ...nextVitals, + ...nextTs, + { + ignores: [ + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ] + }, + { + rules: { + "@typescript-eslint/no-explicit-any": "off", + "@next/next/no-img-element": "off" + } + } +]; diff --git a/packages/configs/eslint/package.json b/packages/configs/eslint/package.json index 621ae82..709ee6b 100644 --- a/packages/configs/eslint/package.json +++ b/packages/configs/eslint/package.json @@ -6,7 +6,9 @@ "index.js", "library.js", "react.js", - "storybook.js" + "storybook.js", + "nextjs.js", + "nextjs.mjs" ], "dependencies": { "@typescript-eslint/eslint-plugin": "^7.1.0", diff --git a/packages/configs/typescript/nextjs.json b/packages/configs/typescript/nextjs.json new file mode 100644 index 0000000..2bcbdf1 --- /dev/null +++ b/packages/configs/typescript/nextjs.json @@ -0,0 +1,26 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./base.json", + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ] + }, + "exclude": ["node_modules"] +} diff --git a/packages/core-api/package.json b/packages/core-api/package.json index 3ba255d..54baa2e 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -16,6 +16,9 @@ "test:watch": "vitest --watch", "typecheck": "tsc --noEmit" }, + "peerDependencies": { + "react": ">=18.0.0" + }, "dependencies": { "@grafana/faro-react": "^2.1.0", "@grafana/faro-web-sdk": "^2.1.0", @@ -29,6 +32,8 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.1", + "react": "^19.2.3", + "react-dom": "^19.2.3", "typescript": "5.5.4", "vitest": "^4.0.17" } diff --git a/packages/core-i18n/package.json b/packages/core-i18n/package.json index c9e1650..1e86b8b 100644 --- a/packages/core-i18n/package.json +++ b/packages/core-i18n/package.json @@ -11,15 +11,21 @@ "lint": "eslint \"src/**/*.ts\"", "typecheck": "tsc --noEmit" }, + "peerDependencies": { + "react": ">=18.0.0", + "react-i18next": ">=15.0.0" + }, "dependencies": { "@repo/utils": "workspace:*", - "i18next": "^24.2.2", - "react-i18next": "^15.4.0" + "i18next": "^24.2.2" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/react": "^19.0.8", + "react": "^19.2.3", + "react-dom": "^19.2.3", + "react-i18next": "^15.4.0", "typescript": "5.5.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68c45b1..83fe5d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,6 +150,55 @@ importers: specifier: ^5.1.4 version: 5.4.17(@types/node@22.19.3) + apps/product-site: + dependencies: + '@repo/brand': + specifier: workspace:* + version: link:../../packages/brand + next: + specifier: 16.2.12 + version: 16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4) + next-intl: + specifier: ^4.13.4 + version: 4.13.4(next@16.2.12)(react@19.2.4)(typescript@5.5.4) + react: + specifier: 19.2.4 + version: 19.2.4 + react-dom: + specifier: 19.2.4 + version: 19.2.4(react@19.2.4) + devDependencies: + '@repo/eslint-config': + specifier: workspace:* + version: link:../../packages/configs/eslint + '@repo/typescript-config': + specifier: workspace:* + version: link:../../packages/configs/typescript + '@tailwindcss/postcss': + specifier: ^4 + version: 4.3.3 + '@types/node': + specifier: ^20 + version: 20.19.39 + '@types/react': + specifier: ^19 + version: 19.2.7 + '@types/react-dom': + specifier: ^19 + version: 19.2.3(@types/react@19.2.7) + eslint: + specifier: ^9 + version: 9.39.5 + eslint-config-next: + specifier: 16.2.12 + version: 16.2.12(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4) + tailwindcss: + specifier: ^4 + version: 4.3.3 + typescript: + specifier: ^5 + version: 5.5.4 + apps/showcase: dependencies: '@hookform/resolvers': @@ -385,7 +434,7 @@ importers: dependencies: '@grafana/faro-react': specifier: ^2.1.0 - version: 2.7.0(react@19.2.3) + version: 2.7.0(react-dom@19.2.3)(react@19.2.3) '@grafana/faro-web-sdk': specifier: ^2.1.0 version: 2.7.0 @@ -414,6 +463,12 @@ importers: eslint: specifier: ^8.57.1 version: 8.57.1 + react: + specifier: ^19.2.3 + version: 19.2.3 + react-dom: + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) typescript: specifier: 5.5.4 version: 5.5.4 @@ -469,9 +524,6 @@ importers: i18next: specifier: ^24.2.2 version: 24.2.3(typescript@5.5.4) - react-i18next: - specifier: ^15.4.0 - version: 15.7.4(i18next@24.2.3)(react-dom@19.2.3)(react@19.2.3)(typescript@5.5.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -482,6 +534,15 @@ importers: '@types/react': specifier: ^19.0.8 version: 19.2.7 + react: + specifier: ^19.2.3 + version: 19.2.3 + react-dom: + specifier: ^19.2.3 + version: 19.2.3(react@19.2.3) + react-i18next: + specifier: ^15.4.0 + version: 15.7.4(i18next@24.2.3)(react-dom@19.2.3)(react@19.2.3)(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -891,6 +952,11 @@ packages: '@algolia/client-common': 5.55.1 dev: true + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + /@antfu/install-pkg@1.1.0: resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} dependencies: @@ -1255,7 +1321,7 @@ packages: dependencies: commander: 5.1.0 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.5 dev: true /@electron/get@2.0.3: @@ -1346,7 +1412,6 @@ packages: dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 - dev: false optional: true /@emnapi/runtime@1.8.1: @@ -1354,7 +1419,6 @@ packages: requiresBuild: true dependencies: tslib: 2.8.1 - dev: false optional: true /@emnapi/wasi-threads@1.1.0: @@ -1362,7 +1426,6 @@ packages: requiresBuild: true dependencies: tslib: 2.8.1 - dev: false optional: true /@esbuild/aix-ppc64@0.21.5: @@ -1783,6 +1846,16 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils@4.10.1(eslint@9.39.5): + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 9.39.5 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/eslint-utils@4.5.1(eslint@8.57.1): resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1796,6 +1869,36 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + /@eslint-community/regexpp@4.12.2: + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/config-array@0.21.2: + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/config-helpers@0.4.2: + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/core': 0.17.0 + dev: true + + /@eslint/core@0.17.0: + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@types/json-schema': 7.0.15 + dev: true + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1812,10 +1915,45 @@ packages: transitivePeerDependencies: - supports-color + /@eslint/eslintrc@3.3.6: + resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.15.0 + debug: 4.4.3 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.3.0 + minimatch: 3.1.5 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.57.1: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.39.5: + resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/object-schema@2.1.7: + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/plugin-kit@0.4.1: + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 + dev: true + /@floating-ui/core@1.7.4: resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} requiresBuild: true @@ -1858,6 +1996,26 @@ packages: resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} dev: false + /@formatjs/fast-memoize@3.1.7: + resolution: {integrity: sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==} + dev: false + + /@formatjs/icu-messageformat-parser@3.5.15: + resolution: {integrity: sha512-5o4grXKotAB3JqQuisLApHG43g17N+paoRTa92Jiz35Zvfemq0cVf4EDvuxyHAzmsJji7igaEowicLO/VmfJ8Q==} + dependencies: + '@formatjs/icu-skeleton-parser': 2.1.11 + dev: false + + /@formatjs/icu-skeleton-parser@2.1.11: + resolution: {integrity: sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==} + dev: false + + /@formatjs/intl-localematcher@0.8.13: + resolution: {integrity: sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==} + dependencies: + '@formatjs/fast-memoize': 3.1.7 + dev: false + /@gar/promisify@1.1.3: resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} dev: true @@ -1869,7 +2027,7 @@ packages: '@opentelemetry/otlp-transformer': 0.218.0(@opentelemetry/api@1.9.1) dev: false - /@grafana/faro-react@2.7.0(react@19.2.3): + /@grafana/faro-react@2.7.0(react-dom@19.2.3)(react@19.2.3): resolution: {integrity: sha512-95wmypcDjHdGe64TCivq3DKLut9q3RRANgKoSLSQhGHmXdKTwE2Ov0+UdUkVQ9uu3KsGGQJRuXkldP0YMIEMiw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -1888,6 +2046,7 @@ packages: '@grafana/faro-web-tracing': 2.7.0 hoist-non-react-statics: 3.3.2 react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) transitivePeerDependencies: - supports-color dev: false @@ -1927,6 +2086,27 @@ packages: react-hook-form: 7.79.0(react@19.2.3) dev: false + /@humanfs/core@0.19.2: + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + dependencies: + '@humanfs/types': 0.15.0 + dev: true + + /@humanfs/node@0.16.8: + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + dev: true + + /@humanfs/types@0.15.0: + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + dev: true + /@humanwhocodes/config-array@0.13.0: resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -1944,6 +2124,11 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + /@humanwhocodes/retry@0.4.3: + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + dev: true + /@iconify-json/simple-icons@1.2.87: resolution: {integrity: sha512-8YciStObhSji3OZFmWAWK6kBujyqO5bLCxeDwLxf3CR3F4PVelq7keC2LBvgTqviWzSTysj5/g4PCFLiAMVGsw==} dependencies: @@ -1962,6 +2147,240 @@ packages: import-meta-resolve: 4.2.0 dev: true + /@img/colour@1.1.0: + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} + engines: {node: '>=18'} + requiresBuild: true + dev: false + optional: true + + /@img/sharp-darwin-arm64@0.34.5: + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + dev: false + optional: true + + /@img/sharp-darwin-x64@0.34.5: + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + dev: false + optional: true + + /@img/sharp-libvips-darwin-arm64@1.2.4: + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-darwin-x64@1.2.4: + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm64@1.2.4: + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm@1.2.4: + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-ppc64@1.2.4: + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-riscv64@1.2.4: + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-s390x@1.2.4: + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-x64@1.2.4: + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-arm64@1.2.4: + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-x64@1.2.4: + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-linux-arm64@0.34.5: + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + dev: false + optional: true + + /@img/sharp-linux-arm@0.34.5: + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + dev: false + optional: true + + /@img/sharp-linux-ppc64@0.34.5: + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + dev: false + optional: true + + /@img/sharp-linux-riscv64@0.34.5: + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + dev: false + optional: true + + /@img/sharp-linux-s390x@0.34.5: + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + dev: false + optional: true + + /@img/sharp-linux-x64@0.34.5: + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + dev: false + optional: true + + /@img/sharp-linuxmusl-arm64@0.34.5: + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + dev: false + optional: true + + /@img/sharp-linuxmusl-x64@0.34.5: + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + dev: false + optional: true + + /@img/sharp-wasm32@0.34.5: + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/runtime': 1.8.1 + dev: false + optional: true + + /@img/sharp-win32-arm64@0.34.5: + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-win32-ia32@0.34.5: + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-win32-x64@0.34.5: + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2162,6 +2581,87 @@ packages: '@emnapi/core': 1.8.1 '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 + optional: true + + /@next/env@16.2.12: + resolution: {integrity: sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==} + dev: false + + /@next/eslint-plugin-next@16.2.12: + resolution: {integrity: sha512-uF2z/qAK2q7B5/6CpnFcBRX6jOq5iCO+Uqh1UkJhXljX1JwLarLYhhoJadO6dPb6moTprOKewMXheBcbIoSbug==} + dependencies: + fast-glob: 3.3.1 + dev: true + + /@next/swc-darwin-arm64@16.2.12: + resolution: {integrity: sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-darwin-x64@16.2.12: + resolution: {integrity: sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-gnu@16.2.12: + resolution: {integrity: sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-arm64-musl@16.2.12: + resolution: {integrity: sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-gnu@16.2.12: + resolution: {integrity: sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-linux-x64-musl@16.2.12: + resolution: {integrity: sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-arm64-msvc@16.2.12: + resolution: {integrity: sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@next/swc-win32-x64-msvc@16.2.12: + resolution: {integrity: sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true dev: false optional: true @@ -2192,7 +2692,6 @@ packages: /@nolyfill/is-core-module@1.0.39: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} - dev: false /@npmcli/config@8.3.4: resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} @@ -2204,7 +2703,7 @@ packages: ini: 4.1.3 nopt: 7.2.1 proc-log: 4.2.0 - semver: 7.7.1 + semver: 7.7.4 walk-up-path: 3.0.1 transitivePeerDependencies: - bluebird @@ -2229,7 +2728,7 @@ packages: proc-log: 4.2.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.7.1 + semver: 7.7.4 which: 4.0.0 transitivePeerDependencies: - bluebird @@ -2269,7 +2768,7 @@ packages: json-parse-even-better-errors: 3.0.2 normalize-package-data: 6.0.2 proc-log: 4.2.0 - semver: 7.7.1 + semver: 7.7.4 transitivePeerDependencies: - bluebird dev: false @@ -2554,6 +3053,138 @@ packages: engines: {node: '>=14'} dev: false + /@parcel/watcher-android-arm64@2.6.0: + resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-arm64@2.6.0: + resolution: {integrity: sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-darwin-x64@2.6.0: + resolution: {integrity: sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-freebsd-x64@2.6.0: + resolution: {integrity: sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm-glibc@2.6.0: + resolution: {integrity: sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm-musl@2.6.0: + resolution: {integrity: sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-glibc@2.6.0: + resolution: {integrity: sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-arm64-musl@2.6.0: + resolution: {integrity: sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-glibc@2.6.0: + resolution: {integrity: sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-linux-x64-musl@2.6.0: + resolution: {integrity: sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-arm64@2.6.0: + resolution: {integrity: sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher-win32-x64@2.6.0: + resolution: {integrity: sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@parcel/watcher@2.6.0: + resolution: {integrity: sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + detect-libc: 2.1.2 + is-glob: 4.0.3 + node-addon-api: 7.1.1 + picomatch: 4.0.5 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.6.0 + '@parcel/watcher-darwin-arm64': 2.6.0 + '@parcel/watcher-darwin-x64': 2.6.0 + '@parcel/watcher-freebsd-x64': 2.6.0 + '@parcel/watcher-linux-arm-glibc': 2.6.0 + '@parcel/watcher-linux-arm-musl': 2.6.0 + '@parcel/watcher-linux-arm64-glibc': 2.6.0 + '@parcel/watcher-linux-arm64-musl': 2.6.0 + '@parcel/watcher-linux-x64-glibc': 2.6.0 + '@parcel/watcher-linux-x64-musl': 2.6.0 + '@parcel/watcher-win32-arm64': 2.6.0 + '@parcel/watcher-win32-x64': 2.6.0 + dev: false + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -2953,12 +3584,15 @@ packages: /@rtsao/scc@1.1.0: resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: false /@rushstack/eslint-patch@1.15.0: resolution: {integrity: sha512-ojSshQPKwVvSMR8yT2L/QtUkV5SXi/IfDiJ4/8d6UbTPjiHVmxZzUAzGD8Tzks1b9+qQkZa0isUOvYObedITaw==} dev: false + /@schummar/icu-type-parser@1.21.5: + resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} + dev: false + /@shikijs/core@2.5.0: resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} dependencies: @@ -3034,6 +3668,157 @@ packages: lodash: 4.17.21 dev: false + /@swc/core-darwin-arm64@1.15.46: + resolution: {integrity: sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@swc/core-darwin-x64@1.15.46: + resolution: {integrity: sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm-gnueabihf@1.15.46: + resolution: {integrity: sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm64-gnu@1.15.46: + resolution: {integrity: sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-arm64-musl@1.15.46: + resolution: {integrity: sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-ppc64-gnu@1.15.46: + resolution: {integrity: sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==} + engines: {node: '>=10'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-s390x-gnu@1.15.46: + resolution: {integrity: sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==} + engines: {node: '>=10'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-x64-gnu@1.15.46: + resolution: {integrity: sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-linux-x64-musl@1.15.46: + resolution: {integrity: sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-arm64-msvc@1.15.46: + resolution: {integrity: sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-ia32-msvc@1.15.46: + resolution: {integrity: sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core-win32-x64-msvc@1.15.46: + resolution: {integrity: sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@swc/core@1.15.46: + resolution: {integrity: sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.27 + optionalDependencies: + '@swc/core-darwin-arm64': 1.15.46 + '@swc/core-darwin-x64': 1.15.46 + '@swc/core-linux-arm-gnueabihf': 1.15.46 + '@swc/core-linux-arm64-gnu': 1.15.46 + '@swc/core-linux-arm64-musl': 1.15.46 + '@swc/core-linux-ppc64-gnu': 1.15.46 + '@swc/core-linux-s390x-gnu': 1.15.46 + '@swc/core-linux-x64-gnu': 1.15.46 + '@swc/core-linux-x64-musl': 1.15.46 + '@swc/core-win32-arm64-msvc': 1.15.46 + '@swc/core-win32-ia32-msvc': 1.15.46 + '@swc/core-win32-x64-msvc': 1.15.46 + dev: false + + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false + + /@swc/helpers@0.5.15: + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + dependencies: + tslib: 2.8.1 + dev: false + + /@swc/types@0.1.27: + resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + dependencies: + '@swc/counter': 0.1.3 + dev: false + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -3052,6 +3837,18 @@ packages: source-map-js: 1.2.1 tailwindcss: 4.1.18 + /@tailwindcss/node@4.3.3: + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.24.4 + jiti: 2.7.0 + lightningcss: 1.32.0 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.3.3 + dev: true + /@tailwindcss/oxide-android-arm64@4.1.18: resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} engines: {node: '>= 10'} @@ -3060,6 +3857,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-android-arm64@4.3.3: + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-darwin-arm64@4.1.18: resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} engines: {node: '>= 10'} @@ -3068,6 +3874,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-darwin-arm64@4.3.3: + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-darwin-x64@4.1.18: resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} engines: {node: '>= 10'} @@ -3076,6 +3891,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-darwin-x64@4.3.3: + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-freebsd-x64@4.1.18: resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} engines: {node: '>= 10'} @@ -3084,6 +3908,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-freebsd-x64@4.3.3: + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18: resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} engines: {node: '>= 10'} @@ -3092,6 +3925,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3: + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} + engines: {node: '>= 20'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-linux-arm64-gnu@4.1.18: resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} engines: {node: '>= 10'} @@ -3100,6 +3942,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-linux-arm64-gnu@4.3.3: + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-linux-arm64-musl@4.1.18: resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} @@ -3108,6 +3959,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-linux-arm64-musl@4.3.3: + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-linux-x64-gnu@4.1.18: resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} @@ -3116,6 +3976,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-linux-x64-gnu@4.3.3: + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-linux-x64-musl@4.1.18: resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} @@ -3124,6 +3993,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-linux-x64-musl@4.3.3: + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} + engines: {node: '>= 20'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-wasm32-wasi@4.1.18: resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} engines: {node: '>=14.0.0'} @@ -3138,6 +4016,21 @@ packages: - '@emnapi/wasi-threads' - tslib + /@tailwindcss/oxide-wasm32-wasi@4.3.3: + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + requiresBuild: true + dev: true + optional: true + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + /@tailwindcss/oxide-win32-arm64-msvc@4.1.18: resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} engines: {node: '>= 10'} @@ -3146,6 +4039,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-win32-arm64-msvc@4.3.3: + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} + engines: {node: '>= 20'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide-win32-x64-msvc@4.1.18: resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} engines: {node: '>= 10'} @@ -3154,6 +4056,15 @@ packages: requiresBuild: true optional: true + /@tailwindcss/oxide-win32-x64-msvc@4.3.3: + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} + engines: {node: '>= 20'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@tailwindcss/oxide@4.1.18: resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} engines: {node: '>= 10'} @@ -3171,6 +4082,34 @@ packages: '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 + /@tailwindcss/oxide@4.3.3: + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} + engines: {node: '>= 20'} + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + dev: true + + /@tailwindcss/postcss@4.3.3: + resolution: {integrity: sha512-JTSZZGQi1AyKirbLN3azmjVzef92tcX7h+iSqPdaeStyFpGpDlKvvpxeOE8njhbUanbRwr3z8DyzhICWnMtQeg==} + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + postcss: 8.5.24 + tailwindcss: 4.3.3 + dev: true + /@tailwindcss/vite@4.1.18(vite@5.4.17): resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} peerDependencies: @@ -3552,7 +4491,6 @@ packages: requiresBuild: true dependencies: tslib: 2.8.1 - dev: false optional: true /@types/aria-query@5.0.4: @@ -3805,7 +4743,7 @@ packages: /@types/estree-jsx@1.0.5: resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 dev: false /@types/estree@1.0.7: @@ -3813,7 +4751,6 @@ packages: /@types/estree@1.0.8: resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - dev: true /@types/fs-extra@9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} @@ -3840,11 +4777,9 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: false /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: false /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -4149,6 +5084,29 @@ packages: - supports-color dev: false + /@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.65.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/type-utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.65.0 + eslint: 9.39.5 + ignore: 7.0.6 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4191,6 +5149,38 @@ packages: - supports-color dev: false + /@typescript-eslint/parser@8.65.0(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.65.0 + debug: 4.4.3 + eslint: 9.39.5 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/project-service@8.65.0(typescript@5.5.4): + resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.5.4) + '@typescript-eslint/types': 8.65.0 + debug: 4.4.3 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4215,6 +5205,23 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 dev: false + /@typescript-eslint/scope-manager@8.65.0: + resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 + dev: true + + /@typescript-eslint/tsconfig-utils@8.65.0(typescript@5.5.4): + resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + typescript: 5.5.4 + dev: true + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} @@ -4255,6 +5262,24 @@ packages: - supports-color dev: false + /@typescript-eslint/type-utils@8.65.0(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + debug: 4.4.3 + eslint: 9.39.5 + ts-api-utils: 2.5.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types@5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4270,6 +5295,11 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: false + /@typescript-eslint/types@8.65.0: + resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4335,6 +5365,26 @@ packages: - supports-color dev: false + /@typescript-eslint/typescript-estree@8.65.0(typescript@5.5.4): + resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/project-service': 8.65.0(typescript@5.5.4) + '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.5.4) + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/visitor-keys': 8.65.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4390,6 +5440,23 @@ packages: - typescript dev: false + /@typescript-eslint/utils@8.65.0(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5) + '@typescript-eslint/scope-manager': 8.65.0 + '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4) + eslint: 9.39.5 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4414,6 +5481,14 @@ packages: eslint-visitor-keys: 3.4.3 dev: false + /@typescript-eslint/visitor-keys@8.65.0: + resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.65.0 + eslint-visitor-keys: 5.0.1 + dev: true + /@ungap/structured-clone@1.3.0: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -4422,7 +5497,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-android-arm64@1.11.1: @@ -4430,7 +5504,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-darwin-arm64@1.11.1: @@ -4438,7 +5511,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-darwin-x64@1.11.1: @@ -4446,7 +5518,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-freebsd-x64@1.11.1: @@ -4454,7 +5525,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1: @@ -4462,7 +5532,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-arm-musleabihf@1.11.1: @@ -4470,7 +5539,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-arm64-gnu@1.11.1: @@ -4478,7 +5546,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-arm64-musl@1.11.1: @@ -4486,7 +5553,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-ppc64-gnu@1.11.1: @@ -4494,7 +5560,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-riscv64-gnu@1.11.1: @@ -4502,7 +5567,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-riscv64-musl@1.11.1: @@ -4510,7 +5574,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-s390x-gnu@1.11.1: @@ -4518,7 +5581,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-x64-gnu@1.11.1: @@ -4526,7 +5588,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-linux-x64-musl@1.11.1: @@ -4534,7 +5595,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-wasm32-wasi@1.11.1: @@ -4544,7 +5604,6 @@ packages: requiresBuild: true dependencies: '@napi-rs/wasm-runtime': 0.2.12 - dev: false optional: true /@unrs/resolver-binding-win32-arm64-msvc@1.11.1: @@ -4552,7 +5611,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-win32-ia32-msvc@1.11.1: @@ -4560,7 +5618,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: false optional: true /@unrs/resolver-binding-win32-x64-msvc@1.11.1: @@ -4568,7 +5625,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: false optional: true /@upsetjs/venn.js@2.0.0: @@ -4938,7 +5994,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.15.0 - dev: false /acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} @@ -4948,7 +6003,6 @@ packages: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true - dev: false /ag-charts-community@14.0.1: resolution: {integrity: sha512-XHYdDRtEz4OYyZZuut9BiHSDy6KjXoVXNom2Zvq8EEO6HN67x73xLZNlo/9Vxwoch/3mNGkQkVTzi0zqdKFQ4w==} @@ -5064,6 +6118,15 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + /algoliasearch@5.55.1: resolution: {integrity: sha512-FyaFnnsbVPtevQwqSj/SdxE3jAsSsY0BEH8IVLf9rXxEBdAhAmT6VKCVSMWoaPIHVN1Eufh/1w8q6k8URpIkWw==} engines: {node: '>= 14.0.0'} @@ -5234,7 +6297,6 @@ packages: dependencies: call-bound: 1.0.4 is-array-buffer: 3.0.5 - dev: false /array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} @@ -5248,7 +6310,6 @@ packages: get-intrinsic: 1.3.0 is-string: 1.1.1 math-intrinsics: 1.1.0 - dev: false /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -5265,7 +6326,6 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - dev: false /array.prototype.findlastindex@1.2.6: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} @@ -5278,7 +6338,6 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 - dev: false /array.prototype.flat@1.3.3: resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} @@ -5288,7 +6347,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 - dev: false /array.prototype.flatmap@1.3.3: resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} @@ -5298,7 +6356,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 - dev: false /array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} @@ -5309,7 +6366,6 @@ packages: es-abstract: 1.24.1 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 - dev: false /arraybuffer.prototype.slice@1.0.4: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} @@ -5322,7 +6378,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - dev: false /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} @@ -5338,7 +6393,6 @@ packages: /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: false /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -5355,7 +6409,6 @@ packages: /async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - dev: false /async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -5374,12 +6427,10 @@ packages: engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.1.0 - dev: false /axe-core@4.11.1: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} - dev: false /axios@1.16.1: resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} @@ -5396,7 +6447,6 @@ packages: /axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - dev: false /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -5415,6 +6465,12 @@ packages: requiresBuild: true dev: true + /baseline-browser-mapping@2.11.6: + resolution: {integrity: sha512-69D/imtToCsIcAl8WBS2YaRwA4jO/j0HhU+hELqMEu9f54MoUtI6+XH5mrKU8rEFNEk/Ui1I2MK4/JkWacclGw==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: false + /baseline-browser-mapping@2.9.11: resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true @@ -5471,7 +6527,6 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.1.1 - dev: false /browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} @@ -5610,7 +6665,6 @@ packages: es-define-property: 1.0.1 get-intrinsic: 1.3.0 set-function-length: 1.2.2 - dev: false /call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} @@ -5618,7 +6672,6 @@ packages: dependencies: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - dev: false /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -5712,6 +6765,10 @@ packages: dev: true optional: true + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -6204,7 +7261,6 @@ packages: /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: false /data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} @@ -6221,7 +7277,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: false /data-view-byte-length@1.0.2: resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} @@ -6230,7 +7285,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: false /data-view-byte-offset@1.0.1: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} @@ -6239,7 +7293,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: false /dayjs@1.11.19: resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} @@ -6253,7 +7306,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: false /debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} @@ -6388,7 +7440,7 @@ packages: /dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} dependencies: - minimatch: 3.1.2 + minimatch: 3.1.5 p-limit: 3.1.0 dev: true @@ -6425,7 +7477,7 @@ packages: dependencies: '@types/plist': 3.0.5 '@types/verror': 1.10.11 - ajv: 6.12.6 + ajv: 6.15.0 crc: 3.8.0 iconv-corefoundation: 1.1.7 plist: 3.1.0 @@ -6439,7 +7491,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 - dev: false /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} @@ -6644,6 +7695,14 @@ packages: graceful-fs: 4.2.11 tapable: 2.3.0 + /enhanced-resolve@5.24.4: + resolution: {integrity: sha512-GVoi+ICHocoOIU7qVVM48wOJziRsqrsyqlI0Ce0LdowRn6v3bcH2zUa9kp85ncx0nwIb9/HOCOLS3fdThDG/XQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + dev: true + /entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -6733,7 +7792,6 @@ packages: typed-array-length: 1.0.7 unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - dev: false /es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -6763,7 +7821,6 @@ packages: internal-slot: 1.1.0 iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - dev: false /es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} @@ -6789,7 +7846,6 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 - dev: false /es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} @@ -6798,7 +7854,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - dev: false /es-toolkit@1.48.1: resolution: {integrity: sha512-wfnXlwd5I75eXRtdD2vuEs50xHHESECDsGD7yiQnfFVNoa5522NwXEbmgo98LfiukSQHs+mBM7/YG3qKJB9/mQ==} @@ -6886,6 +7941,33 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + /eslint-config-next@16.2.12(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-iaaf4vvKo5h2LBdGt0JuRv7t0Ysqr9FMCiFxbptDg8LqOE//mIKR80DdpOnSVM7qjLH3jT8P0aFiwXxBEGZRXw==} + peerDependencies: + eslint: '>=9.0.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 16.2.12 + eslint: 9.39.5 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.5) + eslint-plugin-react: 7.37.5(eslint@9.39.5) + eslint-plugin-react-hooks: 7.1.1(eslint@9.39.5) + globals: 16.4.0 + typescript: 5.5.4 + typescript-eslint: 8.65.0(eslint@9.39.5)(typescript@5.5.4) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + dev: true + /eslint-config-prettier@9.1.0(eslint@8.57.1): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -6923,7 +8005,6 @@ packages: resolve: 1.22.11 transitivePeerDependencies: - supports-color - dev: false /eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1): resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} @@ -6951,6 +8032,32 @@ packages: - supports-color dev: false + /eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5): + resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3 + eslint: 9.39.5 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-mdx@3.6.2(eslint@8.57.1): resolution: {integrity: sha512-5hczn5iSSEcwtNtVXFwCKIk6iLEDaZpwc3vjYDl/B779OzaAAK/ou16J2xVdO6ecOLEO1WZqp7MRCQ/WsKDUig==} engines: {node: '>=18.0.0'} @@ -7009,6 +8116,36 @@ packages: - supports-color dev: false + /eslint-module-utils@2.12.1(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5): + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + debug: 3.2.7 + eslint: 9.39.5 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.5) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} @@ -7057,6 +8194,43 @@ packages: - supports-color dev: false + /eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5): + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.5 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.65.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.5) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -7096,12 +8270,36 @@ packages: hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 dev: false + /eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.5): + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.11.1 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.5 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + dev: true + /eslint-plugin-mdx@3.6.2(eslint@8.57.1): resolution: {integrity: sha512-RfMd5HYD/9+cqANhVWJbuBRg3huWUsAoGJNGmPsyiRD2X6BaG6bvt1omyk1ORlg81GK8ST7Ojt5fNAuwWhWU8A==} engines: {node: '>=18.0.0'} @@ -7152,6 +8350,22 @@ packages: eslint: 8.57.1 dev: false + /eslint-plugin-react-hooks@7.1.1(eslint@9.39.5): + resolution: {integrity: sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0 + dependencies: + '@babel/core': 7.28.5 + '@babel/parser': 7.29.7 + eslint: 9.39.5 + hermes-parser: 0.25.1 + zod: 3.25.76 + zod-validation-error: 4.0.2(zod@3.25.76) + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-react@7.37.5(eslint@8.57.1): resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} @@ -7168,7 +8382,7 @@ packages: estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 + minimatch: 3.1.5 object.entries: 1.1.9 object.fromentries: 2.0.8 object.values: 1.2.1 @@ -7179,6 +8393,33 @@ packages: string.prototype.repeat: 1.0.0 dev: false + /eslint-plugin-react@7.37.5(eslint@9.39.5): + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.2 + eslint: 9.39.5 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.5 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + dev: true + /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} engines: {node: '>= 18'} @@ -7265,6 +8506,14 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 + /eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -7274,6 +8523,16 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + dev: true + /eslint@8.57.1: resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7319,6 +8578,63 @@ packages: transitivePeerDependencies: - supports-color + /eslint@9.39.5: + resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + dependencies: + '@eslint-community/eslint-utils': 4.10.1(eslint@9.39.5) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.6 + '@eslint/js': 9.39.5 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.15.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7420,6 +8736,17 @@ packages: engines: {node: '>=6.0.0'} dev: false + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + dev: true + /fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -7469,7 +8796,6 @@ packages: optional: true dependencies: picomatch: 4.0.5 - dev: false /fetch-cookie@2.2.0: resolution: {integrity: sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==} @@ -7483,6 +8809,13 @@ packages: dependencies: flat-cache: 3.2.0 + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + dev: true + /filelist@1.0.6: resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} dependencies: @@ -7494,7 +8827,6 @@ packages: engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - dev: false /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -7519,6 +8851,14 @@ packages: keyv: 4.5.4 rimraf: 3.0.2 + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + dev: true + /flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -7543,7 +8883,6 @@ packages: engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 - dev: false /foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} @@ -7632,7 +8971,6 @@ packages: functions-have-names: 1.2.3 hasown: 2.0.2 is-callable: 1.2.7 - dev: false /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} @@ -7640,7 +8978,6 @@ packages: /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: false /gauge@4.0.4: resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} @@ -7660,7 +8997,6 @@ packages: /generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} - dev: false /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -7712,7 +9048,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 get-intrinsic: 1.3.0 - dev: false /get-tsconfig@4.13.0: resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} @@ -7728,7 +9063,6 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - dev: false /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} @@ -7753,7 +9087,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -7789,6 +9123,16 @@ packages: dependencies: type-fest: 0.20.2 + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + + /globals@16.4.0: + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -7842,7 +9186,6 @@ packages: /has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} - dev: false /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -7858,7 +9201,6 @@ packages: engines: {node: '>= 0.4'} dependencies: dunder-proto: 1.0.1 - dev: false /has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} @@ -7902,6 +9244,16 @@ packages: '@types/hast': 3.0.4 dev: true + /hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + dev: true + + /hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + dependencies: + hermes-estree: 0.25.1 + dev: true + /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: @@ -7941,7 +9293,6 @@ packages: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} dependencies: void-elements: 3.1.0 - dev: false /html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -8015,7 +9366,6 @@ packages: dependencies: '@babel/runtime': 7.28.4 typescript: 5.5.4 - dev: false /iconv-corefoundation@1.1.7: resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==} @@ -8035,6 +9385,12 @@ packages: safer-buffer: 2.1.2 dev: true + /icu-minify@4.13.4: + resolution: {integrity: sha512-yK6HyPLGlQjqm8fTKtnBpM77z7vl7JdDBN2EXLvmgAu/b7XaOHWZb73M3ISl9ahBTehBv7RYeqqWSHfk1v2YcA==} + dependencies: + '@formatjs/icu-messageformat-parser': 3.5.15 + dev: false + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} requiresBuild: true @@ -8049,6 +9405,11 @@ packages: engines: {node: '>= 4'} dev: false + /ignore@7.0.6: + resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==} + engines: {node: '>= 4'} + dev: true + /immediate@3.3.0: resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} dev: true @@ -8106,7 +9467,6 @@ packages: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - dev: false /internmap@1.0.1: resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} @@ -8117,6 +9477,13 @@ packages: engines: {node: '>=12'} dev: true + /intl-messageformat@11.2.12: + resolution: {integrity: sha512-KW70Xxfcvy7vV3qODfvShWkFDPMqKDAa4N+hSyVBWGNtVhTUFYaqlD/l88DaYPKiVcPP4rPQ3qnH7i5K82Mg7g==} + dependencies: + '@formatjs/fast-memoize': 3.1.7 + '@formatjs/icu-messageformat-parser': 3.5.15 + dev: false + /ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -8140,7 +9507,6 @@ packages: call-bind: 1.0.8 call-bound: 1.0.4 get-intrinsic: 1.3.0 - dev: false /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -8155,14 +9521,12 @@ packages: get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: false /is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} dependencies: has-bigints: 1.1.0 - dev: false /is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} @@ -8170,7 +9534,6 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: false /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} @@ -8183,12 +9546,10 @@ packages: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} dependencies: semver: 7.7.1 - dev: false /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: false /is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} @@ -8202,7 +9563,6 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 - dev: false /is-data-view@1.0.2: resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} @@ -8211,7 +9571,6 @@ packages: call-bound: 1.0.4 get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - dev: false /is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} @@ -8219,7 +9578,6 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: false /is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -8238,7 +9596,6 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.4 - dev: false /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -8253,7 +9610,6 @@ packages: get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: false /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -8277,12 +9633,10 @@ packages: /is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - dev: false /is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - dev: false /is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} @@ -8290,12 +9644,10 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: false /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -8318,19 +9670,16 @@ packages: gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: false /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} - dev: false /is-shared-array-buffer@1.0.4: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.4 - dev: false /is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} @@ -8338,7 +9687,6 @@ packages: dependencies: call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: false /is-symbol@1.1.1: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} @@ -8347,14 +9695,12 @@ packages: call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - dev: false /is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.19 - dev: false /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} @@ -8364,14 +9710,12 @@ packages: /is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - dev: false /is-weakref@1.1.1: resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.4 - dev: false /is-weakset@2.0.4: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} @@ -8379,7 +9723,6 @@ packages: dependencies: call-bound: 1.0.4 get-intrinsic: 1.3.0 - dev: false /is-what@5.5.0: resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} @@ -8396,7 +9739,6 @@ packages: /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false /isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} @@ -8426,7 +9768,6 @@ packages: get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 - dev: false /jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -8449,6 +9790,11 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + /jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + dev: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: false @@ -8461,6 +9807,13 @@ packages: dependencies: argparse: 2.0.1 + /js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + /jsdom@26.1.0: resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} engines: {node: '>=18'} @@ -8535,7 +9888,6 @@ packages: hasBin: true dependencies: minimist: 1.2.8 - dev: false /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} @@ -8563,7 +9915,6 @@ packages: array.prototype.flat: 1.3.3 object.assign: 4.1.7 object.values: 1.2.1 - dev: false /katex@0.16.47: resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} @@ -8588,14 +9939,12 @@ packages: /language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - dev: false /language-tags@1.0.9: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} dependencies: language-subtag-registry: 0.3.23 - dev: false /layout-base@1.0.2: resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} @@ -8680,6 +10029,15 @@ packages: requiresBuild: true optional: true + /lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /lightningcss-darwin-arm64@1.30.2: resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} engines: {node: '>= 12.0.0'} @@ -8688,6 +10046,15 @@ packages: requiresBuild: true optional: true + /lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /lightningcss-darwin-x64@1.30.2: resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} engines: {node: '>= 12.0.0'} @@ -8696,6 +10063,15 @@ packages: requiresBuild: true optional: true + /lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /lightningcss-freebsd-x64@1.30.2: resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} engines: {node: '>= 12.0.0'} @@ -8704,6 +10080,15 @@ packages: requiresBuild: true optional: true + /lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /lightningcss-linux-arm-gnueabihf@1.30.2: resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} engines: {node: '>= 12.0.0'} @@ -8712,6 +10097,15 @@ packages: requiresBuild: true optional: true + /lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /lightningcss-linux-arm64-gnu@1.30.2: resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} engines: {node: '>= 12.0.0'} @@ -8720,6 +10114,15 @@ packages: requiresBuild: true optional: true + /lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} @@ -8728,6 +10131,15 @@ packages: requiresBuild: true optional: true + /lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} @@ -8736,6 +10148,15 @@ packages: requiresBuild: true optional: true + /lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} @@ -8744,6 +10165,15 @@ packages: requiresBuild: true optional: true + /lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} engines: {node: '>= 12.0.0'} @@ -8752,6 +10182,15 @@ packages: requiresBuild: true optional: true + /lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /lightningcss-win32-x64-msvc@1.30.2: resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} engines: {node: '>= 12.0.0'} @@ -8760,6 +10199,15 @@ packages: requiresBuild: true optional: true + /lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /lightningcss@1.30.2: resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} engines: {node: '>= 12.0.0'} @@ -8778,6 +10226,25 @@ packages: lightningcss-win32-arm64-msvc: 1.30.2 lightningcss-win32-x64-msvc: 1.30.2 + /lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: false @@ -8877,7 +10344,6 @@ packages: hasBin: true dependencies: js-tokens: 4.0.0 - dev: false /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} @@ -9106,7 +10572,6 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: false /mermaid@11.15.0: resolution: {integrity: sha512-pTMbcf3rWdtLiYGpmoTjHEpeY8seiy6sR+9nD7LOs8KfUbHE4lOUAprTRqRAcWSQ6MQpdX+YEsxShtGsINtPtw==} @@ -9236,7 +10701,7 @@ packages: /micromark-factory-mdx-expression@2.0.3: resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -9320,7 +10785,7 @@ packages: /micromark-util-events-to-acorn@2.0.3: resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 @@ -9397,7 +10862,6 @@ packages: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: false /mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} @@ -9446,6 +10910,11 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + dependencies: + brace-expansion: 1.1.11 + /minimatch@5.1.9: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} @@ -9567,11 +11036,15 @@ packages: hasBin: true dev: true + /nanoid@3.3.16: + resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + /napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true - dev: false /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -9581,6 +11054,84 @@ packages: engines: {node: '>= 0.6'} dev: true + /negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + dev: false + + /next-intl-swc-plugin-extractor@4.13.4: + resolution: {integrity: sha512-uN1+NMUYbG6YkO3q+rjc2bvAPX9nQ23owemvHJAyW0pRbQjVDwvNhmrV5qaak0oQc/9okbK17KLT49AoMGhVEQ==} + dev: false + + /next-intl@4.13.4(next@16.2.12)(react@19.2.4)(typescript@5.5.4): + resolution: {integrity: sha512-jhPAT0u0lahIK6E4gVdZAehugWCosBhLG8sV7xMzgSVoJpxHObP+Fiu+z2FfkEW0XPPtr7uEXoUlLEfhxhNMTg==} + peerDependencies: + next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@formatjs/intl-localematcher': 0.8.13 + '@parcel/watcher': 2.6.0 + '@swc/core': 1.15.46 + icu-minify: 4.13.4 + negotiator: 1.0.0 + next: 16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4) + next-intl-swc-plugin-extractor: 4.13.4 + po-parser: 2.1.1 + react: 19.2.4 + typescript: 5.5.4 + use-intl: 4.13.4(react@19.2.4) + transitivePeerDependencies: + - '@swc/helpers' + dev: false + + /next@16.2.12(@babel/core@7.28.5)(react-dom@19.2.4)(react@19.2.4): + resolution: {integrity: sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==} + engines: {node: '>=20.9.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + dependencies: + '@next/env': 16.2.12 + '@swc/helpers': 0.5.15 + baseline-browser-mapping: 2.11.6 + caniuse-lite: 1.0.30001762 + postcss: 8.4.31 + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.4) + optionalDependencies: + '@next/swc-darwin-arm64': 16.2.12 + '@next/swc-darwin-x64': 16.2.12 + '@next/swc-linux-arm64-gnu': 16.2.12 + '@next/swc-linux-arm64-musl': 16.2.12 + '@next/swc-linux-x64-gnu': 16.2.12 + '@next/swc-linux-x64-musl': 16.2.12 + '@next/swc-win32-arm64-msvc': 16.2.12 + '@next/swc-win32-x64-msvc': 16.2.12 + sharp: 0.34.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /node-abi@3.89.0: resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==} engines: {node: '>=10'} @@ -9594,6 +11145,10 @@ packages: dev: true optional: true + /node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + dev: false + /node-api-version@0.2.1: resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} dependencies: @@ -9671,7 +11226,7 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} dependencies: hosted-git-info: 7.0.2 - semver: 7.7.1 + semver: 7.7.4 validate-npm-package-license: 3.0.4 dev: false @@ -9735,12 +11290,10 @@ packages: /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: false /object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - dev: false /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -9756,7 +11309,6 @@ packages: es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 - dev: false /object.entries@1.1.9: resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} @@ -9766,7 +11318,6 @@ packages: call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: false /object.fromentries@2.0.8: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} @@ -9776,7 +11327,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.24.1 es-object-atoms: 1.1.1 - dev: false /object.groupby@1.0.3: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} @@ -9785,7 +11335,6 @@ packages: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.24.1 - dev: false /object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} @@ -9795,7 +11344,6 @@ packages: call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: false /obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} @@ -9858,7 +11406,6 @@ packages: get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 - dev: false /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} @@ -9973,7 +11520,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false /path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} @@ -10010,7 +11556,6 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: false /picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} @@ -10019,7 +11564,6 @@ packages: /picomatch@4.0.5: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} - dev: false /plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} @@ -10035,6 +11579,10 @@ packages: engines: {node: '>=4'} dev: false + /po-parser@2.1.1: + resolution: {integrity: sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==} + dev: false + /points-on-curve@0.2.0: resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==} dev: true @@ -10049,6 +11597,14 @@ packages: /possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 dev: false /postcss@8.5.15: @@ -10060,6 +11616,15 @@ packages: source-map-js: 1.2.1 dev: true + /postcss@8.5.24: + resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.16 + picocolors: 1.1.1 + source-map-js: 1.2.1 + dev: true + /postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -10303,7 +11868,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: false /property-information@7.2.0: resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} @@ -10472,6 +12036,15 @@ packages: react: 19.2.3 scheduler: 0.27.0 + /react-dom@19.2.4(react@19.2.4): + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} + peerDependencies: + react: ^19.2.4 + dependencies: + react: 19.2.4 + scheduler: 0.27.0 + dev: false + /react-hook-form@7.79.0(react@19.2.3): resolution: {integrity: sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw==} engines: {node: '>=18.0.0'} @@ -10503,11 +12076,9 @@ packages: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) typescript: 5.5.4 - dev: false /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -10639,6 +12210,11 @@ packages: resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} engines: {node: '>=0.10.0'} + /react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} + engines: {node: '>=0.10.0'} + dev: false + /read-binary-file-arch@1.0.6: resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} hasBin: true @@ -10730,7 +12306,6 @@ packages: get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 - dev: false /regex-recursion@6.0.2: resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} @@ -10763,7 +12338,6 @@ packages: get-proto: 1.0.1 gopd: 1.2.0 set-function-name: 2.0.2 - dev: false /regjsparser@0.10.0: resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} @@ -10856,7 +12430,6 @@ packages: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -10865,7 +12438,6 @@ packages: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: false /responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} @@ -11021,7 +12593,6 @@ packages: get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 - dev: false /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -11036,7 +12607,6 @@ packages: dependencies: es-errors: 1.3.0 isarray: 2.0.5 - dev: false /safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} @@ -11045,7 +12615,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 - dev: false /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -11126,7 +12695,6 @@ packages: get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: false /set-function-name@2.0.2: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} @@ -11136,7 +12704,6 @@ packages: es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: false /set-proto@1.0.0: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} @@ -11145,7 +12712,42 @@ packages: dunder-proto: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 + + /sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + requiresBuild: true + dependencies: + '@img/colour': 1.1.0 + detect-libc: 2.1.2 + semver: 7.7.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 dev: false + optional: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -11176,7 +12778,6 @@ packages: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - dev: false /side-channel-map@1.0.1: resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} @@ -11186,7 +12787,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.3.0 object-inspect: 1.13.4 - dev: false /side-channel-weakmap@1.0.2: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} @@ -11197,7 +12797,6 @@ packages: get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-map: 1.0.1 - dev: false /side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} @@ -11208,7 +12807,6 @@ packages: side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: false /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -11352,7 +12950,6 @@ packages: /stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - dev: false /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -11373,7 +12970,6 @@ packages: dependencies: es-errors: 1.3.0 internal-slot: 1.1.0 - dev: false /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -11407,7 +13003,6 @@ packages: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.24.1 - dev: false /string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} @@ -11426,14 +13021,12 @@ packages: regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 side-channel: 1.1.0 - dev: false /string.prototype.repeat@1.0.0: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} dependencies: define-properties: 1.2.1 es-abstract: 1.24.1 - dev: false /string.prototype.trim@1.2.10: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} @@ -11446,7 +13039,6 @@ packages: es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - dev: false /string.prototype.trimend@1.0.9: resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} @@ -11456,7 +13048,6 @@ packages: call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: false /string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} @@ -11465,7 +13056,6 @@ packages: call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: false /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -11503,7 +13093,6 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: false /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -11515,6 +13104,24 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.4): + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.28.5 + client-only: 0.0.1 + react: 19.2.4 + dev: false + /stylis@4.4.0: resolution: {integrity: sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==} dev: true @@ -11557,7 +13164,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: false /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -11594,10 +13200,19 @@ packages: /tailwindcss@4.1.18: resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} + /tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} + dev: true + /tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + /tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} + dev: true + /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -11665,7 +13280,6 @@ packages: dependencies: fdir: 6.5.0(picomatch@4.0.5) picomatch: 4.0.5 - dev: false /tinyrainbow@3.0.3: resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} @@ -11699,7 +13313,6 @@ packages: engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - dev: false /tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} @@ -11750,6 +13363,15 @@ packages: typescript: 5.5.4 dev: false + /ts-api-utils@2.5.0(typescript@5.5.4): + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + dependencies: + typescript: 5.5.4 + dev: true + /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -11761,7 +13383,6 @@ packages: json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: false /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -11770,7 +13391,6 @@ packages: /tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} requiresBuild: true - dev: false /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -11890,7 +13510,6 @@ packages: call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 - dev: false /typed-array-byte-length@1.0.3: resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} @@ -11901,7 +13520,6 @@ packages: gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - dev: false /typed-array-byte-offset@1.0.4: resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} @@ -11914,7 +13532,6 @@ packages: has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - dev: false /typed-array-length@1.0.7: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} @@ -11926,12 +13543,28 @@ packages: is-typed-array: 1.1.15 possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - dev: false /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false + /typescript-eslint@8.65.0(eslint@9.39.5)(typescript@5.5.4): + resolution: {integrity: sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + dependencies: + '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0)(eslint@9.39.5)(typescript@5.5.4) + '@typescript-eslint/parser': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.65.0(eslint@9.39.5)(typescript@5.5.4) + eslint: 9.39.5 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -11950,7 +13583,6 @@ packages: has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - dev: false /undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -12089,7 +13721,6 @@ packages: '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - dev: false /update-browserslist-db@1.2.3(browserslist@4.28.1): resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} @@ -12140,6 +13771,18 @@ packages: react: 19.2.3 dev: false + /use-intl@4.13.4(react@19.2.4): + resolution: {integrity: sha512-wRhU5zyPNgu845++EJ8ckQsi89b22QUop7NlGxNXpsnKSwEJr7WErAkdAYeVQgFTmDWsa8e2NI1e14XbWz9Ecw==} + peerDependencies: + react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 + dependencies: + '@formatjs/fast-memoize': 3.1.7 + '@schummar/icu-type-parser': 1.21.5 + icu-minify: 4.13.4 + intl-messageformat: 11.2.12 + react: 19.2.4 + dev: false + /use-isomorphic-layout-effect@1.2.1(@types/react@19.2.7)(react@19.2.3): resolution: {integrity: sha512-tpZZ+EX0gaghDAiFR37hj5MgY6ZN55kLiPkJsKxBMZ6GZdOSPJXiOzPM984oPYZ5AnehYx5WQp1+ME8I/P/pRA==} peerDependencies: @@ -12579,7 +14222,6 @@ packages: /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - dev: false /vue@3.5.38(typescript@5.5.4): resolution: {integrity: sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==} @@ -12669,7 +14311,6 @@ packages: is-number-object: 1.1.1 is-string: 1.1.1 is-symbol: 1.1.1 - dev: false /which-builtin-type@1.2.1: resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} @@ -12688,7 +14329,6 @@ packages: which-boxed-primitive: 1.1.1 which-collection: 1.0.2 which-typed-array: 1.1.19 - dev: false /which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} @@ -12698,7 +14338,6 @@ packages: is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.4 - dev: false /which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} @@ -12711,7 +14350,6 @@ packages: get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: false /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -12854,9 +14492,17 @@ packages: readable-stream: 3.6.2 dev: true + /zod-validation-error@4.0.2(zod@3.25.76): + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + dependencies: + zod: 3.25.76 + dev: true + /zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - dev: false /zustand@5.0.14(@types/react@19.2.7)(react@19.2.3): resolution: {integrity: sha512-/8tAspM5LMPr28b3fwLYrtdj77ECpfZviaP75CMTnwO8ISyaE4GDIG/9rDDYq/cH9D2Xw2A2RXglLInmVBQB/g==}