From dfa6c4074323f1977a2a896162870830e2ea02aa Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Wed, 4 Feb 2026 12:50:38 +0500 Subject: [PATCH] refactor: change null to undefined --- plans/core-features-plan.md | 12 +++++++---- src/components/AppContainer.svelte | 28 ++++++++++++------------- src/components/AppContent.svelte | 26 +++++++++-------------- src/components/BackgroundPreview.svelte | 2 +- src/components/ErrorMessage.svelte | 8 +++---- src/components/ImageCropper.svelte | 6 +++--- src/components/ImageManager.svelte | 2 +- src/components/ImageUpload.svelte | 16 +++++++------- src/components/MainSection.svelte | 19 ++++------------- src/components/PanelList.svelte | 10 ++++----- src/components/Sidebar.svelte | 21 ++++--------------- src/components/TextManager.svelte | 6 +++--- src/lib/services/imageService.ts | 3 ++- src/lib/types/panel.ts | 2 +- src/lib/utils/panelStorage.ts | 7 +++---- src/routes/+page.svelte | 8 +++---- src/services/exportService.ts | 6 +++--- src/services/imageService.ts | 1 + src/stores/panelStore.ts | 6 +++--- src/stores/uiStore.ts | 8 +++---- tsconfig.json | 4 +++- 21 files changed, 89 insertions(+), 112 deletions(-) diff --git a/plans/core-features-plan.md b/plans/core-features-plan.md index 137a00b..555e54f 100644 --- a/plans/core-features-plan.md +++ b/plans/core-features-plan.md @@ -40,6 +40,7 @@ interface ImageUploadProps { - **Error Handling**: Invalid crop areas ✅ **Implementation Details:** + - Integrated cropperjs v2.1.0 with Web Components - Used `$toCanvas()` method to get HTMLCanvasElement - Implemented proper error handling with user-friendly messages @@ -147,7 +148,7 @@ interface Panel { } interface PanelManagerProps { - currentPanel: Panel | null; + currentPanel: Panel | undefined; onPanelUpdate: (panel: Panel) => void; } @@ -255,11 +256,11 @@ interface ImageUploadResult { ```typescript // Core stores -export const panelStore = writable(null); +export const panelStore = writable(undefined); export const uiStore = writable({ isLoading: false, - error: null as string | null, - currentStep: "upload" as "upload" | "crop" | "text" | "preview", + error: string | undefined, + currentStep: "upload" | "crop" | "text" | "preview", }); ``` @@ -359,11 +360,13 @@ _Estimated Duration: 5 weeks_ **Challenge:** cropperjs v2.x uses Web Components API which differs significantly from v1.x **Solution:** + 1. Used `getCropperCanvas()` to get `` Web Component 2. Called `$toCanvas()` method to convert to HTMLCanvasElement 3. Applied `toDataURL()` on the resulting canvas to get base64 image **Code Example:** + ```typescript const cropperCanvasElement = cropper.getCropperCanvas(); const canvas = await cropperCanvasElement.$toCanvas({ @@ -375,6 +378,7 @@ const croppedImage = canvas.toDataURL("image/png"); ``` **Key Points:** + - cropperjs v2.x methods return Web Components, not standard DOM elements - `$toCanvas()` is an async method that returns HTMLCanvasElement - Proper error handling is essential for user experience diff --git a/src/components/AppContainer.svelte b/src/components/AppContainer.svelte index 6b8827c..ce4babc 100644 --- a/src/components/AppContainer.svelte +++ b/src/components/AppContainer.svelte @@ -4,10 +4,10 @@ import AppContent from "./AppContent.svelte"; interface Props { - errorMessage: string | null; - uploadedImage: string | null; + errorMessage: string | undefined; + uploadedImage: string | undefined; texts: Array<{ id: string; text: string }>; - backgroundImage: string | null; + backgroundImage: string | undefined; panels: any[]; onUploadNewImage: () => void; onImageUpload: (image: string) => void; @@ -34,12 +34,12 @@ onTextUpdate, onTextDelete, onDownload, - onDownloadAll + onDownloadAll, }: Props = $props();
- + @@ -48,15 +48,15 @@ {texts} {backgroundImage} {panels} - onImageUpload={onImageUpload} - onCropComplete={onCropComplete} - onCropCancel={onCropCancel} - onTextAdd={onTextAdd} - onTextUpdate={onTextUpdate} - onTextDelete={onTextDelete} - onUploadNewImage={onUploadNewImage} - onDownload={onDownload} - onDownloadAll={onDownloadAll} + {onImageUpload} + {onCropComplete} + {onCropCancel} + {onTextAdd} + {onTextUpdate} + {onTextDelete} + {onUploadNewImage} + {onDownload} + {onDownloadAll} />
diff --git a/src/components/AppContent.svelte b/src/components/AppContent.svelte index 4aff209..826dacb 100644 --- a/src/components/AppContent.svelte +++ b/src/components/AppContent.svelte @@ -3,9 +3,9 @@ import Sidebar from "./Sidebar.svelte"; interface Props { - uploadedImage: string | null; + uploadedImage: string | undefined; texts: Array<{ id: string; text: string }>; - backgroundImage: string | null; + backgroundImage: string | undefined; panels: any[]; onImageUpload: (image: string) => void; onCropComplete: (croppedImage: string) => void; @@ -31,7 +31,7 @@ onTextDelete, onUploadNewImage, onDownload, - onDownloadAll + onDownloadAll, }: Props = $props(); @@ -39,20 +39,14 @@ - +