+
+
+ {message}
+ {displaySplitAddressShort(address)}
+
+
+ );
+}
diff --git a/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.scss b/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.scss
new file mode 100644
index 000000000..85dd6a664
--- /dev/null
+++ b/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.scss
@@ -0,0 +1,74 @@
+.toast-x {
+ visibility: hidden;
+ width: rem(175px);
+ left: 0;
+ right: 0;
+ margin: 0 auto;
+ background-color: $color-white;
+ color: $color-black;
+ text-align: center;
+ border-radius: rem(16px);
+ padding: rem(10px) rem(15px);
+ position: absolute;
+ z-index: 2;
+ bottom: rem(16px);
+ backdrop-filter: blur(5px);
+ box-shadow: 0 -6px 15.3px 0 rgba($color-black, 0.25);
+
+ &__show {
+ visibility: visible;
+ animation: fadein-toast 0.5s;
+ }
+
+ &__fadeout {
+ visibility: visible;
+ animation: fadeout-toast 0.5s;
+ }
+
+ @keyframes fadein-toast {
+ from {
+ bottom: 0;
+ opacity: 0;
+ }
+
+ to {
+ bottom: rem(16px);
+ opacity: 1;
+ }
+ }
+
+ @keyframes fadeout-toast {
+ from {
+ bottom: rem(16px);
+ opacity: 1;
+ }
+
+ to {
+ bottom: rem(16px);
+ opacity: 0;
+ }
+ }
+}
+
+.copy-address-x {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ .copy-message {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ gap: rem(4px);
+ margin-left: rem(10px);
+
+ .label__main {
+ color: $color-black;
+ white-space: nowrap;
+ }
+
+ .capture__main_small {
+ color: $color-black;
+ }
+ }
+}
diff --git a/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.tsx b/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.tsx
new file mode 100644
index 000000000..2b056dfd9
--- /dev/null
+++ b/packages/browser-wallet/src/popup/popupX/shared/Toast/Toast.tsx
@@ -0,0 +1,49 @@
+import { toastsAtom } from '@popup/state';
+import clsx from 'clsx';
+import { useAtom } from 'jotai';
+import React, { ReactNode, useEffect, useState } from 'react';
+import { noOp } from 'wallet-common-helpers';
+
+// The fadeout timeout has to be aligned with the animation in the corresponding CSS. This is
+// done by manually tweaking the values until the animation looks decent. Currently the value
+// is 100ms less than the corresponding value in CSS.
+const fadeoutTimeoutMs = 400;
+
+// Determines how long we display the toast.
+const toastTimeoutMs = 5000;
+
+export default function Toast() {
+ const [toasts, setToasts] = useAtom(toastsAtom);
+ const [toastText, setToastText] = useState