From ce405fac0a37d991b1a303af9eadd5df2c42f132 Mon Sep 17 00:00:00 2001 From: pythonPlant12 Date: Sun, 15 Nov 2026 00:39:19 +0100 Subject: [PATCH 1/2] feat(call): phone focus taps, separate call audio, on-screen-only video, full screen edges - On a phone in portrait, a tap on a small tile puts that person on the big tile, and a tap on the big tile shows the grid of pages of 4; Grid now applies to a 1:1 call too. - Play everyone's audio from CallAudio, apart from the tiles, so hiding the strip or a tile never silences anyone; tile videos are muted and render only while on screen. - Keep the corner picture and the strip 0.5rem above the full screen controls and Add people, and clear of the notch and home indicator. - Cover the status bar in a full screen portrait call in the app, and round a lone tile like the screen's corners. - Lift the controls 0.25rem in full screen and keep 0.5rem above the home indicator. - Slide in-place dropdowns open and closed with a shared Expand: Privacy, QR code, the phone panel's settings, and connection details. --- src/components/meeting-page/CallAudio.vue | 57 +++++++++++ .../meeting-page/CallPanelChoice.vue | 50 +++++----- .../meeting-page/CallPhoneControls.vue | 12 ++- .../meeting-page/MeetingAccessPicker.vue | 81 ++++++++-------- .../meeting-page/MeetingControls.vue | 7 +- .../meeting-page/MeetingInviteContent.vue | 8 +- .../meeting-page/MeetingMediaControl.vue | 95 ++++++++++--------- .../meeting-page/MeetingShareRow.vue | 22 +++-- .../meeting-page/ParticipantTile.vue | 47 +++++---- src/components/meeting-page/VideoGrid.vue | 56 +++++++++-- .../__tests__/CallPhoneControls.test.ts | 8 ++ .../__tests__/ParticipantTile.test.ts | 21 ++++ .../meeting-page/__tests__/VideoGrid.test.ts | 63 +++++++++++- src/components/ui/expand/Expand.vue | 43 +++++++++ src/components/ui/expand/index.ts | 1 + src/lib/__tests__/meeting-layout.test.ts | 9 +- src/lib/meeting-layout.ts | 4 +- src/pages/MeetingPage.vue | 37 ++++++-- 18 files changed, 461 insertions(+), 160 deletions(-) create mode 100644 src/components/meeting-page/CallAudio.vue create mode 100644 src/components/ui/expand/Expand.vue create mode 100644 src/components/ui/expand/index.ts diff --git a/src/components/meeting-page/CallAudio.vue b/src/components/meeting-page/CallAudio.vue new file mode 100644 index 0000000..3b9d6d3 --- /dev/null +++ b/src/components/meeting-page/CallAudio.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/components/meeting-page/CallPanelChoice.vue b/src/components/meeting-page/CallPanelChoice.vue index 50f1b44..00e0137 100644 --- a/src/components/meeting-page/CallPanelChoice.vue +++ b/src/components/meeting-page/CallPanelChoice.vue @@ -2,6 +2,8 @@ import { Check, ChevronDown } from 'lucide-vue-next'; import { computed, useId } from 'vue'; +import { Expand } from '@/components/ui/expand'; + // One setting in the phone controls panel, such as a camera's source or quality: a row with the setting's name // over its current value, which expands in place to the choices. export interface CallPanelOption { @@ -51,28 +53,30 @@ const current = computed(() => props.options.find((option) => option.value === p aria-hidden="true" /> -
-

{{ emptyText }}

- -
+ +
+

{{ emptyText }}

+ +
+
diff --git a/src/components/meeting-page/CallPhoneControls.vue b/src/components/meeting-page/CallPhoneControls.vue index fc1bef2..e4a4fce 100644 --- a/src/components/meeting-page/CallPhoneControls.vue +++ b/src/components/meeting-page/CallPhoneControls.vue @@ -25,6 +25,11 @@ defineProps<{ /** The call could not get the microphone or camera; its button shows a warning that asks again. */ audioWarning?: boolean; videoWarning?: boolean; + /** + * Full screen sits the bar 0.25rem higher, so it clears the screen's edge with a little more room. Over the home + * indicator area (the OpenMeet app) the bar always keeps 0.5rem above the indicator. + */ + fullscreen?: boolean; }>(); const emit = defineEmits<{ @@ -163,7 +168,12 @@ function onLeave() { diff --git a/src/components/meeting-page/MeetingControls.vue b/src/components/meeting-page/MeetingControls.vue index dfb83f0..344ec28 100644 --- a/src/components/meeting-page/MeetingControls.vue +++ b/src/components/meeting-page/MeetingControls.vue @@ -76,8 +76,11 @@ function onLeave() {
diff --git a/src/components/meeting-page/MeetingInviteContent.vue b/src/components/meeting-page/MeetingInviteContent.vue index 3d80509..e650927 100644 --- a/src/components/meeting-page/MeetingInviteContent.vue +++ b/src/components/meeting-page/MeetingInviteContent.vue @@ -167,7 +167,13 @@ watch(policy, () => { class="h-11 rounded-xl border border-harbor-line bg-harbor-canvas pl-9 text-sm focus-visible:ring-0" />
- + +