@remit/web-client 0.0.183 → 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.183",
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": {
@@ -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
  /* ------------------------------------------------------------------ */