import React from 'react'; import { HtmlContent } from './HtmlContent'; /** * Bootstrap Carousel Item */ export type BSCarouselItem = | { image: string; title?: string; content?: string; } | { title: string; content?: string; }; /** * Bootstrap Carousel Properties */ export type BSCarouselProps = { /** * Carousel ID, not required when only one instance */ id?: string; /** * Carousel Items */ items: BSCarouselItem[]; /** * Carousel Interval, default is 5000 */ interval?: number; /** * Show Controls, default is true */ controls?: boolean; /** * Show Indicators, default is true */ indicators?: boolean; /** * Fade Effect, default is false */ fade?: boolean; /** * Dark Theme, default is false */ dark?: boolean; /** * Show Caption, default is true */ caption?: boolean; /** * Caption Display Size */ captionDisplay?: 'sm' | 'md' | 'lg' | 'xl'; }; /** * Bootstrap Carousel Component * @param props Properties * @returns Component */ export function BSCarousel(props: BSCarouselProps) { // Destruct const { id = 'carousel', items, interval, controls = true, indicators = true, fade = false, dark = false, caption = true, captionDisplay } = props; const target = `#${id}`; const classNames = ['carousel', 'slide']; if (fade) { classNames.push('carousel-fade'); } if (dark) { classNames.push('carousel-dark'); } // Layout return (
{indicators && (
{items.map((item, index) => ( ))}
)}
{items.map((item, index) => { const captions = item.content && caption ? (

{item.title}

) : ( ); return (
{'image' in item ? ( {captions} ) : (
{captions}
)}
); })}
{controls && ( )}
); }