@tamagui/dialog 1.0.1-beta.101 → 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.
- package/LICENSE +21 -0
- package/dist/cjs/Dialog.js +30 -22
- package/dist/cjs/Dialog.js.map +2 -2
- package/dist/esm/Dialog.js +29 -21
- package/dist/esm/Dialog.js.map +2 -2
- package/dist/jsx/Dialog.js +20 -19
- package/dist/jsx/Dialog.js.map +2 -2
- package/package.json +14 -14
- package/src/Dialog.tsx +41 -30
- package/types/Dialog.d.ts +24 -11
- package/types/Dialog.d.ts.map +1 -1
package/src/Dialog.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Portal, PortalHost } from '@gorhom/portal'
|
|
2
1
|
import { AnimatePresence } from '@tamagui/animate-presence'
|
|
3
2
|
import { useComposedRefs } from '@tamagui/compose-refs'
|
|
4
|
-
import {
|
|
3
|
+
import { useGet } from '@tamagui/core'
|
|
5
4
|
import {
|
|
6
5
|
GetProps,
|
|
7
6
|
MediaPropKeys,
|
|
8
7
|
Slot,
|
|
8
|
+
TamaguiElement,
|
|
9
9
|
Theme,
|
|
10
10
|
composeEventHandlers,
|
|
11
11
|
isWeb,
|
|
@@ -18,19 +18,18 @@ import {
|
|
|
18
18
|
import { Scope, createContext, createContextScope } from '@tamagui/create-context'
|
|
19
19
|
import { Dismissable, DismissableProps } from '@tamagui/dismissable'
|
|
20
20
|
import { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'
|
|
21
|
+
import { PortalHost, PortalItem, PortalItemProps } from '@tamagui/portal'
|
|
21
22
|
import { Sheet, SheetController } from '@tamagui/sheet'
|
|
22
23
|
import { ThemeableStack, YStack, YStackProps } from '@tamagui/stacks'
|
|
23
24
|
import { H2, Paragraph } from '@tamagui/text'
|
|
24
25
|
import { useControllableState } from '@tamagui/use-controllable-state'
|
|
25
26
|
import { hideOthers } from 'aria-hidden'
|
|
26
27
|
import * as React from 'react'
|
|
27
|
-
import { View } from 'react-native'
|
|
28
28
|
import { RemoveScroll } from 'react-remove-scroll'
|
|
29
29
|
|
|
30
30
|
const DIALOG_NAME = 'Dialog'
|
|
31
31
|
|
|
32
32
|
type ScopedProps<P> = P & { __scopeDialog?: Scope }
|
|
33
|
-
type TamaguiElement = HTMLElement | View
|
|
34
33
|
|
|
35
34
|
const [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME)
|
|
36
35
|
|
|
@@ -114,10 +113,7 @@ const [PortalProvider, usePortalContext] = createDialogContext<PortalContextValu
|
|
|
114
113
|
forceMount: undefined,
|
|
115
114
|
})
|
|
116
115
|
|
|
117
|
-
type
|
|
118
|
-
type PortalProps = PortalType extends (props: infer Props) => any ? Props : never
|
|
119
|
-
|
|
120
|
-
type DialogPortalProps = Omit<PortalProps, 'asChild'> &
|
|
116
|
+
type DialogPortalProps = Omit<PortalItemProps, 'asChild'> &
|
|
121
117
|
YStackProps & {
|
|
122
118
|
/**
|
|
123
119
|
* Used to force mounting when more control is needed. Useful when
|
|
@@ -144,11 +140,11 @@ const DialogPortal: React.FC<DialogPortalProps> = DialogPortalFrame.extractable(
|
|
|
144
140
|
const isShowing = forceMount || context.open
|
|
145
141
|
const contents = <AnimatePresence>{isShowing ? children : null}</AnimatePresence>
|
|
146
142
|
const isSheet = useShowDialogSheet(context)
|
|
147
|
-
if (!context.modal || isSheet
|
|
143
|
+
if (!context.modal || isSheet) {
|
|
148
144
|
return contents
|
|
149
145
|
}
|
|
150
146
|
return (
|
|
151
|
-
<
|
|
147
|
+
<PortalItem>
|
|
152
148
|
{/* have to re-propogate context, sketch */}
|
|
153
149
|
<DialogProvider scope={__scopeDialog} {...context}>
|
|
154
150
|
<Theme name={themeName}>
|
|
@@ -159,7 +155,7 @@ const DialogPortal: React.FC<DialogPortalProps> = DialogPortalFrame.extractable(
|
|
|
159
155
|
</PortalProvider>
|
|
160
156
|
</Theme>
|
|
161
157
|
</DialogProvider>
|
|
162
|
-
</
|
|
158
|
+
</PortalItem>
|
|
163
159
|
)
|
|
164
160
|
}
|
|
165
161
|
)
|
|
@@ -200,18 +196,19 @@ const DialogOverlay = React.forwardRef<TamaguiElement, DialogOverlayProps>(
|
|
|
200
196
|
}
|
|
201
197
|
}
|
|
202
198
|
|
|
203
|
-
return <DialogOverlayImpl {...overlayProps} ref={forwardedRef} />
|
|
199
|
+
return <DialogOverlayImpl context={context} {...overlayProps} ref={forwardedRef} />
|
|
204
200
|
}
|
|
205
201
|
)
|
|
206
202
|
|
|
207
203
|
DialogOverlay.displayName = OVERLAY_NAME
|
|
208
204
|
|
|
209
|
-
type DialogOverlayImplProps = GetProps<typeof DialogOverlayFrame>
|
|
205
|
+
type DialogOverlayImplProps = GetProps<typeof DialogOverlayFrame> & {
|
|
206
|
+
context: DialogContextValue
|
|
207
|
+
}
|
|
210
208
|
|
|
211
209
|
const DialogOverlayImpl = React.forwardRef<TamaguiElement, DialogOverlayImplProps>(
|
|
212
|
-
(props
|
|
213
|
-
const {
|
|
214
|
-
const context = useDialogContext(OVERLAY_NAME, __scopeDialog)
|
|
210
|
+
(props, forwardedRef) => {
|
|
211
|
+
const { context, ...overlayProps } = props
|
|
215
212
|
const content = (
|
|
216
213
|
<DialogOverlayFrame
|
|
217
214
|
data-state={getState(context.open)}
|
|
@@ -267,7 +264,9 @@ const DialogContentFrame = styled(ThemeableStack, {
|
|
|
267
264
|
|
|
268
265
|
type DialogContentFrameProps = GetProps<typeof DialogContentFrame>
|
|
269
266
|
|
|
270
|
-
interface DialogContentProps
|
|
267
|
+
interface DialogContentProps
|
|
268
|
+
extends DialogContentFrameProps,
|
|
269
|
+
Omit<DialogContentTypeProps, 'context'> {
|
|
271
270
|
/**
|
|
272
271
|
* Used to force mounting when more control is needed. Useful when
|
|
273
272
|
* controlling animation with React animation libraries.
|
|
@@ -285,9 +284,9 @@ const DialogContent = DialogContentFrame.extractable(
|
|
|
285
284
|
return (
|
|
286
285
|
<>
|
|
287
286
|
{context.modal ? (
|
|
288
|
-
<DialogContentModal {...contentProps} ref={forwardedRef} />
|
|
287
|
+
<DialogContentModal context={context} {...contentProps} ref={forwardedRef} />
|
|
289
288
|
) : (
|
|
290
|
-
<DialogContentNonModal {...contentProps} ref={forwardedRef} />
|
|
289
|
+
<DialogContentNonModal context={context} {...contentProps} ref={forwardedRef} />
|
|
291
290
|
)}
|
|
292
291
|
</>
|
|
293
292
|
)
|
|
@@ -300,11 +299,12 @@ DialogContent.displayName = CONTENT_NAME
|
|
|
300
299
|
/* -----------------------------------------------------------------------------------------------*/
|
|
301
300
|
|
|
302
301
|
interface DialogContentTypeProps
|
|
303
|
-
extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {
|
|
302
|
+
extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {
|
|
303
|
+
context: DialogContextValue
|
|
304
|
+
}
|
|
304
305
|
|
|
305
306
|
const DialogContentModal = React.forwardRef<TamaguiElement, DialogContentTypeProps>(
|
|
306
|
-
({
|
|
307
|
-
const context = useDialogContext(CONTENT_NAME, __scopeDialog)
|
|
307
|
+
({ children, context, ...props }: ScopedProps<DialogContentTypeProps>, forwardedRef) => {
|
|
308
308
|
const contentRef = React.useRef<HTMLDivElement>(null)
|
|
309
309
|
const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef)
|
|
310
310
|
|
|
@@ -318,6 +318,7 @@ const DialogContentModal = React.forwardRef<TamaguiElement, DialogContentTypePro
|
|
|
318
318
|
return (
|
|
319
319
|
<DialogContentImpl
|
|
320
320
|
{...props}
|
|
321
|
+
context={context}
|
|
321
322
|
ref={composedRefs}
|
|
322
323
|
// we make sure focus isn't trapped once `DialogContent` has been closed
|
|
323
324
|
// (closed !== unmounted when animating out)
|
|
@@ -351,7 +352,6 @@ const DialogContentModal = React.forwardRef<TamaguiElement, DialogContentTypePro
|
|
|
351
352
|
|
|
352
353
|
const DialogContentNonModal = React.forwardRef<TamaguiElement, DialogContentTypeProps>(
|
|
353
354
|
(props: ScopedProps<DialogContentTypeProps>, forwardedRef) => {
|
|
354
|
-
const context = useDialogContext(CONTENT_NAME, props.__scopeDialog)
|
|
355
355
|
const hasInteractedOutsideRef = React.useRef(false)
|
|
356
356
|
|
|
357
357
|
return (
|
|
@@ -364,7 +364,9 @@ const DialogContentNonModal = React.forwardRef<TamaguiElement, DialogContentType
|
|
|
364
364
|
props.onCloseAutoFocus?.(event)
|
|
365
365
|
|
|
366
366
|
if (!event.defaultPrevented) {
|
|
367
|
-
if (!hasInteractedOutsideRef.current)
|
|
367
|
+
if (!hasInteractedOutsideRef.current) {
|
|
368
|
+
props.context.triggerRef.current?.focus()
|
|
369
|
+
}
|
|
368
370
|
// Always prevent auto focus because we either focus manually or want user agent focus
|
|
369
371
|
event.preventDefault()
|
|
370
372
|
}
|
|
@@ -383,7 +385,7 @@ const DialogContentNonModal = React.forwardRef<TamaguiElement, DialogContentType
|
|
|
383
385
|
// We use `onInteractOutside` as some browsers also
|
|
384
386
|
// focus on pointer down, creating the same issue.
|
|
385
387
|
const target = event.target as HTMLElement
|
|
386
|
-
const trigger = context.triggerRef.current
|
|
388
|
+
const trigger = props.context.triggerRef.current
|
|
387
389
|
if (!(trigger instanceof HTMLElement)) return
|
|
388
390
|
const targetIsTrigger = trigger.contains(target)
|
|
389
391
|
if (targetIsTrigger) event.preventDefault()
|
|
@@ -415,6 +417,8 @@ type DialogContentImplProps = DialogContentFrameProps &
|
|
|
415
417
|
* Can be prevented.
|
|
416
418
|
*/
|
|
417
419
|
onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus']
|
|
420
|
+
|
|
421
|
+
context: DialogContextValue
|
|
418
422
|
}
|
|
419
423
|
|
|
420
424
|
const DialogContentImpl = React.forwardRef<TamaguiElement, DialogContentImplProps>(
|
|
@@ -429,9 +433,9 @@ const DialogContentImpl = React.forwardRef<TamaguiElement, DialogContentImplProp
|
|
|
429
433
|
onPointerDownOutside,
|
|
430
434
|
onFocusOutside,
|
|
431
435
|
onInteractOutside,
|
|
436
|
+
context,
|
|
432
437
|
...contentProps
|
|
433
438
|
} = props
|
|
434
|
-
const context = useDialogContext(CONTENT_NAME, __scopeDialog)
|
|
435
439
|
const contentRef = React.useRef<HTMLDivElement>(null)
|
|
436
440
|
const composedRefs = useComposedRefs(forwardedRef, contentRef)
|
|
437
441
|
const showSheet = useShowDialogSheet(context)
|
|
@@ -447,7 +451,15 @@ const DialogContentImpl = React.forwardRef<TamaguiElement, DialogContentImplProp
|
|
|
447
451
|
)
|
|
448
452
|
|
|
449
453
|
if (showSheet) {
|
|
450
|
-
return
|
|
454
|
+
return (
|
|
455
|
+
<PortalItem hostName={`${context.scopeKey}SheetContents`}>
|
|
456
|
+
{contentProps.children}
|
|
457
|
+
</PortalItem>
|
|
458
|
+
)
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
if (!isWeb) {
|
|
462
|
+
return contents
|
|
451
463
|
}
|
|
452
464
|
|
|
453
465
|
return (
|
|
@@ -579,7 +591,7 @@ function getState(open: boolean) {
|
|
|
579
591
|
|
|
580
592
|
const TITLE_WARNING_NAME = 'DialogTitleWarning'
|
|
581
593
|
|
|
582
|
-
const [
|
|
594
|
+
const [DialogWarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {
|
|
583
595
|
contentName: CONTENT_NAME,
|
|
584
596
|
titleName: TITLE_NAME,
|
|
585
597
|
docsSlug: 'dialog',
|
|
@@ -716,7 +728,6 @@ const DialogSheetController = (
|
|
|
716
728
|
const getShowSheet = useGet(showSheet)
|
|
717
729
|
return (
|
|
718
730
|
<SheetController
|
|
719
|
-
disableDrag
|
|
720
731
|
onChangeOpen={(val) => {
|
|
721
732
|
if (getShowSheet()) {
|
|
722
733
|
props.onChangeOpen(val)
|
|
@@ -752,7 +763,7 @@ export {
|
|
|
752
763
|
DialogDescription,
|
|
753
764
|
DialogClose,
|
|
754
765
|
//
|
|
755
|
-
|
|
766
|
+
DialogWarningProvider,
|
|
756
767
|
}
|
|
757
768
|
export type {
|
|
758
769
|
DialogProps,
|
package/types/Dialog.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { GetProps, MediaPropKeys } from '@tamagui/core';
|
|
1
|
+
import { GetProps, MediaPropKeys, TamaguiElement } from '@tamagui/core';
|
|
3
2
|
import { Scope } from '@tamagui/create-context';
|
|
4
3
|
import { DismissableProps } from '@tamagui/dismissable';
|
|
5
4
|
import { FocusScopeProps } from '@tamagui/focus-scope';
|
|
5
|
+
import { PortalItemProps } from '@tamagui/portal';
|
|
6
6
|
import { YStackProps } from '@tamagui/stacks';
|
|
7
7
|
import * as React from 'react';
|
|
8
|
-
import { View } from 'react-native';
|
|
9
8
|
import { RemoveScroll } from 'react-remove-scroll';
|
|
10
9
|
declare type ScopedProps<P> = P & {
|
|
11
10
|
__scopeDialog?: Scope;
|
|
12
11
|
};
|
|
13
|
-
declare type TamaguiElement = HTMLElement | View;
|
|
14
12
|
declare const createDialogScope: import("@tamagui/create-context").CreateScope;
|
|
15
13
|
interface DialogProps {
|
|
16
14
|
sheetBreakpoint?: MediaPropKeys | false;
|
|
@@ -21,13 +19,26 @@ interface DialogProps {
|
|
|
21
19
|
modal?: boolean;
|
|
22
20
|
allowPinchZoom?: RemoveScrollProps['allowPinchZoom'];
|
|
23
21
|
}
|
|
22
|
+
declare type NonNull<A> = Exclude<A, void | null>;
|
|
23
|
+
declare type DialogContextValue = {
|
|
24
|
+
triggerRef: React.RefObject<TamaguiElement>;
|
|
25
|
+
contentRef: React.RefObject<TamaguiElement>;
|
|
26
|
+
contentId: string;
|
|
27
|
+
titleId: string;
|
|
28
|
+
descriptionId: string;
|
|
29
|
+
onOpenToggle(): void;
|
|
30
|
+
open: NonNull<DialogProps['open']>;
|
|
31
|
+
onOpenChange: NonNull<DialogProps['onOpenChange']>;
|
|
32
|
+
modal: NonNull<DialogProps['modal']>;
|
|
33
|
+
allowPinchZoom: NonNull<DialogProps['allowPinchZoom']>;
|
|
34
|
+
sheetBreakpoint: NonNull<DialogProps['sheetBreakpoint']>;
|
|
35
|
+
scopeKey: string;
|
|
36
|
+
};
|
|
24
37
|
declare type RemoveScrollProps = React.ComponentProps<typeof RemoveScroll>;
|
|
25
38
|
interface DialogTriggerProps extends YStackProps {
|
|
26
39
|
}
|
|
27
40
|
declare const DialogTrigger: React.ForwardRefExoticComponent<DialogTriggerProps & React.RefAttributes<TamaguiElement>>;
|
|
28
|
-
declare type
|
|
29
|
-
declare type PortalProps = PortalType extends (props: infer Props) => any ? Props : never;
|
|
30
|
-
declare type DialogPortalProps = Omit<PortalProps, 'asChild'> & YStackProps & {
|
|
41
|
+
declare type DialogPortalProps = Omit<PortalItemProps, 'asChild'> & YStackProps & {
|
|
31
42
|
forceMount?: true;
|
|
32
43
|
};
|
|
33
44
|
export declare const DialogPortalFrame: import("@tamagui/core").TamaguiComponent<(Omit<import("react-native").ViewProps, "display" | "children"> & import("@tamagui/core").RNWViewProps & import("@tamagui/core").TamaguiComponentPropsBase & import("@tamagui/core").WithThemeValues<import("@tamagui/core").StackStylePropsBase> & import("@tamagui/core").WithShorthands<import("@tamagui/core").WithThemeValues<import("@tamagui/core").StackStylePropsBase>> & Omit<{}, "elevation" | "fullscreen"> & {
|
|
@@ -139,16 +150,18 @@ declare const DialogContentFrame: import("@tamagui/core").TamaguiComponent<Omit<
|
|
|
139
150
|
size?: import("@tamagui/core").SizeTokens | undefined;
|
|
140
151
|
}>;
|
|
141
152
|
declare type DialogContentFrameProps = GetProps<typeof DialogContentFrame>;
|
|
142
|
-
interface DialogContentProps extends DialogContentFrameProps, DialogContentTypeProps {
|
|
153
|
+
interface DialogContentProps extends DialogContentFrameProps, Omit<DialogContentTypeProps, 'context'> {
|
|
143
154
|
forceMount?: true;
|
|
144
155
|
}
|
|
145
156
|
declare const DialogContent: React.ForwardRefExoticComponent<DialogContentProps & React.RefAttributes<TamaguiElement>>;
|
|
146
157
|
interface DialogContentTypeProps extends Omit<DialogContentImplProps, 'trapFocus' | 'disableOutsidePointerEvents'> {
|
|
158
|
+
context: DialogContextValue;
|
|
147
159
|
}
|
|
148
160
|
declare type DialogContentImplProps = DialogContentFrameProps & Omit<DismissableProps, 'onDismiss'> & {
|
|
149
161
|
trapFocus?: FocusScopeProps['trapped'];
|
|
150
162
|
onOpenAutoFocus?: FocusScopeProps['onMountAutoFocus'];
|
|
151
163
|
onCloseAutoFocus?: FocusScopeProps['onUnmountAutoFocus'];
|
|
164
|
+
context: DialogContextValue;
|
|
152
165
|
};
|
|
153
166
|
export declare const DialogSheetContents: {
|
|
154
167
|
({ __scopeDialog }: ScopedProps<{}>): JSX.Element;
|
|
@@ -1531,7 +1544,7 @@ declare const DialogClose: React.ForwardRefExoticComponent<Omit<import("react-na
|
|
|
1531
1544
|
readonly fullscreen?: boolean | undefined;
|
|
1532
1545
|
readonly elevation?: import("@tamagui/core").SizeTokens | undefined;
|
|
1533
1546
|
}>> & React.RefAttributes<TamaguiElement>>;
|
|
1534
|
-
declare const
|
|
1547
|
+
declare const DialogWarningProvider: {
|
|
1535
1548
|
(props: {
|
|
1536
1549
|
contentName: string;
|
|
1537
1550
|
titleName: string;
|
|
@@ -2239,7 +2252,7 @@ declare const Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAtt
|
|
|
2239
2252
|
modal?: boolean | undefined;
|
|
2240
2253
|
} & {
|
|
2241
2254
|
__scopeSheet?: Scope<any>;
|
|
2242
|
-
} & React.RefAttributes<View>, "theme" | "themeInverse"> & {
|
|
2255
|
+
} & React.RefAttributes<import("react-native").View>, "theme" | "themeInverse"> & {
|
|
2243
2256
|
theme?: import("@tamagui/core").ThemeName | null | undefined;
|
|
2244
2257
|
themeInverse?: boolean | undefined;
|
|
2245
2258
|
}) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | null) & {
|
|
@@ -2305,6 +2318,6 @@ declare const Dialog: React.ForwardRefExoticComponent<DialogProps & React.RefAtt
|
|
|
2305
2318
|
}) => JSX.Element;
|
|
2306
2319
|
};
|
|
2307
2320
|
};
|
|
2308
|
-
export { createDialogScope, Dialog, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose,
|
|
2321
|
+
export { createDialogScope, Dialog, DialogTrigger, DialogPortal, DialogOverlay, DialogContent, DialogTitle, DialogDescription, DialogClose, DialogWarningProvider, };
|
|
2309
2322
|
export type { DialogProps, DialogTriggerProps, DialogPortalProps, DialogOverlayProps, DialogContentProps, DialogTitleProps, DialogDescriptionProps, DialogCloseProps, };
|
|
2310
2323
|
//# sourceMappingURL=Dialog.d.ts.map
|
package/types/Dialog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.tsx"],"names":[],"mappings":"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"}
|