diff --git a/web/src/app.html b/web/src/app.html index c0ac3cfe6c..18a873b525 100644 --- a/web/src/app.html +++ b/web/src/app.html @@ -5,7 +5,7 @@ - + diff --git a/web/src/lib/components/photos-page/asset-grid.svelte b/web/src/lib/components/photos-page/asset-grid.svelte index 6e1751b7b3..0e9053a5ea 100644 --- a/web/src/lib/components/photos-page/asset-grid.svelte +++ b/web/src/lib/components/photos-page/asset-grid.svelte @@ -25,6 +25,7 @@ import { page } from '$app/stores'; import type { UpdatePayload } from 'vite'; import type { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; + import { mobileDevice } from '$lib/stores/mobile-device.svelte'; interface Props { isSelectionMode?: boolean; @@ -82,6 +83,8 @@ let bottomSectionHeight = 60; let leadout = $state(false); + const usingMobileDevice = $derived(mobileDevice.hoverNone); + const scrollTo = (top: number) => { element?.scrollTo({ top }); showSkeleton = false; @@ -714,7 +717,12 @@
((assetStore.viewportWidth = v), updateSlidingWindow())} diff --git a/web/src/lib/components/shared-components/scrubber/scrubber.svelte b/web/src/lib/components/shared-components/scrubber/scrubber.svelte index d13c12cf6a..734b42205e 100644 --- a/web/src/lib/components/shared-components/scrubber/scrubber.svelte +++ b/web/src/lib/components/shared-components/scrubber/scrubber.svelte @@ -1,8 +1,12 @@ (isDragging || isHover) && handleMouseEvent({ clientY })} onmousedown={({ clientY }) => isHover && handleMouseEvent({ clientY, isDragging: true })} onmouseup={({ clientY }) => handleMouseEvent({ clientY, isDragging: false })} + ontouchstart={onTouchStart} + ontouchend={onTouchEnd} + ontouchcancel={onTouchEnd} />
(isHover = true)} onmouseleave={() => (isHover = false)} onkeydown={(event) => onScrubKeyDown?.(event, event.currentTarget)} + draggable="false" > - {#if hoverLabel && (isHover || isDragging)} + {#if !usingMobileDevice && hoverLabel && (isHover || isDragging)}
{/if} + {#if usingMobileDevice && ((assetStore.scrolling && scrollHoverLabel) || isHover || isDragging)} +
+ + + {#if (assetStore.scrolling && scrollHoverLabel) || isHover || isDragging} +

+ {scrollHoverLabel} +

+ {/if} +
+ {/if} - {#if !isDragging} + {#if !usingMobileDevice && !isDragging}
- {#if segment.hasLabel} -
+ {#if !usingMobileDevice && segment.hasLabel} +
{segment.date.year}
{/if} - {#if segment.hasDot} -
+ {#if !usingMobileDevice && segment.hasDot} +
{/if}
{/each} diff --git a/web/src/lib/stores/mobile-device.svelte.ts b/web/src/lib/stores/mobile-device.svelte.ts new file mode 100644 index 0000000000..f40e8aafdc --- /dev/null +++ b/web/src/lib/stores/mobile-device.svelte.ts @@ -0,0 +1,9 @@ +import { MediaQuery } from 'svelte/reactivity'; + +const hoverNone = new MediaQuery('hover: none'); + +export const mobileDevice = { + get hoverNone() { + return hoverNone.current; + }, +};