mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-20 06:20:11 +00:00
## Summary Unify the search bar + action buttons layout across all left sidebar panels (Node Library, Workflows, Model Library, Media Assets) using a shared `SidebarTopArea` presentation component. ## Changes - **What**: - Add `SidebarTopArea.vue` — layout component with `flex-1` default slot (search) and `#actions` slot (buttons), plus optional `bottomDivider` prop - Replace raw `<button>` elements in Node Library with `<Button variant="secondary" size="icon">` - Replace reka-ui `TabsTrigger` with shared `Tab/TabList` component in Node Library - Move Media Assets tab list from hover-only `#tool-buttons` to always-visible header below search area - Unify spacing (`gap-2`, `p-2 2xl:px-4`) and divider styles across all sidebar panels - Remove unused `assetType` prop and header from `AssetsSidebarGridView`/`AssetsSidebarListView` ## Review Focus - `SidebarTopArea` API simplicity — just slots + one optional prop - Node Library still requires `TabsRoot` in the body for reka-ui `TabsContent` in child panels - Media Assets tabs are now always visible instead of hover-only [screen-capture (1).webm](https://github.com/user-attachments/assets/fe1d8f7b-5674-4bb3-9842-569e4c3af6c9) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9740-feat-unify-sidebar-panel-header-layout-with-SidebarTopArea-component-3206d73d365081ea8ba7fd6ac54e0169) by [Unito](https://www.unito.io) --------- Co-authored-by: Amp <amp@ampcode.com>
38 lines
1.0 KiB
Vue
38 lines
1.0 KiB
Vue
<template>
|
|
<div class="h-full flex-1 overflow-y-auto">
|
|
<div v-for="(section, index) in sections" :key="section.title ?? index">
|
|
<h3
|
|
v-if="section.title"
|
|
class="mb-0 px-4 py-2 text-xs font-medium tracking-wide text-muted-foreground uppercase"
|
|
>
|
|
{{ $t(section.title) }}
|
|
</h3>
|
|
<TreeExplorerV2
|
|
v-model:expanded-keys="expandedKeys"
|
|
:root="section.root"
|
|
:show-context-menu="false"
|
|
@node-click="(node) => emit('nodeClick', node)"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import TreeExplorerV2 from '@/components/common/TreeExplorerV2.vue'
|
|
import type { ComfyNodeDefImpl } from '@/stores/nodeDefStore'
|
|
import type {
|
|
NodeLibrarySection,
|
|
RenderedTreeExplorerNode
|
|
} from '@/types/treeExplorerTypes'
|
|
|
|
defineProps<{
|
|
sections: NodeLibrarySection<ComfyNodeDefImpl>[]
|
|
}>()
|
|
|
|
const expandedKeys = defineModel<string[]>('expandedKeys', { required: true })
|
|
|
|
const emit = defineEmits<{
|
|
nodeClick: [node: RenderedTreeExplorerNode<ComfyNodeDefImpl>]
|
|
}>()
|
|
</script>
|