170 lines
7.0 KiB
JavaScript
170 lines
7.0 KiB
JavaScript
"use client";
|
|
|
|
// packages/react/alert-dialog/src/AlertDialog.tsx
|
|
import * as React from "react";
|
|
import { createContextScope } from "@radix-ui/react-context";
|
|
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
import { createDialogScope } from "@radix-ui/react-dialog";
|
|
import { composeEventHandlers } from "@radix-ui/primitive";
|
|
import { Slottable } from "@radix-ui/react-slot";
|
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
var ROOT_NAME = "AlertDialog";
|
|
var [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [
|
|
createDialogScope
|
|
]);
|
|
var useDialogScope = createDialogScope();
|
|
var AlertDialog = (props) => {
|
|
const { __scopeAlertDialog, ...alertDialogProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...dialogScope, ...alertDialogProps, modal: true });
|
|
};
|
|
AlertDialog.displayName = ROOT_NAME;
|
|
var TRIGGER_NAME = "AlertDialogTrigger";
|
|
var AlertDialogTrigger = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...triggerProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Trigger, { ...dialogScope, ...triggerProps, ref: forwardedRef });
|
|
}
|
|
);
|
|
AlertDialogTrigger.displayName = TRIGGER_NAME;
|
|
var PORTAL_NAME = "AlertDialogPortal";
|
|
var AlertDialogPortal = (props) => {
|
|
const { __scopeAlertDialog, ...portalProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Portal, { ...dialogScope, ...portalProps });
|
|
};
|
|
AlertDialogPortal.displayName = PORTAL_NAME;
|
|
var OVERLAY_NAME = "AlertDialogOverlay";
|
|
var AlertDialogOverlay = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...overlayProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, { ...dialogScope, ...overlayProps, ref: forwardedRef });
|
|
}
|
|
);
|
|
AlertDialogOverlay.displayName = OVERLAY_NAME;
|
|
var CONTENT_NAME = "AlertDialogContent";
|
|
var [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);
|
|
var AlertDialogContent = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, children, ...contentProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
const contentRef = React.useRef(null);
|
|
const composedRefs = useComposedRefs(forwardedRef, contentRef);
|
|
const cancelRef = React.useRef(null);
|
|
return /* @__PURE__ */ jsx(
|
|
DialogPrimitive.WarningProvider,
|
|
{
|
|
contentName: CONTENT_NAME,
|
|
titleName: TITLE_NAME,
|
|
docsSlug: "alert-dialog",
|
|
children: /* @__PURE__ */ jsx(AlertDialogContentProvider, { scope: __scopeAlertDialog, cancelRef, children: /* @__PURE__ */ jsxs(
|
|
DialogPrimitive.Content,
|
|
{
|
|
role: "alertdialog",
|
|
...dialogScope,
|
|
...contentProps,
|
|
ref: composedRefs,
|
|
onOpenAutoFocus: composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {
|
|
event.preventDefault();
|
|
cancelRef.current?.focus({ preventScroll: true });
|
|
}),
|
|
onPointerDownOutside: (event) => event.preventDefault(),
|
|
onInteractOutside: (event) => event.preventDefault(),
|
|
children: [
|
|
/* @__PURE__ */ jsx(Slottable, { children }),
|
|
/* @__PURE__ */ jsx(DescriptionWarning, { contentRef })
|
|
]
|
|
}
|
|
) })
|
|
}
|
|
);
|
|
}
|
|
);
|
|
AlertDialogContent.displayName = CONTENT_NAME;
|
|
var TITLE_NAME = "AlertDialogTitle";
|
|
var AlertDialogTitle = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...titleProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Title, { ...dialogScope, ...titleProps, ref: forwardedRef });
|
|
}
|
|
);
|
|
AlertDialogTitle.displayName = TITLE_NAME;
|
|
var DESCRIPTION_NAME = "AlertDialogDescription";
|
|
var AlertDialogDescription = React.forwardRef((props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...descriptionProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Description, { ...dialogScope, ...descriptionProps, ref: forwardedRef });
|
|
});
|
|
AlertDialogDescription.displayName = DESCRIPTION_NAME;
|
|
var ACTION_NAME = "AlertDialogAction";
|
|
var AlertDialogAction = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...actionProps } = props;
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...actionProps, ref: forwardedRef });
|
|
}
|
|
);
|
|
AlertDialogAction.displayName = ACTION_NAME;
|
|
var CANCEL_NAME = "AlertDialogCancel";
|
|
var AlertDialogCancel = React.forwardRef(
|
|
(props, forwardedRef) => {
|
|
const { __scopeAlertDialog, ...cancelProps } = props;
|
|
const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);
|
|
const dialogScope = useDialogScope(__scopeAlertDialog);
|
|
const ref = useComposedRefs(forwardedRef, cancelRef);
|
|
return /* @__PURE__ */ jsx(DialogPrimitive.Close, { ...dialogScope, ...cancelProps, ref });
|
|
}
|
|
);
|
|
AlertDialogCancel.displayName = CANCEL_NAME;
|
|
var DescriptionWarning = ({ contentRef }) => {
|
|
const MESSAGE = `\`${CONTENT_NAME}\` requires a description for the component to be accessible for screen reader users.
|
|
|
|
You can add a description to the \`${CONTENT_NAME}\` by passing a \`${DESCRIPTION_NAME}\` component as a child, which also benefits sighted users by adding visible context to the dialog.
|
|
|
|
Alternatively, you can use your own component as a description by assigning it an \`id\` and passing the same value to the \`aria-describedby\` prop in \`${CONTENT_NAME}\`. If the description is confusing or duplicative for sighted users, you can use the \`@radix-ui/react-visually-hidden\` primitive as a wrapper around your description component.
|
|
|
|
For more information, see https://radix-ui.com/primitives/docs/components/alert-dialog`;
|
|
React.useEffect(() => {
|
|
const hasDescription = document.getElementById(
|
|
contentRef.current?.getAttribute("aria-describedby")
|
|
);
|
|
if (!hasDescription) console.warn(MESSAGE);
|
|
}, [MESSAGE, contentRef]);
|
|
return null;
|
|
};
|
|
var Root2 = AlertDialog;
|
|
var Trigger2 = AlertDialogTrigger;
|
|
var Portal2 = AlertDialogPortal;
|
|
var Overlay2 = AlertDialogOverlay;
|
|
var Content2 = AlertDialogContent;
|
|
var Action = AlertDialogAction;
|
|
var Cancel = AlertDialogCancel;
|
|
var Title2 = AlertDialogTitle;
|
|
var Description2 = AlertDialogDescription;
|
|
export {
|
|
Action,
|
|
AlertDialog,
|
|
AlertDialogAction,
|
|
AlertDialogCancel,
|
|
AlertDialogContent,
|
|
AlertDialogDescription,
|
|
AlertDialogOverlay,
|
|
AlertDialogPortal,
|
|
AlertDialogTitle,
|
|
AlertDialogTrigger,
|
|
Cancel,
|
|
Content2 as Content,
|
|
Description2 as Description,
|
|
Overlay2 as Overlay,
|
|
Portal2 as Portal,
|
|
Root2 as Root,
|
|
Title2 as Title,
|
|
Trigger2 as Trigger,
|
|
createAlertDialogScope
|
|
};
|
|
//# sourceMappingURL=index.mjs.map
|