mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-08 00:50:05 +00:00
## Summary Adds the [tailwind lint plugin](https://github.com/francoismassart/eslint-plugin-tailwindcss/?tab=readme-ov-file#eslint-plugin-tailwindcss) and fixes the currently fixable rules ([v4 is still in beta](https://github.com/francoismassart/eslint-plugin-tailwindcss/?tab=readme-ov-file#about-tailwind-css-4-support)). ## Changes - **What**: Enforces things like consistent class order, and eventually can prohibit extra classes that could be utilities instead - **Dependencies**: The plugin and its types ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5984-Lint-Add-tailwind-linter-2866d73d365081d89db0d998232533bb) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com>
74 lines
1.8 KiB
Vue
74 lines
1.8 KiB
Vue
<!-- A file download button with a label and a size hint -->
|
|
<template>
|
|
<div class="flex flex-row items-center gap-2">
|
|
<div>
|
|
<div>
|
|
<span :title="hint">{{ label }}</span>
|
|
</div>
|
|
<Message
|
|
v-if="props.error"
|
|
severity="error"
|
|
icon="pi pi-exclamation-triangle"
|
|
size="small"
|
|
variant="outlined"
|
|
class="my-2 h-min max-w-xs px-1"
|
|
:title="props.error"
|
|
:pt="{
|
|
text: { class: 'overflow-hidden text-ellipsis' }
|
|
}"
|
|
>
|
|
{{ props.error }}
|
|
</Message>
|
|
</div>
|
|
<div>
|
|
<Button
|
|
:label="$t('g.download') + ' (' + fileSize + ')'"
|
|
size="small"
|
|
outlined
|
|
:disabled="!!props.error"
|
|
:title="props.url"
|
|
@click="download.triggerBrowserDownload"
|
|
/>
|
|
</div>
|
|
<div>
|
|
<Button
|
|
:label="$t('g.copyURL')"
|
|
size="small"
|
|
outlined
|
|
:disabled="!!props.error"
|
|
@click="copyURL"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import Button from 'primevue/button'
|
|
import Message from 'primevue/message'
|
|
import { computed } from 'vue'
|
|
|
|
import { useCopyToClipboard } from '@/composables/useCopyToClipboard'
|
|
import { useDownload } from '@/composables/useDownload'
|
|
import { formatSize } from '@/utils/formatUtil'
|
|
|
|
const props = defineProps<{
|
|
url: string
|
|
hint?: string
|
|
label?: string
|
|
error?: string
|
|
}>()
|
|
|
|
const label = computed(() => props.label || props.url.split('/').pop())
|
|
|
|
const hint = computed(() => props.hint || props.url)
|
|
const download = useDownload(props.url)
|
|
const fileSize = computed(() =>
|
|
download.fileSize.value ? formatSize(download.fileSize.value) : '?'
|
|
)
|
|
const copyURL = async () => {
|
|
await copyToClipboard(props.url)
|
|
}
|
|
|
|
const { copyToClipboard } = useCopyToClipboard()
|
|
</script>
|