## Button Component System - Create dedicated components/ui/buttons directory with 6 specialized button components: - Button.tsx: Universal button with variants (primary, secondary, danger, link) and sizes - ActionButton.tsx: Action buttons matching existing patterns - BackButton.tsx: Navigation back buttons - CancelLink.tsx: Cancel/link style buttons - CloseButton.tsx: Modal/preview close buttons with variants - NavigationButton.tsx: Presentation navigation buttons - Update key components to use new button system (SlideEditor, ContentEditor, Modal, AlertDialog, ConfirmDialog) - Replace inline styled-jsx with proper CSS files for AlertDialog and ConfirmDialog ## Barrel Export Elimination - Remove all barrel export files violating IMPORT_STANDARDS.md: - src/themes/index.ts - src/components/themes/index.ts - src/components/presentations/index.ts - src/components/slide-editor/index.ts - Update 15+ files to use direct imports from themeLoader.ts instead of barrel exports - Fix function naming conflict in ThemeDetailPage.tsx (loadTheme shadowing) - Follow project standards: direct imports with .tsx extensions for better Vite performance ## Benefits - Improved Vite tree shaking and module resolution performance - Consistent, reusable button system across application - Adherence to project coding standards and import conventions - Reduced bundle size through elimination of barrel export overhead 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
69 lines
1.5 KiB
TypeScript
69 lines
1.5 KiB
TypeScript
import React from 'react';
|
||
import { Modal } from './Modal.tsx';
|
||
import { Button } from './buttons/Button.tsx';
|
||
import './AlertDialog.css';
|
||
|
||
interface AlertDialogProps {
|
||
isOpen: boolean;
|
||
onClose: () => void;
|
||
title?: string;
|
||
message: string;
|
||
type?: 'info' | 'warning' | 'error' | 'success';
|
||
confirmText?: string;
|
||
}
|
||
|
||
export const AlertDialog: React.FC<AlertDialogProps> = ({
|
||
isOpen,
|
||
onClose,
|
||
title,
|
||
message,
|
||
type = 'info',
|
||
confirmText = 'OK'
|
||
}) => {
|
||
const getIcon = () => {
|
||
switch (type) {
|
||
case 'error':
|
||
return '❌';
|
||
case 'warning':
|
||
return '⚠️';
|
||
case 'success':
|
||
return '✅';
|
||
default:
|
||
return 'ℹ️';
|
||
}
|
||
};
|
||
|
||
const getTitle = () => {
|
||
if (title) return title;
|
||
|
||
switch (type) {
|
||
case 'error':
|
||
return 'Error';
|
||
case 'warning':
|
||
return 'Warning';
|
||
case 'success':
|
||
return 'Success';
|
||
default:
|
||
return 'Information';
|
||
}
|
||
};
|
||
|
||
return (
|
||
<Modal isOpen={isOpen} onClose={onClose} size="small" title={getTitle()}>
|
||
<div className="alert-dialog">
|
||
<div className="alert-content">
|
||
<div className="alert-icon">{getIcon()}</div>
|
||
<p className="alert-message">{message}</p>
|
||
</div>
|
||
<div className="alert-actions">
|
||
<Button
|
||
variant="primary"
|
||
onClick={onClose}
|
||
>
|
||
{confirmText}
|
||
</Button>
|
||
</div>
|
||
</div>
|
||
</Modal>
|
||
);
|
||
}; |