@payfit/unity-components
Version:
108 lines (107 loc) • 4.08 kB
JavaScript
import { CircularIconButton as e } from "../icon-button/CircularIconButton.js";
import { DialogButton as t } from "./parts/DialogActions/DialogButton.js";
import { Children as n, isValidElement as r, useContext as i } from "react";
import { uyTv as a } from "@payfit/unity-themes";
import { jsx as o, jsxs as s } from "react/jsx-runtime";
import { useIntl as c } from "react-intl";
import { useId as l } from "react-aria/useId";
import { Dialog as u, DialogContext as d, DialogTrigger as f, OverlayTriggerStateContext as p } from "react-aria-components/Dialog";
import { Modal as m, ModalOverlay as h } from "react-aria-components/Modal";
//#region src/components/dialog/Dialog.tsx
var g = a({
slots: {
overlay: [
"uy:@container",
"uy:fixed uy:inset-0 uy:z-30 uy:overflow-y-auto",
"uy:min-h-full",
"uy:flex uy:items-end uy:md:items-center uy:md:justify-center uy:md:text-center",
"uy:bg-utility-backdrop",
"uy:data-[entering]:animate-fade-in uy:data-[exiting]:animate-fade-out"
],
wrapper: [
"uy:w-full uy:max-h-[95dvh] uy:md:max-h-[82dvh] uy:relative uy:isolate",
"uy:m-0",
"uy:rounded-t-300 uy:md:rounded-200",
"uy:overflow-hidden uy:bg-white uy:p-300 uy:pt-400 uy:md:p-400",
"uy:text-left uy:align-middle uy:shadow-400",
"uy:bg-surface-neutral",
"uy:data-[entering]:animate-slide-up-fade-in uy:data-[exiting]:animate-slide-down-fade-out",
"uy:md:[animation-delay:100ms] uy:md:data-[entering]:animate-zoom-in uy:md:data-[exiting]:animate-zoom-out"
],
content: [
"uy:group/dialog",
"uy:grid",
"uy:grid-rows-[auto_minmax(0,1fr)_auto]",
"uy:min-h-0 uy:max-h-[calc(95dvh-var(--uy-spacing-400)-var(--uy-spacing-300))]",
"uy:outline-none"
],
dismissIcon: ["uy:absolute uy:right-200 uy:top-200 uy:z-20"]
},
variants: { size: {
sm: {
wrapper: "uy:md:w-4/12 uy:md:max-w-62.5",
content: ["uy:md:max-h-[calc(82dvh-(var(--uy-spacing-400)*2))]"]
},
md: {
wrapper: "uy:md:w-5/12 uy:md:max-w-80",
content: ["uy:md:max-h-[calc(82dvh-(var(--uy-spacing-400)*2))]"]
},
lg: {
wrapper: "uy:md:w-11/12 uy:md:max-w-[1000px] uy:md:rounded-300 uy:md:pt-9 uy:md:px-500 uy:md:pb-400",
content: ["uy:md:max-h-[calc(82dvh-(var(--uy-spacing)*9)-var(--uy-spacing-400))]"],
dismissIcon: "uy:md:right-300 uy:md:top-300"
}
} },
defaultVariants: { size: "md" }
}), _ = (e) => n.toArray(e).some((e) => r(e) ? r(e) && e.type === t && e.props.variant === "danger" ? !0 : _(e.props.children) : !1);
function v({ children: e, isOpen: t, onOpenChange: n, isDismissable: r = !0, size: i = "md", ...a }) {
let s = c(), u = l(), { overlay: f, wrapper: p, content: _, dismissIcon: v } = g({ size: i });
return /* @__PURE__ */ o(h, {
isDismissable: r,
isOpen: t,
onOpenChange: n,
className: f(),
children: /* @__PURE__ */ o(m, {
className: p(),
"data-unity-dialog": !0,
"data-dd-privacy": "allow",
children: /* @__PURE__ */ o(d.Provider, {
value: { "aria-describedby": u },
children: /* @__PURE__ */ o(y, {
"aria-label": a["aria-label"],
dialogContentId: u,
contentClassName: _(),
dismissIconClassName: v(),
dismissButtonLabel: s.formatMessage({ id: "unity:component:common:close:label" }),
isDismissable: r,
size: i,
children: e
})
})
})
});
}
var y = ({ children: t, dialogContentId: n, contentClassName: r, dismissIconClassName: a, dismissButtonLabel: c, isDismissable: l, size: d, ...f }) => {
let m = i(p), h = typeof t == "function" ? t({ close: () => m?.close() }) : t;
return /* @__PURE__ */ s(u, {
role: _(h) ? "alertdialog" : "dialog",
"aria-modal": "true",
className: r,
"aria-label": f["aria-label"],
"aria-describedby": n,
"data-unity-slot": "dialog",
"data-unity-size": d,
children: [l && /* @__PURE__ */ o(e, {
icon: "CloseOutlined",
color: "content.neutral.low",
title: c,
className: a,
slot: "close",
size: "large",
asElement: "button"
}), h]
});
};
v.displayName = "Dialog", f.displayName = "DialogTrigger";
//#endregion
export { v as Dialog, f as DialogTrigger, g as dialog };