Florin Bobiș commited on
Commit
f3d88e5
1 Parent(s): f3d9593

initial navbar

Browse files
package-lock.json CHANGED
@@ -8,11 +8,18 @@
8
  "name": "atom-landing",
9
  "version": "0.1.0",
10
  "dependencies": {
 
 
11
  "@radix-ui/react-icons": "^1.3.0",
 
 
 
 
12
  "class-variance-authority": "^0.7.0",
13
  "clsx": "^2.1.1",
14
  "lucide-react": "^0.445.0",
15
  "next": "14.2.13",
 
16
  "react": "^18",
17
  "react-dom": "^18",
18
  "tailwind-merge": "^2.5.2",
@@ -101,6 +108,44 @@
101
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
102
  }
103
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  "node_modules/@humanwhocodes/config-array": {
105
  "version": "0.13.0",
106
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
@@ -319,170 +364,1112 @@
319
  "x64"
320
  ],
321
  "license": "MIT",
322
- "optional": true,
323
- "os": [
324
- "linux"
325
- ],
326
- "engines": {
327
- "node": ">= 10"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
328
  }
329
  },
330
- "node_modules/@next/swc-linux-x64-musl": {
331
- "version": "14.2.13",
332
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.13.tgz",
333
- "integrity": "sha512-4wWY7/OsSaJOOKvMsu1Teylku7vKyTuocvDLTZQq0TYv9OjiYYWt63PiE1nTuZnqQ4RPvME7Xai+9enoiN0Wrg==",
334
- "cpu": [
335
- "x64"
336
- ],
337
  "license": "MIT",
338
- "optional": true,
339
- "os": [
340
- "linux"
341
- ],
342
- "engines": {
343
- "node": ">= 10"
344
  }
345
  },
346
- "node_modules/@next/swc-win32-arm64-msvc": {
347
- "version": "14.2.13",
348
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.13.tgz",
349
- "integrity": "sha512-uP1XkqCqV2NVH9+g2sC7qIw+w2tRbcMiXFEbMihkQ8B1+V6m28sshBwAB0SDmOe0u44ne1vFU66+gx/28RsBVQ==",
350
- "cpu": [
351
- "arm64"
352
- ],
353
  "license": "MIT",
354
- "optional": true,
355
- "os": [
356
- "win32"
357
- ],
358
- "engines": {
359
- "node": ">= 10"
360
  }
361
  },
362
- "node_modules/@next/swc-win32-ia32-msvc": {
363
- "version": "14.2.13",
364
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.13.tgz",
365
- "integrity": "sha512-V26ezyjPqQpDBV4lcWIh8B/QICQ4v+M5Bo9ykLN+sqeKKBxJVDpEc6biDVyluTXTC40f5IqCU0ttth7Es2ZuMw==",
366
- "cpu": [
367
- "ia32"
368
- ],
369
  "license": "MIT",
370
- "optional": true,
371
- "os": [
372
- "win32"
373
- ],
374
- "engines": {
375
- "node": ">= 10"
376
  }
377
  },
378
- "node_modules/@next/swc-win32-x64-msvc": {
379
- "version": "14.2.13",
380
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.13.tgz",
381
- "integrity": "sha512-WwzOEAFBGhlDHE5Z73mNU8CO8mqMNLqaG+AO9ETmzdCQlJhVtWZnOl2+rqgVQS+YHunjOWptdFmNfbpwcUuEsw==",
382
- "cpu": [
383
- "x64"
384
- ],
385
  "license": "MIT",
386
- "optional": true,
387
- "os": [
388
- "win32"
389
- ],
390
- "engines": {
391
- "node": ">= 10"
392
  }
393
  },
394
- "node_modules/@nodelib/fs.scandir": {
395
- "version": "2.1.5",
396
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
397
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
398
  "license": "MIT",
399
  "dependencies": {
400
- "@nodelib/fs.stat": "2.0.5",
401
- "run-parallel": "^1.1.9"
402
- },
403
- "engines": {
404
- "node": ">= 8"
405
  }
406
  },
407
- "node_modules/@nodelib/fs.stat": {
408
- "version": "2.0.5",
409
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
410
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
411
  "license": "MIT",
412
- "engines": {
413
- "node": ">= 8"
414
  }
415
  },
416
- "node_modules/@nodelib/fs.walk": {
417
- "version": "1.2.8",
418
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
419
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  "license": "MIT",
421
  "dependencies": {
422
- "@nodelib/fs.scandir": "2.1.5",
423
- "fastq": "^1.6.0"
424
- },
425
- "engines": {
426
- "node": ">= 8"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  }
428
  },
429
- "node_modules/@nolyfill/is-core-module": {
430
- "version": "1.0.39",
431
- "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
432
- "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
433
- "dev": true,
434
  "license": "MIT",
435
- "engines": {
436
- "node": ">=12.4.0"
437
  }
438
  },
439
- "node_modules/@pkgjs/parseargs": {
440
- "version": "0.11.0",
441
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
442
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
443
  "license": "MIT",
444
- "optional": true,
445
- "engines": {
446
- "node": ">=14"
447
  }
448
  },
449
- "node_modules/@radix-ui/react-icons": {
450
- "version": "1.3.0",
451
- "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz",
452
- "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==",
453
  "license": "MIT",
454
- "peerDependencies": {
455
- "react": "^16.x || ^17.x || ^18.x"
456
  }
457
  },
458
- "node_modules/@rtsao/scc": {
459
- "version": "1.1.0",
460
- "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
461
- "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
462
- "dev": true,
463
- "license": "MIT"
 
 
464
  },
465
- "node_modules/@rushstack/eslint-patch": {
466
- "version": "1.10.4",
467
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
468
- "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==",
469
- "dev": true,
470
- "license": "MIT"
 
 
471
  },
472
- "node_modules/@swc/counter": {
473
- "version": "0.1.3",
474
- "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
475
- "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
476
- "license": "Apache-2.0"
 
 
 
477
  },
478
- "node_modules/@swc/helpers": {
479
- "version": "0.5.5",
480
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
481
- "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
482
- "license": "Apache-2.0",
483
  "dependencies": {
484
- "@swc/counter": "^0.1.3",
485
- "tslib": "^2.4.0"
486
  }
487
  },
488
  "node_modules/@types/json5": {
@@ -506,14 +1493,14 @@
506
  "version": "15.7.13",
507
  "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
508
  "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
509
- "dev": true,
510
  "license": "MIT"
511
  },
512
  "node_modules/@types/react": {
513
  "version": "18.3.8",
514
  "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
515
  "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
516
- "dev": true,
517
  "license": "MIT",
518
  "dependencies": {
519
  "@types/prop-types": "*",
@@ -524,7 +1511,7 @@
524
  "version": "18.3.0",
525
  "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
526
  "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
527
- "dev": true,
528
  "license": "MIT",
529
  "dependencies": {
530
  "@types/react": "*"
@@ -849,6 +1836,18 @@
849
  "dev": true,
850
  "license": "Python-2.0"
851
  },
 
 
 
 
 
 
 
 
 
 
 
 
852
  "node_modules/aria-query": {
853
  "version": "5.1.3",
854
  "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
@@ -1324,7 +2323,7 @@
1324
  "version": "3.1.3",
1325
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1326
  "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1327
- "dev": true,
1328
  "license": "MIT"
1329
  },
1330
  "node_modules/damerau-levenshtein": {
@@ -1482,6 +2481,12 @@
1482
  "url": "https://github.com/sponsors/ljharb"
1483
  }
1484
  },
 
 
 
 
 
 
1485
  "node_modules/didyoumean": {
1486
  "version": "1.2.2",
1487
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -2408,6 +3413,15 @@
2408
  "url": "https://github.com/sponsors/ljharb"
2409
  }
2410
  },
 
 
 
 
 
 
 
 
 
2411
  "node_modules/get-symbol-description": {
2412
  "version": "1.0.2",
2413
  "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
@@ -2714,6 +3728,15 @@
2714
  "node": ">= 0.4"
2715
  }
2716
  },
 
 
 
 
 
 
 
 
 
2717
  "node_modules/is-arguments": {
2718
  "version": "1.1.1",
2719
  "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
@@ -3512,6 +4535,16 @@
3512
  }
3513
  }
3514
  },
 
 
 
 
 
 
 
 
 
 
