ChandimaPrabath commited on
Commit
2a108da
1 Parent(s): d84cd34

0.0.2 Alpha player

Browse files
frontend/package-lock.json CHANGED
@@ -8,11 +8,14 @@
8
  "name": "frontend",
9
  "version": "0.1.0",
10
  "dependencies": {
 
 
11
  "@fortawesome/fontawesome-free": "^6.6.0",
12
  "@fortawesome/fontawesome-svg-core": "^6.6.0",
13
  "@fortawesome/free-regular-svg-icons": "^6.6.0",
14
  "@fortawesome/free-solid-svg-icons": "^6.6.0",
15
  "@fortawesome/react-fontawesome": "^0.2.2",
 
16
  "axios": "^1.7.4",
17
  "next": "14.2.5",
18
  "react": "^18",
@@ -40,6 +43,152 @@
40
  "url": "https://github.com/sponsors/sindresorhus"
41
  }
42
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  "node_modules/@babel/runtime": {
44
  "version": "7.25.6",
45
  "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
@@ -51,6 +200,57 @@
51
  "node": ">=6.9.0"
52
  }
53
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  "node_modules/@emnapi/runtime": {
55
  "version": "1.2.0",
56
  "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
@@ -60,6 +260,61 @@
60
  "tslib": "^2.4.0"
61
  }
