@yahoo/uds-mobile 2.17.0 → 2.18.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/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/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 +60 -0
- package/dist/jest/mocks/styles.d.cts +5 -2
- package/dist/jest/mocks/styles.d.cts.map +1 -1
- package/dist/jest/mocks/styles.d.ts +5 -2
- package/dist/jest/mocks/styles.d.ts.map +1 -1
- package/dist/jest/mocks/styles.js +58 -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.map +1 -1
- package/dist/types/dist/index.d.ts.map +1 -1
- package/generated/styles.cjs +6 -0
- package/generated/styles.d.ts +13 -1
- package/generated/styles.mjs +6 -0
- package/generated/unistyles.d.ts +13 -0
- package/package.json +11 -1
|
@@ -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;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { TextProps } from "../Text.cjs";
|
|
3
|
+
import * as _$react from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Popover/PopoverTitle.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Title text for {@link PopoverContent}.
|
|
8
|
+
*
|
|
9
|
+
* Provides the default popover title typography while accepting the standard
|
|
10
|
+
* mobile {@link Text} props.
|
|
11
|
+
*/
|
|
12
|
+
declare const PopoverTitle: _$react.NamedExoticComponent<TextProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PopoverTitle };
|
|
15
|
+
//# sourceMappingURL=PopoverTitle.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTitle.d.cts","names":[],"sources":["../../../src/components/Popover/PopoverTitle.tsx"],"mappings":";;;;;;;;;AAWkB;;cAAZ,YAAA,EAAY,OAAA,CAAA,oBAAA,CAMhB,SAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { TextProps } from "../Text.js";
|
|
3
|
+
import * as _$react from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Popover/PopoverTitle.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Title text for {@link PopoverContent}.
|
|
8
|
+
*
|
|
9
|
+
* Provides the default popover title typography while accepting the standard
|
|
10
|
+
* mobile {@link Text} props.
|
|
11
|
+
*/
|
|
12
|
+
declare const PopoverTitle: _$react.NamedExoticComponent<TextProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PopoverTitle };
|
|
15
|
+
//# sourceMappingURL=PopoverTitle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTitle.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverTitle.tsx"],"mappings":";;;;;;;;;AAWkB;;cAAZ,YAAA,EAAY,OAAA,CAAA,oBAAA,CAMhB,SAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { Text } from "../Text.js";
|
|
3
|
+
import { memo } from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/Popover/PopoverTitle.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Title text for {@link PopoverContent}.
|
|
8
|
+
*
|
|
9
|
+
* Provides the default popover title typography while accepting the standard
|
|
10
|
+
* mobile {@link Text} props.
|
|
11
|
+
*/
|
|
12
|
+
const PopoverTitle = memo(function PopoverTitle({ variant = "label1/emphasized", color = "primary", ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Text, {
|
|
14
|
+
variant,
|
|
15
|
+
color,
|
|
16
|
+
...props
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
PopoverTitle.displayName = "PopoverTitle";
|
|
20
|
+
//#endregion
|
|
21
|
+
export { PopoverTitle };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=PopoverTitle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTitle.js","names":[],"sources":["../../../src/components/Popover/PopoverTitle.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { Text } from '../Text';\nimport type { PopoverTitleProps } from './types';\n\n/**\n * Title text for {@link PopoverContent}.\n *\n * Provides the default popover title typography while accepting the standard\n * mobile {@link Text} props.\n */\nconst PopoverTitle = memo(function PopoverTitle({\n variant = 'label1/emphasized',\n color = 'primary',\n ...props\n}: PopoverTitleProps) {\n return <Text variant={variant} color={color} {...props} />;\n});\n\nPopoverTitle.displayName = 'PopoverTitle';\n\nexport { PopoverTitle };\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,eAAe,KAAK,SAAS,aAAa,EAC9C,UAAU,qBACV,QAAQ,WACR,GAAG,SACiB;CACpB,OAAO,oBAAC,MAAD;EAAe;EAAgB;EAAO,GAAI;EAAS,CAAA;EAC1D;AAEF,aAAa,cAAc"}
|