diff --git a/components/SeriesStats.tsx b/components/SeriesStats.tsx index 3480e7e..f301c54 100644 --- a/components/SeriesStats.tsx +++ b/components/SeriesStats.tsx @@ -1,3 +1,5 @@ +import { Card } from './ui' + interface SeriesStatsProps { sponsoring: number purchases: number @@ -17,10 +19,10 @@ export function SeriesStats({ sponsoring, purchases, reviewTips }: SeriesStatsPr return (
{items.map((item) => ( -
+
{item.label}
{item.value}
-
+ ))}
) diff --git a/components/UserArticlesEditPanel.tsx b/components/UserArticlesEditPanel.tsx index 89e8446..edca501 100644 --- a/components/UserArticlesEditPanel.tsx +++ b/components/UserArticlesEditPanel.tsx @@ -1,5 +1,6 @@ import { ArticleEditorForm } from './ArticleEditorForm' import type { ArticleDraft } from '@/lib/articlePublisher' +import { Card } from './ui' interface EditPanelProps { draft: ArticleDraft | null @@ -24,7 +25,7 @@ export function EditPanel({ return null } return ( -
+

Edit article

-
+ ) } diff --git a/components/authorPresentationEditor/AuthorPresentationEditor.tsx b/components/authorPresentationEditor/AuthorPresentationEditor.tsx index 26c6678..2bc07db 100644 --- a/components/authorPresentationEditor/AuthorPresentationEditor.tsx +++ b/components/authorPresentationEditor/AuthorPresentationEditor.tsx @@ -1,7 +1,7 @@ import { useEffect } from 'react' import { useNostrAuth } from '@/hooks/useNostrAuth' import { useAuthorPresentation } from '@/hooks/useAuthorPresentation' -import { Button } from '../ui' +import { Button, Card } from '../ui' import { t } from '@/lib/i18n' import { NoAccountView } from './NoAccountView' import { PresentationForm } from './PresentationForm' @@ -10,7 +10,7 @@ import { useAuthorPresentationState } from './useAuthorPresentationState' function SuccessNotice(params: { pubkey: string | null }): React.ReactElement { return ( -
+

{t('presentation.success')}

{t('presentation.successMessage')}

{params.pubkey ? ( @@ -22,7 +22,7 @@ function SuccessNotice(params: { pubkey: string | null }): React.ReactElement {
) : null} - + ) } diff --git a/components/markdownEditorTwoColumns/PagesManager.tsx b/components/markdownEditorTwoColumns/PagesManager.tsx index fe7ed1b..211c822 100644 --- a/components/markdownEditorTwoColumns/PagesManager.tsx +++ b/components/markdownEditorTwoColumns/PagesManager.tsx @@ -1,4 +1,4 @@ -import { Button, Textarea } from '../ui' +import { Button, Card, Textarea } from '../ui' import { t } from '@/lib/i18n' import type { Page } from '@/types/nostr' @@ -39,10 +39,10 @@ function PageEditor(params: { onImageUpload: (file: File) => Promise }): React.ReactElement { return ( -
+ -
+ ) } diff --git a/components/ui/Button.tsx b/components/ui/Button.tsx index 5321a5d..6f40fa0 100644 --- a/components/ui/Button.tsx +++ b/components/ui/Button.tsx @@ -17,6 +17,7 @@ interface ButtonProps { 'aria-expanded'?: boolean 'aria-haspopup'?: boolean | 'true' | 'false' | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' 'aria-selected'?: boolean + 'aria-controls'?: string role?: string id?: string } @@ -95,6 +96,17 @@ function ButtonContent({ ) } +function getCombinedClasses( + variant: ButtonVariant, + size: ButtonSize, + className: string +): string { + const variantClasses = getVariantClasses(variant) + const sizeClasses = getSizeClasses(size) + const baseClasses = 'inline-flex items-center justify-center rounded-lg font-medium transition-all border focus:outline-none focus:ring-2 focus:ring-neon-cyan disabled:opacity-50 disabled:cursor-not-allowed' + return `${baseClasses} ${variantClasses} ${sizeClasses} ${className}`.trim() +} + export const Button = React.forwardRef((props, ref): React.ReactElement => { const { children, @@ -109,14 +121,11 @@ export const Button = React.forwardRef((props, r 'aria-expanded': ariaExpanded, 'aria-haspopup': ariaHaspopup, 'aria-selected': ariaSelected, + 'aria-controls': ariaControls, role: roleProp, id, } = props - const variantClasses = getVariantClasses(variant) - const sizeClasses = getSizeClasses(size) - const baseClasses = 'inline-flex items-center justify-center rounded-lg font-medium transition-all border focus:outline-none focus:ring-2 focus:ring-neon-cyan disabled:opacity-50 disabled:cursor-not-allowed' - - const combinedClasses = `${baseClasses} ${variantClasses} ${sizeClasses} ${className}`.trim() + const combinedClasses = getCombinedClasses(variant, size, className) return ( +
{children}
diff --git a/components/ui/Modal.tsx b/components/ui/Modal.tsx index c1db0a0..b798fc7 100644 --- a/components/ui/Modal.tsx +++ b/components/ui/Modal.tsx @@ -1,5 +1,6 @@ import { useEffect, useRef } from 'react' import type { ReactNode } from 'react' +import { Button } from './Button' interface ModalProps { children: ReactNode @@ -28,13 +29,15 @@ function getSizeClasses(size: ModalProps['size']): string { function CloseButton({ onClose }: { onClose: () => void }): React.ReactElement { return ( - + ) } diff --git a/components/ui/Toast.tsx b/components/ui/Toast.tsx index 3377026..3d49b8f 100644 --- a/components/ui/Toast.tsx +++ b/components/ui/Toast.tsx @@ -1,5 +1,6 @@ import { useEffect } from 'react' import type { ReactNode } from 'react' +import { Button } from './Button' export type ToastVariant = 'info' | 'success' | 'warning' | 'error' @@ -55,13 +56,15 @@ export function Toast({ aria-label={ariaLabel} >
{children}
- + ) } diff --git a/docs/migration-status.md b/docs/migration-status.md index 4684714..79786dc 100644 --- a/docs/migration-status.md +++ b/docs/migration-status.md @@ -87,7 +87,16 @@ Aucun composant prioritaire restant. Tous les composants principaux ont été mi - ✅ `NotificationPanel.tsx` - Migration du conteneur principal vers Card - ✅ `AuthorFilterButton.tsx` - Migration vers Button avec support forwardRef - ✅ `AuthorFilterDropdown.tsx` - Migration de AuthorOption et AllAuthorsOption vers Button -- ✅ `components/ui/Button.tsx` - Ajout du support forwardRef, aria-expanded, aria-haspopup, aria-selected, role, id +- ✅ `components/ui/Button.tsx` - Ajout du support forwardRef, aria-expanded, aria-haspopup, aria-selected, aria-controls, role, id +- ✅ `components/ui/MobileMenu.tsx` - Migration des boutons vers Button +- ✅ `components/ui/Toast.tsx` - Migration du bouton de fermeture vers Button +- ✅ `components/ui/ErrorState.tsx` - Migration du conteneur vers Card +- ✅ `components/ui/Card.tsx` - Ajout du support role pour l'accessibilité +- ✅ `components/ui/Modal.tsx` - Migration du bouton de fermeture vers Button +- ✅ `components/SeriesStats.tsx` - Migration des conteneurs de statistiques vers Card +- ✅ `components/UserArticlesEditPanel.tsx` - Migration du conteneur principal vers Card +- ✅ `components/markdownEditorTwoColumns/PagesManager.tsx` - Migration de PageEditor vers Card +- ✅ `components/authorPresentationEditor/AuthorPresentationEditor.tsx` - Migration de SuccessNotice vers Card ## Erreurs corrigées