UNPKG

@payfit/unity-components

Version:

187 lines (186 loc) 5.75 kB
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 };