ChandimaPrabath commited on
Commit
21986a1
·
1 Parent(s): 06ef392

nextjs init

Browse files
frontend/README.md ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2
+
3
+ ## Getting Started
4
+
5
+ First, run the development server:
6
+
7
+ ```bash
8
+ npm run dev
9
+ # or
10
+ yarn dev
11
+ # or
12
+ pnpm dev
13
+ # or
14
+ bun dev
15
+ ```
16
+
17
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
+
19
+ You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
20
+
21
+ This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22
+
23
+ ## Learn More
24
+
25
+ To learn more about Next.js, take a look at the following resources:
26
+
27
+ - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
+ - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
+
30
+ You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31
+
32
+ ## Deploy on Vercel
33
+
34
+ The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
+
36
+ Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
frontend/jsconfig.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./src/*"]
5
+ }
6
+ }
7
+ }
frontend/next.config.mjs ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {};
3
+
4
+ export default nextConfig;
frontend/package-lock.json ADDED
@@ -0,0 +1,2162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "frontend",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "frontend",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "next": "15.0.1",
12
+ "react": "19.0.0-rc-69d4b800-20241021",
13
+ "react-dom": "19.0.0-rc-69d4b800-20241021",
14
+ "react-icons": "^5.3.0"
15
+ },
16
+ "devDependencies": {
17
+ "postcss": "^8",
18
+ "tailwindcss": "^3.4.1"
19
+ }
20
+ },
21
+ "node_modules/@alloc/quick-lru": {
22
+ "version": "5.2.0",
23
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
24
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
25
+ "dev": true,
26
+ "engines": {
27
+ "node": ">=10"
28
+ },
29
+ "funding": {
30
+ "url": "https://github.com/sponsors/sindresorhus"
31
+ }
32
+ },
33
+ "node_modules/@emnapi/runtime": {
34
+ "version": "1.3.1",
35
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
36
+ "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
37
+ "optional": true,
38
+ "dependencies": {
39
+ "tslib": "^2.4.0"
40
+ }
41
+ },
42
+ "node_modules/@img/sharp-darwin-arm64": {
43
+ "version": "0.33.5",
44
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
45
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
46
+ "cpu": [
47
+ "arm64"
48
+ ],
49
+ "optional": true,
50
+ "os": [
51
+ "darwin"
52
+ ],
53
+ "engines": {
54
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
55
+ },
56
+ "funding": {
57
+ "url": "https://opencollective.com/libvips"
58
+ },
59
+ "optionalDependencies": {
60
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
61
+ }
62
+ },
63
+ "node_modules/@img/sharp-darwin-x64": {
64
+ "version": "0.33.5",
65
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
66
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
67
+ "cpu": [
68
+ "x64"
69
+ ],
70
+ "optional": true,
71
+ "os": [
72
+ "darwin"
73
+ ],
74
+ "engines": {
75
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
76
+ },
77
+ "funding": {
78
+ "url": "https://opencollective.com/libvips"
79
+ },
80
+ "optionalDependencies": {
81
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
82
+ }
83
+ },
84
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
85
+ "version": "1.0.4",
86
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
87
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
88
+ "cpu": [
89
+ "arm64"
90
+ ],
91
+ "optional": true,
92
+ "os": [
93
+ "darwin"
94
+ ],
95
+ "funding": {
96
+ "url": "https://opencollective.com/libvips"
97
+ }
98
+ },
99
+ "node_modules/@img/sharp-libvips-darwin-x64": {
100
+ "version": "1.0.4",
101
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
102
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
103
+ "cpu": [
104
+ "x64"
105
+ ],
106
+ "optional": true,
107
+ "os": [
108
+ "darwin"
109
+ ],
110
+ "funding": {
111
+ "url": "https://opencollective.com/libvips"
112
+ }
113
+ },
114
+ "node_modules/@img/sharp-libvips-linux-arm": {
115
+ "version": "1.0.5",
116
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
117
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
118
+ "cpu": [
119
+ "arm"
120
+ ],
121
+ "optional": true,
122
+ "os": [
123
+ "linux"
124
+ ],
125
+ "funding": {
126
+ "url": "https://opencollective.com/libvips"
127
+ }
128
+ },
129
+ "node_modules/@img/sharp-libvips-linux-arm64": {
130
+ "version": "1.0.4",
131
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
132
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
133
+ "cpu": [
134
+ "arm64"
135
+ ],
136
+ "optional": true,
137
+ "os": [
138
+ "linux"
139
+ ],
140
+ "funding": {
141
+ "url": "https://opencollective.com/libvips"
142
+ }
143
+ },
144
+ "node_modules/@img/sharp-libvips-linux-s390x": {
145
+ "version": "1.0.4",
146
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
147
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
148
+ "cpu": [
149
+ "s390x"
150
+ ],
151
+ "optional": true,
152
+ "os": [
153
+ "linux"
154
+ ],
155
+ "funding": {
156
+ "url": "https://opencollective.com/libvips"
157
+ }
158
+ },
159
+ "node_modules/@img/sharp-libvips-linux-x64": {
160
+ "version": "1.0.4",
161
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
162
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
163
+ "cpu": [
164
+ "x64"
165
+ ],
166
+ "optional": true,
167
+ "os": [
168
+ "linux"
169
+ ],
170
+ "funding": {
171
+ "url": "https://opencollective.com/libvips"
172
+ }
173
+ },
174
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
175
+ "version": "1.0.4",
176
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
177
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
178
+ "cpu": [
179
+ "arm64"
180
+ ],
181
+ "optional": true,
182
+ "os": [
183
+ "linux"
184
+ ],
185
+ "funding": {
186
+ "url": "https://opencollective.com/libvips"
187
+ }
188
+ },
189
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
190
+ "version": "1.0.4",
191
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
192
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
193
+ "cpu": [
194
+ "x64"
195
+ ],
196
+ "optional": true,
197
+ "os": [
198
+ "linux"
199
+ ],
200
+ "funding": {
201
+ "url": "https://opencollective.com/libvips"
202
+ }
203
+ },
204
+ "node_modules/@img/sharp-linux-arm": {
205
+ "version": "0.33.5",
206
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
207
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
208
+ "cpu": [
209
+ "arm"
210
+ ],
211
+ "optional": true,
212
+ "os": [
213
+ "linux"
214
+ ],
215
+ "engines": {
216
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
217
+ },
218
+ "funding": {
219
+ "url": "https://opencollective.com/libvips"
220
+ },
221
+ "optionalDependencies": {
222
+ "@img/sharp-libvips-linux-arm": "1.0.5"
223
+ }
224
+ },
225
+ "node_modules/@img/sharp-linux-arm64": {
226
+ "version": "0.33.5",
227
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
228
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
229
+ "cpu": [
230
+ "arm64"
231
+ ],
232
+ "optional": true,
233
+ "os": [
234
+ "linux"
235
+ ],
236
+ "engines": {
237
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
238
+ },
239
+ "funding": {
240
+ "url": "https://opencollective.com/libvips"
241
+ },
242
+ "optionalDependencies": {
243
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
244
+ }
245
+ },
246
+ "node_modules/@img/sharp-linux-s390x": {
247
+ "version": "0.33.5",
248
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
249
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
250
+ "cpu": [
251
+ "s390x"
252
+ ],
253
+ "optional": true,
254
+ "os": [
255
+ "linux"
256
+ ],
257
+ "engines": {
258
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
259
+ },
260
+ "funding": {
261
+ "url": "https://opencollective.com/libvips"
262
+ },
263
+ "optionalDependencies": {
264
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
265
+ }
266
+ },
267
+ "node_modules/@img/sharp-linux-x64": {
268
+ "version": "0.33.5",
269
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
270
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
271
+ "cpu": [
272
+ "x64"
273
+ ],
274
+ "optional": true,
275
+ "os": [
276
+ "linux"
277
+ ],
278
+ "engines": {
279
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
280
+ },
281
+ "funding": {
282
+ "url": "https://opencollective.com/libvips"
283
+ },
284
+ "optionalDependencies": {
285
+ "@img/sharp-libvips-linux-x64": "1.0.4"
286
+ }
287
+ },
288
+ "node_modules/@img/sharp-linuxmusl-arm64": {
289
+ "version": "0.33.5",
290
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
291
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
292
+ "cpu": [
293
+ "arm64"
294
+ ],
295
+ "optional": true,
296
+ "os": [
297
+ "linux"
298
+ ],
299
+ "engines": {
300
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
301
+ },
302
+ "funding": {
303
+ "url": "https://opencollective.com/libvips"
304
+ },
305
+ "optionalDependencies": {
306
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
307
+ }
308
+ },
309
+ "node_modules/@img/sharp-linuxmusl-x64": {
310
+ "version": "0.33.5",
311
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
312
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
313
+ "cpu": [
314
+ "x64"
315
+ ],
316
+ "optional": true,
317
+ "os": [
318
+ "linux"
319
+ ],
320
+ "engines": {
321
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
322
+ },
323
+ "funding": {
324
+ "url": "https://opencollective.com/libvips"
325
+ },
326
+ "optionalDependencies": {
327
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
328
+ }
329
+ },
330
+ "node_modules/@img/sharp-wasm32": {
331
+ "version": "0.33.5",
332
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
333
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
334
+ "cpu": [
335
+ "wasm32"
336
+ ],
337
+ "optional": true,
338
+ "dependencies": {
339
+ "@emnapi/runtime": "^1.2.0"
340
+ },
341
+ "engines": {
342
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
343
+ },
344
+ "funding": {
345
+ "url": "https://opencollective.com/libvips"
346
+ }
347
+ },
348
+ "node_modules/@img/sharp-win32-ia32": {
349
+ "version": "0.33.5",
350
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
351
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
352
+ "cpu": [
353
+ "ia32"
354
+ ],
355
+ "optional": true,
356
+ "os": [
357
+ "win32"
358
+ ],
359
+ "engines": {
360
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
361
+ },
362
+ "funding": {
363
+ "url": "https://opencollective.com/libvips"
364
+ }
365
+ },
366
+ "node_modules/@img/sharp-win32-x64": {
367
+ "version": "0.33.5",
368
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
369
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
370
+ "cpu": [
371
+ "x64"
372
+ ],
373
+ "optional": true,
374
+ "os": [
375
+ "win32"
376
+ ],
377
+ "engines": {
378
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
379
+ },
380
+ "funding": {
381
+ "url": "https://opencollective.com/libvips"
382
+ }
383
+ },
384
+ "node_modules/@isaacs/cliui": {
385
+ "version": "8.0.2",
386
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
387
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
388
+ "dev": true,
389
+ "dependencies": {
390
+ "string-width": "^5.1.2",
391
+ "string-width-cjs": "npm:string-width@^4.2.0",
392
+ "strip-ansi": "^7.0.1",
393
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
394
+ "wrap-ansi": "^8.1.0",
395
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
396
+ },
397
+ "engines": {
398
+ "node": ">=12"
399
+ }
400
+ },
401
+ "node_modules/@jridgewell/gen-mapping": {
402
+ "version": "0.3.5",
403
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
404
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
405
+ "dev": true,
406
+ "dependencies": {
407
+ "@jridgewell/set-array": "^1.2.1",
408
+ "@jridgewell/sourcemap-codec": "^1.4.10",
409
+ "@jridgewell/trace-mapping": "^0.3.24"
410
+ },
411
+ "engines": {
412
+ "node": ">=6.0.0"
413
+ }
414
+ },
415
+ "node_modules/@jridgewell/resolve-uri": {
416
+ "version": "3.1.2",
417
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
418
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
419
+ "dev": true,
420
+ "engines": {
421
+ "node": ">=6.0.0"
422
+ }
423
+ },
424
+ "node_modules/@jridgewell/set-array": {
425
+ "version": "1.2.1",
426
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
427
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
428
+ "dev": true,
429
+ "engines": {
430
+ "node": ">=6.0.0"
431
+ }
432
+ },
433
+ "node_modules/@jridgewell/sourcemap-codec": {
434
+ "version": "1.5.0",
435
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
436
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
437
+ "dev": true
438
+ },
439
+ "node_modules/@jridgewell/trace-mapping": {
440
+ "version": "0.3.25",
441
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
442
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
443
+ "dev": true,
444
+ "dependencies": {
445
+ "@jridgewell/resolve-uri": "^3.1.0",
446
+ "@jridgewell/sourcemap-codec": "^1.4.14"
447
+ }
448
+ },
449
+ "node_modules/@next/env": {
450
+ "version": "15.0.1",
451
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.1.tgz",
452
+ "integrity": "sha512-lc4HeDUKO9gxxlM5G2knTRifqhsY6yYpwuHspBZdboZe0Gp+rZHBNNSIjmQKDJIdRXiXGyVnSD6gafrbQPvILQ=="
453
+ },
454
+ "node_modules/@next/swc-darwin-arm64": {
455
+ "version": "15.0.1",
456
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.1.tgz",
457
+ "integrity": "sha512-C9k/Xv4sxkQRTA37Z6MzNq3Yb1BJMmSqjmwowoWEpbXTkAdfOwnoKOpAb71ItSzoA26yUTIo6ZhN8rKGu4ExQw==",
458
+ "cpu": [
459
+ "arm64"
460
+ ],
461
+ "optional": true,
462
+ "os": [
463
+ "darwin"
464
+ ],
465
+ "engines": {
466
+ "node": ">= 10"
467
+ }
468
+ },
469
+ "node_modules/@next/swc-darwin-x64": {
470
+ "version": "15.0.1",
471
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.1.tgz",
472
+ "integrity": "sha512-uHl13HXOuq1G7ovWFxCACDJHTSDVbn/sbLv8V1p+7KIvTrYQ5HNoSmKBdYeEKRRCbEmd+OohOgg9YOp8Ux3MBg==",
473
+ "cpu": [
474
+ "x64"
475
+ ],
476
+ "optional": true,
477
+ "os": [
478
+ "darwin"
479
+ ],
480
+ "engines": {
481
+ "node": ">= 10"
482
+ }
483
+ },
484
+ "node_modules/@next/swc-linux-arm64-gnu": {
485
+ "version": "15.0.1",
486
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.1.tgz",
487
+ "integrity": "sha512-LvyhvxHOihFTEIbb35KxOc3q8w8G4xAAAH/AQnsYDEnOvwawjL2eawsB59AX02ki6LJdgDaHoTEnC54Gw+82xw==",
488
+ "cpu": [
489
+ "arm64"
490
+ ],
491
+ "optional": true,
492
+ "os": [
493
+ "linux"
494
+ ],
495
+ "engines": {
496
+ "node": ">= 10"
497
+ }
498
+ },
499
+ "node_modules/@next/swc-linux-arm64-musl": {
500
+ "version": "15.0.1",
501
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.1.tgz",
502
+ "integrity": "sha512-vFmCGUFNyk/A5/BYcQNhAQqPIw01RJaK6dRO+ZEhz0DncoW+hJW1kZ8aH2UvTX27zPq3m85zN5waMSbZEmANcQ==",
503
+ "cpu": [
504
+ "arm64"
505
+ ],
506
+ "optional": true,
507
+ "os": [
508
+ "linux"
509
+ ],
510
+ "engines": {
511
+ "node": ">= 10"
512
+ }
513
+ },
514
+ "node_modules/@next/swc-linux-x64-gnu": {
515
+ "version": "15.0.1",
516
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.1.tgz",
517
+ "integrity": "sha512-5by7IYq0NCF8rouz6Qg9T97jYU68kaClHPfGpQG2lCZpSYHtSPQF1kjnqBTd34RIqPKMbCa4DqCufirgr8HM5w==",
518
+ "cpu": [
519
+ "x64"
520
+ ],
521
+ "optional": true,
522
+ "os": [
523
+ "linux"
524
+ ],
525
+ "engines": {
526
+ "node": ">= 10"
527
+ }
528
+ },
529
+ "node_modules/@next/swc-linux-x64-musl": {
530
+ "version": "15.0.1",
531
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.1.tgz",
532
+ "integrity": "sha512-lmYr6H3JyDNBJLzklGXLfbehU3ay78a+b6UmBGlHls4xhDXBNZfgb0aI67sflrX+cGBnv1LgmWzFlYrAYxS1Qw==",
533
+ "cpu": [
534
+ "x64"
535
+ ],
536
+ "optional": true,
537
+ "os": [
538
+ "linux"
539
+ ],
540
+ "engines": {
541
+ "node": ">= 10"
542
+ }
543
+ },
544
+ "node_modules/@next/swc-win32-arm64-msvc": {
545
+ "version": "15.0.1",
546
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.1.tgz",
547
+ "integrity": "sha512-DS8wQtl6diAj0eZTdH0sefykm4iXMbHT4MOvLwqZiIkeezKpkgPFcEdFlz3vKvXa2R/2UEgMh48z1nEpNhjeOQ==",
548
+ "cpu": [
549
+ "arm64"
550
+ ],
551
+ "optional": true,
552
+ "os": [
553
+ "win32"
554
+ ],
555
+ "engines": {
556
+ "node": ">= 10"
557
+ }
558
+ },
559
+ "node_modules/@next/swc-win32-x64-msvc": {
560
+ "version": "15.0.1",
561
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.1.tgz",
562
+ "integrity": "sha512-4Ho2ggvDdMKlZ/0e9HNdZ9ngeaBwtc+2VS5oCeqrbXqOgutX6I4U2X/42VBw0o+M5evn4/7v3zKgGHo+9v/VjA==",
563
+ "cpu": [
564
+ "x64"
565
+ ],
566
+ "optional": true,
567
+ "os": [
568
+ "win32"
569
+ ],
570
+ "engines": {
571
+ "node": ">= 10"
572
+ }
573
+ },
574
+ "node_modules/@nodelib/fs.scandir": {
575
+ "version": "2.1.5",
576
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
577
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
578
+ "dev": true,
579
+ "dependencies": {
580
+ "@nodelib/fs.stat": "2.0.5",
581
+ "run-parallel": "^1.1.9"
582
+ },
583
+ "engines": {
584
+ "node": ">= 8"
585
+ }
586
+ },
587
+ "node_modules/@nodelib/fs.stat": {
588
+ "version": "2.0.5",
589
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
590
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
591
+ "dev": true,
592
+ "engines": {
593
+ "node": ">= 8"
594
+ }
595
+ },
596
+ "node_modules/@nodelib/fs.walk": {
597
+ "version": "1.2.8",
598
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
599
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
600
+ "dev": true,
601
+ "dependencies": {
602
+ "@nodelib/fs.scandir": "2.1.5",
603
+ "fastq": "^1.6.0"
604
+ },
605
+ "engines": {
606
+ "node": ">= 8"
607
+ }
608
+ },
609
+ "node_modules/@pkgjs/parseargs": {
610
+ "version": "0.11.0",
611
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
612
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
613
+ "dev": true,
614
+ "optional": true,
615
+ "engines": {
616
+ "node": ">=14"
617
+ }
618
+ },
619
+ "node_modules/@swc/counter": {
620
+ "version": "0.1.3",
621
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
622
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="
623
+ },
624
+ "node_modules/@swc/helpers": {
625
+ "version": "0.5.13",
626
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz",
627
+ "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==",
628
+ "dependencies": {
629
+ "tslib": "^2.4.0"
630
+ }
631
+ },
632
+ "node_modules/ansi-regex": {
633
+ "version": "6.1.0",
634
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
635
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
636
+ "dev": true,
637
+ "engines": {
638
+ "node": ">=12"
639
+ },
640
+ "funding": {
641
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
642
+ }
643
+ },
644
+ "node_modules/ansi-styles": {
645
+ "version": "6.2.1",
646
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
647
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
648
+ "dev": true,
649
+ "engines": {
650
+ "node": ">=12"
651
+ },
652
+ "funding": {
653
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
654
+ }
655
+ },
656
+ "node_modules/any-promise": {
657
+ "version": "1.3.0",
658
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
659
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
660
+ "dev": true
661
+ },
662
+ "node_modules/anymatch": {
663
+ "version": "3.1.3",
664
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
665
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
666
+ "dev": true,
667
+ "dependencies": {
668
+ "normalize-path": "^3.0.0",
669
+ "picomatch": "^2.0.4"
670
+ },
671
+ "engines": {
672
+ "node": ">= 8"
673
+ }
674
+ },
675
+ "node_modules/arg": {
676
+ "version": "5.0.2",
677
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
678
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
679
+ "dev": true
680
+ },
681
+ "node_modules/balanced-match": {
682
+ "version": "1.0.2",
683
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
684
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
685
+ "dev": true
686
+ },
687
+ "node_modules/binary-extensions": {
688
+ "version": "2.3.0",
689
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
690
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
691
+ "dev": true,
692
+ "engines": {
693
+ "node": ">=8"
694
+ },
695
+ "funding": {
696
+ "url": "https://github.com/sponsors/sindresorhus"
697
+ }
698
+ },
699
+ "node_modules/brace-expansion": {
700
+ "version": "2.0.1",
701
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
702
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
703
+ "dev": true,
704
+ "dependencies": {
705
+ "balanced-match": "^1.0.0"
706
+ }
707
+ },
708
+ "node_modules/braces": {
709
+ "version": "3.0.3",
710
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
711
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
712
+ "dev": true,
713
+ "dependencies": {
714
+ "fill-range": "^7.1.1"
715
+ },
716
+ "engines": {
717
+ "node": ">=8"
718
+ }
719
+ },
720
+ "node_modules/busboy": {
721
+ "version": "1.6.0",
722
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
723
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
724
+ "dependencies": {
725
+ "streamsearch": "^1.1.0"
726
+ },
727
+ "engines": {
728
+ "node": ">=10.16.0"
729
+ }
730
+ },
731
+ "node_modules/camelcase-css": {
732
+ "version": "2.0.1",
733
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
734
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
735
+ "dev": true,
736
+ "engines": {
737
+ "node": ">= 6"
738
+ }
739
+ },
740
+ "node_modules/caniuse-lite": {
741
+ "version": "1.0.30001669",
742
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz",
743
+ "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==",
744
+ "funding": [
745
+ {
746
+ "type": "opencollective",
747
+ "url": "https://opencollective.com/browserslist"
748
+ },
749
+ {
750
+ "type": "tidelift",
751
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
752
+ },
753
+ {
754
+ "type": "github",
755
+ "url": "https://github.com/sponsors/ai"
756
+ }
757
+ ]
758
+ },
759
+ "node_modules/chokidar": {
760
+ "version": "3.6.0",
761
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
762
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
763
+ "dev": true,
764
+ "dependencies": {
765
+ "anymatch": "~3.1.2",
766
+ "braces": "~3.0.2",
767
+ "glob-parent": "~5.1.2",
768
+ "is-binary-path": "~2.1.0",
769
+ "is-glob": "~4.0.1",
770
+ "normalize-path": "~3.0.0",
771
+ "readdirp": "~3.6.0"
772
+ },
773
+ "engines": {
774
+ "node": ">= 8.10.0"
775
+ },
776
+ "funding": {
777
+ "url": "https://paulmillr.com/funding/"
778
+ },
779
+ "optionalDependencies": {
780
+ "fsevents": "~2.3.2"
781
+ }
782
+ },
783
+ "node_modules/chokidar/node_modules/glob-parent": {
784
+ "version": "5.1.2",
785
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
786
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
787
+ "dev": true,
788
+ "dependencies": {
789
+ "is-glob": "^4.0.1"
790
+ },
791
+ "engines": {
792
+ "node": ">= 6"
793
+ }
794
+ },
795
+ "node_modules/client-only": {
796
+ "version": "0.0.1",
797
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
798
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
799
+ },
800
+ "node_modules/color": {
801
+ "version": "4.2.3",
802
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
803
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
804
+ "optional": true,
805
+ "dependencies": {
806
+ "color-convert": "^2.0.1",
807
+ "color-string": "^1.9.0"
808
+ },
809
+ "engines": {
810
+ "node": ">=12.5.0"
811
+ }
812
+ },
813
+ "node_modules/color-convert": {
814
+ "version": "2.0.1",
815
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
816
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
817
+ "devOptional": true,
818
+ "dependencies": {
819
+ "color-name": "~1.1.4"
820
+ },
821
+ "engines": {
822
+ "node": ">=7.0.0"
823
+ }
824
+ },
825
+ "node_modules/color-name": {
826
+ "version": "1.1.4",
827
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
828
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
829
+ "devOptional": true
830
+ },
831
+ "node_modules/color-string": {
832
+ "version": "1.9.1",
833
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
834
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
835
+ "optional": true,
836
+ "dependencies": {
837
+ "color-name": "^1.0.0",
838
+ "simple-swizzle": "^0.2.2"
839
+ }
840
+ },
841
+ "node_modules/commander": {
842
+ "version": "4.1.1",
843
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
844
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
845
+ "dev": true,
846
+ "engines": {
847
+ "node": ">= 6"
848
+ }
849
+ },
850
+ "node_modules/cross-spawn": {
851
+ "version": "7.0.3",
852
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
853
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
854
+ "dev": true,
855
+ "dependencies": {
856
+ "path-key": "^3.1.0",
857
+ "shebang-command": "^2.0.0",
858
+ "which": "^2.0.1"
859
+ },
860
+ "engines": {
861
+ "node": ">= 8"
862
+ }
863
+ },
864
+ "node_modules/cssesc": {
865
+ "version": "3.0.0",
866
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
867
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
868
+ "dev": true,
869
+ "bin": {
870
+ "cssesc": "bin/cssesc"
871
+ },
872
+ "engines": {
873
+ "node": ">=4"
874
+ }
875
+ },
876
+ "node_modules/detect-libc": {
877
+ "version": "2.0.3",
878
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
879
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
880
+ "optional": true,
881
+ "engines": {
882
+ "node": ">=8"
883
+ }
884
+ },
885
+ "node_modules/didyoumean": {
886
+ "version": "1.2.2",
887
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
888
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
889
+ "dev": true
890
+ },
891
+ "node_modules/dlv": {
892
+ "version": "1.1.3",
893
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
894
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
895
+ "dev": true
896
+ },
897
+ "node_modules/eastasianwidth": {
898
+ "version": "0.2.0",
899
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
900
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
901
+ "dev": true
902
+ },
903
+ "node_modules/emoji-regex": {
904
+ "version": "9.2.2",
905
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
906
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
907
+ "dev": true
908
+ },
909
+ "node_modules/fast-glob": {
910
+ "version": "3.3.2",
911
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
912
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
913
+ "dev": true,
914
+ "dependencies": {
915
+ "@nodelib/fs.stat": "^2.0.2",
916
+ "@nodelib/fs.walk": "^1.2.3",
917
+ "glob-parent": "^5.1.2",
918
+ "merge2": "^1.3.0",
919
+ "micromatch": "^4.0.4"
920
+ },
921
+ "engines": {
922
+ "node": ">=8.6.0"
923
+ }
924
+ },
925
+ "node_modules/fast-glob/node_modules/glob-parent": {
926
+ "version": "5.1.2",
927
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
928
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
929
+ "dev": true,
930
+ "dependencies": {
931
+ "is-glob": "^4.0.1"
932
+ },
933
+ "engines": {
934
+ "node": ">= 6"
935
+ }
936
+ },
937
+ "node_modules/fastq": {
938
+ "version": "1.17.1",
939
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
940
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
941
+ "dev": true,
942
+ "dependencies": {
943
+ "reusify": "^1.0.4"
944
+ }
945
+ },
946
+ "node_modules/fill-range": {
947
+ "version": "7.1.1",
948
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
949
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
950
+ "dev": true,
951
+ "dependencies": {
952
+ "to-regex-range": "^5.0.1"
953
+ },
954
+ "engines": {
955
+ "node": ">=8"
956
+ }
957
+ },
958
+ "node_modules/foreground-child": {
959
+ "version": "3.3.0",
960
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
961
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
962
+ "dev": true,
963
+ "dependencies": {
964
+ "cross-spawn": "^7.0.0",
965
+ "signal-exit": "^4.0.1"
966
+ },
967
+ "engines": {
968
+ "node": ">=14"
969
+ },
970
+ "funding": {
971
+ "url": "https://github.com/sponsors/isaacs"
972
+ }
973
+ },
974
+ "node_modules/fsevents": {
975
+ "version": "2.3.3",
976
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
977
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
978
+ "dev": true,
979
+ "hasInstallScript": true,
980
+ "optional": true,
981
+ "os": [
982
+ "darwin"
983
+ ],
984
+ "engines": {
985
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
986
+ }
987
+ },
988
+ "node_modules/function-bind": {
989
+ "version": "1.1.2",
990
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
991
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
992
+ "dev": true,
993
+ "funding": {
994
+ "url": "https://github.com/sponsors/ljharb"
995
+ }
996
+ },
997
+ "node_modules/glob": {
998
+ "version": "10.4.5",
999
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
1000
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
1001
+ "dev": true,
1002
+ "dependencies": {
1003
+ "foreground-child": "^3.1.0",
1004
+ "jackspeak": "^3.1.2",
1005
+ "minimatch": "^9.0.4",
1006
+ "minipass": "^7.1.2",
1007
+ "package-json-from-dist": "^1.0.0",
1008
+ "path-scurry": "^1.11.1"
1009
+ },
1010
+ "bin": {
1011
+ "glob": "dist/esm/bin.mjs"
1012
+ },
1013
+ "funding": {
1014
+ "url": "https://github.com/sponsors/isaacs"
1015
+ }
1016
+ },
1017
+ "node_modules/glob-parent": {
1018
+ "version": "6.0.2",
1019
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1020
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1021
+ "dev": true,
1022
+ "dependencies": {
1023
+ "is-glob": "^4.0.3"
1024
+ },
1025
+ "engines": {
1026
+ "node": ">=10.13.0"
1027
+ }
1028
+ },
1029
+ "node_modules/hasown": {
1030
+ "version": "2.0.2",
1031
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1032
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1033
+ "dev": true,
1034
+ "dependencies": {
1035
+ "function-bind": "^1.1.2"
1036
+ },
1037
+ "engines": {
1038
+ "node": ">= 0.4"
1039
+ }
1040
+ },
1041
+ "node_modules/is-arrayish": {
1042
+ "version": "0.3.2",
1043
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
1044
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
1045
+ "optional": true
1046
+ },
1047
+ "node_modules/is-binary-path": {
1048
+ "version": "2.1.0",
1049
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1050
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1051
+ "dev": true,
1052
+ "dependencies": {
1053
+ "binary-extensions": "^2.0.0"
1054
+ },
1055
+ "engines": {
1056
+ "node": ">=8"
1057
+ }
1058
+ },
1059
+ "node_modules/is-core-module": {
1060
+ "version": "2.15.1",
1061
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
1062
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
1063
+ "dev": true,
1064
+ "dependencies": {
1065
+ "hasown": "^2.0.2"
1066
+ },
1067
+ "engines": {
1068
+ "node": ">= 0.4"
1069
+ },
1070
+ "funding": {
1071
+ "url": "https://github.com/sponsors/ljharb"
1072
+ }
1073
+ },
1074
+ "node_modules/is-extglob": {
1075
+ "version": "2.1.1",
1076
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1077
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1078
+ "dev": true,
1079
+ "engines": {
1080
+ "node": ">=0.10.0"
1081
+ }
1082
+ },
1083
+ "node_modules/is-fullwidth-code-point": {
1084
+ "version": "3.0.0",
1085
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1086
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1087
+ "dev": true,
1088
+ "engines": {
1089
+ "node": ">=8"
1090
+ }
1091
+ },
1092
+ "node_modules/is-glob": {
1093
+ "version": "4.0.3",
1094
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1095
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1096
+ "dev": true,
1097
+ "dependencies": {
1098
+ "is-extglob": "^2.1.1"
1099
+ },
1100
+ "engines": {
1101
+ "node": ">=0.10.0"
1102
+ }
1103
+ },
1104
+ "node_modules/is-number": {
1105
+ "version": "7.0.0",
1106
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1107
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1108
+ "dev": true,
1109
+ "engines": {
1110
+ "node": ">=0.12.0"
1111
+ }
1112
+ },
1113
+ "node_modules/isexe": {
1114
+ "version": "2.0.0",
1115
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1116
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
1117
+ "dev": true
1118
+ },
1119
+ "node_modules/jackspeak": {
1120
+ "version": "3.4.3",
1121
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
1122
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
1123
+ "dev": true,
1124
+ "dependencies": {
1125
+ "@isaacs/cliui": "^8.0.2"
1126
+ },
1127
+ "funding": {
1128
+ "url": "https://github.com/sponsors/isaacs"
1129
+ },
1130
+ "optionalDependencies": {
1131
+ "@pkgjs/parseargs": "^0.11.0"
1132
+ }
1133
+ },
1134
+ "node_modules/jiti": {
1135
+ "version": "1.21.6",
1136
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
1137
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
1138
+ "dev": true,
1139
+ "bin": {
1140
+ "jiti": "bin/jiti.js"
1141
+ }
1142
+ },
1143
+ "node_modules/lilconfig": {
1144
+ "version": "2.1.0",
1145
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
1146
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
1147
+ "dev": true,
1148
+ "engines": {
1149
+ "node": ">=10"
1150
+ }
1151
+ },
1152
+ "node_modules/lines-and-columns": {
1153
+ "version": "1.2.4",
1154
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1155
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1156
+ "dev": true
1157
+ },
1158
+ "node_modules/lru-cache": {
1159
+ "version": "10.4.3",
1160
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
1161
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
1162
+ "dev": true
1163
+ },
1164
+ "node_modules/merge2": {
1165
+ "version": "1.4.1",
1166
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1167
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1168
+ "dev": true,
1169
+ "engines": {
1170
+ "node": ">= 8"
1171
+ }
1172
+ },
1173
+ "node_modules/micromatch": {
1174
+ "version": "4.0.8",
1175
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1176
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1177
+ "dev": true,
1178
+ "dependencies": {
1179
+ "braces": "^3.0.3",
1180
+ "picomatch": "^2.3.1"
1181
+ },
1182
+ "engines": {
1183
+ "node": ">=8.6"
1184
+ }
1185
+ },
1186
+ "node_modules/minimatch": {
1187
+ "version": "9.0.5",
1188
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
1189
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
1190
+ "dev": true,
1191
+ "dependencies": {
1192
+ "brace-expansion": "^2.0.1"
1193
+ },
1194
+ "engines": {
1195
+ "node": ">=16 || 14 >=14.17"
1196
+ },
1197
+ "funding": {
1198
+ "url": "https://github.com/sponsors/isaacs"
1199
+ }
1200
+ },
1201
+ "node_modules/minipass": {
1202
+ "version": "7.1.2",
1203
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1204
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1205
+ "dev": true,
1206
+ "engines": {
1207
+ "node": ">=16 || 14 >=14.17"
1208
+ }
1209
+ },
1210
+ "node_modules/mz": {
1211
+ "version": "2.7.0",
1212
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1213
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1214
+ "dev": true,
1215
+ "dependencies": {
1216
+ "any-promise": "^1.0.0",
1217
+ "object-assign": "^4.0.1",
1218
+ "thenify-all": "^1.0.0"
1219
+ }
1220
+ },
1221
+ "node_modules/nanoid": {
1222
+ "version": "3.3.7",
1223
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
1224
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
1225
+ "funding": [
1226
+ {
1227
+ "type": "github",
1228
+ "url": "https://github.com/sponsors/ai"
1229
+ }
1230
+ ],
1231
+ "bin": {
1232
+ "nanoid": "bin/nanoid.cjs"
1233
+ },
1234
+ "engines": {
1235
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1236
+ }
1237
+ },
1238
+ "node_modules/next": {
1239
+ "version": "15.0.1",
1240
+ "resolved": "https://registry.npmjs.org/next/-/next-15.0.1.tgz",
1241
+ "integrity": "sha512-PSkFkr/w7UnFWm+EP8y/QpHrJXMqpZzAXpergB/EqLPOh4SGPJXv1wj4mslr2hUZBAS9pX7/9YLIdxTv6fwytw==",
1242
+ "dependencies": {
1243
+ "@next/env": "15.0.1",
1244
+ "@swc/counter": "0.1.3",
1245
+ "@swc/helpers": "0.5.13",
1246
+ "busboy": "1.6.0",
1247
+ "caniuse-lite": "^1.0.30001579",
1248
+ "postcss": "8.4.31",
1249
+ "styled-jsx": "5.1.6"
1250
+ },
1251
+ "bin": {
1252
+ "next": "dist/bin/next"
1253
+ },
1254
+ "engines": {
1255
+ "node": ">=18.18.0"
1256
+ },
1257
+ "optionalDependencies": {
1258
+ "@next/swc-darwin-arm64": "15.0.1",
1259
+ "@next/swc-darwin-x64": "15.0.1",
1260
+ "@next/swc-linux-arm64-gnu": "15.0.1",
1261
+ "@next/swc-linux-arm64-musl": "15.0.1",
1262
+ "@next/swc-linux-x64-gnu": "15.0.1",
1263
+ "@next/swc-linux-x64-musl": "15.0.1",
1264
+ "@next/swc-win32-arm64-msvc": "15.0.1",
1265
+ "@next/swc-win32-x64-msvc": "15.0.1",
1266
+ "sharp": "^0.33.5"
1267
+ },
1268
+ "peerDependencies": {
1269
+ "@opentelemetry/api": "^1.1.0",
1270
+ "@playwright/test": "^1.41.2",
1271
+ "babel-plugin-react-compiler": "*",
1272
+ "react": "^18.2.0 || 19.0.0-rc-69d4b800-20241021",
1273
+ "react-dom": "^18.2.0 || 19.0.0-rc-69d4b800-20241021",
1274
+ "sass": "^1.3.0"
1275
+ },
1276
+ "peerDependenciesMeta": {
1277
+ "@opentelemetry/api": {
1278
+ "optional": true
1279
+ },
1280
+ "@playwright/test": {
1281
+ "optional": true
1282
+ },
1283
+ "babel-plugin-react-compiler": {
1284
+ "optional": true
1285
+ },
1286
+ "sass": {
1287
+ "optional": true
1288
+ }
1289
+ }
1290
+ },
1291
+ "node_modules/next/node_modules/postcss": {
1292
+ "version": "8.4.31",
1293
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
1294
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
1295
+ "funding": [
1296
+ {
1297
+ "type": "opencollective",
1298
+ "url": "https://opencollective.com/postcss/"
1299
+ },
1300
+ {
1301
+ "type": "tidelift",
1302
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1303
+ },
1304
+ {
1305
+ "type": "github",
1306
+ "url": "https://github.com/sponsors/ai"
1307
+ }
1308
+ ],
1309
+ "dependencies": {
1310
+ "nanoid": "^3.3.6",
1311
+ "picocolors": "^1.0.0",
1312
+ "source-map-js": "^1.0.2"
1313
+ },
1314
+ "engines": {
1315
+ "node": "^10 || ^12 || >=14"
1316
+ }
1317
+ },
1318
+ "node_modules/normalize-path": {
1319
+ "version": "3.0.0",
1320
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1321
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1322
+ "dev": true,
1323
+ "engines": {
1324
+ "node": ">=0.10.0"
1325
+ }
1326
+ },
1327
+ "node_modules/object-assign": {
1328
+ "version": "4.1.1",
1329
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1330
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1331
+ "dev": true,
1332
+ "engines": {
1333
+ "node": ">=0.10.0"
1334
+ }
1335
+ },
1336
+ "node_modules/object-hash": {
1337
+ "version": "3.0.0",
1338
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1339
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1340
+ "dev": true,
1341
+ "engines": {
1342
+ "node": ">= 6"
1343
+ }
1344
+ },
1345
+ "node_modules/package-json-from-dist": {
1346
+ "version": "1.0.1",
1347
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
1348
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
1349
+ "dev": true
1350
+ },
1351
+ "node_modules/path-key": {
1352
+ "version": "3.1.1",
1353
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
1354
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
1355
+ "dev": true,
1356
+ "engines": {
1357
+ "node": ">=8"
1358
+ }
1359
+ },
1360
+ "node_modules/path-parse": {
1361
+ "version": "1.0.7",
1362
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1363
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1364
+ "dev": true
1365
+ },
1366
+ "node_modules/path-scurry": {
1367
+ "version": "1.11.1",
1368
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
1369
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
1370
+ "dev": true,
1371
+ "dependencies": {
1372
+ "lru-cache": "^10.2.0",
1373
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
1374
+ },
1375
+ "engines": {
1376
+ "node": ">=16 || 14 >=14.18"
1377
+ },
1378
+ "funding": {
1379
+ "url": "https://github.com/sponsors/isaacs"
1380
+ }
1381
+ },
1382
+ "node_modules/picocolors": {
1383
+ "version": "1.1.1",
1384
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1385
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
1386
+ },
1387
+ "node_modules/picomatch": {
1388
+ "version": "2.3.1",
1389
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1390
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1391
+ "dev": true,
1392
+ "engines": {
1393
+ "node": ">=8.6"
1394
+ },
1395
+ "funding": {
1396
+ "url": "https://github.com/sponsors/jonschlinkert"
1397
+ }
1398
+ },
1399
+ "node_modules/pify": {
1400
+ "version": "2.3.0",
1401
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1402
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1403
+ "dev": true,
1404
+ "engines": {
1405
+ "node": ">=0.10.0"
1406
+ }
1407
+ },
1408
+ "node_modules/pirates": {
1409
+ "version": "4.0.6",
1410
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
1411
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
1412
+ "dev": true,
1413
+ "engines": {
1414
+ "node": ">= 6"
1415
+ }
1416
+ },
1417
+ "node_modules/postcss": {
1418
+ "version": "8.4.47",
1419
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
1420
+ "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
1421
+ "dev": true,
1422
+ "funding": [
1423
+ {
1424
+ "type": "opencollective",
1425
+ "url": "https://opencollective.com/postcss/"
1426
+ },
1427
+ {
1428
+ "type": "tidelift",
1429
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1430
+ },
1431
+ {
1432
+ "type": "github",
1433
+ "url": "https://github.com/sponsors/ai"
1434
+ }
1435
+ ],
1436
+ "dependencies": {
1437
+ "nanoid": "^3.3.7",
1438
+ "picocolors": "^1.1.0",
1439
+ "source-map-js": "^1.2.1"
1440
+ },
1441
+ "engines": {
1442
+ "node": "^10 || ^12 || >=14"
1443
+ }
1444
+ },
1445
+ "node_modules/postcss-import": {
1446
+ "version": "15.1.0",
1447
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
1448
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
1449
+ "dev": true,
1450
+ "dependencies": {
1451
+ "postcss-value-parser": "^4.0.0",
1452
+ "read-cache": "^1.0.0",
1453
+ "resolve": "^1.1.7"
1454
+ },
1455
+ "engines": {
1456
+ "node": ">=14.0.0"
1457
+ },
1458
+ "peerDependencies": {
1459
+ "postcss": "^8.0.0"
1460
+ }
1461
+ },
1462
+ "node_modules/postcss-js": {
1463
+ "version": "4.0.1",
1464
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
1465
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
1466
+ "dev": true,
1467
+ "dependencies": {
1468
+ "camelcase-css": "^2.0.1"
1469
+ },
1470
+ "engines": {
1471
+ "node": "^12 || ^14 || >= 16"
1472
+ },
1473
+ "funding": {
1474
+ "type": "opencollective",
1475
+ "url": "https://opencollective.com/postcss/"
1476
+ },
1477
+ "peerDependencies": {
1478
+ "postcss": "^8.4.21"
1479
+ }
1480
+ },
1481
+ "node_modules/postcss-load-config": {
1482
+ "version": "4.0.2",
1483
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
1484
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
1485
+ "dev": true,
1486
+ "funding": [
1487
+ {
1488
+ "type": "opencollective",
1489
+ "url": "https://opencollective.com/postcss/"
1490
+ },
1491
+ {
1492
+ "type": "github",
1493
+ "url": "https://github.com/sponsors/ai"
1494
+ }
1495
+ ],
1496
+ "dependencies": {
1497
+ "lilconfig": "^3.0.0",
1498
+ "yaml": "^2.3.4"
1499
+ },
1500
+ "engines": {
1501
+ "node": ">= 14"
1502
+ },
1503
+ "peerDependencies": {
1504
+ "postcss": ">=8.0.9",
1505
+ "ts-node": ">=9.0.0"
1506
+ },
1507
+ "peerDependenciesMeta": {
1508
+ "postcss": {
1509
+ "optional": true
1510
+ },
1511
+ "ts-node": {
1512
+ "optional": true
1513
+ }
1514
+ }
1515
+ },
1516
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
1517
+ "version": "3.1.2",
1518
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
1519
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
1520
+ "dev": true,
1521
+ "engines": {
1522
+ "node": ">=14"
1523
+ },
1524
+ "funding": {
1525
+ "url": "https://github.com/sponsors/antonk52"
1526
+ }
1527
+ },
1528
+ "node_modules/postcss-nested": {
1529
+ "version": "6.2.0",
1530
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
1531
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
1532
+ "dev": true,
1533
+ "funding": [
1534
+ {
1535
+ "type": "opencollective",
1536
+ "url": "https://opencollective.com/postcss/"
1537
+ },
1538
+ {
1539
+ "type": "github",
1540
+ "url": "https://github.com/sponsors/ai"
1541
+ }
1542
+ ],
1543
+ "dependencies": {
1544
+ "postcss-selector-parser": "^6.1.1"
1545
+ },
1546
+ "engines": {
1547
+ "node": ">=12.0"
1548
+ },
1549
+ "peerDependencies": {
1550
+ "postcss": "^8.2.14"
1551
+ }
1552
+ },
1553
+ "node_modules/postcss-selector-parser": {
1554
+ "version": "6.1.2",
1555
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
1556
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
1557
+ "dev": true,
1558
+ "dependencies": {
1559
+ "cssesc": "^3.0.0",
1560
+ "util-deprecate": "^1.0.2"
1561
+ },
1562
+ "engines": {
1563
+ "node": ">=4"
1564
+ }
1565
+ },
1566
+ "node_modules/postcss-value-parser": {
1567
+ "version": "4.2.0",
1568
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
1569
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
1570
+ "dev": true
1571
+ },
1572
+ "node_modules/queue-microtask": {
1573
+ "version": "1.2.3",
1574
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
1575
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
1576
+ "dev": true,
1577
+ "funding": [
1578
+ {
1579
+ "type": "github",
1580
+ "url": "https://github.com/sponsors/feross"
1581
+ },
1582
+ {
1583
+ "type": "patreon",
1584
+ "url": "https://www.patreon.com/feross"
1585
+ },
1586
+ {
1587
+ "type": "consulting",
1588
+ "url": "https://feross.org/support"
1589
+ }
1590
+ ]
1591
+ },
1592
+ "node_modules/react": {
1593
+ "version": "19.0.0-rc-69d4b800-20241021",
1594
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-69d4b800-20241021.tgz",
1595
+ "integrity": "sha512-dXki4tN+rP+4xhsm65q/QI/19VCZdu5vPcy4h6zaJt20XP8/1r/LCwrLFYuj8hElbNz5AmxW6JtRa7ej0BzZdg==",
1596
+ "engines": {
1597
+ "node": ">=0.10.0"
1598
+ }
1599
+ },
1600
+ "node_modules/react-dom": {
1601
+ "version": "19.0.0-rc-69d4b800-20241021",
1602
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-69d4b800-20241021.tgz",
1603
+ "integrity": "sha512-ZXBsP/kTDLI9QopUaUgYJhmmAhO8aKz7DCv2Ui2rA9boCfJ/dRRh6BlVidsyb2dPzG01rItdRFQqwbP+x9s5Rg==",
1604
+ "dependencies": {
1605
+ "scheduler": "0.25.0-rc-69d4b800-20241021"
1606
+ },
1607
+ "peerDependencies": {
1608
+ "react": "19.0.0-rc-69d4b800-20241021"
1609
+ }
1610
+ },
1611
+ "node_modules/react-icons": {
1612
+ "version": "5.3.0",
1613
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
1614
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
1615
+ "peerDependencies": {
1616
+ "react": "*"
1617
+ }
1618
+ },
1619
+ "node_modules/read-cache": {
1620
+ "version": "1.0.0",
1621
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
1622
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
1623
+ "dev": true,
1624
+ "dependencies": {
1625
+ "pify": "^2.3.0"
1626
+ }
1627
+ },
1628
+ "node_modules/readdirp": {
1629
+ "version": "3.6.0",
1630
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1631
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1632
+ "dev": true,
1633
+ "dependencies": {
1634
+ "picomatch": "^2.2.1"
1635
+ },
1636
+ "engines": {
1637
+ "node": ">=8.10.0"
1638
+ }
1639
+ },
1640
+ "node_modules/resolve": {
1641
+ "version": "1.22.8",
1642
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
1643
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
1644
+ "dev": true,
1645
+ "dependencies": {
1646
+ "is-core-module": "^2.13.0",
1647
+ "path-parse": "^1.0.7",
1648
+ "supports-preserve-symlinks-flag": "^1.0.0"
1649
+ },
1650
+ "bin": {
1651
+ "resolve": "bin/resolve"
1652
+ },
1653
+ "funding": {
1654
+ "url": "https://github.com/sponsors/ljharb"
1655
+ }
1656
+ },
1657
+ "node_modules/reusify": {
1658
+ "version": "1.0.4",
1659
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
1660
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
1661
+ "dev": true,
1662
+ "engines": {
1663
+ "iojs": ">=1.0.0",
1664
+ "node": ">=0.10.0"
1665
+ }
1666
+ },
1667
+ "node_modules/run-parallel": {
1668
+ "version": "1.2.0",
1669
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
1670
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
1671
+ "dev": true,
1672
+ "funding": [
1673
+ {
1674
+ "type": "github",
1675
+ "url": "https://github.com/sponsors/feross"
1676
+ },
1677
+ {
1678
+ "type": "patreon",
1679
+ "url": "https://www.patreon.com/feross"
1680
+ },
1681
+ {
1682
+ "type": "consulting",
1683
+ "url": "https://feross.org/support"
1684
+ }
1685
+ ],
1686
+ "dependencies": {
1687
+ "queue-microtask": "^1.2.2"
1688
+ }
1689
+ },
1690
+ "node_modules/scheduler": {
1691
+ "version": "0.25.0-rc-69d4b800-20241021",
1692
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-69d4b800-20241021.tgz",
1693
+ "integrity": "sha512-S5AYX/YhMAN6u9AXgKYbZP4U4ZklC6R9Q7HmFSBk7d4DLiHVNxvAvlSvuM4nxFkwOk50MnpfTKQ7UWHXDOc9Eg=="
1694
+ },
1695
+ "node_modules/semver": {
1696
+ "version": "7.6.3",
1697
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
1698
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
1699
+ "optional": true,
1700
+ "bin": {
1701
+ "semver": "bin/semver.js"
1702
+ },
1703
+ "engines": {
1704
+ "node": ">=10"
1705
+ }
1706
+ },
1707
+ "node_modules/sharp": {
1708
+ "version": "0.33.5",
1709
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
1710
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
1711
+ "hasInstallScript": true,
1712
+ "optional": true,
1713
+ "dependencies": {
1714
+ "color": "^4.2.3",
1715
+ "detect-libc": "^2.0.3",
1716
+ "semver": "^7.6.3"
1717
+ },
1718
+ "engines": {
1719
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
1720
+ },
1721
+ "funding": {
1722
+ "url": "https://opencollective.com/libvips"
1723
+ },
1724
+ "optionalDependencies": {
1725
+ "@img/sharp-darwin-arm64": "0.33.5",
1726
+ "@img/sharp-darwin-x64": "0.33.5",
1727
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
1728
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
1729
+ "@img/sharp-libvips-linux-arm": "1.0.5",
1730
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
1731
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
1732
+ "@img/sharp-libvips-linux-x64": "1.0.4",
1733
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
1734
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
1735
+ "@img/sharp-linux-arm": "0.33.5",
1736
+ "@img/sharp-linux-arm64": "0.33.5",
1737
+ "@img/sharp-linux-s390x": "0.33.5",
1738
+ "@img/sharp-linux-x64": "0.33.5",
1739
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
1740
+ "@img/sharp-linuxmusl-x64": "0.33.5",
1741
+ "@img/sharp-wasm32": "0.33.5",
1742
+ "@img/sharp-win32-ia32": "0.33.5",
1743
+ "@img/sharp-win32-x64": "0.33.5"
1744
+ }
1745
+ },
1746
+ "node_modules/shebang-command": {
1747
+ "version": "2.0.0",
1748
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1749
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1750
+ "dev": true,
1751
+ "dependencies": {
1752
+ "shebang-regex": "^3.0.0"
1753
+ },
1754
+ "engines": {
1755
+ "node": ">=8"
1756
+ }
1757
+ },
1758
+ "node_modules/shebang-regex": {
1759
+ "version": "3.0.0",
1760
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1761
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1762
+ "dev": true,
1763
+ "engines": {
1764
+ "node": ">=8"
1765
+ }
1766
+ },
1767
+ "node_modules/signal-exit": {
1768
+ "version": "4.1.0",
1769
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
1770
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
1771
+ "dev": true,
1772
+ "engines": {
1773
+ "node": ">=14"
1774
+ },
1775
+ "funding": {
1776
+ "url": "https://github.com/sponsors/isaacs"
1777
+ }
1778
+ },
1779
+ "node_modules/simple-swizzle": {
1780
+ "version": "0.2.2",
1781
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
1782
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
1783
+ "optional": true,
1784
+ "dependencies": {
1785
+ "is-arrayish": "^0.3.1"
1786
+ }
1787
+ },
1788
+ "node_modules/source-map-js": {
1789
+ "version": "1.2.1",
1790
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1791
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1792
+ "engines": {
1793
+ "node": ">=0.10.0"
1794
+ }
1795
+ },
1796
+ "node_modules/streamsearch": {
1797
+ "version": "1.1.0",
1798
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
1799
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
1800
+ "engines": {
1801
+ "node": ">=10.0.0"
1802
+ }
1803
+ },
1804
+ "node_modules/string-width": {
1805
+ "version": "5.1.2",
1806
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1807
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1808
+ "dev": true,
1809
+ "dependencies": {
1810
+ "eastasianwidth": "^0.2.0",
1811
+ "emoji-regex": "^9.2.2",
1812
+ "strip-ansi": "^7.0.1"
1813
+ },
1814
+ "engines": {
1815
+ "node": ">=12"
1816
+ },
1817
+ "funding": {
1818
+ "url": "https://github.com/sponsors/sindresorhus"
1819
+ }
1820
+ },
1821
+ "node_modules/string-width-cjs": {
1822
+ "name": "string-width",
1823
+ "version": "4.2.3",
1824
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1825
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1826
+ "dev": true,
1827
+ "dependencies": {
1828
+ "emoji-regex": "^8.0.0",
1829
+ "is-fullwidth-code-point": "^3.0.0",
1830
+ "strip-ansi": "^6.0.1"
1831
+ },
1832
+ "engines": {
1833
+ "node": ">=8"
1834
+ }
1835
+ },
1836
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
1837
+ "version": "5.0.1",
1838
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1839
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1840
+ "dev": true,
1841
+ "engines": {
1842
+ "node": ">=8"
1843
+ }
1844
+ },
1845
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
1846
+ "version": "8.0.0",
1847
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1848
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1849
+ "dev": true
1850
+ },
1851
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
1852
+ "version": "6.0.1",
1853
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1854
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1855
+ "dev": true,
1856
+ "dependencies": {
1857
+ "ansi-regex": "^5.0.1"
1858
+ },
1859
+ "engines": {
1860
+ "node": ">=8"
1861
+ }
1862
+ },
1863
+ "node_modules/strip-ansi": {
1864
+ "version": "7.1.0",
1865
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1866
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1867
+ "dev": true,
1868
+ "dependencies": {
1869
+ "ansi-regex": "^6.0.1"
1870
+ },
1871
+ "engines": {
1872
+ "node": ">=12"
1873
+ },
1874
+ "funding": {
1875
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
1876
+ }
1877
+ },
1878
+ "node_modules/strip-ansi-cjs": {
1879
+ "name": "strip-ansi",
1880
+ "version": "6.0.1",
1881
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1882
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1883
+ "dev": true,
1884
+ "dependencies": {
1885
+ "ansi-regex": "^5.0.1"
1886
+ },
1887
+ "engines": {
1888
+ "node": ">=8"
1889
+ }
1890
+ },
1891
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
1892
+ "version": "5.0.1",
1893
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1894
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1895
+ "dev": true,
1896
+ "engines": {
1897
+ "node": ">=8"
1898
+ }
1899
+ },
1900
+ "node_modules/styled-jsx": {
1901
+ "version": "5.1.6",
1902
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
1903
+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
1904
+ "dependencies": {
1905
+ "client-only": "0.0.1"
1906
+ },
1907
+ "engines": {
1908
+ "node": ">= 12.0.0"
1909
+ },
1910
+ "peerDependencies": {
1911
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
1912
+ },
1913
+ "peerDependenciesMeta": {
1914
+ "@babel/core": {
1915
+ "optional": true
1916
+ },
1917
+ "babel-plugin-macros": {
1918
+ "optional": true
1919
+ }
1920
+ }
1921
+ },
1922
+ "node_modules/sucrase": {
1923
+ "version": "3.35.0",
1924
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
1925
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
1926
+ "dev": true,
1927
+ "dependencies": {
1928
+ "@jridgewell/gen-mapping": "^0.3.2",
1929
+ "commander": "^4.0.0",
1930
+ "glob": "^10.3.10",
1931
+ "lines-and-columns": "^1.1.6",
1932
+ "mz": "^2.7.0",
1933
+ "pirates": "^4.0.1",
1934
+ "ts-interface-checker": "^0.1.9"
1935
+ },
1936
+ "bin": {
1937
+ "sucrase": "bin/sucrase",
1938
+ "sucrase-node": "bin/sucrase-node"
1939
+ },
1940
+ "engines": {
1941
+ "node": ">=16 || 14 >=14.17"
1942
+ }
1943
+ },
1944
+ "node_modules/supports-preserve-symlinks-flag": {
1945
+ "version": "1.0.0",
1946
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
1947
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
1948
+ "dev": true,
1949
+ "engines": {
1950
+ "node": ">= 0.4"
1951
+ },
1952
+ "funding": {
1953
+ "url": "https://github.com/sponsors/ljharb"
1954
+ }
1955
+ },
1956
+ "node_modules/tailwindcss": {
1957
+ "version": "3.4.14",
1958
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
1959
+ "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
1960
+ "dev": true,
1961
+ "dependencies": {
1962
+ "@alloc/quick-lru": "^5.2.0",
1963
+ "arg": "^5.0.2",
1964
+ "chokidar": "^3.5.3",
1965
+ "didyoumean": "^1.2.2",
1966
+ "dlv": "^1.1.3",
1967
+ "fast-glob": "^3.3.0",
1968
+ "glob-parent": "^6.0.2",
1969
+ "is-glob": "^4.0.3",
1970
+ "jiti": "^1.21.0",
1971
+ "lilconfig": "^2.1.0",
1972
+ "micromatch": "^4.0.5",
1973
+ "normalize-path": "^3.0.0",
1974
+ "object-hash": "^3.0.0",
1975
+ "picocolors": "^1.0.0",
1976
+ "postcss": "^8.4.23",
1977
+ "postcss-import": "^15.1.0",
1978
+ "postcss-js": "^4.0.1",
1979
+ "postcss-load-config": "^4.0.1",
1980
+ "postcss-nested": "^6.0.1",
1981
+ "postcss-selector-parser": "^6.0.11",
1982
+ "resolve": "^1.22.2",
1983
+ "sucrase": "^3.32.0"
1984
+ },
1985
+ "bin": {
1986
+ "tailwind": "lib/cli.js",
1987
+ "tailwindcss": "lib/cli.js"
1988
+ },
1989
+ "engines": {
1990
+ "node": ">=14.0.0"
1991
+ }
1992
+ },
1993
+ "node_modules/thenify": {
1994
+ "version": "3.3.1",
1995
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
1996
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
1997
+ "dev": true,
1998
+ "dependencies": {
1999
+ "any-promise": "^1.0.0"
2000
+ }
2001
+ },
2002
+ "node_modules/thenify-all": {
2003
+ "version": "1.6.0",
2004
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2005
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2006
+ "dev": true,
2007
+ "dependencies": {
2008
+ "thenify": ">= 3.1.0 < 4"
2009
+ },
2010
+ "engines": {
2011
+ "node": ">=0.8"
2012
+ }
2013
+ },
2014
+ "node_modules/to-regex-range": {
2015
+ "version": "5.0.1",
2016
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2017
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2018
+ "dev": true,
2019
+ "dependencies": {
2020
+ "is-number": "^7.0.0"
2021
+ },
2022
+ "engines": {
2023
+ "node": ">=8.0"
2024
+ }
2025
+ },
2026
+ "node_modules/ts-interface-checker": {
2027
+ "version": "0.1.13",
2028
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2029
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
2030
+ "dev": true
2031
+ },
2032
+ "node_modules/tslib": {
2033
+ "version": "2.8.0",
2034
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz",
2035
+ "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA=="
2036
+ },
2037
+ "node_modules/util-deprecate": {
2038
+ "version": "1.0.2",
2039
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2040
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2041
+ "dev": true
2042
+ },
2043
+ "node_modules/which": {
2044
+ "version": "2.0.2",
2045
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
2046
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
2047
+ "dev": true,
2048
+ "dependencies": {
2049
+ "isexe": "^2.0.0"
2050
+ },
2051
+ "bin": {
2052
+ "node-which": "bin/node-which"
2053
+ },
2054
+ "engines": {
2055
+ "node": ">= 8"
2056
+ }
2057
+ },
2058
+ "node_modules/wrap-ansi": {
2059
+ "version": "8.1.0",
2060
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
2061
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
2062
+ "dev": true,
2063
+ "dependencies": {
2064
+ "ansi-styles": "^6.1.0",
2065
+ "string-width": "^5.0.1",
2066
+ "strip-ansi": "^7.0.1"
2067
+ },
2068
+ "engines": {
2069
+ "node": ">=12"
2070
+ },
2071
+ "funding": {
2072
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2073
+ }
2074
+ },
2075
+ "node_modules/wrap-ansi-cjs": {
2076
+ "name": "wrap-ansi",
2077
+ "version": "7.0.0",
2078
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2079
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2080
+ "dev": true,
2081
+ "dependencies": {
2082
+ "ansi-styles": "^4.0.0",
2083
+ "string-width": "^4.1.0",
2084
+ "strip-ansi": "^6.0.0"
2085
+ },
2086
+ "engines": {
2087
+ "node": ">=10"
2088
+ },
2089
+ "funding": {
2090
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2091
+ }
2092
+ },
2093
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
2094
+ "version": "5.0.1",
2095
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2096
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2097
+ "dev": true,
2098
+ "engines": {
2099
+ "node": ">=8"
2100
+ }
2101
+ },
2102
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
2103
+ "version": "4.3.0",
2104
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2105
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2106
+ "dev": true,
2107
+ "dependencies": {
2108
+ "color-convert": "^2.0.1"
2109
+ },
2110
+ "engines": {
2111
+ "node": ">=8"
2112
+ },
2113
+ "funding": {
2114
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2115
+ }
2116
+ },
2117
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
2118
+ "version": "8.0.0",
2119
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2120
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2121
+ "dev": true
2122
+ },
2123
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
2124
+ "version": "4.2.3",
2125
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2126
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2127
+ "dev": true,
2128
+ "dependencies": {
2129
+ "emoji-regex": "^8.0.0",
2130
+ "is-fullwidth-code-point": "^3.0.0",
2131
+ "strip-ansi": "^6.0.1"
2132
+ },
2133
+ "engines": {
2134
+ "node": ">=8"
2135
+ }
2136
+ },
2137
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
2138
+ "version": "6.0.1",
2139
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2140
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2141
+ "dev": true,
2142
+ "dependencies": {
2143
+ "ansi-regex": "^5.0.1"
2144
+ },
2145
+ "engines": {
2146
+ "node": ">=8"
2147
+ }
2148
+ },
2149
+ "node_modules/yaml": {
2150
+ "version": "2.6.0",
2151
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
2152
+ "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
2153
+ "dev": true,
2154
+ "bin": {
2155
+ "yaml": "bin.mjs"
2156
+ },
2157
+ "engines": {
2158
+ "node": ">= 14"
2159
+ }
2160
+ }
2161
+ }
2162
+ }
frontend/package.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "frontend",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev --turbopack",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "next lint"
10
+ },
11
+ "dependencies": {
12
+ "next": "15.0.1",
13
+ "react": "19.0.0-rc-69d4b800-20241021",
14
+ "react-dom": "19.0.0-rc-69d4b800-20241021",
15
+ "react-icons": "^5.3.0"
16
+ },
17
+ "devDependencies": {
18
+ "postcss": "^8",
19
+ "tailwindcss": "^3.4.1"
20
+ }
21
+ }
frontend/postcss.config.mjs ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: {
4
+ tailwindcss: {},
5
+ },
6
+ };
7
+
8
+ export default config;
frontend/public/Aaj Ki Raat _ Stree 2 _ Tamannaah Bhatia _ Sachin-Jigar _ Madhubanti _ Divya _ Amitabh _ 15th August.mp4 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cfd9855ea9bf3f44c75472ac682fd31171dea80747fabf84b5b26d88409dabc7
3
+ size 32005937
frontend/public/Dil Ka Darzi Song - STREE - VAYU, Prakriti Kakar - Sachin-Jigar - Rajkummar Rao, Shraddha Kapoor (320).mp3 ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:444cdf1a4bdaf659c762d9150e1dfea6f025e80f8bca0c9000936999c69b0f2c
3
+ size 5905965
frontend/public/file.svg ADDED
frontend/public/globe.svg ADDED
frontend/public/next.svg ADDED
frontend/public/vercel.svg ADDED
frontend/public/window.svg ADDED
frontend/src/app/favicon.ico ADDED
frontend/src/app/fonts/GeistMonoVF.woff ADDED
Binary file (67.9 kB). View file
 
frontend/src/app/fonts/GeistVF.woff ADDED
Binary file (66.3 kB). View file
 
frontend/src/app/globals.css ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ --background: #0a0523;
7
+ --foreground: #ededed;
8
+ --background-secondary: #110652;
9
+ --foreground-secondary: #1d85b9;
10
+ }
11
+
12
+ body {
13
+ color: var(--foreground);
14
+ background: var(--background);
15
+ font-family: Arial, Helvetica, sans-serif;
16
+ }
17
+
18
+ footer {
19
+ background-color: var(--background-secondary);
20
+ }
21
+
22
+ .app-container{
23
+ overflow: hidden;
24
+ max-width: 100vw;
25
+ }
frontend/src/app/layout.js ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // RootLayout.js
2
+ "use client";
3
+
4
+ import localFont from "next/font/local";
5
+ import "./globals.css";
6
+ import MusicPlayer from "@/components/MusicPlayer";
7
+ import { MusicPlayerProvider } from "@/context/MusicPlayerContext";
8
+ import { useState } from "react";
9
+
10
+ const geistSans = localFont({
11
+ src: "./fonts/GeistVF.woff",
12
+ variable: "--font-geist-sans",
13
+ weight: "100 900",
14
+ });
15
+ const geistMono = localFont({
16
+ src: "./fonts/GeistMonoVF.woff",
17
+ variable: "--font-geist-mono",
18
+ weight: "100 900",
19
+ });
20
+
21
+ export default function RootLayout({ children }) {
22
+ return (
23
+ <html lang="en">
24
+ <MusicPlayerProvider>
25
+ <body
26
+ className={`${geistSans.variable} ${geistMono.variable} antialiased max-h-screen overflow-hidden`}
27
+ >
28
+ <div className="app-container">{children}</div>
29
+ <footer className="absolute bottom-0 flex items-center w-full">
30
+ <MusicPlayer/>
31
+ </footer>
32
+ </body>
33
+ </MusicPlayerProvider>
34
+ </html>
35
+ );
36
+ }
frontend/src/app/page.js ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Card from "@/components/Card";
2
+
3
+ export default function Home() {
4
+ return (
5
+ <div className="grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20 font-[family-name:var(--font-geist-sans)]">
6
+ <main className="flex flex-col gap-8 row-start-2 items-center sm:items-start">
7
+ <div className="flex gap-4 items-center flex-col sm:flex-row">
8
+ <Card src={"/Aaj Ki Raat _ Stree 2 _ Tamannaah Bhatia _ Sachin-Jigar _ Madhubanti _ Divya _ Amitabh _ 15th August.mp4"} title={"Aaj Ki Raat"}/>
9
+ <Card src={"/Dil Ka Darzi Song - STREE - VAYU, Prakriti Kakar - Sachin-Jigar - Rajkummar Rao, Shraddha Kapoor (320).mp3"} title={"Dil Ka Darzi"}/>
10
+ </div>
11
+ </main>
12
+ </div>
13
+ );
14
+ }
frontend/src/components/Card.css ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .music-card{
2
+ width: 200px;
3
+ height: 60;
4
+ background-color: rgb(35, 26, 108);
5
+ border-radius:50px;
6
+ display: flex;
7
+ justify-content: start;
8
+ align-items: center;
9
+ gap: 10px;
10
+ }
11
+
12
+ .card-title{
13
+ display: -webkit-box; /* Fallback for multi-line ellipsis */
14
+ -webkit-line-clamp: 1; /* Limits to one line */
15
+ -webkit-box-orient: vertical; /* Specifies the box orientation */
16
+ overflow: hidden;
17
+ text-overflow: ellipsis;
18
+ white-space: normal; /* Allows wrapping but limits line count */
19
+ line-height: 1.2em; /* Optional: Adjust line spacing */
20
+ max-height: 1.2em;
21
+ }
frontend/src/components/Card.js ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+ import "./Card.css";
3
+ import { FaCompactDisc } from "react-icons/fa";
4
+ import { useMusicPlayer } from "@/context/MusicPlayerContext";
5
+
6
+ const Card = ({ src, title }) => {
7
+ const { initializePlayer } = useMusicPlayer();
8
+
9
+ const handleButtonClick = () => {
10
+ initializePlayer(src);
11
+ };
12
+
13
+ return (
14
+ <button onClick={handleButtonClick}>
15
+ <div className="music-card">
16
+ <FaCompactDisc size={60} />
17
+
18
+ <label className="card-title">{title}</label>
19
+ </div>
20
+ </button>
21
+ );
22
+ };
23
+
24
+ export default Card;
frontend/src/components/MusicPlayer.css ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .player-maximized video {
2
+ width: auto;
3
+ height: 100vh;
4
+ }
5
+
6
+ .player-minimized video {
7
+ height: 10vh;
8
+ }
9
+
10
+ .music-title {
11
+ display: -webkit-box; /* Fallback for multi-line ellipsis */
12
+ -webkit-line-clamp: 1; /* Limits to one line */
13
+ -webkit-box-orient: vertical; /* Specifies the box orientation */
14
+ overflow: hidden;
15
+ text-overflow: ellipsis;
16
+ white-space: normal; /* Allows wrapping but limits line count */
17
+ line-height: 1.2em; /* Optional: Adjust line spacing */
18
+ max-height: 1.2em; /* Optional: Adjust to fit one line */
19
+ }
20
+
21
+ .music-title.mini{
22
+ }
23
+
24
+ .player-minimized {
25
+ align-items: center;
26
+ width: 100%;
27
+ }
28
+
29
+ .player-maximized {
30
+ position: fixed;
31
+ top: 0;
32
+ left: 0;
33
+ width: 100%;
34
+ height: 100%;
35
+ background-color: black;
36
+ display: flex;
37
+ justify-content: center;
38
+ align-items: center;
39
+ }
40
+
41
+ .player-mini-top {
42
+ display: flex;
43
+ }
44
+
45
+ .player-controls {
46
+ position: absolute;
47
+ top: 0;
48
+ left: 0;
49
+ background-color: rgba(0, 0, 0, 0.329);
50
+ width: 100%;
51
+ height: 100%;
52
+ z-index: 10;
53
+ display: flex;
54
+ flex-direction: column;
55
+ justify-content: space-between;
56
+ align-items: center;
57
+ transition: opacity 0.5s;
58
+ }
59
+
60
+ .player-controls.hide {
61
+ opacity: 0;
62
+ pointer-events: none;
63
+ }
64
+
65
+ .player-controls.show {
66
+ opacity: 1;
67
+ }
68
+
69
+
70
+ .player-controls-top {
71
+ background-image: linear-gradient(black, transparent);
72
+ width: 100%;
73
+ height: 30%;
74
+ padding-top: 10px;
75
+ padding-left: 10px;
76
+ padding-right: 10px;
77
+ display: flex;
78
+ flex-direction: row;
79
+ align-items: baseline;
80
+ justify-content: space-between;
81
+ }
82
+
83
+ .player-controls-center {
84
+ display: flex;
85
+ justify-content: center;
86
+ align-items: center;
87
+ position: absolute;
88
+ top: 50%;
89
+ left: 50%;
90
+ transform: translate(-50%, -50%);
91
+ width: 50%;
92
+ gap: 10%;
93
+ }
94
+ .player-controls-bottom {
95
+ background-image: linear-gradient(transparent, black);
96
+ width: 100%;
97
+ height: 30%;
98
+ display: flex;
99
+ flex-direction: column;
100
+ justify-content: end;
101
+ padding-bottom: 20px;
102
+ padding-left: 10px;
103
+ padding-right: 10px;
104
+ }
105
+
106
+ .player-control-bottom-top{
107
+ width: 100%;
108
+ display: flex;
109
+ gap: 5px;
110
+ }
111
+
112
+ .player-controls-down {
113
+ display: flex;
114
+ flex-direction: row;
115
+ width: 100%;
116
+ justify-content: center;
117
+ align-items: center;
118
+ }
119
+
120
+ .player-controls-left {
121
+ width: 100%;
122
+ display: flex;
123
+ justify-content: left;
124
+ }
125
+
126
+ .player-controls-right {
127
+ width: 100%;
128
+ display: flex;
129
+ justify-content: right;
130
+ }
131
+
132
+
133
+ .player-max-button {
134
+ font-size: 2.5rem;
135
+ }
136
+
137
+ .player-min-button {
138
+ font-size: 1.6rem;
139
+ }
140
+
141
+ .progress-bar-container {
142
+ position: relative;
143
+ background-color: #333;
144
+ overflow: hidden;
145
+ width: 100%;
146
+ height: 8px;
147
+ cursor: pointer;
148
+ margin: 7px 0;
149
+ border-radius: 10px;
150
+ }
151
+
152
+ .buffer-bar {
153
+ position: absolute;
154
+ top: 0;
155
+ left: 0;
156
+ height: 100%;
157
+ background-color: rgba(255, 255, 255, 0.4);
158
+ z-index: 1;
159
+ }
160
+
161
+ .progress-bar {
162
+ position: absolute;
163
+ top: 0;
164
+ left: 0;
165
+ height: 100%;
166
+ background-color: var(--foreground-secondary);
167
+ z-index: 2;
168
+ }
169
+
170
+ .player-controls-mini {
171
+
172
+ }
173
+
174
+ .player-mini-control-top {
175
+ display: flex;
176
+ justify-content: space-between;
177
+ padding-left: 5px;
178
+ padding-right: 5px;
179
+ }
180
+
181
+ .player-mini-control-center {
182
+ display: flex;
183
+ gap: 10px;
184
+ padding-left: 5px;
185
+ padding-right: 5px;
186
+ }
187
+
188
+ .player-mini-control-bottom {
189
+ display: flex;
190
+ padding-left: 5px;
191
+ padding-right: 5px;
192
+ padding-bottom: 10px;
193
+ gap: 5px;
194
+ }
195
+
196
+ /********** Range Input Styles **********/
197
+ /*Range Reset*/
198
+ input[type="range"] {
199
+ -webkit-appearance: none;
200
+ appearance: none;
201
+ background: transparent;
202
+ cursor: pointer;
203
+ }
204
+
205
+ /* Removes default focus */
206
+ input[type="range"]:focus {
207
+ outline: none;
208
+ }
209
+
210
+ /***** Chrome, Safari, Opera and Edge Chromium styles *****/
211
+ /* slider track */
212
+ input[type="range"]::-webkit-slider-runnable-track {
213
+ background-color: #403f4f;
214
+ border-radius: 0.5rem;
215
+ height: 0.3rem;
216
+ }
217
+
218
+ /* slider thumb */
219
+ input[type="range"]::-webkit-slider-thumb {
220
+ -webkit-appearance: none; /* Override default look */
221
+ appearance: none;
222
+ margin-top: -5px; /* Centers thumb on the track */
223
+ /*custom styles*/
224
+ background-color: var(--foreground-secondary);
225
+ height: 1rem;
226
+ width: 0.8rem;
227
+ border-radius: 10px;
228
+ }
229
+
230
+ /******** Firefox styles ********/
231
+ /* slider track */
232
+ input[type="range"]::-moz-range-track {
233
+ background-color: #403f4f;
234
+ border-radius: 0.5rem;
235
+ height: 0.5rem;
236
+ }
237
+
238
+ /* slider thumb */
239
+ input[type="range"]::-moz-range-thumb {
240
+ border: none; /*Removes extra border that FF applies*/
241
+ /*custom styles*/
242
+ background-color: var(--foreground-secondary);
243
+ height: 1.2rem;
244
+ width: 0.8rem;
245
+ border-radius: 10px;
246
+ }
247
+
248
+ ::cue {
249
+ color: rgb(199, 199, 199);
250
+ background-color: rgba(0, 0, 0, 0.7);
251
+ font-size: 1.3em;
252
+ line-height: 1.2; /* Adjust line height for spacing */
253
+ }
frontend/src/components/MusicPlayer.js ADDED
@@ -0,0 +1,365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState, useEffect, useRef } from "react";
2
+ import "./MusicPlayer.css";
3
+ import { useMusicPlayer } from "@/context/MusicPlayerContext";
4
+ import { IoPlayOutline, IoPauseOutline } from "react-icons/io5";
5
+ import { IoIosArrowDown, IoIosArrowUp } from "react-icons/io";
6
+ import {
7
+ TbRewindBackward5,
8
+ TbRewindForward5,
9
+ TbPlayerStop,
10
+ TbVolumeOff,
11
+ TbVolume,
12
+ TbPlayerSkipBack,
13
+ TbPlayerSkipForward,
14
+ TbPlaylist,
15
+ TbPlaylistOff,
16
+ } from "react-icons/tb";
17
+ import { RiFullscreenLine, RiFullscreenExitLine } from "react-icons/ri";
18
+ import { formatTime } from "./utils";
19
+
20
+ export default function MusicPlayer() {
21
+ const {
22
+ videoRef,
23
+ isPlayerVisible,
24
+ src,
25
+ isPlayerMaximized,
26
+ togglePlayerSize,
27
+ setIsPlayerVisible,
28
+ initializePlayer,
29
+ } = useMusicPlayer();
30
+
31
+ const [currentSrc, setCurrentSrc] = useState(src);
32
+ const [currentTime, setCurrentTime] = useState(0);
33
+ const [duration, setDuration] = useState(0);
34
+ const [progress, setProgress] = useState(0);
35
+ const [bufferProgress, setBufferProgress] = useState(0);
36
+ const [isPlaying, setIsPlaying] = useState(false);
37
+ const [showControls, setShowControls] = useState(true);
38
+ const [isBuffering, setIsBuffering] = useState(true);
39
+ const [volume, setVolume] = useState(1);
40
+ const [isMuted, setIsMuted] = useState(false);
41
+ const [isFullscreen, setIsFullscreen] = useState(false);
42
+ const overlayTimeout = useRef(null);
43
+ const seekTime = 5;
44
+
45
+ useEffect(() => {
46
+ if (!currentSrc) return;
47
+
48
+ const videoElement = videoRef.current;
49
+
50
+ const handleTimeUpdate = () => {
51
+ if (videoElement) {
52
+ setCurrentTime(videoElement.currentTime);
53
+ setProgress((videoElement.currentTime / videoElement.duration) * 100);
54
+ }
55
+ };
56
+
57
+ const handleLoadedMetadata = () => {
58
+ if (videoElement) {
59
+ setDuration(videoElement.duration);
60
+ setProgress(0);
61
+ setCurrentTime(0);
62
+ }
63
+ };
64
+
65
+ const handleProgress = () => {
66
+ const videoElement = videoRef.current;
67
+ if (videoElement.buffered.length > 0) {
68
+ const bufferEnd = videoElement.buffered.end(
69
+ videoElement.buffered.length - 1
70
+ );
71
+ const bufferValue = (bufferEnd / videoElement.duration) * 100;
72
+ setBufferProgress(bufferValue);
73
+ }
74
+ };
75
+
76
+ const handlePlay = () => setIsPlaying(true);
77
+ const handlePause = () => setIsPlaying(false);
78
+
79
+ if (videoElement) {
80
+ videoElement.addEventListener("timeupdate", handleTimeUpdate);
81
+ videoElement.addEventListener("loadedmetadata", handleLoadedMetadata);
82
+ videoElement.addEventListener("progress", handleProgress);
83
+ videoElement.addEventListener("play", handlePlay);
84
+ videoElement.addEventListener("pause", handlePause);
85
+ }
86
+
87
+ return () => {
88
+ if (videoElement) {
89
+ videoElement.removeEventListener("timeupdate", handleTimeUpdate);
90
+ videoElement.removeEventListener(
91
+ "loadedmetadata",
92
+ handleLoadedMetadata
93
+ );
94
+ videoElement.removeEventListener("progress", handleProgress);
95
+ videoElement.removeEventListener("play", handlePlay);
96
+ videoElement.removeEventListener("pause", handlePause);
97
+ }
98
+ };
99
+ }, [videoRef, currentSrc]);
100
+
101
+ useEffect(() => {
102
+ if (src !== currentSrc) {
103
+ setCurrentSrc(src);
104
+ }
105
+ }, [src, currentSrc]);
106
+
107
+ useEffect(() => {
108
+ if (showControls) {
109
+ if (overlayTimeout.current) {
110
+ clearTimeout(overlayTimeout.current);
111
+ }
112
+ overlayTimeout.current = setTimeout(() => setShowControls(false), 3000);
113
+ }
114
+
115
+ return () => clearTimeout(overlayTimeout.current);
116
+ }, [showControls]);
117
+
118
+ const togglePlayPause = () => {
119
+ if (videoRef.current) {
120
+ if (isPlaying) {
121
+ videoRef.current.pause();
122
+ } else {
123
+ videoRef.current.play();
124
+ }
125
+ setIsPlaying(!isPlaying);
126
+ }
127
+ };
128
+ const handleVolumeChange = (event) => {
129
+ let volumeValue = parseFloat(event.target.value);
130
+
131
+ // Ensure the volume is a finite number between 0 and 1
132
+ if (!isFinite(volumeValue) || volumeValue < 0) {
133
+ volumeValue = 0;
134
+ } else if (volumeValue > 1) {
135
+ volumeValue = 1;
136
+ }
137
+
138
+ setVolume(volumeValue);
139
+ if (videoRef.current) {
140
+ videoRef.current.volume = volumeValue;
141
+ }
142
+ setIsMuted(volumeValue === 0);
143
+ };
144
+
145
+ const toggleMute = () => {
146
+ if (isMuted) {
147
+ videoRef.current.volume = volume;
148
+ setIsMuted(false);
149
+ } else {
150
+ videoRef.current.volume = 0;
151
+ setIsMuted(true);
152
+ }
153
+ };
154
+
155
+ const toggleFullscreen = () => {
156
+ const doc = window.document;
157
+ const docEl = doc.documentElement;
158
+
159
+ const requestFullscreen =
160
+ docEl.requestFullscreen ||
161
+ docEl.mozRequestFullScreen ||
162
+ docEl.webkitRequestFullscreen ||
163
+ docEl.msRequestFullscreen;
164
+ const exitFullscreen =
165
+ doc.exitFullscreen ||
166
+ doc.mozCancelFullScreen ||
167
+ docEl.webkitExitFullscreen ||
168
+ doc.msExitFullscreen;
169
+
170
+ if (!isFullscreen) {
171
+ requestFullscreen.call(docEl);
172
+ } else {
173
+ exitFullscreen.call(doc);
174
+ }
175
+
176
+ setIsFullscreen(!isFullscreen);
177
+ };
178
+
179
+ const destroyPlayer = () => {
180
+ if (videoRef.current) {
181
+ initializePlayer("");
182
+ }
183
+ };
184
+
185
+ const handleProgressClick = (e) => {
186
+ const progressBar = e.currentTarget;
187
+ const rect = progressBar.getBoundingClientRect();
188
+ const clickX = e.clientX - rect.left;
189
+ const newTime = (clickX / rect.width) * duration;
190
+ if (videoRef.current) {
191
+ videoRef.current.currentTime = newTime;
192
+ setCurrentTime(newTime);
193
+ }
194
+ };
195
+
196
+ const handleFastForward = () => {
197
+ if (videoRef.current) {
198
+ videoRef.current.currentTime = Math.min(
199
+ videoRef.current.duration,
200
+ videoRef.current.currentTime + seekTime
201
+ );
202
+ }
203
+ };
204
+
205
+ const handleRewind = () => {
206
+ if (videoRef.current) {
207
+ videoRef.current.currentTime = Math.max(
208
+ 0,
209
+ videoRef.current.currentTime - seekTime
210
+ );
211
+ }
212
+ };
213
+ const handleMouseMove = () => {
214
+ setShowControls(true);
215
+ };
216
+ if (!isPlayerVisible || !currentSrc) return null;
217
+
218
+ return (
219
+ <div
220
+ className={
221
+ isPlayerMaximized
222
+ ? "player-maximized relative"
223
+ : "player-minimized relative"
224
+ }
225
+ onMouseMove={handleMouseMove}
226
+ >
227
+ {isPlayerMaximized && (
228
+ <div className={`player-controls ${showControls ? "show" : "hide"}`}>
229
+ <div className="player-controls-top">
230
+ <label className="music-title">{src}</label>
231
+ <button className="player-max-button" onClick={togglePlayerSize}>
232
+ <IoIosArrowDown />
233
+ </button>
234
+ </div>
235
+ <div className="player-controls-center">
236
+ <button className="player-max-button" onClick={handleRewind}>
237
+ <TbRewindBackward5 />
238
+ </button>
239
+ <button className="player-max-button" onClick={togglePlayPause}>
240
+ {isPlaying ? <IoPauseOutline /> : <IoPlayOutline />}
241
+ </button>
242
+ <button className="player-max-button" onClick={handleFastForward}>
243
+ <TbRewindForward5 />
244
+ </button>
245
+ </div>
246
+ <div className="player-controls-bottom">
247
+ <div className="player-control-bottom-top">
248
+ <label className="current-time">{formatTime(currentTime)}</label>
249
+ <div
250
+ className="progress-bar-container"
251
+ onClick={handleProgressClick}
252
+ >
253
+ <div
254
+ className="buffer-bar"
255
+ style={{ width: `${bufferProgress}%` }}
256
+ />
257
+ <div
258
+ className="progress-bar"
259
+ style={{ width: `${progress}%` }}
260
+ />
261
+ </div>
262
+ <label className="duration">{formatTime(duration)}</label>
263
+ </div>
264
+ <div className="player-controls-down">
265
+ <div className="player-controls-left">
266
+ <button
267
+ onClick={toggleMute}
268
+ className="player-min-button volumn-btn"
269
+ >
270
+ {isMuted ? <TbVolumeOff /> : <TbVolume />}
271
+ </button>
272
+ <input
273
+ type="range"
274
+ className="volume-control"
275
+ min="0"
276
+ max="1"
277
+ step="0.01"
278
+ value={volume}
279
+ onChange={handleVolumeChange}
280
+ />
281
+ <button
282
+ onClick={handleRewind}
283
+ className="previous-btn player-min-button"
284
+ >
285
+ <TbPlayerSkipBack />
286
+ </button>
287
+
288
+ <button
289
+ onClick={handleFastForward}
290
+ className="next-btn player-min-button"
291
+ >
292
+ <TbPlayerSkipForward />
293
+ </button>
294
+ {isPlaying ? (
295
+ <button className="playlist-btn player-min-button">
296
+ <TbPlaylist />
297
+ </button>
298
+ ) : (
299
+ <button
300
+ className="playlist-btn player-min-button"
301
+ disabled={true}
302
+ >
303
+ <TbPlaylistOff />
304
+ </button>
305
+ )}
306
+ </div>
307
+ <div className="player-controls-right">
308
+ <button onClick={toggleFullscreen} className="player-min-button">
309
+ {isFullscreen ? <RiFullscreenExitLine /> : <RiFullscreenLine />}
310
+ </button>
311
+ </div>
312
+ </div>
313
+ </div>
314
+
315
+ </div>
316
+ )}
317
+ <div className="player-mini-top">
318
+ <video
319
+ ref={videoRef}
320
+ src={currentSrc}
321
+ preload="metadata"
322
+ className="video-element"
323
+ autoPlay
324
+ />
325
+ {!isPlayerMaximized && (
326
+ <div className="player-controls-mini">
327
+ <div className="player-mini-control-top">
328
+ <label className="music-title mini">{src}</label>
329
+ <button className="player-min-button" onClick={togglePlayerSize}>
330
+ <IoIosArrowUp />
331
+ </button>
332
+ </div>
333
+ <div className="player-mini-control-center">
334
+ <button className="player-min-button" onClick={handleRewind}>
335
+ <TbRewindBackward5 />
336
+ </button>
337
+ <button className="player-min-button" onClick={togglePlayPause}>
338
+ {isPlaying ? <IoPauseOutline /> : <IoPlayOutline />}
339
+ </button>
340
+ <button className="player-min-button" onClick={handleFastForward}>
341
+ <TbRewindForward5 />
342
+ </button>
343
+ <button className="player-min-button" onClick={destroyPlayer}>
344
+ <TbPlayerStop />
345
+ </button>
346
+ </div>
347
+ </div>
348
+ )}
349
+ </div>
350
+ {!isPlayerMaximized && (
351
+ <div className="player-mini-control-bottom">
352
+ <label className="current-time">{formatTime(currentTime)}</label>
353
+ <div className="progress-bar-container" onClick={handleProgressClick}>
354
+ <div
355
+ className="buffer-bar"
356
+ style={{ width: `${bufferProgress}%` }}
357
+ />
358
+ <div className="progress-bar" style={{ width: `${progress}%` }} />
359
+ </div>
360
+ <label className="duration">{formatTime(duration)}</label>
361
+ </div>
362
+ )}
363
+ </div>
364
+ );
365
+ }
frontend/src/components/utils.js ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export const formatTime = (seconds) => {
2
+ if (isNaN(seconds)) {
3
+ return "0:00:00";
4
+ }
5
+ const wholeSeconds = Math.floor(seconds);
6
+ const hours = Math.floor(wholeSeconds / 3600);
7
+ const minutes = Math.floor((wholeSeconds % 3600) / 60);
8
+ const secs = wholeSeconds % 60;
9
+
10
+ const formattedHours = String(hours).padStart(1, "0");
11
+ const formattedMinutes = String(minutes).padStart(2, "0");
12
+ const formattedSeconds = String(secs).padStart(2, "0");
13
+ return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
14
+ };
frontend/src/context/MusicPlayerContext.js ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // MusicPlayerContext.js
2
+ "use client";
3
+
4
+ import React, { createContext, useContext, useRef, useState } from "react";
5
+
6
+ const MusicPlayerContext = createContext();
7
+
8
+ export const MusicPlayerProvider = ({ children }) => {
9
+ const videoRef = useRef(null);
10
+ const [src, setSrc] = useState("");
11
+ const [isPlayerVisible, setIsPlayerVisible] = useState(false);
12
+ const [isPlayerMaximized, setIsPlayerMaximized] = useState(false);
13
+
14
+ const initializePlayer = (source) => {
15
+ setSrc(source);
16
+ setIsPlayerVisible(true);
17
+ if (videoRef.current) {
18
+ videoRef.current.src = source;
19
+ videoRef.current.load();
20
+ }
21
+ };
22
+
23
+ const togglePlayerSize = () => setIsPlayerMaximized(!isPlayerMaximized);
24
+
25
+ return (
26
+ <MusicPlayerContext.Provider
27
+ value={{
28
+ videoRef,
29
+ initializePlayer,
30
+ isPlayerVisible,
31
+ src,
32
+ isPlayerMaximized,
33
+ togglePlayerSize,
34
+ setIsPlayerVisible
35
+ }}
36
+ >
37
+ {children}
38
+ </MusicPlayerContext.Provider>
39
+ );
40
+ };
41
+
42
+ export const useMusicPlayer = () => {
43
+ return useContext(MusicPlayerContext);
44
+ };
frontend/tailwind.config.js ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: [
4
+ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
5
+ "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
6
+ "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
7
+ ],
8
+ theme: {
9
+ extend: {
10
+ colors: {
11
+ background: "var(--background)",
12
+ foreground: "var(--foreground)",
13
+ },
14
+ },
15
+ },
16
+ plugins: [],
17
+ };