@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.
Files changed (71) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/components/FocusableLayer.d.ts +1 -1
  3. package/components/FocusableLayer.js +1 -1
  4. package/components/FocusableLayer.js.map +1 -1
  5. package/components/ListTitle.d.ts +10 -0
  6. package/components/ListTitle.d.ts.map +1 -0
  7. package/components/ListTitle.js +7 -0
  8. package/components/ListTitle.js.map +1 -0
  9. package/components/OTPFieldContext.d.ts.map +1 -1
  10. package/components/OTPFieldContext.js.map +1 -1
  11. package/components/{Searchbar.d.ts → SearchField.d.ts} +7 -7
  12. package/components/SearchField.d.ts.map +1 -0
  13. package/components/{Searchbar.js → SearchField.js} +2 -2
  14. package/components/SearchField.js.map +1 -0
  15. package/components/SectionTitle.d.ts +10 -0
  16. package/components/SectionTitle.d.ts.map +1 -0
  17. package/components/SectionTitle.js +7 -0
  18. package/components/SectionTitle.js.map +1 -0
  19. package/components/Segmented.d.ts.map +1 -1
  20. package/components/Segmented.js.map +1 -1
  21. package/components/Select.d.ts +1 -1
  22. package/components/Select.d.ts.map +1 -1
  23. package/components/Select.js +9 -8
  24. package/components/Select.js.map +1 -1
  25. package/components/Shortcut.d.ts.map +1 -1
  26. package/components/Shortcut.js +4 -3
  27. package/components/Shortcut.js.map +1 -1
  28. package/components/{Range.d.ts → Slider.d.ts} +7 -7
  29. package/components/Slider.d.ts.map +1 -0
  30. package/components/{Range.js → Slider.js} +6 -6
  31. package/components/Slider.js.map +1 -0
  32. package/components/Spinner.d.ts +12 -0
  33. package/components/Spinner.d.ts.map +1 -0
  34. package/components/{Preloader.js → Spinner.js} +3 -3
  35. package/components/Spinner.js.map +1 -0
  36. package/components/Tooltip.d.ts +27 -43
  37. package/components/Tooltip.d.ts.map +1 -1
  38. package/components/Tooltip.js +134 -79
  39. package/components/Tooltip.js.map +1 -1
  40. package/components/TooltipPrimitive.d.ts +48 -0
  41. package/components/TooltipPrimitive.d.ts.map +1 -0
  42. package/components/TooltipPrimitive.js +90 -0
  43. package/components/TooltipPrimitive.js.map +1 -0
  44. package/hooks/use-device.js +9 -9
  45. package/hooks/use-modal-utils.d.ts +1 -1
  46. package/hooks/use-modal-utils.js +17 -17
  47. package/index.d.ts +54 -53
  48. package/index.d.ts.map +1 -1
  49. package/index.js +54 -53
  50. package/index.js.map +1 -1
  51. package/package.json +8 -8
  52. package/shared/rounded-classes.d.ts +4 -4
  53. package/shared/rounded-classes.js +33 -33
  54. package/styles/{preloader.css → spinner.css} +8 -8
  55. package/ui.css +5 -5
  56. package/components/BlockTitle.d.ts +0 -10
  57. package/components/BlockTitle.d.ts.map +0 -1
  58. package/components/BlockTitle.js +0 -7
  59. package/components/BlockTitle.js.map +0 -1
  60. package/components/Preloader.d.ts +0 -12
  61. package/components/Preloader.d.ts.map +0 -1
  62. package/components/Preloader.js.map +0 -1
  63. package/components/Range.d.ts.map +0 -1
  64. package/components/Range.js.map +0 -1
  65. package/components/Searchbar.d.ts.map +0 -1
  66. package/components/Searchbar.js.map +0 -1
  67. package/components/WithTooltip.d.ts +0 -36
  68. package/components/WithTooltip.d.ts.map +0 -1
  69. package/components/WithTooltip.js +0 -138
  70. package/components/WithTooltip.js.map +0 -1
  71. /package/styles/{range.css → slider.css} +0 -0
