@tamagui/popover 1.0.1-beta.133 → 1.0.1-beta.136
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/dist/cjs/Popover.js +68 -10
- package/dist/cjs/Popover.js.map +2 -2
- package/dist/cjs/floating.js +37 -0
- package/dist/cjs/floating.js.map +7 -0
- package/dist/cjs/floating.native.js +59 -0
- package/dist/cjs/floating.native.js.map +7 -0
- package/dist/esm/Popover.js +68 -14
- package/dist/esm/Popover.js.map +2 -2
- package/dist/esm/floating.js +15 -0
- package/dist/esm/floating.js.map +7 -0
- package/dist/esm/floating.native.js +31 -0
- package/dist/esm/floating.native.js.map +7 -0
- package/dist/jsx/Popover.js +56 -15
- package/dist/jsx/Popover.js.map +2 -2
- package/dist/jsx/floating.js +15 -0
- package/dist/jsx/floating.js.map +7 -0
- package/dist/jsx/floating.native.js +31 -0
- package/dist/jsx/floating.native.js.map +7 -0
- package/package.json +15 -14
- package/src/Popover.tsx +101 -24
- package/src/floating.native.ts +18 -0
- package/src/floating.ts +8 -0
- package/types/Popover.d.ts +84 -8
- package/types/floating.d.ts +2 -0
- package/types/floating.native.d.ts +15 -0
package/dist/cjs/Popover.js
CHANGED
|
@@ -26,6 +26,7 @@ __export(Popover_exports, {
|
|
|
26
26
|
PopoverArrow: () => PopoverArrow,
|
|
27
27
|
PopoverClose: () => PopoverClose,
|
|
28
28
|
PopoverContent: () => PopoverContent,
|
|
29
|
+
PopoverSheetContents: () => PopoverSheetContents,
|
|
29
30
|
PopoverTrigger: () => PopoverTrigger,
|
|
30
31
|
__PopoverProviderInternal: () => __PopoverProviderInternal,
|
|
31
32
|
createPopoverScope: () => createPopoverScope,
|
|
@@ -33,7 +34,6 @@ __export(Popover_exports, {
|
|
|
33
34
|
});
|
|
34
35
|
module.exports = __toCommonJS(Popover_exports);
|
|
35
36
|
var import_polyfill_dev = require("@tamagui/polyfill-dev");
|
|
36
|
-
var import_react_dom_interactions = require("@floating-ui/react-dom-interactions");
|
|
37
37
|
var import_animate_presence = require("@tamagui/animate-presence");
|
|
38
38
|
var import_aria_hidden = require("@tamagui/aria-hidden");
|
|
39
39
|
var import_compose_refs = require("@tamagui/compose-refs");
|
|
@@ -43,9 +43,11 @@ var import_focus_scope = require("@tamagui/focus-scope");
|
|
|
43
43
|
var import_popper = require("@tamagui/popper");
|
|
44
44
|
var import_portal = require("@tamagui/portal");
|
|
45
45
|
var import_remove_scroll = require("@tamagui/remove-scroll");
|
|
46
|
+
var import_sheet = require("@tamagui/sheet");
|
|
46
47
|
var import_stacks = require("@tamagui/stacks");
|
|
47
48
|
var import_use_controllable_state = require("@tamagui/use-controllable-state");
|
|
48
49
|
var React = __toESM(require("react"));
|
|
50
|
+
var import_floating = require("./floating");
|
|
49
51
|
const POPOVER_NAME = "Popover";
|
|
50
52
|
const [createPopoverContext, createPopoverScopeInternal] = (0, import_create_context.createContextScope)(POPOVER_NAME, [
|
|
51
53
|
import_popper.createPopperScope
|
|
@@ -147,6 +149,12 @@ const PopoverContentImpl = React.forwardRef((props, forwardedRef) => {
|
|
|
147
149
|
} = props;
|
|
148
150
|
const popperScope = usePopoverScope(__scopePopover);
|
|
149
151
|
const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover);
|
|
152
|
+
const showSheet = useShowPopoverSheet(context);
|
|
153
|
+
if (showSheet) {
|
|
154
|
+
return /* @__PURE__ */ React.createElement(import_portal.PortalItem, {
|
|
155
|
+
hostName: `${context.scopeKey}SheetContents`
|
|
156
|
+
}, children);
|
|
157
|
+
}
|
|
150
158
|
return /* @__PURE__ */ React.createElement(import_animate_presence.AnimatePresence, null, !!context.open && /* @__PURE__ */ React.createElement(import_popper.PopperContent, {
|
|
151
159
|
key: "popper-content",
|
|
152
160
|
"data-state": getState(context.open),
|
|
@@ -190,6 +198,14 @@ const PopoverArrow = React.forwardRef((props, forwardedRef) => {
|
|
|
190
198
|
});
|
|
191
199
|
});
|
|
192
200
|
PopoverArrow.displayName = ARROW_NAME;
|
|
201
|
+
const SHEET_CONTENTS_NAME = "PopoverSheetContents";
|
|
202
|
+
const PopoverSheetContents = ({ __scopePopover }) => {
|
|
203
|
+
const context = usePopoverInternalContext(SHEET_CONTENTS_NAME, __scopePopover);
|
|
204
|
+
return /* @__PURE__ */ React.createElement(import_portal.PortalHost, {
|
|
205
|
+
name: `${context.scopeKey}SheetContents`
|
|
206
|
+
});
|
|
207
|
+
};
|
|
208
|
+
PopoverSheetContents.displayName = SHEET_CONTENTS_NAME;
|
|
193
209
|
const Popover = (0, import_core.withStaticProperties)((props) => {
|
|
194
210
|
const {
|
|
195
211
|
__scopePopover,
|
|
@@ -197,6 +213,7 @@ const Popover = (0, import_core.withStaticProperties)((props) => {
|
|
|
197
213
|
open: openProp,
|
|
198
214
|
defaultOpen,
|
|
199
215
|
onOpenChange,
|
|
216
|
+
sheetBreakpoint = false,
|
|
200
217
|
...restProps
|
|
201
218
|
} = props;
|
|
202
219
|
const popperScope = usePopoverScope(__scopePopover);
|
|
@@ -207,23 +224,28 @@ const Popover = (0, import_core.withStaticProperties)((props) => {
|
|
|
207
224
|
defaultProp: defaultOpen || false,
|
|
208
225
|
onChange: onOpenChange
|
|
209
226
|
});
|
|
227
|
+
const breakpointActive = useSheetBreakpointActive(sheetBreakpoint);
|
|
210
228
|
const useFloatingContext = React.useCallback((props2) => {
|
|
211
|
-
const floating = (0,
|
|
229
|
+
const floating = (0, import_floating.useFloating)({
|
|
212
230
|
...props2,
|
|
213
231
|
open,
|
|
214
232
|
onOpenChange: setOpen
|
|
215
233
|
});
|
|
216
|
-
const { getReferenceProps, getFloatingProps } = (0,
|
|
217
|
-
(0,
|
|
218
|
-
|
|
219
|
-
|
|
234
|
+
const { getReferenceProps, getFloatingProps } = (0, import_floating.useInteractions)([
|
|
235
|
+
(0, import_floating.useFocus)(floating.context, {
|
|
236
|
+
enabled: !breakpointActive
|
|
237
|
+
}),
|
|
238
|
+
(0, import_floating.useRole)(floating.context, { role: "dialog" }),
|
|
239
|
+
(0, import_floating.useDismiss)(floating.context, {
|
|
240
|
+
enabled: !breakpointActive
|
|
241
|
+
})
|
|
220
242
|
]);
|
|
221
243
|
return {
|
|
222
244
|
...floating,
|
|
223
245
|
getReferenceProps,
|
|
224
246
|
getFloatingProps
|
|
225
247
|
};
|
|
226
|
-
}, [open, setOpen]);
|
|
248
|
+
}, [breakpointActive, open, setOpen]);
|
|
227
249
|
return /* @__PURE__ */ React.createElement(import_popper.FloatingOverrideContext.Provider, {
|
|
228
250
|
value: useFloatingContext
|
|
229
251
|
}, /* @__PURE__ */ React.createElement(import_popper.Popper, {
|
|
@@ -231,29 +253,64 @@ const Popover = (0, import_core.withStaticProperties)((props) => {
|
|
|
231
253
|
...restProps
|
|
232
254
|
}, /* @__PURE__ */ React.createElement(PopoverProviderInternal, {
|
|
233
255
|
scope: __scopePopover,
|
|
256
|
+
scopeKey: __scopePopover ? Object.keys(__scopePopover)[0] : "",
|
|
257
|
+
sheetBreakpoint,
|
|
234
258
|
contentId: (0, import_core.useId)(),
|
|
235
259
|
triggerRef,
|
|
236
260
|
open,
|
|
237
261
|
onOpenChange: setOpen,
|
|
238
262
|
onOpenToggle: (0, import_core.useEvent)(() => {
|
|
239
|
-
console.log("
|
|
263
|
+
console.log("wtf");
|
|
264
|
+
if (open && breakpointActive) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
240
267
|
setOpen(!open);
|
|
241
268
|
}),
|
|
242
269
|
hasCustomAnchor,
|
|
243
270
|
onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),
|
|
244
271
|
onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), [])
|
|
245
|
-
},
|
|
272
|
+
}, /* @__PURE__ */ React.createElement(PopoverSheetController, {
|
|
273
|
+
onChangeOpen: setOpen,
|
|
274
|
+
__scopePopover
|
|
275
|
+
}, children))));
|
|
246
276
|
}, {
|
|
247
277
|
Anchor: PopoverAnchor,
|
|
248
278
|
Arrow: PopoverArrow,
|
|
249
279
|
Trigger: PopoverTrigger,
|
|
250
280
|
Content: PopoverContent,
|
|
251
|
-
Close: PopoverClose
|
|
281
|
+
Close: PopoverClose,
|
|
282
|
+
SheetContents: PopoverSheetContents,
|
|
283
|
+
Sheet: import_sheet.Sheet
|
|
252
284
|
});
|
|
253
285
|
Popover.displayName = POPOVER_NAME;
|
|
254
286
|
function getState(open) {
|
|
255
287
|
return open ? "open" : "closed";
|
|
256
288
|
}
|
|
289
|
+
const PopoverSheetController = (props) => {
|
|
290
|
+
const context = usePopoverInternalContext("PopoverSheetController", props.__scopePopover);
|
|
291
|
+
const showSheet = useShowPopoverSheet(context);
|
|
292
|
+
const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
|
|
293
|
+
const getShowSheet = (0, import_core.useGet)(showSheet);
|
|
294
|
+
return /* @__PURE__ */ React.createElement(import_sheet.SheetController, {
|
|
295
|
+
onChangeOpen: (val) => {
|
|
296
|
+
if (getShowSheet()) {
|
|
297
|
+
props.onChangeOpen(val);
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
open: context.open,
|
|
301
|
+
hidden: breakpointActive === false
|
|
302
|
+
}, props.children);
|
|
303
|
+
};
|
|
304
|
+
const useSheetBreakpointActive = (breakpoint) => {
|
|
305
|
+
const media = (0, import_core.useMedia)();
|
|
306
|
+
return breakpoint ? media[breakpoint] : false;
|
|
307
|
+
};
|
|
308
|
+
const useShowPopoverSheet = (context) => {
|
|
309
|
+
if (!import_core.isWeb)
|
|
310
|
+
return true;
|
|
311
|
+
const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
|
|
312
|
+
return context.open === false ? false : breakpointActive;
|
|
313
|
+
};
|
|
257
314
|
// Annotate the CommonJS export names for ESM import in node:
|
|
258
315
|
0 && (module.exports = {
|
|
259
316
|
Popover,
|
|
@@ -261,6 +318,7 @@ function getState(open) {
|
|
|
261
318
|
PopoverArrow,
|
|
262
319
|
PopoverClose,
|
|
263
320
|
PopoverContent,
|
|
321
|
+
PopoverSheetContents,
|
|
264
322
|
PopoverTrigger,
|
|
265
323
|
__PopoverProviderInternal,
|
|
266
324
|
createPopoverScope,
|
package/dist/cjs/Popover.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Popover.tsx"],
|
|
4
|
-
"sourcesContent": ["// adapted from radix-ui popover\n\nimport '@tamagui/polyfill-dev'\n\nimport {\n UseFloatingProps,\n useDismiss,\n useFloating,\n useFocus,\n useInteractions,\n useRole,\n} from '@floating-ui/react-dom-interactions'\nimport { AnimatePresence } from '@tamagui/animate-presence'\nimport { hideOthers } from '@tamagui/aria-hidden'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n SizeTokens,\n Theme,\n composeEventHandlers,\n useEvent,\n useId,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport type { Scope } from '@tamagui/create-context'\nimport { createContextScope } from '@tamagui/create-context'\nimport { DismissableProps } from '@tamagui/dismissable'\nimport { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'\nimport {\n FloatingOverrideContext,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperArrowProps,\n PopperContent,\n PopperContentProps,\n PopperProps,\n createPopperScope,\n} from '@tamagui/popper'\nimport { Portal } from '@tamagui/portal'\nimport { RemoveScroll, RemoveScrollProps } from '@tamagui/remove-scroll'\nimport { YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport * as React from 'react'\nimport { View } from 'react-native'\n\nconst POPOVER_NAME = 'Popover'\n\ntype ScopedProps<P> = P & { __scopePopover?: Scope }\nconst [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [\n createPopperScope,\n])\nexport const usePopoverScope = createPopperScope()\nexport const createPopoverScope = createPopoverScopeInternal\n\ntype PopoverContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement>\n contentId?: string\n open: boolean\n onOpenChange(open: boolean): void\n onOpenToggle(): void\n hasCustomAnchor: boolean\n onCustomAnchorAdd(): void\n onCustomAnchorRemove(): void\n size?: SizeTokens\n}\n\nconst [PopoverProviderInternal, usePopoverInternalContext] =\n createPopoverContext<PopoverContextValue>(POPOVER_NAME)\n\nexport const __PopoverProviderInternal = PopoverProviderInternal\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopoverAnchor'\n\ntype PopoverAnchorElement = HTMLElement | View\nexport type PopoverAnchorProps = YStackProps\n\nexport const PopoverAnchor = React.forwardRef<PopoverAnchorElement, PopoverAnchorProps>(\n (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props\n const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context\n\n React.useEffect(() => {\n onCustomAnchorAdd()\n return () => onCustomAnchorRemove()\n }, [onCustomAnchorAdd, onCustomAnchorRemove])\n\n return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />\n }\n)\n\nPopoverAnchor.displayName = ANCHOR_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'PopoverTrigger'\n\ntype PopoverTriggerElement = HTMLElement | View\nexport type PopoverTriggerProps = YStackProps\n\nexport const PopoverTrigger = React.forwardRef<PopoverTriggerElement, PopoverTriggerProps>(\n (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props\n const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef)\n\n const trigger = (\n <YStack\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 return context.hasCustomAnchor ? (\n trigger\n ) : (\n <PopperAnchor asChild {...popperScope}>\n {trigger}\n </PopperAnchor>\n )\n }\n)\n\nPopoverTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopoverContent'\n\nexport type PopoverContentProps = PopoverContentTypeProps\n\ntype PopoverContentTypeElement = PopoverContentImplElement\n\nexport interface PopoverContentTypeProps\n extends Omit<PopoverContentImplProps, 'disableOutsidePointerEvents'> {\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n}\n\nexport const PopoverContent = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const { allowPinchZoom, trapFocus, disableRemoveScroll, ...contentModalProps } = props\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const isRightClickOutsideRef = React.useRef(false)\n const themeName = useThemeName()\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 <Portal>\n <Theme name={themeName}>\n <PopoverContentImpl\n {...contentModalProps}\n disableRemoveScroll={disableRemoveScroll}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={trapFocus ?? context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault()\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus()\n })}\n onPointerDownOutside={composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick\n isRightClickOutsideRef.current = isRightClick\n },\n { checkDefaultPrevented: false }\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(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkDefaultPrevented: false }\n )}\n />\n </Theme>\n </Portal>\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PopoverContentImplElement = React.ElementRef<typeof PopperContent>\n\nexport interface PopoverContentImplProps\n extends PopperContentProps,\n Omit<DismissableProps, 'onDismiss' | 'children'> {\n /**\n * Whether focus should be trapped within the `Popover`\n * (default: 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 disableRemoveScroll?: boolean\n}\n\nconst PopoverContentImpl = React.forwardRef<PopoverContentImplElement, PopoverContentImplProps>(\n (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n children,\n disableRemoveScroll,\n ...contentProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover)\n // const popperContext = usePopperContext(CONTENT_NAME, popperScope.__scopePopper)\n\n // const handleDismiss = React.useCallback(() => context.onOpenChange(false), [])\n // <Dismissable\n // disableOutsidePointerEvents={disableOutsidePointerEvents}\n // // onInteractOutside={onInteractOutside}\n // onEscapeKeyDown={onEscapeKeyDown}\n // // onPointerDownOutside={onPointerDownOutside}\n // // onFocusOutside={onFocusOutside}\n // onDismiss={handleDismiss}\n // >\n\n return (\n <AnimatePresence>\n {!!context.open && (\n <PopperContent\n key=\"popper-content\"\n data-state={getState(context.open)}\n id={context.contentId}\n pointerEvents=\"auto\"\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n >\n <RemoveScroll\n enabled={disableRemoveScroll ? false : context.open}\n allowPinchZoom\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {trapFocus === false ? (\n children\n ) : (\n <FocusScope\n loop\n trapped={trapFocus ?? context.open}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <div style={{ display: 'contents' }}>{children}</div>\n </FocusScope>\n )}\n </RemoveScroll>\n </PopperContent>\n )}\n </AnimatePresence>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'PopoverClose'\n\ntype PopoverCloseElement = HTMLElement | View\nexport type PopoverCloseProps = YStackProps\n\nexport const PopoverClose = React.forwardRef<PopoverCloseElement, PopoverCloseProps>(\n (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props\n const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover)\n return (\n <YStack\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))}\n />\n )\n }\n)\n\nPopoverClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopoverArrow'\n\ntype PopoverArrowElement = HTMLElement | View\nexport type PopoverArrowProps = PopperArrowProps\n\nexport const PopoverArrow = React.forwardRef<PopoverArrowElement, PopoverArrowProps>(\n (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props\n const popperScope = usePopoverScope(__scopePopover)\n return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n }\n)\n\nPopoverArrow.displayName = ARROW_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nexport type PopoverProps = PopperProps & {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n}\n\nexport const Popover = withStaticProperties(\n ((props: ScopedProps<PopoverProps>) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...restProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false)\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen || false,\n onChange: onOpenChange,\n })\n\n const useFloatingContext = React.useCallback(\n (props: UseFloatingProps) => {\n const floating = useFloating({\n ...props,\n open,\n onOpenChange: setOpen,\n })\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useFocus(floating.context),\n useRole(floating.context, { role: 'dialog' }),\n useDismiss(floating.context),\n ])\n return {\n ...floating,\n getReferenceProps,\n getFloatingProps,\n }\n },\n [open, setOpen]\n )\n\n return (\n <FloatingOverrideContext.Provider value={useFloatingContext as any}>\n <Popper {...popperScope} {...restProps}>\n <PopoverProviderInternal\n scope={__scopePopover}\n contentId={useId()}\n triggerRef={triggerRef}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={useEvent(() => {\n console.log('toggle', open)\n setOpen(!open)\n })}\n hasCustomAnchor={hasCustomAnchor}\n onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])}\n onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}\n >\n {children}\n </PopoverProviderInternal>\n </Popper>\n </FloatingOverrideContext.Provider>\n )\n }) as React.FC<PopoverProps>,\n {\n Anchor: PopoverAnchor,\n Arrow: PopoverArrow,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Close: PopoverClose,\n }\n)\n\nPopover.displayName = POPOVER_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed'\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAAO;AAEP,
|
|
4
|
+
"sourcesContent": ["// adapted from radix-ui popover\n\nimport '@tamagui/polyfill-dev'\n\nimport { AnimatePresence } from '@tamagui/animate-presence'\nimport { hideOthers } from '@tamagui/aria-hidden'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport {\n MediaPropKeys,\n SizeTokens,\n Theme,\n composeEventHandlers,\n isWeb,\n useEvent,\n useGet,\n useId,\n useMedia,\n useThemeName,\n withStaticProperties,\n} from '@tamagui/core'\nimport type { Scope } from '@tamagui/create-context'\nimport { createContextScope } from '@tamagui/create-context'\nimport { DismissableProps } from '@tamagui/dismissable'\nimport { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'\nimport {\n FloatingOverrideContext,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperArrowProps,\n PopperContent,\n PopperContentProps,\n PopperProps,\n createPopperScope,\n} from '@tamagui/popper'\nimport { Portal, PortalHost, PortalItem } from '@tamagui/portal'\nimport { RemoveScroll, RemoveScrollProps } from '@tamagui/remove-scroll'\nimport { Sheet, SheetController } from '@tamagui/sheet'\nimport { YStack, YStackProps } from '@tamagui/stacks'\nimport { useControllableState } from '@tamagui/use-controllable-state'\nimport * as React from 'react'\nimport { View } from 'react-native'\n\nimport type { UseFloatingProps } from './floating'\nimport { useDismiss, useFloating, useFocus, useInteractions, useRole } from './floating'\n\nconst POPOVER_NAME = 'Popover'\n\ntype ScopedProps<P> = P & { __scopePopover?: Scope }\ntype NonNull<A> = Exclude<A, void | null>\n\nexport type PopoverProps = PopperProps & {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n sheetBreakpoint?: MediaPropKeys | false\n}\n\ntype PopoverContextValue = {\n triggerRef: React.RefObject<HTMLButtonElement>\n contentId?: string\n open: boolean\n onOpenChange(open: boolean): void\n onOpenToggle(): void\n hasCustomAnchor: boolean\n onCustomAnchorAdd(): void\n onCustomAnchorRemove(): void\n size?: SizeTokens\n sheetBreakpoint: NonNull<PopoverProps['sheetBreakpoint']>\n scopeKey: string\n}\n\nconst [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [\n createPopperScope,\n])\nexport const usePopoverScope = createPopperScope()\nexport const createPopoverScope = createPopoverScopeInternal\n\nconst [PopoverProviderInternal, usePopoverInternalContext] =\n createPopoverContext<PopoverContextValue>(POPOVER_NAME)\n\nexport const __PopoverProviderInternal = PopoverProviderInternal\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverAnchor\n * -----------------------------------------------------------------------------------------------*/\n\nconst ANCHOR_NAME = 'PopoverAnchor'\n\ntype PopoverAnchorElement = HTMLElement | View\nexport type PopoverAnchorProps = YStackProps\n\nexport const PopoverAnchor = React.forwardRef<PopoverAnchorElement, PopoverAnchorProps>(\n (props: ScopedProps<PopoverAnchorProps>, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props\n const context = usePopoverInternalContext(ANCHOR_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context\n\n React.useEffect(() => {\n onCustomAnchorAdd()\n return () => onCustomAnchorRemove()\n }, [onCustomAnchorAdd, onCustomAnchorRemove])\n\n return <PopperAnchor {...popperScope} {...anchorProps} ref={forwardedRef} />\n }\n)\n\nPopoverAnchor.displayName = ANCHOR_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverTrigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst TRIGGER_NAME = 'PopoverTrigger'\n\ntype PopoverTriggerElement = HTMLElement | View\nexport type PopoverTriggerProps = YStackProps\n\nexport const PopoverTrigger = React.forwardRef<PopoverTriggerElement, PopoverTriggerProps>(\n (props: ScopedProps<PopoverTriggerProps>, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props\n const context = usePopoverInternalContext(TRIGGER_NAME, __scopePopover)\n const popperScope = usePopoverScope(__scopePopover)\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef)\n\n const trigger = (\n <YStack\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 return context.hasCustomAnchor ? (\n trigger\n ) : (\n <PopperAnchor asChild {...popperScope}>\n {trigger}\n </PopperAnchor>\n )\n }\n)\n\nPopoverTrigger.displayName = TRIGGER_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst CONTENT_NAME = 'PopoverContent'\n\nexport type PopoverContentProps = PopoverContentTypeProps\n\ntype PopoverContentTypeElement = PopoverContentImplElement\n\nexport interface PopoverContentTypeProps\n extends Omit<PopoverContentImplProps, 'disableOutsidePointerEvents'> {\n /**\n * @see https://github.com/theKashey/react-remove-scroll#usage\n */\n allowPinchZoom?: RemoveScrollProps['allowPinchZoom']\n}\n\nexport const PopoverContent = React.forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(\n (props: ScopedProps<PopoverContentTypeProps>, forwardedRef) => {\n const { allowPinchZoom, trapFocus, disableRemoveScroll, ...contentModalProps } = props\n const context = usePopoverInternalContext(CONTENT_NAME, props.__scopePopover)\n const contentRef = React.useRef<HTMLDivElement>(null)\n const composedRefs = useComposedRefs(forwardedRef, contentRef)\n const isRightClickOutsideRef = React.useRef(false)\n const themeName = useThemeName()\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 <Portal>\n <Theme name={themeName}>\n <PopoverContentImpl\n {...contentModalProps}\n disableRemoveScroll={disableRemoveScroll}\n ref={composedRefs}\n // we make sure we're not trapping once it's been closed\n // (closed !== unmounted when animating out)\n trapFocus={trapFocus ?? context.open}\n disableOutsidePointerEvents\n onCloseAutoFocus={composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault()\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus()\n })}\n onPointerDownOutside={composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick\n isRightClickOutsideRef.current = isRightClick\n },\n { checkDefaultPrevented: false }\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(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkDefaultPrevented: false }\n )}\n />\n </Theme>\n </Portal>\n )\n }\n)\n\n/* -----------------------------------------------------------------------------------------------*/\n\ntype PopoverContentImplElement = React.ElementRef<typeof PopperContent>\n\nexport interface PopoverContentImplProps\n extends PopperContentProps,\n Omit<DismissableProps, 'onDismiss' | 'children'> {\n /**\n * Whether focus should be trapped within the `Popover`\n * (default: 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 disableRemoveScroll?: boolean\n}\n\nconst PopoverContentImpl = React.forwardRef<PopoverContentImplElement, PopoverContentImplProps>(\n (props: ScopedProps<PopoverContentImplProps>, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n children,\n disableRemoveScroll,\n ...contentProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover)\n const showSheet = useShowPopoverSheet(context)\n // const popperContext = usePopperContext(CONTENT_NAME, popperScope.__scopePopper)\n\n if (showSheet) {\n // doesn't show as popover yet on native, must use as sheet\n return <PortalItem hostName={`${context.scopeKey}SheetContents`}>{children}</PortalItem>\n }\n\n // const handleDismiss = React.useCallback(() => context.onOpenChange(false), [])\n // <Dismissable\n // disableOutsidePointerEvents={disableOutsidePointerEvents}\n // // onInteractOutside={onInteractOutside}\n // onEscapeKeyDown={onEscapeKeyDown}\n // // onPointerDownOutside={onPointerDownOutside}\n // // onFocusOutside={onFocusOutside}\n // onDismiss={handleDismiss}\n // >\n\n return (\n <AnimatePresence>\n {!!context.open && (\n <PopperContent\n key=\"popper-content\"\n data-state={getState(context.open)}\n id={context.contentId}\n pointerEvents=\"auto\"\n {...popperScope}\n {...contentProps}\n ref={forwardedRef}\n >\n <RemoveScroll\n enabled={disableRemoveScroll ? false : context.open}\n allowPinchZoom\n // causes lots of bugs on touch web on site\n removeScrollBar={false}\n >\n {trapFocus === false ? (\n children\n ) : (\n <FocusScope\n loop\n trapped={trapFocus ?? context.open}\n onMountAutoFocus={onOpenAutoFocus}\n onUnmountAutoFocus={onCloseAutoFocus}\n >\n <div style={{ display: 'contents' }}>{children}</div>\n </FocusScope>\n )}\n </RemoveScroll>\n </PopperContent>\n )}\n </AnimatePresence>\n )\n }\n)\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverClose\n * -----------------------------------------------------------------------------------------------*/\n\nconst CLOSE_NAME = 'PopoverClose'\n\ntype PopoverCloseElement = HTMLElement | View\nexport type PopoverCloseProps = YStackProps\n\nexport const PopoverClose = React.forwardRef<PopoverCloseElement, PopoverCloseProps>(\n (props: ScopedProps<PopoverCloseProps>, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props\n const context = usePopoverInternalContext(CLOSE_NAME, __scopePopover)\n return (\n <YStack\n {...closeProps}\n ref={forwardedRef}\n onPress={composeEventHandlers(props.onPress, () => context.onOpenChange(false))}\n />\n )\n }\n)\n\nPopoverClose.displayName = CLOSE_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverArrow\n * -----------------------------------------------------------------------------------------------*/\n\nconst ARROW_NAME = 'PopoverArrow'\n\ntype PopoverArrowElement = HTMLElement | View\nexport type PopoverArrowProps = PopperArrowProps\n\nexport const PopoverArrow = React.forwardRef<PopoverArrowElement, PopoverArrowProps>(\n (props: ScopedProps<PopoverArrowProps>, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props\n const popperScope = usePopoverScope(__scopePopover)\n return <PopperArrow {...popperScope} {...arrowProps} ref={forwardedRef} />\n }\n)\n\nPopoverArrow.displayName = ARROW_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * PopoverSheetContents\n * -----------------------------------------------------------------------------------------------*/\n\nconst SHEET_CONTENTS_NAME = 'PopoverSheetContents'\n\nexport const PopoverSheetContents = ({ __scopePopover }: ScopedProps<{}>) => {\n const context = usePopoverInternalContext(SHEET_CONTENTS_NAME, __scopePopover)\n return <PortalHost name={`${context.scopeKey}SheetContents`}></PortalHost>\n}\n\nPopoverSheetContents.displayName = SHEET_CONTENTS_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nexport const Popover = withStaticProperties(\n ((props: ScopedProps<PopoverProps>) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n sheetBreakpoint = false,\n ...restProps\n } = props\n const popperScope = usePopoverScope(__scopePopover)\n const triggerRef = React.useRef<HTMLButtonElement>(null)\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false)\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen || false,\n onChange: onOpenChange,\n })\n\n const breakpointActive = useSheetBreakpointActive(sheetBreakpoint)\n\n const useFloatingContext = React.useCallback(\n (props: UseFloatingProps) => {\n const floating = useFloating({\n ...props,\n open,\n onOpenChange: setOpen,\n })\n const { getReferenceProps, getFloatingProps } = useInteractions([\n useFocus(floating.context, {\n enabled: !breakpointActive,\n }),\n useRole(floating.context, { role: 'dialog' }),\n useDismiss(floating.context, {\n enabled: !breakpointActive,\n }),\n ])\n return {\n ...floating,\n getReferenceProps,\n getFloatingProps,\n }\n },\n [breakpointActive, open, setOpen]\n )\n\n return (\n <FloatingOverrideContext.Provider value={useFloatingContext as any}>\n <Popper {...popperScope} {...restProps}>\n <PopoverProviderInternal\n scope={__scopePopover}\n scopeKey={__scopePopover ? Object.keys(__scopePopover)[0] : ''}\n sheetBreakpoint={sheetBreakpoint}\n contentId={useId()}\n triggerRef={triggerRef}\n open={open}\n onOpenChange={setOpen}\n onOpenToggle={useEvent(() => {\n console.log('wtf')\n if (open && breakpointActive) {\n return\n }\n setOpen(!open)\n })}\n hasCustomAnchor={hasCustomAnchor}\n onCustomAnchorAdd={React.useCallback(() => setHasCustomAnchor(true), [])}\n onCustomAnchorRemove={React.useCallback(() => setHasCustomAnchor(false), [])}\n >\n <PopoverSheetController onChangeOpen={setOpen} __scopePopover={__scopePopover}>\n {children}\n </PopoverSheetController>\n </PopoverProviderInternal>\n </Popper>\n </FloatingOverrideContext.Provider>\n )\n }) as React.FC<PopoverProps>,\n {\n Anchor: PopoverAnchor,\n Arrow: PopoverArrow,\n Trigger: PopoverTrigger,\n Content: PopoverContent,\n Close: PopoverClose,\n SheetContents: PopoverSheetContents,\n Sheet,\n }\n)\n\nPopover.displayName = POPOVER_NAME\n\n/* -----------------------------------------------------------------------------------------------*/\n\nfunction getState(open: boolean) {\n return open ? 'open' : 'closed'\n}\n\nconst PopoverSheetController = (\n props: ScopedProps<{\n children: React.ReactNode\n onChangeOpen: React.Dispatch<React.SetStateAction<boolean>>\n }>\n) => {\n const context = usePopoverInternalContext('PopoverSheetController', props.__scopePopover)\n const showSheet = useShowPopoverSheet(context)\n const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint)\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 useSheetBreakpointActive = (breakpoint?: MediaPropKeys | false) => {\n const media = useMedia()\n return breakpoint ? media[breakpoint] : false\n}\n\nconst useShowPopoverSheet = (context: PopoverContextValue) => {\n // for now always show as sheet on native\n if (!isWeb) return true\n const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint)\n return context.open === false ? false : breakpointActive\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var floating_exports = {};
|
|
20
|
+
__export(floating_exports, {
|
|
21
|
+
useDismiss: () => import_react_dom_interactions.useDismiss,
|
|
22
|
+
useFloating: () => import_react_dom_interactions.useFloating,
|
|
23
|
+
useFocus: () => import_react_dom_interactions.useFocus,
|
|
24
|
+
useInteractions: () => import_react_dom_interactions.useInteractions,
|
|
25
|
+
useRole: () => import_react_dom_interactions.useRole
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(floating_exports);
|
|
28
|
+
var import_react_dom_interactions = require("@floating-ui/react-dom-interactions");
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
useDismiss,
|
|
32
|
+
useFloating,
|
|
33
|
+
useFocus,
|
|
34
|
+
useInteractions,
|
|
35
|
+
useRole
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=floating.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/floating.ts"],
|
|
4
|
+
"sourcesContent": ["export {\n type UseFloatingProps,\n useDismiss,\n useFloating,\n useFocus,\n useInteractions,\n useRole,\n} from '@floating-ui/react-dom-interactions'\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAOO;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var floating_native_exports = {};
|
|
20
|
+
__export(floating_native_exports, {
|
|
21
|
+
useDismiss: () => useDismiss,
|
|
22
|
+
useFloating: () => useFloating,
|
|
23
|
+
useFocus: () => useFocus,
|
|
24
|
+
useInteractions: () => useInteractions,
|
|
25
|
+
useRole: () => useRole
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(floating_native_exports);
|
|
28
|
+
const useDismiss = () => {
|
|
29
|
+
};
|
|
30
|
+
const useFloating = () => {
|
|
31
|
+
return {
|
|
32
|
+
context: {},
|
|
33
|
+
reference: () => {
|
|
34
|
+
},
|
|
35
|
+
floating: () => {
|
|
36
|
+
},
|
|
37
|
+
refs: {
|
|
38
|
+
floating: {},
|
|
39
|
+
reference: {}
|
|
40
|
+
},
|
|
41
|
+
middlewareData: {}
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const useFocus = () => {
|
|
45
|
+
};
|
|
46
|
+
const useInteractions = () => {
|
|
47
|
+
return {};
|
|
48
|
+
};
|
|
49
|
+
const useRole = () => {
|
|
50
|
+
};
|
|
51
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
52
|
+
0 && (module.exports = {
|
|
53
|
+
useDismiss,
|
|
54
|
+
useFloating,
|
|
55
|
+
useFocus,
|
|
56
|
+
useInteractions,
|
|
57
|
+
useRole
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=floating.native.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/floating.native.ts"],
|
|
4
|
+
"sourcesContent": ["export const useDismiss = () => {}\nexport const useFloating = () => {\n return {\n context: {},\n reference: () => {},\n floating: () => {},\n refs: {\n floating: {},\n reference: {},\n },\n middlewareData: {},\n }\n}\nexport const useFocus = () => {}\nexport const useInteractions = () => {\n return {}\n}\nexport const useRole = () => {}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,aAAa,MAAM;AAAC;AAC1B,MAAM,cAAc,MAAM;AAC/B,SAAO;AAAA,IACL,SAAS,CAAC;AAAA,IACV,WAAW,MAAM;AAAA,IAAC;AAAA,IAClB,UAAU,MAAM;AAAA,IAAC;AAAA,IACjB,MAAM;AAAA,MACJ,UAAU,CAAC;AAAA,MACX,WAAW,CAAC;AAAA,IACd;AAAA,IACA,gBAAgB,CAAC;AAAA,EACnB;AACF;AACO,MAAM,WAAW,MAAM;AAAC;AACxB,MAAM,kBAAkB,MAAM;AACnC,SAAO,CAAC;AACV;AACO,MAAM,UAAU,MAAM;AAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/esm/Popover.js
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import "@tamagui/polyfill-dev";
|
|
2
|
-
import {
|
|
3
|
-
useDismiss,
|
|
4
|
-
useFloating,
|
|
5
|
-
useFocus,
|
|
6
|
-
useInteractions,
|
|
7
|
-
useRole
|
|
8
|
-
} from "@floating-ui/react-dom-interactions";
|
|
9
2
|
import { AnimatePresence } from "@tamagui/animate-presence";
|
|
10
3
|
import { hideOthers } from "@tamagui/aria-hidden";
|
|
11
4
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
12
5
|
import {
|
|
13
6
|
Theme,
|
|
14
7
|
composeEventHandlers,
|
|
8
|
+
isWeb,
|
|
15
9
|
useEvent,
|
|
10
|
+
useGet,
|
|
16
11
|
useId,
|
|
12
|
+
useMedia,
|
|
17
13
|
useThemeName,
|
|
18
14
|
withStaticProperties
|
|
19
15
|
} from "@tamagui/core";
|
|
@@ -27,11 +23,13 @@ import {
|
|
|
27
23
|
PopperContent,
|
|
28
24
|
createPopperScope
|
|
29
25
|
} from "@tamagui/popper";
|
|
30
|
-
import { Portal } from "@tamagui/portal";
|
|
26
|
+
import { Portal, PortalHost, PortalItem } from "@tamagui/portal";
|
|
31
27
|
import { RemoveScroll } from "@tamagui/remove-scroll";
|
|
28
|
+
import { Sheet, SheetController } from "@tamagui/sheet";
|
|
32
29
|
import { YStack } from "@tamagui/stacks";
|
|
33
30
|
import { useControllableState } from "@tamagui/use-controllable-state";
|
|
34
31
|
import * as React from "react";
|
|
32
|
+
import { useDismiss, useFloating, useFocus, useInteractions, useRole } from "./floating";
|
|
35
33
|
const POPOVER_NAME = "Popover";
|
|
36
34
|
const [createPopoverContext, createPopoverScopeInternal] = createContextScope(POPOVER_NAME, [
|
|
37
35
|
createPopperScope
|
|
@@ -133,6 +131,12 @@ const PopoverContentImpl = React.forwardRef((props, forwardedRef) => {
|
|
|
133
131
|
} = props;
|
|
134
132
|
const popperScope = usePopoverScope(__scopePopover);
|
|
135
133
|
const context = usePopoverInternalContext(CONTENT_NAME, popperScope.__scopePopover);
|
|
134
|
+
const showSheet = useShowPopoverSheet(context);
|
|
135
|
+
if (showSheet) {
|
|
136
|
+
return /* @__PURE__ */ React.createElement(PortalItem, {
|
|
137
|
+
hostName: `${context.scopeKey}SheetContents`
|
|
138
|
+
}, children);
|
|
139
|
+
}
|
|
136
140
|
return /* @__PURE__ */ React.createElement(AnimatePresence, null, !!context.open && /* @__PURE__ */ React.createElement(PopperContent, {
|
|
137
141
|
key: "popper-content",
|
|
138
142
|
"data-state": getState(context.open),
|
|
@@ -176,6 +180,14 @@ const PopoverArrow = React.forwardRef((props, forwardedRef) => {
|
|
|
176
180
|
});
|
|
177
181
|
});
|
|
178
182
|
PopoverArrow.displayName = ARROW_NAME;
|
|
183
|
+
const SHEET_CONTENTS_NAME = "PopoverSheetContents";
|
|
184
|
+
const PopoverSheetContents = ({ __scopePopover }) => {
|
|
185
|
+
const context = usePopoverInternalContext(SHEET_CONTENTS_NAME, __scopePopover);
|
|
186
|
+
return /* @__PURE__ */ React.createElement(PortalHost, {
|
|
187
|
+
name: `${context.scopeKey}SheetContents`
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
PopoverSheetContents.displayName = SHEET_CONTENTS_NAME;
|
|
179
191
|
const Popover = withStaticProperties((props) => {
|
|
180
192
|
const {
|
|
181
193
|
__scopePopover,
|
|
@@ -183,6 +195,7 @@ const Popover = withStaticProperties((props) => {
|
|
|
183
195
|
open: openProp,
|
|
184
196
|
defaultOpen,
|
|
185
197
|
onOpenChange,
|
|
198
|
+
sheetBreakpoint = false,
|
|
186
199
|
...restProps
|
|
187
200
|
} = props;
|
|
188
201
|
const popperScope = usePopoverScope(__scopePopover);
|
|
@@ -193,6 +206,7 @@ const Popover = withStaticProperties((props) => {
|
|
|
193
206
|
defaultProp: defaultOpen || false,
|
|
194
207
|
onChange: onOpenChange
|
|
195
208
|
});
|
|
209
|
+
const breakpointActive = useSheetBreakpointActive(sheetBreakpoint);
|
|
196
210
|
const useFloatingContext = React.useCallback((props2) => {
|
|
197
211
|
const floating = useFloating({
|
|
198
212
|
...props2,
|
|
@@ -200,16 +214,20 @@ const Popover = withStaticProperties((props) => {
|
|
|
200
214
|
onOpenChange: setOpen
|
|
201
215
|
});
|
|
202
216
|
const { getReferenceProps, getFloatingProps } = useInteractions([
|
|
203
|
-
useFocus(floating.context
|
|
217
|
+
useFocus(floating.context, {
|
|
218
|
+
enabled: !breakpointActive
|
|
219
|
+
}),
|
|
204
220
|
useRole(floating.context, { role: "dialog" }),
|
|
205
|
-
useDismiss(floating.context
|
|
221
|
+
useDismiss(floating.context, {
|
|
222
|
+
enabled: !breakpointActive
|
|
223
|
+
})
|
|
206
224
|
]);
|
|
207
225
|
return {
|
|
208
226
|
...floating,
|
|
209
227
|
getReferenceProps,
|
|
210
228
|
getFloatingProps
|
|
211
229
|
};
|
|
212
|
-
}, [open, setOpen]);
|
|
230
|
+
}, [breakpointActive, open, setOpen]);
|
|
213
231
|
return /* @__PURE__ */ React.createElement(FloatingOverrideContext.Provider, {
|
|
214
232
|
value: useFloatingContext
|
|
215
233
|
}, /* @__PURE__ */ React.createElement(Popper, {
|
|
@@ -217,35 +235,71 @@ const Popover = withStaticProperties((props) => {
|
|
|
217
235
|
...restProps
|
|
218
236
|
}, /* @__PURE__ */ React.createElement(PopoverProviderInternal, {
|
|
219
237
|
scope: __scopePopover,
|
|
238
|
+
scopeKey: __scopePopover ? Object.keys(__scopePopover)[0] : "",
|
|
239
|
+
sheetBreakpoint,
|
|
220
240
|
contentId: useId(),
|
|
221
241
|
triggerRef,
|
|
222
242
|
open,
|
|
223
243
|
onOpenChange: setOpen,
|
|
224
244
|
onOpenToggle: useEvent(() => {
|
|
225
|
-
console.log("
|
|
245
|
+
console.log("wtf");
|
|
246
|
+
if (open && breakpointActive) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
226
249
|
setOpen(!open);
|
|
227
250
|
}),
|
|
228
251
|
hasCustomAnchor,
|
|
229
252
|
onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),
|
|
230
253
|
onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), [])
|
|
231
|
-
},
|
|
254
|
+
}, /* @__PURE__ */ React.createElement(PopoverSheetController, {
|
|
255
|
+
onChangeOpen: setOpen,
|
|
256
|
+
__scopePopover
|
|
257
|
+
}, children))));
|
|
232
258
|
}, {
|
|
233
259
|
Anchor: PopoverAnchor,
|
|
234
260
|
Arrow: PopoverArrow,
|
|
235
261
|
Trigger: PopoverTrigger,
|
|
236
262
|
Content: PopoverContent,
|
|
237
|
-
Close: PopoverClose
|
|
263
|
+
Close: PopoverClose,
|
|
264
|
+
SheetContents: PopoverSheetContents,
|
|
265
|
+
Sheet
|
|
238
266
|
});
|
|
239
267
|
Popover.displayName = POPOVER_NAME;
|
|
240
268
|
function getState(open) {
|
|
241
269
|
return open ? "open" : "closed";
|
|
242
270
|
}
|
|
271
|
+
const PopoverSheetController = (props) => {
|
|
272
|
+
const context = usePopoverInternalContext("PopoverSheetController", props.__scopePopover);
|
|
273
|
+
const showSheet = useShowPopoverSheet(context);
|
|
274
|
+
const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
|
|
275
|
+
const getShowSheet = useGet(showSheet);
|
|
276
|
+
return /* @__PURE__ */ React.createElement(SheetController, {
|
|
277
|
+
onChangeOpen: (val) => {
|
|
278
|
+
if (getShowSheet()) {
|
|
279
|
+
props.onChangeOpen(val);
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
open: context.open,
|
|
283
|
+
hidden: breakpointActive === false
|
|
284
|
+
}, props.children);
|
|
285
|
+
};
|
|
286
|
+
const useSheetBreakpointActive = (breakpoint) => {
|
|
287
|
+
const media = useMedia();
|
|
288
|
+
return breakpoint ? media[breakpoint] : false;
|
|
289
|
+
};
|
|
290
|
+
const useShowPopoverSheet = (context) => {
|
|
291
|
+
if (!isWeb)
|
|
292
|
+
return true;
|
|
293
|
+
const breakpointActive = useSheetBreakpointActive(context.sheetBreakpoint);
|
|
294
|
+
return context.open === false ? false : breakpointActive;
|
|
295
|
+
};
|
|
243
296
|
export {
|
|
244
297
|
Popover,
|
|
245
298
|
PopoverAnchor,
|
|
246
299
|
PopoverArrow,
|
|
247
300
|
PopoverClose,
|
|
248
301
|
PopoverContent,
|
|
302
|
+
PopoverSheetContents,
|
|
249
303
|
PopoverTrigger,
|
|
250
304
|
__PopoverProviderInternal,
|
|
251
305
|
createPopoverScope,
|