62
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  "node_modules/@emotion/is-prop-valid": {
64
  "version": "1.2.2",
65
  "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
@@ -73,11 +328,114 @@
73
  "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
74
  "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
75
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  "node_modules/@emotion/unitless": {
77
  "version": "0.8.1",
78
  "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
79
  "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
80
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  "node_modules/@eslint-community/eslint-utils": {
82
  "version": "4.4.0",
83
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -620,7 +978,6 @@
620
  "version": "0.3.5",
621
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
622
  "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
623
- "dev": true,
624
  "dependencies": {
625
  "@jridgewell/set-array": "^1.2.1",
626
  "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -634,7 +991,6 @@
634
  "version": "3.1.2",
635
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
636
  "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
637
- "dev": true,
638
  "engines": {
639
  "node": ">=6.0.0"
640
  }
@@ -643,7 +999,6 @@
643
  "version": "1.2.1",
644
  "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
645
  "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
646
- "dev": true,
647
  "engines": {
648
  "node": ">=6.0.0"
649
  }
@@ -651,19 +1006,223 @@
651
  "node_modules/@jridgewell/sourcemap-codec": {
652
  "version": "1.5.0",
653
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
654
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
655
- "dev": true
656
  },
657
  "node_modules/@jridgewell/trace-mapping": {
658
  "version": "0.3.25",
659
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
660
  "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
661
- "dev": true,
662
  "dependencies": {
663
  "@jridgewell/resolve-uri": "^3.1.0",
664
  "@jridgewell/sourcemap-codec": "^1.4.14"
665
  }
666
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
667
  "node_modules/@next/env": {
668
  "version": "14.2.5",
669
  "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
@@ -858,6 +1417,15 @@
858
  "node": ">=14"
859
  }
860
  },
 
 
 
 
 
 
 
 
 
861
  "node_modules/@rushstack/eslint-patch": {
862
  "version": "1.10.4",
863
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
@@ -884,6 +1452,33 @@
884
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
885
  "dev": true
886
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
887
  "node_modules/@types/stylis": {
888
  "version": "4.2.5",
889
  "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
@@ -1439,6 +2034,20 @@
1439
  "deep-equal": "^2.0.5"
1440
  }
1441
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1442
  "node_modules/balanced-match": {
1443
  "version": "1.0.2",
1444
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1513,7 +2122,6 @@
1513
  "version": "3.1.0",
1514
  "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1515
  "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1516
- "dev": true,
1517
  "engines": {
1518
  "node": ">=6"
1519
  }
@@ -1611,6 +2219,14 @@
1611
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1612
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1613
  },
 
 
 
 
 
 
 
 
1614
  "node_modules/color": {
1615
  "version": "4.2.3",
1616
  "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
@@ -1674,6 +2290,34 @@
1674
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1675
  "dev": true
1676
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1677
  "node_modules/cross-spawn": {
1678
  "version": "7.0.3",
1679
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1784,7 +2428,6 @@
1784
  "version": "4.3.6",
1785
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
1786
  "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
1787
- "dev": true,
1788
  "dependencies": {
1789
  "ms": "2.1.2"
1790
  },
@@ -1921,6 +2564,15 @@
1921
  "node": ">=6.0.0"
1922
  }
1923
  },
 
 
 
 
 
 
 
 
 
1924
  "node_modules/dom-walk": {
1925
  "version": "0.1.2",
1926
  "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
@@ -1951,6 +2603,19 @@
1951
  "node": ">=10.13.0"
1952
  }
1953
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
1954
  "node_modules/es-abstract": {
1955
  "version": "1.23.3",
1956
  "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
@@ -2133,7 +2798,6 @@
2133
  "version": "4.0.0",
2134
  "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2135
  "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
2136
- "dev": true,
2137
  "engines": {
2138
  "node": ">=10"
2139
  },
@@ -2632,6 +3296,11 @@
2632
  "node": ">=8"
2633
  }
2634
  },
 
 
 
 
 
2635
  "node_modules/find-up": {
2636
  "version": "5.0.0",
2637
  "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -2749,7 +3418,6 @@
2749
  "version": "1.1.2",
2750
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2751
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2752
- "dev": true,
2753
  "funding": {
2754
  "url": "https://github.com/sponsors/ljharb"
2755
  }
@@ -3043,7 +3711,6 @@
3043
  "version": "2.0.2",
3044
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
3045
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
3046
- "dev": true,
3047
  "dependencies": {
3048
  "function-bind": "^1.1.2"
3049
  },
@@ -3051,6 +3718,14 @@
3051
  "node": ">= 0.4"
3052
  }
3053
  },
 
 
 
 
 
 
 
 
3054
  "node_modules/ignore": {
3055
  "version": "5.3.2",
3056
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -3064,7 +3739,6 @@
3064
  "version": "3.3.0",
3065
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
3066
  "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
3067
- "dev": true,
3068
  "dependencies": {
3069
  "parent-module": "^1.0.0",
3070
  "resolve-from": "^4.0.0"
@@ -3224,7 +3898,6 @@
3224
  "version": "2.15.0",
3225
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
3226
  "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
3227
- "dev": true,
3228
  "dependencies": {
3229
  "hasown": "^2.0.2"
3230
  },
@@ -3581,12 +4254,28 @@
3581
  "js-yaml": "bin/js-yaml.js"
3582
  }
3583
  },
 
 
 
 
 
 
 
 
 
 
 
3584
  "node_modules/json-buffer": {
3585
  "version": "3.0.1",
3586
  "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
3587
  "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
3588
  "dev": true
3589
  },
 
 
 
 
 
3590
  "node_modules/json-schema-traverse": {
3591
  "version": "0.4.1",
3592
  "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -3678,8 +4367,7 @@
3678
  "node_modules/lines-and-columns": {
3679
  "version": "1.2.4",
3680
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
3681
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
3682
- "dev": true
3683
  },
3684
  "node_modules/locate-path": {
3685
  "version": "6.0.0",
@@ -3838,8 +4526,7 @@
3838
  "node_modules/ms": {
3839
  "version": "2.1.2",
3840
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
3841
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
3842
- "dev": true
3843
  },
3844
  "node_modules/mux.js": {
3845
  "version": "7.0.3",
@@ -4171,7 +4858,6 @@
4171
  "version": "1.0.1",
4172
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
4173
  "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
4174
- "dev": true,
4175
  "dependencies": {
4176
  "callsites": "^3.0.0"
4177
  },
@@ -4179,6 +4865,23 @@
4179
  "node": ">=6"
4180
  }
4181
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4182
  "node_modules/path-exists": {
4183
  "version": "4.0.0",
4184
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4209,8 +4912,7 @@
4209
  "node_modules/path-parse": {
4210
  "version": "1.0.7",
4211
  "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
4212
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
4213
- "dev": true
4214
  },
4215
  "node_modules/path-scurry": {
4216
  "version": "1.11.1",
@@ -4232,7 +4934,6 @@
4232
  "version": "4.0.0",
4233
  "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
4234
  "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
4235
- "dev": true,
4236
  "engines": {
4237
  "node": ">=8"
4238
  }
@@ -4535,6 +5236,21 @@
4535
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
4536
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
4537
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4538
  "node_modules/read-cache": {
4539
  "version": "1.0.0",
4540
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -4604,7 +5320,6 @@
4604
  "version": "1.22.8",
4605
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
4606
  "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
4607
- "dev": true,
4608
  "dependencies": {
4609
  "is-core-module": "^2.13.0",
4610
  "path-parse": "^1.0.7",
@@ -4621,7 +5336,6 @@
4621
  "version": "4.0.0",
4622
  "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
4623
  "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
4624
- "dev": true,
4625
  "engines": {
4626
  "node": ">=4"
4627
  }
@@ -4902,6 +5616,14 @@
4902
  "node": ">=8"
4903
  }
4904
  },
 
 
 
 
 
 
 
 
4905
  "node_modules/source-map-js": {
4906
  "version": "1.2.0",
4907
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
@@ -5260,7 +5982,6 @@
5260
  "version": "1.0.0",
5261
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
5262
  "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
5263
- "dev": true,
5264
  "engines": {
5265
  "node": ">= 0.4"
5266
  },
@@ -5341,6 +6062,14 @@
5341
  "node": ">=0.8"
5342
  }
5343
  },
 
 
 
 
 
 
 
 
5344
  "node_modules/to-regex-range": {
5345
  "version": "5.0.1",
5346
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 
8
  "name": "frontend",
9
  "version": "0.1.0",
10
  "dependencies": {
11
+ "@emotion/react": "^11.13.3",
12
+ "@emotion/styled": "^11.13.0",
13
  "@fortawesome/fontawesome-free": "^6.6.0",
14
  "@fortawesome/fontawesome-svg-core": "^6.6.0",
15
  "@fortawesome/free-regular-svg-icons": "^6.6.0",
16
  "@fortawesome/free-solid-svg-icons": "^6.6.0",
17
  "@fortawesome/react-fontawesome": "^0.2.2",
18
+ "@mui/material": "^6.1.1",
19
  "axios": "^1.7.4",
20
  "next": "14.2.5",
21
  "react": "^18",
 
43
  "url": "https://github.com/sponsors/sindresorhus"
44
  }
45
  },
46
+ "node_modules/@babel/code-frame": {
47
+ "version": "7.24.7",
48
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
49
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
50
+ "dependencies": {
51
+ "@babel/highlight": "^7.24.7",
52
+ "picocolors": "^1.0.0"
53
+ },
54
+ "engines": {
55
+ "node": ">=6.9.0"
56
+ }
57
+ },
58
+ "node_modules/@babel/generator": {
59
+ "version": "7.25.6",
60
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
61
+ "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
62
+ "dependencies": {
63
+ "@babel/types": "^7.25.6",
64
+ "@jridgewell/gen-mapping": "^0.3.5",
65
+ "@jridgewell/trace-mapping": "^0.3.25",
66
+ "jsesc": "^2.5.1"
67
+ },
68
+ "engines": {
69
+ "node": ">=6.9.0"
70
+ }
71
+ },
72
+ "node_modules/@babel/helper-module-imports": {
73
+ "version": "7.24.7",
74
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
75
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
76
+ "dependencies": {
77
+ "@babel/traverse": "^7.24.7",
78
+ "@babel/types": "^7.24.7"
79
+ },
80
+ "engines": {
81
+ "node": ">=6.9.0"
82
+ }
83
+ },
84
+ "node_modules/@babel/helper-string-parser": {
85
+ "version": "7.24.8",
86
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
87
+ "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
88
+ "engines": {
89
+ "node": ">=6.9.0"
90
+ }
91
+ },
92
+ "node_modules/@babel/helper-validator-identifier": {
93
+ "version": "7.24.7",
94
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
95
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
96
+ "engines": {
97
+ "node": ">=6.9.0"
98
+ }
99
+ },
100
+ "node_modules/@babel/highlight": {
101
+ "version": "7.24.7",
102
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
103
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
104
+ "dependencies": {
105
+ "@babel/helper-validator-identifier": "^7.24.7",
106
+ "chalk": "^2.4.2",
107
+ "js-tokens": "^4.0.0",
108
+ "picocolors": "^1.0.0"
109
+ },
110
+ "engines": {
111
+ "node": ">=6.9.0"
112
+ }
113
+ },
114
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
115
+ "version": "3.2.1",
116
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
117
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
118
+ "dependencies": {
119
+ "color-convert": "^1.9.0"
120
+ },
121
+ "engines": {
122
+ "node": ">=4"
123
+ }
124
+ },
125
+ "node_modules/@babel/highlight/node_modules/chalk": {
126
+ "version": "2.4.2",
127
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
128
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
129
+ "dependencies": {
130
+ "ansi-styles": "^3.2.1",
131
+ "escape-string-regexp": "^1.0.5",
132
+ "supports-color": "^5.3.0"
133
+ },
134
+ "engines": {
135
+ "node": ">=4"
136
+ }
137
+ },
138
+ "node_modules/@babel/highlight/node_modules/color-convert": {
139
+ "version": "1.9.3",
140
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
141
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
142
+ "dependencies": {
143
+ "color-name": "1.1.3"
144
+ }
145
+ },
146
+ "node_modules/@babel/highlight/node_modules/color-name": {
147
+ "version": "1.1.3",
148
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
149
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
150
+ },
151
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
152
+ "version": "1.0.5",
153
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
154
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
155
+ "engines": {
156
+ "node": ">=0.8.0"
157
+ }
158
+ },
159
+ "node_modules/@babel/highlight/node_modules/has-flag": {
160
+ "version": "3.0.0",
161
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
162
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
163
+ "engines": {
164
+ "node": ">=4"
165
+ }
166
+ },
167
+ "node_modules/@babel/highlight/node_modules/supports-color": {
168
+ "version": "5.5.0",
169
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
170
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
171
+ "dependencies": {
172
+ "has-flag": "^3.0.0"
173
+ },
174
+ "engines": {
175
+ "node": ">=4"
176
+ }
177
+ },
178
+ "node_modules/@babel/parser": {
179
+ "version": "7.25.6",
180
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
181
+ "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
182
+ "dependencies": {
183
+ "@babel/types": "^7.25.6"
184
+ },
185
+ "bin": {
186
+ "parser": "bin/babel-parser.js"
187
+ },
188
+ "engines": {
189
+ "node": ">=6.0.0"
190
+ }
191
+ },
192
  "node_modules/@babel/runtime": {
193
  "version": "7.25.6",
194
  "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
 
200
  "node": ">=6.9.0"
201
  }
202
  },
203
+ "node_modules/@babel/template": {
204
+ "version": "7.25.0",
205
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
206
+ "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
207
+ "dependencies": {
208
+ "@babel/code-frame": "^7.24.7",
209
+ "@babel/parser": "^7.25.0",
210
+ "@babel/types": "^7.25.0"
211
+ },
212
+ "engines": {
213
+ "node": ">=6.9.0"
214
+ }
215
+ },
216
+ "node_modules/@babel/traverse": {
217
+ "version": "7.25.6",
218
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
219
+ "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
220
+ "dependencies": {
221
+ "@babel/code-frame": "^7.24.7",
222
+ "@babel/generator": "^7.25.6",
223
+ "@babel/parser": "^7.25.6",
224
+ "@babel/template": "^7.25.0",
225
+ "@babel/types": "^7.25.6",
226
+ "debug": "^4.3.1",
227
+ "globals": "^11.1.0"
228
+ },
229
+ "engines": {
230
+ "node": ">=6.9.0"
231
+ }
232
+ },
233
+ "node_modules/@babel/traverse/node_modules/globals": {
234
+ "version": "11.12.0",
235
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
236
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
237
+ "engines": {
238
+ "node": ">=4"
239
+ }
240
+ },
241
+ "node_modules/@babel/types": {
242
+ "version": "7.25.6",
243
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
244
+ "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
245
+ "dependencies": {
246
+ "@babel/helper-string-parser": "^7.24.8",
247
+ "@babel/helper-validator-identifier": "^7.24.7",
248
+ "to-fast-properties": "^2.0.0"
249
+ },
250
+ "engines": {
251
+ "node": ">=6.9.0"
252
+ }
253
+ },
254
  "node_modules/@emnapi/runtime": {
255
  "version": "1.2.0",
256
  "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
 
260
  "tslib": "^2.4.0"
261
  }
262
  },
263
+ "node_modules/@emotion/babel-plugin": {
264
+ "version": "11.12.0",
265
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
266
+ "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==",
267
+ "dependencies": {
268
+ "@babel/helper-module-imports": "^7.16.7",
269
+ "@babel/runtime": "^7.18.3",
270
+ "@emotion/hash": "^0.9.2",
271
+ "@emotion/memoize": "^0.9.0",
272
+ "@emotion/serialize": "^1.2.0",
273
+ "babel-plugin-macros": "^3.1.0",
274
+ "convert-source-map": "^1.5.0",
275
+ "escape-string-regexp": "^4.0.0",
276
+ "find-root": "^1.1.0",
277
+ "source-map": "^0.5.7",
278
+ "stylis": "4.2.0"
279
+ }
280
+ },
281
+ "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": {
282
+ "version": "0.9.0",
283
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
284
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
285
+ },
286
+ "node_modules/@emotion/babel-plugin/node_modules/stylis": {
287
+ "version": "4.2.0",
288
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
289
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
290
+ },
291
+ "node_modules/@emotion/cache": {
292
+ "version": "11.13.1",
293
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
294
+ "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
295
+ "dependencies": {
296
+ "@emotion/memoize": "^0.9.0",
297
+ "@emotion/sheet": "^1.4.0",
298
+ "@emotion/utils": "^1.4.0",
299
+ "@emotion/weak-memoize": "^0.4.0",
300
+ "stylis": "4.2.0"
301
+ }
302
+ },
303
+ "node_modules/@emotion/cache/node_modules/@emotion/memoize": {
304
+ "version": "0.9.0",
305
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
306
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
307
+ },
308
+ "node_modules/@emotion/cache/node_modules/stylis": {
309
+ "version": "4.2.0",
310
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
311
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
312
+ },
313
+ "node_modules/@emotion/hash": {
314
+ "version": "0.9.2",
315
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
316
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
317
+ },
318
  "node_modules/@emotion/is-prop-valid": {
319
  "version": "1.2.2",
320
  "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
 
328
  "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
329
  "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
330
  },
331
+ "node_modules/@emotion/react": {
332
+ "version": "11.13.3",
333
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz",
334
+ "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==",
335
+ "dependencies": {
336
+ "@babel/runtime": "^7.18.3",
337
+ "@emotion/babel-plugin": "^11.12.0",
338
+ "@emotion/cache": "^11.13.0",
339
+ "@emotion/serialize": "^1.3.1",
340
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
341
+ "@emotion/utils": "^1.4.0",
342
+ "@emotion/weak-memoize": "^0.4.0",
343
+ "hoist-non-react-statics": "^3.3.1"
344
+ },
345
+ "peerDependencies": {
346
+ "react": ">=16.8.0"
347
+ },
348
+ "peerDependenciesMeta": {
349
+ "@types/react": {
350
+ "optional": true
351
+ }
352
+ }
353
+ },
354
+ "node_modules/@emotion/serialize": {
355
+ "version": "1.3.1",
356
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz",
357
+ "integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==",
358
+ "dependencies": {
359
+ "@emotion/hash": "^0.9.2",
360
+ "@emotion/memoize": "^0.9.0",
361
+ "@emotion/unitless": "^0.10.0",
362
+ "@emotion/utils": "^1.4.0",
363
+ "csstype": "^3.0.2"
364
+ }
365
+ },
366
+ "node_modules/@emotion/serialize/node_modules/@emotion/memoize": {
367
+ "version": "0.9.0",
368
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
369
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
370
+ },
371
+ "node_modules/@emotion/serialize/node_modules/@emotion/unitless": {
372
+ "version": "0.10.0",
373
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
374
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg=="
375
+ },
376
+ "node_modules/@emotion/sheet": {
377
+ "version": "1.4.0",
378
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
379
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg=="
380
+ },
381
+ "node_modules/@emotion/styled": {
382
+ "version": "11.13.0",
383
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz",
384
+ "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==",
385
+ "dependencies": {
386
+ "@babel/runtime": "^7.18.3",
387
+ "@emotion/babel-plugin": "^11.12.0",
388
+ "@emotion/is-prop-valid": "^1.3.0",
389
+ "@emotion/serialize": "^1.3.0",
390
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0",
391
+ "@emotion/utils": "^1.4.0"
392
+ },
393
+ "peerDependencies": {
394
+ "@emotion/react": "^11.0.0-rc.0",
395
+ "react": ">=16.8.0"
396
+ },
397
+ "peerDependenciesMeta": {
398
+ "@types/react": {
399
+ "optional": true
400
+ }
401
+ }
402
+ },
403
+ "node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid": {
404
+ "version": "1.3.0",
405
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz",
406
+ "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==",
407
+ "dependencies": {
408
+ "@emotion/memoize": "^0.9.0"
409
+ }
410
+ },
411
+ "node_modules/@emotion/styled/node_modules/@emotion/memoize": {
412
+ "version": "0.9.0",
413
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
414
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ=="
415
+ },
416
  "node_modules/@emotion/unitless": {
417
  "version": "0.8.1",
418
  "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
419
  "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
420
  },
421
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
422
+ "version": "1.1.0",
423
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz",
424
+ "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==",
425
+ "peerDependencies": {
426
+ "react": ">=16.8.0"
427
+ }
428
+ },
429
+ "node_modules/@emotion/utils": {
430
+ "version": "1.4.0",
431
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz",
432
+ "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ=="
433
+ },
434
+ "node_modules/@emotion/weak-memoize": {
435
+ "version": "0.4.0",
436
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
437
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="
438
+ },
439
  "node_modules/@eslint-community/eslint-utils": {
440
  "version": "4.4.0",
441
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
 
978
  "version": "0.3.5",
979
  "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
980
  "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
 
981
  "dependencies": {
982
  "@jridgewell/set-array": "^1.2.1",
983
  "@jridgewell/sourcemap-codec": "^1.4.10",
 
991
  "version": "3.1.2",
992
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
993
  "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
 
994
  "engines": {
995
  "node": ">=6.0.0"
996
  }
 
999
  "version": "1.2.1",
1000
  "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
1001
  "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
 
1002
  "engines": {
1003
  "node": ">=6.0.0"
1004
  }
 
1006
  "node_modules/@jridgewell/sourcemap-codec": {
1007
  "version": "1.5.0",
1008
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
1009
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
 
1010
  },
1011
  "node_modules/@jridgewell/trace-mapping": {
1012
  "version": "0.3.25",
1013
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
1014
  "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
 
1015
  "dependencies": {
1016
  "@jridgewell/resolve-uri": "^3.1.0",
1017
  "@jridgewell/sourcemap-codec": "^1.4.14"
1018
  }
1019
  },
1020
+ "node_modules/@mui/core-downloads-tracker": {
1021
+ "version": "6.1.1",
1022
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.1.tgz",
1023
+ "integrity": "sha512-VdQC1tPIIcZAnf62L2M1eQif0x2vlKg3YK4kGYbtijSH4niEgI21GnstykW1vQIs+Bc6L+Hua2GATYVjilJ22A==",
1024
+ "funding": {
1025
+ "type": "opencollective",
1026
+ "url": "https://opencollective.com/mui-org"
1027
+ }
1028
+ },
1029
+ "node_modules/@mui/material": {
1030
+ "version": "6.1.1",
1031
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.1.tgz",
1032
+ "integrity": "sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==",
1033
+ "dependencies": {
1034
+ "@babel/runtime": "^7.25.6",
1035
+ "@mui/core-downloads-tracker": "^6.1.1",
1036
+ "@mui/system": "^6.1.1",
1037
+ "@mui/types": "^7.2.17",
1038
+ "@mui/utils": "^6.1.1",
1039
+ "@popperjs/core": "^2.11.8",
1040
+ "@types/react-transition-group": "^4.4.11",
1041
+ "clsx": "^2.1.1",
1042
+ "csstype": "^3.1.3",
1043
+ "prop-types": "^15.8.1",
1044
+ "react-is": "^18.3.1",
1045
+ "react-transition-group": "^4.4.5"
1046
+ },
1047
+ "engines": {
1048
+ "node": ">=14.0.0"
1049
+ },
1050
+ "funding": {
1051
+ "type": "opencollective",
1052
+ "url": "https://opencollective.com/mui-org"
1053
+ },
1054
+ "peerDependencies": {
1055
+ "@emotion/react": "^11.5.0",
1056
+ "@emotion/styled": "^11.3.0",
1057
+ "@mui/material-pigment-css": "^6.1.1",
1058
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1059
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1060
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
1061
+ },
1062
+ "peerDependenciesMeta": {
1063
+ "@emotion/react": {
1064
+ "optional": true
1065
+ },
1066
+ "@emotion/styled": {
1067
+ "optional": true
1068
+ },
1069
+ "@mui/material-pigment-css": {
1070
+ "optional": true
1071
+ },
1072
+ "@types/react": {
1073
+ "optional": true
1074
+ }
1075
+ }
1076
+ },
1077
+ "node_modules/@mui/material/node_modules/react-is": {
1078
+ "version": "18.3.1",
1079
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
1080
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
1081
+ },
1082
+ "node_modules/@mui/private-theming": {
1083
+ "version": "6.1.1",
1084
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.1.tgz",
1085
+ "integrity": "sha512-JlrjIdhyZUtewtdAuUsvi3ZnO0YS49IW4Mfz19ZWTlQ0sDGga6LNPVwHClWr2/zJK2we2BQx9/i8M32rgKuzrg==",
1086
+ "dependencies": {
1087
+ "@babel/runtime": "^7.25.6",
1088
+ "@mui/utils": "^6.1.1",
1089
+ "prop-types": "^15.8.1"
1090
+ },
1091
+ "engines": {
1092
+ "node": ">=14.0.0"
1093
+ },
1094
+ "funding": {
1095
+ "type": "opencollective",
1096
+ "url": "https://opencollective.com/mui-org"
1097
+ },
1098
+ "peerDependencies": {
1099
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1100
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1101
+ },
1102
+ "peerDependenciesMeta": {
1103
+ "@types/react": {
1104
+ "optional": true
1105
+ }
1106
+ }
1107
+ },
1108
+ "node_modules/@mui/styled-engine": {
1109
+ "version": "6.1.1",
1110
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.1.tgz",
1111
+ "integrity": "sha512-HJyIoMpFb11fnHuRtUILOXgq6vj4LhIlE8maG4SwP/W+E5sa7HFexhnB3vOMT7bKys4UKNxhobC8jwWxYilGsA==",
1112
+ "dependencies": {
1113
+ "@babel/runtime": "^7.25.6",
1114
+ "@emotion/cache": "^11.13.1",
1115
+ "@emotion/sheet": "^1.4.0",
1116
+ "csstype": "^3.1.3",
1117
+ "prop-types": "^15.8.1"
1118
+ },
1119
+ "engines": {
1120
+ "node": ">=14.0.0"
1121
+ },
1122
+ "funding": {
1123
+ "type": "opencollective",
1124
+ "url": "https://opencollective.com/mui-org"
1125
+ },
1126
+ "peerDependencies": {
1127
+ "@emotion/react": "^11.4.1",
1128
+ "@emotion/styled": "^11.3.0",
1129
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1130
+ },
1131
+ "peerDependenciesMeta": {
1132
+ "@emotion/react": {
1133
+ "optional": true
1134
+ },
1135
+ "@emotion/styled": {
1136
+ "optional": true
1137
+ }
1138
+ }
1139
+ },
1140
+ "node_modules/@mui/system": {
1141
+ "version": "6.1.1",
1142
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.1.tgz",
1143
+ "integrity": "sha512-PaYsCz2tUOcpu3T0okDEsSuP/yCDIj9JZ4Tox1JovRSKIjltHpXPsXZSGr3RiWdtM1MTQMFMCZzu0+CKbyy+Kw==",
1144
+ "dependencies": {
1145
+ "@babel/runtime": "^7.25.6",
1146
+ "@mui/private-theming": "^6.1.1",
1147
+ "@mui/styled-engine": "^6.1.1",
1148
+ "@mui/types": "^7.2.17",
1149
+ "@mui/utils": "^6.1.1",
1150
+ "clsx": "^2.1.1",
1151
+ "csstype": "^3.1.3",
1152
+ "prop-types": "^15.8.1"
1153
+ },
1154
+ "engines": {
1155
+ "node": ">=14.0.0"
1156
+ },
1157
+ "funding": {
1158
+ "type": "opencollective",
1159
+ "url": "https://opencollective.com/mui-org"
1160
+ },
1161
+ "peerDependencies": {
1162
+ "@emotion/react": "^11.5.0",
1163
+ "@emotion/styled": "^11.3.0",
1164
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1165
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1166
+ },
1167
+ "peerDependenciesMeta": {
1168
+ "@emotion/react": {
1169
+ "optional": true
1170
+ },
1171
+ "@emotion/styled": {
1172
+ "optional": true
1173
+ },
1174
+ "@types/react": {
1175
+ "optional": true
1176
+ }
1177
+ }
1178
+ },
1179
+ "node_modules/@mui/types": {
1180
+ "version": "7.2.17",
1181
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.17.tgz",
1182
+ "integrity": "sha512-oyumoJgB6jDV8JFzRqjBo2daUuHpzDjoO/e3IrRhhHo/FxJlaVhET6mcNrKHUq2E+R+q3ql0qAtvQ4rfWHhAeQ==",
1183
+ "peerDependencies": {
1184
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1185
+ },
1186
+ "peerDependenciesMeta": {
1187
+ "@types/react": {
1188
+ "optional": true
1189
+ }
1190
+ }
1191
+ },
1192
+ "node_modules/@mui/utils": {
1193
+ "version": "6.1.1",
1194
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.1.tgz",
1195
+ "integrity": "sha512-HlRrgdJSPbYDXPpoVMWZV8AE7WcFtAk13rWNWAEVWKSanzBBkymjz3km+Th/Srowsh4pf1fTSP1B0L116wQBYw==",
1196
+ "dependencies": {
1197
+ "@babel/runtime": "^7.25.6",
1198
+ "@mui/types": "^7.2.17",
1199
+ "@types/prop-types": "^15.7.12",
1200
+ "clsx": "^2.1.1",
1201
+ "prop-types": "^15.8.1",
1202
+ "react-is": "^18.3.1"
1203
+ },
1204
+ "engines": {
1205
+ "node": ">=14.0.0"
1206
+ },
1207
+ "funding": {
1208
+ "type": "opencollective",
1209
+ "url": "https://opencollective.com/mui-org"
1210
+ },
1211
+ "peerDependencies": {
1212
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
1213
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
1214
+ },
1215
+ "peerDependenciesMeta": {
1216
+ "@types/react": {
1217
+ "optional": true
1218
+ }
1219
+ }
1220
+ },
1221
+ "node_modules/@mui/utils/node_modules/react-is": {
1222
+ "version": "18.3.1",
1223
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
1224
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="
1225
+ },
1226
  "node_modules/@next/env": {
1227
  "version": "14.2.5",
1228
  "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz",
 
1417
  "node": ">=14"
1418
  }
1419
  },
1420
+ "node_modules/@popperjs/core": {
1421
+ "version": "2.11.8",
1422
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
1423
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
1424
+ "funding": {
1425
+ "type": "opencollective",
1426
+ "url": "https://opencollective.com/popperjs"
1427
+ }
1428
+ },
1429
  "node_modules/@rushstack/eslint-patch": {
1430
  "version": "1.10.4",
1431
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
 
1452
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
1453
  "dev": true
1454
  },
1455
+ "node_modules/@types/parse-json": {
1456
+ "version": "4.0.2",
1457
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
1458
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="
1459
+ },
1460
+ "node_modules/@types/prop-types": {
1461
+ "version": "15.7.13",
1462
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
1463
+ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA=="
1464
+ },
1465
+ "node_modules/@types/react": {
1466
+ "version": "18.3.8",
1467
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz",
1468
+ "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==",
1469
+ "dependencies": {
1470
+ "@types/prop-types": "*",
1471
+ "csstype": "^3.0.2"
1472
+ }
1473
+ },
1474
+ "node_modules/@types/react-transition-group": {
1475
+ "version": "4.4.11",
1476
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz",
1477
+ "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==",
1478
+ "dependencies": {
1479
+ "@types/react": "*"
1480
+ }
1481
+ },
1482
  "node_modules/@types/stylis": {
1483
  "version": "4.2.5",
1484
  "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
 
2034
  "deep-equal": "^2.0.5"
2035
  }
2036
  },
2037
+ "node_modules/babel-plugin-macros": {
2038
+ "version": "3.1.0",
2039
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
2040
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
2041
+ "dependencies": {
2042
+ "@babel/runtime": "^7.12.5",
2043
+ "cosmiconfig": "^7.0.0",
2044
+ "resolve": "^1.19.0"
2045
+ },
2046
+ "engines": {
2047
+ "node": ">=10",
2048
+ "npm": ">=6"
2049
+ }
2050
+ },
2051
  "node_modules/balanced-match": {
2052
  "version": "1.0.2",
2053
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 
2122
  "version": "3.1.0",
2123
  "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
2124
  "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
 
2125
  "engines": {
2126
  "node": ">=6"
2127
  }
 
2219
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
2220
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
2221
  },
2222
+ "node_modules/clsx": {
2223
+ "version": "2.1.1",
2224
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
2225
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
2226
+ "engines": {
2227
+ "node": ">=6"
2228
+ }
2229
+ },
2230
  "node_modules/color": {
2231
  "version": "4.2.3",
2232
  "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
 
2290
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
2291
  "dev": true
2292
  },
2293
+ "node_modules/convert-source-map": {
2294
+ "version": "1.9.0",
2295
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
2296
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
2297
+ },
2298
+ "node_modules/cosmiconfig": {
2299
+ "version": "7.1.0",
2300
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
2301
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
2302
+ "dependencies": {
2303
+ "@types/parse-json": "^4.0.0",
2304
+ "import-fresh": "^3.2.1",
2305
+ "parse-json": "^5.0.0",
2306
+ "path-type": "^4.0.0",
2307
+ "yaml": "^1.10.0"
2308
+ },
2309
+ "engines": {
2310
+ "node": ">=10"
2311
+ }
2312
+ },
2313
+ "node_modules/cosmiconfig/node_modules/yaml": {
2314
+ "version": "1.10.2",
2315
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2316
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2317
+ "engines": {
2318
+ "node": ">= 6"
2319
+ }
2320
+ },
2321
  "node_modules/cross-spawn": {
2322
  "version": "7.0.3",
2323
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
 
2428
  "version": "4.3.6",
2429
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
2430
  "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
 
2431
  "dependencies": {
2432
  "ms": "2.1.2"
2433
  },
 
2564
  "node": ">=6.0.0"
2565
  }
2566
  },
