panelui-native 0.22.6 → 0.28.1
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/README.md +1 -0
- package/lib/module/components/accordion/index.js +8 -8
- package/lib/module/components/accordion/index.js.map +1 -1
- package/lib/module/components/alert/index.js +2 -2
- package/lib/module/components/alert/index.js.map +1 -1
- package/lib/module/components/area-chart/index.js +958 -0
- package/lib/module/components/area-chart/index.js.map +1 -0
- package/lib/module/components/attachment/index.js +2 -1
- package/lib/module/components/attachment/index.js.map +1 -1
- package/lib/module/components/avatar/index.js +4 -4
- package/lib/module/components/avatar/index.js.map +1 -1
- package/lib/module/components/badge/index.js +4 -4
- package/lib/module/components/badge/index.js.map +1 -1
- package/lib/module/components/bar-chart/index.js +994 -0
- package/lib/module/components/bar-chart/index.js.map +1 -0
- package/lib/module/components/bottom-sheet/index.js +213 -24
- package/lib/module/components/bottom-sheet/index.js.map +1 -1
- package/lib/module/components/breadcrumb/index.js +275 -0
- package/lib/module/components/breadcrumb/index.js.map +1 -0
- package/lib/module/components/button/index.js +11 -6
- package/lib/module/components/button/index.js.map +1 -1
- package/lib/module/components/calendar/index.js +557 -0
- package/lib/module/components/calendar/index.js.map +1 -0
- package/lib/module/components/carousel/index.js +680 -0
- package/lib/module/components/carousel/index.js.map +1 -0
- package/lib/module/components/chip/index.js +6 -6
- package/lib/module/components/chip/index.js.map +1 -1
- package/lib/module/components/date-picker/index.js +158 -0
- package/lib/module/components/date-picker/index.js.map +1 -0
- package/lib/module/components/dialog/index.js +7 -2
- package/lib/module/components/dialog/index.js.map +1 -1
- package/lib/module/components/direction/index.js +15 -20
- package/lib/module/components/direction/index.js.map +1 -1
- package/lib/module/components/empty-state/index.js +2 -2
- package/lib/module/components/empty-state/index.js.map +1 -1
- package/lib/module/components/field/index.js +5 -5
- package/lib/module/components/field/index.js.map +1 -1
- package/lib/module/components/flow/index.js +3 -3
- package/lib/module/components/flow/index.js.map +1 -1
- package/lib/module/components/frame/index.js +22 -5
- package/lib/module/components/frame/index.js.map +1 -1
- package/lib/module/components/heatmap-chart/index.js +28 -8
- package/lib/module/components/heatmap-chart/index.js.map +1 -1
- package/lib/module/components/input-group/index.js +5 -4
- package/lib/module/components/input-group/index.js.map +1 -1
- package/lib/module/components/item/index.js +9 -9
- package/lib/module/components/item/index.js.map +1 -1
- package/lib/module/components/label/index.js +4 -4
- package/lib/module/components/label/index.js.map +1 -1
- package/lib/module/components/line-chart/index.js +165 -184
- package/lib/module/components/line-chart/index.js.map +1 -1
- package/lib/module/components/loader/index.js +758 -0
- package/lib/module/components/loader/index.js.map +1 -0
- package/lib/module/components/map/basemap.js +265 -0
- package/lib/module/components/map/basemap.js.map +1 -0
- package/lib/module/components/map/index.js +850 -0
- package/lib/module/components/map/index.js.map +1 -0
- package/lib/module/components/map/maplibre.js +87 -0
- package/lib/module/components/map/maplibre.js.map +1 -0
- package/lib/module/components/marker/index.js +3 -3
- package/lib/module/components/marker/index.js.map +1 -1
- package/lib/module/components/message/index.js +15 -14
- package/lib/module/components/message/index.js.map +1 -1
- package/lib/module/components/message-scroller/index.js +5 -4
- package/lib/module/components/message-scroller/index.js.map +1 -1
- package/lib/module/components/otp-input/index.js +2 -2
- package/lib/module/components/popover/index.js +39 -7
- package/lib/module/components/popover/index.js.map +1 -1
- package/lib/module/components/progress/index.js +8 -2
- package/lib/module/components/progress/index.js.map +1 -1
- package/lib/module/components/radio-group/index.js +2 -2
- package/lib/module/components/radio-group/index.js.map +1 -1
- package/lib/module/components/ring-chart/index.js +423 -0
- package/lib/module/components/ring-chart/index.js.map +1 -0
- package/lib/module/components/section-rail/index.js +6 -6
- package/lib/module/components/section-rail/index.js.map +1 -1
- package/lib/module/components/select/index.js +10 -4
- package/lib/module/components/select/index.js.map +1 -1
- package/lib/module/components/separator/index.js +76 -22
- package/lib/module/components/separator/index.js.map +1 -1
- package/lib/module/components/shimmer/index.js +10 -1
- package/lib/module/components/shimmer/index.js.map +1 -1
- package/lib/module/components/slider/index.js +19 -5
- package/lib/module/components/slider/index.js.map +1 -1
- package/lib/module/components/steps/index.js +5 -5
- package/lib/module/components/steps/index.js.map +1 -1
- package/lib/module/components/switch/index.js +6 -1
- package/lib/module/components/switch/index.js.map +1 -1
- package/lib/module/components/tabs/index.js +7 -7
- package/lib/module/components/tabs/index.js.map +1 -1
- package/lib/module/components/timeline/index.js +4 -4
- package/lib/module/components/timeline/index.js.map +1 -1
- package/lib/module/components/toast/index.js +2 -2
- package/lib/module/components/toast/index.js.map +1 -1
- package/lib/module/components/toggle-button/index.js +5 -5
- package/lib/module/components/toggle-button/index.js.map +1 -1
- package/lib/module/components/tooltip/index.js +492 -0
- package/lib/module/components/tooltip/index.js.map +1 -0
- package/lib/module/components/typography/index.js +7 -2
- package/lib/module/components/typography/index.js.map +1 -1
- package/lib/module/hooks/index.js +1 -0
- package/lib/module/hooks/index.js.map +1 -1
- package/lib/module/hooks/use-back-handler.js +37 -0
- package/lib/module/hooks/use-back-handler.js.map +1 -0
- package/lib/module/hooks/use-direction.js +43 -0
- package/lib/module/hooks/use-direction.js.map +1 -0
- package/lib/module/icons/index.js +180 -2
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/index.js +12 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/primitives/keyboard-avoider.js +2 -1
- package/lib/module/primitives/keyboard-avoider.js.map +1 -1
- package/lib/module/primitives/text.js +55 -11
- package/lib/module/primitives/text.js.map +1 -1
- package/lib/module/utils/chart.js +279 -0
- package/lib/module/utils/chart.js.map +1 -0
- package/lib/module/utils/date.js +386 -0
- package/lib/module/utils/date.js.map +1 -0
- package/lib/typescript/src/components/accordion/index.d.ts.map +1 -1
- package/lib/typescript/src/components/alert/index.d.ts.map +1 -1
- package/lib/typescript/src/components/area-chart/index.d.ts +237 -0
- package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/attachment/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bar-chart/index.d.ts +270 -0
- package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/bottom-sheet/index.d.ts +75 -4
- package/lib/typescript/src/components/bottom-sheet/index.d.ts.map +1 -1
- package/lib/typescript/src/components/breadcrumb/index.d.ts +100 -0
- package/lib/typescript/src/components/breadcrumb/index.d.ts.map +1 -0
- package/lib/typescript/src/components/button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/calendar/index.d.ts +108 -0
- package/lib/typescript/src/components/calendar/index.d.ts.map +1 -0
- package/lib/typescript/src/components/carousel/index.d.ts +179 -0
- package/lib/typescript/src/components/carousel/index.d.ts.map +1 -0
- package/lib/typescript/src/components/chip/index.d.ts.map +1 -1
- package/lib/typescript/src/components/date-picker/index.d.ts +91 -0
- package/lib/typescript/src/components/date-picker/index.d.ts.map +1 -0
- package/lib/typescript/src/components/dialog/index.d.ts.map +1 -1
- package/lib/typescript/src/components/direction/index.d.ts +11 -10
- package/lib/typescript/src/components/direction/index.d.ts.map +1 -1
- package/lib/typescript/src/components/empty-state/index.d.ts.map +1 -1
- package/lib/typescript/src/components/field/index.d.ts.map +1 -1
- package/lib/typescript/src/components/frame/index.d.ts +17 -0
- package/lib/typescript/src/components/frame/index.d.ts.map +1 -1
- package/lib/typescript/src/components/heatmap-chart/index.d.ts +22 -3
- package/lib/typescript/src/components/heatmap-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/input-group/index.d.ts.map +1 -1
- package/lib/typescript/src/components/item/index.d.ts.map +1 -1
- package/lib/typescript/src/components/label/index.d.ts.map +1 -1
- package/lib/typescript/src/components/line-chart/index.d.ts +42 -2
- package/lib/typescript/src/components/line-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/loader/index.d.ts +38 -0
- package/lib/typescript/src/components/loader/index.d.ts.map +1 -0
- package/lib/typescript/src/components/map/basemap.d.ts +76 -0
- package/lib/typescript/src/components/map/basemap.d.ts.map +1 -0
- package/lib/typescript/src/components/map/index.d.ts +367 -0
- package/lib/typescript/src/components/map/index.d.ts.map +1 -0
- package/lib/typescript/src/components/map/maplibre.d.ts +193 -0
- package/lib/typescript/src/components/map/maplibre.d.ts.map +1 -0
- package/lib/typescript/src/components/marker/index.d.ts.map +1 -1
- package/lib/typescript/src/components/message/index.d.ts.map +1 -1
- package/lib/typescript/src/components/message-scroller/index.d.ts.map +1 -1
- package/lib/typescript/src/components/popover/index.d.ts.map +1 -1
- package/lib/typescript/src/components/progress/index.d.ts.map +1 -1
- package/lib/typescript/src/components/ring-chart/index.d.ts +156 -0
- package/lib/typescript/src/components/ring-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/select/index.d.ts.map +1 -1
- package/lib/typescript/src/components/separator/index.d.ts +36 -1
- package/lib/typescript/src/components/separator/index.d.ts.map +1 -1
- package/lib/typescript/src/components/shimmer/index.d.ts.map +1 -1
- package/lib/typescript/src/components/slider/index.d.ts.map +1 -1
- package/lib/typescript/src/components/steps/index.d.ts.map +1 -1
- package/lib/typescript/src/components/switch/index.d.ts.map +1 -1
- package/lib/typescript/src/components/tabs/index.d.ts.map +1 -1
- package/lib/typescript/src/components/timeline/index.d.ts.map +1 -1
- package/lib/typescript/src/components/toast/index.d.ts.map +1 -1
- package/lib/typescript/src/components/toggle-button/index.d.ts.map +1 -1
- package/lib/typescript/src/components/tooltip/index.d.ts +125 -0
- package/lib/typescript/src/components/tooltip/index.d.ts.map +1 -0
- package/lib/typescript/src/components/typography/index.d.ts +6 -0
- package/lib/typescript/src/components/typography/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/index.d.ts +1 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -1
- package/lib/typescript/src/hooks/use-back-handler.d.ts +19 -0
- package/lib/typescript/src/hooks/use-back-handler.d.ts.map +1 -0
- package/lib/typescript/src/hooks/use-direction.d.ts +20 -0
- package/lib/typescript/src/hooks/use-direction.d.ts.map +1 -0
- package/lib/typescript/src/icons/index.d.ts +8 -0
- package/lib/typescript/src/icons/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +14 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/primitives/keyboard-avoider.d.ts.map +1 -1
- package/lib/typescript/src/primitives/text.d.ts +20 -0
- package/lib/typescript/src/primitives/text.d.ts.map +1 -1
- package/lib/typescript/src/utils/chart.d.ts +96 -0
- package/lib/typescript/src/utils/chart.d.ts.map +1 -0
- package/lib/typescript/src/utils/date.d.ts +116 -0
- package/lib/typescript/src/utils/date.d.ts.map +1 -0
- package/package.json +9 -1
- package/src/components/accordion/index.tsx +8 -12
- package/src/components/alert/index.tsx +2 -2
- package/src/components/area-chart/index.tsx +1147 -0
- package/src/components/attachment/index.tsx +2 -2
- package/src/components/avatar/index.tsx +4 -4
- package/src/components/badge/index.tsx +6 -6
- package/src/components/bar-chart/index.tsx +1208 -0
- package/src/components/bottom-sheet/index.tsx +282 -21
- package/src/components/breadcrumb/index.tsx +363 -0
- package/src/components/button/index.tsx +12 -8
- package/src/components/calendar/index.tsx +703 -0
- package/src/components/carousel/index.tsx +788 -0
- package/src/components/chip/index.tsx +6 -8
- package/src/components/date-picker/index.tsx +237 -0
- package/src/components/dialog/index.tsx +7 -2
- package/src/components/direction/index.tsx +22 -22
- package/src/components/empty-state/index.tsx +2 -2
- package/src/components/field/index.tsx +3 -5
- package/src/components/flow/index.tsx +3 -3
- package/src/components/frame/index.tsx +22 -7
- package/src/components/heatmap-chart/index.tsx +58 -11
- package/src/components/input-group/index.tsx +5 -4
- package/src/components/item/index.tsx +9 -9
- package/src/components/label/index.tsx +2 -2
- package/src/components/line-chart/index.tsx +194 -223
- package/src/components/loader/index.tsx +812 -0
- package/src/components/map/basemap.ts +304 -0
- package/src/components/map/index.tsx +1116 -0
- package/src/components/map/maplibre.ts +201 -0
- package/src/components/marker/index.tsx +3 -3
- package/src/components/message/index.tsx +15 -14
- package/src/components/message-scroller/index.tsx +5 -4
- package/src/components/otp-input/index.tsx +2 -2
- package/src/components/popover/index.tsx +43 -7
- package/src/components/progress/index.tsx +10 -2
- package/src/components/radio-group/index.tsx +2 -2
- package/src/components/ring-chart/index.tsx +543 -0
- package/src/components/section-rail/index.tsx +6 -6
- package/src/components/select/index.tsx +10 -4
- package/src/components/separator/index.tsx +77 -19
- package/src/components/shimmer/index.tsx +10 -1
- package/src/components/slider/index.tsx +20 -5
- package/src/components/steps/index.tsx +5 -5
- package/src/components/switch/index.tsx +6 -1
- package/src/components/tabs/index.tsx +7 -9
- package/src/components/timeline/index.tsx +4 -4
- package/src/components/toast/index.tsx +2 -2
- package/src/components/toggle-button/index.tsx +5 -7
- package/src/components/tooltip/index.tsx +610 -0
- package/src/components/typography/index.tsx +7 -2
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-back-handler.ts +37 -0
- package/src/hooks/use-direction.ts +45 -0
- package/src/icons/index.tsx +111 -0
- package/src/index.ts +129 -0
- package/src/primitives/keyboard-avoider.tsx +2 -1
- package/src/primitives/text.tsx +53 -8
- package/src/utils/chart.ts +355 -0
- package/src/utils/date.ts +446 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tooltip — a small label that names the thing under your finger.
|
|
5
|
+
*
|
|
6
|
+
* A popover is a panel you open and deal with; a tooltip is a whisper. It
|
|
7
|
+
* carries a word or two about what a control does, appears without taking the
|
|
8
|
+
* screen, and goes away on its own. That is why it is inverted rather than
|
|
9
|
+
* surface-coloured, why it is not dismissible with a scrim, and why it closes
|
|
10
|
+
* after a beat instead of waiting to be told.
|
|
11
|
+
*
|
|
12
|
+
* On touch there is no hover to open it, so the gesture is a long press by
|
|
13
|
+
* default — the platform's own "tell me more" gesture — with `openOn="press"`
|
|
14
|
+
* for the cases where a tap should reveal it instead.
|
|
15
|
+
*
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <Tooltip label="Copy link">
|
|
18
|
+
* <Tooltip.Trigger>
|
|
19
|
+
* <IconButton icon={<LinkIcon />} />
|
|
20
|
+
* </Tooltip.Trigger>
|
|
21
|
+
* <Tooltip.Content>
|
|
22
|
+
* <Tooltip.Arrow />
|
|
23
|
+
* Copy link
|
|
24
|
+
* </Tooltip.Content>
|
|
25
|
+
* </Tooltip>
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* Placement is a preference, not a promise: the trigger is measured when it is
|
|
29
|
+
* pressed, the label measures itself on its first layout, and the two are
|
|
30
|
+
* reconciled against the safe area — so `placement="top"` means *above, if
|
|
31
|
+
* above fits*, and a trigger near the top edge shows its tooltip below instead.
|
|
32
|
+
*/
|
|
33
|
+
import { Children, cloneElement, createContext, isValidElement, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
34
|
+
import { Pressable, useWindowDimensions, View } from 'react-native';
|
|
35
|
+
import Animated, { FadeOut, useAnimatedStyle, useReducedMotion, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
|
|
36
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
37
|
+
import { Portal } from "../../primitives/portal.js";
|
|
38
|
+
import { Text } from "../../primitives/text.js";
|
|
39
|
+
import { cn } from "../../utils/cn.js";
|
|
40
|
+
|
|
41
|
+
/** Gap between the trigger and the label. */
|
|
42
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
43
|
+
const DEFAULT_OFFSET = 6;
|
|
44
|
+
/** Smallest gap allowed between the label and the edge of the safe area. */
|
|
45
|
+
const SCREEN_MARGIN = 12;
|
|
46
|
+
/** Side of the arrow square before it is rotated 45°. */
|
|
47
|
+
const ARROW_SIZE = 10;
|
|
48
|
+
/** How long the label stays up before hiding itself, in milliseconds. */
|
|
49
|
+
const DEFAULT_DURATION = 1500;
|
|
50
|
+
const TooltipContext = /*#__PURE__*/createContext(null);
|
|
51
|
+
function useTooltip(component) {
|
|
52
|
+
const context = useContext(TooltipContext);
|
|
53
|
+
if (!context) {
|
|
54
|
+
throw new Error(`${component} must be used within a <Tooltip>`);
|
|
55
|
+
}
|
|
56
|
+
return context;
|
|
57
|
+
}
|
|
58
|
+
function TooltipRoot({
|
|
59
|
+
children,
|
|
60
|
+
open,
|
|
61
|
+
onOpenChange,
|
|
62
|
+
defaultOpen = false,
|
|
63
|
+
openOn = 'longPress',
|
|
64
|
+
duration = DEFAULT_DURATION,
|
|
65
|
+
label
|
|
66
|
+
}) {
|
|
67
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
68
|
+
const [trigger, setTrigger] = useState(null);
|
|
69
|
+
const [placement, setPlacement] = useState('top');
|
|
70
|
+
const [arrowOffset, setArrowOffset] = useState(0);
|
|
71
|
+
const isControlled = open !== undefined;
|
|
72
|
+
const resolvedOpen = isControlled ? open : internalOpen;
|
|
73
|
+
const setOpen = useCallback(next => {
|
|
74
|
+
if (!isControlled) setInternalOpen(next);
|
|
75
|
+
onOpenChange?.(next);
|
|
76
|
+
}, [isControlled, onOpenChange]);
|
|
77
|
+
const show = useCallback(() => setOpen(true), [setOpen]);
|
|
78
|
+
const hide = useCallback(() => setOpen(false), [setOpen]);
|
|
79
|
+
|
|
80
|
+
// A tooltip is not a thing you deal with, so it hides itself after a beat.
|
|
81
|
+
// The timer is armed on open and cleared on close, and `duration` of 0 opts
|
|
82
|
+
// out — for a tooltip that stays until the next tap.
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (!resolvedOpen || duration <= 0) return;
|
|
85
|
+
const timer = setTimeout(() => setOpen(false), duration);
|
|
86
|
+
return () => clearTimeout(timer);
|
|
87
|
+
}, [resolvedOpen, duration, setOpen]);
|
|
88
|
+
const context = useMemo(() => ({
|
|
89
|
+
open: resolvedOpen,
|
|
90
|
+
show,
|
|
91
|
+
hide,
|
|
92
|
+
trigger,
|
|
93
|
+
setTrigger,
|
|
94
|
+
placement,
|
|
95
|
+
setPlacement,
|
|
96
|
+
arrowOffset,
|
|
97
|
+
setArrowOffset,
|
|
98
|
+
openOn,
|
|
99
|
+
label
|
|
100
|
+
}), [resolvedOpen, show, hide, trigger, placement, arrowOffset, openOn, label]);
|
|
101
|
+
return /*#__PURE__*/_jsx(TooltipContext.Provider, {
|
|
102
|
+
value: context,
|
|
103
|
+
children: children
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Wraps its child and reveals the label on it — a long press by default, a
|
|
108
|
+
* press when the root asks for one. It is also what gets measured, so the
|
|
109
|
+
* label knows where to sit.
|
|
110
|
+
*
|
|
111
|
+
* The child is wrapped in a view rather than handed a ref: the ref has to
|
|
112
|
+
* survive whatever the child is — a button, a plain Pressable, an icon — and
|
|
113
|
+
* only a wrapper we own is guaranteed to be measurable.
|
|
114
|
+
*
|
|
115
|
+
* That wrapper shrinks to its child on purpose. A view stretches to its parent
|
|
116
|
+
* by default, and a wrapper that filled the row would be measured as the whole
|
|
117
|
+
* row — putting a centred label over the middle of the screen rather than over
|
|
118
|
+
* the control it names.
|
|
119
|
+
*/
|
|
120
|
+
function TooltipTrigger({
|
|
121
|
+
className,
|
|
122
|
+
children
|
|
123
|
+
}) {
|
|
124
|
+
const {
|
|
125
|
+
open,
|
|
126
|
+
show,
|
|
127
|
+
hide,
|
|
128
|
+
setTrigger,
|
|
129
|
+
openOn,
|
|
130
|
+
label
|
|
131
|
+
} = useTooltip('Tooltip.Trigger');
|
|
132
|
+
const ref = useRef(null);
|
|
133
|
+
const measureThenShow = () => {
|
|
134
|
+
// Measured on every open rather than on layout: the trigger may have
|
|
135
|
+
// scrolled since it was laid out, and a stale rect anchors the label to
|
|
136
|
+
// where the trigger used to be.
|
|
137
|
+
ref.current?.measureInWindow((x, y, width, height) => {
|
|
138
|
+
setTrigger({
|
|
139
|
+
x,
|
|
140
|
+
y,
|
|
141
|
+
width,
|
|
142
|
+
height
|
|
143
|
+
});
|
|
144
|
+
show();
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
const handleLongPress = (...args) => {
|
|
148
|
+
if (/*#__PURE__*/isValidElement(children)) children.props.onLongPress?.(...args);
|
|
149
|
+
if (openOn === 'longPress') measureThenShow();
|
|
150
|
+
};
|
|
151
|
+
const handlePress = (...args) => {
|
|
152
|
+
if (/*#__PURE__*/isValidElement(children)) children.props.onPress?.(...args);
|
|
153
|
+
if (openOn !== 'press') return;
|
|
154
|
+
if (open) hide();else measureThenShow();
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// A trigger that is not an element has nothing to clone handlers onto, so it
|
|
158
|
+
// is passed through — wrapped, if it is bare text, since a string cannot be
|
|
159
|
+
// a child of a view.
|
|
160
|
+
if (! /*#__PURE__*/isValidElement(children)) {
|
|
161
|
+
return typeof children === 'string' || typeof children === 'number' ? /*#__PURE__*/_jsx(Text, {
|
|
162
|
+
children: children
|
|
163
|
+
}) : /*#__PURE__*/_jsx(_Fragment, {
|
|
164
|
+
children: children
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return /*#__PURE__*/_jsx(View, {
|
|
168
|
+
ref: ref,
|
|
169
|
+
collapsable: false,
|
|
170
|
+
className: cn('self-start', className),
|
|
171
|
+
children: /*#__PURE__*/cloneElement(children, {
|
|
172
|
+
onPress: handlePress,
|
|
173
|
+
onLongPress: handleLongPress,
|
|
174
|
+
// An icon-only trigger has nothing for a screen reader to read; the
|
|
175
|
+
// label fills that in without the sighted user having to open it.
|
|
176
|
+
accessibilityLabel: children.props.accessibilityLabel ?? label
|
|
177
|
+
})
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function TooltipContent({
|
|
181
|
+
className,
|
|
182
|
+
placement = 'top',
|
|
183
|
+
align = 'center',
|
|
184
|
+
offset = DEFAULT_OFFSET,
|
|
185
|
+
alignOffset = 0,
|
|
186
|
+
children,
|
|
187
|
+
onLayout: onLayoutProp,
|
|
188
|
+
style,
|
|
189
|
+
...props
|
|
190
|
+
}) {
|
|
191
|
+
const context = useTooltip('Tooltip.Content');
|
|
192
|
+
const {
|
|
193
|
+
open,
|
|
194
|
+
hide,
|
|
195
|
+
trigger,
|
|
196
|
+
setPlacement,
|
|
197
|
+
setArrowOffset
|
|
198
|
+
} = context;
|
|
199
|
+
const {
|
|
200
|
+
width: screenWidth,
|
|
201
|
+
height: screenHeight
|
|
202
|
+
} = useWindowDimensions();
|
|
203
|
+
const insets = useSafeAreaInsets();
|
|
204
|
+
const [size, setSize] = useState(null);
|
|
205
|
+
|
|
206
|
+
// Label size changes with its text, so it is re-measured rather than measured
|
|
207
|
+
// once — a tooltip whose text is swapped should not stay the old size.
|
|
208
|
+
const onLayout = event => {
|
|
209
|
+
const {
|
|
210
|
+
width: w,
|
|
211
|
+
height: h
|
|
212
|
+
} = event.nativeEvent.layout;
|
|
213
|
+
setSize(current => current && Math.abs(current.width - w) < 1 && Math.abs(current.height - h) < 1 ? current : {
|
|
214
|
+
width: w,
|
|
215
|
+
height: h
|
|
216
|
+
});
|
|
217
|
+
onLayoutProp?.(event);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* Forgetting the size on close is what makes the second open behave like the
|
|
222
|
+
* first. Held, it would place the reopened label using the last label's
|
|
223
|
+
* dimensions for a frame — and, because the entrance is driven off whether a
|
|
224
|
+
* position exists at all, a size that never went away means a tooltip that
|
|
225
|
+
* animates in once and afterwards just appears.
|
|
226
|
+
*/
|
|
227
|
+
useEffect(() => {
|
|
228
|
+
if (!open) setSize(null);
|
|
229
|
+
}, [open]);
|
|
230
|
+
const bounds = {
|
|
231
|
+
left: insets.left + SCREEN_MARGIN,
|
|
232
|
+
right: screenWidth - insets.right - SCREEN_MARGIN,
|
|
233
|
+
top: insets.top + SCREEN_MARGIN,
|
|
234
|
+
bottom: screenHeight - insets.bottom - SCREEN_MARGIN
|
|
235
|
+
};
|
|
236
|
+
const position = trigger && size ? place({
|
|
237
|
+
trigger,
|
|
238
|
+
size,
|
|
239
|
+
placement,
|
|
240
|
+
align,
|
|
241
|
+
offset,
|
|
242
|
+
alignOffset,
|
|
243
|
+
bounds
|
|
244
|
+
}) : null;
|
|
245
|
+
|
|
246
|
+
// Publish the side actually used and where the trigger centre landed, so the
|
|
247
|
+
// arrow points at the trigger even after a flip or a clamp.
|
|
248
|
+
const resolvedPlacement = position?.placement;
|
|
249
|
+
const resolvedArrow = position?.arrowOffset;
|
|
250
|
+
useEffect(() => {
|
|
251
|
+
if (resolvedPlacement) setPlacement(resolvedPlacement);
|
|
252
|
+
if (resolvedArrow !== undefined) setArrowOffset(resolvedArrow);
|
|
253
|
+
}, [resolvedPlacement, resolvedArrow, setPlacement, setArrowOffset]);
|
|
254
|
+
|
|
255
|
+
/*
|
|
256
|
+
* The entrance is driven by hand rather than by an `entering` preset, and the
|
|
257
|
+
* reason is the measuring frame. A layout animation fires on mount — which
|
|
258
|
+
* here is the frame *before* the label knows where it goes, so the whole
|
|
259
|
+
* animation would play at the origin, invisibly, and the label would then
|
|
260
|
+
* snap into place fully formed. Holding the values until a position exists is
|
|
261
|
+
* the only way to have both the animation and the correct position.
|
|
262
|
+
*/
|
|
263
|
+
const appear = useSharedValue(0);
|
|
264
|
+
const settle = useSharedValue(0);
|
|
265
|
+
const reducedMotion = useReducedMotion();
|
|
266
|
+
const placed = !!position;
|
|
267
|
+
useEffect(() => {
|
|
268
|
+
if (!placed) {
|
|
269
|
+
appear.value = 0;
|
|
270
|
+
settle.value = 0;
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (reducedMotion) {
|
|
274
|
+
appear.value = 1;
|
|
275
|
+
settle.value = 1;
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
appear.value = withTiming(1, {
|
|
279
|
+
duration: 100
|
|
280
|
+
});
|
|
281
|
+
settle.value = withSpring(1, {
|
|
282
|
+
damping: 20,
|
|
283
|
+
stiffness: 300,
|
|
284
|
+
mass: 0.5
|
|
285
|
+
});
|
|
286
|
+
}, [placed, reducedMotion, appear, settle]);
|
|
287
|
+
|
|
288
|
+
// Starts slightly small and shifted towards the trigger, so the label
|
|
289
|
+
// appears to unfold from it rather than fade in over it.
|
|
290
|
+
const origin = ENTRY_SHIFT[resolvedPlacement ?? placement];
|
|
291
|
+
const labelStyle = useAnimatedStyle(() => ({
|
|
292
|
+
opacity: appear.value,
|
|
293
|
+
transform: [{
|
|
294
|
+
translateX: origin.x * (1 - settle.value)
|
|
295
|
+
}, {
|
|
296
|
+
translateY: origin.y * (1 - settle.value)
|
|
297
|
+
}, {
|
|
298
|
+
scale: 0.9 + 0.1 * settle.value
|
|
299
|
+
}]
|
|
300
|
+
}));
|
|
301
|
+
if (!open || !trigger) return null;
|
|
302
|
+
return /*#__PURE__*/_jsx(Portal, {
|
|
303
|
+
children: /*#__PURE__*/_jsx(TooltipContext.Provider, {
|
|
304
|
+
value: context,
|
|
305
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
306
|
+
className: "absolute inset-0",
|
|
307
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
308
|
+
accessibilityLabel: "Dismiss",
|
|
309
|
+
className: "absolute inset-0",
|
|
310
|
+
onPress: hide
|
|
311
|
+
}), /*#__PURE__*/_jsx(Animated.View, {
|
|
312
|
+
exiting: FadeOut.duration(100),
|
|
313
|
+
onLayout: onLayout,
|
|
314
|
+
style: {
|
|
315
|
+
position: 'absolute',
|
|
316
|
+
pointerEvents: 'box-none',
|
|
317
|
+
// Until it has measured itself the label has no honest position,
|
|
318
|
+
// so it is laid out off-screen rather than at the origin.
|
|
319
|
+
top: position?.top ?? -9999,
|
|
320
|
+
left: position?.left ?? -9999,
|
|
321
|
+
maxWidth: bounds.right - bounds.left
|
|
322
|
+
},
|
|
323
|
+
children: /*#__PURE__*/_jsx(Animated.View, {
|
|
324
|
+
accessibilityRole: "text",
|
|
325
|
+
style: [labelStyle, style],
|
|
326
|
+
className: cn('rounded-lg bg-foreground px-2.5 py-1.5 shadow-md', className),
|
|
327
|
+
...props,
|
|
328
|
+
children: Children.map(children, child => typeof child === 'string' || typeof child === 'number' ? /*#__PURE__*/_jsx(TooltipText, {
|
|
329
|
+
children: child
|
|
330
|
+
}) : child)
|
|
331
|
+
})
|
|
332
|
+
})]
|
|
333
|
+
})
|
|
334
|
+
})
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/** The label's default text: small and inverted against the dark surface. */
|
|
339
|
+
const TooltipText = ({
|
|
340
|
+
className,
|
|
341
|
+
...props
|
|
342
|
+
}) => /*#__PURE__*/_jsx(Text, {
|
|
343
|
+
size: "sm",
|
|
344
|
+
weight: "medium",
|
|
345
|
+
className: cn('text-background', className),
|
|
346
|
+
...props
|
|
347
|
+
});
|
|
348
|
+
TooltipText.displayName = 'Tooltip.Text';
|
|
349
|
+
/**
|
|
350
|
+
* A small square rotated into a diamond, half-buried under the label so only
|
|
351
|
+
* the point shows. It shares the label's fill and points at the trigger's
|
|
352
|
+
* centre, which Content resolves and publishes — so when `align` shifts the
|
|
353
|
+
* label off-centre, or a clamp slides it back on screen, the arrow stays over
|
|
354
|
+
* the trigger rather than over the label's middle.
|
|
355
|
+
*/
|
|
356
|
+
function TooltipArrow({
|
|
357
|
+
className,
|
|
358
|
+
style,
|
|
359
|
+
...props
|
|
360
|
+
}) {
|
|
361
|
+
const {
|
|
362
|
+
trigger,
|
|
363
|
+
placement,
|
|
364
|
+
arrowOffset
|
|
365
|
+
} = useTooltip('Tooltip.Arrow');
|
|
366
|
+
if (!trigger) return null;
|
|
367
|
+
const vertical = placement === 'top' || placement === 'bottom';
|
|
368
|
+
// The arrow sits on the edge facing the trigger, the opposite edge to the
|
|
369
|
+
// placement: a label placed above the trigger has its arrow on the bottom.
|
|
370
|
+
const edge = {
|
|
371
|
+
top: 'bottom',
|
|
372
|
+
bottom: 'top',
|
|
373
|
+
left: 'right',
|
|
374
|
+
right: 'left'
|
|
375
|
+
}[placement];
|
|
376
|
+
return /*#__PURE__*/_jsx(View, {
|
|
377
|
+
accessibilityElementsHidden: true,
|
|
378
|
+
importantForAccessibility: "no-hide-descendants",
|
|
379
|
+
style: [{
|
|
380
|
+
position: 'absolute',
|
|
381
|
+
pointerEvents: 'none',
|
|
382
|
+
[edge]: -ARROW_SIZE / 2,
|
|
383
|
+
width: ARROW_SIZE,
|
|
384
|
+
height: ARROW_SIZE,
|
|
385
|
+
transform: [{
|
|
386
|
+
rotate: '45deg'
|
|
387
|
+
}],
|
|
388
|
+
// Centred on the trigger along the cross axis. `marginLeft/Top` backs
|
|
389
|
+
// it off by half its own size so `arrowOffset` lands on its centre.
|
|
390
|
+
...(vertical ? {
|
|
391
|
+
left: arrowOffset,
|
|
392
|
+
marginLeft: -ARROW_SIZE / 2
|
|
393
|
+
} : {
|
|
394
|
+
top: arrowOffset,
|
|
395
|
+
marginTop: -ARROW_SIZE / 2
|
|
396
|
+
})
|
|
397
|
+
}, style],
|
|
398
|
+
className: cn('rounded-[1px] bg-foreground', className),
|
|
399
|
+
...props
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* -------------------------------------------------------------------------- */
|
|
404
|
+
/* Placement */
|
|
405
|
+
/* -------------------------------------------------------------------------- */
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Resolves the label's window position.
|
|
409
|
+
*
|
|
410
|
+
* Two passes, in this order: the flip picks a *side* and only fires when the
|
|
411
|
+
* preferred one genuinely has less room than its opposite; the clamp then
|
|
412
|
+
* slides the label along the other axis to keep it on screen. Doing the clamp
|
|
413
|
+
* first would let a label be nudged inside the bounds and so look like it fits,
|
|
414
|
+
* hiding the fact that the wrong side was chosen.
|
|
415
|
+
*/
|
|
416
|
+
function place({
|
|
417
|
+
trigger,
|
|
418
|
+
size,
|
|
419
|
+
placement,
|
|
420
|
+
align,
|
|
421
|
+
offset,
|
|
422
|
+
alignOffset,
|
|
423
|
+
bounds
|
|
424
|
+
}) {
|
|
425
|
+
const roomAfter = {
|
|
426
|
+
bottom: bounds.bottom - (trigger.y + trigger.height + offset),
|
|
427
|
+
top: trigger.y - offset - bounds.top,
|
|
428
|
+
right: bounds.right - (trigger.x + trigger.width + offset),
|
|
429
|
+
left: trigger.x - offset - bounds.left
|
|
430
|
+
};
|
|
431
|
+
const opposite = {
|
|
432
|
+
top: 'bottom',
|
|
433
|
+
bottom: 'top',
|
|
434
|
+
left: 'right',
|
|
435
|
+
right: 'left'
|
|
436
|
+
};
|
|
437
|
+
const needed = placement === 'top' || placement === 'bottom' ? size.height : size.width;
|
|
438
|
+
const resolved = roomAfter[placement] < needed && roomAfter[opposite[placement]] > roomAfter[placement] ? opposite[placement] : placement;
|
|
439
|
+
const clamp = (value, min, max) => Math.max(min, Math.min(value, Math.max(min, max)));
|
|
440
|
+
if (resolved === 'top' || resolved === 'bottom') {
|
|
441
|
+
const top = resolved === 'bottom' ? trigger.y + trigger.height + offset : trigger.y - size.height - offset;
|
|
442
|
+
const left = align === 'start' ? trigger.x + alignOffset : align === 'end' ? trigger.x + trigger.width - size.width + alignOffset : trigger.x + trigger.width / 2 - size.width / 2 + alignOffset;
|
|
443
|
+
const clampedLeft = clamp(left, bounds.left, bounds.right - size.width);
|
|
444
|
+
const triggerCentreX = trigger.x + trigger.width / 2;
|
|
445
|
+
return {
|
|
446
|
+
placement: resolved,
|
|
447
|
+
top: clamp(top, bounds.top, bounds.bottom - size.height),
|
|
448
|
+
left: clampedLeft,
|
|
449
|
+
arrowOffset: clamp(triggerCentreX - clampedLeft, ARROW_SIZE, size.width - ARROW_SIZE)
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
const left = resolved === 'right' ? trigger.x + trigger.width + offset : trigger.x - size.width - offset;
|
|
453
|
+
const top = align === 'start' ? trigger.y + alignOffset : align === 'end' ? trigger.y + trigger.height - size.height + alignOffset : trigger.y + trigger.height / 2 - size.height / 2 + alignOffset;
|
|
454
|
+
const clampedTop = clamp(top, bounds.top, bounds.bottom - size.height);
|
|
455
|
+
const triggerCentreY = trigger.y + trigger.height / 2;
|
|
456
|
+
return {
|
|
457
|
+
placement: resolved,
|
|
458
|
+
top: clampedTop,
|
|
459
|
+
left: clamp(left, bounds.left, bounds.right - size.width),
|
|
460
|
+
arrowOffset: clamp(triggerCentreY - clampedTop, ARROW_SIZE, size.height - ARROW_SIZE)
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* Where the label starts, relative to where it ends: towards the trigger, on
|
|
466
|
+
* whichever side was resolved, so it appears to grow out of the control.
|
|
467
|
+
*/
|
|
468
|
+
const ENTRY_SHIFT = {
|
|
469
|
+
bottom: {
|
|
470
|
+
x: 0,
|
|
471
|
+
y: -6
|
|
472
|
+
},
|
|
473
|
+
top: {
|
|
474
|
+
x: 0,
|
|
475
|
+
y: 6
|
|
476
|
+
},
|
|
477
|
+
right: {
|
|
478
|
+
x: -6,
|
|
479
|
+
y: 0
|
|
480
|
+
},
|
|
481
|
+
left: {
|
|
482
|
+
x: 6,
|
|
483
|
+
y: 0
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
export const Tooltip = Object.assign(TooltipRoot, {
|
|
487
|
+
Trigger: TooltipTrigger,
|
|
488
|
+
Content: TooltipContent,
|
|
489
|
+
Arrow: TooltipArrow,
|
|
490
|
+
Text: TooltipText
|
|
491
|
+
});
|
|
492
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Children","cloneElement","createContext","isValidElement","useCallback","useContext","useEffect","useMemo","useRef","useState","Pressable","useWindowDimensions","View","Animated","FadeOut","useAnimatedStyle","useReducedMotion","useSharedValue","withSpring","withTiming","useSafeAreaInsets","Portal","Text","cn","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DEFAULT_OFFSET","SCREEN_MARGIN","ARROW_SIZE","DEFAULT_DURATION","TooltipContext","useTooltip","component","context","Error","TooltipRoot","children","open","onOpenChange","defaultOpen","openOn","duration","label","internalOpen","setInternalOpen","trigger","setTrigger","placement","setPlacement","arrowOffset","setArrowOffset","isControlled","undefined","resolvedOpen","setOpen","next","show","hide","timer","setTimeout","clearTimeout","Provider","value","TooltipTrigger","className","ref","measureThenShow","current","measureInWindow","x","y","width","height","handleLongPress","args","props","onLongPress","handlePress","onPress","collapsable","accessibilityLabel","TooltipContent","align","offset","alignOffset","onLayout","onLayoutProp","style","screenWidth","screenHeight","insets","size","setSize","event","w","h","nativeEvent","layout","Math","abs","bounds","left","right","top","bottom","position","place","resolvedPlacement","resolvedArrow","appear","settle","reducedMotion","placed","damping","stiffness","mass","origin","ENTRY_SHIFT","labelStyle","opacity","transform","translateX","translateY","scale","exiting","pointerEvents","maxWidth","accessibilityRole","map","child","TooltipText","weight","displayName","TooltipArrow","vertical","edge","accessibilityElementsHidden","importantForAccessibility","rotate","marginLeft","marginTop","roomAfter","opposite","needed","resolved","clamp","min","max","clampedLeft","triggerCentreX","clampedTop","triggerCentreY","Tooltip","Object","assign","Trigger","Content","Arrow"],"sourceRoot":"../../../../src","sources":["components/tooltip/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
import { Children, forwardRef } from 'react';
|
|
28
28
|
import { View } from 'react-native';
|
|
29
29
|
import { tv } from 'tailwind-variants';
|
|
30
|
-
import { Text } from "../../primitives/text.js";
|
|
30
|
+
import { Text, textChildren } from "../../primitives/text.js";
|
|
31
31
|
import { cn } from "../../utils/cn.js";
|
|
32
32
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
33
33
|
const typographyVariants = tv({
|
|
@@ -59,6 +59,11 @@ const typographyVariants = tv({
|
|
|
59
59
|
bold: 'font-bold'
|
|
60
60
|
},
|
|
61
61
|
align: {
|
|
62
|
+
// `start` and `end` follow the reading direction; `left` and `right`
|
|
63
|
+
// are the physical edges, for the rare line that has to stay put
|
|
64
|
+
// whichever way the script runs — a figure in a table, a code caption.
|
|
65
|
+
start: 'text-start',
|
|
66
|
+
end: 'text-end',
|
|
62
67
|
left: 'text-left',
|
|
63
68
|
center: 'text-center',
|
|
64
69
|
right: 'text-right'
|
|
@@ -273,7 +278,7 @@ const TypographyList = /*#__PURE__*/forwardRef(({
|
|
|
273
278
|
className: "mt-2.5 size-1.5 shrink-0 rounded-full bg-muted-foreground"
|
|
274
279
|
}), /*#__PURE__*/_jsx(View, {
|
|
275
280
|
className: "flex-1",
|
|
276
|
-
children: child
|
|
281
|
+
children: textChildren(child)
|
|
277
282
|
})]
|
|
278
283
|
}))
|
|
279
284
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Children","forwardRef","View","tv","Text","cn","jsx","_jsx","jsxs","_jsxs","typographyVariants","base","variants","type","h1","h2","h3","h4","h5","h6","lead","body","large","small","blockquote","code","weight","normal","medium","semibold","bold","align","left","center","right","transform","uppercase","lowercase","capitalize","underline","true","italic","strike","muted","defaultVariants","HEADING_LEVEL","TypographyRoot","className","props","ref","displayName","TypographyHeading","accessibilityRole","TypographyParagraph","TypographyCode","containerClassName","testID","children","TypographyBlockquote","TypographyList","ordered","map","child","index","TypographyListItem","Typography","Object","assign","Heading","Paragraph","Code","Blockquote","List","ListItem"],"sourceRoot":"../../../../src","sources":["components/typography/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,QAAQ,EAAEC,UAAU,QAAwB,OAAO;AAC5D,SAASC,IAAI,QAA6C,cAAc;AACxE,SAASC,EAAE,QAA2B,mBAAmB;AACzD,SAASC,IAAI,
|
|
1
|
+
{"version":3,"names":["Children","forwardRef","View","tv","Text","textChildren","cn","jsx","_jsx","jsxs","_jsxs","typographyVariants","base","variants","type","h1","h2","h3","h4","h5","h6","lead","body","large","small","blockquote","code","weight","normal","medium","semibold","bold","align","start","end","left","center","right","transform","uppercase","lowercase","capitalize","underline","true","italic","strike","muted","defaultVariants","HEADING_LEVEL","TypographyRoot","className","props","ref","displayName","TypographyHeading","accessibilityRole","TypographyParagraph","TypographyCode","containerClassName","testID","children","TypographyBlockquote","TypographyList","ordered","map","child","index","TypographyListItem","Typography","Object","assign","Heading","Paragraph","Code","Blockquote","List","ListItem"],"sourceRoot":"../../../../src","sources":["components/typography/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,6 +7,7 @@ export { useKeyboard } from "./use-keyboard.js";
|
|
|
7
7
|
export { useKeyboardAvoidance } from "./use-keyboard-avoidance.js";
|
|
8
8
|
export { useRevealProgress } from "./use-reveal-progress.js";
|
|
9
9
|
export { useScrollSections } from "./use-scroll-sections.js";
|
|
10
|
+
export { useBackHandler } from "./use-back-handler.js";
|
|
10
11
|
export { useDebouncedValue } from "./use-debounced-value.js";
|
|
11
12
|
export { usePrevious } from "./use-previous.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCopyToClipboard","useDisclosure","useBreakpoint","BREAKPOINTS","useKeyboard","useKeyboardAvoidance","useRevealProgress","useScrollSections","useDebouncedValue","usePrevious"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,SACEA,kBAAkB,QAGb,4BAAyB;AAChC,SACEC,aAAa,QAGR,qBAAkB;AACzB,SACEC,aAAa,EACbC,WAAW,QAGN,qBAAkB;AACzB,SAASC,WAAW,QAAgC,mBAAgB;AACpE,SACEC,oBAAoB,QAIf,6BAA0B;AACjC,SACEC,iBAAiB,QAGZ,0BAAuB;AAC9B,SACEC,iBAAiB,QAGZ,0BAAuB;AAC9B,SAASC,iBAAiB,QAAQ,0BAAuB;AACzD,SAASC,WAAW,QAAQ,mBAAgB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useCopyToClipboard","useDisclosure","useBreakpoint","BREAKPOINTS","useKeyboard","useKeyboardAvoidance","useRevealProgress","useScrollSections","useBackHandler","useDebouncedValue","usePrevious"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,SACEA,kBAAkB,QAGb,4BAAyB;AAChC,SACEC,aAAa,QAGR,qBAAkB;AACzB,SACEC,aAAa,EACbC,WAAW,QAGN,qBAAkB;AACzB,SAASC,WAAW,QAAgC,mBAAgB;AACpE,SACEC,oBAAoB,QAIf,6BAA0B;AACjC,SACEC,iBAAiB,QAGZ,0BAAuB;AAC9B,SACEC,iBAAiB,QAGZ,0BAAuB;AAC9B,SAASC,cAAc,QAAQ,uBAAoB;AACnD,SAASC,iBAAiB,QAAQ,0BAAuB;AACzD,SAASC,WAAW,QAAQ,mBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { BackHandler, Platform } from 'react-native';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Runs a handler when the Android hardware back button is pressed.
|
|
8
|
+
*
|
|
9
|
+
* An open overlay owns the back button while it is up: pressing back should
|
|
10
|
+
* dismiss the overlay, not pop the screen behind it. Without this, the back
|
|
11
|
+
* gesture navigates away and the overlay is orphaned — the same mistake as a
|
|
12
|
+
* modal that stays put when you tap outside it.
|
|
13
|
+
*
|
|
14
|
+
* The listener is Android-only and gated on `enabled`, so an overlay wires it
|
|
15
|
+
* to `open && dismissible` and nothing runs while the overlay is closed or
|
|
16
|
+
* pinned. Returning `true` from the handler tells the platform the press was
|
|
17
|
+
* consumed, which is what stops the navigation.
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* useBackHandler(open && dismissible, () => setOpen(false));
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function useBackHandler(enabled, onBack) {
|
|
24
|
+
// Held in a ref so a caller passing an inline `() => setOpen(false)` does not
|
|
25
|
+
// resubscribe the listener on every render — only a change in `enabled` does.
|
|
26
|
+
const onBackRef = useRef(onBack);
|
|
27
|
+
onBackRef.current = onBack;
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (Platform.OS !== 'android' || !enabled) return;
|
|
30
|
+
const subscription = BackHandler.addEventListener('hardwareBackPress', () => {
|
|
31
|
+
onBackRef.current();
|
|
32
|
+
return true;
|
|
33
|
+
});
|
|
34
|
+
return () => subscription.remove();
|
|
35
|
+
}, [enabled]);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=use-back-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","BackHandler","Platform","useBackHandler","enabled","onBack","onBackRef","current","OS","subscription","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/use-back-handler.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,WAAW,EAAEC,QAAQ,QAAQ,cAAc;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,OAAgB,EAAEC,MAAkB,EAAQ;EACzE;EACA;EACA,MAAMC,SAAS,GAAGN,MAAM,CAACK,MAAM,CAAC;EAChCC,SAAS,CAACC,OAAO,GAAGF,MAAM;EAE1BN,SAAS,CAAC,MAAM;IACd,IAAIG,QAAQ,CAACM,EAAE,KAAK,SAAS,IAAI,CAACJ,OAAO,EAAE;IAE3C,MAAMK,YAAY,GAAGR,WAAW,CAACS,gBAAgB,CAAC,mBAAmB,EAAE,MAAM;MAC3EJ,SAAS,CAACC,OAAO,CAAC,CAAC;MACnB,OAAO,IAAI;IACb,CAAC,CAAC;IAEF,OAAO,MAAME,YAAY,CAACE,MAAM,CAAC,CAAC;EACpC,CAAC,EAAE,CAACP,OAAO,CAAC,CAAC;AACf","ignoreList":[]}
|