3515
  "node_modules/next/node_modules/postcss": {
3516
  "version": "8.4.31",
3517
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -4102,6 +5135,76 @@
4102
  "dev": true,
4103
  "license": "MIT"
4104
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4105
  "node_modules/read-cache": {
4106
  "version": "1.0.0",
4107
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -5026,6 +6129,49 @@
5026
  "punycode": "^2.1.0"
5027
  }
5028
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5029
  "node_modules/util-deprecate": {
5030
  "version": "1.0.2",
5031
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
 
8
  "name": "atom-landing",
9
  "version": "0.1.0",
10
  "dependencies": {
11
+ "@radix-ui/react-dialog": "^1.1.1",
12
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
13
  "@radix-ui/react-icons": "^1.3.0",
14
+ "@radix-ui/react-slot": "^1.1.0",
15
+ "@tsparticles/engine": "^3.5.0",
16
+ "@tsparticles/react": "^3.0.0",
17
+ "@tsparticles/slim": "^3.5.0",
18
  "class-variance-authority": "^0.7.0",
19
  "clsx": "^2.1.1",
20
  "lucide-react": "^0.445.0",
21
  "next": "14.2.13",
22
+ "next-themes": "^0.3.0",
23
  "react": "^18",
24
  "react-dom": "^18",
25
  "tailwind-merge": "^2.5.2",
 
108
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
109
  }
110
  },
111
+ "node_modules/@floating-ui/core": {
112
+ "version": "1.6.8",
113
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
114
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
115
+ "license": "MIT",
116
+ "dependencies": {
117
+ "@floating-ui/utils": "^0.2.8"
118
+ }
119
+ },
120
+ "node_modules/@floating-ui/dom": {
121
+ "version": "1.6.11",
122
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz",
123
+ "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==",
124
+ "license": "MIT",
125
+ "dependencies": {
126
+ "@floating-ui/core": "^1.6.0",
127
+ "@floating-ui/utils": "^0.2.8"
128
+ }
129
+ },
130
+ "node_modules/@floating-ui/react-dom": {
131
+ "version": "2.1.2",
132
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
133
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
134
+ "license": "MIT",
135
+ "dependencies": {
136
+ "@floating-ui/dom": "^1.0.0"
137
+ },
138
+ "peerDependencies": {
139
+ "react": ">=16.8.0",
140
+ "react-dom": ">=16.8.0"
141
+ }
142
+ },
143
+ "node_modules/@floating-ui/utils": {
144
+ "version": "0.2.8",
145
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
146
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
147
+ "license": "MIT"
148
+ },
149
  "node_modules/@humanwhocodes/config-array": {
150
  "version": "0.13.0",
151
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
 
364
  "x64"
365
  ],
366
  "license": "MIT",
367
+ "optional": true,
368
+ "os": [
369
+ "linux"
370
+ ],
371
+ "engines": {
372
+ "node": ">= 10"
373
+ }
374
+ },
375
+ "node_modules/@next/swc-linux-x64-musl": {
376
+ "version": "14.2.13",
377
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.13.tgz",
378
+ "integrity": "sha512-4wWY7/OsSaJOOKvMsu1Teylku7vKyTuocvDLTZQq0TYv9OjiYYWt63PiE1nTuZnqQ4RPvME7Xai+9enoiN0Wrg==",
379
+ "cpu": [
380
+ "x64"
381
+ ],
382
+ "license": "MIT",
383
+ "optional": true,
384
+ "os": [
385
+ "linux"
386
+ ],
387
+ "engines": {
388
+ "node": ">= 10"
389
+ }
390
+ },
391
+ "node_modules/@next/swc-win32-arm64-msvc": {
392
+ "version": "14.2.13",
393
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.13.tgz",
394
+ "integrity": "sha512-uP1XkqCqV2NVH9+g2sC7qIw+w2tRbcMiXFEbMihkQ8B1+V6m28sshBwAB0SDmOe0u44ne1vFU66+gx/28RsBVQ==",
395
+ "cpu": [
396
+ "arm64"
397
+ ],
398
+ "license": "MIT",
399
+ "optional": true,
400
+ "os": [
401
+ "win32"
402
+ ],
403
+ "engines": {
404
+ "node": ">= 10"
405
+ }
406
+ },
407
+ "node_modules/@next/swc-win32-ia32-msvc": {
408
+ "version": "14.2.13",
409
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.13.tgz",
410
+ "integrity": "sha512-V26ezyjPqQpDBV4lcWIh8B/QICQ4v+M5Bo9ykLN+sqeKKBxJVDpEc6biDVyluTXTC40f5IqCU0ttth7Es2ZuMw==",
411
+ "cpu": [
412
+ "ia32"
413
+ ],
414
+ "license": "MIT",
415
+ "optional": true,
416
+ "os": [
417
+ "win32"
418
+ ],
419
+ "engines": {
420
+ "node": ">= 10"
421
+ }
422
+ },
423
+ "node_modules/@next/swc-win32-x64-msvc": {
424
+ "version": "14.2.13",
425
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.13.tgz",
426
+ "integrity": "sha512-WwzOEAFBGhlDHE5Z73mNU8CO8mqMNLqaG+AO9ETmzdCQlJhVtWZnOl2+rqgVQS+YHunjOWptdFmNfbpwcUuEsw==",
427
+ "cpu": [
428
+ "x64"
429
+ ],
430
+ "license": "MIT",
431
+ "optional": true,
432
+ "os": [
433
+ "win32"
434
+ ],
435
+ "engines": {
436
+ "node": ">= 10"
437
+ }
438
+ },
439
+ "node_modules/@nodelib/fs.scandir": {
440
+ "version": "2.1.5",
441
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
442
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
443
+ "license": "MIT",
444
+ "dependencies": {
445
+ "@nodelib/fs.stat": "2.0.5",
446
+ "run-parallel": "^1.1.9"
447
+ },
448
+ "engines": {
449
+ "node": ">= 8"
450
+ }
451
+ },
452
+ "node_modules/@nodelib/fs.stat": {
453
+ "version": "2.0.5",
454
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
455
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
456
+ "license": "MIT",
457
+ "engines": {
458
+ "node": ">= 8"
459
+ }
460
+ },
461
+ "node_modules/@nodelib/fs.walk": {
462
+ "version": "1.2.8",
463
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
464
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
465
+ "license": "MIT",
466
+ "dependencies": {
467
+ "@nodelib/fs.scandir": "2.1.5",
468
+ "fastq": "^1.6.0"
469
+ },
470
+ "engines": {
471
+ "node": ">= 8"
472
+ }
473
+ },
474
+ "node_modules/@nolyfill/is-core-module": {
475
+ "version": "1.0.39",
476
+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
477
+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
478
+ "dev": true,
479
+ "license": "MIT",
480
+ "engines": {
481
+ "node": ">=12.4.0"
482
+ }
483
+ },
484
+ "node_modules/@pkgjs/parseargs": {
485
+ "version": "0.11.0",
486
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
487
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
488
+ "license": "MIT",
489
+ "optional": true,
490
+ "engines": {
491
+ "node": ">=14"
492
+ }
493
+ },
494
+ "node_modules/@radix-ui/primitive": {
495
+ "version": "1.1.0",
496
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
497
+ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==",
498
+ "license": "MIT"
499
+ },
500
+ "node_modules/@radix-ui/react-arrow": {
501
+ "version": "1.1.0",
502
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
503
+ "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
504
+ "license": "MIT",
505
+ "dependencies": {
506
+ "@radix-ui/react-primitive": "2.0.0"
507
+ },
508
+ "peerDependencies": {
509
+ "@types/react": "*",
510
+ "@types/react-dom": "*",
511
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
512
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
513
+ },
514
+ "peerDependenciesMeta": {
515
+ "@types/react": {
516
+ "optional": true
517
+ },
518
+ "@types/react-dom": {
519
+ "optional": true
520
+ }
521
+ }
522
+ },
523
+ "node_modules/@radix-ui/react-collection": {
524
+ "version": "1.1.0",
525
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
526
+ "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
527
+ "license": "MIT",
528
+ "dependencies": {
529
+ "@radix-ui/react-compose-refs": "1.1.0",
530
+ "@radix-ui/react-context": "1.1.0",
531
+ "@radix-ui/react-primitive": "2.0.0",
532
+ "@radix-ui/react-slot": "1.1.0"
533
+ },
534
+ "peerDependencies": {
535
+ "@types/react": "*",
536
+ "@types/react-dom": "*",
537
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
538
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
539
+ },
540
+ "peerDependenciesMeta": {
541
+ "@types/react": {
542
+ "optional": true
543
+ },
544
+ "@types/react-dom": {
545
+ "optional": true
546
+ }
547
+ }
548
+ },
549
+ "node_modules/@radix-ui/react-compose-refs": {
550
+ "version": "1.1.0",
551
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
552
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
553
+ "license": "MIT",
554
+ "peerDependencies": {
555
+ "@types/react": "*",
556
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
557
+ },
558
+ "peerDependenciesMeta": {
559
+ "@types/react": {
560
+ "optional": true
561
+ }
562
+ }
563
+ },
564
+ "node_modules/@radix-ui/react-context": {
565
+ "version": "1.1.0",
566
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
567
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
568
+ "license": "MIT",
569
+ "peerDependencies": {
570
+ "@types/react": "*",
571
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
572
+ },
573
+ "peerDependenciesMeta": {
574
+ "@types/react": {
575
+ "optional": true
576
+ }
577
+ }
578
+ },
579
+ "node_modules/@radix-ui/react-dialog": {
580
+ "version": "1.1.1",
581
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.1.tgz",
582
+ "integrity": "sha512-zysS+iU4YP3STKNS6USvFVqI4qqx8EpiwmT5TuCApVEBca+eRCbONi4EgzfNSuVnOXvC5UPHHMjs8RXO6DH9Bg==",
583
+ "license": "MIT",
584
+ "dependencies": {
585
+ "@radix-ui/primitive": "1.1.0",
586
+ "@radix-ui/react-compose-refs": "1.1.0",
587
+ "@radix-ui/react-context": "1.1.0",
588
+ "@radix-ui/react-dismissable-layer": "1.1.0",
589
+ "@radix-ui/react-focus-guards": "1.1.0",
590
+ "@radix-ui/react-focus-scope": "1.1.0",
591
+ "@radix-ui/react-id": "1.1.0",
592
+ "@radix-ui/react-portal": "1.1.1",
593
+ "@radix-ui/react-presence": "1.1.0",
594
+ "@radix-ui/react-primitive": "2.0.0",
595
+ "@radix-ui/react-slot": "1.1.0",
596
+ "@radix-ui/react-use-controllable-state": "1.1.0",
597
+ "aria-hidden": "^1.1.1",
598
+ "react-remove-scroll": "2.5.7"
599
+ },
600
+ "peerDependencies": {
601
+ "@types/react": "*",
602
+ "@types/react-dom": "*",
603
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
604
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
605
+ },
606
+ "peerDependenciesMeta": {
607
+ "@types/react": {
608
+ "optional": true
609
+ },
610
+ "@types/react-dom": {
611
+ "optional": true
612
+ }
613
+ }
614
+ },
615
+ "node_modules/@radix-ui/react-direction": {
616
+ "version": "1.1.0",
617
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
618
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
619
+ "license": "MIT",
620
+ "peerDependencies": {
621
+ "@types/react": "*",
622
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
623
+ },
624
+ "peerDependenciesMeta": {
625
+ "@types/react": {
626
+ "optional": true
627
+ }
628
+ }
629
+ },
630
+ "node_modules/@radix-ui/react-dismissable-layer": {
631
+ "version": "1.1.0",
632
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.0.tgz",
633
+ "integrity": "sha512-/UovfmmXGptwGcBQawLzvn2jOfM0t4z3/uKffoBlj724+n3FvBbZ7M0aaBOmkp6pqFYpO4yx8tSVJjx3Fl2jig==",
634
+ "license": "MIT",
635
+ "dependencies": {
636
+ "@radix-ui/primitive": "1.1.0",
637
+ "@radix-ui/react-compose-refs": "1.1.0",
638
+ "@radix-ui/react-primitive": "2.0.0",
639
+ "@radix-ui/react-use-callback-ref": "1.1.0",
640
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
641
+ },
642
+ "peerDependencies": {
643
+ "@types/react": "*",
644
+ "@types/react-dom": "*",
645
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
646
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
647
+ },
648
+ "peerDependenciesMeta": {
649
+ "@types/react": {
650
+ "optional": true
651
+ },
652
+ "@types/react-dom": {
653
+ "optional": true
654
+ }
655
+ }
656
+ },
657
+ "node_modules/@radix-ui/react-dropdown-menu": {
658
+ "version": "2.1.1",
659
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.1.tgz",
660
+ "integrity": "sha512-y8E+x9fBq9qvteD2Zwa4397pUVhYsh9iq44b5RD5qu1GMJWBCBuVg1hMyItbc6+zH00TxGRqd9Iot4wzf3OoBQ==",
661
+ "license": "MIT",
662
+ "dependencies": {
663
+ "@radix-ui/primitive": "1.1.0",
664
+ "@radix-ui/react-compose-refs": "1.1.0",
665
+ "@radix-ui/react-context": "1.1.0",
666
+ "@radix-ui/react-id": "1.1.0",
667
+ "@radix-ui/react-menu": "2.1.1",
668
+ "@radix-ui/react-primitive": "2.0.0",
669
+ "@radix-ui/react-use-controllable-state": "1.1.0"
670
+ },
671
+ "peerDependencies": {
672
+ "@types/react": "*",
673
+ "@types/react-dom": "*",
674
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
675
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
676
+ },
677
+ "peerDependenciesMeta": {
678
+ "@types/react": {
679
+ "optional": true
680
+ },
681
+ "@types/react-dom": {
682
+ "optional": true
683
+ }
684
+ }
685
+ },
686
+ "node_modules/@radix-ui/react-focus-guards": {
687
+ "version": "1.1.0",
688
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.0.tgz",
689
+ "integrity": "sha512-w6XZNUPVv6xCpZUqb/yN9DL6auvpGX3C/ee6Hdi16v2UUy25HV2Q5bcflsiDyT/g5RwbPQ/GIT1vLkeRb+ITBw==",
690
+ "license": "MIT",
691
+ "peerDependencies": {
692
+ "@types/react": "*",
693
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
694
+ },
695
+ "peerDependenciesMeta": {
696
+ "@types/react": {
697
+ "optional": true
698
+ }
699
+ }
700
+ },
701
+ "node_modules/@radix-ui/react-focus-scope": {
702
+ "version": "1.1.0",
703
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
704
+ "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
705
+ "license": "MIT",
706
+ "dependencies": {
707
+ "@radix-ui/react-compose-refs": "1.1.0",
708
+ "@radix-ui/react-primitive": "2.0.0",
709
+ "@radix-ui/react-use-callback-ref": "1.1.0"
710
+ },
711
+ "peerDependencies": {
712
+ "@types/react": "*",
713
+ "@types/react-dom": "*",
714
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
715
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
716
+ },
717
+ "peerDependenciesMeta": {
718
+ "@types/react": {
719
+ "optional": true
720
+ },
721
+ "@types/react-dom": {
722
+ "optional": true
723
+ }
724
+ }
725
+ },
726
+ "node_modules/@radix-ui/react-icons": {
727
+ "version": "1.3.0",
728
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz",
729
+ "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==",
730
+ "license": "MIT",
731
+ "peerDependencies": {
732
+ "react": "^16.x || ^17.x || ^18.x"
733
+ }
734
+ },
735
+ "node_modules/@radix-ui/react-id": {
736
+ "version": "1.1.0",
737
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
738
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
739
+ "license": "MIT",
740
+ "dependencies": {
741
+ "@radix-ui/react-use-layout-effect": "1.1.0"
742
+ },
743
+ "peerDependencies": {
744
+ "@types/react": "*",
745
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
746
+ },
747
+ "peerDependenciesMeta": {
748
+ "@types/react": {
749
+ "optional": true
750
+ }
751
+ }
752
+ },
753
+ "node_modules/@radix-ui/react-menu": {
754
+ "version": "2.1.1",
755
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.1.tgz",
756
+ "integrity": "sha512-oa3mXRRVjHi6DZu/ghuzdylyjaMXLymx83irM7hTxutQbD+7IhPKdMdRHD26Rm+kHRrWcrUkkRPv5pd47a2xFQ==",
757
+ "license": "MIT",
758
+ "dependencies": {
759
+ "@radix-ui/primitive": "1.1.0",
760
+ "@radix-ui/react-collection": "1.1.0",
761
+ "@radix-ui/react-compose-refs": "1.1.0",
762
+ "@radix-ui/react-context": "1.1.0",
763
+ "@radix-ui/react-direction": "1.1.0",
764
+ "@radix-ui/react-dismissable-layer": "1.1.0",
765
+ "@radix-ui/react-focus-guards": "1.1.0",
766
+ "@radix-ui/react-focus-scope": "1.1.0",
767
+ "@radix-ui/react-id": "1.1.0",
768
+ "@radix-ui/react-popper": "1.2.0",
769
+ "@radix-ui/react-portal": "1.1.1",
770
+ "@radix-ui/react-presence": "1.1.0",
771
+ "@radix-ui/react-primitive": "2.0.0",
772
+ "@radix-ui/react-roving-focus": "1.1.0",
773
+ "@radix-ui/react-slot": "1.1.0",
774
+ "@radix-ui/react-use-callback-ref": "1.1.0",
775
+ "aria-hidden": "^1.1.1",
776
+ "react-remove-scroll": "2.5.7"
777
+ },
778
+ "peerDependencies": {
779
+ "@types/react": "*",
780
+ "@types/react-dom": "*",
781
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
782
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
783
+ },
784
+ "peerDependenciesMeta": {
785
+ "@types/react": {
786
+ "optional": true
787
+ },
788
+ "@types/react-dom": {
789
+ "optional": true
790
+ }
791
+ }
792
+ },
793
+ "node_modules/@radix-ui/react-popper": {
794
+ "version": "1.2.0",
795
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
796
+ "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
797
+ "license": "MIT",
798
+ "dependencies": {
799
+ "@floating-ui/react-dom": "^2.0.0",
800
+ "@radix-ui/react-arrow": "1.1.0",
801
+ "@radix-ui/react-compose-refs": "1.1.0",
802
+ "@radix-ui/react-context": "1.1.0",
803
+ "@radix-ui/react-primitive": "2.0.0",
804
+ "@radix-ui/react-use-callback-ref": "1.1.0",
805
+ "@radix-ui/react-use-layout-effect": "1.1.0",
806
+ "@radix-ui/react-use-rect": "1.1.0",
807
+ "@radix-ui/react-use-size": "1.1.0",
808
+ "@radix-ui/rect": "1.1.0"
809
+ },
810
+ "peerDependencies": {
811
+ "@types/react": "*",
812
+ "@types/react-dom": "*",
813
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
814
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
815
+ },
816
+ "peerDependenciesMeta": {
817
+ "@types/react": {
818
+ "optional": true
819
+ },
820
+ "@types/react-dom": {
821
+ "optional": true
822
+ }
823
+ }
824
+ },
825
+ "node_modules/@radix-ui/react-portal": {
826
+ "version": "1.1.1",
827
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.1.tgz",
828
+ "integrity": "sha512-A3UtLk85UtqhzFqtoC8Q0KvR2GbXF3mtPgACSazajqq6A41mEQgo53iPzY4i6BwDxlIFqWIhiQ2G729n+2aw/g==",
829
+ "license": "MIT",
830
+ "dependencies": {
831
+ "@radix-ui/react-primitive": "2.0.0",
832
+ "@radix-ui/react-use-layout-effect": "1.1.0"
833
+ },
834
+ "peerDependencies": {
835
+ "@types/react": "*",
836
+ "@types/react-dom": "*",
837
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
838
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
839
+ },
840
+ "peerDependenciesMeta": {
841
+ "@types/react": {
842
+ "optional": true
843
+ },
844
+ "@types/react-dom": {
845
+ "optional": true
846
+ }
847
+ }
848
+ },
849
+ "node_modules/@radix-ui/react-presence": {
850
+ "version": "1.1.0",
851
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.0.tgz",
852
+ "integrity": "sha512-Gq6wuRN/asf9H/E/VzdKoUtT8GC9PQc9z40/vEr0VCJ4u5XvvhWIrSsCB6vD2/cH7ugTdSfYq9fLJCcM00acrQ==",
853
+ "license": "MIT",
854
+ "dependencies": {
855
+ "@radix-ui/react-compose-refs": "1.1.0",
856
+ "@radix-ui/react-use-layout-effect": "1.1.0"
857
+ },
858
+ "peerDependencies": {
859
+ "@types/react": "*",
860
+ "@types/react-dom": "*",
861
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
862
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
863
+ },
864
+ "peerDependenciesMeta": {
865
+ "@types/react": {
866
+ "optional": true
867
+ },
868
+ "@types/react-dom": {
869
+ "optional": true
870
+ }
871
+ }
872
+ },
873
+ "node_modules/@radix-ui/react-primitive": {
874
+ "version": "2.0.0",
875
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
876
+ "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
877
+ "license": "MIT",
878
+ "dependencies": {
879
+ "@radix-ui/react-slot": "1.1.0"
880
+ },
881
+ "peerDependencies": {
882
+ "@types/react": "*",
883
+ "@types/react-dom": "*",
884
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
885
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
886
+ },
887
+ "peerDependenciesMeta": {
888
+ "@types/react": {
889
+ "optional": true
890
+ },
891
+ "@types/react-dom": {
892
+ "optional": true
893
+ }
894
+ }
895
+ },
896
+ "node_modules/@radix-ui/react-roving-focus": {
897
+ "version": "1.1.0",
898
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
899
+ "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==",
900
+ "license": "MIT",
901
+ "dependencies": {
902
+ "@radix-ui/primitive": "1.1.0",
903
+ "@radix-ui/react-collection": "1.1.0",
904
+ "@radix-ui/react-compose-refs": "1.1.0",
905
+ "@radix-ui/react-context": "1.1.0",
906
+ "@radix-ui/react-direction": "1.1.0",
907
+ "@radix-ui/react-id": "1.1.0",
908
+ "@radix-ui/react-primitive": "2.0.0",
909
+ "@radix-ui/react-use-callback-ref": "1.1.0",
910
+ "@radix-ui/react-use-controllable-state": "1.1.0"
911
+ },
912
+ "peerDependencies": {
913
+ "@types/react": "*",
914
+ "@types/react-dom": "*",
915
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
916
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
917
+ },
918
+ "peerDependenciesMeta": {
919
+ "@types/react": {
920
+ "optional": true
921
+ },
922
+ "@types/react-dom": {
923
+ "optional": true
924
+ }
925
+ }
926
+ },
927
+ "node_modules/@radix-ui/react-slot": {
928
+ "version": "1.1.0",
929
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
930
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
931
+ "license": "MIT",
932
+ "dependencies": {
933
+ "@radix-ui/react-compose-refs": "1.1.0"
934
+ },
935
+ "peerDependencies": {
936
+ "@types/react": "*",
937
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
938
+ },
939
+ "peerDependenciesMeta": {
940
+ "@types/react": {
941
+ "optional": true
942
+ }
943
+ }
944
+ },
945
+ "node_modules/@radix-ui/react-use-callback-ref": {
946
+ "version": "1.1.0",
947
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
948
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
949
+ "license": "MIT",
950
+ "peerDependencies": {
951
+ "@types/react": "*",
952
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
953
+ },
954
+ "peerDependenciesMeta": {
955
+ "@types/react": {
956
+ "optional": true
957
+ }
958
+ }
959
+ },
960
+ "node_modules/@radix-ui/react-use-controllable-state": {
961
+ "version": "1.1.0",
962
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
963
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
964
+ "license": "MIT",
965
+ "dependencies": {
966
+ "@radix-ui/react-use-callback-ref": "1.1.0"
967
+ },
968
+ "peerDependencies": {
969
+ "@types/react": "*",
970
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
971
+ },
972
+ "peerDependenciesMeta": {
973
+ "@types/react": {
974
+ "optional": true
975
+ }
976
+ }
977
+ },
978
+ "node_modules/@radix-ui/react-use-escape-keydown": {
979
+ "version": "1.1.0",
980
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
981
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
982
+ "license": "MIT",
983
+ "dependencies": {
984
+ "@radix-ui/react-use-callback-ref": "1.1.0"
985
+ },
986
+ "peerDependencies": {
987
+ "@types/react": "*",
988
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
989
+ },
990
+ "peerDependenciesMeta": {
991
+ "@types/react": {
992
+ "optional": true
993
+ }
994
+ }
995
+ },
996
+ "node_modules/@radix-ui/react-use-layout-effect": {
997
+ "version": "1.1.0",
998
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
999
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
1000
+ "license": "MIT",
1001
+ "peerDependencies": {
1002
+ "@types/react": "*",
1003
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1004
+ },
1005
+ "peerDependenciesMeta": {
1006
+ "@types/react": {
1007
+ "optional": true
1008
+ }
1009
+ }
1010
+ },
1011
+ "node_modules/@radix-ui/react-use-rect": {
1012
+ "version": "1.1.0",
1013
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
1014
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
1015
+ "license": "MIT",
1016
+ "dependencies": {
1017
+ "@radix-ui/rect": "1.1.0"
1018
+ },
1019
+ "peerDependencies": {
1020
+ "@types/react": "*",
1021
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1022
+ },
1023
+ "peerDependenciesMeta": {
1024
+ "@types/react": {
1025
+ "optional": true
1026
+ }
1027
+ }
1028
+ },
1029
+ "node_modules/@radix-ui/react-use-size": {
1030
+ "version": "1.1.0",
1031
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
1032
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
1033
+ "license": "MIT",
1034
+ "dependencies": {
1035
+ "@radix-ui/react-use-layout-effect": "1.1.0"
1036
+ },
1037
+ "peerDependencies": {
1038
+ "@types/react": "*",
1039
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1040
+ },
1041
+ "peerDependenciesMeta": {
1042
+ "@types/react": {
1043
+ "optional": true
1044
+ }
1045
+ }
1046
+ },
1047
+ "node_modules/@radix-ui/rect": {
1048
+ "version": "1.1.0",
1049
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
1050
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==",
1051
+ "license": "MIT"
1052
+ },
1053
+ "node_modules/@rtsao/scc": {
1054
+ "version": "1.1.0",
1055
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
1056
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
1057
+ "dev": true,
1058
+ "license": "MIT"
1059
+ },
1060
+ "node_modules/@rushstack/eslint-patch": {
1061
+ "version": "1.10.4",
1062
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
1063
+ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==",
1064
+ "dev": true,
1065
+ "license": "MIT"
1066
+ },
1067
+ "node_modules/@swc/counter": {
1068
+ "version": "0.1.3",
1069
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
1070
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
1071
+ "license": "Apache-2.0"
1072
+ },
1073
+ "node_modules/@swc/helpers": {
1074
+ "version": "0.5.5",
1075
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz",
1076
+ "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==",
1077
+ "license": "Apache-2.0",
1078
+ "dependencies": {
1079
+ "@swc/counter": "^0.1.3",
1080
+ "tslib": "^2.4.0"
1081
+ }
1082
+ },
1083
+ "node_modules/@tsparticles/basic": {
1084
+ "version": "3.5.0",
1085
+ "resolved": "https://registry.npmjs.org/@tsparticles/basic/-/basic-3.5.0.tgz",
1086
+ "integrity": "sha512-oty33TxM2aHWrzcwWRic1bQ04KBCdpnvzv8JXEkx5Uyp70vgVegUbtKmwGki3shqKZIt3v2qE4I8NsK6onhLrA==",
1087
+ "funding": [
1088
+ {
1089
+ "type": "github",
1090
+ "url": "https://github.com/sponsors/matteobruni"
1091
+ },
1092
+ {
1093
+ "type": "github",
1094
+ "url": "https://github.com/sponsors/tsparticles"
1095
+ },
1096
+ {
1097
+ "type": "buymeacoffee",
1098
+ "url": "https://www.buymeacoffee.com/matteobruni"
1099
+ }
1100
+ ],
1101
+ "license": "MIT",
1102
+ "dependencies": {
1103
+ "@tsparticles/engine": "^3.5.0",
1104
+ "@tsparticles/move-base": "^3.5.0",
1105
+ "@tsparticles/shape-circle": "^3.5.0",
1106
+ "@tsparticles/updater-color": "^3.5.0",
1107
+ "@tsparticles/updater-opacity": "^3.5.0",
1108
+ "@tsparticles/updater-out-modes": "^3.5.0",
1109
+ "@tsparticles/updater-size": "^3.5.0"
1110
+ }
1111
+ },
1112
+ "node_modules/@tsparticles/engine": {
1113
+ "version": "3.5.0",
1114
+ "resolved": "https://registry.npmjs.org/@tsparticles/engine/-/engine-3.5.0.tgz",
1115
+ "integrity": "sha512-RCwrJ2SvSYdhXJ24oUCjSUKEZQ9lXwObOWMvfMC9vS6/bk+Qo0N7Xx8AfumqzP/LebB1YJdlCvuoJMauAon0Pg==",
1116
+ "funding": [
1117
+ {
1118
+ "type": "github",
1119
+ "url": "https://github.com/sponsors/matteobruni"
1120
+ },
1121
+ {
1122
+ "type": "github",
1123
+ "url": "https://github.com/sponsors/tsparticles"
1124
+ },
1125
+ {
1126
+ "type": "buymeacoffee",
1127
+ "url": "https://www.buymeacoffee.com/matteobruni"
1128
+ }
1129
+ ],
1130
+ "hasInstallScript": true,
1131
+ "license": "MIT"
1132
+ },
1133
+ "node_modules/@tsparticles/interaction-external-attract": {
1134
+ "version": "3.5.0",
1135
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-attract/-/interaction-external-attract-3.5.0.tgz",
1136
+ "integrity": "sha512-BQYjoHtq7yaETSvPtzKt93OO9MZ1WuDZj7cFPG+iujNekXiwhLRQ89a+QMcsTrCLx70KLJ7SuTzQL5MT1/kb2Q==",
1137
+ "license": "MIT",
1138
+ "dependencies": {
1139
+ "@tsparticles/engine": "^3.5.0"
1140
+ }
1141
+ },
1142
+ "node_modules/@tsparticles/interaction-external-bounce": {
1143
+ "version": "3.5.0",
1144
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bounce/-/interaction-external-bounce-3.5.0.tgz",
1145
+ "integrity": "sha512-H/0//dn4zwKes8zWIjolfeokL0VAlj+EkK7LUhznPhPu+Gt+h6aJqPlwC2MdI5Rvcnps8dT7YoCBWBQ4tJH6zg==",
1146
+ "license": "MIT",
1147
+ "dependencies": {
1148
+ "@tsparticles/engine": "^3.5.0"
1149
+ }
1150
+ },
1151
+ "node_modules/@tsparticles/interaction-external-bubble": {
1152
+ "version": "3.5.0",
1153
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-bubble/-/interaction-external-bubble-3.5.0.tgz",
1154
+ "integrity": "sha512-xTS4PQDMC5j9qOAFTC1M9DfBTJl8P8M41ySGtZHnCvVqG0oLlLSw15msniamjXyaoA4tZvBPM6G+GmFdgE9w1A==",
1155
+ "license": "MIT",
1156
+ "dependencies": {
1157
+ "@tsparticles/engine": "^3.5.0"
1158
+ }
1159
+ },
1160
+ "node_modules/@tsparticles/interaction-external-connect": {
1161
+ "version": "3.5.0",
1162
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-connect/-/interaction-external-connect-3.5.0.tgz",
1163
+ "integrity": "sha512-VSpyZ0P8Hu4nq6C917X3tnwEROfGjrm0ivWJmbBv/lFJ9euZ2VeezeITNZNtNvt/hS5vLI8npDetB/wtd994HQ==",
1164
+ "license": "MIT",
1165
+ "dependencies": {
1166
+ "@tsparticles/engine": "^3.5.0"
1167
+ }
1168
+ },
1169
+ "node_modules/@tsparticles/interaction-external-grab": {
1170
+ "version": "3.5.0",
1171
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-grab/-/interaction-external-grab-3.5.0.tgz",
1172
+ "integrity": "sha512-WOTWSGVerlfJZ9zwq8Eyutq1h0LAr1hI/Fs8j7s5qabZjxPzUBV8rhgghZ/nGrHEiB6j8SW4XMHkN6XR0VM9Ww==",
1173
+ "license": "MIT",
1174
+ "dependencies": {
1175
+ "@tsparticles/engine": "^3.5.0"
1176
+ }
1177
+ },
1178
+ "node_modules/@tsparticles/interaction-external-pause": {
1179
+ "version": "3.5.0",
1180
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-pause/-/interaction-external-pause-3.5.0.tgz",
1181
+ "integrity": "sha512-Hnj1mBH5X3d3zwTP6R+tYn45uTq5XGLDINhEzl30EAjXK30LQe8/RgE91O4CsMSrlTmouG0OuHYGC3nyrn/dcw==",
1182
+ "license": "MIT",
1183
+ "dependencies": {
1184
+ "@tsparticles/engine": "^3.5.0"
1185
+ }
1186
+ },
1187
+ "node_modules/@tsparticles/interaction-external-push": {
1188
+ "version": "3.5.0",
1189
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-push/-/interaction-external-push-3.5.0.tgz",
1190
+ "integrity": "sha512-8UNt5lYRhydDJCK7AznR3s1nJj3OCeLcDknARoq7hATdI+G151QAubD9NUUURCZ1GdXpftT5Bh0Bl1YtiZwOhg==",
1191
+ "license": "MIT",
1192
+ "dependencies": {
1193
+ "@tsparticles/engine": "^3.5.0"
1194
+ }
1195
+ },
1196
+ "node_modules/@tsparticles/interaction-external-remove": {
1197
+ "version": "3.5.0",
1198
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-remove/-/interaction-external-remove-3.5.0.tgz",
1199
+ "integrity": "sha512-+qiVRnR8xywg++gn8fagwpuQVh0WWKxIMkY6l6lMw9UoXz8L6MUVgvWaT632EVmkrTgM43pZ1m0W3m9aBY9rZw==",
1200
+ "license": "MIT",
1201
+ "dependencies": {
1202
+ "@tsparticles/engine": "^3.5.0"
1203
+ }
1204
+ },
1205
+ "node_modules/@tsparticles/interaction-external-repulse": {
1206
+ "version": "3.5.0",
1207
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-repulse/-/interaction-external-repulse-3.5.0.tgz",
1208
+ "integrity": "sha512-lTF7iLqCCQ3AbQSDVTpE3TihoVvI322/5QTqQmwylrrmjbDxGu4Hym4BHK5GqDHOdodOnwU2DWjRF5cRx3aPPg==",
1209
+ "license": "MIT",
1210
+ "dependencies": {
1211
+ "@tsparticles/engine": "^3.5.0"
1212
+ }
1213
+ },
1214
+ "node_modules/@tsparticles/interaction-external-slow": {
1215
+ "version": "3.5.0",
1216
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-external-slow/-/interaction-external-slow-3.5.0.tgz",
1217
+ "integrity": "sha512-KYp1GWbXdnLunFvHJt2YMZMMITebAt0XkzisKoSe+rfvoCbcMGXI2XvDYb0UkGvd8sKTSnHcn7cGH8dhVXXYaQ==",
1218
+ "license": "MIT",
1219
+ "dependencies": {
1220
+ "@tsparticles/engine": "^3.5.0"
1221
+ }
1222
+ },
1223
+ "node_modules/@tsparticles/interaction-particles-attract": {
1224
+ "version": "3.5.0",
1225
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-attract/-/interaction-particles-attract-3.5.0.tgz",
1226
+ "integrity": "sha512-ICnT9+9ZxINh5ZijyxjFXOOMC/jNQgOXPe+5MxgK/WYXE8mRbRzsOdaxiS3zK5PSFlqtztn189anDbfqcHDutQ==",
1227
+ "license": "MIT",
1228
+ "dependencies": {
1229
+ "@tsparticles/engine": "^3.5.0"
1230
+ }
1231
+ },
1232
+ "node_modules/@tsparticles/interaction-particles-collisions": {
1233
+ "version": "3.5.0",
1234
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-collisions/-/interaction-particles-collisions-3.5.0.tgz",
1235
+ "integrity": "sha512-KrfyXy4l6nW2z0An2FE4z5R4rEiIONYPcDpkBhWqQK+pyLkHhtGYmqmP7Pb22IC9noFzjOCaR5CNVjWP7B+1vA==",
1236
+ "license": "MIT",
1237
+ "dependencies": {
1238
+ "@tsparticles/engine": "^3.5.0"
1239
+ }
1240
+ },
1241
+ "node_modules/@tsparticles/interaction-particles-links": {
1242
+ "version": "3.5.0",
1243
+ "resolved": "https://registry.npmjs.org/@tsparticles/interaction-particles-links/-/interaction-particles-links-3.5.0.tgz",
1244
+ "integrity": "sha512-ZdIixcGcRJMxCq4zxeRAzzbbuN5vVoy3pDDLaO3mnWnfJWywkYZToV0XvOUaHUT2AkUuKa9ZuQKx0LO3z1AO+w==",
1245
+ "license": "MIT",
1246
+ "dependencies": {
1247
+ "@tsparticles/engine": "^3.5.0"
1248
+ }
1249
+ },
1250
+ "node_modules/@tsparticles/move-base": {
1251
+ "version": "3.5.0",
1252
+ "resolved": "https://registry.npmjs.org/@tsparticles/move-base/-/move-base-3.5.0.tgz",
1253
+ "integrity": "sha512-9oDk7zTxyhUCstj3lHTNTiWAgqIBzWa2o1tVQFK63Qwq+/WxzJCSwZOocC9PAHGM1IP6nA4zYJSfjbMBTrUocA==",
1254
+ "license": "MIT",
1255
+ "dependencies": {
1256
+ "@tsparticles/engine": "^3.5.0"
1257
+ }
1258
+ },
1259
+ "node_modules/@tsparticles/move-parallax": {
1260
+ "version": "3.5.0",
1261
+ "resolved": "https://registry.npmjs.org/@tsparticles/move-parallax/-/move-parallax-3.5.0.tgz",
1262
+ "integrity": "sha512-1NC2OGsbdLc5T4uiRqq7i24b9FIhfaLnx4wVtOQjX48jWfy/ZKOdIEYLFKOPHnaMI0MjinJTNXLi9i6zVNCobg==",
1263
+ "license": "MIT",
1264
+ "dependencies": {
1265
+ "@tsparticles/engine": "^3.5.0"
1266
+ }
1267
+ },
1268
+ "node_modules/@tsparticles/plugin-easing-quad": {
1269
+ "version": "3.5.0",
1270
+ "resolved": "https://registry.npmjs.org/@tsparticles/plugin-easing-quad/-/plugin-easing-quad-3.5.0.tgz",
1271
+ "integrity": "sha512-Pd44hTiVlaaeQZwRlP+ih8jKmWuIQdkpPUJS0Qwzeck2nfK01IAflDJoxXxGF53vA8QOrz/K6VdVQJShD8yCsg==",
1272
+ "funding": [
1273
+ {
1274
+ "type": "github",
1275
+ "url": "https://github.com/sponsors/matteobruni"
1276
+ },
1277
+ {
1278
+ "type": "github",
1279
+ "url": "https://github.com/sponsors/tsparticles"
1280
+ },
1281
+ {
1282
+ "type": "buymeacoffee",
1283
+ "url": "https://www.buymeacoffee.com/matteobruni"
1284
+ }
1285
+ ],
1286
+ "license": "MIT",
1287
+ "dependencies": {
1288
+ "@tsparticles/engine": "^3.5.0"
1289
+ }
1290
+ },
1291
+ "node_modules/@tsparticles/react": {
1292
+ "version": "3.0.0",
1293
+ "resolved": "https://registry.npmjs.org/@tsparticles/react/-/react-3.0.0.tgz",
1294
+ "integrity": "sha512-hjGEtTT1cwv6BcjL+GcVgH++KYs52bIuQGW3PWv7z3tMa8g0bd6RI/vWSLj7p//NZ3uTjEIeilYIUPBh7Jfq/Q==",
1295
+ "peerDependencies": {
1296
+ "@tsparticles/engine": "^3.0.2",
1297
+ "react": ">=16.8.0",
1298
+ "react-dom": ">=16.8.0"
1299
+ }
1300
+ },
1301
+ "node_modules/@tsparticles/shape-circle": {
1302
+ "version": "3.5.0",
1303
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-circle/-/shape-circle-3.5.0.tgz",
1304
+ "integrity": "sha512-59TmXkeeI6Jzv5vt/D3TkclglabaoEXQi2kbDjSCBK68SXRHzlQu29mSAL41Y5S0Ft5ZJKkAQHX1IqEnm8Hyjg==",
1305
+ "license": "MIT",
1306
+ "dependencies": {
1307
+ "@tsparticles/engine": "^3.5.0"
1308
  }
1309
  },
