mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-12 16:40: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>
82 lines
1.8 KiB
Vue
82 lines
1.8 KiB
Vue
<template>
|
|
<div class="flex flex-col">
|
|
<div class="show-export-formats relative">
|
|
<Button
|
|
class="p-button-rounded p-button-text"
|
|
@click="toggleExportFormats"
|
|
>
|
|
<i
|
|
v-tooltip.right="{
|
|
value: t('load3d.exportModel'),
|
|
showDelay: 300
|
|
}"
|
|
class="pi pi-download text-lg text-white"
|
|
/>
|
|
</Button>
|
|
<div
|
|
v-show="showExportFormats"
|
|
class="absolute top-0 left-12 rounded-lg bg-black/50 shadow-lg"
|
|
>
|
|
<div class="flex flex-col">
|
|
<Button
|
|
v-for="format in exportFormats"
|
|
:key="format.value"
|
|
class="p-button-text text-white"
|
|
@click="exportModel(format.value)"
|
|
>
|
|
{{ format.label }}
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { Tooltip } from 'primevue'
|
|
import Button from 'primevue/button'
|
|
import { onMounted, onUnmounted, ref } from 'vue'
|
|
|
|
import { t } from '@/i18n'
|
|
|
|
const vTooltip = Tooltip
|
|
|
|
const emit = defineEmits<{
|
|
(e: 'exportModel', format: string): void
|
|
}>()
|
|
|
|
const showExportFormats = ref(false)
|
|
|
|
const exportFormats = [
|
|
{ label: 'GLB', value: 'glb' },
|
|
{ label: 'OBJ', value: 'obj' },
|
|
{ label: 'STL', value: 'stl' }
|
|
]
|
|
|
|
const toggleExportFormats = () => {
|
|
showExportFormats.value = !showExportFormats.value
|
|
}
|
|
|
|
const exportModel = (format: string) => {
|
|
emit('exportModel', format)
|
|
|
|
showExportFormats.value = false
|
|
}
|
|
|
|
const closeExportFormatsList = (e: MouseEvent) => {
|
|
const target = e.target as HTMLElement
|
|
|
|
if (!target.closest('.show-export-formats')) {
|
|
showExportFormats.value = false
|
|
}
|
|
}
|
|
|
|
onMounted(() => {
|
|
document.addEventListener('click', closeExportFormatsList)
|
|
})
|
|
|
|
onUnmounted(() => {
|
|
document.removeEventListener('click', closeExportFormatsList)
|
|
})
|
|
</script>
|