feat: show call participants in room list (Discord-style)
Docker / Docker Buildx (push) Has been cancelled
Build Debian package / Build package (release) Has been cancelled
Build and Deploy / prepare (release) Has been cancelled
Deploy release / Deploy to Cloudflare Pages (release) Has been cancelled
Build and Deploy / Trigger Pro pipeline (release) Has been cancelled
Build and Deploy / Windows arm64 (release) Has been cancelled
Build and Deploy / Windows x64 (release) Has been cancelled
Build and Deploy / macOS (release) Has been cancelled
Build and Deploy / Linux amd64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / Linux arm64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }} (release) Has been cancelled
Build and Deploy / Deploy builds to ESS (release) Has been cancelled

This commit is contained in:
sorB
2026-05-10 14:25:35 +02:00
parent b797925316
commit 3da363517f
4610 changed files with 827237 additions and 1 deletions
@@ -0,0 +1,128 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
Copyright 2015, 2016 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
/* data-whatintent makes more sense here semantically but then the tooltip would stay visible without the button */
/* which looks broken, so we match the behaviour of tooltips which is fine too. */
[data-whatinput="mouse"] .mx_LegacyCallViewButtons.mx_LegacyCallViewButtons_hidden {
opacity: 0.001; /* opacity 0 can cause a re-layout */
pointer-events: none;
}
.mx_LegacyCallViewButtons {
--LegacyCallViewButtons_dropdownButton-size: 16px;
position: absolute;
display: flex;
justify-content: center;
bottom: 32px;
opacity: 1;
transition: opacity 0.5s;
z-index: 200; /* To be above _all_ feeds */
gap: 18px;
.mx_LegacyCallViewButtons_button {
cursor: pointer;
background-color: $call-view-button-on-background;
border-radius: 100%;
height: 40px;
width: 40px;
display: flex;
justify-content: center;
align-items: center;
position: relative;
box-shadow: 0px 4px 4px 0px #00000026; /* Same on both themes */
svg {
display: inline-block;
color: $call-view-button-on-foreground;
height: 24px;
width: 24px;
}
&.mx_LegacyCallViewButtons_dropdownButton {
width: var(--LegacyCallViewButtons_dropdownButton-size);
height: var(--LegacyCallViewButtons_dropdownButton-size);
position: absolute;
right: 0;
bottom: 0;
svg {
width: 16px;
height: 16px;
}
}
&.mx_LegacyCallViewButtons_button_mic svg {
height: 20px;
width: 20px;
}
/* State buttons */
&.mx_LegacyCallViewButtons_button_on {
background-color: $call-view-button-on-background;
svg {
color: $call-view-button-on-foreground;
}
&.mx_LegacyCallViewButtons_button_screensharing {
background-color: $accent;
svg {
color: white; /* Same on both themes */
}
}
}
&.mx_LegacyCallViewButtons_button_off {
background-color: $call-view-button-off-background;
svg {
color: $call-view-button-off-foreground;
}
&.mx_LegacyCallViewButtons_button_screensharing,
&.mx_LegacyCallViewButtons_button_sidebar {
background-color: $call-view-button-on-background;
svg {
color: $call-view-button-on-foreground;
}
}
}
/* State buttons */
/* Stateless buttons */
&.mx_LegacyCallViewButtons_button_hangup {
background-color: $alert;
svg {
color: white; /* Same on both themes */
}
}
/* Stateless buttons */
/* Invisible state */
&.mx_LegacyCallViewButtons_button_invisible {
visibility: hidden;
pointer-events: none;
position: absolute;
}
/* Invisible state */
}
}
@@ -0,0 +1,13 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_CallDuration {
color: $secondary-content;
font-size: $font-12px;
white-space: nowrap;
}
@@ -0,0 +1,25 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_CallView {
flex-grow: 1;
min-height: 0;
display: flex;
flex-direction: column;
background-color: $header-panel-bg-color;
.mx_AppTile {
width: auto;
height: 100%;
border: none;
border-radius: inherit;
background-color: $call-background;
}
}
+54
View File
@@ -0,0 +1,54 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_DialPad {
display: grid;
row-gap: 16px;
column-gap: 0px;
margin-top: 24px;
margin-left: auto;
margin-right: auto;
/* squeeze the dial pad buttons together horizontally */
grid-template-columns: repeat(3, 1fr);
}
.mx_DialPad_button {
display: flex;
flex-direction: column;
justify-content: center;
width: 40px;
height: 40px;
background-color: $quinary-content;
border-radius: 40px;
font-size: 18px;
font-weight: var(--cpd-font-weight-semibold);
text-align: center;
vertical-align: middle;
margin-left: auto;
margin-right: auto;
}
.mx_DialPad_button .mx_DialPad_buttonSubText {
font-size: 8px;
}
.mx_DialPad_dialButton {
/* Always show the dial button in the center grid column */
grid-column: 2;
background-color: $accent;
svg {
display: inline-block;
height: 20px;
width: 20px;
padding: 10px;
color: #fff; /* on all themes */
}
}
@@ -0,0 +1,63 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_DialPadContextMenu_dialPad .mx_DialPad {
row-gap: 16px;
column-gap: 32px;
}
.mx_DialPadContextMenuWrapper {
padding: 15px;
}
.mx_DialPadContextMenu_header {
border: none;
margin-top: 32px;
margin-left: 20px;
margin-right: 20px;
/* a separator between the input line and the dial buttons */
border-bottom: 1px solid $quaternary-content;
transition: border-bottom 0.25s;
}
.mx_DialPadContextMenu_cancel {
@mixin customisedCancelButton;
float: right;
}
.mx_DialPadContextMenu_header:focus-within {
border-bottom: 1px solid $accent;
}
.mx_DialPadContextMenu_title {
color: $muted-fg-color;
font-size: 12px;
font-weight: var(--cpd-font-weight-semibold);
}
.mx_DialPadContextMenu_dialled {
height: 1.5em;
font-size: 18px;
font-weight: var(--cpd-font-weight-semibold);
border: none;
margin: 0px;
}
.mx_DialPadContextMenu_dialled input {
font-size: 18px;
font-weight: var(--cpd-font-weight-semibold);
overflow: hidden;
max-width: 185px;
text-align: left;
padding: 8px 0px;
background-color: rgb(0, 0, 0, 0);
}
.mx_DialPadContextMenu_dialPad {
margin: 16px;
}
@@ -0,0 +1,65 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_Dialog_dialPadWrapper .mx_Dialog {
padding: 0px;
}
.mx_DialPadModal {
width: 292px;
height: 370px;
padding: 16px 0px 0px 0px;
}
.mx_DialPadModal_header {
margin-top: 32px;
margin-left: 40px;
margin-right: 40px;
/* a separator between the input line and the dial buttons */
border-bottom: 1px solid $quaternary-content;
transition: border-bottom 0.25s;
}
.mx_DialPadModal_header:focus-within {
border-bottom: 1px solid $accent;
}
.mx_DialPadModal_title {
color: $muted-fg-color;
font-size: 12px;
font-weight: var(--cpd-font-weight-semibold);
}
.mx_DialPadModal_cancel {
@mixin customisedCancelButton;
float: right;
margin-right: 16px;
}
.mx_DialPadModal_field {
border: none;
margin: 0px;
height: 30px;
}
.mx_DialPadModal_field .mx_Field_postfix {
/* Remove border separator between postfix and field content */
border-left: none;
}
.mx_DialPadModal_field input {
font-size: 18px;
font-weight: var(--cpd-font-weight-semibold);
}
.mx_DialPadModal_dialPad {
margin-left: 16px;
margin-right: 16px;
margin-top: 16px;
}
@@ -0,0 +1,191 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
Copyright 2015, 2016 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_LegacyCallView {
border-radius: 8px;
background-color: $dark-panel-bg-color;
padding-left: 8px;
padding-right: 8px;
/* XXX: PiPContainer sets pointer-events: none - should probably be set back in a better place */
pointer-events: initial;
.mx_LegacyCallView_toast {
position: absolute;
top: 74px;
padding: 4px 8px;
border-radius: 4px;
z-index: 50;
/* Same on both themes */
color: white;
background-color: #17191c;
}
.mx_LegacyCallView_content_wrapper {
display: flex;
justify-content: center;
width: 100%;
height: 100%;
overflow: hidden;
.mx_LegacyCallView_content {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
flex: 1;
overflow: hidden;
border-radius: 10px;
padding: 10px;
padding-right: calc(20% + 20px); /* Space for the sidebar */
background-color: $call-view-content-background;
.mx_LegacyCallView_status {
z-index: 50;
color: $accent-fg-color;
}
.mx_LegacyCallView_avatarsContainer {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
div {
margin-left: 12px;
margin-right: 12px;
}
}
.mx_LegacyCallView_holdBackground {
position: absolute;
left: 0;
right: 0;
width: 100%;
height: 100%;
background-repeat: no-repeat;
background-size: cover;
background-position: center;
filter: blur(20px);
&::after {
content: "";
display: block;
position: absolute;
width: 100%;
height: 100%;
left: 0;
right: 0;
background-color: rgb(0, 0, 0, 0.6);
}
}
&.mx_LegacyCallView_content_hold .mx_LegacyCallView_status {
font-weight: bold;
text-align: center;
&::before {
display: block;
margin-left: auto;
margin-right: auto;
content: "";
width: 40px;
height: 40px;
background-image: url("/res/img/voip/paused.svg");
background-position: center;
background-size: cover;
}
.mx_LegacyCallView_pip &::before {
width: 30px;
height: 30px;
}
}
}
}
&:not(.mx_LegacyCallView_sidebar) .mx_LegacyCallView_content {
padding: 0;
width: 100%;
height: 100%;
.mx_VideoFeed_primary {
aspect-ratio: unset;
border: 0;
width: 100%;
height: 100%;
}
}
&.mx_LegacyCallView_pip {
width: 320px;
padding-bottom: 8px;
border-radius: 8px;
background-color: $system;
box-shadow: 0px 4px 20px rgb(0, 0, 0, 0.2);
.mx_LegacyCallViewButtons {
bottom: 13px;
.mx_LegacyCallViewButtons_button {
width: 34px;
height: 34px;
&.mx_LegacyCallViewButtons_dropdownButton {
width: var(--LegacyCallViewButtons_dropdownButton-size);
height: var(--LegacyCallViewButtons_dropdownButton-size);
}
&::before {
width: 22px;
height: 22px;
}
}
}
.mx_LegacyCallView_content {
min-height: 180px;
}
}
&.mx_LegacyCallView_large {
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
padding-bottom: 10px;
margin: var(--container-gap-width);
/* The left side gap is fully handled by this margin. To prohibit bleeding on webkit browser. */
margin-right: calc(var(--container-gap-width) / 2);
margin-bottom: 10px;
}
&.mx_LegacyCallView_belowWidget {
margin-top: 0;
}
}
@@ -0,0 +1,35 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_LegacyCallViewForRoom {
overflow: hidden;
.mx_LegacyCallViewForRoom_ResizeWrapper {
display: flex;
&:hover .mx_LegacyCallViewForRoom_ResizeHandle {
/* Need to use important to override element style attributes */
/* set by re-resizable */
width: 100% !important;
display: flex;
justify-content: center;
&::after {
content: "";
border-radius: 4px;
height: 4px;
width: 100%;
max-width: 64px;
background-color: $primary-content;
}
}
}
}
@@ -0,0 +1,94 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_LegacyCallViewHeader {
height: 44px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
flex-shrink: 0;
width: 100%;
&.mx_LegacyCallViewHeader_pip {
cursor: grab;
}
}
.mx_LegacyCallViewHeader_text {
font-size: 1.2rem;
font-weight: bold;
vertical-align: middle;
}
.mx_LegacyCallViewHeader_secondaryCallInfo {
&::before {
content: "·";
margin-left: 6px;
margin-right: 6px;
}
}
.mx_LegacyCallViewHeader_controls {
margin-left: auto;
display: flex;
gap: 5px;
}
.mx_LegacyCallViewHeader_button {
display: inline-block;
vertical-align: middle;
cursor: pointer;
svg {
display: inline-block;
height: 20px;
width: 20px;
vertical-align: middle;
color: $secondary-content;
}
}
.mx_LegacyCallViewHeader_callInfo {
margin-left: 12px;
margin-right: 16px;
overflow: hidden;
}
.mx_LegacyCallViewHeader_roomName {
font-weight: bold;
font-size: 12px;
line-height: initial;
height: 15px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mx_LegacyCallView_secondaryCall_roomName {
margin-left: 4px;
}
.mx_LegacyCallViewHeader_icon {
display: inline-block;
margin-right: 6px;
height: 16px;
width: 16px;
vertical-align: middle;
svg {
display: inline-block;
vertical-align: top;
height: 16px;
width: 16px;
color: $secondary-content;
}
}
@@ -0,0 +1,42 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 2022 Šimon Brandner <simon.bra.ag@gmail.com>
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_LegacyCallViewSidebar {
position: absolute;
right: 10px;
width: 20%;
height: 100%;
overflow: auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: flex-end;
gap: 12px;
> .mx_VideoFeed {
width: 100%;
border-radius: 4px;
&.mx_VideoFeed_voice {
display: flex;
align-items: center;
justify-content: center;
background-color: $video-feed-secondary-background;
}
}
&.mx_LegacyCallViewSidebar_pipMode {
top: 16px;
bottom: unset;
justify-content: flex-end;
gap: 4px;
}
}
@@ -0,0 +1,67 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2021, 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2015, 2016 , 2020, 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_VideoFeed {
overflow: hidden;
position: relative;
box-sizing: border-box;
border: transparent 2px solid;
display: flex;
border-radius: 4px;
&.mx_VideoFeed_secondary {
position: absolute;
right: 24px;
bottom: 72px;
width: 20%;
}
&.mx_VideoFeed_voice {
background-color: $inverted-bg-color;
display: flex;
justify-content: center;
align-items: center;
&:not(.mx_VideoFeed_primary) {
aspect-ratio: 16 / 9;
}
}
.mx_VideoFeed_video {
height: 100%;
width: 100%;
border-radius: 4px;
background-color: #000000;
&.mx_VideoFeed_video_mirror {
transform: scale(-1, 1);
}
}
.mx_VideoFeed_mic {
position: absolute;
left: 6px;
bottom: 6px;
z-index: 1;
width: 24px;
height: 24px;
background-color: rgb(0, 0, 0, 0.5); /* Same on both themes */
border-radius: 100%;
svg {
width: 16px;
height: 16px;
padding: 4px;
color: white; /* Same on both themes */
}
}
}