import {message} from '@common/i18n/message'; import {BgSelectorTabProps} from '@common/background-selector/bg-selector-tab-props'; import { BackgroundSelectorConfig, EditableBackgroundProps, } from '@common/background-selector/background-selector-config'; import {Trans} from '@common/i18n/trans'; import {RadioGroup} from '@common/ui/forms/radio-group/radio-group'; import {Radio} from '@common/ui/forms/radio-group/radio'; import {ButtonBase} from '@common/ui/buttons/button-base'; import clsx from 'clsx'; import {SegmentedRadio} from '@common/ui/forms/segmented-radio-group/segmented-radio'; import {SegmentedRadioGroup} from '@common/ui/forms/segmented-radio-group/segmented-radio-group'; const repeat = [ { value: 'no-repeat', label: message("Don't repeat"), }, { value: 'repeat-x', label: message('Horizontal'), }, { value: 'repeat-y', label: message('Vertical'), }, { value: 'repeat', label: message('Both'), }, ]; const size = [ { value: 'auto', label: message('Auto'), }, { value: 'cover', label: message('Stretch to fit'), }, { value: 'contain', label: message('Fit image'), }, ]; const position = [ 'left top', 'center top', 'right top', 'left center', 'center center', 'right center', 'left bottom', 'center bottom', 'right bottom', ]; export function AdvancedBackgroundPositionSelector({ value, onChange, }: BgSelectorTabProps) { return (
{ onChange?.({ ...value!, backgroundAttachment: newValue as EditableBackgroundProps['backgroundAttachment'], }); }} >
); } function RepeatSelector({ value, onChange, }: BgSelectorTabProps) { return (
{repeat.map(({value: repeatValue, label}) => ( { onChange?.({ ...value!, backgroundRepeat: repeatValue as EditableBackgroundProps['backgroundRepeat'], }); }} > ))}
); } function SizeSelector({ value, onChange, }: BgSelectorTabProps) { return (
{size.map(({value: sizeValue, label}) => ( { onChange?.({ ...value!, backgroundSize: sizeValue as EditableBackgroundProps['backgroundSize'], }); }} > ))}
); } function PositionSelector({ value, onChange, }: BgSelectorTabProps) { return (
{position.map(position => ( ))}
); } interface PositionSelectorButtonProps { value: BackgroundSelectorConfig | undefined; onChange: (value: BackgroundSelectorConfig) => void; position: string; disabled: boolean; } function PositionSelectorButton({ value, onChange, position, disabled, }: PositionSelectorButtonProps) { return ( { onChange({ ...value!, backgroundPosition: position, }); }} className={clsx( 'h-26 w-26 rounded border', value?.backgroundPosition === position ? 'bg-primary' : 'bg-alt', )} /> ); }