├── .gitignore
├── README.md
├── app
├── favicon.ico
├── fonts
│ ├── GeistMonoVF.woff
│ └── GeistVF.woff
├── globals.css
├── layout.tsx
└── page.tsx
├── components.json
├── components
├── CommitForm.tsx
├── CopyButton.tsx
├── DescriptionInput.tsx
├── GuideContent.tsx
├── PreviewBox.tsx
├── ScopeInput.tsx
├── ThemeToggle.tsx
├── TypeSelector.tsx
├── theme-provider.tsx
└── ui
│ ├── background-paths.tsx
│ ├── button.tsx
│ ├── card.tsx
│ ├── input.tsx
│ ├── label.tsx
│ ├── select.tsx
│ ├── tabs.tsx
│ └── textarea.tsx
├── lib
├── generateCommitMessage.ts
├── schemas
│ └── commit-form-schema.ts
└── utils.ts
├── next.config.mjs
├── package-lock.json
├── package.json
├── postcss.config.mjs
├── tailwind.config.ts
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Commit Mesaj Yardımcısı
2 |
3 | Conventional Commits standartlarına uygun commit mesajları oluşturmanıza yardımcı olan modern bir web uygulaması.
4 |
5 | ## Özellikler
6 |
7 | - 🎨 Modern ve minimalist tasarım
8 | - 🌓 Koyu/açık tema desteği
9 | - ⚡ Hızlı ve kullanıcı dostu arayüz
10 | - 📝 Conventional Commits rehberi
11 | - 🔍 Anlık commit mesajı önizleme
12 | - 🎯 Doğru commit türü seçimi için yönlendirme
13 |
14 | ## Teknolojiler
15 |
16 | - [Next.js](https://nextjs.org/)
17 | - [React](https://reactjs.org/)
18 | - [Tailwind CSS](https://tailwindcss.com/)
19 | - [React Hook Form](https://react-hook-form.com/)
20 | - [Zod](https://zod.dev/)
21 |
22 | ## Başlangıç
23 |
24 | Projeyi yerel ortamınızda çalıştırmak için:
25 |
26 | ```bash
27 | # Repoyu klonlayın
28 | git clone https://github.com/gamzesirin/commit-message-helper.git
29 |
30 | # Proje dizinine gidin
31 | cd commit-message-helper
32 |
33 | # Bağımlılıkları yükleyin
34 | npm install
35 |
36 | # Geliştirme sunucusunu başlatın
37 | npm run dev
38 | ```
39 |
40 | Tarayıcınızda [http://localhost:3000](http://localhost:3000) adresini açarak uygulamayı görüntüleyebilirsiniz.
41 |
42 | ## Kullanım
43 |
44 | 1. Ana sayfada "Get Started" butonuna tıklayın
45 | 2. "Kılavuz" sekmesinden Conventional Commits hakkında bilgi alın
46 | 3. "Commit Oluştur" sekmesinde:
47 | - Commit türünü seçin
48 | - Kapsamı (scope) belirtin
49 | - Açıklama yazın
50 | - Detaylı açıklama ekleyin (opsiyonel)
51 |
52 | ## Katkıda Bulunma
53 |
54 | 1. Bu repoyu fork edin
55 | 2. Yeni bir branch oluşturun (`git checkout -b feature/yeniOzellik`)
56 | 3. Değişikliklerinizi commit edin (`git commit -am 'Yeni özellik: Açıklama'`)
57 | 4. Branch'inizi push edin (`git push origin feature/yeniOzellik`)
58 | 5. Pull Request oluşturun
59 |
60 |
--------------------------------------------------------------------------------
/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gamzesirin/Commit-Message-Helper/df731cd7e76a28ae1d15bc1504568c8bfba965bc/app/favicon.ico
--------------------------------------------------------------------------------
/app/fonts/GeistMonoVF.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gamzesirin/Commit-Message-Helper/df731cd7e76a28ae1d15bc1504568c8bfba965bc/app/fonts/GeistMonoVF.woff
--------------------------------------------------------------------------------
/app/fonts/GeistVF.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gamzesirin/Commit-Message-Helper/df731cd7e76a28ae1d15bc1504568c8bfba965bc/app/fonts/GeistVF.woff
--------------------------------------------------------------------------------
/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer utilities {
6 | .text-balance {
7 | text-wrap: balance;
8 | }
9 | }
10 |
11 | @layer base {
12 | :root {
13 | --background: 0 0% 100%;
14 | --foreground: 0 0% 3.9%;
15 | --card: 0 0% 100%;
16 | --card-foreground: 0 0% 3.9%;
17 | --popover: 0 0% 100%;
18 | --popover-foreground: 0 0% 3.9%;
19 | --primary: 0 0% 9%;
20 | --primary-foreground: 0 0% 98%;
21 | --secondary: 0 0% 96.1%;
22 | --secondary-foreground: 0 0% 9%;
23 | --muted: 0 0% 96.1%;
24 | --muted-foreground: 0 0% 45.1%;
25 | --accent: 0 0% 96.1%;
26 | --accent-foreground: 0 0% 9%;
27 | --destructive: 0 84.2% 60.2%;
28 | --destructive-foreground: 0 0% 98%;
29 | --border: 0 0% 89.8%;
30 | --input: 0 0% 89.8%;
31 | --ring: 0 0% 3.9%;
32 | --chart-1: 12 76% 61%;
33 | --chart-2: 173 58% 39%;
34 | --chart-3: 197 37% 24%;
35 | --chart-4: 43 74% 66%;
36 | --chart-5: 27 87% 67%;
37 | --radius: 0.5rem;
38 | }
39 | .dark {
40 | --background: 0 0% 3.9%;
41 | --foreground: 0 0% 98%;
42 | --card: 0 0% 3.9%;
43 | --card-foreground: 0 0% 98%;
44 | --popover: 0 0% 3.9%;
45 | --popover-foreground: 0 0% 98%;
46 | --primary: 0 0% 98%;
47 | --primary-foreground: 0 0% 9%;
48 | --secondary: 0 0% 14.9%;
49 | --secondary-foreground: 0 0% 98%;
50 | --muted: 0 0% 14.9%;
51 | --muted-foreground: 0 0% 63.9%;
52 | --accent: 0 0% 14.9%;
53 | --accent-foreground: 0 0% 98%;
54 | --destructive: 0 62.8% 30.6%;
55 | --destructive-foreground: 0 0% 98%;
56 | --border: 0 0% 14.9%;
57 | --input: 0 0% 14.9%;
58 | --ring: 0 0% 83.1%;
59 | --chart-1: 220 70% 50%;
60 | --chart-2: 160 60% 45%;
61 | --chart-3: 30 80% 55%;
62 | --chart-4: 280 65% 60%;
63 | --chart-5: 340 75% 55%;
64 | }
65 | }
66 |
67 | @layer base {
68 | * {
69 | @apply border-border;
70 | }
71 | body {
72 | @apply bg-background text-foreground;
73 | }
74 | }
75 |
76 | /* Prose stilleri için özelleştirmeler */
77 | .prose {
78 | @apply text-foreground;
79 | }
80 |
81 | .prose code {
82 | @apply bg-muted/50 rounded px-1 py-0.5;
83 | }
84 |
85 | .prose pre {
86 | @apply bg-muted/50 rounded-lg p-4;
87 | }
88 |
89 | .prose pre code {
90 | @apply bg-transparent p-0;
91 | }
92 |
93 | .prose strong {
94 | @apply text-foreground;
95 | }
96 |
97 | .prose h2,
98 | .prose h3 {
99 | @apply text-foreground;
100 | }
101 |
102 | /* Tabs için özel stiller */
103 | @layer components {
104 | /* Scrollbar stilleri */
105 | .custom-scrollbar {
106 | scrollbar-width: thin;
107 | scrollbar-color: rgba(155, 155, 155, 0.3) transparent;
108 | }
109 |
110 | .custom-scrollbar::-webkit-scrollbar {
111 | width: 6px;
112 | }
113 |
114 | .custom-scrollbar::-webkit-scrollbar-track {
115 | background: transparent;
116 | }
117 |
118 | .custom-scrollbar::-webkit-scrollbar-thumb {
119 | background-color: rgba(155, 155, 155, 0.3);
120 | border-radius: 20px;
121 | border: transparent;
122 | }
123 |
124 | /* Dark mode için özel scrollbar stilleri */
125 | .dark .custom-scrollbar {
126 | scrollbar-color: rgba(255, 255, 255, 0.1) transparent;
127 | }
128 |
129 | .dark .custom-scrollbar::-webkit-scrollbar-thumb {
130 | background-color: rgba(255, 255, 255, 0.1);
131 | }
132 |
133 | .dark .custom-scrollbar::-webkit-scrollbar-track {
134 | background: transparent;
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from 'next'
2 | import { Inter } from 'next/font/google'
3 | import './globals.css'
4 | import { ThemeProvider } from '@/components/theme-provider'
5 |
6 | const inter = Inter({ subsets: ['latin'] })
7 |
8 | export const metadata: Metadata = {
9 | title: 'Commit Mesaj Yardımcısı',
10 | description: 'Conventional Commits standartlarına uygun commit mesajları oluşturun'
11 | }
12 |
13 | export default function RootLayout({ children }: { children: React.ReactNode }) {
14 | return (
15 |
16 |
17 |
18 | {children}
19 |
20 |
21 |
22 | )
23 | }
24 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { useState } from 'react'
4 | import { ThemeToggle } from '@/components/ThemeToggle'
5 | import { BackgroundPaths } from '@/components/ui/background-paths'
6 | import { motion } from 'framer-motion'
7 | import { CommitForm } from '@/components/CommitForm'
8 | import { Card, CardContent } from '@/components/ui/card'
9 | import { Tabs, TabsList, TabsTrigger, TabsContent } from '@/components/ui/tabs'
10 |
11 | export default function Home() {
12 | const [isStarted, setIsStarted] = useState(false)
13 |
14 | if (!isStarted) {
15 | return setIsStarted(true)} />
16 | }
17 |
18 | return (
19 |
20 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | Kılavuz
37 |
38 |
39 | Commit Oluştur
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Conventional Commits Nedir?
47 |
48 | Conventional Commits, commit mesajları için standart bir format sağlayan spesifikasyondur. Bu
49 | format sayesinde otomatik sürüm yönetimi ve değişiklik günlükleri (CHANGELOG) oluşturmak mümkün
50 | olur.
51 |
52 |
53 |
Neden Kullanmalıyız?
54 |
55 | Otomatik sürüm numarası belirleme
56 | Otomatik CHANGELOG oluşturma
57 | Tutarlı commit geçmişi
58 | Kolay kod inceleme süreci
59 |
60 |
61 |
Commit Mesaj Yapısı
62 |
Commit Mesaj Yapısı
63 |
64 | {`[optional scope]:
65 |
66 | [optional body]
67 |
68 | [optional footer(s)]`}
69 |
70 |
71 |
Commit Türleri
72 |
73 |
74 | feat: Yeni bir özellik eklendiğinde
75 |
76 |
77 | fix: Bir hata düzeltildiğinde
78 |
79 |
80 | docs: Sadece dokümantasyon değişikliklerinde
81 |
82 |
83 | style: Kod formatı değişikliklerinde (boşluk, noktalama vb.)
84 |
85 |
86 | refactor: Kod yeniden düzenlendiğinde
87 |
88 |
89 | perf: Performans iyileştirmelerinde
90 |
91 |
92 | test: Test eklendiğinde veya düzeltildiğinde
93 |
94 |
95 | build: Build sistemini etkileyen değişikliklerde
96 |
97 |
98 | ci: CI konfigürasyonlarında değişiklik
99 |
100 |
101 | chore: Diğer değişiklikler
102 |
103 |
104 |
105 |
Detaylı Örnekler
106 |
107 |
108 |
109 | feat: (kullanıcı için yeni özellik)
110 |
111 |
feat(auth): kullanıcı girişi özelliği eklendi
112 |
113 |
114 |
115 |
116 | fix: (kullanıcı için hata düzeltmesi)
117 |
118 |
fix(api): kullanıcı verisi çekme hatası giderildi
119 |
120 |
121 |
122 |
123 | docs: (dokümantasyon değişiklikleri)
124 |
125 |
docs: kurulum adımları güncellendi
126 |
127 |
128 |
129 |
130 | style: (biçimlendirme, noktalı virgül eksikleri vb.; üretim kodu değişikliği
131 | yok)
132 |
133 |
style: kod formatı düzenlendi
134 |
135 |
136 |
137 |
138 | refactor: (üretim kodunun yeniden düzenlenmesi, örn. değişken yeniden
139 | adlandırma)
140 |
141 |
refactor(user): değişken isimleri düzenlendi
142 |
143 |
144 |
145 |
146 | test: (eksik testlerin eklenmesi, testlerin yeniden düzenlenmesi)
147 |
148 |
test: kullanıcı girişi testleri eklendi
149 |
150 |
151 |
152 |
153 | chore: (görev güncellemeleri vb.)
154 |
155 |
chore: paket bağımlılıkları güncellendi
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 | )
171 | }
172 |
--------------------------------------------------------------------------------
/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "new-york",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.ts",
8 | "css": "app/globals.css",
9 | "baseColor": "neutral",
10 | "cssVariables": true,
11 | "prefix": ""
12 | },
13 | "aliases": {
14 | "components": "@/components",
15 | "utils": "@/lib/utils",
16 | "ui": "@/components/ui",
17 | "lib": "@/lib",
18 | "hooks": "@/hooks"
19 | },
20 | "iconLibrary": "lucide"
21 | }
--------------------------------------------------------------------------------
/components/CommitForm.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { useForm } from 'react-hook-form'
4 | import { zodResolver } from '@hookform/resolvers/zod'
5 | import { commitFormSchema, type CommitFormData, commitTypeEnum } from '@/lib/schemas/commit-form-schema'
6 | import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'
7 | import { Input } from '@/components/ui/input'
8 | import { Textarea } from '@/components/ui/textarea'
9 | import { Label } from '@/components/ui/label'
10 | import { PreviewBox } from '@/components/PreviewBox'
11 | import { CopyButton } from '@/components/CopyButton'
12 | import { generateCommitMessage } from '@/lib/generateCommitMessage'
13 |
14 | export function CommitForm() {
15 | const {
16 | watch,
17 | setValue,
18 | formState: { errors, touchedFields }
19 | } = useForm({
20 | resolver: zodResolver(commitFormSchema),
21 | mode: 'onTouched',
22 | defaultValues: {
23 | type: undefined,
24 | scope: '',
25 | description: '',
26 | body: '',
27 | footer: ''
28 | },
29 | reValidateMode: 'onChange'
30 | })
31 |
32 | const formValues = watch()
33 | const commitMessage = generateCommitMessage(formValues)
34 |
35 | const isRequiredFieldsFilled = Boolean(formValues.type && formValues.scope && formValues.description)
36 |
37 | const handleInputChange =
38 | (field: keyof CommitFormData) => (e: React.ChangeEvent) => {
39 | setValue(field, e.target.value, { shouldValidate: true })
40 | }
41 |
42 | return (
43 |
44 |
45 |
46 |
47 | Commit Türü
48 | *
49 |
50 |
setValue('type', value as CommitFormData['type'], { shouldValidate: true })}
52 | >
53 |
54 |
55 |
56 |
57 | {Object.values(commitTypeEnum.enum).map((type) => (
58 |
59 | {type}
60 |
61 | ))}
62 |
63 |
64 | {touchedFields.type && !formValues.type && (
65 |
Commit türü seçilmesi zorunludur
66 | )}
67 |
68 |
69 |
70 |
71 | Kapsam
72 | *
73 |
74 |
82 | {touchedFields.scope && errors.scope &&
{errors.scope.message}
}
83 |
84 |
85 |
86 |
87 |
88 | Açıklama
89 | *
90 |
91 |
99 | {touchedFields.description && errors.description && (
100 |
{errors.description.message}
101 | )}
102 |
103 |
104 |
105 | Detay (Opsiyonel)
106 |
113 |
114 |
115 |
116 | Alt Bilgi (Opsiyonel)
117 |
123 |
124 |
125 |
126 |
Önizleme
127 |
128 |
129 |
130 |
131 |
* ile işaretli alanlar zorunludur
132 |
133 |
134 |
135 | )
136 | }
137 |
--------------------------------------------------------------------------------
/components/CopyButton.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Button } from '@/components/ui/button'
4 | import { useState } from 'react'
5 |
6 | interface CopyButtonProps {
7 | text: string
8 | disabled?: boolean
9 | }
10 |
11 | export function CopyButton({ text, disabled = false }: CopyButtonProps) {
12 | const [copied, setCopied] = useState(false)
13 |
14 | const handleCopy = async (e: React.MouseEvent) => {
15 | e.preventDefault()
16 |
17 | if (disabled) return
18 |
19 | try {
20 | await navigator.clipboard.writeText(text)
21 | setCopied(true)
22 |
23 | setTimeout(() => {
24 | setCopied(false)
25 | }, 2000)
26 | } catch (err) {
27 | console.error('Kopyalama başarısız:', err)
28 | }
29 | }
30 |
31 | return (
32 |
38 | {copied ? 'Kopyalandı!' : 'Kopyala'}
39 |
40 | )
41 | }
42 |
--------------------------------------------------------------------------------
/components/DescriptionInput.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Input } from '@/components/ui/input'
4 |
5 | interface DescriptionInputProps {
6 | value: string
7 | onChange: (value: string) => void
8 | }
9 |
10 | export function DescriptionInput({ value, onChange }: DescriptionInputProps) {
11 | return (
12 |
13 | Açıklama
14 | onChange(e.target.value)} placeholder="Açıklama girin" />
15 |
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/components/GuideContent.tsx:
--------------------------------------------------------------------------------
1 | export function GuideContent() {
2 | return (
3 |
4 |
Conventional Commits
5 |
6 | Commit mesajları için standart bir format sağlayan spesifikasyon. Otomatik sürüm yönetimi ve CHANGELOG
7 | oluşturmayı kolaylaştırır.
8 |
9 |
10 |
11 |
12 |
Neden Kullanmalıyız?
13 |
14 |
15 |
16 |
17 |
18 |
Otomatik sürüm kontrolü
19 |
20 |
21 |
22 |
28 |
29 |
Otomatik CHANGELOG
30 |
31 |
32 |
33 |
39 |
40 |
Takım uyumluluğu
41 |
42 |
43 |
44 |
50 |
56 |
57 |
Kolay kod inceleme
58 |
59 |
60 |
61 |
62 |
63 |
Format
64 |
65 | {`[scope]:
66 |
67 | [body]
68 |
69 | [footer]`}
70 |
71 |
72 |
73 |
74 |
Commit Türleri
75 |
76 |
77 | feat: Yeni özellik
78 |
79 |
80 | fix: Hata düzeltme
81 |
82 |
83 | docs: Dokümantasyon
84 |
85 |
86 | style: Kod formatı
87 |
88 |
89 | refactor: Yeniden düzenleme
90 |
91 |
92 | perf: Performans
93 |
94 |
95 | test: Test
96 |
97 |
98 | build: Build sistemi
99 |
100 |
101 |
102 |
103 |
104 |
Örnekler
105 |
106 | feat(auth): add login functionality
107 | fix(api): resolve data fetch issue
108 | docs: update README
109 |
110 |
111 |
112 |
113 | )
114 | }
115 |
--------------------------------------------------------------------------------
/components/PreviewBox.tsx:
--------------------------------------------------------------------------------
1 | import { Card, CardContent } from '@/components/ui/card'
2 |
3 | interface PreviewBoxProps {
4 | message: string
5 | }
6 |
7 | export function PreviewBox({ message }: PreviewBoxProps) {
8 | return (
9 |
10 |
11 | {message}
12 |
13 |
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/components/ScopeInput.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Input } from '@/components/ui/input'
4 |
5 | interface ScopeInputProps {
6 | value: string
7 | onChange: (value: string) => void
8 | }
9 |
10 | export function ScopeInput({ value, onChange }: ScopeInputProps) {
11 | return (
12 |
13 | Kapsam
14 | onChange(e.target.value)}
17 | placeholder="Kapsam girin (örn: auth, api)"
18 | className="w-[180px]"
19 | />
20 |
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/components/ThemeToggle.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Moon, Sun } from 'lucide-react'
4 | import { useTheme } from 'next-themes'
5 | import { Button } from '@/components/ui/button'
6 |
7 | export function ThemeToggle() {
8 | const { theme, setTheme } = useTheme()
9 |
10 | return (
11 | setTheme(theme === 'light' ? 'dark' : 'light')}>
12 |
13 |
14 | Toggle theme
15 |
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/components/TypeSelector.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'
4 |
5 | const commitTypes = [
6 | { value: 'feat', label: '✨ Yeni Özellik' },
7 | { value: 'fix', label: '🐛 Hata Düzeltme' },
8 | { value: 'docs', label: '📚 Dokümantasyon' },
9 | { value: 'style', label: '💄 Stil Değişiklikleri' },
10 | { value: 'refactor', label: '♻️ Kod Yeniden Düzenleme' },
11 | { value: 'test', label: '✅ Test' },
12 | { value: 'chore', label: '🔧 Genel Bakım' },
13 | { value: 'perf', label: '⚡️ Performans İyileştirme' },
14 | { value: 'ci', label: '👷 CI/CD' }
15 | ]
16 |
17 | interface TypeSelectorProps {
18 | value: string
19 | onChange: (value: string) => void
20 | }
21 |
22 | export function TypeSelector({ value, onChange }: TypeSelectorProps) {
23 | return (
24 |
25 |
26 |
27 |
28 |
29 | {commitTypes.map((type) => (
30 |
31 | {type.label}
32 |
33 | ))}
34 |
35 |
36 | )
37 | }
38 |
--------------------------------------------------------------------------------
/components/theme-provider.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import * as React from 'react'
4 | import { ThemeProvider as NextThemesProvider } from 'next-themes'
5 | import type { ThemeProviderProps } from 'next-themes'
6 |
7 | export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
8 | return {children}
9 | }
10 |
--------------------------------------------------------------------------------
/components/ui/background-paths.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { motion } from 'framer-motion'
4 |
5 | interface BackgroundPathsProps {
6 | title?: string
7 | onStart?: () => void
8 | children?: React.ReactNode
9 | }
10 |
11 | function FloatingPaths({ position }: { position: number }) {
12 | const paths = Array.from({ length: 36 }, (_, i) => ({
13 | id: i,
14 | d: `M-${380 - i * 5 * position} -${189 + i * 6}C-${380 - i * 5 * position} -${189 + i * 6} -${
15 | 312 - i * 5 * position
16 | } ${216 - i * 6} ${152 - i * 5 * position} ${343 - i * 6}C${616 - i * 5 * position} ${470 - i * 6} ${
17 | 684 - i * 5 * position
18 | } ${875 - i * 6} ${684 - i * 5 * position} ${875 - i * 6}`,
19 | color: `rgba(15,23,42,${0.1 + i * 0.03})`,
20 | width: 0.5 + i * 0.03
21 | }))
22 |
23 | return (
24 |
25 |
26 | Background Paths
27 | {paths.map((path) => (
28 |
46 | ))}
47 |
48 |
49 | )
50 | }
51 |
52 | export function BackgroundPaths({ title = 'Background Paths', onStart, children }: BackgroundPathsProps) {
53 | const words = title.split(' ')
54 |
55 | if (children) {
56 | return (
57 |
58 |
59 |
60 |
61 |
62 | {children}
63 |
64 | )
65 | }
66 |
67 | return (
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
81 |
82 | {words.map((word, wordIndex) => (
83 |
84 | {word.split('').map((letter, letterIndex) => (
85 |
99 | {letter}
100 |
101 | ))}
102 |
103 | ))}
104 |
105 |
106 |
112 |
119 | Hızlı Başlangıç
120 |
124 | →
125 |
126 |
127 |
128 |
129 |
130 |
131 | )
132 | }
133 |
--------------------------------------------------------------------------------
/components/ui/button.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 | import { Slot } from "@radix-ui/react-slot"
3 | import { cva, type VariantProps } from "class-variance-authority"
4 |
5 | import { cn } from "@/lib/utils"
6 |
7 | const buttonVariants = cva(
8 | "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
9 | {
10 | variants: {
11 | variant: {
12 | default:
13 | "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14 | destructive:
15 | "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16 | outline:
17 | "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
18 | secondary:
19 | "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
20 | ghost: "hover:bg-accent hover:text-accent-foreground",
21 | link: "text-primary underline-offset-4 hover:underline",
22 | },
23 | size: {
24 | default: "h-9 px-4 py-2",
25 | sm: "h-8 rounded-md px-3 text-xs",
26 | lg: "h-10 rounded-md px-8",
27 | icon: "h-9 w-9",
28 | },
29 | },
30 | defaultVariants: {
31 | variant: "default",
32 | size: "default",
33 | },
34 | }
35 | )
36 |
37 | export interface ButtonProps
38 | extends React.ButtonHTMLAttributes,
39 | VariantProps {
40 | asChild?: boolean
41 | }
42 |
43 | const Button = React.forwardRef(
44 | ({ className, variant, size, asChild = false, ...props }, ref) => {
45 | const Comp = asChild ? Slot : "button"
46 | return (
47 |
52 | )
53 | }
54 | )
55 | Button.displayName = "Button"
56 |
57 | export { Button, buttonVariants }
58 |
--------------------------------------------------------------------------------
/components/ui/card.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | const Card = React.forwardRef<
6 | HTMLDivElement,
7 | React.HTMLAttributes
8 | >(({ className, ...props }, ref) => (
9 |
17 | ))
18 | Card.displayName = "Card"
19 |
20 | const CardHeader = React.forwardRef<
21 | HTMLDivElement,
22 | React.HTMLAttributes
23 | >(({ className, ...props }, ref) => (
24 |
29 | ))
30 | CardHeader.displayName = "CardHeader"
31 |
32 | const CardTitle = React.forwardRef<
33 | HTMLDivElement,
34 | React.HTMLAttributes
35 | >(({ className, ...props }, ref) => (
36 |
41 | ))
42 | CardTitle.displayName = "CardTitle"
43 |
44 | const CardDescription = React.forwardRef<
45 | HTMLDivElement,
46 | React.HTMLAttributes
47 | >(({ className, ...props }, ref) => (
48 |
53 | ))
54 | CardDescription.displayName = "CardDescription"
55 |
56 | const CardContent = React.forwardRef<
57 | HTMLDivElement,
58 | React.HTMLAttributes
59 | >(({ className, ...props }, ref) => (
60 |
61 | ))
62 | CardContent.displayName = "CardContent"
63 |
64 | const CardFooter = React.forwardRef<
65 | HTMLDivElement,
66 | React.HTMLAttributes
67 | >(({ className, ...props }, ref) => (
68 |
73 | ))
74 | CardFooter.displayName = "CardFooter"
75 |
76 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
77 |
--------------------------------------------------------------------------------
/components/ui/input.tsx:
--------------------------------------------------------------------------------
1 | import * as React from "react"
2 |
3 | import { cn } from "@/lib/utils"
4 |
5 | export interface InputProps
6 | extends React.InputHTMLAttributes {}
7 |
8 | const Input = React.forwardRef(
9 | ({ className, type, ...props }, ref) => {
10 | return (
11 |
20 | )
21 | }
22 | )
23 | Input.displayName = "Input"
24 |
25 | export { Input }
26 |
--------------------------------------------------------------------------------
/components/ui/label.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import * as React from 'react'
4 | import { cn } from '@/lib/utils'
5 |
6 | const Label = React.forwardRef<
7 | HTMLLabelElement,
8 | React.LabelHTMLAttributes
9 | >(({ className, ...props }, ref) => (
10 |
18 | ))
19 | Label.displayName = 'Label'
20 |
21 | export { Label }
22 |
--------------------------------------------------------------------------------
/components/ui/select.tsx:
--------------------------------------------------------------------------------
1 | "use client"
2 |
3 | import * as React from "react"
4 | import * as SelectPrimitive from "@radix-ui/react-select"
5 | import { Check, ChevronDown, ChevronUp } from "lucide-react"
6 |
7 | import { cn } from "@/lib/utils"
8 |
9 | const Select = SelectPrimitive.Root
10 |
11 | const SelectGroup = SelectPrimitive.Group
12 |
13 | const SelectValue = SelectPrimitive.Value
14 |
15 | const SelectTrigger = React.forwardRef<
16 | React.ElementRef,
17 | React.ComponentPropsWithoutRef
18 | >(({ className, children, ...props }, ref) => (
19 | span]:line-clamp-1",
23 | className
24 | )}
25 | {...props}
26 | >
27 | {children}
28 |
29 |
30 |
31 |
32 | ))
33 | SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
34 |
35 | const SelectScrollUpButton = React.forwardRef<
36 | React.ElementRef,
37 | React.ComponentPropsWithoutRef
38 | >(({ className, ...props }, ref) => (
39 |
47 |
48 |
49 | ))
50 | SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
51 |
52 | const SelectScrollDownButton = React.forwardRef<
53 | React.ElementRef,
54 | React.ComponentPropsWithoutRef
55 | >(({ className, ...props }, ref) => (
56 |
64 |
65 |
66 | ))
67 | SelectScrollDownButton.displayName =
68 | SelectPrimitive.ScrollDownButton.displayName
69 |
70 | const SelectContent = React.forwardRef<
71 | React.ElementRef,
72 | React.ComponentPropsWithoutRef
73 | >(({ className, children, position = "popper", ...props }, ref) => (
74 |
75 |
86 |
87 |
94 | {children}
95 |
96 |
97 |
98 |
99 | ))
100 | SelectContent.displayName = SelectPrimitive.Content.displayName
101 |
102 | const SelectLabel = React.forwardRef<
103 | React.ElementRef,
104 | React.ComponentPropsWithoutRef
105 | >(({ className, ...props }, ref) => (
106 |
111 | ))
112 | SelectLabel.displayName = SelectPrimitive.Label.displayName
113 |
114 | const SelectItem = React.forwardRef<
115 | React.ElementRef,
116 | React.ComponentPropsWithoutRef
117 | >(({ className, children, ...props }, ref) => (
118 |
126 |
127 |
128 |
129 |
130 |
131 | {children}
132 |
133 | ))
134 | SelectItem.displayName = SelectPrimitive.Item.displayName
135 |
136 | const SelectSeparator = React.forwardRef<
137 | React.ElementRef,
138 | React.ComponentPropsWithoutRef
139 | >(({ className, ...props }, ref) => (
140 |
145 | ))
146 | SelectSeparator.displayName = SelectPrimitive.Separator.displayName
147 |
148 | export {
149 | Select,
150 | SelectGroup,
151 | SelectValue,
152 | SelectTrigger,
153 | SelectContent,
154 | SelectLabel,
155 | SelectItem,
156 | SelectSeparator,
157 | SelectScrollUpButton,
158 | SelectScrollDownButton,
159 | }
160 |
--------------------------------------------------------------------------------
/components/ui/tabs.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import * as React from 'react'
4 | import * as TabsPrimitive from '@radix-ui/react-tabs'
5 | import { cn } from '@/lib/utils'
6 |
7 | const Tabs = TabsPrimitive.Root
8 |
9 | const TabsList = React.forwardRef<
10 | React.ElementRef,
11 | React.ComponentPropsWithoutRef
12 | >(({ className, ...props }, ref) => (
13 |
21 | ))
22 | TabsList.displayName = TabsPrimitive.List.displayName
23 |
24 | const TabsTrigger = React.forwardRef<
25 | React.ElementRef,
26 | React.ComponentPropsWithoutRef
27 | >(({ className, ...props }, ref) => (
28 |
36 | ))
37 | TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
38 |
39 | const TabsContent = React.forwardRef<
40 | React.ElementRef,
41 | React.ComponentPropsWithoutRef
42 | >(({ className, ...props }, ref) => (
43 |
51 | ))
52 | TabsContent.displayName = TabsPrimitive.Content.displayName
53 |
54 | export { Tabs, TabsList, TabsTrigger, TabsContent }
55 |
--------------------------------------------------------------------------------
/components/ui/textarea.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react'
2 | import { cn } from '@/lib/utils'
3 |
4 | export interface TextareaProps extends React.TextareaHTMLAttributes {}
5 |
6 | const Textarea = React.forwardRef(({ className, ...props }, ref) => {
7 | return (
8 |
16 | )
17 | })
18 | Textarea.displayName = 'Textarea'
19 |
20 | export { Textarea }
21 |
--------------------------------------------------------------------------------
/lib/generateCommitMessage.ts:
--------------------------------------------------------------------------------
1 | interface CommitMessage {
2 | type: string;
3 | scope?: string;
4 | description: string;
5 | body?: string;
6 | footer?: string;
7 | }
8 |
9 | export function generateCommitMessage({
10 | type,
11 | scope,
12 | description,
13 | body,
14 | footer,
15 | }: CommitMessage): string {
16 | let message = "type(scope): description";
17 |
18 | const requiredFields: [string, string | undefined][] = [
19 | ["type", type],
20 | ["scope", scope],
21 | ["description", description],
22 | ];
23 |
24 | for (const [key, value] of requiredFields) {
25 | if (value) {
26 | message = message.replace(key, value);
27 | }
28 | }
29 |
30 | const extras = [body, footer].filter(Boolean);
31 | extras.forEach((part) => {
32 | message += `\n\n${part}`;
33 | });
34 |
35 | return message;
36 | }
37 |
--------------------------------------------------------------------------------
/lib/schemas/commit-form-schema.ts:
--------------------------------------------------------------------------------
1 | import * as z from 'zod'
2 |
3 | export const commitTypeEnum = z.enum([
4 | 'feat',
5 | 'fix',
6 | 'docs',
7 | 'style',
8 | 'refactor',
9 | 'perf',
10 | 'test',
11 | 'build',
12 | 'ci',
13 | 'chore',
14 | 'revert'
15 | ])
16 |
17 | export const commitFormSchema = z.object({
18 | type: commitTypeEnum.describe('Commit Türü'),
19 | scope: z.string().min(1, 'Kapsam alanı zorunludur'),
20 | description: z.string().min(1, 'Açıklama alanı zorunludur').max(100, 'Açıklama çok uzun'),
21 | body: z.string().optional(),
22 | footer: z.string().optional()
23 | })
24 |
25 | export type CommitFormData = z.infer
26 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { clsx, type ClassValue } from "clsx"
2 | import { twMerge } from "tailwind-merge"
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | async rewrites() {
4 | return [
5 | {
6 | source: '/',
7 | destination: 'http://localhost:3000'
8 | }
9 | ]
10 | }
11 | }
12 |
13 | export default nextConfig
14 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "my-app",
9 | "version": "0.1.0",
10 | "dependencies": {
11 | "@hookform/resolvers": "^5.0.1",
12 | "@radix-ui/react-select": "^2.1.7",
13 | "@radix-ui/react-slot": "^1.2.0",
14 | "@radix-ui/react-tabs": "^1.1.4",
15 | "class-variance-authority": "^0.7.1",
16 | "clsx": "^2.1.1",
17 | "framer-motion": "^12.6.3",
18 | "lucide-react": "^0.487.0",
19 | "next": "14.2.28",
20 | "next-intl": "^4.0.2",
21 | "next-navigation": "^1.0.6",
22 | "next-themes": "^0.4.6",
23 | "react": "^18",
24 | "react-dom": "^18",
25 | "react-hook-form": "^7.55.0",
26 | "tailwind-merge": "^3.2.0",
27 | "tailwindcss-animate": "^1.0.7",
28 | "zod": "^3.24.2",
29 | "zustand": "^5.0.3"
30 | },
31 | "devDependencies": {
32 | "@tailwindcss/typography": "^0.5.16",
33 | "@types/node": "^20",
34 | "@types/react": "^18",
35 | "@types/react-dom": "^18",
36 | "postcss": "^8",
37 | "tailwindcss": "^3.4.1",
38 | "typescript": "^5"
39 | }
40 | },
41 | "node_modules/@alloc/quick-lru": {
42 | "version": "5.2.0",
43 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
44 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
45 | "engines": {
46 | "node": ">=10"
47 | },
48 | "funding": {
49 | "url": "https://github.com/sponsors/sindresorhus"
50 | }
51 | },
52 | "node_modules/@floating-ui/core": {
53 | "version": "1.6.9",
54 | "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
55 | "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
56 | "dependencies": {
57 | "@floating-ui/utils": "^0.2.9"
58 | }
59 | },
60 | "node_modules/@floating-ui/dom": {
61 | "version": "1.6.13",
62 | "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
63 | "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
64 | "dependencies": {
65 | "@floating-ui/core": "^1.6.0",
66 | "@floating-ui/utils": "^0.2.9"
67 | }
68 | },
69 | "node_modules/@floating-ui/react-dom": {
70 | "version": "2.1.2",
71 | "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
72 | "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
73 | "dependencies": {
74 | "@floating-ui/dom": "^1.0.0"
75 | },
76 | "peerDependencies": {
77 | "react": ">=16.8.0",
78 | "react-dom": ">=16.8.0"
79 | }
80 | },
81 | "node_modules/@floating-ui/utils": {
82 | "version": "0.2.9",
83 | "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
84 | "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
85 | },
86 | "node_modules/@formatjs/ecma402-abstract": {
87 | "version": "2.3.4",
88 | "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz",
89 | "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==",
90 | "dependencies": {
91 | "@formatjs/fast-memoize": "2.2.7",
92 | "@formatjs/intl-localematcher": "0.6.1",
93 | "decimal.js": "^10.4.3",
94 | "tslib": "^2.8.0"
95 | }
96 | },
97 | "node_modules/@formatjs/ecma402-abstract/node_modules/@formatjs/intl-localematcher": {
98 | "version": "0.6.1",
99 | "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz",
100 | "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==",
101 | "dependencies": {
102 | "tslib": "^2.8.0"
103 | }
104 | },
105 | "node_modules/@formatjs/fast-memoize": {
106 | "version": "2.2.7",
107 | "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.7.tgz",
108 | "integrity": "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==",
109 | "dependencies": {
110 | "tslib": "^2.8.0"
111 | }
112 | },
113 | "node_modules/@formatjs/icu-messageformat-parser": {
114 | "version": "2.11.2",
115 | "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz",
116 | "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==",
117 | "dependencies": {
118 | "@formatjs/ecma402-abstract": "2.3.4",
119 | "@formatjs/icu-skeleton-parser": "1.8.14",
120 | "tslib": "^2.8.0"
121 | }
122 | },
123 | "node_modules/@formatjs/icu-skeleton-parser": {
124 | "version": "1.8.14",
125 | "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz",
126 | "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==",
127 | "dependencies": {
128 | "@formatjs/ecma402-abstract": "2.3.4",
129 | "tslib": "^2.8.0"
130 | }
131 | },
132 | "node_modules/@formatjs/intl-localematcher": {
133 | "version": "0.5.10",
134 | "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.10.tgz",
135 | "integrity": "sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==",
136 | "dependencies": {
137 | "tslib": "2"
138 | }
139 | },
140 | "node_modules/@hookform/resolvers": {
141 | "version": "5.0.1",
142 | "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.0.1.tgz",
143 | "integrity": "sha512-u/+Jp83luQNx9AdyW2fIPGY6Y7NG68eN2ZW8FOJYL+M0i4s49+refdJdOp/A9n9HFQtQs3HIDHQvX3ZET2o7YA==",
144 | "dependencies": {
145 | "@standard-schema/utils": "^0.3.0"
146 | },
147 | "peerDependencies": {
148 | "react-hook-form": "^7.55.0"
149 | }
150 | },
151 | "node_modules/@isaacs/cliui": {
152 | "version": "8.0.2",
153 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
154 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
155 | "dependencies": {
156 | "string-width": "^5.1.2",
157 | "string-width-cjs": "npm:string-width@^4.2.0",
158 | "strip-ansi": "^7.0.1",
159 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
160 | "wrap-ansi": "^8.1.0",
161 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
162 | },
163 | "engines": {
164 | "node": ">=12"
165 | }
166 | },
167 | "node_modules/@jridgewell/gen-mapping": {
168 | "version": "0.3.8",
169 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
170 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
171 | "dependencies": {
172 | "@jridgewell/set-array": "^1.2.1",
173 | "@jridgewell/sourcemap-codec": "^1.4.10",
174 | "@jridgewell/trace-mapping": "^0.3.24"
175 | },
176 | "engines": {
177 | "node": ">=6.0.0"
178 | }
179 | },
180 | "node_modules/@jridgewell/resolve-uri": {
181 | "version": "3.1.2",
182 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
183 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
184 | "engines": {
185 | "node": ">=6.0.0"
186 | }
187 | },
188 | "node_modules/@jridgewell/set-array": {
189 | "version": "1.2.1",
190 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
191 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
192 | "engines": {
193 | "node": ">=6.0.0"
194 | }
195 | },
196 | "node_modules/@jridgewell/sourcemap-codec": {
197 | "version": "1.5.0",
198 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
199 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
200 | },
201 | "node_modules/@jridgewell/trace-mapping": {
202 | "version": "0.3.25",
203 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
204 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
205 | "dependencies": {
206 | "@jridgewell/resolve-uri": "^3.1.0",
207 | "@jridgewell/sourcemap-codec": "^1.4.14"
208 | }
209 | },
210 | "node_modules/@next/env": {
211 | "version": "14.2.28",
212 | "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.28.tgz",
213 | "integrity": "sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g=="
214 | },
215 | "node_modules/@next/swc-darwin-arm64": {
216 | "version": "14.2.28",
217 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.28.tgz",
218 | "integrity": "sha512-kzGChl9setxYWpk3H6fTZXXPFFjg7urptLq5o5ZgYezCrqlemKttwMT5iFyx/p1e/JeglTwDFRtb923gTJ3R1w==",
219 | "cpu": [
220 | "arm64"
221 | ],
222 | "optional": true,
223 | "os": [
224 | "darwin"
225 | ],
226 | "engines": {
227 | "node": ">= 10"
228 | }
229 | },
230 | "node_modules/@next/swc-darwin-x64": {
231 | "version": "14.2.28",
232 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.28.tgz",
233 | "integrity": "sha512-z6FXYHDJlFOzVEOiiJ/4NG8aLCeayZdcRSMjPDysW297Up6r22xw6Ea9AOwQqbNsth8JNgIK8EkWz2IDwaLQcw==",
234 | "cpu": [
235 | "x64"
236 | ],
237 | "optional": true,
238 | "os": [
239 | "darwin"
240 | ],
241 | "engines": {
242 | "node": ">= 10"
243 | }
244 | },
245 | "node_modules/@next/swc-linux-arm64-gnu": {
246 | "version": "14.2.28",
247 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.28.tgz",
248 | "integrity": "sha512-9ARHLEQXhAilNJ7rgQX8xs9aH3yJSj888ssSjJLeldiZKR4D7N08MfMqljk77fAwZsWwsrp8ohHsMvurvv9liQ==",
249 | "cpu": [
250 | "arm64"
251 | ],
252 | "optional": true,
253 | "os": [
254 | "linux"
255 | ],
256 | "engines": {
257 | "node": ">= 10"
258 | }
259 | },
260 | "node_modules/@next/swc-linux-arm64-musl": {
261 | "version": "14.2.28",
262 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.28.tgz",
263 | "integrity": "sha512-p6gvatI1nX41KCizEe6JkF0FS/cEEF0u23vKDpl+WhPe/fCTBeGkEBh7iW2cUM0rvquPVwPWdiUR6Ebr/kQWxQ==",
264 | "cpu": [
265 | "arm64"
266 | ],
267 | "optional": true,
268 | "os": [
269 | "linux"
270 | ],
271 | "engines": {
272 | "node": ">= 10"
273 | }
274 | },
275 | "node_modules/@next/swc-linux-x64-gnu": {
276 | "version": "14.2.28",
277 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.28.tgz",
278 | "integrity": "sha512-nsiSnz2wO6GwMAX2o0iucONlVL7dNgKUqt/mDTATGO2NY59EO/ZKnKEr80BJFhuA5UC1KZOMblJHWZoqIJddpA==",
279 | "cpu": [
280 | "x64"
281 | ],
282 | "optional": true,
283 | "os": [
284 | "linux"
285 | ],
286 | "engines": {
287 | "node": ">= 10"
288 | }
289 | },
290 | "node_modules/@next/swc-linux-x64-musl": {
291 | "version": "14.2.28",
292 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.28.tgz",
293 | "integrity": "sha512-+IuGQKoI3abrXFqx7GtlvNOpeExUH1mTIqCrh1LGFf8DnlUcTmOOCApEnPJUSLrSbzOdsF2ho2KhnQoO0I1RDw==",
294 | "cpu": [
295 | "x64"
296 | ],
297 | "optional": true,
298 | "os": [
299 | "linux"
300 | ],
301 | "engines": {
302 | "node": ">= 10"
303 | }
304 | },
305 | "node_modules/@next/swc-win32-arm64-msvc": {
306 | "version": "14.2.28",
307 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.28.tgz",
308 | "integrity": "sha512-l61WZ3nevt4BAnGksUVFKy2uJP5DPz2E0Ma/Oklvo3sGj9sw3q7vBWONFRgz+ICiHpW5mV+mBrkB3XEubMrKaA==",
309 | "cpu": [
310 | "arm64"
311 | ],
312 | "optional": true,
313 | "os": [
314 | "win32"
315 | ],
316 | "engines": {
317 | "node": ">= 10"
318 | }
319 | },
320 | "node_modules/@next/swc-win32-ia32-msvc": {
321 | "version": "14.2.28",
322 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.28.tgz",
323 | "integrity": "sha512-+Kcp1T3jHZnJ9v9VTJ/yf1t/xmtFAc/Sge4v7mVc1z+NYfYzisi8kJ9AsY8itbgq+WgEwMtOpiLLJsUy2qnXZw==",
324 | "cpu": [
325 | "ia32"
326 | ],
327 | "optional": true,
328 | "os": [
329 | "win32"
330 | ],
331 | "engines": {
332 | "node": ">= 10"
333 | }
334 | },
335 | "node_modules/@next/swc-win32-x64-msvc": {
336 | "version": "14.2.28",
337 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.28.tgz",
338 | "integrity": "sha512-1gCmpvyhz7DkB1srRItJTnmR2UwQPAUXXIg9r0/56g3O8etGmwlX68skKXJOp9EejW3hhv7nSQUJ2raFiz4MoA==",
339 | "cpu": [
340 | "x64"
341 | ],
342 | "optional": true,
343 | "os": [
344 | "win32"
345 | ],
346 | "engines": {
347 | "node": ">= 10"
348 | }
349 | },
350 | "node_modules/@nodelib/fs.scandir": {
351 | "version": "2.1.5",
352 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
353 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
354 | "dependencies": {
355 | "@nodelib/fs.stat": "2.0.5",
356 | "run-parallel": "^1.1.9"
357 | },
358 | "engines": {
359 | "node": ">= 8"
360 | }
361 | },
362 | "node_modules/@nodelib/fs.stat": {
363 | "version": "2.0.5",
364 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
365 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
366 | "engines": {
367 | "node": ">= 8"
368 | }
369 | },
370 | "node_modules/@nodelib/fs.walk": {
371 | "version": "1.2.8",
372 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
373 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
374 | "dependencies": {
375 | "@nodelib/fs.scandir": "2.1.5",
376 | "fastq": "^1.6.0"
377 | },
378 | "engines": {
379 | "node": ">= 8"
380 | }
381 | },
382 | "node_modules/@pkgjs/parseargs": {
383 | "version": "0.11.0",
384 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
385 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
386 | "optional": true,
387 | "engines": {
388 | "node": ">=14"
389 | }
390 | },
391 | "node_modules/@radix-ui/number": {
392 | "version": "1.1.1",
393 | "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz",
394 | "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="
395 | },
396 | "node_modules/@radix-ui/primitive": {
397 | "version": "1.1.2",
398 | "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
399 | "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA=="
400 | },
401 | "node_modules/@radix-ui/react-arrow": {
402 | "version": "1.1.3",
403 | "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.3.tgz",
404 | "integrity": "sha512-2dvVU4jva0qkNZH6HHWuSz5FN5GeU5tymvCgutF8WaXz9WnD1NgUhy73cqzkjkN4Zkn8lfTPv5JIfrC221W+Nw==",
405 | "dependencies": {
406 | "@radix-ui/react-primitive": "2.0.3"
407 | },
408 | "peerDependencies": {
409 | "@types/react": "*",
410 | "@types/react-dom": "*",
411 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
412 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
413 | },
414 | "peerDependenciesMeta": {
415 | "@types/react": {
416 | "optional": true
417 | },
418 | "@types/react-dom": {
419 | "optional": true
420 | }
421 | }
422 | },
423 | "node_modules/@radix-ui/react-collection": {
424 | "version": "1.1.3",
425 | "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.3.tgz",
426 | "integrity": "sha512-mM2pxoQw5HJ49rkzwOs7Y6J4oYH22wS8BfK2/bBxROlI4xuR0c4jEenQP63LlTlDkO6Buj2Vt+QYAYcOgqtrXA==",
427 | "dependencies": {
428 | "@radix-ui/react-compose-refs": "1.1.2",
429 | "@radix-ui/react-context": "1.1.2",
430 | "@radix-ui/react-primitive": "2.0.3",
431 | "@radix-ui/react-slot": "1.2.0"
432 | },
433 | "peerDependencies": {
434 | "@types/react": "*",
435 | "@types/react-dom": "*",
436 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
437 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
438 | },
439 | "peerDependenciesMeta": {
440 | "@types/react": {
441 | "optional": true
442 | },
443 | "@types/react-dom": {
444 | "optional": true
445 | }
446 | }
447 | },
448 | "node_modules/@radix-ui/react-compose-refs": {
449 | "version": "1.1.2",
450 | "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
451 | "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
452 | "peerDependencies": {
453 | "@types/react": "*",
454 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
455 | },
456 | "peerDependenciesMeta": {
457 | "@types/react": {
458 | "optional": true
459 | }
460 | }
461 | },
462 | "node_modules/@radix-ui/react-context": {
463 | "version": "1.1.2",
464 | "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
465 | "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
466 | "peerDependencies": {
467 | "@types/react": "*",
468 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
469 | },
470 | "peerDependenciesMeta": {
471 | "@types/react": {
472 | "optional": true
473 | }
474 | }
475 | },
476 | "node_modules/@radix-ui/react-direction": {
477 | "version": "1.1.1",
478 | "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
479 | "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
480 | "peerDependencies": {
481 | "@types/react": "*",
482 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
483 | },
484 | "peerDependenciesMeta": {
485 | "@types/react": {
486 | "optional": true
487 | }
488 | }
489 | },
490 | "node_modules/@radix-ui/react-dismissable-layer": {
491 | "version": "1.1.6",
492 | "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.6.tgz",
493 | "integrity": "sha512-7gpgMT2gyKym9Jz2ZhlRXSg2y6cNQIK8d/cqBZ0RBCaps8pFryCWXiUKI+uHGFrhMrbGUP7U6PWgiXzIxoyF3Q==",
494 | "dependencies": {
495 | "@radix-ui/primitive": "1.1.2",
496 | "@radix-ui/react-compose-refs": "1.1.2",
497 | "@radix-ui/react-primitive": "2.0.3",
498 | "@radix-ui/react-use-callback-ref": "1.1.1",
499 | "@radix-ui/react-use-escape-keydown": "1.1.1"
500 | },
501 | "peerDependencies": {
502 | "@types/react": "*",
503 | "@types/react-dom": "*",
504 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
505 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
506 | },
507 | "peerDependenciesMeta": {
508 | "@types/react": {
509 | "optional": true
510 | },
511 | "@types/react-dom": {
512 | "optional": true
513 | }
514 | }
515 | },
516 | "node_modules/@radix-ui/react-focus-guards": {
517 | "version": "1.1.2",
518 | "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
519 | "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
520 | "peerDependencies": {
521 | "@types/react": "*",
522 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
523 | },
524 | "peerDependenciesMeta": {
525 | "@types/react": {
526 | "optional": true
527 | }
528 | }
529 | },
530 | "node_modules/@radix-ui/react-focus-scope": {
531 | "version": "1.1.3",
532 | "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.3.tgz",
533 | "integrity": "sha512-4XaDlq0bPt7oJwR+0k0clCiCO/7lO7NKZTAaJBYxDNQT/vj4ig0/UvctrRscZaFREpRvUTkpKR96ov1e6jptQg==",
534 | "dependencies": {
535 | "@radix-ui/react-compose-refs": "1.1.2",
536 | "@radix-ui/react-primitive": "2.0.3",
537 | "@radix-ui/react-use-callback-ref": "1.1.1"
538 | },
539 | "peerDependencies": {
540 | "@types/react": "*",
541 | "@types/react-dom": "*",
542 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
543 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
544 | },
545 | "peerDependenciesMeta": {
546 | "@types/react": {
547 | "optional": true
548 | },
549 | "@types/react-dom": {
550 | "optional": true
551 | }
552 | }
553 | },
554 | "node_modules/@radix-ui/react-id": {
555 | "version": "1.1.1",
556 | "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
557 | "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
558 | "dependencies": {
559 | "@radix-ui/react-use-layout-effect": "1.1.1"
560 | },
561 | "peerDependencies": {
562 | "@types/react": "*",
563 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
564 | },
565 | "peerDependenciesMeta": {
566 | "@types/react": {
567 | "optional": true
568 | }
569 | }
570 | },
571 | "node_modules/@radix-ui/react-popper": {
572 | "version": "1.2.3",
573 | "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.3.tgz",
574 | "integrity": "sha512-iNb9LYUMkne9zIahukgQmHlSBp9XWGeQQ7FvUGNk45ywzOb6kQa+Ca38OphXlWDiKvyneo9S+KSJsLfLt8812A==",
575 | "dependencies": {
576 | "@floating-ui/react-dom": "^2.0.0",
577 | "@radix-ui/react-arrow": "1.1.3",
578 | "@radix-ui/react-compose-refs": "1.1.2",
579 | "@radix-ui/react-context": "1.1.2",
580 | "@radix-ui/react-primitive": "2.0.3",
581 | "@radix-ui/react-use-callback-ref": "1.1.1",
582 | "@radix-ui/react-use-layout-effect": "1.1.1",
583 | "@radix-ui/react-use-rect": "1.1.1",
584 | "@radix-ui/react-use-size": "1.1.1",
585 | "@radix-ui/rect": "1.1.1"
586 | },
587 | "peerDependencies": {
588 | "@types/react": "*",
589 | "@types/react-dom": "*",
590 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
591 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
592 | },
593 | "peerDependenciesMeta": {
594 | "@types/react": {
595 | "optional": true
596 | },
597 | "@types/react-dom": {
598 | "optional": true
599 | }
600 | }
601 | },
602 | "node_modules/@radix-ui/react-portal": {
603 | "version": "1.1.5",
604 | "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.5.tgz",
605 | "integrity": "sha512-ps/67ZqsFm+Mb6lSPJpfhRLrVL2i2fntgCmGMqqth4eaGUf+knAuuRtWVJrNjUhExgmdRqftSgzpf0DF0n6yXA==",
606 | "dependencies": {
607 | "@radix-ui/react-primitive": "2.0.3",
608 | "@radix-ui/react-use-layout-effect": "1.1.1"
609 | },
610 | "peerDependencies": {
611 | "@types/react": "*",
612 | "@types/react-dom": "*",
613 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
614 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
615 | },
616 | "peerDependenciesMeta": {
617 | "@types/react": {
618 | "optional": true
619 | },
620 | "@types/react-dom": {
621 | "optional": true
622 | }
623 | }
624 | },
625 | "node_modules/@radix-ui/react-presence": {
626 | "version": "1.1.3",
627 | "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.3.tgz",
628 | "integrity": "sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==",
629 | "dependencies": {
630 | "@radix-ui/react-compose-refs": "1.1.2",
631 | "@radix-ui/react-use-layout-effect": "1.1.1"
632 | },
633 | "peerDependencies": {
634 | "@types/react": "*",
635 | "@types/react-dom": "*",
636 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
637 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
638 | },
639 | "peerDependenciesMeta": {
640 | "@types/react": {
641 | "optional": true
642 | },
643 | "@types/react-dom": {
644 | "optional": true
645 | }
646 | }
647 | },
648 | "node_modules/@radix-ui/react-primitive": {
649 | "version": "2.0.3",
650 | "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.3.tgz",
651 | "integrity": "sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g==",
652 | "dependencies": {
653 | "@radix-ui/react-slot": "1.2.0"
654 | },
655 | "peerDependencies": {
656 | "@types/react": "*",
657 | "@types/react-dom": "*",
658 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
659 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
660 | },
661 | "peerDependenciesMeta": {
662 | "@types/react": {
663 | "optional": true
664 | },
665 | "@types/react-dom": {
666 | "optional": true
667 | }
668 | }
669 | },
670 | "node_modules/@radix-ui/react-roving-focus": {
671 | "version": "1.1.3",
672 | "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.3.tgz",
673 | "integrity": "sha512-ufbpLUjZiOg4iYgb2hQrWXEPYX6jOLBbR27bDyAff5GYMRrCzcze8lukjuXVUQvJ6HZe8+oL+hhswDcjmcgVyg==",
674 | "dependencies": {
675 | "@radix-ui/primitive": "1.1.2",
676 | "@radix-ui/react-collection": "1.1.3",
677 | "@radix-ui/react-compose-refs": "1.1.2",
678 | "@radix-ui/react-context": "1.1.2",
679 | "@radix-ui/react-direction": "1.1.1",
680 | "@radix-ui/react-id": "1.1.1",
681 | "@radix-ui/react-primitive": "2.0.3",
682 | "@radix-ui/react-use-callback-ref": "1.1.1",
683 | "@radix-ui/react-use-controllable-state": "1.1.1"
684 | },
685 | "peerDependencies": {
686 | "@types/react": "*",
687 | "@types/react-dom": "*",
688 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
689 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
690 | },
691 | "peerDependenciesMeta": {
692 | "@types/react": {
693 | "optional": true
694 | },
695 | "@types/react-dom": {
696 | "optional": true
697 | }
698 | }
699 | },
700 | "node_modules/@radix-ui/react-select": {
701 | "version": "2.1.7",
702 | "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.7.tgz",
703 | "integrity": "sha512-exzGIRtc7S8EIM2KjFg+7lJZsH7O7tpaBaJbBNVDnOZNhtoQ2iV+iSNfi2Wth0m6h3trJkMVvzAehB3c6xj/3Q==",
704 | "dependencies": {
705 | "@radix-ui/number": "1.1.1",
706 | "@radix-ui/primitive": "1.1.2",
707 | "@radix-ui/react-collection": "1.1.3",
708 | "@radix-ui/react-compose-refs": "1.1.2",
709 | "@radix-ui/react-context": "1.1.2",
710 | "@radix-ui/react-direction": "1.1.1",
711 | "@radix-ui/react-dismissable-layer": "1.1.6",
712 | "@radix-ui/react-focus-guards": "1.1.2",
713 | "@radix-ui/react-focus-scope": "1.1.3",
714 | "@radix-ui/react-id": "1.1.1",
715 | "@radix-ui/react-popper": "1.2.3",
716 | "@radix-ui/react-portal": "1.1.5",
717 | "@radix-ui/react-primitive": "2.0.3",
718 | "@radix-ui/react-slot": "1.2.0",
719 | "@radix-ui/react-use-callback-ref": "1.1.1",
720 | "@radix-ui/react-use-controllable-state": "1.1.1",
721 | "@radix-ui/react-use-layout-effect": "1.1.1",
722 | "@radix-ui/react-use-previous": "1.1.1",
723 | "@radix-ui/react-visually-hidden": "1.1.3",
724 | "aria-hidden": "^1.2.4",
725 | "react-remove-scroll": "^2.6.3"
726 | },
727 | "peerDependencies": {
728 | "@types/react": "*",
729 | "@types/react-dom": "*",
730 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
731 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
732 | },
733 | "peerDependenciesMeta": {
734 | "@types/react": {
735 | "optional": true
736 | },
737 | "@types/react-dom": {
738 | "optional": true
739 | }
740 | }
741 | },
742 | "node_modules/@radix-ui/react-slot": {
743 | "version": "1.2.0",
744 | "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz",
745 | "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==",
746 | "dependencies": {
747 | "@radix-ui/react-compose-refs": "1.1.2"
748 | },
749 | "peerDependencies": {
750 | "@types/react": "*",
751 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
752 | },
753 | "peerDependenciesMeta": {
754 | "@types/react": {
755 | "optional": true
756 | }
757 | }
758 | },
759 | "node_modules/@radix-ui/react-tabs": {
760 | "version": "1.1.4",
761 | "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.4.tgz",
762 | "integrity": "sha512-fuHMHWSf5SRhXke+DbHXj2wVMo+ghVH30vhX3XVacdXqDl+J4XWafMIGOOER861QpBx1jxgwKXL2dQnfrsd8MQ==",
763 | "dependencies": {
764 | "@radix-ui/primitive": "1.1.2",
765 | "@radix-ui/react-context": "1.1.2",
766 | "@radix-ui/react-direction": "1.1.1",
767 | "@radix-ui/react-id": "1.1.1",
768 | "@radix-ui/react-presence": "1.1.3",
769 | "@radix-ui/react-primitive": "2.0.3",
770 | "@radix-ui/react-roving-focus": "1.1.3",
771 | "@radix-ui/react-use-controllable-state": "1.1.1"
772 | },
773 | "peerDependencies": {
774 | "@types/react": "*",
775 | "@types/react-dom": "*",
776 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
777 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
778 | },
779 | "peerDependenciesMeta": {
780 | "@types/react": {
781 | "optional": true
782 | },
783 | "@types/react-dom": {
784 | "optional": true
785 | }
786 | }
787 | },
788 | "node_modules/@radix-ui/react-use-callback-ref": {
789 | "version": "1.1.1",
790 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
791 | "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
792 | "peerDependencies": {
793 | "@types/react": "*",
794 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
795 | },
796 | "peerDependenciesMeta": {
797 | "@types/react": {
798 | "optional": true
799 | }
800 | }
801 | },
802 | "node_modules/@radix-ui/react-use-controllable-state": {
803 | "version": "1.1.1",
804 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.1.tgz",
805 | "integrity": "sha512-YnEXIy8/ga01Y1PN0VfaNH//MhA91JlEGVBDxDzROqwrAtG5Yr2QGEPz8A/rJA3C7ZAHryOYGaUv8fLSW2H/mg==",
806 | "dependencies": {
807 | "@radix-ui/react-use-callback-ref": "1.1.1"
808 | },
809 | "peerDependencies": {
810 | "@types/react": "*",
811 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
812 | },
813 | "peerDependenciesMeta": {
814 | "@types/react": {
815 | "optional": true
816 | }
817 | }
818 | },
819 | "node_modules/@radix-ui/react-use-escape-keydown": {
820 | "version": "1.1.1",
821 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
822 | "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
823 | "dependencies": {
824 | "@radix-ui/react-use-callback-ref": "1.1.1"
825 | },
826 | "peerDependencies": {
827 | "@types/react": "*",
828 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
829 | },
830 | "peerDependenciesMeta": {
831 | "@types/react": {
832 | "optional": true
833 | }
834 | }
835 | },
836 | "node_modules/@radix-ui/react-use-layout-effect": {
837 | "version": "1.1.1",
838 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
839 | "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
840 | "peerDependencies": {
841 | "@types/react": "*",
842 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
843 | },
844 | "peerDependenciesMeta": {
845 | "@types/react": {
846 | "optional": true
847 | }
848 | }
849 | },
850 | "node_modules/@radix-ui/react-use-previous": {
851 | "version": "1.1.1",
852 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
853 | "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
854 | "peerDependencies": {
855 | "@types/react": "*",
856 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
857 | },
858 | "peerDependenciesMeta": {
859 | "@types/react": {
860 | "optional": true
861 | }
862 | }
863 | },
864 | "node_modules/@radix-ui/react-use-rect": {
865 | "version": "1.1.1",
866 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz",
867 | "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
868 | "dependencies": {
869 | "@radix-ui/rect": "1.1.1"
870 | },
871 | "peerDependencies": {
872 | "@types/react": "*",
873 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
874 | },
875 | "peerDependenciesMeta": {
876 | "@types/react": {
877 | "optional": true
878 | }
879 | }
880 | },
881 | "node_modules/@radix-ui/react-use-size": {
882 | "version": "1.1.1",
883 | "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
884 | "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
885 | "dependencies": {
886 | "@radix-ui/react-use-layout-effect": "1.1.1"
887 | },
888 | "peerDependencies": {
889 | "@types/react": "*",
890 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
891 | },
892 | "peerDependenciesMeta": {
893 | "@types/react": {
894 | "optional": true
895 | }
896 | }
897 | },
898 | "node_modules/@radix-ui/react-visually-hidden": {
899 | "version": "1.1.3",
900 | "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.3.tgz",
901 | "integrity": "sha512-oXSF3ZQRd5fvomd9hmUCb2EHSZbPp3ZSHAHJJU/DlF9XoFkJBBW8RHU/E8WEH+RbSfJd/QFA0sl8ClJXknBwHQ==",
902 | "dependencies": {
903 | "@radix-ui/react-primitive": "2.0.3"
904 | },
905 | "peerDependencies": {
906 | "@types/react": "*",
907 | "@types/react-dom": "*",
908 | "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
909 | "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
910 | },
911 | "peerDependenciesMeta": {
912 | "@types/react": {
913 | "optional": true
914 | },
915 | "@types/react-dom": {
916 | "optional": true
917 | }
918 | }
919 | },
920 | "node_modules/@radix-ui/rect": {
921 | "version": "1.1.1",
922 | "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
923 | "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="
924 | },
925 | "node_modules/@schummar/icu-type-parser": {
926 | "version": "1.21.5",
927 | "resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz",
928 | "integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw=="
929 | },
930 | "node_modules/@standard-schema/utils": {
931 | "version": "0.3.0",
932 | "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
933 | "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="
934 | },
935 | "node_modules/@swc/counter": {
936 | "version": "0.1.3",
937 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
938 | "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
939 | },
940 | "node_modules/@swc/helpers": {
941 | "version": "0.5.5",
942 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
943 | "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
944 | "dependencies": {
945 | "@swc/counter": "^0.1.3",
946 | "tslib": "^2.4.0"
947 | }
948 | },
949 | "node_modules/@tailwindcss/typography": {
950 | "version": "0.5.16",
951 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz",
952 | "integrity": "sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==",
953 | "dev": true,
954 | "dependencies": {
955 | "lodash.castarray": "^4.4.0",
956 | "lodash.isplainobject": "^4.0.6",
957 | "lodash.merge": "^4.6.2",
958 | "postcss-selector-parser": "6.0.10"
959 | },
960 | "peerDependencies": {
961 | "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
962 | }
963 | },
964 | "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": {
965 | "version": "6.0.10",
966 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
967 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
968 | "dev": true,
969 | "dependencies": {
970 | "cssesc": "^3.0.0",
971 | "util-deprecate": "^1.0.2"
972 | },
973 | "engines": {
974 | "node": ">=4"
975 | }
976 | },
977 | "node_modules/@types/node": {
978 | "version": "20.17.30",
979 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.30.tgz",
980 | "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==",
981 | "dev": true,
982 | "dependencies": {
983 | "undici-types": "~6.19.2"
984 | }
985 | },
986 | "node_modules/@types/prop-types": {
987 | "version": "15.7.14",
988 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
989 | "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
990 | "devOptional": true
991 | },
992 | "node_modules/@types/react": {
993 | "version": "18.3.20",
994 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz",
995 | "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==",
996 | "devOptional": true,
997 | "dependencies": {
998 | "@types/prop-types": "*",
999 | "csstype": "^3.0.2"
1000 | }
1001 | },
1002 | "node_modules/@types/react-dom": {
1003 | "version": "18.3.6",
1004 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.6.tgz",
1005 | "integrity": "sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==",
1006 | "devOptional": true,
1007 | "peerDependencies": {
1008 | "@types/react": "^18.0.0"
1009 | }
1010 | },
1011 | "node_modules/ansi-regex": {
1012 | "version": "6.1.0",
1013 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
1014 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
1015 | "engines": {
1016 | "node": ">=12"
1017 | },
1018 | "funding": {
1019 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
1020 | }
1021 | },
1022 | "node_modules/ansi-styles": {
1023 | "version": "6.2.1",
1024 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
1025 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
1026 | "engines": {
1027 | "node": ">=12"
1028 | },
1029 | "funding": {
1030 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1031 | }
1032 | },
1033 | "node_modules/any-promise": {
1034 | "version": "1.3.0",
1035 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1036 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
1037 | },
1038 | "node_modules/anymatch": {
1039 | "version": "3.1.3",
1040 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1041 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1042 | "dependencies": {
1043 | "normalize-path": "^3.0.0",
1044 | "picomatch": "^2.0.4"
1045 | },
1046 | "engines": {
1047 | "node": ">= 8"
1048 | }
1049 | },
1050 | "node_modules/arg": {
1051 | "version": "5.0.2",
1052 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1053 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
1054 | },
1055 | "node_modules/aria-hidden": {
1056 | "version": "1.2.4",
1057 | "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
1058 | "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
1059 | "dependencies": {
1060 | "tslib": "^2.0.0"
1061 | },
1062 | "engines": {
1063 | "node": ">=10"
1064 | }
1065 | },
1066 | "node_modules/balanced-match": {
1067 | "version": "1.0.2",
1068 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1069 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
1070 | },
1071 | "node_modules/binary-extensions": {
1072 | "version": "2.3.0",
1073 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1074 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1075 | "engines": {
1076 | "node": ">=8"
1077 | },
1078 | "funding": {
1079 | "url": "https://github.com/sponsors/sindresorhus"
1080 | }
1081 | },
1082 | "node_modules/brace-expansion": {
1083 | "version": "2.0.1",
1084 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1085 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1086 | "dependencies": {
1087 | "balanced-match": "^1.0.0"
1088 | }
1089 | },
1090 | "node_modules/braces": {
1091 | "version": "3.0.3",
1092 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1093 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1094 | "dependencies": {
1095 | "fill-range": "^7.1.1"
1096 | },
1097 | "engines": {
1098 | "node": ">=8"
1099 | }
1100 | },
1101 | "node_modules/busboy": {
1102 | "version": "1.6.0",
1103 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
1104 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
1105 | "dependencies": {
1106 | "streamsearch": "^1.1.0"
1107 | },
1108 | "engines": {
1109 | "node": ">=10.16.0"
1110 | }
1111 | },
1112 | "node_modules/camelcase-css": {
1113 | "version": "2.0.1",
1114 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1115 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1116 | "engines": {
1117 | "node": ">= 6"
1118 | }
1119 | },
1120 | "node_modules/caniuse-lite": {
1121 | "version": "1.0.30001712",
1122 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz",
1123 | "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==",
1124 | "funding": [
1125 | {
1126 | "type": "opencollective",
1127 | "url": "https://opencollective.com/browserslist"
1128 | },
1129 | {
1130 | "type": "tidelift",
1131 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1132 | },
1133 | {
1134 | "type": "github",
1135 | "url": "https://github.com/sponsors/ai"
1136 | }
1137 | ]
1138 | },
1139 | "node_modules/chokidar": {
1140 | "version": "3.6.0",
1141 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1142 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1143 | "dependencies": {
1144 | "anymatch": "~3.1.2",
1145 | "braces": "~3.0.2",
1146 | "glob-parent": "~5.1.2",
1147 | "is-binary-path": "~2.1.0",
1148 | "is-glob": "~4.0.1",
1149 | "normalize-path": "~3.0.0",
1150 | "readdirp": "~3.6.0"
1151 | },
1152 | "engines": {
1153 | "node": ">= 8.10.0"
1154 | },
1155 | "funding": {
1156 | "url": "https://paulmillr.com/funding/"
1157 | },
1158 | "optionalDependencies": {
1159 | "fsevents": "~2.3.2"
1160 | }
1161 | },
1162 | "node_modules/chokidar/node_modules/glob-parent": {
1163 | "version": "5.1.2",
1164 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1165 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1166 | "dependencies": {
1167 | "is-glob": "^4.0.1"
1168 | },
1169 | "engines": {
1170 | "node": ">= 6"
1171 | }
1172 | },
1173 | "node_modules/class-variance-authority": {
1174 | "version": "0.7.1",
1175 | "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
1176 | "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
1177 | "dependencies": {
1178 | "clsx": "^2.1.1"
1179 | },
1180 | "funding": {
1181 | "url": "https://polar.sh/cva"
1182 | }
1183 | },
1184 | "node_modules/client-only": {
1185 | "version": "0.0.1",
1186 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1187 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1188 | },
1189 | "node_modules/clsx": {
1190 | "version": "2.1.1",
1191 | "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
1192 | "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
1193 | "engines": {
1194 | "node": ">=6"
1195 | }
1196 | },
1197 | "node_modules/color-convert": {
1198 | "version": "2.0.1",
1199 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1200 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1201 | "dependencies": {
1202 | "color-name": "~1.1.4"
1203 | },
1204 | "engines": {
1205 | "node": ">=7.0.0"
1206 | }
1207 | },
1208 | "node_modules/color-name": {
1209 | "version": "1.1.4",
1210 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1211 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1212 | },
1213 | "node_modules/commander": {
1214 | "version": "4.1.1",
1215 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1216 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1217 | "engines": {
1218 | "node": ">= 6"
1219 | }
1220 | },
1221 | "node_modules/cross-spawn": {
1222 | "version": "7.0.6",
1223 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
1224 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
1225 | "dependencies": {
1226 | "path-key": "^3.1.0",
1227 | "shebang-command": "^2.0.0",
1228 | "which": "^2.0.1"
1229 | },
1230 | "engines": {
1231 | "node": ">= 8"
1232 | }
1233 | },
1234 | "node_modules/cssesc": {
1235 | "version": "3.0.0",
1236 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1237 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1238 | "bin": {
1239 | "cssesc": "bin/cssesc"
1240 | },
1241 | "engines": {
1242 | "node": ">=4"
1243 | }
1244 | },
1245 | "node_modules/csstype": {
1246 | "version": "3.1.3",
1247 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1248 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1249 | "devOptional": true
1250 | },
1251 | "node_modules/decimal.js": {
1252 | "version": "10.5.0",
1253 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
1254 | "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw=="
1255 | },
1256 | "node_modules/detect-node-es": {
1257 | "version": "1.1.0",
1258 | "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
1259 | "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
1260 | },
1261 | "node_modules/didyoumean": {
1262 | "version": "1.2.2",
1263 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1264 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
1265 | },
1266 | "node_modules/dlv": {
1267 | "version": "1.1.3",
1268 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1269 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
1270 | },
1271 | "node_modules/eastasianwidth": {
1272 | "version": "0.2.0",
1273 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1274 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
1275 | },
1276 | "node_modules/emoji-regex": {
1277 | "version": "9.2.2",
1278 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1279 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
1280 | },
1281 | "node_modules/fast-glob": {
1282 | "version": "3.3.3",
1283 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1284 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
1285 | "dependencies": {
1286 | "@nodelib/fs.stat": "^2.0.2",
1287 | "@nodelib/fs.walk": "^1.2.3",
1288 | "glob-parent": "^5.1.2",
1289 | "merge2": "^1.3.0",
1290 | "micromatch": "^4.0.8"
1291 | },
1292 | "engines": {
1293 | "node": ">=8.6.0"
1294 | }
1295 | },
1296 | "node_modules/fast-glob/node_modules/glob-parent": {
1297 | "version": "5.1.2",
1298 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1299 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1300 | "dependencies": {
1301 | "is-glob": "^4.0.1"
1302 | },
1303 | "engines": {
1304 | "node": ">= 6"
1305 | }
1306 | },
1307 | "node_modules/fastq": {
1308 | "version": "1.19.1",
1309 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
1310 | "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
1311 | "dependencies": {
1312 | "reusify": "^1.0.4"
1313 | }
1314 | },
1315 | "node_modules/fill-range": {
1316 | "version": "7.1.1",
1317 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1318 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1319 | "dependencies": {
1320 | "to-regex-range": "^5.0.1"
1321 | },
1322 | "engines": {
1323 | "node": ">=8"
1324 | }
1325 | },
1326 | "node_modules/foreground-child": {
1327 | "version": "3.3.1",
1328 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
1329 | "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
1330 | "dependencies": {
1331 | "cross-spawn": "^7.0.6",
1332 | "signal-exit": "^4.0.1"
1333 | },
1334 | "engines": {
1335 | "node": ">=14"
1336 | },
1337 | "funding": {
1338 | "url": "https://github.com/sponsors/isaacs"
1339 | }
1340 | },
1341 | "node_modules/framer-motion": {
1342 | "version": "12.6.3",
1343 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.6.3.tgz",
1344 | "integrity": "sha512-2hsqknz23aloK85bzMc9nSR2/JP+fValQ459ZTVElFQ0xgwR2YqNjYSuDZdFBPOwVCt4Q9jgyTt6hg6sVOALzw==",
1345 | "dependencies": {
1346 | "motion-dom": "^12.6.3",
1347 | "motion-utils": "^12.6.3",
1348 | "tslib": "^2.4.0"
1349 | },
1350 | "peerDependencies": {
1351 | "@emotion/is-prop-valid": "*",
1352 | "react": "^18.0.0 || ^19.0.0",
1353 | "react-dom": "^18.0.0 || ^19.0.0"
1354 | },
1355 | "peerDependenciesMeta": {
1356 | "@emotion/is-prop-valid": {
1357 | "optional": true
1358 | },
1359 | "react": {
1360 | "optional": true
1361 | },
1362 | "react-dom": {
1363 | "optional": true
1364 | }
1365 | }
1366 | },
1367 | "node_modules/fsevents": {
1368 | "version": "2.3.3",
1369 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1370 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1371 | "hasInstallScript": true,
1372 | "optional": true,
1373 | "os": [
1374 | "darwin"
1375 | ],
1376 | "engines": {
1377 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1378 | }
1379 | },
1380 | "node_modules/function-bind": {
1381 | "version": "1.1.2",
1382 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1383 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1384 | "funding": {
1385 | "url": "https://github.com/sponsors/ljharb"
1386 | }
1387 | },
1388 | "node_modules/get-nonce": {
1389 | "version": "1.0.1",
1390 | "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
1391 | "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
1392 | "engines": {
1393 | "node": ">=6"
1394 | }
1395 | },
1396 | "node_modules/glob": {
1397 | "version": "10.4.5",
1398 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1399 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1400 | "dependencies": {
1401 | "foreground-child": "^3.1.0",
1402 | "jackspeak": "^3.1.2",
1403 | "minimatch": "^9.0.4",
1404 | "minipass": "^7.1.2",
1405 | "package-json-from-dist": "^1.0.0",
1406 | "path-scurry": "^1.11.1"
1407 | },
1408 | "bin": {
1409 | "glob": "dist/esm/bin.mjs"
1410 | },
1411 | "funding": {
1412 | "url": "https://github.com/sponsors/isaacs"
1413 | }
1414 | },
1415 | "node_modules/glob-parent": {
1416 | "version": "6.0.2",
1417 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1418 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1419 | "dependencies": {
1420 | "is-glob": "^4.0.3"
1421 | },
1422 | "engines": {
1423 | "node": ">=10.13.0"
1424 | }
1425 | },
1426 | "node_modules/graceful-fs": {
1427 | "version": "4.2.11",
1428 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1429 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
1430 | },
1431 | "node_modules/hasown": {
1432 | "version": "2.0.2",
1433 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1434 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1435 | "dependencies": {
1436 | "function-bind": "^1.1.2"
1437 | },
1438 | "engines": {
1439 | "node": ">= 0.4"
1440 | }
1441 | },
1442 | "node_modules/intl-messageformat": {
1443 | "version": "10.7.16",
1444 | "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz",
1445 | "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==",
1446 | "dependencies": {
1447 | "@formatjs/ecma402-abstract": "2.3.4",
1448 | "@formatjs/fast-memoize": "2.2.7",
1449 | "@formatjs/icu-messageformat-parser": "2.11.2",
1450 | "tslib": "^2.8.0"
1451 | }
1452 | },
1453 | "node_modules/is-binary-path": {
1454 | "version": "2.1.0",
1455 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1456 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1457 | "dependencies": {
1458 | "binary-extensions": "^2.0.0"
1459 | },
1460 | "engines": {
1461 | "node": ">=8"
1462 | }
1463 | },
1464 | "node_modules/is-core-module": {
1465 | "version": "2.16.1",
1466 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
1467 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
1468 | "dependencies": {
1469 | "hasown": "^2.0.2"
1470 | },
1471 | "engines": {
1472 | "node": ">= 0.4"
1473 | },
1474 | "funding": {
1475 | "url": "https://github.com/sponsors/ljharb"
1476 | }
1477 | },
1478 | "node_modules/is-extglob": {
1479 | "version": "2.1.1",
1480 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1481 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1482 | "engines": {
1483 | "node": ">=0.10.0"
1484 | }
1485 | },
1486 | "node_modules/is-fullwidth-code-point": {
1487 | "version": "3.0.0",
1488 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1489 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1490 | "engines": {
1491 | "node": ">=8"
1492 | }
1493 | },
1494 | "node_modules/is-glob": {
1495 | "version": "4.0.3",
1496 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1497 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1498 | "dependencies": {
1499 | "is-extglob": "^2.1.1"
1500 | },
1501 | "engines": {
1502 | "node": ">=0.10.0"
1503 | }
1504 | },
1505 | "node_modules/is-number": {
1506 | "version": "7.0.0",
1507 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1508 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1509 | "engines": {
1510 | "node": ">=0.12.0"
1511 | }
1512 | },
1513 | "node_modules/isexe": {
1514 | "version": "2.0.0",
1515 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1516 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1517 | },
1518 | "node_modules/jackspeak": {
1519 | "version": "3.4.3",
1520 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1521 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
1522 | "dependencies": {
1523 | "@isaacs/cliui": "^8.0.2"
1524 | },
1525 | "funding": {
1526 | "url": "https://github.com/sponsors/isaacs"
1527 | },
1528 | "optionalDependencies": {
1529 | "@pkgjs/parseargs": "^0.11.0"
1530 | }
1531 | },
1532 | "node_modules/jiti": {
1533 | "version": "1.21.7",
1534 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
1535 | "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
1536 | "bin": {
1537 | "jiti": "bin/jiti.js"
1538 | }
1539 | },
1540 | "node_modules/js-tokens": {
1541 | "version": "4.0.0",
1542 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1543 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1544 | },
1545 | "node_modules/lilconfig": {
1546 | "version": "3.1.3",
1547 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
1548 | "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
1549 | "engines": {
1550 | "node": ">=14"
1551 | },
1552 | "funding": {
1553 | "url": "https://github.com/sponsors/antonk52"
1554 | }
1555 | },
1556 | "node_modules/lines-and-columns": {
1557 | "version": "1.2.4",
1558 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1559 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
1560 | },
1561 | "node_modules/lodash.castarray": {
1562 | "version": "4.4.0",
1563 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
1564 | "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==",
1565 | "dev": true
1566 | },
1567 | "node_modules/lodash.isplainobject": {
1568 | "version": "4.0.6",
1569 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
1570 | "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
1571 | "dev": true
1572 | },
1573 | "node_modules/lodash.merge": {
1574 | "version": "4.6.2",
1575 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
1576 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
1577 | "dev": true
1578 | },
1579 | "node_modules/loose-envify": {
1580 | "version": "1.4.0",
1581 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1582 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1583 | "dependencies": {
1584 | "js-tokens": "^3.0.0 || ^4.0.0"
1585 | },
1586 | "bin": {
1587 | "loose-envify": "cli.js"
1588 | }
1589 | },
1590 | "node_modules/lru-cache": {
1591 | "version": "10.4.3",
1592 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1593 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
1594 | },
1595 | "node_modules/lucide-react": {
1596 | "version": "0.487.0",
1597 | "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.487.0.tgz",
1598 | "integrity": "sha512-aKqhOQ+YmFnwq8dWgGjOuLc8V1R9/c/yOd+zDY4+ohsR2Jo05lSGc3WsstYPIzcTpeosN7LoCkLReUUITvaIvw==",
1599 | "peerDependencies": {
1600 | "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
1601 | }
1602 | },
1603 | "node_modules/merge2": {
1604 | "version": "1.4.1",
1605 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1606 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1607 | "engines": {
1608 | "node": ">= 8"
1609 | }
1610 | },
1611 | "node_modules/micromatch": {
1612 | "version": "4.0.8",
1613 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1614 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1615 | "dependencies": {
1616 | "braces": "^3.0.3",
1617 | "picomatch": "^2.3.1"
1618 | },
1619 | "engines": {
1620 | "node": ">=8.6"
1621 | }
1622 | },
1623 | "node_modules/minimatch": {
1624 | "version": "9.0.5",
1625 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
1626 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
1627 | "dependencies": {
1628 | "brace-expansion": "^2.0.1"
1629 | },
1630 | "engines": {
1631 | "node": ">=16 || 14 >=14.17"
1632 | },
1633 | "funding": {
1634 | "url": "https://github.com/sponsors/isaacs"
1635 | }
1636 | },
1637 | "node_modules/minipass": {
1638 | "version": "7.1.2",
1639 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1640 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1641 | "engines": {
1642 | "node": ">=16 || 14 >=14.17"
1643 | }
1644 | },
1645 | "node_modules/motion-dom": {
1646 | "version": "12.6.3",
1647 | "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.6.3.tgz",
1648 | "integrity": "sha512-gRY08RjcnzgFYLemUZ1lo/e9RkBxR+6d4BRvoeZDSeArG4XQXERSPapKl3LNQRu22Sndjf1h+iavgY0O4NrYqA==",
1649 | "dependencies": {
1650 | "motion-utils": "^12.6.3"
1651 | }
1652 | },
1653 | "node_modules/motion-utils": {
1654 | "version": "12.6.3",
1655 | "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.6.3.tgz",
1656 | "integrity": "sha512-R/b3Ia2VxtTNZ4LTEO5pKYau1OUNHOuUfxuP0WFCTDYdHkeTBR9UtxR1cc8mDmKr8PEhmmfnTKGz3rSMjNRoRg=="
1657 | },
1658 | "node_modules/mz": {
1659 | "version": "2.7.0",
1660 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1661 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1662 | "dependencies": {
1663 | "any-promise": "^1.0.0",
1664 | "object-assign": "^4.0.1",
1665 | "thenify-all": "^1.0.0"
1666 | }
1667 | },
1668 | "node_modules/nanoid": {
1669 | "version": "3.3.11",
1670 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
1671 | "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1672 | "funding": [
1673 | {
1674 | "type": "github",
1675 | "url": "https://github.com/sponsors/ai"
1676 | }
1677 | ],
1678 | "bin": {
1679 | "nanoid": "bin/nanoid.cjs"
1680 | },
1681 | "engines": {
1682 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1683 | }
1684 | },
1685 | "node_modules/negotiator": {
1686 | "version": "1.0.0",
1687 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
1688 | "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
1689 | "engines": {
1690 | "node": ">= 0.6"
1691 | }
1692 | },
1693 | "node_modules/next": {
1694 | "version": "14.2.28",
1695 | "resolved": "https://registry.npmjs.org/next/-/next-14.2.28.tgz",
1696 | "integrity": "sha512-QLEIP/kYXynIxtcKB6vNjtWLVs3Y4Sb+EClTC/CSVzdLD1gIuItccpu/n1lhmduffI32iPGEK2cLLxxt28qgYA==",
1697 | "dependencies": {
1698 | "@next/env": "14.2.28",
1699 | "@swc/helpers": "0.5.5",
1700 | "busboy": "1.6.0",
1701 | "caniuse-lite": "^1.0.30001579",
1702 | "graceful-fs": "^4.2.11",
1703 | "postcss": "8.4.31",
1704 | "styled-jsx": "5.1.1"
1705 | },
1706 | "bin": {
1707 | "next": "dist/bin/next"
1708 | },
1709 | "engines": {
1710 | "node": ">=18.17.0"
1711 | },
1712 | "optionalDependencies": {
1713 | "@next/swc-darwin-arm64": "14.2.28",
1714 | "@next/swc-darwin-x64": "14.2.28",
1715 | "@next/swc-linux-arm64-gnu": "14.2.28",
1716 | "@next/swc-linux-arm64-musl": "14.2.28",
1717 | "@next/swc-linux-x64-gnu": "14.2.28",
1718 | "@next/swc-linux-x64-musl": "14.2.28",
1719 | "@next/swc-win32-arm64-msvc": "14.2.28",
1720 | "@next/swc-win32-ia32-msvc": "14.2.28",
1721 | "@next/swc-win32-x64-msvc": "14.2.28"
1722 | },
1723 | "peerDependencies": {
1724 | "@opentelemetry/api": "^1.1.0",
1725 | "@playwright/test": "^1.41.2",
1726 | "react": "^18.2.0",
1727 | "react-dom": "^18.2.0",
1728 | "sass": "^1.3.0"
1729 | },
1730 | "peerDependenciesMeta": {
1731 | "@opentelemetry/api": {
1732 | "optional": true
1733 | },
1734 | "@playwright/test": {
1735 | "optional": true
1736 | },
1737 | "sass": {
1738 | "optional": true
1739 | }
1740 | }
1741 | },
1742 | "node_modules/next-intl": {
1743 | "version": "4.0.2",
1744 | "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.0.2.tgz",
1745 | "integrity": "sha512-3cKVflwdrqxCOvAL+DtGN68qR802i0PEj0dttkAD5IK5XxOjugQs4yU8aSakvPMbkOrhEJ+89z5lG2EAqi7Gkw==",
1746 | "funding": [
1747 | {
1748 | "type": "individual",
1749 | "url": "https://github.com/sponsors/amannn"
1750 | }
1751 | ],
1752 | "dependencies": {
1753 | "@formatjs/intl-localematcher": "^0.5.4",
1754 | "negotiator": "^1.0.0",
1755 | "use-intl": "^4.0.2"
1756 | },
1757 | "peerDependencies": {
1758 | "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0",
1759 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0",
1760 | "typescript": "^5.0.0"
1761 | },
1762 | "peerDependenciesMeta": {
1763 | "typescript": {
1764 | "optional": true
1765 | }
1766 | }
1767 | },
1768 | "node_modules/next-navigation": {
1769 | "version": "1.0.6",
1770 | "resolved": "https://registry.npmjs.org/next-navigation/-/next-navigation-1.0.6.tgz",
1771 | "integrity": "sha512-D4JXnngfeDFA+zsIWFcl8tr/rnCOXEUgJElfQ6zdcpHuNgR4peHKsk+FE1AGykEufKC7xgwv9oOSGK16c1VGiQ==",
1772 | "dependencies": {
1773 | "react": "^16.2.0"
1774 | }
1775 | },
1776 | "node_modules/next-navigation/node_modules/react": {
1777 | "version": "16.14.0",
1778 | "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
1779 | "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
1780 | "dependencies": {
1781 | "loose-envify": "^1.1.0",
1782 | "object-assign": "^4.1.1",
1783 | "prop-types": "^15.6.2"
1784 | },
1785 | "engines": {
1786 | "node": ">=0.10.0"
1787 | }
1788 | },
1789 | "node_modules/next-themes": {
1790 | "version": "0.4.6",
1791 | "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
1792 | "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
1793 | "peerDependencies": {
1794 | "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
1795 | "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
1796 | }
1797 | },
1798 | "node_modules/next/node_modules/postcss": {
1799 | "version": "8.4.31",
1800 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1801 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1802 | "funding": [
1803 | {
1804 | "type": "opencollective",
1805 | "url": "https://opencollective.com/postcss/"
1806 | },
1807 | {
1808 | "type": "tidelift",
1809 | "url": "https://tidelift.com/funding/github/npm/postcss"
1810 | },
1811 | {
1812 | "type": "github",
1813 | "url": "https://github.com/sponsors/ai"
1814 | }
1815 | ],
1816 | "dependencies": {
1817 | "nanoid": "^3.3.6",
1818 | "picocolors": "^1.0.0",
1819 | "source-map-js": "^1.0.2"
1820 | },
1821 | "engines": {
1822 | "node": "^10 || ^12 || >=14"
1823 | }
1824 | },
1825 | "node_modules/normalize-path": {
1826 | "version": "3.0.0",
1827 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1828 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1829 | "engines": {
1830 | "node": ">=0.10.0"
1831 | }
1832 | },
1833 | "node_modules/object-assign": {
1834 | "version": "4.1.1",
1835 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1836 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1837 | "engines": {
1838 | "node": ">=0.10.0"
1839 | }
1840 | },
1841 | "node_modules/object-hash": {
1842 | "version": "3.0.0",
1843 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1844 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1845 | "engines": {
1846 | "node": ">= 6"
1847 | }
1848 | },
1849 | "node_modules/package-json-from-dist": {
1850 | "version": "1.0.1",
1851 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1852 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
1853 | },
1854 | "node_modules/path-key": {
1855 | "version": "3.1.1",
1856 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1857 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1858 | "engines": {
1859 | "node": ">=8"
1860 | }
1861 | },
1862 | "node_modules/path-parse": {
1863 | "version": "1.0.7",
1864 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1865 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
1866 | },
1867 | "node_modules/path-scurry": {
1868 | "version": "1.11.1",
1869 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
1870 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
1871 | "dependencies": {
1872 | "lru-cache": "^10.2.0",
1873 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
1874 | },
1875 | "engines": {
1876 | "node": ">=16 || 14 >=14.18"
1877 | },
1878 | "funding": {
1879 | "url": "https://github.com/sponsors/isaacs"
1880 | }
1881 | },
1882 | "node_modules/picocolors": {
1883 | "version": "1.1.1",
1884 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1885 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
1886 | },
1887 | "node_modules/picomatch": {
1888 | "version": "2.3.1",
1889 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1890 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1891 | "engines": {
1892 | "node": ">=8.6"
1893 | },
1894 | "funding": {
1895 | "url": "https://github.com/sponsors/jonschlinkert"
1896 | }
1897 | },
1898 | "node_modules/pify": {
1899 | "version": "2.3.0",
1900 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1901 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1902 | "engines": {
1903 | "node": ">=0.10.0"
1904 | }
1905 | },
1906 | "node_modules/pirates": {
1907 | "version": "4.0.7",
1908 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
1909 | "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
1910 | "engines": {
1911 | "node": ">= 6"
1912 | }
1913 | },
1914 | "node_modules/postcss": {
1915 | "version": "8.5.3",
1916 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
1917 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
1918 | "funding": [
1919 | {
1920 | "type": "opencollective",
1921 | "url": "https://opencollective.com/postcss/"
1922 | },
1923 | {
1924 | "type": "tidelift",
1925 | "url": "https://tidelift.com/funding/github/npm/postcss"
1926 | },
1927 | {
1928 | "type": "github",
1929 | "url": "https://github.com/sponsors/ai"
1930 | }
1931 | ],
1932 | "dependencies": {
1933 | "nanoid": "^3.3.8",
1934 | "picocolors": "^1.1.1",
1935 | "source-map-js": "^1.2.1"
1936 | },
1937 | "engines": {
1938 | "node": "^10 || ^12 || >=14"
1939 | }
1940 | },
1941 | "node_modules/postcss-import": {
1942 | "version": "15.1.0",
1943 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
1944 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
1945 | "dependencies": {
1946 | "postcss-value-parser": "^4.0.0",
1947 | "read-cache": "^1.0.0",
1948 | "resolve": "^1.1.7"
1949 | },
1950 | "engines": {
1951 | "node": ">=14.0.0"
1952 | },
1953 | "peerDependencies": {
1954 | "postcss": "^8.0.0"
1955 | }
1956 | },
1957 | "node_modules/postcss-js": {
1958 | "version": "4.0.1",
1959 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
1960 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
1961 | "dependencies": {
1962 | "camelcase-css": "^2.0.1"
1963 | },
1964 | "engines": {
1965 | "node": "^12 || ^14 || >= 16"
1966 | },
1967 | "funding": {
1968 | "type": "opencollective",
1969 | "url": "https://opencollective.com/postcss/"
1970 | },
1971 | "peerDependencies": {
1972 | "postcss": "^8.4.21"
1973 | }
1974 | },
1975 | "node_modules/postcss-load-config": {
1976 | "version": "4.0.2",
1977 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
1978 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
1979 | "funding": [
1980 | {
1981 | "type": "opencollective",
1982 | "url": "https://opencollective.com/postcss/"
1983 | },
1984 | {
1985 | "type": "github",
1986 | "url": "https://github.com/sponsors/ai"
1987 | }
1988 | ],
1989 | "dependencies": {
1990 | "lilconfig": "^3.0.0",
1991 | "yaml": "^2.3.4"
1992 | },
1993 | "engines": {
1994 | "node": ">= 14"
1995 | },
1996 | "peerDependencies": {
1997 | "postcss": ">=8.0.9",
1998 | "ts-node": ">=9.0.0"
1999 | },
2000 | "peerDependenciesMeta": {
2001 | "postcss": {
2002 | "optional": true
2003 | },
2004 | "ts-node": {
2005 | "optional": true
2006 | }
2007 | }
2008 | },
2009 | "node_modules/postcss-nested": {
2010 | "version": "6.2.0",
2011 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
2012 | "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
2013 | "funding": [
2014 | {
2015 | "type": "opencollective",
2016 | "url": "https://opencollective.com/postcss/"
2017 | },
2018 | {
2019 | "type": "github",
2020 | "url": "https://github.com/sponsors/ai"
2021 | }
2022 | ],
2023 | "dependencies": {
2024 | "postcss-selector-parser": "^6.1.1"
2025 | },
2026 | "engines": {
2027 | "node": ">=12.0"
2028 | },
2029 | "peerDependencies": {
2030 | "postcss": "^8.2.14"
2031 | }
2032 | },
2033 | "node_modules/postcss-selector-parser": {
2034 | "version": "6.1.2",
2035 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
2036 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
2037 | "dependencies": {
2038 | "cssesc": "^3.0.0",
2039 | "util-deprecate": "^1.0.2"
2040 | },
2041 | "engines": {
2042 | "node": ">=4"
2043 | }
2044 | },
2045 | "node_modules/postcss-value-parser": {
2046 | "version": "4.2.0",
2047 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2048 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
2049 | },
2050 | "node_modules/prop-types": {
2051 | "version": "15.8.1",
2052 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
2053 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
2054 | "dependencies": {
2055 | "loose-envify": "^1.4.0",
2056 | "object-assign": "^4.1.1",
2057 | "react-is": "^16.13.1"
2058 | }
2059 | },
2060 | "node_modules/queue-microtask": {
2061 | "version": "1.2.3",
2062 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2063 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2064 | "funding": [
2065 | {
2066 | "type": "github",
2067 | "url": "https://github.com/sponsors/feross"
2068 | },
2069 | {
2070 | "type": "patreon",
2071 | "url": "https://www.patreon.com/feross"
2072 | },
2073 | {
2074 | "type": "consulting",
2075 | "url": "https://feross.org/support"
2076 | }
2077 | ]
2078 | },
2079 | "node_modules/react": {
2080 | "version": "18.3.1",
2081 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
2082 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
2083 | "dependencies": {
2084 | "loose-envify": "^1.1.0"
2085 | },
2086 | "engines": {
2087 | "node": ">=0.10.0"
2088 | }
2089 | },
2090 | "node_modules/react-dom": {
2091 | "version": "18.3.1",
2092 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
2093 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
2094 | "dependencies": {
2095 | "loose-envify": "^1.1.0",
2096 | "scheduler": "^0.23.2"
2097 | },
2098 | "peerDependencies": {
2099 | "react": "^18.3.1"
2100 | }
2101 | },
2102 | "node_modules/react-hook-form": {
2103 | "version": "7.55.0",
2104 | "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.55.0.tgz",
2105 | "integrity": "sha512-XRnjsH3GVMQz1moZTW53MxfoWN7aDpUg/GpVNc4A3eXRVNdGXfbzJ4vM4aLQ8g6XCUh1nIbx70aaNCl7kxnjog==",
2106 | "engines": {
2107 | "node": ">=18.0.0"
2108 | },
2109 | "funding": {
2110 | "type": "opencollective",
2111 | "url": "https://opencollective.com/react-hook-form"
2112 | },
2113 | "peerDependencies": {
2114 | "react": "^16.8.0 || ^17 || ^18 || ^19"
2115 | }
2116 | },
2117 | "node_modules/react-is": {
2118 | "version": "16.13.1",
2119 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
2120 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
2121 | },
2122 | "node_modules/react-remove-scroll": {
2123 | "version": "2.6.3",
2124 | "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz",
2125 | "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==",
2126 | "dependencies": {
2127 | "react-remove-scroll-bar": "^2.3.7",
2128 | "react-style-singleton": "^2.2.3",
2129 | "tslib": "^2.1.0",
2130 | "use-callback-ref": "^1.3.3",
2131 | "use-sidecar": "^1.1.3"
2132 | },
2133 | "engines": {
2134 | "node": ">=10"
2135 | },
2136 | "peerDependencies": {
2137 | "@types/react": "*",
2138 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
2139 | },
2140 | "peerDependenciesMeta": {
2141 | "@types/react": {
2142 | "optional": true
2143 | }
2144 | }
2145 | },
2146 | "node_modules/react-remove-scroll-bar": {
2147 | "version": "2.3.8",
2148 | "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
2149 | "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
2150 | "dependencies": {
2151 | "react-style-singleton": "^2.2.2",
2152 | "tslib": "^2.0.0"
2153 | },
2154 | "engines": {
2155 | "node": ">=10"
2156 | },
2157 | "peerDependencies": {
2158 | "@types/react": "*",
2159 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2160 | },
2161 | "peerDependenciesMeta": {
2162 | "@types/react": {
2163 | "optional": true
2164 | }
2165 | }
2166 | },
2167 | "node_modules/react-style-singleton": {
2168 | "version": "2.2.3",
2169 | "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
2170 | "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
2171 | "dependencies": {
2172 | "get-nonce": "^1.0.0",
2173 | "tslib": "^2.0.0"
2174 | },
2175 | "engines": {
2176 | "node": ">=10"
2177 | },
2178 | "peerDependencies": {
2179 | "@types/react": "*",
2180 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
2181 | },
2182 | "peerDependenciesMeta": {
2183 | "@types/react": {
2184 | "optional": true
2185 | }
2186 | }
2187 | },
2188 | "node_modules/read-cache": {
2189 | "version": "1.0.0",
2190 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2191 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2192 | "dependencies": {
2193 | "pify": "^2.3.0"
2194 | }
2195 | },
2196 | "node_modules/readdirp": {
2197 | "version": "3.6.0",
2198 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2199 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2200 | "dependencies": {
2201 | "picomatch": "^2.2.1"
2202 | },
2203 | "engines": {
2204 | "node": ">=8.10.0"
2205 | }
2206 | },
2207 | "node_modules/resolve": {
2208 | "version": "1.22.10",
2209 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
2210 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
2211 | "dependencies": {
2212 | "is-core-module": "^2.16.0",
2213 | "path-parse": "^1.0.7",
2214 | "supports-preserve-symlinks-flag": "^1.0.0"
2215 | },
2216 | "bin": {
2217 | "resolve": "bin/resolve"
2218 | },
2219 | "engines": {
2220 | "node": ">= 0.4"
2221 | },
2222 | "funding": {
2223 | "url": "https://github.com/sponsors/ljharb"
2224 | }
2225 | },
2226 | "node_modules/reusify": {
2227 | "version": "1.1.0",
2228 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
2229 | "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
2230 | "engines": {
2231 | "iojs": ">=1.0.0",
2232 | "node": ">=0.10.0"
2233 | }
2234 | },
2235 | "node_modules/run-parallel": {
2236 | "version": "1.2.0",
2237 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2238 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2239 | "funding": [
2240 | {
2241 | "type": "github",
2242 | "url": "https://github.com/sponsors/feross"
2243 | },
2244 | {
2245 | "type": "patreon",
2246 | "url": "https://www.patreon.com/feross"
2247 | },
2248 | {
2249 | "type": "consulting",
2250 | "url": "https://feross.org/support"
2251 | }
2252 | ],
2253 | "dependencies": {
2254 | "queue-microtask": "^1.2.2"
2255 | }
2256 | },
2257 | "node_modules/scheduler": {
2258 | "version": "0.23.2",
2259 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
2260 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
2261 | "dependencies": {
2262 | "loose-envify": "^1.1.0"
2263 | }
2264 | },
2265 | "node_modules/shebang-command": {
2266 | "version": "2.0.0",
2267 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2268 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2269 | "dependencies": {
2270 | "shebang-regex": "^3.0.0"
2271 | },
2272 | "engines": {
2273 | "node": ">=8"
2274 | }
2275 | },
2276 | "node_modules/shebang-regex": {
2277 | "version": "3.0.0",
2278 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2279 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2280 | "engines": {
2281 | "node": ">=8"
2282 | }
2283 | },
2284 | "node_modules/signal-exit": {
2285 | "version": "4.1.0",
2286 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2287 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2288 | "engines": {
2289 | "node": ">=14"
2290 | },
2291 | "funding": {
2292 | "url": "https://github.com/sponsors/isaacs"
2293 | }
2294 | },
2295 | "node_modules/source-map-js": {
2296 | "version": "1.2.1",
2297 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2298 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2299 | "engines": {
2300 | "node": ">=0.10.0"
2301 | }
2302 | },
2303 | "node_modules/streamsearch": {
2304 | "version": "1.1.0",
2305 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
2306 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
2307 | "engines": {
2308 | "node": ">=10.0.0"
2309 | }
2310 | },
2311 | "node_modules/string-width": {
2312 | "version": "5.1.2",
2313 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2314 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2315 | "dependencies": {
2316 | "eastasianwidth": "^0.2.0",
2317 | "emoji-regex": "^9.2.2",
2318 | "strip-ansi": "^7.0.1"
2319 | },
2320 | "engines": {
2321 | "node": ">=12"
2322 | },
2323 | "funding": {
2324 | "url": "https://github.com/sponsors/sindresorhus"
2325 | }
2326 | },
2327 | "node_modules/string-width-cjs": {
2328 | "name": "string-width",
2329 | "version": "4.2.3",
2330 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2331 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2332 | "dependencies": {
2333 | "emoji-regex": "^8.0.0",
2334 | "is-fullwidth-code-point": "^3.0.0",
2335 | "strip-ansi": "^6.0.1"
2336 | },
2337 | "engines": {
2338 | "node": ">=8"
2339 | }
2340 | },
2341 | "node_modules/string-width-cjs/node_modules/ansi-regex": {
2342 | "version": "5.0.1",
2343 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2344 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2345 | "engines": {
2346 | "node": ">=8"
2347 | }
2348 | },
2349 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
2350 | "version": "8.0.0",
2351 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2352 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2353 | },
2354 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
2355 | "version": "6.0.1",
2356 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2357 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2358 | "dependencies": {
2359 | "ansi-regex": "^5.0.1"
2360 | },
2361 | "engines": {
2362 | "node": ">=8"
2363 | }
2364 | },
2365 | "node_modules/strip-ansi": {
2366 | "version": "7.1.0",
2367 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
2368 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
2369 | "dependencies": {
2370 | "ansi-regex": "^6.0.1"
2371 | },
2372 | "engines": {
2373 | "node": ">=12"
2374 | },
2375 | "funding": {
2376 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
2377 | }
2378 | },
2379 | "node_modules/strip-ansi-cjs": {
2380 | "name": "strip-ansi",
2381 | "version": "6.0.1",
2382 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2383 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2384 | "dependencies": {
2385 | "ansi-regex": "^5.0.1"
2386 | },
2387 | "engines": {
2388 | "node": ">=8"
2389 | }
2390 | },
2391 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2392 | "version": "5.0.1",
2393 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2394 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2395 | "engines": {
2396 | "node": ">=8"
2397 | }
2398 | },
2399 | "node_modules/styled-jsx": {
2400 | "version": "5.1.1",
2401 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
2402 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
2403 | "dependencies": {
2404 | "client-only": "0.0.1"
2405 | },
2406 | "engines": {
2407 | "node": ">= 12.0.0"
2408 | },
2409 | "peerDependencies": {
2410 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
2411 | },
2412 | "peerDependenciesMeta": {
2413 | "@babel/core": {
2414 | "optional": true
2415 | },
2416 | "babel-plugin-macros": {
2417 | "optional": true
2418 | }
2419 | }
2420 | },
2421 | "node_modules/sucrase": {
2422 | "version": "3.35.0",
2423 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
2424 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
2425 | "dependencies": {
2426 | "@jridgewell/gen-mapping": "^0.3.2",
2427 | "commander": "^4.0.0",
2428 | "glob": "^10.3.10",
2429 | "lines-and-columns": "^1.1.6",
2430 | "mz": "^2.7.0",
2431 | "pirates": "^4.0.1",
2432 | "ts-interface-checker": "^0.1.9"
2433 | },
2434 | "bin": {
2435 | "sucrase": "bin/sucrase",
2436 | "sucrase-node": "bin/sucrase-node"
2437 | },
2438 | "engines": {
2439 | "node": ">=16 || 14 >=14.17"
2440 | }
2441 | },
2442 | "node_modules/supports-preserve-symlinks-flag": {
2443 | "version": "1.0.0",
2444 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2445 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2446 | "engines": {
2447 | "node": ">= 0.4"
2448 | },
2449 | "funding": {
2450 | "url": "https://github.com/sponsors/ljharb"
2451 | }
2452 | },
2453 | "node_modules/tailwind-merge": {
2454 | "version": "3.2.0",
2455 | "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.2.0.tgz",
2456 | "integrity": "sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==",
2457 | "funding": {
2458 | "type": "github",
2459 | "url": "https://github.com/sponsors/dcastil"
2460 | }
2461 | },
2462 | "node_modules/tailwindcss": {
2463 | "version": "3.4.17",
2464 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
2465 | "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
2466 | "dependencies": {
2467 | "@alloc/quick-lru": "^5.2.0",
2468 | "arg": "^5.0.2",
2469 | "chokidar": "^3.6.0",
2470 | "didyoumean": "^1.2.2",
2471 | "dlv": "^1.1.3",
2472 | "fast-glob": "^3.3.2",
2473 | "glob-parent": "^6.0.2",
2474 | "is-glob": "^4.0.3",
2475 | "jiti": "^1.21.6",
2476 | "lilconfig": "^3.1.3",
2477 | "micromatch": "^4.0.8",
2478 | "normalize-path": "^3.0.0",
2479 | "object-hash": "^3.0.0",
2480 | "picocolors": "^1.1.1",
2481 | "postcss": "^8.4.47",
2482 | "postcss-import": "^15.1.0",
2483 | "postcss-js": "^4.0.1",
2484 | "postcss-load-config": "^4.0.2",
2485 | "postcss-nested": "^6.2.0",
2486 | "postcss-selector-parser": "^6.1.2",
2487 | "resolve": "^1.22.8",
2488 | "sucrase": "^3.35.0"
2489 | },
2490 | "bin": {
2491 | "tailwind": "lib/cli.js",
2492 | "tailwindcss": "lib/cli.js"
2493 | },
2494 | "engines": {
2495 | "node": ">=14.0.0"
2496 | }
2497 | },
2498 | "node_modules/tailwindcss-animate": {
2499 | "version": "1.0.7",
2500 | "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
2501 | "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
2502 | "peerDependencies": {
2503 | "tailwindcss": ">=3.0.0 || insiders"
2504 | }
2505 | },
2506 | "node_modules/thenify": {
2507 | "version": "3.3.1",
2508 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2509 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2510 | "dependencies": {
2511 | "any-promise": "^1.0.0"
2512 | }
2513 | },
2514 | "node_modules/thenify-all": {
2515 | "version": "1.6.0",
2516 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2517 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2518 | "dependencies": {
2519 | "thenify": ">= 3.1.0 < 4"
2520 | },
2521 | "engines": {
2522 | "node": ">=0.8"
2523 | }
2524 | },
2525 | "node_modules/to-regex-range": {
2526 | "version": "5.0.1",
2527 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2528 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2529 | "dependencies": {
2530 | "is-number": "^7.0.0"
2531 | },
2532 | "engines": {
2533 | "node": ">=8.0"
2534 | }
2535 | },
2536 | "node_modules/ts-interface-checker": {
2537 | "version": "0.1.13",
2538 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2539 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
2540 | },
2541 | "node_modules/tslib": {
2542 | "version": "2.8.1",
2543 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2544 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
2545 | },
2546 | "node_modules/typescript": {
2547 | "version": "5.8.3",
2548 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
2549 | "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
2550 | "devOptional": true,
2551 | "bin": {
2552 | "tsc": "bin/tsc",
2553 | "tsserver": "bin/tsserver"
2554 | },
2555 | "engines": {
2556 | "node": ">=14.17"
2557 | }
2558 | },
2559 | "node_modules/undici-types": {
2560 | "version": "6.19.8",
2561 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
2562 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
2563 | "dev": true
2564 | },
2565 | "node_modules/use-callback-ref": {
2566 | "version": "1.3.3",
2567 | "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
2568 | "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
2569 | "dependencies": {
2570 | "tslib": "^2.0.0"
2571 | },
2572 | "engines": {
2573 | "node": ">=10"
2574 | },
2575 | "peerDependencies": {
2576 | "@types/react": "*",
2577 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
2578 | },
2579 | "peerDependenciesMeta": {
2580 | "@types/react": {
2581 | "optional": true
2582 | }
2583 | }
2584 | },
2585 | "node_modules/use-intl": {
2586 | "version": "4.0.2",
2587 | "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.0.2.tgz",
2588 | "integrity": "sha512-6RAP/5KJMRzLMLS25/BVh2u09cRK8S6HRGc1RnZvqR547qAKZCpjYylOqMPU9eNIirAiKoGmsoUPa7JrlaA/yg==",
2589 | "dependencies": {
2590 | "@formatjs/fast-memoize": "^2.2.0",
2591 | "@schummar/icu-type-parser": "1.21.5",
2592 | "intl-messageformat": "^10.5.14"
2593 | },
2594 | "peerDependencies": {
2595 | "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
2596 | }
2597 | },
2598 | "node_modules/use-sidecar": {
2599 | "version": "1.1.3",
2600 | "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
2601 | "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
2602 | "dependencies": {
2603 | "detect-node-es": "^1.1.0",
2604 | "tslib": "^2.0.0"
2605 | },
2606 | "engines": {
2607 | "node": ">=10"
2608 | },
2609 | "peerDependencies": {
2610 | "@types/react": "*",
2611 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
2612 | },
2613 | "peerDependenciesMeta": {
2614 | "@types/react": {
2615 | "optional": true
2616 | }
2617 | }
2618 | },
2619 | "node_modules/util-deprecate": {
2620 | "version": "1.0.2",
2621 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2622 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
2623 | },
2624 | "node_modules/which": {
2625 | "version": "2.0.2",
2626 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2627 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2628 | "dependencies": {
2629 | "isexe": "^2.0.0"
2630 | },
2631 | "bin": {
2632 | "node-which": "bin/node-which"
2633 | },
2634 | "engines": {
2635 | "node": ">= 8"
2636 | }
2637 | },
2638 | "node_modules/wrap-ansi": {
2639 | "version": "8.1.0",
2640 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2641 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2642 | "dependencies": {
2643 | "ansi-styles": "^6.1.0",
2644 | "string-width": "^5.0.1",
2645 | "strip-ansi": "^7.0.1"
2646 | },
2647 | "engines": {
2648 | "node": ">=12"
2649 | },
2650 | "funding": {
2651 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2652 | }
2653 | },
2654 | "node_modules/wrap-ansi-cjs": {
2655 | "name": "wrap-ansi",
2656 | "version": "7.0.0",
2657 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2658 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2659 | "dependencies": {
2660 | "ansi-styles": "^4.0.0",
2661 | "string-width": "^4.1.0",
2662 | "strip-ansi": "^6.0.0"
2663 | },
2664 | "engines": {
2665 | "node": ">=10"
2666 | },
2667 | "funding": {
2668 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2669 | }
2670 | },
2671 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
2672 | "version": "5.0.1",
2673 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2674 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2675 | "engines": {
2676 | "node": ">=8"
2677 | }
2678 | },
2679 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
2680 | "version": "4.3.0",
2681 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2682 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2683 | "dependencies": {
2684 | "color-convert": "^2.0.1"
2685 | },
2686 | "engines": {
2687 | "node": ">=8"
2688 | },
2689 | "funding": {
2690 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2691 | }
2692 | },
2693 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2694 | "version": "8.0.0",
2695 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2696 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2697 | },
2698 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2699 | "version": "4.2.3",
2700 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2701 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2702 | "dependencies": {
2703 | "emoji-regex": "^8.0.0",
2704 | "is-fullwidth-code-point": "^3.0.0",
2705 | "strip-ansi": "^6.0.1"
2706 | },
2707 | "engines": {
2708 | "node": ">=8"
2709 | }
2710 | },
2711 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2712 | "version": "6.0.1",
2713 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2714 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2715 | "dependencies": {
2716 | "ansi-regex": "^5.0.1"
2717 | },
2718 | "engines": {
2719 | "node": ">=8"
2720 | }
2721 | },
2722 | "node_modules/yaml": {
2723 | "version": "2.7.1",
2724 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
2725 | "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
2726 | "bin": {
2727 | "yaml": "bin.mjs"
2728 | },
2729 | "engines": {
2730 | "node": ">= 14"
2731 | }
2732 | },
2733 | "node_modules/zod": {
2734 | "version": "3.24.2",
2735 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz",
2736 | "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==",
2737 | "funding": {
2738 | "url": "https://github.com/sponsors/colinhacks"
2739 | }
2740 | },
2741 | "node_modules/zustand": {
2742 | "version": "5.0.3",
2743 | "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.3.tgz",
2744 | "integrity": "sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==",
2745 | "engines": {
2746 | "node": ">=12.20.0"
2747 | },
2748 | "peerDependencies": {
2749 | "@types/react": ">=18.0.0",
2750 | "immer": ">=9.0.6",
2751 | "react": ">=18.0.0",
2752 | "use-sync-external-store": ">=1.2.0"
2753 | },
2754 | "peerDependenciesMeta": {
2755 | "@types/react": {
2756 | "optional": true
2757 | },
2758 | "immer": {
2759 | "optional": true
2760 | },
2761 | "react": {
2762 | "optional": true
2763 | },
2764 | "use-sync-external-store": {
2765 | "optional": true
2766 | }
2767 | }
2768 | }
2769 | }
2770 | }
2771 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev -p 3000",
7 | "build": "next build",
8 | "start": "next start -p 3000",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@hookform/resolvers": "^5.0.1",
13 | "@radix-ui/react-select": "^2.1.7",
14 | "@radix-ui/react-slot": "^1.2.0",
15 | "@radix-ui/react-tabs": "^1.1.4",
16 | "class-variance-authority": "^0.7.1",
17 | "clsx": "^2.1.1",
18 | "framer-motion": "^12.6.3",
19 | "lucide-react": "^0.487.0",
20 | "next": "14.2.28",
21 | "next-intl": "^4.0.2",
22 | "next-navigation": "^1.0.6",
23 | "next-themes": "^0.4.6",
24 | "react": "^18",
25 | "react-dom": "^18",
26 | "react-hook-form": "^7.55.0",
27 | "tailwind-merge": "^3.2.0",
28 | "tailwindcss-animate": "^1.0.7",
29 | "zod": "^3.24.2",
30 | "zustand": "^5.0.3"
31 | },
32 | "devDependencies": {
33 | "@tailwindcss/typography": "^0.5.16",
34 | "@types/node": "^20",
35 | "@types/react": "^18",
36 | "@types/react-dom": "^18",
37 | "postcss": "^8",
38 | "tailwindcss": "^3.4.1",
39 | "typescript": "^5"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('postcss-load-config').Config} */
2 | const config = {
3 | plugins: {
4 | tailwindcss: {},
5 | },
6 | };
7 |
8 | export default config;
9 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 |
3 | const config: Config = {
4 | darkMode: ['class'],
5 | content: [
6 | './pages/**/*.{js,ts,jsx,tsx,mdx}',
7 | './components/**/*.{js,ts,jsx,tsx,mdx}',
8 | './app/**/*.{js,ts,jsx,tsx,mdx}'
9 | ],
10 | theme: {
11 | container: {
12 | center: true,
13 | padding: '2rem',
14 | screens: {
15 | '2xl': '1400px'
16 | }
17 | },
18 | extend: {
19 | colors: {
20 | background: 'hsl(var(--background))',
21 | foreground: 'hsl(var(--foreground))',
22 | card: {
23 | DEFAULT: 'hsl(var(--card))',
24 | foreground: 'hsl(var(--card-foreground))'
25 | },
26 | popover: {
27 | DEFAULT: 'hsl(var(--popover))',
28 | foreground: 'hsl(var(--popover-foreground))'
29 | },
30 | primary: {
31 | DEFAULT: 'hsl(var(--primary))',
32 | foreground: 'hsl(var(--primary-foreground))'
33 | },
34 | secondary: {
35 | DEFAULT: 'hsl(var(--secondary))',
36 | foreground: 'hsl(var(--secondary-foreground))'
37 | },
38 | muted: {
39 | DEFAULT: 'hsl(var(--muted))',
40 | foreground: 'hsl(var(--muted-foreground))'
41 | },
42 | accent: {
43 | DEFAULT: 'hsl(var(--accent))',
44 | foreground: 'hsl(var(--accent-foreground))'
45 | },
46 | destructive: {
47 | DEFAULT: 'hsl(var(--destructive))',
48 | foreground: 'hsl(var(--destructive-foreground))'
49 | },
50 | border: 'hsl(var(--border))',
51 | input: 'hsl(var(--input))',
52 | ring: 'hsl(var(--ring))',
53 | chart: {
54 | '1': 'hsl(var(--chart-1))',
55 | '2': 'hsl(var(--chart-2))',
56 | '3': 'hsl(var(--chart-3))',
57 | '4': 'hsl(var(--chart-4))',
58 | '5': 'hsl(var(--chart-5))'
59 | }
60 | },
61 | borderRadius: {
62 | lg: 'var(--radius)',
63 | md: 'calc(var(--radius) - 2px)',
64 | sm: 'calc(var(--radius) - 4px)'
65 | },
66 | typography: {
67 | DEFAULT: {
68 | css: {
69 | maxWidth: 'none',
70 | color: 'inherit',
71 | a: {
72 | color: 'inherit',
73 | textDecoration: 'none'
74 | },
75 | code: {
76 | color: 'inherit',
77 | background: 'transparent'
78 | },
79 | pre: {
80 | color: 'inherit',
81 | background: 'transparent'
82 | }
83 | }
84 | }
85 | }
86 | }
87 | },
88 | plugins: [require('tailwindcss-animate'), require('@tailwindcss/typography')]
89 | }
90 | export default config
91 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "lib": ["dom", "dom.iterable", "esnext"],
4 | "allowJs": true,
5 | "skipLibCheck": true,
6 | "strict": true,
7 | "noEmit": true,
8 | "esModuleInterop": true,
9 | "module": "esnext",
10 | "moduleResolution": "bundler",
11 | "resolveJsonModule": true,
12 | "isolatedModules": true,
13 | "jsx": "preserve",
14 | "incremental": true,
15 | "plugins": [
16 | {
17 | "name": "next"
18 | }
19 | ],
20 | "paths": {
21 | "@/*": ["./*"]
22 | }
23 | },
24 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
25 | "exclude": ["node_modules"]
26 | }
27 |
--------------------------------------------------------------------------------