Updates on download
This commit is contained in:
parent
c6629b387f
commit
6ca85079fa
6 changed files with 375 additions and 344 deletions
18
package.json
18
package.json
|
@ -15,26 +15,26 @@
|
|||
},
|
||||
"devDependencies": {
|
||||
"@eslint/compat": "^1.2.5",
|
||||
"@eslint/js": "^9.18.0",
|
||||
"@eslint/js": "^9.19.0",
|
||||
"@sveltejs/adapter-auto": "^4.0.0",
|
||||
"@sveltejs/kit": "^2.16.0",
|
||||
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
||||
"@sveltejs/kit": "^2.16.1",
|
||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||
"@tailwindcss/forms": "^0.5.10",
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"eslint": "^9.18.0",
|
||||
"eslint": "^9.19.0",
|
||||
"eslint-config-prettier": "^10.0.1",
|
||||
"eslint-plugin-svelte": "^2.46.1",
|
||||
"globals": "^15.14.0",
|
||||
"prettier": "^3.4.2",
|
||||
"prettier-plugin-svelte": "^3.3.3",
|
||||
"prettier-plugin-tailwindcss": "^0.6.10",
|
||||
"svelte": "^5.0.0",
|
||||
"svelte-check": "^4.0.0",
|
||||
"svelte": "^5.19.5",
|
||||
"svelte-check": "^4.1.4",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"typescript": "^5.0.0",
|
||||
"typescript-eslint": "^8.20.0",
|
||||
"vite": "^6.0.0"
|
||||
"typescript": "^5.7.3",
|
||||
"typescript-eslint": "^8.22.0",
|
||||
"vite": "^6.0.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"youtube-dl-exec": "^3.0.13"
|
||||
|
|
242
pnpm-lock.yaml
generated
242
pnpm-lock.yaml
generated
|
@ -14,19 +14,19 @@ importers:
|
|||
devDependencies:
|
||||
'@eslint/compat':
|
||||
specifier: ^1.2.5
|
||||
version: 1.2.5(eslint@9.18.0(jiti@1.21.7))
|
||||
version: 1.2.5(eslint@9.19.0(jiti@1.21.7))
|
||||
'@eslint/js':
|
||||
specifier: ^9.18.0
|
||||
version: 9.18.0
|
||||
specifier: ^9.19.0
|
||||
version: 9.19.0
|
||||
'@sveltejs/adapter-auto':
|
||||
specifier: ^4.0.0
|
||||
version: 4.0.0(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))
|
||||
version: 4.0.0(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))
|
||||
'@sveltejs/kit':
|
||||
specifier: ^2.16.0
|
||||
version: 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
specifier: ^2.16.1
|
||||
version: 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
specifier: ^5.0.3
|
||||
version: 5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@tailwindcss/forms':
|
||||
specifier: ^0.5.10
|
||||
version: 0.5.10(tailwindcss@3.4.17)
|
||||
|
@ -37,14 +37,14 @@ importers:
|
|||
specifier: ^10.4.20
|
||||
version: 10.4.20(postcss@8.5.1)
|
||||
eslint:
|
||||
specifier: ^9.18.0
|
||||
version: 9.18.0(jiti@1.21.7)
|
||||
specifier: ^9.19.0
|
||||
version: 9.19.0(jiti@1.21.7)
|
||||
eslint-config-prettier:
|
||||
specifier: ^10.0.1
|
||||
version: 10.0.1(eslint@9.18.0(jiti@1.21.7))
|
||||
version: 10.0.1(eslint@9.19.0(jiti@1.21.7))
|
||||
eslint-plugin-svelte:
|
||||
specifier: ^2.46.1
|
||||
version: 2.46.1(eslint@9.18.0(jiti@1.21.7))(svelte@5.19.2)
|
||||
version: 2.46.1(eslint@9.19.0(jiti@1.21.7))(svelte@5.19.5)
|
||||
globals:
|
||||
specifier: ^15.14.0
|
||||
version: 15.14.0
|
||||
|
@ -53,27 +53,27 @@ importers:
|
|||
version: 3.4.2
|
||||
prettier-plugin-svelte:
|
||||
specifier: ^3.3.3
|
||||
version: 3.3.3(prettier@3.4.2)(svelte@5.19.2)
|
||||
version: 3.3.3(prettier@3.4.2)(svelte@5.19.5)
|
||||
prettier-plugin-tailwindcss:
|
||||
specifier: ^0.6.10
|
||||
version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.2))(prettier@3.4.2)
|
||||
version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.5))(prettier@3.4.2)
|
||||
svelte:
|
||||
specifier: ^5.0.0
|
||||
version: 5.19.2
|
||||
specifier: ^5.19.5
|
||||
version: 5.19.5
|
||||
svelte-check:
|
||||
specifier: ^4.0.0
|
||||
version: 4.1.4(svelte@5.19.2)(typescript@5.7.3)
|
||||
specifier: ^4.1.4
|
||||
version: 4.1.4(svelte@5.19.5)(typescript@5.7.3)
|
||||
tailwindcss:
|
||||
specifier: ^3.4.17
|
||||
version: 3.4.17
|
||||
typescript:
|
||||
specifier: ^5.0.0
|
||||
specifier: ^5.7.3
|
||||
version: 5.7.3
|
||||
typescript-eslint:
|
||||
specifier: ^8.20.0
|
||||
version: 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
specifier: ^8.22.0
|
||||
version: 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
vite:
|
||||
specifier: ^6.0.0
|
||||
specifier: ^6.0.11
|
||||
version: 6.0.11(jiti@1.21.7)(yaml@2.7.0)
|
||||
|
||||
packages:
|
||||
|
@ -267,8 +267,8 @@ packages:
|
|||
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/js@9.18.0':
|
||||
resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==}
|
||||
'@eslint/js@9.19.0':
|
||||
resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@eslint/object-schema@2.1.5':
|
||||
|
@ -491,51 +491,51 @@ packages:
|
|||
'@types/json-schema@7.0.15':
|
||||
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.21.0':
|
||||
resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==}
|
||||
'@typescript-eslint/eslint-plugin@8.22.0':
|
||||
resolution: {integrity: sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <5.8.0'
|
||||
|
||||
'@typescript-eslint/parser@8.21.0':
|
||||
resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==}
|
||||
'@typescript-eslint/parser@8.22.0':
|
||||
resolution: {integrity: sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <5.8.0'
|
||||
|
||||
'@typescript-eslint/scope-manager@8.21.0':
|
||||
resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==}
|
||||
'@typescript-eslint/scope-manager@8.22.0':
|
||||
resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/type-utils@8.21.0':
|
||||
resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==}
|
||||
'@typescript-eslint/type-utils@8.22.0':
|
||||
resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <5.8.0'
|
||||
|
||||
'@typescript-eslint/types@8.21.0':
|
||||
resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==}
|
||||
'@typescript-eslint/types@8.22.0':
|
||||
resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.21.0':
|
||||
resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==}
|
||||
'@typescript-eslint/typescript-estree@8.22.0':
|
||||
resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
typescript: '>=4.8.4 <5.8.0'
|
||||
|
||||
'@typescript-eslint/utils@8.21.0':
|
||||
resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==}
|
||||
'@typescript-eslint/utils@8.22.0':
|
||||
resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
typescript: '>=4.8.4 <5.8.0'
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.21.0':
|
||||
resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==}
|
||||
'@typescript-eslint/visitor-keys@8.22.0':
|
||||
resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
acorn-jsx@5.3.2:
|
||||
|
@ -807,8 +807,8 @@ packages:
|
|||
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
|
||||
eslint@9.18.0:
|
||||
resolution: {integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==}
|
||||
eslint@9.19.0:
|
||||
resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
|
@ -1515,8 +1515,8 @@ packages:
|
|||
svelte:
|
||||
optional: true
|
||||
|
||||
svelte@5.19.2:
|
||||
resolution: {integrity: sha512-Ww1uLgdX5MdQrAO5zfU1dWUh6zqiPR6uIbwqm8a+4eQ+tNEYHRPgypvKKfHh9lmTkmJ30PWZ2O5qX8aS+PblRQ==}
|
||||
svelte@5.19.5:
|
||||
resolution: {integrity: sha512-vVAntseegJX80sgbY8CxQISSE/VoDSfP7VZHoQaf2+z+2XOPOz/N+k455HJmO9O0g8oxTtuE0TBhC/5LAP4lPg==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
tailwindcss@3.4.17:
|
||||
|
@ -1567,8 +1567,8 @@ packages:
|
|||
type@2.7.3:
|
||||
resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
|
||||
|
||||
typescript-eslint@8.21.0:
|
||||
resolution: {integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==}
|
||||
typescript-eslint@8.22.0:
|
||||
resolution: {integrity: sha512-Y2rj210FW1Wb6TWXzQc5+P+EWI9/zdS57hLEc0gnyuvdzWo8+Y8brKlbj0muejonhMI/xAZCnZZwjbIfv1CkOw==}
|
||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||
peerDependencies:
|
||||
eslint: ^8.57.0 || ^9.0.0
|
||||
|
@ -1760,16 +1760,16 @@ snapshots:
|
|||
'@esbuild/win32-x64@0.24.2':
|
||||
optional: true
|
||||
|
||||
'@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))':
|
||||
'@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@1.21.7))':
|
||||
dependencies:
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
eslint-visitor-keys: 3.4.3
|
||||
|
||||
'@eslint-community/regexpp@4.12.1': {}
|
||||
|
||||
'@eslint/compat@1.2.5(eslint@9.18.0(jiti@1.21.7))':
|
||||
'@eslint/compat@1.2.5(eslint@9.19.0(jiti@1.21.7))':
|
||||
optionalDependencies:
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
|
||||
'@eslint/config-array@0.19.1':
|
||||
dependencies:
|
||||
|
@ -1797,7 +1797,7 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@eslint/js@9.18.0': {}
|
||||
'@eslint/js@9.19.0': {}
|
||||
|
||||
'@eslint/object-schema@2.1.5': {}
|
||||
|
||||
|
@ -1923,14 +1923,14 @@ snapshots:
|
|||
'@rollup/rollup-win32-x64-msvc@4.32.0':
|
||||
optional: true
|
||||
|
||||
'@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))':
|
||||
'@sveltejs/adapter-auto@4.0.0(@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))':
|
||||
dependencies:
|
||||
'@sveltejs/kit': 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@sveltejs/kit': 2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
import-meta-resolve: 4.1.0
|
||||
|
||||
'@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
'@sveltejs/kit@2.16.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@types/cookie': 0.6.0
|
||||
cookie: 0.6.0
|
||||
devalue: 5.1.1
|
||||
|
@ -1942,26 +1942,26 @@ snapshots:
|
|||
sade: 1.8.1
|
||||
set-cookie-parser: 2.7.1
|
||||
sirv: 3.0.0
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
vite: 6.0.11(jiti@1.21.7)(yaml@2.7.0)
|
||||
|
||||
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
'@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
debug: 4.4.0
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
vite: 6.0.11(jiti@1.21.7)(yaml@2.7.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
'@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))':
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.2)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
'@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0)))(svelte@5.19.5)(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
debug: 4.4.0
|
||||
deepmerge: 4.3.1
|
||||
kleur: 4.1.5
|
||||
magic-string: 0.30.17
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
vite: 6.0.11(jiti@1.21.7)(yaml@2.7.0)
|
||||
vitefu: 1.0.5(vite@6.0.11(jiti@1.21.7)(yaml@2.7.0))
|
||||
transitivePeerDependencies:
|
||||
|
@ -1986,15 +1986,15 @@ snapshots:
|
|||
|
||||
'@types/json-schema@7.0.15': {}
|
||||
|
||||
'@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
'@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
dependencies:
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/scope-manager': 8.21.0
|
||||
'@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/visitor-keys': 8.21.0
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
'@typescript-eslint/parser': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/scope-manager': 8.22.0
|
||||
'@typescript-eslint/type-utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/visitor-keys': 8.22.0
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
graphemer: 1.4.0
|
||||
ignore: 5.3.2
|
||||
natural-compare: 1.4.0
|
||||
|
@ -2003,40 +2003,40 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
'@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 8.21.0
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
|
||||
'@typescript-eslint/visitor-keys': 8.21.0
|
||||
'@typescript-eslint/scope-manager': 8.22.0
|
||||
'@typescript-eslint/types': 8.22.0
|
||||
'@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3)
|
||||
'@typescript-eslint/visitor-keys': 8.22.0
|
||||
debug: 4.4.0
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/scope-manager@8.21.0':
|
||||
'@typescript-eslint/scope-manager@8.22.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/visitor-keys': 8.21.0
|
||||
'@typescript-eslint/types': 8.22.0
|
||||
'@typescript-eslint/visitor-keys': 8.22.0
|
||||
|
||||
'@typescript-eslint/type-utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
'@typescript-eslint/type-utils@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
debug: 4.4.0
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
ts-api-utils: 2.0.0(typescript@5.7.3)
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/types@8.21.0': {}
|
||||
'@typescript-eslint/types@8.22.0': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)':
|
||||
'@typescript-eslint/typescript-estree@8.22.0(typescript@5.7.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/visitor-keys': 8.21.0
|
||||
'@typescript-eslint/types': 8.22.0
|
||||
'@typescript-eslint/visitor-keys': 8.22.0
|
||||
debug: 4.4.0
|
||||
fast-glob: 3.3.3
|
||||
is-glob: 4.0.3
|
||||
|
@ -2047,20 +2047,20 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
'@typescript-eslint/utils@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)':
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
|
||||
'@typescript-eslint/scope-manager': 8.21.0
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3)
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7))
|
||||
'@typescript-eslint/scope-manager': 8.22.0
|
||||
'@typescript-eslint/types': 8.22.0
|
||||
'@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
'@typescript-eslint/visitor-keys@8.21.0':
|
||||
'@typescript-eslint/visitor-keys@8.22.0':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 8.21.0
|
||||
'@typescript-eslint/types': 8.22.0
|
||||
eslint-visitor-keys: 4.2.0
|
||||
|
||||
acorn-jsx@5.3.2(acorn@8.14.0):
|
||||
|
@ -2303,21 +2303,21 @@ snapshots:
|
|||
|
||||
escape-string-regexp@4.0.0: {}
|
||||
|
||||
eslint-compat-utils@0.5.1(eslint@9.18.0(jiti@1.21.7)):
|
||||
eslint-compat-utils@0.5.1(eslint@9.19.0(jiti@1.21.7)):
|
||||
dependencies:
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
semver: 7.6.3
|
||||
|
||||
eslint-config-prettier@10.0.1(eslint@9.18.0(jiti@1.21.7)):
|
||||
eslint-config-prettier@10.0.1(eslint@9.19.0(jiti@1.21.7)):
|
||||
dependencies:
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
|
||||
eslint-plugin-svelte@2.46.1(eslint@9.18.0(jiti@1.21.7))(svelte@5.19.2):
|
||||
eslint-plugin-svelte@2.46.1(eslint@9.19.0(jiti@1.21.7))(svelte@5.19.5):
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7))
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
eslint-compat-utils: 0.5.1(eslint@9.18.0(jiti@1.21.7))
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
eslint-compat-utils: 0.5.1(eslint@9.19.0(jiti@1.21.7))
|
||||
esutils: 2.0.3
|
||||
known-css-properties: 0.35.0
|
||||
postcss: 8.5.1
|
||||
|
@ -2325,9 +2325,9 @@ snapshots:
|
|||
postcss-safe-parser: 6.0.0(postcss@8.5.1)
|
||||
postcss-selector-parser: 6.1.2
|
||||
semver: 7.6.3
|
||||
svelte-eslint-parser: 0.43.0(svelte@5.19.2)
|
||||
svelte-eslint-parser: 0.43.0(svelte@5.19.5)
|
||||
optionalDependencies:
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
transitivePeerDependencies:
|
||||
- ts-node
|
||||
|
||||
|
@ -2345,14 +2345,14 @@ snapshots:
|
|||
|
||||
eslint-visitor-keys@4.2.0: {}
|
||||
|
||||
eslint@9.18.0(jiti@1.21.7):
|
||||
eslint@9.19.0(jiti@1.21.7):
|
||||
dependencies:
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7))
|
||||
'@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@1.21.7))
|
||||
'@eslint-community/regexpp': 4.12.1
|
||||
'@eslint/config-array': 0.19.1
|
||||
'@eslint/core': 0.10.0
|
||||
'@eslint/eslintrc': 3.2.0
|
||||
'@eslint/js': 9.18.0
|
||||
'@eslint/js': 9.19.0
|
||||
'@eslint/plugin-kit': 0.2.5
|
||||
'@humanfs/node': 0.16.6
|
||||
'@humanwhocodes/module-importer': 1.0.1
|
||||
|
@ -2811,16 +2811,16 @@ snapshots:
|
|||
|
||||
prelude-ls@1.2.1: {}
|
||||
|
||||
prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.2):
|
||||
prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.5):
|
||||
dependencies:
|
||||
prettier: 3.4.2
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
|
||||
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.2))(prettier@3.4.2):
|
||||
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.5))(prettier@3.4.2):
|
||||
dependencies:
|
||||
prettier: 3.4.2
|
||||
optionalDependencies:
|
||||
prettier-plugin-svelte: 3.3.3(prettier@3.4.2)(svelte@5.19.2)
|
||||
prettier-plugin-svelte: 3.3.3(prettier@3.4.2)(svelte@5.19.5)
|
||||
|
||||
prettier@3.4.2: {}
|
||||
|
||||
|
@ -2956,19 +2956,19 @@ snapshots:
|
|||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
svelte-check@4.1.4(svelte@5.19.2)(typescript@5.7.3):
|
||||
svelte-check@4.1.4(svelte@5.19.5)(typescript@5.7.3):
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.25
|
||||
chokidar: 4.0.3
|
||||
fdir: 6.4.3
|
||||
picocolors: 1.1.1
|
||||
sade: 1.8.1
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- picomatch
|
||||
|
||||
svelte-eslint-parser@0.43.0(svelte@5.19.2):
|
||||
svelte-eslint-parser@0.43.0(svelte@5.19.5):
|
||||
dependencies:
|
||||
eslint-scope: 7.2.2
|
||||
eslint-visitor-keys: 3.4.3
|
||||
|
@ -2976,9 +2976,9 @@ snapshots:
|
|||
postcss: 8.5.1
|
||||
postcss-scss: 4.0.9(postcss@8.5.1)
|
||||
optionalDependencies:
|
||||
svelte: 5.19.2
|
||||
svelte: 5.19.5
|
||||
|
||||
svelte@5.19.2:
|
||||
svelte@5.19.5:
|
||||
dependencies:
|
||||
'@ampproject/remapping': 2.3.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
|
@ -3059,12 +3059,12 @@ snapshots:
|
|||
|
||||
type@2.7.3: {}
|
||||
|
||||
typescript-eslint@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3):
|
||||
typescript-eslint@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3):
|
||||
dependencies:
|
||||
'@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
eslint: 9.18.0(jiti@1.21.7)
|
||||
'@typescript-eslint/eslint-plugin': 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/parser': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
'@typescript-eslint/utils': 8.22.0(eslint@9.19.0(jiti@1.21.7))(typescript@5.7.3)
|
||||
eslint: 9.19.0(jiti@1.21.7)
|
||||
typescript: 5.7.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
|
3
src/lib/components/DownloadManager.svelte
Normal file
3
src/lib/components/DownloadManager.svelte
Normal file
|
@ -0,0 +1,3 @@
|
|||
<script lang='ts'>
|
||||
let props = $props();
|
||||
</script>
|
|
@ -1,6 +1,20 @@
|
|||
<script lang="ts">
|
||||
import '../app.css';
|
||||
|
||||
let { children } = $props();
|
||||
</script>
|
||||
|
||||
{@render children()}
|
||||
|
||||
<footer
|
||||
class="absolute bottom-0 w-[100dvw] mt-10 bg-black text-green-500 text-center py-4 border-t-4 border-green-500"
|
||||
>
|
||||
Made with ❤️ by Emersa <span>©</span>
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
span {
|
||||
transform: rotate(180deg);
|
||||
display: inline-block;
|
||||
}
|
||||
</style>
|
|
@ -1,42 +1,80 @@
|
|||
import { DOWNLOAD_PATH } from "$env/static/private";
|
||||
import { redirect } from "@sveltejs/kit";
|
||||
import youtubedl from "youtube-dl-exec";
|
||||
import { DOWNLOAD_PATH } from '$env/static/private';
|
||||
import { redirect } from '@sveltejs/kit';
|
||||
import youtubedl from 'youtube-dl-exec';
|
||||
|
||||
const isAudioFormat = (format: string) => {
|
||||
let isAudio = false;
|
||||
|
||||
switch (format) {
|
||||
case 'mp3':
|
||||
isAudio = true;
|
||||
break;
|
||||
default:
|
||||
isAudio = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return isAudio;
|
||||
};
|
||||
|
||||
const isVideoFormat = (format: string) => {
|
||||
let isVideo = false;
|
||||
|
||||
switch (format) {
|
||||
case 'mp4':
|
||||
isVideo = true;
|
||||
break;
|
||||
default:
|
||||
isVideo = false;
|
||||
break;
|
||||
}
|
||||
|
||||
return isVideo;
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
download: async ({ request, cookies }) => {
|
||||
const data = await request.formData();
|
||||
download: async ({ request, cookies }) => {
|
||||
const data = await request.formData();
|
||||
|
||||
const obj = {};
|
||||
for (const element of data) {
|
||||
obj[element[0]] = element[1];
|
||||
}
|
||||
const obj = {};
|
||||
for (const element of data) {
|
||||
obj[element[0]] = element[1];
|
||||
}
|
||||
|
||||
const { format, source, link } = obj;
|
||||
const { format, source, link } = obj;
|
||||
|
||||
if (!(format && source && link)) {
|
||||
throw redirect(307, "/");
|
||||
}
|
||||
if (!(format && source && link)) {
|
||||
throw redirect(307, '/');
|
||||
}
|
||||
|
||||
console.info(`Asked ${source} download of ${link}`);
|
||||
console.info(`Asked ${source} download of ${link}`);
|
||||
|
||||
switch (source) {
|
||||
case "youtube":
|
||||
const output = await youtubedl(link, {
|
||||
output: `${DOWNLOAD_PATH}/%(artist)s-%(title)s.%(ext)s`,
|
||||
embedThumbnail: true,
|
||||
audioFormat: format
|
||||
});
|
||||
case 'youtube':
|
||||
const options = {
|
||||
output: `${DOWNLOAD_PATH}/%(artist)s-%(title)s.%(ext)s`,
|
||||
embedThumbnail: true
|
||||
}
|
||||
|
||||
console.log(output);
|
||||
console.info(`Downloaded ${link} to ${output}`);
|
||||
if (isAudioFormat(format)) {
|
||||
options.extractAudio = true;
|
||||
options.audioFormat = format;
|
||||
}
|
||||
|
||||
break;
|
||||
case "spotify":
|
||||
break;
|
||||
default:
|
||||
console.error("ops");
|
||||
}
|
||||
isVideoFormat(format) ? options.format = format : ''
|
||||
|
||||
return { success: true };
|
||||
},
|
||||
const output = await youtubedl(link);
|
||||
|
||||
console.log(output);
|
||||
console.info(`Downloaded ${link} to ${output}`);
|
||||
|
||||
break;
|
||||
case 'spotify':
|
||||
break;
|
||||
default:
|
||||
console.error('ops');
|
||||
}
|
||||
|
||||
return { success: true };
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,209 +1,185 @@
|
|||
<script>
|
||||
let source = $state("youtube");
|
||||
let link = $state("");
|
||||
let format = "mp3";
|
||||
let showModal = false;
|
||||
import { enhance } from '$app/forms';
|
||||
|
||||
const toggleModal = () => {
|
||||
showModal = !showModal;
|
||||
};
|
||||
let { form } = $props();
|
||||
let source = $state('youtube');
|
||||
let link = $state('');
|
||||
let format = $state('mp3');
|
||||
let loading = $state(true);
|
||||
let showModal = $state(false);
|
||||
let error = $state(false);
|
||||
|
||||
const handleSubmit = (e) => {
|
||||
e.preventDefault();
|
||||
console.log({
|
||||
source,
|
||||
link,
|
||||
format,
|
||||
});
|
||||
};
|
||||
const toggleModal = () => {
|
||||
showModal = !showModal;
|
||||
};
|
||||
|
||||
$effect(() => {
|
||||
// Auto selected the radio button based on url regex
|
||||
if (link.includes('spotify')) {
|
||||
source = 'spotify'
|
||||
} else if (link.includes('youtube')) {
|
||||
source = 'youtube'
|
||||
}
|
||||
})
|
||||
const handleSubmit = (e) => {
|
||||
e.preventDefault();
|
||||
console.log({
|
||||
source,
|
||||
link,
|
||||
format
|
||||
});
|
||||
};
|
||||
|
||||
const onFormSubmit = ({ formElement, formData, action, cancel, submitter }) => {
|
||||
loading = true;
|
||||
// `formElement` is this `<form>` element
|
||||
// `formData` is its `FormData` object that's about to be submitted
|
||||
// `action` is the URL to which the form is posted
|
||||
// calling `cancel()` will prevent the submission
|
||||
// `submitter` is the `HTMLElement` that caused the form to be submitted
|
||||
|
||||
return async ({ result, update }) => {
|
||||
loading = false;
|
||||
error = result.type !== 'success';
|
||||
// `result` is an `ActionResult` object
|
||||
// `update` is a function which triggers the default logic that would be triggered if this callback wasn't set
|
||||
};
|
||||
};
|
||||
|
||||
$effect(() => {
|
||||
// Auto selected the radio button based on url regex
|
||||
if (link.includes('spotify')) {
|
||||
source = 'spotify';
|
||||
} else if (link.includes('youtube')) {
|
||||
source = 'youtube';
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<div
|
||||
class="relative sm:max-w-sm md:max-w-md lg:max-w-lg 2xl:max-w-2xl mx-auto mt-10 p-6 bg-black text-green-500 rounded-lg shadow-lg border-4 border-green-500"
|
||||
id="wrapper"
|
||||
class="relative mx-auto rounded-lg bg-black p-6 text-green-500 shadow-lg sm:max-w-sm sm:border-4 sm:border-green-500 md:mt-10 md:max-w-md lg:max-w-lg 2xl:max-w-2xl"
|
||||
>
|
||||
<!-- Info Icon -->
|
||||
<button
|
||||
onclick={toggleModal}
|
||||
class="absolute top-3 right-3 text-pink-500 hover:text-pink-300 transition"
|
||||
aria-label="Open Info Modal"
|
||||
>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="currentColor"
|
||||
class="w-6 h-6"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M12 0C5.373 0 0 5.373 0 12c0 6.627 5.373 12 12 12s12-5.373 12-12C24 5.373 18.627 0 12 0zm.75 18h-1.5v-6h1.5v6zm0-8h-1.5V8h1.5v2z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<!-- Info Icon -->
|
||||
<button
|
||||
onclick={toggleModal}
|
||||
class="absolute right-3 top-3 text-pink-500 transition hover:text-pink-300"
|
||||
aria-label="Open Info Modal"
|
||||
>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="h-6 w-6" viewBox="0 0 24 24">
|
||||
<path
|
||||
d="M12 0C5.373 0 0 5.373 0 12c0 6.627 5.373 12 12 12s12-5.373 12-12C24 5.373 18.627 0 12 0zm.75 18h-1.5v-6h1.5v6zm0-8h-1.5V8h1.5v2z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<h1 class="text-xl text-center mb-6">🐙 Scaricatore 🐙</h1>
|
||||
<form method="POST" action="?/download" class="space-y-6">
|
||||
<!-- Source Selection -->
|
||||
<fieldset class="space-y-4">
|
||||
<legend class="text-green-400 text-sm">Choose Source:</legend>
|
||||
|
||||
<label class="flex items-center space-x-3">
|
||||
<input
|
||||
type="radio"
|
||||
name="source"
|
||||
value="youtube"
|
||||
bind:group={source}
|
||||
class="retro-radio"
|
||||
/>
|
||||
<span>YouTube</span>
|
||||
</label>
|
||||
<h1 class="mb-6 text-center text-xl">🐙 Scaricatore 🐙</h1>
|
||||
<form method="POST" action="?/download" class="space-y-6" use:enhance={onFormSubmit}>
|
||||
<!-- Source Selection -->
|
||||
<fieldset class="space-y-4">
|
||||
<legend class="text-green-400">Choose Source:</legend>
|
||||
|
||||
<label class="flex items-center space-x-3">
|
||||
<input
|
||||
type="radio"
|
||||
name="source"
|
||||
value="spotify"
|
||||
bind:group={source}
|
||||
class="retro-radio"
|
||||
/>
|
||||
<span>Spotify</span>
|
||||
</label>
|
||||
<label class="flex items-center space-x-3">
|
||||
<input type="radio" name="source" value="youtube" bind:group={source} class="retro-radio" />
|
||||
<span>YouTube</span>
|
||||
</label>
|
||||
|
||||
<label class="flex items-center space-x-3">
|
||||
<input
|
||||
type="radio"
|
||||
name="source"
|
||||
value="other"
|
||||
bind:group={source}
|
||||
class="retro-radio"
|
||||
/>
|
||||
<span>
|
||||
Other (<a
|
||||
href="https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="text-pink-500 hover:underline"
|
||||
>supported sites
|
||||
</a>)
|
||||
</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
<label class="flex items-center space-x-3">
|
||||
<input type="radio" name="source" value="spotify" bind:group={source} class="retro-radio" />
|
||||
<span>Spotify</span>
|
||||
</label>
|
||||
|
||||
<!-- Link Input -->
|
||||
<div>
|
||||
<label for="link" class="block text-green-400 text-sm mb-2">
|
||||
Enter Playlist or Video Link:
|
||||
</label>
|
||||
<input
|
||||
name="link"
|
||||
type="url"
|
||||
id="link"
|
||||
bind:value={link}
|
||||
required
|
||||
placeholder="Paste your link here"
|
||||
class="w-full px-4 py-3 text-black bg-green-200 border-4 border-green-500 rounded-lg focus:outline-none focus:border-pink-500"
|
||||
/>
|
||||
</div>
|
||||
<label class="flex items-center space-x-3">
|
||||
<input type="radio" name="source" value="other" bind:group={source} class="retro-radio" />
|
||||
<span>
|
||||
Other (<a
|
||||
href="https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="text-pink-500 hover:underline"
|
||||
>supported sites
|
||||
</a>)
|
||||
</span>
|
||||
</label>
|
||||
</fieldset>
|
||||
|
||||
<!-- Format Selection -->
|
||||
<div>
|
||||
<label for="format" class="block text-green-400 text-sm mb-2">
|
||||
Choose Format:
|
||||
</label>
|
||||
<select
|
||||
id="format"
|
||||
name="format"
|
||||
bind:value={format}
|
||||
class="w-full px-4 py-3 text-black bg-green-200 border-4 border-green-500 rounded-lg focus:outline-none focus:border-pink-500"
|
||||
>
|
||||
<option value="mp3">MP3</option>
|
||||
<option value="ogg">OGG</option>
|
||||
<option value="mp4">MP4</option>
|
||||
</select>
|
||||
</div>
|
||||
<!-- Link Input -->
|
||||
<div>
|
||||
<label for="link" class="mb-2 block text-green-400"> Enter Playlist or Video Link: </label>
|
||||
<input
|
||||
name="link"
|
||||
type="url"
|
||||
id="link"
|
||||
bind:value={link}
|
||||
required
|
||||
placeholder="Paste your link here"
|
||||
class="w-full rounded-lg border-4 border-green-500 bg-green-200 px-4 py-3 text-black focus:border-pink-500 focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<button
|
||||
type="submit"
|
||||
class="w-full px-4 py-3 text-black bg-pink-500 border-4 border-pink-700 rounded-lg hover:bg-pink-600 active:border-yellow-500 transition"
|
||||
>
|
||||
Start Download!
|
||||
</button>
|
||||
</form>
|
||||
<!-- Format Selection -->
|
||||
<div>
|
||||
<label for="format" class="mb-2 block text-green-400"> Choose Format: </label>
|
||||
<select
|
||||
id="format"
|
||||
name="format"
|
||||
bind:value={format}
|
||||
class="w-full rounded-lg border-4 border-green-500 bg-green-200 px-4 py-3 text-black focus:border-pink-500 focus:outline-none"
|
||||
>
|
||||
<option value="mp3">MP3</option>
|
||||
<option value="vorbis">OGG</option>
|
||||
<option value="mp4">MP4</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Submit Button -->
|
||||
<button
|
||||
type="submit"
|
||||
class="w-full rounded-lg border-4 border-pink-700 bg-pink-500 px-4 py-3 text-black transition hover:bg-pink-600 active:border-yellow-500"
|
||||
>
|
||||
Start Download!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Modal -->
|
||||
{#if showModal}
|
||||
<div
|
||||
class="fixed inset-0 flex items-center justify-center bg-black bg-opacity-80 z-50"
|
||||
>
|
||||
<div
|
||||
class="w-4/5 max-w-lg bg-green-900 text-green-100 p-6 rounded-lg border-4 border-green-500 text-center"
|
||||
>
|
||||
<h2 class="text-lg mb-4">ℹ️ Retro Media Downloader Info</h2>
|
||||
<p class="text-sm">
|
||||
This app allows you to download Spotify playlists and YouTube videos
|
||||
directly. Choose your source, paste the link, and select a format to
|
||||
start downloading!
|
||||
</p>
|
||||
<button
|
||||
onclick={toggleModal}
|
||||
class="mt-6 px-4 py-2 bg-pink-500 text-black border-4 border-pink-700 rounded-lg hover:bg-pink-600"
|
||||
>
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-80">
|
||||
<div
|
||||
class="w-4/5 max-w-lg rounded-lg border-4 border-green-500 bg-green-900 p-6 text-center text-green-100"
|
||||
>
|
||||
<h2 class="mb-4 text-lg">ℹ️ Retro Media Downloader Info</h2>
|
||||
<p>
|
||||
This app allows you to download Spotify playlists and YouTube videos directly. Choose your
|
||||
source, paste the link, and select a format to start downloading!
|
||||
</p>
|
||||
<button
|
||||
onclick={toggleModal}
|
||||
class="mt-6 rounded-lg border-4 border-pink-700 bg-pink-500 px-4 py-2 text-black hover:bg-pink-600"
|
||||
>
|
||||
Close
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<!-- Footer -->
|
||||
<footer
|
||||
class="absolute bottom-0 w-[100dvw] mt-10 bg-black text-green-500 text-center py-4 border-t-4 border-green-500"
|
||||
>
|
||||
Copyleft © 2024 - Made with ❤️ by Emersa
|
||||
</footer>
|
||||
|
||||
<style>
|
||||
@import url("https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap");
|
||||
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap');
|
||||
|
||||
* {
|
||||
font-family: "Press Start 2P", sans-serif;
|
||||
}
|
||||
.retro-radio {
|
||||
appearance: none;
|
||||
background-color: #000;
|
||||
border: 2px solid #39ff14;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
* {
|
||||
font-size: 12px;
|
||||
font-family: 'Press Start 2P', sans-serif;
|
||||
}
|
||||
.retro-radio {
|
||||
appearance: none;
|
||||
background-color: #000;
|
||||
border: 2px solid #39ff14;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.retro-radio:checked {
|
||||
background-color: #39ff14;
|
||||
box-shadow:
|
||||
0 0 4px #39ff14,
|
||||
0 0 10px #39ff14;
|
||||
}
|
||||
.retro-radio:checked {
|
||||
background-color: #39ff14;
|
||||
box-shadow:
|
||||
0 0 4px #39ff14,
|
||||
0 0 10px #39ff14;
|
||||
}
|
||||
|
||||
input[type="url"],
|
||||
select {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.retro-container {
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
padding: 20px;
|
||||
background: rgba(0, 0, 0, 0.8); /* Semi-transparent black */
|
||||
border: 4px solid #39ff14;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 0 20px #39ff14;
|
||||
}
|
||||
input[type='url'],
|
||||
select {
|
||||
font-family: inherit;
|
||||
}
|
||||
</style>
|
||||
|
|
Loading…
Add table
Reference in a new issue