Spaces:
Running
Running
| ; | |
| "use client"; | |
| var __create = Object.create; | |
| var __defProp = Object.defineProperty; | |
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | |
| var __getOwnPropNames = Object.getOwnPropertyNames; | |
| var __getProtoOf = Object.getPrototypeOf; | |
| var __hasOwnProp = Object.prototype.hasOwnProperty; | |
| var __export = (target, all) => { | |
| for (var name in all) | |
| __defProp(target, name, { get: all[name], enumerable: true }); | |
| }; | |
| var __copyProps = (to, from, except, desc) => { | |
| if (from && typeof from === "object" || typeof from === "function") { | |
| for (let key of __getOwnPropNames(from)) | |
| if (!__hasOwnProp.call(to, key) && key !== except) | |
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | |
| } | |
| return to; | |
| }; | |
| var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | |
| // If the importer is in node compatibility mode or this is not an ESM | |
| // file that has been converted to a CommonJS file using a Babel- | |
| // compatible transform (i.e. "__esModule" has not been set), then set | |
| // "default" to the CommonJS "module.exports" for node compatibility. | |
| isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | |
| mod | |
| )); | |
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | |
| // src/index.ts | |
| var index_exports = {}; | |
| __export(index_exports, { | |
| Close: () => Close, | |
| Content: () => Content, | |
| Description: () => Description, | |
| Dialog: () => Dialog, | |
| DialogClose: () => DialogClose, | |
| DialogContent: () => DialogContent, | |
| DialogDescription: () => DialogDescription, | |
| DialogOverlay: () => DialogOverlay, | |
| DialogPortal: () => DialogPortal, | |
| DialogTitle: () => DialogTitle, | |
| DialogTrigger: () => DialogTrigger, | |
| Overlay: () => Overlay, | |
| Portal: () => Portal, | |
| Root: () => Root, | |
| Title: () => Title, | |
| Trigger: () => Trigger, | |
| WarningProvider: () => WarningProvider, | |
| createDialogScope: () => createDialogScope | |
| }); | |
| module.exports = __toCommonJS(index_exports); | |
| // src/dialog.tsx | |
| var React = __toESM(require("react")); | |
| var import_primitive = require("@radix-ui/primitive"); | |
| var import_react_compose_refs = require("@radix-ui/react-compose-refs"); | |
| var import_react_context = require("@radix-ui/react-context"); | |
| var import_react_id = require("@radix-ui/react-id"); | |
| var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state"); | |
| var import_react_dismissable_layer = require("@radix-ui/react-dismissable-layer"); | |
| var import_react_focus_scope = require("@radix-ui/react-focus-scope"); | |
| var import_react_portal = require("@radix-ui/react-portal"); | |
| var import_react_presence = require("@radix-ui/react-presence"); | |
| var import_react_primitive = require("@radix-ui/react-primitive"); | |
| var import_react_focus_guards = require("@radix-ui/react-focus-guards"); | |
| var import_react_remove_scroll = require("react-remove-scroll"); | |
| var import_aria_hidden = require("aria-hidden"); | |
| var import_react_slot = require("@radix-ui/react-slot"); | |
| var import_jsx_runtime = require("react/jsx-runtime"); | |
| var DIALOG_NAME = "Dialog"; | |
| var [createDialogContext, createDialogScope] = (0, import_react_context.createContextScope)(DIALOG_NAME); | |
| var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME); | |
| var Dialog = (props) => { | |
| const { | |
| __scopeDialog, | |
| children, | |
| open: openProp, | |
| defaultOpen, | |
| onOpenChange, | |
| modal = true | |
| } = props; | |
| const triggerRef = React.useRef(null); | |
| const contentRef = React.useRef(null); | |
| const [open, setOpen] = (0, import_react_use_controllable_state.useControllableState)({ | |
| prop: openProp, | |
| defaultProp: defaultOpen ?? false, | |
| onChange: onOpenChange, | |
| caller: DIALOG_NAME | |
| }); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| DialogProvider, | |
| { | |
| scope: __scopeDialog, | |
| triggerRef, | |
| contentRef, | |
| contentId: (0, import_react_id.useId)(), | |
| titleId: (0, import_react_id.useId)(), | |
| descriptionId: (0, import_react_id.useId)(), | |
| open, | |
| onOpenChange: setOpen, | |
| onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]), | |
| modal, | |
| children | |
| } | |
| ); | |
| }; | |
| Dialog.displayName = DIALOG_NAME; | |
| var TRIGGER_NAME = "DialogTrigger"; | |
| var DialogTrigger = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, ...triggerProps } = props; | |
| const context = useDialogContext(TRIGGER_NAME, __scopeDialog); | |
| const composedTriggerRef = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, context.triggerRef); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| import_react_primitive.Primitive.button, | |
| { | |
| type: "button", | |
| "aria-haspopup": "dialog", | |
| "aria-expanded": context.open, | |
| "aria-controls": context.contentId, | |
| "data-state": getState(context.open), | |
| ...triggerProps, | |
| ref: composedTriggerRef, | |
| onClick: (0, import_primitive.composeEventHandlers)(props.onClick, context.onOpenToggle) | |
| } | |
| ); | |
| } | |
| ); | |
| DialogTrigger.displayName = TRIGGER_NAME; | |
| var PORTAL_NAME = "DialogPortal"; | |
| var [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, { | |
| forceMount: void 0 | |
| }); | |
| var DialogPortal = (props) => { | |
| const { __scopeDialog, forceMount, children, container } = props; | |
| const context = useDialogContext(PORTAL_NAME, __scopeDialog); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_presence.Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_portal.Portal, { asChild: true, container, children: child }) })) }); | |
| }; | |
| DialogPortal.displayName = PORTAL_NAME; | |
| var OVERLAY_NAME = "DialogOverlay"; | |
| var DialogOverlay = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog); | |
| const { forceMount = portalContext.forceMount, ...overlayProps } = props; | |
| const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog); | |
| return context.modal ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_presence.Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null; | |
| } | |
| ); | |
| DialogOverlay.displayName = OVERLAY_NAME; | |
| var Slot = (0, import_react_slot.createSlot)("DialogOverlay.RemoveScroll"); | |
| var DialogOverlayImpl = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, ...overlayProps } = props; | |
| const context = useDialogContext(OVERLAY_NAME, __scopeDialog); | |
| return ( | |
| // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll` | |
| // ie. when `Overlay` and `Content` are siblings | |
| /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_remove_scroll.RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| import_react_primitive.Primitive.div, | |
| { | |
| "data-state": getState(context.open), | |
| ...overlayProps, | |
| ref: forwardedRef, | |
| style: { pointerEvents: "auto", ...overlayProps.style } | |
| } | |
| ) }) | |
| ); | |
| } | |
| ); | |
| var CONTENT_NAME = "DialogContent"; | |
| var DialogContent = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog); | |
| const { forceMount = portalContext.forceMount, ...contentProps } = props; | |
| const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_presence.Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) }); | |
| } | |
| ); | |
| DialogContent.displayName = CONTENT_NAME; | |
| var DialogContentModal = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); | |
| const contentRef = React.useRef(null); | |
| const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, context.contentRef, contentRef); | |
| React.useEffect(() => { | |
| const content = contentRef.current; | |
| if (content) return (0, import_aria_hidden.hideOthers)(content); | |
| }, []); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| DialogContentImpl, | |
| { | |
| ...props, | |
| ref: composedRefs, | |
| trapFocus: context.open, | |
| disableOutsidePointerEvents: true, | |
| onCloseAutoFocus: (0, import_primitive.composeEventHandlers)(props.onCloseAutoFocus, (event) => { | |
| event.preventDefault(); | |
| context.triggerRef.current?.focus(); | |
| }), | |
| onPointerDownOutside: (0, import_primitive.composeEventHandlers)(props.onPointerDownOutside, (event) => { | |
| const originalEvent = event.detail.originalEvent; | |
| const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; | |
| const isRightClick = originalEvent.button === 2 || ctrlLeftClick; | |
| if (isRightClick) event.preventDefault(); | |
| }), | |
| onFocusOutside: (0, import_primitive.composeEventHandlers)( | |
| props.onFocusOutside, | |
| (event) => event.preventDefault() | |
| ) | |
| } | |
| ); | |
| } | |
| ); | |
| var DialogContentNonModal = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const context = useDialogContext(CONTENT_NAME, props.__scopeDialog); | |
| const hasInteractedOutsideRef = React.useRef(false); | |
| const hasPointerDownOutsideRef = React.useRef(false); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| DialogContentImpl, | |
| { | |
| ...props, | |
| ref: forwardedRef, | |
| trapFocus: false, | |
| disableOutsidePointerEvents: false, | |
| onCloseAutoFocus: (event) => { | |
| props.onCloseAutoFocus?.(event); | |
| if (!event.defaultPrevented) { | |
| if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus(); | |
| event.preventDefault(); | |
| } | |
| hasInteractedOutsideRef.current = false; | |
| hasPointerDownOutsideRef.current = false; | |
| }, | |
| onInteractOutside: (event) => { | |
| props.onInteractOutside?.(event); | |
| if (!event.defaultPrevented) { | |
| hasInteractedOutsideRef.current = true; | |
| if (event.detail.originalEvent.type === "pointerdown") { | |
| hasPointerDownOutsideRef.current = true; | |
| } | |
| } | |
| const target = event.target; | |
| const targetIsTrigger = context.triggerRef.current?.contains(target); | |
| if (targetIsTrigger) event.preventDefault(); | |
| if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) { | |
| event.preventDefault(); | |
| } | |
| } | |
| } | |
| ); | |
| } | |
| ); | |
| var DialogContentImpl = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props; | |
| const context = useDialogContext(CONTENT_NAME, __scopeDialog); | |
| const contentRef = React.useRef(null); | |
| const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, contentRef); | |
| (0, import_react_focus_guards.useFocusGuards)(); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [ | |
| /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| import_react_focus_scope.FocusScope, | |
| { | |
| asChild: true, | |
| loop: true, | |
| trapped: trapFocus, | |
| onMountAutoFocus: onOpenAutoFocus, | |
| onUnmountAutoFocus: onCloseAutoFocus, | |
| children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| import_react_dismissable_layer.DismissableLayer, | |
| { | |
| role: "dialog", | |
| id: context.contentId, | |
| "aria-describedby": context.descriptionId, | |
| "aria-labelledby": context.titleId, | |
| "data-state": getState(context.open), | |
| ...contentProps, | |
| ref: composedRefs, | |
| onDismiss: () => context.onOpenChange(false) | |
| } | |
| ) | |
| } | |
| ), | |
| /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [ | |
| /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TitleWarning, { titleId: context.titleId }), | |
| /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DescriptionWarning, { contentRef, descriptionId: context.descriptionId }) | |
| ] }) | |
| ] }); | |
| } | |
| ); | |
| var TITLE_NAME = "DialogTitle"; | |
| var DialogTitle = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, ...titleProps } = props; | |
| const context = useDialogContext(TITLE_NAME, __scopeDialog); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef }); | |
| } | |
| ); | |
| DialogTitle.displayName = TITLE_NAME; | |
| var DESCRIPTION_NAME = "DialogDescription"; | |
| var DialogDescription = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, ...descriptionProps } = props; | |
| const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_primitive.Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef }); | |
| } | |
| ); | |
| DialogDescription.displayName = DESCRIPTION_NAME; | |
| var CLOSE_NAME = "DialogClose"; | |
| var DialogClose = React.forwardRef( | |
| (props, forwardedRef) => { | |
| const { __scopeDialog, ...closeProps } = props; | |
| const context = useDialogContext(CLOSE_NAME, __scopeDialog); | |
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( | |
| import_react_primitive.Primitive.button, | |
| { | |
| type: "button", | |
| ...closeProps, | |
| ref: forwardedRef, | |
| onClick: (0, import_primitive.composeEventHandlers)(props.onClick, () => context.onOpenChange(false)) | |
| } | |
| ); | |
| } | |
| ); | |
| DialogClose.displayName = CLOSE_NAME; | |
| function getState(open) { | |
| return open ? "open" : "closed"; | |
| } | |
| var TITLE_WARNING_NAME = "DialogTitleWarning"; | |
| var [WarningProvider, useWarningContext] = (0, import_react_context.createContext)(TITLE_WARNING_NAME, { | |
| contentName: CONTENT_NAME, | |
| titleName: TITLE_NAME, | |
| docsSlug: "dialog" | |
| }); | |
| var TitleWarning = ({ titleId }) => { | |
| const titleWarningContext = useWarningContext(TITLE_WARNING_NAME); | |
| const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users. | |
| If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component. | |
| For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`; | |
| React.useEffect(() => { | |
| if (titleId) { | |
| const hasTitle = document.getElementById(titleId); | |
| if (!hasTitle) console.error(MESSAGE); | |
| } | |
| }, [MESSAGE, titleId]); | |
| return null; | |
| }; | |
| var DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning"; | |
| var DescriptionWarning = ({ contentRef, descriptionId }) => { | |
| const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME); | |
| const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`; | |
| React.useEffect(() => { | |
| const describedById = contentRef.current?.getAttribute("aria-describedby"); | |
| if (descriptionId && describedById) { | |
| const hasDescription = document.getElementById(descriptionId); | |
| if (!hasDescription) console.warn(MESSAGE); | |
| } | |
| }, [MESSAGE, contentRef, descriptionId]); | |
| return null; | |
| }; | |
| var Root = Dialog; | |
| var Trigger = DialogTrigger; | |
| var Portal = DialogPortal; | |
| var Overlay = DialogOverlay; | |
| var Content = DialogContent; | |
| var Title = DialogTitle; | |
| var Description = DialogDescription; | |
| var Close = DialogClose; | |
| //# sourceMappingURL=index.js.map | |