diff --git a/res/css/views/rooms/_EntityTile.pcss b/res/css/views/rooms/_EntityTile.pcss deleted file mode 100644 index 979d5bb5d4..0000000000 --- a/res/css/views/rooms/_EntityTile.pcss +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2015, 2016 OpenMarket Ltd - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only -Please see LICENSE files in the repository root for full details. -*/ - -.mx_EntityTile { - display: flex; - align-items: center; - color: $primary-content; - cursor: pointer; - - .mx_E2EIcon { - margin: 0; - position: absolute; - bottom: 2px; - right: 7px; - } -} - -.mx_EntityTile:hover { - padding-right: 30px; - position: relative; /* to keep the chevron aligned */ -} - -.mx_EntityTile:hover::before { - content: ""; - position: absolute; - top: calc(50% - 8px); /* center */ - right: -8px; - mask: url("@vector-im/compound-design-tokens/icons/chevron-right.svg"); - mask-repeat: no-repeat; - mask-position: center; - width: 16px; - height: 16px; - background-color: $header-panel-text-primary-color; -} - -.mx_EntityTile:not(.mx_EntityTile_unreachable) .mx_PresenceLabel { - display: none; -} - -.mx_EntityTile:hover .mx_PresenceLabel { - display: block; -} - -.mx_EntityTile_invite { - display: table-cell; - vertical-align: middle; - margin-left: 10px; - width: 26px; -} - -.mx_EntityTile_avatar { - padding-left: 3px; - padding-right: 12px; - padding-top: 4px; - padding-bottom: 4px; - position: relative; - line-height: 0; -} - -.mx_EntityTile_name { - flex: 1 1 0; - overflow: hidden; - font: var(--cpd-font-body-md-regular); - text-overflow: ellipsis; - white-space: nowrap; -} - -.mx_EntityTile_details { - overflow: hidden; - flex: 1; -} - -.mx_EntityTile_ellipsis .mx_EntityTile_name { - font-style: italic; - color: $primary-content; -} - -.mx_EntityTile_invitePlaceholder .mx_EntityTile_name { - font-style: italic; - color: $primary-content; -} - -.mx_EntityTile_unavailable .mx_EntityTile_avatar, -.mx_EntityTile_unavailable .mx_EntityTile_name, -.mx_EntityTile_offline_beenactive .mx_EntityTile_avatar, -.mx_EntityTile_offline_beenactive .mx_EntityTile_name { - opacity: 0.5; -} - -.mx_EntityTile_offline_neveractive .mx_EntityTile_avatar, -.mx_EntityTile_offline_neveractive .mx_EntityTile_name { - opacity: 0.25; -} - -.mx_EntityTile_unknown .mx_EntityTile_avatar, -.mx_EntityTile_unknown .mx_EntityTile_name, -.mx_EntityTile_unreachable .mx_EntityTile_avatar, -.mx_EntityTile_unreachable .mx_EntityTile_name { - opacity: 0.25; -} - -.mx_EntityTile_subtext { - font-size: $font-11px; - opacity: 0.5; - overflow: hidden; - white-space: nowrap; - text-overflow: clip; -} - -.mx_EntityTile_power { - padding-inline-start: 6px; - font-size: $font-10px; - color: $secondary-content; - max-width: 6em; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.mx_EntityTile:hover .mx_EntityTile_power { - display: none; -} diff --git a/res/css/views/rooms/_MemberList.pcss b/res/css/views/rooms/_MemberList.pcss deleted file mode 100644 index e3fe819ab6..0000000000 --- a/res/css/views/rooms/_MemberList.pcss +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2015, 2016 OpenMarket Ltd - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only -Please see LICENSE files in the repository root for full details. -*/ - -.mx_MemberList { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - - .mx_Spinner { - flex: 1 0 auto; - } - - .mx_SearchBox { - margin-bottom: 5px; - } - - h2 { - text-transform: uppercase; - color: $h3-color; - font-weight: var(--cpd-font-weight-semibold); - font-size: $font-13px; - padding-left: 3px; - padding-right: 12px; - margin-top: 8px; - margin-bottom: 4px; - } - - .mx_AutoHideScrollbar { - flex: 1 1 0; - margin-top: var(--cpd-space-3x); - } -} - -.mx_MemberList_chevron { - position: absolute; - right: 35px; - margin-top: -15px; -} - -.mx_MemberList_border { - overflow-y: auto; - - order: 1; - flex: 1 1 0px; -} - -.mx_MemberList_query { - height: 16px; - - /* stricter rule to override the one in _common.pcss */ - &[type="text"] { - font-size: $font-12px; - } -} - -.mx_MemberList_wrapper { - padding: 10px; -} - -.mx_MemberList_invite { - margin: 0 var(--cpd-space-2x); - width: calc(100% - var(--cpd-space-4x)); -} diff --git a/src/components/views/rooms/EntityTile.tsx b/src/components/views/rooms/EntityTile.tsx deleted file mode 100644 index 946a5cd46b..0000000000 --- a/src/components/views/rooms/EntityTile.tsx +++ /dev/null @@ -1,170 +0,0 @@ -/* -Copyright 2024 New Vector Ltd. -Copyright 2020 The Matrix.org Foundation C.I.C. -Copyright 2018 New Vector Ltd -Copyright 2015, 2016 OpenMarket Ltd - -SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only -Please see LICENSE files in the repository root for full details. -*/ - -import React from "react"; -import classNames from "classnames"; - -import AccessibleButton from "../elements/AccessibleButton"; -import { _t, _td, TranslationKey } from "../../../languageHandler"; -import E2EIcon, { E2EState } from "./E2EIcon"; -import BaseAvatar from "../avatars/BaseAvatar"; -import PresenceLabel from "./PresenceLabel"; - -export enum PowerStatus { - Admin = "admin", - Moderator = "moderator", -} - -const PowerLabel: Record = { - [PowerStatus.Admin]: _td("power_level|admin"), - [PowerStatus.Moderator]: _td("power_level|mod"), -}; - -export type PresenceState = "offline" | "online" | "unavailable" | "io.element.unreachable"; - -const PRESENCE_CLASS: Record = { - "offline": "mx_EntityTile_offline", - "online": "mx_EntityTile_online", - "unavailable": "mx_EntityTile_unavailable", - "io.element.unreachable": "mx_EntityTile_unreachable", -}; - -function presenceClassForMember(presenceState?: PresenceState, lastActiveAgo?: number, showPresence?: boolean): string { - if (showPresence === false) { - return "mx_EntityTile_online_beenactive"; - } - - // offline is split into two categories depending on whether we have - // a last_active_ago for them. - if (presenceState === "offline") { - if (lastActiveAgo) { - return PRESENCE_CLASS["offline"] + "_beenactive"; - } else { - return PRESENCE_CLASS["offline"] + "_neveractive"; - } - } else if (presenceState) { - return PRESENCE_CLASS[presenceState]; - } else { - return PRESENCE_CLASS["offline"] + "_neveractive"; - } -} - -interface IProps { - name?: string; - nameJSX?: JSX.Element; - title?: string; - avatarJsx?: JSX.Element; // - className?: string; - presenceState: PresenceState; - presenceLastActiveAgo: number; - presenceLastTs: number; - presenceCurrentlyActive?: boolean; - onClick(): void; - showPresence: boolean; - subtextLabel?: string; - e2eStatus?: E2EState; - powerStatus?: PowerStatus; -} - -interface IState { - hover: boolean; -} - -export default class EntityTile extends React.PureComponent { - public static defaultProps = { - onClick: () => {}, - presenceState: "offline", - presenceLastActiveAgo: 0, - presenceLastTs: 0, - showInviteButton: false, - showPresence: true, - }; - - public constructor(props: IProps) { - super(props); - - this.state = { - hover: false, - }; - } - - /** - * Creates the PresenceLabel component if needed - * @returns The PresenceLabel component if we need to render it, undefined otherwise - */ - private getPresenceLabel(): JSX.Element | undefined { - if (!this.props.showPresence) return; - const activeAgo = this.props.presenceLastActiveAgo - ? Date.now() - (this.props.presenceLastTs - this.props.presenceLastActiveAgo) - : -1; - return ( - - ); - } - - public render(): React.ReactNode { - const mainClassNames: Record = { - mx_EntityTile: true, - }; - if (this.props.className) mainClassNames[this.props.className] = true; - - const presenceClass = presenceClassForMember( - this.props.presenceState, - this.props.presenceLastActiveAgo, - this.props.showPresence, - ); - mainClassNames[presenceClass] = true; - - const name = this.props.nameJSX || this.props.name; - const nameAndPresence = ( -
-
{name}
- {this.getPresenceLabel()} -
- ); - - let powerLabel; - const powerStatus = this.props.powerStatus; - if (powerStatus) { - const powerText = _t(PowerLabel[powerStatus]); - powerLabel =
{powerText}
; - } - - let e2eIcon; - const { e2eStatus } = this.props; - if (e2eStatus) { - e2eIcon = ; - } - - const av = this.props.avatarJsx ||