Update dependency prettier to v3 (#12095)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
renovate[bot] 2024-01-02 18:56:39 +00:00 committed by GitHub
parent 773b03e15e
commit a0c8575113
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
110 changed files with 449 additions and 313 deletions

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<title>Test Privacy policy</title>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<title>Test Privacy policy</title>

View File

@ -34,7 +34,7 @@
"prepublishOnly": "yarn build",
"i18n": "matrix-gen-i18n && yarn i18n:sort && yarn i18n:lint",
"i18n:sort": "jq --sort-keys '.' src/i18n/strings/en_EN.json > src/i18n/strings/en_EN.json.tmp && mv src/i18n/strings/en_EN.json.tmp src/i18n/strings/en_EN.json",
"i18n:lint": "matrix-i18n-lint && prettier --loglevel silent --write src/i18n/strings/ --ignore-path /dev/null",
"i18n:lint": "matrix-i18n-lint && prettier --log-level=silent --write src/i18n/strings/ --ignore-path /dev/null",
"i18n:diff": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && yarn i18n && matrix-compare-i18n-files src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
"make-component": "node scripts/make-react-component.js",
"rethemendex": "res/css/rethemendex.sh",
@ -47,7 +47,7 @@
"start:build": "babel src -w -s -d lib --verbose --extensions \".ts,.js\"",
"lint": "yarn lint:types && yarn lint:js && yarn lint:style && yarn lint:workflows",
"lint:js": "eslint --max-warnings 0 src test cypress playwright && prettier --check .",
"lint:js-fix": "eslint --fix src test cypress playwright && prettier --loglevel=warn --write .",
"lint:js-fix": "eslint --fix src test cypress playwright && prettier --log-level=warn --write .",
"lint:types": "tsc --noEmit --jsx react && tsc --noEmit --jsx react -p cypress && tsc --noEmit --jsx react -p playwright",
"lint:style": "stylelint \"res/css/**/*.pcss\"",
"test": "jest",
@ -178,7 +178,6 @@
"@types/node": "^16",
"@types/node-fetch": "^2.6.2",
"@types/pako": "^2.0.0",
"@types/prettier": "^2.7.0",
"@types/qrcode": "^1.3.5",
"@types/react": "17.0.68",
"@types/react-beautiful-dnd": "^13.0.0",
@ -226,7 +225,7 @@
"mocha-junit-reporter": "^2.2.0",
"node-fetch": "2",
"postcss-scss": "^4.0.4",
"prettier": "2.8.8",
"prettier": "3.1.1",
"raw-loader": "^4.0.2",
"rimraf": "^5.0.0",
"stylelint": "^16.0.0",

View File

@ -68,7 +68,11 @@ export const test = base.extend<{
* which finds a message and then constructs a reply to it.
*/
export class MessageBuilder {
constructor(private page: Page, private app: ElementAppPage, private helpers: Helpers) {}
constructor(
private page: Page,
private app: ElementAppPage,
private helpers: Helpers,
) {}
/**
* Map of message content -> event.
@ -334,7 +338,11 @@ export abstract class BotActionSpec {
export type Message = string | MessageContentSpec | BotActionSpec;
class Helpers {
constructor(private page: Page, private app: ElementAppPage, private bot: Bot) {}
constructor(
private page: Page,
private app: ElementAppPage,
private bot: Bot,
) {}
/**
* Use the supplied client to send messages or perform actions as specified by

View File

@ -68,7 +68,11 @@ export class Bot extends Client {
public credentials?: Credentials;
private handlePromise: Promise<JSHandle<ExtendedMatrixClient>>;
constructor(page: Page, private homeserver: HomeserverInstance, private readonly opts: CreateBotOpts) {
constructor(
page: Page,
private homeserver: HomeserverInstance,
private readonly opts: CreateBotOpts,
) {
super(page);
this.opts = Object.assign({}, defaultCreateBotOptions, opts);
}

View File

@ -21,7 +21,10 @@ export class Network {
private isOffline = false;
private readonly setupPromise: Promise<void>;
constructor(private page: Page, private client: Client) {
constructor(
private page: Page,
private client: Client,
) {
this.setupPromise = this.setupRoute();
}

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<title>Test Privacy policy</title>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<title>Test Privacy policy</title>

View File

@ -102,7 +102,10 @@ body {
* `font-feature-settings` allows us to override this behaviour and have the
* correct ligatures and the proper dynamic metric spacing.
*/
font-feature-settings: "kern" 1, "liga" 1, "calt" 1;
font-feature-settings:
"kern" 1,
"liga" 1,
"calt" 1;
background-color: $background;
color: $primary-content;

View File

@ -15,7 +15,7 @@ limitations under the License.
*/
.mx_PollDetailHeader {
// override accessiblebutton style
/* override accessiblebutton style */
font-size: $font-15px !important;
}

View File

@ -60,6 +60,6 @@ limitations under the License.
}
.mx_PollListItemEnded_voteCount {
// 6px to match PollOption padding
/* 6px to match PollOption padding */
margin: $spacing-8 0 0 6px;
}

View File

@ -39,7 +39,7 @@ limitations under the License.
&:checked + span {
color: $accent;
font-weight: var(--cpd-font-weight-semibold);
// underline
/* underline */
box-shadow: 0 1.5px 0 0 currentColor;
}
}

View File

@ -66,8 +66,7 @@ limitations under the License.
}
}
// override checked radio button styling
// to show checkmark instead
/* override checked radio button styling to show checkmark instead */
.mx_StyledRadioButton_checked {
input[type="radio"] + div {
border-width: 2px;

View File

@ -15,6 +15,6 @@ limitations under the License.
*/
.mx_CurrentDeviceSection_deviceDetails {
// align with text of session tile
/* align with text of session tile */
margin-left: 56px;
}

View File

@ -44,7 +44,7 @@ limitations under the License.
}
.mx_DeviceDetailHeading_renameFormInput {
// override field styles
/* override field styles */
margin: 0 0 $spacing-4 0 !important;
}

View File

@ -45,13 +45,13 @@ limitations under the License.
.mx_FilteredDeviceList_headerButton {
flex-shrink: 0;
// override inline button styling
/* override inline button styling */
display: flex !important;
flex-direction: row;
gap: $spacing-8;
}
.mx_FilteredDeviceList_deviceDetails {
// align with text of session tile
/* align with text of session tile */
margin-left: 88px;
}

View File

@ -33,8 +33,7 @@ limitations under the License.
width: 100%;
display: grid;
grid-gap: $spacing-8;
// setting minwidth 0 makes columns definitely sized
// fixing horizontal overflow
/* setting minwidth 0 makes columns definitely sized fixing horizontal overflow */
grid-template-columns: minmax(0, 1fr);
justify-items: flex-start;
margin-top: $spacing-24;

View File

@ -38,7 +38,7 @@ limitations under the License.
flex: 1;
min-width: 40%;
resize: none;
// `!important` is required to bypass global input styles.
/* `!important` is required to bypass global input styles. */
margin: 0 !important;
padding: $spacing-8 9px;
border: none !important;

View File

@ -28,7 +28,9 @@ limitations under the License.
top: -1px;
z-index: 1;
will-change: width;
transition: width 400ms easeinsine 1s, opacity 400ms easeinsine 1s;
transition:
width 400ms easeinsine 1s,
opacity 400ms easeinsine 1s;
width: 99%;
opacity: 1;
}

