diff --git a/package.json b/package.json
index 2e504e64..40603207 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,12 @@
"serve": "vite preview"
},
"dependencies": {
+ "@react-aria/button": "^3.3.4",
+ "@react-aria/dialog": "^3.1.4",
+ "@react-aria/focus": "^3.5.0",
+ "@react-aria/overlays": "^3.7.3",
+ "@react-aria/utils": "^3.10.0",
+ "@react-stately/overlays": "^3.1.3",
"@sentry/react": "^6.13.3",
"@sentry/tracing": "^6.13.3",
"classnames": "^2.3.1",
@@ -19,7 +25,8 @@
"react-dom": "^17.0.0",
"react-json-view": "^1.21.3",
"react-router": "6",
- "react-router-dom": "^5.2.0"
+ "react-router-dom": "^5.2.0",
+ "react-use-clipboard": "^1.0.7"
},
"devDependencies": {
"sass": "^1.42.1",
diff --git a/src/App.jsx b/src/App.jsx
index 52150b85..83787ddc 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -22,6 +22,8 @@ import {
Redirect,
useLocation,
} from "react-router-dom";
+import styles from "./App.module.css";
+import { OverlayProvider } from "@react-aria/overlays";
import * as Sentry from "@sentry/react";
import { useClient } from "./ConferenceCallManagerHooks";
import { Home } from "./Home";
@@ -48,34 +50,36 @@ export default function App() {
} = useClient(homeserverUrl);
return (
-
- <>
- {loading ? (
-
- Loading...
-
- ) : (
-
-
-
-
-
-
-
-
-
-
-
- {authenticated ? (
-
- ) : (
-
- )}
-
-
- )}
- >
-
+
+
+ <>
+ {loading ? (
+
+ Loading...
+
+ ) : (
+
+
+
+
+
+
+
+
+
+
+
+ {authenticated ? (
+
+ ) : (
+
+ )}
+
+
+ )}
+ >
+
+
);
}
diff --git a/src/App.module.css b/src/App.module.css
new file mode 100644
index 00000000..59e0c7c4
--- /dev/null
+++ b/src/App.module.css
@@ -0,0 +1,5 @@
+.overlayProvider {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
diff --git a/src/CopyButton.jsx b/src/CopyButton.jsx
new file mode 100644
index 00000000..0a37e594
--- /dev/null
+++ b/src/CopyButton.jsx
@@ -0,0 +1,37 @@
+import React from "react";
+import { useButton } from "@react-aria/button";
+import useClipboard from "react-use-clipboard";
+import { ReactComponent as CheckIcon } from "./icons/Check.svg";
+import { ReactComponent as CopyIcon } from "./icons/Copy.svg";
+import classNames from "classnames";
+import styles from "./CopyButton.module.css";
+
+export function CopyButton({ value, className, ...rest }) {
+ const [isCopied, setCopied] = useClipboard(value, { successDuration: 3000 });
+ const { buttonProps } = useButton({
+ onPress: () => setCopied(),
+ });
+
+ return (
+
+ );
+}
diff --git a/src/CopyButton.module.css b/src/CopyButton.module.css
new file mode 100644
index 00000000..ac1cd59b
--- /dev/null
+++ b/src/CopyButton.module.css
@@ -0,0 +1,35 @@
+.copyButton {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: transparent;
+ padding: 0;
+ cursor: pointer;
+ border: 2px solid #0dbd8b;
+ border-radius: 8px;
+ color: #0dbd8b;
+ width: 100%;
+ transition: border-color 250ms, background-color 250ms;
+ height: 40px;
+}
+
+.copyButton span {
+ font-weight: 600;
+ font-size: 15px;
+ margin-right: 10px;
+}
+
+.copyButton:not(.copied) svg * {
+ fill: #0dbd8b;
+}
+
+.copyButton.copied {
+ border-color: transparent;
+ background-color: #0dbd8b;
+ color: white;
+}
+
+.copyButton.copied svg * {
+ stroke: white;
+}
diff --git a/src/InviteModal.jsx b/src/InviteModal.jsx
new file mode 100644
index 00000000..18c35ac9
--- /dev/null
+++ b/src/InviteModal.jsx
@@ -0,0 +1,14 @@
+import React from "react";
+import { Modal, ModalContent } from "./Modal";
+import { CopyButton } from "./CopyButton";
+
+export function InviteModal({ roomUrl, ...rest }) {
+ return (
+
+
+ Copy and share this meeting link
+
+
+
+ );
+}
diff --git a/src/Modal.jsx b/src/Modal.jsx
new file mode 100644
index 00000000..cd89c6a1
--- /dev/null
+++ b/src/Modal.jsx
@@ -0,0 +1,62 @@
+import React, { useRef } from "react";
+import {
+ useOverlay,
+ usePreventScroll,
+ useModal,
+ OverlayContainer,
+} from "@react-aria/overlays";
+import { useDialog } from "@react-aria/dialog";
+import { FocusScope } from "@react-aria/focus";
+import { useButton } from "@react-aria/button";
+import { ReactComponent as CloseIcon } from "./icons/Close.svg";
+import styles from "./Modal.module.css";
+import classNames from "classnames";
+
+export function Modal(props) {
+ const { title, children } = props;
+ const modalRef = useRef();
+ const { overlayProps, underlayProps } = useOverlay(props, modalRef);
+ usePreventScroll();
+ const { modalProps } = useModal();
+ const { dialogProps, titleProps } = useDialog(props, modalRef);
+ const closeButtonRef = useRef();
+ const { buttonProps: closeButtonProps } = useButton({
+ onPress: () => props.close(),
+ });
+
+ return (
+
+
+
+
+
+
{title}
+
+
+ {children}
+
+
+
+
+ );
+}
+
+export function ModalContent({ children, className, ...rest }) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/Modal.module.css b/src/Modal.module.css
new file mode 100644
index 00000000..8284ccc0
--- /dev/null
+++ b/src/Modal.module.css
@@ -0,0 +1,49 @@
+.modalOverlay {
+ position: fixed;
+ z-index: 100;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ background: rgba(23, 25, 28, 0.5);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.modal {
+ background: #21262c;
+ box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);
+ border-radius: 8px;
+ min-width: 420px;
+}
+
+.modalHeader {
+ display: flex;
+ justify-content: space-between;
+ padding: 34px 34px 0 34px;
+}
+
+.modalHeader h3 {
+ font-size: 24px;
+ margin: 0;
+}
+
+.closeButton {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-color: transparent;
+ padding: 0;
+ border: none;
+ cursor: pointer;
+}
+
+.content {
+ padding: 24px 32px;
+}
+
+.content p {
+ margin-top: 0;
+}
diff --git a/src/Overlay.jsx b/src/Overlay.jsx
new file mode 100644
index 00000000..d25bc3e6
--- /dev/null
+++ b/src/Overlay.jsx
@@ -0,0 +1,59 @@
+import React, { useRef } from "react";
+import { useOverlayTriggerState } from "@react-stately/overlays";
+import { useButton } from "@react-aria/button";
+
+export function useToggleOverlayButton(overlayState, ref) {
+ return useButton(
+ {
+ onPress: () => overlayState.toggle(),
+ },
+ ref
+ );
+}
+
+export function useOpenOverlayButton(overlayState, ref) {
+ return useButton(
+ {
+ onPress: () => overlayState.open(),
+ },
+ ref
+ );
+}
+
+export function useCloseOverlayButton(overlayState, ref) {
+ return useButton(
+ {
+ onPress: () => overlayState.close(),
+ },
+ ref
+ );
+}
+
+export function Overlay({ children }) {
+ const overlayState = useOverlayTriggerState({});
+ const buttonRef = useRef();
+ const { buttonProps } = useToggleOverlayButton(overlayState, buttonRef);
+
+ if (
+ !Array.isArray(children) ||
+ children.length > 2 ||
+ typeof children[1] !== "function"
+ ) {
+ throw new Error(
+ "Overlay trigger must have two props. The first being a button and the second being a render prop."
+ );
+ }
+
+ const [overlayTrigger, overlay] = children;
+
+ return (
+ <>
+
+ {overlayState.isOpen && overlay({ ...overlayState })}
+ >
+ );
+}
diff --git a/src/Room.jsx b/src/Room.jsx
index 860a4c5b..bac2a965 100644
--- a/src/Room.jsx
+++ b/src/Room.jsx
@@ -24,7 +24,7 @@ import {
LayoutToggleButton,
ScreenshareButton,
DropdownButton,
- SettingsButton,
+ InviteButton,
} from "./RoomButton";
import {
Header,
@@ -48,6 +48,8 @@ import { fetchGroupCall } from "./ConferenceCallManagerHooks";
import { ErrorModal } from "./ErrorModal";
import { GroupCallInspector } from "./GroupCallInspector";
import * as Sentry from "@sentry/react";
+import { Overlay } from "./Overlay";
+import { InviteModal } from "./InviteModal";
const canScreenshare = "getDisplayMedia" in navigator.mediaDevices;
// There is currently a bug in Safari our our code with cloning and sending MediaStreams
@@ -505,11 +507,12 @@ function InRoomView({
- setShowInspector((prev) => !prev)}
- />
+
+
+ {(props) => (
+
+ )}
+
+ Add User
+
+
+ );
+}
+
export function LayoutToggleButton({ layout, setLayout, ...rest }) {
return (
+
+
diff --git a/src/icons/Copy.svg b/src/icons/Copy.svg
new file mode 100644
index 00000000..5f977f03
--- /dev/null
+++ b/src/icons/Copy.svg
@@ -0,0 +1,3 @@
+
diff --git a/yarn.lock b/yarn.lock
index 4f30bdda..844b10fb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -176,7 +176,7 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.7.6":
+"@babel/runtime@^7.6.2", "@babel/runtime@^7.7.6":
version "7.16.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
@@ -220,6 +220,166 @@
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
+"@formatjs/ecma402-abstract@1.11.0":
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.0.tgz#7e91e6cc7cfebdc07171e00a3288719705e0108c"
+ integrity sha512-TOp5La9wmSh9G5bqFGN/ApmOXtJDzBGkYW+OTRd3ukY7J32RVGZPpN4O9BD651JUy66nj3g9CIENTNCgm4IRXQ==
+ dependencies:
+ "@formatjs/intl-localematcher" "0.2.21"
+ tslib "^2.1.0"
+
+"@formatjs/fast-memoize@1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz#1123bfcc5d21d761f15d8b1c32d10e1b6530355d"
+ integrity sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w==
+ dependencies:
+ tslib "^2.1.0"
+
+"@formatjs/icu-messageformat-parser@2.0.15":
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.15.tgz#9e3ccadc582dbf076481bb95f98a689cfb10e7d5"
+ integrity sha512-nnRbkK+nz4ZL1l1lUbztL8qrEUGQKF/NU38itLnzLm8QLEacFS5qGOxxp/0DSIehhX99tNroNtudtjdOvzruAQ==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.11.0"
+ "@formatjs/icu-skeleton-parser" "1.3.2"
+ tslib "^2.1.0"
+
+"@formatjs/icu-skeleton-parser@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.2.tgz#a8ab9c668ea7f044ceba2043ac1d872d71307e22"
+ integrity sha512-ChKmnVCE/LbJzedRgA/EeL5+tfjx/6ZWunqNiEC5BtqHnnwmLN/oPuCPb8b3NhuGiwTqp+LkaS70tga5kXRHxg==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.11.0"
+ tslib "^2.1.0"
+
+"@formatjs/intl-localematcher@0.2.21":
+ version "0.2.21"
+ resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz#39ef33d701fe8084f3d693cd3ff7cbe03cdd3a49"
+ integrity sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==
+ dependencies:
+ tslib "^2.1.0"
+
+"@internationalized/date@3.0.0-alpha.1":
+ version "3.0.0-alpha.1"
+ resolved "https://registry.yarnpkg.com/@internationalized/date/-/date-3.0.0-alpha.1.tgz#987a86a98b837f275bce084ef502421bc5cdb5f7"
+ integrity sha512-fxciU4AQ/4XBYfse/mT9h1nsyNkmQkxwQtTmQVu6b4Tp2u95Y3m5BNgWgV2m3vLiiKZ82NtHJXAIGoqiK53w4g==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@internationalized/message@^3.0.2":
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/@internationalized/message/-/message-3.0.2.tgz#c3db2b6b7f75af815819f77da11f8424381416e3"
+ integrity sha512-ZZ8FQDCsri3vUB2mfDD76Vbf97DH361AiZUXKHV4BqwCtYyaNYiZqIr8KXrcMCxJvrIYVQLSn8+jeIQRO3bvtw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ intl-messageformat "^9.6.12"
+
+"@internationalized/number@^3.0.2":
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.0.3.tgz#d29003dffdff54ca6f2287ec0cb77ff3d045478f"
+ integrity sha512-ewFoVvsxSyd9QZnknvOWPjirYqdMQhXTeDhJg3hM6C/FeZt0banpGH1nZ0SGMZXHz8NK9uAa2KVIq+jqAIOg4w==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@react-aria/button@^3.3.4":
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/@react-aria/button/-/button-3.3.4.tgz#3af6eb4e0a479a76ba7386d541051d1273cd68fa"
+ integrity sha512-vebTcf9YpwaKCvsca2VWhn6eYPa15OJtMENwaGop72UrL35Oa7xDgU0RG22RAjRjt8HRVlAfLpHkJQW6GBGU3g==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.5.0"
+ "@react-aria/interactions" "^3.6.0"
+ "@react-aria/utils" "^3.9.0"
+ "@react-stately/toggle" "^3.2.3"
+ "@react-types/button" "^3.4.1"
+
+"@react-aria/dialog@^3.1.4":
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/@react-aria/dialog/-/dialog-3.1.4.tgz#7fe3f33e09b75dcdf598d0523e982262d6c89220"
+ integrity sha512-OtQGBol3CfcbBpjqXDqXzH5Ygny44PIuyAsZ1e3dfIdtaI+XHsoglyZnvDaVVealIgedHkMubreZnyNYnlzPLg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.4.1"
+ "@react-aria/utils" "^3.8.2"
+ "@react-stately/overlays" "^3.1.3"
+ "@react-types/dialog" "^3.3.1"
+
+"@react-aria/focus@^3.4.1", "@react-aria/focus@^3.5.0":
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.5.0.tgz#02b85f97d6114af1eccc0902ce40723b626cb7f9"
+ integrity sha512-Eib75Q6QgQdn8VVVByg5Vipaaj/C//8Bs++sQY7nkomRx4sdArOnXbDppul3YHP6mRfU9VRLvAigEUlReQF/Xw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.6.0"
+ "@react-aria/utils" "^3.9.0"
+ "@react-types/shared" "^3.9.0"
+ clsx "^1.1.1"
+
+"@react-aria/i18n@^3.3.3":
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.3.4.tgz#172b8bcff0273410e67af31f7d84e49dd3ada463"
+ integrity sha512-1DV3I82UfL2dT8WBI/88TwtokO80B7ISSyuz6rO/6n7q76A/nC2AtVINbrGYrcKsCcxCEoEMxW5RVJ39fcLijA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@internationalized/date" "3.0.0-alpha.1"
+ "@internationalized/message" "^3.0.2"
+ "@internationalized/number" "^3.0.2"
+ "@react-aria/ssr" "^3.0.3"
+ "@react-aria/utils" "^3.10.0"
+ "@react-types/shared" "^3.10.0"
+
+"@react-aria/interactions@^3.5.1", "@react-aria/interactions@^3.6.0", "@react-aria/interactions@^3.7.0":
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.7.0.tgz#eb19c1068b557a6b6df1e1c4abef07de719e9f25"
+ integrity sha512-Xomchjb9bqvh3ocil+QCEYFSxsTy8PHEz43mNP6z2yuu3UqTpl2FsWfyKgF/Yy0WKVkyV2dO2uz758KJTCLZhw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/utils" "^3.10.0"
+ "@react-types/shared" "^3.10.0"
+
+"@react-aria/overlays@^3.7.3":
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.7.3.tgz#b107b1d31c04c538355e566b1034d23e5696c18a"
+ integrity sha512-N5F/TVJ9KIYgGuOknVMrRnqqzkNKcFos4nxLHQz4TeFZTp4/P+NqEHd/VBmjsSTNEjEuNAivG+U2o4F1NWn/Pw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/i18n" "^3.3.3"
+ "@react-aria/interactions" "^3.7.0"
+ "@react-aria/utils" "^3.10.0"
+ "@react-aria/visually-hidden" "^3.2.3"
+ "@react-stately/overlays" "^3.1.3"
+ "@react-types/button" "^3.4.1"
+ "@react-types/overlays" "^3.5.1"
+ dom-helpers "^3.3.1"
+
+"@react-aria/ssr@^3.0.3", "@react-aria/ssr@^3.1.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.1.0.tgz#b7163e6224725c30121932a8d1422ef91d1fab22"
+ integrity sha512-RxqQKmE8sO7TGdrcSlHTcVzMP450hqowtBSd2bBS9oPlcokVkaGq28c3Rwa8ty5ctw4EBCjXqjP7xdcKMGDzug==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@react-aria/utils@^3.10.0", "@react-aria/utils@^3.8.2", "@react-aria/utils@^3.9.0":
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.10.0.tgz#2f6f0b0ccede17241fca1cbd76978e1bf8f5a2b0"
+ integrity sha512-he/1pV8gsTVwmYqbKI6DPtRUkWjzz/4icgemVVNjWNsiKEJSBj8Cr4I+0i3vIgXEPLnn1t+/LUsJMGFbKnqc9w==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/ssr" "^3.1.0"
+ "@react-stately/utils" "^3.3.0"
+ "@react-types/shared" "^3.10.0"
+ clsx "^1.1.1"
+
+"@react-aria/visually-hidden@^3.2.3":
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.2.3.tgz#4779df0a468873550afb42a7f5fcb2411d82db8d"
+ integrity sha512-iAe5EFI7obEOwTnIdAwWrKq+CrIJFGTw85v8fXnQ7CIVGRDblX85GOUww9bzQNPDLLRYWS4VF702ii8kV4+JCw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.5.1"
+ "@react-aria/utils" "^3.8.2"
+ clsx "^1.1.1"
+
"@react-spring/animated@~9.2.0":
version "9.2.4"
resolved "https://registry.npmjs.org/@react-spring/animated/-/animated-9.2.4.tgz"
@@ -265,6 +425,66 @@
"@react-spring/shared" "~9.2.0"
"@react-spring/types" "~9.2.0"
+"@react-stately/overlays@^3.1.3":
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.1.3.tgz#b0bb4061c1b20e712dfc32c933ae4bb23e5ccc0e"
+ integrity sha512-X8H/h9F8ZjevwJ7P8ak7v500qQd5x4Y76LsXUXrR6LtcO8FXfp2I+W8sGmBtLZwLQpTJiF1U0WMQqXLE1g6eLA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/utils" "^3.2.2"
+ "@react-types/overlays" "^3.5.1"
+
+"@react-stately/toggle@^3.2.3":
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.2.3.tgz#a4de6edc16982990492c6c557e5194f46dacc809"
+ integrity sha512-p5eVjXwNo4y4CeybxfjYmbTzNMNiI67uspbRAJnawWBVWw8X+yIvRfpjYAsqmvsJ+DsvwybSTlQDT6taGoWEsA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/utils" "^3.2.2"
+ "@react-types/checkbox" "^3.2.3"
+ "@react-types/shared" "^3.8.0"
+
+"@react-stately/utils@^3.2.2", "@react-stately/utils@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.3.0.tgz#99866c5788539268a06035acd5925b25bb4cedde"
+ integrity sha512-f//Y8q0+FFcS04xvCNvbba7WWRLHzj2AegLgdgwTxsnk9Gb+AyuasdRrRY7bGQhdHuEJ7OIiQZ9EQWndDbrTcg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@react-types/button@^3.4.1":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.4.1.tgz#715ac9d4997c79233be4d9020b58f85936b8252b"
+ integrity sha512-B54M84LxdEppwjXNlkBEJyMfe9fd+bvFV7R6+NJvupGrZm/LuFNYjFcHk7yjMKWTdWm6DbpIuQz54n5qTW7Vlg==
+ dependencies:
+ "@react-types/shared" "^3.8.0"
+
+"@react-types/checkbox@^3.2.3":
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.2.3.tgz#2b9d529c55c9884519c7f626f0fe8be7d0f18be1"
+ integrity sha512-YqeAFyrpaxI/eW6zQ7tVkKIASgzpywRrc6C/rV6Mw0zzGGSSvmYvdOBx9yHOEvpts7dLgaGlmLK6CeG7s4yGKg==
+ dependencies:
+ "@react-types/shared" "^3.8.0"
+
+"@react-types/dialog@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/@react-types/dialog/-/dialog-3.3.1.tgz#eb07e3d703643f7967243d56951d58a2cf77096f"
+ integrity sha512-1i6fVtixUNlftSNbVPFRieyEy3N/GNqcqpeOsJUB1jby28ppbM+JCp3Icb0ijaNC9Nl8c/oI8srtOWIQIKUJiQ==
+ dependencies:
+ "@react-types/overlays" "^3.5.1"
+ "@react-types/shared" "^3.8.0"
+
+"@react-types/overlays@^3.5.1":
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.5.1.tgz#35350dfca639d04a8fbd973de59b141450df1b46"
+ integrity sha512-T3o6wQ5NNm1rSniIa01bIa6fALC8jbwpYxFMaQRrdEpIvwktt0Fi5Xo6/97+oe4HvzzU0JMhtwWDTdRySvgeZw==
+ dependencies:
+ "@react-types/shared" "^3.8.0"
+
+"@react-types/shared@^3.10.0", "@react-types/shared@^3.8.0", "@react-types/shared@^3.9.0":
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.10.0.tgz#bdafed2ebcd31149c178312252dda0babde316d0"
+ integrity sha512-B1gTRpE5qkSpfGxw8BHeOwvBPP3gnfKnzPHV0FJQHtgJ46oJS64WyloDAp1D9cLVsFHaI6s/HviXL51kVce2ww==
+
"@sentry/browser@6.13.3":
version "6.13.3"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.13.3.tgz#d4511791b1e484ad48785eba3bce291fdf115c1e"
@@ -841,6 +1061,11 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
+clsx@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
+ integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
+
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
@@ -892,6 +1117,13 @@ convert-source-map@^1.7.0:
dependencies:
safe-buffer "~5.1.1"
+copy-to-clipboard@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae"
+ integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==
+ dependencies:
+ toggle-selection "^1.0.6"
+
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
@@ -1060,6 +1292,13 @@ dijkstrajs@^1.0.1:
resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.2.tgz#2e48c0d3b825462afe75ab4ad5e829c8ece36257"
integrity sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==
+dom-helpers@^3.3.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
+ integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
+
dom-helpers@^5.0.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
@@ -1628,6 +1867,16 @@ indexof@0.0.1:
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+intl-messageformat@^9.6.12:
+ version "9.10.0"
+ resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.10.0.tgz#f9864f6e15dde343851398082993911e57a6446e"
+ integrity sha512-OTOLlGPfwbrFyYD2iQuDbqEs8xccyLy+f1P3ZGJB2/EZo7Z9fVaaIWcM+JGvuWIFVRDnw4Um6z4t0mSSitUxGQ==
+ dependencies:
+ "@formatjs/ecma402-abstract" "1.11.0"
+ "@formatjs/fast-memoize" "1.2.0"
+ "@formatjs/icu-messageformat-parser" "2.0.15"
+ tslib "^2.1.0"
+
ip-regex@^4.0.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"
@@ -2706,6 +2955,13 @@ react-transition-group@^4.4.1:
loose-envify "^1.4.0"
prop-types "^15.6.2"
+react-use-clipboard@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/react-use-clipboard/-/react-use-clipboard-1.0.7.tgz#34cccdfb4f17f5e6522e38f2cee62d05f605597a"
+ integrity sha512-blIprqARyITp0uVw/2Rh87mcujqXdH6vZ5NrcuXEhI5EmjBGxcGnwt/79+vdN7rwM6OliGj481lOj6ZCcsiYEQ==
+ dependencies:
+ copy-to-clipboard "^3.3.1"
+
react-use-gesture@^9.1.3:
version "9.1.3"
resolved "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-9.1.3.tgz"
@@ -2983,6 +3239,11 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+toggle-selection@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32"
+ integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI=
+
tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@@ -3001,7 +3262,7 @@ tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.0.3, tslib@^2.2.0:
+tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==