mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-03-01 11:10:00 +00:00
## Summary - Enhanced video control visibility logic for better UX - Added fullscreen gallery view with zoom-in button - Fixed hover interaction issues with overlays ## Changes ### Video Controls - **Before**: Controls hidden when not hovering - **After**: Controls always visible when not playing, hover-based during playback ### Overlay Behavior - **Before**: All overlays hidden during video playback - **After**: All overlays (actions, tags, layers) show on hover even during playback ### Gallery View - Added zoom-in button to top-right corner (all media types except 3D) - Integrated with existing ResultGallery component - Gallery closes when clicking dimmed background area ### Bug Fixes - Fixed hover flicker issue by proper event handling on overlay elements ## Test Plan - [x] Test video controls visibility (paused vs playing) - [x] Test overlay hover behavior during video playback - [x] Test zoom-in button opens gallery view - [x] Test gallery closes on background click - [x] Test 3D assets don't show zoom button - [x] Test in Storybook with various media types 🤖 Generated with [Claude Code](https://claude.ai/code) ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6065-feat-Improve-MediaAssetCard-video-controls-and-add-gallery-view-28d6d73d3650818c90cfc5d0d00e4826) by [Unito](https://www.unito.io) --------- Co-authored-by: Claude <noreply@anthropic.com>
48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { defineStore } from 'pinia'
|
|
import { ref, shallowRef } from 'vue'
|
|
|
|
import { ResultItemImpl } from '@/stores/queueStore'
|
|
|
|
import type { AssetMeta } from '../schemas/mediaAssetSchema'
|
|
|
|
export const useMediaAssetGalleryStore = defineStore(
|
|
'mediaAssetGallery',
|
|
() => {
|
|
const activeIndex = ref(-1)
|
|
const items = shallowRef<ResultItemImpl[]>([])
|
|
|
|
const close = () => {
|
|
activeIndex.value = -1
|
|
}
|
|
|
|
const openSingle = (asset: AssetMeta) => {
|
|
// Convert AssetMeta to ResultItemImpl format
|
|
const resultItem = new ResultItemImpl({
|
|
filename: asset.name,
|
|
subfolder: '',
|
|
type: 'output',
|
|
nodeId: '0',
|
|
mediaType: asset.kind === 'image' ? 'images' : asset.kind
|
|
})
|
|
|
|
// Override the url getter to use asset.src
|
|
Object.defineProperty(resultItem, 'url', {
|
|
get() {
|
|
return asset.src || ''
|
|
},
|
|
configurable: true
|
|
})
|
|
|
|
items.value = [resultItem]
|
|
activeIndex.value = 0
|
|
}
|
|
|
|
return {
|
|
activeIndex,
|
|
items,
|
|
close,
|
|
openSingle
|
|
}
|
|
}
|
|
)
|