aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/client/components/OfflineBanner.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/components/OfflineBanner.tsx')
-rw-r--r--src/client/components/OfflineBanner.tsx39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/client/components/OfflineBanner.tsx b/src/client/components/OfflineBanner.tsx
new file mode 100644
index 0000000..357db33
--- /dev/null
+++ b/src/client/components/OfflineBanner.tsx
@@ -0,0 +1,39 @@
+import { useSync } from "../stores";
+
+export function OfflineBanner() {
+ const { isOnline, pendingCount } = useSync();
+
+ if (isOnline) {
+ return null;
+ }
+
+ return (
+ <div
+ data-testid="offline-banner"
+ role="status"
+ aria-live="polite"
+ style={{
+ backgroundColor: "#6c757d",
+ color: "white",
+ padding: "0.5rem 1rem",
+ textAlign: "center",
+ fontSize: "0.875rem",
+ display: "flex",
+ alignItems: "center",
+ justifyContent: "center",
+ gap: "0.5rem",
+ }}
+ >
+ <span aria-hidden="true">⚡</span>
+ <span>
+ You're offline. Changes will sync when you reconnect.
+ {pendingCount > 0 && (
+ <span data-testid="offline-pending-count">
+ {" "}
+ ({pendingCount} pending)
+ </span>
+ )}
+ </span>
+ </div>
+ );
+}