@teamsparta/stack-button
Version:
stack button
79 lines (75 loc) • 2.39 kB
JavaScript
"use client";
import {
addonCss,
buttonBaseCss,
buttonIconSizeCss,
buttonTextCss,
textButtonColorVariants
} from "./chunk-4TYBVGIV.mjs";
import {
__objRest,
__spreadProps,
__spreadValues
} from "./chunk-FUJQIYOF.mjs";
// src/TextButton/TextButton.tsx
import {
mapResponsive,
useBreakpointContext
} from "@teamsparta/stack-core";
import { vars } from "@teamsparta/stack-tokens";
import {
cloneElement,
forwardRef,
isValidElement
} from "react";
import { jsx, jsxs } from "@emotion/react/jsx-runtime";
var TextButton = forwardRef(
function _TextButton(_a, ref) {
var _b = _a, {
variant = "default",
size: sizeFromProps = "md",
style: styleFromProps,
leftAddon,
rightAddon,
children
} = _b, restProps = __objRest(_b, [
"variant",
"size",
"style",
"leftAddon",
"rightAddon",
"children"
]);
var _a2, _b2, _c, _d, _e, _f;
const breakpoints = useBreakpointContext("TextButton");
const sizes = mapResponsive(
breakpoints,
sizeFromProps,
(breakpoint, size) => ({
breakpoint,
size
})
);
const style = __spreadValues(__spreadValues({}, textButtonColorVariants[variant]), styleFromProps);
const buttonContainerCss = [
buttonBaseCss,
buttonIconSizeCss(sizes),
buttonTextCss(sizes)
];
const color = variant === "link" ? vars.blue[70] : vars.neutral[50];
const enhancedLeftIcon = isValidElement(leftAddon) ? cloneElement(leftAddon, __spreadProps(__spreadValues({}, (_a2 = leftAddon.props) != null ? _a2 : {}), {
color: (_c = (_b2 = leftAddon.props) == null ? void 0 : _b2.color) != null ? _c : color
})) : leftAddon;
const enhancedRightIcon = isValidElement(rightAddon) ? cloneElement(rightAddon, __spreadProps(__spreadValues({}, (_d = rightAddon.props) != null ? _d : {}), {
color: (_f = (_e = rightAddon.props) == null ? void 0 : _e.color) != null ? _f : color
})) : rightAddon;
return /* @__PURE__ */ jsxs("button", __spreadProps(__spreadValues({ ref, style, css: buttonContainerCss }, restProps), { children: [
leftAddon && /* @__PURE__ */ jsx("span", { css: addonCss, children: enhancedLeftIcon }),
children,
rightAddon && /* @__PURE__ */ jsx("span", { css: addonCss, children: enhancedRightIcon })
] }));
}
);
export {
TextButton
};