@cladd-ui/react 0.0.10 → 0.0.12
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/CHANGELOG.md +22 -0
- package/components/FocusableLayer.d.ts +1 -1
- package/components/FocusableLayer.js +1 -1
- package/components/FocusableLayer.js.map +1 -1
- package/components/ListTitle.d.ts +10 -0
- package/components/ListTitle.d.ts.map +1 -0
- package/components/ListTitle.js +7 -0
- package/components/ListTitle.js.map +1 -0
- package/components/OTPFieldContext.d.ts.map +1 -1
- package/components/OTPFieldContext.js.map +1 -1
- package/components/{Searchbar.d.ts → SearchField.d.ts} +7 -7
- package/components/SearchField.d.ts.map +1 -0
- package/components/{Searchbar.js → SearchField.js} +2 -2
- package/components/SearchField.js.map +1 -0
- package/components/SectionTitle.d.ts +10 -0
- package/components/SectionTitle.d.ts.map +1 -0
- package/components/SectionTitle.js +7 -0
- package/components/SectionTitle.js.map +1 -0
- package/components/Segmented.d.ts.map +1 -1
- package/components/Segmented.js.map +1 -1
- package/components/Select.d.ts +1 -1
- package/components/Select.d.ts.map +1 -1
- package/components/Select.js +9 -8
- package/components/Select.js.map +1 -1
- package/components/Shortcut.d.ts.map +1 -1
- package/components/Shortcut.js +4 -3
- package/components/Shortcut.js.map +1 -1
- package/components/{Range.d.ts → Slider.d.ts} +7 -7
- package/components/Slider.d.ts.map +1 -0
- package/components/{Range.js → Slider.js} +6 -6
- package/components/Slider.js.map +1 -0
- package/components/Spinner.d.ts +12 -0
- package/components/Spinner.d.ts.map +1 -0
- package/components/{Preloader.js → Spinner.js} +3 -3
- package/components/Spinner.js.map +1 -0
- package/components/Tooltip.d.ts +27 -43
- package/components/Tooltip.d.ts.map +1 -1
- package/components/Tooltip.js +134 -79
- package/components/Tooltip.js.map +1 -1
- package/components/TooltipPrimitive.d.ts +48 -0
- package/components/TooltipPrimitive.d.ts.map +1 -0
- package/components/TooltipPrimitive.js +90 -0
- package/components/TooltipPrimitive.js.map +1 -0
- package/hooks/use-device.js +9 -9
- package/hooks/use-modal-utils.d.ts +1 -1
- package/hooks/use-modal-utils.js +17 -17
- package/index.d.ts +54 -53
- package/index.d.ts.map +1 -1
- package/index.js +54 -53
- package/index.js.map +1 -1
- package/package.json +8 -8
- package/shared/rounded-classes.d.ts +4 -4
- package/shared/rounded-classes.js +33 -33
- package/styles/{preloader.css → spinner.css} +8 -8
- package/ui.css +5 -5
- package/components/BlockTitle.d.ts +0 -10
- package/components/BlockTitle.d.ts.map +0 -1
- package/components/BlockTitle.js +0 -7
- package/components/BlockTitle.js.map +0 -1
- package/components/Preloader.d.ts +0 -12
- package/components/Preloader.d.ts.map +0 -1
- package/components/Preloader.js.map +0 -1
- package/components/Range.d.ts.map +0 -1
- package/components/Range.js.map +0 -1
- package/components/Searchbar.d.ts.map +0 -1
- package/components/Searchbar.js.map +0 -1
- package/components/WithTooltip.d.ts +0 -36
- package/components/WithTooltip.d.ts.map +0 -1
- package/components/WithTooltip.js +0 -138
- package/components/WithTooltip.js.map +0 -1
- /package/styles/{range.css → slider.css} +0 -0
package/components/Tooltip.d.ts
CHANGED
|
@@ -1,48 +1,32 @@
|
|
|
1
|
-
import { ReactNode
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type TooltipPosition = 'top' | 'bottom';
|
|
6
|
-
interface TooltipOwnProps {
|
|
7
|
-
/** Controlled open state. Default `false`. Pair with `onOpenChange`. */
|
|
8
|
-
open?: boolean;
|
|
9
|
-
/** Fires whenever the open state should change. */
|
|
10
|
-
onOpenChange?: (open: boolean) => void;
|
|
11
|
-
/** Tailwind z-index utility for the tooltip surface. Default `'z-50'`. */
|
|
12
|
-
zIndex?: string;
|
|
13
|
-
/** Extra classes applied to the tooltip root `Surface`. */
|
|
14
|
-
className?: string;
|
|
15
|
-
/** Extra classes applied to the inner content area. Default includes `px-2 py-1`. */
|
|
16
|
-
contentClassName?: string;
|
|
17
|
-
/** Ref to the element the tooltip should anchor against (CSS anchor positioning). */
|
|
18
|
-
anchorRef?: React.RefObject<HTMLElement | null>;
|
|
19
|
-
/** Portal target selector. Default `'#app, #__next, #root'`. */
|
|
20
|
-
root?: string;
|
|
21
|
-
/** Anchor side. Default `'top'`. */
|
|
22
|
-
position?: TooltipPosition;
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { TooltipPrimitiveProps, TooltipPosition } from './TooltipPrimitive';
|
|
3
|
+
export type { TooltipPosition };
|
|
4
|
+
export interface TooltipProps extends Omit<TooltipPrimitiveProps, 'children' | 'ref'> {
|
|
23
5
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
6
|
+
* When provided, the component acts as a wrapper around `children` (a single element)
|
|
7
|
+
* and shows this content as a tooltip on hover/focus/touch. When omitted, the component
|
|
8
|
+
* forwards all props to the underlying `TooltipPrimitive` and `children` is rendered as
|
|
9
|
+
* the tooltip content (controlled mode via `open`/`anchorRef`).
|
|
10
|
+
*/
|
|
11
|
+
tooltip?: ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Wrapper mode: the single element to attach the tooltip to.
|
|
14
|
+
* Primitive mode: the tooltip content.
|
|
26
15
|
*/
|
|
27
|
-
surfaceLevel?: number;
|
|
28
|
-
/** Distance from anchor in pixels (number) or any CSS length (`'8px'`, `'50%'`). Default `4`. */
|
|
29
|
-
offset?: OffsetValue;
|
|
30
|
-
/** Accent color token. Sets the tooltip's `color-{name}` class. */
|
|
31
|
-
color?: Color;
|
|
32
|
-
/** Tooltip content. */
|
|
33
16
|
children?: ReactNode;
|
|
34
|
-
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Wrapper mode only. When `true` (default), delays showing the tooltip (500ms on touch,
|
|
19
|
+
* 1000ms on mouse) and uses a shared global timer so successive hovers feel snappier -
|
|
20
|
+
* same UX as system tooltips. When `false`, the tooltip appears immediately on pointer enter.
|
|
21
|
+
*/
|
|
22
|
+
timeout?: boolean;
|
|
23
|
+
/** Wrapper mode only. Composed onto the wrapped child element's `onClick`. */
|
|
24
|
+
onClick?: (e: React.MouseEvent) => void;
|
|
25
|
+
/**
|
|
26
|
+
* Wrapper mode: composed onto the wrapped child's ref (alongside the internal anchor ref).
|
|
27
|
+
* Primitive mode: forwarded to the tooltip surface root.
|
|
28
|
+
*/
|
|
29
|
+
ref?: React.Ref<any>;
|
|
44
30
|
}
|
|
45
|
-
export
|
|
46
|
-
export declare const Tooltip: ({ open, onOpenChange, ...rest }: TooltipProps) => import("react/jsx-runtime").JSX.Element;
|
|
47
|
-
export {};
|
|
31
|
+
export declare const Tooltip: (props: TooltipProps) => import("react/jsx-runtime").JSX.Element;
|
|
48
32
|
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,SAAS,EAAE,MAAM,OAAO,CAAC;AAG7E,OAAO,EAEL,qBAAqB,EACrB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,eAAe,EAAE,CAAC;AAiBhC,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,qBAAqB,EACrB,UAAU,GAAG,KAAK,CACnB;IACC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AA4JD,eAAO,MAAM,OAAO,GAAI,OAAO,YAAY,4CAW1C,CAAC"}
|
package/components/Tooltip.js
CHANGED
|
@@ -1,90 +1,145 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (
|
|
13
|
-
|
|
14
|
-
return `calc(anchor-size(height) * ${fraction})`;
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cloneElement, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useDevice } from '../hooks/use-device';
|
|
4
|
+
import { TooltipPrimitive, } from './TooltipPrimitive';
|
|
5
|
+
let tooltipGlobalTimeout = 0;
|
|
6
|
+
let tooltipGlobalTimeoutId = 0;
|
|
7
|
+
const resetGlobalTimeout = () => {
|
|
8
|
+
const device = useDevice();
|
|
9
|
+
tooltipGlobalTimeout = device.mobile ? 500 : 1000;
|
|
10
|
+
};
|
|
11
|
+
const getGlobalTimeout = () => {
|
|
12
|
+
if (tooltipGlobalTimeout === null) {
|
|
13
|
+
resetGlobalTimeout();
|
|
15
14
|
}
|
|
16
|
-
return
|
|
15
|
+
return tooltipGlobalTimeout;
|
|
17
16
|
};
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
const TooltipWrapper = ({ tooltip, children: originalChild, timeout = true, onClick: forwardedOnClick, ref: forwardedRef, ...primitiveProps }) => {
|
|
18
|
+
const [modalState, setModalState] = useState(false);
|
|
19
|
+
const elRef = useRef(null);
|
|
20
|
+
const tooltipVisibleRef = useRef(false);
|
|
21
|
+
const preventContextMenuRef = useRef(false);
|
|
22
|
+
const pointerTimeoutRef = useRef(null);
|
|
23
|
+
const newRef = (el) => {
|
|
24
|
+
elRef.current = el;
|
|
25
|
+
const originalChildRef = originalChild?.props?.ref;
|
|
26
|
+
if (originalChildRef && typeof originalChildRef === 'function')
|
|
27
|
+
originalChildRef(el);
|
|
28
|
+
else if (originalChildRef &&
|
|
29
|
+
Object.keys(originalChildRef).includes('current')) {
|
|
30
|
+
originalChildRef.current = el;
|
|
28
31
|
}
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
if (typeof forwardedRef === 'function')
|
|
33
|
+
forwardedRef(el);
|
|
34
|
+
else if (forwardedRef &&
|
|
35
|
+
typeof forwardedRef === 'object' &&
|
|
36
|
+
'current' in forwardedRef) {
|
|
37
|
+
forwardedRef.current = el;
|
|
31
38
|
}
|
|
32
|
-
}
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
onClosed,
|
|
43
|
-
transitionEndElRef: elRef,
|
|
44
|
-
closeOnEscape() {
|
|
45
|
-
if (containerElRef.current && containerElRef.current.nextElementSibling) {
|
|
46
|
-
const nextEl = containerElRef.current.nextElementSibling;
|
|
47
|
-
if (nextEl.matches('.popover, .dialog')) {
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
39
|
+
};
|
|
40
|
+
const showTooltip = () => {
|
|
41
|
+
if (!tooltip)
|
|
42
|
+
return;
|
|
43
|
+
clearTimeout(tooltipGlobalTimeoutId);
|
|
44
|
+
pointerTimeoutRef.current = setTimeout(() => {
|
|
45
|
+
tooltipVisibleRef.current = true;
|
|
46
|
+
setModalState(true);
|
|
47
|
+
if (timeout) {
|
|
48
|
+
tooltipGlobalTimeout = 0;
|
|
50
49
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
const anchorEl = anchorRef?.current;
|
|
57
|
-
if (!anchorEl || !anchorName)
|
|
50
|
+
}, timeout ? getGlobalTimeout() : 0);
|
|
51
|
+
};
|
|
52
|
+
const hideTooltip = () => {
|
|
53
|
+
if (!tooltip)
|
|
58
54
|
return;
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
tooltipVisibleRef.current = false;
|
|
56
|
+
setModalState(false);
|
|
57
|
+
clearTimeout(pointerTimeoutRef.current);
|
|
58
|
+
if (timeout) {
|
|
59
|
+
tooltipGlobalTimeoutId = setTimeout(() => {
|
|
60
|
+
resetGlobalTimeout();
|
|
61
|
+
}, 1000);
|
|
61
62
|
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
63
|
+
};
|
|
64
|
+
const onContextMenu = (e) => {
|
|
65
|
+
if (!tooltip)
|
|
66
|
+
return;
|
|
67
|
+
if (preventContextMenuRef.current) {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const onClick = (_e) => {
|
|
72
|
+
if (!tooltip)
|
|
73
|
+
return;
|
|
74
|
+
if (tooltipVisibleRef.current) {
|
|
75
|
+
hideTooltip();
|
|
71
76
|
}
|
|
72
|
-
}, []);
|
|
73
|
-
const isTop = position === 'top';
|
|
74
|
-
const tooltipStyle = {
|
|
75
|
-
positionAnchor: anchorName,
|
|
76
|
-
positionArea: isTop ? 'top center' : 'bottom center',
|
|
77
|
-
positionTryFallbacks: 'flip-block',
|
|
78
|
-
...(offset
|
|
79
|
-
? { [isTop ? 'marginBottom' : 'marginTop']: resolveOffset(offset) }
|
|
80
|
-
: {}),
|
|
81
77
|
};
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
78
|
+
const onPointer = (e) => {
|
|
79
|
+
if (!tooltip)
|
|
80
|
+
return;
|
|
81
|
+
const mouseEvents = ['pointerenter', 'pointerleave', 'pointercancel'];
|
|
82
|
+
const touchEvents = ['pointerdown', 'pointerup', 'pointercancel'];
|
|
83
|
+
if ((e.pointerType === 'mouse' && !mouseEvents.includes(e.type)) ||
|
|
84
|
+
(e.pointerType === 'touch' && !touchEvents.includes(e.type))) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (e.type === 'pointerenter') {
|
|
88
|
+
showTooltip();
|
|
89
|
+
}
|
|
90
|
+
if (e.type === 'pointerleave' || e.type === 'pointercancel') {
|
|
91
|
+
preventContextMenuRef.current = false;
|
|
92
|
+
hideTooltip();
|
|
93
|
+
}
|
|
94
|
+
if (e.type === 'pointerdown' && !tooltipVisibleRef.current) {
|
|
95
|
+
preventContextMenuRef.current = true;
|
|
96
|
+
showTooltip();
|
|
97
|
+
}
|
|
98
|
+
if (e.type === 'pointerup') {
|
|
99
|
+
preventContextMenuRef.current = false;
|
|
100
|
+
hideTooltip();
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
useEffect(() => {
|
|
104
|
+
const el = elRef.current;
|
|
105
|
+
if (el) {
|
|
106
|
+
el.addEventListener('click', onClick);
|
|
107
|
+
el.addEventListener('contextmenu', onContextMenu);
|
|
108
|
+
el.addEventListener('pointerenter', onPointer);
|
|
109
|
+
el.addEventListener('pointerdown', onPointer);
|
|
110
|
+
document.addEventListener('pointerup', onPointer);
|
|
111
|
+
document.addEventListener('pointercancel', onPointer);
|
|
112
|
+
el.addEventListener('pointerleave', onPointer);
|
|
113
|
+
}
|
|
114
|
+
return () => {
|
|
115
|
+
if (el) {
|
|
116
|
+
el.removeEventListener('click', onClick);
|
|
117
|
+
el.removeEventListener('contextmenu', onContextMenu);
|
|
118
|
+
el.removeEventListener('pointerenter', onPointer);
|
|
119
|
+
el.removeEventListener('pointerdown', onPointer);
|
|
120
|
+
document.removeEventListener('pointerup', onPointer);
|
|
121
|
+
document.removeEventListener('pointercancel', onPointer);
|
|
122
|
+
el.removeEventListener('pointerleave', onPointer);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
const cloneProps = { ref: newRef };
|
|
127
|
+
if (forwardedOnClick) {
|
|
128
|
+
const originalOnClick = originalChild?.props?.onClick;
|
|
129
|
+
cloneProps.onClick = (e) => {
|
|
130
|
+
forwardedOnClick(e);
|
|
131
|
+
if (originalOnClick)
|
|
132
|
+
originalOnClick(e);
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
const newChild = cloneElement(originalChild, cloneProps);
|
|
136
|
+
return (_jsxs(_Fragment, { children: [newChild, tooltip && (_jsx(TooltipPrimitive, { ...primitiveProps, open: modalState, onOpenChange: setModalState, anchorRef: elRef, children: tooltip }))] }));
|
|
137
|
+
};
|
|
138
|
+
export const Tooltip = (props) => {
|
|
139
|
+
if (props.tooltip === undefined) {
|
|
140
|
+
const { tooltip: _t, timeout: _to, onClick: _oc, ...primitiveProps } = props;
|
|
141
|
+
return _jsx(TooltipPrimitive, { ...primitiveProps });
|
|
142
|
+
}
|
|
143
|
+
return _jsx(TooltipWrapper, { ...props });
|
|
88
144
|
};
|
|
89
|
-
export const Tooltip = ({ open = false, onOpenChange = () => { }, ...rest }) => (_jsx(ModalController, { open: open, onOpenChange: onOpenChange, children: _jsx(TooltipRoot, { ...rest }) }));
|
|
90
145
|
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../src/components/Tooltip.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../src/components/Tooltip.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ReactNode, Ref } from 'react';
|
|
2
|
+
import { Color } from '../types';
|
|
3
|
+
import { SurfaceProps } from './Surface';
|
|
4
|
+
type OffsetValue = number | string;
|
|
5
|
+
export type TooltipPosition = 'top' | 'bottom';
|
|
6
|
+
interface TooltipPrimitiveOwnProps {
|
|
7
|
+
/** Controlled open state. Default `false`. Pair with `onOpenChange`. */
|
|
8
|
+
open?: boolean;
|
|
9
|
+
/** Fires whenever the open state should change. */
|
|
10
|
+
onOpenChange?: (open: boolean) => void;
|
|
11
|
+
/** Tailwind z-index utility for the tooltip surface. Default `'z-50'`. */
|
|
12
|
+
zIndex?: string;
|
|
13
|
+
/** Extra classes applied to the tooltip root `Surface`. */
|
|
14
|
+
className?: string;
|
|
15
|
+
/** Extra classes applied to the inner content area. Default includes `px-2 py-1`. */
|
|
16
|
+
contentClassName?: string;
|
|
17
|
+
/** Ref to the element the tooltip should anchor against (CSS anchor positioning). */
|
|
18
|
+
anchorRef?: React.RefObject<HTMLElement | null>;
|
|
19
|
+
/** Portal target selector. Default `'#app, #__next, #root'`. */
|
|
20
|
+
root?: string;
|
|
21
|
+
/** Anchor side. Default `'top'`. */
|
|
22
|
+
position?: TooltipPosition;
|
|
23
|
+
/**
|
|
24
|
+
* Forwarded to the underlying `Surface` as `level`. Default depends on theme:
|
|
25
|
+
* `1` for light theme, `5` for dark theme - so the tooltip pops on top of any surface.
|
|
26
|
+
*/
|
|
27
|
+
surfaceLevel?: number | string;
|
|
28
|
+
/** Distance from anchor in pixels (number) or any CSS length (`'8px'`, `'50%'`). Default `4`. */
|
|
29
|
+
offset?: OffsetValue;
|
|
30
|
+
/** Accent color token. Sets the tooltip's `color-{name}` class. */
|
|
31
|
+
color?: Color;
|
|
32
|
+
/** Tooltip content. */
|
|
33
|
+
children?: ReactNode;
|
|
34
|
+
/** Fires when the open transition begins. */
|
|
35
|
+
onOpen?: () => void;
|
|
36
|
+
/** Fires after the open transition completes. */
|
|
37
|
+
onOpened?: () => void;
|
|
38
|
+
/** Fires when the close transition begins. */
|
|
39
|
+
onClose?: () => void;
|
|
40
|
+
/** Fires after the close transition completes. */
|
|
41
|
+
onClosed?: () => void;
|
|
42
|
+
/** Forwarded to the tooltip surface root. */
|
|
43
|
+
ref?: Ref<HTMLDivElement>;
|
|
44
|
+
}
|
|
45
|
+
export type TooltipPrimitiveProps = TooltipPrimitiveOwnProps & Omit<SurfaceProps, keyof TooltipPrimitiveOwnProps>;
|
|
46
|
+
export declare const TooltipPrimitive: ({ open, onOpenChange, ...rest }: TooltipPrimitiveProps) => import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=TooltipPrimitive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipPrimitive.d.ts","sourceRoot":"","sources":["../../../src/components/TooltipPrimitive.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAM1D,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,EAAW,YAAY,EAAE,MAAM,WAAW,CAAC;AAElD,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,CAAC;AAW/C,UAAU,wBAAwB;IAChC,wEAAwE;IACxE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,iGAAiG;IACjG,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,mEAAmE;IACnE,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,qBAAqB,GAAG,wBAAwB,GAC1D,IAAI,CAAC,YAAY,EAAE,MAAM,wBAAwB,CAAC,CAAC;AAuIrD,eAAO,MAAM,gBAAgB,GAAI,iCAI9B,qBAAqB,4CAIvB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { createPortal } from 'react-dom';
|
|
4
|
+
import { useModalUtils } from '../hooks/use-modal-utils';
|
|
5
|
+
import { useTheme } from '../hooks/use-theme';
|
|
6
|
+
import { cn } from '../shared/cn';
|
|
7
|
+
import { ModalController } from './ModalController';
|
|
8
|
+
import { Surface } from './Surface';
|
|
9
|
+
const resolveOffset = (value) => {
|
|
10
|
+
if (typeof value === 'number')
|
|
11
|
+
return `${value}px`;
|
|
12
|
+
if (value.endsWith('%')) {
|
|
13
|
+
const fraction = parseFloat(value) / 100;
|
|
14
|
+
return `calc(anchor-size(height) * ${fraction})`;
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
};
|
|
18
|
+
const TooltipPrimitiveRoot = (props) => {
|
|
19
|
+
const theme = useTheme();
|
|
20
|
+
const { phase = 'closed', onPhaseChange = () => { }, zIndex = 'z-50', className = '', contentClassName = '', anchorRef, root = '#app, #__next, #root', position = 'top', offset = 4, surfaceLevel = theme === 'light' ? 1 : 5, color, children, onOpen = () => { }, onOpened = () => { }, onClose = () => { }, onClosed = () => { }, ref, ...rest } = props;
|
|
21
|
+
const anchorNameRef = useRef('');
|
|
22
|
+
// Reuse existing anchor-name if target already has one (e.g. from Popover),
|
|
23
|
+
// otherwise generate a shared one
|
|
24
|
+
if (anchorRef?.current) {
|
|
25
|
+
const existing = anchorRef.current.style.getPropertyValue('anchor-name');
|
|
26
|
+
if (existing) {
|
|
27
|
+
anchorNameRef.current = existing;
|
|
28
|
+
}
|
|
29
|
+
else if (!anchorNameRef.current) {
|
|
30
|
+
anchorNameRef.current = `--anchor-${Math.random().toString(36).slice(2, 8)}`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const anchorName = anchorNameRef.current;
|
|
34
|
+
const elRef = useRef(null);
|
|
35
|
+
const containerElRef = useRef(null);
|
|
36
|
+
const { opened, open, close } = useModalUtils({
|
|
37
|
+
phase,
|
|
38
|
+
onPhaseChange,
|
|
39
|
+
onOpen,
|
|
40
|
+
onOpened,
|
|
41
|
+
onClose,
|
|
42
|
+
onClosed,
|
|
43
|
+
transitionEndElRef: elRef,
|
|
44
|
+
closeOnEscape() {
|
|
45
|
+
if (containerElRef.current && containerElRef.current.nextElementSibling) {
|
|
46
|
+
const nextEl = containerElRef.current.nextElementSibling;
|
|
47
|
+
if (nextEl.matches('.popover, .dialog')) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return true;
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
// Set anchor-name on target element if not already set
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const anchorEl = anchorRef?.current;
|
|
57
|
+
if (!anchorEl || !anchorName)
|
|
58
|
+
return;
|
|
59
|
+
if (!anchorEl.style.getPropertyValue('anchor-name')) {
|
|
60
|
+
anchorEl.style.setProperty('anchor-name', anchorName);
|
|
61
|
+
}
|
|
62
|
+
}, [anchorRef, anchorName]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
requestAnimationFrame(() => {
|
|
65
|
+
open();
|
|
66
|
+
});
|
|
67
|
+
}, []);
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (containerElRef.current) {
|
|
70
|
+
containerElRef.current.__TooltipPrimitive = { close };
|
|
71
|
+
}
|
|
72
|
+
}, []);
|
|
73
|
+
const isTop = position === 'top';
|
|
74
|
+
const tooltipStyle = {
|
|
75
|
+
positionAnchor: anchorName,
|
|
76
|
+
positionArea: isTop ? 'top center' : 'bottom center',
|
|
77
|
+
positionTryFallbacks: 'flip-block',
|
|
78
|
+
...(offset
|
|
79
|
+
? { [isTop ? 'marginBottom' : 'marginTop']: resolveOffset(offset) }
|
|
80
|
+
: {}),
|
|
81
|
+
};
|
|
82
|
+
const content = (_jsx("div", { className: "tooltip pointer-events-none", ref: containerElRef, children: _jsx(Surface, { ref: (el) => {
|
|
83
|
+
elRef.current = el;
|
|
84
|
+
if (ref)
|
|
85
|
+
ref.current = el;
|
|
86
|
+
}, style: tooltipStyle, level: surfaceLevel, outline: true, variant: "gradient", contentClassName: cn('px-2 py-1', contentClassName), className: cn('pointer-events-none fixed max-h-[50vh] w-max max-w-50 overflow-auto rounded-xl text-xs leading-normal font-medium transition-[opacity,transform,scale]', color && `color-` + color, opened ? 'scale-100 opacity-100' : '', phase === 'opened' && 'duration-200', phase === 'closing' && 'duration-200', (phase === 'closing' || !opened) && 'scale-50 opacity-0', zIndex, isTop ? 'origin-bottom' : 'origin-top', className), ...rest, children: children }) }));
|
|
87
|
+
return root ? createPortal(content, document.querySelector(root)) : content;
|
|
88
|
+
};
|
|
89
|
+
export const TooltipPrimitive = ({ open = false, onOpenChange = () => { }, ...rest }) => (_jsx(ModalController, { open: open, onOpenChange: onOpenChange, children: _jsx(TooltipPrimitiveRoot, { ...rest }) }));
|
|
90
|
+
//# sourceMappingURL=TooltipPrimitive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TooltipPrimitive.js","sourceRoot":"","sources":["../../../src/components/TooltipPrimitive.tsx"],"names":[],"mappings":"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"}
|
package/hooks/use-device.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
let deviceCalculated = null;
|
|
2
2
|
function calcDevice({ userAgent } = {}) {
|
|
3
|
-
const supportTouch = typeof window !==
|
|
4
|
-
(
|
|
3
|
+
const supportTouch = typeof window !== 'undefined' &&
|
|
4
|
+
('ontouchstart' in window ||
|
|
5
5
|
(window.DocumentTouch &&
|
|
6
6
|
document instanceof window.DocumentTouch));
|
|
7
7
|
const platform = window.navigator.platform;
|
|
@@ -19,19 +19,19 @@ function calcDevice({ userAgent } = {}) {
|
|
|
19
19
|
let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
|
|
20
20
|
const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
|
|
21
21
|
const iphone = !ipad && ua.match(/(iPhone\sOS|iOS|iPhone;\sCPU\sOS)\s([\d_]+)/);
|
|
22
|
-
const electron = ua.toLowerCase().indexOf(
|
|
23
|
-
const nwjs = typeof window.nw !==
|
|
22
|
+
const electron = ua.toLowerCase().indexOf('electron') >= 0;
|
|
23
|
+
const nwjs = typeof window.nw !== 'undefined' &&
|
|
24
24
|
// @ts-ignore
|
|
25
|
-
typeof process !==
|
|
25
|
+
typeof process !== 'undefined' &&
|
|
26
26
|
// @ts-ignore
|
|
27
|
-
typeof process.versions !==
|
|
27
|
+
typeof process.versions !== 'undefined' &&
|
|
28
28
|
// @ts-ignore
|
|
29
|
-
typeof process.versions.nw !==
|
|
30
|
-
let macos = platform ===
|
|
29
|
+
typeof process.versions.nw !== 'undefined';
|
|
30
|
+
let macos = platform === 'MacIntel';
|
|
31
31
|
if (!ipad && macos && supportTouch) {
|
|
32
32
|
ipad = ua.match(/(Version)\/([\d.]+)/);
|
|
33
33
|
if (!ipad)
|
|
34
|
-
ipad = [
|
|
34
|
+
ipad = ['', 'Version', '13_0_0'];
|
|
35
35
|
macos = false;
|
|
36
36
|
}
|
|
37
37
|
// Android
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModalPhase } from
|
|
1
|
+
import { ModalPhase } from '../components/ModalController';
|
|
2
2
|
export declare const useModalUtils: ({ phase, onPhaseChange, lazy, onClose, onClosed, onOpen, onOpened, transitionEndElRef, closeOnEscape, }: {
|
|
3
3
|
phase: ModalPhase;
|
|
4
4
|
onPhaseChange?: (phase: ModalPhase) => void;
|