react-flipping-content
Version:
A library to handle card flips in React
59 lines (58 loc) • 3.04 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlipCard = void 0;
var react_1 = __importDefault(require("react"));
var getStyles = function (direction) {
var isVertical = direction === 'vertical';
return {
root: {
perspective: 1000
},
innerRoot: __assign({ position: 'relative', width: '100%', height: '100%', transition: 'transform .5s', transformStyle: 'preserve-3d' }, (isVertical && {
transformOrigin: '100% center'
})),
innerRootFlipped: {
transform: isVertical ? 'rotateX(180deg)' : 'rotateY(180deg)'
},
cardSide: {
position: 'absolute',
width: '100%',
height: '100%',
backfaceVisibility: 'hidden'
},
backSide: {
transform: isVertical ? 'rotateX(180deg)' : 'rotateY(180deg)'
}
};
};
var FlipCard = function (_a) {
var flipped = _a.flipped, backSide = _a.backSide, frontSide = _a.frontSide, _b = _a.direction, direction = _b === void 0 ? 'horizontal' : _b, _c = _a.styles, overrideStyles = _c === void 0 ? {} : _c;
var _d = react_1.default.useState(0), rootHeight = _d[0], setRootHeight = _d[1];
var styles = getStyles(direction);
var measuredInnerRootRef = react_1.default.useCallback(function (node) {
if (node) {
setRootHeight(node.clientHeight);
}
}, []);
return (react_1.default.createElement("div", { style: __assign(__assign(__assign({}, styles.root), { height: rootHeight }), overrideStyles === null || overrideStyles === void 0 ? void 0 : overrideStyles.root) },
react_1.default.createElement("div", { style: __assign(__assign(__assign({}, styles.innerRoot), (flipped && styles.innerRootFlipped)), overrideStyles === null || overrideStyles === void 0 ? void 0 : overrideStyles.innerRoot) },
react_1.default.createElement("div", { style: __assign({}, styles.cardSide) },
react_1.default.createElement("div", { ref: measuredInnerRootRef, style: __assign({}, overrideStyles === null || overrideStyles === void 0 ? void 0 : overrideStyles.cardSide) }, frontSide)),
react_1.default.createElement("div", { style: __assign(__assign({}, styles.backSide), styles.cardSide) },
react_1.default.createElement("div", { style: __assign({}, overrideStyles === null || overrideStyles === void 0 ? void 0 : overrideStyles.cardSide) }, backSide)))));
};
exports.FlipCard = FlipCard;