kang-components 0.9.6 → 0.9.8
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/animated-height.d.ts +16 -0
- package/dist/animated-height.d.ts.map +1 -0
- package/dist/animated-height.js +42 -0
- package/dist/animated-height.js.map +1 -0
- package/dist/confetti.d.ts +29 -0
- package/dist/confetti.d.ts.map +1 -0
- package/dist/confetti.js +109 -0
- package/dist/confetti.js.map +1 -0
- package/dist/confetti.styles.d.ts +11 -0
- package/dist/confetti.styles.d.ts.map +1 -0
- package/dist/confetti.styles.js +62 -0
- package/dist/confetti.styles.js.map +1 -0
- package/dist/error-boundary.d.ts +41 -0
- package/dist/error-boundary.d.ts.map +1 -0
- package/dist/error-boundary.js +44 -0
- package/dist/error-boundary.js.map +1 -0
- package/dist/error-boundary.styles.d.ts +6 -0
- package/dist/error-boundary.styles.d.ts.map +1 -0
- package/dist/error-boundary.styles.js +66 -0
- package/dist/error-boundary.styles.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/long-press-tooltip.d.ts +24 -0
- package/dist/long-press-tooltip.d.ts.map +1 -0
- package/dist/long-press-tooltip.js +143 -0
- package/dist/long-press-tooltip.js.map +1 -0
- package/dist/long-press-tooltip.styles.d.ts +2318 -0
- package/dist/long-press-tooltip.styles.d.ts.map +1 -0
- package/dist/long-press-tooltip.styles.js +55 -0
- package/dist/long-press-tooltip.styles.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState, } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { useTransition } from '@react-spring/web';
|
|
5
|
+
import { SPRING_RESPONSIVE } from './spring.js';
|
|
6
|
+
import { TooltipWrapper, TooltipPopover, TooltipArrow } from './long-press-tooltip.styles.js';
|
|
7
|
+
const DEFAULT_LONG_PRESS_MS = 450;
|
|
8
|
+
// Generous enough to absorb finger jitter on a "still" touch hold, small enough
|
|
9
|
+
// that a deliberate scroll still cancels the tooltip.
|
|
10
|
+
const MOVE_CANCEL_PX = 16;
|
|
11
|
+
const GAP_PX = 8;
|
|
12
|
+
const VIEWPORT_MARGIN_PX = 12;
|
|
13
|
+
const DEFAULT_AUTO_DISMISS_MS = 6000;
|
|
14
|
+
/**
|
|
15
|
+
* Domain-free touch-and-hold tooltip. Reveals `content` in a floating bubble on
|
|
16
|
+
* long-press; the bubble is portaled to <body> so it escapes any clipped
|
|
17
|
+
* ancestor, and the completed hold swallows the trailing click so it never
|
|
18
|
+
* triggers the row's tap action. Dismisses on outside tap / scroll / resize /
|
|
19
|
+
* Escape / timeout.
|
|
20
|
+
*
|
|
21
|
+
* Language/character knowledge stays in the consuming app: pass an already-built
|
|
22
|
+
* node (e.g. an AnimatedText) as `content`.
|
|
23
|
+
*/
|
|
24
|
+
export const LongPressTooltip = ({ children, content, longPressMs = DEFAULT_LONG_PRESS_MS, autoDismissMs = DEFAULT_AUTO_DISMISS_MS, }) => {
|
|
25
|
+
const wrapperRef = useRef(null);
|
|
26
|
+
const popoverRef = useRef(null);
|
|
27
|
+
const timerRef = useRef(undefined);
|
|
28
|
+
const pressStartRef = useRef(null);
|
|
29
|
+
// Set when the hold fires so the following click is swallowed (not a tap).
|
|
30
|
+
const longPressFiredRef = useRef(false);
|
|
31
|
+
const [open, setOpen] = useState(false);
|
|
32
|
+
const [anchorRect, setAnchorRect] = useState(null);
|
|
33
|
+
const [coords, setCoords] = useState(null);
|
|
34
|
+
const clearTimer = useCallback(() => {
|
|
35
|
+
if (timerRef.current !== undefined) {
|
|
36
|
+
clearTimeout(timerRef.current);
|
|
37
|
+
timerRef.current = undefined;
|
|
38
|
+
}
|
|
39
|
+
}, []);
|
|
40
|
+
const handlePointerDown = useCallback((event) => {
|
|
41
|
+
if (!event.isPrimary)
|
|
42
|
+
return;
|
|
43
|
+
if (event.pointerType === 'mouse' && event.button !== 0)
|
|
44
|
+
return;
|
|
45
|
+
pressStartRef.current = { x: event.clientX, y: event.clientY };
|
|
46
|
+
clearTimer();
|
|
47
|
+
timerRef.current = setTimeout(() => {
|
|
48
|
+
const el = wrapperRef.current;
|
|
49
|
+
if (!el)
|
|
50
|
+
return;
|
|
51
|
+
setAnchorRect(el.getBoundingClientRect());
|
|
52
|
+
setCoords(null);
|
|
53
|
+
setOpen(true);
|
|
54
|
+
longPressFiredRef.current = true;
|
|
55
|
+
// No explicit navigator.vibrate here: the OS runs its own long-press
|
|
56
|
+
// haptic, and stacking ours on top read as a double buzz.
|
|
57
|
+
}, longPressMs);
|
|
58
|
+
}, [clearTimer, longPressMs]);
|
|
59
|
+
const handlePointerMove = useCallback((event) => {
|
|
60
|
+
const start = pressStartRef.current;
|
|
61
|
+
if (!start)
|
|
62
|
+
return;
|
|
63
|
+
const dx = event.clientX - start.x;
|
|
64
|
+
const dy = event.clientY - start.y;
|
|
65
|
+
if (dx * dx + dy * dy > MOVE_CANCEL_PX * MOVE_CANCEL_PX) {
|
|
66
|
+
clearTimer();
|
|
67
|
+
}
|
|
68
|
+
}, [clearTimer]);
|
|
69
|
+
const handlePressEnd = useCallback(() => {
|
|
70
|
+
clearTimer();
|
|
71
|
+
pressStartRef.current = null;
|
|
72
|
+
}, [clearTimer]);
|
|
73
|
+
const handleClickCapture = useCallback((event) => {
|
|
74
|
+
// A completed long-press leaves a trailing click — swallow it so the row
|
|
75
|
+
// action (toggle / picker) doesn't fire from a hold.
|
|
76
|
+
if (longPressFiredRef.current) {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
longPressFiredRef.current = false;
|
|
80
|
+
}
|
|
81
|
+
}, []);
|
|
82
|
+
const handleContextMenu = useCallback((event) => {
|
|
83
|
+
// Suppress the native long-press callout / right-click menu over the row.
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
}, []);
|
|
86
|
+
// Position the bubble once it has mounted and can be measured. Runs before
|
|
87
|
+
// paint, so the entrance animation starts already in the right place.
|
|
88
|
+
useLayoutEffect(() => {
|
|
89
|
+
if (!open || !anchorRect || !popoverRef.current)
|
|
90
|
+
return;
|
|
91
|
+
const pop = popoverRef.current.getBoundingClientRect();
|
|
92
|
+
const vw = window.innerWidth;
|
|
93
|
+
const vh = window.innerHeight;
|
|
94
|
+
const fitsBelow = anchorRect.bottom + GAP_PX + pop.height + VIEWPORT_MARGIN_PX <= vh;
|
|
95
|
+
const placement = fitsBelow ? 'below' : 'above';
|
|
96
|
+
const top = fitsBelow
|
|
97
|
+
? anchorRect.bottom + GAP_PX
|
|
98
|
+
: anchorRect.top - GAP_PX - pop.height;
|
|
99
|
+
const left = Math.min(Math.max(anchorRect.left, VIEWPORT_MARGIN_PX), Math.max(vw - pop.width - VIEWPORT_MARGIN_PX, VIEWPORT_MARGIN_PX));
|
|
100
|
+
const arrowLeft = Math.min(Math.max(anchorRect.left + anchorRect.width / 2 - left - 5, 12), Math.max(pop.width - 22, 12));
|
|
101
|
+
setCoords({ top, left, placement, arrowLeft });
|
|
102
|
+
}, [open, anchorRect]);
|
|
103
|
+
// While open, any tap / scroll / resize / Escape dismisses the bubble. The
|
|
104
|
+
// press that opened it already fired before this listener attached, so it
|
|
105
|
+
// won't self-close.
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!open)
|
|
108
|
+
return;
|
|
109
|
+
const close = () => setOpen(false);
|
|
110
|
+
const onKeyDown = (event) => {
|
|
111
|
+
if (event.key === 'Escape')
|
|
112
|
+
close();
|
|
113
|
+
};
|
|
114
|
+
const auto = setTimeout(close, autoDismissMs);
|
|
115
|
+
document.addEventListener('pointerdown', close, true);
|
|
116
|
+
window.addEventListener('scroll', close, true);
|
|
117
|
+
window.addEventListener('resize', close);
|
|
118
|
+
window.addEventListener('keydown', onKeyDown);
|
|
119
|
+
return () => {
|
|
120
|
+
clearTimeout(auto);
|
|
121
|
+
document.removeEventListener('pointerdown', close, true);
|
|
122
|
+
window.removeEventListener('scroll', close, true);
|
|
123
|
+
window.removeEventListener('resize', close);
|
|
124
|
+
window.removeEventListener('keydown', onKeyDown);
|
|
125
|
+
};
|
|
126
|
+
}, [open, autoDismissMs]);
|
|
127
|
+
useEffect(() => clearTimer, [clearTimer]);
|
|
128
|
+
const transitions = useTransition(open, {
|
|
129
|
+
from: { opacity: 0, scale: 0.92 },
|
|
130
|
+
enter: { opacity: 1, scale: 1 },
|
|
131
|
+
leave: { opacity: 0, scale: 0.92 },
|
|
132
|
+
config: SPRING_RESPONSIVE,
|
|
133
|
+
});
|
|
134
|
+
return (_jsxs(TooltipWrapper, { ref: wrapperRef, onPointerDown: handlePointerDown, onPointerMove: handlePointerMove, onPointerUp: handlePressEnd, onPointerLeave: handlePressEnd, onPointerCancel: handlePressEnd, onClickCapture: handleClickCapture, onContextMenu: handleContextMenu, children: [children, createPortal(transitions((style, isOpen) => isOpen && anchorRect ? (_jsxs(TooltipPopover, { ref: popoverRef, role: "tooltip", style: {
|
|
135
|
+
top: coords?.top ?? anchorRect.bottom + GAP_PX,
|
|
136
|
+
left: coords?.left ?? anchorRect.left,
|
|
137
|
+
opacity: style.opacity,
|
|
138
|
+
transform: style.scale.to((s) => `scale(${s})`),
|
|
139
|
+
transformOrigin: coords?.placement === 'above' ? 'bottom left' : 'top left',
|
|
140
|
+
}, children: [coords && (_jsx(TooltipArrow, { "$placement": coords.placement, style: { ['--arrow-left']: `${coords.arrowLeft}px` } })), content] })) : null), document.body)] }));
|
|
141
|
+
};
|
|
142
|
+
export default LongPressTooltip;
|
|
143
|
+
//# sourceMappingURL=long-press-tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-press-tooltip.js","sourceRoot":"","sources":["../src/long-press-tooltip.tsx"],"names":[],"mappings":"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"}
|