import clsx from 'clsx'; import {Trans} from '@common/i18n/trans'; import {ImageIcon} from '@common/icons/material/Image'; import {FormatColorFillIcon} from '@common/icons/material/FormatColorFill'; import {GradientIcon} from '@common/icons/material/Gradient'; import {ReactElement, ReactNode, useState} from 'react'; import {BgSelectorTabProps} from '@common/background-selector/bg-selector-tab-props'; import {ColorBackgroundTab} from '@common/background-selector/color-background-tab'; import {GradientBackgroundTab} from '@common/background-selector/gradient-background-tab'; import {ImageBackgroundTab} from '@common/background-selector/image-background-tab/image-background-tab'; import {BackgroundSelectorConfig} from '@common/background-selector/background-selector-config'; const TabMap: Record< 'color' | 'gradient' | 'image', (value: BgSelectorTabProps) => ReactElement > = { color: ColorBackgroundTab, gradient: GradientBackgroundTab, image: ImageBackgroundTab, }; type TabName = keyof typeof TabMap; interface BackgroundSelectorProps { className?: string; value: BackgroundSelectorConfig | undefined; onChange: (newValue: BackgroundSelectorConfig) => void; tabColWidth?: string; isInsideDialog?: boolean; positionSelector?: 'simple' | 'advanced'; diskPrefix?: string; } export function BackgroundSelector({ className, value, onChange, tabColWidth, isInsideDialog, positionSelector = 'simple', diskPrefix, }: BackgroundSelectorProps) { const [activeTab, setActiveTab] = useState(() => { if (value?.type === 'image') return 'image'; if (value?.type === 'gradient') return 'gradient'; return 'color'; }); const Tab = TabMap[activeTab]; return (
); } interface TypeSelectorProps { activeTab: TabName; onTabChange: (tab: TabName) => void; } function TypeSelector({activeTab, onTabChange}: TypeSelectorProps) { return (
} title={} onClick={() => onTabChange('color')} /> } title={} onClick={() => onTabChange('gradient')} /> } title={} onClick={() => onTabChange('image')} />
); } interface TypeButtonProps { isActive: boolean; icon: ReactNode; title: ReactNode; onClick?: () => void; } function TypeButton({isActive, icon, title, onClick}: TypeButtonProps) { return (
{icon}
{title}
); }