@remit/web-client 0.0.289 → 0.0.290
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remit/web-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.290",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Remit web client, published as composable primitives — the app shell, auth shells, and runtime config. A distributor imports what it composes and bundles it.",
|
|
6
6
|
"exports": {
|
package/src/auth/AccountMenu.tsx
CHANGED
|
@@ -1,47 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { LogOut } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
DropdownMenu,
|
|
5
|
-
DropdownMenuItem,
|
|
6
|
-
DropdownMenuSeparator,
|
|
7
|
-
} from "@/components/ui/DropdownMenu";
|
|
1
|
+
import { AccountMenu as AccountMenuView } from "@remit/ui";
|
|
8
2
|
import { AccountSession } from "./AccountSession";
|
|
9
3
|
|
|
10
|
-
interface AccountMenuViewProps {
|
|
11
|
-
email: string | null;
|
|
12
|
-
onSignOut: () => void;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const AccountMenuView = ({ email, onSignOut }: AccountMenuViewProps) => {
|
|
16
|
-
const displayName = email ?? "Account";
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
<DropdownMenu
|
|
20
|
-
trigger={
|
|
21
|
-
<Avatar name={displayName} email={email ?? undefined} size="sm" />
|
|
22
|
-
}
|
|
23
|
-
align="right"
|
|
24
|
-
>
|
|
25
|
-
{email && (
|
|
26
|
-
<>
|
|
27
|
-
<div
|
|
28
|
-
className="px-3 py-2 text-xs text-fg-muted truncate"
|
|
29
|
-
title={email}
|
|
30
|
-
data-testid="account-menu-email"
|
|
31
|
-
>
|
|
32
|
-
{email}
|
|
33
|
-
</div>
|
|
34
|
-
<DropdownMenuSeparator />
|
|
35
|
-
</>
|
|
36
|
-
)}
|
|
37
|
-
<DropdownMenuItem onClick={onSignOut}>
|
|
38
|
-
<LogOut className="size-4" />
|
|
39
|
-
Sign out
|
|
40
|
-
</DropdownMenuItem>
|
|
41
|
-
</DropdownMenu>
|
|
42
|
-
);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
4
|
export const AccountMenu = () => (
|
|
46
5
|
<AccountSession>
|
|
47
6
|
{({ email, signOut }) => (
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { AppVersion } from "./AppVersion";
|
|
3
|
+
|
|
4
|
+
const meta: Meta<typeof AppVersion> = {
|
|
5
|
+
title: "Playground/Shipped/Settings/Advanced/AppVersion",
|
|
6
|
+
component: AppVersion,
|
|
7
|
+
parameters: { layout: "padded" },
|
|
8
|
+
args: {
|
|
9
|
+
sha: "a1b2c3d",
|
|
10
|
+
commitUrl: "https://github.com/remit-mail/reader/commit/a1b2c3d4e5f6",
|
|
11
|
+
buildTime: "2024-06-12T10:30:00.000Z",
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
|
|
16
|
+
type Story = StoryObj<typeof AppVersion>;
|
|
17
|
+
|
|
18
|
+
export const Default: Story = {};
|
|
19
|
+
|
|
20
|
+
export const DevBuild: Story = {
|
|
21
|
+
args: { sha: "dev", commitUrl: undefined },
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const InAboutSection: Story = {
|
|
25
|
+
render: (args) => (
|
|
26
|
+
<div className="mt-4 max-w-sm border-t border-line pt-4">
|
|
27
|
+
<p className="mb-1 text-sm font-medium text-fg">About</p>
|
|
28
|
+
<AppVersion {...args} />
|
|
29
|
+
</div>
|
|
30
|
+
),
|
|
31
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { BugReportButton } from "./BugReportButton";
|
|
3
|
+
|
|
4
|
+
const meta: Meta<typeof BugReportButton> = {
|
|
5
|
+
title: "Playground/Shipped/Mail/Nav/BugReportButton",
|
|
6
|
+
component: BugReportButton,
|
|
7
|
+
parameters: { layout: "padded" },
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
|
|
11
|
+
type Story = StoryObj<typeof BugReportButton>;
|
|
12
|
+
|
|
13
|
+
export const Default: Story = {
|
|
14
|
+
render: () => (
|
|
15
|
+
<div className="w-64">
|
|
16
|
+
<BugReportButton />
|
|
17
|
+
</div>
|
|
18
|
+
),
|
|
19
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { expect, within } from "storybook/test";
|
|
3
|
+
import type { FatalError } from "@/lib/fatal-error";
|
|
4
|
+
import { FatalErrorScreen } from "./FatalErrorOverlay";
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof FatalErrorScreen> = {
|
|
7
|
+
title: "Playground/Shipped/App/FatalErrorOverlay",
|
|
8
|
+
component: FatalErrorScreen,
|
|
9
|
+
parameters: { layout: "fullscreen" },
|
|
10
|
+
};
|
|
11
|
+
export default meta;
|
|
12
|
+
|
|
13
|
+
type Story = StoryObj<typeof FatalErrorScreen>;
|
|
14
|
+
|
|
15
|
+
const fatal = (overrides: Partial<FatalError>): FatalError => ({
|
|
16
|
+
error: new Error(overrides.message),
|
|
17
|
+
message: "",
|
|
18
|
+
correlationId: "a1b2c3d4-5678-90ab-cdef-1234567890ab",
|
|
19
|
+
at: Date.UTC(2024, 5, 12, 10, 30),
|
|
20
|
+
recoverable: true,
|
|
21
|
+
...overrides,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
export const RecoverableTransient: Story = {
|
|
25
|
+
args: {
|
|
26
|
+
fatal: fatal({
|
|
27
|
+
message: "Request failed with status 500",
|
|
28
|
+
recoverable: true,
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
play: async ({ canvasElement }) => {
|
|
32
|
+
const canvas = within(canvasElement);
|
|
33
|
+
await expect(canvas.getByRole("button", { name: "Retry" })).toBeVisible();
|
|
34
|
+
await expect(
|
|
35
|
+
canvas.queryByRole("link", { name: "Go to inbox" }),
|
|
36
|
+
).toBeNull();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const DeterministicFatal: Story = {
|
|
41
|
+
args: {
|
|
42
|
+
fatal: fatal({
|
|
43
|
+
message: "date value is not finite in DateTimeFormat format()",
|
|
44
|
+
correlationId: "def45678-90ab-cdef-1234-567890abcdef",
|
|
45
|
+
recoverable: false,
|
|
46
|
+
}),
|
|
47
|
+
},
|
|
48
|
+
play: async ({ canvasElement }) => {
|
|
49
|
+
const canvas = within(canvasElement);
|
|
50
|
+
await expect(
|
|
51
|
+
canvas.getByRole("link", { name: "Go to inbox" }),
|
|
52
|
+
).toBeVisible();
|
|
53
|
+
await expect(canvas.queryByRole("button", { name: "Retry" })).toBeNull();
|
|
54
|
+
},
|
|
55
|
+
};
|