1310
+ "node_modules/@tsparticles/shape-emoji": {
1311
+ "version": "3.5.0",
1312
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-emoji/-/shape-emoji-3.5.0.tgz",
1313
+ "integrity": "sha512-cxWHxQxnG5vLDltkoxdo7KS87uKPwQgf4SDWy/WCxW4Psm1TEeeSGYMJPVed+wWPspOKmLb7u8OaEexgE2pHHQ==",
 
 
 
1314
  "license": "MIT",
1315
+ "dependencies": {
1316
+ "@tsparticles/engine": "^3.5.0"
 
 
 
 
1317
  }
1318
  },
1319
+ "node_modules/@tsparticles/shape-image": {
1320
+ "version": "3.5.0",
1321
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-image/-/shape-image-3.5.0.tgz",
1322
+ "integrity": "sha512-lWYg7DTv74dSOnXy+4dr7t1/OSuUmxDpIo12Lbxgx/QBN7A5I/HoqbKcs13TSA0RS1hcuMgtti07BcDTEYW3Dw==",
 
 
 
1323
  "license": "MIT",
1324
+ "dependencies": {
1325
+ "@tsparticles/engine": "^3.5.0"
 
 
 
 
1326
  }
1327
  },
1328
+ "node_modules/@tsparticles/shape-line": {
1329
+ "version": "3.5.0",
1330
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-line/-/shape-line-3.5.0.tgz",
1331
+ "integrity": "sha512-Qc4jwFEi/VnwmGwQBO/kCJEfNYdKHpeXfrdcqmm9c1B4iYHHDoaXJp6asMTggEfeAWu7fyPaO/7MURiPEqg7Hg==",
 
 
 
1332
  "license": "MIT",
1333
+ "dependencies": {
1334
+ "@tsparticles/engine": "^3.5.0"
 
 
 
 
1335
  }
1336
  },
