UNPKG

@arolariu/components

Version:

A collection of reusable components for React applications, built as ESM & CJS modules with tree shake, minify and bundler optimizations enabled, for the lowest bundle size (import cost)! 😍

66 lines (65 loc) 3.27 kB
"use client"; import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime"; import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react"; import * as __WEBPACK_EXTERNAL_MODULE_motion_react_9decfa63__ from "motion/react"; import * as __WEBPACK_EXTERNAL_MODULE__lib_utils_js_c09d30d7__ from "../../lib/utils.js"; const defaultSpanClassName = "absolute inset-0 flex items-center justify-center rounded-lg"; const FlipButton = /*#__PURE__*/ __WEBPACK_EXTERNAL_MODULE_react__.forwardRef(({ frontText, backText, transition = { type: "spring", stiffness: 280, damping: 20 }, className, frontClassName, backClassName, from = "top", ...props }, ref)=>{ const isVertical = "top" === from || "bottom" === from; const rotateAxis = isVertical ? "rotateX" : "rotateY"; const frontOffset = "top" === from || "left" === from ? "50%" : "-50%"; const backOffset = "top" === from || "left" === from ? "-50%" : "50%"; const buildVariant = (opacity, rotation, offset = null)=>({ opacity, [rotateAxis]: rotation, ...isVertical && null !== offset ? { y: offset } : {}, ...!isVertical && null !== offset ? { x: offset } : {} }); const frontVariants = { initial: buildVariant(1, 0, "0%"), hover: buildVariant(0, 90, frontOffset) }; const backVariants = { initial: buildVariant(0, 90, backOffset), hover: buildVariant(1, 0, "0%") }; return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE_motion_react_9decfa63__.motion.button, { ref: ref, initial: "initial", whileHover: "hover", whileTap: { scale: 0.95 }, className: (0, __WEBPACK_EXTERNAL_MODULE__lib_utils_js_c09d30d7__.cn)("relative inline-block h-10 px-4 py-2 text-sm font-medium cursor-pointer perspective-[1000px] focus:outline-none", className), ...props, children: [ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_motion_react_9decfa63__.motion.span, { variants: frontVariants, transition: transition, className: (0, __WEBPACK_EXTERNAL_MODULE__lib_utils_js_c09d30d7__.cn)(defaultSpanClassName, "bg-muted text-black dark:text-white", frontClassName), children: frontText }), /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_motion_react_9decfa63__.motion.span, { variants: backVariants, transition: transition, className: (0, __WEBPACK_EXTERNAL_MODULE__lib_utils_js_c09d30d7__.cn)(defaultSpanClassName, "bg-primary text-primary-foreground", backClassName), children: backText }), /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("span", { className: "invisible", children: frontText }) ] }); }); FlipButton.displayName = "FlipButton"; export { FlipButton }; //# sourceMappingURL=flip-button.js.map