@payfit/unity-components
Version:
187 lines (186 loc) • 5.75 kB
JavaScript
import { Icon as e } from "../../../../components/icon/Icon.js";
import { Spinner as t } from "../../../../components/spinner/Spinner.js";
import { buttonBase as n } from "../../../../components/button/Button.variants.js";
import { aiGradientEffect as r, aiGradientSurfaceEffect as i } from "../../utils/ai-gradient-effect.js";
import { forwardRef as a, useMemo as o } from "react";
import { uyMerge as s, uyTv as c } from "@payfit/unity-themes";
import { jsx as l, jsxs as u } from "react/jsx-runtime";
import { useIntl as d } from "react-intl";
import { Button as f } from "react-aria-components/Button";
//#region src/modules/ai-kit/components/ai-button/AIButton.tsx
var p = c({
slots: {
base: [
"uy:relative",
"uy:isolate",
"uy:[--uy-ai-gradient-border-width:1px]"
],
aiSurface: [i()],
content: [
"uy:relative",
"uy:z-20",
"uy:inline-flex",
"uy:items-center",
"uy:gap-50"
],
label: [
"uy:truncate",
"uy:min-w-0",
"uy:w-(--uy-button-label-truncation-length)"
]
},
variants: {
variant: {
outlined: { base: [
"uy:text-content-neutral-enabled",
"uy:enabled:data-[hovered=\"true\"]:[--uy-ai-gradient-border-width:2px]",
"uy:enabled:data-[focus-visible=\"true\"]:[--uy-ai-gradient-border-width:2px]",
"uy:enabled:hover:[--uy-ai-gradient-border-width:2px]",
"uy:enabled:focus-visible:[--uy-ai-gradient-border-width:2px]",
"uy:enabled:data-[hovered=\"true\"]:text-content-neutral-hover",
"uy:enabled:active:text-content-neutral-active",
"uy:enabled:data-[pressed=\"true\"]:text-content-neutral-pressed",
"uy:enabled:data-[focus-visible=\"true\"]:text-content-neutral-focus"
] },
ghost: { base: [
"uy:bg-transparent",
"uy:text-content-neutral-enabled",
"uy:enabled:data-[hovered=\"true\"]:text-content-neutral-hover",
"uy:enabled:data-[hovered=\"true\"]:[--uy-ai-gradient-border-width:2px]",
"uy:enabled:active:text-content-neutral-active",
"uy:enabled:data-[pressed=\"true\"]:text-content-neutral-pressed",
"uy:enabled:data-[focus-visible=\"true\"]:text-content-neutral-focus",
"uy:enabled:data-[focus-visible=\"true\"]:[--uy-ai-gradient-border-width:2px]"
] }
},
isDisabled: { true: {
base: ["uy:disabled:text-content-neutral-disabled", "uy:data-[loading]:text-content-neutral-disabled"],
aiSurface: "uy:hidden"
} },
isLoading: { true: { aiSurface: "uy:hidden" } }
},
compoundVariants: [
{
isDisabled: !1,
variant: "outlined",
className: { base: r({
gradient: "linear",
variant: "outlined",
glow: !1
}) }
},
{
isDisabled: !1,
variant: "ghost",
className: { base: r({
gradient: "linear",
variant: "ghost",
glow: !1
}) }
},
{
isDisabled: !0,
variant: "outlined",
className: { base: [
"uy:text-content-neutral-disabled",
"uy:disabled:border-1",
"uy:disabled:border-border-neutral-high-disabled",
"uy:data-[loading]:border-1",
"uy:data-[loading]:border-border-neutral-high-disabled",
"uy:enabled:data-[hovered=\"true\"]:text-content-neutral-disabled",
"uy:enabled:active:text-content-neutral-disabled",
"uy:enabled:data-[pressed=\"true\"]:text-content-neutral-disabled",
"uy:enabled:data-[focus-visible=\"true\"]:text-content-neutral-disabled"
] }
},
{
isDisabled: !0,
variant: "ghost",
className: { base: [
"uy:bg-surface-neutral-low-disabled",
"uy:text-content-neutral-disabled",
"uy:enabled:data-[hovered=\"true\"]:bg-surface-neutral-low-disabled",
"uy:enabled:data-[hovered=\"true\"]:text-content-neutral-disabled",
"uy:enabled:active:bg-surface-neutral-low-disabled",
"uy:enabled:active:text-content-neutral-disabled",
"uy:enabled:data-[pressed=\"true\"]:bg-surface-neutral-low-disabled",
"uy:enabled:data-[pressed=\"true\"]:text-content-neutral-disabled",
"uy:enabled:data-[focus-visible=\"true\"]:bg-surface-neutral-low-disabled",
"uy:enabled:data-[focus-visible=\"true\"]:text-content-neutral-disabled"
] }
}
],
defaultVariants: {
variant: "outlined",
isDisabled: !1,
isLoading: !1
}
}), m = (n, r, i) => n ? /* @__PURE__ */ l(t, {
size: "small",
color: "inherit",
label: r
}) : i ? /* @__PURE__ */ l(e, {
"aria-hidden": "true",
color: "inherit",
"data-unity-icon": "prefix",
role: "presentation",
size: 20,
src: i
}) : null, h = a(({ children: t, isDisabled: r = !1, isLoading: i = !1, loadingLabel: a, mode: c, prefixIcon: h, suffixIcon: g, truncateLabelLength: _, variant: v, ...y }, b) => {
let x = d(), S = r || i, C = (a?.trim() ? a : void 0) ?? x.formatMessage({
id: "unity:component:common:loading:label",
defaultMessage: "Loading..."
}), w = o(() => n({
isDisabled: S,
isLoading: i,
mode: c === "compact" ? "compact" : "default",
size: "default"
}), [
S,
i,
c
]), T = o(() => p({
isDisabled: S,
isLoading: i,
variant: v
}), [
S,
i,
v
]);
return /* @__PURE__ */ u(f, {
...y,
ref: b,
"data-dd-privacy": "allow",
"data-loading": i || void 0,
isDisabled: r,
isPending: i,
className: s(w, T.base()),
children: [/* @__PURE__ */ l("span", {
"aria-hidden": "true",
className: T.aiSurface(),
"data-unity-slot": "ai.surface"
}), /* @__PURE__ */ u("span", {
className: T.content(),
children: [
m(i, C, h),
_ && _ > 0 ? /* @__PURE__ */ l("span", {
style: { "--uy-button-label-truncation-length": `${_}ch` },
className: T.label(),
children: t
}) : t,
g && /* @__PURE__ */ l(e, {
"aria-hidden": "true",
color: "inherit",
"data-unity-icon": "suffix",
role: "presentation",
size: 20,
src: g
})
]
})]
});
});
h.displayName = "AIButton";
//#endregion
export { h as AIButton, p as aiButton };