1337
+ "node_modules/@tsparticles/shape-polygon": {
1338
+ "version": "3.5.0",
1339
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-polygon/-/shape-polygon-3.5.0.tgz",
1340
+ "integrity": "sha512-sqYL+YXpnq3nSWcOEGZaJ4Z7Cb7x8M0iORSLpPdNEIvwDKdPczYyQM95D8ep19Pv1CV5L0uRthV36wg7UpnJ9Q==",
 
 
 
1341
  "license": "MIT",
1342
+ "dependencies": {
1343
+ "@tsparticles/engine": "^3.5.0"
 
 
 
 
1344
  }
1345
  },
1346
+ "node_modules/@tsparticles/shape-square": {
1347
+ "version": "3.5.0",
1348
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-square/-/shape-square-3.5.0.tgz",
1349
+ "integrity": "sha512-rPHpA4Pzm1W5DIIow+lQS+VS7D2thSBQQbV9eHxb933Wh0/QC3me3w4vovuq7hdtVANhsUVO04n44Gc/2TgHkw==",
1350
  "license": "MIT",
1351
  "dependencies": {
1352
+ "@tsparticles/engine": "^3.5.0"
 
 
 
 
1353
  }
1354
  },
1355
+ "node_modules/@tsparticles/shape-star": {
1356
+ "version": "3.5.0",
1357
+ "resolved": "https://registry.npmjs.org/@tsparticles/shape-star/-/shape-star-3.5.0.tgz",
1358
+ "integrity": "sha512-EDEJc4MYv3UbOeA3wrZjuJVtZ08PdCzzBij3T/7Tp3HUCf/p9XnfHBd/CPR5Mo6X0xpGfrein8UQN9CjGLHwUA==",
1359
  "license": "MIT",
1360
+ "dependencies": {
1361
+ "@tsparticles/engine": "^3.5.0"
1362
  }
1363
  },
1364
+ "node_modules/@tsparticles/slim": {
1365
+ "version": "3.5.0",
1366
+ "resolved": "https://registry.npmjs.org/@tsparticles/slim/-/slim-3.5.0.tgz",
1367
+ "integrity": "sha512-CKx3VtzsY0fs/dQc41PYtL3edm1z2sBROTgvz3adwqMyTWkQGnjLQhsM777Ebb6Yjf5Jxu4TzWOBc2HO7Cstkg==",
1368
+ "funding": [
1369
+ {
1370
+ "type": "github",
1371
+ "url": "https://github.com/sponsors/matteobruni"
1372
+ },
1373
+ {
1374
+ "type": "github",
1375
+ "url": "https://github.com/sponsors/tsparticles"
1376
+ },
1377
+ {
1378
+ "type": "buymeacoffee",
1379
+ "url": "https://www.buymeacoffee.com/matteobruni"
1380
+ }
1381
+ ],
1382
  "license": "MIT",
1383
  "dependencies": {
1384
+ "@tsparticles/basic": "^3.5.0",
1385
+ "@tsparticles/engine": "^3.5.0",
1386
+ "@tsparticles/interaction-external-attract": "^3.5.0",
1387
+ "@tsparticles/interaction-external-bounce": "^3.5.0",
1388
+ "@tsparticles/interaction-external-bubble": "^3.5.0",
1389
+ "@tsparticles/interaction-external-connect": "^3.5.0",
1390
+ "@tsparticles/interaction-external-grab": "^3.5.0",
1391
+ "@tsparticles/interaction-external-pause": "^3.5.0",
1392
+ "@tsparticles/interaction-external-push": "^3.5.0",
1393
+ "@tsparticles/interaction-external-remove": "^3.5.0",
1394
+ "@tsparticles/interaction-external-repulse": "^3.5.0",
1395
+ "@tsparticles/interaction-external-slow": "^3.5.0",
1396
+ "@tsparticles/interaction-particles-attract": "^3.5.0",
1397
+ "@tsparticles/interaction-particles-collisions": "^3.5.0",
1398
+ "@tsparticles/interaction-particles-links": "^3.5.0",
1399
+ "@tsparticles/move-parallax": "^3.5.0",
1400
+ "@tsparticles/plugin-easing-quad": "^3.5.0",
1401
+ "@tsparticles/shape-emoji": "^3.5.0",
1402
+ "@tsparticles/shape-image": "^3.5.0",
1403
+ "@tsparticles/shape-line": "^3.5.0",
1404
+ "@tsparticles/shape-polygon": "^3.5.0",
1405
+ "@tsparticles/shape-square": "^3.5.0",
1406
+ "@tsparticles/shape-star": "^3.5.0",
1407
+ "@tsparticles/updater-life": "^3.5.0",
1408
+ "@tsparticles/updater-rotate": "^3.5.0",
1409
+ "@tsparticles/updater-stroke-color": "^3.5.0"
1410
  }
1411
  },
