Update dependency @vector-im/compound-web to v0.9.4 (#11891)

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] 2023-12-14 11:10:01 +00:00 committed by GitHub
parent 4f19356492
commit 6669cb70e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 288 additions and 86 deletions

View file

@ -76,7 +76,7 @@
"@sentry/browser": "^7.0.0", "@sentry/browser": "^7.0.0",
"@testing-library/react-hooks": "^8.0.1", "@testing-library/react-hooks": "^8.0.1",
"@vector-im/compound-design-tokens": "^0.1.0", "@vector-im/compound-design-tokens": "^0.1.0",
"@vector-im/compound-web": "0.8.1", "@vector-im/compound-web": "0.9.4",
"@zxcvbn-ts/core": "^3.0.4", "@zxcvbn-ts/core": "^3.0.4",
"@zxcvbn-ts/language-common": "^3.0.4", "@zxcvbn-ts/language-common": "^3.0.4",
"@zxcvbn-ts/language-en": "^3.0.2", "@zxcvbn-ts/language-en": "^3.0.2",

View file

@ -91,7 +91,7 @@ export default class PosthogTrackers {
this.trackPage(); this.trackPage();
} }
public static trackInteraction(name: InteractionName, ev?: SyntheticEvent, index?: number): void { public static trackInteraction(name: InteractionName, ev?: SyntheticEvent | Event, index?: number): void {
let interactionType: InteractionEvent["interactionType"]; let interactionType: InteractionEvent["interactionType"];
if (ev?.type === "click") { if (ev?.type === "click") {
interactionType = "Pointer"; interactionType = "Pointer";

View file

@ -39,7 +39,7 @@ import { useIsEncrypted } from "../../../hooks/useIsEncrypted";
import BaseCard, { Group } from "./BaseCard"; import BaseCard, { Group } from "./BaseCard";
import { _t } from "../../../languageHandler"; import { _t } from "../../../languageHandler";
import RoomAvatar from "../avatars/RoomAvatar"; import RoomAvatar from "../avatars/RoomAvatar";
import AccessibleButton, { ButtonEvent } from "../elements/AccessibleButton"; import AccessibleButton from "../elements/AccessibleButton";
import defaultDispatcher from "../../../dispatcher/dispatcher"; import defaultDispatcher from "../../../dispatcher/dispatcher";
import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases"; import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases";
import Modal from "../../../Modal"; import Modal from "../../../Modal";
@ -268,7 +268,7 @@ const onRoomPinsClick = (): void => {
RightPanelStore.instance.pushCard({ phase: RightPanelPhases.PinnedMessages }, true); RightPanelStore.instance.pushCard({ phase: RightPanelPhases.PinnedMessages }, true);
}; };
const onRoomSettingsClick = (ev: ButtonEvent): void => { const onRoomSettingsClick = (ev: Event): void => {
defaultDispatcher.dispatch({ action: "open_room_settings" }); defaultDispatcher.dispatch({ action: "open_room_settings" });
PosthogTrackers.trackInteraction("WebRightPanelRoomInfoSettingsButton", ev); PosthogTrackers.trackInteraction("WebRightPanelRoomInfoSettingsButton", ev);
}; };
@ -303,7 +303,7 @@ const RoomSummaryCard: React.FC<IProps> = ({ room, permalinkCreator, onClose, on
}); });
}; };
const onRoomMembersClick = (ev: ButtonEvent): void => { const onRoomMembersClick = (ev: Event): void => {
RightPanelStore.instance.pushCard({ phase: RightPanelPhases.RoomMemberList }, true); RightPanelStore.instance.pushCard({ phase: RightPanelPhases.RoomMemberList }, true);
PosthogTrackers.trackInteraction("WebRightPanelRoomInfoPeopleButton", ev); PosthogTrackers.trackInteraction("WebRightPanelRoomInfoPeopleButton", ev);
}; };
@ -433,15 +433,17 @@ const RoomSummaryCard: React.FC<IProps> = ({ room, permalinkCreator, onClose, on
label={_t("room|context_menu|favourite")} label={_t("room|context_menu|favourite")}
checked={isFavorite} checked={isFavorite}
onChange={() => tagRoom(room, DefaultTagID.Favourite)} onChange={() => tagRoom(room, DefaultTagID.Favourite)}
// XXX: https://github.com/element-hq/compound/issues/288
onSelect={() => {}}
/> />
<MenuItem <MenuItem
Icon={UserAddIcon} Icon={UserAddIcon}
label={_t("action|invite")} label={_t("action|invite")}
disabled={!canInviteTo(room)} disabled={!canInviteTo(room)}
onClick={() => inviteToRoom(room)} onSelect={() => inviteToRoom(room)}
/> />
<MenuItem Icon={LinkIcon} label={_t("action|copy_link")} onClick={onShareRoomClick} /> <MenuItem Icon={LinkIcon} label={_t("action|copy_link")} onSelect={onShareRoomClick} />
<MenuItem Icon={SettingsIcon} label={_t("common|settings")} onClick={onRoomSettingsClick} /> <MenuItem Icon={SettingsIcon} label={_t("common|settings")} onSelect={onRoomSettingsClick} />
<Separator /> <Separator />
<MenuItem <MenuItem
@ -449,34 +451,34 @@ const RoomSummaryCard: React.FC<IProps> = ({ room, permalinkCreator, onClose, on
// and is a short term solution until legacy room header is removed // and is a short term solution until legacy room header is removed
Icon={UserProfileSolidIcon} Icon={UserProfileSolidIcon}
label={_t("common|people")} label={_t("common|people")}
onClick={onRoomMembersClick} onSelect={onRoomMembersClick}
/> />
{!isVideoRoom && ( {!isVideoRoom && (
<> <>
<MenuItem Icon={FilesIcon} label={_t("right_panel|files_button")} onClick={onRoomFilesClick} /> <MenuItem Icon={FilesIcon} label={_t("right_panel|files_button")} onSelect={onRoomFilesClick} />
<MenuItem <MenuItem
Icon={PollsIcon} Icon={PollsIcon}
label={_t("right_panel|polls_button")} label={_t("right_panel|polls_button")}
onClick={onRoomPollHistoryClick} onSelect={onRoomPollHistoryClick}
/> />
{pinningEnabled && ( {pinningEnabled && (
<MenuItem <MenuItem
Icon={PinIcon} Icon={PinIcon}
label={_t("right_panel|pinned_messages_button")} label={_t("right_panel|pinned_messages_button")}
onClick={onRoomPinsClick} onSelect={onRoomPinsClick}
> >
<Text as="span" size="sm"> <Text as="span" size="sm">
{pinCount} {pinCount}
</Text> </Text>
</MenuItem> </MenuItem>
)} )}
<MenuItem Icon={ExportArchiveIcon} label={_t("export_chat|title")} onClick={onRoomExportClick} /> <MenuItem Icon={ExportArchiveIcon} label={_t("export_chat|title")} onSelect={onRoomExportClick} />
</> </>
)} )}
<Separator /> <Separator />
<MenuItem Icon={LeaveIcon} kind="critical" label={_t("action|leave_room")} onClick={onLeaveRoomClick} /> <MenuItem Icon={LeaveIcon} kind="critical" label={_t("action|leave_room")} onSelect={onLeaveRoomClick} />
{SettingsStore.getValue(UIFeature.Widgets) && {SettingsStore.getValue(UIFeature.Widgets) &&
!isVideoRoom && !isVideoRoom &&

View file

@ -33,7 +33,7 @@ function mutateCssText(css: string): string {
} }
function isLightTheme(sheet: CSSStyleSheet): boolean { function isLightTheme(sheet: CSSStyleSheet): boolean {
return (<HTMLStyleElement>sheet.ownerNode).dataset.mxTheme?.toLowerCase() === "light"; return (<HTMLStyleElement>sheet.ownerNode)?.dataset.mxTheme?.toLowerCase() === "light";
} }
async function getRulesFromCssFile(path: string): Promise<CSSStyleSheet> { async function getRulesFromCssFile(path: string): Promise<CSSStyleSheet> {

View file

@ -34,6 +34,10 @@ import { PollHistoryDialog } from "../../../../src/components/views/dialogs/Poll
import { RoomPermalinkCreator } from "../../../../src/utils/permalinks/Permalinks"; import { RoomPermalinkCreator } from "../../../../src/utils/permalinks/Permalinks";
import { _t } from "../../../../src/languageHandler"; import { _t } from "../../../../src/languageHandler";
import SettingsStore from "../../../../src/settings/SettingsStore"; import SettingsStore from "../../../../src/settings/SettingsStore";
import { tagRoom } from "../../../../src/utils/room/tagRoom";
import { DefaultTagID } from "../../../../src/stores/room-list/models";
jest.mock("../../../../src/utils/room/tagRoom");
describe("<RoomSummaryCard />", () => { describe("<RoomSummaryCard />", () => {
const userId = "@alice:domain.org"; const userId = "@alice:domain.org";
@ -63,6 +67,9 @@ describe("<RoomSummaryCard />", () => {
isRoomEncrypted: jest.fn(), isRoomEncrypted: jest.fn(),
getOrCreateFilter: jest.fn().mockResolvedValue({ filterId: 1 }), getOrCreateFilter: jest.fn().mockResolvedValue({ filterId: 1 }),
getRoom: jest.fn(), getRoom: jest.fn(),
isGuest: jest.fn().mockReturnValue(false),
deleteRoomTag: jest.fn().mockResolvedValue({}),
setRoomTag: jest.fn().mockResolvedValue({}),
}); });
room = new Room(roomId, mockClient, userId); room = new Room(roomId, mockClient, userId);
const roomCreateEvent = new MatrixEvent({ const roomCreateEvent = new MatrixEvent({
@ -76,6 +83,7 @@ describe("<RoomSummaryCard />", () => {
state_key: "", state_key: "",
}); });
room.currentState.setStateEvents([roomCreateEvent]); room.currentState.setStateEvents([roomCreateEvent]);
room.updateMyMembership("join");
jest.spyOn(Modal, "createDialog"); jest.spyOn(Modal, "createDialog");
jest.spyOn(RightPanelStore.instance, "pushCard"); jest.spyOn(RightPanelStore.instance, "pushCard");
@ -133,6 +141,22 @@ describe("<RoomSummaryCard />", () => {
expect(Modal.createDialog).toHaveBeenCalledWith(ShareDialog, { target: room }); expect(Modal.createDialog).toHaveBeenCalledWith(ShareDialog, { target: room });
}); });
it("opens invite dialog on button click", () => {
const { getByText } = getComponent();
fireEvent.click(getByText(_t("action|invite")));
expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({ action: "view_invite", roomId: room.roomId });
});
it("fires favourite dispatch on button click", () => {
const { getByText } = getComponent();
fireEvent.click(getByText(_t("room|context_menu|favourite")));
expect(tagRoom).toHaveBeenCalledWith(room, DefaultTagID.Favourite);
});
it("opens room settings on button click", () => { it("opens room settings on button click", () => {
const { getByText } = getComponent(); const { getByText } = getComponent();

View file

@ -71,24 +71,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</section> </section>
</header> </header>
<div <div
class="_separator_1uqhh_17" class="_separator_1dey0_17"
data-orientation="horizontal" data-orientation="horizontal"
role="separator" role="separator"
/> />
<label <label
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
for=":r1:" for=":r1:"
role="menuitemcheckbox" role="menuitemcheckbox"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Favourite Favourite
</span> </span>
@ -106,25 +106,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</div> </div>
</label> </label>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36 _disabled_zxa40_125" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
disabled=""
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Invite Invite
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -138,24 +137,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Copy link Copy link
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -169,24 +168,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Settings Settings
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -200,29 +199,29 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<div <div
class="_separator_1uqhh_17" class="_separator_1dey0_17"
data-orientation="horizontal" data-orientation="horizontal"
role="separator" role="separator"
/> />
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
People People
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -236,24 +235,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Files Files
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -267,24 +266,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Poll history Poll history
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -298,24 +297,24 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="primary" data-kind="primary"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Export Chat Export Chat
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
@ -329,29 +328,29 @@ exports[`<RoomSummaryCard /> renders the room summary 1`] = `
</svg> </svg>
</button> </button>
<div <div
class="_separator_1uqhh_17" class="_separator_1dey0_17"
data-orientation="horizontal" data-orientation="horizontal"
role="separator" role="separator"
/> />
<button <button
class="_item_zxa40_17 _interactive_zxa40_36" class="_item_1bcsk_17 _interactive_1bcsk_36"
data-kind="critical" data-kind="critical"
role="menuitem" role="menuitem"
> >
<div <div
aria-hidden="true" aria-hidden="true"
class="_icon_zxa40_49" class="_icon_1bcsk_44"
height="24" height="24"
width="24" width="24"
/> />
<span <span
class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_zxa40_58" class="_typography_yh5dq_162 _font-body-md-medium_yh5dq_69 _label_1bcsk_53"
> >
Leave room Leave room
</span> </span>
<svg <svg
aria-hidden="true" aria-hidden="true"
class="_nav-hint_zxa40_65" class="_nav-hint_1bcsk_60"
fill="none" fill="none"
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"

View file

@ -406,7 +406,7 @@ describe("MemberList", () => {
await flushPromises(); await flushPromises();
// button rendered but disabled // button rendered but disabled
expect(screen.getByText("Invite to this room")).toBeDisabled(); expect(screen.getByText("Invite to this room")).toHaveAttribute("aria-disabled", "true");
}); });
it("renders enabled invite button when current user is a member and has rights to invite", async () => { it("renders enabled invite button when current user is a member and has rights to invite", async () => {

View file

@ -238,7 +238,7 @@ describe("RoomHeader", () => {
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
for (const button of getAllByLabelText(container, "There's no one here to call")) { for (const button of getAllByLabelText(container, "There's no one here to call")) {
expect(button).toBeDisabled(); expect(button).toHaveAttribute("aria-disabled", "true");
} }
}); });
@ -250,8 +250,8 @@ describe("RoomHeader", () => {
); );
const voiceButton = getByLabelText(container, "Voice call"); const voiceButton = getByLabelText(container, "Voice call");
const videoButton = getByLabelText(container, "Video call"); const videoButton = getByLabelText(container, "Video call");
expect(voiceButton).not.toBeDisabled(); expect(voiceButton).not.toHaveAttribute("aria-disabled", "true");
expect(videoButton).not.toBeDisabled(); expect(videoButton).not.toHaveAttribute("aria-disabled", "true");
const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall"); const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall");
@ -273,7 +273,7 @@ describe("RoomHeader", () => {
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
for (const button of getAllByLabelText(container, "Ongoing call")) { for (const button of getAllByLabelText(container, "Ongoing call")) {
expect(button).toBeDisabled(); expect(button).toHaveAttribute("aria-disabled", "true");
} }
}); });
@ -285,8 +285,8 @@ describe("RoomHeader", () => {
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
expect(getByLabelText(container, "Voice call")).not.toBeDisabled(); expect(getByLabelText(container, "Voice call")).not.toHaveAttribute("aria-disabled", "true");
expect(getByLabelText(container, "Video call")).not.toBeDisabled(); expect(getByLabelText(container, "Video call")).not.toHaveAttribute("aria-disabled", "true");
}); });
it("disable calls in large rooms by default", () => { it("disable calls in large rooms by default", () => {
@ -298,10 +298,10 @@ describe("RoomHeader", () => {
); );
expect( expect(
getByLabelText(container, "You do not have permission to start voice calls", { selector: "button" }), getByLabelText(container, "You do not have permission to start voice calls", { selector: "button" }),
).toBeDisabled(); ).toHaveAttribute("aria-disabled", "true");
expect( expect(
getByLabelText(container, "You do not have permission to start video calls", { selector: "button" }), getByLabelText(container, "You do not have permission to start video calls", { selector: "button" }),
).toBeDisabled(); ).toHaveAttribute("aria-disabled", "true");
}); });
}); });
@ -324,7 +324,7 @@ describe("RoomHeader", () => {
expect(screen.queryByTitle("Voice call")).toBeNull(); expect(screen.queryByTitle("Voice call")).toBeNull();
const videoCallButton = getByLabelText(container, "Video call"); const videoCallButton = getByLabelText(container, "Video call");
expect(videoCallButton).not.toBeDisabled(); expect(videoCallButton).not.toHaveAttribute("aria-disabled", "true");
const dispatcherSpy = jest.spyOn(dispatcher, "dispatch"); const dispatcherSpy = jest.spyOn(dispatcher, "dispatch");
@ -345,7 +345,7 @@ describe("RoomHeader", () => {
<RoomHeader room={room} />, <RoomHeader room={room} />,
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
expect(getByLabelText(container, "Ongoing call")).toBeDisabled(); expect(getByLabelText(container, "Ongoing call")).toHaveAttribute("aria-disabled", "true");
}); });
it("clicking on ongoing (unpinned) call re-pins it", () => { it("clicking on ongoing (unpinned) call re-pins it", () => {
@ -362,7 +362,7 @@ describe("RoomHeader", () => {
<RoomHeader room={room} />, <RoomHeader room={room} />,
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
expect(getByLabelText(container, "Video call")).not.toBeDisabled(); expect(getByLabelText(container, "Video call")).not.toHaveAttribute("aria-disabled", "true");
fireEvent.click(getByLabelText(container, "Video call")); fireEvent.click(getByLabelText(container, "Video call"));
expect(spy).toHaveBeenCalledWith(room, widget, Container.Top); expect(spy).toHaveBeenCalledWith(room, widget, Container.Top);
}); });
@ -378,7 +378,7 @@ describe("RoomHeader", () => {
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
for (const button of getAllByLabelText(container, "Ongoing call")) { for (const button of getAllByLabelText(container, "Ongoing call")) {
expect(button).toBeDisabled(); expect(button).toHaveAttribute("aria-disabled", "true");
} }
}); });
@ -389,7 +389,7 @@ describe("RoomHeader", () => {
withClientContextRenderOptions(MatrixClientPeg.get()!), withClientContextRenderOptions(MatrixClientPeg.get()!),
); );
for (const button of getAllByLabelText(container, "There's no one here to call")) { for (const button of getAllByLabelText(container, "There's no one here to call")) {
expect(button).toBeDisabled(); expect(button).toHaveAttribute("aria-disabled", "true");
} }
}); });
@ -402,8 +402,8 @@ describe("RoomHeader", () => {
const voiceButton = getByLabelText(container, "Voice call"); const voiceButton = getByLabelText(container, "Voice call");
const videoButton = getByLabelText(container, "Video call"); const videoButton = getByLabelText(container, "Video call");
expect(voiceButton).not.toBeDisabled(); expect(voiceButton).not.toHaveAttribute("aria-disabled", "true");
expect(videoButton).not.toBeDisabled(); expect(videoButton).not.toHaveAttribute("aria-disabled", "true");
const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall"); const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall");
fireEvent.click(voiceButton); fireEvent.click(voiceButton);
@ -428,8 +428,8 @@ describe("RoomHeader", () => {
const voiceButton = getByLabelText(container, "Voice call"); const voiceButton = getByLabelText(container, "Voice call");
const videoButton = getByLabelText(container, "Video call"); const videoButton = getByLabelText(container, "Video call");
expect(voiceButton).not.toBeDisabled(); expect(voiceButton).not.toHaveAttribute("aria-disabled", "true");
expect(videoButton).not.toBeDisabled(); expect(videoButton).not.toHaveAttribute("aria-disabled", "true");
const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall"); const placeCallSpy = jest.spyOn(LegacyCallHandler.instance, "placeCall");
fireEvent.click(voiceButton); fireEvent.click(voiceButton);
@ -455,8 +455,8 @@ describe("RoomHeader", () => {
const voiceButton = getByLabelText(container, "Voice call"); const voiceButton = getByLabelText(container, "Voice call");
const videoButton = getByLabelText(container, "Video call"); const videoButton = getByLabelText(container, "Video call");
expect(voiceButton).not.toBeDisabled(); expect(voiceButton).not.toHaveAttribute("aria-disabled", "true");
expect(videoButton).not.toBeDisabled(); expect(videoButton).not.toHaveAttribute("aria-disabled", "true");
const dispatcherSpy = jest.spyOn(dispatcher, "dispatch"); const dispatcherSpy = jest.spyOn(dispatcher, "dispatch");
fireEvent.click(videoButton); fireEvent.click(videoButton);

View file

@ -3,9 +3,11 @@
exports[`<VideoRoomChatButton /> renders button when room is a video room 1`] = ` exports[`<VideoRoomChatButton /> renders button when room is a video room 1`] = `
<button <button
aria-label="Chat" aria-label="Chat"
class="_icon-button_1qjaf_17" class="_icon-button_ur2sw_17"
data-state="closed" data-state="closed"
role="button"
style="--cpd-icon-button-size: 32px;" style="--cpd-icon-button-size: 32px;"
tabindex="0"
> >
<div /> <div />
</button> </button>
@ -14,10 +16,12 @@ exports[`<VideoRoomChatButton /> renders button when room is a video room 1`] =
exports[`<VideoRoomChatButton /> renders button with an unread marker when room is unread 1`] = ` exports[`<VideoRoomChatButton /> renders button with an unread marker when room is unread 1`] = `
<button <button
aria-label="Chat" aria-label="Chat"
class="_icon-button_1qjaf_17" class="_icon-button_ur2sw_17"
data-indicator="default" data-indicator="default"
data-state="closed" data-state="closed"
role="button"
style="--cpd-icon-button-size: 32px;" style="--cpd-icon-button-size: 32px;"
tabindex="0"
> >
<div /> <div />
</button> </button>

View file

@ -44,28 +44,34 @@ exports[`RoomHeader does not show the face pile for DMs 1`] = `
style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: center; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-2x);" style="--mx-flex-display: flex; --mx-flex-direction: row; --mx-flex-align: center; --mx-flex-justify: start; --mx-flex-gap: var(--cpd-space-2x);"
> >
<button <button
aria-disabled="true"
aria-label="There's no one here to call" aria-label="There's no one here to call"
class="_icon-button_1qjaf_17" class="_icon-button_ur2sw_17"
data-state="closed" data-state="closed"
disabled="" role="button"
style="--cpd-icon-button-size: 32px;" style="--cpd-icon-button-size: 32px;"
tabindex="0"
> >
<div /> <div />
</button> </button>
<button <button
aria-disabled="true"
aria-label="There's no one here to call" aria-label="There's no one here to call"
class="_icon-button_1qjaf_17" class="_icon-button_ur2sw_17"
data-state="closed" data-state="closed"
disabled="" role="button"
style="--cpd-icon-button-size: 32px;" style="--cpd-icon-button-size: 32px;"
tabindex="0"
> >
<div /> <div />
</button> </button>
<button <button
aria-label="Threads" aria-label="Threads"
class="_icon-button_1qjaf_17" class="_icon-button_ur2sw_17"
data-state="closed" data-state="closed"
role="button"
style="--cpd-icon-button-size: 32px;" style="--cpd-icon-button-size: 32px;"
tabindex="0"
> >
<div /> <div />
</button> </button>

177
yarn.lock
View file

@ -2271,6 +2271,17 @@
"@babel/runtime" "^7.13.10" "@babel/runtime" "^7.13.10"
"@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-collection@1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.0.3.tgz#9595a66e09026187524a36c6e7e9c7d286469159"
integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-context" "1.0.1"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-slot" "1.0.2"
"@radix-ui/react-compose-refs@1.0.1": "@radix-ui/react-compose-refs@1.0.1":
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989" resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz#7ed868b66946aa6030e580b1ffca386dd4d21989"
@ -2285,6 +2296,34 @@
dependencies: dependencies:
"@babel/runtime" "^7.13.10" "@babel/runtime" "^7.13.10"
"@radix-ui/react-dialog@^1.0.4":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz#71657b1b116de6c7a0b03242d7d43e01062c7300"
integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/primitive" "1.0.1"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-context" "1.0.1"
"@radix-ui/react-dismissable-layer" "1.0.5"
"@radix-ui/react-focus-guards" "1.0.1"
"@radix-ui/react-focus-scope" "1.0.4"
"@radix-ui/react-id" "1.0.1"
"@radix-ui/react-portal" "1.0.4"
"@radix-ui/react-presence" "1.0.1"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-slot" "1.0.2"
"@radix-ui/react-use-controllable-state" "1.0.1"
aria-hidden "^1.1.1"
react-remove-scroll "2.5.5"
"@radix-ui/react-direction@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.0.1.tgz#9cb61bf2ccf568f3421422d182637b7f47596c9b"
integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/react-dismissable-layer@1.0.5": "@radix-ui/react-dismissable-layer@1.0.5":
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4" resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz#3f98425b82b9068dfbab5db5fff3df6ebf48b9d4"
@ -2297,6 +2336,37 @@
"@radix-ui/react-use-callback-ref" "1.0.1" "@radix-ui/react-use-callback-ref" "1.0.1"
"@radix-ui/react-use-escape-keydown" "1.0.3" "@radix-ui/react-use-escape-keydown" "1.0.3"
"@radix-ui/react-dropdown-menu@^2.0.6":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz#cdf13c956c5e263afe4e5f3587b3071a25755b63"
integrity sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/primitive" "1.0.1"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-context" "1.0.1"
"@radix-ui/react-id" "1.0.1"
"@radix-ui/react-menu" "2.0.6"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-use-controllable-state" "1.0.1"
"@radix-ui/react-focus-guards@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz#1ea7e32092216b946397866199d892f71f7f98ad"
integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/react-focus-scope@1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz#2ac45fce8c5bb33eb18419cdc1905ef4f1906525"
integrity sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-use-callback-ref" "1.0.1"
"@radix-ui/react-form@^0.0.3": "@radix-ui/react-form@^0.0.3":
version "0.0.3" version "0.0.3"
resolved "https://registry.yarnpkg.com/@radix-ui/react-form/-/react-form-0.0.3.tgz#328e7163e723ccc748459d66a2d685d7b4f85d5a" resolved "https://registry.yarnpkg.com/@radix-ui/react-form/-/react-form-0.0.3.tgz#328e7163e723ccc748459d66a2d685d7b4f85d5a"
@ -2326,6 +2396,31 @@
"@babel/runtime" "^7.13.10" "@babel/runtime" "^7.13.10"
"@radix-ui/react-primitive" "1.0.3" "@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-menu@2.0.6":
version "2.0.6"
resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.0.6.tgz#2c9e093c1a5d5daa87304b2a2f884e32288ae79e"
integrity sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/primitive" "1.0.1"
"@radix-ui/react-collection" "1.0.3"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-context" "1.0.1"
"@radix-ui/react-direction" "1.0.1"
"@radix-ui/react-dismissable-layer" "1.0.5"
"@radix-ui/react-focus-guards" "1.0.1"
"@radix-ui/react-focus-scope" "1.0.4"
"@radix-ui/react-id" "1.0.1"
"@radix-ui/react-popper" "1.1.3"
"@radix-ui/react-portal" "1.0.4"
"@radix-ui/react-presence" "1.0.1"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-roving-focus" "1.0.4"
"@radix-ui/react-slot" "1.0.2"
"@radix-ui/react-use-callback-ref" "1.0.1"
aria-hidden "^1.1.1"
react-remove-scroll "2.5.5"
"@radix-ui/react-popper@1.1.3": "@radix-ui/react-popper@1.1.3":
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.3.tgz#24c03f527e7ac348fabf18c89795d85d21b00b42" resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.1.3.tgz#24c03f527e7ac348fabf18c89795d85d21b00b42"
@ -2368,6 +2463,22 @@
"@babel/runtime" "^7.13.10" "@babel/runtime" "^7.13.10"
"@radix-ui/react-slot" "1.0.2" "@radix-ui/react-slot" "1.0.2"
"@radix-ui/react-roving-focus@1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz#e90c4a6a5f6ac09d3b8c1f5b5e81aab2f0db1974"
integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==
dependencies:
"@babel/runtime" "^7.13.10"
"@radix-ui/primitive" "1.0.1"
"@radix-ui/react-collection" "1.0.3"
"@radix-ui/react-compose-refs" "1.0.1"
"@radix-ui/react-context" "1.0.1"
"@radix-ui/react-direction" "1.0.1"
"@radix-ui/react-id" "1.0.1"
"@radix-ui/react-primitive" "1.0.3"
"@radix-ui/react-use-callback-ref" "1.0.1"
"@radix-ui/react-use-controllable-state" "1.0.1"
"@radix-ui/react-separator@^1.0.3": "@radix-ui/react-separator@^1.0.3":
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa" resolved "https://registry.yarnpkg.com/@radix-ui/react-separator/-/react-separator-1.0.3.tgz#be5a931a543d5726336b112f465f58585c04c8aa"
@ -3184,16 +3295,18 @@
dependencies: dependencies:
svg2vectordrawable "^2.9.1" svg2vectordrawable "^2.9.1"
"@vector-im/compound-web@0.8.1": "@vector-im/compound-web@0.9.4":
version "0.8.1" version "0.9.4"
resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-0.8.1.tgz#5ad709d78471b61af3adb41a3254a57a47cf5bb1" resolved "https://registry.yarnpkg.com/@vector-im/compound-web/-/compound-web-0.9.4.tgz#89ac6d136c5f9d553de0e8540398a8a4b6cdeb6f"
integrity sha512-+va9oW0mVe1MdXcP/k2+6YUARNq5N4aDbOu4mVTCOrBz8k+Apzydr+EO1dCjPkwLgkbibu1dutLimW9FxYEH3Q== integrity sha512-L1N0xe3G7k35b3i+5teYg1nplsbz8p+VOxIGWIPU4H7D4PBCxhf9i7ft8aJjLsIdIaInJkqjvKwPU+Yb/yvgUQ==
dependencies: dependencies:
"@radix-ui/react-dropdown-menu" "^2.0.6"
"@radix-ui/react-form" "^0.0.3" "@radix-ui/react-form" "^0.0.3"
"@radix-ui/react-separator" "^1.0.3" "@radix-ui/react-separator" "^1.0.3"
"@radix-ui/react-tooltip" "^1.0.6" "@radix-ui/react-tooltip" "^1.0.6"
classnames "^2.3.2" classnames "^2.3.2"
graphemer "^1.4.0" graphemer "^1.4.0"
vaul "^0.7.0"
"@zxcvbn-ts/core@^3.0.4": "@zxcvbn-ts/core@^3.0.4":
version "3.0.4" version "3.0.4"
@ -3398,6 +3511,13 @@ argparse@^2.0.1:
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
aria-hidden@^1.1.1:
version "1.2.3"
resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.3.tgz#14aeb7fb692bbb72d69bebfa47279c1fd725e954"
integrity sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==
dependencies:
tslib "^2.0.0"
aria-query@5.1.3: aria-query@5.1.3:
version "5.1.3" version "5.1.3"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e"
@ -5906,6 +6026,11 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@
has-symbols "^1.0.3" has-symbols "^1.0.3"
hasown "^2.0.0" hasown "^2.0.0"
get-nonce@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
get-package-type@^0.1.0: get-package-type@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
@ -6333,6 +6458,13 @@ internal-slot@^1.0.5:
hasown "^2.0.0" hasown "^2.0.0"
side-channel "^1.0.4" side-channel "^1.0.4"
invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
dependencies:
loose-envify "^1.0.0"
ip-regex@^4.0.0: ip-regex@^4.0.0:
version "4.3.0" version "4.3.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"
@ -7502,7 +7634,7 @@ loglevel@^1.7.1:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4"
integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==
loose-envify@^1.1.0, loose-envify@^1.4.0: loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@ -8686,6 +8818,34 @@ react-redux@^7.2.0:
prop-types "^15.7.2" prop-types "^15.7.2"
react-is "^17.0.2" react-is "^17.0.2"
react-remove-scroll-bar@^2.3.3:
version "2.3.4"
resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9"
integrity sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==
dependencies:
react-style-singleton "^2.2.1"
tslib "^2.0.0"
react-remove-scroll@2.5.5:
version "2.5.5"
resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz#1e31a1260df08887a8a0e46d09271b52b3a37e77"
integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==
dependencies:
react-remove-scroll-bar "^2.3.3"
react-style-singleton "^2.2.1"
tslib "^2.1.0"
use-callback-ref "^1.3.0"
use-sidecar "^1.1.2"
react-style-singleton@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz#f99e420492b2d8f34d38308ff660b60d0b1205b4"
integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==
dependencies:
get-nonce "^1.0.0"
invariant "^2.2.4"
tslib "^2.0.0"
react-transition-group@^4.4.1: react-transition-group@^4.4.1:
version "4.4.5" version "4.4.5"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1"
@ -10108,6 +10268,13 @@ vary@~1.1.2:
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
vaul@^0.7.0:
version "0.7.9"
resolved "https://registry.yarnpkg.com/vaul/-/vaul-0.7.9.tgz#365dfe8f6c1df3a81a26508474db0e0ceb98ac8c"
integrity sha512-RrcnGOHOq/cEU3YpyyZrnjh0H79xMpF3IrHZs9ichvHlpKjLDc4Vwjn4VkuGzeUGrmQ3wamfm/cpdKWpvBIgQw==
dependencies:
"@radix-ui/react-dialog" "^1.0.4"
verror@1.10.0: verror@1.10.0:
version "1.10.0" version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"