@yahoo/uds-mobile 2.16.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/fixtures/dist/index.mjs +14 -0
- 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/Toast.cjs +141 -0
- package/dist/components/Toast/Toast.d.cts +38 -0
- package/dist/components/Toast/Toast.d.cts.map +1 -0
- package/dist/components/Toast/Toast.d.ts +38 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/Toast.js +141 -0
- package/dist/components/Toast/Toast.js.map +1 -0
- package/dist/components/Toast/ToastAnimatedItem.cjs +88 -0
- package/dist/components/Toast/ToastAnimatedItem.d.cts +27 -0
- package/dist/components/Toast/ToastAnimatedItem.d.cts.map +1 -0
- package/dist/components/Toast/ToastAnimatedItem.d.ts +27 -0
- package/dist/components/Toast/ToastAnimatedItem.d.ts.map +1 -0
- package/dist/components/Toast/ToastAnimatedItem.js +87 -0
- package/dist/components/Toast/ToastAnimatedItem.js.map +1 -0
- package/dist/components/Toast/ToastItem.cjs +35 -0
- package/dist/components/Toast/ToastItem.d.cts +25 -0
- package/dist/components/Toast/ToastItem.d.cts.map +1 -0
- package/dist/components/Toast/ToastItem.d.ts +25 -0
- package/dist/components/Toast/ToastItem.d.ts.map +1 -0
- package/dist/components/Toast/ToastItem.js +35 -0
- package/dist/components/Toast/ToastItem.js.map +1 -0
- package/dist/components/Toast/ToastProvider.cjs +144 -0
- package/dist/components/Toast/ToastProvider.d.cts +58 -0
- package/dist/components/Toast/ToastProvider.d.cts.map +1 -0
- package/dist/components/Toast/ToastProvider.d.ts +58 -0
- package/dist/components/Toast/ToastProvider.d.ts.map +1 -0
- package/dist/components/Toast/ToastProvider.js +143 -0
- package/dist/components/Toast/ToastProvider.js.map +1 -0
- package/dist/components/Toast/ToastViewport.cjs +48 -0
- package/dist/components/Toast/ToastViewport.d.cts +42 -0
- package/dist/components/Toast/ToastViewport.d.cts.map +1 -0
- package/dist/components/Toast/ToastViewport.d.ts +42 -0
- package/dist/components/Toast/ToastViewport.d.ts.map +1 -0
- package/dist/components/Toast/ToastViewport.js +48 -0
- package/dist/components/Toast/ToastViewport.js.map +1 -0
- package/dist/components/Toast/createToast.cjs +21 -0
- package/dist/components/Toast/createToast.d.cts +10 -0
- package/dist/components/Toast/createToast.d.cts.map +1 -0
- package/dist/components/Toast/createToast.d.ts +10 -0
- package/dist/components/Toast/createToast.d.ts.map +1 -0
- package/dist/components/Toast/createToast.js +20 -0
- package/dist/components/Toast/createToast.js.map +1 -0
- package/dist/components/Toast/index.cjs +10 -0
- package/dist/components/Toast/index.d.cts +6 -0
- package/dist/components/Toast/index.d.ts +6 -0
- package/dist/components/Toast/index.js +5 -0
- package/dist/components/Toast/types.cjs +1 -0
- package/dist/components/Toast/types.d.cts +113 -0
- package/dist/components/Toast/types.d.cts.map +1 -0
- package/dist/components/Toast/types.d.ts +113 -0
- package/dist/components/Toast/types.d.ts.map +1 -0
- package/dist/components/Toast/types.js +1 -0
- package/dist/components/Toast/useToastController.cjs +286 -0
- package/dist/components/Toast/useToastController.d.cts +25 -0
- package/dist/components/Toast/useToastController.d.cts.map +1 -0
- package/dist/components/Toast/useToastController.d.ts +25 -0
- package/dist/components/Toast/useToastController.d.ts.map +1 -0
- package/dist/components/Toast/useToastController.js +286 -0
- package/dist/components/Toast/useToastController.js.map +1 -0
- package/dist/components/Toast/utils.cjs +69 -0
- package/dist/components/Toast/utils.d.cts +27 -0
- package/dist/components/Toast/utils.d.cts.map +1 -0
- package/dist/components/Toast/utils.d.ts +27 -0
- package/dist/components/Toast/utils.d.ts.map +1 -0
- package/dist/components/Toast/utils.js +55 -0
- package/dist/components/Toast/utils.js.map +1 -0
- 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/gesture-handler.cjs +38 -0
- package/dist/jest/mocks/gesture-handler.d.cts +41 -0
- package/dist/jest/mocks/gesture-handler.d.cts.map +1 -0
- package/dist/jest/mocks/gesture-handler.d.ts +41 -0
- package/dist/jest/mocks/gesture-handler.d.ts.map +1 -0
- package/dist/jest/mocks/gesture-handler.js +37 -0
- package/dist/jest/mocks/gesture-handler.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/safe-area-context.cjs +35 -0
- package/dist/jest/mocks/safe-area-context.d.cts +43 -0
- package/dist/jest/mocks/safe-area-context.d.cts.map +1 -0
- package/dist/jest/mocks/safe-area-context.d.ts +43 -0
- package/dist/jest/mocks/safe-area-context.d.ts.map +1 -0
- package/dist/jest/mocks/safe-area-context.js +32 -0
- package/dist/jest/mocks/safe-area-context.js.map +1 -0
- package/dist/jest/mocks/screens.cjs +8 -0
- package/dist/jest/mocks/screens.d.cts +12 -0
- package/dist/jest/mocks/screens.d.cts.map +1 -0
- package/dist/jest/mocks/screens.d.ts +12 -0
- package/dist/jest/mocks/screens.d.ts.map +1 -0
- package/dist/jest/mocks/screens.js +9 -0
- package/dist/jest/mocks/screens.js.map +1 -0
- package/dist/jest/mocks/styles.cjs +98 -1
- package/dist/jest/mocks/styles.d.cts +6 -2
- package/dist/jest/mocks/styles.d.cts.map +1 -1
- package/dist/jest/mocks/styles.d.ts +6 -2
- package/dist/jest/mocks/styles.d.ts.map +1 -1
- package/dist/jest/mocks/styles.js +95 -2
- 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 +4 -1
- package/dist/types/dist/index.d.cts.map +1 -1
- package/dist/types/dist/index.d.ts +4 -1
- package/dist/types/dist/index.d.ts.map +1 -1
- package/fonts/index.cjs +211 -211
- package/fonts/index.mjs +211 -211
- 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 +21 -1
|
@@ -0,0 +1,88 @@
|
|
|
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_Popover_PopoverContext = require("./PopoverContext.cjs");
|
|
5
|
+
let react = require("react");
|
|
6
|
+
//#region src/components/Popover/PopoverTrigger.tsx
|
|
7
|
+
function assignRef(ref, value) {
|
|
8
|
+
if (!ref) return;
|
|
9
|
+
if (typeof ref === "function") {
|
|
10
|
+
ref(value);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
ref.current = value;
|
|
14
|
+
}
|
|
15
|
+
function measureInRoot(measurable, onMeasure) {
|
|
16
|
+
if (!measurable?.measure) return false;
|
|
17
|
+
measurable.measure((x, y, width, height, pageX, pageY) => {
|
|
18
|
+
onMeasure({
|
|
19
|
+
x: typeof pageX === "number" ? pageX : x,
|
|
20
|
+
y: typeof pageY === "number" ? pageY : y,
|
|
21
|
+
width,
|
|
22
|
+
height
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
function measureInWindow(measurable, onMeasure) {
|
|
28
|
+
if (!measurable?.measureInWindow) return false;
|
|
29
|
+
measurable.measureInWindow((x, y, width, height) => {
|
|
30
|
+
onMeasure({
|
|
31
|
+
x,
|
|
32
|
+
y,
|
|
33
|
+
width,
|
|
34
|
+
height
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
function measureTrigger(node, fallbackRect, onMeasure) {
|
|
40
|
+
const measurable = node;
|
|
41
|
+
if (measureInRoot(measurable, onMeasure)) return;
|
|
42
|
+
if (measureInWindow(measurable, onMeasure)) return;
|
|
43
|
+
if (fallbackRect) onMeasure(fallbackRect);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Trigger element for {@link Popover}.
|
|
47
|
+
*
|
|
48
|
+
* Clones the rendered element with press, measurement, and accessibility props.
|
|
49
|
+
* The popover is anchored to this element when it opens.
|
|
50
|
+
*/
|
|
51
|
+
const PopoverTrigger = (0, react.memo)(function PopoverTrigger({ render }) {
|
|
52
|
+
const context = require_components_Popover_PopoverContext.usePopoverContext();
|
|
53
|
+
const renderRef = render.ref ?? render.props.ref;
|
|
54
|
+
return (0, react.cloneElement)(render, {
|
|
55
|
+
ref: (0, react.useCallback)((node) => {
|
|
56
|
+
context.triggerRef.current = node;
|
|
57
|
+
assignRef(renderRef, node);
|
|
58
|
+
}, [context.triggerRef, renderRef]),
|
|
59
|
+
onLayout: (0, react.useCallback)((event) => {
|
|
60
|
+
render.props.onLayout?.(event);
|
|
61
|
+
const { x, y, width, height } = event.nativeEvent.layout;
|
|
62
|
+
context.setTriggerRect({
|
|
63
|
+
x,
|
|
64
|
+
y,
|
|
65
|
+
width,
|
|
66
|
+
height
|
|
67
|
+
});
|
|
68
|
+
}, [context, render.props]),
|
|
69
|
+
onPress: (0, react.useCallback)((event) => {
|
|
70
|
+
render.props.onPress?.(event);
|
|
71
|
+
if (context.open) {
|
|
72
|
+
context.setOpen(false);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
measureTrigger(context.triggerRef.current, context.triggerRect, (rect) => {
|
|
76
|
+
context.setTriggerRect(rect);
|
|
77
|
+
context.setOpen(true);
|
|
78
|
+
});
|
|
79
|
+
}, [context, render.props]),
|
|
80
|
+
accessibilityState: {
|
|
81
|
+
...render.props.accessibilityState,
|
|
82
|
+
expanded: context.open
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
PopoverTrigger.displayName = "PopoverTrigger";
|
|
87
|
+
//#endregion
|
|
88
|
+
exports.PopoverTrigger = PopoverTrigger;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { PopoverTriggerProps } from "./types.cjs";
|
|
3
|
+
import * as _$react from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Popover/PopoverTrigger.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Trigger element for {@link Popover}.
|
|
8
|
+
*
|
|
9
|
+
* Clones the rendered element with press, measurement, and accessibility props.
|
|
10
|
+
* The popover is anchored to this element when it opens.
|
|
11
|
+
*/
|
|
12
|
+
declare const PopoverTrigger: _$react.NamedExoticComponent<PopoverTriggerProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PopoverTrigger };
|
|
15
|
+
//# sourceMappingURL=PopoverTrigger.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTrigger.d.cts","names":[],"sources":["../../../src/components/Popover/PopoverTrigger.tsx"],"mappings":";;;;;;;;AAMwE;;;cA0FlE,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
import { PopoverTriggerProps } from "./types.js";
|
|
3
|
+
import * as _$react from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Popover/PopoverTrigger.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Trigger element for {@link Popover}.
|
|
8
|
+
*
|
|
9
|
+
* Clones the rendered element with press, measurement, and accessibility props.
|
|
10
|
+
* The popover is anchored to this element when it opens.
|
|
11
|
+
*/
|
|
12
|
+
declare const PopoverTrigger: _$react.NamedExoticComponent<PopoverTriggerProps>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { PopoverTrigger };
|
|
15
|
+
//# sourceMappingURL=PopoverTrigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTrigger.d.ts","names":[],"sources":["../../../src/components/Popover/PopoverTrigger.tsx"],"mappings":";;;;;;;;AAMwE;;;cA0FlE,cAAA,EAAc,OAAA,CAAA,oBAAA,CAAA,mBAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { usePopoverContext } from "./PopoverContext.js";
|
|
3
|
+
import { cloneElement, memo, useCallback } from "react";
|
|
4
|
+
//#region src/components/Popover/PopoverTrigger.tsx
|
|
5
|
+
function assignRef(ref, value) {
|
|
6
|
+
if (!ref) return;
|
|
7
|
+
if (typeof ref === "function") {
|
|
8
|
+
ref(value);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
ref.current = value;
|
|
12
|
+
}
|
|
13
|
+
function measureInRoot(measurable, onMeasure) {
|
|
14
|
+
if (!measurable?.measure) return false;
|
|
15
|
+
measurable.measure((x, y, width, height, pageX, pageY) => {
|
|
16
|
+
onMeasure({
|
|
17
|
+
x: typeof pageX === "number" ? pageX : x,
|
|
18
|
+
y: typeof pageY === "number" ? pageY : y,
|
|
19
|
+
width,
|
|
20
|
+
height
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
function measureInWindow(measurable, onMeasure) {
|
|
26
|
+
if (!measurable?.measureInWindow) return false;
|
|
27
|
+
measurable.measureInWindow((x, y, width, height) => {
|
|
28
|
+
onMeasure({
|
|
29
|
+
x,
|
|
30
|
+
y,
|
|
31
|
+
width,
|
|
32
|
+
height
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
function measureTrigger(node, fallbackRect, onMeasure) {
|
|
38
|
+
const measurable = node;
|
|
39
|
+
if (measureInRoot(measurable, onMeasure)) return;
|
|
40
|
+
if (measureInWindow(measurable, onMeasure)) return;
|
|
41
|
+
if (fallbackRect) onMeasure(fallbackRect);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Trigger element for {@link Popover}.
|
|
45
|
+
*
|
|
46
|
+
* Clones the rendered element with press, measurement, and accessibility props.
|
|
47
|
+
* The popover is anchored to this element when it opens.
|
|
48
|
+
*/
|
|
49
|
+
const PopoverTrigger = memo(function PopoverTrigger({ render }) {
|
|
50
|
+
const context = usePopoverContext();
|
|
51
|
+
const renderRef = render.ref ?? render.props.ref;
|
|
52
|
+
return cloneElement(render, {
|
|
53
|
+
ref: useCallback((node) => {
|
|
54
|
+
context.triggerRef.current = node;
|
|
55
|
+
assignRef(renderRef, node);
|
|
56
|
+
}, [context.triggerRef, renderRef]),
|
|
57
|
+
onLayout: useCallback((event) => {
|
|
58
|
+
render.props.onLayout?.(event);
|
|
59
|
+
const { x, y, width, height } = event.nativeEvent.layout;
|
|
60
|
+
context.setTriggerRect({
|
|
61
|
+
x,
|
|
62
|
+
y,
|
|
63
|
+
width,
|
|
64
|
+
height
|
|
65
|
+
});
|
|
66
|
+
}, [context, render.props]),
|
|
67
|
+
onPress: useCallback((event) => {
|
|
68
|
+
render.props.onPress?.(event);
|
|
69
|
+
if (context.open) {
|
|
70
|
+
context.setOpen(false);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
measureTrigger(context.triggerRef.current, context.triggerRect, (rect) => {
|
|
74
|
+
context.setTriggerRect(rect);
|
|
75
|
+
context.setOpen(true);
|
|
76
|
+
});
|
|
77
|
+
}, [context, render.props]),
|
|
78
|
+
accessibilityState: {
|
|
79
|
+
...render.props.accessibilityState,
|
|
80
|
+
expanded: context.open
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
PopoverTrigger.displayName = "PopoverTrigger";
|
|
85
|
+
//#endregion
|
|
86
|
+
export { PopoverTrigger };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=PopoverTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PopoverTrigger.js","names":[],"sources":["../../../src/components/Popover/PopoverTrigger.tsx"],"sourcesContent":["/* eslint-disable react/prop-types -- render-prop child props are validated by TypeScript. */\nimport type { Ref } from 'react';\nimport { cloneElement, memo, useCallback } from 'react';\nimport type { GestureResponderEvent, LayoutChangeEvent, View } from 'react-native';\n\nimport { usePopoverContext } from './PopoverContext';\nimport type { PopoverContextValue, PopoverTriggerProps } from './types';\n\ntype MeasurableView = View & {\n measureInWindow?: (\n callback: (x: number, y: number, width: number, height: number) => void,\n ) => void;\n measure?: (\n callback: (\n x: number,\n y: number,\n width: number,\n height: number,\n pageX: number,\n pageY: number,\n ) => void,\n ) => void;\n};\n\nfunction assignRef(ref: Ref<View> | undefined, value: View | null): void {\n if (!ref) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n\n (ref as { current: View | null }).current = value;\n}\n\nfunction measureInRoot(\n measurable: MeasurableView | null,\n onMeasure: (rect: NonNullable<PopoverContextValue['triggerRect']>) => void,\n): boolean {\n if (!measurable?.measure) {\n return false;\n }\n\n measurable.measure((x, y, width, height, pageX, pageY) => {\n onMeasure({\n x: typeof pageX === 'number' ? pageX : x,\n y: typeof pageY === 'number' ? pageY : y,\n width,\n height,\n });\n });\n return true;\n}\n\nfunction measureInWindow(\n measurable: MeasurableView | null,\n onMeasure: (rect: NonNullable<PopoverContextValue['triggerRect']>) => void,\n): boolean {\n if (!measurable?.measureInWindow) {\n return false;\n }\n\n measurable.measureInWindow((x, y, width, height) => {\n onMeasure({ x, y, width, height });\n });\n return true;\n}\n\nfunction measureTrigger(\n node: View | null,\n fallbackRect: PopoverContextValue['triggerRect'],\n onMeasure: (rect: NonNullable<PopoverContextValue['triggerRect']>) => void,\n): void {\n const measurable = node as MeasurableView | null;\n\n if (measureInRoot(measurable, onMeasure)) {\n return;\n }\n\n if (measureInWindow(measurable, onMeasure)) {\n return;\n }\n\n if (fallbackRect) {\n onMeasure(fallbackRect);\n }\n}\n\n/**\n * Trigger element for {@link Popover}.\n *\n * Clones the rendered element with press, measurement, and accessibility props.\n * The popover is anchored to this element when it opens.\n */\nconst PopoverTrigger = memo(function PopoverTrigger({ render }: PopoverTriggerProps) {\n const context = usePopoverContext();\n const renderRef = (render as typeof render & { ref?: Ref<View> }).ref ?? render.props.ref;\n\n const handleRef = useCallback(\n (node: View | null) => {\n context.triggerRef.current = node;\n assignRef(renderRef, node);\n },\n [context.triggerRef, renderRef],\n );\n\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n render.props.onLayout?.(event);\n\n const { x, y, width, height } = event.nativeEvent.layout;\n context.setTriggerRect({ x, y, width, height });\n },\n [context, render.props],\n );\n\n const handlePress = useCallback(\n (event: GestureResponderEvent) => {\n render.props.onPress?.(event);\n\n if (context.open) {\n context.setOpen(false);\n return;\n }\n\n measureTrigger(context.triggerRef.current, context.triggerRect, (rect) => {\n context.setTriggerRect(rect);\n context.setOpen(true);\n });\n },\n [context, render.props],\n );\n\n return cloneElement(render, {\n ref: handleRef,\n onLayout: handleLayout,\n onPress: handlePress,\n accessibilityState: {\n ...render.props.accessibilityState,\n expanded: context.open,\n },\n });\n});\n\nPopoverTrigger.displayName = 'PopoverTrigger';\n\nexport { PopoverTrigger };\n"],"mappings":";;;;AAwBA,SAAS,UAAU,KAA4B,OAA0B;CACvE,IAAI,CAAC,KACH;CAGF,IAAI,OAAO,QAAQ,YAAY;EAC7B,IAAI,MAAM;EACV;;CAGF,IAAkC,UAAU;;AAG9C,SAAS,cACP,YACA,WACS;CACT,IAAI,CAAC,YAAY,SACf,OAAO;CAGT,WAAW,SAAS,GAAG,GAAG,OAAO,QAAQ,OAAO,UAAU;EACxD,UAAU;GACR,GAAG,OAAO,UAAU,WAAW,QAAQ;GACvC,GAAG,OAAO,UAAU,WAAW,QAAQ;GACvC;GACA;GACD,CAAC;GACF;CACF,OAAO;;AAGT,SAAS,gBACP,YACA,WACS;CACT,IAAI,CAAC,YAAY,iBACf,OAAO;CAGT,WAAW,iBAAiB,GAAG,GAAG,OAAO,WAAW;EAClD,UAAU;GAAE;GAAG;GAAG;GAAO;GAAQ,CAAC;GAClC;CACF,OAAO;;AAGT,SAAS,eACP,MACA,cACA,WACM;CACN,MAAM,aAAa;CAEnB,IAAI,cAAc,YAAY,UAAU,EACtC;CAGF,IAAI,gBAAgB,YAAY,UAAU,EACxC;CAGF,IAAI,cACF,UAAU,aAAa;;;;;;;;AAU3B,MAAM,iBAAiB,KAAK,SAAS,eAAe,EAAE,UAA+B;CACnF,MAAM,UAAU,mBAAmB;CACnC,MAAM,YAAa,OAA+C,OAAO,OAAO,MAAM;CAqCtF,OAAO,aAAa,QAAQ;EAC1B,KApCgB,aACf,SAAsB;GACrB,QAAQ,WAAW,UAAU;GAC7B,UAAU,WAAW,KAAK;KAE5B,CAAC,QAAQ,YAAY,UAAU,CA+BjB;EACd,UA7BmB,aAClB,UAA6B;GAC5B,OAAO,MAAM,WAAW,MAAM;GAE9B,MAAM,EAAE,GAAG,GAAG,OAAO,WAAW,MAAM,YAAY;GAClD,QAAQ,eAAe;IAAE;IAAG;IAAG;IAAO;IAAQ,CAAC;KAEjD,CAAC,SAAS,OAAO,MAAM,CAsBD;EACtB,SApBkB,aACjB,UAAiC;GAChC,OAAO,MAAM,UAAU,MAAM;GAE7B,IAAI,QAAQ,MAAM;IAChB,QAAQ,QAAQ,MAAM;IACtB;;GAGF,eAAe,QAAQ,WAAW,SAAS,QAAQ,cAAc,SAAS;IACxE,QAAQ,eAAe,KAAK;IAC5B,QAAQ,QAAQ,KAAK;KACrB;KAEJ,CAAC,SAAS,OAAO,MAAM,CAMH;EACpB,oBAAoB;GAClB,GAAG,OAAO,MAAM;GAChB,UAAU,QAAQ;GACnB;EACF,CAAC;EACF;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
|
+
const require_components_Popover_Popover = require("./Popover.cjs");
|
|
4
|
+
const require_components_Popover_PopoverContent = require("./PopoverContent.cjs");
|
|
5
|
+
const require_components_Popover_PopoverDescription = require("./PopoverDescription.cjs");
|
|
6
|
+
const require_components_Popover_PopoverDismiss = require("./PopoverDismiss.cjs");
|
|
7
|
+
const require_components_Popover_PopoverTitle = require("./PopoverTitle.cjs");
|
|
8
|
+
const require_components_Popover_PopoverTrigger = require("./PopoverTrigger.cjs");
|
|
9
|
+
exports.Popover = require_components_Popover_Popover.Popover;
|
|
10
|
+
exports.PopoverContent = require_components_Popover_PopoverContent.PopoverContent;
|
|
11
|
+
exports.PopoverDescription = require_components_Popover_PopoverDescription.PopoverDescription;
|
|
12
|
+
exports.PopoverDismiss = require_components_Popover_PopoverDismiss.PopoverDismiss;
|
|
13
|
+
exports.PopoverTitle = require_components_Popover_PopoverTitle.PopoverTitle;
|
|
14
|
+
exports.PopoverTrigger = require_components_Popover_PopoverTrigger.PopoverTrigger;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
import { PopoverContentProps, PopoverDescriptionProps, PopoverDismissProps, PopoverProps, PopoverTitleProps, PopoverTriggerProps } from "./types.cjs";
|
|
3
|
+
import { Popover } from "./Popover.cjs";
|
|
4
|
+
import { PopoverContent } from "./PopoverContent.cjs";
|
|
5
|
+
import { PopoverDescription } from "./PopoverDescription.cjs";
|
|
6
|
+
import { PopoverDismiss } from "./PopoverDismiss.cjs";
|
|
7
|
+
import { PopoverTitle } from "./PopoverTitle.cjs";
|
|
8
|
+
import { PopoverTrigger } from "./PopoverTrigger.cjs";
|
|
9
|
+
export { Popover, PopoverContent, type PopoverContentProps, PopoverDescription, type PopoverDescriptionProps, PopoverDismiss, type PopoverDismissProps, type PopoverProps, PopoverTitle, type PopoverTitleProps, PopoverTrigger, type PopoverTriggerProps };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
import { PopoverContentProps, PopoverDescriptionProps, PopoverDismissProps, PopoverProps, PopoverTitleProps, PopoverTriggerProps } from "./types.js";
|
|
3
|
+
import { Popover } from "./Popover.js";
|
|
4
|
+
import { PopoverContent } from "./PopoverContent.js";
|
|
5
|
+
import { PopoverDescription } from "./PopoverDescription.js";
|
|
6
|
+
import { PopoverDismiss } from "./PopoverDismiss.js";
|
|
7
|
+
import { PopoverTitle } from "./PopoverTitle.js";
|
|
8
|
+
import { PopoverTrigger } from "./PopoverTrigger.js";
|
|
9
|
+
export { Popover, PopoverContent, type PopoverContentProps, PopoverDescription, type PopoverDescriptionProps, PopoverDismiss, type PopoverDismissProps, type PopoverProps, PopoverTitle, type PopoverTitleProps, PopoverTrigger, type PopoverTriggerProps };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { Popover } from "./Popover.js";
|
|
3
|
+
import { PopoverContent } from "./PopoverContent.js";
|
|
4
|
+
import { PopoverDescription } from "./PopoverDescription.js";
|
|
5
|
+
import { PopoverDismiss } from "./PopoverDismiss.js";
|
|
6
|
+
import { PopoverTitle } from "./PopoverTitle.js";
|
|
7
|
+
import { PopoverTrigger } from "./PopoverTrigger.js";
|
|
8
|
+
export { Popover, PopoverContent, PopoverDescription, PopoverDismiss, PopoverTitle, PopoverTrigger };
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
//#region src/components/Popover/popoverFrameGeometry.ts
|
|
4
|
+
const ARROW_TIP_RADIUS_FRACTION = .3;
|
|
5
|
+
const arrowBaseEdgeByPlacement = {
|
|
6
|
+
bottom: "top",
|
|
7
|
+
left: "right",
|
|
8
|
+
right: "left",
|
|
9
|
+
top: "bottom"
|
|
10
|
+
};
|
|
11
|
+
function clamp(value, min, max) {
|
|
12
|
+
if (max < min) return min;
|
|
13
|
+
return Math.min(Math.max(value, min), max);
|
|
14
|
+
}
|
|
15
|
+
function resolvePopoverFramePlacement(placement, isRTL) {
|
|
16
|
+
const [side] = placement.split("-");
|
|
17
|
+
if (side === "top" || side === "bottom") return side;
|
|
18
|
+
if (side === "start") return isRTL ? "right" : "left";
|
|
19
|
+
return isRTL ? "left" : "right";
|
|
20
|
+
}
|
|
21
|
+
function formatNumber(value) {
|
|
22
|
+
const rounded = Number(value.toFixed(3));
|
|
23
|
+
return `${Object.is(rounded, -0) ? 0 : rounded}`;
|
|
24
|
+
}
|
|
25
|
+
function command(op, ...values) {
|
|
26
|
+
return `${op} ${values.map(formatNumber).join(" ")}`;
|
|
27
|
+
}
|
|
28
|
+
const moveTo = (x, y) => command("M", x, y);
|
|
29
|
+
const lineTo = (x, y) => command("L", x, y);
|
|
30
|
+
const quadTo = (controlX, controlY, x, y) => command("Q", controlX, controlY, x, y);
|
|
31
|
+
function path(...commands) {
|
|
32
|
+
return commands.join(" ");
|
|
33
|
+
}
|
|
34
|
+
function isVerticalPlacement(placement) {
|
|
35
|
+
return placement === "top" || placement === "bottom";
|
|
36
|
+
}
|
|
37
|
+
function getFrameStyle({ arrowHeight, frameHeight, frameWidth, placement }) {
|
|
38
|
+
if (placement === "bottom") return {
|
|
39
|
+
left: 0,
|
|
40
|
+
top: -arrowHeight,
|
|
41
|
+
width: frameWidth,
|
|
42
|
+
height: frameHeight
|
|
43
|
+
};
|
|
44
|
+
if (placement === "right") return {
|
|
45
|
+
left: -arrowHeight,
|
|
46
|
+
top: 0,
|
|
47
|
+
width: frameWidth,
|
|
48
|
+
height: frameHeight
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
left: 0,
|
|
52
|
+
top: 0,
|
|
53
|
+
width: frameWidth,
|
|
54
|
+
height: frameHeight
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function getFrameLayout({ arrowHeight, arrowOffset, arrowWidth, borderRadius, placement, strokeWidth, surfaceHeight, surfaceWidth }) {
|
|
58
|
+
const safeArrowHeight = Math.max(0, arrowHeight);
|
|
59
|
+
const requestedArrowWidth = Math.max(0, arrowWidth);
|
|
60
|
+
const safeStrokeWidth = Math.max(0, strokeWidth);
|
|
61
|
+
const safeSurfaceHeight = Math.max(0, surfaceHeight);
|
|
62
|
+
const safeSurfaceWidth = Math.max(0, surfaceWidth);
|
|
63
|
+
const verticalPlacement = isVerticalPlacement(placement);
|
|
64
|
+
const halfStroke = safeStrokeWidth / 2;
|
|
65
|
+
const radius = Math.min(Math.max(0, borderRadius), safeSurfaceWidth / 2, safeSurfaceHeight / 2);
|
|
66
|
+
const mainAxisSize = verticalPlacement ? safeSurfaceWidth : safeSurfaceHeight;
|
|
67
|
+
const availableArrowWidth = Math.max(0, mainAxisSize - radius * 2);
|
|
68
|
+
const resolvedArrowWidth = Math.min(requestedArrowWidth, availableArrowWidth);
|
|
69
|
+
const frameWidth = safeSurfaceWidth + (verticalPlacement ? 0 : safeArrowHeight);
|
|
70
|
+
const frameHeight = safeSurfaceHeight + (verticalPlacement ? safeArrowHeight : 0);
|
|
71
|
+
const surfaceOrigin = {
|
|
72
|
+
x: placement === "right" ? safeArrowHeight : 0,
|
|
73
|
+
y: placement === "bottom" ? safeArrowHeight : 0
|
|
74
|
+
};
|
|
75
|
+
const surface = {
|
|
76
|
+
left: surfaceOrigin.x + halfStroke,
|
|
77
|
+
top: surfaceOrigin.y + halfStroke,
|
|
78
|
+
right: surfaceOrigin.x + safeSurfaceWidth - halfStroke,
|
|
79
|
+
bottom: surfaceOrigin.y + safeSurfaceHeight - halfStroke
|
|
80
|
+
};
|
|
81
|
+
return {
|
|
82
|
+
arrowHeight: safeArrowHeight,
|
|
83
|
+
arrowOffset: clamp(arrowOffset, radius, mainAxisSize - radius - resolvedArrowWidth),
|
|
84
|
+
arrowWidth: resolvedArrowWidth,
|
|
85
|
+
frameStyle: getFrameStyle({
|
|
86
|
+
arrowHeight: safeArrowHeight,
|
|
87
|
+
frameHeight,
|
|
88
|
+
frameWidth,
|
|
89
|
+
placement
|
|
90
|
+
}),
|
|
91
|
+
halfStroke,
|
|
92
|
+
placement,
|
|
93
|
+
radius,
|
|
94
|
+
surface,
|
|
95
|
+
surfaceOrigin,
|
|
96
|
+
viewBox: `0 0 ${frameWidth} ${frameHeight}`
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function getArrowGeometry(layout) {
|
|
100
|
+
const { arrowHeight, arrowOffset, arrowWidth, halfStroke, placement, surface, surfaceOrigin } = layout;
|
|
101
|
+
const verticalPlacement = isVerticalPlacement(placement);
|
|
102
|
+
const start = (verticalPlacement ? surfaceOrigin.x : surfaceOrigin.y) + arrowOffset;
|
|
103
|
+
const end = start + arrowWidth;
|
|
104
|
+
const center = start + arrowWidth / 2;
|
|
105
|
+
if (verticalPlacement) return {
|
|
106
|
+
center,
|
|
107
|
+
end,
|
|
108
|
+
offset: arrowOffset,
|
|
109
|
+
start,
|
|
110
|
+
tip: placement === "bottom" ? halfStroke : surface.bottom + arrowHeight - halfStroke,
|
|
111
|
+
width: arrowWidth
|
|
112
|
+
};
|
|
113
|
+
return {
|
|
114
|
+
center,
|
|
115
|
+
end,
|
|
116
|
+
offset: arrowOffset,
|
|
117
|
+
start,
|
|
118
|
+
tip: placement === "right" ? halfStroke : surface.right + arrowHeight - halfStroke,
|
|
119
|
+
width: arrowWidth
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function getArrowTipCommands(placement, surface, arrow, rounding, direction) {
|
|
123
|
+
const toPoint = (main, cross) => isVerticalPlacement(placement) ? [main, cross] : [cross, main];
|
|
124
|
+
if (rounding.radius <= 0) return [lineTo(...toPoint(arrow.center, arrow.tip))];
|
|
125
|
+
const crossSign = Math.sign(surface[arrowBaseEdgeByPlacement[placement]] - arrow.tip);
|
|
126
|
+
const shoulderCross = arrow.tip + crossSign * rounding.crossAxisOffset;
|
|
127
|
+
return [lineTo(...toPoint(arrow.center - direction * rounding.mainAxisOffset, shoulderCross)), quadTo(...toPoint(arrow.center, arrow.tip), ...toPoint(arrow.center + direction * rounding.mainAxisOffset, shoulderCross))];
|
|
128
|
+
}
|
|
129
|
+
function getArrowFillPath(placement, surface, arrow, radius) {
|
|
130
|
+
const arrowTipCommands = getArrowTipCommands(placement, surface, arrow, getArrowTipRounding(placement, surface, arrow, radius), 1);
|
|
131
|
+
if (placement === "bottom") return path(moveTo(arrow.start, surface.top), ...arrowTipCommands, lineTo(arrow.end, surface.top), "Z");
|
|
132
|
+
if (placement === "top") return path(moveTo(arrow.start, surface.bottom), ...arrowTipCommands, lineTo(arrow.end, surface.bottom), "Z");
|
|
133
|
+
if (placement === "right") return path(moveTo(surface.left, arrow.start), ...arrowTipCommands, lineTo(surface.left, arrow.end), "Z");
|
|
134
|
+
return path(moveTo(surface.right, arrow.start), ...arrowTipCommands, lineTo(surface.right, arrow.end), "Z");
|
|
135
|
+
}
|
|
136
|
+
function getArrowTipRounding(placement, surface, arrow, radius) {
|
|
137
|
+
const halfArrowWidth = arrow.width / 2;
|
|
138
|
+
const arrowHeight = Math.abs(surface[arrowBaseEdgeByPlacement[placement]] - arrow.tip);
|
|
139
|
+
const arrowEdgeLength = Math.hypot(halfArrowWidth, arrowHeight);
|
|
140
|
+
if (radius <= 0 || arrowEdgeLength <= 0) return {
|
|
141
|
+
crossAxisOffset: 0,
|
|
142
|
+
mainAxisOffset: 0,
|
|
143
|
+
radius: 0
|
|
144
|
+
};
|
|
145
|
+
const tipRadius = Math.min(radius * ARROW_TIP_RADIUS_FRACTION, arrowEdgeLength / 2);
|
|
146
|
+
return {
|
|
147
|
+
crossAxisOffset: tipRadius * arrowHeight / arrowEdgeLength,
|
|
148
|
+
mainAxisOffset: tipRadius * halfArrowWidth / arrowEdgeLength,
|
|
149
|
+
radius: tipRadius
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function getFrameShapePath(placement, surface, arrow, radius) {
|
|
153
|
+
const { bottom, left, right, top } = surface;
|
|
154
|
+
const rounding = getArrowTipRounding(placement, surface, arrow, radius);
|
|
155
|
+
const arrowTipCommands = (direction) => getArrowTipCommands(placement, surface, arrow, rounding, direction);
|
|
156
|
+
if (placement === "bottom") return path(moveTo(left + radius, top), lineTo(arrow.start, top), ...arrowTipCommands(1), lineTo(arrow.end, top), lineTo(right - radius, top), quadTo(right, top, right, top + radius), lineTo(right, bottom - radius), quadTo(right, bottom, right - radius, bottom), lineTo(left + radius, bottom), quadTo(left, bottom, left, bottom - radius), lineTo(left, top + radius), quadTo(left, top, left + radius, top), "Z");
|
|
157
|
+
if (placement === "top") return path(moveTo(left + radius, top), lineTo(right - radius, top), quadTo(right, top, right, top + radius), lineTo(right, bottom - radius), quadTo(right, bottom, right - radius, bottom), lineTo(arrow.end, bottom), ...arrowTipCommands(-1), lineTo(arrow.start, bottom), lineTo(left + radius, bottom), quadTo(left, bottom, left, bottom - radius), lineTo(left, top + radius), quadTo(left, top, left + radius, top), "Z");
|
|
158
|
+
if (placement === "right") return path(moveTo(left + radius, top), lineTo(right - radius, top), quadTo(right, top, right, top + radius), lineTo(right, bottom - radius), quadTo(right, bottom, right - radius, bottom), lineTo(left + radius, bottom), quadTo(left, bottom, left, bottom - radius), lineTo(left, arrow.end), ...arrowTipCommands(-1), lineTo(left, arrow.start), lineTo(left, top + radius), quadTo(left, top, left + radius, top), "Z");
|
|
159
|
+
return path(moveTo(left + radius, top), lineTo(right - radius, top), quadTo(right, top, right, top + radius), lineTo(right, arrow.start), ...arrowTipCommands(1), lineTo(right, arrow.end), lineTo(right, bottom - radius), quadTo(right, bottom, right - radius, bottom), lineTo(left + radius, bottom), quadTo(left, bottom, left, bottom - radius), lineTo(left, top + radius), quadTo(left, top, left + radius, top), "Z");
|
|
160
|
+
}
|
|
161
|
+
function getPopoverFrameGeometry(props) {
|
|
162
|
+
const layout = getFrameLayout(props);
|
|
163
|
+
const arrow = getArrowGeometry(layout);
|
|
164
|
+
const framePath = getFrameShapePath(layout.placement, layout.surface, arrow, layout.radius);
|
|
165
|
+
return {
|
|
166
|
+
arrow,
|
|
167
|
+
fillPath: getArrowFillPath(layout.placement, layout.surface, arrow, layout.radius),
|
|
168
|
+
frameStyle: layout.frameStyle,
|
|
169
|
+
radius: layout.radius,
|
|
170
|
+
strokePath: framePath,
|
|
171
|
+
surface: layout.surface,
|
|
172
|
+
viewBox: layout.viewBox
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//#endregion
|
|
176
|
+
exports.getPopoverFrameGeometry = getPopoverFrameGeometry;
|
|
177
|
+
exports.resolvePopoverFramePlacement = resolvePopoverFramePlacement;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import { AnchoredPlacement } from "../internal/Overlay/types.cjs";
|
|
3
|
+
//#region src/components/Popover/popoverFrameGeometry.d.ts
|
|
4
|
+
type PopoverFramePhysicalPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
5
|
+
interface PopoverFrameGeometryProps {
|
|
6
|
+
arrowHeight: number;
|
|
7
|
+
arrowOffset: number;
|
|
8
|
+
arrowWidth: number;
|
|
9
|
+
borderRadius: number;
|
|
10
|
+
placement: PopoverFramePhysicalPlacement;
|
|
11
|
+
strokeWidth: number;
|
|
12
|
+
surfaceHeight: number;
|
|
13
|
+
surfaceWidth: number;
|
|
14
|
+
}
|
|
15
|
+
interface PopoverFrameGeometry {
|
|
16
|
+
arrow: ArrowGeometry;
|
|
17
|
+
fillPath: string;
|
|
18
|
+
frameStyle: FrameStyle;
|
|
19
|
+
radius: number;
|
|
20
|
+
strokePath: string;
|
|
21
|
+
surface: SurfaceBounds;
|
|
22
|
+
viewBox: string;
|
|
23
|
+
}
|
|
24
|
+
interface ArrowGeometry {
|
|
25
|
+
center: number;
|
|
26
|
+
end: number;
|
|
27
|
+
offset: number;
|
|
28
|
+
start: number;
|
|
29
|
+
tip: number;
|
|
30
|
+
width: number;
|
|
31
|
+
}
|
|
32
|
+
interface FrameStyle {
|
|
33
|
+
height: number;
|
|
34
|
+
left: number;
|
|
35
|
+
top: number;
|
|
36
|
+
width: number;
|
|
37
|
+
}
|
|
38
|
+
interface SurfaceBounds {
|
|
39
|
+
bottom: number;
|
|
40
|
+
left: number;
|
|
41
|
+
right: number;
|
|
42
|
+
top: number;
|
|
43
|
+
}
|
|
44
|
+
declare function resolvePopoverFramePlacement(placement: AnchoredPlacement, isRTL: boolean): PopoverFramePhysicalPlacement;
|
|
45
|
+
declare function getPopoverFrameGeometry(props: PopoverFrameGeometryProps): PopoverFrameGeometry;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { type PopoverFrameGeometry, type PopoverFramePhysicalPlacement, getPopoverFrameGeometry, resolvePopoverFramePlacement };
|
|
48
|
+
//# sourceMappingURL=popoverFrameGeometry.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popoverFrameGeometry.d.cts","names":[],"sources":["../../../src/components/Popover/popoverFrameGeometry.ts"],"mappings":";;;KAOK,6BAAA;AAAA,UAEK,yBAAA;EACR,WAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,SAAA,EAAW,6BAAA;EACX,WAAA;EACA,aAAA;EACA,YAAA;AAAA;AAAA,UAGQ,oBAAA;EACR,KAAA,EAAO,aAAA;EACP,QAAA;EACA,UAAA,EAAY,UAAA;EACZ,MAAA;EACA,UAAA;EACA,OAAA,EAAS,aAAA;EACT,OAAA;AAAA;AAAA,UAGQ,aAAA;EACR,MAAA;EACA,GAAA;EACA,MAAA;EACA,KAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGQ,UAAA;EACR,MAAA;EACA,IAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGQ,aAAA;EACR,MAAA;EACA,IAAA;EACA,KAAA;EACA,GAAA;AAAA;AAAA,iBAwCO,4BAAA,CACP,SAAA,EAAW,iBAAA,EACX,KAAA,YACC,6BAAA;AAAA,iBAwVM,uBAAA,CAAwB,KAAA,EAAO,yBAAA,GAA4B,oBAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import { AnchoredPlacement } from "../internal/Overlay/types.js";
|
|
3
|
+
//#region src/components/Popover/popoverFrameGeometry.d.ts
|
|
4
|
+
type PopoverFramePhysicalPlacement = 'top' | 'bottom' | 'left' | 'right';
|
|
5
|
+
interface PopoverFrameGeometryProps {
|
|
6
|
+
arrowHeight: number;
|
|
7
|
+
arrowOffset: number;
|
|
8
|
+
arrowWidth: number;
|
|
9
|
+
borderRadius: number;
|
|
10
|
+
placement: PopoverFramePhysicalPlacement;
|
|
11
|
+
strokeWidth: number;
|
|
12
|
+
surfaceHeight: number;
|
|
13
|
+
surfaceWidth: number;
|
|
14
|
+
}
|
|
15
|
+
interface PopoverFrameGeometry {
|
|
16
|
+
arrow: ArrowGeometry;
|
|
17
|
+
fillPath: string;
|
|
18
|
+
frameStyle: FrameStyle;
|
|
19
|
+
radius: number;
|
|
20
|
+
strokePath: string;
|
|
21
|
+
surface: SurfaceBounds;
|
|
22
|
+
viewBox: string;
|
|
23
|
+
}
|
|
24
|
+
interface ArrowGeometry {
|
|
25
|
+
center: number;
|
|
26
|
+
end: number;
|
|
27
|
+
offset: number;
|
|
28
|
+
start: number;
|
|
29
|
+
tip: number;
|
|
30
|
+
width: number;
|
|
31
|
+
}
|
|
32
|
+
interface FrameStyle {
|
|
33
|
+
height: number;
|
|
34
|
+
left: number;
|
|
35
|
+
top: number;
|
|
36
|
+
width: number;
|
|
37
|
+
}
|
|
38
|
+
interface SurfaceBounds {
|
|
39
|
+
bottom: number;
|
|
40
|
+
left: number;
|
|
41
|
+
right: number;
|
|
42
|
+
top: number;
|
|
43
|
+
}
|
|
44
|
+
declare function resolvePopoverFramePlacement(placement: AnchoredPlacement, isRTL: boolean): PopoverFramePhysicalPlacement;
|
|
45
|
+
declare function getPopoverFrameGeometry(props: PopoverFrameGeometryProps): PopoverFrameGeometry;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { type PopoverFrameGeometry, type PopoverFramePhysicalPlacement, getPopoverFrameGeometry, resolvePopoverFramePlacement };
|
|
48
|
+
//# sourceMappingURL=popoverFrameGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popoverFrameGeometry.d.ts","names":[],"sources":["../../../src/components/Popover/popoverFrameGeometry.ts"],"mappings":";;;KAOK,6BAAA;AAAA,UAEK,yBAAA;EACR,WAAA;EACA,WAAA;EACA,UAAA;EACA,YAAA;EACA,SAAA,EAAW,6BAAA;EACX,WAAA;EACA,aAAA;EACA,YAAA;AAAA;AAAA,UAGQ,oBAAA;EACR,KAAA,EAAO,aAAA;EACP,QAAA;EACA,UAAA,EAAY,UAAA;EACZ,MAAA;EACA,UAAA;EACA,OAAA,EAAS,aAAA;EACT,OAAA;AAAA;AAAA,UAGQ,aAAA;EACR,MAAA;EACA,GAAA;EACA,MAAA;EACA,KAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGQ,UAAA;EACR,MAAA;EACA,IAAA;EACA,GAAA;EACA,KAAA;AAAA;AAAA,UAGQ,aAAA;EACR,MAAA;EACA,IAAA;EACA,KAAA;EACA,GAAA;AAAA;AAAA,iBAwCO,4BAAA,CACP,SAAA,EAAW,iBAAA,EACX,KAAA,YACC,6BAAA;AAAA,iBAwVM,uBAAA,CAAwB,KAAA,EAAO,yBAAA,GAA4B,oBAAA"}
|