@@ -1,48 +1,32 @@
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 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
- * 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.
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
- /** 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>;
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 type TooltipProps = TooltipOwnProps & Omit<SurfaceProps, keyof TooltipOwnProps>;
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,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,eAAe;IACvB,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,CAAC;IACtB,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,YAAY,GAAG,eAAe,GACxC,IAAI,CAAC,YAAY,EAAE,MAAM,eAAe,CAAC,CAAC;AAoI5C,eAAO,MAAM,OAAO,GAAI,iCAIrB,YAAY,4CAId,CAAC"}
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"}
@@ -1,90 +1,145 @@
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})`;
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 value;
15
+ return tooltipGlobalTimeout;
17
16
  };
18
- const TooltipRoot = (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;
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
- else if (!anchorNameRef.current) {
30
- anchorNameRef.current = `--anchor-${Math.random().toString(36).slice(2, 8)}`;
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 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
- }
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
- 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)
50
+ }, timeout ? getGlobalTimeout() : 0);
51
+ };
52
+ const hideTooltip = () => {
53
+ if (!tooltip)
58
54
  return;
59
- if (!anchorEl.style.getPropertyValue('anchor-name')) {
60
- anchorEl.style.setProperty('anchor-name', anchorName);
55
+ tooltipVisibleRef.current = false;
56
+ setModalState(false);
57
+ clearTimeout(pointerTimeoutRef.current);
58
+ if (timeout) {
59
+ tooltipGlobalTimeoutId = setTimeout(() => {
60
+ resetGlobalTimeout();
61
+ }, 1000);
61
62
  }
62
- }, [anchorRef, anchorName]);
63
- useEffect(() => {
64
- requestAnimationFrame(() => {
65
- open();
66
- });
67
- }, []);
68
- useEffect(() => {
69
- if (containerElRef.current) {
70
- containerElRef.current.__Tooltip = { close };
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 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;
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,EAAkB,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,OAAO,EAAc,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAMlD,MAAM,aAAa,GAAG,CAAC,KAAkB,EAAU,EAAE;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACnD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACzC,OAAO,8BAA8B,QAAQ,GAAG,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAkDF,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EACJ,KAAK,GAAG,QAAQ,EAChB,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,EACxB,MAAM,GAAG,MAAM,EACf,SAAS,GAAG,EAAE,EACd,gBAAgB,GAAG,EAAE,EACrB,SAAS,EACT,IAAI,GAAG,sBAAsB,EAC7B,QAAQ,GAAG,KAAK,EAChB,MAAM,GAAG,CAAC,EACV,YAAY,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACxC,KAAK,EACL,QAAQ,EACR,MAAM,GAAG,GAAG,EAAE,GAAE,CAAC,EACjB,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,EACnB,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,EACnB,GAAG,EACH,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjC,4EAA4E;IAC5E,kCAAkC;IAClC,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC;QACnC,CAAC;aAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAClC,aAAa,CAAC,OAAO,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;IAEzC,MAAM,KAAK,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAE3D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;QAC5C,KAAK;QACL,aAAa;QACb,MAAM;QACN,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,kBAAkB,EAAE,KAAK;QACzB,aAAa;YACX,IAAI,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBACxE,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC;gBACzD,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,uDAAuD;IACvD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,SAAS,EAAE,OAAO,CAAC;QACpC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;YAAE,OAAO;QACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,GAAG,EAAE;YACzB,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1B,cAAc,CAAC,OAAe,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC;QACxD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,CAAC;IAEjC,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,UAAU;QAC1B,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;QACpD,oBAAoB,EAAE,YAAY;QAClC,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE;YACnE,CAAC,CAAC,EAAE,CAAC;KACe,CAAC;IAEzB,MAAM,OAAO,GAAG,CACd,cAAK,SAAS,EAAC,6BAA6B,EAAC,GAAG,EAAE,cAAc,YAC9D,KAAC,OAAO,IACN,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE;gBACf,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBACnB,IAAI,GAAG;oBAAG,GAA8C,CAAC,OAAO,GAAG,EAAE,CAAC;YACxE,CAAC,EACD,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,OAAO,QACP,OAAO,EAAC,UAAU,EAClB,gBAAgB,EAAE,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,EACnD,SAAS,EAAE,EAAE,CACX,wJAAwJ,EACxJ,KAAK,IAAI,QAAQ,GAAG,KAAK,EAEzB,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,EACrC,KAAK,KAAK,QAAQ,IAAI,cAAc,EACpC,KAAK,KAAK,SAAS,IAAI,cAAc,EACrC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,oBAAoB,EACxD,MAAM,EACN,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,EACtC,SAAS,CACV,KACG,IAAI,YAEP,QAAQ,GACD,GACN,CACP,CAAC;IAEF,OAAO,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACtB,IAAI,GAAG,KAAK,EACZ,YAAY,GAAG,GAAG,EAAE,GAAE,CAAC,EACvB,GAAG,IAAI,EACM,EAAE,EAAE,CAAC,CAClB,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,YACrD,KAAC,WAAW,OAAK,IAAI,GAAI,GACT,CACnB,CAAC"}
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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"}
@@ -1,7 +1,7 @@
1
1
  let deviceCalculated = null;
2
2
  function calcDevice({ userAgent } = {}) {
3
- const supportTouch = typeof window !== "undefined" &&
4
- ("ontouchstart" in window ||
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("electron") >= 0;
23
- const nwjs = typeof window.nw !== "undefined" &&
22
+ const electron = ua.toLowerCase().indexOf('electron') >= 0;
23
+ const nwjs = typeof window.nw !== 'undefined' &&
24
24
  // @ts-ignore
25
- typeof process !== "undefined" &&
25
+ typeof process !== 'undefined' &&
26
26
  // @ts-ignore
27
- typeof process.versions !== "undefined" &&
27
+ typeof process.versions !== 'undefined' &&
28
28
  // @ts-ignore
29
- typeof process.versions.nw !== "undefined";
30
- let macos = platform === "MacIntel";
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 = ["", "Version", "13_0_0"];
34
+ ipad = ['', 'Version', '13_0_0'];
35
35
  macos = false;
36
36
  }
37
37
  // Android
@@ -1,4 +1,4 @@
1
- import { ModalPhase } from "../components/ModalController";
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;