@cimpress/react-components
Version:
React components to support the MCP styleguide
136 lines • 5.09 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const css_1 = require("@emotion/css");
const internal_1 = require("../internal");
const colors_1 = require("../colors");
const overlayCss = (0, css_1.css) `
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
opacity: 0;
transition: 0.5s ease;
background-color: rgba(255, 255, 255, 0.8);
`;
const flexCenterCss = (0, css_1.css) `
display: -ms-flexbox;
display: flex;
-ms-flex-pack: center;
justify-content: center;
-ms-flex-align: center;
align-items: center;
`;
const itemCss = (0, css_1.css) `
position: absolute;
top: 0;
opacity: 0;
left: 0;
right: 0;
width: 100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
perspective: 1000px;
`;
const overlayContainerCss = (0, css_1.css) `
&:hover {
.crc-carousel-slide_overlay {
opacity: 1;
}
}
`;
const activeCss = (0, css_1.css) `
opacity: 1;
`;
const transitionLeftIn = (0, css_1.css) `
left: 100%;
transform: translateX(-100%);
transition: 0.6s ease-in-out transform;
`;
const transitionRightIn = (0, css_1.css) `
left: -100%;
transform: translateX(100%);
transition: 0.6s ease-in-out transform;
`;
const transitionLeftOut = (0, css_1.css) `
transform: translateX(-100%);
transition: 0.6s ease-in-out transform;
`;
const transitionRightOut = (0, css_1.css) `
transform: translateX(100%);
transition: 0.6s ease-in-out transform;
`;
const clickableCss = (0, css_1.css) `
cursor: pointer;
.crc-carousel-slide_overlay {
cursor: pointer;
}
`;
const CarouselSlide = (_a) => {
var { active, animateIn, animateOut, direction, index, onCarouselClick, showZoomOverlay, zoomOverlayContent } = _a, props = __rest(_a, ["active", "animateIn", "animateOut", "direction", "index", "onCarouselClick", "showZoomOverlay", "zoomOverlayContent"]);
const [classes, setClasses] = (0, react_1.useState)({ [itemCss]: true });
const shouldRenderZoomOverlay = showZoomOverlay && !!onCarouselClick;
(0, react_1.useEffect)(() => {
const initialClasses = {
[itemCss]: true,
[clickableCss]: !!onCarouselClick && active && !animateIn,
[activeCss]: active || animateIn || animateOut,
[overlayContainerCss]: shouldRenderZoomOverlay,
};
if (direction && animateIn) {
initialClasses[transitionLeftIn] = direction === 'next';
initialClasses[transitionRightIn] = direction === 'prev';
}
if (direction && animateOut) {
initialClasses[transitionLeftOut] = direction === 'next';
initialClasses[transitionRightOut] = direction === 'prev';
}
setClasses(initialClasses);
}, [onCarouselClick, active, animateIn, animateOut, shouldRenderZoomOverlay, direction]);
const onClick = () => {
onCarouselClick && onCarouselClick(index);
};
const zoomContent = zoomOverlayContent || react_1.default.createElement("span", null, "Zoom In");
return (react_1.default.createElement(internal_1.BlockButton, { onClick: onClick, className: (0, css_1.cx)('crc-carousel-slide', classes) },
props.children,
shouldRenderZoomOverlay ? (react_1.default.createElement("div", { className: (0, css_1.cx)(overlayCss, flexCenterCss, 'crc-carousel-slide_overlay'), style: { color: colors_1.teal.base } }, zoomContent)) : null));
};
exports.default = CarouselSlide;
//# sourceMappingURL=CarouselSlide.js.map