@remit/web-client 0.0.182 → 0.0.184
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.184",
|
|
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": {
|
|
@@ -85,8 +85,6 @@
|
|
|
85
85
|
"@aws-amplify/ui-react": "^6",
|
|
86
86
|
"aws-rum-web": "^3",
|
|
87
87
|
"better-auth": "^1.6.23",
|
|
88
|
-
"clsx": "^2",
|
|
89
|
-
"dompurify": "^3.4.7",
|
|
90
88
|
"i18next": "^24",
|
|
91
89
|
"i18next-browser-languagedetector": "^8",
|
|
92
90
|
"i18next-http-backend": "^3.0.6",
|
|
@@ -94,36 +92,22 @@
|
|
|
94
92
|
"p-map": "*",
|
|
95
93
|
"react-hook-form": "*",
|
|
96
94
|
"react-i18next": "^15",
|
|
97
|
-
"tailwind-merge": "^2",
|
|
98
95
|
"vaul": "^1.1.2",
|
|
99
96
|
"zod": "^3"
|
|
100
97
|
},
|
|
101
98
|
"devDependencies": {
|
|
102
|
-
"@aws-sdk/client-dynamodb": "*",
|
|
103
|
-
"@aws-sdk/client-sqs": "*",
|
|
104
|
-
"@aws-sdk/lib-dynamodb": "*",
|
|
105
|
-
"@playwright/test": "1.58.2",
|
|
106
|
-
"@remit/drizzle-service": "*",
|
|
107
|
-
"@remit/electrodb-entities": "*",
|
|
108
|
-
"@remit/secrets-service": "*",
|
|
109
99
|
"@remit/test-dom": "*",
|
|
110
100
|
"@storybook/react-vite": "^9",
|
|
111
101
|
"@tailwindcss/vite": "^4",
|
|
112
102
|
"@tanstack/router-generator": "^1",
|
|
113
103
|
"@tanstack/router-plugin": "^1",
|
|
114
104
|
"@types/jsdom": "^28.0.3",
|
|
115
|
-
"@types/nodemailer": "*",
|
|
116
|
-
"@types/pngjs": "^6.0.5",
|
|
117
105
|
"@vitejs/plugin-react": "^4",
|
|
118
106
|
"dictionary-en": "4.0.0",
|
|
119
107
|
"dictionary-en-gb": "3.0.0",
|
|
120
108
|
"dictionary-nl": "2.0.0",
|
|
121
|
-
"electrodb": "*",
|
|
122
109
|
"esbuild": "*",
|
|
123
|
-
"expect-env": "*",
|
|
124
110
|
"jsdom": "^29.1.1",
|
|
125
|
-
"nodemailer": "^9.0.3",
|
|
126
|
-
"pngjs": "^5",
|
|
127
111
|
"react": "^19",
|
|
128
112
|
"react-dom": "^19.2.4",
|
|
129
113
|
"tailwindcss": "^4",
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Kbd } from "@remit/ui";
|
|
2
|
+
|
|
3
|
+
export const sendersHelp = (
|
|
4
|
+
<div className="space-y-3">
|
|
5
|
+
<p>
|
|
6
|
+
<strong className="text-fg">VIP</strong> senders get priority surface in
|
|
7
|
+
the daily brief and notification escalation, even when an account is
|
|
8
|
+
quiet.
|
|
9
|
+
</p>
|
|
10
|
+
<p>
|
|
11
|
+
<strong className="text-fg">Muted</strong> senders never notify and stay
|
|
12
|
+
out of the brief. Their mail still syncs and stays searchable.
|
|
13
|
+
</p>
|
|
14
|
+
<p>
|
|
15
|
+
<strong className="text-fg">Blocked</strong> senders never load images and
|
|
16
|
+
go straight to junk.
|
|
17
|
+
</p>
|
|
18
|
+
<p>
|
|
19
|
+
Tip: flag from the keyboard on any message — <Kbd>v</Kbd> VIP,{" "}
|
|
20
|
+
<Kbd>m</Kbd> mute, <Kbd>b</Kbd> block. Every rule an automation creates
|
|
21
|
+
shows up here and can be removed.
|
|
22
|
+
</p>
|
|
23
|
+
</div>
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
export const accountsHelp = (
|
|
27
|
+
<div className="space-y-3">
|
|
28
|
+
<p>
|
|
29
|
+
<strong className="text-fg">Sync health</strong> shows the IMAP connection
|
|
30
|
+
state and the last successful sync per account.
|
|
31
|
+
</p>
|
|
32
|
+
<p>
|
|
33
|
+
<strong className="text-fg">Error</strong> means the last connection
|
|
34
|
+
attempt failed — the raw server response is shown on the card. Reconnect
|
|
35
|
+
re-runs the connection test from the add-account wizard.
|
|
36
|
+
</p>
|
|
37
|
+
<p>
|
|
38
|
+
<strong className="text-fg">Muted</strong> accounts keep syncing but stay
|
|
39
|
+
out of the daily brief and unified counts.
|
|
40
|
+
</p>
|
|
41
|
+
</div>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
export const appearanceHelp = (
|
|
45
|
+
<div className="space-y-3">
|
|
46
|
+
<p>
|
|
47
|
+
<strong className="text-fg">Density</strong> controls how much information
|
|
48
|
+
fits on screen. Compact is great on smaller displays; Comfortable gives
|
|
49
|
+
each item more breathing room.
|
|
50
|
+
</p>
|
|
51
|
+
<p>
|
|
52
|
+
<strong className="text-fg">Theme</strong> switches between light, dark,
|
|
53
|
+
and system-preference modes instantly. The change takes effect across the
|
|
54
|
+
whole app immediately.
|
|
55
|
+
</p>
|
|
56
|
+
<p className="text-2xs text-fg-subtle">
|
|
57
|
+
Preferences are stored locally in this browser. Server-side sync is coming
|
|
58
|
+
soon.
|
|
59
|
+
</p>
|
|
60
|
+
</div>
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
export const advancedHelp = (
|
|
64
|
+
<div className="space-y-3">
|
|
65
|
+
<p>
|
|
66
|
+
<strong className="text-fg">Notification rules</strong> and data export
|
|
67
|
+
are coming in a future release.
|
|
68
|
+
</p>
|
|
69
|
+
<p>
|
|
70
|
+
A message Remit cannot read is{" "}
|
|
71
|
+
<strong className="text-fg">set aside</strong> rather than skipped, and
|
|
72
|
+
the folder keeps syncing. Setting one aside is a defect in Remit, so every
|
|
73
|
+
entry can be reported with the diagnostics already attached.
|
|
74
|
+
</p>
|
|
75
|
+
</div>
|
|
76
|
+
);
|
|
@@ -27,6 +27,7 @@ import { ErrorState } from "@/components/ui/ErrorState";
|
|
|
27
27
|
import { useReturnFromRedirect } from "@/hooks/useReturnFromRedirect";
|
|
28
28
|
import { formatRelativeTime } from "@/lib/format";
|
|
29
29
|
import { SETTINGS_ID_TO_PATH, SETTINGS_NAV_ITEMS } from "@/routes/settings";
|
|
30
|
+
import { accountsHelp } from "./-shared/help-copy";
|
|
30
31
|
|
|
31
32
|
const accountsSearchSchema = z.object({
|
|
32
33
|
editAccountId: z.string().optional(),
|
|
@@ -121,28 +122,6 @@ function needsReauth(account: RemitImapAccountResponse): boolean {
|
|
|
121
122
|
return account.connectionState === "reauth_required";
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
/* ------------------------------------------------------------------ */
|
|
125
|
-
/* Help rail copy — matches Storybook accountsHelp exactly */
|
|
126
|
-
/* ------------------------------------------------------------------ */
|
|
127
|
-
|
|
128
|
-
const accountsHelp = (
|
|
129
|
-
<div className="space-y-3">
|
|
130
|
-
<p>
|
|
131
|
-
<strong className="text-fg">Sync health</strong> shows the IMAP connection
|
|
132
|
-
state and the last successful sync per account.
|
|
133
|
-
</p>
|
|
134
|
-
<p>
|
|
135
|
-
<strong className="text-fg">Error</strong> means the last connection
|
|
136
|
-
attempt failed — the raw server response is shown on the card. Reconnect
|
|
137
|
-
re-runs the connection test from the add-account wizard.
|
|
138
|
-
</p>
|
|
139
|
-
<p>
|
|
140
|
-
<strong className="text-fg">Muted</strong> accounts keep syncing but stay
|
|
141
|
-
out of the daily brief and unified counts.
|
|
142
|
-
</p>
|
|
143
|
-
</div>
|
|
144
|
-
);
|
|
145
|
-
|
|
146
125
|
/* ------------------------------------------------------------------ */
|
|
147
126
|
/* Loading skeleton */
|
|
148
127
|
/* ------------------------------------------------------------------ */
|
|
@@ -11,26 +11,12 @@ import { SelfUpdatePanel } from "@/components/settings/SelfUpdatePanel";
|
|
|
11
11
|
import { TlsRootCaDownload } from "@/components/settings/TlsRootCaDownload";
|
|
12
12
|
import { AppVersion } from "@/components/ui/AppVersion";
|
|
13
13
|
import { SETTINGS_ID_TO_PATH, SETTINGS_NAV_ITEMS } from "@/routes/settings";
|
|
14
|
+
import { advancedHelp } from "./-shared/help-copy";
|
|
14
15
|
|
|
15
16
|
export const Route = createFileRoute("/settings/advanced")({
|
|
16
17
|
component: AdvancedSettings,
|
|
17
18
|
});
|
|
18
19
|
|
|
19
|
-
const advancedHelp = (
|
|
20
|
-
<div className="space-y-3">
|
|
21
|
-
<p>
|
|
22
|
-
<strong className="text-fg">Notification rules</strong> and data export
|
|
23
|
-
are coming in a future release.
|
|
24
|
-
</p>
|
|
25
|
-
<p>
|
|
26
|
-
A message Remit cannot read is{" "}
|
|
27
|
-
<strong className="text-fg">set aside</strong> rather than skipped, and
|
|
28
|
-
the folder keeps syncing. Setting one aside is a defect in Remit, so every
|
|
29
|
-
entry can be reported with the diagnostics already attached.
|
|
30
|
-
</p>
|
|
31
|
-
</div>
|
|
32
|
-
);
|
|
33
|
-
|
|
34
20
|
function AdvancedSettings() {
|
|
35
21
|
const navigate = useNavigate();
|
|
36
22
|
const [helpOpen, setHelpOpen] = useState(true);
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
type ThemePreference,
|
|
16
16
|
} from "@/lib/theme-preference";
|
|
17
17
|
import { SETTINGS_ID_TO_PATH, SETTINGS_NAV_ITEMS } from "@/routes/settings";
|
|
18
|
+
import { appearanceHelp } from "./-shared/help-copy";
|
|
18
19
|
|
|
19
20
|
export const Route = createFileRoute("/settings/appearance")({
|
|
20
21
|
component: AppearanceSettings,
|
|
@@ -32,29 +33,6 @@ function readDensity(): Density {
|
|
|
32
33
|
return (localStorage.getItem(DENSITY_KEY) as Density | null) ?? "comfortable";
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
/* ------------------------------------------------------------------ */
|
|
36
|
-
/* Help rail copy */
|
|
37
|
-
/* ------------------------------------------------------------------ */
|
|
38
|
-
|
|
39
|
-
const appearanceHelp = (
|
|
40
|
-
<div className="space-y-3">
|
|
41
|
-
<p>
|
|
42
|
-
<strong className="text-fg">Density</strong> controls how much information
|
|
43
|
-
fits on screen. Compact is great on smaller displays; Comfortable gives
|
|
44
|
-
each item more breathing room.
|
|
45
|
-
</p>
|
|
46
|
-
<p>
|
|
47
|
-
<strong className="text-fg">Theme</strong> switches between light, dark,
|
|
48
|
-
and system-preference modes instantly. The change takes effect across the
|
|
49
|
-
whole app immediately.
|
|
50
|
-
</p>
|
|
51
|
-
<p className="text-2xs text-fg-subtle">
|
|
52
|
-
Preferences are stored locally in this browser. Server-side sync is coming
|
|
53
|
-
soon.
|
|
54
|
-
</p>
|
|
55
|
-
</div>
|
|
56
|
-
);
|
|
57
|
-
|
|
58
36
|
/* ------------------------------------------------------------------ */
|
|
59
37
|
/* Page component */
|
|
60
38
|
/* ------------------------------------------------------------------ */
|
|
@@ -34,6 +34,7 @@ import { ErrorState } from "@/components/ui/ErrorState";
|
|
|
34
34
|
import { useDebouncedValue } from "@/hooks/useDebouncedValue";
|
|
35
35
|
import { formatDate } from "@/lib/format";
|
|
36
36
|
import { SETTINGS_ID_TO_PATH, SETTINGS_NAV_ITEMS } from "@/routes/settings";
|
|
37
|
+
import { sendersHelp } from "./-shared/help-copy";
|
|
37
38
|
|
|
38
39
|
export const Route = createFileRoute("/settings/senders")({
|
|
39
40
|
component: SendersSettings,
|
|
@@ -51,33 +52,6 @@ const groupLabels: Record<SenderGroup, string> = {
|
|
|
51
52
|
blocked: "Blocked",
|
|
52
53
|
};
|
|
53
54
|
|
|
54
|
-
/* ------------------------------------------------------------------ */
|
|
55
|
-
/* Help rail copy — matches Storybook sendersHelp exactly */
|
|
56
|
-
/* ------------------------------------------------------------------ */
|
|
57
|
-
|
|
58
|
-
const sendersHelp = (
|
|
59
|
-
<div className="space-y-3">
|
|
60
|
-
<p>
|
|
61
|
-
<strong className="text-fg">VIP</strong> senders get priority surface in
|
|
62
|
-
the daily brief and notification escalation, even when an account is
|
|
63
|
-
quiet.
|
|
64
|
-
</p>
|
|
65
|
-
<p>
|
|
66
|
-
<strong className="text-fg">Muted</strong> senders never notify and stay
|
|
67
|
-
out of the brief. Their mail still syncs and stays searchable.
|
|
68
|
-
</p>
|
|
69
|
-
<p>
|
|
70
|
-
<strong className="text-fg">Blocked</strong> senders never load images and
|
|
71
|
-
go straight to junk.
|
|
72
|
-
</p>
|
|
73
|
-
<p>
|
|
74
|
-
Tip: flag from the keyboard on any message — <Kbd>v</Kbd> VIP,{" "}
|
|
75
|
-
<Kbd>m</Kbd> mute, <Kbd>b</Kbd> block. Every rule an automation creates
|
|
76
|
-
shows up here and can be removed.
|
|
77
|
-
</p>
|
|
78
|
-
</div>
|
|
79
|
-
);
|
|
80
|
-
|
|
81
55
|
/* ------------------------------------------------------------------ */
|
|
82
56
|
/* VIP group: served from suggestions endpoint */
|
|
83
57
|
/* ------------------------------------------------------------------ */
|