cobalt/web/src/routes/remux/+page.svelte

166 lines
4.1 KiB
Svelte

<script lang="ts">
import { t } from "$lib/i18n/translations";
import { createRemuxPipeline } from "$lib/queen-bee/queue";
import DropReceiver from "$components/misc/DropReceiver.svelte";
import FileReceiver from "$components/misc/FileReceiver.svelte";
import BulletExplain from "$components/misc/BulletExplain.svelte";
import IconRepeat from "@tabler/icons-svelte/IconRepeat.svelte";
import IconDevices from "@tabler/icons-svelte/IconDevices.svelte";
import IconInfoCircle from "@tabler/icons-svelte/IconInfoCircle.svelte";
let draggedOver = false;
let files: FileList | undefined;
const remux = async () => {
if (!files) return;
for (let i = 0; i < files?.length; i++) {
createRemuxPipeline(files[i]);
}
files = undefined;
};
</script>
<svelte:head>
<title>{$t("tabs.remux")} ~ {$t("general.cobalt")}</title>
<meta
property="og:title"
content="{$t('tabs.remux')} ~ {$t('general.cobalt')}"
/>
</svelte:head>
<DropReceiver
bind:files
bind:draggedOver
id="remux-container"
>
<div
id="remux-open"
tabindex="-1"
data-first-focus
data-focus-ring-hidden
>
<div id="remux-receiver">
<FileReceiver
bind:draggedOver
bind:files
acceptTypes={["video/*", "audio/*"]}
acceptExtensions={[
"mp4",
"webm",
"mp3",
"ogg",
"opus",
"wav",
"m4a",
]}
/>
{#if files}
<div class="button-row">
<button on:click={remux}>remux</button>
<button
on:click={() => {
files = undefined;
}}
>
clear imported files
</button>
</div>
{/if}
</div>
<div id="remux-bullets">
<BulletExplain
title={$t("remux.bullet.purpose.title")}
description={$t("remux.bullet.purpose.description")}
icon={IconRepeat}
/>
<BulletExplain
title={$t("remux.bullet.explainer.title")}
description={$t("remux.bullet.explainer.description")}
icon={IconInfoCircle}
/>
<BulletExplain
title={$t("remux.bullet.privacy.title")}
description={$t("remux.bullet.privacy.description")}
icon={IconDevices}
/>
</div>
</div>
</DropReceiver>
<style>
:global(#remux-container) {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
}
#remux-open {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
gap: 48px;
}
#remux-receiver {
max-width: 450px;
display: flex;
flex-direction: column;
gap: var(--padding);
}
#remux-bullets {
display: flex;
flex-direction: column;
gap: 18px;
max-width: 450px;
}
.button-row {
display: flex;
flex-direction: row;
gap: 6px;
}
button {
padding: 12px 24px;
border-radius: 200px;
width: fit-content;
}
@media screen and (max-width: 920px) {
#remux-open {
flex-direction: column;
gap: var(--padding);
}
#remux-bullets {
padding: var(--padding);
}
}
@media screen and (max-width: 535px) {
#remux-bullets {
gap: var(--padding);
}
}
@media screen and (max-height: 750px) and (max-width: 535px) {
:global(#remux-container:not(.processing)) {
justify-content: start;
align-items: start;
padding-top: var(--padding);
}
}
</style>