1412
+ "node_modules/@tsparticles/updater-color": {
1413
+ "version": "3.5.0",
1414
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-color/-/updater-color-3.5.0.tgz",
1415
+ "integrity": "sha512-TGGgiLixIg37sst2Fj9IV4XbdMwkT6PYanM7qEqyfmv4hJ/RHMQlCznEe6b7OhChQVBg5ov5EMl/BT4/fIWEYw==",
 
1416
  "license": "MIT",
1417
+ "dependencies": {
1418
+ "@tsparticles/engine": "^3.5.0"
1419
  }
1420
  },
1421
+ "node_modules/@tsparticles/updater-life": {
1422
+ "version": "3.5.0",
1423
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-life/-/updater-life-3.5.0.tgz",
1424
+ "integrity": "sha512-jlMEq16dwN+rZmW/UmLdqaCe4W0NFrVdmXkZV8QWYgu06a+Ucslz337nHYaP89/9rZWpNua/uq1JDjDzaVD5Jg==",
1425
  "license": "MIT",
1426
+ "dependencies": {
1427
+ "@tsparticles/engine": "^3.5.0"
 
1428
  }
1429
  },
1430
+ "node_modules/@tsparticles/updater-opacity": {
1431
+ "version": "3.5.0",
1432
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-opacity/-/updater-opacity-3.5.0.tgz",
1433
+ "integrity": "sha512-T2YfqdIFV/f5VOg1JQsXu6/owdi9g9K2wrJlBfgteo+IboVp6Lcuo4PGAfilWVkWrTdp1Nz4mz39NrLHfOce2g==",
1434
  "license": "MIT",
1435
+ "dependencies": {
1436
+ "@tsparticles/engine": "^3.5.0"
1437
  }
1438
  },
1439
+ "node_modules/@tsparticles/updater-out-modes": {
1440
+ "version": "3.5.0",
1441
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-out-modes/-/updater-out-modes-3.5.0.tgz",
1442
+ "integrity": "sha512-y6NZe2OSk5SrYdaLwUIQnHICsNEDIdPPJHQ2nAWSvAuPJphlSKjUknc7OaGiFwle6l0OkhWoZZe1rV1ktbw/lA==",
1443
+ "license": "MIT",
1444
+ "dependencies": {
1445
+ "@tsparticles/engine": "^3.5.0"
1446
+ }
1447
  },
1448
+ "node_modules/@tsparticles/updater-rotate": {
1449
+ "version": "3.5.0",
1450
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-rotate/-/updater-rotate-3.5.0.tgz",
1451
+ "integrity": "sha512-j4qPHQd1eUmDoGnIJOsVswHLqtTof1je+b2GTOLB3WIoKmlyUpzQYjVc7PNfLMuCEUubwpZCfcd/vC80VZeWkg==",
1452
+ "license": "MIT",
1453
+ "dependencies": {
1454
+ "@tsparticles/engine": "^3.5.0"
1455
+ }
1456
  },
1457
+ "node_modules/@tsparticles/updater-size": {
1458
+ "version": "3.5.0",
1459
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-size/-/updater-size-3.5.0.tgz",
1460
+ "integrity": "sha512-TnWlOChBsVZffT2uO0S4ALGSzxT6UAMIVlhGMGFgSeIlktKMqM+dxDGAPrYa1n8IS2dkVGisiXzsV0Ss6Ceu1A==",
1461
+ "license": "MIT",
1462
+ "dependencies": {
1463
+ "@tsparticles/engine": "^3.5.0"
1464
+ }
1465
  },
1466
+ "node_modules/@tsparticles/updater-stroke-color": {
1467
+ "version": "3.5.0",
1468
+ "resolved": "https://registry.npmjs.org/@tsparticles/updater-stroke-color/-/updater-stroke-color-3.5.0.tgz",
1469
+ "integrity": "sha512-29X1zER+W9IBDv0nTD/jRXnu5rEU7uv7+W1N0B6leBipjAY24sg7Kub2SvXAaBKz6kHHWuCeccBOwIiiTpDqMA==",
1470
+ "license": "MIT",
1471
  "dependencies": {
1472
+ "@tsparticles/engine": "^3.5.0"
 
1473
  }
1474
  },
1475
  "node_modules/@types/json5": {
 
1493
  "version": "15.7.13",
1494
  "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
1495
  "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
1496
+ "devOptional": true,
1497
  "license": "MIT"
1498
  },
1499
  "node_modules/@types/react": {
1500
  "version": "18.3.8",
1501
  "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
1502
  "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
1503
+ "devOptional": true,
1504
  "license": "MIT",
1505
  "dependencies": {
1506
  "@types/prop-types": "*",
 
1511
  "version": "18.3.0",
1512
  "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
1513
  "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
1514
+ "devOptional": true,
1515
  "license": "MIT",
1516
  "dependencies": {
1517
  "@types/react": "*"
 
1836
  "dev": true,
1837
  "license": "Python-2.0"
1838
  },
1839
+ "node_modules/aria-hidden": {
1840
+ "version": "1.2.4",
1841
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
1842
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
1843
+ "license": "MIT",
1844
+ "dependencies": {
1845
+ "tslib": "^2.0.0"
1846
+ },
1847
+ "engines": {
1848
+ "node": ">=10"
1849
+ }
1850
+ },
1851
  "node_modules/aria-query": {
1852
  "version": "5.1.3",
1853
  "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
 
2323
  "version": "3.1.3",
2324
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
2325
  "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
2326
+ "devOptional": true,
2327
  "license": "MIT"
2328
  },
2329
  "node_modules/damerau-levenshtein": {
 
2481
  "url": "https://github.com/sponsors/ljharb"
2482
  }
2483
  },
2484
+ "node_modules/detect-node-es": {
2485
+ "version": "1.1.0",
2486
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
2487
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
2488
+ "license": "MIT"
2489
+ },
2490
  "node_modules/didyoumean": {
2491
  "version": "1.2.2",
2492
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
 
3413
  "url": "https://github.com/sponsors/ljharb"
3414
  }
3415
  },
3416
+ "node_modules/get-nonce": {
3417
+ "version": "1.0.1",
3418
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
3419
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
3420
+ "license": "MIT",
3421
+ "engines": {
3422
+ "node": ">=6"
3423
+ }
3424
+ },
3425
  "node_modules/get-symbol-description": {
3426
  "version": "1.0.2",
3427
  "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
 
3728
  "node": ">= 0.4"
3729
  }
3730
  },
3731
+ "node_modules/invariant": {
3732
+ "version": "2.2.4",
3733
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
3734
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
3735
+ "license": "MIT",
3736
+ "dependencies": {
3737
+ "loose-envify": "^1.0.0"
3738
+ }
3739
+ },
3740
  "node_modules/is-arguments": {
3741
  "version": "1.1.1",
3742
  "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
 
4535
  }
4536
  }
4537
  },
4538
+ "node_modules/next-themes": {
4539
+ "version": "0.3.0",
4540
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
4541
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
4542
+ "license": "MIT",
4543
+ "peerDependencies": {
4544
+ "react": "^16.8 || ^17 || ^18",
4545
+ "react-dom": "^16.8 || ^17 || ^18"
4546
+ }
4547
+ },
4548
  "node_modules/next/node_modules/postcss": {
4549
  "version": "8.4.31",
4550
  "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
 
5135
  "dev": true,
5136
  "license": "MIT"
5137
  },
5138
+ "node_modules/react-remove-scroll": {
5139
+ "version": "2.5.7",
5140
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.7.tgz",
5141
+ "integrity": "sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==",
5142
+ "license": "MIT",
5143
+ "dependencies": {
5144
+ "react-remove-scroll-bar": "^2.3.4",
5145
+ "react-style-singleton": "^2.2.1",
5146
+ "tslib": "^2.1.0",
5147
+ "use-callback-ref": "^1.3.0",
5148
+ "use-sidecar": "^1.1.2"
5149
+ },
5150
+ "engines": {
5151
+ "node": ">=10"
5152
+ },
5153
+ "peerDependencies": {
5154
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
5155
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5156
+ },
5157
+ "peerDependenciesMeta": {
5158
+ "@types/react": {
5159
+ "optional": true
5160
+ }
5161
+ }
5162
+ },
5163
+ "node_modules/react-remove-scroll-bar": {
5164
+ "version": "2.3.6",
5165
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
5166
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
5167
+ "license": "MIT",
5168
+ "dependencies": {
5169
+ "react-style-singleton": "^2.2.1",
5170
+ "tslib": "^2.0.0"
5171
+ },
5172
+ "engines": {
5173
+ "node": ">=10"
5174
+ },
5175
+ "peerDependencies": {
5176
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
5177
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5178
+ },
5179
+ "peerDependenciesMeta": {
5180
+ "@types/react": {
5181
+ "optional": true
5182
+ }
5183
+ }
5184
+ },
5185
+ "node_modules/react-style-singleton": {
5186
+ "version": "2.2.1",
5187
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
5188
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
5189
+ "license": "MIT",
5190
+ "dependencies": {
5191
+ "get-nonce": "^1.0.0",
5192
+ "invariant": "^2.2.4",
5193
+ "tslib": "^2.0.0"
5194
+ },
5195
+ "engines": {
5196
+ "node": ">=10"
5197
+ },
5198
+ "peerDependencies": {
5199
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
5200
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
5201
+ },
5202
+ "peerDependenciesMeta": {
5203
+ "@types/react": {
5204
+ "optional": true
5205
+ }
5206
+ }
5207
+ },
5208
  "node_modules/read-cache": {
5209
  "version": "1.0.0",
5210
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
6129
  "punycode": "^2.1.0"
6130
  }
6131
  },