View File

@ -266,7 +266,7 @@ limitations under the License.
flex-grow: 1;
.mx_SpaceTreeLevel {
// Indent subspaces
/* Indent subspaces */
padding-left: 16px;
}
}
@ -416,7 +416,6 @@ limitations under the License.
font-size: $font-10px;
line-height: $font-12px;
font-weight: var(--cpd-font-weight-semibold);
//margin-left: 8px;
}
}

View File

@ -36,7 +36,8 @@ limitations under the License.
filter: blur(8px);
inset: -9px;
mask:
/* mask to dither resulting combined gradient */ url("$(res)/img/noise.png"),
/* mask to dither resulting combined gradient */
url("$(res)/img/noise.png"),
/* gradient to apply different amounts of dithering to different parts of the gradient */
linear-gradient(
to bottom,

View File

@ -67,7 +67,7 @@ limitations under the License.
.mx_AuthBody_lockIcon {
color: $secondary-content;
height: 32px;
margin-bottom: -3px; // tweak to align all icons on different forgot password steps
margin-bottom: -3px; /* tweak to align all icons on different forgot password steps */
}
.mx_AuthBody_text {
@ -211,9 +211,9 @@ limitations under the License.
}
.mx_AuthBody_emailPromptIcon--shifted {
margin-bottom: -17px; // Prevent layout jump by relative positioning.
margin-bottom: -17px; /* Prevent layout jump by relative positioning. */
position: relative;
top: -17px; // This icon is higher than the other icons. Shift up to prevent icon jumping.
top: -17px; /* This icon is higher than the other icons. Shift up to prevent icon jumping. */
width: 57px;
}

View File

@ -30,9 +30,9 @@ limitations under the License.
.mx_DecoratedRoomAvatar_icon {
position: absolute;
/* the following percentage based sizings are to match the scalable svg mask for the cutout */
bottom: 6.25%; // 2px for a 32x32 avatar
bottom: 6.25%; /* 2px for a 32x32 avatar */
right: 6.25%;
width: 25%; // 8px for a 32x32 avatar
width: 25%; /* 8px for a 32x32 avatar */
height: 25%;
border-radius: 50%;
}

View File

@ -18,7 +18,7 @@ limitations under the License.
.mx_IconizedContextMenu {
min-width: 146px;
width: max-content;
// override default ul styles
/* override default ul styles */
margin: 0;
padding: 0;

View File

@ -38,7 +38,9 @@ limitations under the License.
}
.mx_AddExistingToSpace_section {
margin-right: 12px; // provides space for scrollbar so that checkbox and scrollbar do not collide
margin-right: 12px;
// provides space for scrollbar so that checkbox and scrollbar do not collide
&:not(:first-child) {
margin-top: 24px;

View File

@ -97,7 +97,9 @@ limitations under the License.
.mx_StyledRadioButton {
display: inline-flex;
font-size: 20px;
transition: font-size 1s, border 0.5s;
transition:
font-size 1s,
border 0.5s;
border-radius: 50%;
border: 2px solid transparent;
margin-top: 12px;

View File

@ -58,7 +58,7 @@ limitations under the License.
.mx_Dropdown_option {
height: 35px;
line-height: $font-35px;
// Overwrites the default padding for any li elements
/* Overwrites the default padding for any li elements */
padding: 0 8px;
}

View File

@ -95,7 +95,10 @@ limitations under the License.
}
.mx_Field label {
transition: font-size 0.25s ease-out 0.1s, color 0.25s ease-out 0.1s, transform 0.25s ease-out 0.1s,
transition:
font-size 0.25s ease-out 0.1s,
color 0.25s ease-out 0.1s,
transform 0.25s ease-out 0.1s,
background-color 0.25s ease-out 0.1s;
background-color: transparent;
font: var(--cpd-font-body-md-regular);
@ -117,7 +120,10 @@ limitations under the License.
.mx_Field input:not(:placeholder-shown) + label,
.mx_Field textarea:focus + label,
.mx_Field textarea:not(:placeholder-shown) + label {
transition: font-size 0.25s ease-out 0s, color 0.25s ease-out 0s, transform 0.25s ease-out 0s,
transition:
font-size 0.25s ease-out 0s,
color 0.25s ease-out 0s,
transform 0.25s ease-out 0s,
background-color 0.25s ease-out 0s;
font-size: $font-10px;
transform: translateY(-13px);

View File

@ -32,7 +32,7 @@ limitations under the License.
}
.mx_GenericEventListSummary_toggle {
// We reuse a title cased translation
/* We reuse a title cased translation */
text-transform: lowercase;
}

View File

@ -25,7 +25,9 @@ limitations under the License.
color: $primary-content;
position: absolute;
z-index: 5001;
box-shadow: 0 24px 8px rgb(17 17 26 / 4%), 0 8px 32px rgb(17 17 26 / 4%);
box-shadow:
0 24px 8px rgb(17 17 26 / 4%),
0 8px 32px rgb(17 17 26 / 4%);
}
.mx_InteractiveTooltip.mx_InteractiveTooltip_withChevron_top {

View File

@ -15,7 +15,7 @@ limitations under the License.
*/
.mx_ReplyChain {
margin: 0; // Reset default blockquote margin
margin: 0; /* Reset default blockquote margin */
padding-left: 10px;
border-left: 2px solid var(--username-color);
border-radius: 2px;

View File

@ -24,7 +24,7 @@ limitations under the License.
appearance: none;
width: 100%;
background: none;
font-size: 1em; // set base multiplier for em units applied later
font-size: 1em; /* set base multiplier for em units applied later */
--active-color: $accent;
--selection-dot-size: 2.4em;
@ -114,7 +114,7 @@ limitations under the License.
left: 50%;
transform: translateX(-50%);
font-size: 1em; // set base multiplier for em units applied later
font-size: 1em; /* set base multiplier for em units applied later */
text-align: center;
top: 3em;

View File

@ -158,9 +158,9 @@ limitations under the License.
.mx_BaseCard_close {
flex-shrink: 0;
position: relative;
// @TODO(kerrya) background colours here are not semantic
// these buttons to be replaced with IconButton after secondary variant is added
// https://github.com/vector-im/compound/issues/279
/* @TODO(kerrya) background colours here are not semantic
these buttons to be replaced with IconButton after secondary variant is added
https://github.com/vector-im/compound/issues/279 */
background-color: var(--cpd-color-bg-subtle-secondary);
width: var(--BaseCard_header-button-size);
height: var(--BaseCard_header-button-size);

View File

@ -133,7 +133,7 @@ limitations under the License.
line-height: $font-25px;
flex: 1;
justify-content: center;
// We reverse things here so for accessible technologies the name comes before the e2e shield
/* We reverse things here so for accessible technologies the name comes before the e2e shield */
flex-direction: row-reverse;
span {

View File

@ -355,12 +355,12 @@ limitations under the License.
.mx_EventTile_e2eIcon {
flex-shrink: 0; /* keep it at full size */
// Keep height equal to text for shield alignment, additional 2px because of 1px padding on text
/* Keep height equal to text for shield alignment, additional 2px because of 1px padding on text */
height: calc($font-18px + 2px);
}
.mx_MPollEndBody {
// Prevent the poll end body from exceeding the tile width
/* Prevent the poll end body from exceeding the tile width */
width: 100%;
}
}

View File

@ -488,7 +488,7 @@ $left-gutter: 64px;
.mx_EventTile_e2eIcon {
inset: 0 0 0 44px;
// Keep height equal to text for alignment
/* Keep height equal to text for alignment */
height: var(--EventTile_group_line-line-height);
margin: 1px;
}
@ -701,11 +701,11 @@ $left-gutter: 64px;
background-color: $inlinecode-background-color;
border: 1px solid $inlinecode-border-color;
border-radius: 4px;
// The horizontal padding is added by gfm.css .markdown-body
/* The horizontal padding is added by gfm.css .markdown-body */
padding: $spacing-2 0;
// Avoid inline code blocks to be sticked when on multiple lines
/* Avoid inline code blocks to be sticked when on multiple lines */
line-height: $font-22px;
// Avoid the border to be glued to the other words
/* Avoid the border to be glued to the other words */
margin-right: $spacing-2;
}
@ -792,7 +792,7 @@ $left-gutter: 64px;
.mx_EventTile_spoiler {
cursor: pointer;
// clear button styles
/* clear button styles */
appearance: none;
background: none;
border: none;
@ -852,17 +852,17 @@ $left-gutter: 64px;
}
&.mx_EventTile_e2eIcon_warning::after {
mask-image: url("$(res)/img/e2e/warning.svg"); // (!) in a shield
background-color: $e2e-warning-color; // red
mask-image: url("$(res)/img/e2e/warning.svg"); /* (!) in a shield */
background-color: $e2e-warning-color; /* red */
}
&.mx_EventTile_e2eIcon_normal::after {
mask-image: url("$(res)/img/e2e/normal.svg"); // regular shield
background-color: $header-panel-text-primary-color; // grey
mask-image: url("$(res)/img/e2e/normal.svg"); /* regular shield */
background-color: $header-panel-text-primary-color; /* grey */
}
&.mx_EventTile_e2eIcon_decryption_failure::after {
mask-image: url("$(res)/img/e2e/decryption-failure.svg"); // key in a circle
mask-image: url("$(res)/img/e2e/decryption-failure.svg"); /* key in a circle */
background-color: $secondary-content;
}
}

View File

@ -55,7 +55,9 @@ limitations under the License.
width: 14px;
height: 14px;
will-change: left, top;
transition: left var(--transition-short) ease-out, top var(--transition-standard) ease-out;
transition:
left var(--transition-short) ease-out,
top var(--transition-standard) ease-out;
}
}
}
@ -109,7 +111,7 @@ limitations under the License.
margin: 6px 8px;
align-self: center;
justify-self: center;
flex-shrink: 0; // Long names should not shrink the picture
flex-shrink: 0; /* Long names should not shrink the picture */
}
.mx_ReadReceiptGroup_name {

View File

@ -37,7 +37,9 @@ limitations under the License.
color: $secondary-content;
transition: color ease 0.15s;
gap: 2px;
max-width: 100%; // avoid overflow with wide content
max-width: 100%;
// avoid overflow with wide content
&:hover {
color: $primary-content;
@ -112,7 +114,7 @@ limitations under the License.
grid-template:
"sender message" auto
/ max-content auto;
gap: 4px; // increase spacing
gap: 4px; /* increase spacing */
}
.mx_ReplyTile_sender {
@ -124,18 +126,18 @@ limitations under the License.
.mx_DisambiguatedProfile {
font: var(--cpd-font-body-md-regular);
display: inline-block; // anti-zalgo, with overflow hidden
display: inline-block; /* anti-zalgo, with overflow hidden */
padding: 0;
margin: 0;
// truncate long display names
/* truncate long display names */
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.mx_BaseAvatar {
line-height: 14px; // To match size
line-height: 14px; /* To match size */
}
}
}

View File

@ -28,7 +28,7 @@ limitations under the License.
}
.mx_RoomHeader_infoWrapper {
// unset button styles
/* unset button styles */
background: unset;
border: unset;
flex: 1;

View File

@ -46,8 +46,8 @@ limitations under the License.
p {
margin-top: 0;
margin-bottom: 0;
// this may seem redundant, but we need to handle zero content formatting tags, which occur when we split a
// formatting tag into paragraphs
/* this may seem redundant, but we need to handle zero content formatting tags, which occur when we split a
formatting tag into paragraphs */
min-height: $font-22px;
}

View File

@ -61,11 +61,11 @@ limitations under the License.
font: var(--cpd-font-body-sm-semibold);
}
.mx_UserNotifSettings_gridRowError {
// occupy full row
/* occupy full row */
grid-column: 1/-1;
justify-self: start;
padding-right: 30%;
// collapse half of the grid-gap
/* collapse half of the grid-gap */
margin-top: -$spacing-4;
}

