From c2fe8b5e2337dfefb7b95aaf151f426cebd3a895 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Thu, 20 Aug 2026 12:52:14 +0200 Subject: [PATCH] FIX - correct messages GIF picker layout --- frontend/src/assets/main.css | 46 ++++++++++++++++- .../views/apps/MessagesApp.contract.test.ts | 7 +++ frontend/src/views/apps/MessagesApp.vue | 51 ++++++++++++++----- frontend/testserver/index.cjs | 18 +++---- 4 files changed, 99 insertions(+), 23 deletions(-) diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 1a362e4..41ea588 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -6615,9 +6615,47 @@ button { display: block; object-fit: contain; } +.messages-media-picker__gifs--masonry { + display: flex; + flex-direction: column; + align-items: stretch; + gap: 10px; +} +.messages-gif-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + align-items: start; + gap: 8px; +} +.messages-gif-column { + min-width: 0; + display: grid; + align-content: start; + gap: 8px; +} +.messages-media-picker__gifs--masonry .messages-gif-result { + width: 100%; + min-height: 0; + display: block; + overflow: hidden; + border: 1px solid rgb(60 60 67 / 10%); + border-radius: 12px; + background: var(--sky-surface-muted); + box-shadow: none; +} +.messages-media-picker__gifs--masonry .messages-gif-result img { + width: 100%; + height: 100%; + display: block; + object-fit: cover; +} .messages-media-picker__gifs .messages-gif-more { + width: 100%; min-height: 36px; - grid-column: 1 / -1; + flex: 0 0 auto; + border: 0; + background: transparent; + box-shadow: none; color: var(--ios-blue); font-size: 12px; font-weight: 650; @@ -6939,6 +6977,12 @@ button { .phone-app.dark .messages-media-picker__gifs button { background: #2c2c2e; } +.phone-app.dark + .messages-media-picker__gifs--masonry + .messages-gif-result { + border-color: rgb(255 255 255 / 10%); + background: var(--sky-surface-muted); +} .phone-app.dark .messages-media-picker__gifs .messages-gif-more, .phone-app.dark .messages-media-picker__gifs .messages-gif-error button { background: rgb(10 132 255 / 20%); diff --git a/frontend/src/views/apps/MessagesApp.contract.test.ts b/frontend/src/views/apps/MessagesApp.contract.test.ts index 2b52260..02708a0 100644 --- a/frontend/src/views/apps/MessagesApp.contract.test.ts +++ b/frontend/src/views/apps/MessagesApp.contract.test.ts @@ -186,6 +186,13 @@ describe('MessagesApp Sky UI contract', () => { expect(source).toContain( 'aspectRatio: `${Math.max(1, gif.width)} / ${Math.max(1, gif.height)}`', ) + expect(source).toContain('const gifColumns = computed') + expect(source).toContain('class="messages-gif-grid"') + expect(source).toContain('class="messages-gif-column"') + expect(source).toContain('class="messages-gif-result"') + expect(styles).toMatch( + /\.messages-media-picker__gifs--masonry \.messages-gif-result img\s*\{[^}]*object-fit:\s*cover/s, + ) }) it('opens contact sharing in a draggable Sky UI bottom sheet', () => { diff --git a/frontend/src/views/apps/MessagesApp.vue b/frontend/src/views/apps/MessagesApp.vue index 5be08bf..30b54ed 100644 --- a/frontend/src/views/apps/MessagesApp.vue +++ b/frontend/src/views/apps/MessagesApp.vue @@ -126,6 +126,19 @@ const gifLoading = ref(false) const gifError = ref(null) const gifHasMore = ref(true) const gifNextOffset = ref(0) +const gifColumns = computed<[GifSearchResult[], GifSearchResult[]]>(() => { + const columns: [GifSearchResult[], GifSearchResult[]] = [[], []] + const columnHeights = [0, 0] + + for (const gif of gifResults.value) { + const columnIndex = columnHeights[0] <= columnHeights[1] ? 0 : 1 + columns[columnIndex].push(gif) + columnHeights[columnIndex] += + Math.max(1, gif.height) / Math.max(1, gif.width) + } + + return columns +}) const recording = ref(false) const recordingStarting = ref(false) const recordingElapsedMs = ref(0) @@ -1714,7 +1727,10 @@ onBeforeUnmount(() => { {{ phone.t('Apps.messages.noContactsToShare') }}

-
+
{ @input="queueGifSearch" @clear="queueGifSearch" /> - +
+
+ +
+