6132
+ "node_modules/use-callback-ref": {
6133
+ "version": "1.3.2",
6134
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
6135
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
6136
+ "license": "MIT",
6137
+ "dependencies": {
6138
+ "tslib": "^2.0.0"
6139
+ },
6140
+ "engines": {
6141
+ "node": ">=10"
6142
+ },
6143
+ "peerDependencies": {
6144
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
6145
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
6146
+ },
6147
+ "peerDependenciesMeta": {
6148
+ "@types/react": {
6149
+ "optional": true
6150
+ }
6151
+ }
6152
+ },
6153
+ "node_modules/use-sidecar": {
6154
+ "version": "1.1.2",
6155
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
6156
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
6157
+ "license": "MIT",
6158
+ "dependencies": {
6159
+ "detect-node-es": "^1.1.0",
6160
+ "tslib": "^2.0.0"
6161
+ },
6162
+ "engines": {
6163
+ "node": ">=10"
6164
+ },
6165
+ "peerDependencies": {
6166
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
6167
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
6168
+ },
6169
+ "peerDependenciesMeta": {
6170
+ "@types/react": {
6171
+ "optional": true
6172
+ }
6173
+ }
6174
+ },
6175
  "node_modules/util-deprecate": {
6176
  "version": "1.0.2",
6177
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
package.json CHANGED
@@ -9,11 +9,18 @@
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
 
 
12
  "@radix-ui/react-icons": "^1.3.0",
 
 
 
 
13
  "class-variance-authority": "^0.7.0",
14
  "clsx": "^2.1.1",
15
  "lucide-react": "^0.445.0",
16
  "next": "14.2.13",
 
17
  "react": "^18",
18
  "react-dom": "^18",
19
  "tailwind-merge": "^2.5.2",
 
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
12
+ "@radix-ui/react-dialog": "^1.1.1",
13
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
14
  "@radix-ui/react-icons": "^1.3.0",
15
+ "@radix-ui/react-slot": "^1.1.0",
16
+ "@tsparticles/engine": "^3.5.0",
17
+ "@tsparticles/react": "^3.0.0",
18
+ "@tsparticles/slim": "^3.5.0",
19
  "class-variance-authority": "^0.7.0",
20
  "clsx": "^2.1.1",
21
  "lucide-react": "^0.445.0",
22
  "next": "14.2.13",
23
+ "next-themes": "^0.3.0",
24
  "react": "^18",
25
  "react-dom": "^18",
26
  "tailwind-merge": "^2.5.2",
public/logo-white.png ADDED
public/logo.png ADDED
src/app/layout.tsx CHANGED
@@ -1,21 +1,16 @@
1
  import type { Metadata } from "next";
2
- import localFont from "next/font/local";
3
  import "./globals.css";
 
4
 
5
- const geistSans = localFont({
6
- src: "./fonts/GeistVF.woff",
7
- variable: "--font-geist-sans",
8
- weight: "100 900",
9
- });
10
- const geistMono = localFont({
11
- src: "./fonts/GeistMonoVF.woff",
12
- variable: "--font-geist-mono",
13
- weight: "100 900",
14
  });
15
 
16
  export const metadata: Metadata = {
17
- title: "Create Next App",
18
- description: "Generated by create next app",
19
  };
20
 
21
  export default function RootLayout({
@@ -24,11 +19,16 @@ export default function RootLayout({
24
  children: React.ReactNode;
25
  }>) {
26
  return (
27
- <html lang="en">
28
- <body
29
- className={`${geistSans.variable} ${geistMono.variable} antialiased`}
30
- >
31
- {children}
 
 
 
 
 
32
  </body>
33
  </html>
34
  );
 
1
  import type { Metadata } from "next";
2
+ import { Inter } from "next/font/google";
3
  import "./globals.css";
4
+ import { ThemeProvider } from "@/components/theme-provider";
5
 
6
+ const inter = Inter({
7
+ subsets: ["latin"],
8
+ variable: "--font-sans",
 
 
 
 
 
 
9
  });
10
 
11
  export const metadata: Metadata = {
12
+ title: "G-Space Atom",
13
+ description: "Your One-stop Shop For Gravity-free Design",
14
  };
15
 
16
  export default function RootLayout({
 
19
  children: React.ReactNode;
20
  }>) {
21
  return (
22
+ <html lang="en" suppressHydrationWarning>
23
+ <body className={`${inter.variable} min-h-screen font-sans antialiased`}>
24
+ <ThemeProvider
25
+ attribute="class"
26
+ defaultTheme="system"
27
+ enableSystem
28
+ storageKey="theme"
29
+ >
30
+ {children}
31
+ </ThemeProvider>
32
  </body>
33
  </html>
34
  );
src/app/page.tsx CHANGED
@@ -1,101 +1,225 @@
1
- import Image from "next/image";
 
 
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
- <Image
8
- className="dark:invert"
9
- src="https://nextjs.org/icons/next.svg"
10
- alt="Next.js logo"
11
- width={180}
12
- height={38}
13
- priority
14
- />
15
- <ol className="list-inside list-decimal text-sm text-center sm:text-left font-[family-name:var(--font-geist-mono)]">
16
- <li className="mb-2">
17
- Get started by editing{" "}
18
- <code className="bg-black/[.05] dark:bg-white/[.06] px-1 py-0.5 rounded font-semibold">
19
- src/app/page.tsx
20
- </code>
21
- .
22
- </li>
23
- <li>Save and see your changes instantly.</li>
24
- </ol>
25
 
26
- <div className="flex gap-4 items-center flex-col sm:flex-row">
27
- <a
28
- className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5"
29
- href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
30
- target="_blank"
31
- rel="noopener noreferrer"
32
- >
33
- <Image
34
- className="dark:invert"
35
- src="https://nextjs.org/icons/vercel.svg"
36
- alt="Vercel logomark"
37
- width={20}
38
- height={20}
39
  />
40
- Deploy now
41
- </a>
42
- <a
43
- className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:min-w-44"
44
- href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
45
- target="_blank"
46
- rel="noopener noreferrer"
47
- >
48
- Read our docs
49
- </a>
50
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  </main>
52
- <footer className="row-start-3 flex gap-6 flex-wrap items-center justify-center">
53
- <a
54
- className="flex items-center gap-2 hover:underline hover:underline-offset-4"
55
- href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
56
- target="_blank"
57
- rel="noopener noreferrer"
58
- >
59
- <Image
60
- aria-hidden
61
- src="https://nextjs.org/icons/file.svg"
62
- alt="File icon"
63
- width={16}
64
- height={16}
65
- />
66
- Learn
67
- </a>
68
- <a
69
- className="flex items-center gap-2 hover:underline hover:underline-offset-4"
70
- href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
71
- target="_blank"
72
- rel="noopener noreferrer"
73
- >
74
- <Image
75
- aria-hidden
76
- src="https://nextjs.org/icons/window.svg"
77
- alt="Window icon"
78
- width={16}
79
- height={16}
80
- />
81
- Examples
82
- </a>
83
- <a
84
- className="flex items-center gap-2 hover:underline hover:underline-offset-4"
85
- href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
86
- target="_blank"
87
- rel="noopener noreferrer"
88
- >
89
- <Image
90
- aria-hidden
91
- src="https://nextjs.org/icons/globe.svg"
92
- alt="Globe icon"
93
- width={16}
94
- height={16}
95
- />
96
- Go to nextjs.org →
97
- </a>
98
- </footer>
99
  </div>
100
  );
101
  }
 
1
+ import Footer from "@/components/footer";
2
+ import Header from "@/components/header";
3
+ import { SparklesCore } from "@/components/ui/sparkles";
4
 
5
  export default function Home() {
6
  return (
7
+ <div className="flex min-h-screen w-full flex-col">
8
+ <Header />
9
+ <main className="flex min-h-[calc(100vh_-_theme(spacing.16))] flex-1 flex-col gap-4 md:gap-8 md:p-10">
10
+ <div className="h-[40rem] w-full bg-black flex flex-col items-center justify-center overflow-hidden rounded-md">
11
+ <h1 className="md:text-7xl text-3xl lg:text-9xl font-bold text-center text-white relative z-20">
12
+ Aceternity
13
+ </h1>
14
+ <div className="w-[40rem] h-40 relative">
15
+ {/* Gradients */}
16
+ <div className="absolute inset-x-20 top-0 bg-gradient-to-r from-transparent via-indigo-500 to-transparent h-[2px] w-3/4 blur-sm" />
17
+ <div className="absolute inset-x-20 top-0 bg-gradient-to-r from-transparent via-indigo-500 to-transparent h-px w-3/4" />
18
+ <div className="absolute inset-x-60 top-0 bg-gradient-to-r from-transparent via-sky-500 to-transparent h-[5px] w-1/4 blur-sm" />
19
+ <div className="absolute inset-x-60 top-0 bg-gradient-to-r from-transparent via-sky-500 to-transparent h-px w-1/4" />
 
 
 
 
 
 
 
20
 
21
+ {/* Core component */}
22
+ <SparklesCore
23
+ background="transparent"
24
+ minSize={0.4}
25
+ maxSize={1}
26
+ particleDensity={1200}
27
+ className="w-full h-full"
28
+ particleColor="#FFFFFF"
 
 
 
 
 
29
  />
30
+
31
+ {/* Radial Gradient to prevent sharp edges */}
32
+ <div className="absolute inset-0 w-full h-full bg-black [mask-image:radial-gradient(350px_200px_at_top,transparent_20%,white)]"></div>
33
+ </div>
 
 
 
 
 
 
34
  </div>
35
+ <p>
36
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
37
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
38
+ praesentium nam! Vero!
39
+ </p>
40
+ <p>
41
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
42
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
43
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
44
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
45
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
46
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
47
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
48
+ magni!
49
+ </p>
50
+ <p>
51
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
52
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
53
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
54
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
55
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
56
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
57
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
58
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
59
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
60
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
61
+ consequuntur, aut molestias magni veritatis dolores aperiam
62
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
63
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
64
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
65
+ </p>
66
+ <p>
67
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
68
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
69
+ praesentium nam! Vero!
70
+ </p>
71
+ <p>
72
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
73
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
74
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
75
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
76
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
77
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
78
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
79
+ magni!
80
+ </p>
81
+ <p>
82
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
83
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
84
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
85
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
86
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
87
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
88
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
89
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
90
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
91
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
92
+ consequuntur, aut molestias magni veritatis dolores aperiam
93
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
94
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
95
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
96
+ </p>
97
+ <p>
98
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
99
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
100
+ praesentium nam! Vero!
101
+ </p>
102
+ <p>
103
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
104
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
105
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
106
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
107
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
108
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
109
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
110
+ magni!
111
+ </p>
112
+ <p>
113
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
114
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
115
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
116
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
117
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
118
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
119
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
120
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
121
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
122
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
123
+ consequuntur, aut molestias magni veritatis dolores aperiam
124
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
125
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
126
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
127
+ </p>
128
+ <p>
129
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
130
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
131
+ praesentium nam! Vero!
132
+ </p>
133
+ <p>
134
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
135
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
136
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
137
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
138
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
139
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
140
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
141
+ magni!
142
+ </p>
143
+ <p>
144
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
145
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
146
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
147
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
148
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
149
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
150
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
151
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
152
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
153
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
154
+ consequuntur, aut molestias magni veritatis dolores aperiam
155
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
156
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
157
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
158
+ </p>
159
+ <p>
160
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
161
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
162
+ praesentium nam! Vero!
163
+ </p>
164
+ <p>
165
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
166
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
167
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
168
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
169
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
170
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
171
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
172
+ magni!
173
+ </p>
174
+ <p>
175
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
176
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
177
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
178
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
179
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
180
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
181
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
182
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
183
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
184
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
185
+ consequuntur, aut molestias magni veritatis dolores aperiam
186
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
187
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
188
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
189
+ </p>
190
+ <p>
191
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Unde id
192
+ obcaecati minus explicabo, corporis delectus. Debitis ipsam
193
+ praesentium nam! Vero!
194
+ </p>
195
+ <p>
196
+ Lorem ipsum dolor sit amet consectetur, adipisicing elit.
197
+ Voluptatibus, temporibus mollitia. Eaque, magni tempore aliquam odit
198
+ libero expedita maxime unde obcaecati doloremque eveniet, rerum
199
+ laboriosam illum fugiat quas et vitae quo veritatis tempora. Officiis
200
+ non eaque pariatur ducimus nisi temporibus labore? Eum temporibus
201
+ officiis expedita. Eaque, explicabo numquam. Consequuntur nihil
202
+ eligendi libero asperiores! Rem, delectus cum molestiae eveniet harum
203
+ magni!
204
+ </p>
205
+ <p>
206
+ Lorem ipsum dolor sit, amet consectetur adipisicing elit. Amet
207
+ blanditiis atque sint totam consequatur! Consectetur illo quas rem
208
+ iure enim totam ex quisquam libero dolorem, commodi voluptatem odit
209
+ mollitia repellendus similique nulla dicta maiores, amet, quia quod
210
+ molestias! In officia ut exercitationem! Ut, maiores. Consequuntur
211
+ eligendi exercitationem laudantium placeat fuga qui, aliquid quod amet
212
+ facilis vel voluptatem quis maiores minima ut, harum corrupti
213
+ consectetur rem laborum earum? Laudantium, eaque. Laudantium iste,
214
+ cumque animi repellat enim voluptatibus quasi quas facilis atque.
215
+ Sapiente molestiae praesentium fuga illum, numquam id, vero
216
+ consequuntur, aut molestias magni veritatis dolores aperiam
217
+ reprehenderit reiciendis. Sunt saepe tempora, reiciendis quaerat
218
+ accusantium cumque recusandae quisquam numquam expedita iste, veniam
219
+ ullam ea sequi. Aliquam a rem facilis soluta sint nesciunt.
220
+ </p>
221
  </main>
222
+ <Footer />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  </div>
224
  );
225
  }
src/components/footer.tsx ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ const Footer = () => {
2
+ return (
3
+ <footer className="sticky bottom-0 flex h-10 items-center gap-4 bg-purple-500/30 backdrop-blur px-4 md:px-6">
4
+ <small className="text-sm text-white">© ATOM 2024</small>
5
+ </footer>
6
+ );
7
+ };
8
+
9
+ export default Footer;
src/components/header.tsx ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { GitHubLogoIcon } from "@radix-ui/react-icons";
2
+ import Navbar from "./navbar";
3
+ import Sidebar from "./sidebar";
4
+ import { ThemeButton } from "./theme-button";
5
+ import { Button } from "./ui/button";
6
+
7
+ const Header = () => {
8
+ return (
9
+ <header className="sticky top-0 flex h-16 items-center gap-4 bg-background/30 backdrop-blur px-4 md:px-6">
10
+ <Navbar />
11
+ <Sidebar />
12
+ <div className="flex w-full md:w-auto justify-end gap-4 md:ml-auto md:gap-2 lg:gap-4">
13
+ <Button variant="ghost" size="icon" className="rounded-full">
14
+ <GitHubLogoIcon className="h-[1.2rem] w-[1.2rem]" />
15
+ </Button>
16
+ <ThemeButton />
17
+ </div>
18
+ </header>
19
+ );
20
+ };
21
+
22
+ export default Header;
src/components/mode-toggle.tsx ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import { MoonIcon, SunIcon } from "@radix-ui/react-icons";
5
+ import { useTheme } from "next-themes";
6
+
7
+ import { Button } from "@/components/ui/button";
8
+ import {
9
+ DropdownMenu,
10
+ DropdownMenuContent,
11
+ DropdownMenuItem,
12
+ DropdownMenuTrigger,
13
+ } from "@/components/ui/dropdown-menu";
14
+
15
+ export function ModeToggle() {
16
+ const { setTheme } = useTheme();
17
+
18
+ return (
19
+ <DropdownMenu>
20
+ <DropdownMenuTrigger asChild>
21
+ <Button variant="outline" size="icon">
22
+ <SunIcon className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
23
+ <MoonIcon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
24
+ <span className="sr-only">Toggle theme</span>
25
+ </Button>
26
+ </DropdownMenuTrigger>
27
+ <DropdownMenuContent align="end">
28
+ <DropdownMenuItem onClick={() => setTheme("light")}>
29
+ Light
30
+ </DropdownMenuItem>
31
+ <DropdownMenuItem onClick={() => setTheme("dark")}>
32
+ Dark
33
+ </DropdownMenuItem>
34
+ <DropdownMenuItem onClick={() => setTheme("system")}>
35
+ System
36
+ </DropdownMenuItem>
37
+ </DropdownMenuContent>
38
+ </DropdownMenu>
39
+ );
40
+ }
src/components/navbar.tsx ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { useTheme } from "next-themes";
4
+ import Image from "next/image";
5
+ import Link from "next/link";
6
+
7
+ const Navbar = () => {
8
+ const { theme } = useTheme();
9
+ const links = [
10
+ { name: "Home", href: "#" },
11
+ { name: "About", href: "#" },
12
+ { name: "Projects", href: "#" },
13
+ { name: "Testimonials", href: "#" },
14
+ { name: "Contact", href: "#" },
15
+ ];
16
+ return (
17
+ <nav className="hidden flex-col gap-6 w-full text-lg font-medium md:flex md:flex-row md:items-center md:gap-5 md:text-sm lg:gap-6">
18
+ <Link
19
+ href="#"
20
+ className="flex items-center justify-start gap-2 text-lg h-12 w-12"
21
+ >
22
+ <Image
23
+ src={theme === "dark" ? "/logo-white.png" : "/logo.png"}
24
+ width={48}
25
+ height={48}
26
+ alt="logo"
27
+ />
28
+ <span className="sr-only">ATOM</span>
29
+ </Link>
30
+ <div className="flex items-center justify-center gap-2 w-full">
31
+ {links.map((link) => (
32
+ <Link
33
+ key={link.name}
34
+ href={link.href}
35
+ className="text-muted-foreground transition-colors hover:text-foreground"
36
+ >
37
+ {link.name}
38
+ </Link>
39
+ ))}
40
+ </div>
41
+ </nav>
42
+ );
43
+ };
44
+
45
+ export default Navbar;
src/components/sidebar.tsx ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import Link from "next/link";
2
+ import { Button } from "./ui/button";
3
+ import { Sheet, SheetContent, SheetTrigger } from "./ui/sheet";
4
+ import { Menu, Package2 } from "lucide-react";
5
+
6
+ const Sidebar = () => {
7
+ return (
8
+ <Sheet>
9
+ <SheetTrigger asChild>
10
+ <Button variant="outline" size="icon" className="shrink-0 md:hidden">
11
+ <Menu className="h-5 w-5" />
12
+ <span className="sr-only">Toggle navigation menu</span>
13
+ </Button>
14
+ </SheetTrigger>
15
+ <SheetContent side="left">
16
+ <nav className="grid gap-6 text-lg font-medium">
17
+ <Link
18
+ href="#"
19
+ className="flex items-center gap-2 text-lg font-semibold"
20
+ >
21
+ <Package2 className="h-6 w-6" />
22
+ <span className="sr-only">Acme Inc</span>
23
+ </Link>
24
+ <Link
25
+ href="#"
26
+ className="text-muted-foreground hover:text-foreground"
27
+ >
28
+ Dashboard
29
+ </Link>
30
+ <Link
31
+ href="#"
32
+ className="text-muted-foreground hover:text-foreground"
33
+ >
34
+ Orders
35
+ </Link>
36
+ <Link
37
+ href="#"
38
+ className="text-muted-foreground hover:text-foreground"
39
+ >
40
+ Products
41
+ </Link>
42
+ <Link
43
+ href="#"
44
+ className="text-muted-foreground hover:text-foreground"
45
+ >
46
+ Customers
47
+ </Link>
48
+ <Link href="#" className="hover:text-foreground">
49
+ Settings
50
+ </Link>
51
+ </nav>
52
+ </SheetContent>
53
+ </Sheet>
54
+ );
55
+ };
56
+
57
+ export default Sidebar;
src/components/theme-button.tsx ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { MoonIcon, SunIcon } from "@radix-ui/react-icons";
4
+ import { useTheme } from "next-themes";
5
+
6
+ import { Button } from "@/components/ui/button";
7
+
8
+ export function ThemeButton() {
9
+ const { theme, setTheme } = useTheme();
10
+
11
+ return (
12
+ <Button
13
+ variant="ghost"
14
+ className="rounded-full"
15
+ size="icon"
16
+ onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
17
+ >
18
+ <SunIcon className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
19
+ <MoonIcon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
20
+ <span className="sr-only">Toggle theme</span>
21
+ </Button>
22
+ );
23
+ }
src/components/theme-provider.tsx ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { ThemeProvider as NextThemesProvider } from "next-themes";
4
+ import { type ThemeProviderProps } from "next-themes/dist/types";
5
+
6
+ export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
7
+ return <NextThemesProvider {...props}>{children}</NextThemesProvider>;
8
+ }
src/components/ui/button.tsx ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import { Slot } from "@radix-ui/react-slot"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const buttonVariants = cva(
8
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14
+ destructive:
15
+ "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16
+ outline:
17
+ "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
18
+ secondary:
19
+ "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
20
+ ghost: "hover:bg-accent hover:text-accent-foreground",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ },
23
+ size: {
24
+ default: "h-9 px-4 py-2",
25
+ sm: "h-8 rounded-md px-3 text-xs",
26
+ lg: "h-10 rounded-md px-8",
27
+ icon: "h-9 w-9",
28
+ },
29
+ },
30
+ defaultVariants: {
31
+ variant: "default",
32
+ size: "default",
33
+ },
34
+ }
35
+ )
36
+
37
+ export interface ButtonProps
38
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
39
+ VariantProps<typeof buttonVariants> {
40
+ asChild?: boolean
41
+ }
42
+
43
+ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
44
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
45
+ const Comp = asChild ? Slot : "button"
46
+ return (
47
+ <Comp
48
+ className={cn(buttonVariants({ variant, size, className }))}
49
+ ref={ref}
50
+ {...props}
51
+ />
52
+ )
53
+ }
54
+ )
55
+ Button.displayName = "Button"
56
+
57
+ export { Button, buttonVariants }
src/components/ui/dropdown-menu.tsx ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
5
+ import {
6
+ CheckIcon,
7
+ ChevronRightIcon,
8
+ DotFilledIcon,
9
+ } from "@radix-ui/react-icons"
10
+
11
+ import { cn } from "@/lib/utils"
12
+
13
+ const DropdownMenu = DropdownMenuPrimitive.Root
14
+
15
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
16
+
17
+ const DropdownMenuGroup = DropdownMenuPrimitive.Group
18
+
19
+ const DropdownMenuPortal = DropdownMenuPrimitive.Portal
20
+
21
+ const DropdownMenuSub = DropdownMenuPrimitive.Sub
22
+
23
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
24
+
25
+ const DropdownMenuSubTrigger = React.forwardRef<
26
+ React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
27
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
28
+ inset?: boolean
29
+ }
30
+ >(({ className, inset, children, ...props }, ref) => (
31
+ <DropdownMenuPrimitive.SubTrigger
32
+ ref={ref}
33
+ className={cn(
34
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
35
+ inset && "pl-8",
36
+ className
37
+ )}
38
+ {...props}
39
+ >
40
+ {children}
41
+ <ChevronRightIcon className="ml-auto h-4 w-4" />
42
+ </DropdownMenuPrimitive.SubTrigger>
43
+ ))
44
+ DropdownMenuSubTrigger.displayName =
45
+ DropdownMenuPrimitive.SubTrigger.displayName
46
+
47
+ const DropdownMenuSubContent = React.forwardRef<
48
+ React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
49
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
50
+ >(({ className, ...props }, ref) => (
51
+ <DropdownMenuPrimitive.SubContent
52
+ ref={ref}
53
+ className={cn(
54
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
55
+ className
56
+ )}
57
+ {...props}
58
+ />
59
+ ))
60
+ DropdownMenuSubContent.displayName =
61
+ DropdownMenuPrimitive.SubContent.displayName
62
+
63
+ const DropdownMenuContent = React.forwardRef<
64
+ React.ElementRef<typeof DropdownMenuPrimitive.Content>,
65
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
66
+ >(({ className, sideOffset = 4, ...props }, ref) => (
67
+ <DropdownMenuPrimitive.Portal>
68
+ <DropdownMenuPrimitive.Content
69
+ ref={ref}
70
+ sideOffset={sideOffset}
71
+ className={cn(
72
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
73
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
74
+ className
75
+ )}
76
+ {...props}
77
+ />
78
+ </DropdownMenuPrimitive.Portal>
79
+ ))
80
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
81
+
82
+ const DropdownMenuItem = React.forwardRef<
83
+ React.ElementRef<typeof DropdownMenuPrimitive.Item>,
84
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
85
+ inset?: boolean
86
+ }
87
+ >(({ className, inset, ...props }, ref) => (
88
+ <DropdownMenuPrimitive.Item
89
+ ref={ref}
90
+ className={cn(
91
+ "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
92
+ inset && "pl-8",
93
+ className
94
+ )}
95
+ {...props}
96
+ />
97
+ ))
98
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
99
+
100
+ const DropdownMenuCheckboxItem = React.forwardRef<
101
+ React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
102
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
103
+ >(({ className, children, checked, ...props }, ref) => (
104
+ <DropdownMenuPrimitive.CheckboxItem
105
+ ref={ref}
106
+ className={cn(
107
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
108
+ className
109
+ )}
110
+ checked={checked}
111
+ {...props}
112
+ >
113
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
114
+ <DropdownMenuPrimitive.ItemIndicator>
115
+ <CheckIcon className="h-4 w-4" />
116
+ </DropdownMenuPrimitive.ItemIndicator>
117
+ </span>
118
+ {children}
119
+ </DropdownMenuPrimitive.CheckboxItem>
120
+ ))
121
+ DropdownMenuCheckboxItem.displayName =
122
+ DropdownMenuPrimitive.CheckboxItem.displayName
123
+
124
+ const DropdownMenuRadioItem = React.forwardRef<
125
+ React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
126
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
127
+ >(({ className, children, ...props }, ref) => (
128
+ <DropdownMenuPrimitive.RadioItem
129
+ ref={ref}
130
+ className={cn(
131
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
132
+ className
133
+ )}
134
+ {...props}
135
+ >
136
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
137
+ <DropdownMenuPrimitive.ItemIndicator>
138
+ <DotFilledIcon className="h-4 w-4 fill-current" />
139
+ </DropdownMenuPrimitive.ItemIndicator>
140
+ </span>
141
+ {children}
142
+ </DropdownMenuPrimitive.RadioItem>
143
+ ))
144
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
145
+
146
+ const DropdownMenuLabel = React.forwardRef<
147
+ React.ElementRef<typeof DropdownMenuPrimitive.Label>,
148
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
149
+ inset?: boolean
150
+ }
151
+ >(({ className, inset, ...props }, ref) => (
152
+ <DropdownMenuPrimitive.Label
153
+ ref={ref}
154
+ className={cn(
155
+ "px-2 py-1.5 text-sm font-semibold",
156
+ inset && "pl-8",
157
+ className
158
+ )}
159
+ {...props}
160
+ />
161
+ ))
162
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
163
+
164
+ const DropdownMenuSeparator = React.forwardRef<
165
+ React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
166
+ React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
167
+ >(({ className, ...props }, ref) => (
168
+ <DropdownMenuPrimitive.Separator
169
+ ref={ref}
170
+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
171
+ {...props}
172
+ />
173
+ ))
174
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
175
+
176
+ const DropdownMenuShortcut = ({
177
+ className,
178
+ ...props
179
+ }: React.HTMLAttributes<HTMLSpanElement>) => {
180
+ return (
181
+ <span
182
+ className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
183
+ {...props}
184
+ />
185
+ )
186
+ }
187
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
188
+
189
+ export {
190
+ DropdownMenu,
191
+ DropdownMenuTrigger,
192
+ DropdownMenuContent,
193
+ DropdownMenuItem,
194
+ DropdownMenuCheckboxItem,
195
+ DropdownMenuRadioItem,
196
+ DropdownMenuLabel,
197
+ DropdownMenuSeparator,
198
+ DropdownMenuShortcut,
199
+ DropdownMenuGroup,
200
+ DropdownMenuPortal,
201
+ DropdownMenuSub,
202
+ DropdownMenuSubContent,
203
+ DropdownMenuSubTrigger,
204
+ DropdownMenuRadioGroup,
205
+ }
src/components/ui/input.tsx ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ export interface InputProps
6
+ extends React.InputHTMLAttributes<HTMLInputElement> {}
7
+
8
+ const Input = React.forwardRef<HTMLInputElement, InputProps>(
9
+ ({ className, type, ...props }, ref) => {
10
+ return (
11
+ <input
12
+ type={type}
13
+ className={cn(
14
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50",
15
+ className
16
+ )}
17
+ ref={ref}
18
+ {...props}
19
+ />
20
+ )
21
+ }
22
+ )
23
+ Input.displayName = "Input"
24
+
25
+ export { Input }
src/components/ui/sheet.tsx ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as SheetPrimitive from "@radix-ui/react-dialog"
5
+ import { Cross2Icon } from "@radix-ui/react-icons"
6
+ import { cva, type VariantProps } from "class-variance-authority"
7
+
8
+ import { cn } from "@/lib/utils"
9
+
10
+ const Sheet = SheetPrimitive.Root
11
+
12
+ const SheetTrigger = SheetPrimitive.Trigger
13
+
14
+ const SheetClose = SheetPrimitive.Close
15
+
16
+ const SheetPortal = SheetPrimitive.Portal
17
+
18
+ const SheetOverlay = React.forwardRef<
19
+ React.ElementRef<typeof SheetPrimitive.Overlay>,
20
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>
21
+ >(({ className, ...props }, ref) => (
22
+ <SheetPrimitive.Overlay
23
+ className={cn(
24
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
25
+ className
26
+ )}
27
+ {...props}
28
+ ref={ref}
29
+ />
30
+ ))
31
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName
32
+
33
+ const sheetVariants = cva(
34
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
35
+ {
36
+ variants: {
37
+ side: {
38
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
39
+ bottom:
40
+ "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
41
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
42
+ right:
43
+ "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
44
+ },
45
+ },
46
+ defaultVariants: {
47
+ side: "right",
48
+ },
49
+ }
50
+ )
51
+
52
+ interface SheetContentProps
53
+ extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
54
+ VariantProps<typeof sheetVariants> {}
55
+
56
+ const SheetContent = React.forwardRef<
57
+ React.ElementRef<typeof SheetPrimitive.Content>,
58
+ SheetContentProps
59
+ >(({ side = "right", className, children, ...props }, ref) => (
60
+ <SheetPortal>
61
+ <SheetOverlay />
62
+ <SheetPrimitive.Content
63
+ ref={ref}
64
+ className={cn(sheetVariants({ side }), className)}
65
+ {...props}
66
+ >
67
+ <SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary">
68
+ <Cross2Icon className="h-4 w-4" />
69
+ <span className="sr-only">Close</span>
70
+ </SheetPrimitive.Close>
71
+ {children}
72
+ </SheetPrimitive.Content>
73
+ </SheetPortal>
74
+ ))
75
+ SheetContent.displayName = SheetPrimitive.Content.displayName
76
+
77
+ const SheetHeader = ({
78
+ className,
79
+ ...props
80
+ }: React.HTMLAttributes<HTMLDivElement>) => (
81
+ <div
82
+ className={cn(
83
+ "flex flex-col space-y-2 text-center sm:text-left",
84
+ className
85
+ )}
86
+ {...props}
87
+ />
88
+ )
89
+ SheetHeader.displayName = "SheetHeader"
90
+
91
+ const SheetFooter = ({
92
+ className,
93
+ ...props
94
+ }: React.HTMLAttributes<HTMLDivElement>) => (
95
+ <div
96
+ className={cn(
97
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
98
+ className
99
+ )}
100
+ {...props}
101
+ />
102
+ )
103
+ SheetFooter.displayName = "SheetFooter"
104
+
105
+ const SheetTitle = React.forwardRef<
106
+ React.ElementRef<typeof SheetPrimitive.Title>,
107
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>
108
+ >(({ className, ...props }, ref) => (
109
+ <SheetPrimitive.Title
110
+ ref={ref}
111
+ className={cn("text-lg font-semibold text-foreground", className)}
112
+ {...props}
113
+ />
114
+ ))
115
+ SheetTitle.displayName = SheetPrimitive.Title.displayName
116
+
117
+ const SheetDescription = React.forwardRef<
118
+ React.ElementRef<typeof SheetPrimitive.Description>,
119
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>
120
+ >(({ className, ...props }, ref) => (
121
+ <SheetPrimitive.Description
122
+ ref={ref}
123
+ className={cn("text-sm text-muted-foreground", className)}
124
+ {...props}
125
+ />
126
+ ))
127
+ SheetDescription.displayName = SheetPrimitive.Description.displayName
128
+
129
+ export {
130
+ Sheet,
131
+ SheetPortal,
132
+ SheetOverlay,
133
+ SheetTrigger,
134
+ SheetClose,
135
+ SheetContent,
136
+ SheetHeader,
137
+ SheetFooter,
138
+ SheetTitle,
139
+ SheetDescription,
140
+ }
src/components/ui/sparkles.tsx ADDED
@@ -0,0 +1,434 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+ import React, { useId, useMemo } from "react";
3
+ import { useEffect, useState } from "react";
4
+ import Particles, { initParticlesEngine } from "@tsparticles/react";
5
+ import type { Container, SingleOrMultiple } from "@tsparticles/engine";
6
+ import { loadSlim } from "@tsparticles/slim";
7
+ import { cn } from "@/lib/utils";
8
+ import { motion, useAnimation } from "framer-motion";
9
+
10
+ type ParticlesProps = {
11
+ id?: string;
12
+ className?: string;
13
+ background?: string;
14
+ particleSize?: number;
15
+ minSize?: number;
16
+ maxSize?: number;
17
+ speed?: number;
18
+ particleColor?: string;
19
+ particleDensity?: number;
20
+ };
21
+ export const SparklesCore = (props: ParticlesProps) => {
22
+ const {
23
+ id,
24
+ className,
25
+ background,
26
+ minSize,
27
+ maxSize,
28
+ speed,
29
+ particleColor,
30
+ particleDensity,
31
+ } = props;
32
+ const [init, setInit] = useState(false);
33
+ useEffect(() => {
34
+ initParticlesEngine(async (engine) => {
35
+ await loadSlim(engine);
36
+ }).then(() => {
37
+ setInit(true);
38
+ });
39
+ }, []);
40
+ const controls = useAnimation();
41
+
42
+ const particlesLoaded = async (container?: Container) => {
43
+ if (container) {
44
+ controls.start({
45
+ opacity: 1,
46
+ transition: {
47
+ duration: 1,
48
+ },
49
+ });
50
+ }
51
+ };
52
+
53
+ const generatedId = useId();
54
+ return (
55
+ <motion.div animate={controls} className={cn("opacity-0", className)}>
56
+ {init && (
57
+ <Particles
58
+ id={id || generatedId}
59
+ className={cn("h-full w-full")}
60
+ particlesLoaded={particlesLoaded}
61
+ options={{
62
+ background: {
63
+ color: {
64
+ value: background || "#0d47a1",
65
+ },
66
+ },
67
+ fullScreen: {
68
+ enable: false,
69
+ zIndex: 1,
70
+ },
71
+
72
+ fpsLimit: 120,
73
+ interactivity: {
74
+ events: {
75
+ onClick: {
76
+ enable: true,
77
+ mode: "push",
78
+ },
79
+ onHover: {
80
+ enable: false,
81
+ mode: "repulse",
82
+ },
83
+ resize: true as any,
84
+ },
85
+ modes: {
86
+ push: {
87
+ quantity: 4,
88
+ },
89
+ repulse: {
90
+ distance: 200,
91
+ duration: 0.4,
92
+ },
93
+ },
94
+ },
95
+ particles: {
96
+ bounce: {
97
+ horizontal: {
98
+ value: 1,
99
+ },
100
+ vertical: {
101
+ value: 1,
102
+ },
103
+ },
104
+ collisions: {
105
+ absorb: {
106
+ speed: 2,
107
+ },
108
+ bounce: {
109
+ horizontal: {
110
+ value: 1,
111
+ },
112
+ vertical: {
113
+ value: 1,
114
+ },
115
+ },
116
+ enable: false,
117
+ maxSpeed: 50,
118
+ mode: "bounce",
119
+ overlap: {
120
+ enable: true,
121
+ retries: 0,
122
+ },
123
+ },
124
+ color: {
125
+ value: particleColor || "#ffffff",
126
+ animation: {
127
+ h: {
128
+ count: 0,
129
+ enable: false,
130
+ speed: 1,
131
+ decay: 0,
132
+ delay: 0,
133
+ sync: true,
134
+ offset: 0,
135
+ },
136
+ s: {
137
+ count: 0,
138
+ enable: false,
139
+ speed: 1,
140
+ decay: 0,
141
+ delay: 0,
142
+ sync: true,
143
+ offset: 0,
144
+ },
145
+ l: {
146
+ count: 0,
147
+ enable: false,
148
+ speed: 1,
149
+ decay: 0,
150
+ delay: 0,
151
+ sync: true,
152
+ offset: 0,
153
+ },
154
+ },
155
+ },
156
+ effect: {
157
+ close: true,
158
+ fill: true,
159
+ options: {},
160
+ type: {} as SingleOrMultiple<string> | undefined,
161
+ },
162
+ groups: {},
163
+ move: {
164
+ angle: {
165
+ offset: 0,
166
+ value: 90,
167
+ },
168
+ attract: {
169
+ distance: 200,
170
+ enable: false,
171
+ rotate: {
172
+ x: 3000,
173
+ y: 3000,
174
+ },
175
+ },
176
+ center: {
177
+ x: 50,
178
+ y: 50,
179
+ mode: "percent",
180
+ radius: 0,
181
+ },
182
+ decay: 0,
183
+ distance: {},
184
+ direction: "none",
185
+ drift: 0,
186
+ enable: true,
187
+ gravity: {
188
+ acceleration: 9.81,
189
+ enable: false,
190
+ inverse: false,
191
+ maxSpeed: 50,
192
+ },
193
+ path: {
194
+ clamp: true,
195
+ delay: {
196
+ value: 0,
197
+ },
198
+ enable: false,
199
+ options: {},
200
+ },
201
+ outModes: {
202
+ default: "out",
203
+ },
204
+ random: false,
205
+ size: false,
206
+ speed: {
207
+ min: 0.1,
208
+ max: 1,
209
+ },
210
+ spin: {
211
+ acceleration: 0,
212
+ enable: false,
213
+ },
214
+ straight: false,
215
+ trail: {
216
+ enable: false,
217
+ length: 10,
218
+ fill: {},
219
+ },
220
+ vibrate: false,
221
+ warp: false,
222
+ },
223
+ number: {
224
+ density: {
225
+ enable: true,
226
+ width: 400,
227
+ height: 400,
228
+ },
229
+ limit: {
230
+ mode: "delete",
231
+ value: 0,
232
+ },
233
+ value: particleDensity || 120,
234
+ },
235
+ opacity: {
236
+ value: {
237
+ min: 0.1,
238
+ max: 1,
239
+ },
240
+ animation: {
241
+ count: 0,
242
+ enable: true,
243
+ speed: speed || 4,
244
+ decay: 0,
245
+ delay: 0,
246
+ sync: false,
247
+ mode: "auto",
248
+ startValue: "random",
249
+ destroy: "none",
250
+ },
251
+ },
252
+ reduceDuplicates: false,
253
+ shadow: {
254
+ blur: 0,
255
+ color: {
256
+ value: "#000",
257
+ },
258
+ enable: false,
259
+ offset: {
260
+ x: 0,
261
+ y: 0,
262
+ },
263
+ },
264
+ shape: {
265
+ close: true,
266
+ fill: true,
267
+ options: {},
268
+ type: "circle",
269
+ },
270
+ size: {
271
+ value: {
272
+ min: minSize || 1,
273
+ max: maxSize || 3,
274
+ },
275
+ animation: {
276
+ count: 0,
277
+ enable: false,
278
+ speed: 5,
279
+ decay: 0,
280
+ delay: 0,
281
+ sync: false,
282
+ mode: "auto",
283
+ startValue: "random",
284
+ destroy: "none",
285
+ },
286
+ },
287
+ stroke: {
288
+ width: 0,
289
+ },
290
+ zIndex: {
291
+ value: 0,
292
+ opacityRate: 1,
293
+ sizeRate: 1,
294
+ velocityRate: 1,
295
+ },
296
+ destroy: {
297
+ bounds: {},
298
+ mode: "none",
299
+ split: {
300
+ count: 1,
301
+ factor: {
302
+ value: 3,
303
+ },
304
+ rate: {
305
+ value: {
306
+ min: 4,
307
+ max: 9,
308
+ },
309
+ },
310
+ sizeOffset: true,
311
+ },
312
+ },
313
+ roll: {
314
+ darken: {
315
+ enable: false,
316
+ value: 0,
317
+ },
318
+ enable: false,
319
+ enlighten: {
320
+ enable: false,
321
+ value: 0,
322
+ },
323
+ mode: "vertical",
324
+ speed: 25,
325
+ },
326
+ tilt: {
327
+ value: 0,
328
+ animation: {
329
+ enable: false,
330
+ speed: 0,
331
+ decay: 0,
332
+ sync: false,
333
+ },
334
+ direction: "clockwise",
335
+ enable: false,
336
+ },
337
+ twinkle: {
338
+ lines: {
339
+ enable: false,
340
+ frequency: 0.05,
341
+ opacity: 1,
342
+ },
343
+ particles: {
344
+ enable: false,
345
+ frequency: 0.05,
346
+ opacity: 1,
347
+ },
348
+ },
349
+ wobble: {
350
+ distance: 5,
351
+ enable: false,
352
+ speed: {
353
+ angle: 50,
354
+ move: 10,
355
+ },
356
+ },
357
+ life: {
358
+ count: 0,
359
+ delay: {
360
+ value: 0,
361
+ sync: false,
362
+ },
363
+ duration: {
364
+ value: 0,
365
+ sync: false,
366
+ },
367
+ },
368
+ rotate: {
369
+ value: 0,
370
+ animation: {
371
+ enable: false,
372
+ speed: 0,
373
+ decay: 0,
374
+ sync: false,
375
+ },
376
+ direction: "clockwise",
377
+ path: false,
378
+ },
379
+ orbit: {
380
+ animation: {
381
+ count: 0,
382
+ enable: false,
383
+ speed: 1,
384
+ decay: 0,
385
+ delay: 0,
386
+ sync: false,
387
+ },
388
+ enable: false,
389
+ opacity: 1,
390
+ rotation: {
391
+ value: 45,
392
+ },
393
+ width: 1,
394
+ },
395
+ links: {
396
+ blink: false,
397
+ color: {
398
+ value: "#fff",
399
+ },
400
+ consent: false,
401
+ distance: 100,
402
+ enable: false,
403
+ frequency: 1,
404
+ opacity: 1,
405
+ shadow: {
406
+ blur: 5,
407
+ color: {
408
+ value: "#000",
409
+ },
410
+ enable: false,
411
+ },
412
+ triangles: {
413
+ enable: false,
414
+ frequency: 1,
415
+ },
416
+ width: 1,
417
+ warp: false,
418
+ },
419
+ repulse: {
420
+ value: 0,
421
+ enabled: false,
422
+ distance: 1,
423
+ duration: 1,
424
+ factor: 1,
425
+ speed: 1,
426
+ },
427
+ },
428
+ detectRetina: true,
429
+ }}
430
+ />
431
+ )}
432
+ </motion.div>
433
+ );
434
+ };