2567
+ "node_modules/dom-helpers": {
2568
+ "version": "5.2.1",
2569
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
2570
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
2571
+ "dependencies": {
2572
+ "@babel/runtime": "^7.8.7",
2573
+ "csstype": "^3.0.2"
2574
+ }
2575
+ },
2576
  "node_modules/dom-walk": {
2577
  "version": "0.1.2",
2578
  "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
 
2603
  "node": ">=10.13.0"
2604
  }
2605
  },
2606
+ "node_modules/error-ex": {
2607
+ "version": "1.3.2",
2608
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
2609
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
2610
+ "dependencies": {
2611
+ "is-arrayish": "^0.2.1"
2612
+ }
2613
+ },
2614
+ "node_modules/error-ex/node_modules/is-arrayish": {
2615
+ "version": "0.2.1",
2616
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2617
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
2618
+ },
2619
  "node_modules/es-abstract": {
2620
  "version": "1.23.3",
2621
  "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
 
2798
  "version": "4.0.0",
2799
  "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
2800
  "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
 
2801
  "engines": {
2802
  "node": ">=10"
2803
  },
 
3296
  "node": ">=8"
3297
  }
3298
  },
3299
+ "node_modules/find-root": {
3300
+ "version": "1.1.0",
3301
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
3302
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
3303
+ },
3304
  "node_modules/find-up": {
3305
  "version": "5.0.0",
3306
  "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
 
3418
  "version": "1.1.2",
3419
  "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
3420
  "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
 
3421
  "funding": {
3422
  "url": "https://github.com/sponsors/ljharb"
3423
  }
 
3711
  "version": "2.0.2",
3712
  "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
3713
  "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
 
3714
  "dependencies": {
3715
  "function-bind": "^1.1.2"
3716
  },
 
3718
  "node": ">= 0.4"
3719
  }
