@yahoo/uds-mobile 2.17.0 → 2.19.0
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/bin/generateTheme.mjs +7 -2
- package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +4 -0
- package/dist/components/Pagination/Pagination.cjs +75 -0
- package/dist/components/Pagination/Pagination.d.cts +40 -0
- package/dist/components/Pagination/Pagination.d.cts.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +40 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.js +75 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/PaginationEllipsis.cjs +64 -0
- package/dist/components/Pagination/PaginationEllipsis.d.cts +21 -0
- package/dist/components/Pagination/PaginationEllipsis.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationEllipsis.d.ts +21 -0
- package/dist/components/Pagination/PaginationEllipsis.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationEllipsis.js +64 -0
- package/dist/components/Pagination/PaginationEllipsis.js.map +1 -0
- package/dist/components/Pagination/PaginationItem.cjs +68 -0
- package/dist/components/Pagination/PaginationItem.d.cts +24 -0
- package/dist/components/Pagination/PaginationItem.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationItem.d.ts +24 -0
- package/dist/components/Pagination/PaginationItem.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationItem.js +68 -0
- package/dist/components/Pagination/PaginationItem.js.map +1 -0
- package/dist/components/Pagination/PaginationLink.cjs +68 -0
- package/dist/components/Pagination/PaginationLink.d.cts +25 -0
- package/dist/components/Pagination/PaginationLink.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationLink.d.ts +25 -0
- package/dist/components/Pagination/PaginationLink.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationLink.js +68 -0
- package/dist/components/Pagination/PaginationLink.js.map +1 -0
- package/dist/components/Pagination/PaginationNext.cjs +72 -0
- package/dist/components/Pagination/PaginationNext.d.cts +24 -0
- package/dist/components/Pagination/PaginationNext.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationNext.d.ts +24 -0
- package/dist/components/Pagination/PaginationNext.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationNext.js +72 -0
- package/dist/components/Pagination/PaginationNext.js.map +1 -0
- package/dist/components/Pagination/PaginationNumbers.cjs +50 -0
- package/dist/components/Pagination/PaginationNumbers.d.cts +23 -0
- package/dist/components/Pagination/PaginationNumbers.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationNumbers.d.ts +23 -0
- package/dist/components/Pagination/PaginationNumbers.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationNumbers.js +50 -0
- package/dist/components/Pagination/PaginationNumbers.js.map +1 -0
- package/dist/components/Pagination/PaginationPrev.cjs +72 -0
- package/dist/components/Pagination/PaginationPrev.d.cts +24 -0
- package/dist/components/Pagination/PaginationPrev.d.cts.map +1 -0
- package/dist/components/Pagination/PaginationPrev.d.ts +24 -0
- package/dist/components/Pagination/PaginationPrev.d.ts.map +1 -0
- package/dist/components/Pagination/PaginationPrev.js +72 -0
- package/dist/components/Pagination/PaginationPrev.js.map +1 -0
- package/dist/components/Pagination/computeVisiblePages.cjs +21 -0
- package/dist/components/Pagination/computeVisiblePages.d.cts +19 -0
- package/dist/components/Pagination/computeVisiblePages.d.cts.map +1 -0
- package/dist/components/Pagination/computeVisiblePages.d.ts +19 -0
- package/dist/components/Pagination/computeVisiblePages.d.ts.map +1 -0
- package/dist/components/Pagination/computeVisiblePages.js +22 -0
- package/dist/components/Pagination/computeVisiblePages.js.map +1 -0
- package/dist/components/Pagination/ellipsisDefault.cjs +28 -0
- package/dist/components/Pagination/ellipsisDefault.d.cts +11 -0
- package/dist/components/Pagination/ellipsisDefault.d.cts.map +1 -0
- package/dist/components/Pagination/ellipsisDefault.d.ts +11 -0
- package/dist/components/Pagination/ellipsisDefault.d.ts.map +1 -0
- package/dist/components/Pagination/ellipsisDefault.js +29 -0
- package/dist/components/Pagination/ellipsisDefault.js.map +1 -0
- package/dist/components/Pagination/ellipsisNone.cjs +24 -0
- package/dist/components/Pagination/ellipsisNone.d.cts +11 -0
- package/dist/components/Pagination/ellipsisNone.d.cts.map +1 -0
- package/dist/components/Pagination/ellipsisNone.d.ts +11 -0
- package/dist/components/Pagination/ellipsisNone.d.ts.map +1 -0
- package/dist/components/Pagination/ellipsisNone.js +25 -0
- package/dist/components/Pagination/ellipsisNone.js.map +1 -0
- package/dist/components/Pagination/index.cjs +18 -0
- package/dist/components/Pagination/index.d.cts +10 -0
- package/dist/components/Pagination/index.d.ts +10 -0
- package/dist/components/Pagination/index.js +10 -0
- package/dist/components/Pagination/paginationContext.cjs +42 -0
- package/dist/components/Pagination/paginationContext.d.cts +34 -0
- package/dist/components/Pagination/paginationContext.d.cts.map +1 -0
- package/dist/components/Pagination/paginationContext.d.ts +34 -0
- package/dist/components/Pagination/paginationContext.d.ts.map +1 -0
- package/dist/components/Pagination/paginationContext.js +38 -0
- package/dist/components/Pagination/paginationContext.js.map +1 -0
- package/dist/components/Pagination/paginationDefaultComponents.cjs +68 -0
- package/dist/components/Pagination/paginationDefaultComponents.d.cts +17 -0
- package/dist/components/Pagination/paginationDefaultComponents.d.cts.map +1 -0
- package/dist/components/Pagination/paginationDefaultComponents.d.ts +17 -0
- package/dist/components/Pagination/paginationDefaultComponents.d.ts.map +1 -0
- package/dist/components/Pagination/paginationDefaultComponents.js +69 -0
- package/dist/components/Pagination/paginationDefaultComponents.js.map +1 -0
- package/dist/components/Pagination/paginationTheme.cjs +67 -0
- package/dist/components/Pagination/paginationTheme.d.cts +28 -0
- package/dist/components/Pagination/paginationTheme.d.cts.map +1 -0
- package/dist/components/Pagination/paginationTheme.d.ts +28 -0
- package/dist/components/Pagination/paginationTheme.d.ts.map +1 -0
- package/dist/components/Pagination/paginationTheme.js +62 -0
- package/dist/components/Pagination/paginationTheme.js.map +1 -0
- package/dist/components/Pagination/range.cjs +10 -0
- package/dist/components/Pagination/range.d.cts +6 -0
- package/dist/components/Pagination/range.d.cts.map +1 -0
- package/dist/components/Pagination/range.d.ts +6 -0
- package/dist/components/Pagination/range.d.ts.map +1 -0
- package/dist/components/Pagination/range.js +11 -0
- package/dist/components/Pagination/range.js.map +1 -0
- package/dist/components/Pagination/usePaginationControlStyles.cjs +78 -0
- package/dist/components/Pagination/usePaginationControlStyles.d.cts +26 -0
- package/dist/components/Pagination/usePaginationControlStyles.d.cts.map +1 -0
- package/dist/components/Pagination/usePaginationControlStyles.d.ts +26 -0
- package/dist/components/Pagination/usePaginationControlStyles.d.ts.map +1 -0
- package/dist/components/Pagination/usePaginationControlStyles.js +78 -0
- package/dist/components/Pagination/usePaginationControlStyles.js.map +1 -0
- package/dist/components/Popover/Popover.cjs +92 -0
- package/dist/components/Popover/Popover.d.cts +26 -0
- package/dist/components/Popover/Popover.d.cts.map +1 -0
- package/dist/components/Popover/Popover.d.ts +26 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/Popover.js +92 -0
- package/dist/components/Popover/Popover.js.map +1 -0
- package/dist/components/Popover/PopoverContent.cjs +124 -0
- package/dist/components/Popover/PopoverContent.d.cts +15 -0
- package/dist/components/Popover/PopoverContent.d.cts.map +1 -0
- package/dist/components/Popover/PopoverContent.d.ts +15 -0
- package/dist/components/Popover/PopoverContent.d.ts.map +1 -0
- package/dist/components/Popover/PopoverContent.js +124 -0
- package/dist/components/Popover/PopoverContent.js.map +1 -0
- package/dist/components/Popover/PopoverContext.cjs +14 -0
- package/dist/components/Popover/PopoverContext.d.cts +10 -0
- package/dist/components/Popover/PopoverContext.d.cts.map +1 -0
- package/dist/components/Popover/PopoverContext.d.ts +10 -0
- package/dist/components/Popover/PopoverContext.d.ts.map +1 -0
- package/dist/components/Popover/PopoverContext.js +13 -0
- package/dist/components/Popover/PopoverContext.js.map +1 -0
- package/dist/components/Popover/PopoverDescription.cjs +23 -0
- package/dist/components/Popover/PopoverDescription.d.cts +15 -0
- package/dist/components/Popover/PopoverDescription.d.cts.map +1 -0
- package/dist/components/Popover/PopoverDescription.d.ts +15 -0
- package/dist/components/Popover/PopoverDescription.d.ts.map +1 -0
- package/dist/components/Popover/PopoverDescription.js +23 -0
- package/dist/components/Popover/PopoverDescription.js.map +1 -0
- package/dist/components/Popover/PopoverDismiss.cjs +22 -0
- package/dist/components/Popover/PopoverDismiss.d.cts +15 -0
- package/dist/components/Popover/PopoverDismiss.d.cts.map +1 -0
- package/dist/components/Popover/PopoverDismiss.d.ts +15 -0
- package/dist/components/Popover/PopoverDismiss.d.ts.map +1 -0
- package/dist/components/Popover/PopoverDismiss.js +22 -0
- package/dist/components/Popover/PopoverDismiss.js.map +1 -0
- package/dist/components/Popover/PopoverFrame.cjs +56 -0
- package/dist/components/Popover/PopoverFrame.d.cts +23 -0
- package/dist/components/Popover/PopoverFrame.d.cts.map +1 -0
- package/dist/components/Popover/PopoverFrame.d.ts +23 -0
- package/dist/components/Popover/PopoverFrame.d.ts.map +1 -0
- package/dist/components/Popover/PopoverFrame.js +55 -0
- package/dist/components/Popover/PopoverFrame.js.map +1 -0
- package/dist/components/Popover/PopoverPortalLayer.cjs +45 -0
- package/dist/components/Popover/PopoverPortalLayer.d.cts +15 -0
- package/dist/components/Popover/PopoverPortalLayer.d.cts.map +1 -0
- package/dist/components/Popover/PopoverPortalLayer.d.ts +15 -0
- package/dist/components/Popover/PopoverPortalLayer.d.ts.map +1 -0
- package/dist/components/Popover/PopoverPortalLayer.js +45 -0
- package/dist/components/Popover/PopoverPortalLayer.js.map +1 -0
- package/dist/components/Popover/PopoverSurface.cjs +228 -0
- package/dist/components/Popover/PopoverSurface.d.cts +26 -0
- package/dist/components/Popover/PopoverSurface.d.cts.map +1 -0
- package/dist/components/Popover/PopoverSurface.d.ts +26 -0
- package/dist/components/Popover/PopoverSurface.d.ts.map +1 -0
- package/dist/components/Popover/PopoverSurface.js +227 -0
- package/dist/components/Popover/PopoverSurface.js.map +1 -0
- package/dist/components/Popover/PopoverTitle.cjs +23 -0
- package/dist/components/Popover/PopoverTitle.d.cts +15 -0
- package/dist/components/Popover/PopoverTitle.d.cts.map +1 -0
- package/dist/components/Popover/PopoverTitle.d.ts +15 -0
- package/dist/components/Popover/PopoverTitle.d.ts.map +1 -0
- package/dist/components/Popover/PopoverTitle.js +23 -0
- package/dist/components/Popover/PopoverTitle.js.map +1 -0
- package/dist/components/Popover/PopoverTrigger.cjs +88 -0
- package/dist/components/Popover/PopoverTrigger.d.cts +15 -0
- package/dist/components/Popover/PopoverTrigger.d.cts.map +1 -0
- package/dist/components/Popover/PopoverTrigger.d.ts +15 -0
- package/dist/components/Popover/PopoverTrigger.d.ts.map +1 -0
- package/dist/components/Popover/PopoverTrigger.js +88 -0
- package/dist/components/Popover/PopoverTrigger.js.map +1 -0
- package/dist/components/Popover/index.cjs +14 -0
- package/dist/components/Popover/index.d.cts +9 -0
- package/dist/components/Popover/index.d.ts +9 -0
- package/dist/components/Popover/index.js +8 -0
- package/dist/components/Popover/popoverFrameGeometry.cjs +177 -0
- package/dist/components/Popover/popoverFrameGeometry.d.cts +48 -0
- package/dist/components/Popover/popoverFrameGeometry.d.cts.map +1 -0
- package/dist/components/Popover/popoverFrameGeometry.d.ts +48 -0
- package/dist/components/Popover/popoverFrameGeometry.d.ts.map +1 -0
- package/dist/components/Popover/popoverFrameGeometry.js +177 -0
- package/dist/components/Popover/popoverFrameGeometry.js.map +1 -0
- package/dist/components/Popover/popoverLayer.cjs +16 -0
- package/dist/components/Popover/popoverLayer.d.cts +8 -0
- package/dist/components/Popover/popoverLayer.d.cts.map +1 -0
- package/dist/components/Popover/popoverLayer.d.ts +8 -0
- package/dist/components/Popover/popoverLayer.d.ts.map +1 -0
- package/dist/components/Popover/popoverLayer.js +16 -0
- package/dist/components/Popover/popoverLayer.js.map +1 -0
- package/dist/components/Popover/types.cjs +1 -0
- package/dist/components/Popover/types.d.cts +170 -0
- package/dist/components/Popover/types.d.cts.map +1 -0
- package/dist/components/Popover/types.d.ts +170 -0
- package/dist/components/Popover/types.d.ts.map +1 -0
- package/dist/components/Popover/types.js +1 -0
- package/dist/components/Toast/ToastProvider.cjs +1 -1
- package/dist/components/Toast/ToastProvider.js +1 -1
- package/dist/components/internal/Overlay/index.cjs +4 -0
- package/dist/components/internal/Overlay/index.d.cts +4 -2
- package/dist/components/internal/Overlay/index.d.ts +4 -2
- package/dist/components/internal/Overlay/index.js +3 -1
- package/dist/components/internal/Overlay/types.d.cts +47 -1
- package/dist/components/internal/Overlay/types.d.cts.map +1 -1
- package/dist/components/internal/Overlay/types.d.ts +47 -1
- package/dist/components/internal/Overlay/types.d.ts.map +1 -1
- package/dist/components/internal/Overlay/useAnchoredPosition.cjs +225 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.d.cts +22 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.d.cts.map +1 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.d.ts +22 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.d.ts.map +1 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.js +225 -0
- package/dist/components/internal/Overlay/useAnchoredPosition.js.map +1 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.cjs +22 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.d.cts +12 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.d.cts.map +1 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.d.ts +12 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.d.ts.map +1 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.js +22 -0
- package/dist/components/internal/Overlay/useOverlayDismiss.js.map +1 -0
- package/dist/jest/bun-test-guard.cjs +8 -0
- package/dist/jest/bun-test-guard.d.cts +2 -0
- package/dist/jest/bun-test-guard.d.ts +2 -0
- package/dist/jest/bun-test-guard.js +10 -0
- package/dist/jest/bun-test-guard.js.map +1 -0
- package/dist/jest/mocks/react-native.cjs +14 -0
- package/dist/jest/mocks/react-native.d.cts +29 -1
- package/dist/jest/mocks/react-native.d.cts.map +1 -1
- package/dist/jest/mocks/react-native.d.ts +29 -1
- package/dist/jest/mocks/react-native.d.ts.map +1 -1
- package/dist/jest/mocks/react-native.js +13 -1
- package/dist/jest/mocks/react-native.js.map +1 -1
- package/dist/jest/mocks/styles.cjs +83 -0
- package/dist/jest/mocks/styles.d.cts +6 -2
- package/dist/jest/mocks/styles.d.cts.map +1 -1
- package/dist/jest/mocks/styles.d.ts +6 -2
- package/dist/jest/mocks/styles.d.ts.map +1 -1
- package/dist/jest/mocks/styles.js +80 -1
- package/dist/jest/mocks/styles.js.map +1 -1
- package/dist/jest/setup.cjs +46 -3
- package/dist/jest/setup.d.cts.map +1 -1
- package/dist/jest/setup.d.ts.map +1 -1
- package/dist/jest/setup.js +46 -3
- package/dist/jest/setup.js.map +1 -1
- package/dist/types/dist/index.d.cts +83 -1
- package/dist/types/dist/index.d.cts.map +1 -1
- package/dist/types/dist/index.d.ts +83 -1
- package/dist/types/dist/index.d.ts.map +1 -1
- package/generated/styles.cjs +81 -0
- package/generated/styles.d.ts +42 -1
- package/generated/styles.mjs +81 -0
- package/generated/unistyles.d.ts +82 -0
- package/package.json +21 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import * as _$react from "react";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Popover/PopoverPortalLayer.d.ts
|
|
6
|
+
interface PopoverPortalLayerProps {
|
|
7
|
+
children: (dismiss: () => void) => ReactNode;
|
|
8
|
+
dismissible: boolean;
|
|
9
|
+
onDismiss: () => void;
|
|
10
|
+
open: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare const PopoverPortalLayer: _$react.NamedExoticComponent<PopoverPortalLayerProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PopoverPortalLayer };
|
|
15
|
+
//# sourceMappingURL=PopoverPortalLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverPortalLayer.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverPortalLayer.tsx"],"mappings":";;;;;UAOU,uBAAA;EACR,QAAA,GAAW,OAAA,iBAAwB,SAAA;EACnC,WAAA;EACA,SAAA;EACA,IAAA;AAAA;AAAA,cAKI,kBAAA,EAAkB,OAAA,CAAA,oBAAA,CAAA,uBAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { OverlayPortal } from "../internal/Overlay/OverlayPortal.js";
|
|
3
|
+
import { useOverlayDismiss } from "../internal/Overlay/useOverlayDismiss.js";
|
|
4
|
+
import { memo, useCallback, useMemo } from "react";
|
|
5
|
+
import { Pressable, StyleSheet, View } from "react-native";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { Gesture, GestureDetector } from "react-native-gesture-handler";
|
|
8
|
+
//#region src/components/Popover/PopoverPortalLayer.tsx
|
|
9
|
+
const preventBackdropResponderTermination = () => false;
|
|
10
|
+
const PopoverPortalLayer = memo(function PopoverPortalLayer({ children, dismissible, onDismiss, open }) {
|
|
11
|
+
const dismiss = useOverlayDismiss({
|
|
12
|
+
open,
|
|
13
|
+
dismissible,
|
|
14
|
+
onDismiss
|
|
15
|
+
});
|
|
16
|
+
const blockScrollGesture = useMemo(() => Gesture.Pan().enabled(open).minDistance(1).onBegin(() => {
|
|
17
|
+
"worklet";
|
|
18
|
+
}), [open]);
|
|
19
|
+
const shouldCaptureBackdropResponder = useCallback(() => open, [open]);
|
|
20
|
+
return /* @__PURE__ */ jsx(OverlayPortal, { children: /* @__PURE__ */ jsx(GestureDetector, {
|
|
21
|
+
gesture: blockScrollGesture,
|
|
22
|
+
children: /* @__PURE__ */ jsxs(View, {
|
|
23
|
+
style: StyleSheet.absoluteFill,
|
|
24
|
+
pointerEvents: open ? "auto" : "none",
|
|
25
|
+
children: [/* @__PURE__ */ jsx(Pressable, {
|
|
26
|
+
accessible: false,
|
|
27
|
+
accessibilityElementsHidden: true,
|
|
28
|
+
importantForAccessibility: "no-hide-descendants",
|
|
29
|
+
pointerEvents: open ? "auto" : "none",
|
|
30
|
+
style: StyleSheet.absoluteFill,
|
|
31
|
+
onMoveShouldSetResponder: shouldCaptureBackdropResponder,
|
|
32
|
+
onMoveShouldSetResponderCapture: shouldCaptureBackdropResponder,
|
|
33
|
+
onPress: dismiss,
|
|
34
|
+
onResponderTerminationRequest: preventBackdropResponderTermination,
|
|
35
|
+
onStartShouldSetResponder: shouldCaptureBackdropResponder,
|
|
36
|
+
onStartShouldSetResponderCapture: shouldCaptureBackdropResponder
|
|
37
|
+
}), children(dismiss)]
|
|
38
|
+
})
|
|
39
|
+
}) });
|
|
40
|
+
});
|
|
41
|
+
PopoverPortalLayer.displayName = "PopoverPortalLayer";
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PopoverPortalLayer };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=PopoverPortalLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverPortalLayer.js","names":[],"sources":["../../../src/components/Popover/PopoverPortalLayer.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { memo, useCallback, useMemo } from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\nimport { Gesture, GestureDetector } from 'react-native-gesture-handler';\n\nimport { OverlayPortal, useOverlayDismiss } from '../internal/Overlay';\n\ninterface PopoverPortalLayerProps {\n children: (dismiss: () => void) => ReactNode;\n dismissible: boolean;\n onDismiss: () => void;\n open: boolean;\n}\n\nconst preventBackdropResponderTermination = () => false;\n\nconst PopoverPortalLayer = memo(function PopoverPortalLayer({\n children,\n dismissible,\n onDismiss,\n open,\n}: PopoverPortalLayerProps) {\n const dismiss = useOverlayDismiss({\n open,\n dismissible,\n onDismiss,\n });\n // Claim active pan gestures while the popover is open so scroll views underneath cannot move\n // away from the anchored trigger.\n const blockScrollGesture = useMemo(\n () =>\n Gesture.Pan()\n .enabled(open)\n .minDistance(1)\n .onBegin(() => {\n 'worklet';\n }),\n [open],\n );\n const shouldCaptureBackdropResponder = useCallback(() => open, [open]);\n\n return (\n <OverlayPortal>\n <GestureDetector gesture={blockScrollGesture}>\n <View style={StyleSheet.absoluteFill} pointerEvents={open ? 'auto' : 'none'}>\n <Pressable\n accessible={false}\n accessibilityElementsHidden\n importantForAccessibility=\"no-hide-descendants\"\n pointerEvents={open ? 'auto' : 'none'}\n style={StyleSheet.absoluteFill}\n onMoveShouldSetResponder={shouldCaptureBackdropResponder}\n onMoveShouldSetResponderCapture={shouldCaptureBackdropResponder}\n onPress={dismiss}\n onResponderTerminationRequest={preventBackdropResponderTermination}\n onStartShouldSetResponder={shouldCaptureBackdropResponder}\n onStartShouldSetResponderCapture={shouldCaptureBackdropResponder}\n />\n {children(dismiss)}\n </View>\n </GestureDetector>\n </OverlayPortal>\n );\n});\n\nPopoverPortalLayer.displayName = 'PopoverPortalLayer';\n\nexport { PopoverPortalLayer };\n"],"mappings":";;;;;;;;AAcA,MAAM,4CAA4C;AAElD,MAAM,qBAAqB,KAAK,SAAS,mBAAmB,EAC1D,UACA,aACA,WACA,QAC0B;CAC1B,MAAM,UAAU,kBAAkB;EAChC;EACA;EACA;EACD,CAAC;CAGF,MAAM,qBAAqB,cAEvB,QAAQ,KAAK,CACV,QAAQ,KAAK,CACb,YAAY,EAAE,CACd,cAAc;AACb;GACA,EACN,CAAC,KAAK,CACP;CACD,MAAM,iCAAiC,kBAAkB,MAAM,CAAC,KAAK,CAAC;CAEtE,OACE,oBAAC,eAAD,EAAA,UACE,oBAAC,iBAAD;EAAiB,SAAS;YACxB,qBAAC,MAAD;GAAM,OAAO,WAAW;GAAc,eAAe,OAAO,SAAS;aAArE,CACE,oBAAC,WAAD;IACE,YAAY;IACZ,6BAAA;IACA,2BAA0B;IAC1B,eAAe,OAAO,SAAS;IAC/B,OAAO,WAAW;IAClB,0BAA0B;IAC1B,iCAAiC;IACjC,SAAS;IACT,+BAA+B;IAC/B,2BAA2B;IAC3B,kCAAkC;IAClC,CAAA,EACD,SAAS,QAAQ,CACb;;EACS,CAAA,EACJ,CAAA;EAElB;AAEF,mBAAmB,cAAc"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
|
|
4
|
+
const require_components_Box = require("../Box.cjs");
|
|
5
|
+
const require_components_Icon = require("../Icon.cjs");
|
|
6
|
+
const require_components_Pressable = require("../Pressable.cjs");
|
|
7
|
+
const require_components_Popover_PopoverContext = require("./PopoverContext.cjs");
|
|
8
|
+
const require_components_Popover_PopoverFrame = require("./PopoverFrame.cjs");
|
|
9
|
+
let react = require("react");
|
|
10
|
+
let react_native = require("react-native");
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
+
let generated_styles = require("../../../generated/styles");
|
|
13
|
+
let react_native_reanimated = require("react-native-reanimated");
|
|
14
|
+
react_native_reanimated = require_runtime.__toESM(react_native_reanimated);
|
|
15
|
+
//#region src/components/Popover/PopoverSurface.tsx
|
|
16
|
+
const DEFAULT_CLOSE_ICON_SIZE = 16;
|
|
17
|
+
const DEFAULT_TRANSLUCENT_SURFACE_OPACITY = .5;
|
|
18
|
+
const AnimatedBox = react_native_reanimated.default.createAnimatedComponent(require_components_Box.Box);
|
|
19
|
+
function getColorWithOpacity(color, opacity) {
|
|
20
|
+
if (!color || opacity === void 0) return color;
|
|
21
|
+
const normalized = color.trim();
|
|
22
|
+
const rgbMatch = normalized.match(/^rgb\(([^)]+)\)$/i);
|
|
23
|
+
if (rgbMatch) {
|
|
24
|
+
const channels = rgbMatch[1].split(",").map((part) => part.trim());
|
|
25
|
+
if (channels.length === 3) return `rgba(${channels.join(", ")}, ${opacity})`;
|
|
26
|
+
}
|
|
27
|
+
const rgbaMatch = normalized.match(/^rgba\(([^)]+)\)$/i);
|
|
28
|
+
if (rgbaMatch) {
|
|
29
|
+
const channels = rgbaMatch[1].split(",").map((part) => part.trim());
|
|
30
|
+
if (channels.length === 4) return `rgba(${channels.slice(0, 3).join(", ")}, ${opacity})`;
|
|
31
|
+
}
|
|
32
|
+
const hexMatch = normalized.match(/^#([\da-f]{3}|[\da-f]{6})$/i);
|
|
33
|
+
if (hexMatch) {
|
|
34
|
+
const value = hexMatch[1];
|
|
35
|
+
const [r, g, b] = value.length === 3 ? value.split("").map((char) => parseInt(`${char}${char}`, 16)) : [
|
|
36
|
+
parseInt(value.slice(0, 2), 16),
|
|
37
|
+
parseInt(value.slice(2, 4), 16),
|
|
38
|
+
parseInt(value.slice(4, 6), 16)
|
|
39
|
+
];
|
|
40
|
+
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
41
|
+
}
|
|
42
|
+
return color;
|
|
43
|
+
}
|
|
44
|
+
function hasColorOpacity(color) {
|
|
45
|
+
if (!color) return false;
|
|
46
|
+
const normalized = color.trim().toLowerCase();
|
|
47
|
+
if (normalized === "transparent") return true;
|
|
48
|
+
const rgbaMatch = normalized.match(/^rgba\(([^)]+)\)$/);
|
|
49
|
+
if (rgbaMatch) {
|
|
50
|
+
const channels = rgbaMatch[1].split(",").map((part) => part.trim());
|
|
51
|
+
const alpha = Number(channels[3]);
|
|
52
|
+
return channels.length === 4 && Number.isFinite(alpha) && alpha < 1;
|
|
53
|
+
}
|
|
54
|
+
return /^#[\da-f]{4}$|^#[\da-f]{8}$/.test(normalized);
|
|
55
|
+
}
|
|
56
|
+
function getPositiveNumber(...values) {
|
|
57
|
+
return values.find((value) => typeof value === "number" && value > 0) ?? 0;
|
|
58
|
+
}
|
|
59
|
+
const PopoverSurface = (0, react.memo)(function PopoverSurface({ animatedStyle, arrowHeight, arrowStyle, arrowWidth, children, contentSize, contentStyle, maxHeight, maxWidth, onDismiss, positionedMaxWidth, resolvedPlacement, style, ...props }) {
|
|
60
|
+
const { blurTarget, closeAccessibilityLabel, hideArrow, hideDismissButton, open } = require_components_Popover_PopoverContext.usePopoverContext();
|
|
61
|
+
generated_styles.popoverStyles.useVariants({});
|
|
62
|
+
const svgBaseTokens = react_native.StyleSheet.flatten(generated_styles.popoverStyles.svgBase);
|
|
63
|
+
const svgBorderTokens = react_native.StyleSheet.flatten(generated_styles.popoverStyles.svgBorder);
|
|
64
|
+
const configuredBlurRadius = Math.max(svgBaseTokens.backgroundBlurRadius ?? 0, generated_styles.popoverStyles.blur.backgroundBlurRadius ?? 0);
|
|
65
|
+
const blurIntensity = configuredBlurRadius > 0 ? configuredBlurRadius : 0;
|
|
66
|
+
const showBlurBox = blurIntensity > 0 && (react_native.Platform.OS === "ios" || blurTarget != null);
|
|
67
|
+
const opaqueBackground = svgBaseTokens.backgroundColor ?? "#fff";
|
|
68
|
+
const fallbackOpacity = blurIntensity > 0 && !svgBaseTokens.backgroundBlurColor && !hasColorOpacity(opaqueBackground) ? DEFAULT_TRANSLUCENT_SURFACE_OPACITY : void 0;
|
|
69
|
+
const surfaceFillColor = getColorWithOpacity(opaqueBackground, svgBaseTokens.backgroundOpacity ?? fallbackOpacity) ?? opaqueBackground;
|
|
70
|
+
const surfaceBlurColor = svgBaseTokens.backgroundBlurColor ?? surfaceFillColor;
|
|
71
|
+
const surfaceFallbackColor = svgBaseTokens.backgroundBlurFallbackColor ?? surfaceBlurColor;
|
|
72
|
+
const surfaceBackgroundColor = showBlurBox ? "transparent" : blurIntensity > 0 ? surfaceFallbackColor : surfaceFillColor;
|
|
73
|
+
const surfaceBorderColor = svgBorderTokens?.borderColor ?? svgBaseTokens.borderColor;
|
|
74
|
+
const surfaceBorderWidth = svgBorderTokens?.borderWidth ?? svgBaseTokens.borderWidth ?? 0;
|
|
75
|
+
const surfaceBorderRadius = svgBaseTokens.borderRadius ?? 0;
|
|
76
|
+
const shouldDrawFrame = !hideArrow && contentSize.width > 0 && contentSize.height > 0;
|
|
77
|
+
const frameBorderInset = shouldDrawFrame ? surfaceBorderWidth : 0;
|
|
78
|
+
const contentWrapperTokens = react_native.StyleSheet.flatten(generated_styles.popoverStyles.contentWrapper);
|
|
79
|
+
const closeIconContainerTokens = react_native.StyleSheet.flatten(generated_styles.popoverStyles.closeIconContainer);
|
|
80
|
+
const closeIconTokens = react_native.StyleSheet.flatten(generated_styles.popoverStyles.closeIcon);
|
|
81
|
+
const contentWrapperPaddingHorizontal = contentWrapperTokens.paddingHorizontal ?? 0;
|
|
82
|
+
const contentWrapperPaddingVertical = contentWrapperTokens.paddingVertical ?? 0;
|
|
83
|
+
const closeButtonPaddingHorizontal = getPositiveNumber(closeIconContainerTokens.paddingHorizontal, closeIconContainerTokens.padding);
|
|
84
|
+
const closeButtonPaddingVertical = getPositiveNumber(closeIconContainerTokens.paddingVertical, closeIconContainerTokens.padding);
|
|
85
|
+
const closeIconSize = getPositiveNumber(generated_styles.popoverStyles.closeIcon.fontSize, closeIconTokens.fontSize, closeIconTokens.lineHeight, DEFAULT_CLOSE_ICON_SIZE);
|
|
86
|
+
const closeButtonSize = closeIconSize + closeButtonPaddingHorizontal * 2;
|
|
87
|
+
const closeButtonHeight = closeIconSize + closeButtonPaddingVertical * 2;
|
|
88
|
+
const surfaceStyle = (0, react.useMemo)(() => [{
|
|
89
|
+
borderRadius: surfaceBorderRadius,
|
|
90
|
+
maxWidth: maxWidth ?? positionedMaxWidth,
|
|
91
|
+
maxHeight,
|
|
92
|
+
overflow: "visible"
|
|
93
|
+
}, style], [
|
|
94
|
+
maxHeight,
|
|
95
|
+
maxWidth,
|
|
96
|
+
positionedMaxWidth,
|
|
97
|
+
style,
|
|
98
|
+
surfaceBorderRadius
|
|
99
|
+
]);
|
|
100
|
+
const shadowStyle = (0, react.useMemo)(() => [
|
|
101
|
+
generated_styles.popoverStyles.root,
|
|
102
|
+
internalStyles.shadow,
|
|
103
|
+
{ borderRadius: surfaceBorderRadius }
|
|
104
|
+
], [generated_styles.popoverStyles.root, surfaceBorderRadius]);
|
|
105
|
+
const visualSurfaceStyle = (0, react.useMemo)(() => [
|
|
106
|
+
generated_styles.popoverStyles.svgBase,
|
|
107
|
+
internalStyles.surface,
|
|
108
|
+
{
|
|
109
|
+
backgroundColor: surfaceBackgroundColor,
|
|
110
|
+
borderColor: surfaceBorderColor,
|
|
111
|
+
borderRadius: surfaceBorderRadius,
|
|
112
|
+
borderWidth: shouldDrawFrame ? 0 : surfaceBorderWidth,
|
|
113
|
+
maxWidth: maxWidth ?? positionedMaxWidth,
|
|
114
|
+
maxHeight,
|
|
115
|
+
padding: frameBorderInset
|
|
116
|
+
}
|
|
117
|
+
], [
|
|
118
|
+
frameBorderInset,
|
|
119
|
+
maxHeight,
|
|
120
|
+
maxWidth,
|
|
121
|
+
generated_styles.popoverStyles.svgBase,
|
|
122
|
+
positionedMaxWidth,
|
|
123
|
+
surfaceBackgroundColor,
|
|
124
|
+
surfaceBorderColor,
|
|
125
|
+
surfaceBorderRadius,
|
|
126
|
+
surfaceBorderWidth,
|
|
127
|
+
shouldDrawFrame
|
|
128
|
+
]);
|
|
129
|
+
const closeButtonStyle = (0, react.useMemo)(() => [
|
|
130
|
+
internalStyles.closeButton,
|
|
131
|
+
{
|
|
132
|
+
top: frameBorderInset + contentWrapperPaddingVertical,
|
|
133
|
+
right: frameBorderInset + contentWrapperPaddingHorizontal,
|
|
134
|
+
width: closeButtonSize,
|
|
135
|
+
height: closeButtonHeight
|
|
136
|
+
},
|
|
137
|
+
generated_styles.popoverStyles.closeIconContainer
|
|
138
|
+
], [
|
|
139
|
+
closeButtonHeight,
|
|
140
|
+
closeButtonSize,
|
|
141
|
+
contentWrapperPaddingHorizontal,
|
|
142
|
+
contentWrapperPaddingVertical,
|
|
143
|
+
frameBorderInset,
|
|
144
|
+
generated_styles.popoverStyles.closeIconContainer
|
|
145
|
+
]);
|
|
146
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(AnimatedBox, {
|
|
147
|
+
role: "dialog",
|
|
148
|
+
accessibilityViewIsModal: true,
|
|
149
|
+
pointerEvents: open ? "auto" : "none",
|
|
150
|
+
style: [
|
|
151
|
+
contentStyle,
|
|
152
|
+
...surfaceStyle,
|
|
153
|
+
animatedStyle
|
|
154
|
+
],
|
|
155
|
+
...props,
|
|
156
|
+
children: [
|
|
157
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
158
|
+
pointerEvents: "none",
|
|
159
|
+
style: shadowStyle,
|
|
160
|
+
testID: "uds-popover-shadow"
|
|
161
|
+
}),
|
|
162
|
+
shouldDrawFrame && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Popover_PopoverFrame.PopoverFrame, {
|
|
163
|
+
arrowHeight,
|
|
164
|
+
arrowStyle,
|
|
165
|
+
arrowWidth,
|
|
166
|
+
borderRadius: surfaceBorderRadius,
|
|
167
|
+
fill: surfaceFillColor,
|
|
168
|
+
placement: resolvedPlacement,
|
|
169
|
+
stroke: surfaceBorderColor,
|
|
170
|
+
strokeWidth: surfaceBorderWidth,
|
|
171
|
+
surfaceHeight: contentSize.height,
|
|
172
|
+
surfaceWidth: contentSize.width
|
|
173
|
+
}),
|
|
174
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
175
|
+
style: visualSurfaceStyle,
|
|
176
|
+
testID: "uds-popover-surface",
|
|
177
|
+
children: [
|
|
178
|
+
showBlurBox && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Box.Box, {
|
|
179
|
+
style: react_native.StyleSheet.absoluteFill,
|
|
180
|
+
blur: blurIntensity,
|
|
181
|
+
blurTarget
|
|
182
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
183
|
+
pointerEvents: "none",
|
|
184
|
+
style: [react_native.StyleSheet.absoluteFill, { backgroundColor: surfaceFillColor }]
|
|
185
|
+
})] }),
|
|
186
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.View, {
|
|
187
|
+
style: generated_styles.popoverStyles.contentWrapper,
|
|
188
|
+
testID: "uds-popover-content-wrapper",
|
|
189
|
+
children
|
|
190
|
+
}),
|
|
191
|
+
!hideDismissButton && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Pressable.Pressable, {
|
|
192
|
+
testID: "uds-popover-close",
|
|
193
|
+
accessibilityRole: "button",
|
|
194
|
+
accessibilityLabel: closeAccessibilityLabel,
|
|
195
|
+
onPress: onDismiss,
|
|
196
|
+
style: closeButtonStyle,
|
|
197
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Icon.Icon, {
|
|
198
|
+
name: "Cross",
|
|
199
|
+
variant: "outline",
|
|
200
|
+
style: generated_styles.popoverStyles.closeIcon,
|
|
201
|
+
dangerouslySetColor: generated_styles.popoverStyles.closeIcon.color,
|
|
202
|
+
dangerouslySetSize: generated_styles.popoverStyles.closeIcon.fontSize
|
|
203
|
+
})
|
|
204
|
+
})
|
|
205
|
+
]
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
const internalStyles = react_native.StyleSheet.create({
|
|
211
|
+
shadow: {
|
|
212
|
+
...react_native.StyleSheet.absoluteFillObject,
|
|
213
|
+
zIndex: 0
|
|
214
|
+
},
|
|
215
|
+
surface: {
|
|
216
|
+
overflow: "hidden",
|
|
217
|
+
position: "relative",
|
|
218
|
+
zIndex: 1
|
|
219
|
+
},
|
|
220
|
+
closeButton: {
|
|
221
|
+
position: "absolute",
|
|
222
|
+
alignItems: "center",
|
|
223
|
+
justifyContent: "center"
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
PopoverSurface.displayName = "PopoverSurface";
|
|
227
|
+
//#endregion
|
|
228
|
+
exports.PopoverSurface = PopoverSurface;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
import { AnchoredPlacement } from "../internal/Overlay/types.cjs";
|
|
3
|
+
import { PopoverContentProps } from "./types.cjs";
|
|
4
|
+
import * as _$react from "react";
|
|
5
|
+
import { StyleProp, ViewStyle } from "react-native";
|
|
6
|
+
|
|
7
|
+
//#region src/components/Popover/PopoverSurface.d.ts
|
|
8
|
+
interface PopoverSurfaceProps extends Omit<PopoverContentProps, 'children'> {
|
|
9
|
+
animatedStyle: StyleProp<ViewStyle>;
|
|
10
|
+
arrowHeight: number;
|
|
11
|
+
arrowStyle: StyleProp<ViewStyle>;
|
|
12
|
+
arrowWidth: number;
|
|
13
|
+
children?: PopoverContentProps['children'];
|
|
14
|
+
contentSize: {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
18
|
+
contentStyle: StyleProp<ViewStyle>;
|
|
19
|
+
onDismiss: () => void;
|
|
20
|
+
positionedMaxWidth: number;
|
|
21
|
+
resolvedPlacement: AnchoredPlacement;
|
|
22
|
+
}
|
|
23
|
+
declare const PopoverSurface: _$react.NamedExoticComponent<PopoverSurfaceProps>;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { PopoverSurface };
|
|
26
|
+
//# sourceMappingURL=PopoverSurface.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverSurface.d.cts","names":[],"sources":["../../../src/components/Popover/PopoverSurface.tsx"],"mappings":";;;;;;;UAkDU,mBAAA,SAA4B,IAAA,CAAK,mBAAA;EACzC,aAAA,EAAe,SAAA,CAAU,SAAA;EACzB,WAAA;EACA,UAAA,EAAY,SAAA,CAAU,SAAA;EACtB,UAAA;EACA,QAAA,GAAW,mBAAA;EACX,WAAA;IAAe,KAAA;IAAe,MAAA;EAAA;EAC9B,YAAA,EAAc,SAAA,CAAU,SAAA;EACxB,SAAA;EACA,kBAAA;EACA,iBAAA,EAAmB,iBAAA;AAAA;AAAA,cAoEf,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
import { AnchoredPlacement } from "../internal/Overlay/types.js";
|
|
3
|
+
import { PopoverContentProps } from "./types.js";
|
|
4
|
+
import * as _$react from "react";
|
|
5
|
+
import { StyleProp, ViewStyle } from "react-native";
|
|
6
|
+
|
|
7
|
+
//#region src/components/Popover/PopoverSurface.d.ts
|
|
8
|
+
interface PopoverSurfaceProps extends Omit<PopoverContentProps, 'children'> {
|
|
9
|
+
animatedStyle: StyleProp<ViewStyle>;
|
|
10
|
+
arrowHeight: number;
|
|
11
|
+
arrowStyle: StyleProp<ViewStyle>;
|
|
12
|
+
arrowWidth: number;
|
|
13
|
+
children?: PopoverContentProps['children'];
|
|
14
|
+
contentSize: {
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
};
|
|
18
|
+
contentStyle: StyleProp<ViewStyle>;
|
|
19
|
+
onDismiss: () => void;
|
|
20
|
+
positionedMaxWidth: number;
|
|
21
|
+
resolvedPlacement: AnchoredPlacement;
|
|
22
|
+
}
|
|
23
|
+
declare const PopoverSurface: _$react.NamedExoticComponent<PopoverSurfaceProps>;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { PopoverSurface };
|
|
26
|
+
//# sourceMappingURL=PopoverSurface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverSurface.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverSurface.tsx"],"mappings":";;;;;;;UAkDU,mBAAA,SAA4B,IAAA,CAAK,mBAAA;EACzC,aAAA,EAAe,SAAA,CAAU,SAAA;EACzB,WAAA;EACA,UAAA,EAAY,SAAA,CAAU,SAAA;EACtB,UAAA;EACA,QAAA,GAAW,mBAAA;EACX,WAAA;IAAe,KAAA;IAAe,MAAA;EAAA;EAC9B,YAAA,EAAc,SAAA,CAAU,SAAA;EACxB,SAAA;EACA,kBAAA;EACA,iBAAA,EAAmB,iBAAA;AAAA;AAAA,cAoEf,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { Box } from "../Box.js";
|
|
3
|
+
import { Icon } from "../Icon.js";
|
|
4
|
+
import { Pressable as Pressable$1 } from "../Pressable.js";
|
|
5
|
+
import { usePopoverContext } from "./PopoverContext.js";
|
|
6
|
+
import { PopoverFrame } from "./PopoverFrame.js";
|
|
7
|
+
import { memo, useMemo } from "react";
|
|
8
|
+
import { Platform, StyleSheet, View } from "react-native";
|
|
9
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { popoverStyles } from "../../../generated/styles";
|
|
11
|
+
import Animated from "react-native-reanimated";
|
|
12
|
+
//#region src/components/Popover/PopoverSurface.tsx
|
|
13
|
+
const DEFAULT_CLOSE_ICON_SIZE = 16;
|
|
14
|
+
const DEFAULT_TRANSLUCENT_SURFACE_OPACITY = .5;
|
|
15
|
+
const AnimatedBox = Animated.createAnimatedComponent(Box);
|
|
16
|
+
function getColorWithOpacity(color, opacity) {
|
|
17
|
+
if (!color || opacity === void 0) return color;
|
|
18
|
+
const normalized = color.trim();
|
|
19
|
+
const rgbMatch = normalized.match(/^rgb\(([^)]+)\)$/i);
|
|
20
|
+
if (rgbMatch) {
|
|
21
|
+
const channels = rgbMatch[1].split(",").map((part) => part.trim());
|
|
22
|
+
if (channels.length === 3) return `rgba(${channels.join(", ")}, ${opacity})`;
|
|
23
|
+
}
|
|
24
|
+
const rgbaMatch = normalized.match(/^rgba\(([^)]+)\)$/i);
|
|
25
|
+
if (rgbaMatch) {
|
|
26
|
+
const channels = rgbaMatch[1].split(",").map((part) => part.trim());
|
|
27
|
+
if (channels.length === 4) return `rgba(${channels.slice(0, 3).join(", ")}, ${opacity})`;
|
|
28
|
+
}
|
|
29
|
+
const hexMatch = normalized.match(/^#([\da-f]{3}|[\da-f]{6})$/i);
|
|
30
|
+
if (hexMatch) {
|
|
31
|
+
const value = hexMatch[1];
|
|
32
|
+
const [r, g, b] = value.length === 3 ? value.split("").map((char) => parseInt(`${char}${char}`, 16)) : [
|
|
33
|
+
parseInt(value.slice(0, 2), 16),
|
|
34
|
+
parseInt(value.slice(2, 4), 16),
|
|
35
|
+
parseInt(value.slice(4, 6), 16)
|
|
36
|
+
];
|
|
37
|
+
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
38
|
+
}
|
|
39
|
+
return color;
|
|
40
|
+
}
|
|
41
|
+
function hasColorOpacity(color) {
|
|
42
|
+
if (!color) return false;
|
|
43
|
+
const normalized = color.trim().toLowerCase();
|
|
44
|
+
if (normalized === "transparent") return true;
|
|
45
|
+
const rgbaMatch = normalized.match(/^rgba\(([^)]+)\)$/);
|
|
46
|
+
if (rgbaMatch) {
|
|
47
|
+
const channels = rgbaMatch[1].split(",").map((part) => part.trim());
|
|
48
|
+
const alpha = Number(channels[3]);
|
|
49
|
+
return channels.length === 4 && Number.isFinite(alpha) && alpha < 1;
|
|
50
|
+
}
|
|
51
|
+
return /^#[\da-f]{4}$|^#[\da-f]{8}$/.test(normalized);
|
|
52
|
+
}
|
|
53
|
+
function getPositiveNumber(...values) {
|
|
54
|
+
return values.find((value) => typeof value === "number" && value > 0) ?? 0;
|
|
55
|
+
}
|
|
56
|
+
const PopoverSurface = memo(function PopoverSurface({ animatedStyle, arrowHeight, arrowStyle, arrowWidth, children, contentSize, contentStyle, maxHeight, maxWidth, onDismiss, positionedMaxWidth, resolvedPlacement, style, ...props }) {
|
|
57
|
+
const { blurTarget, closeAccessibilityLabel, hideArrow, hideDismissButton, open } = usePopoverContext();
|
|
58
|
+
popoverStyles.useVariants({});
|
|
59
|
+
const svgBaseTokens = StyleSheet.flatten(popoverStyles.svgBase);
|
|
60
|
+
const svgBorderTokens = StyleSheet.flatten(popoverStyles.svgBorder);
|
|
61
|
+
const configuredBlurRadius = Math.max(svgBaseTokens.backgroundBlurRadius ?? 0, popoverStyles.blur.backgroundBlurRadius ?? 0);
|
|
62
|
+
const blurIntensity = configuredBlurRadius > 0 ? configuredBlurRadius : 0;
|
|
63
|
+
const showBlurBox = blurIntensity > 0 && (Platform.OS === "ios" || blurTarget != null);
|
|
64
|
+
const opaqueBackground = svgBaseTokens.backgroundColor ?? "#fff";
|
|
65
|
+
const fallbackOpacity = blurIntensity > 0 && !svgBaseTokens.backgroundBlurColor && !hasColorOpacity(opaqueBackground) ? DEFAULT_TRANSLUCENT_SURFACE_OPACITY : void 0;
|
|
66
|
+
const surfaceFillColor = getColorWithOpacity(opaqueBackground, svgBaseTokens.backgroundOpacity ?? fallbackOpacity) ?? opaqueBackground;
|
|
67
|
+
const surfaceBlurColor = svgBaseTokens.backgroundBlurColor ?? surfaceFillColor;
|
|
68
|
+
const surfaceFallbackColor = svgBaseTokens.backgroundBlurFallbackColor ?? surfaceBlurColor;
|
|
69
|
+
const surfaceBackgroundColor = showBlurBox ? "transparent" : blurIntensity > 0 ? surfaceFallbackColor : surfaceFillColor;
|
|
70
|
+
const surfaceBorderColor = svgBorderTokens?.borderColor ?? svgBaseTokens.borderColor;
|
|
71
|
+
const surfaceBorderWidth = svgBorderTokens?.borderWidth ?? svgBaseTokens.borderWidth ?? 0;
|
|
72
|
+
const surfaceBorderRadius = svgBaseTokens.borderRadius ?? 0;
|
|
73
|
+
const shouldDrawFrame = !hideArrow && contentSize.width > 0 && contentSize.height > 0;
|
|
74
|
+
const frameBorderInset = shouldDrawFrame ? surfaceBorderWidth : 0;
|
|
75
|
+
const contentWrapperTokens = StyleSheet.flatten(popoverStyles.contentWrapper);
|
|
76
|
+
const closeIconContainerTokens = StyleSheet.flatten(popoverStyles.closeIconContainer);
|
|
77
|
+
const closeIconTokens = StyleSheet.flatten(popoverStyles.closeIcon);
|
|
78
|
+
const contentWrapperPaddingHorizontal = contentWrapperTokens.paddingHorizontal ?? 0;
|
|
79
|
+
const contentWrapperPaddingVertical = contentWrapperTokens.paddingVertical ?? 0;
|
|
80
|
+
const closeButtonPaddingHorizontal = getPositiveNumber(closeIconContainerTokens.paddingHorizontal, closeIconContainerTokens.padding);
|
|
81
|
+
const closeButtonPaddingVertical = getPositiveNumber(closeIconContainerTokens.paddingVertical, closeIconContainerTokens.padding);
|
|
82
|
+
const closeIconSize = getPositiveNumber(popoverStyles.closeIcon.fontSize, closeIconTokens.fontSize, closeIconTokens.lineHeight, DEFAULT_CLOSE_ICON_SIZE);
|
|
83
|
+
const closeButtonSize = closeIconSize + closeButtonPaddingHorizontal * 2;
|
|
84
|
+
const closeButtonHeight = closeIconSize + closeButtonPaddingVertical * 2;
|
|
85
|
+
const surfaceStyle = useMemo(() => [{
|
|
86
|
+
borderRadius: surfaceBorderRadius,
|
|
87
|
+
maxWidth: maxWidth ?? positionedMaxWidth,
|
|
88
|
+
maxHeight,
|
|
89
|
+
overflow: "visible"
|
|
90
|
+
}, style], [
|
|
91
|
+
maxHeight,
|
|
92
|
+
maxWidth,
|
|
93
|
+
positionedMaxWidth,
|
|
94
|
+
style,
|
|
95
|
+
surfaceBorderRadius
|
|
96
|
+
]);
|
|
97
|
+
const shadowStyle = useMemo(() => [
|
|
98
|
+
popoverStyles.root,
|
|
99
|
+
internalStyles.shadow,
|
|
100
|
+
{ borderRadius: surfaceBorderRadius }
|
|
101
|
+
], [popoverStyles.root, surfaceBorderRadius]);
|
|
102
|
+
const visualSurfaceStyle = useMemo(() => [
|
|
103
|
+
popoverStyles.svgBase,
|
|
104
|
+
internalStyles.surface,
|
|
105
|
+
{
|
|
106
|
+
backgroundColor: surfaceBackgroundColor,
|
|
107
|
+
borderColor: surfaceBorderColor,
|
|
108
|
+
borderRadius: surfaceBorderRadius,
|
|
109
|
+
borderWidth: shouldDrawFrame ? 0 : surfaceBorderWidth,
|
|
110
|
+
maxWidth: maxWidth ?? positionedMaxWidth,
|
|
111
|
+
maxHeight,
|
|
112
|
+
padding: frameBorderInset
|
|
113
|
+
}
|
|
114
|
+
], [
|
|
115
|
+
frameBorderInset,
|
|
116
|
+
maxHeight,
|
|
117
|
+
maxWidth,
|
|
118
|
+
popoverStyles.svgBase,
|
|
119
|
+
positionedMaxWidth,
|
|
120
|
+
surfaceBackgroundColor,
|
|
121
|
+
surfaceBorderColor,
|
|
122
|
+
surfaceBorderRadius,
|
|
123
|
+
surfaceBorderWidth,
|
|
124
|
+
shouldDrawFrame
|
|
125
|
+
]);
|
|
126
|
+
const closeButtonStyle = useMemo(() => [
|
|
127
|
+
internalStyles.closeButton,
|
|
128
|
+
{
|
|
129
|
+
top: frameBorderInset + contentWrapperPaddingVertical,
|
|
130
|
+
right: frameBorderInset + contentWrapperPaddingHorizontal,
|
|
131
|
+
width: closeButtonSize,
|
|
132
|
+
height: closeButtonHeight
|
|
133
|
+
},
|
|
134
|
+
popoverStyles.closeIconContainer
|
|
135
|
+
], [
|
|
136
|
+
closeButtonHeight,
|
|
137
|
+
closeButtonSize,
|
|
138
|
+
contentWrapperPaddingHorizontal,
|
|
139
|
+
contentWrapperPaddingVertical,
|
|
140
|
+
frameBorderInset,
|
|
141
|
+
popoverStyles.closeIconContainer
|
|
142
|
+
]);
|
|
143
|
+
return /* @__PURE__ */ jsxs(AnimatedBox, {
|
|
144
|
+
role: "dialog",
|
|
145
|
+
accessibilityViewIsModal: true,
|
|
146
|
+
pointerEvents: open ? "auto" : "none",
|
|
147
|
+
style: [
|
|
148
|
+
contentStyle,
|
|
149
|
+
...surfaceStyle,
|
|
150
|
+
animatedStyle
|
|
151
|
+
],
|
|
152
|
+
...props,
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ jsx(View, {
|
|
155
|
+
pointerEvents: "none",
|
|
156
|
+
style: shadowStyle,
|
|
157
|
+
testID: "uds-popover-shadow"
|
|
158
|
+
}),
|
|
159
|
+
shouldDrawFrame && /* @__PURE__ */ jsx(PopoverFrame, {
|
|
160
|
+
arrowHeight,
|
|
161
|
+
arrowStyle,
|
|
162
|
+
arrowWidth,
|
|
163
|
+
borderRadius: surfaceBorderRadius,
|
|
164
|
+
fill: surfaceFillColor,
|
|
165
|
+
placement: resolvedPlacement,
|
|
166
|
+
stroke: surfaceBorderColor,
|
|
167
|
+
strokeWidth: surfaceBorderWidth,
|
|
168
|
+
surfaceHeight: contentSize.height,
|
|
169
|
+
surfaceWidth: contentSize.width
|
|
170
|
+
}),
|
|
171
|
+
/* @__PURE__ */ jsxs(View, {
|
|
172
|
+
style: visualSurfaceStyle,
|
|
173
|
+
testID: "uds-popover-surface",
|
|
174
|
+
children: [
|
|
175
|
+
showBlurBox && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Box, {
|
|
176
|
+
style: StyleSheet.absoluteFill,
|
|
177
|
+
blur: blurIntensity,
|
|
178
|
+
blurTarget
|
|
179
|
+
}), /* @__PURE__ */ jsx(View, {
|
|
180
|
+
pointerEvents: "none",
|
|
181
|
+
style: [StyleSheet.absoluteFill, { backgroundColor: surfaceFillColor }]
|
|
182
|
+
})] }),
|
|
183
|
+
/* @__PURE__ */ jsx(View, {
|
|
184
|
+
style: popoverStyles.contentWrapper,
|
|
185
|
+
testID: "uds-popover-content-wrapper",
|
|
186
|
+
children
|
|
187
|
+
}),
|
|
188
|
+
!hideDismissButton && /* @__PURE__ */ jsx(Pressable$1, {
|
|
189
|
+
testID: "uds-popover-close",
|
|
190
|
+
accessibilityRole: "button",
|
|
191
|
+
accessibilityLabel: closeAccessibilityLabel,
|
|
192
|
+
onPress: onDismiss,
|
|
193
|
+
style: closeButtonStyle,
|
|
194
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
195
|
+
name: "Cross",
|
|
196
|
+
variant: "outline",
|
|
197
|
+
style: popoverStyles.closeIcon,
|
|
198
|
+
dangerouslySetColor: popoverStyles.closeIcon.color,
|
|
199
|
+
dangerouslySetSize: popoverStyles.closeIcon.fontSize
|
|
200
|
+
})
|
|
201
|
+
})
|
|
202
|
+
]
|
|
203
|
+
})
|
|
204
|
+
]
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
const internalStyles = StyleSheet.create({
|
|
208
|
+
shadow: {
|
|
209
|
+
...StyleSheet.absoluteFillObject,
|
|
210
|
+
zIndex: 0
|
|
211
|
+
},
|
|
212
|
+
surface: {
|
|
213
|
+
overflow: "hidden",
|
|
214
|
+
position: "relative",
|
|
215
|
+
zIndex: 1
|
|
216
|
+
},
|
|
217
|
+
closeButton: {
|
|
218
|
+
position: "absolute",
|
|
219
|
+
alignItems: "center",
|
|
220
|
+
justifyContent: "center"
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
PopoverSurface.displayName = "PopoverSurface";
|
|
224
|
+
//#endregion
|
|
225
|
+
export { PopoverSurface };
|
|
226
|
+
|
|
227
|
+
//# sourceMappingURL=PopoverSurface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverSurface.js","names":["UDSPressable"],"sources":["../../../src/components/Popover/PopoverSurface.tsx"],"sourcesContent":["import { memo, useMemo } from 'react';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Platform, StyleSheet, View } from 'react-native';\nimport Animated from 'react-native-reanimated';\n\nimport { popoverStyles } from '../../../generated/styles';\nimport { Box } from '../Box';\nimport { Icon } from '../Icon';\nimport type { AnchoredPlacement } from '../internal/Overlay';\nimport { Pressable as UDSPressable } from '../Pressable';\nimport { usePopoverContext } from './PopoverContext';\nimport { PopoverFrame } from './PopoverFrame';\nimport type { PopoverContentProps } from './types';\n\nconst DEFAULT_CLOSE_ICON_SIZE = 16;\nconst DEFAULT_TRANSLUCENT_SURFACE_OPACITY = 0.5;\n\nconst AnimatedBox = Animated.createAnimatedComponent(Box);\n\ninterface PopoverSurfaceTokens {\n backgroundBlurColor?: string;\n backgroundBlurFallbackColor?: string;\n backgroundBlurRadius?: number;\n backgroundColor?: string;\n backgroundOpacity?: number;\n borderColor?: string;\n borderRadius?: number;\n borderWidth?: number;\n}\n\ninterface PopoverStylesWithSvgBorder {\n svgBorder?: unknown;\n}\n\ninterface PopoverContentWrapperTokens {\n paddingHorizontal?: number;\n paddingVertical?: number;\n}\n\ninterface PopoverCloseIconContainerTokens {\n padding?: number;\n paddingHorizontal?: number;\n paddingVertical?: number;\n}\n\ninterface PopoverCloseIconTokens {\n fontSize?: number;\n lineHeight?: number;\n}\n\ninterface PopoverSurfaceProps extends Omit<PopoverContentProps, 'children'> {\n animatedStyle: StyleProp<ViewStyle>;\n arrowHeight: number;\n arrowStyle: StyleProp<ViewStyle>;\n arrowWidth: number;\n children?: PopoverContentProps['children'];\n contentSize: { width: number; height: number };\n contentStyle: StyleProp<ViewStyle>;\n onDismiss: () => void;\n positionedMaxWidth: number;\n resolvedPlacement: AnchoredPlacement;\n}\n\nfunction getColorWithOpacity(color: string | undefined, opacity: number | undefined) {\n if (!color || opacity === undefined) {\n return color;\n }\n\n const normalized = color.trim();\n const rgbMatch = normalized.match(/^rgb\\(([^)]+)\\)$/i);\n if (rgbMatch) {\n const channels = rgbMatch[1].split(',').map((part) => part.trim());\n if (channels.length === 3) {\n return `rgba(${channels.join(', ')}, ${opacity})`;\n }\n }\n\n const rgbaMatch = normalized.match(/^rgba\\(([^)]+)\\)$/i);\n if (rgbaMatch) {\n const channels = rgbaMatch[1].split(',').map((part) => part.trim());\n if (channels.length === 4) {\n return `rgba(${channels.slice(0, 3).join(', ')}, ${opacity})`;\n }\n }\n\n const hexMatch = normalized.match(/^#([\\da-f]{3}|[\\da-f]{6})$/i);\n if (hexMatch) {\n const value = hexMatch[1];\n const [r, g, b] =\n value.length === 3\n ? value.split('').map((char) => parseInt(`${char}${char}`, 16))\n : [\n parseInt(value.slice(0, 2), 16),\n parseInt(value.slice(2, 4), 16),\n parseInt(value.slice(4, 6), 16),\n ];\n\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n\n return color;\n}\n\nfunction hasColorOpacity(color: string | undefined) {\n if (!color) {\n return false;\n }\n\n const normalized = color.trim().toLowerCase();\n if (normalized === 'transparent') {\n return true;\n }\n\n const rgbaMatch = normalized.match(/^rgba\\(([^)]+)\\)$/);\n if (rgbaMatch) {\n const channels = rgbaMatch[1].split(',').map((part) => part.trim());\n const alpha = Number(channels[3]);\n\n return channels.length === 4 && Number.isFinite(alpha) && alpha < 1;\n }\n\n return /^#[\\da-f]{4}$|^#[\\da-f]{8}$/.test(normalized);\n}\n\nfunction getPositiveNumber(...values: (number | undefined)[]) {\n return values.find((value) => typeof value === 'number' && value > 0) ?? 0;\n}\n\nconst PopoverSurface = memo(function PopoverSurface({\n animatedStyle,\n arrowHeight,\n arrowStyle,\n arrowWidth,\n children,\n contentSize,\n contentStyle,\n maxHeight,\n maxWidth,\n onDismiss,\n positionedMaxWidth,\n resolvedPlacement,\n style,\n ...props\n}: PopoverSurfaceProps) {\n const { blurTarget, closeAccessibilityLabel, hideArrow, hideDismissButton, open } =\n usePopoverContext();\n\n popoverStyles.useVariants({});\n\n const svgBaseTokens = StyleSheet.flatten(popoverStyles.svgBase) as PopoverSurfaceTokens;\n const svgBorderTokens = StyleSheet.flatten(\n (popoverStyles as typeof popoverStyles & PopoverStylesWithSvgBorder).svgBorder,\n ) as PopoverSurfaceTokens | undefined;\n const configuredBlurRadius = Math.max(\n svgBaseTokens.backgroundBlurRadius ?? 0,\n popoverStyles.blur.backgroundBlurRadius ?? 0,\n );\n const blurIntensity = configuredBlurRadius > 0 ? configuredBlurRadius : 0;\n const showBlurBox = blurIntensity > 0 && (Platform.OS === 'ios' || blurTarget != null);\n const opaqueBackground = svgBaseTokens.backgroundColor ?? '#fff';\n const fallbackOpacity =\n blurIntensity > 0 && !svgBaseTokens.backgroundBlurColor && !hasColorOpacity(opaqueBackground)\n ? DEFAULT_TRANSLUCENT_SURFACE_OPACITY\n : undefined;\n const surfaceFillColor =\n getColorWithOpacity(opaqueBackground, svgBaseTokens.backgroundOpacity ?? fallbackOpacity) ??\n opaqueBackground;\n const surfaceBlurColor = svgBaseTokens.backgroundBlurColor ?? surfaceFillColor;\n const surfaceFallbackColor = svgBaseTokens.backgroundBlurFallbackColor ?? surfaceBlurColor;\n const surfaceBackgroundColor = showBlurBox\n ? 'transparent'\n : blurIntensity > 0\n ? surfaceFallbackColor\n : surfaceFillColor;\n const surfaceBorderColor = svgBorderTokens?.borderColor ?? svgBaseTokens.borderColor;\n const surfaceBorderWidth = svgBorderTokens?.borderWidth ?? svgBaseTokens.borderWidth ?? 0;\n const surfaceBorderRadius = svgBaseTokens.borderRadius ?? 0;\n const shouldDrawFrame = !hideArrow && contentSize.width > 0 && contentSize.height > 0;\n // When the SVG frame draws the border, inset the visual surface by the same stroke width so\n // content and blur do not paint over the continuous surface-plus-arrow border.\n const frameBorderInset = shouldDrawFrame ? surfaceBorderWidth : 0;\n const contentWrapperTokens = StyleSheet.flatten(\n popoverStyles.contentWrapper,\n ) as PopoverContentWrapperTokens;\n const closeIconContainerTokens = StyleSheet.flatten(\n popoverStyles.closeIconContainer,\n ) as PopoverCloseIconContainerTokens;\n const closeIconTokens = StyleSheet.flatten(popoverStyles.closeIcon) as PopoverCloseIconTokens;\n const contentWrapperPaddingHorizontal = contentWrapperTokens.paddingHorizontal ?? 0;\n const contentWrapperPaddingVertical = contentWrapperTokens.paddingVertical ?? 0;\n const closeButtonPaddingHorizontal = getPositiveNumber(\n closeIconContainerTokens.paddingHorizontal,\n closeIconContainerTokens.padding,\n );\n const closeButtonPaddingVertical = getPositiveNumber(\n closeIconContainerTokens.paddingVertical,\n closeIconContainerTokens.padding,\n );\n const closeIconSize = getPositiveNumber(\n popoverStyles.closeIcon.fontSize,\n closeIconTokens.fontSize,\n closeIconTokens.lineHeight,\n DEFAULT_CLOSE_ICON_SIZE,\n );\n const closeButtonSize = closeIconSize + closeButtonPaddingHorizontal * 2;\n const closeButtonHeight = closeIconSize + closeButtonPaddingVertical * 2;\n\n const surfaceStyle = useMemo(\n () => [\n {\n borderRadius: surfaceBorderRadius,\n maxWidth: maxWidth ?? positionedMaxWidth,\n maxHeight,\n overflow: 'visible' as const,\n },\n style,\n ],\n [maxHeight, maxWidth, positionedMaxWidth, style, surfaceBorderRadius],\n );\n\n const shadowStyle = useMemo(\n () => [\n popoverStyles.root,\n internalStyles.shadow,\n {\n borderRadius: surfaceBorderRadius,\n },\n ],\n [popoverStyles.root, surfaceBorderRadius],\n );\n\n const visualSurfaceStyle = useMemo(\n () => [\n popoverStyles.svgBase,\n internalStyles.surface,\n {\n backgroundColor: surfaceBackgroundColor,\n borderColor: surfaceBorderColor,\n borderRadius: surfaceBorderRadius,\n borderWidth: shouldDrawFrame ? 0 : surfaceBorderWidth,\n maxWidth: maxWidth ?? positionedMaxWidth,\n maxHeight,\n padding: frameBorderInset,\n },\n ],\n [\n frameBorderInset,\n maxHeight,\n maxWidth,\n popoverStyles.svgBase,\n positionedMaxWidth,\n surfaceBackgroundColor,\n surfaceBorderColor,\n surfaceBorderRadius,\n surfaceBorderWidth,\n shouldDrawFrame,\n ],\n );\n\n const closeButtonStyle = useMemo(\n () => [\n internalStyles.closeButton,\n {\n top: frameBorderInset + contentWrapperPaddingVertical,\n right: frameBorderInset + contentWrapperPaddingHorizontal,\n width: closeButtonSize,\n height: closeButtonHeight,\n },\n popoverStyles.closeIconContainer,\n ],\n [\n closeButtonHeight,\n closeButtonSize,\n contentWrapperPaddingHorizontal,\n contentWrapperPaddingVertical,\n frameBorderInset,\n popoverStyles.closeIconContainer,\n ],\n );\n\n return (\n <AnimatedBox\n role=\"dialog\"\n accessibilityViewIsModal\n pointerEvents={open ? 'auto' : 'none'}\n style={[contentStyle, ...surfaceStyle, animatedStyle]}\n {...props}\n >\n <View pointerEvents=\"none\" style={shadowStyle} testID=\"uds-popover-shadow\" />\n {shouldDrawFrame && (\n <PopoverFrame\n arrowHeight={arrowHeight}\n arrowStyle={arrowStyle}\n arrowWidth={arrowWidth}\n borderRadius={surfaceBorderRadius}\n fill={surfaceFillColor}\n placement={resolvedPlacement}\n stroke={surfaceBorderColor}\n strokeWidth={surfaceBorderWidth}\n surfaceHeight={contentSize.height}\n surfaceWidth={contentSize.width}\n />\n )}\n <View style={visualSurfaceStyle} testID=\"uds-popover-surface\">\n {showBlurBox && (\n <>\n <Box style={StyleSheet.absoluteFill} blur={blurIntensity} blurTarget={blurTarget} />\n <View\n pointerEvents=\"none\"\n style={[StyleSheet.absoluteFill, { backgroundColor: surfaceFillColor }]}\n />\n </>\n )}\n <View style={popoverStyles.contentWrapper} testID=\"uds-popover-content-wrapper\">\n {children}\n </View>\n {!hideDismissButton && (\n <UDSPressable\n testID=\"uds-popover-close\"\n accessibilityRole=\"button\"\n accessibilityLabel={closeAccessibilityLabel}\n onPress={onDismiss}\n style={closeButtonStyle}\n >\n <Icon\n name=\"Cross\"\n variant=\"outline\"\n style={popoverStyles.closeIcon}\n dangerouslySetColor={popoverStyles.closeIcon.color}\n dangerouslySetSize={popoverStyles.closeIcon.fontSize}\n />\n </UDSPressable>\n )}\n </View>\n </AnimatedBox>\n );\n});\n\nconst internalStyles = StyleSheet.create({\n shadow: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 0,\n },\n surface: {\n overflow: 'hidden',\n position: 'relative',\n zIndex: 1,\n },\n closeButton: {\n position: 'absolute',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nPopoverSurface.displayName = 'PopoverSurface';\n\nexport { PopoverSurface };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
require("../../_virtual/_rolldown/runtime.cjs");
|
|
4
|
+
const require_components_Text = require("../Text.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
//#region src/components/Popover/PopoverTitle.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Title text for {@link PopoverContent}.
|
|
10
|
+
*
|
|
11
|
+
* Provides the default popover title typography while accepting the standard
|
|
12
|
+
* mobile {@link Text} props.
|
|
13
|
+
*/
|
|
14
|
+
const PopoverTitle = (0, react.memo)(function PopoverTitle({ variant = "label1/emphasized", color = "primary", ...props }) {
|
|
15
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
|
|
16
|
+
variant,
|
|
17
|
+
color,
|
|
18
|
+
...props
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
PopoverTitle.displayName = "PopoverTitle";
|
|
22
|
+
//#endregion
|
|
23
|
+
exports.PopoverTitle = PopoverTitle;
|