Files
metabuilder/fakemui/react/components/email/layout/SettingsLayout.tsx
johndoe6345789 89f83a7476 Organize fakemui folder: email components complete, docs consolidated
- Email components (Phase 2 COMPLETE):
  * Fixed 18 broken imports: @metabuilder/fakemui/hooks → ../../../src/utils/useAccessible
  * Renamed email-wip/ → email/ (production-ready)
  * Enabled exports in react/components/index.ts
  * All 22 email components now production-ready (1244 lines)

- Cleanup:
  * Removed wip/ directory (duplicate of src/utils/accessibility)
  * Preserved 15 Python/PyQt6 implementation files (full implementations, not stubs)
  * Moved 7 markdown files to fakemui/docs/ (better organization)

- Documentation:
  * Updated CLAUDE.md: Phase 2 email complete, added deletion safety gotcha
  * Created plan: txt/FAKEMUI_REORGANIZATION_PLAN_2026-02-01.txt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 20:18:49 +00:00

50 lines
1.4 KiB
TypeScript

// fakemui/react/components/email/layout/SettingsLayout.tsx
import React, { forwardRef } from 'react'
import { Box, BoxProps, Tabs, Tab } from '..'
import { useAccessible } from '../../../src/utils/useAccessible'
export interface SettingsSection {
id: string
label: string
content: React.ReactNode
}
export interface SettingsLayoutProps extends BoxProps {
sections: SettingsSection[]
activeSection?: string
onSectionChange?: (sectionId: string) => void
testId?: string
}
export const SettingsLayout = forwardRef<HTMLDivElement, SettingsLayoutProps>(
({ sections, activeSection, onSectionChange, testId: customTestId, ...props }, ref) => {
const accessible = useAccessible({
feature: 'email',
component: 'settings-layout',
identifier: customTestId || 'settings'
})
const current = activeSection || sections[0]?.id
return (
<Box
ref={ref}
className="settings-layout"
{...accessible}
{...props}
>
<Tabs value={current} onChange={(_, value) => onSectionChange?.(value as string)}>
{sections.map((section) => (
<Tab key={section.id} label={section.label} value={section.id} />
))}
</Tabs>
<Box className="settings-content">
{sections.find((s) => s.id === current)?.content}
</Box>
</Box>
)
}
)
SettingsLayout.displayName = 'SettingsLayout'