@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.
Files changed (146) hide show
  1. package/dist/bin/generateTheme.mjs +7 -2
  2. package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +4 -0
  3. package/dist/components/Popover/Popover.cjs +92 -0
  4. package/dist/components/Popover/Popover.d.cts +26 -0
  5. package/dist/components/Popover/Popover.d.cts.map +1 -0
  6. package/dist/components/Popover/Popover.d.ts +26 -0
  7. package/dist/components/Popover/Popover.d.ts.map +1 -0
  8. package/dist/components/Popover/Popover.js +92 -0
  9. package/dist/components/Popover/Popover.js.map +1 -0
  10. package/dist/components/Popover/PopoverContent.cjs +124 -0
  11. package/dist/components/Popover/PopoverContent.d.cts +15 -0
  12. package/dist/components/Popover/PopoverContent.d.cts.map +1 -0
  13. package/dist/components/Popover/PopoverContent.d.ts +15 -0
  14. package/dist/components/Popover/PopoverContent.d.ts.map +1 -0
  15. package/dist/components/Popover/PopoverContent.js +124 -0
  16. package/dist/components/Popover/PopoverContent.js.map +1 -0
  17. package/dist/components/Popover/PopoverContext.cjs +14 -0
  18. package/dist/components/Popover/PopoverContext.d.cts +10 -0
  19. package/dist/components/Popover/PopoverContext.d.cts.map +1 -0
  20. package/dist/components/Popover/PopoverContext.d.ts +10 -0
  21. package/dist/components/Popover/PopoverContext.d.ts.map +1 -0
  22. package/dist/components/Popover/PopoverContext.js +13 -0
  23. package/dist/components/Popover/PopoverContext.js.map +1 -0
  24. package/dist/components/Popover/PopoverDescription.cjs +23 -0
  25. package/dist/components/Popover/PopoverDescription.d.cts +15 -0
  26. package/dist/components/Popover/PopoverDescription.d.cts.map +1 -0
  27. package/dist/components/Popover/PopoverDescription.d.ts +15 -0
  28. package/dist/components/Popover/PopoverDescription.d.ts.map +1 -0
  29. package/dist/components/Popover/PopoverDescription.js +23 -0
  30. package/dist/components/Popover/PopoverDescription.js.map +1 -0
  31. package/dist/components/Popover/PopoverDismiss.cjs +22 -0
  32. package/dist/components/Popover/PopoverDismiss.d.cts +15 -0
  33. package/dist/components/Popover/PopoverDismiss.d.cts.map +1 -0
  34. package/dist/components/Popover/PopoverDismiss.d.ts +15 -0
  35. package/dist/components/Popover/PopoverDismiss.d.ts.map +1 -0
  36. package/dist/components/Popover/PopoverDismiss.js +22 -0
  37. package/dist/components/Popover/PopoverDismiss.js.map +1 -0
  38. package/dist/components/Popover/PopoverFrame.cjs +56 -0
  39. package/dist/components/Popover/PopoverFrame.d.cts +23 -0
  40. package/dist/components/Popover/PopoverFrame.d.cts.map +1 -0
  41. package/dist/components/Popover/PopoverFrame.d.ts +23 -0
  42. package/dist/components/Popover/PopoverFrame.d.ts.map +1 -0
  43. package/dist/components/Popover/PopoverFrame.js +55 -0
  44. package/dist/components/Popover/PopoverFrame.js.map +1 -0
  45. package/dist/components/Popover/PopoverPortalLayer.cjs +45 -0
  46. package/dist/components/Popover/PopoverPortalLayer.d.cts +15 -0
  47. package/dist/components/Popover/PopoverPortalLayer.d.cts.map +1 -0
  48. package/dist/components/Popover/PopoverPortalLayer.d.ts +15 -0
  49. package/dist/components/Popover/PopoverPortalLayer.d.ts.map +1 -0
  50. package/dist/components/Popover/PopoverPortalLayer.js +45 -0
  51. package/dist/components/Popover/PopoverPortalLayer.js.map +1 -0
  52. package/dist/components/Popover/PopoverSurface.cjs +228 -0
  53. package/dist/components/Popover/PopoverSurface.d.cts +26 -0
  54. package/dist/components/Popover/PopoverSurface.d.cts.map +1 -0
  55. package/dist/components/Popover/PopoverSurface.d.ts +26 -0
  56. package/dist/components/Popover/PopoverSurface.d.ts.map +1 -0
  57. package/dist/components/Popover/PopoverSurface.js +227 -0
  58. package/dist/components/Popover/PopoverSurface.js.map +1 -0
  59. package/dist/components/Popover/PopoverTitle.cjs +23 -0
  60. package/dist/components/Popover/PopoverTitle.d.cts +15 -0
  61. package/dist/components/Popover/PopoverTitle.d.cts.map +1 -0
  62. package/dist/components/Popover/PopoverTitle.d.ts +15 -0
  63. package/dist/components/Popover/PopoverTitle.d.ts.map +1 -0
  64. package/dist/components/Popover/PopoverTitle.js +23 -0
  65. package/dist/components/Popover/PopoverTitle.js.map +1 -0
  66. package/dist/components/Popover/PopoverTrigger.cjs +88 -0
  67. package/dist/components/Popover/PopoverTrigger.d.cts +15 -0
  68. package/dist/components/Popover/PopoverTrigger.d.cts.map +1 -0
  69. package/dist/components/Popover/PopoverTrigger.d.ts +15 -0
  70. package/dist/components/Popover/PopoverTrigger.d.ts.map +1 -0
  71. package/dist/components/Popover/PopoverTrigger.js +88 -0
  72. package/dist/components/Popover/PopoverTrigger.js.map +1 -0
  73. package/dist/components/Popover/index.cjs +14 -0
  74. package/dist/components/Popover/index.d.cts +9 -0
  75. package/dist/components/Popover/index.d.ts +9 -0
  76. package/dist/components/Popover/index.js +8 -0
  77. package/dist/components/Popover/popoverFrameGeometry.cjs +177 -0
  78. package/dist/components/Popover/popoverFrameGeometry.d.cts +48 -0
  79. package/dist/components/Popover/popoverFrameGeometry.d.cts.map +1 -0
  80. package/dist/components/Popover/popoverFrameGeometry.d.ts +48 -0
  81. package/dist/components/Popover/popoverFrameGeometry.d.ts.map +1 -0
  82. package/dist/components/Popover/popoverFrameGeometry.js +177 -0
  83. package/dist/components/Popover/popoverFrameGeometry.js.map +1 -0
  84. package/dist/components/Popover/popoverLayer.cjs +16 -0
  85. package/dist/components/Popover/popoverLayer.d.cts +8 -0
  86. package/dist/components/Popover/popoverLayer.d.cts.map +1 -0
  87. package/dist/components/Popover/popoverLayer.d.ts +8 -0
  88. package/dist/components/Popover/popoverLayer.d.ts.map +1 -0
  89. package/dist/components/Popover/popoverLayer.js +16 -0
  90. package/dist/components/Popover/popoverLayer.js.map +1 -0
  91. package/dist/components/Popover/types.cjs +1 -0
  92. package/dist/components/Popover/types.d.cts +170 -0
  93. package/dist/components/Popover/types.d.cts.map +1 -0
  94. package/dist/components/Popover/types.d.ts +170 -0
  95. package/dist/components/Popover/types.d.ts.map +1 -0
  96. package/dist/components/Popover/types.js +1 -0
  97. package/dist/components/Toast/ToastProvider.cjs +1 -1
  98. package/dist/components/Toast/ToastProvider.js +1 -1
  99. package/dist/components/internal/Overlay/index.cjs +4 -0
  100. package/dist/components/internal/Overlay/index.d.cts +4 -2
  101. package/dist/components/internal/Overlay/index.d.ts +4 -2
  102. package/dist/components/internal/Overlay/index.js +3 -1
  103. package/dist/components/internal/Overlay/types.d.cts +47 -1
  104. package/dist/components/internal/Overlay/types.d.cts.map +1 -1
  105. package/dist/components/internal/Overlay/types.d.ts +47 -1
  106. package/dist/components/internal/Overlay/types.d.ts.map +1 -1
  107. package/dist/components/internal/Overlay/useAnchoredPosition.cjs +225 -0
  108. package/dist/components/internal/Overlay/useAnchoredPosition.d.cts +22 -0
  109. package/dist/components/internal/Overlay/useAnchoredPosition.d.cts.map +1 -0
  110. package/dist/components/internal/Overlay/useAnchoredPosition.d.ts +22 -0
  111. package/dist/components/internal/Overlay/useAnchoredPosition.d.ts.map +1 -0
  112. package/dist/components/internal/Overlay/useAnchoredPosition.js +225 -0
  113. package/dist/components/internal/Overlay/useAnchoredPosition.js.map +1 -0
  114. package/dist/components/internal/Overlay/useOverlayDismiss.cjs +22 -0
  115. package/dist/components/internal/Overlay/useOverlayDismiss.d.cts +12 -0
  116. package/dist/components/internal/Overlay/useOverlayDismiss.d.cts.map +1 -0
  117. package/dist/components/internal/Overlay/useOverlayDismiss.d.ts +12 -0
  118. package/dist/components/internal/Overlay/useOverlayDismiss.d.ts.map +1 -0
  119. package/dist/components/internal/Overlay/useOverlayDismiss.js +22 -0
  120. package/dist/components/internal/Overlay/useOverlayDismiss.js.map +1 -0
  121. package/dist/jest/mocks/react-native.cjs +14 -0
  122. package/dist/jest/mocks/react-native.d.cts +29 -1
  123. package/dist/jest/mocks/react-native.d.cts.map +1 -1
  124. package/dist/jest/mocks/react-native.d.ts +29 -1
  125. package/dist/jest/mocks/react-native.d.ts.map +1 -1
  126. package/dist/jest/mocks/react-native.js +13 -1
  127. package/dist/jest/mocks/react-native.js.map +1 -1
  128. package/dist/jest/mocks/styles.cjs +60 -0
  129. package/dist/jest/mocks/styles.d.cts +5 -2
  130. package/dist/jest/mocks/styles.d.cts.map +1 -1
  131. package/dist/jest/mocks/styles.d.ts +5 -2
  132. package/dist/jest/mocks/styles.d.ts.map +1 -1
  133. package/dist/jest/mocks/styles.js +58 -1
  134. package/dist/jest/mocks/styles.js.map +1 -1
  135. package/dist/jest/setup.cjs +46 -3
  136. package/dist/jest/setup.d.cts.map +1 -1
  137. package/dist/jest/setup.d.ts.map +1 -1
  138. package/dist/jest/setup.js +46 -3
  139. package/dist/jest/setup.js.map +1 -1
  140. package/dist/types/dist/index.d.cts.map +1 -1
  141. package/dist/types/dist/index.d.ts.map +1 -1
  142. package/generated/styles.cjs +6 -0
  143. package/generated/styles.d.ts +13 -1
  144. package/generated/styles.mjs +6 -0
  145. package/generated/unistyles.d.ts +13 -0
  146. package/package.json +11 -1
