mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-11 02:20:08 +00:00
## Summary Small updates to the UI to make it more visually distinct from the graph nodes and improving the login button ## Changes - **What**: - Improve theme support with dynamic colors - Standardize surface colors/borders - Add shadows to all floating UI elements - Change side toolbar to be docked by default - Decrease side toolbar width - Change login button to icon only - Update C button to be more distinctive ## Review Focus - Theme tokens, I am not sure what the overall plan for how these tokens will be supported for custom user palettes. I've implemented a method where default variables are chosen that look nice over all existing themes, but they can be overridden. ## Screenshots Dark theme updated color <img width="958" height="615" alt="image" src="https://github.com/user-attachments/assets/a2c540cf-6c05-4ad3-996b-8b7b80df8d2d" /> Themed & updated menu button (active vs hover vs default) <img width="58" height="338" alt="github" src="https://github.com/user-attachments/assets/90244ee2-d5ee-4b26-9d99-f4b8439aa372" /><img width="58" height="338" alt="nord" src="https://github.com/user-attachments/assets/053e8e7b-d639-4b72-92d2-ec7e2167aab8" /><img width="58" height="338" alt="arc" src="https://github.com/user-attachments/assets/3caeb07b-d41b-4d88-83b4-ef8d45d4e5a6" /><img width="58" height="338" alt="solarized" src="https://github.com/user-attachments/assets/6ebf6afb-ec3a-436b-90eb-bda40be1c79f" /><img width="58" height="338" alt="light" src="https://github.com/user-attachments/assets/fbb7f96a-b722-40c5-86fa-a0732e166972" /><img width="58" height="338" alt="dark" src="https://github.com/user-attachments/assets/5459208b-9256-4c55-9373-169e9cd9f09a" /> With labels <img width="58" height="394" alt="labels" src="https://github.com/user-attachments/assets/f97ee354-35cd-42b8-896f-57ac39644c1d" /> Logged out (only visible on desktop) <img width="323" height="48" alt="logged out" src="https://github.com/user-attachments/assets/75b71420-0c1b-446f-8cdd-43c68674d346" /> Logged in <img width="355" height="48" alt="logged in" src="https://github.com/user-attachments/assets/324fd133-a793-49dd-844a-f93dd5d1effb" /> ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6381-UI-color-updates-tweaks-29b6d73d3650816384d2ef5617a776a0) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action <action@github.com> Co-authored-by: github-actions <github-actions@github.com>
135 lines
3.3 KiB
Vue
135 lines
3.3 KiB
Vue
<template>
|
|
<Button
|
|
v-tooltip="{
|
|
value: computedTooltip,
|
|
showDelay: 300,
|
|
hideDelay: 300
|
|
}"
|
|
text
|
|
:pt="{
|
|
root: {
|
|
class: `side-bar-button p-button-secondary ${
|
|
selected ? 'side-bar-button-selected' : ''
|
|
}`,
|
|
'aria-label': computedTooltip
|
|
}
|
|
}"
|
|
@click="emit('click', $event)"
|
|
>
|
|
<template #icon>
|
|
<div class="side-bar-button-content">
|
|
<slot name="icon">
|
|
<OverlayBadge v-if="shouldShowBadge" :value="overlayValue">
|
|
<i
|
|
v-if="typeof icon === 'string'"
|
|
:class="icon + ' side-bar-button-icon'"
|
|
/>
|
|
<component :is="icon" v-else class="side-bar-button-icon" />
|
|
</OverlayBadge>
|
|
<i
|
|
v-else-if="typeof icon === 'string'"
|
|
:class="icon + ' side-bar-button-icon'"
|
|
/>
|
|
<component
|
|
:is="icon"
|
|
v-else-if="typeof icon === 'object'"
|
|
class="side-bar-button-icon"
|
|
/>
|
|
</slot>
|
|
<span v-if="label && !isSmall" class="side-bar-button-label">{{
|
|
t(label)
|
|
}}</span>
|
|
</div>
|
|
</template>
|
|
</Button>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import Button from 'primevue/button'
|
|
import OverlayBadge from 'primevue/overlaybadge'
|
|
import { computed } from 'vue'
|
|
import type { Component } from 'vue'
|
|
import { useI18n } from 'vue-i18n'
|
|
|
|
const { t } = useI18n()
|
|
const {
|
|
icon = '',
|
|
selected = false,
|
|
tooltip = '',
|
|
tooltipSuffix = '',
|
|
iconBadge = '',
|
|
label = '',
|
|
isSmall = false
|
|
} = defineProps<{
|
|
icon?: string | Component
|
|
selected?: boolean
|
|
tooltip?: string
|
|
tooltipSuffix?: string
|
|
iconBadge?: string | (() => string | null)
|
|
label?: string
|
|
isSmall?: boolean
|
|
}>()
|
|
|
|
const emit = defineEmits<{
|
|
(e: 'click', event: MouseEvent): void
|
|
}>()
|
|
const overlayValue = computed(() =>
|
|
typeof iconBadge === 'function' ? (iconBadge() ?? '') : iconBadge
|
|
)
|
|
const shouldShowBadge = computed(() => !!overlayValue.value)
|
|
const computedTooltip = computed(() => t(tooltip) + tooltipSuffix)
|
|
</script>
|
|
|
|
<style>
|
|
.side-bar-button-icon {
|
|
font-size: var(--sidebar-icon-size) !important;
|
|
}
|
|
|
|
.side-bar-button-selected {
|
|
background-color: var(--interface-panel-selected-surface);
|
|
color: var(--content-hover-fg);
|
|
}
|
|
.side-bar-button:hover {
|
|
background-color: var(--interface-panel-hover-surface);
|
|
color: var(--content-hover-fg);
|
|
}
|
|
|
|
.side-bar-button-selected .side-bar-button-icon {
|
|
font-size: var(--sidebar-icon-size) !important;
|
|
}
|
|
</style>
|
|
|
|
<style scoped>
|
|
@reference '../../assets/css/style.css';
|
|
|
|
.side-bar-button {
|
|
width: var(--sidebar-width);
|
|
height: var(--sidebar-item-height);
|
|
border-radius: 0;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.side-tool-bar-end .side-bar-button {
|
|
height: var(--sidebar-width);
|
|
}
|
|
|
|
.side-bar-button-content {
|
|
@apply flex flex-col items-center gap-2;
|
|
}
|
|
|
|
.side-bar-button-label {
|
|
@apply text-[10px] text-center;
|
|
line-height: 1;
|
|
}
|
|
|
|
.comfyui-body-left .side-bar-button.side-bar-button-selected,
|
|
.comfyui-body-left .side-bar-button.side-bar-button-selected:hover {
|
|
border-left: 4px solid var(--p-button-text-primary-color);
|
|
}
|
|
|
|
.comfyui-body-right .side-bar-button.side-bar-button-selected,
|
|
.comfyui-body-right .side-bar-button.side-bar-button-selected:hover {
|
|
border-right: 4px solid var(--p-button-text-primary-color);
|
|
}
|
|
</style>
|