Compare commits
24 Commits
t3chguy/pl
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ee50c59f8 | ||
|
|
ba2386ae41 | ||
|
|
fab2997107 | ||
|
|
60ef5d880c | ||
|
|
7e3a6d9c42 | ||
|
|
c486299deb | ||
|
|
773662e018 | ||
|
|
040c348700 | ||
|
|
3fb0f65735 | ||
|
|
9d9782f62b | ||
|
|
0cfaeaa3a7 | ||
|
|
4a3cf3e69d | ||
|
|
c7134e8532 | ||
|
|
1d3421417f | ||
|
|
ef63661cb0 | ||
|
|
e29da89826 | ||
|
|
d2727754e3 | ||
|
|
154baba303 | ||
|
|
8d918e3b16 | ||
|
|
011b975d3f | ||
|
|
00954542f3 | ||
|
|
1cf9e546fd | ||
|
|
cf25d5e258 | ||
|
|
86a38cd2d2 |
49
CHANGELOG.md
@@ -1,3 +1,52 @@
|
||||
Changes in [1.12.7](https://github.com/element-hq/element-web/releases/tag/v1.12.7) (2025-12-16)
|
||||
================================================================================================
|
||||
## ✨ Features
|
||||
|
||||
* Replace legacy icons with compound ([#31424](https://github.com/element-hq/element-web/pull/31424)). Contributed by @t3chguy.
|
||||
* Update polls UX to match EX Mobile and improve accessibility ([#31245](https://github.com/element-hq/element-web/pull/31245)). Contributed by @langleyd.
|
||||
* Add option to enable read receipt and marker when user interact with UI ([#31353](https://github.com/element-hq/element-web/pull/31353)). Contributed by @florianduros.
|
||||
* Introduce a hook to auto dispose view models ([#31178](https://github.com/element-hq/element-web/pull/31178)). Contributed by @MidhunSureshR.
|
||||
* Update settings toggles to use consistent design across app. ([#30169](https://github.com/element-hq/element-web/pull/30169)). Contributed by @Half-Shot.
|
||||
* Add ability to the room view to hide widgets ([#31400](https://github.com/element-hq/element-web/pull/31400)). Contributed by @langleyd.
|
||||
* call: Pass the echo cancellation and noise suppression settings to EC ([#31317](https://github.com/element-hq/element-web/pull/31317)). Contributed by @BillCarsonFr.
|
||||
* Tweak rendering of icons for a11y ([#31358](https://github.com/element-hq/element-web/pull/31358)). Contributed by @t3chguy.
|
||||
* Implement new `renderNotificationDecoration` from module API ([#31389](https://github.com/element-hq/element-web/pull/31389)). Contributed by @MidhunSureshR.
|
||||
* Replace more icons with compound ([#31381](https://github.com/element-hq/element-web/pull/31381)). Contributed by @t3chguy.
|
||||
* Replace more icons with compound ([#31378](https://github.com/element-hq/element-web/pull/31378)). Contributed by @t3chguy.
|
||||
* `<Banner/>`: Hide `Dismiss` button if `onClose` handler is not provided. ([#31362](https://github.com/element-hq/element-web/pull/31362)). Contributed by @kaylendog.
|
||||
* Replace batch of legacy icons with compound design tokens ([#31360](https://github.com/element-hq/element-web/pull/31360)). Contributed by @t3chguy.
|
||||
* MSC4380: Invite blocking ([#31268](https://github.com/element-hq/element-web/pull/31268)). Contributed by @richvdh.
|
||||
* Tweak rendering of icons for accessibility ([#31346](https://github.com/element-hq/element-web/pull/31346)). Contributed by @t3chguy.
|
||||
* Implement a shared `Banner` component. ([#31266](https://github.com/element-hq/element-web/pull/31266)). Contributed by @kaylendog.
|
||||
* Allow the Login screen to use the dark theme ([#31293](https://github.com/element-hq/element-web/pull/31293)). Contributed by @richvdh.
|
||||
|
||||
## 🐛 Bug Fixes
|
||||
|
||||
* [Backport staging] Amend e2e normal icon from lock-solid to info ([#31559](https://github.com/element-hq/element-web/pull/31559)). Contributed by @t3chguy.
|
||||
* [Backport staging] Fix CSS specificity causing icon issues in e2e verification ([#31548](https://github.com/element-hq/element-web/pull/31548)). Contributed by @RiotRobot.
|
||||
* [Backport staging] Fix e2e icons in CompleteSecurity \& SetupEncryptionBody ([#31522](https://github.com/element-hq/element-web/pull/31522)). Contributed by @RiotRobot.
|
||||
* [Backport staging] Remove an extra paragraph in advanced room settings ([#31511](https://github.com/element-hq/element-web/pull/31511)). Contributed by @RiotRobot.
|
||||
* [Backport staging] Don't show the key storage out of sync toast when backup disabled ([#31507](https://github.com/element-hq/element-web/pull/31507)). Contributed by @RiotRobot.
|
||||
* Fix composer button visibility in contrast colour mode ([#31255](https://github.com/element-hq/element-web/pull/31255)). Contributed by @t3chguy.
|
||||
* Ensure correct room version is used and permissions are appropriately sert when creating rooms ([#31464](https://github.com/element-hq/element-web/pull/31464)). Contributed by @Half-Shot.
|
||||
* Fix e2e icon rendering ([#31454](https://github.com/element-hq/element-web/pull/31454)). Contributed by @t3chguy.
|
||||
* EventIndexer: ensure we add initial checkpoints when the db is first opened ([#31448](https://github.com/element-hq/element-web/pull/31448)). Contributed by @richvdh.
|
||||
* Fix `/join <alias>` command failing due to race condition ([#31433](https://github.com/element-hq/element-web/pull/31433)). Contributed by @MidhunSureshR.
|
||||
* MessageEventIndexDialog: distinguish indexed rooms ([#31436](https://github.com/element-hq/element-web/pull/31436)). Contributed by @richvdh.
|
||||
* Move `EditInPlace` out of `Form` (Fixes: reloading EW on EC url update) ([#31434](https://github.com/element-hq/element-web/pull/31434)). Contributed by @toger5.
|
||||
* Fixes issue where cursor would jump to the beginning of the input field after converting Japanese text and pressing Tab ([#31432](https://github.com/element-hq/element-web/pull/31432)). Contributed by @shinaoka.
|
||||
* Fix widgets getting stuck in loading states ([#31314](https://github.com/element-hq/element-web/pull/31314)). Contributed by @robintown.
|
||||
* Room list: fix room options remaining on room item after mouse leaving ([#31414](https://github.com/element-hq/element-web/pull/31414)). Contributed by @florianduros.
|
||||
* Make `RoomList.showMessagePreview` configurable by `config.json` ([#31419](https://github.com/element-hq/element-web/pull/31419)). Contributed by @florianduros.
|
||||
* Fix bug which caused app not to load correctly when `force_verification` is enabled ([#31265](https://github.com/element-hq/element-web/pull/31265)). Contributed by @richvdh.
|
||||
* Room list: display the menu option on the room list item when clicked/opened ([#31380](https://github.com/element-hq/element-web/pull/31380)). Contributed by @florianduros.
|
||||
* Fix handling of SVGs ([#31359](https://github.com/element-hq/element-web/pull/31359)). Contributed by @t3chguy.
|
||||
* Fix word wrapping in expanded left panel buttons ([#31377](https://github.com/element-hq/element-web/pull/31377)). Contributed by @t3chguy.
|
||||
* Fix aspect ratio on error view background ([#31361](https://github.com/element-hq/element-web/pull/31361)). Contributed by @t3chguy.
|
||||
* Fix failure to request persistent storage perms ([#31299](https://github.com/element-hq/element-web/pull/31299)). Contributed by @richvdh.
|
||||
* Fix calls sometimes not knowing that they're presented ([#31313](https://github.com/element-hq/element-web/pull/31313)). Contributed by @robintown.
|
||||
|
||||
|
||||
Changes in [1.12.6](https://github.com/element-hq/element-web/releases/tag/v1.12.6) (2025-12-03)
|
||||
================================================================================================
|
||||
This release fixes a bug where 1:1 calling was incorrectly not available if no Element Call focus was set.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "element-web",
|
||||
"version": "1.12.6",
|
||||
"version": "1.12.7",
|
||||
"description": "Element: the future of secure communication",
|
||||
"author": "New Vector Ltd.",
|
||||
"repository": {
|
||||
|
||||
@@ -207,7 +207,7 @@ test.describe("RightPanel", () => {
|
||||
|
||||
// \d represents the number of the space members
|
||||
await page
|
||||
.locator(".mx_RoomInfoLine_private")
|
||||
.locator(".mx_RoomInfoLine")
|
||||
.getByRole("button", { name: /\d member/ })
|
||||
.click();
|
||||
await expect(page.locator(".mx_MemberListView")).toBeVisible();
|
||||
|
||||
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.6 KiB |
@@ -10,7 +10,7 @@ import {
|
||||
type StartedPostgreSqlContainer,
|
||||
} from "@element-hq/element-web-playwright-common/lib/testcontainers";
|
||||
|
||||
const TAG = "main@sha256:70ca0df3b7a8a92ebb6a679286c626084107b41f0fcceeb3f8ae43983d874474";
|
||||
const TAG = "main@sha256:1ffa26f3d7b1e7481e10ec23bbb65afc0394a1f0416462601b8ef5b0eaf9aced";
|
||||
|
||||
/**
|
||||
* MatrixAuthenticationServiceContainer which freezes the docker digest to
|
||||
|
||||
@@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import { SynapseContainer as BaseSynapseContainer } from "@element-hq/element-web-playwright-common/lib/testcontainers";
|
||||
|
||||
const TAG = "develop@sha256:ac511632cf3b91b27a2c9f2274edd9eb8777fb0a521982db7ee4e4e386dde62f";
|
||||
const TAG = "develop@sha256:a2790ff0be7d8da93e26c09bcfedded2f5410affac87065cfe11309a85b4c728";
|
||||
|
||||
/**
|
||||
* SynapseContainer which freezes the docker digest to stabilise tests,
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
@import "./structures/_SearchBox.pcss";
|
||||
@import "./structures/_SpaceHierarchy.pcss";
|
||||
@import "./structures/_SpacePanel.pcss";
|
||||
@import "./structures/_SpacePillButton.pcss";
|
||||
@import "./structures/_SpaceRoomView.pcss";
|
||||
@import "./structures/_SplashPage.pcss";
|
||||
@import "./structures/_TabbedView.pcss";
|
||||
@@ -280,7 +281,6 @@
|
||||
@import "./views/rooms/_AuxPanel.pcss";
|
||||
@import "./views/rooms/_BasicMessageComposer.pcss";
|
||||
@import "./views/rooms/_CallGuestLinkButton.pcss";
|
||||
@import "./views/rooms/_DecryptionFailureBar.pcss";
|
||||
@import "./views/rooms/_E2EIcon.pcss";
|
||||
@import "./views/rooms/_E2EIconView.pcss";
|
||||
@import "./views/rooms/_EditMessageComposer.pcss";
|
||||
@@ -382,7 +382,6 @@
|
||||
@import "./views/spaces/_SpaceBasicSettings.pcss";
|
||||
@import "./views/spaces/_SpaceChildrenPicker.pcss";
|
||||
@import "./views/spaces/_SpaceCreateMenu.pcss";
|
||||
@import "./views/spaces/_SpacePublicShare.pcss";
|
||||
@import "./views/terms/_InlineTermsAgreement.pcss";
|
||||
@import "./views/toasts/_AnalyticsToast.pcss";
|
||||
@import "./views/toasts/_IncomingCallToast.pcss";
|
||||
|
||||
@@ -114,67 +114,30 @@ Please see LICENSE files in the repository root for full details.
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.mx_LeftPanel_dialPadButton {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
.mx_LeftPanel_dialPadButton,
|
||||
.mx_LeftPanel_exploreButton {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
padding: var(--cpd-space-1-5x);
|
||||
border-radius: 8px;
|
||||
background-color: $panel-actions;
|
||||
position: relative;
|
||||
margin-left: 8px;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
left: 6px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/dial-pad.svg");
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $secondary-content;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_LeftPanel_exploreButton,
|
||||
.mx_LeftPanel_recentsButton {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 8px;
|
||||
background-color: $panel-actions;
|
||||
position: relative;
|
||||
margin-left: 8px;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: 8px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $secondary-content;
|
||||
svg {
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
display: block;
|
||||
color: $secondary-content;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: $tertiary-content;
|
||||
|
||||
&::before {
|
||||
background-color: $background;
|
||||
svg {
|
||||
color: $background;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mx_LeftPanel_exploreButton::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/explore.svg");
|
||||
}
|
||||
|
||||
.mx_LeftPanel_recentsButton::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/time.svg");
|
||||
}
|
||||
}
|
||||
|
||||
.mx_LegacyRoomListHeader:first-child {
|
||||
@@ -228,8 +191,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.mx_LeftPanel_exploreButton,
|
||||
.mx_LeftPanel_recentsButton {
|
||||
.mx_LeftPanel_exploreButton {
|
||||
margin-left: 0;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
@@ -99,34 +99,17 @@ Please see LICENSE files in the repository root for full details.
|
||||
position: relative;
|
||||
user-select: none;
|
||||
|
||||
&:nth-child(2) {
|
||||
& + .mx_AccessibleButton {
|
||||
border-left: 1px solid $resend-button-divider-color;
|
||||
}
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
svg {
|
||||
left: 10px; /* inset for regular button padding */
|
||||
background-color: $muted-fg-color;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
top: 50%; /* text sizes are dynamic */
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
&.mx_RoomStatusBar_unsentCancelAllBtn::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/delete.svg");
|
||||
}
|
||||
|
||||
&.mx_RoomStatusBar_unsentRetry {
|
||||
padding-left: 34px; /* 28px from above, but +6px to account for the wider icon */
|
||||
|
||||
&::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/restart.svg");
|
||||
}
|
||||
vertical-align: middle;
|
||||
color: $muted-fg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,13 +17,14 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
.mx_SearchBox_closeButton {
|
||||
cursor: pointer;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/close.svg");
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
mask-size: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
padding: 9px;
|
||||
background-color: var(--cpd-color-icon-secondary);
|
||||
|
||||
svg {
|
||||
height: inherit;
|
||||
width: inherit;
|
||||
color: var(--cpd-color-icon-secondary);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,29 +44,23 @@ Please see LICENSE files in the repository root for full details.
|
||||
top: 19px; /* v-align with avatar */
|
||||
right: -8px;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: inherit;
|
||||
svg {
|
||||
height: inherit;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $background;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/chevron-down.svg");
|
||||
transform: rotate(270deg);
|
||||
width: inherit;
|
||||
display: inline-block;
|
||||
color: $background;
|
||||
/* Slight alignment tweak to center the asset */
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
&:not(.expanded) {
|
||||
opacity: 0;
|
||||
|
||||
&::before {
|
||||
mask-position: center 1px;
|
||||
}
|
||||
}
|
||||
|
||||
&.expanded::before {
|
||||
transform: rotate(90deg);
|
||||
&.expanded svg {
|
||||
transform: rotate(180deg);
|
||||
/* Slight alignment tweak to center the asset */
|
||||
margin-left: -1px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +97,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
& > .mx_SpaceButton > .mx_SpaceButton_toggleCollapse {
|
||||
padding: 0 10px;
|
||||
margin: 0 -10px;
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
& > .mx_SpaceTreeLevel {
|
||||
@@ -166,109 +159,67 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
.mx_SpaceButton_toggleCollapse {
|
||||
width: var(--gutterSize);
|
||||
padding: 10px 0;
|
||||
min-width: var(--gutterSize);
|
||||
height: 20px;
|
||||
mask-position: center;
|
||||
mask-size: 20px;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $tertiary-content;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/chevron-down.svg");
|
||||
width: var(--gutterSize);
|
||||
flex-shrink: 0;
|
||||
padding: 10px 0;
|
||||
|
||||
svg {
|
||||
width: 20px;
|
||||
height: inherit;
|
||||
display: inline-block;
|
||||
color: $tertiary-content;
|
||||
/* Re-align with parent */
|
||||
margin-left: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpaceButton_icon {
|
||||
width: var(--height-topLevel);
|
||||
min-width: var(--height-topLevel);
|
||||
height: var(--height-topLevel);
|
||||
/* Calculate height excluding padding to allow svg to inherit */
|
||||
width: calc(var(--height-topLevel) - 14px);
|
||||
height: calc(var(--height-topLevel) - 14px);
|
||||
flex-shrink: 0;
|
||||
border-radius: 8px;
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
width: var(--height-topLevel);
|
||||
height: var(--height-topLevel);
|
||||
top: 0;
|
||||
left: 0;
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_home,
|
||||
&.mx_SpaceButton_favourites,
|
||||
&.mx_SpaceButton_people,
|
||||
&.mx_SpaceButton_orphans,
|
||||
&.mx_SpaceButton_videoRooms {
|
||||
.mx_SpaceButton_icon {
|
||||
background-color: $panel-actions;
|
||||
|
||||
&::before {
|
||||
background-color: $secondary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_withIcon .mx_SpaceButton_icon {
|
||||
padding: 7px;
|
||||
background-color: $panel-actions;
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_home .mx_SpaceButton_icon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/home-solid.svg");
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_favourites .mx_SpaceButton_icon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/favourite-solid.svg");
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_people .mx_SpaceButton_icon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/user-profile-solid.svg");
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_orphans .mx_SpaceButton_icon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/room.svg");
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_videoRooms .mx_SpaceButton_icon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/video-call-solid.svg");
|
||||
svg {
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
display: block;
|
||||
color: $secondary-content;
|
||||
}
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_new .mx_SpaceButton_icon {
|
||||
&::before {
|
||||
background-color: $primary-content;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/plus.svg");
|
||||
background-color: unset;
|
||||
|
||||
svg {
|
||||
color: $primary-content;
|
||||
transition: all 0.2s ease-in-out; /* TODO transition */
|
||||
}
|
||||
}
|
||||
|
||||
&.mx_SpaceButton_newCancel .mx_SpaceButton_icon::before {
|
||||
&.mx_SpaceButton_newCancel .mx_SpaceButton_icon svg {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.mx_SpaceButton_menuButton {
|
||||
width: 20px;
|
||||
min-width: 20px; /* yay flex */
|
||||
height: 20px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
padding: var(--cpd-space-0-5x);
|
||||
flex-shrink: 0;
|
||||
margin-top: auto;
|
||||
margin-bottom: auto;
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
|
||||
&::before {
|
||||
top: 3px;
|
||||
left: 2px;
|
||||
content: "";
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
position: absolute;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
mask-repeat: no-repeat;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/overflow-horizontal.svg");
|
||||
background: $primary-content;
|
||||
svg {
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
display: block;
|
||||
color: $primary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -341,18 +292,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
padding: 0 0 16px 0;
|
||||
scrollbar-gutter: stable;
|
||||
|
||||
& > .mx_SpaceButton {
|
||||
height: var(--height-topLevel);
|
||||
|
||||
&.mx_SpaceButton_active::before {
|
||||
height: var(--height-topLevel);
|
||||
}
|
||||
}
|
||||
|
||||
& > ul {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
&.mx_IndicatorScrollbar_topOverflow {
|
||||
mask-image: linear-gradient(to bottom, transparent, black 16px);
|
||||
}
|
||||
|
||||
48
res/css/structures/_SpacePillButton.pcss
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
Copyright 2025 Element Creations 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_SpacePillButton {
|
||||
position: relative;
|
||||
padding: 16px 32px 16px 72px;
|
||||
width: 432px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 8px;
|
||||
border: 1px solid $input-border-color;
|
||||
font-size: $font-17px;
|
||||
font-weight: var(--cpd-font-weight-semibold);
|
||||
margin: 20px 0;
|
||||
|
||||
> div {
|
||||
margin-top: 4px;
|
||||
font-weight: normal;
|
||||
font-size: $font-15px;
|
||||
color: $secondary-content;
|
||||
}
|
||||
|
||||
svg {
|
||||
position: absolute;
|
||||
content: "";
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
left: 22px;
|
||||
color: $tertiary-content;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: var(--cpd-color-bg-action-primary-rest);
|
||||
|
||||
svg {
|
||||
color: var(--cpd-color-icon-primary);
|
||||
}
|
||||
|
||||
> span {
|
||||
color: $primary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,51 +6,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
@define-mixin SpacePillButton {
|
||||
position: relative;
|
||||
padding: 16px 32px 16px 72px;
|
||||
width: 432px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 8px;
|
||||
border: 1px solid $input-border-color;
|
||||
font-size: $font-17px;
|
||||
font-weight: var(--cpd-font-weight-semibold);
|
||||
margin: 20px 0;
|
||||
|
||||
> div {
|
||||
margin-top: 4px;
|
||||
font-weight: normal;
|
||||
font-size: $font-15px;
|
||||
color: $secondary-content;
|
||||
}
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
left: 22px;
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: 28px;
|
||||
background-color: $tertiary-content;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: var(--cpd-color-bg-action-primary-rest);
|
||||
|
||||
&::before {
|
||||
background-color: var(--cpd-color-icon-primary);
|
||||
}
|
||||
|
||||
> span {
|
||||
color: $primary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpaceRoomView {
|
||||
--innerWidth: 428px;
|
||||
|
||||
@@ -242,20 +197,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpaceRoomView_privateScope {
|
||||
> .mx_AccessibleButton {
|
||||
@mixin SpacePillButton;
|
||||
}
|
||||
|
||||
.mx_SpaceRoomView_privateScope_justMeButton::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/user-profile-solid.svg");
|
||||
}
|
||||
|
||||
.mx_SpaceRoomView_privateScope_meAndMyTeammatesButton::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/group.svg");
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpaceRoomView_inviteTeammates {
|
||||
.mx_SpaceRoomView_inviteTeammates_buttons {
|
||||
color: $secondary-content;
|
||||
|
||||
@@ -41,42 +41,10 @@ Please see LICENSE files in the repository root for full details.
|
||||
padding: var(--cpd-space-3x);
|
||||
|
||||
&.mx_Toast_hasIcon {
|
||||
&::before,
|
||||
&::after {
|
||||
content: "";
|
||||
svg {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
grid-column: 1;
|
||||
grid-row: 1;
|
||||
mask-size: 100%;
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
&.mx_Toast_icon_verification::after {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
background-color: $primary-content;
|
||||
}
|
||||
|
||||
&.mx_Toast_icon_verification_warning {
|
||||
/* white infill for the hollow svg mask */
|
||||
&::before {
|
||||
background-color: #ffffff;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
mask-size: 80%;
|
||||
}
|
||||
|
||||
&::after {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/error-solid.svg");
|
||||
background-color: $e2e-warning-color;
|
||||
}
|
||||
}
|
||||
|
||||
&.mx_Toast_icon_key_storage::after {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/settings-solid.svg");
|
||||
background-color: $primary-content;
|
||||
}
|
||||
|
||||
.mx_Toast_title,
|
||||
|
||||
@@ -7,12 +7,44 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
.mx_UploadBar {
|
||||
padding-left: 65px; /* line up with the shield area in the composer */
|
||||
padding-top: 5px;
|
||||
/* line up with the shield area in the composer */
|
||||
padding: 5px 21px 0;
|
||||
position: relative;
|
||||
|
||||
display: grid;
|
||||
grid-template:
|
||||
"icon filename cancel" auto
|
||||
"progress progress progress" auto
|
||||
/ min-content auto min-content;
|
||||
gap: var(--cpd-space-1-5x);
|
||||
|
||||
& > svg {
|
||||
grid-area: icon;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
color: $muted-fg-color;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.mx_UploadBar_filename {
|
||||
grid-area: filename;
|
||||
color: $muted-fg-color;
|
||||
position: relative;
|
||||
font-size: $font-15px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.mx_UploadBar_cancel {
|
||||
grid-area: cancel;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
color: $muted-fg-color;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.mx_ProgressBar {
|
||||
width: calc(100% - 40px); /* cheating at a right margin */
|
||||
grid-area: progress;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,39 +53,3 @@ Please see LICENSE files in the repository root for full details.
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_UploadBar_filename {
|
||||
color: $muted-fg-color;
|
||||
position: relative;
|
||||
padding-right: 38px; /* 32px for cancel icon, 6px for padding */
|
||||
padding-left: 22px; /* 18px for icon, 4px for padding */
|
||||
font-size: $font-15px;
|
||||
vertical-align: middle;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
background-color: $muted-fg-color;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/share.svg");
|
||||
}
|
||||
}
|
||||
|
||||
.mx_UploadBar_cancel {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
margin-right: 16px; /* align over rightmost button in composer */
|
||||
margin-top: 5px;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
background-color: $muted-fg-color;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/close.svg");
|
||||
}
|
||||
|
||||
@@ -119,8 +119,4 @@ Please see LICENSE files in the repository root for full details.
|
||||
.mx_IconizedContextMenu_icon svg {
|
||||
color: $icon-button-color;
|
||||
}
|
||||
|
||||
.mx_UserMenu_iconMessage::before {
|
||||
mask-image: url("$(res)/img/element-icons/feedback.svg");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,18 +11,17 @@ Please see LICENSE files in the repository root for full details.
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mx_CompleteSecurity_headerIcon {
|
||||
.mx_E2EIcon.mx_CompleteSecurity_headerIcon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 4px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.mx_CompleteSecurity_heroIcon {
|
||||
.mx_E2EIcon.mx_CompleteSecurity_heroIcon {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
margin: 0 auto;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.mx_CompleteSecurity_skip {
|
||||
|
||||
@@ -32,27 +32,20 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
.mx_ConfirmSpaceUserActionDialog_warning {
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
padding: 12px 8px 12px 42px;
|
||||
padding: 12px 8px;
|
||||
background-color: $header-panel-bg-color;
|
||||
|
||||
font-size: $font-12px;
|
||||
line-height: $font-15px;
|
||||
color: $secondary-content;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: calc(50% - 8px); /* vertical centering */
|
||||
svg {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background-color: $secondary-content;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/info-solid.svg");
|
||||
mask-position: center;
|
||||
vertical-align: -4px;
|
||||
margin-right: var(--cpd-space-1-5x);
|
||||
color: $secondary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,33 +55,17 @@ Please see LICENSE files in the repository root for full details.
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: "";
|
||||
& > svg {
|
||||
position: absolute;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
left: 16px;
|
||||
top: 12px;
|
||||
}
|
||||
|
||||
&::before {
|
||||
padding: var(--cpd-space-2x);
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-color: $icon-button-color;
|
||||
color: $avatar-initial-color;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
&::after {
|
||||
background: $avatar-initial-color; /* TODO */
|
||||
mask-position: center;
|
||||
mask-size: 24px;
|
||||
mask-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_FeedbackDialog_reportBug {
|
||||
&::after {
|
||||
mask-image: url("$(res)/img/feather-customised/bug.svg");
|
||||
}
|
||||
}
|
||||
|
||||
.mx_FeedbackDialog_rateApp {
|
||||
@@ -125,9 +109,5 @@ Please see LICENSE files in the repository root for full details.
|
||||
font-size: 24px;
|
||||
border-color: var(--cpd-color-bg-action-primary-rest);
|
||||
}
|
||||
|
||||
&::after {
|
||||
mask-image: url("$(res)/img/element-icons/feedback.svg");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,9 +28,9 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
.mx_InviteDialog_goButton {
|
||||
min-width: 48px;
|
||||
min-width: 86px;
|
||||
margin-inline-start: 10px;
|
||||
height: 25px;
|
||||
height: 41px;
|
||||
line-height: $font-25px;
|
||||
}
|
||||
}
|
||||
@@ -223,14 +223,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
margin-inline-start: auto;
|
||||
}
|
||||
|
||||
.mx_InviteDialog_userDirectoryIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/user-profile-solid.svg");
|
||||
}
|
||||
|
||||
.mx_InviteDialog_dialPadIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/dial-pad.svg");
|
||||
}
|
||||
|
||||
.mx_InviteDialog_tile {
|
||||
cursor: pointer;
|
||||
display: grid;
|
||||
|
||||
@@ -18,19 +18,14 @@ Please see LICENSE files in the repository root for full details.
|
||||
min-height: 32px;
|
||||
|
||||
> div {
|
||||
padding-left: 30px;
|
||||
position: relative;
|
||||
padding-left: var(--cpd-space-1-5x);
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 16px;
|
||||
svg {
|
||||
width: 16px;
|
||||
left: 6px;
|
||||
top: 8px;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
background-color: $secondary-content;
|
||||
height: 16px;
|
||||
color: $secondary-content;
|
||||
vertical-align: -2px;
|
||||
margin-right: var(--cpd-space-1-5x);
|
||||
}
|
||||
|
||||
&.mx_JoinRuleDropdown_knock::before {
|
||||
@@ -39,22 +34,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
}
|
||||
|
||||
.mx_JoinRuleDropdown_invite::before {
|
||||
box-sizing: border-box;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
mask-size: contain;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
.mx_JoinRuleDropdown_public::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/public.svg");
|
||||
}
|
||||
|
||||
.mx_JoinRuleDropdown_restricted::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/group.svg");
|
||||
mask-size: contain;
|
||||
}
|
||||
|
||||
.mx_JoinRuleDropdown_icon {
|
||||
color: $secondary-content;
|
||||
position: absolute;
|
||||
|
||||
@@ -25,28 +25,21 @@ Please see LICENSE files in the repository root for full details.
|
||||
overflow-y: auto;
|
||||
|
||||
.mx_LeaveSpaceDialog_section_warning {
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
margin: 12px 0 0;
|
||||
padding: 12px 8px 12px 42px;
|
||||
padding: 12px 8px;
|
||||
background-color: $header-panel-bg-color;
|
||||
|
||||
font-size: $font-12px;
|
||||
line-height: $font-15px;
|
||||
color: $secondary-content;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: calc(50% - 8px); /* vertical centering */
|
||||
svg {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background-color: $secondary-content;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/info-solid.svg");
|
||||
mask-position: center;
|
||||
color: $secondary-content;
|
||||
vertical-align: middle;
|
||||
margin: 0 var(--cpd-space-1x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -87,25 +87,19 @@ Please see LICENSE files in the repository root for full details.
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
margin: 12px 0;
|
||||
padding: 8px 8px 8px 42px;
|
||||
padding: 8px;
|
||||
background-color: $header-panel-bg-color;
|
||||
|
||||
font-size: $font-12px;
|
||||
line-height: $font-15px;
|
||||
color: $secondary-content;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: calc(50% - 8px); /* vertical centering */
|
||||
svg {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background-color: $secondary-content;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/info-solid.svg");
|
||||
mask-position: center;
|
||||
color: $secondary-content;
|
||||
vertical-align: middle;
|
||||
margin: 0 var(--cpd-space-1x);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,46 +5,6 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
/* ICONS */
|
||||
/* ========================================================== */
|
||||
|
||||
.mx_RoomSettingsDialog_settingsIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/settings-solid.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_voiceIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/voice-call-solid.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_securityIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_rolesIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/admin.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_notificationsIcon::before {
|
||||
mask-image: url("$(res)/img/element-icons/notifications.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_bridgesIcon::before {
|
||||
/* This icon is pants, please improve :) */
|
||||
mask-image: url("$(res)/img/feather-customised/bridge.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_pollsIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/polls.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_warningIcon::before {
|
||||
mask-image: url("$(res)/img/element-icons/room/settings/advanced.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog_peopleIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/group.svg");
|
||||
}
|
||||
|
||||
.mx_RoomSettingsDialog .mx_Dialog_title {
|
||||
-ms-text-overflow: ellipsis;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
@@ -64,7 +64,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
.mx_AccessibleButton_kind_primary {
|
||||
width: calc(100% - 64px);
|
||||
width: calc(100% - 26px);
|
||||
margin: 0 8px;
|
||||
padding: 15px 18px;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,3 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpacePreferencesDialog_appearanceIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/visibility-on.svg");
|
||||
}
|
||||
|
||||
@@ -71,14 +71,4 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.mx_TabbedView_tabLabel {
|
||||
.mx_SpaceSettingsDialog_generalIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/settings-solid.svg");
|
||||
}
|
||||
|
||||
.mx_SpaceSettingsDialog_visibilityIcon::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/visibility-on.svg");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,20 +10,12 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
.mx_KeyBackupFailedDialog_title {
|
||||
position: relative;
|
||||
padding-left: 45px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
&::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/error.svg");
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $primary-content;
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
svg {
|
||||
margin-right: var(--cpd-space-2x);
|
||||
vertical-align: -2px;
|
||||
color: $primary-content;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
font: var(--cpd-font-body-md-semibold);
|
||||
border: none; /* override default <button /> styles */
|
||||
word-break: keep-all; /* prevent button text in Chinese/Japanese/Korean (CJK) from being collapsed */
|
||||
box-sizing: border-box;
|
||||
|
||||
&.mx_AccessibleButton_kind_primary_sm,
|
||||
&.mx_AccessibleButton_kind_danger_sm,
|
||||
@@ -47,11 +48,13 @@ Please see LICENSE files in the repository root for full details.
|
||||
&.mx_AccessibleButton_kind_primary_sm {
|
||||
color: var(--cpd-color-text-on-solid-primary);
|
||||
background-color: var(--cpd-color-bg-action-primary-rest);
|
||||
border: 1px solid var(--cpd-color-bg-action-primary-rest);
|
||||
}
|
||||
|
||||
&.mx_AccessibleButton_kind_danger_sm {
|
||||
color: var(--cpd-color-text-on-solid-primary);
|
||||
background-color: var(--cpd-color-bg-critical-primary);
|
||||
border: 1px solid var(--cpd-color-bg-critical-primary);
|
||||
}
|
||||
|
||||
&.mx_AccessibleButton_kind_link_sm {
|
||||
|
||||
@@ -39,17 +39,11 @@ Please see LICENSE files in the repository root for full details.
|
||||
top: 0.15em;
|
||||
background-color: $background;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
mask-image: url($copy-button-url);
|
||||
mask-position: center center;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
background-color: $message-action-bar-fg-color;
|
||||
svg {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
color: $message-action-bar-fg-color;
|
||||
display: block;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,10 +12,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
.mx_ExternalLink_icon {
|
||||
display: inline-block;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/pop-out.svg");
|
||||
background-color: currentColor;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
width: $font-11px;
|
||||
height: $font-11px;
|
||||
margin-left: 0.3rem;
|
||||
|
||||
@@ -23,14 +23,12 @@ Please see LICENSE files in the repository root for full details.
|
||||
cursor: pointer;
|
||||
color: $secondary-content;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
margin-right: 8px;
|
||||
background-color: $secondary-content;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/visibility-on.svg");
|
||||
svg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
color: $secondary-content;
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 14px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,16 +47,12 @@ Please see LICENSE files in the repository root for full details.
|
||||
background: $quinary-content;
|
||||
}
|
||||
|
||||
&::before {
|
||||
svg {
|
||||
margin-left: 2px;
|
||||
content: "";
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background: currentColor;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/chevron-down.svg");
|
||||
mask-size: 100%;
|
||||
mask-repeat: no-repeat;
|
||||
float: right;
|
||||
width: 20px;
|
||||
display: inline-block;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,25 +177,24 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
|
||||
&[aria-checked="true"] {
|
||||
:first-child {
|
||||
span:first-child {
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
:first-child::before {
|
||||
content: "";
|
||||
svg {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
margin-right: 8px;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/check.svg");
|
||||
mask-size: 100%;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $primary-content;
|
||||
color: $primary-content;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
position: absolute;
|
||||
top: 14px;
|
||||
left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
:last-child {
|
||||
span:last-child {
|
||||
color: $secondary-content;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
/*
|
||||
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_DecryptionFailureBar {
|
||||
--gap-row: $spacing-8;
|
||||
--gap-column: $spacing-12;
|
||||
--gap: var(--gap-row) var(--gap-column);
|
||||
--size-icon: 24px;
|
||||
|
||||
background-color: $system;
|
||||
padding: $spacing-12;
|
||||
margin-inline: $spacing-16;
|
||||
border-radius: 4px;
|
||||
|
||||
&.mx_DecryptionFailureBar--withEnd {
|
||||
display: flex;
|
||||
flex-flow: wrap;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
row-gap: calc(var(--gap-row) + $spacing-4); /* Increase spacing between the message and the buttons */
|
||||
|
||||
.mx_DecryptionFailureBar_end {
|
||||
display: flex;
|
||||
flex-wrap: wrap; /* Let the buttons wrapped on a narrow column */
|
||||
gap: var(--buttons-dialog-gap-row) var(--buttons-dialog-gap-column);
|
||||
margin-inline-start: calc(var(--size-icon) + var(--gap-column)); /* Align the button(s) and the message */
|
||||
}
|
||||
}
|
||||
|
||||
.mx_DecryptionFailureBar_start {
|
||||
display: grid;
|
||||
gap: var(--gap);
|
||||
grid-template-areas:
|
||||
"status headline"
|
||||
". message";
|
||||
grid-template-columns: var(--size-icon) auto;
|
||||
|
||||
.mx_DecryptionFailureBar_start_status {
|
||||
grid-area: status;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--gap);
|
||||
|
||||
.mx_Spinner {
|
||||
height: unset; /* Unset height: 100% */
|
||||
}
|
||||
|
||||
.mx_DecryptionFailureBar_start_status_icon {
|
||||
min-width: var(--size-icon);
|
||||
height: var(--size-icon);
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/error-solid.svg");
|
||||
background-color: $e2e-warning-color;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_DecryptionFailureBar_start_headline {
|
||||
grid-area: headline;
|
||||
|
||||
font-weight: var(--cpd-font-weight-semibold);
|
||||
font-size: $font-16px;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.mx_DecryptionFailureBar_start_message {
|
||||
grid-area: message;
|
||||
|
||||
color: $secondary-content;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -833,7 +833,6 @@ $left-gutter: 64px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
|
||||
&::before,
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
@@ -844,17 +843,13 @@ $left-gutter: 64px;
|
||||
mask-size: contain;
|
||||
}
|
||||
|
||||
&::before {
|
||||
mask-size: 80%;
|
||||
}
|
||||
|
||||
&.mx_EventTile_e2eIcon_warning::after {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/error-solid.svg");
|
||||
background-color: $e2e-warning-color; /* red */
|
||||
}
|
||||
|
||||
&.mx_EventTile_e2eIcon_normal::after {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/info.svg");
|
||||
background-color: var(--cpd-color-icon-tertiary); /* grey */
|
||||
}
|
||||
|
||||
@@ -918,30 +913,21 @@ $left-gutter: 64px;
|
||||
position: absolute;
|
||||
top: $spacing-8;
|
||||
right: $spacing-8;
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
visibility: hidden;
|
||||
background-color: $message-action-bar-fg-color;
|
||||
|
||||
&.mx_EventTile_buttonBottom {
|
||||
top: 33px;
|
||||
}
|
||||
|
||||
&.mx_EventTile_collapseButton,
|
||||
&.mx_EventTile_expandButton {
|
||||
mask-size: 75%;
|
||||
svg {
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
display: block;
|
||||
color: $message-action-bar-fg-color;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_EventTile_copyButton {
|
||||
height: 17px;
|
||||
mask-image: url($copy-button-url);
|
||||
mask-position: center center;
|
||||
mask-repeat: no-repeat;
|
||||
mask-size: contain;
|
||||
right: 9px;
|
||||
width: 17px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -962,20 +948,6 @@ $left-gutter: 64px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_EventTile_collapseButton,
|
||||
.mx_EventTile_expandButton {
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.mx_EventTile_collapseButton {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/collapse.svg");
|
||||
}
|
||||
|
||||
.mx_EventTile_expandButton {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/expand.svg");
|
||||
}
|
||||
|
||||
.mx_EventTile_tileError {
|
||||
color: red;
|
||||
text-align: center;
|
||||
|
||||
@@ -29,16 +29,11 @@ Please see LICENSE files in the repository root for full details.
|
||||
font-weight: 400;
|
||||
opacity: 0.4;
|
||||
|
||||
.mx_ReplyPreview_header_cancel {
|
||||
background-color: $primary-content;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/close.svg");
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
.mx_ReplyPreview_header_cancel svg {
|
||||
color: $primary-content;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
min-width: 20px;
|
||||
min-height: 20px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,33 +10,10 @@ Please see LICENSE files in the repository root for full details.
|
||||
color: $secondary-content;
|
||||
display: inline-block;
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 1.2em;
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
background-color: $tertiary-content;
|
||||
vertical-align: text-bottom;
|
||||
svg {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
&.mx_RoomInfoLine_public::before {
|
||||
width: 12px;
|
||||
mask-size: 12px;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/public.svg");
|
||||
}
|
||||
|
||||
&.mx_RoomInfoLine_private::before {
|
||||
width: 10px;
|
||||
mask-size: 10px;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
}
|
||||
|
||||
&.mx_RoomInfoLine_video::before {
|
||||
width: 16px;
|
||||
mask-size: 16px;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/video-call-solid.svg");
|
||||
vertical-align: -2px;
|
||||
color: $tertiary-content;
|
||||
}
|
||||
|
||||
.mx_RoomInfoLine_members {
|
||||
|
||||
@@ -22,20 +22,13 @@ Please see LICENSE files in the repository root for full details.
|
||||
line-height: $font-24px;
|
||||
color: $primary-content;
|
||||
margin-top: $spacing-24;
|
||||
position: relative;
|
||||
padding-left: calc(20px + $spacing-8);
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: $font-24px;
|
||||
width: 20px;
|
||||
left: 0;
|
||||
mask-repeat: no-repeat;
|
||||
mask-position: center;
|
||||
mask-size: contain;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/info-solid.svg");
|
||||
background-color: $secondary-content;
|
||||
svg {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
margin-right: $spacing-8;
|
||||
color: $secondary-content;
|
||||
vertical-align: -2px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,25 +56,19 @@ Please see LICENSE files in the repository root for full details.
|
||||
align-items: center;
|
||||
|
||||
.mx_RoomPreviewCard_video {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
padding: 14px;
|
||||
border-radius: calc((50px + 2 * 3px) / 2);
|
||||
background-color: $accent;
|
||||
border: 3px solid $system;
|
||||
|
||||
position: relative;
|
||||
left: calc(-50px / 4 - 3px);
|
||||
|
||||
&::before {
|
||||
content: "";
|
||||
background-color: $button-primary-fg-color;
|
||||
position: absolute;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
mask-size: 22px;
|
||||
mask-position: center;
|
||||
mask-repeat: no-repeat;
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/video-call-solid.svg");
|
||||
svg {
|
||||
width: inherit;
|
||||
height: inherit;
|
||||
color: $button-primary-fg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -34,18 +34,6 @@ Please see LICENSE files in the repository root for full details.
|
||||
}
|
||||
}
|
||||
|
||||
.mx_SpaceCreateMenuType {
|
||||
@mixin SpacePillButton;
|
||||
}
|
||||
|
||||
.mx_SpaceCreateMenuType_public::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/public.svg");
|
||||
}
|
||||
|
||||
.mx_SpaceCreateMenuType_private::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/lock-solid.svg");
|
||||
}
|
||||
|
||||
.mx_SpaceCreateMenu_back {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
Copyright 2024 New Vector Ltd.
|
||||
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_SpacePublicShare {
|
||||
.mx_AccessibleButton {
|
||||
@mixin SpacePillButton;
|
||||
|
||||
&.mx_SpacePublicShare_shareButton::before {
|
||||
mask-image: url("@vector-im/compound-design-tokens/icons/link.svg");
|
||||
}
|
||||
|
||||
&.mx_SpacePublicShare_inviteButton::before {
|
||||
mask-image: url("$(res)/img/element-icons/room/invite.svg");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.9803 1.2796C17.0771 2.54383 16.6773 3.79601 15.8657 4.77022C15.0784 5.74949 13.8854 6.31354 12.629 6.3006C12.5491 5.07276 12.9605 3.86352 13.7727 2.93921C14.5952 2.00238 15.7404 1.40982 16.9803 1.2796ZM20.9539 8.70795C19.5086 9.59652 18.6192 11.1635 18.5974 12.86C18.5994 14.7794 19.7489 16.5115 21.5166 17.2592C21.1766 18.3636 20.6642 19.4073 19.9982 20.3517C19.1038 21.6896 18.1661 22.9967 16.6777 23.0208C15.9698 23.0372 15.492 22.8336 14.9941 22.6215C14.4747 22.4003 13.9335 22.1697 13.0867 22.1697C12.1885 22.1697 11.6231 22.4077 11.0778 22.6372C10.6065 22.8355 10.1503 23.0275 9.50727 23.0542C8.08982 23.1067 7.00654 21.6263 6.07964 20.3009C4.22703 17.5943 2.78444 12.6733 4.71844 9.32483C5.62662 7.69286 7.32468 6.65727 9.19136 6.59696C9.99528 6.58042 10.7667 6.89028 11.443 7.16193C11.9602 7.36969 12.4219 7.5551 12.7999 7.5551C13.1321 7.5551 13.5809 7.37701 14.1038 7.16946C14.9276 6.84251 15.9356 6.44246 16.9628 6.55027C18.5589 6.60021 20.038 7.39984 20.9539 8.70795Z" fill="#17191C"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,15 +0,0 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_4244_203)">
|
||||
<path d="M11.0054 17.2033C10.7192 17.3348 10.4074 17.405 10.0911 17.4096C9.62287 17.4048 9.1673 17.2609 8.78524 16.9971C8.65787 17.3144 8.45841 17.5995 8.20182 17.831C7.94524 18.0626 7.63819 18.2344 7.30371 18.3337C7.34816 18.3337 7.39049 18.3337 7.43494 18.3337H12.4213C12.1196 18.2476 11.8387 18.103 11.5954 17.9088C11.3522 17.7147 11.1515 17.4747 11.0054 17.2033Z" fill="black"/>
|
||||
<path d="M5.59233 13.8942C5.61193 13.8889 5.63053 13.8805 5.64735 13.8694C5.6791 13.5971 5.71508 13.3352 5.7553 13.0856C5.74691 12.9449 5.77002 12.8041 5.82302 12.6731C6.11298 11.0868 6.51722 9.97294 7.07596 9.29637C7.09365 9.27503 7.1193 9.26142 7.14728 9.25851C7.17526 9.25561 7.20328 9.26367 7.22518 9.2809C7.24707 9.29813 7.26104 9.32313 7.26401 9.35041C7.26699 9.37768 7.25873 9.40498 7.24105 9.42631C7.18391 9.49645 7.12676 9.57277 7.07173 9.65322C6.64844 10.272 6.31404 11.2126 6.07277 12.477H6.09816C6.14375 12.4702 6.19014 12.4702 6.23573 12.477C6.40082 12.5121 6.65902 12.6462 7.05692 13.036C7.10771 10.7691 8.44108 8.94158 10.0919 8.94158C11.548 8.94158 12.765 10.371 13.0549 12.2729C13.1926 12.0053 13.4153 11.7882 13.6899 11.654C13.7577 11.6293 13.8293 11.6161 13.9016 11.6149C13.7518 10.9261 13.485 10.2666 13.1121 9.66353C13.0571 9.58308 13.002 9.50676 12.9449 9.43663C12.9357 9.42642 12.9287 9.41445 12.9244 9.40149C12.9201 9.38852 12.9186 9.37484 12.92 9.36128C12.9214 9.34774 12.9256 9.33461 12.9325 9.32273C12.9393 9.31085 12.9486 9.30047 12.9597 9.29224C12.9703 9.28351 12.9826 9.27695 12.9959 9.27294C13.0091 9.26893 13.0232 9.26756 13.0369 9.26891C13.0507 9.27025 13.0641 9.2743 13.0763 9.28078C13.0885 9.28727 13.0992 9.29608 13.1079 9.30668C13.5312 9.82648 13.8825 10.6041 14.145 11.6582C14.7101 11.8644 14.7248 12.7927 14.7375 13.5476C14.7375 13.9065 14.7375 14.2779 14.8243 14.3727C14.9111 14.4676 15.0952 14.447 15.3535 14.3397C15.3831 14.0118 15.3978 13.7209 15.4063 13.4755C15.4063 13.0856 15.4063 12.836 15.4063 12.836V12.574C15.4063 10.5113 12.6846 6.94487 12.6846 6.94487L12.3692 4.26334C12.3692 1.80251 10.0919 1.8252 10.0919 1.8252C10.0919 1.8252 7.80615 1.80251 7.80615 4.25302L7.50138 6.94487C7.50138 6.94487 4.77961 10.5092 4.77961 12.574V12.8319C4.77961 12.8319 4.76902 13.0814 4.77961 13.4713C4.77961 13.5311 4.77961 13.5951 4.77961 13.6611C5.1246 13.7889 5.47804 13.923 5.59233 13.8942ZM10.0813 5.21837C10.7163 5.27613 11.7279 5.42465 11.7745 5.72993C11.8084 5.96507 11.4168 6.41475 11.3385 6.50138C11.1755 6.68084 10.6083 7.26872 10.0962 7.26872C9.58397 7.26872 9.01676 6.68084 8.85591 6.50138C8.7776 6.41475 8.38606 5.96507 8.4178 5.72993C8.4559 5.41846 9.47815 5.27613 10.0813 5.21837Z" fill="black"/>
|
||||
<path d="M10.0925 7.0621C10.3698 7.0621 10.7952 6.78776 11.174 6.3649C11.464 6.04518 11.5698 5.81003 11.5613 5.7564C11.5084 5.6512 10.8164 5.49237 10.0798 5.42224C9.36657 5.49237 8.67449 5.6512 8.62158 5.76052C8.69778 5.98983 8.83166 6.19689 9.01101 6.36284C9.39197 6.78776 9.81526 7.0621 10.0925 7.0621Z" fill="black"/>
|
||||
<path d="M10.6623 15.9489C10.4189 13.7769 10.6432 13.3273 10.8337 13.1788C10.8804 13.1432 10.9358 13.1201 10.9945 13.1117C11.0531 13.1035 11.113 13.1102 11.1681 13.1313C11.3598 13.2237 11.5271 13.3577 11.657 13.5232C11.8962 13.7769 12.0634 13.9358 12.2179 13.8491C12.328 13.7852 12.4846 13.4366 12.6412 13.1169C12.7216 12.9456 12.8042 12.7621 12.8952 12.5868C12.6835 10.6457 11.5195 9.14819 10.0993 9.14819C8.53949 9.14819 7.27173 10.9531 7.27173 13.1705C7.27173 13.1973 7.27173 13.2241 7.27173 13.2509C7.52995 13.5149 7.83895 13.8698 8.21567 14.3338C8.36367 14.5155 8.4994 14.7064 8.62204 14.9052C8.79699 15.1841 8.909 15.4961 8.9506 15.8205C8.9922 16.1449 8.96245 16.4741 8.86331 16.7864C9.21862 17.0463 9.64882 17.1907 10.093 17.199C10.3777 17.1979 10.659 17.1382 10.9184 17.0236C10.862 16.9 10.8173 16.7716 10.7851 16.64C10.7302 16.4122 10.6892 16.1815 10.6623 15.9489Z" fill="black"/>
|
||||
<path d="M8.04303 14.459C7.74673 14.0918 7.49487 13.8009 7.279 13.5658L7.17105 13.4503L7.061 13.3348C6.5721 12.8397 6.31389 12.7037 6.17843 12.681C6.15951 12.678 6.14023 12.678 6.12129 12.681C6.10076 12.6833 6.08122 12.6909 6.06454 12.7028C6.04786 12.7147 6.03461 12.7307 6.02605 12.7489C6.02565 12.7538 6.02565 12.7586 6.02605 12.7634C5.98416 12.8712 5.96753 12.9869 5.97738 13.1017C5.97738 13.1595 5.97738 13.2173 5.97738 13.2749C5.97738 13.3327 5.97738 13.341 5.97738 13.374C6.00594 13.5827 5.96198 13.7947 5.8525 13.9763C5.83155 13.9994 5.80732 14.0196 5.78055 14.0362L5.7361 14.0629C5.70773 14.0774 5.67795 14.0892 5.6472 14.098H5.62393C5.44826 14.1289 5.16254 14.0279 4.80063 13.8917L4.6948 13.8505C4.24188 13.6752 3.71276 13.473 3.32545 13.473C3.23797 13.4644 3.14967 13.4777 3.06893 13.5116C2.98819 13.5455 2.91767 13.599 2.86406 13.6669C2.58046 14.0794 3.2154 14.7271 3.72758 15.2511C4.04294 15.5749 4.29056 15.8286 4.31808 16.0184C4.36675 16.3691 3.99002 16.5031 3.65774 16.6228C3.48628 16.6669 3.32623 16.7457 3.18788 16.8538C3.13709 16.9116 3.1392 16.9508 3.14979 16.9797C3.19635 17.1384 3.57308 17.4871 5.56466 18.0502C5.78512 18.1124 6.00914 18.1621 6.23558 18.1987C6.64453 18.2591 7.06268 18.2065 7.44245 18.0468C7.82223 17.8871 8.14838 17.6267 8.38379 17.2952C8.47591 17.159 8.55187 17.0129 8.61025 16.86L8.65257 16.7589C8.65257 16.7239 8.67163 16.6847 8.68221 16.6496C8.75827 16.3728 8.77591 16.0838 8.73407 15.8002C8.69223 15.5165 8.59179 15.2441 8.43881 14.9994C8.31764 14.812 8.18549 14.6316 8.04303 14.459Z" fill="black"/>
|
||||
<path d="M16.0589 14.3171C15.8816 14.3336 15.71 14.3863 15.5552 14.4717L15.3245 14.5687C15.0704 14.6635 14.8164 14.7089 14.6513 14.4903C14.6122 14.4329 14.5856 14.3683 14.573 14.3006C14.5437 14.1377 14.5282 13.9728 14.5265 13.8075C14.5265 13.723 14.5265 13.6342 14.5265 13.5393C14.5265 12.9391 14.5054 12.2171 14.2154 11.9346C14.1785 11.8974 14.1346 11.8673 14.0863 11.8459C14.0596 11.8345 14.0321 11.8255 14.0037 11.8191H13.972C13.9001 11.8109 13.8272 11.8208 13.7603 11.8479C13.5106 11.947 13.2926 12.2605 13.1022 12.6277L13.0112 12.8071C12.9772 12.8772 12.9455 12.9453 12.9138 13.0133C12.882 13.0814 12.8545 13.1392 12.827 13.2011C12.6408 13.6136 12.4947 13.9292 12.3254 14.0262C12.0122 14.2056 11.7391 13.9168 11.5 13.6611C11.3921 13.5236 11.2558 13.4098 11.1 13.3269C11.0796 13.3194 11.0582 13.3152 11.0365 13.3145C11.0108 13.3139 10.9859 13.3228 10.9666 13.3393C10.8354 13.4424 10.647 13.9148 10.8735 15.926C10.8978 16.148 10.936 16.3684 10.9878 16.586C11.0166 16.7008 11.0548 16.8133 11.1021 16.9222C11.1169 16.9532 11.1317 16.9841 11.1486 17.015C11.1656 17.0459 11.1762 17.0769 11.1931 17.1079C11.3664 17.4217 11.6184 17.6878 11.9256 17.8813C12.2328 18.0746 12.5853 18.1891 12.9501 18.214C13.3149 18.239 13.6804 18.1735 14.0122 18.0237C14.3441 17.8739 14.6317 17.6448 14.8482 17.3574C14.9843 17.1771 15.1093 16.989 15.2228 16.7943C16.2387 15.0307 16.2578 14.5254 16.1795 14.3809C16.1676 14.3603 16.15 14.3434 16.1286 14.332C16.1073 14.3208 16.0831 14.3155 16.0589 14.3171Z" fill="black"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_4244_203">
|
||||
<rect width="14.4446" height="16.5081" fill="white" transform="translate(2.63892 1.8252)"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.0 KiB |
@@ -1,6 +0,0 @@
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="10.4908" y="2" width="7.50926" height="7.50926" fill="#1B1D22"/>
|
||||
<rect x="2" y="10.4904" width="7.50926" height="7.50926" fill="#1B1D22"/>
|
||||
<rect x="2" y="2" width="7.50926" height="7.50926" fill="#1B1D22"/>
|
||||
<rect x="10.4908" y="10.4904" width="7.50926" height="7.50926" fill="#1B1D22"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 399 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17 13.89C17 15.0256 16.1603 16 14.9272 16H3.08038C1.83972 16 1 15.0256 1 13.89C1 13.5371 1.09078 13.1841 1.27234 12.8542L7.20331 2.08951C7.60426 1.36061 8.30024 1 9.00378 1C9.70733 1 10.3957 1.34527 10.7967 2.08951L16.7277 12.8542C16.9092 13.1841 17 13.5371 17 13.89ZM8.92011 5.00263C8.35011 5.04263 7.93011 5.54264 7.98011 6.11264L8.28011 9.85C8.31011 10.2 8.58011 10.47 8.93011 10.5H8.99011C9.36011 10.5 9.67011 10.22 9.70011 9.85L10.0401 6.11264V5.95264C9.98011 5.38264 9.48011 4.96263 8.92011 5.00263ZM10 12.5C10 13.0523 9.55229 13.5 9 13.5C8.44772 13.5 8 13.0523 8 12.5C8 11.9477 8.44772 11.5 9 11.5C9.55229 11.5 10 11.9477 10 12.5Z" fill="black"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17 13.89C17 15.0256 16.1603 16 14.9272 16H3.08038C1.83972 16 1 15.0256 1 13.89C1 13.5371 1.09078 13.1841 1.27234 12.8542L7.20331 2.08951C7.60426 1.36061 8.30024 1 9.00378 1C9.70733 1 10.3957 1.34527 10.7967 2.08951L16.7277 12.8542C16.9092 13.1841 17 13.5371 17 13.89ZM8.92011 5.00263C8.35011 5.04263 7.93011 5.54264 7.98011 6.11264L8.28011 9.85C8.31011 10.2 8.58011 10.47 8.93011 10.5H8.99011C9.36011 10.5 9.67011 10.22 9.70011 9.85L10.0401 6.11264V5.95264C9.98011 5.38264 9.48011 4.96263 8.92011 5.00263ZM10 12.5C10 13.0523 9.55229 13.5 9 13.5C8.44772 13.5 8 13.0523 8 12.5C8 11.9477 8.44772 11.5 9 11.5C9.55229 11.5 10 11.9477 10 12.5Z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 807 B After Width: | Height: | Size: 814 B |
@@ -1,3 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C9.23858 2 7 4.23858 7 7L17 7C17 4.23858 14.7614 2 12 2ZM2.29289 7.70711C1.90237 7.31658 1.90237 6.68342 2.29289 6.29289C2.68342 5.90237 3.31658 5.90237 3.70711 6.29289L6.41421 9H17.5858L20.2929 6.29289C20.6834 5.90237 21.3166 5.90237 21.7071 6.29289C22.0976 6.68342 22.0976 7.31658 21.7071 7.70711L19 10.4142V13H22C22.5523 13 23 13.4477 23 14C23 14.5523 22.5523 15 22 15H19C19 15.7795 18.8726 16.5292 18.6375 17.2295C18.6614 17.2493 18.6847 17.2705 18.7071 17.2929L21.7071 20.2929C22.0976 20.6834 22.0976 21.3166 21.7071 21.7071C21.3166 22.0976 20.6834 22.0976 20.2929 21.7071L17.6791 19.0933C16.5924 20.5983 14.9222 21.6542 13 21.9291L13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12V21.9291C9.07785 21.6542 7.40759 20.5983 6.32091 19.0933L3.70711 21.7071C3.31658 22.0976 2.68342 22.0976 2.29289 21.7071C1.90237 21.3166 1.90237 20.6834 2.29289 20.2929L5.29289 17.2929C5.31533 17.2705 5.33857 17.2493 5.36252 17.2295C5.1274 16.5292 5 15.7795 5 15H2C1.44772 15 1 14.5523 1 14C1 13.4477 1.44772 13 2 13H5V10.4142L2.29289 7.70711Z" fill="#FF5B55"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12 2C9.23858 2 7 4.23858 7 7L17 7C17 4.23858 14.7614 2 12 2ZM2.29289 7.70711C1.90237 7.31658 1.90237 6.68342 2.29289 6.29289C2.68342 5.90237 3.31658 5.90237 3.70711 6.29289L6.41421 9H17.5858L20.2929 6.29289C20.6834 5.90237 21.3166 5.90237 21.7071 6.29289C22.0976 6.68342 22.0976 7.31658 21.7071 7.70711L19 10.4142V13H22C22.5523 13 23 13.4477 23 14C23 14.5523 22.5523 15 22 15H19C19 15.7795 18.8726 16.5292 18.6375 17.2295C18.6614 17.2493 18.6847 17.2705 18.7071 17.2929L21.7071 20.2929C22.0976 20.6834 22.0976 21.3166 21.7071 21.7071C21.3166 22.0976 20.6834 22.0976 20.2929 21.7071L17.6791 19.0933C16.5924 20.5983 14.9222 21.6542 13 21.9291L13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12V21.9291C9.07785 21.6542 7.40759 20.5983 6.32091 19.0933L3.70711 21.7071C3.31658 22.0976 2.68342 22.0976 2.29289 21.7071C1.90237 21.3166 1.90237 20.6834 2.29289 20.2929L5.29289 17.2929C5.31533 17.2705 5.33857 17.2493 5.36252 17.2295C5.1274 16.5292 5 15.7795 5 15H2C1.44772 15 1 14.5523 1 14C1 13.4477 1.44772 13 2 13H5V10.4142L2.29289 7.70711Z" fill="currentColor"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
@@ -241,8 +241,6 @@ $event-highlight-bg-color: $yellow-background;
|
||||
/* event timestamp */
|
||||
$event-timestamp-color: #acacac;
|
||||
|
||||
$copy-button-url: "@vector-im/compound-design-tokens/icons/copy.svg";
|
||||
|
||||
/* e2e */
|
||||
$e2e-verified-color: #0dbd8b;
|
||||
$e2e-warning-color: #ff5b55;
|
||||
|
||||
@@ -347,11 +347,6 @@ $focus-brightness: 105%;
|
||||
|
||||
/* ******************** */
|
||||
|
||||
/* Icon URLs */
|
||||
/* ******************** */
|
||||
$copy-button-url: "@vector-im/compound-design-tokens/icons/copy.svg";
|
||||
/* ******************** */
|
||||
|
||||
/* Location sharing */
|
||||
/* ******************** */
|
||||
$location-marker-color: var(--cpd-color-icon-on-solid-primary);
|
||||
|
||||
@@ -751,39 +751,38 @@ export async function hydrateSession(credentials: IMatrixClientCreds): Promise<M
|
||||
* When we have a authenticated via OIDC-native flow and have a refresh token
|
||||
* try to create a token refresher.
|
||||
* @param credentials from current session
|
||||
* @returns Promise that resolves to a TokenRefresher, or undefined
|
||||
* @param clientId OIDC client ID
|
||||
* @throws If credentials.refreshToken or credentials.deviceId is falsy, or if no token issuer is stored
|
||||
* @returns Promise that resolves to a TokenRefresher
|
||||
*/
|
||||
async function createOidcTokenRefresher(credentials: IMatrixClientCreds): Promise<OidcTokenRefresher | undefined> {
|
||||
async function createOidcTokenRefresher(
|
||||
credentials: IMatrixClientCreds,
|
||||
clientId: string,
|
||||
): Promise<OidcTokenRefresher> {
|
||||
if (!credentials.refreshToken) {
|
||||
return;
|
||||
throw new Error("A refresh token must be supplied in order to create an OIDC token refresher.");
|
||||
}
|
||||
// stored token issuer indicates we authenticated via OIDC-native flow
|
||||
const tokenIssuer = getStoredOidcTokenIssuer();
|
||||
if (!tokenIssuer) {
|
||||
return;
|
||||
throw new Error("Cannot create an OIDC token refresher as no stored OIDC token issuer was found.");
|
||||
}
|
||||
try {
|
||||
const clientId = getStoredOidcClientId();
|
||||
const idTokenClaims = getStoredOidcIdTokenClaims();
|
||||
const redirectUri = PlatformPeg.get()!.getOidcCallbackUrl().href;
|
||||
const deviceId = credentials.deviceId;
|
||||
if (!deviceId) {
|
||||
throw new Error("Expected deviceId in user credentials.");
|
||||
}
|
||||
const tokenRefresher = new TokenRefresher(
|
||||
tokenIssuer,
|
||||
clientId,
|
||||
redirectUri,
|
||||
deviceId,
|
||||
idTokenClaims!,
|
||||
credentials.userId,
|
||||
);
|
||||
// wait for the OIDC client to initialise
|
||||
await tokenRefresher.oidcClientReady;
|
||||
return tokenRefresher;
|
||||
} catch (error) {
|
||||
logger.error("Failed to initialise OIDC token refresher", error);
|
||||
|
||||
const idTokenClaims = getStoredOidcIdTokenClaims();
|
||||
const redirectUri = PlatformPeg.get()!.getOidcCallbackUrl().href;
|
||||
const deviceId = credentials.deviceId;
|
||||
if (!deviceId) {
|
||||
throw new Error("Expected deviceId in user credentials.");
|
||||
}
|
||||
const tokenRefresher = new TokenRefresher(
|
||||
tokenIssuer,
|
||||
clientId,
|
||||
redirectUri,
|
||||
deviceId,
|
||||
idTokenClaims!,
|
||||
credentials.userId,
|
||||
);
|
||||
return tokenRefresher;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -835,7 +834,17 @@ async function doSetLoggedIn(
|
||||
await abortLogin();
|
||||
}
|
||||
|
||||
const tokenRefresher = await createOidcTokenRefresher(credentials);
|
||||
let storedClientid;
|
||||
try {
|
||||
storedClientid = getStoredOidcClientId();
|
||||
} catch {}
|
||||
|
||||
let tokenRefresher;
|
||||
if (credentials.refreshToken && storedClientid) {
|
||||
tokenRefresher = await createOidcTokenRefresher(credentials, storedClientid);
|
||||
} else {
|
||||
logger.debug("No refresh token was supplied: access token will not be refreshed");
|
||||
}
|
||||
|
||||
// check the session lock just before creating the new client
|
||||
checkSessionLock();
|
||||
|
||||
@@ -9,12 +9,10 @@ import React, { type JSX, type ReactNode } from "react";
|
||||
import { Text, Heading, Button, Separator } from "@vector-im/compound-web";
|
||||
import PopOutIcon from "@vector-im/compound-design-tokens/assets/web/icons/pop-out";
|
||||
import { Flex } from "@element-hq/web-shared-components";
|
||||
import { LinuxIcon, MacIcon, WindowsIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import SdkConfig from "../../SdkConfig";
|
||||
import { _t } from "../../languageHandler";
|
||||
import { Icon as AppleIcon } from "../../../res/img/element-icons/brands/apple.svg";
|
||||
import { Icon as MicrosoftIcon } from "../../../res/img/element-icons/brands/microsoft.svg";
|
||||
import { Icon as LinuxIcon } from "../../../res/img/element-icons/brands/linux.svg";
|
||||
|
||||
// directly import the style here as this layer does not support rethemedex at this time so no matrix-react-sdk
|
||||
// PostCSS variables will be accessible.
|
||||
@@ -86,17 +84,17 @@ const DesktopAppLinks: React.FC<{
|
||||
return (
|
||||
<Flex gap="var(--cpd-space-4x)" className="mx_ErrorView_flexContainer">
|
||||
{macOsUrl && (
|
||||
<Button as="a" href={macOsUrl} kind="secondary" Icon={AppleIcon}>
|
||||
<Button as="a" href={macOsUrl} kind="secondary" Icon={MacIcon}>
|
||||
{_t("incompatible_browser|macos")}
|
||||
</Button>
|
||||
)}
|
||||
{win64Url && (
|
||||
<Button as="a" href={win64Url} kind="secondary" Icon={MicrosoftIcon}>
|
||||
<Button as="a" href={win64Url} kind="secondary" Icon={WindowsIcon}>
|
||||
{_t("incompatible_browser|windows_64bit")}
|
||||
</Button>
|
||||
)}
|
||||
{win64ArmUrl && (
|
||||
<Button as="a" href={win64ArmUrl} kind="secondary" Icon={MicrosoftIcon}>
|
||||
<Button as="a" href={win64ArmUrl} kind="secondary" Icon={WindowsIcon}>
|
||||
{_t("incompatible_browser|windows_arm_64bit")}
|
||||
</Button>
|
||||
)}
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React, { type JSX, useEffect, useState } from "react";
|
||||
import { ErrorIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import dis from "../../../../dispatcher/dispatcher";
|
||||
import { _t } from "../../../../languageHandler";
|
||||
@@ -60,6 +61,7 @@ export default function NewRecoveryMethodDialog({ onFinished }: NewRecoveryMetho
|
||||
onFinished={onFinished}
|
||||
title={
|
||||
<span className="mx_KeyBackupFailedDialog_title">
|
||||
<ErrorIcon />
|
||||
{_t("encryption|new_recovery_method_detected|title")}
|
||||
</span>
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { ErrorIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import dis from "../../../../dispatcher/dispatcher";
|
||||
import { _t } from "../../../../languageHandler";
|
||||
@@ -39,7 +40,10 @@ export default class RecoveryMethodRemovedDialog extends React.PureComponent<IPr
|
||||
|
||||
public render(): React.ReactNode {
|
||||
const title = (
|
||||
<span className="mx_KeyBackupFailedDialog_title">{_t("encryption|recovery_method_removed|title")}</span>
|
||||
<span className="mx_KeyBackupFailedDialog_title">
|
||||
<ErrorIcon />
|
||||
{_t("encryption|recovery_method_removed|title")}
|
||||
</span>
|
||||
);
|
||||
|
||||
return (
|
||||
|
||||
@@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { type JSX } from "react";
|
||||
import { createRef } from "react";
|
||||
import classNames from "classnames";
|
||||
import { ExploreIcon, DialPadIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import dis from "../../dispatcher/dispatcher";
|
||||
import { _t } from "../../languageHandler";
|
||||
@@ -347,7 +348,9 @@ export default class LeftPanel extends React.Component<IProps, IState> {
|
||||
className="mx_LeftPanel_dialPadButton"
|
||||
onClick={this.onDialPad}
|
||||
title={_t("left_panel|open_dial_pad")}
|
||||
/>
|
||||
>
|
||||
<DialPadIcon />
|
||||
</AccessibleButton>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -358,7 +361,9 @@ export default class LeftPanel extends React.Component<IProps, IState> {
|
||||
className="mx_LeftPanel_exploreButton"
|
||||
onClick={this.onExplore}
|
||||
title={_t("action|explore_rooms")}
|
||||
/>
|
||||
>
|
||||
<ExploreIcon />
|
||||
</AccessibleButton>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ import { TooltipProvider } from "@vector-im/compound-web";
|
||||
import "what-input";
|
||||
import sanitizeHtml from "sanitize-html";
|
||||
import { I18nContext } from "@element-hq/web-shared-components";
|
||||
import { LockSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import PosthogTrackers from "../../PosthogTrackers";
|
||||
import { DecryptionFailureTracker } from "../../DecryptionFailureTracker";
|
||||
@@ -1771,7 +1772,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
key: "verifreq_" + request.transactionId,
|
||||
title: _t("encryption|verification_requested_toast_title"),
|
||||
icon: "verification",
|
||||
icon: <LockSolidIcon color="var(--cpd-color-text-primary)" />,
|
||||
props: { request },
|
||||
component: VerificationRequestToast,
|
||||
priority: 90,
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
type SyncState,
|
||||
type SyncStateData,
|
||||
} from "matrix-js-sdk/src/matrix";
|
||||
import { WarningIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
import { RestartIcon, WarningIcon, DeleteIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t, _td } from "../../languageHandler";
|
||||
import Resend from "../../Resend";
|
||||
@@ -237,10 +237,12 @@ export default class RoomStatusBar extends React.PureComponent<IProps, IState> {
|
||||
|
||||
let buttonRow = (
|
||||
<>
|
||||
<AccessibleButton onClick={this.onCancelAllClick} className="mx_RoomStatusBar_unsentCancelAllBtn">
|
||||
<AccessibleButton onClick={this.onCancelAllClick}>
|
||||
<DeleteIcon />
|
||||
{_t("room|status_bar|delete_all")}
|
||||
</AccessibleButton>
|
||||
<AccessibleButton onClick={this.onResendAllClick} className="mx_RoomStatusBar_unsentRetry">
|
||||
<RestartIcon />
|
||||
{_t("room|status_bar|retry_all")}
|
||||
</AccessibleButton>
|
||||
</>
|
||||
|
||||
@@ -45,6 +45,7 @@ import { debounce, throttle } from "lodash";
|
||||
import { CryptoEvent } from "matrix-js-sdk/src/crypto-api";
|
||||
import { type ViewRoomOpts } from "@matrix-org/react-sdk-module-api/lib/lifecycles/RoomViewLifecycle";
|
||||
import { type RoomViewProps } from "@element-hq/element-web-module-api";
|
||||
import { RestartIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import shouldHideEvent from "../../shouldHideEvent";
|
||||
import { _t } from "../../languageHandler";
|
||||
@@ -330,7 +331,8 @@ function LocalRoomView(props: LocalRoomViewProps): ReactElement {
|
||||
|
||||
if (room.isError) {
|
||||
const buttons = (
|
||||
<AccessibleButton onClick={onRetryClicked} className="mx_RoomStatusBar_unsentRetry">
|
||||
<AccessibleButton onClick={onRetryClicked}>
|
||||
<RestartIcon />
|
||||
{_t("action|retry")}
|
||||
</AccessibleButton>
|
||||
);
|
||||
|
||||
@@ -10,6 +10,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { createRef, type HTMLProps } from "react";
|
||||
import { throttle } from "lodash";
|
||||
import classNames from "classnames";
|
||||
import { CloseIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import AccessibleButton from "../../components/views/elements/AccessibleButton";
|
||||
import { getKeyBindingsManager } from "../../KeyBindingsManager";
|
||||
@@ -124,7 +125,9 @@ export default class SearchBox extends React.Component<IProps, IState> {
|
||||
onClick={() => {
|
||||
this.clearSearch("button");
|
||||
}}
|
||||
/>
|
||||
>
|
||||
<CloseIcon />
|
||||
</AccessibleButton>
|
||||
) : undefined;
|
||||
|
||||
// show a shorter placeholder when blurred, if requested
|
||||
|
||||
27
src/components/structures/SpacePillButton.tsx
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
Copyright 2025 Element Creations 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.
|
||||
*/
|
||||
|
||||
import React, { type JSX } from "react";
|
||||
|
||||
import AccessibleButton from "../views/elements/AccessibleButton";
|
||||
|
||||
const SpacePillButton: React.FC<{
|
||||
title: string;
|
||||
icon: JSX.Element;
|
||||
description: string;
|
||||
onClick(): void;
|
||||
}> = ({ title, icon, description, onClick }) => {
|
||||
return (
|
||||
<AccessibleButton className="mx_SpacePillButton" onClick={onClick}>
|
||||
{icon}
|
||||
{title}
|
||||
<div>{description}</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
};
|
||||
|
||||
export default SpacePillButton;
|
||||
@@ -10,7 +10,12 @@ import { EventType, RoomType, JoinRule, Preset, type Room, RoomEvent } from "mat
|
||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import React, { type JSX, useCallback, useContext, useRef, useState } from "react";
|
||||
import { PlusIcon, RoomIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
import {
|
||||
GroupIcon,
|
||||
PlusIcon,
|
||||
RoomIcon,
|
||||
UserProfileSolidIcon,
|
||||
} from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import MatrixClientContext from "../../contexts/MatrixClientContext";
|
||||
import createRoom, { type IOpts } from "../../createRoom";
|
||||
@@ -68,6 +73,7 @@ import RightPanel from "./RightPanel";
|
||||
import SpaceHierarchy, { showRoom } from "./SpaceHierarchy";
|
||||
import { type RoomPermalinkCreator } from "../../utils/permalinks/Permalinks";
|
||||
import { Icon as HashVideoIcon } from "../../../res/img/element-icons/roomlist/hash-video.svg";
|
||||
import SpacePillButton from "./SpacePillButton.tsx";
|
||||
|
||||
interface IProps {
|
||||
space: Room;
|
||||
@@ -455,24 +461,22 @@ const SpaceSetupPrivateScope: React.FC<{
|
||||
})}
|
||||
</div>
|
||||
|
||||
<AccessibleButton
|
||||
className="mx_SpaceRoomView_privateScope_justMeButton"
|
||||
<SpacePillButton
|
||||
icon={<UserProfileSolidIcon />}
|
||||
title={_t("create_space|personal_space")}
|
||||
description={_t("create_space|personal_space_description")}
|
||||
onClick={() => {
|
||||
onFinished(false);
|
||||
}}
|
||||
>
|
||||
{_t("create_space|personal_space")}
|
||||
<div>{_t("create_space|personal_space_description")}</div>
|
||||
</AccessibleButton>
|
||||
<AccessibleButton
|
||||
className="mx_SpaceRoomView_privateScope_meAndMyTeammatesButton"
|
||||
/>
|
||||
<SpacePillButton
|
||||
icon={<GroupIcon />}
|
||||
title={_t("create_space|private_space")}
|
||||
description={_t("create_space|private_space_description")}
|
||||
onClick={() => {
|
||||
onFinished(true);
|
||||
}}
|
||||
>
|
||||
{_t("create_space|private_space")}
|
||||
<div>{_t("create_space|private_space_description")}</div>
|
||||
</AccessibleButton>
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -26,7 +26,7 @@ export class Tab<T extends string> {
|
||||
* Creates a new tab.
|
||||
* @param {string} id The tab's ID.
|
||||
* @param {string} label The untranslated tab label.
|
||||
* @param {string|JSX.Element} icon An SVG element to use for the tab icon. Can also be a string for legacy icons, in which case it is the class for the tab icon. This should be a simple mask.
|
||||
* @param {string|JSX.Element} icon An SVG element to use for the tab icon.
|
||||
* @param {JSX.Element} body The JSX for the tab container.
|
||||
* @param {string} screenName The screen name to report to Posthog.
|
||||
* @param {string} labelClassName Additional class to add to the tab label.
|
||||
@@ -34,7 +34,7 @@ export class Tab<T extends string> {
|
||||
public constructor(
|
||||
public readonly id: T,
|
||||
public readonly label: TranslationKey,
|
||||
public readonly icon: string | JSX.Element | null,
|
||||
public readonly icon: JSX.Element | null,
|
||||
public readonly body: JSX.Element,
|
||||
public readonly screenName?: ScreenName,
|
||||
public readonly labelClassName?: string,
|
||||
|
||||
@@ -10,7 +10,7 @@ import React, { useContext, useEffect, useRef, useState } from "react";
|
||||
import { type EventTimelineSet, type Room, Thread } from "matrix-js-sdk/src/matrix";
|
||||
import { IconButton, Tooltip } from "@vector-im/compound-web";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import ThreadsIcon from "@vector-im/compound-design-tokens/assets/web/icons/threads";
|
||||
import { ThreadsIcon, CheckIcon, ChevronDownIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { Icon as MarkAllThreadsReadIcon } from "../../../res/img/element-icons/check-all.svg";
|
||||
import BaseCard from "../views/right_panel/BaseCard";
|
||||
@@ -57,6 +57,7 @@ export const ThreadPanelHeaderFilterOptionItem: React.FC<
|
||||
> = ({ label, description, onClick, isSelected }) => {
|
||||
return (
|
||||
<MenuItemRadio active={isSelected} className="mx_ThreadPanel_Header_FilterOptionItem" onClick={onClick}>
|
||||
{isSelected ? <CheckIcon /> : null}
|
||||
<span>{label}</span>
|
||||
<span>{description}</span>
|
||||
</MenuItemRadio>
|
||||
@@ -145,6 +146,7 @@ export const ThreadPanelHeader: React.FC<{
|
||||
}}
|
||||
>
|
||||
{`${_t("threads|show_thread_filter")} ${value?.label}`}
|
||||
<ChevronDownIcon />
|
||||
</ContextMenuButton>
|
||||
{contextMenu}
|
||||
</div>
|
||||
|
||||
@@ -53,8 +53,7 @@ export default class ToastContainer extends React.Component<EmptyObject, IState>
|
||||
const { title, icon, key, component, className, bodyClassName, props } = topToast;
|
||||
const bodyClasses = classNames("mx_Toast_body", bodyClassName);
|
||||
const toastClasses = classNames("mx_Toast_toast", className, {
|
||||
mx_Toast_hasIcon: icon,
|
||||
[`mx_Toast_icon_${icon}`]: icon,
|
||||
mx_Toast_hasIcon: !!icon,
|
||||
});
|
||||
const toastProps = Object.assign({}, props, {
|
||||
key,
|
||||
@@ -81,6 +80,7 @@ export default class ToastContainer extends React.Component<EmptyObject, IState>
|
||||
|
||||
toast = (
|
||||
<div className={toastClasses}>
|
||||
{icon}
|
||||
{titleElement}
|
||||
<div className={bodyClasses}>{content}</div>
|
||||
</div>
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React from "react";
|
||||
import { type Room, type IEventRelation } from "matrix-js-sdk/src/matrix";
|
||||
import { CloseIcon, ShareIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import ContentMessages from "../../ContentMessages";
|
||||
import dis from "../../dispatcher/dispatcher";
|
||||
@@ -114,10 +115,13 @@ export default class UploadBar extends React.PureComponent<IProps, IState> {
|
||||
const uploadSize = fileSize(this.state.currentTotal!);
|
||||
return (
|
||||
<div className="mx_UploadBar">
|
||||
<ShareIcon />
|
||||
<div className="mx_UploadBar_filename">
|
||||
{uploadText} ({uploadSize})
|
||||
</div>
|
||||
<AccessibleButton onClick={this.onCancelClick} className="mx_UploadBar_cancel" />
|
||||
<AccessibleButton onClick={this.onCancelClick} className="mx_UploadBar_cancel">
|
||||
<CloseIcon />
|
||||
</AccessibleButton>
|
||||
<ProgressBar value={this.state.currentLoaded!} max={this.state.currentTotal!} />
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -11,7 +11,7 @@ import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import { HistoryVisibleBannerViewModel } from "../../../viewmodels/composer/HistoryVisibleBannerViewModel";
|
||||
|
||||
export const HistoryVisibleBanner: React.FC<{ room: Room }> = ({ room }) => {
|
||||
const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel({ room }));
|
||||
export const HistoryVisibleBanner: React.FC<{ room: Room; threadId?: string | null }> = (props) => {
|
||||
const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel(props));
|
||||
return <HistoryVisibleBannerView vm={vm} />;
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { type JSX, type ComponentProps, useMemo, useState } from "react";
|
||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
import { InfoSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import ConfirmUserActionDialog from "./ConfirmUserActionDialog";
|
||||
import SpaceStore from "../../../stores/spaces/SpaceStore";
|
||||
@@ -47,7 +48,12 @@ const ConfirmSpaceUserActionDialog: React.FC<IProps> = ({
|
||||
|
||||
let warning: JSX.Element | undefined;
|
||||
if (warningMessage) {
|
||||
warning = <div className="mx_ConfirmSpaceUserActionDialog_warning">{warningMessage}</div>;
|
||||
warning = (
|
||||
<div className="mx_ConfirmSpaceUserActionDialog_warning">
|
||||
<InfoSolidIcon />
|
||||
{warningMessage}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -6,6 +6,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React, { type JSX, useEffect, useRef, useState } from "react";
|
||||
import { ChatSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import QuestionDialog from "./QuestionDialog";
|
||||
import { _t } from "../../../languageHandler";
|
||||
@@ -19,6 +20,7 @@ import { submitFeedback } from "../../../rageshake/submit-rageshake";
|
||||
import { useStateToggle } from "../../../hooks/useStateToggle";
|
||||
import StyledCheckbox from "../elements/StyledCheckbox";
|
||||
import ExternalLink from "../elements/ExternalLink";
|
||||
import { Icon as BugIcon } from "../../../../res/img/feather-customised/bug.svg";
|
||||
|
||||
interface IProps {
|
||||
feature?: string;
|
||||
@@ -58,6 +60,7 @@ const FeedbackDialog: React.FC<IProps> = (props: IProps) => {
|
||||
if (hasFeedback) {
|
||||
feedbackSection = (
|
||||
<div className="mx_FeedbackDialog_section mx_FeedbackDialog_rateApp">
|
||||
<ChatSolidIcon />
|
||||
<h3>{_t("feedback|comment_label")}</h3>
|
||||
|
||||
<p>{_t("feedback|platform_username")}</p>
|
||||
@@ -111,7 +114,8 @@ const FeedbackDialog: React.FC<IProps> = (props: IProps) => {
|
||||
title={_t("common|feedback")}
|
||||
description={
|
||||
<React.Fragment>
|
||||
<div className="mx_FeedbackDialog_section mx_FeedbackDialog_reportBug">
|
||||
<div className="mx_FeedbackDialog_section">
|
||||
<BugIcon />
|
||||
<h3>{_t("common|report_a_bug")}</h3>
|
||||
<p>
|
||||
{_t(
|
||||
|
||||
@@ -13,6 +13,7 @@ import { type MatrixCall } from "matrix-js-sdk/src/webrtc/call";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { uniqBy } from "lodash";
|
||||
import { RichList, RichItem, PillInput, Pill } from "@element-hq/web-shared-components";
|
||||
import { DialPadIcon, UserProfileSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { Icon as EmailPillAvatarIcon } from "../../../../res/img/icon-email-pill-avatar.svg";
|
||||
import { _t, _td } from "../../../languageHandler";
|
||||
@@ -1400,7 +1401,7 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
|
||||
new Tab(
|
||||
TabId.UserDirectory,
|
||||
_td("invite|transfer_user_directory_tab"),
|
||||
"mx_InviteDialog_userDirectoryIcon",
|
||||
<UserProfileSolidIcon />,
|
||||
usersSection,
|
||||
),
|
||||
];
|
||||
@@ -1440,9 +1441,7 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
|
||||
<Dialpad hasDial={false} onDigitPress={this.onDigitPress} onDeletePress={this.onDeletePress} />
|
||||
</div>
|
||||
);
|
||||
tabs.push(
|
||||
new Tab(TabId.DialPad, _td("invite|transfer_dial_pad_tab"), "mx_InviteDialog_dialPadIcon", dialPadSection),
|
||||
);
|
||||
tabs.push(new Tab(TabId.DialPad, _td("invite|transfer_dial_pad_tab"), <DialPadIcon />, dialPadSection));
|
||||
|
||||
const consultConnectSection = (
|
||||
<div className="mx_InviteDialog_transferConsultConnect">
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { useMemo, useState } from "react";
|
||||
import { type Room, JoinRule } from "matrix-js-sdk/src/matrix";
|
||||
import { InfoSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import DialogButtons from "../elements/DialogButtons";
|
||||
@@ -88,7 +89,12 @@ const LeaveSpaceDialog: React.FC<IProps> = ({ space, onFinished }) => {
|
||||
/>
|
||||
)}
|
||||
|
||||
{onlyAdminWarning && <div className="mx_LeaveSpaceDialog_section_warning">{onlyAdminWarning}</div>}
|
||||
{onlyAdminWarning && (
|
||||
<div className="mx_LeaveSpaceDialog_section_warning">
|
||||
<InfoSolidIcon />
|
||||
{onlyAdminWarning}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<DialogButtons
|
||||
primaryButton={_t("space|leave_dialog_action")}
|
||||
|
||||
@@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { useMemo, useState } from "react";
|
||||
import { Room } from "matrix-js-sdk/src/matrix";
|
||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||
import { InfoSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import BaseDialog from "./BaseDialog";
|
||||
@@ -126,6 +127,7 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
|
||||
if (newSelected.size < 1) {
|
||||
inviteOnlyWarning = (
|
||||
<div className="mx_ManageRestrictedJoinRuleDialog_section_info">
|
||||
<InfoSolidIcon />
|
||||
{_t("room_settings|security|join_rule_restricted_dialog_empty_warning")}
|
||||
</div>
|
||||
);
|
||||
@@ -183,7 +185,8 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
|
||||
<div className="mx_ManageRestrictedJoinRuleDialog_section">
|
||||
<h3>{_t("room_settings|security|join_rule_restricted_dialog_heading_other")}</h3>
|
||||
<div className="mx_ManageRestrictedJoinRuleDialog_section_info">
|
||||
<div>{_t("room_settings|security|join_rule_restricted_dialog_heading_unknown")}</div>
|
||||
<InfoSolidIcon />
|
||||
{_t("room_settings|security|join_rule_restricted_dialog_heading_unknown")}
|
||||
</div>
|
||||
{filteredOtherEntries.map((space) => {
|
||||
return (
|
||||
|
||||
@@ -10,6 +10,14 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React from "react";
|
||||
import { RoomEvent, type Room, RoomStateEvent, type MatrixEvent, EventType } from "matrix-js-sdk/src/matrix";
|
||||
import {
|
||||
AdminIcon,
|
||||
GroupIcon,
|
||||
LockSolidIcon,
|
||||
PollsIcon,
|
||||
SettingsSolidIcon,
|
||||
VoiceCallSolidIcon,
|
||||
} from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import TabbedView, { Tab } from "../../structures/TabbedView";
|
||||
import { _t, _td } from "../../../languageHandler";
|
||||
@@ -31,6 +39,9 @@ import { type NonEmptyArray } from "../../../@types/common";
|
||||
import { PollHistoryTab } from "../settings/tabs/room/PollHistoryTab";
|
||||
import ErrorBoundary from "../elements/ErrorBoundary";
|
||||
import { PeopleRoomSettingsTab } from "../settings/tabs/room/PeopleRoomSettingsTab";
|
||||
import { Icon as AdvancedIcon } from "../../../../res/img/element-icons/room/settings/advanced.svg";
|
||||
import { Icon as NotificationsIcon } from "../../../../res/img/element-icons/notifications.svg";
|
||||
import { Icon as BridgeIcon } from "../../../../res/img/feather-customised/bridge.svg";
|
||||
|
||||
export const enum RoomSettingsTab {
|
||||
General = "ROOM_GENERAL_TAB",
|
||||
@@ -129,7 +140,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.General,
|
||||
_td("common|general"),
|
||||
"mx_RoomSettingsDialog_settingsIcon",
|
||||
<SettingsSolidIcon />,
|
||||
<GeneralRoomSettingsTab room={this.state.room} />,
|
||||
"RoomSettingsGeneral",
|
||||
),
|
||||
@@ -139,7 +150,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.People,
|
||||
_td("common|people"),
|
||||
"mx_RoomSettingsDialog_peopleIcon",
|
||||
<GroupIcon />,
|
||||
<PeopleRoomSettingsTab room={this.state.room} />,
|
||||
),
|
||||
);
|
||||
@@ -149,7 +160,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Voip,
|
||||
_td("settings|voip|title"),
|
||||
"mx_RoomSettingsDialog_voiceIcon",
|
||||
<VoiceCallSolidIcon />,
|
||||
<VoipRoomSettingsTab room={this.state.room} />,
|
||||
),
|
||||
);
|
||||
@@ -158,7 +169,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Security,
|
||||
_td("room_settings|security|title"),
|
||||
"mx_RoomSettingsDialog_securityIcon",
|
||||
<LockSolidIcon />,
|
||||
<SecurityRoomSettingsTab room={this.state.room} closeSettingsFn={() => this.props.onFinished(true)} />,
|
||||
"RoomSettingsSecurityPrivacy",
|
||||
),
|
||||
@@ -167,7 +178,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Roles,
|
||||
_td("room_settings|permissions|title"),
|
||||
"mx_RoomSettingsDialog_rolesIcon",
|
||||
<AdminIcon />,
|
||||
<RolesRoomSettingsTab room={this.state.room} />,
|
||||
"RoomSettingsRolesPermissions",
|
||||
),
|
||||
@@ -176,7 +187,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Notifications,
|
||||
_td("notifications|enable_prompt_toast_title"),
|
||||
"mx_RoomSettingsDialog_notificationsIcon",
|
||||
<NotificationsIcon />,
|
||||
<NotificationSettingsTab
|
||||
roomId={this.state.room.roomId}
|
||||
closeSettingsFn={() => this.props.onFinished(true)}
|
||||
@@ -190,7 +201,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Bridges,
|
||||
_td("room_settings|bridges|title"),
|
||||
"mx_RoomSettingsDialog_bridgesIcon",
|
||||
<BridgeIcon />,
|
||||
<BridgeSettingsTab room={this.state.room} />,
|
||||
"RoomSettingsBridges",
|
||||
),
|
||||
@@ -201,7 +212,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.PollHistory,
|
||||
_td("right_panel|polls_button"),
|
||||
"mx_RoomSettingsDialog_pollsIcon",
|
||||
<PollsIcon />,
|
||||
<PollHistoryTab room={this.state.room} onFinished={() => this.props.onFinished(true)} />,
|
||||
),
|
||||
);
|
||||
@@ -211,7 +222,7 @@ class RoomSettingsDialog extends React.Component<IProps, IState> {
|
||||
new Tab(
|
||||
RoomSettingsTab.Advanced,
|
||||
_td("common|advanced"),
|
||||
"mx_RoomSettingsDialog_warningIcon",
|
||||
<AdvancedIcon />,
|
||||
<AdvancedRoomSettingsTab
|
||||
room={this.state.room}
|
||||
closeSettingsFn={() => this.props.onFinished(true)}
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { type ChangeEvent } from "react";
|
||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
import { VisibilityOnIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t, _td } from "../../../languageHandler";
|
||||
import BaseDialog from "../dialogs/BaseDialog";
|
||||
@@ -63,7 +64,7 @@ const SpacePreferencesDialog: React.FC<IProps> = ({ space, onFinished }) => {
|
||||
new Tab(
|
||||
SpacePreferenceTab.Appearance,
|
||||
_td("common|appearance"),
|
||||
"mx_SpacePreferencesDialog_appearanceIcon",
|
||||
<VisibilityOnIcon />,
|
||||
<SpacePreferencesAppearanceTab space={space} />,
|
||||
),
|
||||
];
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { useMemo } from "react";
|
||||
import { type Room, type MatrixClient } from "matrix-js-sdk/src/matrix";
|
||||
import { AdminIcon, SettingsSolidIcon, VisibilityOnIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t, _td } from "../../../languageHandler";
|
||||
import BaseDialog from "./BaseDialog";
|
||||
@@ -22,6 +23,7 @@ import AdvancedRoomSettingsTab from "../settings/tabs/room/AdvancedRoomSettingsT
|
||||
import RolesRoomSettingsTab from "../settings/tabs/room/RolesRoomSettingsTab";
|
||||
import { Action } from "../../../dispatcher/actions";
|
||||
import { type NonEmptyArray } from "../../../@types/common";
|
||||
import { Icon as AdvancedIcon } from "../../../../res/img/element-icons/room/settings/advanced.svg";
|
||||
|
||||
export enum SpaceSettingsTab {
|
||||
General = "SPACE_GENERAL_TAB",
|
||||
@@ -48,26 +50,26 @@ const SpaceSettingsDialog: React.FC<IProps> = ({ matrixClient: cli, space, onFin
|
||||
new Tab(
|
||||
SpaceSettingsTab.General,
|
||||
_td("common|general"),
|
||||
"mx_SpaceSettingsDialog_generalIcon",
|
||||
<SettingsSolidIcon />,
|
||||
<SpaceSettingsGeneralTab matrixClient={cli} space={space} />,
|
||||
),
|
||||
new Tab(
|
||||
SpaceSettingsTab.Visibility,
|
||||
_td("room_settings|visibility|title"),
|
||||
"mx_SpaceSettingsDialog_visibilityIcon",
|
||||
<VisibilityOnIcon />,
|
||||
<SpaceSettingsVisibilityTab matrixClient={cli} space={space} closeSettingsFn={onFinished} />,
|
||||
),
|
||||
new Tab(
|
||||
SpaceSettingsTab.Roles,
|
||||
_td("room_settings|permissions|title"),
|
||||
"mx_RoomSettingsDialog_rolesIcon",
|
||||
<AdminIcon />,
|
||||
<RolesRoomSettingsTab room={space} />,
|
||||
),
|
||||
SettingsStore.getValue(UIFeature.AdvancedSettings)
|
||||
? new Tab(
|
||||
SpaceSettingsTab.Advanced,
|
||||
_td("common|advanced"),
|
||||
"mx_RoomSettingsDialog_warningIcon",
|
||||
<AdvancedIcon />,
|
||||
<AdvancedRoomSettingsTab room={space} closeSettingsFn={onFinished} />,
|
||||
)
|
||||
: null,
|
||||
|
||||
@@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { useState } from "react";
|
||||
import classNames from "classnames";
|
||||
import { CopyIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import { copyPlaintext } from "../../../utils/strings";
|
||||
@@ -21,7 +22,11 @@ interface IProps extends React.HTMLAttributes<HTMLDivElement> {
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export const CopyTextButton: React.FC<Pick<IProps, "getTextToCopy" | "className">> = ({ getTextToCopy, className }) => {
|
||||
export const CopyTextButton: React.FC<Pick<IProps, "getTextToCopy" | "className" | "children">> = ({
|
||||
getTextToCopy,
|
||||
className,
|
||||
children,
|
||||
}) => {
|
||||
const [tooltip, setTooltip] = useState<string | undefined>(undefined);
|
||||
|
||||
const onCopyClickInternal = async (e: ButtonEvent): Promise<void> => {
|
||||
@@ -45,7 +50,9 @@ export const CopyTextButton: React.FC<Pick<IProps, "getTextToCopy" | "className"
|
||||
onTooltipOpenChange={(open) => {
|
||||
if (!open) onHideTooltip();
|
||||
}}
|
||||
/>
|
||||
>
|
||||
{children}
|
||||
</AccessibleButton>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -57,7 +64,9 @@ const CopyableText: React.FC<IProps> = ({ children, getTextToCopy, border = true
|
||||
return (
|
||||
<div className={combinedClassName} {...props}>
|
||||
{children}
|
||||
<CopyTextButton getTextToCopy={getTextToCopy} className="mx_CopyableText_copyButton" />
|
||||
<CopyTextButton getTextToCopy={getTextToCopy} className="mx_CopyableText_copyButton">
|
||||
<CopyIcon />
|
||||
</CopyTextButton>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { type DetailedHTMLProps, type AnchorHTMLAttributes } from "react";
|
||||
import classNames from "classnames";
|
||||
import PopOutIcon from "@vector-im/compound-design-tokens/assets/web/icons/pop-out";
|
||||
|
||||
interface Props extends DetailedHTMLProps<AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement> {}
|
||||
|
||||
@@ -17,7 +18,7 @@ interface Props extends DetailedHTMLProps<AnchorHTMLAttributes<HTMLAnchorElement
|
||||
const ExternalLink: React.FC<Props> = ({ children, className, ...rest }) => (
|
||||
<a target="_blank" rel="noreferrer noopener" {...rest} className={classNames("mx_ExternalLink", className)}>
|
||||
{children}
|
||||
<i className="mx_ExternalLink_icon" />
|
||||
<PopOutIcon className="mx_ExternalLink_icon" />
|
||||
</a>
|
||||
);
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import classNames from "classnames";
|
||||
import React from "react";
|
||||
import { VisibilityOnIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { sanitizedHtmlNode } from "../../../HtmlUtils";
|
||||
import { _t } from "../../../languageHandler";
|
||||
@@ -50,6 +51,7 @@ export default class InviteReason extends React.PureComponent<IProps, IState> {
|
||||
{this.props.htmlReason ? sanitizedHtmlNode(this.props.htmlReason) : this.props.reason}
|
||||
</div>
|
||||
<AccessibleButton kind="link_inline" className="mx_InviteReason_view" onClick={this.onViewClick}>
|
||||
<VisibilityOnIcon />
|
||||
{_t("common|view_message")}
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { type ReactElement } from "react";
|
||||
import { JoinRule } from "matrix-js-sdk/src/matrix";
|
||||
import { GroupIcon, LockSolidIcon, PublicIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import Dropdown from "./Dropdown";
|
||||
import { type NonEmptyArray } from "../../../@types/common";
|
||||
@@ -36,6 +37,7 @@ const JoinRuleDropdown: React.FC<IProps> = ({
|
||||
}) => {
|
||||
const options = [
|
||||
<div key={JoinRule.Invite} className="mx_JoinRuleDropdown_invite">
|
||||
<LockSolidIcon />
|
||||
{labelInvite}
|
||||
</div>,
|
||||
] as NonEmptyArray<ReactElement & { key: string }>;
|
||||
@@ -44,6 +46,7 @@ const JoinRuleDropdown: React.FC<IProps> = ({
|
||||
options.push(
|
||||
(
|
||||
<div key={JoinRule.Public} className="mx_JoinRuleDropdown_public">
|
||||
<PublicIcon />
|
||||
{labelPublic}
|
||||
</div>
|
||||
) as ReactElement & { key: string },
|
||||
@@ -54,7 +57,7 @@ const JoinRuleDropdown: React.FC<IProps> = ({
|
||||
options.unshift(
|
||||
(
|
||||
<div key={JoinRule.Knock} className="mx_JoinRuleDropdown_knock">
|
||||
<AskToJoinIcon className="mx_Icon mx_Icon_16 mx_JoinRuleDropdown_icon" />
|
||||
<AskToJoinIcon />
|
||||
{labelKnock}
|
||||
</div>
|
||||
) as ReactElement & { key: string },
|
||||
@@ -65,6 +68,7 @@ const JoinRuleDropdown: React.FC<IProps> = ({
|
||||
options.unshift(
|
||||
(
|
||||
<div key={JoinRule.Restricted} className="mx_JoinRuleDropdown_restricted">
|
||||
<GroupIcon />
|
||||
{labelRestricted}
|
||||
</div>
|
||||
) as ReactElement & { key: string },
|
||||
|
||||
@@ -35,7 +35,7 @@ const getIcon = (brand: IdentityProviderBrand | string): string | null => {
|
||||
switch (brand) {
|
||||
/* eslint-disable @typescript-eslint/no-require-imports */
|
||||
case IdentityProviderBrand.Apple:
|
||||
return require(`../../../../res/img/element-icons/brands/apple.svg`).default;
|
||||
return require("@vector-im/compound-design-tokens/icons/mac.svg").default;
|
||||
case IdentityProviderBrand.Facebook:
|
||||
return require(`../../../../res/img/element-icons/brands/facebook.svg`).default;
|
||||
case IdentityProviderBrand.Github:
|
||||
|
||||
@@ -9,6 +9,7 @@ import React, { type JSX, useState } from "react";
|
||||
import classNames from "classnames";
|
||||
import { type DOMNode, Element as ParserElement, domToReact } from "html-react-parser";
|
||||
import { textContent, getInnerHTML } from "domutils";
|
||||
import { CollapseIcon, CopyIcon, ExpandIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { useSettingValue } from "../../../hooks/useSettings.ts";
|
||||
import { CopyTextButton } from "../elements/CopyableText.tsx";
|
||||
@@ -25,13 +26,9 @@ const ExpandCollapseButton: React.FC<{
|
||||
onClick(): void;
|
||||
}> = ({ expanded, onClick }) => {
|
||||
return (
|
||||
<span
|
||||
className={classNames("mx_EventTile_button", {
|
||||
mx_EventTile_expandButton: !expanded,
|
||||
mx_EventTile_collapseButton: expanded,
|
||||
})}
|
||||
onClick={onClick}
|
||||
/>
|
||||
<span className="mx_EventTile_button" onClick={onClick}>
|
||||
{expanded ? <CollapseIcon /> : <ExpandIcon />}
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -138,7 +135,9 @@ const CodeBlock: React.FC<Props> = ({ preNode }) => {
|
||||
className={classNames("mx_EventTile_button mx_EventTile_copyButton", {
|
||||
mx_EventTile_buttonBottom: !!expandCollapseButton,
|
||||
})}
|
||||
/>
|
||||
>
|
||||
<CopyIcon />
|
||||
</CopyTextButton>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -675,7 +675,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
|
||||
|
||||
return (
|
||||
<div className={classes} ref={this.ref} role="region" aria-label={_t("a11y|message_composer")}>
|
||||
<HistoryVisibleBanner room={this.props.room} />
|
||||
<HistoryVisibleBanner room={this.props.room} threadId={threadId} />
|
||||
<div className="mx_MessageComposer_wrapper">
|
||||
<UserIdentityWarning room={this.props.room} key={this.props.room.roomId} />
|
||||
<ReplyPreview
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import React, { type JSX } from "react";
|
||||
import { type MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||
import { CloseIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import dis from "../../../dispatcher/dispatcher";
|
||||
import { _t } from "../../../languageHandler";
|
||||
@@ -44,7 +45,9 @@ export default class ReplyPreview extends React.Component<IProps> {
|
||||
<AccessibleButton
|
||||
className="mx_ReplyPreview_header_cancel"
|
||||
onClick={() => cancelQuoting(this.context.timelineRenderingType)}
|
||||
/>
|
||||
>
|
||||
<CloseIcon />
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
<ReplyTile mxEvent={this.props.replyToEvent} permalinkCreator={this.props.permalinkCreator} />
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { type JSX, type FC } from "react";
|
||||
import { type Room, JoinRule, type MatrixClient } from "matrix-js-sdk/src/matrix";
|
||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||
import { LockSolidIcon, VideoCallSolidIcon, PublicIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
|
||||
@@ -39,16 +40,16 @@ const RoomInfoLine: FC<IProps> = ({ room }) => {
|
||||
|
||||
const isVideoRoom = calcIsVideoRoom(room);
|
||||
|
||||
let iconClass: string;
|
||||
let icon: JSX.Element;
|
||||
let roomType: string;
|
||||
if (isVideoRoom) {
|
||||
iconClass = "mx_RoomInfoLine_video";
|
||||
icon = <VideoCallSolidIcon />;
|
||||
roomType = _t("common|video_room");
|
||||
} else if (joinRule === JoinRule.Public) {
|
||||
iconClass = "mx_RoomInfoLine_public";
|
||||
icon = <PublicIcon />;
|
||||
roomType = room.isSpaceRoom() ? _t("common|public_space") : _t("common|public_room");
|
||||
} else {
|
||||
iconClass = "mx_RoomInfoLine_private";
|
||||
icon = <LockSolidIcon />;
|
||||
roomType = room.isSpaceRoom() ? _t("common|private_space") : _t("common|private_room");
|
||||
}
|
||||
|
||||
@@ -75,7 +76,8 @@ const RoomInfoLine: FC<IProps> = ({ room }) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={`mx_RoomInfoLine ${iconClass}`}>
|
||||
<div className="mx_RoomInfoLine">
|
||||
{icon}
|
||||
{roomType}
|
||||
{members}
|
||||
</div>
|
||||
|
||||
@@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { type JSX, type FC, useContext, useState } from "react";
|
||||
import { type Room, JoinRule } from "matrix-js-sdk/src/matrix";
|
||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||
import { InfoSolidIcon, VideoCallSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import defaultDispatcher from "../../../dispatcher/dispatcher";
|
||||
@@ -152,7 +153,9 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
|
||||
avatarRow = (
|
||||
<>
|
||||
<RoomAvatar room={room} size="50px" viewAvatarOnClick />
|
||||
<div className="mx_RoomPreviewCard_video" />
|
||||
<div className="mx_RoomPreviewCard_video">
|
||||
<VideoCallSolidIcon />
|
||||
</div>
|
||||
<BetaPill onClick={viewLabs} tooltipTitle={_t("labs|video_rooms_beta")} />
|
||||
</>
|
||||
);
|
||||
@@ -174,6 +177,7 @@ const RoomPreviewCard: FC<IProps> = ({ room, onJoinButtonClicked, onRejectButton
|
||||
{room.getJoinRule() === "public" && <RoomFacePile room={room} />}
|
||||
{cannotJoin ? (
|
||||
<div className="mx_RoomPreviewCard_notice">
|
||||
<InfoSolidIcon />
|
||||
{_t("room|join_failed_needs_invite", { roomName: room.name })}
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
@@ -18,7 +18,6 @@ import React, {
|
||||
type ReactNode,
|
||||
useEffect,
|
||||
} from "react";
|
||||
import classNames from "classnames";
|
||||
import {
|
||||
RoomType,
|
||||
HistoryVisibility,
|
||||
@@ -28,6 +27,7 @@ import {
|
||||
type ICreateRoomOpts,
|
||||
} from "matrix-js-sdk/src/matrix";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { LockSolidIcon, PublicIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import ContextMenu, { ChevronFace } from "../../structures/ContextMenu";
|
||||
@@ -47,6 +47,7 @@ import { Filter } from "../dialogs/spotlight/Filter";
|
||||
import { type OpenSpotlightPayload } from "../../../dispatcher/payloads/OpenSpotlightPayload.ts";
|
||||
import { useSettingValue } from "../../../hooks/useSettings.ts";
|
||||
import { UIFeature } from "../../../settings/UIFeature.ts";
|
||||
import SpacePillButton from "../../structures/SpacePillButton.tsx";
|
||||
|
||||
export const createSpace = async (
|
||||
client: MatrixClient,
|
||||
@@ -86,20 +87,6 @@ export const createSpace = async (
|
||||
});
|
||||
};
|
||||
|
||||
const SpaceCreateMenuType: React.FC<{
|
||||
title: string;
|
||||
description: string;
|
||||
className: string;
|
||||
onClick(): void;
|
||||
}> = ({ title, description, className, onClick }) => {
|
||||
return (
|
||||
<AccessibleButton className={classNames("mx_SpaceCreateMenuType", className)} onClick={onClick}>
|
||||
{title}
|
||||
<div>{description}</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
};
|
||||
|
||||
const spaceNameValidator = withValidation({
|
||||
rules: [
|
||||
{
|
||||
@@ -285,16 +272,16 @@ const SpaceCreateMenu: React.FC<{
|
||||
<h2>{_t("create_space|label")}</h2>
|
||||
<p>{_t("create_space|explainer")}</p>
|
||||
|
||||
<SpaceCreateMenuType
|
||||
<SpacePillButton
|
||||
icon={<PublicIcon />}
|
||||
title={_t("common|public")}
|
||||
description={_t("create_space|public_description")}
|
||||
className="mx_SpaceCreateMenuType_public"
|
||||
onClick={() => setVisibility(Visibility.Public)}
|
||||
/>
|
||||
<SpaceCreateMenuType
|
||||
<SpacePillButton
|
||||
icon={<LockSolidIcon />}
|
||||
title={_t("common|private")}
|
||||
description={_t("create_space|private_description")}
|
||||
className="mx_SpaceCreateMenuType_private"
|
||||
onClick={() => setVisibility(Visibility.Private)}
|
||||
/>
|
||||
|
||||
|
||||
@@ -22,6 +22,15 @@ import React, {
|
||||
import { DragDropContext, Draggable, Droppable, type DroppableProvidedProps } from "react-beautiful-dnd";
|
||||
import classNames from "classnames";
|
||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
import {
|
||||
FavouriteSolidIcon,
|
||||
HomeSolidIcon,
|
||||
RoomIcon,
|
||||
VideoCallSolidIcon,
|
||||
UserProfileSolidIcon,
|
||||
PlusIcon,
|
||||
ChevronRightIcon,
|
||||
} from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import { useContextMenu } from "../../structures/ContextMenu";
|
||||
@@ -114,6 +123,7 @@ export const HomeButtonContextMenu: React.FC<ComponentProps<typeof SpaceContextM
|
||||
interface IMetaSpaceButtonProps extends ComponentProps<typeof SpaceButton> {
|
||||
selected: boolean;
|
||||
isPanelCollapsed: boolean;
|
||||
icon: JSX.Element;
|
||||
}
|
||||
|
||||
type MetaSpaceButtonProps = Pick<IMetaSpaceButtonProps, "selected" | "isPanelCollapsed">;
|
||||
@@ -152,7 +162,6 @@ const HomeButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed
|
||||
return (
|
||||
<MetaSpaceButton
|
||||
spaceKey={MetaSpace.Home}
|
||||
className="mx_SpaceButton_home"
|
||||
selected={selected}
|
||||
isPanelCollapsed={isPanelCollapsed}
|
||||
label={getMetaSpaceName(MetaSpace.Home, allRoomsInHome)}
|
||||
@@ -160,6 +169,7 @@ const HomeButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollapsed
|
||||
ContextMenuComponent={HomeButtonContextMenu}
|
||||
contextMenuTooltip={_t("common|options")}
|
||||
size="32px"
|
||||
icon={<HomeSolidIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -168,12 +178,12 @@ const FavouritesButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCol
|
||||
return (
|
||||
<MetaSpaceButton
|
||||
spaceKey={MetaSpace.Favourites}
|
||||
className="mx_SpaceButton_favourites"
|
||||
selected={selected}
|
||||
isPanelCollapsed={isPanelCollapsed}
|
||||
label={getMetaSpaceName(MetaSpace.Favourites)}
|
||||
notificationState={SpaceStore.instance.getNotificationState(MetaSpace.Favourites)}
|
||||
size="32px"
|
||||
icon={<FavouriteSolidIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -182,12 +192,12 @@ const PeopleButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollaps
|
||||
return (
|
||||
<MetaSpaceButton
|
||||
spaceKey={MetaSpace.People}
|
||||
className="mx_SpaceButton_people"
|
||||
selected={selected}
|
||||
isPanelCollapsed={isPanelCollapsed}
|
||||
label={getMetaSpaceName(MetaSpace.People)}
|
||||
notificationState={SpaceStore.instance.getNotificationState(MetaSpace.People)}
|
||||
size="32px"
|
||||
icon={<UserProfileSolidIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -196,12 +206,12 @@ const OrphansButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCollap
|
||||
return (
|
||||
<MetaSpaceButton
|
||||
spaceKey={MetaSpace.Orphans}
|
||||
className="mx_SpaceButton_orphans"
|
||||
selected={selected}
|
||||
isPanelCollapsed={isPanelCollapsed}
|
||||
label={getMetaSpaceName(MetaSpace.Orphans)}
|
||||
notificationState={SpaceStore.instance.getNotificationState(MetaSpace.Orphans)}
|
||||
size="32px"
|
||||
icon={<RoomIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -210,12 +220,12 @@ const VideoRoomsButton: React.FC<MetaSpaceButtonProps> = ({ selected, isPanelCol
|
||||
return (
|
||||
<MetaSpaceButton
|
||||
spaceKey={MetaSpace.VideoRooms}
|
||||
className="mx_SpaceButton_videoRooms"
|
||||
selected={selected}
|
||||
isPanelCollapsed={isPanelCollapsed}
|
||||
label={getMetaSpaceName(MetaSpace.VideoRooms)}
|
||||
notificationState={SpaceStore.instance.getNotificationState(MetaSpace.VideoRooms)}
|
||||
size="32px"
|
||||
icon={<VideoCallSolidIcon />}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -262,6 +272,7 @@ const CreateSpaceButton: React.FC<Pick<IInnerSpacePanelProps, "isPanelCollapsed"
|
||||
isNarrow={isPanelCollapsed}
|
||||
innerRef={handle}
|
||||
size="32px"
|
||||
icon={<PlusIcon />}
|
||||
/>
|
||||
|
||||
{contextMenu}
|
||||
@@ -449,7 +460,9 @@ const SpacePanel: React.FC = () => {
|
||||
className="mx_SpacePanel_Tooltip_KeyboardShortcut"
|
||||
/>
|
||||
}
|
||||
/>
|
||||
>
|
||||
<ChevronRightIcon />
|
||||
</AccessibleButton>
|
||||
</UserMenu>
|
||||
<Droppable droppableId="top-level-spaces">
|
||||
{(provided, snapshot) => (
|
||||
|
||||
@@ -9,15 +9,17 @@ Please see LICENSE files in the repository root for full details.
|
||||
import React, { useState } from "react";
|
||||
import { type Room } from "matrix-js-sdk/src/matrix";
|
||||
import { sleep } from "matrix-js-sdk/src/utils";
|
||||
import { LinkIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../../../languageHandler";
|
||||
import AccessibleButton from "../elements/AccessibleButton";
|
||||
import { copyPlaintext } from "../../../utils/strings";
|
||||
import { RoomPermalinkCreator } from "../../../utils/permalinks/Permalinks";
|
||||
import { showRoomInviteDialog } from "../../../RoomInvite";
|
||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents";
|
||||
import { UIComponent } from "../../../settings/UIFeature";
|
||||
import { Icon as InviteIcon } from "../../../../res/img/element-icons/room/invite.svg";
|
||||
import SpacePillButton from "../../structures/SpacePillButton.tsx";
|
||||
|
||||
interface IProps {
|
||||
space: Room;
|
||||
@@ -29,8 +31,10 @@ const SpacePublicShare: React.FC<IProps> = ({ space, onFinished }) => {
|
||||
|
||||
return (
|
||||
<div className="mx_SpacePublicShare">
|
||||
<AccessibleButton
|
||||
className="mx_SpacePublicShare_shareButton"
|
||||
<SpacePillButton
|
||||
icon={<LinkIcon />}
|
||||
title={_t("space|invite_link")}
|
||||
description={copiedText}
|
||||
onClick={async (): Promise<void> => {
|
||||
const permalinkCreator = new RoomPermalinkCreator(space);
|
||||
permalinkCreator.load();
|
||||
@@ -43,22 +47,18 @@ const SpacePublicShare: React.FC<IProps> = ({ space, onFinished }) => {
|
||||
setCopiedText(_t("action|click_to_copy"));
|
||||
}
|
||||
}}
|
||||
>
|
||||
{_t("space|invite_link")}
|
||||
<div>{copiedText}</div>
|
||||
</AccessibleButton>
|
||||
/>
|
||||
{space.canInvite(MatrixClientPeg.safeGet().getSafeUserId()) &&
|
||||
shouldShowComponent(UIComponent.InviteUsers) ? (
|
||||
<AccessibleButton
|
||||
className="mx_SpacePublicShare_inviteButton"
|
||||
<SpacePillButton
|
||||
icon={<InviteIcon />}
|
||||
title={_t("space|invite")}
|
||||
description={_t("space|invite_description")}
|
||||
onClick={() => {
|
||||
if (onFinished) onFinished();
|
||||
showRoomInviteDialog(space.roomId);
|
||||
}}
|
||||
>
|
||||
{_t("space|invite")}
|
||||
<div>{_t("space|invite_description")}</div>
|
||||
</AccessibleButton>
|
||||
/>
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -20,6 +20,11 @@ import classNames from "classnames";
|
||||
import { type Room, RoomEvent } from "matrix-js-sdk/src/matrix";
|
||||
import { KnownMembership } from "matrix-js-sdk/src/types";
|
||||
import { type DraggableProvidedDragHandleProps } from "react-beautiful-dnd";
|
||||
import {
|
||||
ChevronDownIcon,
|
||||
ChevronRightIcon,
|
||||
OverflowHorizontalIcon,
|
||||
} from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import RoomAvatar from "../avatars/RoomAvatar";
|
||||
import SpaceStore from "../../../stores/spaces/SpaceStore";
|
||||
@@ -169,7 +174,9 @@ export const SpaceButton = <T extends keyof HTMLElementTagNameMap>({
|
||||
onClick={openMenu}
|
||||
title={contextMenuTooltip}
|
||||
isExpanded={menuDisplayed}
|
||||
/>
|
||||
>
|
||||
<OverflowHorizontalIcon />
|
||||
</ContextMenuTooltipButton>
|
||||
)}
|
||||
|
||||
{contextMenu}
|
||||
@@ -349,7 +356,9 @@ export class SpaceItem extends React.PureComponent<IItemProps, IItemState> {
|
||||
onClick={this.toggleCollapse}
|
||||
tabIndex={-1}
|
||||
aria-label={collapsed ? _t("action|expand") : _t("action|collapse")}
|
||||
/>
|
||||
>
|
||||
{collapsed ? <ChevronRightIcon /> : <ChevronDownIcon />}
|
||||
</AccessibleButton>
|
||||
) : null;
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
|
||||
3717
src/i18n/strings/da.json
Normal file
@@ -554,7 +554,7 @@
|
||||
"privacy": "Privaatsus",
|
||||
"private": "Privaatne",
|
||||
"private_room": "Omavaheline jututuba",
|
||||
"private_space": "Privaatne kogukonnakeskus",
|
||||
"private_space": "Privaatne kogukond",
|
||||
"profile": "Profiil",
|
||||
"public": "Avalik",
|
||||
"public_room": "Avalik jututuba",
|
||||
@@ -718,7 +718,7 @@
|
||||
"personal_space": "Vaid mina",
|
||||
"personal_space_description": "Privaatne kogukonnakeskus jututubade koondamiseks",
|
||||
"private_description": "Liitumine vaid kutse alusel, sobib sulle ja sinu lähematele kaaslastele",
|
||||
"private_heading": "Sinu privaatne kogukonnakeskus",
|
||||
"private_heading": "Sinu privaatne kogukond",
|
||||
"private_only_heading": "Sinu kogukond",
|
||||
"private_personal_description": "Palun kontrolli, et vajalikel inimestel oleks ligipääs siia - %(name)s",
|
||||
"private_personal_heading": "Kellega sa koos töötad?",
|
||||
@@ -1492,7 +1492,7 @@
|
||||
"send_sticker": "Saada kleeps",
|
||||
"shift": "Shift",
|
||||
"space": "Tühikuklahv",
|
||||
"switch_to_space": "Vaata kogukonnakeskust tema numbri alusel",
|
||||
"switch_to_space": "Vaata kogukonda tema numbri alusel",
|
||||
"toggle_hidden_events": "Lülita peidetud sündmuste näitamine sisse/välja",
|
||||
"toggle_microphone_mute": "Lülita mikrofoni summutamine sisse/välja",
|
||||
"toggle_right_panel": "Lülita parem paan sisse/välja",
|
||||
@@ -1623,7 +1623,7 @@
|
||||
"leave_room_dialog": {
|
||||
"last_person_warning": "Sa oled siin viimane osaleja. Kui sa nüüd lahkud, siis mitte keegi, kaasa arvatud sa ise, ei saa hiljem enam liituda.",
|
||||
"leave_room_question": "Kas oled kindel, et soovid lahkuda jututoast „%(roomName)s“?",
|
||||
"leave_space_question": "Kas oled kindel, et soovid lahkuda kogukonnakeskusest „%(spaceName)s“?",
|
||||
"leave_space_question": "Kas oled kindel, et soovid lahkuda kogukonnast „%(spaceName)s“?",
|
||||
"room_leave_admin_warning": "Sa oled ainus selle jututoa haldaja. Kui sa siit lahkud, ei saa keegi teine jututoa seadistusi muuta ega muid olulisi toiminguid teha.",
|
||||
"room_leave_mod_warning": "Sa oled ainus moderaator selles jututoas. Kui sa siis lahkud, ei saa keegi teine jututoa seadistusi muuta ega muid olulisi toiminguid teha.",
|
||||
"room_rejoin_warning": "See ei ole avalik jututuba. Ilma kutseta sa ei saa uuesti liituda.",
|
||||
@@ -1762,6 +1762,7 @@
|
||||
"end_message": "Küsitlus on läbi. Populaarseim vastus: %(topAnswer)s",
|
||||
"end_message_no_votes": "Küsitlus on läbi. Ühtegi osalejate ei ole.",
|
||||
"end_title": "Lõpeta küsitlus",
|
||||
"ended_poll_label": "Küsitlus on lõppenud",
|
||||
"error_ending_description": "Vabandust, aga küsitlus jäi lõpetamata. Palun proovi uuesti.",
|
||||
"error_ending_title": "Küsitluse lõpetamine ei õnnestunud",
|
||||
"error_voting_description": "Vabandust, aga sinu valik jäi salvestamata. Palun proovi uuesti.",
|
||||
@@ -1769,10 +1770,20 @@
|
||||
"failed_send_poll_description": "Vabandust, aga sinu loodud küsitlus jäi üleslaadimata.",
|
||||
"failed_send_poll_title": "Küsitluse üleslaadimine ei õnnestunud",
|
||||
"notes": "Tulemused on näha vaid siis, kui küsitlus in lõppenud",
|
||||
"option_label": "%(number)s. valikvastus: %(answer)s",
|
||||
"option_label_winning_with_total": {
|
||||
"one": "%(number)s. valikvastus: %(answer)s (osutus valituks, %(count)s hääl)",
|
||||
"other": "%(number)s. valikvastus: %(answer)s (osutus valituks, %(count)s häält)"
|
||||
},
|
||||
"option_label_with_total": {
|
||||
"one": "%(number)s. valikvastus: %(answer)s (%(count)s hääl)",
|
||||
"other": "%(number)s. valikvastus: %(answer)s (%(count)s häält)"
|
||||
},
|
||||
"options_add_button": "Lisa valik",
|
||||
"options_heading": "Koosta valikud",
|
||||
"options_label": "Valik %(number)s",
|
||||
"options_placeholder": "Sisesta valik",
|
||||
"poll_label": "Küsitlus",
|
||||
"topic_heading": "Mis on küsitluse teema?",
|
||||
"topic_label": "Küsimus või teema",
|
||||
"topic_placeholder": "Kirjuta midagi…",
|
||||
@@ -2112,6 +2123,7 @@
|
||||
"status_bar": {
|
||||
"delete_all": "Kustuta kõik",
|
||||
"exceeded_resource_limit": "Sinu sõnumit ei saadetud, kuna see koduserver on ületanud on ületanud ressursipiirangu. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
|
||||
"history_visible": "Sinu saadetud sõnumeid jagatakse sellesse jututuppa kutsutud uute liikmetega.<a> Lisateave</a>",
|
||||
"homeserver_blocked": "Sinu sõnumit ei saadetud, kuna see koduserver blokeeritud serveri haldaja poolt. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
|
||||
"monthly_user_limit_reached": "Sinu sõnumit ei saadetud, kuna see koduserver on saavutanud igakuise aktiivsete kasutajate piiri. Teenuse kasutamiseks palun <a>võta ühendust serveri haldajaga</a>.",
|
||||
"requires_consent_agreement": "Sa ei saa saata ühtego sõnumit enne, kui oled läbi lugenud ja nõustunud <consentLink>meie kasutustingimustega</consentLink>.",
|
||||
@@ -2258,7 +2270,7 @@
|
||||
"error_upgrade_description": "Jututoa uuendust ei õnnestunud teha",
|
||||
"error_upgrade_title": "Jututoa versiooni uuendamine ei õnnestunud",
|
||||
"information_section_room": "Info jututoa kohta",
|
||||
"information_section_space": "Kogukonnakeskuse teave",
|
||||
"information_section_space": "Kogukonna teave",
|
||||
"room_id": "Jututoa tehniline tunnus",
|
||||
"room_predecessor": "Näita vanemat tüüpi sõnumeid jututoas %(roomName)s.",
|
||||
"room_upgrade_button": "Uuenda see jututoa versioon soovitatud versioonini",
|
||||
@@ -2322,7 +2334,7 @@
|
||||
"error_updating_alias_description": "Jututoa lisaaadressi uuendamisel tekkis viga. See kas pole serveris lubatud või tekkis mingi ajutine viga.",
|
||||
"error_updating_canonical_alias_description": "Jututoa põhiaadressi uuendamisel tekkis viga. See kas pole serveris lubatud või tekkis mingi ajutine viga.",
|
||||
"error_updating_canonical_alias_title": "Viga põhiaadressi uuendamisel",
|
||||
"leave_space": "Lahku kogukonnakeskusest",
|
||||
"leave_space": "Lahku kogukonnast",
|
||||
"local_alias_field_label": "Kohalik aadress",
|
||||
"local_aliases_explainer_room": "Et muud kasutajad saaks seda jututuba leida sinu koduserveri (%(localDomain)s) kaudu, lisa sellele jututoale aadresse",
|
||||
"local_aliases_explainer_space": "Selleks et teised kasutajad saaks seda kogukonda leida oma koduserveri kaudu (%(localDomain)s) seadista talle aadressid",
|
||||
@@ -2333,6 +2345,8 @@
|
||||
"no_aliases_space": "Sellel kogukonnakeskusel puuduvad kohalikud aadressid",
|
||||
"other_section": "Muud",
|
||||
"publish_toggle": "Kas avaldame selle jututoa %(domain)s jututubade loendis?",
|
||||
"publish_warn_invite_only": "Kuna ligipääs siia jututuppa eeldab kutse olemasolu, siis sa ei saa siin sisu avaldada.",
|
||||
"publish_warn_no_canonical_permission": "Siin jututoas sisu avaldamiseks peab sul olema õigus põhiaadressi muutmiseks.",
|
||||
"published_aliases_description": "Aadressi avaldamiseks peab ta esmalt olema määratud kohalikuks aadressiks.",
|
||||
"published_aliases_explainer_room": "Avaldatud aadresse saab igaüks igast serverist kasutada liitumiseks sinu jututoaga.",
|
||||
"published_aliases_explainer_space": "Avaldatud aadresse saab igaüks igast serverist kasutada liitumiseks sinu kogukonnakeskusega.",
|
||||
@@ -2446,7 +2460,7 @@
|
||||
"join_rule_restricted_description_spaces": "Ligipääsuga kogukonnakeskused",
|
||||
"join_rule_restricted_dialog_description": "Vali missugustel kogukonnakeskustel on sellele jututoale ligipääs. Kui kogukonnakeskus on valitud, siis selle liikmed saavad <RoomName/> jututuba leida ja temaga liituda.",
|
||||
"join_rule_restricted_dialog_empty_warning": "Sa oled eemaldamas kõiki kogukonnakeskuseid. Edaspidine ligipääs eeldab kutse olemasolu",
|
||||
"join_rule_restricted_dialog_filter_placeholder": "Otsi kogukonnakeskusi",
|
||||
"join_rule_restricted_dialog_filter_placeholder": "Otsi kogukondi",
|
||||
"join_rule_restricted_dialog_heading_known": "Muud kogukonnad, mida sa tead",
|
||||
"join_rule_restricted_dialog_heading_other": "Sellised muud jututoad ja kogukonnakeskused, mida sa ei pruugi teada",
|
||||
"join_rule_restricted_dialog_heading_room": "Sulle teadaolevad kogukonnakeskused, millesse kuulub see jututuba",
|
||||
@@ -2488,10 +2502,12 @@
|
||||
"error_failed_save": "Kogukonnakeskuse nähtavust ei õnnestunud uuendada",
|
||||
"error_update_guest_access": "Ei õnnestunud selle kogukonnakekuse külaliste ligipääsureegleid uuendada",
|
||||
"error_update_history_visibility": "Ei õnnestunud selle kogukonnakekuse ajaloo loetavust uuendada",
|
||||
"guest_access_explainer": "Külalised võivad liituda kogukonnakeskusega ilma kasutajakontota.",
|
||||
"guest_access_disabled": "Sul pole õigust muuta külaliskasutajate ligipääsuvõimalusi.",
|
||||
"guest_access_explainer": "Külalised võivad liituda kogukonnaga ilma kasutajakontota. Sellest võimalusest on kasu avalike kogukondade puhul",
|
||||
"guest_access_label": "Luba ligipääs külalistele",
|
||||
"history_visibility_anyone_space": "Kogukonna eelvaade",
|
||||
"history_visibility_anyone_space_description": "Luba huvilistel enne liitumist näha kogukonnakeskuse eelvaadet.",
|
||||
"history_visibility_anyone_space_disabled": "Sul pole õigust muuta ajaloo nähtavust.",
|
||||
"history_visibility_anyone_space_recommendation": "Soovitame avalike kogukonnakeskuste puhul.",
|
||||
"title": "Nähtavus"
|
||||
},
|
||||
@@ -2949,6 +2965,7 @@
|
||||
"message_search_indexing": "Parasjagu indekseerin: %(currentRoom)s",
|
||||
"message_search_indexing_idle": "Mitte ainsamagi jututoa sõnumeid hetkel ei indekseerita.",
|
||||
"message_search_intro": "Otsingus kasutamiseks %(brand)s puhverdab turvaliselt kohalikku arvutisse krüptitud sõnumeid:",
|
||||
"message_search_pending_rooms": "Indekseerimist ootavad jututoad: %(pendingRooms)s",
|
||||
"message_search_room_progress": "%(doneRooms)s / %(totalRooms)s",
|
||||
"message_search_section": "Otsing sõnumite seast",
|
||||
"message_search_sleep_time": "Kui kiiresti peaksime sõnumeid alla laadima.",
|
||||
@@ -3236,22 +3253,22 @@
|
||||
"one": "Lisan jututuba...",
|
||||
"other": "Lisan jututubasid... (%(progress)s/%(count)s)"
|
||||
},
|
||||
"space_dropdown_label": "Kogukonnakeskuse valik",
|
||||
"space_dropdown_label": "Kogukonna valik",
|
||||
"space_dropdown_title": "Lisa olemasolevaid jututubasid",
|
||||
"subspace_moved_note": "Kogukondade lisamine asub nüüd uues kohas."
|
||||
},
|
||||
"add_existing_subspace": {
|
||||
"create_button": "Loo uus kogukonnakeskus",
|
||||
"create_prompt": "Kas sa selle asemel soovid lisada uut kogukonnakeskust?",
|
||||
"filter_placeholder": "Otsi kogukonnakeskusi",
|
||||
"space_dropdown_title": "Lisa olemasolev kogukonnakeskus"
|
||||
"filter_placeholder": "Otsi kogukondi",
|
||||
"space_dropdown_title": "Lisa olemasolev kogukond"
|
||||
},
|
||||
"context_menu": {
|
||||
"devtools_open_timeline": "Vaata jututoa ajajoont (arendusvaade)",
|
||||
"explore": "Tutvu jututubadega",
|
||||
"home": "Kogukonnakeskuse avaleht",
|
||||
"home": "Kogukonna avaleht",
|
||||
"manage_and_explore": "Halda ja uuri jututubasid",
|
||||
"options": "Kogukonnakeskus eelistused"
|
||||
"options": "Kogukonna eelistused"
|
||||
},
|
||||
"failed_load_rooms": "Jututubade loendi laadimine ei õnnestunud.",
|
||||
"failed_remove_rooms": "Mõnede jututubade eemaldamine ei õnnestunud. Proovi hiljem uuesti",
|
||||
@@ -4101,6 +4118,7 @@
|
||||
"video_call_using": "Videokõne, kus on kasutusel:",
|
||||
"voice_call": "Häälkõne",
|
||||
"voice_call_incoming": "Saaduv häälkõne",
|
||||
"voice_call_using": "Häälkõne, kasutades:",
|
||||
"you_are_presenting": "Sina esitad"
|
||||
},
|
||||
"web_default_device_name": "%(appName)s: %(browserName)s operatsioonisüsteemis %(osName)s",
|
||||
|
||||
@@ -8,6 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import EventEmitter from "events";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { type JSX } from "react";
|
||||
|
||||
import type React from "react";
|
||||
import { type ComponentClass } from "../@types/common";
|
||||
@@ -17,7 +18,7 @@ export interface IToast<C extends ComponentClass> {
|
||||
// higher priority number will be shown on top of lower priority
|
||||
priority: number;
|
||||
title?: string;
|
||||
icon?: "verification" | "verification_warning" | "key_storage";
|
||||
icon?: JSX.Element;
|
||||
component: C;
|
||||
className?: string;
|
||||
bodyClassName?: string;
|
||||
|
||||
@@ -6,6 +6,9 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { ErrorSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../languageHandler";
|
||||
import dis from "../dispatcher/dispatcher";
|
||||
import DeviceListener from "../DeviceListener";
|
||||
@@ -33,7 +36,7 @@ export const showToast = (deviceIds: Set<string>): void => {
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
key: TOAST_KEY,
|
||||
title: _t("encryption|verification|unverified_sessions_toast_title"),
|
||||
icon: "verification_warning",
|
||||
icon: <ErrorSolidIcon color="var(--cpd-color-icon-critical-primary)" />,
|
||||
props: {
|
||||
description: _t("encryption|verification|unverified_sessions_toast_description"),
|
||||
primaryLabel: _t("action|review"),
|
||||
@@ -7,11 +7,11 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import KeyIcon from "@vector-im/compound-design-tokens/assets/web/icons/key";
|
||||
import React from "react";
|
||||
import { KeyIcon, ErrorSolidIcon, SettingsSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
import { type ComponentType } from "react";
|
||||
import { type Interaction as InteractionEvent } from "@matrix-org/analytics-events/types/typescript/Interaction";
|
||||
|
||||
import type React from "react";
|
||||
import Modal from "../Modal";
|
||||
import { _t } from "../languageHandler";
|
||||
import DeviceListener from "../DeviceListener";
|
||||
@@ -52,9 +52,9 @@ const getIcon = (kind: Kind): IToast<any>["icon"] => {
|
||||
return undefined;
|
||||
case Kind.VERIFY_THIS_SESSION:
|
||||
case Kind.KEY_STORAGE_OUT_OF_SYNC:
|
||||
return "verification_warning";
|
||||
return <ErrorSolidIcon color="var(--cpd-color-icon-critical-primary)" />;
|
||||
case Kind.TURN_ON_KEY_STORAGE:
|
||||
return "key_storage";
|
||||
return <SettingsSolidIcon color="var(--cpd-color-text-primary)" />;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -7,6 +7,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { ErrorSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
|
||||
|
||||
import { _t } from "../languageHandler";
|
||||
import dis from "../dispatcher/dispatcher";
|
||||
@@ -47,7 +48,7 @@ export const showToast = async (deviceId: string): Promise<void> => {
|
||||
ToastStore.sharedInstance().addOrReplaceToast({
|
||||
key: toastKey(deviceId),
|
||||
title: _t("encryption|verification|unverified_session_toast_title"),
|
||||
icon: "verification_warning",
|
||||
icon: <ErrorSolidIcon color="var(--cpd-color-icon-critical-primary)" />,
|
||||
props: {
|
||||
description: device.display_name,
|
||||
detail: <DeviceMetaData device={extendedDevice} />,
|
||||
|
||||