@lobehub/ui 2.25.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/Accordion/AccordionItem.js +1 -7
- package/es/ActionIcon/type.d.ts +1 -1
- package/es/Avatar/type.d.ts +1 -1
- package/es/Form/components/FormFooter.d.ts +1 -1
- package/es/Hotkey/utils.d.ts +1 -1
- package/es/Layout/components/LayoutFooter.d.ts +1 -1
- package/es/Layout/components/LayoutMain.d.ts +1 -1
- package/es/Markdown/SyntaxMarkdown/MarkdownRender.d.ts +1 -1
- package/es/Markdown/SyntaxMarkdown/StreamdownRender.d.ts +1 -1
- package/es/Tooltip/Tooltip.d.ts +2 -2
- package/es/Tooltip/Tooltip.js +240 -33
- package/es/Tooltip/TooltipFloating.d.ts +30 -0
- package/es/Tooltip/TooltipFloating.js +135 -0
- package/es/Tooltip/TooltipGroup.d.ts +6 -0
- package/es/Tooltip/TooltipGroup.js +159 -0
- package/es/Tooltip/TooltipPortal.d.ts +7 -0
- package/es/Tooltip/TooltipPortal.js +46 -0
- package/es/Tooltip/antdPlacementToFloating.d.ts +9 -0
- package/es/Tooltip/antdPlacementToFloating.js +51 -0
- package/es/Tooltip/groupContext.d.ts +10 -0
- package/es/Tooltip/groupContext.js +2 -0
- package/es/Tooltip/index.d.ts +1 -0
- package/es/Tooltip/index.js +2 -1
- package/es/Tooltip/style.d.ts +2 -0
- package/es/Tooltip/style.js +5 -4
- package/es/Tooltip/type.d.ts +93 -5
- package/es/hooks/useHighlight.d.ts +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/motion/LazyMotion.d.ts +15 -0
- package/es/motion/LazyMotion.js +26 -0
- package/es/motion/index.d.ts +3 -0
- package/es/motion/index.js +3 -0
- package/es/motion/loadFeatures.d.ts +9 -0
- package/es/motion/loadFeatures.js +10 -0
- package/es/utils/composeEventHandlers.d.ts +19 -0
- package/es/utils/composeEventHandlers.js +26 -0
- package/package.json +1 -1
|
@@ -6,22 +6,17 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
6
6
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
7
7
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
8
8
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
-
import { LazyMotion, m } from 'motion/react';
|
|
10
9
|
import { memo, useCallback, useMemo } from 'react';
|
|
11
10
|
import { Flexbox } from 'react-layout-kit';
|
|
12
11
|
import Block from "../Block";
|
|
13
12
|
import Text from "../Text";
|
|
13
|
+
import { LazyMotion, m } from "../motion";
|
|
14
14
|
import ArrowIcon from "./ArrowIcon";
|
|
15
15
|
import { useAccordionContext } from "./context";
|
|
16
16
|
import { useStyles } from "./style";
|
|
17
17
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
18
18
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
19
|
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
20
|
-
var loadFeatures = function loadFeatures() {
|
|
21
|
-
return import('motion/react').then(function (res) {
|
|
22
|
-
return res.domAnimation;
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
20
|
var AccordionItem = /*#__PURE__*/memo(function (_ref) {
|
|
26
21
|
var _ref2, _ref3;
|
|
27
22
|
var itemKey = _ref.itemKey,
|
|
@@ -163,7 +158,6 @@ var AccordionItem = /*#__PURE__*/memo(function (_ref) {
|
|
|
163
158
|
});
|
|
164
159
|
}
|
|
165
160
|
return /*#__PURE__*/_jsx(LazyMotion, {
|
|
166
|
-
features: loadFeatures,
|
|
167
161
|
children: /*#__PURE__*/_jsx(m.div, _objectSpread(_objectSpread({}, motionProps), {}, {
|
|
168
162
|
style: {
|
|
169
163
|
overflow: 'hidden'
|
package/es/ActionIcon/type.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface ActionIconProps extends Partial<LucideIconProps>, Omit<CenterPr
|
|
|
19
19
|
size?: ActionIconSize;
|
|
20
20
|
spin?: boolean;
|
|
21
21
|
title?: TooltipProps['title'];
|
|
22
|
-
tooltipProps?: Omit<TooltipProps, 'title'>;
|
|
22
|
+
tooltipProps?: Omit<TooltipProps, 'children' | 'title'>;
|
|
23
23
|
variant?: 'borderless' | 'filled' | 'outlined';
|
|
24
24
|
}
|
|
25
25
|
export {};
|
package/es/Avatar/type.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface AvatarProps extends AntAvatarProps {
|
|
|
16
16
|
size?: number;
|
|
17
17
|
sliceText?: boolean;
|
|
18
18
|
title?: string;
|
|
19
|
-
tooltipProps?: Omit<TooltipProps, 'title'>;
|
|
19
|
+
tooltipProps?: Omit<TooltipProps, 'children' | 'title'>;
|
|
20
20
|
unoptimized?: boolean;
|
|
21
21
|
variant?: 'borderless' | 'filled' | 'outlined';
|
|
22
22
|
}
|
package/es/Hotkey/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const NORMATIVE_MODIFIER: ("shift" | "
|
|
1
|
+
export declare const NORMATIVE_MODIFIER: ("shift" | "meta" | "alt" | "control" | "ctrl" | "mod")[];
|
|
2
2
|
export declare const splitKeysByPlus: (keys: string) => string[];
|
|
3
3
|
export declare const startCase: (str: string) => string;
|
|
4
4
|
export declare const checkIsAppleDevice: (isApple?: boolean) => boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
export declare const LayoutFooter: import("react").NamedExoticComponent<import("
|
|
2
|
+
export declare const LayoutFooter: import("react").NamedExoticComponent<import("../type").LayoutFooterProps>;
|
|
3
3
|
export default LayoutFooter;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
declare const MarkdownRenderer: import("react").NamedExoticComponent<import("react-markdown
|
|
2
|
+
declare const MarkdownRenderer: import("react").NamedExoticComponent<import("react-markdown").Options>;
|
|
3
3
|
export default MarkdownRenderer;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
export declare const StreamdownRender: import("react").NamedExoticComponent<import("react-markdown
|
|
2
|
+
export declare const StreamdownRender: import("react").NamedExoticComponent<import("react-markdown").Options>;
|
|
3
3
|
export default StreamdownRender;
|
package/es/Tooltip/Tooltip.d.ts
CHANGED
package/es/Tooltip/Tooltip.js
CHANGED
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
-
|
|
4
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
5
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
7
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
8
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
9
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
5
10
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
11
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
12
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
13
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
14
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
import
|
|
15
|
+
import { arrow as arrowMiddleware, autoUpdate, flip, offset, shift, useDismiss, useFloating, useFocus, useHover, useInteractions, useRole } from '@floating-ui/react';
|
|
16
|
+
import { cloneElement, isValidElement, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
17
|
+
import { mergeRefs } from 'react-merge-refs';
|
|
18
|
+
import { antdPlacementToFloating } from "./antdPlacementToFloating";
|
|
19
|
+
import { composeEventHandlers } from "../utils/composeEventHandlers";
|
|
20
|
+
import TooltipFloating from "./TooltipFloating";
|
|
21
|
+
import TooltipPortal from "./TooltipPortal";
|
|
22
|
+
import { TooltipGroupContext } from "./groupContext";
|
|
17
23
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
18
25
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
-
var
|
|
26
|
+
var TooltipInGroup = function TooltipInGroup(_ref) {
|
|
20
27
|
var ref = _ref.ref,
|
|
21
28
|
hotkey = _ref.hotkey,
|
|
22
29
|
className = _ref.className,
|
|
@@ -24,29 +31,229 @@ var Tooltip = /*#__PURE__*/memo(function (_ref) {
|
|
|
24
31
|
arrow = _ref$arrow === void 0 ? false : _ref$arrow,
|
|
25
32
|
title = _ref.title,
|
|
26
33
|
hotkeyProps = _ref.hotkeyProps,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
children = _ref.children,
|
|
35
|
+
_ref$placement = _ref.placement,
|
|
36
|
+
placement = _ref$placement === void 0 ? 'top' : _ref$placement,
|
|
37
|
+
openDelay = _ref.openDelay,
|
|
38
|
+
closeDelay = _ref.closeDelay,
|
|
39
|
+
_ref$mouseEnterDelay = _ref.mouseEnterDelay,
|
|
40
|
+
mouseEnterDelay = _ref$mouseEnterDelay === void 0 ? 0 : _ref$mouseEnterDelay,
|
|
41
|
+
_ref$mouseLeaveDelay = _ref.mouseLeaveDelay,
|
|
42
|
+
mouseLeaveDelay = _ref$mouseLeaveDelay === void 0 ? 0 : _ref$mouseLeaveDelay,
|
|
43
|
+
onOpenChange = _ref.onOpenChange,
|
|
44
|
+
disabled = _ref.disabled,
|
|
45
|
+
classNames = _ref.classNames,
|
|
46
|
+
styleProps = _ref.styles,
|
|
47
|
+
zIndex = _ref.zIndex,
|
|
48
|
+
_ref$portalled = _ref.portalled,
|
|
49
|
+
portalled = _ref$portalled === void 0 ? true : _ref$portalled,
|
|
50
|
+
getPopupContainer = _ref.getPopupContainer;
|
|
51
|
+
var group = useContext(TooltipGroupContext);
|
|
52
|
+
var triggerElRef = useRef(null);
|
|
53
|
+
var item = useMemo(function () {
|
|
54
|
+
return {
|
|
55
|
+
arrow: arrow,
|
|
56
|
+
className: className,
|
|
57
|
+
classNames: classNames,
|
|
58
|
+
closeDelay: closeDelay,
|
|
59
|
+
disabled: disabled,
|
|
60
|
+
getPopupContainer: getPopupContainer,
|
|
61
|
+
hotkey: hotkey,
|
|
62
|
+
hotkeyProps: hotkeyProps,
|
|
63
|
+
mouseEnterDelay: mouseEnterDelay,
|
|
64
|
+
mouseLeaveDelay: mouseLeaveDelay,
|
|
65
|
+
onOpenChange: onOpenChange,
|
|
66
|
+
openDelay: openDelay,
|
|
67
|
+
placement: placement,
|
|
68
|
+
portalled: portalled,
|
|
69
|
+
styles: styleProps,
|
|
70
|
+
title: title,
|
|
71
|
+
zIndex: zIndex
|
|
72
|
+
};
|
|
73
|
+
}, [arrow, className, classNames, closeDelay, disabled, getPopupContainer, hotkey, hotkeyProps, mouseEnterDelay, mouseLeaveDelay, onOpenChange, openDelay, placement, portalled, styleProps, title, zIndex]);
|
|
74
|
+
var trigger = useMemo(function () {
|
|
75
|
+
var _children$props;
|
|
76
|
+
if (! /*#__PURE__*/isValidElement(children)) return /*#__PURE__*/_jsx("span", {
|
|
77
|
+
children: children
|
|
78
|
+
});
|
|
79
|
+
var needsWrapper = typeof children.type === 'string' && Boolean((_children$props = children.props) === null || _children$props === void 0 ? void 0 : _children$props.disabled);
|
|
80
|
+
if (needsWrapper) return /*#__PURE__*/_jsx("span", {
|
|
81
|
+
style: {
|
|
82
|
+
display: 'inline-flex'
|
|
83
|
+
},
|
|
84
|
+
children: children
|
|
85
|
+
});
|
|
86
|
+
return children;
|
|
87
|
+
}, [children]);
|
|
88
|
+
var referenceNode = useMemo(function () {
|
|
89
|
+
if (! /*#__PURE__*/isValidElement(trigger)) return trigger;
|
|
90
|
+
var originalRef = trigger.ref;
|
|
91
|
+
var triggerProps = trigger.props || {};
|
|
92
|
+
var setTriggerEl = function setTriggerEl(node) {
|
|
93
|
+
triggerElRef.current = node instanceof HTMLElement ? node : null;
|
|
94
|
+
};
|
|
95
|
+
return /*#__PURE__*/cloneElement(trigger, _objectSpread(_objectSpread({}, triggerProps), {}, {
|
|
96
|
+
onBlur: composeEventHandlers(triggerProps.onBlur, function (e) {
|
|
97
|
+
group === null || group === void 0 || group.closeFromTrigger(e.currentTarget, item);
|
|
98
|
+
}),
|
|
99
|
+
onFocus: composeEventHandlers(triggerProps.onFocus, function (e) {
|
|
100
|
+
group === null || group === void 0 || group.openFromTrigger(e.currentTarget, item);
|
|
101
|
+
}),
|
|
102
|
+
onKeyDown: composeEventHandlers(triggerProps.onKeyDown, function (e) {
|
|
103
|
+
if ((e === null || e === void 0 ? void 0 : e.key) === 'Escape') group === null || group === void 0 || group.closeImmediately();
|
|
104
|
+
}),
|
|
105
|
+
onPointerEnter: composeEventHandlers(triggerProps.onPointerEnter, function (e) {
|
|
106
|
+
group === null || group === void 0 || group.openFromTrigger(e.currentTarget, item);
|
|
107
|
+
}),
|
|
108
|
+
onPointerLeave: composeEventHandlers(triggerProps.onPointerLeave, function (e) {
|
|
109
|
+
group === null || group === void 0 || group.closeFromTrigger(e.currentTarget, item);
|
|
110
|
+
}),
|
|
111
|
+
ref: mergeRefs([originalRef, setTriggerEl, ref])
|
|
112
|
+
}));
|
|
113
|
+
}, [group, item, ref, trigger]);
|
|
114
|
+
useEffect(function () {
|
|
115
|
+
return function () {
|
|
116
|
+
if (!group) return;
|
|
117
|
+
var el = triggerElRef.current;
|
|
118
|
+
if (el && group.isActiveTrigger(el)) group.closeImmediately();
|
|
119
|
+
};
|
|
120
|
+
}, [group]);
|
|
121
|
+
return referenceNode;
|
|
122
|
+
};
|
|
123
|
+
TooltipInGroup.displayName = 'TooltipInGroup';
|
|
124
|
+
var TooltipStandalone = function TooltipStandalone(_ref2) {
|
|
125
|
+
var ref = _ref2.ref,
|
|
126
|
+
hotkey = _ref2.hotkey,
|
|
127
|
+
className = _ref2.className,
|
|
128
|
+
_ref2$arrow = _ref2.arrow,
|
|
129
|
+
arrow = _ref2$arrow === void 0 ? false : _ref2$arrow,
|
|
130
|
+
title = _ref2.title,
|
|
131
|
+
hotkeyProps = _ref2.hotkeyProps,
|
|
132
|
+
children = _ref2.children,
|
|
133
|
+
_ref2$placement = _ref2.placement,
|
|
134
|
+
placement = _ref2$placement === void 0 ? 'top' : _ref2$placement,
|
|
135
|
+
openDelay = _ref2.openDelay,
|
|
136
|
+
closeDelay = _ref2.closeDelay,
|
|
137
|
+
_ref2$mouseEnterDelay = _ref2.mouseEnterDelay,
|
|
138
|
+
mouseEnterDelay = _ref2$mouseEnterDelay === void 0 ? 0 : _ref2$mouseEnterDelay,
|
|
139
|
+
_ref2$mouseLeaveDelay = _ref2.mouseLeaveDelay,
|
|
140
|
+
mouseLeaveDelay = _ref2$mouseLeaveDelay === void 0 ? 0 : _ref2$mouseLeaveDelay,
|
|
141
|
+
open = _ref2.open,
|
|
142
|
+
defaultOpen = _ref2.defaultOpen,
|
|
143
|
+
onOpenChange = _ref2.onOpenChange,
|
|
144
|
+
disabled = _ref2.disabled,
|
|
145
|
+
classNames = _ref2.classNames,
|
|
146
|
+
styleProps = _ref2.styles,
|
|
147
|
+
zIndex = _ref2.zIndex,
|
|
148
|
+
_ref2$portalled = _ref2.portalled,
|
|
149
|
+
portalled = _ref2$portalled === void 0 ? true : _ref2$portalled,
|
|
150
|
+
getPopupContainer = _ref2.getPopupContainer;
|
|
151
|
+
var arrowRef = useRef(null);
|
|
152
|
+
var _useState = useState(Boolean(defaultOpen)),
|
|
153
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
154
|
+
uncontrolledOpen = _useState2[0],
|
|
155
|
+
setUncontrolledOpen = _useState2[1];
|
|
156
|
+
var mergedOpen = open !== null && open !== void 0 ? open : uncontrolledOpen;
|
|
157
|
+
var setOpen = function setOpen(next) {
|
|
158
|
+
if (open === undefined) setUncontrolledOpen(next);
|
|
159
|
+
onOpenChange === null || onOpenChange === void 0 || onOpenChange(next);
|
|
160
|
+
};
|
|
161
|
+
var floatingPlacement = useMemo(function () {
|
|
162
|
+
return antdPlacementToFloating(placement);
|
|
163
|
+
}, [placement]);
|
|
164
|
+
var middleware = useMemo(function () {
|
|
165
|
+
var base = [offset(8), flip(), shift({
|
|
166
|
+
padding: 8
|
|
167
|
+
})];
|
|
168
|
+
if (arrow) base.push(arrowMiddleware({
|
|
169
|
+
element: arrowRef
|
|
170
|
+
}));
|
|
171
|
+
return base;
|
|
172
|
+
}, [arrow]);
|
|
173
|
+
var _useFloating = useFloating({
|
|
174
|
+
middleware: middleware,
|
|
175
|
+
onOpenChange: setOpen,
|
|
176
|
+
open: disabled ? false : mergedOpen,
|
|
177
|
+
placement: floatingPlacement,
|
|
178
|
+
whileElementsMounted: autoUpdate
|
|
179
|
+
}),
|
|
180
|
+
context = _useFloating.context,
|
|
181
|
+
floatingStyles = _useFloating.floatingStyles,
|
|
182
|
+
refs = _useFloating.refs;
|
|
183
|
+
var resolvedDelay = useMemo(function () {
|
|
184
|
+
return {
|
|
185
|
+
close: closeDelay !== null && closeDelay !== void 0 ? closeDelay : mouseLeaveDelay * 1000,
|
|
186
|
+
open: openDelay !== null && openDelay !== void 0 ? openDelay : mouseEnterDelay * 1000
|
|
187
|
+
};
|
|
188
|
+
}, [closeDelay, mouseEnterDelay, mouseLeaveDelay, openDelay]);
|
|
189
|
+
var hover = useHover(context, {
|
|
190
|
+
delay: resolvedDelay,
|
|
191
|
+
enabled: !disabled,
|
|
192
|
+
move: false
|
|
193
|
+
});
|
|
194
|
+
var focus = useFocus(context, {
|
|
195
|
+
enabled: !disabled
|
|
196
|
+
});
|
|
197
|
+
var dismiss = useDismiss(context, {
|
|
198
|
+
enabled: !disabled
|
|
199
|
+
});
|
|
200
|
+
var role = useRole(context, {
|
|
201
|
+
role: 'tooltip'
|
|
202
|
+
});
|
|
203
|
+
var _useInteractions = useInteractions([hover, focus, dismiss, role]),
|
|
204
|
+
getFloatingProps = _useInteractions.getFloatingProps,
|
|
205
|
+
getReferenceProps = _useInteractions.getReferenceProps;
|
|
206
|
+
var trigger = useMemo(function () {
|
|
207
|
+
var _children$props2;
|
|
208
|
+
if (! /*#__PURE__*/isValidElement(children)) return /*#__PURE__*/_jsx("span", {
|
|
209
|
+
children: children
|
|
210
|
+
});
|
|
211
|
+
var needsWrapper = typeof children.type === 'string' && Boolean((_children$props2 = children.props) === null || _children$props2 === void 0 ? void 0 : _children$props2.disabled);
|
|
212
|
+
if (needsWrapper) return /*#__PURE__*/_jsx("span", {
|
|
213
|
+
style: {
|
|
214
|
+
display: 'inline-flex'
|
|
215
|
+
},
|
|
216
|
+
children: children
|
|
217
|
+
});
|
|
218
|
+
return children;
|
|
219
|
+
}, [children]);
|
|
220
|
+
var referenceNode = useMemo(function () {
|
|
221
|
+
if (! /*#__PURE__*/isValidElement(trigger)) return trigger;
|
|
222
|
+
var originalRef = trigger.ref;
|
|
223
|
+
return /*#__PURE__*/cloneElement(trigger, getReferenceProps(_objectSpread(_objectSpread({}, trigger.props), {}, {
|
|
224
|
+
ref: mergeRefs([originalRef, refs.setReference, ref])
|
|
225
|
+
})));
|
|
226
|
+
}, [getReferenceProps, ref, refs.setReference, trigger]);
|
|
227
|
+
var portalRoot = getPopupContainer && refs.reference.current ? getPopupContainer(refs.reference.current) : undefined;
|
|
228
|
+
var floatingNode = /*#__PURE__*/_jsx(TooltipFloating, {
|
|
32
229
|
arrow: arrow,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
230
|
+
arrowRef: arrowRef,
|
|
231
|
+
className: className,
|
|
232
|
+
classNames: classNames,
|
|
233
|
+
context: context,
|
|
234
|
+
floatingProps: getFloatingProps(),
|
|
235
|
+
floatingStyles: floatingStyles,
|
|
236
|
+
hotkey: hotkey,
|
|
237
|
+
hotkeyProps: hotkeyProps,
|
|
238
|
+
open: mergedOpen,
|
|
239
|
+
placement: floatingPlacement,
|
|
240
|
+
setFloating: refs.setFloating,
|
|
241
|
+
styles: styleProps,
|
|
242
|
+
title: title,
|
|
243
|
+
zIndex: zIndex
|
|
244
|
+
});
|
|
245
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
246
|
+
children: [referenceNode, !disabled && title && (portalled ? /*#__PURE__*/_jsx(TooltipPortal, {
|
|
247
|
+
root: portalRoot,
|
|
248
|
+
children: floatingNode
|
|
249
|
+
}) : floatingNode)]
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
export var Tooltip = function Tooltip(props) {
|
|
253
|
+
var group = useContext(TooltipGroupContext);
|
|
254
|
+
|
|
255
|
+
// Group mode is intentionally hover/focus driven; keep standalone behavior for controlled cases.
|
|
256
|
+
var canUseGroup = Boolean(group) && props.open === undefined && props.defaultOpen === undefined;
|
|
257
|
+
return canUseGroup ? /*#__PURE__*/_jsx(TooltipInGroup, _objectSpread({}, props)) : /*#__PURE__*/_jsx(TooltipStandalone, _objectSpread({}, props));
|
|
258
|
+
};
|
|
52
259
|
export default Tooltip;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FloatingContext, Placement } from '@floating-ui/react';
|
|
2
|
+
import type { CSSProperties, ReactNode, RefObject } from 'react';
|
|
3
|
+
import type { TooltipProps } from './type';
|
|
4
|
+
type TooltipFloatingProps = {
|
|
5
|
+
arrow?: boolean;
|
|
6
|
+
arrowRef?: RefObject<SVGSVGElement | null>;
|
|
7
|
+
className?: TooltipProps['className'];
|
|
8
|
+
classNames?: TooltipProps['classNames'];
|
|
9
|
+
context?: FloatingContext;
|
|
10
|
+
floatingProps?: Record<string, any>;
|
|
11
|
+
floatingStyles: CSSProperties;
|
|
12
|
+
hotkey?: TooltipProps['hotkey'];
|
|
13
|
+
hotkeyProps?: TooltipProps['hotkeyProps'];
|
|
14
|
+
/**
|
|
15
|
+
* Enable Framer Motion layout/position tweening when provided.
|
|
16
|
+
* Useful for TooltipGroup where the floating position changes frequently.
|
|
17
|
+
*/
|
|
18
|
+
layoutId?: string;
|
|
19
|
+
open: boolean;
|
|
20
|
+
placement?: Placement;
|
|
21
|
+
setFloating: (node: HTMLElement | null) => void;
|
|
22
|
+
styles?: TooltipProps['styles'];
|
|
23
|
+
title?: ReactNode;
|
|
24
|
+
zIndex?: TooltipProps['zIndex'];
|
|
25
|
+
};
|
|
26
|
+
declare const TooltipFloating: {
|
|
27
|
+
({ open, title, placement, floatingStyles, setFloating, floatingProps, arrow, arrowRef, context, hotkey, hotkeyProps, layoutId, className, classNames, styles: styleProps, zIndex, }: TooltipFloatingProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
export default TooltipFloating;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
8
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
+
import { FloatingArrow } from '@floating-ui/react';
|
|
10
|
+
import { useMemo } from 'react';
|
|
11
|
+
import { Flexbox } from 'react-layout-kit';
|
|
12
|
+
import Hotkey from "../Hotkey";
|
|
13
|
+
import { AnimatePresence, LazyMotion, m } from "../motion";
|
|
14
|
+
import { useStyles } from "./style";
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
var TooltipFloating = function TooltipFloating(_ref) {
|
|
18
|
+
var open = _ref.open,
|
|
19
|
+
title = _ref.title,
|
|
20
|
+
placement = _ref.placement,
|
|
21
|
+
floatingStyles = _ref.floatingStyles,
|
|
22
|
+
setFloating = _ref.setFloating,
|
|
23
|
+
floatingProps = _ref.floatingProps,
|
|
24
|
+
arrow = _ref.arrow,
|
|
25
|
+
arrowRef = _ref.arrowRef,
|
|
26
|
+
context = _ref.context,
|
|
27
|
+
hotkey = _ref.hotkey,
|
|
28
|
+
hotkeyProps = _ref.hotkeyProps,
|
|
29
|
+
layoutId = _ref.layoutId,
|
|
30
|
+
className = _ref.className,
|
|
31
|
+
classNames = _ref.classNames,
|
|
32
|
+
styleProps = _ref.styles,
|
|
33
|
+
zIndex = _ref.zIndex;
|
|
34
|
+
var _useStyles = useStyles(),
|
|
35
|
+
styles = _useStyles.styles,
|
|
36
|
+
cx = _useStyles.cx;
|
|
37
|
+
var transformOrigin = useMemo(function () {
|
|
38
|
+
var basePlacement = String(placement || 'top').split('-')[0];
|
|
39
|
+
switch (basePlacement) {
|
|
40
|
+
case 'top':
|
|
41
|
+
{
|
|
42
|
+
return 'bottom center';
|
|
43
|
+
}
|
|
44
|
+
case 'bottom':
|
|
45
|
+
{
|
|
46
|
+
return 'top center';
|
|
47
|
+
}
|
|
48
|
+
case 'left':
|
|
49
|
+
{
|
|
50
|
+
return 'center right';
|
|
51
|
+
}
|
|
52
|
+
case 'right':
|
|
53
|
+
{
|
|
54
|
+
return 'center left';
|
|
55
|
+
}
|
|
56
|
+
default:
|
|
57
|
+
{
|
|
58
|
+
return 'center';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}, [placement]);
|
|
62
|
+
return /*#__PURE__*/_jsx(LazyMotion, {
|
|
63
|
+
children: /*#__PURE__*/_jsx(AnimatePresence, {
|
|
64
|
+
children: open && title && /*#__PURE__*/_jsx(m.div, _objectSpread(_objectSpread({
|
|
65
|
+
animate: {
|
|
66
|
+
opacity: 1
|
|
67
|
+
},
|
|
68
|
+
className: cx(styles.tooltip, classNames === null || classNames === void 0 ? void 0 : classNames.container, classNames === null || classNames === void 0 ? void 0 : classNames.root, className),
|
|
69
|
+
exit: {
|
|
70
|
+
opacity: 0
|
|
71
|
+
},
|
|
72
|
+
initial: {
|
|
73
|
+
opacity: 0
|
|
74
|
+
},
|
|
75
|
+
ref: setFloating,
|
|
76
|
+
role: "tooltip",
|
|
77
|
+
style: styleProps !== null && styleProps !== void 0 && styleProps.root ? _objectSpread(_objectSpread(_objectSpread({}, floatingStyles), {}, {
|
|
78
|
+
zIndex: zIndex
|
|
79
|
+
}, styleProps.container), styleProps.root) : _objectSpread(_objectSpread({}, floatingStyles), {}, {
|
|
80
|
+
zIndex: zIndex
|
|
81
|
+
}, styleProps === null || styleProps === void 0 ? void 0 : styleProps.container),
|
|
82
|
+
transition: {
|
|
83
|
+
duration: 0.12,
|
|
84
|
+
ease: [0.4, 0, 0.2, 1]
|
|
85
|
+
}
|
|
86
|
+
}, floatingProps), {}, {
|
|
87
|
+
children: /*#__PURE__*/_jsxs(m.div, {
|
|
88
|
+
animate: {
|
|
89
|
+
scale: 1
|
|
90
|
+
},
|
|
91
|
+
exit: {
|
|
92
|
+
scale: 0.98
|
|
93
|
+
},
|
|
94
|
+
initial: {
|
|
95
|
+
scale: 0.96
|
|
96
|
+
},
|
|
97
|
+
layout: layoutId ? 'position' : undefined,
|
|
98
|
+
layoutId: layoutId,
|
|
99
|
+
style: {
|
|
100
|
+
transformOrigin: transformOrigin
|
|
101
|
+
},
|
|
102
|
+
transition: {
|
|
103
|
+
duration: 0.12,
|
|
104
|
+
ease: [0.4, 0, 0.2, 1]
|
|
105
|
+
},
|
|
106
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
107
|
+
className: cx(styles.content, classNames === null || classNames === void 0 ? void 0 : classNames.content),
|
|
108
|
+
style: styleProps === null || styleProps === void 0 ? void 0 : styleProps.content,
|
|
109
|
+
children: hotkey ? /*#__PURE__*/_jsxs(Flexbox, {
|
|
110
|
+
align: 'center',
|
|
111
|
+
gap: 8,
|
|
112
|
+
horizontal: true,
|
|
113
|
+
justify: 'space-between',
|
|
114
|
+
children: [/*#__PURE__*/_jsx("span", {
|
|
115
|
+
children: title
|
|
116
|
+
}), /*#__PURE__*/_jsx(Hotkey, _objectSpread({
|
|
117
|
+
inverseTheme: true,
|
|
118
|
+
keys: hotkey
|
|
119
|
+
}, hotkeyProps))]
|
|
120
|
+
}) : title
|
|
121
|
+
}), arrow && context && /*#__PURE__*/_jsx(FloatingArrow, {
|
|
122
|
+
className: cx(styles.arrow, classNames === null || classNames === void 0 ? void 0 : classNames.arrow),
|
|
123
|
+
context: context,
|
|
124
|
+
height: 6,
|
|
125
|
+
ref: arrowRef,
|
|
126
|
+
style: styleProps === null || styleProps === void 0 ? void 0 : styleProps.arrow,
|
|
127
|
+
width: 12
|
|
128
|
+
})]
|
|
129
|
+
})
|
|
130
|
+
}), "tooltip")
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
TooltipFloating.displayName = 'TooltipFloating';
|
|
135
|
+
export default TooltipFloating;
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
7
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
8
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
9
|
+
import { arrow as arrowMiddleware, autoUpdate, flip, offset, shift, useFloating } from '@floating-ui/react';
|
|
10
|
+
import { memo, useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
11
|
+
import { antdPlacementToFloating } from "./antdPlacementToFloating";
|
|
12
|
+
import TooltipFloating from "./TooltipFloating";
|
|
13
|
+
import TooltipPortal from "./TooltipPortal";
|
|
14
|
+
import { TooltipGroupContext } from "./groupContext";
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
var TooltipGroup = /*#__PURE__*/memo(function (_ref) {
|
|
18
|
+
var _active$item$portalle;
|
|
19
|
+
var children = _ref.children;
|
|
20
|
+
var arrowRef = useRef(null);
|
|
21
|
+
var openTimerRef = useRef(null);
|
|
22
|
+
var closeTimerRef = useRef(null);
|
|
23
|
+
var internalGroupId = useId();
|
|
24
|
+
var motionLayoutId = useMemo(function () {
|
|
25
|
+
return "lobe-ui-tooltip-group:".concat(internalGroupId);
|
|
26
|
+
}, [internalGroupId]);
|
|
27
|
+
var _useState = useState(null),
|
|
28
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
29
|
+
active = _useState2[0],
|
|
30
|
+
setActive = _useState2[1];
|
|
31
|
+
var _useState3 = useState(false),
|
|
32
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
33
|
+
open = _useState4[0],
|
|
34
|
+
setOpen = _useState4[1];
|
|
35
|
+
var activeRef = useRef(null);
|
|
36
|
+
useEffect(function () {
|
|
37
|
+
activeRef.current = active;
|
|
38
|
+
}, [active]);
|
|
39
|
+
var floatingPlacement = useMemo(function () {
|
|
40
|
+
return antdPlacementToFloating(active === null || active === void 0 ? void 0 : active.item.placement);
|
|
41
|
+
}, [active === null || active === void 0 ? void 0 : active.item.placement]);
|
|
42
|
+
var middleware = useMemo(function () {
|
|
43
|
+
var base = [offset(8), flip(), shift({
|
|
44
|
+
padding: 8
|
|
45
|
+
})];
|
|
46
|
+
if (active !== null && active !== void 0 && active.item.arrow) base.push(arrowMiddleware({
|
|
47
|
+
element: arrowRef
|
|
48
|
+
}));
|
|
49
|
+
return base;
|
|
50
|
+
}, [active === null || active === void 0 ? void 0 : active.item.arrow]);
|
|
51
|
+
var _useFloating = useFloating({
|
|
52
|
+
middleware: middleware,
|
|
53
|
+
open: open,
|
|
54
|
+
placement: floatingPlacement,
|
|
55
|
+
whileElementsMounted: autoUpdate
|
|
56
|
+
}),
|
|
57
|
+
context = _useFloating.context,
|
|
58
|
+
floatingStyles = _useFloating.floatingStyles,
|
|
59
|
+
refs = _useFloating.refs;
|
|
60
|
+
useEffect(function () {
|
|
61
|
+
if (!(active !== null && active !== void 0 && active.triggerEl)) return;
|
|
62
|
+
refs.setReference(active.triggerEl);
|
|
63
|
+
}, [active === null || active === void 0 ? void 0 : active.triggerEl, refs]);
|
|
64
|
+
var clearTimers = useCallback(function () {
|
|
65
|
+
if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
|
|
66
|
+
if (closeTimerRef.current) window.clearTimeout(closeTimerRef.current);
|
|
67
|
+
openTimerRef.current = null;
|
|
68
|
+
closeTimerRef.current = null;
|
|
69
|
+
}, []);
|
|
70
|
+
var closeImmediately = useCallback(function () {
|
|
71
|
+
var _activeRef$current, _activeRef$current$it, _activeRef$current$it2;
|
|
72
|
+
clearTimers();
|
|
73
|
+
setOpen(false);
|
|
74
|
+
(_activeRef$current = activeRef.current) === null || _activeRef$current === void 0 || (_activeRef$current$it = (_activeRef$current$it2 = _activeRef$current.item).onOpenChange) === null || _activeRef$current$it === void 0 || _activeRef$current$it.call(_activeRef$current$it2, false);
|
|
75
|
+
}, [clearTimers]);
|
|
76
|
+
var isActiveTrigger = useCallback(function (triggerEl) {
|
|
77
|
+
return Boolean(activeRef.current && activeRef.current.triggerEl === triggerEl);
|
|
78
|
+
}, []);
|
|
79
|
+
var closeFromTrigger = useCallback(function (triggerEl, item) {
|
|
80
|
+
var _item$closeDelay, _item$mouseLeaveDelay;
|
|
81
|
+
if (!activeRef.current || activeRef.current.triggerEl !== triggerEl) return;
|
|
82
|
+
clearTimers();
|
|
83
|
+
var delayMs = (_item$closeDelay = item.closeDelay) !== null && _item$closeDelay !== void 0 ? _item$closeDelay : ((_item$mouseLeaveDelay = item.mouseLeaveDelay) !== null && _item$mouseLeaveDelay !== void 0 ? _item$mouseLeaveDelay : 0) * 1000;
|
|
84
|
+
if (delayMs <= 0) {
|
|
85
|
+
var _item$onOpenChange;
|
|
86
|
+
setOpen(false);
|
|
87
|
+
(_item$onOpenChange = item.onOpenChange) === null || _item$onOpenChange === void 0 || _item$onOpenChange.call(item, false);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
closeTimerRef.current = window.setTimeout(function () {
|
|
91
|
+
var _item$onOpenChange2;
|
|
92
|
+
setOpen(false);
|
|
93
|
+
(_item$onOpenChange2 = item.onOpenChange) === null || _item$onOpenChange2 === void 0 || _item$onOpenChange2.call(item, false);
|
|
94
|
+
}, delayMs);
|
|
95
|
+
}, [clearTimers]);
|
|
96
|
+
var openFromTrigger = useCallback(function (triggerEl, item) {
|
|
97
|
+
var _item$openDelay, _item$mouseEnterDelay;
|
|
98
|
+
if (!triggerEl) return;
|
|
99
|
+
if (!item.title) return;
|
|
100
|
+
if (item.disabled) return;
|
|
101
|
+
clearTimers();
|
|
102
|
+
setActive({
|
|
103
|
+
item: item,
|
|
104
|
+
triggerEl: triggerEl
|
|
105
|
+
});
|
|
106
|
+
var delayMs = (_item$openDelay = item.openDelay) !== null && _item$openDelay !== void 0 ? _item$openDelay : ((_item$mouseEnterDelay = item.mouseEnterDelay) !== null && _item$mouseEnterDelay !== void 0 ? _item$mouseEnterDelay : 0) * 1000;
|
|
107
|
+
if (delayMs <= 0) {
|
|
108
|
+
var _item$onOpenChange3;
|
|
109
|
+
setOpen(true);
|
|
110
|
+
(_item$onOpenChange3 = item.onOpenChange) === null || _item$onOpenChange3 === void 0 || _item$onOpenChange3.call(item, true);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
openTimerRef.current = window.setTimeout(function () {
|
|
114
|
+
var _item$onOpenChange4;
|
|
115
|
+
setOpen(true);
|
|
116
|
+
(_item$onOpenChange4 = item.onOpenChange) === null || _item$onOpenChange4 === void 0 || _item$onOpenChange4.call(item, true);
|
|
117
|
+
}, delayMs);
|
|
118
|
+
}, [clearTimers]);
|
|
119
|
+
var api = useMemo(function () {
|
|
120
|
+
return {
|
|
121
|
+
closeFromTrigger: closeFromTrigger,
|
|
122
|
+
closeImmediately: closeImmediately,
|
|
123
|
+
isActiveTrigger: isActiveTrigger,
|
|
124
|
+
openFromTrigger: openFromTrigger
|
|
125
|
+
};
|
|
126
|
+
}, [closeFromTrigger, closeImmediately, isActiveTrigger, openFromTrigger]);
|
|
127
|
+
useEffect(function () {
|
|
128
|
+
return function () {
|
|
129
|
+
clearTimers();
|
|
130
|
+
};
|
|
131
|
+
}, [clearTimers]);
|
|
132
|
+
var portalRoot = active !== null && active !== void 0 && active.item.getPopupContainer && active !== null && active !== void 0 && active.triggerEl ? active.item.getPopupContainer(active.triggerEl) : undefined;
|
|
133
|
+
var floatingNode = /*#__PURE__*/_jsx(TooltipFloating, {
|
|
134
|
+
arrow: active === null || active === void 0 ? void 0 : active.item.arrow,
|
|
135
|
+
arrowRef: arrowRef,
|
|
136
|
+
className: active === null || active === void 0 ? void 0 : active.item.className,
|
|
137
|
+
classNames: active === null || active === void 0 ? void 0 : active.item.classNames,
|
|
138
|
+
context: context,
|
|
139
|
+
floatingStyles: floatingStyles,
|
|
140
|
+
hotkey: active === null || active === void 0 ? void 0 : active.item.hotkey,
|
|
141
|
+
hotkeyProps: active === null || active === void 0 ? void 0 : active.item.hotkeyProps,
|
|
142
|
+
layoutId: motionLayoutId,
|
|
143
|
+
open: open,
|
|
144
|
+
placement: floatingPlacement,
|
|
145
|
+
setFloating: refs.setFloating,
|
|
146
|
+
styles: active === null || active === void 0 ? void 0 : active.item.styles,
|
|
147
|
+
title: active === null || active === void 0 ? void 0 : active.item.title,
|
|
148
|
+
zIndex: active === null || active === void 0 ? void 0 : active.item.zIndex
|
|
149
|
+
});
|
|
150
|
+
return /*#__PURE__*/_jsxs(TooltipGroupContext.Provider, {
|
|
151
|
+
value: api,
|
|
152
|
+
children: [children, (active === null || active === void 0 ? void 0 : active.item.title) && !active.item.disabled && (((_active$item$portalle = active.item.portalled) !== null && _active$item$portalle !== void 0 ? _active$item$portalle : true) ? /*#__PURE__*/_jsx(TooltipPortal, {
|
|
153
|
+
root: portalRoot,
|
|
154
|
+
children: floatingNode
|
|
155
|
+
}) : floatingNode)]
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
TooltipGroup.displayName = 'TooltipGroup';
|
|
159
|
+
export default TooltipGroup;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
type TooltipPortalProps = {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
root?: HTMLElement | ShadowRoot | null;
|
|
5
|
+
};
|
|
6
|
+
declare const TooltipPortal: ({ children, root }: TooltipPortalProps) => import("react").ReactPortal | null;
|
|
7
|
+
export default TooltipPortal;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
7
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
8
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
9
|
+
import { useState } from 'react';
|
|
10
|
+
import { createPortal } from 'react-dom';
|
|
11
|
+
var PORTAL_ATTR = 'data-lobe-ui-tooltip-portal';
|
|
12
|
+
|
|
13
|
+
// Reuse one portal container per root (document.body by default).
|
|
14
|
+
var containerMap = new WeakMap();
|
|
15
|
+
var getOrCreateContainer = function getOrCreateContainer(root) {
|
|
16
|
+
var cached = containerMap.get(root);
|
|
17
|
+
if (cached && cached.isConnected) return cached;
|
|
18
|
+
var el = document.createElement('div');
|
|
19
|
+
el.setAttribute(PORTAL_ATTR, 'true');
|
|
20
|
+
root.append(el);
|
|
21
|
+
containerMap.set(root, el);
|
|
22
|
+
return el;
|
|
23
|
+
};
|
|
24
|
+
var resolveRoot = function resolveRoot(root) {
|
|
25
|
+
if (root) return root;
|
|
26
|
+
if (typeof document === 'undefined') return null;
|
|
27
|
+
return document.body;
|
|
28
|
+
};
|
|
29
|
+
var TooltipPortal = function TooltipPortal(_ref) {
|
|
30
|
+
var children = _ref.children,
|
|
31
|
+
root = _ref.root;
|
|
32
|
+
var _useState = useState(function () {
|
|
33
|
+
var resolved = resolveRoot(root);
|
|
34
|
+
if (!resolved) return null;
|
|
35
|
+
return getOrCreateContainer(resolved);
|
|
36
|
+
}),
|
|
37
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
38
|
+
container = _useState2[0],
|
|
39
|
+
setContainer = _useState2[1];
|
|
40
|
+
if (!container && typeof document !== 'undefined') {
|
|
41
|
+
setContainer(getOrCreateContainer(document.body));
|
|
42
|
+
}
|
|
43
|
+
if (!container) return null;
|
|
44
|
+
return /*#__PURE__*/createPortal(children, container);
|
|
45
|
+
};
|
|
46
|
+
export default TooltipPortal;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Placement } from '@floating-ui/react';
|
|
2
|
+
/**
|
|
3
|
+
* Convert Ant Design legacy placements to Floating UI placements.
|
|
4
|
+
*
|
|
5
|
+
* Notes:
|
|
6
|
+
* - Floating UI placements like `top-start` are passed through.
|
|
7
|
+
* - Ant Design legacy placements like `topLeft` are mapped to Floating UI.
|
|
8
|
+
*/
|
|
9
|
+
export declare const antdPlacementToFloating: (placement?: Placement | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom' | 'top' | 'bottom' | 'left' | 'right') => Placement;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert Ant Design legacy placements to Floating UI placements.
|
|
3
|
+
*
|
|
4
|
+
* Notes:
|
|
5
|
+
* - Floating UI placements like `top-start` are passed through.
|
|
6
|
+
* - Ant Design legacy placements like `topLeft` are mapped to Floating UI.
|
|
7
|
+
*/
|
|
8
|
+
export var antdPlacementToFloating = function antdPlacementToFloating(placement) {
|
|
9
|
+
if (!placement) return 'top';
|
|
10
|
+
|
|
11
|
+
// Floating UI placements are already compatible.
|
|
12
|
+
if (typeof placement === 'string' && placement.includes('-')) return placement;
|
|
13
|
+
switch (placement) {
|
|
14
|
+
case 'topLeft':
|
|
15
|
+
{
|
|
16
|
+
return 'top-start';
|
|
17
|
+
}
|
|
18
|
+
case 'topRight':
|
|
19
|
+
{
|
|
20
|
+
return 'top-end';
|
|
21
|
+
}
|
|
22
|
+
case 'bottomLeft':
|
|
23
|
+
{
|
|
24
|
+
return 'bottom-start';
|
|
25
|
+
}
|
|
26
|
+
case 'bottomRight':
|
|
27
|
+
{
|
|
28
|
+
return 'bottom-end';
|
|
29
|
+
}
|
|
30
|
+
case 'leftTop':
|
|
31
|
+
{
|
|
32
|
+
return 'left-start';
|
|
33
|
+
}
|
|
34
|
+
case 'leftBottom':
|
|
35
|
+
{
|
|
36
|
+
return 'left-end';
|
|
37
|
+
}
|
|
38
|
+
case 'rightTop':
|
|
39
|
+
{
|
|
40
|
+
return 'right-start';
|
|
41
|
+
}
|
|
42
|
+
case 'rightBottom':
|
|
43
|
+
{
|
|
44
|
+
return 'right-end';
|
|
45
|
+
}
|
|
46
|
+
default:
|
|
47
|
+
{
|
|
48
|
+
return placement;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { TooltipProps } from './type';
|
|
3
|
+
export type TooltipGroupItem = Omit<TooltipProps, 'children' | 'open' | 'defaultOpen'>;
|
|
4
|
+
export type TooltipGroupApi = {
|
|
5
|
+
closeFromTrigger: (triggerEl: HTMLElement, item: TooltipGroupItem) => void;
|
|
6
|
+
closeImmediately: () => void;
|
|
7
|
+
isActiveTrigger: (triggerEl: HTMLElement) => boolean;
|
|
8
|
+
openFromTrigger: (triggerEl: HTMLElement, item: TooltipGroupItem) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const TooltipGroupContext: import("react").Context<TooltipGroupApi | null>;
|
package/es/Tooltip/index.d.ts
CHANGED
package/es/Tooltip/index.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { default } from "./Tooltip";
|
|
1
|
+
export { default } from "./Tooltip";
|
|
2
|
+
export { default as TooltipGroup } from "./TooltipGroup";
|
package/es/Tooltip/style.d.ts
CHANGED
package/es/Tooltip/style.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
var _templateObject;
|
|
1
|
+
var _templateObject, _templateObject2, _templateObject3;
|
|
2
2
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
3
3
|
import { createStyles } from 'antd-style';
|
|
4
4
|
export var useStyles = createStyles(function (_ref) {
|
|
5
5
|
var css = _ref.css,
|
|
6
|
-
token = _ref.token
|
|
7
|
-
prefixCls = _ref.prefixCls;
|
|
6
|
+
token = _ref.token;
|
|
8
7
|
return {
|
|
9
|
-
|
|
8
|
+
arrow: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n fill: ", ";\n "])), token.colorText),
|
|
9
|
+
content: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-height: unset;\n padding: 8px;\n border-radius: ", "px;\n\n color: ", ";\n word-break: normal;\n\n background-color: ", ";\n "])), token.borderRadiusSM, token.colorBgLayout, token.colorText),
|
|
10
|
+
tooltip: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n pointer-events: none;\n\n /* Keep the class name for backwards compatibility and user overrides */\n position: relative;\n z-index: 114514;\n filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 12%));\n "])))
|
|
10
11
|
};
|
|
11
12
|
});
|
package/es/Tooltip/type.d.ts
CHANGED
|
@@ -1,10 +1,98 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { ReactNode, Ref } from 'react';
|
|
1
|
+
import type { Placement } from '@floating-ui/react';
|
|
2
|
+
import type { CSSProperties, ReactElement, ReactNode, Ref } from 'react';
|
|
4
3
|
import type { HotkeyProps } from "../Hotkey";
|
|
5
|
-
export type
|
|
4
|
+
export type TooltipPlacement = Placement | 'topLeft' | 'top' | 'topRight' | 'leftTop' | 'left' | 'leftBottom' | 'rightTop' | 'right' | 'rightBottom' | 'bottomLeft' | 'bottom' | 'bottomRight';
|
|
5
|
+
export type TooltipProps = {
|
|
6
|
+
/**
|
|
7
|
+
* Whether the tooltip has an arrow pointer.
|
|
8
|
+
*/
|
|
9
|
+
arrow?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Trigger element. Prefer a single React element.
|
|
12
|
+
*/
|
|
13
|
+
children: ReactElement | ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Custom className for the tooltip floating root.
|
|
16
|
+
*/
|
|
17
|
+
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Compatible with Ant Design `classNames` shape (subset).
|
|
20
|
+
*/
|
|
21
|
+
classNames?: {
|
|
22
|
+
arrow?: string;
|
|
23
|
+
container?: string;
|
|
24
|
+
content?: string;
|
|
25
|
+
root?: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Delay (in milliseconds) before closing the tooltip.
|
|
29
|
+
* Takes precedence over `mouseLeaveDelay`.
|
|
30
|
+
*/
|
|
31
|
+
closeDelay?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Uncontrolled initial open state.
|
|
34
|
+
*/
|
|
35
|
+
defaultOpen?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Disable tooltip behavior.
|
|
38
|
+
*/
|
|
39
|
+
disabled?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* An Ant Design compatible escape hatch for portal container.
|
|
42
|
+
*/
|
|
43
|
+
getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement;
|
|
6
44
|
hotkey?: string;
|
|
7
45
|
hotkeyProps?: Omit<HotkeyProps, 'keys'>;
|
|
8
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Delay (in seconds) before showing the tooltip on hover.
|
|
48
|
+
* Kept compatible with Ant Design `Tooltip`.
|
|
49
|
+
*/
|
|
50
|
+
mouseEnterDelay?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Delay (in seconds) before hiding the tooltip on hover out.
|
|
53
|
+
* Kept compatible with Ant Design `Tooltip`.
|
|
54
|
+
*/
|
|
55
|
+
mouseLeaveDelay?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Callback when open state changes.
|
|
58
|
+
*/
|
|
59
|
+
onOpenChange?: (open: boolean) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Controlled open state.
|
|
62
|
+
*/
|
|
63
|
+
open?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Delay (in milliseconds) before opening the tooltip.
|
|
66
|
+
* Takes precedence over `mouseEnterDelay`.
|
|
67
|
+
*/
|
|
68
|
+
openDelay?: number;
|
|
69
|
+
/**
|
|
70
|
+
* Tooltip placement. Supports Floating UI placements and Ant Design legacy placements.
|
|
71
|
+
*/
|
|
72
|
+
placement?: TooltipPlacement;
|
|
73
|
+
/**
|
|
74
|
+
* Render tooltip in a portal attached to body.
|
|
75
|
+
*/
|
|
76
|
+
portalled?: boolean;
|
|
77
|
+
ref?: Ref<HTMLElement>;
|
|
78
|
+
/**
|
|
79
|
+
* Compatible with Ant Design `styles` shape (subset).
|
|
80
|
+
*/
|
|
81
|
+
styles?: {
|
|
82
|
+
arrow?: CSSProperties;
|
|
83
|
+
/**
|
|
84
|
+
* Backwards-compatible alias for the floating root style.
|
|
85
|
+
*/
|
|
86
|
+
container?: CSSProperties;
|
|
87
|
+
content?: CSSProperties;
|
|
88
|
+
root?: CSSProperties;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Tooltip content.
|
|
92
|
+
*/
|
|
9
93
|
title: ReactNode;
|
|
94
|
+
/**
|
|
95
|
+
* z-index for tooltip floating root.
|
|
96
|
+
*/
|
|
97
|
+
zIndex?: number;
|
|
10
98
|
};
|
|
@@ -24,6 +24,6 @@ export declare const useHighlight: (text: string, { language, enableTransformer,
|
|
|
24
24
|
enableTransformer?: boolean | undefined;
|
|
25
25
|
language: string;
|
|
26
26
|
streaming?: boolean | undefined;
|
|
27
|
-
theme?: import("shiki
|
|
27
|
+
theme?: import("shiki").BundledTheme | undefined;
|
|
28
28
|
}) => UseHighlightResponse;
|
|
29
29
|
export { escapeHtml, loadShiki, MD5_LENGTH_THRESHOLD, shikiPromise };
|
package/es/index.d.ts
CHANGED
|
@@ -72,7 +72,7 @@ export { default as Text, type TextProps } from './Text';
|
|
|
72
72
|
export { Meta, type MetaProps, default as ThemeProvider, type ThemeProviderProps, } from './ThemeProvider';
|
|
73
73
|
export { default as ThemeSwitch, type ThemeSwitchProps } from './ThemeSwitch';
|
|
74
74
|
export { default as Toc, type TocProps } from './Toc';
|
|
75
|
-
export { default as Tooltip, type TooltipProps } from './Tooltip';
|
|
75
|
+
export { default as Tooltip, TooltipGroup, type TooltipProps } from './Tooltip';
|
|
76
76
|
export type * from './types';
|
|
77
77
|
export { copyToClipboard } from './utils/copyToClipboard';
|
|
78
78
|
export { type CDN, genCdnUrl } from './utils/genCdnUrl';
|
package/es/index.js
CHANGED
|
@@ -72,7 +72,7 @@ export { default as Text } from "./Text";
|
|
|
72
72
|
export { Meta, default as ThemeProvider } from "./ThemeProvider";
|
|
73
73
|
export { default as ThemeSwitch } from "./ThemeSwitch";
|
|
74
74
|
export { default as Toc } from "./Toc";
|
|
75
|
-
export { default as Tooltip } from "./Tooltip";
|
|
75
|
+
export { default as Tooltip, TooltipGroup } from "./Tooltip";
|
|
76
76
|
export { copyToClipboard } from "./utils/copyToClipboard";
|
|
77
77
|
export { genCdnUrl } from "./utils/genCdnUrl";
|
|
78
78
|
export { default as Video } from "./Video";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LazyMotion as MotionLazyMotion } from 'motion/react';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
type MotionLazyMotionProps = ComponentProps<typeof MotionLazyMotion>;
|
|
4
|
+
export type LobeLazyMotionProps = Omit<MotionLazyMotionProps, 'features'> & {
|
|
5
|
+
/**
|
|
6
|
+
* Optional override for Motion features.
|
|
7
|
+
* Defaults to the shared lazy-loaded `loadFeatures`.
|
|
8
|
+
*/
|
|
9
|
+
features?: MotionLazyMotionProps['features'];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* A project-wide `LazyMotion` wrapper that provides a shared default `features` loader.
|
|
13
|
+
*/
|
|
14
|
+
export declare const LazyMotion: import("react").NamedExoticComponent<LobeLazyMotionProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
var _excluded = ["features"];
|
|
5
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
6
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
7
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
11
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
|
+
import { LazyMotion as MotionLazyMotion } from 'motion/react';
|
|
13
|
+
import { memo } from 'react';
|
|
14
|
+
import { loadFeatures } from "./loadFeatures";
|
|
15
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
16
|
+
/**
|
|
17
|
+
* A project-wide `LazyMotion` wrapper that provides a shared default `features` loader.
|
|
18
|
+
*/
|
|
19
|
+
export var LazyMotion = /*#__PURE__*/memo(function (_ref) {
|
|
20
|
+
var features = _ref.features,
|
|
21
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
22
|
+
return /*#__PURE__*/_jsx(MotionLazyMotion, _objectSpread({
|
|
23
|
+
features: features !== null && features !== void 0 ? features : loadFeatures
|
|
24
|
+
}, props));
|
|
25
|
+
});
|
|
26
|
+
LazyMotion.displayName = 'LazyMotion';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LazyMotion as MotionLazyMotion } from 'motion/react';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Shared lazy-loaded Motion features bundle.
|
|
5
|
+
* Using a dynamic import keeps the initial bundle lighter and avoids repeating this logic across components.
|
|
6
|
+
*/
|
|
7
|
+
type MotionLazyMotionProps = ComponentProps<typeof MotionLazyMotion>;
|
|
8
|
+
export declare const loadFeatures: MotionLazyMotionProps['features'];
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared lazy-loaded Motion features bundle.
|
|
3
|
+
* Using a dynamic import keeps the initial bundle lighter and avoids repeating this logic across components.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export var loadFeatures = function loadFeatures() {
|
|
7
|
+
return import('motion/react').then(function (res) {
|
|
8
|
+
return res.domAnimation;
|
|
9
|
+
});
|
|
10
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composes two event handlers together, calling the external handler first,
|
|
3
|
+
* then the internal handler if the event hasn't been prevented.
|
|
4
|
+
*
|
|
5
|
+
* @template E - The event type
|
|
6
|
+
* @param theirHandler - The external event handler (may be undefined)
|
|
7
|
+
* @param ourHandler - The internal event handler
|
|
8
|
+
* @returns A composed event handler that calls both handlers in sequence
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <button
|
|
13
|
+
* onClick={composeEventHandlers(externalOnClick, (e) => {
|
|
14
|
+
* // Internal handler logic
|
|
15
|
+
* })}
|
|
16
|
+
* />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare const composeEventHandlers: <E>(theirHandler: ((event: E) => void) | undefined, ourHandler: (event: E) => void) => (event: E) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composes two event handlers together, calling the external handler first,
|
|
3
|
+
* then the internal handler if the event hasn't been prevented.
|
|
4
|
+
*
|
|
5
|
+
* @template E - The event type
|
|
6
|
+
* @param theirHandler - The external event handler (may be undefined)
|
|
7
|
+
* @param ourHandler - The internal event handler
|
|
8
|
+
* @returns A composed event handler that calls both handlers in sequence
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <button
|
|
13
|
+
* onClick={composeEventHandlers(externalOnClick, (e) => {
|
|
14
|
+
* // Internal handler logic
|
|
15
|
+
* })}
|
|
16
|
+
* />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export var composeEventHandlers = function composeEventHandlers(theirHandler, ourHandler) {
|
|
20
|
+
return function (event) {
|
|
21
|
+
theirHandler === null || theirHandler === void 0 || theirHandler(event);
|
|
22
|
+
// @ts-ignore - compatible with React SyntheticEvent shape
|
|
23
|
+
if (event !== null && event !== void 0 && event.defaultPrevented) return;
|
|
24
|
+
ourHandler(event);
|
|
25
|
+
};
|
|
26
|
+
};
|