| import { useMemo } from 'react'; |
| import type { SlideBackground } from '@/lib/types/slides'; |
|
|
| |
| |
| |
| export function useSlideBackgroundStyle(background: SlideBackground | undefined) { |
| const backgroundStyle = useMemo<React.CSSProperties>(() => { |
| if (!background) return { backgroundColor: '#fff' }; |
|
|
| const { type, color, image, gradient } = background; |
|
|
| |
| if (type === 'solid') return { backgroundColor: color }; |
|
|
| |
| |
| if (type === 'image' && image) { |
| const { src, size } = image; |
| if (!src) return { backgroundColor: '#fff' }; |
| if (size === 'repeat') { |
| return { |
| backgroundImage: `url(${src})`, |
| backgroundRepeat: 'repeat', |
| backgroundSize: 'contain', |
| }; |
| } |
| return { |
| backgroundImage: `url(${src})`, |
| backgroundRepeat: 'no-repeat', |
| backgroundSize: size || 'cover', |
| }; |
| } |
|
|
| |
| if (type === 'gradient' && gradient) { |
| const { type, colors, rotate } = gradient; |
| const list = colors.map((item) => `${item.color} ${item.pos}%`); |
|
|
| if (type === 'radial') { |
| return { backgroundImage: `radial-gradient(${list.join(',')})` }; |
| } |
| return { |
| backgroundImage: `linear-gradient(${rotate}deg, ${list.join(',')})`, |
| }; |
| } |
|
|
| return { backgroundColor: '#fff' }; |
| }, [background]); |
|
|
| return { |
| backgroundStyle, |
| }; |
| } |
|
|