From 6c36aaa1dbbdc997df5a5cbd566d2ad5a7306147 Mon Sep 17 00:00:00 2001 From: Jin Yi Date: Thu, 16 Oct 2025 03:45:55 +0900 Subject: [PATCH] feat: Improve MediaAssetCard video controls and add gallery view (#6065) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 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 --- .../components/MediaAssetCard.stories.ts | 23 ++- .../assets/components/MediaAssetCard.vue | 107 ++++++++--- .../assets/components/MediaAssetMoreMenu.vue | 9 +- .../assets/components/MediaVideoTop.vue | 27 ++- .../composables/useMediaAssetActions.ts | 5 - .../useMediaAssetGalleryStore.test.ts | 179 ++++++++++++++++++ .../composables/useMediaAssetGalleryStore.ts | 47 +++++ 7 files changed, 348 insertions(+), 49 deletions(-) create mode 100644 src/platform/assets/composables/useMediaAssetGalleryStore.test.ts create mode 100644 src/platform/assets/composables/useMediaAssetGalleryStore.ts diff --git a/src/platform/assets/components/MediaAssetCard.stories.ts b/src/platform/assets/components/MediaAssetCard.stories.ts index fa1d42856..231b86a9b 100644 --- a/src/platform/assets/components/MediaAssetCard.stories.ts +++ b/src/platform/assets/components/MediaAssetCard.stories.ts @@ -1,11 +1,32 @@ import type { Meta, StoryObj } from '@storybook/vue3-vite' +import ResultGallery from '@/components/sidebar/tabs/queue/ResultGallery.vue' + +import { useMediaAssetGalleryStore } from '../composables/useMediaAssetGalleryStore' import type { AssetMeta } from '../schemas/mediaAssetSchema' import MediaAssetCard from './MediaAssetCard.vue' const meta: Meta = { - title: 'AssetLibrary/MediaAssetCard', + title: 'Platform/Assets/MediaAssetCard', component: MediaAssetCard, + decorators: [ + () => ({ + components: { ResultGallery }, + setup() { + const galleryStore = useMediaAssetGalleryStore() + return { galleryStore } + }, + template: ` +
+ + +
+ ` + }) + ], argTypes: { context: { control: 'select', diff --git a/src/platform/assets/components/MediaAssetCard.vue b/src/platform/assets/components/MediaAssetCard.vue index 8aa58063e..1681dcf3e 100644 --- a/src/platform/assets/components/MediaAssetCard.vue +++ b/src/platform/assets/components/MediaAssetCard.vue @@ -33,7 +33,7 @@ :is="getTopComponent(asset.kind)" :asset="asset" :context="context" - @view="actions.viewAsset(asset!.id)" + @view="handleZoomClick" @download="actions.downloadAsset(asset!.id)" @play="actions.playAsset(asset!.id)" @video-playing-state-changed="isVideoPlaying = $event" @@ -41,31 +41,48 @@ /> - + - + - + - +