@@ -75,6 +75,8 @@ import { useClipModal } from "~/composables/useClipModal";
7575import { useClipShare } from " ~/composables/useClipShare" ;
7676import { useClipFileSize } from " ~/composables/useClipFileSize" ;
7777import { useClipDelete } from " ~/composables/useClipDelete" ;
78+ import { useScrollArrows } from " ~/composables/useScrollArrows" ;
79+ import ScrollArrows from " ~/components/common/ScrollArrows.vue" ;
7880import { Spinner } from " ~/components/ui/spinner" ;
7981
8082const apiDomain = computed (() => useRuntimeConfig ().public .apiDomain as string );
@@ -684,6 +686,7 @@ watch(
684686
685687// Keep the playing tile centred in the "Up next" strip.
686688const stripRef = ref <HTMLElement | null >(null );
689+ const stripScroll = useScrollArrows (stripRef );
687690watch (
688691 [activeClipIndex , () => !! clip .value , expanded ],
689692 async () => {
@@ -893,39 +896,21 @@ const edgeButton =
893896 :kills =" clip .kills_count "
894897 :round =" clip .round "
895898 :title =" clip .title "
896- :size =" expanded ? ' lg' : undefined "
897- :class =" expanded ? ' ' : ' !bg-black/60 backdrop-blur-sm' "
899+ size="lg"
898900 />
899- <span
900- v-if =" duration"
901- :class ="
902- expanded
903- ? onVideoChip
904- : [tileChip, 'bg-black/60 text-white/90 backdrop-blur-sm']
905- "
906- >
901+ <span v-if =" duration" :class =" onVideoChip" >
907902 {{ duration }}
908903 </span >
909904 <span
910- :class ="
911- expanded
912- ? onVideoChip
913- : [
914- tileChip,
915- 'gap-1 bg-black/60 text-white/90 backdrop-blur-sm',
916- ]
917- "
905+ :class =" onVideoChip"
918906 :title =" $t('clips.tile.views', { count: views }, views)"
919907 >
920908 <Eye class="h-3.5 w-3.5 " />
921909 {{ views }}
922910 </span >
923911 <span
924912 v-if =" !expanded && hasQueueNav"
925- :class =" [
926- tileChip,
927- 'bg-black/60 text-white/90 backdrop-blur-sm',
928- ]"
913+ :class =" onVideoChip"
929914 >
930915 {{ activeClipIndex + 1 }} / {{ clipQueue.length }}
931916 </span >
@@ -948,6 +933,7 @@ const edgeButton =
948933 :download-name =" downloadFilename "
949934 :size-label =" fileSize "
950935 content-class="z-[70]"
936+ trigger-class="h-[30px] rounded-md sm:h-9 "
951937 @copy =" copyLink "
952938 >
953939 <template v-if =" canAdminister " >
@@ -1009,7 +995,7 @@ const edgeButton =
1009995 <button
1010996 v-if =" !expanded"
1011997 type =" button"
1012- :class =" [ onVideoAction, '!h-8 !w-8'] "
998+ :class =" onVideoAction"
1013999 :aria-label =" $t('common.close')"
10141000 @click.stop =" closeClip"
10151001 >
@@ -1528,9 +1514,10 @@ const edgeButton =
15281514 </template >
15291515 </div >
15301516
1517+ <!-- Full-screen on phones: Up next sits on the bottom edge. -->
15311518 <section
15321519 v-if =" clipQueue.length > 1"
1533- class =" border-t border-white/[0.06] px-5 pb-6 pt-4 sm:px-6"
1520+ class =" border-t border-white/[0.06] px-5 pb-6 pt-4 max-sm:mt-auto max-sm:pb-[max(1.5rem,env(safe-area-inset-bottom))] sm:px-6"
15341521 >
15351522 <div
15361523 :class =" [
@@ -1542,11 +1529,18 @@ const edgeButton =
15421529 <span :class =" tacticalSectionTickClasses" ></span >
15431530 {{ $t("clips.detail.up_next") }}
15441531 </span >
1545- <span
1546- v-if =" hasQueueNav"
1547- class =" normal-case tabular-nums tracking-normal"
1548- >
1549- {{ activeClipIndex + 1 }} / {{ clipQueue.length }}
1532+ <span class =" inline-flex items-center gap-3" >
1533+ <span
1534+ v-if =" hasQueueNav"
1535+ class =" normal-case tabular-nums tracking-normal"
1536+ >
1537+ {{ activeClipIndex + 1 }} / {{ clipQueue.length }}
1538+ </span >
1539+ <ScrollArrows
1540+ :can-left =" stripScroll .state .canScrollLeft "
1541+ :can-right =" stripScroll .state .canScrollRight "
1542+ @scroll =" stripScroll .scrollByDirection "
1543+ />
15501544 </span >
15511545 </div >
15521546 <div
@@ -1557,7 +1551,7 @@ const edgeButton =
15571551 v-for =" q in clipQueue"
15581552 :key =" q.id"
15591553 type =" button"
1560- class =" group/q relative isolate aspect-video w-52 shrink-0 snap-start overflow-hidden rounded-lg border bg-card text-left transition-[border-color,transform] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--tac-amber))] motion-safe:active:scale-[0.97]"
1554+ class =" group/q relative isolate aspect-video w-52 shrink-0 snap-start overflow-hidden max-sm:w-[80%] rounded-lg border bg-card text-left transition-[border-color,transform] duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[hsl(var(--tac-amber))] motion-safe:active:scale-[0.97]"
15611555 :class ="
15621556 q.id === clipId
15631557 ? 'border-[hsl(var(--tac-amber)/0.7)]'
0 commit comments