@sky-mavis/tanto-widget
Version:
Tanto Widget
97 lines (91 loc) • 2.55 kB
JavaScript
'use strict';
var jsxRuntime = require('@emotion/react/jsx-runtime');
var react = require('@emotion/react');
var react$1 = require('motion/react');
var m = require('motion/react-m');
var CheckCircleFillIcon = require('../../assets/CheckCircleFillIcon.cjs');
var CopyIcon = require('../../assets/CopyIcon.cjs');
var useClipboard = require('../../hooks/useClipboard.cjs');
var Box = require('../box/Box.cjs');
var Button = require('../button/Button.cjs');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var m__namespace = /*#__PURE__*/_interopNamespaceDefault(m);
const DEFAULT_ANIMATION_DURATION = 1_500;
function CopyButton({
intent = 'secondary',
size = 'xsmall',
value,
children,
...rest
}) {
const theme = react.useTheme();
const {
copied,
handleCopy
} = useClipboard.useClipboard(value, DEFAULT_ANIMATION_DURATION);
const containerStyles = {
align: 'center',
gap: children ? 4 : 0,
mx: children ? 0 : -2
};
return jsxRuntime.jsx(Button.Button, {
intent: intent,
size: size,
onClick: handleCopy,
disabled: !value,
...rest,
children: jsxRuntime.jsxs(Box.Box, {
...containerStyles,
children: [jsxRuntime.jsx(react$1.AnimatePresence, {
mode: "popLayout",
initial: false,
children: jsxRuntime.jsx(m__namespace.div, {
initial: {
opacity: 0,
scale: 0.5,
rotate: copied ? -180 : 180
},
animate: {
opacity: 1,
scale: 1,
rotate: 0
},
exit: {
opacity: 0,
scale: 0.5,
rotate: copied ? 180 : -180
},
transition: {
type: 'spring',
stiffness: 300,
damping: copied ? 20 : 30
},
children: copied ? jsxRuntime.jsx(CheckCircleFillIcon.CheckCircleFillIcon, {
color: theme.successColor,
size: 18
}) : jsxRuntime.jsx(CopyIcon.CopyIcon, {
size: 18
})
}, copied.toString())
}), children && jsxRuntime.jsx("div", {
children: children
})]
})
});
}
exports.CopyButton = CopyButton;