Files
metabuilder/hooks/email/index.ts
johndoe6345789 f22caa6e16 refactor(emailclient): full a11y pass, component decomposition, keyboard shortcuts
Accessibility:
- All components: data-testid, aria-label, aria-pressed, aria-current
- ComposeWindow: role=dialog, aria-modal, focus trap, Escape handler
- EmailCard: role=article, keyboard nav (Enter/Space), aria-current
- ThreadList: role=list with listitem wrappers, role=status empty state
- FolderNavigation: role=navigation, role=list, aria-current
- RecipientInput: role=group, aria-label per type, onKeyPress→onKeyDown
- BodyEditor: role=toolbar, aria-pressed on mode buttons
- StarButton: MaterialIcon (star/star_border), dynamic aria-label
- MarkAsReadCheckbox: dynamic label based on read state
- EmailHeader: role=banner, <time> element, data-testids

Component decomposition:
- Extract useEmailClient hook (state + callbacks)
- Extract demo-emails.ts (data constants)
- EmailClientContent.tsx: 267→127 LOC (composition only)

New: useKeyboardShortcuts hook (Gmail-style, 47 LOC)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 15:51:54 +00:00

14 lines
741 B
TypeScript

/**
* Email custom hooks for React
* Provides hooks for email synchronization, storage, accounts, and message management
* @packageDocumentation
*/
export { useEmailSync, type UseEmailSyncResult } from './useEmailSync'
export { useEmailStore, type UseEmailStoreResult, type StoredMessage } from './useEmailStore'
export { useMailboxes, type UseMailboxesResult, type Folder } from './useMailboxes'
export { useAccounts, type UseAccountsResult, type EmailAccount } from './useAccounts'
export { useCompose, type UseComposeResult, type EmailDraft } from './useCompose'
export { useMessages, type UseMessagesResult, type Message } from './useMessages'
export { useKeyboardShortcuts, type KeyboardShortcutMap } from './useKeyboardShortcuts'