mirror of
https://github.com/versia-pub/frontend.git
synced 2026-03-13 03:29:16 +01:00
style: 🎨 Format code with Biome
This commit is contained in:
parent
7ff9d2302a
commit
3627ac0ef8
296 changed files with 3257 additions and 2808 deletions
|
|
@ -1,69 +1,105 @@
|
|||
<template>
|
||||
<div v-if="relation" class="overflow-auto max-h-72">
|
||||
<Note :note="relation.note" :hide-actions="true" :small-layout="true" />
|
||||
<Note :note="relation.note" :hide-actions="true" :small-layout="true"/>
|
||||
</div>
|
||||
|
||||
|
||||
<InputGroup class="p-1">
|
||||
<InputGroupAddon v-if="store.sensitive" align="block-start" class="pt-3">
|
||||
<Input v-model:model-value="store.contentWarning" placeholder="Put your content warning here" />
|
||||
<InputGroupAddon
|
||||
v-if="store.sensitive"
|
||||
align="block-start"
|
||||
class="pt-3"
|
||||
>
|
||||
<Input
|
||||
v-model:model-value="store.contentWarning"
|
||||
placeholder="Put your content warning here"
|
||||
/>
|
||||
</InputGroupAddon>
|
||||
|
||||
<EditorContent data-slot="input-group-control" @paste-files="uploadFiles" v-model:content="store.content"
|
||||
v-model:raw-content="store.rawContent" :placeholder="getRandomSplash()"
|
||||
<EditorContent
|
||||
data-slot="input-group-control"
|
||||
@paste-files="uploadFiles"
|
||||
v-model:content="store.content"
|
||||
v-model:raw-content="store.rawContent"
|
||||
:placeholder="getRandomSplash()"
|
||||
class=" placeholder:text-muted-foreground flex field-sizing-content min-h-58 w-full px-4 text-base disabled:opacity-50 md:text-sm flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none"
|
||||
:disabled="store.sending" :mode="store.contentType === 'text/html' ? 'rich' : 'plain'" />
|
||||
:disabled="store.sending"
|
||||
:mode="store.contentType === 'text/html' ? 'rich' : 'plain'"
|
||||
/>
|
||||
|
||||
<InputGroupAddon v-if="store.files.length > 0" align="block-end" class="overflow-x-auto *:shrink-0">
|
||||
<Files v-model:files="store.files" :composer-key="composerKey" />
|
||||
<InputGroupAddon
|
||||
v-if="store.files.length > 0"
|
||||
align="block-end"
|
||||
class="overflow-x-auto *:shrink-0"
|
||||
>
|
||||
<Files v-model:files="store.files" :composer-key="composerKey"/>
|
||||
</InputGroupAddon>
|
||||
|
||||
<InputGroupAddon align="block-end">
|
||||
<Select v-model:model-value="store.contentType">
|
||||
<SelectTrigger as-child disable-default-classes disable-select-icon>
|
||||
<SelectTrigger
|
||||
as-child
|
||||
disable-default-classes
|
||||
disable-select-icon
|
||||
>
|
||||
<InputGroupButton variant="ghost" size="icon-sm">
|
||||
<LetterText v-if="store.contentType === 'text/html'" />
|
||||
<Type v-else />
|
||||
<LetterText v-if="store.contentType === 'text/html'"/>
|
||||
<Type v-else/>
|
||||
</InputGroupButton>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem value="text/plain">
|
||||
Plain text
|
||||
</SelectItem>
|
||||
<SelectItem value="text/html">
|
||||
Rich text
|
||||
</SelectItem>
|
||||
<SelectItem value="text/plain">Plain text</SelectItem>
|
||||
<SelectItem value="text/html">Rich text</SelectItem>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
<VisibilityPicker v-model:visibility="store.visibility">
|
||||
<InputGroupButton variant="ghost" size="icon-sm" :disabled="store.relation?.type === 'edit'">
|
||||
<component :is="visibilities[store.visibility].icon" />
|
||||
<InputGroupButton
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
:disabled="store.relation?.type === 'edit'"
|
||||
>
|
||||
<component :is="visibilities[store.visibility].icon"/>
|
||||
</InputGroupButton>
|
||||
</VisibilityPicker>
|
||||
<InputGroupButton variant="ghost" size="icon-sm" @click="fileInput?.click()">
|
||||
<FilePlus2 />
|
||||
<InputGroupButton
|
||||
variant="ghost"
|
||||
size="icon-sm"
|
||||
@click="fileInput?.click()"
|
||||
>
|
||||
<FilePlus2/>
|
||||
</InputGroupButton>
|
||||
<Toggle size="sm" v-model="store.sensitive">
|
||||
<TriangleAlert />
|
||||
<TriangleAlert/>
|
||||
</Toggle>
|
||||
<InputGroupText :class="['ml-auto', charactersLeft < 0 && 'text-destructive']">
|
||||
<InputGroupText
|
||||
:class="['ml-auto', charactersLeft < 0 && 'text-destructive']"
|
||||
>
|
||||
{{ charactersLeft.toLocaleString(getLocale(), {
|
||||
maximumFractionDigits: 2,
|
||||
notation: 'compact',
|
||||
compactDisplay: 'short',
|
||||
}) }}
|
||||
</InputGroupText>
|
||||
<Separator orientation="vertical" class="h-4!" />
|
||||
<InputGroupButton variant="default" size="icon-sm" :disabled="store.sending || !store.canSend"
|
||||
@click="send">
|
||||
<Spinner v-if="store.sending" />
|
||||
<ArrowUp v-else />
|
||||
<Separator orientation="vertical" class="h-4!"/>
|
||||
<InputGroupButton
|
||||
variant="default"
|
||||
size="icon-sm"
|
||||
:disabled="store.sending || !store.canSend"
|
||||
@click="send"
|
||||
>
|
||||
<Spinner v-if="store.sending"/>
|
||||
<ArrowUp v-else/>
|
||||
<span class="sr-only">Send</span>
|
||||
</InputGroupButton>
|
||||
</InputGroupAddon>
|
||||
</InputGroup>
|
||||
|
||||
<input type="file" ref="fileInput" @change="uploadFileFromEvent" class="hidden" multiple />
|
||||
<input
|
||||
type="file"
|
||||
ref="fileInput"
|
||||
@change="uploadFileFromEvent"
|
||||
class="hidden"
|
||||
multiple
|
||||
>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ const relation = ref(
|
|||
: m.brief_cool_capybara_fear()
|
||||
}}
|
||||
</DialogDescription>
|
||||
<Composer :relation="relation ?? undefined" />
|
||||
<Composer :relation="relation ?? undefined"/>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -5,26 +5,37 @@
|
|||
:disabled="file.uploading || file.updating"
|
||||
class="block bg-card text-card-foreground shadow-sm h-28 overflow-hidden rounded relative min-w-28 *:disabled:opacity-50"
|
||||
>
|
||||
<img v-if="file.file?.type.startsWith('image/')" :src="createObjectURL(file.file)" class="object-contain h-28 w-full" :alt="file.alt" />
|
||||
<FileIcon v-else class="size-6 m-auto text-muted-foreground" />
|
||||
<img
|
||||
v-if="file.file?.type.startsWith('image/')"
|
||||
:src="createObjectURL(file.file)"
|
||||
class="object-contain h-28 w-full"
|
||||
:alt="file.alt"
|
||||
>
|
||||
<FileIcon v-else class="size-6 m-auto text-muted-foreground"/>
|
||||
<Badge
|
||||
v-if="file.file && !(file.uploading || file.updating)"
|
||||
class="absolute bottom-1 right-1"
|
||||
variant="default"
|
||||
>{{ formatBytes(file.file.size) }}</Badge
|
||||
>
|
||||
<Spinner v-else-if="file.file" class="absolute bottom-1 right-1 size-8 p-1.5" />
|
||||
{{ formatBytes(file.file.size) }}
|
||||
</Badge>
|
||||
<Spinner
|
||||
v-else-if="file.file"
|
||||
class="absolute bottom-1 right-1 size-8 p-1.5"
|
||||
/>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent class="min-w-48">
|
||||
<DropdownMenuLabel v-if="file.file">{{ file.file.name }}</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuLabel v-if="file.file">
|
||||
{{ file.file.name }}
|
||||
</DropdownMenuLabel>
|
||||
<DropdownMenuSeparator/>
|
||||
<DropdownMenuItem @click="editCaption">
|
||||
<Captions />
|
||||
<Captions/>
|
||||
Add caption
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuSeparator/>
|
||||
<DropdownMenuItem @click="emit('remove')">
|
||||
<Delete />
|
||||
<Delete/>
|
||||
Remove
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,12 @@
|
|||
<template>
|
||||
<FilePreview v-for="(file, index) in files" :key="file.apiId" :file="file" @update:file="files[index] = $event" :composer-key="composerKey"
|
||||
@remove="files.splice(index, 1)" />
|
||||
<FilePreview
|
||||
v-for="(file, index) in files"
|
||||
:key="file.apiId"
|
||||
:file="file"
|
||||
@update:file="files[index] = $event"
|
||||
:composer-key="composerKey"
|
||||
@remove="files.splice(index, 1)"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,19 @@
|
|||
<template>
|
||||
<Select v-model:model-value="visibility">
|
||||
<SelectTrigger as-child disable-default-classes disable-select-icon>
|
||||
<slot />
|
||||
<slot/>
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectItem v-for="(v, k) in visibilities" :key="k" @click="visibility = k" :value="k">
|
||||
<div class="flex flex-row gap-3 items-center w-full justify-between">
|
||||
<component :is="v.icon" class="size-4" />
|
||||
<SelectItem
|
||||
v-for="(v, k) in visibilities"
|
||||
:key="k"
|
||||
@click="visibility = k"
|
||||
:value="k"
|
||||
>
|
||||
<div
|
||||
class="flex flex-row gap-3 items-center w-full justify-between"
|
||||
>
|
||||
<component :is="v.icon" class="size-4"/>
|
||||
<div class="flex flex-col gap-1">
|
||||
<span class="font-semibold">{{ v.name }}</span>
|
||||
<span>{{ v.text }}</span>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue