From 453cd2a3735e1909046e32d4390d8ed8f9a3933b Mon Sep 17 00:00:00 2001 From: marcobaobao Date: Fri, 9 Feb 2024 10:47:18 +0100 Subject: [PATCH] implementing download --- ui/index.html | 25 ++--- ui/package.json | 5 +- ui/pnpm-lock.yaml | 50 ++++++---- ui/{src/assets => public}/svelte.svg | 0 ui/src/App.svelte | 39 +++++--- ui/src/app.css | 6 +- ui/src/lib/Button.svelte | 15 +++ ui/src/lib/Chip.svelte | 10 ++ ui/src/lib/CookiesTextField.svelte | 137 +++++++++++++++++++++++++++ ui/src/lib/DownloadCard.svelte | 82 ++++++++++++++++ ui/src/lib/FloatingAction.svelte | 23 +++++ ui/src/lib/Footer.svelte | 50 ++++++++++ ui/src/lib/Navbar.svelte | 74 ++++++++++++--- ui/src/lib/NewDownload.svelte | 21 ++++ ui/src/lib/Settings.svelte | 13 +++ ui/src/lib/Spinner.svelte | 19 ++++ ui/src/lib/TextField.svelte | 14 +++ ui/src/lib/ffetch.ts | 30 ++++++ ui/src/lib/store.ts | 4 +- ui/src/lib/utils.ts | 11 ++- ui/src/main.ts | 3 + 21 files changed, 569 insertions(+), 62 deletions(-) rename ui/{src/assets => public}/svelte.svg (100%) create mode 100644 ui/src/lib/Button.svelte create mode 100644 ui/src/lib/Chip.svelte create mode 100644 ui/src/lib/CookiesTextField.svelte create mode 100644 ui/src/lib/DownloadCard.svelte create mode 100644 ui/src/lib/FloatingAction.svelte create mode 100644 ui/src/lib/Footer.svelte create mode 100644 ui/src/lib/NewDownload.svelte create mode 100644 ui/src/lib/Settings.svelte create mode 100644 ui/src/lib/Spinner.svelte create mode 100644 ui/src/lib/TextField.svelte create mode 100644 ui/src/lib/ffetch.ts diff --git a/ui/index.html b/ui/index.html index b6c5f0a..f52d876 100644 --- a/ui/index.html +++ b/ui/index.html @@ -1,13 +1,16 @@ - - - - - Vite + Svelte + TS - - -
- - - + + + + + + yt-dlp WebUI + + + +
+ + + + \ No newline at end of file diff --git a/ui/package.json b/ui/package.json index 61d9c1c..b5b3381 100644 --- a/ui/package.json +++ b/ui/package.json @@ -12,6 +12,7 @@ "devDependencies": { "@sveltejs/vite-plugin-svelte": "^3.0.1", "@tsconfig/svelte": "^5.0.2", + "@zerodevx/svelte-toast": "^0.9.5", "autoprefixer": "^10.4.17", "postcss": "^8.4.34", "svelte": "^4.2.8", @@ -22,6 +23,8 @@ "vite": "^5.0.8" }, "dependencies": { - "fp-ts": "^2.16.2" + "@fontsource/roboto": "^5.0.8", + "fp-ts": "^2.16.2", + "lucide-svelte": "^0.323.0" } } diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 9b924b0..b766409 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -5,9 +5,15 @@ settings: excludeLinksFromLockfile: false dependencies: + '@fontsource/roboto': + specifier: ^5.0.8 + version: 5.0.8 fp-ts: specifier: ^2.16.2 version: 2.16.2 + lucide-svelte: + specifier: ^0.323.0 + version: 0.323.0(svelte@4.2.10) devDependencies: '@sveltejs/vite-plugin-svelte': @@ -16,6 +22,9 @@ devDependencies: '@tsconfig/svelte': specifier: ^5.0.2 version: 5.0.2 + '@zerodevx/svelte-toast': + specifier: ^0.9.5 + version: 0.9.5(svelte@4.2.10) autoprefixer: specifier: ^10.4.17 version: 10.4.17(postcss@8.4.34) @@ -54,7 +63,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.22 - dev: true /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} @@ -263,6 +271,10 @@ packages: dev: true optional: true + /@fontsource/roboto@5.0.8: + resolution: {integrity: sha512-XxPltXs5R31D6UZeLIV1td3wTXU3jzd3f2DLsXI8tytMGBkIsGcc9sIyiupRtA8y73HAhuSCeweOoBqf6DbWCA==} + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -282,28 +294,23 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.22 - dev: true /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.22: resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -479,17 +486,23 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/pug@2.0.10: resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} dev: true + /@zerodevx/svelte-toast@0.9.5(svelte@4.2.10): + resolution: {integrity: sha512-JLeB/oRdJfT+dz9A5bgd3Z7TuQnBQbeUtXrGIrNWMGqWbabpepBF2KxtWVhL2qtxpRqhae2f6NAOzH7xs4jUSw==} + peerDependencies: + svelte: ^3.57.0 || ^4.0.0 + dependencies: + svelte: 4.2.10 + dev: true + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -533,7 +546,6 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 - dev: true /autoprefixer@10.4.17(postcss@8.4.34): resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} @@ -555,7 +567,6 @@ packages: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: dequal: 2.0.3 - dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -638,7 +649,6 @@ packages: acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -675,7 +685,6 @@ packages: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - dev: true /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -703,7 +712,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} @@ -778,7 +786,6 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: true /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -942,7 +949,6 @@ packages: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 - dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -983,23 +989,28 @@ packages: /locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - dev: true /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} dev: true + /lucide-svelte@0.323.0(svelte@4.2.10): + resolution: {integrity: sha512-3GEFk1vCwB8BtHTHZTocFJfX6AtTLQw9a74JSuihAGx+MzhxqeWk8W1TkM4WUlvE0x9UdONM2rJGRyx9IyjkJg==} + peerDependencies: + svelte: ^3 || ^4 || ^5.0.0-next.42 + dependencies: + svelte: 4.2.10 + dev: false + /magic-string@0.30.7: resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -1136,7 +1147,6 @@ packages: '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 - dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -1345,7 +1355,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -1507,7 +1516,6 @@ packages: locate-character: 3.0.0 magic-string: 0.30.7 periscopic: 3.1.0 - dev: true /tailwindcss@3.4.1: resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} diff --git a/ui/src/assets/svelte.svg b/ui/public/svelte.svg similarity index 100% rename from ui/src/assets/svelte.svg rename to ui/public/svelte.svg diff --git a/ui/src/App.svelte b/ui/src/App.svelte index 9d900d9..442e667 100644 --- a/ui/src/App.svelte +++ b/ui/src/App.svelte @@ -1,10 +1,15 @@ -
+
-
- {#each pipe( $downloads, O.getOrElseW(() => []), ) as download} -
- -
-
{download.id}
-
{JSON.stringify(download.info)}
-
{JSON.stringify(download.progress)}
-
-
- {/each} -
+ {#if O.isNone($downloads)} +
+ +
+ {:else} +
+ {#each pipe( $downloads, O.getOrElseW(() => []), ) as download} + + {/each} +
+ {/if} + +
+
diff --git a/ui/src/app.css b/ui/src/app.css index bd6213e..504d573 100644 --- a/ui/src/app.css +++ b/ui/src/app.css @@ -1,3 +1,7 @@ @tailwind base; @tailwind components; -@tailwind utilities; \ No newline at end of file +@tailwind utilities; + +/* body { + font-family: "Roboto"; +} */ \ No newline at end of file diff --git a/ui/src/lib/Button.svelte b/ui/src/lib/Button.svelte new file mode 100644 index 0000000..08abb4c --- /dev/null +++ b/ui/src/lib/Button.svelte @@ -0,0 +1,15 @@ + + + diff --git a/ui/src/lib/Chip.svelte b/ui/src/lib/Chip.svelte new file mode 100644 index 0000000..221f3d6 --- /dev/null +++ b/ui/src/lib/Chip.svelte @@ -0,0 +1,10 @@ + + +
+ + {text} +
diff --git a/ui/src/lib/CookiesTextField.svelte b/ui/src/lib/CookiesTextField.svelte new file mode 100644 index 0000000..384ab28 --- /dev/null +++ b/ui/src/lib/CookiesTextField.svelte @@ -0,0 +1,137 @@ + + +