suisuyy commited on
Commit
387a205
·
1 Parent(s): c1e015d

Refactor App component for improved readability and update unzip script to extract zip files before copying README

Browse files
Files changed (2) hide show
  1. App.tsx +42 -43
  2. bk/unzipandremovezip.sh +1 -1
App.tsx CHANGED
@@ -141,7 +141,7 @@ const App: React.FC = () => {
141
  >
142
  {currentDataURL ? (
143
  <CanvasComponent
144
- key={`canvas-comp-${canvasWidth}-${canvasHeight}-${currentHistoryIndex}`}
145
  penColor={effectivePenColor}
146
  penSize={penSize}
147
  isEraserMode={isEraserMode}
@@ -174,64 +174,63 @@ const App: React.FC = () => {
174
  error={aiEditError}
175
  />
176
  )}
177
-
178
  {showZoomSlider && (
179
  <ZoomSlider
180
- zoomLevel={zoomLevel}
181
- onZoomChange={setZoomLevel}
182
  />
183
  )}
184
 
185
- <SettingsPanel
186
- isOpen={showSettingsPanel}
187
- onClose={handleToggleSettingsPanel}
188
- showZoomSlider={showZoomSlider}
189
- onShowZoomSliderChange={setShowZoomSlider}
190
- aiImageQuality={aiImageQuality}
191
- onAiImageQualityChange={setAiImageQuality}
192
- aiApiEndpoint={aiApiEndpoint}
193
- onAiApiEndpointChange={setAiApiEndpoint}
194
- isFullscreenActive={isFullscreenActive}
195
- onToggleFullscreen={toggleFullscreen}
196
- currentCanvasWidth={canvasWidth}
197
- currentCanvasHeight={canvasHeight}
198
- onCanvasSizeChange={handleCanvasSizeChange}
199
- />
200
-
201
- <ConfirmModal
202
- isOpen={confirmModalInfo.isOpen}
203
- title={confirmModalInfo.title}
204
- message={confirmModalInfo.message}
205
- onConfirm={confirmModalInfo.onConfirmAction}
206
- onCancel={closeConfirmModal}
207
- isConfirmDestructive={confirmModalInfo.isDestructive}
208
- confirmText={confirmModalInfo.confirmText}
209
- cancelText={confirmModalInfo.cancelText}
210
- />
 
 
 
 
211
 
212
- <div className="fixed bottom-20 left-1/2 -translate-x-1/2 z-[100] flex flex-col items-center space-y-2 w-full px-4 pointer-events-none">
213
  {toasts.map(toast => (
214
  <div
215
  key={toast.id}
216
- className={`px-3 py-2 rounded-md shadow-lg text-white text-xs transition-all duration-300 ease-in-out transform
217
- w-11/12 max-w-md break-words pointer-events-auto
218
- ${toast.type === 'success' ? 'bg-green-600' : ''}
219
- ${toast.type === 'error' ? 'bg-red-600' : ''}
220
- ${toast.type === 'info' ? 'bg-blue-600' : ''}
221
- opacity-100 translate-y-0`}
222
  role="alert"
223
- aria-live="assertive"
224
  >
225
  {toast.message}
226
  </div>
227
  ))}
228
  </div>
229
-
230
- <footer className="w-full text-center py-3 text-xs text-slate-500 bg-slate-200 border-t border-slate-300 mt-auto">
231
- React Paint App &copy; {new Date().getFullYear()}. Artwork autosaved to your browser's IndexedDB.
232
- </footer>
233
  </div>
234
  );
235
  };
236
 
237
- export default App;
 
141
  >
142
  {currentDataURL ? (
143
  <CanvasComponent
144
+ key={`canvas-comp-${canvasWidth}-${canvasHeight}`}
145
  penColor={effectivePenColor}
146
  penSize={penSize}
147
  isEraserMode={isEraserMode}
 
174
  error={aiEditError}
175
  />
176
  )}
177
+
178
  {showZoomSlider && (
179
  <ZoomSlider
180
+ zoomLevel={zoomLevel}
181
+ onZoomChange={setZoomLevel}
182
  />
183
  )}
184
 
185
+ {showSettingsPanel && (
186
+ <SettingsPanel
187
+ isOpen={showSettingsPanel}
188
+ onClose={handleToggleSettingsPanel}
189
+ showZoomSlider={showZoomSlider}
190
+ onShowZoomSliderChange={setShowZoomSlider}
191
+ aiImageQuality={aiImageQuality}
192
+ onAiImageQualityChange={setAiImageQuality}
193
+ aiApiEndpoint={aiApiEndpoint}
194
+ onAiApiEndpointChange={setAiApiEndpoint}
195
+ isFullscreenActive={isFullscreenActive}
196
+ onToggleFullscreen={toggleFullscreen}
197
+ currentCanvasWidth={canvasWidth}
198
+ currentCanvasHeight={canvasHeight}
199
+ onCanvasSizeChange={handleCanvasSizeChange}
200
+ />
201
+ )}
202
+
203
+ {confirmModalInfo.isOpen && (
204
+ <ConfirmModal
205
+ isOpen={confirmModalInfo.isOpen}
206
+ title={confirmModalInfo.title}
207
+ message={confirmModalInfo.message}
208
+ onConfirm={confirmModalInfo.onConfirmAction}
209
+ onCancel={closeConfirmModal}
210
+ isConfirmDestructive={confirmModalInfo.isDestructive}
211
+ confirmText={confirmModalInfo.confirmText}
212
+ cancelText={confirmModalInfo.cancelText}
213
+ />
214
+ )}
215
 
216
+ <div className="fixed top-4 right-4 z-[1200] space-y-2">
217
  {toasts.map(toast => (
218
  <div
219
  key={toast.id}
220
+ className={`px-4 py-2 rounded-md shadow-lg text-sm font-medium text-white
221
+ ${toast.type === 'success' ? 'bg-green-500' : ''}
222
+ ${toast.type === 'error' ? 'bg-red-500' : ''}
223
+ ${toast.type === 'info' ? 'bg-blue-500' : ''}
224
+ animate-fade-in-out
225
+ `}
226
  role="alert"
 
227
  >
228
  {toast.message}
229
  </div>
230
  ))}
231
  </div>
 
 
 
 
232
  </div>
233
  );
234
  };
235
 
236
+ export default App;
bk/unzipandremovezip.sh CHANGED
@@ -1 +1 @@
1
- cp bk/README.md ./;rm xpaintai*.zip
 
1
+ unzip xpaintai*.zip;cp bk/README.md ./;rm xpaintai*.zip