Skip to content

Commit df66a96

Browse files
authored
Feat: Double Click on Image Assets to open the lightbox (#6955)
## Summary Make it easier to open the lightbox preview. ## Review Focus The first click still selects the image. I liked the suggestion to require shift or ctrl to initiate selection and have click go back to the previous behavior. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-6955-Feat-Double-Click-on-Image-Assets-to-open-the-lightbox-2b76d73d365081f0bf0de847add5c820) by [Unito](https://www.unito.io)
1 parent 96d1233 commit df66a96

File tree

2 files changed

+26
-41
lines changed

2 files changed

+26
-41
lines changed

src/platform/assets/components/MediaAssetCard.vue

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -59,35 +59,29 @@
5959

6060
<!-- Media actions - show on hover or when playing -->
6161
<IconGroup v-else-if="showActionsOverlay">
62-
<div v-tooltip.top="$t('mediaAsset.actions.inspect')">
63-
<IconButton
64-
size="sm"
65-
@click.stop="handleZoomClick"
66-
@mouseenter="handleOverlayMouseEnter"
67-
@mouseleave="handleOverlayMouseLeave"
68-
>
69-
<i class="icon-[lucide--zoom-in] size-4" />
70-
</IconButton>
71-
</div>
72-
<div v-tooltip.top="$t('mediaAsset.actions.more')">
73-
<MoreButton
74-
ref="moreButtonRef"
75-
size="sm"
76-
@menu-opened="handleMenuOpened"
77-
@menu-closed="handleMenuClosed"
78-
@mouseenter="handleOverlayMouseEnter"
79-
@mouseleave="handleOverlayMouseLeave"
80-
>
81-
<template #default="{ close }">
82-
<MediaAssetMoreMenu
83-
:close="close"
84-
:show-delete-button="showDeleteButton"
85-
@inspect="handleZoomClick"
86-
@asset-deleted="handleAssetDelete"
87-
/>
88-
</template>
89-
</MoreButton>
90-
</div>
62+
<IconButton
63+
v-tooltip.top="$t('mediaAsset.actions.inspect')"
64+
size="sm"
65+
@click.stop="handleZoomClick"
66+
>
67+
<i class="icon-[lucide--zoom-in] size-4" />
68+
</IconButton>
69+
<MoreButton
70+
ref="moreButtonRef"
71+
v-tooltip.top="$t('mediaAsset.actions.more')"
72+
size="sm"
73+
@menu-opened="handleMenuOpened"
74+
@menu-closed="handleMenuClosed"
75+
>
76+
<template #default="{ close }">
77+
<MediaAssetMoreMenu
78+
:close="close"
79+
:show-delete-button="showDeleteButton"
80+
@inspect="handleZoomClick"
81+
@asset-deleted="handleAssetDelete"
82+
/>
83+
</template>
84+
</MoreButton>
9185
</IconGroup>
9286
</template>
9387

@@ -101,8 +95,6 @@
10195
size="sm"
10296
:label="String(outputCount)"
10397
@click.stop="handleOutputCountClick"
104-
@mouseenter="handleOverlayMouseEnter"
105-
@mouseleave="handleOverlayMouseLeave"
10698
>
10799
<template #icon>
108100
<i class="icon-[lucide--layers] size-4" />
@@ -216,7 +208,6 @@ const moreButtonRef = ref<InstanceType<typeof MoreButton>>()
216208
const isVideoPlaying = ref(false)
217209
const isMenuOpen = ref(false)
218210
const showVideoControls = ref(false)
219-
const isOverlayHovered = ref(false)
220211
221212
// Store actual image dimensions
222213
const imageDimensions = ref<{ width: number; height: number } | undefined>()
@@ -299,7 +290,7 @@ const durationChipClasses = computed(() => {
299290
})
300291
301292
const isCardOrOverlayHovered = computed(
302-
() => isHovered.value || isOverlayHovered.value || isMenuOpen.value
293+
() => isHovered.value || isMenuOpen.value
303294
)
304295
305296
// Show static chips when NOT hovered and NOT playing (normal state)
@@ -320,14 +311,6 @@ const showActionsOverlay = computed(
320311
(isCardOrOverlayHovered.value || isVideoPlaying.value)
321312
)
322313
323-
const handleOverlayMouseEnter = () => {
324-
isOverlayHovered.value = true
325-
}
326-
327-
const handleOverlayMouseLeave = () => {
328-
isOverlayHovered.value = false
329-
}
330-
331314
const handleZoomClick = () => {
332315
if (asset) {
333316
emit('zoom', asset)

src/platform/assets/components/MediaImageTop.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<div
33
class="relative size-full overflow-hidden rounded bg-modal-card-placeholder-background"
4+
@dblclick="emit('view')"
45
>
56
<img
67
v-if="!error"
@@ -28,6 +29,7 @@ const { asset } = defineProps<{
2829
2930
const emit = defineEmits<{
3031
'image-loaded': [width: number, height: number]
32+
view: []
3133
}>()
3234
3335
const { state, error, isReady } = useImage({

0 commit comments

Comments
 (0)