3720
  },
3721
+ "node_modules/hoist-non-react-statics": {
3722
+ "version": "3.3.2",
3723
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
3724
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
3725
+ "dependencies": {
3726
+ "react-is": "^16.7.0"
3727
+ }
3728
+ },
3729
  "node_modules/ignore": {
3730
  "version": "5.3.2",
3731
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
 
3739
  "version": "3.3.0",
3740
  "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
3741
  "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
 
3742
  "dependencies": {
3743
  "parent-module": "^1.0.0",
3744
  "resolve-from": "^4.0.0"
 
3898
  "version": "2.15.0",
3899
  "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
3900
  "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
 
3901
  "dependencies": {
3902
  "hasown": "^2.0.2"
3903
  },
 
4254
  "js-yaml": "bin/js-yaml.js"
4255
  }
4256
  },
4257
+ "node_modules/jsesc": {
4258
+ "version": "2.5.2",
4259
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
4260
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
4261
+ "bin": {
4262
+ "jsesc": "bin/jsesc"
4263
+ },
4264
+ "engines": {
4265
+ "node": ">=4"
4266
+ }
4267
+ },
4268
  "node_modules/json-buffer": {
4269
  "version": "3.0.1",
4270
  "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
4271
  "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
4272
  "dev": true
4273
  },
