summaryrefslogtreecommitdiff
path: root/src/utils/storage.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-10-05 16:42:02 -0700
committerElizabeth Hunt <me@liz.coffee>2025-10-05 23:11:41 -0700
commitde43eb05d2e43ab31effce3dcca62ad91a556b26 (patch)
tree47a62b61bfc97dda639dea70627ecf3005ba7b02 /src/utils/storage.ts
parent35add63ec4dce39710095f17abd86777de9e5b49 (diff)
downloadansicolor-main.tar.gz
ansicolor-main.zip
Diffstat (limited to 'src/utils/storage.ts')
-rw-r--r--src/utils/storage.ts42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/utils/storage.ts b/src/utils/storage.ts
new file mode 100644
index 0000000..ee862ae
--- /dev/null
+++ b/src/utils/storage.ts
@@ -0,0 +1,42 @@
+import type { Grid } from '@/types/grid';
+
+export interface SavedArt {
+ id: string;
+ name: string;
+ grid: Grid;
+ timestamp: number;
+}
+
+const STORAGE_KEY = 'ansicolor-saved-art';
+const MAX_SAVES = 8;
+
+export const saveArt = (name: string, grid: Grid): void => {
+ const saves = getSavedArt();
+ const newSave: SavedArt = {
+ id: Date.now().toString(),
+ name,
+ grid,
+ timestamp: Date.now(),
+ };
+
+ const updatedSaves = [newSave, ...saves].slice(0, MAX_SAVES);
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(updatedSaves));
+};
+
+export const getSavedArt = (): SavedArt[] => {
+ const saved = localStorage.getItem(STORAGE_KEY);
+ if (!saved) return [];
+
+ try {
+ return JSON.parse(saved);
+ } catch (e) {
+ console.error('Failed to parse saved art', e);
+ return [];
+ }
+};
+
+export const deleteSavedArt = (id: string): void => {
+ const saves = getSavedArt();
+ const filtered = saves.filter(save => save.id !== id);
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(filtered));
+};