diff --git a/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/DrawerContent.tsx b/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/DrawerContent.tsx
index 807116d..b8a1196 100644
--- a/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/DrawerContent.tsx
+++ b/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/DrawerContent.tsx
@@ -1,4 +1,5 @@
import styled from "@emotion/styled";
+import LocalStorageAlert from "./LocalStorageAlert";
import WorkbookList from "./WorkbookList";
interface DrawerContentProps {
@@ -10,9 +11,14 @@ function DrawerContent(props: DrawerContentProps) {
const { setModel, onDelete } = props;
return (
-
-
-
+ <>
+
+
+
+
+
+
+ >
);
}
@@ -22,8 +28,17 @@ const ContentContainer = styled("div")`
gap: 4px;
padding: 16px 12px;
height: 100%;
- overflow: scroll;
+ overflow-y: auto;
+ overflow-x: hidden;
font-size: 12px;
`;
+const LocalStorageAlertWrapper = styled("div")`
+ position: absolute;
+ bottom: 56px;
+ left: 0;
+ right: 0;
+ padding: 12px;
+`;
+
export default DrawerContent;
diff --git a/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/LocalStorageAlert.tsx b/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/LocalStorageAlert.tsx
new file mode 100644
index 0000000..166aa1b
--- /dev/null
+++ b/webapp/app.ironcalc.com/frontend/src/components/LeftDrawer/LocalStorageAlert.tsx
@@ -0,0 +1,110 @@
+import styled from "@emotion/styled";
+import { Alert } from "@mui/material";
+import { CircleAlert, X } from "lucide-react";
+import { useState } from "react";
+
+const ALERT_DISMISSED_KEY = "localStorageAlertDismissed";
+
+function LocalStorageAlert() {
+ const [isAlertVisible, setIsAlertVisible] = useState(
+ () => localStorage.getItem(ALERT_DISMISSED_KEY) !== "true",
+ );
+
+ const handleClose = () => {
+ setIsAlertVisible(false);
+ localStorage.setItem(ALERT_DISMISSED_KEY, "true");
+ };
+
+ if (!isAlertVisible) {
+ return null;
+ }
+
+ return (
+ }
+ action={
+
+
+
+ }
+ sx={{
+ padding: 0,
+ borderRadius: "8px",
+ backgroundColor: "rgba(255, 255, 255, 0.4)",
+ backdropFilter: "blur(10px)",
+ border: "1px solid #e0e0e0",
+ boxShadow: "0px 1px 3px 0px #0000001A",
+ fontFamily: "Inter",
+ fontWeight: "400",
+ lineHeight: "16px",
+ zIndex: 1,
+ }}
+ >
+ Heads up!
+
+ IronCalc stores your data only in your browser's local storage.
+
+
+ To keep your work safe, please download your XLSX file regularly.
+
+
+ );
+}
+
+const AlertWrapper = styled(Alert)`
+ margin: 0;
+ .MuiAlert-message {
+ font-size: 11px;
+ padding: 12px 12px 12px 6px;
+ color: #333333;
+ }
+ .MuiAlert-icon {
+ height: 12px;
+ width: 12px;
+ color: #f2994a;
+ margin: 2px 0px 0px 8px;
+ padding: 6px 0px;
+ }
+`;
+
+const AlertTitle = styled("h2")`
+ font-size: 11px;
+ font-weight: 600;
+ line-height: 16px;
+ color: #333333;
+ margin: 0px 0px 4px 0px;
+`;
+
+const AlertBody = styled("p")`
+ font-weight: 400;
+ line-height: 16px;
+ margin: 0;
+`;
+
+const CloseButton = styled("button")`
+ position: absolute;
+ right: 4px;
+ top: 4px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 4px;
+ color: #666666;
+ border-radius: 4px;
+ transition: background-color 0.2s;
+ svg {
+ width: 12px;
+ height: 12px;
+ }
+ &:hover {
+ background-color: #e0e0e0;
+ }
+ &:active {
+ background-color: #9e9e9e;
+ }
+`;
+
+export default LocalStorageAlert;