View File

@ -16,7 +16,6 @@ limitations under the License.
.mx_Field.mx_AppearanceUserSettingsTab_checkboxControlledField {
width: 256px;
// matches checkbox box + padding
// to align with checkbox label
/* matches checkbox box + padding to align with checkbox label */
margin-inline-start: calc($font-16px + 10px);
}

View File

@ -24,7 +24,7 @@ limitations under the License.
.mx_SidebarUserSettingsTab_checkbox {
margin-bottom: $spacing-8;
// override checkbox styles˚
/* override checkbox styles */
label {
align-items: flex-start !important;
}

View File

@ -16,7 +16,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 400;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-Regular.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-Regular.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-Regular.woff?v=3.18") format("woff");
}
@font-face {
@ -25,7 +26,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 400;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-Italic.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-Italic.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-Italic.woff?v=3.18") format("woff");
}
@ -35,7 +37,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 500;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-Medium.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-Medium.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-Medium.woff?v=3.18") format("woff");
}
@font-face {
@ -44,7 +47,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 500;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-MediumItalic.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-MediumItalic.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-MediumItalic.woff?v=3.18") format("woff");
}
@ -54,7 +58,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 600;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-SemiBold.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-SemiBold.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-SemiBold.woff?v=3.18") format("woff");
}
@font-face {
@ -63,7 +68,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 600;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-SemiBoldItalic.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-SemiBoldItalic.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-SemiBoldItalic.woff?v=3.18") format("woff");
}
@ -73,7 +79,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 700;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-Bold.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-Bold.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-Bold.woff?v=3.18") format("woff");
}
@font-face {
@ -82,7 +89,8 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-weight: 700;
font-display: swap;
unicode-range: $inter-unicode-range;
src: url("$(res)/fonts/Inter/Inter-BoldItalic.woff2?v=3.18") format("woff2"),
src:
url("$(res)/fonts/Inter/Inter-BoldItalic.woff2?v=3.18") format("woff2"),
url("$(res)/fonts/Inter/Inter-BoldItalic.woff?v=3.18") format("woff");
}
@ -91,7 +99,9 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-family: "Inconsolata";
font-style: normal;
font-weight: 400;
src: local("Inconsolata Regular"), local("Inconsolata-Regular"),
src:
local("Inconsolata Regular"),
local("Inconsolata-Regular"),
url("$(res)/fonts/Inconsolata/QldKNThLqRwH-OJ1UHjlKGlX5qhExfHwNJU.woff2") format("woff2");
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@ -101,7 +111,9 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-style: normal;
font-weight: 400;
font-display: swap;
src: local("Inconsolata Regular"), local("Inconsolata-Regular"),
src:
local("Inconsolata Regular"),
local("Inconsolata-Regular"),
url("$(res)/fonts/Inconsolata/QldKNThLqRwH-OJ1UHjlKGlZ5qhExfHw.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC,
U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
@ -112,7 +124,9 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-style: normal;
font-weight: 700;
font-display: swap;
src: local("Inconsolata Bold"), local("Inconsolata-Bold"),
src:
local("Inconsolata Bold"),
local("Inconsolata-Bold"),
url("$(res)/fonts/Inconsolata/QldXNThLqRwH-OJ1UHjlKGHiw71n5_zaDpwm80E.woff2") format("woff2");
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@ -122,7 +136,9 @@ $inter-unicode-range: U+0000-20e2, U+20e4-23ce, U+23d0-24c1, U+24c3-259f, U+25c2
font-style: normal;
font-weight: 700;
font-display: swap;
src: local("Inconsolata Bold"), local("Inconsolata-Bold"),
src:
local("Inconsolata Bold"),
local("Inconsolata-Bold"),
url("$(res)/fonts/Inconsolata/QldXNThLqRwH-OJ1UHjlKGHiw71p5_zaDpwm.woff2") format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC,
U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;

View File

@ -29,8 +29,8 @@ export type RecursivePartial<T> = {
[P in keyof T]?: T[P] extends (infer U)[]
? RecursivePartial<U>[]
: T[P] extends object
? RecursivePartial<T[P]>
: T[P];
? RecursivePartial<T[P]>
: T[P];
};
export type KeysStartingWith<Input extends object, Str extends string> = {
@ -51,10 +51,10 @@ export type Defaultize<P, D> = P extends any
export type DeepReadonly<T> = T extends (infer R)[]
? DeepReadonlyArray<R>
: T extends Function
? T
: T extends object
? DeepReadonlyObject<T>
: T;
? T
: T extends object
? DeepReadonlyObject<T>
: T;
interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}

View File

@ -23,7 +23,10 @@ import { PosthogAnalytics } from "./PosthogAnalytics";
export class DecryptionFailure {
public readonly ts: number;
public constructor(public readonly failedEventId: string, public readonly errorCode: string) {
public constructor(
public readonly failedEventId: string,
public readonly errorCode: string,
) {
this.ts = Date.now();
}
}
@ -110,7 +113,10 @@ export class DecryptionFailureTracker {
* @param {function?} errorCodeMapFn The function used to map error codes to the
* trackedErrorCode. If not provided, the `.code` of errors will be used.
*/
private constructor(private readonly fn: TrackingFn, private readonly errorCodeMapFn: ErrCodeMapFn) {
private constructor(
private readonly fn: TrackingFn,
private readonly errorCodeMapFn: ErrCodeMapFn,
) {
if (!fn || typeof fn !== "function") {
throw new Error("DecryptionFailureTracker requires tracking function");
}

View File

@ -327,7 +327,10 @@ const topicSanitizeHtmlParams: IExtendedSanitizeOptions = {
};
abstract class BaseHighlighter<T extends React.ReactNode> {
public constructor(public highlightClass: string, public highlightLink?: string) {}
public constructor(
public highlightClass: string,
public highlightLink?: string,
) {}
/**
* Apply the highlights to a section of text

View File

@ -34,7 +34,10 @@ export default class ScalarAuthClient {
private termsInteractionCallback?: TermsInteractionCallback;
private isDefaultManager: boolean;
public constructor(private apiUrl: string, private uiUrl: string) {
public constructor(
private apiUrl: string,
private uiUrl: string,
) {
this.scalarToken = null;
// `undefined` to allow `startTermsFlow` to fallback to a default
// callback if this is unset.

View File

@ -33,7 +33,11 @@ export class Service {
* @param {string} baseUrl The Base URL of the service (ie. before '/_matrix')
* @param {string} accessToken The user's access token for the service
*/
public constructor(public serviceType: SERVICE_TYPES, public baseUrl: string, public accessToken: string) {}
public constructor(
public serviceType: SERVICE_TYPES,
public baseUrl: string,
public accessToken: string,
) {}
}
export interface LocalisedPolicy {

View File

@ -45,7 +45,10 @@ export default class UserActivity {
private lastScreenX = 0;
private lastScreenY = 0;
public constructor(private readonly window: Window, private readonly document: Document) {
public constructor(
private readonly window: Window,
private readonly document: Document,
) {
this.activeNowTimeout = new Timer(CURRENTLY_ACTIVE_THRESHOLD_MS);
this.activeRecentlyTimeout = new Timer(RECENTLY_ACTIVE_THRESHOLD_MS);
}

View File

@ -22,7 +22,11 @@ import { DEFAULT_WAVEFORM } from "./consts";
* A managed playback is a Playback instance that is guided by a PlaybackManager.
*/
export class ManagedPlayback extends Playback {
public constructor(private manager: PlaybackManager, buf: ArrayBuffer, seedWaveform = DEFAULT_WAVEFORM) {
public constructor(
private manager: PlaybackManager,
buf: ArrayBuffer,
seedWaveform = DEFAULT_WAVEFORM,
) {
super(buf, seedWaveform);
}

View File

@ -72,7 +72,10 @@ export class Playback extends EventEmitter implements IDestroyable, PlaybackInte
* @param {number[]} seedWaveform Optional seed waveform to present until the proper waveform
* can be calculated. Contains values between zero and one, inclusive.
*/
public constructor(private buf: ArrayBuffer, seedWaveform = DEFAULT_WAVEFORM) {
public constructor(
private buf: ArrayBuffer,
seedWaveform = DEFAULT_WAVEFORM,
) {
super();
// Capture the file size early as reading the buffer will result in a 0-length buffer left behind
this.fileSize = this.buf.byteLength;

View File

@ -37,7 +37,10 @@ export class VoiceMessageRecording implements IDestroyable {
private buffer = new Uint8Array(0); // use this.audioBuffer to access
private playback?: Playback;
public constructor(private matrixClient: MatrixClient, private voiceRecording: VoiceRecording) {
public constructor(
private matrixClient: MatrixClient,
private voiceRecording: VoiceRecording,
) {
this.voiceRecording.onDataAvailable = this.onDataAvailable;
}

View File

@ -28,7 +28,10 @@ import { TimelineRenderingType } from "../contexts/RoomContext";
const AT_ROOM_REGEX = /@\S*/g;
export default class NotifProvider extends AutocompleteProvider {
public constructor(public room: Room, renderingType?: TimelineRenderingType) {
public constructor(
public room: Room,
renderingType?: TimelineRenderingType,
) {
super({ commandRegex: AT_ROOM_REGEX, renderingType });
}

View File

@ -57,7 +57,10 @@ function matcherObject(
export default class RoomProvider extends AutocompleteProvider {
protected matcher: QueryMatcher<ReturnType<typeof matcherObject>>;
public constructor(private readonly room: Room, renderingType?: TimelineRenderingType) {
public constructor(
private readonly room: Room,
renderingType?: TimelineRenderingType,
) {
super({ commandRegex: ROOM_REGEX, renderingType });
this.matcher = new QueryMatcher<ReturnType<typeof matcherObject>>([], {
keys: ["displayedAlias", "matchName"],

View File

@ -204,7 +204,8 @@ const ThreadPanel: React.FC<IProps> = ({ roomId, onClose, permalinkCreator }) =>
useEffect(() => {
const room = mxClient.getRoom(roomId);
room?.createThreadsTimelineSets()
room
?.createThreadsTimelineSets()
.then(() => room.fetchRoomThreads())
.then(() => {
setFilterOption(ThreadFilterType.All);

View File

@ -362,32 +362,31 @@ export const AddExistingToSpace: React.FC<IAddExistingToSpaceProps> = ({
const defaultRendererFactory =
(title: TranslationKey): Renderer =>
(rooms, selectedToAdd, { scrollTop, height }, onChange) =>
(
<div className="mx_AddExistingToSpace_section">
<h3>{_t(title)}</h3>
<LazyRenderList
itemHeight={ROW_HEIGHT}
items={rooms}
scrollTop={scrollTop}
height={height}
renderItem={(room) => (
<Entry
key={room.roomId}
room={room}
checked={selectedToAdd.has(room)}
onChange={
onChange
? (checked: boolean) => {
onChange(checked, room);
}
: undefined
}
/>
)}
/>
</div>
);
(rooms, selectedToAdd, { scrollTop, height }, onChange) => (
<div className="mx_AddExistingToSpace_section">
<h3>{_t(title)}</h3>
<LazyRenderList
itemHeight={ROW_HEIGHT}
items={rooms}
scrollTop={scrollTop}
height={height}
renderItem={(room) => (
<Entry
key={room.roomId}
room={room}
checked={selectedToAdd.has(room)}
onChange={
onChange
? (checked: boolean) => {
onChange(checked, room);
}
: undefined
}
/>
)}
/>
</div>
);
export const defaultRoomsRenderer = defaultRendererFactory(_td("common|rooms"));
export const defaultSpacesRenderer = defaultRendererFactory(_td("common|spaces"));

View File

@ -252,12 +252,15 @@ const findVisibleRoomMembers = (visibleRooms: Room[], cli: MatrixClient, filterD
return Object.values(
visibleRooms
.filter((room) => !filterDMs || !DMRoomMap.shared().getUserIdForRoomId(room.roomId))
.reduce((members, room) => {
for (const member of room.getJoinedMembers()) {
members[member.userId] = member;
}
return members;
}, {} as Record<string, RoomMember>),
.reduce(
(members, room) => {
for (const member of room.getJoinedMembers()) {
members[member.userId] = member;
}
return members;
},
{} as Record<string, RoomMember>,
),
).filter((it) => it.userId !== cli.getUserId());
};

View File

@ -17,7 +17,11 @@ limitations under the License.
import React from "react";
class ItemRange {
public constructor(public topCount: number, public renderCount: number, public bottomCount: number) {}
public constructor(
public topCount: number,
public renderCount: number,
public bottomCount: number,
) {}
public contains(range: ItemRange): boolean {
// don't contain empty ranges

View File

@ -61,7 +61,8 @@ export default class SpellCheckLanguagesDropdown extends React.Component<
const plaf = PlatformPeg.get();
if (plaf) {
const languageNames = new Intl.DisplayNames([getUserLanguage()], { type: "language", style: "short" });
plaf.getAvailableSpellCheckLanguages()
plaf
.getAvailableSpellCheckLanguages()
?.then((languages) => {
languages.sort(function (a, b) {
if (a < b) return -1;

View File

@ -366,7 +366,11 @@ export default class MPollBody extends React.Component<IBodyProps, IState> {
}
}
export class UserVote {
public constructor(public readonly ts: number, public readonly sender: string, public readonly answers: string[]) {}
public constructor(
public readonly ts: number,
public readonly sender: string,
public readonly answers: string[],
) {}
}
function userResponseFromPollResponseEvent(event: MatrixEvent): UserVote {

View File

@ -650,8 +650,8 @@ export const RoomKickButton = ({
? _t("user_info|disinvite_button_space")
: _t("user_info|kick_button_space")
: member.membership === "invite"
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room"),
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room"),
title:
member.membership === "invite"
? _t("user_info|disinvite_button_room_name", { roomName: room.name })
@ -721,8 +721,8 @@ export const RoomKickButton = ({
? _t("user_info|disinvite_button_space")
: _t("user_info|kick_button_space")
: member.membership === "invite"
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room");
? _t("user_info|disinvite_button_room")
: _t("user_info|kick_button_room");
return (
<AccessibleButton
@ -782,8 +782,8 @@ export const BanToggleButton = ({
? _t("user_info|unban_button_space")
: _t("user_info|ban_button_space")
: isBanned
? _t("user_info|unban_button_room")
: _t("user_info|ban_button_room"),
? _t("user_info|unban_button_room")
: _t("user_info|ban_button_room"),
title: isBanned
? _t("user_info|unban_room_confirm_title", { roomName: room.name })
: _t("user_info|ban_room_confirm_title", { roomName: room.name }),

View File

@ -101,9 +101,8 @@ export default class CrossSigningPanel extends React.PureComponent<{}, IState> {
const masterPrivateKeyCached = crossSigningStatus.privateKeysCachedLocally.masterKey;
const selfSigningPrivateKeyCached = crossSigningStatus.privateKeysCachedLocally.selfSigningKey;
const userSigningPrivateKeyCached = crossSigningStatus.privateKeysCachedLocally.userSigningKey;
const homeserverSupportsCrossSigning = await cli.doesServerSupportUnstableFeature(
"org.matrix.e2e_cross_signing",
);
const homeserverSupportsCrossSigning =
await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing");
const crossSigningReady = await crypto.isCrossSigningReady();
this.setState({

View File

@ -194,13 +194,14 @@ const SessionManagerTab: React.FC = () => {
setFilter(filter);
clearTimeout(scrollIntoViewTimeoutRef.current);
// wait a tick for the filtered section to rerender with different height
scrollIntoViewTimeoutRef.current = window.setTimeout(() =>
filteredDeviceListRef.current?.scrollIntoView({
// align element to top of scrollbox
block: "start",
inline: "nearest",
behavior: "smooth",
}),
scrollIntoViewTimeoutRef.current = window.setTimeout(
() =>
filteredDeviceListRef.current?.scrollIntoView({
// align element to top of scrollbox
block: "start",
inline: "nearest",
behavior: "smooth",
}),
);
};

View File

@ -36,7 +36,10 @@ export class Media {
private client: MatrixClient;
// Per above, this constructor signature can be whatever is helpful for you.
public constructor(private prepared: IPreparedMedia, client?: MatrixClient) {
public constructor(
private prepared: IPreparedMedia,
client?: MatrixClient,
) {
this.client = client ?? MatrixClientPeg.safeGet();
if (!this.client) {
throw new Error("No possible MatrixClient for media resolution. Please provide one or log in.");

View File

@ -57,7 +57,11 @@ export default class EditorModel {
private autoCompletePartCount = 0;
private transformCallback: TransformCallback | null = null;
public constructor(parts: Part[], partCreator: PartCreator, private updateCallback: UpdateCallback | null = null) {
public constructor(
parts: Part[],
partCreator: PartCreator,
private updateCallback: UpdateCallback | null = null,
) {
this._parts = parts;
this._partCreator = partCreator;
this.transformCallback = null;

View File

@ -18,7 +18,10 @@ import EditorModel from "./model";
import DocumentPosition from "./position";
export default class DocumentOffset {
public constructor(public offset: number, public readonly atNodeEnd: boolean) {}
public constructor(
public offset: number,
public readonly atNodeEnd: boolean,
) {}
public asPosition(model: EditorModel): DocumentPosition {
return model.positionForOffset(this.offset, this.atNodeEnd);

View File

@ -254,7 +254,10 @@ export class PlainPart extends PlainBasePart implements IBasePart {
}
export abstract class PillPart extends BasePart implements IPillPart {
public constructor(public resourceId: string, label: string) {
public constructor(
public resourceId: string,
label: string,
) {
super(label);
}
@ -414,7 +417,11 @@ export class EmojiPart extends BasePart implements IBasePart {
}
class RoomPillPart extends PillPart {
public constructor(resourceId: string, label: string, private room?: Room) {
public constructor(
resourceId: string,
label: string,
private room?: Room,
) {
super(resourceId, label);
}
@ -455,7 +462,11 @@ class AtRoomPillPart extends RoomPillPart {
}
class UserPillPart extends PillPart {
public constructor(userId: string, displayName: string, private member?: RoomMember) {
public constructor(
userId: string,
displayName: string,
private member?: RoomMember,
) {
super(userId, displayName);
}
@ -490,7 +501,10 @@ class UserPillPart extends PillPart {
}
class PillCandidatePart extends PlainBasePart implements IPillCandidatePart {
public constructor(text: string, private autoCompleteCreator: IAutocompleteCreator) {
public constructor(
text: string,
private autoCompleteCreator: IAutocompleteCreator,
) {
super(text);
}

View File

@ -27,7 +27,10 @@ type Callback = (part: Part, startIdx: number, endIdx: number) => void;
export type Predicate = (index: number, offset: number, part: Part) => boolean;
export default class DocumentPosition implements IPosition {
public constructor(public readonly index: number, public readonly offset: number) {}
public constructor(
public readonly index: number,
public readonly offset: number,
) {}
public compare(otherPos: DocumentPosition): number {
if (this.index === otherPos.index) {

View File

@ -28,7 +28,11 @@ export default class Range {
private _lastStart: DocumentPosition;
private _initializedEmpty: boolean;
public constructor(public readonly model: EditorModel, positionA: DocumentPosition, positionB = positionA) {
public constructor(
public readonly model: EditorModel,
positionA: DocumentPosition,
positionB = positionA,
) {
const bIsLarger = positionA.compare(positionB) < 0;
this._start = bIsLarger ? positionA : positionB;
this._end = bIsLarger ? positionB : positionA;

View File

@ -570,10 +570,13 @@ export class JitsiCall extends Call {
// Tell others that we're connected, by adding our device to room state
await this.addOurDevice();
// Re-add this device every so often so our video member event doesn't become stale
this.resendDevicesTimer = window.setInterval(async (): Promise<void> => {
logger.log(`Resending video member event for ${this.roomId}`);
await this.addOurDevice();
}, (this.STUCK_DEVICE_TIMEOUT_MS * 3) / 4);
this.resendDevicesTimer = window.setInterval(
async (): Promise<void> => {
logger.log(`Resending video member event for ${this.roomId}`);
await this.addOurDevice();
},
(this.STUCK_DEVICE_TIMEOUT_MS * 3) / 4,
);
} else if (state === ConnectionState.Disconnected && isConnected(prevState)) {
this.updateParticipants(); // Local echo
@ -717,7 +720,11 @@ export class ElementCall extends Call {
this.widget.url = ElementCall.generateWidgetUrl(this.client, this.roomId).toString();
}
private constructor(public session: MatrixRTCSession, widget: IApp, client: MatrixClient) {
private constructor(
public session: MatrixRTCSession,
widget: IApp,
client: MatrixClient,
) {
super(widget, client);
this.session.on(MatrixRTCSessionEvent.MembershipsChanged, this.onMembershipChanged);

View File

@ -138,7 +138,10 @@ export class IndexedDBLogStore {
private flushPromise: Promise<void> | null = null;
private flushAgainPromise: Promise<void> | null = null;
public constructor(private indexedDB: IDBFactory, private logger: ConsoleLogger) {
public constructor(
private indexedDB: IDBFactory,
private logger: ConsoleLogger,
) {
this.id = "instance-" + randomString(16);
}

View File

@ -22,7 +22,10 @@ import SettingController from "./SettingController";
* When the value changes, call a setter function on the matrix client with the new value
*/
export default class PushToMatrixClientController extends SettingController {
public constructor(private setter: Function, private inverse: boolean) {
public constructor(
private setter: Function,
private inverse: boolean,
) {
super();
}

View File

@ -26,7 +26,10 @@ import SettingsStore from "../SettingsStore";
* Settings using this controller are assumed to return `false` when disabled.
*/
export default class UIFeatureController extends SettingController {
public constructor(private uiFeatureName: string, private forcedValue = false) {
public constructor(
private uiFeatureName: string,
private forcedValue = false,
) {
super();
}

View File

@ -27,7 +27,10 @@ export default class DefaultSettingsHandler extends SettingsHandler {
* @param {object} defaults The default setting values, keyed by setting name.
* @param {object} invertedDefaults The default inverted setting values, keyed by setting name.
*/
public constructor(private defaults: Record<string, any>, private invertedDefaults: Record<string, any>) {
public constructor(
private defaults: Record<string, any>,
private invertedDefaults: Record<string, any>,
) {
super();
}

View File

@ -31,7 +31,10 @@ export default class DeviceSettingsHandler extends AbstractLocalStorageSettingsH
* @param {string[]} featureNames The names of known features.
* @param {WatchManager} watchers The watch manager to notify updates to
*/
public constructor(private featureNames: string[], public readonly watchers: WatchManager) {
public constructor(
private featureNames: string[],
public readonly watchers: WatchManager,
) {
super();
}

View File

@ -35,7 +35,10 @@ export default class LocalEchoWrapper extends SettingsHandler {
* @param {SettingsHandler} handler The handler to wrap
* @param {SettingLevel} level The level to notify updates at
*/
public constructor(private readonly handler: SettingsHandler, private readonly level: SettingLevel) {
public constructor(
private readonly handler: SettingsHandler,
private readonly level: SettingLevel,
) {
super();
}

View File

@ -52,7 +52,10 @@ export abstract class AsyncStore<T extends Object> extends EventEmitter {
* @param {Dispatcher<ActionPayload>} dispatcher The dispatcher to rely upon.
* @param {T} initialState The initial state for the store.
*/
protected constructor(private dispatcher: MatrixDispatcher, initialState: T = <T>{}) {
protected constructor(
private dispatcher: MatrixDispatcher,
initialState: T = <T>{},
) {
super();
this.dispatcherRef = dispatcher.register(this.onDispatch.bind(this));

View File

@ -160,7 +160,10 @@ export class RoomViewStore extends EventEmitter {
private dis?: MatrixDispatcher;
private dispatchToken?: string;
public constructor(dis: MatrixDispatcher, private readonly stores: SdkContextClass) {
public constructor(
dis: MatrixDispatcher,
private readonly stores: SdkContextClass,
) {
super();
this.resetDispatcher(dis);
this.stores.voiceBroadcastRecordingsStore.addListener(
@ -319,14 +322,14 @@ export class RoomViewStore extends EventEmitter {
numMembers > 1000
? "MoreThanAThousand"
: numMembers > 100
? "OneHundredAndOneToAThousand"
: numMembers > 10
? "ElevenToOneHundred"
: numMembers > 2
? "ThreeToTen"
: numMembers > 1
? "Two"
: "One";
? "OneHundredAndOneToAThousand"
: numMembers > 10
? "ElevenToOneHundred"
: numMembers > 2
? "ThreeToTen"
: numMembers > 1
? "Two"
: "One";
this.stores.posthogAnalytics.trackEvent<JoinedRoomEvent>({
eventName: "JoinedRoom",

View File

@ -30,7 +30,10 @@ export class EchoTransaction extends Whenable<TransactionStatus> {
public readonly startTime = new Date();
public constructor(public readonly auditName: string, public runFn: RunFn) {
public constructor(
public readonly auditName: string,
public runFn: RunFn,
) {
super();
}

View File

@ -30,7 +30,10 @@ export abstract class GenericEchoChamber<C extends EchoContext, K, V> extends Ev
private cache = new Map<K, { txn: EchoTransaction; val: V }>();
protected matrixClient: MatrixClient | null = null;
protected constructor(public readonly context: C, private lookupFn: (key: K) => V) {
protected constructor(
public readonly context: C,
private lookupFn: (key: K) => V,
) {
super();
}

View File

@ -27,7 +27,10 @@ export class ListNotificationState extends NotificationState {
private rooms: Room[] = [];
private states: { [roomId: string]: RoomNotificationState } = {};
public constructor(private byTileCount = false, private getRoomFn: FetchRoomFn) {
public constructor(
private byTileCount = false,
private getRoomFn: FetchRoomFn,
) {
super();
}

View File

@ -80,7 +80,10 @@ export class SlidingRoomListStoreClass extends AsyncStoreWithClient<IState> impl
private counts: Record<TagID, number> = {};
private stickyRoomId: Optional<string>;
public constructor(dis: MatrixDispatcher, private readonly context: SdkContextClass) {
public constructor(
dis: MatrixDispatcher,
private readonly context: SdkContextClass,
) {
super(dis);
this.setMaxListeners(20); // RoomList + LeftPanel + 8xRoomSubList + spares
}

View File

@ -30,7 +30,10 @@ export abstract class OrderingAlgorithm {
// set by setSortAlgorithm() in ctor
protected sortingAlgorithm!: SortAlgorithm;
protected constructor(protected tagId: TagID, initialSortingAlgorithm: SortAlgorithm) {
protected constructor(
protected tagId: TagID,
initialSortingAlgorithm: SortAlgorithm,
) {
// noinspection JSIgnoredPromiseFromCall
this.setSortAlgorithm(initialSortingAlgorithm); // we use the setter for validation
}

View File

@ -202,15 +202,18 @@ export default class DMRoomMap {
public getUniqueRoomsWithIndividuals(): { [userId: string]: Room } {
if (!this.roomToUser) return {}; // No rooms means no map.
// map roomToUser to valid rooms with two participants
return Object.keys(this.roomToUser).reduce((acc, roomId: string) => {
const userId = this.getUserIdForRoomId(roomId);
const room = this.matrixClient.getRoom(roomId);
const hasTwoMembers = room?.getInvitedAndJoinedMemberCount() === 2;
if (userId && room && hasTwoMembers) {
acc[userId] = room;
}
return acc;
}, {} as Record<string, Room>);
return Object.keys(this.roomToUser).reduce(
(acc, roomId: string) => {
const userId = this.getUserIdForRoomId(roomId);
const room = this.matrixClient.getRoom(roomId);
const hasTwoMembers = room?.getInvitedAndJoinedMemberCount() === 2;
if (userId && room && hasTwoMembers) {
acc[userId] = room;
}
return acc;
},
{} as Record<string, Room>,
);
}
/**

View File

@ -28,7 +28,10 @@ export class FixedRollingArray<T> {
* @param width The width of the array.
* @param padValue The value to seed the array with.
*/
public constructor(private width: number, padValue: T) {
public constructor(
private width: number,
padValue: T,
) {
this.samples = arraySeed(padValue, this.width);
}

View File

@ -30,7 +30,10 @@ export class MarkedExecution {
* @param {Function} onMarkCallback A function that is called when a new mark is made. Not
* called if a mark is already flagged.
*/
public constructor(private fn: () => void, private onMarkCallback?: () => void) {}
public constructor(
private fn: () => void,
private onMarkCallback?: () => void,
) {}
/**
* Resets the mark without calling the function.

View File

@ -76,8 +76,8 @@ export async function upgradeRoom(
if (updateSpaces) {
parentsToRelink = Array.from(SpaceStore.instance.getKnownParents(room.roomId))
.map((roomId) => cli.getRoom(roomId))
.filter((parent) =>
parent?.currentState.maySendStateEvent(EventType.SpaceChild, cli.getUserId()!),
.filter(
(parent) => parent?.currentState.maySendStateEvent(EventType.SpaceChild, cli.getUserId()!),
) as Room[];
}

View File

@ -79,7 +79,10 @@ export class Singleflight {
}
class SingleflightContext {
public constructor(private instance: Object, private key: string) {}
public constructor(
private instance: Object,
private key: string,
) {}
/**
* Forget this particular instance and key combination, discarding the result.

View File

@ -32,8 +32,19 @@ limitations under the License.
bottom: 30px;
font-size: 17px;
padding: 6px 16px;
font-family: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu,
roboto, noto, arial, sans-serif;
font-family:
-apple-system,
BlinkMacSystemFont,
avenir next,
avenir,
segoe ui,
helvetica neue,
helvetica,
Ubuntu,
roboto,
noto,
arial,
sans-serif;
font-weight: 400;
line-height: 1.43;
border-radius: 4px;
@ -42,8 +53,12 @@ limitations under the License.
#snackbar.mx_show {
visibility: visible;
-webkit-animation: mx_snackbar_fadein 0.5s, mx_snackbar_fadeout 0.5s 2.5s;
animation: mx_snackbar_fadein 0.5s, mx_snackbar_fadeout 0.5s 2.5s;
-webkit-animation:
mx_snackbar_fadein 0.5s,
mx_snackbar_fadeout 0.5s 2.5s;
animation:
mx_snackbar_fadein 0.5s,
mx_snackbar_fadeout 0.5s 2.5s;
}
a.mx_reply_anchor {

View File

@ -93,7 +93,11 @@ export class RoomPermalinkCreator {
// Some of the tests done by this class are relatively expensive, so normally
// throttled to not happen on every update. Pass false as the shouldThrottle
// param to disable this behaviour, eg. for tests.
public constructor(private room: Room | null, roomId: string | null = null, shouldThrottle = true) {
public constructor(
private room: Room | null,
roomId: string | null = null,
shouldThrottle = true,
) {
this.roomId = room ? room.roomId : roomId!;
if (!this.roomId) {

View File

@ -63,7 +63,10 @@ export class VoiceBroadcastRecorder
// current chunk length in seconds
private currentChunkLength = 0;
public constructor(private voiceRecording: VoiceRecording, public readonly targetChunkLength: number) {
public constructor(
private voiceRecording: VoiceRecording,
public readonly targetChunkLength: number,
) {
super();
this.voiceRecording.onDataAvailable = this.onDataAvailable;
}

View File

@ -22,7 +22,10 @@ export class WidgetType {
public static readonly CUSTOM = new WidgetType("m.custom", "m.custom");
public static readonly CALL = new WidgetType("m.call", "m.call");
public constructor(public readonly preferred: string, public readonly legacy: string) {}
public constructor(
public readonly preferred: string,
public readonly legacy: string,
) {}
public matches(type: string): boolean {
return type === this.preferred || type === this.legacy;

View File

@ -39,7 +39,7 @@ const getFakePosthog = (): PostHog =>
get_user_state: jest.fn(),
},
identifyUser: jest.fn(),
} as unknown as PostHog);
}) as unknown as PostHog;
interface ITestEvent extends IPosthogEvent {
eventName: "JestTestEvents";
@ -288,7 +288,7 @@ describe("PosthogAnalytics", () => {
id: "0000000",
pseudonymousAnalyticsOptIn: true,
}),
} as unknown as MatrixClient);
}) as unknown as MatrixClient;
beforeEach(async () => {
SdkConfig.put({

View File

@ -43,7 +43,7 @@ describe("AutocompleteInput", () => {
const constructMockProvider = (data: ICompletion[]) =>
({
getCompletions: jest.fn().mockImplementation(async () => data),
} as unknown as AutocompleteProvider);
}) as unknown as AutocompleteProvider;
beforeEach(() => {
TestUtils.stubClient();

View File

@ -31,7 +31,7 @@ describe("<ContextMenu />", () => {
({
windowWidth: windowSize,
windowHeight: windowSize,
} as unknown as UIStore),
}) as unknown as UIStore,
);
window.Element.prototype.getBoundingClientRect = jest.fn().mockReturnValue({
width: menuSize,

View File

@ -480,7 +480,7 @@ describe("MessageContextMenu", () => {
it("shows view in room button when the event is a thread root", () => {
const eventContent = createMessageEventContent("hello");
const mxEvent = new MatrixEvent({ type: EventType.RoomMessage, content: eventContent });
mxEvent.getThread = () => ({ rootEvent: mxEvent } as Thread);
mxEvent.getThread = () => ({ rootEvent: mxEvent }) as Thread;
const props = {
rightClick: true,
};

View File

@ -69,7 +69,7 @@ describe("<SpaceContextMenu />", () => {
client: mockClient,
getMyMembership: jest.fn(),
...props,
} as unknown as Room);
}) as unknown as Room;
const defaultProps = {
space: makeMockSpace(),

View File

@ -18,7 +18,6 @@ import React from "react";
import { MatrixClient, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { mocked, MockedObject } from "jest-mock";
import { render } from "@testing-library/react";
import * as prettier from "prettier";
import { getMockClientWithEventEmitter, mkEvent, mkMessage, mkStubRoom } from "../../../test-utils";
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
@ -225,11 +224,7 @@ describe("<TextualBody />", () => {
const ev = mkRoomTextMessage(`Visit https://matrix.to/#/${room1Id}/${defaultEvent.getId()}`);
const { container } = getComponent({ mxEvent: ev });
const content = container.querySelector(".mx_EventTile_body");
expect(
prettier.format(content.innerHTML.replace(defaultEvent.getId(), "%event_id%"), {
parser: "html",
}),
).toMatchSnapshot();
expect(content.innerHTML.replace(defaultEvent.getId(), "%event_id%")).toMatchSnapshot();
});
it("should pillify a permalink to an unknown message in the same room with the label »Message«", () => {
@ -243,11 +238,7 @@ describe("<TextualBody />", () => {
const ev = mkRoomTextMessage(`Visit https://matrix.to/#/${room2Id}/${defaultEvent.getId()}`);
const { container } = getComponent({ mxEvent: ev });
const content = container.querySelector(".mx_EventTile_body");
expect(
prettier.format(content.innerHTML.replace(defaultEvent.getId(), "%event_id%"), {
parser: "html",
}),
).toMatchSnapshot();
expect(content.innerHTML.replace(defaultEvent.getId(), "%event_id%")).toMatchSnapshot();
});
});

View File

@ -296,71 +296,9 @@ exports[`<TextualBody /> renders formatted m.text correctly pills get injected c
</span>
`;
exports[`<TextualBody /> renders plain-text m.text correctly should pillify a permalink to a message in the same room with the label »Message from Member« 1`] = `
"Visit
<span
><bdi
><a
class="mx_Pill mx_EventPill"
href="https://matrix.to/#/!room1:example.com/%event_id%"
data-state="closed"
><span
aria-label="Profile picture"
aria-hidden="true"
data-testid="avatar-img"
data-type="round"
data-color="8"
class="_avatar_1o69u_17 mx_BaseAvatar"
style="--cpd-avatar-size: 16px"
><img
loading="lazy"
alt=""
src="mxc://avatar.url/image.png"
crossorigin="anonymous"
referrerpolicy="no-referrer"
class="_image_1o69u_49"
data-type="round"
width="16px"
height="16px" /></span
><span class="mx_Pill_text">Message from Member</span></a
></bdi
></span
>
"
`;
exports[`<TextualBody /> renders plain-text m.text correctly should pillify a permalink to a message in the same room with the label »Message from Member« 1`] = `"Visit <span><bdi><a class="mx_Pill mx_EventPill" href="https://matrix.to/#/!room1:example.com/%event_id%" data-state="closed"><span aria-label="Profile picture" aria-hidden="true" data-testid="avatar-img" data-type="round" data-color="8" class="_avatar_1o69u_17 mx_BaseAvatar" style="--cpd-avatar-size: 16px;"><img loading="lazy" alt="" src="mxc://avatar.url/image.png" crossorigin="anonymous" referrerpolicy="no-referrer" class="_image_1o69u_49" data-type="round" width="16px" height="16px"></span><span class="mx_Pill_text">Message from Member</span></a></bdi></span>"`;
exports[`<TextualBody /> renders plain-text m.text correctly should pillify a permalink to an event in another room with the label »Message in Room 2« 1`] = `
"Visit
<span
><bdi
><a
class="mx_Pill mx_EventPill"
href="https://matrix.to/#/!room2:example.com/%event_id%"
data-state="closed"
><span
aria-label="Avatar"
aria-hidden="true"
data-testid="avatar-img"
data-type="round"
data-color="4"
class="_avatar_1o69u_17 mx_BaseAvatar"
style="--cpd-avatar-size: 16px"
><img
loading="lazy"
alt=""
src="mxc://avatar.url/room.png"
crossorigin="anonymous"
referrerpolicy="no-referrer"
class="_image_1o69u_49"
data-type="round"
width="16px"
height="16px" /></span
><span class="mx_Pill_text">Message in Room 2</span></a
></bdi
></span
>
"
`;
exports[`<TextualBody /> renders plain-text m.text correctly should pillify a permalink to an event in another room with the label »Message in Room 2« 1`] = `"Visit <span><bdi><a class="mx_Pill mx_EventPill" href="https://matrix.to/#/!room2:example.com/%event_id%" data-state="closed"><span aria-label="Avatar" aria-hidden="true" data-testid="avatar-img" data-type="round" data-color="4" class="_avatar_1o69u_17 mx_BaseAvatar" style="--cpd-avatar-size: 16px;"><img loading="lazy" alt="" src="mxc://avatar.url/room.png" crossorigin="anonymous" referrerpolicy="no-referrer" class="_image_1o69u_49" data-type="round" width="16px" height="16px"></span><span class="mx_Pill_text">Message in Room 2</span></a></bdi></span>"`;
exports[`<TextualBody /> renders plain-text m.text correctly should pillify a permalink to an unknown message in the same room with the label »Message« 1`] = `
<span

Some files were not shown because too many files have changed in this diff Show More