@@ -414,7 +414,12 @@ function resolveValue(variable, config, colorMode, propName) {
414
414
  }
415
415
  return "transparent";
416
416
  }
417
- if (propName === "borderColor") {
417
+ if (propName === "blurBackgroundColorFallback") {
418
+ const fbv = preset.fallbackBlurredBackgroundValue ?? preset.finalBackgroundValue;
419
+ if (fbv) return `rgb(${fbv.r}, ${fbv.g}, ${fbv.b})`;
420
+ return "transparent";
421
+ }
422
+ if (propName === "borderColor" || propName === "stroke") {
418
423
  const borderColorDef = preset.borderColor;
419
424
  if (borderColorDef.type === "line") {
420
425
  const colorDef = palette.line?.[borderColorDef.value];
@@ -434,7 +439,7 @@ function resolveValue(variable, config, colorMode, propName) {
434
439
  }
435
440
  return "transparent";
436
441
  }
437
- if (propName === "borderWidth") {
442
+ if (propName === "borderWidth" || propName === "strokeWidth") {
438
443
  const borderWidthKey = preset.borderWidth;
439
444
  return scaleConfig.borderWidth[borderWidthKey] ?? 0;
440
445
  }
@@ -12,11 +12,13 @@ const PROPERTY_TO_RN_PROPS = {
12
12
  height: ["height"],
13
13
  width: ["width"],
14
14
  backgroundColor: ["backgroundColor"],
15
+ blurBackgroundColorFallback: ["backgroundBlurFallbackColor"],
15
16
  color: ["color"],
16
17
  labelColor: ["color"],
17
18
  borderColor: ["borderColor"],
18
19
  borderWidth: ["borderWidth"],
19
20
  borderRadius: ["borderRadius"],
21
+ fillOpacity: ["backgroundOpacity"],
20
22
  iconSize: ["fontSize", "lineHeight"],
21
23
  opacity: ["opacity"],
22
24
  horizontalMargin: ["marginHorizontal"],
@@ -25,6 +27,8 @@ const PROPERTY_TO_RN_PROPS = {
25
27
  shadow: ["boxShadow"],
26
28
  insetShadow: ["boxShadow"],
27
29
  bannerInnerShadow: ["boxShadow"],
30
+ stroke: ["borderColor"],
31
+ strokeWidth: ["borderWidth"],
28
32
  textDecorationLine: ["textDecorationLine"],
29
33
  textVariant: [
30
34
  "fontFamily",
@@ -0,0 +1,92 @@
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_internal_Overlay_useControllableState = require("../internal/Overlay/useControllableState.cjs");
5
+ const require_components_Popover_PopoverContext = require("./PopoverContext.cjs");
6
+ const require_components_Popover_popoverLayer = require("./popoverLayer.cjs");
7
+ let react = require("react");
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ //#region src/components/Popover/Popover.tsx
10
+ const DEFAULT_PLACEMENT = "bottom";
11
+ const DEFAULT_OFFSET = 9;
12
+ const DEFAULT_COLLISION_PADDING = 12;
13
+ /**
14
+ * The root popover component for React Native.
15
+ *
16
+ * Manages open state, trigger measurement, and anchored positioning for a
17
+ * floating surface. Use with {@link PopoverTrigger} and {@link PopoverContent}.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <Popover>
22
+ * <PopoverTrigger render={<Button>Open popover</Button>} />
23
+ * <PopoverContent>
24
+ * <PopoverTitle>Storage almost full</PopoverTitle>
25
+ * <PopoverDescription>Review large files or upgrade your plan.</PopoverDescription>
26
+ * </PopoverContent>
27
+ * </Popover>
28
+ * ```
29
+ */
30
+ const Popover = (0, react.memo)(function Popover({ children, open: openProp, defaultOpen = false, onOpenChange, onOpen, onClose, placement = DEFAULT_PLACEMENT, align, offset = DEFAULT_OFFSET, alignOffset = 0, avoidCollisions = true, collisionPadding = DEFAULT_COLLISION_PADDING, width = "content", sameWidth = false, hideArrow = false, hideDismissButton = false, dismissible = true, closeAccessibilityLabel = "Close popover", reduceMotion = false, insets, blurTarget }) {
31
+ const id = (0, react.useId)();
32
+ const triggerRef = (0, react.useRef)(null);
33
+ const [triggerRect, setTriggerRect] = (0, react.useState)(null);
34
+ const [open, setOpenState] = require_components_internal_Overlay_useControllableState.useControllableState({
35
+ value: openProp,
36
+ defaultValue: defaultOpen,
37
+ onChange: onOpenChange
38
+ });
39
+ const previousOpenRef = (0, react.useRef)(open);
40
+ const setOpen = setOpenState;
41
+ (0, react.useEffect)(() => {
42
+ if (previousOpenRef.current === open) return;
43
+ previousOpenRef.current = open;
44
+ if (open) onOpen?.();
45
+ else onClose?.();
46
+ }, [
47
+ onClose,
48
+ onOpen,
49
+ open
50
+ ]);
51
+ (0, react.useEffect)(() => {
52
+ if (!open) return;
53
+ require_components_Popover_popoverLayer.notifyPopoverOpened(id);
54
+ }, [id, open]);
55
+ (0, react.useEffect)(() => require_components_Popover_popoverLayer.subscribeToPopoverLayer((openedId) => {
56
+ if (openedId !== id && open) setOpen(false);
57
+ }), [
58
+ id,
59
+ open,
60
+ setOpen
61
+ ]);
62
+ const contextValue = {
63
+ id,
64
+ open,
65
+ setOpen,
66
+ triggerRef,
67
+ triggerRect,
68
+ setTriggerRect,
69
+ placement,
70
+ align,
71
+ offset,
72
+ alignOffset,
73
+ avoidCollisions,
74
+ collisionPadding,
75
+ width,
76
+ sameWidth,
77
+ hideArrow,
78
+ hideDismissButton,
79
+ dismissible,
80
+ closeAccessibilityLabel,
81
+ reduceMotion,
82
+ insets,
83
+ blurTarget
84
+ };
85
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Popover_PopoverContext.PopoverContext.Provider, {
86
+ value: contextValue,
87
+ children
88
+ });
89
+ });
90
+ Popover.displayName = "Popover";
91
+ //#endregion
92
+ exports.Popover = Popover;
@@ -0,0 +1,26 @@
1
+
2
+ import { PopoverProps } from "./types.cjs";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/Popover.d.ts
6
+ /**
7
+ * The root popover component for React Native.
8
+ *
9
+ * Manages open state, trigger measurement, and anchored positioning for a
10
+ * floating surface. Use with {@link PopoverTrigger} and {@link PopoverContent}.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Popover>
15
+ * <PopoverTrigger render={<Button>Open popover</Button>} />
16
+ * <PopoverContent>
17
+ * <PopoverTitle>Storage almost full</PopoverTitle>
18
+ * <PopoverDescription>Review large files or upgrade your plan.</PopoverDescription>
19
+ * </PopoverContent>
20
+ * </Popover>
21
+ * ```
22
+ */
23
+ declare const Popover: _$react.NamedExoticComponent<PopoverProps>;
24
+ //#endregion
25
+ export { Popover };
26
+ //# sourceMappingURL=Popover.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.d.cts","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"mappings":";;;;;;;;AAMiE;;;;;;;;;;;;;;cAuB3D,OAAA,EAAO,OAAA,CAAA,oBAAA,CAAA,YAAA"}
@@ -0,0 +1,26 @@
1
+
2
+ import { PopoverProps } from "./types.js";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/Popover.d.ts
6
+ /**
7
+ * The root popover component for React Native.
8
+ *
9
+ * Manages open state, trigger measurement, and anchored positioning for a
10
+ * floating surface. Use with {@link PopoverTrigger} and {@link PopoverContent}.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Popover>
15
+ * <PopoverTrigger render={<Button>Open popover</Button>} />
16
+ * <PopoverContent>
17
+ * <PopoverTitle>Storage almost full</PopoverTitle>
18
+ * <PopoverDescription>Review large files or upgrade your plan.</PopoverDescription>
19
+ * </PopoverContent>
20
+ * </Popover>
21
+ * ```
22
+ */
23
+ declare const Popover: _$react.NamedExoticComponent<PopoverProps>;
24
+ //#endregion
25
+ export { Popover };
26
+ //# sourceMappingURL=Popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.d.ts","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"mappings":";;;;;;;;AAMiE;;;;;;;;;;;;;;cAuB3D,OAAA,EAAO,OAAA,CAAA,oBAAA,CAAA,YAAA"}
@@ -0,0 +1,92 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { useControllableState } from "../internal/Overlay/useControllableState.js";
3
+ import { PopoverContext } from "./PopoverContext.js";
4
+ import { notifyPopoverOpened, subscribeToPopoverLayer } from "./popoverLayer.js";
5
+ import { memo, useEffect, useId, useRef, useState } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/components/Popover/Popover.tsx
8
+ const DEFAULT_PLACEMENT = "bottom";
9
+ const DEFAULT_OFFSET = 9;
10
+ const DEFAULT_COLLISION_PADDING = 12;
11
+ /**
12
+ * The root popover component for React Native.
13
+ *
14
+ * Manages open state, trigger measurement, and anchored positioning for a
15
+ * floating surface. Use with {@link PopoverTrigger} and {@link PopoverContent}.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <Popover>
20
+ * <PopoverTrigger render={<Button>Open popover</Button>} />
21
+ * <PopoverContent>
22
+ * <PopoverTitle>Storage almost full</PopoverTitle>
23
+ * <PopoverDescription>Review large files or upgrade your plan.</PopoverDescription>
24
+ * </PopoverContent>
25
+ * </Popover>
26
+ * ```
27
+ */
28
+ const Popover = memo(function Popover({ children, open: openProp, defaultOpen = false, onOpenChange, onOpen, onClose, placement = DEFAULT_PLACEMENT, align, offset = DEFAULT_OFFSET, alignOffset = 0, avoidCollisions = true, collisionPadding = DEFAULT_COLLISION_PADDING, width = "content", sameWidth = false, hideArrow = false, hideDismissButton = false, dismissible = true, closeAccessibilityLabel = "Close popover", reduceMotion = false, insets, blurTarget }) {
29
+ const id = useId();
30
+ const triggerRef = useRef(null);
31
+ const [triggerRect, setTriggerRect] = useState(null);
32
+ const [open, setOpenState] = useControllableState({
33
+ value: openProp,
34
+ defaultValue: defaultOpen,
35
+ onChange: onOpenChange
36
+ });
37
+ const previousOpenRef = useRef(open);
38
+ const setOpen = setOpenState;
39
+ useEffect(() => {
40
+ if (previousOpenRef.current === open) return;
41
+ previousOpenRef.current = open;
42
+ if (open) onOpen?.();
43
+ else onClose?.();
44
+ }, [
45
+ onClose,
46
+ onOpen,
47
+ open
48
+ ]);
49
+ useEffect(() => {
50
+ if (!open) return;
51
+ notifyPopoverOpened(id);
52
+ }, [id, open]);
53
+ useEffect(() => subscribeToPopoverLayer((openedId) => {
54
+ if (openedId !== id && open) setOpen(false);
55
+ }), [
56
+ id,
57
+ open,
58
+ setOpen
59
+ ]);
60
+ const contextValue = {
61
+ id,
62
+ open,
63
+ setOpen,
64
+ triggerRef,
65
+ triggerRect,
66
+ setTriggerRect,
67
+ placement,
68
+ align,
69
+ offset,
70
+ alignOffset,
71
+ avoidCollisions,
72
+ collisionPadding,
73
+ width,
74
+ sameWidth,
75
+ hideArrow,
76
+ hideDismissButton,
77
+ dismissible,
78
+ closeAccessibilityLabel,
79
+ reduceMotion,
80
+ insets,
81
+ blurTarget
82
+ };
83
+ return /* @__PURE__ */ jsx(PopoverContext.Provider, {
84
+ value: contextValue,
85
+ children
86
+ });
87
+ });
88
+ Popover.displayName = "Popover";
89
+ //#endregion
90
+ export { Popover };
91
+
92
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import { memo, useEffect, useId, useRef, useState } from 'react';\nimport type { View } from 'react-native';\n\nimport { useControllableState } from '../internal/Overlay';\nimport { PopoverContext } from './PopoverContext';\nimport { notifyPopoverOpened, subscribeToPopoverLayer } from './popoverLayer';\nimport type { PopoverContextValue, PopoverProps } from './types';\n\nconst DEFAULT_PLACEMENT = 'bottom';\nconst DEFAULT_OFFSET = 9;\nconst DEFAULT_COLLISION_PADDING = 12;\n\n/**\n * The root popover component for React Native.\n *\n * Manages open state, trigger measurement, and anchored positioning for a\n * floating surface. Use with {@link PopoverTrigger} and {@link PopoverContent}.\n *\n * @example\n * ```tsx\n * <Popover>\n * <PopoverTrigger render={<Button>Open popover</Button>} />\n * <PopoverContent>\n * <PopoverTitle>Storage almost full</PopoverTitle>\n * <PopoverDescription>Review large files or upgrade your plan.</PopoverDescription>\n * </PopoverContent>\n * </Popover>\n * ```\n */\nconst Popover = memo(function Popover({\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n onOpen,\n onClose,\n placement = DEFAULT_PLACEMENT,\n align,\n offset = DEFAULT_OFFSET,\n alignOffset = 0,\n avoidCollisions = true,\n collisionPadding = DEFAULT_COLLISION_PADDING,\n width = 'content',\n sameWidth = false,\n hideArrow = false,\n hideDismissButton = false,\n dismissible = true,\n closeAccessibilityLabel = 'Close popover',\n reduceMotion = false,\n insets,\n blurTarget,\n}: PopoverProps) {\n const id = useId();\n const triggerRef = useRef<View | null>(null);\n const [triggerRect, setTriggerRect] = useState<PopoverContextValue['triggerRect']>(null);\n const [open, setOpenState] = useControllableState({\n value: openProp,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const previousOpenRef = useRef(open);\n const setOpen = setOpenState;\n\n useEffect(() => {\n if (previousOpenRef.current === open) {\n return;\n }\n\n previousOpenRef.current = open;\n\n if (open) {\n onOpen?.();\n } else {\n onClose?.();\n }\n }, [onClose, onOpen, open]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n notifyPopoverOpened(id);\n }, [id, open]);\n\n useEffect(\n () =>\n subscribeToPopoverLayer((openedId) => {\n if (openedId !== id && open) {\n setOpen(false);\n }\n }),\n [id, open, setOpen],\n );\n\n const contextValue: PopoverContextValue = {\n id,\n open,\n setOpen,\n triggerRef,\n triggerRect,\n setTriggerRect,\n placement,\n align,\n offset,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n width,\n sameWidth,\n hideArrow,\n hideDismissButton,\n dismissible,\n closeAccessibilityLabel,\n reduceMotion,\n insets,\n blurTarget,\n };\n\n return <PopoverContext.Provider value={contextValue}>{children}</PopoverContext.Provider>;\n});\n\nPopover.displayName = 'Popover';\n\nexport { Popover };\n"],"mappings":";;;;;;;AAQA,MAAM,oBAAoB;AAC1B,MAAM,iBAAiB;AACvB,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;AAmBlC,MAAM,UAAU,KAAK,SAAS,QAAQ,EACpC,UACA,MAAM,UACN,cAAc,OACd,cACA,QACA,SACA,YAAY,mBACZ,OACA,SAAS,gBACT,cAAc,GACd,kBAAkB,MAClB,mBAAmB,2BACnB,QAAQ,WACR,YAAY,OACZ,YAAY,OACZ,oBAAoB,OACpB,cAAc,MACd,0BAA0B,iBAC1B,eAAe,OACf,QACA,cACe;CACf,MAAM,KAAK,OAAO;CAClB,MAAM,aAAa,OAAoB,KAAK;CAC5C,MAAM,CAAC,aAAa,kBAAkB,SAA6C,KAAK;CACxF,MAAM,CAAC,MAAM,gBAAgB,qBAAqB;EAChD,OAAO;EACP,cAAc;EACd,UAAU;EACX,CAAC;CACF,MAAM,kBAAkB,OAAO,KAAK;CACpC,MAAM,UAAU;CAEhB,gBAAgB;EACd,IAAI,gBAAgB,YAAY,MAC9B;EAGF,gBAAgB,UAAU;EAE1B,IAAI,MACF,UAAU;OAEV,WAAW;IAEZ;EAAC;EAAS;EAAQ;EAAK,CAAC;CAE3B,gBAAgB;EACd,IAAI,CAAC,MACH;EAGF,oBAAoB,GAAG;IACtB,CAAC,IAAI,KAAK,CAAC;CAEd,gBAEI,yBAAyB,aAAa;EACpC,IAAI,aAAa,MAAM,MACrB,QAAQ,MAAM;GAEhB,EACJ;EAAC;EAAI;EAAM;EAAQ,CACpB;CAED,MAAM,eAAoC;EACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CAED,OAAO,oBAAC,eAAe,UAAhB;EAAyB,OAAO;EAAe;EAAmC,CAAA;EACzF;AAEF,QAAQ,cAAc"}
@@ -0,0 +1,124 @@
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_internal_Overlay_useAnchoredPosition = require("../internal/Overlay/useAnchoredPosition.cjs");
5
+ const require_components_Popover_PopoverContext = require("./PopoverContext.cjs");
6
+ const require_components_Popover_PopoverPortalLayer = require("./PopoverPortalLayer.cjs");
7
+ const require_components_Popover_PopoverSurface = require("./PopoverSurface.cjs");
8
+ let react = require("react");
9
+ let react_jsx_runtime = require("react/jsx-runtime");
10
+ let generated_styles = require("../../../generated/styles");
11
+ let react_native_reanimated = require("react-native-reanimated");
12
+ //#region src/components/Popover/PopoverContent.tsx
13
+ const ARROW_HEIGHT = 12;
14
+ const ARROW_WIDTH = 22;
15
+ const ANIMATION_DURATION = 200;
16
+ /**
17
+ * Floating content surface for {@link Popover}.
18
+ *
19
+ * Renders the anchored surface, arrow, optional dismiss button, blur/elevation
20
+ * background, and open/close transition in a full-window portal layer.
21
+ */
22
+ const PopoverContent = (0, react.memo)(function PopoverContent({ children, maxWidth, maxHeight, style, onLayout, ...props }) {
23
+ const context = require_components_Popover_PopoverContext.usePopoverContext();
24
+ const { align, alignOffset, avoidCollisions, collisionPadding, dismissible, hideArrow, insets, offset, open, placement, reduceMotion, sameWidth, setOpen, triggerRect, width } = context;
25
+ const [contentSize, setContentSize] = (0, react.useState)({
26
+ width: 0,
27
+ height: 0
28
+ });
29
+ const [shouldRender, setShouldRender] = (0, react.useState)(open);
30
+ const dismiss = (0, react.useCallback)(() => setOpen(false), [setOpen]);
31
+ const { contentStyle, arrowStyle, anchorReady, resolvedPlacement, maxWidth: positionedMaxWidth } = require_components_internal_Overlay_useAnchoredPosition.useAnchoredPosition({
32
+ triggerRect,
33
+ contentSize,
34
+ placement,
35
+ align,
36
+ offset: offset + (hideArrow ? 0 : ARROW_HEIGHT),
37
+ alignOffset,
38
+ avoidCollisions,
39
+ collisionPadding,
40
+ width,
41
+ sameWidth,
42
+ insets,
43
+ arrowHeight: ARROW_HEIGHT,
44
+ arrowWidth: ARROW_WIDTH
45
+ });
46
+ const isPositionedOpen = open && anchorReady && contentSize.height > 0;
47
+ const animationDistance = Math.min(offset, 12);
48
+ const animationSide = resolvedPlacement.split("-")[0];
49
+ const shouldAnimateVertically = animationSide === "top" || animationSide === "bottom";
50
+ const animationTranslate = (animationSide === "top" || animationSide === "start" ? 1 : -1) * animationDistance;
51
+ const progress = (0, react_native_reanimated.useDerivedValue)(() => (0, react_native_reanimated.withTiming)(isPositionedOpen ? 1 : 0, {
52
+ duration: reduceMotion ? 0 : ANIMATION_DURATION,
53
+ easing: react_native_reanimated.Easing.out(react_native_reanimated.Easing.ease)
54
+ }), [isPositionedOpen, reduceMotion]);
55
+ const animatedStyle = (0, react_native_reanimated.useAnimatedStyle)(() => {
56
+ return {
57
+ opacity: progress.value,
58
+ transform: [{ scale: .97 + progress.value * .03 }, shouldAnimateVertically ? { translateY: animationTranslate * (1 - progress.value) } : { translateX: animationTranslate * (1 - progress.value) }]
59
+ };
60
+ });
61
+ const handleLayout = (0, react.useCallback)((event) => {
62
+ const { width: layoutWidth, height: layoutHeight } = event.nativeEvent.layout;
63
+ setContentSize({
64
+ width: layoutWidth,
65
+ height: layoutHeight
66
+ });
67
+ onLayout?.(event);
68
+ }, [onLayout]);
69
+ (0, react.useEffect)(() => {
70
+ if (open) {
71
+ setShouldRender(true);
72
+ return;
73
+ }
74
+ if (reduceMotion) {
75
+ setShouldRender(false);
76
+ setContentSize({
77
+ width: 0,
78
+ height: 0
79
+ });
80
+ return;
81
+ }
82
+ const timeout = setTimeout(() => {
83
+ setShouldRender(false);
84
+ setContentSize({
85
+ width: 0,
86
+ height: 0
87
+ });
88
+ }, ANIMATION_DURATION);
89
+ return () => clearTimeout(timeout);
90
+ }, [open, reduceMotion]);
91
+ generated_styles.popoverStyles.useVariants({});
92
+ if (!shouldRender) return null;
93
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Popover_PopoverPortalLayer.PopoverPortalLayer, {
94
+ open,
95
+ dismissible,
96
+ onDismiss: dismiss,
97
+ children: (layerDismiss) => {
98
+ const surface = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Popover_PopoverSurface.PopoverSurface, {
99
+ animatedStyle,
100
+ arrowHeight: ARROW_HEIGHT,
101
+ arrowStyle,
102
+ arrowWidth: ARROW_WIDTH,
103
+ contentSize,
104
+ contentStyle,
105
+ maxHeight,
106
+ maxWidth,
107
+ onDismiss: layerDismiss,
108
+ onLayout: handleLayout,
109
+ positionedMaxWidth,
110
+ resolvedPlacement,
111
+ style,
112
+ ...props,
113
+ children
114
+ });
115
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Popover_PopoverContext.PopoverContext.Provider, {
116
+ value: context,
117
+ children: surface
118
+ });
119
+ }
120
+ });
121
+ });
122
+ PopoverContent.displayName = "PopoverContent";
123
+ //#endregion
124
+ exports.PopoverContent = PopoverContent;
@@ -0,0 +1,15 @@
1
+
2
+ import { PopoverContentProps } from "./types.cjs";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/PopoverContent.d.ts
6
+ /**
7
+ * Floating content surface for {@link Popover}.
8
+ *
9
+ * Renders the anchored surface, arrow, optional dismiss button, blur/elevation
10
+ * background, and open/close transition in a full-window portal layer.
11
+ */
12
+ declare const PopoverContent: _$react.NamedExoticComponent<PopoverContentProps>;
13
+ //#endregion
14
+ export { PopoverContent };
15
+ //# sourceMappingURL=PopoverContent.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverContent.d.cts","names":[],"sources":["../../../src/components/Popover/PopoverContent.tsx"],"mappings":";;;;;;;;AASmD;;;cAY7C,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
@@ -0,0 +1,15 @@
1
+
2
+ import { PopoverContentProps } from "./types.js";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/PopoverContent.d.ts
6
+ /**
7
+ * Floating content surface for {@link Popover}.
8
+ *
9
+ * Renders the anchored surface, arrow, optional dismiss button, blur/elevation
10
+ * background, and open/close transition in a full-window portal layer.
11
+ */
12
+ declare const PopoverContent: _$react.NamedExoticComponent<PopoverContentProps>;
13
+ //#endregion
14
+ export { PopoverContent };
15
+ //# sourceMappingURL=PopoverContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverContent.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverContent.tsx"],"mappings":";;;;;;;;AASmD;;;cAY7C,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
@@ -0,0 +1,124 @@
1
+ /*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
2
+ import { useAnchoredPosition } from "../internal/Overlay/useAnchoredPosition.js";
3
+ import { PopoverContext, usePopoverContext } from "./PopoverContext.js";
4
+ import { PopoverPortalLayer } from "./PopoverPortalLayer.js";
5
+ import { PopoverSurface } from "./PopoverSurface.js";
6
+ import { memo, useCallback, useEffect, useState } from "react";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import { popoverStyles } from "../../../generated/styles";
9
+ import { Easing, useAnimatedStyle, useDerivedValue, withTiming } from "react-native-reanimated";
10
+ //#region src/components/Popover/PopoverContent.tsx
11
+ const ARROW_HEIGHT = 12;
12
+ const ARROW_WIDTH = 22;
13
+ const ANIMATION_DURATION = 200;
14
+ /**
15
+ * Floating content surface for {@link Popover}.
16
+ *
17
+ * Renders the anchored surface, arrow, optional dismiss button, blur/elevation
18
+ * background, and open/close transition in a full-window portal layer.
19
+ */
20
+ const PopoverContent = memo(function PopoverContent({ children, maxWidth, maxHeight, style, onLayout, ...props }) {
21
+ const context = usePopoverContext();
22
+ const { align, alignOffset, avoidCollisions, collisionPadding, dismissible, hideArrow, insets, offset, open, placement, reduceMotion, sameWidth, setOpen, triggerRect, width } = context;
23
+ const [contentSize, setContentSize] = useState({
24
+ width: 0,
25
+ height: 0
26
+ });
27
+ const [shouldRender, setShouldRender] = useState(open);
28
+ const dismiss = useCallback(() => setOpen(false), [setOpen]);
29
+ const { contentStyle, arrowStyle, anchorReady, resolvedPlacement, maxWidth: positionedMaxWidth } = useAnchoredPosition({
30
+ triggerRect,
31
+ contentSize,
32
+ placement,
33
+ align,
34
+ offset: offset + (hideArrow ? 0 : ARROW_HEIGHT),
35
+ alignOffset,
36
+ avoidCollisions,
37
+ collisionPadding,
38
+ width,
39
+ sameWidth,
40
+ insets,
41
+ arrowHeight: ARROW_HEIGHT,
42
+ arrowWidth: ARROW_WIDTH
43
+ });
44
+ const isPositionedOpen = open && anchorReady && contentSize.height > 0;
45
+ const animationDistance = Math.min(offset, 12);
46
+ const animationSide = resolvedPlacement.split("-")[0];
47
+ const shouldAnimateVertically = animationSide === "top" || animationSide === "bottom";
48
+ const animationTranslate = (animationSide === "top" || animationSide === "start" ? 1 : -1) * animationDistance;
49
+ const progress = useDerivedValue(() => withTiming(isPositionedOpen ? 1 : 0, {
50
+ duration: reduceMotion ? 0 : ANIMATION_DURATION,
51
+ easing: Easing.out(Easing.ease)
52
+ }), [isPositionedOpen, reduceMotion]);
53
+ const animatedStyle = useAnimatedStyle(() => {
54
+ return {
55
+ opacity: progress.value,
56
+ transform: [{ scale: .97 + progress.value * .03 }, shouldAnimateVertically ? { translateY: animationTranslate * (1 - progress.value) } : { translateX: animationTranslate * (1 - progress.value) }]
57
+ };
58
+ });
59
+ const handleLayout = useCallback((event) => {
60
+ const { width: layoutWidth, height: layoutHeight } = event.nativeEvent.layout;
61
+ setContentSize({
62
+ width: layoutWidth,
63
+ height: layoutHeight
64
+ });
65
+ onLayout?.(event);
66
+ }, [onLayout]);
67
+ useEffect(() => {
68
+ if (open) {
69
+ setShouldRender(true);
70
+ return;
71
+ }
72
+ if (reduceMotion) {
73
+ setShouldRender(false);
74
+ setContentSize({
75
+ width: 0,
76
+ height: 0
77
+ });
78
+ return;
79
+ }
80
+ const timeout = setTimeout(() => {
81
+ setShouldRender(false);
82
+ setContentSize({
83
+ width: 0,
84
+ height: 0
85
+ });
86
+ }, ANIMATION_DURATION);
87
+ return () => clearTimeout(timeout);
88
+ }, [open, reduceMotion]);
89
+ popoverStyles.useVariants({});
90
+ if (!shouldRender) return null;
91
+ return /* @__PURE__ */ jsx(PopoverPortalLayer, {
92
+ open,
93
+ dismissible,
94
+ onDismiss: dismiss,
95
+ children: (layerDismiss) => {
96
+ const surface = /* @__PURE__ */ jsx(PopoverSurface, {
97
+ animatedStyle,
98
+ arrowHeight: ARROW_HEIGHT,
99
+ arrowStyle,
100
+ arrowWidth: ARROW_WIDTH,
101
+ contentSize,
102
+ contentStyle,
103
+ maxHeight,
104
+ maxWidth,
105
+ onDismiss: layerDismiss,
106
+ onLayout: handleLayout,
107
+ positionedMaxWidth,
108
+ resolvedPlacement,
109
+ style,
110
+ ...props,
111
+ children
112
+ });
113
+ return /* @__PURE__ */ jsx(PopoverContext.Provider, {
114
+ value: context,
115
+ children: surface
116
+ });
117
+ }
118
+ });
119
+ });
120
+ PopoverContent.displayName = "PopoverContent";
121
+ //#endregion
122
+ export { PopoverContent };
123
+
124
+ //# sourceMappingURL=PopoverContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverContent.js","names":[],"sources":["../../../src/components/Popover/PopoverContent.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useState } from 'react';\nimport type { LayoutChangeEvent } from 'react-native';\nimport { Easing, useAnimatedStyle, useDerivedValue, withTiming } from 'react-native-reanimated';\n\nimport { popoverStyles } from '../../../generated/styles';\nimport { useAnchoredPosition } from '../internal/Overlay';\nimport { PopoverContext, usePopoverContext } from './PopoverContext';\nimport { PopoverPortalLayer } from './PopoverPortalLayer';\nimport { PopoverSurface } from './PopoverSurface';\nimport type { PopoverContentProps } from './types';\n\nconst ARROW_HEIGHT = 12;\nconst ARROW_WIDTH = 22;\nconst ANIMATION_DURATION = 200;\n\n/**\n * Floating content surface for {@link Popover}.\n *\n * Renders the anchored surface, arrow, optional dismiss button, blur/elevation\n * background, and open/close transition in a full-window portal layer.\n */\nconst PopoverContent = memo(function PopoverContent({\n children,\n maxWidth,\n maxHeight,\n style,\n onLayout,\n ...props\n}: PopoverContentProps) {\n const context = usePopoverContext();\n const {\n align,\n alignOffset,\n avoidCollisions,\n collisionPadding,\n dismissible,\n hideArrow,\n insets,\n offset,\n open,\n placement,\n reduceMotion,\n sameWidth,\n setOpen,\n triggerRect,\n width,\n } = context;\n const [contentSize, setContentSize] = useState({ width: 0, height: 0 });\n const [shouldRender, setShouldRender] = useState(open);\n const dismiss = useCallback(() => setOpen(false), [setOpen]);\n\n const {\n contentStyle,\n arrowStyle,\n anchorReady,\n resolvedPlacement,\n maxWidth: positionedMaxWidth,\n } = useAnchoredPosition({\n triggerRect,\n contentSize,\n placement,\n align,\n offset: offset + (hideArrow ? 0 : ARROW_HEIGHT),\n alignOffset,\n avoidCollisions,\n collisionPadding,\n width,\n sameWidth,\n insets,\n arrowHeight: ARROW_HEIGHT,\n arrowWidth: ARROW_WIDTH,\n });\n\n const isPositionedOpen = open && anchorReady && contentSize.height > 0;\n const animationDistance = Math.min(offset, 12);\n const animationSide = resolvedPlacement.split('-')[0] as 'top' | 'bottom' | 'start' | 'end';\n const shouldAnimateVertically = animationSide === 'top' || animationSide === 'bottom';\n const animationDirection = animationSide === 'top' || animationSide === 'start' ? 1 : -1;\n const animationTranslate = animationDirection * animationDistance;\n\n const progress = useDerivedValue(\n () =>\n withTiming(isPositionedOpen ? 1 : 0, {\n duration: reduceMotion ? 0 : ANIMATION_DURATION,\n easing: Easing.out(Easing.ease),\n }),\n [isPositionedOpen, reduceMotion],\n );\n\n const animatedStyle = useAnimatedStyle(() => {\n return {\n opacity: progress.value,\n transform: [\n {\n scale: 0.97 + progress.value * 0.03,\n },\n shouldAnimateVertically\n ? { translateY: animationTranslate * (1 - progress.value) }\n : { translateX: animationTranslate * (1 - progress.value) },\n ],\n };\n });\n\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n const { width: layoutWidth, height: layoutHeight } = event.nativeEvent.layout;\n setContentSize({ width: layoutWidth, height: layoutHeight });\n onLayout?.(event);\n },\n [onLayout],\n );\n\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n return;\n }\n\n if (reduceMotion) {\n setShouldRender(false);\n setContentSize({ width: 0, height: 0 });\n return;\n }\n\n const timeout = setTimeout(() => {\n setShouldRender(false);\n setContentSize({ width: 0, height: 0 });\n }, ANIMATION_DURATION);\n\n return () => clearTimeout(timeout);\n }, [open, reduceMotion]);\n\n popoverStyles.useVariants({});\n\n if (!shouldRender) {\n return null;\n }\n\n return (\n <PopoverPortalLayer open={open} dismissible={dismissible} onDismiss={dismiss}>\n {(layerDismiss) => {\n const surface = (\n <PopoverSurface\n animatedStyle={animatedStyle}\n arrowHeight={ARROW_HEIGHT}\n arrowStyle={arrowStyle}\n arrowWidth={ARROW_WIDTH}\n contentSize={contentSize}\n contentStyle={contentStyle}\n maxHeight={maxHeight}\n maxWidth={maxWidth}\n onDismiss={layerDismiss}\n onLayout={handleLayout}\n positionedMaxWidth={positionedMaxWidth}\n resolvedPlacement={resolvedPlacement}\n style={style}\n {...props}\n >\n {children}\n </PopoverSurface>\n );\n\n return <PopoverContext.Provider value={context}>{surface}</PopoverContext.Provider>;\n }}\n </PopoverPortalLayer>\n );\n});\n\nPopoverContent.displayName = 'PopoverContent';\n\nexport { PopoverContent };\n"],"mappings":";;;;;;;;;;AAWA,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,qBAAqB;;;;;;;AAQ3B,MAAM,iBAAiB,KAAK,SAAS,eAAe,EAClD,UACA,UACA,WACA,OACA,UACA,GAAG,SACmB;CACtB,MAAM,UAAU,mBAAmB;CACnC,MAAM,EACJ,OACA,aACA,iBACA,kBACA,aACA,WACA,QACA,QACA,MACA,WACA,cACA,WACA,SACA,aACA,UACE;CACJ,MAAM,CAAC,aAAa,kBAAkB,SAAS;EAAE,OAAO;EAAG,QAAQ;EAAG,CAAC;CACvE,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,UAAU,kBAAkB,QAAQ,MAAM,EAAE,CAAC,QAAQ,CAAC;CAE5D,MAAM,EACJ,cACA,YACA,aACA,mBACA,UAAU,uBACR,oBAAoB;EACtB;EACA;EACA;EACA;EACA,QAAQ,UAAU,YAAY,IAAI;EAClC;EACA;EACA;EACA;EACA;EACA;EACA,aAAa;EACb,YAAY;EACb,CAAC;CAEF,MAAM,mBAAmB,QAAQ,eAAe,YAAY,SAAS;CACrE,MAAM,oBAAoB,KAAK,IAAI,QAAQ,GAAG;CAC9C,MAAM,gBAAgB,kBAAkB,MAAM,IAAI,CAAC;CACnD,MAAM,0BAA0B,kBAAkB,SAAS,kBAAkB;CAE7E,MAAM,sBADqB,kBAAkB,SAAS,kBAAkB,UAAU,IAAI,MACtC;CAEhD,MAAM,WAAW,sBAEb,WAAW,mBAAmB,IAAI,GAAG;EACnC,UAAU,eAAe,IAAI;EAC7B,QAAQ,OAAO,IAAI,OAAO,KAAK;EAChC,CAAC,EACJ,CAAC,kBAAkB,aAAa,CACjC;CAED,MAAM,gBAAgB,uBAAuB;EAC3C,OAAO;GACL,SAAS,SAAS;GAClB,WAAW,CACT,EACE,OAAO,MAAO,SAAS,QAAQ,KAChC,EACD,0BACI,EAAE,YAAY,sBAAsB,IAAI,SAAS,QAAQ,GACzD,EAAE,YAAY,sBAAsB,IAAI,SAAS,QAAQ,CAC9D;GACF;GACD;CAEF,MAAM,eAAe,aAClB,UAA6B;EAC5B,MAAM,EAAE,OAAO,aAAa,QAAQ,iBAAiB,MAAM,YAAY;EACvE,eAAe;GAAE,OAAO;GAAa,QAAQ;GAAc,CAAC;EAC5D,WAAW,MAAM;IAEnB,CAAC,SAAS,CACX;CAED,gBAAgB;EACd,IAAI,MAAM;GACR,gBAAgB,KAAK;GACrB;;EAGF,IAAI,cAAc;GAChB,gBAAgB,MAAM;GACtB,eAAe;IAAE,OAAO;IAAG,QAAQ;IAAG,CAAC;GACvC;;EAGF,MAAM,UAAU,iBAAiB;GAC/B,gBAAgB,MAAM;GACtB,eAAe;IAAE,OAAO;IAAG,QAAQ;IAAG,CAAC;KACtC,mBAAmB;EAEtB,aAAa,aAAa,QAAQ;IACjC,CAAC,MAAM,aAAa,CAAC;CAExB,cAAc,YAAY,EAAE,CAAC;CAE7B,IAAI,CAAC,cACH,OAAO;CAGT,OACE,oBAAC,oBAAD;EAA0B;EAAmB;EAAa,WAAW;aACjE,iBAAiB;GACjB,MAAM,UACJ,oBAAC,gBAAD;IACiB;IACf,aAAa;IACD;IACZ,YAAY;IACC;IACC;IACH;IACD;IACV,WAAW;IACX,UAAU;IACU;IACD;IACZ;IACP,GAAI;IAEH;IACc,CAAA;GAGnB,OAAO,oBAAC,eAAe,UAAhB;IAAyB,OAAO;cAAU;IAAkC,CAAA;;EAElE,CAAA;EAEvB;AAEF,eAAe,cAAc"}
@@ -0,0 +1,14 @@
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
+ let react = require("react");
5
+ //#region src/components/Popover/PopoverContext.tsx
6
+ const PopoverContext = (0, react.createContext)(null);
7
+ function usePopoverContext() {
8
+ const context = (0, react.useContext)(PopoverContext);
9
+ if (!context) throw new Error("Popover components must be used inside a Popover.");
10
+ return context;
11
+ }
12
+ //#endregion
13
+ exports.PopoverContext = PopoverContext;
14
+ exports.usePopoverContext = usePopoverContext;
@@ -0,0 +1,10 @@
1
+
2
+ import { PopoverContextValue } from "./types.cjs";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/PopoverContext.d.ts
6
+ declare const PopoverContext: _$react.Context<PopoverContextValue | null>;
7
+ declare function usePopoverContext(): PopoverContextValue;
8
+ //#endregion
9
+ export { PopoverContext, usePopoverContext };
10
+ //# sourceMappingURL=PopoverContext.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverContext.d.cts","names":[],"sources":["../../../src/components/Popover/PopoverContext.tsx"],"mappings":";;;;;cAIM,cAAA,EAAc,OAAA,CAAA,OAAA,CAAA,mBAAA;AAAA,iBAEX,iBAAA,CAAA,GAAqB,mBAAA"}
@@ -0,0 +1,10 @@
1
+
2
+ import { PopoverContextValue } from "./types.js";
3
+ import * as _$react from "react";
4
+
5
+ //#region src/components/Popover/PopoverContext.d.ts
6
+ declare const PopoverContext: _$react.Context<PopoverContextValue | null>;
7
+ declare function usePopoverContext(): PopoverContextValue;
8
+ //#endregion
9
+ export { PopoverContext, usePopoverContext };
10
+ //# sourceMappingURL=PopoverContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PopoverContext.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverContext.tsx"],"mappings":";;;;;cAIM,cAAA,EAAc,OAAA,CAAA,OAAA,CAAA,mBAAA;AAAA,iBAEX,iBAAA,CAAA,GAAqB,mBAAA"}