@tamagui/alert-dialog 1.0.1-beta.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,144 @@
1
+ import { useComposedRefs } from "@tamagui/compose-refs";
2
+ import {
3
+ Slottable,
4
+ composeEventHandlers,
5
+ isWeb,
6
+ withStaticProperties
7
+ } from "@tamagui/core";
8
+ import { createContextScope } from "@tamagui/create-context";
9
+ import {
10
+ Dialog,
11
+ DialogClose,
12
+ DialogContent,
13
+ DialogDescription,
14
+ DialogOverlay,
15
+ DialogPortal,
16
+ DialogTitle,
17
+ DialogTrigger,
18
+ DialogWarningProvider,
19
+ createDialogScope
20
+ } from "@tamagui/dialog";
21
+ import * as React from "react";
22
+ const ROOT_NAME = "AlertDialog";
23
+ const [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [
24
+ createDialogScope
25
+ ]);
26
+ const useDialogScope = createDialogScope();
27
+ const TRIGGER_NAME = "AlertDialogTrigger";
28
+ const AlertDialogTrigger = React.forwardRef((props, forwardedRef) => {
29
+ const { __scopeAlertDialog, ...triggerProps } = props;
30
+ const dialogScope = useDialogScope(__scopeAlertDialog);
31
+ return <DialogTrigger {...dialogScope} {...triggerProps} ref={forwardedRef} />;
32
+ });
33
+ AlertDialogTrigger.displayName = TRIGGER_NAME;
34
+ const PORTAL_NAME = "AlertDialogPortal";
35
+ const AlertDialogPortal = (props) => {
36
+ const { __scopeAlertDialog, ...portalProps } = props;
37
+ const dialogScope = useDialogScope(__scopeAlertDialog);
38
+ return <DialogPortal {...dialogScope} {...portalProps} />;
39
+ };
40
+ AlertDialogPortal.displayName = PORTAL_NAME;
41
+ const OVERLAY_NAME = "AlertDialogOverlay";
42
+ const AlertDialogOverlay = React.forwardRef((props, forwardedRef) => {
43
+ const { __scopeAlertDialog, ...overlayProps } = props;
44
+ const dialogScope = useDialogScope(__scopeAlertDialog);
45
+ return <DialogOverlay {...dialogScope} {...overlayProps} ref={forwardedRef} />;
46
+ });
47
+ AlertDialogOverlay.displayName = OVERLAY_NAME;
48
+ const CONTENT_NAME = "AlertDialogContent";
49
+ const [AlertDialogContentProvider, useAlertDialogContentContext] = createAlertDialogContext(CONTENT_NAME);
50
+ const AlertDialogContent = React.forwardRef((props, forwardedRef) => {
51
+ const { __scopeAlertDialog, children, ...contentProps } = props;
52
+ const dialogScope = useDialogScope(__scopeAlertDialog);
53
+ const contentRef = React.useRef(null);
54
+ const composedRefs = useComposedRefs(forwardedRef, contentRef);
55
+ const cancelRef = React.useRef(null);
56
+ return <DialogWarningProvider contentName={CONTENT_NAME} titleName={TITLE_NAME} docsSlug="alert-dialog"><AlertDialogContentProvider scope={__scopeAlertDialog} cancelRef={cancelRef}><DialogContent role="alertdialog" {...dialogScope} {...contentProps} ref={composedRefs} onOpenAutoFocus={composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {
57
+ var _a;
58
+ event.preventDefault();
59
+ if (isWeb) {
60
+ (_a = cancelRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
61
+ }
62
+ })} onPointerDownOutside={(event) => event.preventDefault()} onInteractOutside={(event) => event.preventDefault()}>
63
+ <Slottable>{children}</Slottable>
64
+ {process.env.NODE_ENV === "development" && <DescriptionWarning contentRef={contentRef} />}
65
+ </DialogContent></AlertDialogContentProvider></DialogWarningProvider>;
66
+ });
67
+ AlertDialogContent.displayName = CONTENT_NAME;
68
+ const TITLE_NAME = "AlertDialogTitle";
69
+ const AlertDialogTitle = React.forwardRef((props, forwardedRef) => {
70
+ const { __scopeAlertDialog, ...titleProps } = props;
71
+ const dialogScope = useDialogScope(__scopeAlertDialog);
72
+ return <DialogTitle {...dialogScope} {...titleProps} ref={forwardedRef} />;
73
+ });
74
+ AlertDialogTitle.displayName = TITLE_NAME;
75
+ const DESCRIPTION_NAME = "AlertDialogDescription";
76
+ const AlertDialogDescription = React.forwardRef((props, forwardedRef) => {
77
+ const { __scopeAlertDialog, ...descriptionProps } = props;
78
+ const dialogScope = useDialogScope(__scopeAlertDialog);
79
+ return <DialogDescription {...dialogScope} {...descriptionProps} ref={forwardedRef} />;
80
+ });
81
+ AlertDialogDescription.displayName = DESCRIPTION_NAME;
82
+ const ACTION_NAME = "AlertDialogAction";
83
+ const AlertDialogAction = React.forwardRef((props, forwardedRef) => {
84
+ const { __scopeAlertDialog, ...actionProps } = props;
85
+ const dialogScope = useDialogScope(__scopeAlertDialog);
86
+ return <DialogClose {...dialogScope} {...actionProps} ref={forwardedRef} />;
87
+ });
88
+ AlertDialogAction.displayName = ACTION_NAME;
89
+ const CANCEL_NAME = "AlertDialogCancel";
90
+ const AlertDialogCancel = React.forwardRef((props, forwardedRef) => {
91
+ const { __scopeAlertDialog, ...cancelProps } = props;
92
+ const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog);
93
+ const dialogScope = useDialogScope(__scopeAlertDialog);
94
+ const ref = useComposedRefs(forwardedRef, cancelRef);
95
+ return <DialogClose {...dialogScope} {...cancelProps} ref={ref} />;
96
+ });
97
+ AlertDialogCancel.displayName = CANCEL_NAME;
98
+ const DescriptionWarning = ({ contentRef }) => {
99
+ const MESSAGE = `\`${CONTENT_NAME}\` requires a description for the component to be accessible for screen reader users.
100
+
101
+ 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.
102
+
103
+ 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.
104
+
105
+ For more information, see https://tamagui.dev/docs/components/alert-dialog`;
106
+ React.useEffect(() => {
107
+ var _a;
108
+ if (!isWeb)
109
+ return;
110
+ const hasDescription = document.getElementById((_a = contentRef.current) == null ? void 0 : _a.getAttribute("aria-describedby"));
111
+ if (!hasDescription)
112
+ console.warn(MESSAGE);
113
+ }, [MESSAGE, contentRef]);
114
+ return null;
115
+ };
116
+ const AlertDialogInner = (props) => {
117
+ const { __scopeAlertDialog, ...alertDialogProps } = props;
118
+ const dialogScope = useDialogScope(__scopeAlertDialog);
119
+ return <Dialog {...dialogScope} {...alertDialogProps} modal={true} />;
120
+ };
121
+ const AlertDialog = withStaticProperties(AlertDialogInner, {
122
+ Trigger: AlertDialogTrigger,
123
+ Portal: AlertDialogPortal,
124
+ Overlay: AlertDialogOverlay,
125
+ Content: AlertDialogContent,
126
+ Action: AlertDialogAction,
127
+ Cancel: AlertDialogCancel,
128
+ Title: AlertDialogTitle,
129
+ Description: AlertDialogDescription
130
+ });
131
+ AlertDialog.displayName = ROOT_NAME;
132
+ export {
133
+ AlertDialog,
134
+ AlertDialogAction,
135
+ AlertDialogCancel,
136
+ AlertDialogContent,
137
+ AlertDialogDescription,
138
+ AlertDialogOverlay,
139
+ AlertDialogPortal,
140
+ AlertDialogTitle,
141
+ AlertDialogTrigger,
142
+ createAlertDialogScope
143
+ };
144
+ //# sourceMappingURL=AlertDialog.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/AlertDialog.tsx"],
4
+ "sourcesContent": ["// forked from radix-ui\n// https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/src/AlertDialog.tsx\n\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n Slottable,\n TamaguiElement,\n composeEventHandlers,\n isWeb,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Scope, createContextScope } from '@tamagui/create-context'\nimport {\n Dialog,\n DialogClose,\n DialogCloseProps,\n DialogContent,\n DialogContentProps,\n DialogDescription,\n DialogDescriptionProps,\n DialogOverlay,\n DialogOverlayProps,\n DialogPortal,\n DialogPortalProps,\n DialogProps,\n DialogTitle,\n DialogTitleProps,\n DialogTrigger,\n DialogTriggerProps,\n DialogWarningProvider,\n createDialogScope,\n} from '@tamagui/dialog'\nimport * as React from 'react'\n\nconst ROOT_NAME = 'AlertDialog'\n\ntype ScopedProps<P> = P & { __scopeAlertDialog?: Scope }\nconst [createAlertDialogContext, createAlertDialogScope] = createContextScope(ROOT_NAME, [\n createDialogScope,\n])\n\nconst useDialogScope = createDialogScope()\n\ninterface AlertDialogProps extends Omit<DialogProps, 'modal'> {}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTrigger\n * -----------------------------------------------------------------------------------------------*/\nconst TRIGGER_NAME = 'AlertDialogTrigger'\n\ninterface AlertDialogTriggerProps extends DialogTriggerProps {}\n\nconst AlertDialogTrigger = React.forwardRef<TamaguiElement, AlertDialogTriggerProps>(\n (props: ScopedProps<AlertDialogTriggerProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...triggerProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogTrigger {...dialogScope} {...triggerProps} ref={forwardedRef} />\n }\n)\n\nAlertDialogTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'AlertDialogPortal'\n\ninterface AlertDialogPortalProps extends DialogPortalProps {}\n\nconst AlertDialogPortal: React.FC<AlertDialogPortalProps> = (\n props: ScopedProps<AlertDialogPortalProps>\n) => {\n const { __scopeAlertDialog, ...portalProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogPortal {...dialogScope} {...portalProps} />\n}\n\nAlertDialogPortal.displayName = PORTAL_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'AlertDialogOverlay'\n\ninterface AlertDialogOverlayProps extends DialogOverlayProps {}\n\nconst AlertDialogOverlay = React.forwardRef<TamaguiElement, AlertDialogOverlayProps>(\n (props: ScopedProps<AlertDialogOverlayProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...overlayProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogOverlay {...dialogScope} {...overlayProps} ref={forwardedRef} />\n }\n)\n\nAlertDialogOverlay.displayName = OVERLAY_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'AlertDialogContent'\n\ntype AlertDialogContentContextValue = {\n cancelRef: React.MutableRefObject<TamaguiElement | null>\n}\n\nconst [AlertDialogContentProvider, useAlertDialogContentContext] =\n createAlertDialogContext<AlertDialogContentContextValue>(CONTENT_NAME)\n\ninterface AlertDialogContentProps\n extends Omit<DialogContentProps, 'onPointerDownOutside' | 'onInteractOutside'> {}\n\nconst AlertDialogContent = React.forwardRef<TamaguiElement, AlertDialogContentProps>(\n (props: ScopedProps<AlertDialogContentProps>, forwardedRef) => {\n const { __scopeAlertDialog, children, ...contentProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n const contentRef = React.useRef<TamaguiElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const cancelRef = React.useRef<TamaguiElement | null>(null)\n\n return (\n <DialogWarningProvider\n contentName={CONTENT_NAME}\n titleName={TITLE_NAME}\n docsSlug=\"alert-dialog\"\n >\n <AlertDialogContentProvider scope={__scopeAlertDialog} cancelRef={cancelRef}>\n <DialogContent\n // @ts-ignore\n role=\"alertdialog\"\n {...dialogScope}\n {...contentProps}\n ref={composedRefs}\n onOpenAutoFocus={composeEventHandlers(contentProps.onOpenAutoFocus, (event) => {\n event.preventDefault()\n if (isWeb) {\n // @ts-ignore\n cancelRef.current?.focus({ preventScroll: true })\n }\n })}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n >\n {/**\n * We have to use `Slottable` here as we cannot wrap the `AlertDialogContentProvider`\n * around everything, otherwise the `DescriptionWarning` would be rendered straight away.\n * This is because we want the accessibility checks to run only once the content is actually\n * open and that behaviour is already encapsulated in `DialogContent`.\n */}\n <Slottable>{children}</Slottable>\n {process.env.NODE_ENV === 'development' && (\n <DescriptionWarning contentRef={contentRef} />\n )}\n </DialogContent>\n </AlertDialogContentProvider>\n </DialogWarningProvider>\n )\n }\n)\n\nAlertDialogContent.displayName = CONTENT_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'AlertDialogTitle'\n\ntype AlertDialogTitleProps = DialogTitleProps\n\nconst AlertDialogTitle = React.forwardRef<TamaguiElement, AlertDialogTitleProps>(\n (props: ScopedProps<AlertDialogTitleProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...titleProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogTitle {...dialogScope} {...titleProps} ref={forwardedRef} />\n }\n)\n\nAlertDialogTitle.displayName = TITLE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DESCRIPTION_NAME = 'AlertDialogDescription'\n\ntype AlertDialogDescriptionProps = DialogDescriptionProps\n\nconst AlertDialogDescription = React.forwardRef<TamaguiElement, AlertDialogDescriptionProps>(\n (props: ScopedProps<AlertDialogDescriptionProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...descriptionProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogDescription {...dialogScope} {...descriptionProps} ref={forwardedRef} />\n }\n)\n\nAlertDialogDescription.displayName = DESCRIPTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst ACTION_NAME = 'AlertDialogAction'\n\ntype AlertDialogActionProps = DialogCloseProps\n\nconst AlertDialogAction = React.forwardRef<TamaguiElement, AlertDialogActionProps>(\n (props: ScopedProps<AlertDialogActionProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...actionProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <DialogClose {...dialogScope} {...actionProps} ref={forwardedRef} />\n }\n)\n\nAlertDialogAction.displayName = ACTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialogCancel\n * -----------------------------------------------------------------------------------------------*/\n\nconst CANCEL_NAME = 'AlertDialogCancel'\n\ninterface AlertDialogCancelProps extends DialogCloseProps {}\n\nconst AlertDialogCancel = React.forwardRef<TamaguiElement, AlertDialogCancelProps>(\n (props: ScopedProps<AlertDialogCancelProps>, forwardedRef) => {\n const { __scopeAlertDialog, ...cancelProps } = props\n const { cancelRef } = useAlertDialogContentContext(CANCEL_NAME, __scopeAlertDialog)\n const dialogScope = useDialogScope(__scopeAlertDialog)\n const ref = useComposedRefs(forwardedRef, cancelRef)\n return <DialogClose {...dialogScope} {...cancelProps} ref={ref} />\n }\n)\n\nAlertDialogCancel.displayName = CANCEL_NAME\n\n/* ---------------------------------------------------------------------------------------------- */\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<TamaguiElement>\n}\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef }) => {\n const MESSAGE = `\\`${CONTENT_NAME}\\` requires a description for the component to be accessible for screen reader users.\n\nYou 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.\n\nAlternatively, 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.\n\nFor more information, see https://tamagui.dev/docs/components/alert-dialog`\n\n React.useEffect(() => {\n if (!isWeb) return\n const hasDescription = document.getElementById(\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n contentRef.current?.getAttribute('aria-describedby')!\n )\n if (!hasDescription) console.warn(MESSAGE)\n }, [MESSAGE, contentRef])\n\n return null\n}\n\n/* -------------------------------------------------------------------------------------------------\n * AlertDialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst AlertDialogInner: React.FC<AlertDialogProps> = (props: ScopedProps<AlertDialogProps>) => {\n const { __scopeAlertDialog, ...alertDialogProps } = props\n const dialogScope = useDialogScope(__scopeAlertDialog)\n return <Dialog {...dialogScope} {...alertDialogProps} modal={true} />\n}\n\nconst AlertDialog = withStaticProperties(AlertDialogInner, {\n Trigger: AlertDialogTrigger,\n Portal: AlertDialogPortal,\n Overlay: AlertDialogOverlay,\n Content: AlertDialogContent,\n Action: AlertDialogAction,\n Cancel: AlertDialogCancel,\n Title: AlertDialogTitle,\n Description: AlertDialogDescription,\n})\n\nAlertDialog.displayName = ROOT_NAME\n\nexport {\n createAlertDialogScope,\n //\n AlertDialog,\n AlertDialogTrigger,\n AlertDialogPortal,\n AlertDialogOverlay,\n AlertDialogContent,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogTitle,\n AlertDialogDescription,\n}\nexport type {\n AlertDialogProps,\n AlertDialogTriggerProps,\n AlertDialogPortalProps,\n AlertDialogOverlayProps,\n AlertDialogContentProps,\n AlertDialogActionProps,\n AlertDialogCancelProps,\n AlertDialogTitleProps,\n AlertDialogDescriptionProps,\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,355 @@
1
+ import { AnimatePresence } from "@tamagui/animate-presence";
2
+ import { useComposedRefs } from "@tamagui/compose-refs";
3
+ import { useGet } from "@tamagui/core";
4
+ import {
5
+ Slot,
6
+ Theme,
7
+ composeEventHandlers,
8
+ isWeb,
9
+ styled,
10
+ useId,
11
+ useMedia,
12
+ useThemeName,
13
+ withStaticProperties
14
+ } from "@tamagui/core";
15
+ import { createContext, createContextScope } from "@tamagui/create-context";
16
+ import { Dismissable } from "@tamagui/dismissable";
17
+ import { FocusScope } from "@tamagui/focus-scope";
18
+ import { PortalHost, PortalItem } from "@tamagui/portal";
19
+ import { Sheet, SheetController } from "@tamagui/sheet";
20
+ import { ThemeableStack, YStack } from "@tamagui/stacks";
21
+ import { H2, Paragraph } from "@tamagui/text";
22
+ import { useControllableState } from "@tamagui/use-controllable-state";
23
+ import { hideOthers } from "aria-hidden";
24
+ import * as React from "react";
25
+ import { RemoveScroll } from "react-remove-scroll";
26
+ const DIALOG_NAME = "Dialog";
27
+ const [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);
28
+ const [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);
29
+ const TRIGGER_NAME = "DialogTrigger";
30
+ const DialogTriggerFrame = styled(YStack, {
31
+ name: TRIGGER_NAME
32
+ });
33
+ const DialogTrigger = React.forwardRef((props, forwardedRef) => {
34
+ const { __scopeDialog, ...triggerProps } = props;
35
+ const context = useDialogContext(TRIGGER_NAME, __scopeDialog);
36
+ const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
37
+ return <DialogTriggerFrame tag="button" aria-haspopup="dialog" aria-expanded={context.open} aria-controls={context.contentId} data-state={getState(context.open)} {...triggerProps} ref={composedTriggerRef} onPress={composeEventHandlers(props.onPress, context.onOpenToggle)} />;
38
+ });
39
+ DialogTrigger.displayName = TRIGGER_NAME;
40
+ const PORTAL_NAME = "DialogPortal";
41
+ const [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {
42
+ forceMount: void 0
43
+ });
44
+ const DialogPortalFrame = styled(YStack, {
45
+ alignItems: "center",
46
+ justifyContent: "center",
47
+ fullscreen: true,
48
+ zIndex: 100,
49
+ ...isWeb && {
50
+ maxHeight: "100vh"
51
+ }
52
+ });
53
+ const DialogPortal = DialogPortalFrame.extractable((props) => {
54
+ const { __scopeDialog, forceMount, children, ...frameProps } = props;
55
+ const themeName = useThemeName();
56
+ const context = useDialogContext(PORTAL_NAME, __scopeDialog);
57
+ const isShowing = forceMount || context.open;
58
+ const contents = <AnimatePresence>{isShowing ? children : null}</AnimatePresence>;
59
+ const isSheet = useShowDialogSheet(context);
60
+ if (!context.modal || isSheet) {
61
+ return contents;
62
+ }
63
+ return <PortalItem><DialogProvider scope={__scopeDialog} {...context}><Theme name={themeName}><PortalProvider scope={__scopeDialog} forceMount={forceMount}><DialogPortalFrame pointerEvents={isShowing ? "auto" : "none"} {...frameProps}>{contents}</DialogPortalFrame></PortalProvider></Theme></DialogProvider></PortalItem>;
64
+ });
65
+ DialogPortal.displayName = PORTAL_NAME;
66
+ const OVERLAY_NAME = "DialogOverlay";
67
+ const DialogOverlayFrame = styled(ThemeableStack, {
68
+ name: OVERLAY_NAME,
69
+ pointerEvents: "auto",
70
+ backgrounded: true,
71
+ fullscreen: true
72
+ });
73
+ const DialogOverlay = React.forwardRef(({ __scopeDialog, ...props }, forwardedRef) => {
74
+ const portalContext = usePortalContext(OVERLAY_NAME, __scopeDialog);
75
+ const { forceMount = portalContext.forceMount, ...overlayProps } = props;
76
+ const context = useDialogContext(OVERLAY_NAME, __scopeDialog);
77
+ const showSheet = useShowDialogSheet(context);
78
+ if (!forceMount) {
79
+ if (!context.modal || showSheet) {
80
+ return null;
81
+ }
82
+ }
83
+ return <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />;
84
+ });
85
+ DialogOverlay.displayName = OVERLAY_NAME;
86
+ const DialogOverlayImpl = React.forwardRef((props, forwardedRef) => {
87
+ const { __scopeDialog, ...overlayProps } = props;
88
+ const context = useDialogContext(OVERLAY_NAME, __scopeDialog);
89
+ const content = <DialogOverlayFrame data-state={getState(context.open)} pointerEvents="auto" {...overlayProps} ref={forwardedRef} />;
90
+ if (!isWeb) {
91
+ return content;
92
+ }
93
+ return <RemoveScroll as={Slot} allowPinchZoom={context.allowPinchZoom} shards={[context.contentRef]}>{content}</RemoveScroll>;
94
+ });
95
+ const CONTENT_NAME = "DialogContent";
96
+ const DialogContentFrame = styled(ThemeableStack, {
97
+ name: CONTENT_NAME,
98
+ tag: "dialog",
99
+ pointerEvents: "auto",
100
+ position: "relative",
101
+ backgrounded: true,
102
+ padded: true,
103
+ radiused: true,
104
+ elevate: true,
105
+ variants: {
106
+ size: {
107
+ "...size": (val, extras) => {
108
+ return {};
109
+ }
110
+ }
111
+ },
112
+ defaultVariants: {
113
+ size: "$4"
114
+ }
115
+ });
116
+ const DialogContent = DialogContentFrame.extractable(React.forwardRef(({ __scopeDialog, ...props }, forwardedRef) => {
117
+ const portalContext = usePortalContext(CONTENT_NAME, __scopeDialog);
118
+ const { forceMount = portalContext.forceMount, ...contentProps } = props;
119
+ const context = useDialogContext(CONTENT_NAME, __scopeDialog);
120
+ return <>{context.modal ? <DialogContentModal {...contentProps} ref={forwardedRef} /> : <DialogContentNonModal {...contentProps} ref={forwardedRef} />}</>;
121
+ }));
122
+ DialogContent.displayName = CONTENT_NAME;
123
+ const DialogContentModal = React.forwardRef(({ __scopeDialog, children, ...props }, forwardedRef) => {
124
+ const context = useDialogContext(CONTENT_NAME, __scopeDialog);
125
+ const contentRef = React.useRef(null);
126
+ const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);
127
+ React.useEffect(() => {
128
+ if (!context.open)
129
+ return;
130
+ const content = contentRef.current;
131
+ if (content)
132
+ return hideOthers(content);
133
+ }, [context.open]);
134
+ return <DialogContentImpl {...props} ref={composedRefs} trapFocus={context.open} disableOutsidePointerEvents onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {
135
+ var _a;
136
+ event.preventDefault();
137
+ (_a = context.triggerRef.current) == null ? void 0 : _a.focus();
138
+ })} onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {
139
+ const originalEvent = event["detail"].originalEvent;
140
+ const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
141
+ const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
142
+ if (isRightClick)
143
+ event.preventDefault();
144
+ })} onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) => event.preventDefault())}>{children}</DialogContentImpl>;
145
+ });
146
+ const DialogContentNonModal = React.forwardRef((props, forwardedRef) => {
147
+ const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);
148
+ const hasInteractedOutsideRef = React.useRef(false);
149
+ return <DialogContentImpl {...props} ref={forwardedRef} trapFocus={false} disableOutsidePointerEvents={false} onCloseAutoFocus={(event) => {
150
+ var _a, _b;
151
+ (_a = props.onCloseAutoFocus) == null ? void 0 : _a.call(props, event);
152
+ if (!event.defaultPrevented) {
153
+ if (!hasInteractedOutsideRef.current)
154
+ (_b = context.triggerRef.current) == null ? void 0 : _b.focus();
155
+ event.preventDefault();
156
+ }
157
+ hasInteractedOutsideRef.current = false;
158
+ }} onInteractOutside={(event) => {
159
+ var _a;
160
+ (_a = props.onInteractOutside) == null ? void 0 : _a.call(props, event);
161
+ if (!event.defaultPrevented)
162
+ hasInteractedOutsideRef.current = true;
163
+ const target = event.target;
164
+ const trigger = context.triggerRef.current;
165
+ if (!(trigger instanceof HTMLElement))
166
+ return;
167
+ const targetIsTrigger = trigger.contains(target);
168
+ if (targetIsTrigger)
169
+ event.preventDefault();
170
+ }} />;
171
+ });
172
+ const DialogContentImpl = React.forwardRef((props, forwardedRef) => {
173
+ const {
174
+ __scopeDialog,
175
+ trapFocus,
176
+ onOpenAutoFocus,
177
+ onCloseAutoFocus,
178
+ disableOutsidePointerEvents,
179
+ onEscapeKeyDown,
180
+ onPointerDownOutside,
181
+ onFocusOutside,
182
+ onInteractOutside,
183
+ ...contentProps
184
+ } = props;
185
+ const context = useDialogContext(CONTENT_NAME, __scopeDialog);
186
+ const contentRef = React.useRef(null);
187
+ const composedRefs = useComposedRefs(forwardedRef, contentRef);
188
+ const showSheet = useShowDialogSheet(context);
189
+ const contents = <DialogContentFrame id={context.contentId} aria-describedby={context.descriptionId} aria-labelledby={context.titleId} data-state={getState(context.open)} {...contentProps} />;
190
+ if (showSheet) {
191
+ return <PortalItem hostName={`${context.scopeKey}SheetContents`}>{contentProps.children}</PortalItem>;
192
+ }
193
+ if (!isWeb) {
194
+ return contents;
195
+ }
196
+ return <>
197
+ <FocusScope loop trapped={trapFocus} onMountAutoFocus={onOpenAutoFocus} onUnmountAutoFocus={onCloseAutoFocus}><Dismissable disableOutsidePointerEvents={disableOutsidePointerEvents} onEscapeKeyDown={onEscapeKeyDown} onPointerDownOutside={onPointerDownOutside} onFocusOutside={onFocusOutside} onInteractOutside={onInteractOutside} ref={composedRefs} onDismiss={() => context.onOpenChange(false)}>{contents}</Dismissable></FocusScope>
198
+ {process.env.NODE_ENV === "development" && <>
199
+ <TitleWarning titleId={context.titleId} />
200
+ <DescriptionWarning contentRef={contentRef} descriptionId={context.descriptionId} />
201
+ </>}
202
+ </>;
203
+ });
204
+ const SHEET_CONTENTS_NAME = "DialogSheetContents";
205
+ const DialogSheetContents = ({ __scopeDialog }) => {
206
+ const context = useDialogContext(SHEET_CONTENTS_NAME, __scopeDialog);
207
+ return <PortalHost name={`${context.scopeKey}SheetContents`} />;
208
+ };
209
+ DialogSheetContents.displayName = SHEET_CONTENTS_NAME;
210
+ const TITLE_NAME = "DialogTitle";
211
+ const DialogTitleFrame = styled(H2, {
212
+ name: TITLE_NAME
213
+ });
214
+ const DialogTitle = React.forwardRef((props, forwardedRef) => {
215
+ const { __scopeDialog, ...titleProps } = props;
216
+ const context = useDialogContext(TITLE_NAME, __scopeDialog);
217
+ return <DialogTitleFrame id={context.titleId} {...titleProps} ref={forwardedRef} />;
218
+ });
219
+ DialogTitle.displayName = TITLE_NAME;
220
+ const DialogDescriptionFrame = styled(Paragraph, {
221
+ name: "DialogDescription"
222
+ });
223
+ const DESCRIPTION_NAME = "DialogDescription";
224
+ const DialogDescription = React.forwardRef((props, forwardedRef) => {
225
+ const { __scopeDialog, ...descriptionProps } = props;
226
+ const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);
227
+ return <DialogDescriptionFrame id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />;
228
+ });
229
+ DialogDescription.displayName = DESCRIPTION_NAME;
230
+ const CLOSE_NAME = "DialogClose";
231
+ const DialogClose = React.forwardRef((props, forwardedRef) => {
232
+ const { __scopeDialog, ...closeProps } = props;
233
+ const context = useDialogContext(CLOSE_NAME, __scopeDialog);
234
+ const isSheet = useShowDialogSheet(context);
235
+ if (isSheet) {
236
+ return null;
237
+ }
238
+ return <YStack tag="button" {...closeProps} ref={forwardedRef} onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))} />;
239
+ });
240
+ DialogClose.displayName = CLOSE_NAME;
241
+ function getState(open) {
242
+ return open ? "open" : "closed";
243
+ }
244
+ const TITLE_WARNING_NAME = "DialogTitleWarning";
245
+ const [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {
246
+ contentName: CONTENT_NAME,
247
+ titleName: TITLE_NAME,
248
+ docsSlug: "dialog"
249
+ });
250
+ const TitleWarning = ({ titleId }) => {
251
+ const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);
252
+ const MESSAGE = `\`${titleWarningContext.contentName}\` requires a \`${titleWarningContext.titleName}\` for the component to be accessible for screen reader users.
253
+
254
+ If you want to hide the \`${titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component.
255
+
256
+ For more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;
257
+ React.useEffect(() => {
258
+ if (!isWeb)
259
+ return;
260
+ if (titleId) {
261
+ const hasTitle = document.getElementById(titleId);
262
+ if (!hasTitle)
263
+ throw new Error(MESSAGE);
264
+ }
265
+ }, [MESSAGE, titleId]);
266
+ return null;
267
+ };
268
+ const DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning";
269
+ const DescriptionWarning = ({ contentRef, descriptionId }) => {
270
+ const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);
271
+ const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${descriptionWarningContext.contentName}}.`;
272
+ React.useEffect(() => {
273
+ if (!isWeb)
274
+ return;
275
+ const contentNode = contentRef.current;
276
+ if (!(contentNode instanceof HTMLElement)) {
277
+ return;
278
+ }
279
+ const describedById = contentNode.getAttribute("aria-describedby");
280
+ if (descriptionId && describedById) {
281
+ const hasDescription = document.getElementById(descriptionId);
282
+ if (!hasDescription)
283
+ console.warn(MESSAGE);
284
+ }
285
+ }, [MESSAGE, contentRef, descriptionId]);
286
+ return null;
287
+ };
288
+ const DialogInner = React.forwardRef(function Dialog(props, ref) {
289
+ const {
290
+ __scopeDialog,
291
+ children,
292
+ open: openProp,
293
+ defaultOpen = false,
294
+ onOpenChange,
295
+ modal = true,
296
+ allowPinchZoom = false,
297
+ sheetBreakpoint = false
298
+ } = props;
299
+ const triggerRef = React.useRef(null);
300
+ const contentRef = React.useRef(null);
301
+ const [open, setOpen] = useControllableState({
302
+ prop: openProp,
303
+ defaultProp: defaultOpen,
304
+ onChange: onOpenChange
305
+ });
306
+ React.useImperativeHandle(ref, () => ({
307
+ open: setOpen
308
+ }), [setOpen]);
309
+ return <DialogProvider scope={__scopeDialog} scopeKey={__scopeDialog ? Object.keys(__scopeDialog)[0] : ""} triggerRef={triggerRef} contentRef={contentRef} contentId={useId() || ""} titleId={useId() || ""} descriptionId={useId() || ""} open={open} onOpenChange={setOpen} onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])} modal={modal} allowPinchZoom={allowPinchZoom} sheetBreakpoint={sheetBreakpoint}><DialogSheetController onChangeOpen={setOpen} __scopeDialog={__scopeDialog}>{children}</DialogSheetController></DialogProvider>;
310
+ });
311
+ const Dialog2 = withStaticProperties(DialogInner, {
312
+ Trigger: DialogTrigger,
313
+ Portal: DialogPortal,
314
+ Overlay: DialogOverlay,
315
+ Content: DialogContent,
316
+ Title: DialogTitle,
317
+ Description: DialogDescription,
318
+ Close: DialogClose,
319
+ SheetContents: DialogSheetContents,
320
+ Sheet
321
+ });
322
+ const DialogSheetController = (props) => {
323
+ const context = useDialogContext("DialogSheetController", props.__scopeDialog);
324
+ const showSheet = useShowDialogSheet(context);
325
+ const breakpointActive = useDialogBreakpointActive(context);
326
+ const getShowSheet = useGet(showSheet);
327
+ return <SheetController onChangeOpen={(val) => {
328
+ if (getShowSheet()) {
329
+ props.onChangeOpen(val);
330
+ }
331
+ }} open={context.open} hidden={breakpointActive === false}>{props.children}</SheetController>;
332
+ };
333
+ const useDialogBreakpointActive = (context) => {
334
+ const media = useMedia();
335
+ return context.sheetBreakpoint ? media[context.sheetBreakpoint] : false;
336
+ };
337
+ const useShowDialogSheet = (context) => {
338
+ const breakpointActive = useDialogBreakpointActive(context);
339
+ return context.open === false ? false : breakpointActive;
340
+ };
341
+ export {
342
+ Dialog2 as Dialog,
343
+ DialogClose,
344
+ DialogContent,
345
+ DialogDescription,
346
+ DialogOverlay,
347
+ DialogPortal,
348
+ DialogPortalFrame,
349
+ DialogSheetContents,
350
+ DialogTitle,
351
+ DialogTrigger,
352
+ WarningProvider,
353
+ createDialogScope
354
+ };
355
+ //# sourceMappingURL=Dialog.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Dialog.tsx"],
4
+ "sourcesContent": ["import { AnimatePresence } from '@tamagui/animate-presence'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport { useGet } from '@tamagui/core'\nimport {\n GetProps,\n MediaPropKeys,\n Slot,\n Theme,\n composeEventHandlers,\n isWeb,\n styled,\n useId,\n useMedia,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport { Scope, createContext, createContextScope } from '@tamagui/create-context'\nimport { Dismissable, DismissableProps } from '@tamagui/dismissable'\nimport { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'\nimport { PortalHost, PortalItem, PortalItemProps } from '@tamagui/portal'\nimport { Sheet, SheetController } from '@tamagui/sheet'\nimport { ThemeableStack, YStack, YStackProps } from '@tamagui/stacks'\nimport { H2, Paragraph } from '@tamagui/text'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport { hideOthers } from 'aria-hidden'\nimport * as React from 'react'\nimport { View } from 'react-native'\nimport { RemoveScroll } from 'react-remove-scroll'\n\nconst DIALOG_NAME = 'Dialog'\n\ntype ScopedProps<P> = P & { __scopeDialog?: Scope }\ntype TamaguiElement = HTMLElement | View\n\nconst [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME)\n\ninterface DialogProps {\n sheetBreakpoint?: MediaPropKeys | false\n children?: React.ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?(open: boolean): void\n modal?: boolean\n\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n}\n\ntype NonNull<A> = Exclude<A, void | null>\n\ntype DialogContextValue = {\n triggerRef: React.RefObject<TamaguiElement>\n contentRef: React.RefObject<TamaguiElement>\n contentId: string\n titleId: string\n descriptionId: string\n onOpenToggle(): void\n open: NonNull<DialogProps['open']>\n onOpenChange: NonNull<DialogProps['onOpenChange']>\n modal: NonNull<DialogProps['modal']>\n allowPinchZoom: NonNull<DialogProps['allowPinchZoom']>\n sheetBreakpoint: NonNull<DialogProps['sheetBreakpoint']>\n scopeKey: string\n}\n\nconst [DialogProvider, useDialogContext] = createDialogContext<DialogContextValue>(DIALOG_NAME)\n\ntype RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'DialogTrigger'\n\nconst DialogTriggerFrame = styled(YStack, {\n name: TRIGGER_NAME,\n})\n\ninterface DialogTriggerProps extends YStackProps {}\n\nconst DialogTrigger = React.forwardRef<TamaguiElement, DialogTriggerProps>(\n (props: ScopedProps<DialogTriggerProps>, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog)\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef)\n return (\n <DialogTriggerFrame\n tag=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={context.open}\n aria-controls={context.contentId}\n data-state={getState(context.open)}\n {...triggerProps}\n ref={composedTriggerRef}\n onPress={composeEventHandlers(props.onPress, context.onOpenToggle)}\n />\n )\n }\n)\n\nDialogTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * DialogPortal\n * -----------------------------------------------------------------------------------------------*/\n\nconst PORTAL_NAME = 'DialogPortal'\n\ntype PortalContextValue = { forceMount?: true }\nconst [PortalProvider, usePortalContext] = createDialogContext<PortalContextValue>(PORTAL_NAME, {\n forceMount: undefined,\n})\n\ntype DialogPortalProps = Omit<PortalItemProps, 'asChild'> &\n YStackProps & {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true\n }\n\nexport const DialogPortalFrame = styled(YStack, {\n alignItems: 'center',\n justifyContent: 'center',\n fullscreen: true,\n zIndex: 100,\n ...(isWeb && {\n maxHeight: '100vh',\n }),\n})\n\nconst DialogPortal: React.FC<DialogPortalProps> = DialogPortalFrame.extractable(\n (props: ScopedProps<DialogPortalProps>) => {\n const { __scopeDialog, forceMount, children, ...frameProps } = props\n const themeName = useThemeName()\n const context = useDialogContext(PORTAL_NAME, __scopeDialog)\n const isShowing = forceMount || context.open\n const contents = <AnimatePresence>{isShowing ? children : null}</AnimatePresence>\n const isSheet = useShowDialogSheet(context)\n if (!context.modal || isSheet) {\n return contents\n }\n return (\n <PortalItem>\n {/* have to re-propogate context, sketch */}\n <DialogProvider scope={__scopeDialog} {...context}>\n <Theme name={themeName}>\n <PortalProvider scope={__scopeDialog} forceMount={forceMount}>\n <DialogPortalFrame pointerEvents={isShowing ? 'auto' : 'none'} {...frameProps}>\n {contents}\n </DialogPortalFrame>\n </PortalProvider>\n </Theme>\n </DialogProvider>\n </PortalItem>\n )\n }\n)\n\nDialogPortal.displayName = PORTAL_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * DialogOverlay\n * -----------------------------------------------------------------------------------------------*/\n\nconst OVERLAY_NAME = 'DialogOverlay'\n\nconst DialogOverlayFrame = styled(ThemeableStack, {\n name: OVERLAY_NAME,\n pointerEvents: 'auto',\n backgrounded: true,\n fullscreen: true,\n})\n\ninterface DialogOverlayProps extends YStackProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true\n}\n\nconst DialogOverlay = React.forwardRef<TamaguiElement, DialogOverlayProps>(\n ({ __scopeDialog, ...props }: ScopedProps<DialogOverlayProps>, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, __scopeDialog)\n const { forceMount = portalContext.forceMount, ...overlayProps } = props\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog)\n const showSheet = useShowDialogSheet(context)\n\n if (!forceMount) {\n if (!context.modal || showSheet) {\n return null\n }\n }\n\n return <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />\n }\n)\n\nDialogOverlay.displayName = OVERLAY_NAME\n\ntype DialogOverlayImplProps = GetProps<typeof DialogOverlayFrame>\n\nconst DialogOverlayImpl = React.forwardRef<TamaguiElement, DialogOverlayImplProps>(\n (props: ScopedProps<DialogOverlayImplProps>, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog)\n const content = (\n <DialogOverlayFrame\n data-state={getState(context.open)}\n // We re-enable pointer-events prevented by `Dialog.Content` to allow scrolling the overlay.\n pointerEvents=\"auto\"\n {...overlayProps}\n ref={forwardedRef}\n />\n )\n\n if (!isWeb) {\n return content\n }\n\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n <RemoveScroll as={Slot} allowPinchZoom={context.allowPinchZoom} shards={[context.contentRef]}>\n {content}\n </RemoveScroll>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * DialogContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'DialogContent'\n\nconst DialogContentFrame = styled(ThemeableStack, {\n name: CONTENT_NAME,\n tag: 'dialog',\n pointerEvents: 'auto',\n position: 'relative',\n backgrounded: true,\n padded: true,\n radiused: true,\n elevate: true,\n\n variants: {\n size: {\n '...size': (val, extras) => {\n return {}\n },\n },\n },\n\n defaultVariants: {\n size: '$4',\n },\n})\n\ntype DialogContentFrameProps = GetProps<typeof DialogContentFrame>\n\ninterface DialogContentProps extends DialogContentFrameProps, DialogContentTypeProps {\n /**\n * Used to force mounting when more control is needed. Useful when\n * controlling animation with React animation libraries.\n */\n forceMount?: true\n}\n\nconst DialogContent = DialogContentFrame.extractable(\n React.forwardRef<TamaguiElement, DialogContentProps>(\n ({ __scopeDialog, ...props }: ScopedProps<DialogContentProps>, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, __scopeDialog)\n const { forceMount = portalContext.forceMount, ...contentProps } = props\n const context = useDialogContext(CONTENT_NAME, __scopeDialog)\n\n return (\n <>\n {context.modal ? (\n <DialogContentModal {...contentProps} ref={forwardedRef} />\n ) : (\n <DialogContentNonModal {...contentProps} ref={forwardedRef} />\n )}\n </>\n )\n }\n )\n)\n\nDialogContent.displayName = CONTENT_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\ninterface DialogContentTypeProps\n extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {}\n\nconst DialogContentModal = React.forwardRef<TamaguiElement, DialogContentTypeProps>(\n ({ __scopeDialog, children, ...props }: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, __scopeDialog)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef)\n\n // aria-hide everything except the content (better supported equivalent to setting aria-modal)\n React.useEffect(() => {\n if (!context.open) return\n const content = contentRef.current\n if (content) return hideOthers(content)\n }, [context.open])\n\n return (\n <DialogContentImpl\n {...props}\n ref={composedRefs}\n // we make sure focus isn't trapped once `DialogContent` has been closed\n // (closed !== unmounted when animating out)\n trapFocus={context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault()\n context.triggerRef.current?.focus()\n })}\n onPointerDownOutside={composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event['detail'].originalEvent\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick\n // If the event is a right-click, we shouldn't close because\n // it is effectively as if we right-clicked the `Overlay`.\n if (isRightClick) event.preventDefault()\n })}\n // When focus is trapped, a `focusout` event may still happen.\n // We make sure we don't trigger our `onDismiss` in such case.\n onFocusOutside={composeEventHandlers(props.onFocusOutside, (event) =>\n event.preventDefault()\n )}\n >\n {children}\n </DialogContentImpl>\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\nconst DialogContentNonModal = React.forwardRef<TamaguiElement, DialogContentTypeProps>(\n (props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog)\n const hasInteractedOutsideRef = React.useRef(false)\n\n return (\n <DialogContentImpl\n {...props}\n ref={forwardedRef}\n trapFocus={false}\n disableOutsidePointerEvents={false}\n onCloseAutoFocus={(event) => {\n props.onCloseAutoFocus?.(event)\n\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus()\n // Always prevent auto focus because we either focus manually or want user agent focus\n event.preventDefault()\n }\n\n hasInteractedOutsideRef.current = false\n }}\n onInteractOutside={(event) => {\n props.onInteractOutside?.(event)\n\n if (!event.defaultPrevented) hasInteractedOutsideRef.current = true\n\n // Prevent dismissing when clicking the trigger.\n // As the trigger is already setup to close, without doing so would\n // cause it to close and immediately open.\n //\n // We use `onInteractOutside` as some browsers also\n // focus on pointer down, creating the same issue.\n const target = event.target as HTMLElement\n const trigger = context.triggerRef.current\n if (!(trigger instanceof HTMLElement)) return\n const targetIsTrigger = trigger.contains(target)\n if (targetIsTrigger) event.preventDefault()\n }}\n />\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype DialogContentImplProps = DialogContentFrameProps &\n Omit<DismissableProps, 'onDismiss'> & {\n /**\n * When `true`, focus cannot escape the `Content` via keyboard,\n * pointer, or a programmatic focus.\n * @defaultValue false\n */\n trapFocus?: FocusScopeProps['trapped']\n\n /**\n * Event handler called when auto-focusing on open.\n * Can be prevented.\n */\n onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus']\n\n /**\n * Event handler called when auto-focusing on close.\n * Can be prevented.\n */\n onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus']\n }\n\nconst DialogContentImpl = React.forwardRef<TamaguiElement, DialogContentImplProps>(\n (props: ScopedProps<DialogContentImplProps>, forwardedRef) => {\n const {\n __scopeDialog,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props\n const context = useDialogContext(CONTENT_NAME, __scopeDialog)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const showSheet = useShowDialogSheet(context)\n\n const contents = (\n <DialogContentFrame\n id={context.contentId}\n aria-describedby={context.descriptionId}\n aria-labelledby={context.titleId}\n data-state={getState(context.open)}\n {...contentProps}\n />\n )\n\n if (showSheet) {\n return (\n <PortalItem hostName={`${context.scopeKey}SheetContents`}>\n {contentProps.children}\n </PortalItem>\n )\n }\n\n if (!isWeb) {\n return contents\n }\n\n return (\n <>\n <FocusScope\n loop\n trapped={trapFocus}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <Dismissable\n disableOutsidePointerEvents={disableOutsidePointerEvents}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={onPointerDownOutside}\n onFocusOutside={onFocusOutside}\n onInteractOutside={onInteractOutside}\n // @ts-ignore\n ref={composedRefs}\n onDismiss={() => context.onOpenChange(false)}\n >\n {contents}\n </Dismissable>\n </FocusScope>\n {process.env.NODE_ENV === 'development' && (\n <>\n <TitleWarning titleId={context.titleId} />\n <DescriptionWarning contentRef={contentRef} descriptionId={context.descriptionId} />\n </>\n )}\n </>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * DialogSheetContents\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_CONTENTS_NAME = 'DialogSheetContents'\n\nexport const DialogSheetContents = ({ __scopeDialog }: ScopedProps<{}>) => {\n const context = useDialogContext(SHEET_CONTENTS_NAME, __scopeDialog)\n return <PortalHost name={`${context.scopeKey}SheetContents`}></PortalHost>\n}\n\nDialogSheetContents.displayName = SHEET_CONTENTS_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * DialogTitle\n * -----------------------------------------------------------------------------------------------*/\n\nconst TITLE_NAME = 'DialogTitle'\nconst DialogTitleFrame = styled(H2, {\n name: TITLE_NAME,\n})\n\ntype DialogTitleProps = GetProps<typeof DialogTitleFrame>\n\nconst DialogTitle = React.forwardRef<TamaguiElement, DialogTitleProps>(\n (props: ScopedProps<DialogTitleProps>, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props\n const context = useDialogContext(TITLE_NAME, __scopeDialog)\n return <DialogTitleFrame id={context.titleId} {...titleProps} ref={forwardedRef} />\n }\n)\n\nDialogTitle.displayName = TITLE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * DialogDescription\n * -----------------------------------------------------------------------------------------------*/\n\nconst DialogDescriptionFrame = styled(Paragraph, {\n name: 'DialogDescription',\n})\n\ntype DialogDescriptionProps = GetProps<typeof DialogDescriptionFrame>\n\nconst DESCRIPTION_NAME = 'DialogDescription'\n\nconst DialogDescription = React.forwardRef<TamaguiElement, DialogDescriptionProps>(\n (props: ScopedProps<DialogDescriptionProps>, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog)\n return (\n <DialogDescriptionFrame id={context.descriptionId} {...descriptionProps} ref={forwardedRef} />\n )\n }\n)\n\nDialogDescription.displayName = DESCRIPTION_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * DialogClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'DialogClose'\n\ntype DialogCloseProps = YStackProps\n\nconst DialogClose = React.forwardRef<TamaguiElement, DialogCloseProps>(\n (props: ScopedProps<DialogCloseProps>, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props\n const context = useDialogContext(CLOSE_NAME, __scopeDialog)\n const isSheet = useShowDialogSheet(context)\n\n if (isSheet) {\n return null\n }\n\n return (\n <YStack\n tag=\"button\"\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))}\n />\n )\n }\n)\n\nDialogClose.displayName = CLOSE_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed'\n}\n\nconst TITLE_WARNING_NAME = 'DialogTitleWarning'\n\nconst [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: 'dialog',\n})\n\ntype TitleWarningProps = { titleId?: string }\n\nconst TitleWarning: React.FC<TitleWarningProps> = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME)\n\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`\n\n React.useEffect(() => {\n if (!isWeb) return\n if (titleId) {\n const hasTitle = document.getElementById(titleId)\n if (!hasTitle) throw new Error(MESSAGE)\n }\n }, [MESSAGE, titleId])\n\n return null\n}\n\nconst DESCRIPTION_WARNING_NAME = 'DialogDescriptionWarning'\n\ntype DescriptionWarningProps = {\n contentRef: React.RefObject<TamaguiElement>\n descriptionId?: string\n}\n\nconst DescriptionWarning: React.FC<DescriptionWarningProps> = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME)\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`\n\n React.useEffect(() => {\n if (!isWeb) return\n const contentNode = contentRef.current\n if (!(contentNode instanceof HTMLElement)) {\n return\n }\n const describedById = contentNode.getAttribute('aria-describedby')\n // if we have an id and the user hasn't set aria-describedby={undefined}\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId)\n if (!hasDescription) console.warn(MESSAGE)\n }\n }, [MESSAGE, contentRef, descriptionId])\n\n return null\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Dialog\n * -----------------------------------------------------------------------------------------------*/\n\nconst DialogInner = React.forwardRef<{ open: (val: boolean) => void }, DialogProps>(function Dialog(\n props: ScopedProps<DialogProps>,\n ref\n) {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n modal = true,\n allowPinchZoom = false,\n sheetBreakpoint = false,\n } = props\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const contentRef = React.useRef<TamaguiElement>(null)\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n })\n\n React.useImperativeHandle(\n ref,\n () => ({\n open: setOpen,\n }),\n [setOpen]\n )\n\n return (\n <DialogProvider\n scope={__scopeDialog}\n scopeKey={__scopeDialog ? Object.keys(__scopeDialog)[0] : ''}\n triggerRef={triggerRef}\n contentRef={contentRef}\n contentId={useId() || ''}\n titleId={useId() || ''}\n descriptionId={useId() || ''}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen])}\n modal={modal}\n allowPinchZoom={allowPinchZoom}\n sheetBreakpoint={sheetBreakpoint}\n >\n <DialogSheetController onChangeOpen={setOpen} __scopeDialog={__scopeDialog}>\n {children}\n </DialogSheetController>\n </DialogProvider>\n )\n})\n\nconst Dialog = withStaticProperties(DialogInner, {\n Trigger: DialogTrigger,\n Portal: DialogPortal,\n Overlay: DialogOverlay,\n Content: DialogContent,\n Title: DialogTitle,\n Description: DialogDescription,\n Close: DialogClose,\n SheetContents: DialogSheetContents,\n Sheet,\n})\n\nconst DialogSheetController = (\n props: ScopedProps<{}> & {\n children: React.ReactNode\n onChangeOpen: React.Dispatch<React.SetStateAction<boolean>>\n }\n) => {\n const context = useDialogContext('DialogSheetController', props.__scopeDialog)\n const showSheet = useShowDialogSheet(context)\n const breakpointActive = useDialogBreakpointActive(context)\n const getShowSheet = useGet(showSheet)\n return (\n <SheetController\n onChangeOpen={(val) => {\n if (getShowSheet()) {\n props.onChangeOpen(val)\n }\n }}\n open={context.open}\n hidden={breakpointActive === false}\n >\n {props.children}\n </SheetController>\n )\n}\n\nconst useDialogBreakpointActive = (context: DialogContextValue) => {\n const media = useMedia()\n return context.sheetBreakpoint ? media[context.sheetBreakpoint] : false\n}\n\nconst useShowDialogSheet = (context: DialogContextValue) => {\n const breakpointActive = useDialogBreakpointActive(context)\n return context.open === false ? false : breakpointActive\n}\n\nexport {\n createDialogScope,\n //\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogOverlay,\n DialogContent,\n DialogTitle,\n DialogDescription,\n DialogClose,\n //\n WarningProvider,\n}\nexport type {\n DialogProps,\n DialogTriggerProps,\n DialogPortalProps,\n DialogOverlayProps,\n DialogContentProps,\n DialogTitleProps,\n DialogDescriptionProps,\n DialogCloseProps,\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./AlertDialog";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "sourcesContent": ["export * from './AlertDialog'\n"],
5
+ "mappings": "AAAA;",
6
+ "names": []
7
+ }