@etsoo/website
Version:
ETSOO CMS Based NextJs Website Framework
30 lines (29 loc) • 2.59 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import React from 'react';
import { HtmlContent } from './HtmlContent';
/**
* Bootstrap Carousel Component
* @param props Properties
* @returns Component
*/
export function BSCarousel(props) {
// 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 (_jsxs("div", { id: id, className: classNames.join(' '), "data-bs-ride": "carousel", children: [indicators && (_jsx("div", { className: "carousel-indicators", children: items.map((item, index) => (_jsx("button", { type: "button", "data-bs-target": target, "data-bs-slide-to": index, className: index === 0 ? 'active' : undefined, "aria-current": index === 0 ? 'true' : undefined, "aria-label": item.title }, index))) })), _jsx("div", { className: "carousel-inner", children: items.map((item, index) => {
const captions = item.content && caption ? (_jsxs("div", { className: captionDisplay
? `carousel-caption d-none d-${captionDisplay}-block`
: 'carousel-caption d-block', children: [_jsx("h4", { children: item.title }), _jsx(HtmlContent, { innerHTML: item.content })] })) : (_jsx(React.Fragment, {}));
return (_jsx("div", { className: index === 0
? 'carousel-item active'
: 'carousel-item', "data-bs-interval": interval, children: 'image' in item ? (_jsxs(React.Fragment, { children: [_jsx("img", { src: item.image }), captions] })) : (_jsx("div", { className: "carousel-caption-only", children: captions })) }, index));
}) }), controls && (_jsxs(React.Fragment, { children: [_jsxs("button", { className: "carousel-control-prev", type: "button", "data-bs-target": target, "data-bs-slide": "prev", children: [_jsx("span", { className: "carousel-control-prev-icon", "aria-hidden": "true" }), _jsx("span", { className: "visually-hidden", children: "Previous" })] }), _jsxs("button", { className: "carousel-control-next", type: "button", "data-bs-target": target, "data-bs-slide": "next", children: [_jsx("span", { className: "carousel-control-next-icon", "aria-hidden": "true" }), _jsx("span", { className: "visually-hidden", children: "Next" })] })] }))] }));
}