4274
+ "node_modules/json-parse-even-better-errors": {
4275
+ "version": "2.3.1",
4276
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
4277
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
4278
+ },
4279
  "node_modules/json-schema-traverse": {
4280
  "version": "0.4.1",
4281
  "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
 
4367
  "node_modules/lines-and-columns": {
4368
  "version": "1.2.4",
4369
  "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
4370
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
 
4371
  },
4372
  "node_modules/locate-path": {
4373
  "version": "6.0.0",
 
4526
  "node_modules/ms": {
4527
  "version": "2.1.2",
4528
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4529
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 
4530
  },
4531
  "node_modules/mux.js": {
4532
  "version": "7.0.3",
 
4858
  "version": "1.0.1",
4859
  "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
4860
  "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
 
4861
  "dependencies": {
4862
  "callsites": "^3.0.0"
4863
  },
 
4865
  "node": ">=6"
4866
  }
4867
  },
4868
+ "node_modules/parse-json": {
4869
+ "version": "5.2.0",
4870
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
4871
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
4872
+ "dependencies": {
4873
+ "@babel/code-frame": "^7.0.0",
4874
+ "error-ex": "^1.3.1",
4875
+ "json-parse-even-better-errors": "^2.3.0",
4876
+ "lines-and-columns": "^1.1.6"
4877
+ },
4878
+ "engines": {
4879
+ "node": ">=8"
4880
+ },
4881
+ "funding": {
4882
+ "url": "https://github.com/sponsors/sindresorhus"
4883
+ }
4884
+ },
4885
  "node_modules/path-exists": {
4886
  "version": "4.0.0",
4887
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
 
4912
  "node_modules/path-parse": {
4913
  "version": "1.0.7",
4914
  "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
4915
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
 
4916
  },
4917
  "node_modules/path-scurry": {
4918
  "version": "1.11.1",
 
4934
  "version": "4.0.0",
4935
  "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
4936
  "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
 
4937
  "engines": {
4938
  "node": ">=8"
4939
  }
 
5236
  "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
5237
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
5238
  },
5239
+ "node_modules/react-transition-group": {
5240
+ "version": "4.4.5",
5241
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
5242
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
5243
+ "dependencies": {
5244
+ "@babel/runtime": "^7.5.5",
5245
+ "dom-helpers": "^5.0.1",
5246
+ "loose-envify": "^1.4.0",
5247
+ "prop-types": "^15.6.2"
5248
+ },
5249
+ "peerDependencies": {
5250
+ "react": ">=16.6.0",
5251
+ "react-dom": ">=16.6.0"
5252
+ }
5253
+ },
5254
  "node_modules/read-cache": {
5255
  "version": "1.0.0",
5256
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
5320
  "version": "1.22.8",
5321
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
5322
  "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
 
5323
  "dependencies": {
5324
  "is-core-module": "^2.13.0",
5325
  "path-parse": "^1.0.7",
 
5336
  "version": "4.0.0",
5337
  "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
5338
  "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
 
5339
  "engines": {
5340
  "node": ">=4"
5341
  }
 
5616
  "node": ">=8"
5617
  }
5618
  },
5619
+ "node_modules/source-map": {
5620
+ "version": "0.5.7",
5621
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
5622
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
5623
+ "engines": {
5624
+ "node": ">=0.10.0"
5625
+ }
5626
+ },
5627
  "node_modules/source-map-js": {
5628
  "version": "1.2.0",
5629
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
 
5982
  "version": "1.0.0",
5983
  "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
5984
  "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
 
5985
  "engines": {
5986
  "node": ">= 0.4"
5987
  },
 
6062
  "node": ">=0.8"
6063
  }
6064
  },
6065
+ "node_modules/to-fast-properties": {
6066
+ "version": "2.0.0",
6067
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
6068
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
6069
+ "engines": {
6070
+ "node": ">=4"
6071
+ }
6072
+ },
6073
  "node_modules/to-regex-range": {
6074
  "version": "5.0.1",
6075
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
frontend/package.json CHANGED
@@ -9,11 +9,14 @@
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
 
 
12
  "@fortawesome/fontawesome-free": "^6.6.0",
13
  "@fortawesome/fontawesome-svg-core": "^6.6.0",
14
  "@fortawesome/free-regular-svg-icons": "^6.6.0",
15
  "@fortawesome/free-solid-svg-icons": "^6.6.0",
16
  "@fortawesome/react-fontawesome": "^0.2.2",
 
17
  "axios": "^1.7.4",
18
  "next": "14.2.5",
19
  "react": "^18",
 
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
12
+ "@emotion/react": "^11.13.3",
13
+ "@emotion/styled": "^11.13.0",
14
  "@fortawesome/fontawesome-free": "^6.6.0",
15
  "@fortawesome/fontawesome-svg-core": "^6.6.0",
16
  "@fortawesome/free-regular-svg-icons": "^6.6.0",
17
  "@fortawesome/free-solid-svg-icons": "^6.6.0",
18
  "@fortawesome/react-fontawesome": "^0.2.2",
19
+ "@mui/material": "^6.1.1",
20
  "axios": "^1.7.4",
21
  "next": "14.2.5",
22
  "react": "^18",
frontend/src/app/player/movie/[title]/MoviePlayerPage.css CHANGED
@@ -1,6 +1,8 @@
1
  .film-player-container{
2
  width: 100dvw;
3
  height: 100dvh;
 
 
4
  }
5
 
6
  .app-container{
 
1
  .film-player-container{
2
  width: 100dvw;
3
  height: 100dvh;
4
+ padding: 0 !important;
5
+ margin: 0 !important;
6
  }
7
 
8
  .app-container{
frontend/src/components/MoviePlayer.css CHANGED
@@ -1,8 +1,9 @@
1
  .video-player-container {
2
  position: relative;
3
  max-width: 100dvw;
4
- height: 100%;
5
- margin: auto;
 
6
  background-color: #000;
7
  border-radius: 8px;
8
  overflow: hidden;
@@ -11,13 +12,15 @@
11
  }
12
 
13
  .video-title {
14
- color: #8e91b4;
 
 
15
  text-align: left;
16
- padding: 20px;
17
  padding-bottom: 50px;
 
18
  font-size: 1.5em;
19
  font-weight: bold;
20
- background-image: linear-gradient(#0e0f19 60%, transparent 100%);
21
  }
22
 
23
  .video-element {
@@ -31,7 +34,7 @@
31
  top: 0;
32
  left: 0;
33
  width: 100%;
34
- height: 100%;
35
  display: flex;
36
  flex-direction: column;
37
  justify-content: space-between;
@@ -60,8 +63,7 @@
60
  display: flex;
61
  flex-direction: row;
62
  width: 90dvw;
63
-
64
- justify-content: space-between;
65
  align-items: center;
66
  }
67
 
@@ -82,22 +84,23 @@
82
  justify-content: center;
83
  align-items: center;
84
  padding: 10px;
85
- background-color: rgba(0, 0, 0, 0.7);
 
86
  bottom: 0;
87
  position: relative;
88
  flex-direction: column;
89
  }
90
 
91
- .current-time, .duration{
 
92
  color: white;
93
  }
94
 
95
  .play-pause-btn,
96
  .control-btn {
97
- color: #6c66b0;
98
  border-radius: 10px;
99
- padding: 10px 15px;
100
- margin: 0 5px;
101
  cursor: pointer;
102
  font-size: 1em;
103
  transition: background-color 0.3s;
@@ -128,11 +131,11 @@
128
  cursor: pointer;
129
  }
130
 
131
- .download-btn{
132
  color: white;
133
  }
134
 
135
- .buffering-indicator{
136
  color: white;
137
  background-color: #00000069;
138
  position: fixed;
@@ -144,7 +147,7 @@
144
  align-items: center;
145
  }
146
 
147
- .buffering-indicator .position-fix{
148
  transform: translate(-50%, -50%);
149
  }
150
 
@@ -174,3 +177,55 @@
174
  .context-menu li:hover {
175
  background-color: #5755a2;
176
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .video-player-container {
2
  position: relative;
3
  max-width: 100dvw;
4
+ height: 100dvh;
5
+ margin: 0;
6
+ padding: 0;
7
  background-color: #000;
8
  border-radius: 8px;
9
  overflow: hidden;
 
12
  }
13
 
14
  .video-title {
15
+ color: #d5d6d7;
16
+ display: flex;
17
+ align-items: center;
18
  text-align: left;
 
19
  padding-bottom: 50px;
20
+ padding: 20px;
21
  font-size: 1.5em;
22
  font-weight: bold;
23
+ background-image: linear-gradient(#0e0f19cb 50%, transparent 100%);
24
  }
25
 
26
  .video-element {
 
34
  top: 0;
35
  left: 0;
36
  width: 100%;
37
+ height: 100dvh;
38
  display: flex;
39
  flex-direction: column;
40
  justify-content: space-between;
 
63
  display: flex;
64
  flex-direction: row;
65
  width: 90dvw;
66
+ justify-content: center;
 
67
  align-items: center;
68
  }
69
 
 
84
  justify-content: center;
85
  align-items: center;
86
  padding: 10px;
87
+ padding-top: 50px;
88
+ background-image: linear-gradient(transparent 5%, #0e0f19cb 60%);
89
  bottom: 0;
90
  position: relative;
91
  flex-direction: column;
92
  }
93
 
94
+ .current-time,
95
+ .duration {
96
  color: white;
97
  }
98
 
99
  .play-pause-btn,
100
  .control-btn {
101
+ color: #4237b8;
102
  border-radius: 10px;
103
+ padding: 10px;
 
104
  cursor: pointer;
105
  font-size: 1em;
106
  transition: background-color 0.3s;
 
131
  cursor: pointer;
132
  }
133
 
134
+ .download-btn {
135
  color: white;
136
  }
137
 
138
+ .buffering-indicator {
139
  color: white;
140
  background-color: #00000069;
141
  position: fixed;
 
147
  align-items: center;
148
  }
149
 
150
+ .buffering-indicator .position-fix {
151
  transform: translate(-50%, -50%);
152
  }
153
 
 
177
  .context-menu li:hover {
178
  background-color: #5755a2;
179
  }
180
+
181
+ /********** Range Input Styles **********/
182
+ /*Range Reset*/
183
+ input[type="range"] {
184
+ -webkit-appearance: none;
185
+ appearance: none;
186
+ background: transparent;
187
+ cursor: pointer;
188
+ }
189
+
190
+ /* Removes default focus */
191
+ input[type="range"]:focus {
192
+ outline: none;
193
+ }
194
+
195
+ /***** Chrome, Safari, Opera and Edge Chromium styles *****/
196
+ /* slider track */
197
+ input[type="range"]::-webkit-slider-runnable-track {
198
+ background-color: #403f4f;
199
+ border-radius: 0.5rem;
200
+ height: 0.5rem;
201
+ }
202
+
203
+ /* slider thumb */
204
+ input[type="range"]::-webkit-slider-thumb {
205
+ -webkit-appearance: none; /* Override default look */
206
+ appearance: none;
207
+ margin-top: -6px; /* Centers thumb on the track */
208
+ /*custom styles*/
209
+ background-color: #4237b8;
210
+ height: 1.2rem;
211
+ width: 0.8rem;
212
+ border-radius: 10px;
213
+ }
214
+
215
+ /******** Firefox styles ********/
216
+ /* slider track */
217
+ input[type="range"]::-moz-range-track {
218
+ background-color: #403f4f;
219
+ border-radius: 0.5rem;
220
+ height: 0.5rem;
221
+ }
222
+
223
+ /* slider thumb */
224
+ input[type="range"]::-moz-range-thumb {
225
+ border: none; /*Removes extra border that FF applies*/
226
+ /*custom styles*/
227
+ background-color: #4237b8;
228
+ height: 1.2rem;
229
+ width: 0.8rem;
230
+ border-radius: 10px;
231
+ }
frontend/src/components/MoviePlayer.js CHANGED
@@ -11,8 +11,12 @@ import {
11
  faVolumeMute,
12
  faExpand,
13
  faDownload,
 
 
 
14
  } from "@fortawesome/free-solid-svg-icons";
15
  import { Spinner } from "@/components/Spinner";
 
16
 
17
  export default function MoviePlayer({ videoUrl, title }) {
18
  const videoRef = useRef(null);
@@ -20,28 +24,33 @@ export default function MoviePlayer({ videoUrl, title }) {
20
  const [volume, setVolume] = useState(1);
21
  const [isMuted, setIsMuted] = useState(false);
22
  const [progress, setProgress] = useState(0);
 
23
  const [isFullscreen, setIsFullscreen] = useState(false);
24
  const [showControls, setShowControls] = useState(true);
25
  const [isBuffering, setIsBuffering] = useState(false);
26
  const overlayTimeout = useRef(null);
27
  const [contextMenu, setContextMenu] = useState({ visible: false, x: 0, y: 0 });
28
- const playerVersion = "0.0.1 Alpha";
29
 
30
  useEffect(() => {
31
  const videoElement = videoRef.current;
32
 
33
  const handlePlay = () => setIsPlaying(true);
34
  const handlePause = () => setIsPlaying(false);
35
- const handleTimeUpdate = () =>
36
  setProgress((videoElement.currentTime / videoElement.duration) * 100);
 
 
37
  const handleWaiting = () => setIsBuffering(true);
38
  const handlePlaying = () => setIsBuffering(false);
 
39
 
40
  videoElement.addEventListener("play", handlePlay);
41
  videoElement.addEventListener("pause", handlePause);
42
  videoElement.addEventListener("timeupdate", handleTimeUpdate);
43
  videoElement.addEventListener("waiting", handleWaiting);
44
  videoElement.addEventListener("playing", handlePlaying);
 
45
 
46
  return () => {
47
  videoElement.removeEventListener("play", handlePlay);
@@ -49,6 +58,7 @@ export default function MoviePlayer({ videoUrl, title }) {
49
  videoElement.removeEventListener("timeupdate", handleTimeUpdate);
50
  videoElement.removeEventListener("waiting", handleWaiting);
51
  videoElement.removeEventListener("playing", handlePlaying);
 
52
  };
53
  }, []);
54
 
@@ -152,11 +162,9 @@ export default function MoviePlayer({ videoUrl, title }) {
152
  setIsFullscreen(!isFullscreen);
153
  };
154
 
155
- const handleProgressChange = (event) => {
156
- const progressValue = event.target.value;
157
- videoRef.current.currentTime =
158
- (progressValue / 100) * videoRef.current.duration;
159
- setProgress(progressValue);
160
  };
161
 
162
  const handleMouseMove = () => {
@@ -178,19 +186,23 @@ export default function MoviePlayer({ videoUrl, title }) {
178
  return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
179
  };
180
 
 
 
 
 
 
 
 
 
 
181
  return (
182
  <div className="video-player-container" onMouseMove={handleMouseMove} onContextMenu={handleContextMenu}>
183
  <div className={`player-overlay ${showControls ? "show" : "hide"}`}>
184
- <h2 className="video-title">{title}</h2>
185
  <div className="controls">
186
  <div className="player-controls-top">
187
  <label className="current-time">{formatTime(videoRef?.current?.currentTime)}</label>
188
- <input
189
- type="range"
190
- className="progress-bar"
191
- value={progress}
192
- onChange={handleProgressChange}
193
- />
194
  <label className="duration">{formatTime(videoRef?.current?.duration)}</label>
195
  </div>
196
  <div className="player-controls-down">
 
11
  faVolumeMute,
12
  faExpand,
13
  faDownload,
14
+ faArrowLeft,
15
+ faCaretLeft,
16
+ faAngleLeft,
17
  } from "@fortawesome/free-solid-svg-icons";
18
  import { Spinner } from "@/components/Spinner";
19
+ import SeekableProgressBar from "./SeekableProgressBar";
20
 
21
  export default function MoviePlayer({ videoUrl, title }) {
22
  const videoRef = useRef(null);
 
24
  const [volume, setVolume] = useState(1);
25
  const [isMuted, setIsMuted] = useState(false);
26
  const [progress, setProgress] = useState(0);
27
+ const [buffer, setBuffer] = useState(0); // Buffer state
28
  const [isFullscreen, setIsFullscreen] = useState(false);
29
  const [showControls, setShowControls] = useState(true);
30
  const [isBuffering, setIsBuffering] = useState(false);
31
  const overlayTimeout = useRef(null);
32
  const [contextMenu, setContextMenu] = useState({ visible: false, x: 0, y: 0 });
33
+ const playerVersion = "0.0.2 Alpha";
34
 
35
  useEffect(() => {
36
  const videoElement = videoRef.current;
37
 
38
  const handlePlay = () => setIsPlaying(true);
39
  const handlePause = () => setIsPlaying(false);
40
+ const handleTimeUpdate = () => {
41
  setProgress((videoElement.currentTime / videoElement.duration) * 100);
42
+ updateBuffer(); // Update buffer on time update
43
+ };
44
  const handleWaiting = () => setIsBuffering(true);
45
  const handlePlaying = () => setIsBuffering(false);
46
+ const handleProgress = () => updateBuffer(); // Update buffer on progress
47
 
48
  videoElement.addEventListener("play", handlePlay);
49
  videoElement.addEventListener("pause", handlePause);
50
  videoElement.addEventListener("timeupdate", handleTimeUpdate);
51
  videoElement.addEventListener("waiting", handleWaiting);
52
  videoElement.addEventListener("playing", handlePlaying);
53
+ videoElement.addEventListener("progress", handleProgress); // Listen to progress events
54
 
55
  return () => {
56
  videoElement.removeEventListener("play", handlePlay);
 
58
  videoElement.removeEventListener("timeupdate", handleTimeUpdate);
59
  videoElement.removeEventListener("waiting", handleWaiting);
60
  videoElement.removeEventListener("playing", handlePlaying);
61
+ videoElement.removeEventListener("progress", handleProgress); // Clean up progress listener
62
  };
63
  }, []);
64
 
 
162
  setIsFullscreen(!isFullscreen);
163
  };
164
 
165
+ const handleSeek = (newProgress) => {
166
+ videoRef.current.currentTime = (newProgress / 100) * videoRef.current.duration;
167
+ setProgress(newProgress);
 
 
168
  };
169
 
170
  const handleMouseMove = () => {
 
186
  return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
187
  };
188
 
189
+ const updateBuffer = () => {
190
+ const videoElement = videoRef.current;
191
+ if (videoElement.buffered.length > 0) {
192
+ const bufferEnd = videoElement.buffered.end(videoElement.buffered.length - 1);
193
+ const bufferValue = (bufferEnd / videoElement.duration) * 100;
194
+ setBuffer(bufferValue);
195
+ }
196
+ };
197
+
198
  return (
199
  <div className="video-player-container" onMouseMove={handleMouseMove} onContextMenu={handleContextMenu}>
200
  <div className={`player-overlay ${showControls ? "show" : "hide"}`}>
201
+ <h2 className="video-title"><div className="control-btn"><FontAwesomeIcon icon={faAngleLeft} size="lg"/></div>{title}</h2>
202
  <div className="controls">
203
  <div className="player-controls-top">
204
  <label className="current-time">{formatTime(videoRef?.current?.currentTime)}</label>
205
+ <SeekableProgressBar progress={progress} buffer={buffer} onSeek={handleSeek} />
 
 
 
 
 
206
  <label className="duration">{formatTime(videoRef?.current?.duration)}</label>
207
  </div>
208
  <div className="player-controls-down">
frontend/src/components/SeekableProgressBar.css ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .MuiLinearProgress-barColorPrimary{
2
+ background-color: #4237b8 !important;
3
+ }
4
+
5
+ .MuiLinearProgress-bar2Buffer{
6
+ background-color: #7970dc !important;
7
+ }
8
+
9
+ .MuiLinearProgress-dashedColorPrimary{
10
+ background-image: radial-gradient(#282469 0%, #6b68a7 16%, transparent 42%) !important;
11
+ margin-top: 2px !important;
12
+ }
frontend/src/components/SeekableProgressBar.js ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useState } from 'react';
2
+ import { LinearProgress, Box } from '@mui/material';
3
+ import './SeekableProgressBar.css';
4
+
5
+ const SeekableProgressBar = ({
6
+ progress,
7
+ buffer,
8
+ onSeek,
9
+ width = '100%',
10
+ height = '10px',
11
+ margin = '10px',
12
+ borderRadios = '10px'
13
+ }) => {
14
+ const handleMouseDown = (event) => {
15
+ const progressBar = event.currentTarget;
16
+ const rect = progressBar.getBoundingClientRect();
17
+ const seekPosition = ((event.clientX - rect.left) / rect.width) * 100;
18
+ onSeek(seekPosition);
19
+ };
20
+
21
+ const handleMouseMove = (event) => {
22
+ if (isSeeking) {
23
+ const progressBar = event.currentTarget;
24
+ const rect = progressBar.getBoundingClientRect();
25
+ const seekPosition = ((event.clientX - rect.left) / rect.width) * 100;
26
+ onSeek(seekPosition);
27
+ }
28
+ };
29
+
30
+ const [isSeeking, setIsSeeking] = useState(false);
31
+
32
+ return (
33
+ <Box
34
+ onMouseDown={(event) => {
35
+ setIsSeeking(true);
36
+ handleMouseDown(event);
37
+ }}
38
+ onMouseUp={() => setIsSeeking(false)}
39
+ onMouseLeave={() => setIsSeeking(false)}
40
+ onMouseMove={handleMouseMove}
41
+ sx={{ position: 'relative', width: width }}
42
+ >
43
+ <LinearProgress
44
+ variant="buffer"
45
+ value={progress}
46
+ valueBuffer={buffer}
47
+ sx={{ height: height, margin: margin, borderRadius:borderRadios}}
48
+ />
49
+ <Box
50
+ sx={{
51
+ position: 'absolute',
52
+ width: '95%',
53
+ height: '100%',
54
+ cursor: 'pointer',
55
+ top: 0,
56
+ left: 0,
57
+ }}
58
+ />
59
+ </Box>
60
+ );
61
+ };
62
+
63
+ export default SeekableProgressBar;