@lobehub/ui 4.12.2 → 4.13.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.
Files changed (168) hide show
  1. package/es/Accordion/Accordion.d.mts +2 -2
  2. package/es/Accordion/AccordionItem.d.mts +2 -2
  3. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  4. package/es/Alert/Alert.d.mts +2 -2
  5. package/es/AutoComplete/Select.d.mts +2 -2
  6. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  7. package/es/Burger/Burger.d.mts +2 -2
  8. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  9. package/es/Collapse/Collapse.d.mts +2 -2
  10. package/es/ConfigProvider/index.d.mts +2 -2
  11. package/es/ContextMenu/ContextMenuHost.d.mts +2 -2
  12. package/es/ContextMenu/ContextMenuHost.mjs +1 -1
  13. package/es/CopyButton/CopyButton.d.mts +2 -2
  14. package/es/DatePicker/DatePicker.d.mts +2 -2
  15. package/es/DraggablePanel/DraggablePanel.mjs +1 -1
  16. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  17. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  18. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  19. package/es/DraggableSideNav/DraggableSideNav.mjs +1 -1
  20. package/es/Drawer/Drawer.d.mts +2 -2
  21. package/es/Dropdown/Dropdown.d.mts +2 -2
  22. package/es/DropdownMenu/DropdownMenu.d.mts +2 -2
  23. package/es/DropdownMenu/DropdownMenu.mjs +3 -3
  24. package/es/EditableText/EditableText.d.mts +2 -2
  25. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  26. package/es/Flex/FlexBasic.d.mts +2 -2
  27. package/es/FontLoader/index.d.mts +2 -2
  28. package/es/Footer/Footer.d.mts +2 -2
  29. package/es/Form/components/FormGroup.d.mts +2 -2
  30. package/es/Form/components/FormItem.d.mts +2 -2
  31. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  32. package/es/FormModal/FormModal.d.mts +2 -2
  33. package/es/Header/Header.d.mts +2 -2
  34. package/es/Highlighter/Highlighter.d.mts +2 -2
  35. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  36. package/es/Hotkey/Hotkey.d.mts +2 -2
  37. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  38. package/es/Icon/Icon.d.mts +2 -2
  39. package/es/Icon/components/IconProvider.d.mts +3 -3
  40. package/es/Image/PreviewGroup.d.mts +2 -2
  41. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  42. package/es/Input/Input.d.mts +2 -2
  43. package/es/Input/InputNumber.d.mts +2 -2
  44. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  45. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  46. package/es/Layout/components/LayoutMain.d.mts +2 -2
  47. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  48. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  49. package/es/Layout/components/LayoutToc.d.mts +2 -2
  50. package/es/List/ListItem/index.d.mts +2 -2
  51. package/es/Markdown/Markdown.d.mts +2 -2
  52. package/es/Markdown/Typography.d.mts +2 -2
  53. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  54. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  55. package/es/Menu/Menu.d.mts +2 -2
  56. package/es/Mermaid/Mermaid.d.mts +2 -2
  57. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  58. package/es/Modal/Modal.d.mts +2 -2
  59. package/es/Modal/ModalProvider.d.mts +2 -2
  60. package/es/MotionProvider/index.d.mts +2 -2
  61. package/es/Popover/Popover.mjs +1 -1
  62. package/es/Popover/Popover.mjs.map +1 -1
  63. package/es/Popover/PopoverGroup.mjs +6 -2
  64. package/es/Popover/PopoverGroup.mjs.map +1 -1
  65. package/es/Popover/PopoverInGroup.mjs +1 -1
  66. package/es/Popover/PopoverPortal.mjs +1 -1
  67. package/es/Popover/PopoverPortal.mjs.map +1 -1
  68. package/es/Popover/PopoverStandalone.mjs +2 -2
  69. package/es/Popover/context.d.mts +2 -2
  70. package/es/Popover/context.mjs +3 -1
  71. package/es/Popover/context.mjs.map +1 -1
  72. package/es/Popover/type.d.mts +4 -0
  73. package/es/SearchBar/SearchBar.d.mts +2 -2
  74. package/es/Segmented/Segmented.d.mts +2 -2
  75. package/es/Select/Select.d.mts +2 -2
  76. package/es/SideNav/SideNav.d.mts +2 -2
  77. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  78. package/es/SortableList/components/DragHandle.d.mts +2 -2
  79. package/es/SortableList/components/SortableItem.d.mts +2 -2
  80. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  81. package/es/Toc/Toc.d.mts +2 -2
  82. package/es/Tooltip/ArrowIcon.mjs +22 -0
  83. package/es/Tooltip/ArrowIcon.mjs.map +1 -0
  84. package/es/Tooltip/Tooltip.mjs +3 -3
  85. package/es/Tooltip/Tooltip.mjs.map +1 -1
  86. package/es/Tooltip/TooltipContent.mjs +24 -0
  87. package/es/Tooltip/TooltipContent.mjs.map +1 -0
  88. package/es/Tooltip/TooltipGroup.d.mts +2 -5
  89. package/es/Tooltip/TooltipGroup.mjs +90 -178
  90. package/es/Tooltip/TooltipGroup.mjs.map +1 -1
  91. package/es/Tooltip/TooltipInGroup.mjs +54 -52
  92. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  93. package/es/Tooltip/TooltipPortal.mjs +4 -7
  94. package/es/Tooltip/TooltipPortal.mjs.map +1 -1
  95. package/es/Tooltip/TooltipStandalone.mjs +149 -83
  96. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  97. package/es/Tooltip/groupContext.mjs +4 -2
  98. package/es/Tooltip/groupContext.mjs.map +1 -1
  99. package/es/Tooltip/index.d.mts +1 -1
  100. package/es/Tooltip/style.mjs +203 -32
  101. package/es/Tooltip/style.mjs.map +1 -1
  102. package/es/Tooltip/type.d.mts +30 -3
  103. package/es/Tooltip/useMergedTooltipProps.mjs +17 -6
  104. package/es/Tooltip/useMergedTooltipProps.mjs.map +1 -1
  105. package/es/Video/index.d.mts +2 -2
  106. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  107. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  108. package/es/awesome/Features/Features.d.mts +2 -2
  109. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  110. package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
  111. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  112. package/es/awesome/GridBackground/GridBackground.mjs +1 -1
  113. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  114. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  115. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  116. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  117. package/es/brand/LobeChat/index.d.mts +2 -2
  118. package/es/brand/LobeHub/index.d.mts +2 -2
  119. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  120. package/es/brand/LogoThree/index.d.mts +2 -2
  121. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  122. package/es/chat/BackBottom/BackBottom.mjs +1 -1
  123. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  124. package/es/chat/ChatList/ChatList.d.mts +2 -2
  125. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  126. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  127. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  128. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  129. package/es/color/ColorScales/index.d.mts +2 -2
  130. package/es/color/CssVar/index.d.mts +2 -2
  131. package/es/hooks/usePortalContainer.mjs +1 -1
  132. package/es/i18n/context.d.mts +2 -2
  133. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  134. package/es/icons/lucideExtra/CreateBotIcon.d.mts +3 -3
  135. package/es/icons/lucideExtra/DiscordIcon.d.mts +3 -3
  136. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +2 -2
  137. package/es/icons/lucideExtra/GroupBotIcon.d.mts +3 -3
  138. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +2 -2
  139. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  140. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +2 -2
  141. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  142. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  143. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  144. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +2 -2
  145. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +2 -2
  146. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  147. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  148. package/es/index.mjs +1 -1
  149. package/es/mdx/Mdx/index.d.mts +2 -2
  150. package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
  151. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  152. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  153. package/es/storybook/StoryBook/index.d.mts +2 -2
  154. package/es/utils/placement.d.mts +1 -1
  155. package/package.json +1 -1
  156. package/es/Tooltip/TooltipFloating.mjs +0 -119
  157. package/es/Tooltip/TooltipFloating.mjs.map +0 -1
  158. package/es/Tooltip/groupContext.d.mts +0 -14
  159. package/es/Tooltip/useTooltipFloating.mjs +0 -55
  160. package/es/Tooltip/useTooltipFloating.mjs.map +0 -1
  161. package/es/Tooltip/useTooltipReference.mjs +0 -56
  162. package/es/Tooltip/useTooltipReference.mjs.map +0 -1
  163. package/es/Tooltip/useTooltipTrigger.mjs +0 -18
  164. package/es/Tooltip/useTooltipTrigger.mjs.map +0 -1
  165. package/es/Tooltip/utils.mjs +0 -36
  166. package/es/Tooltip/utils.mjs.map +0 -1
  167. package/es/utils/composeEventHandlers.mjs +0 -28
  168. package/es/utils/composeEventHandlers.mjs.map +0 -1
@@ -1,101 +1,167 @@
1
1
  'use client';
2
2
 
3
- import { useTooltipTrigger } from "./useTooltipTrigger.mjs";
4
- import TooltipFloating_default from "./TooltipFloating.mjs";
5
- import TooltipPortal_default from "./TooltipPortal.mjs";
6
- import { useTooltipFloating } from "./useTooltipFloating.mjs";
7
- import { isElementHidden, observeElementVisibility } from "./utils.mjs";
8
- import { useTooltipReference } from "./useTooltipReference.mjs";
9
- import { useCallback, useEffect, useState } from "react";
10
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useNativeButton } from "../hooks/useNativeButton.mjs";
4
+ import { useIsClient } from "../hooks/useIsClient.mjs";
5
+ import { placementMap } from "../utils/placement.mjs";
6
+ import { TooltipArrowIcon } from "./ArrowIcon.mjs";
7
+ import TooltipContent_default from "./TooltipContent.mjs";
8
+ import { useTooltipPortalContainer } from "./TooltipPortal.mjs";
9
+ import { styles } from "./style.mjs";
10
+ import { cloneElement, isValidElement, memo, useCallback, useMemo, useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { cx } from "antd-style";
13
+ import { mergeProps } from "@base-ui/react/merge-props";
14
+ import { Tooltip } from "@base-ui/react/tooltip";
15
+ import { mergeRefs } from "react-merge-refs";
11
16
 
12
17
  //#region src/Tooltip/TooltipStandalone.tsx
13
- const TooltipStandalone = ({ ref, hotkey, className, arrow = false, title, hotkeyProps, children, placement = "top", openDelay, closeDelay, mouseEnterDelay, mouseLeaveDelay, open, defaultOpen, onOpenChange, disabled, classNames, styles: styleProps, zIndex, portalled = true, getPopupContainer }) => {
18
+ const DEFAULT_OPEN_DELAY = 400;
19
+ const DEFAULT_CLOSE_DELAY = 100;
20
+ /**
21
+ * Tooltip component - displays small contextual hints on hover/focus
22
+ * Compatible with Ant Design Tooltip-like API (subset)
23
+ */
24
+ const TooltipStandalone = memo(({ children, title, arrow = true, className, classNames, closeDelay, defaultOpen = false, disabled = false, getPopupContainer, hotkey, hotkeyProps, mouseEnterDelay, mouseLeaveDelay, onOpenChange, open, openDelay, placement = "top", portalled = true, styles: styleProps, zIndex, ref: refProp }) => {
25
+ const isClient = useIsClient();
14
26
  const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));
15
- const [referenceVisible, setReferenceVisible] = useState(true);
16
- const mergedOpen = open ?? uncontrolledOpen;
17
- const setOpen = useCallback((next) => {
18
- if (open === void 0) setUncontrolledOpen(next);
19
- onOpenChange?.(next);
20
- }, [onOpenChange, open]);
21
- const trigger = useTooltipTrigger(children);
22
- const floatingHookResult = useTooltipFloating({
23
- arrow,
24
- closeDelay,
27
+ const resolvedOpen = disabled ? false : open ?? uncontrolledOpen;
28
+ const handleOpenChange = useCallback((nextOpen) => {
29
+ if (disabled && nextOpen) return;
30
+ onOpenChange?.(nextOpen);
31
+ if (open === void 0) setUncontrolledOpen(nextOpen);
32
+ }, [
25
33
  disabled,
26
- mouseEnterDelay,
27
- mouseLeaveDelay,
28
- onOpenChange: setOpen,
29
- open: mergedOpen,
30
- openDelay,
31
- placement
32
- });
33
- const { referenceConnected, referenceEl, referenceNode } = useTooltipReference({
34
- getReferenceProps: floatingHookResult.getReferenceProps,
35
- mergedOpen,
36
- ref,
37
- setOpen,
38
- setReference: floatingHookResult.refs.setReference,
39
- trigger
40
- });
41
- const connectedOpen = !disabled && mergedOpen && referenceConnected && referenceVisible;
42
- const { arrowRef, context, floatingPlacement, floatingStyles, getFloatingProps, refs } = floatingHookResult;
43
- useEffect(() => {
44
- if (!mergedOpen) return;
45
- if (!referenceEl) {
46
- setReferenceVisible(false);
47
- setOpen(false);
48
- return;
49
- }
50
- let lastVisible = true;
51
- const handleVisibilityChange = (visible) => {
52
- setReferenceVisible(visible);
53
- if (!visible && lastVisible) setOpen(false);
54
- lastVisible = visible;
34
+ onOpenChange,
35
+ open
36
+ ]);
37
+ const resolvedOpenDelay = useMemo(() => {
38
+ if (openDelay !== void 0) return openDelay;
39
+ if (mouseEnterDelay !== void 0) return mouseEnterDelay * 1e3;
40
+ return DEFAULT_OPEN_DELAY;
41
+ }, [mouseEnterDelay, openDelay]);
42
+ const resolvedCloseDelay = useMemo(() => {
43
+ if (closeDelay !== void 0) return closeDelay;
44
+ if (mouseLeaveDelay !== void 0) return mouseLeaveDelay * 1e3;
45
+ return DEFAULT_CLOSE_DELAY;
46
+ }, [closeDelay, mouseLeaveDelay]);
47
+ const placementConfig = placementMap[placement] ?? placementMap.top;
48
+ const baseSideOffset = arrow ? 8 : 6;
49
+ const portalContainer = useTooltipPortalContainer();
50
+ const { isNativeButtonTriggerElement } = useNativeButton({ children });
51
+ const resolvedClassNames = useMemo(() => ({
52
+ arrow: cx(styles.arrow, classNames?.arrow),
53
+ popup: cx(styles.popup, className, classNames?.root, classNames?.container),
54
+ positioner: styles.positioner,
55
+ viewport: cx(styles.viewport, classNames?.content)
56
+ }), [
57
+ className,
58
+ classNames?.arrow,
59
+ classNames?.container,
60
+ classNames?.content,
61
+ classNames?.root
62
+ ]);
63
+ const resolvedStyleProps = useMemo(() => {
64
+ if (typeof styleProps === "function") return void 0;
65
+ return styleProps;
66
+ }, [styleProps]);
67
+ const resolvedStyles = useMemo(() => ({
68
+ arrow: resolvedStyleProps?.arrow,
69
+ popup: {
70
+ ...resolvedStyleProps?.root,
71
+ ...resolvedStyleProps?.container
72
+ },
73
+ positioner: { zIndex: zIndex ?? 1100 },
74
+ viewport: resolvedStyleProps?.content
75
+ }), [resolvedStyleProps, zIndex]);
76
+ const triggerElement = useMemo(() => {
77
+ const triggerProps = {
78
+ closeDelay: resolvedCloseDelay,
79
+ delay: resolvedOpenDelay,
80
+ disabled
55
81
  };
56
- const stopVisibilityObserver = observeElementVisibility(referenceEl, handleVisibilityChange);
57
- const root = referenceEl.getRootNode?.();
58
- const observeTarget = typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot ? root : referenceEl.ownerDocument ?? document;
59
- const observer = new MutationObserver(() => {
60
- if (isElementHidden(referenceEl)) handleVisibilityChange(false);
82
+ if (isValidElement(children)) return /* @__PURE__ */ jsx(Tooltip.Trigger, {
83
+ ...triggerProps,
84
+ render: (props) => {
85
+ const resolvedProps = (() => {
86
+ if (isNativeButtonTriggerElement) return props;
87
+ const { type, ref: triggerRef, ...restProps } = props;
88
+ return restProps;
89
+ })();
90
+ return cloneElement(children, {
91
+ ...mergeProps(children.props, resolvedProps),
92
+ ref: mergeRefs([
93
+ children.ref,
94
+ props.ref,
95
+ refProp
96
+ ])
97
+ });
98
+ }
61
99
  });
62
- observer.observe(observeTarget, {
63
- childList: true,
64
- subtree: true
100
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, {
101
+ ...triggerProps,
102
+ ref: refProp,
103
+ children
65
104
  });
66
- return () => {
67
- observer.disconnect();
68
- stopVisibilityObserver?.();
69
- };
70
105
  }, [
71
- mergedOpen,
72
- referenceEl,
73
- setOpen
106
+ children,
107
+ disabled,
108
+ isNativeButtonTriggerElement,
109
+ refProp,
110
+ resolvedCloseDelay,
111
+ resolvedOpenDelay
74
112
  ]);
75
- const portalRoot = getPopupContainer && referenceEl && referenceConnected && referenceVisible ? getPopupContainer(referenceEl) : void 0;
76
- const floatingNode = /* @__PURE__ */ jsx(TooltipFloating_default, {
113
+ const customContainer = useMemo(() => {
114
+ if (!getPopupContainer || !isClient) return void 0;
115
+ }, [getPopupContainer, isClient]);
116
+ const popup = useMemo(() => /* @__PURE__ */ jsx(Tooltip.Positioner, {
117
+ align: placementConfig.align,
118
+ className: resolvedClassNames.positioner,
119
+ "data-placement": placement,
120
+ side: placementConfig.side,
121
+ sideOffset: baseSideOffset,
122
+ style: resolvedStyles.positioner,
123
+ children: /* @__PURE__ */ jsxs(Tooltip.Popup, {
124
+ className: resolvedClassNames.popup,
125
+ style: resolvedStyles.popup,
126
+ children: [arrow && /* @__PURE__ */ jsx(Tooltip.Arrow, {
127
+ className: resolvedClassNames.arrow,
128
+ style: resolvedStyles.arrow,
129
+ children: TooltipArrowIcon
130
+ }), /* @__PURE__ */ jsx("div", {
131
+ className: resolvedClassNames.viewport,
132
+ style: resolvedStyles.viewport,
133
+ children: /* @__PURE__ */ jsx(TooltipContent_default, {
134
+ hotkey,
135
+ hotkeyProps,
136
+ title
137
+ })
138
+ })]
139
+ })
140
+ }), [
77
141
  arrow,
78
- arrowRef,
79
- className,
80
- classNames,
81
- context,
82
- floatingProps: getFloatingProps(),
83
- floatingStyles,
142
+ baseSideOffset,
84
143
  hotkey,
85
144
  hotkeyProps,
86
- isInitialShow: true,
87
- open: connectedOpen,
88
- placement: floatingPlacement,
89
- setFloating: refs.setFloating,
90
- styles: styleProps,
91
- title,
92
- zIndex
145
+ placement,
146
+ placementConfig.align,
147
+ placementConfig.side,
148
+ resolvedClassNames,
149
+ resolvedStyles,
150
+ title
151
+ ]);
152
+ if (title == null && !hotkey) return children;
153
+ const resolvedPortalContainer = customContainer ?? portalContainer;
154
+ return /* @__PURE__ */ jsxs(Tooltip.Root, {
155
+ defaultOpen,
156
+ disabled,
157
+ onOpenChange: handleOpenChange,
158
+ open: resolvedOpen,
159
+ children: [triggerElement, portalled ? resolvedPortalContainer ? /* @__PURE__ */ jsx(Tooltip.Portal, {
160
+ container: resolvedPortalContainer,
161
+ children: popup
162
+ }) : null : popup]
93
163
  });
94
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [referenceNode, !disabled && title && (portalled ? /* @__PURE__ */ jsx(TooltipPortal_default, {
95
- root: portalRoot,
96
- children: floatingNode
97
- }) : floatingNode)] });
98
- };
164
+ });
99
165
  TooltipStandalone.displayName = "TooltipStandalone";
100
166
 
101
167
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipStandalone.mjs","names":["TooltipStandalone: FC<TooltipProps>","TooltipFloating","TooltipPortal"],"sources":["../../src/Tooltip/TooltipStandalone.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useCallback, useEffect, useState } from 'react';\n\nimport TooltipFloating from './TooltipFloating';\nimport TooltipPortal from './TooltipPortal';\nimport type { TooltipProps } from './type';\nimport { useTooltipFloating } from './useTooltipFloating';\nimport { useTooltipReference } from './useTooltipReference';\nimport { useTooltipTrigger } from './useTooltipTrigger';\nimport { isElementHidden, observeElementVisibility } from './utils';\n\nexport const TooltipStandalone: FC<TooltipProps> = ({\n ref,\n hotkey,\n className,\n arrow = false,\n title,\n hotkeyProps,\n children,\n placement = 'top',\n openDelay,\n closeDelay,\n mouseEnterDelay,\n mouseLeaveDelay,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n classNames,\n styles: styleProps,\n zIndex,\n portalled = true,\n getPopupContainer,\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n const [referenceVisible, setReferenceVisible] = useState(true);\n\n const mergedOpen = open ?? uncontrolledOpen;\n const setOpen = useCallback(\n (next: boolean) => {\n if (open === undefined) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [onOpenChange, open],\n );\n\n const trigger = useTooltipTrigger(children);\n\n // We need to initialize floating first to get getReferenceProps\n // But we'll use a temporary mergedOpen, then update to connectedOpen\n const floatingHookResult = useTooltipFloating({\n arrow,\n closeDelay,\n disabled,\n mouseEnterDelay,\n mouseLeaveDelay,\n onOpenChange: setOpen,\n open: mergedOpen,\n openDelay,\n placement,\n });\n\n const { referenceConnected, referenceEl, referenceNode } = useTooltipReference({\n getReferenceProps: floatingHookResult.getReferenceProps,\n mergedOpen,\n ref,\n setOpen,\n setReference: floatingHookResult.refs.setReference,\n trigger,\n });\n\n const connectedOpen = !disabled && mergedOpen && referenceConnected && referenceVisible;\n\n // Use the first hook result\n // Note: useFloating inside uses mergedOpen, but TooltipFloating component uses connectedOpen for display\n const { arrowRef, context, floatingPlacement, floatingStyles, getFloatingProps, refs } =\n floatingHookResult;\n\n // Watch for trigger removal or display:none via MutationObserver\n useEffect(() => {\n if (!mergedOpen) return;\n if (!referenceEl) {\n setReferenceVisible(false);\n setOpen(false);\n return;\n }\n\n let lastVisible = true;\n const handleVisibilityChange = (visible: boolean) => {\n setReferenceVisible(visible);\n if (!visible && lastVisible) setOpen(false);\n lastVisible = visible;\n };\n\n const stopVisibilityObserver = observeElementVisibility(referenceEl, handleVisibilityChange);\n\n const root = referenceEl.getRootNode?.();\n const observeTarget =\n typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot\n ? root\n : (referenceEl.ownerDocument ?? document);\n\n const observer = new MutationObserver(() => {\n if (isElementHidden(referenceEl)) handleVisibilityChange(false);\n });\n\n observer.observe(observeTarget, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n stopVisibilityObserver?.();\n };\n }, [mergedOpen, referenceEl, setOpen]);\n\n const portalRoot =\n getPopupContainer && referenceEl && referenceConnected && referenceVisible\n ? getPopupContainer(referenceEl as any)\n : undefined;\n\n const floatingNode = (\n <TooltipFloating\n arrow={arrow}\n arrowRef={arrowRef}\n className={className}\n classNames={classNames}\n context={context}\n floatingProps={getFloatingProps()}\n floatingStyles={floatingStyles}\n hotkey={hotkey}\n hotkeyProps={hotkeyProps}\n isInitialShow\n open={connectedOpen}\n placement={floatingPlacement}\n setFloating={refs.setFloating}\n styles={styleProps}\n title={title}\n zIndex={zIndex}\n />\n );\n\n return (\n <>\n {referenceNode}\n {!disabled &&\n title &&\n (portalled ? (\n <TooltipPortal root={portalRoot}>{floatingNode}</TooltipPortal>\n ) : (\n floatingNode\n ))}\n </>\n );\n};\n\nTooltipStandalone.displayName = 'TooltipStandalone';\n"],"mappings":";;;;;;;;;;;;AAYA,MAAaA,qBAAuC,EAClD,KACA,QACA,WACA,QAAQ,OACR,OACA,aACA,UACA,YAAY,OACZ,WACA,YACA,iBACA,iBACA,MACA,aACA,cACA,UACA,YACA,QAAQ,YACR,QACA,YAAY,MACZ,wBACI;CACJ,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,QAAQ,YAAY,CAAC;CAC9E,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,KAAK;CAE9D,MAAM,aAAa,QAAQ;CAC3B,MAAM,UAAU,aACb,SAAkB;AACjB,MAAI,SAAS,OAAW,qBAAoB,KAAK;AACjD,iBAAe,KAAK;IAEtB,CAAC,cAAc,KAAK,CACrB;CAED,MAAM,UAAU,kBAAkB,SAAS;CAI3C,MAAM,qBAAqB,mBAAmB;EAC5C;EACA;EACA;EACA;EACA;EACA,cAAc;EACd,MAAM;EACN;EACA;EACD,CAAC;CAEF,MAAM,EAAE,oBAAoB,aAAa,kBAAkB,oBAAoB;EAC7E,mBAAmB,mBAAmB;EACtC;EACA;EACA;EACA,cAAc,mBAAmB,KAAK;EACtC;EACD,CAAC;CAEF,MAAM,gBAAgB,CAAC,YAAY,cAAc,sBAAsB;CAIvE,MAAM,EAAE,UAAU,SAAS,mBAAmB,gBAAgB,kBAAkB,SAC9E;AAGF,iBAAgB;AACd,MAAI,CAAC,WAAY;AACjB,MAAI,CAAC,aAAa;AAChB,uBAAoB,MAAM;AAC1B,WAAQ,MAAM;AACd;;EAGF,IAAI,cAAc;EAClB,MAAM,0BAA0B,YAAqB;AACnD,uBAAoB,QAAQ;AAC5B,OAAI,CAAC,WAAW,YAAa,SAAQ,MAAM;AAC3C,iBAAc;;EAGhB,MAAM,yBAAyB,yBAAyB,aAAa,uBAAuB;EAE5F,MAAM,OAAO,YAAY,eAAe;EACxC,MAAM,gBACJ,OAAO,eAAe,eAAe,gBAAgB,aACjD,OACC,YAAY,iBAAiB;EAEpC,MAAM,WAAW,IAAI,uBAAuB;AAC1C,OAAI,gBAAgB,YAAY,CAAE,wBAAuB,MAAM;IAC/D;AAEF,WAAS,QAAQ,eAAe;GAAE,WAAW;GAAM,SAAS;GAAM,CAAC;AAEnE,eAAa;AACX,YAAS,YAAY;AACrB,6BAA0B;;IAE3B;EAAC;EAAY;EAAa;EAAQ,CAAC;CAEtC,MAAM,aACJ,qBAAqB,eAAe,sBAAsB,mBACtD,kBAAkB,YAAmB,GACrC;CAEN,MAAM,eACJ,oBAACC;EACQ;EACG;EACC;EACC;EACH;EACT,eAAe,kBAAkB;EACjB;EACR;EACK;EACb;EACA,MAAM;EACN,WAAW;EACX,aAAa,KAAK;EAClB,QAAQ;EACD;EACC;GACR;AAGJ,QACE,8CACG,eACA,CAAC,YACA,UACC,YACC,oBAACC;EAAc,MAAM;YAAa;GAA6B,GAE/D,iBAEH;;AAIP,kBAAkB,cAAc"}
1
+ {"version":3,"file":"TooltipStandalone.mjs","names":["BaseTooltip","TooltipContent"],"sources":["../../src/Tooltip/TooltipStandalone.tsx"],"sourcesContent":["'use client';\n\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport { cx } from 'antd-style';\nimport { cloneElement, isValidElement, memo, useCallback, useMemo, useState } from 'react';\nimport { mergeRefs } from 'react-merge-refs';\n\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { useNativeButton } from '@/hooks/useNativeButton';\nimport { placementMap } from '@/utils/placement';\n\nimport { TooltipArrowIcon } from './ArrowIcon';\nimport TooltipContent from './TooltipContent';\nimport { useTooltipPortalContainer } from './TooltipPortal';\nimport { styles } from './style';\nimport type { TooltipProps } from './type';\n\nconst DEFAULT_OPEN_DELAY = 400;\nconst DEFAULT_CLOSE_DELAY = 100;\n\n/**\n * Tooltip component - displays small contextual hints on hover/focus\n * Compatible with Ant Design Tooltip-like API (subset)\n */\nexport const TooltipStandalone = memo<TooltipProps>(\n ({\n children,\n title,\n arrow = true,\n className,\n classNames,\n closeDelay,\n defaultOpen = false,\n disabled = false,\n getPopupContainer,\n hotkey,\n hotkeyProps,\n mouseEnterDelay,\n mouseLeaveDelay,\n onOpenChange,\n open,\n openDelay,\n placement = 'top',\n portalled = true,\n styles: styleProps,\n zIndex,\n ref: refProp,\n }) => {\n const isClient = useIsClient();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(Boolean(defaultOpen));\n\n const mergedOpen = open ?? uncontrolledOpen;\n const resolvedOpen = disabled ? false : mergedOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n onOpenChange?.(nextOpen);\n if (open === undefined) {\n setUncontrolledOpen(nextOpen);\n }\n },\n [disabled, onOpenChange, open],\n );\n\n const resolvedOpenDelay = useMemo(() => {\n if (openDelay !== undefined) return openDelay;\n if (mouseEnterDelay !== undefined) return mouseEnterDelay * 1000;\n return DEFAULT_OPEN_DELAY;\n }, [mouseEnterDelay, openDelay]);\n\n const resolvedCloseDelay = useMemo(() => {\n if (closeDelay !== undefined) return closeDelay;\n if (mouseLeaveDelay !== undefined) return mouseLeaveDelay * 1000;\n return DEFAULT_CLOSE_DELAY;\n }, [closeDelay, mouseLeaveDelay]);\n\n const placementConfig = placementMap[placement] ?? placementMap.top;\n const baseSideOffset = arrow ? 8 : 6;\n\n const portalContainer = useTooltipPortalContainer();\n\n const { isNativeButtonTriggerElement } = useNativeButton({\n children,\n });\n\n const resolvedClassNames = useMemo(\n () => ({\n arrow: cx(styles.arrow, classNames?.arrow),\n popup: cx(styles.popup, className, classNames?.root, classNames?.container),\n positioner: styles.positioner,\n viewport: cx(styles.viewport, classNames?.content),\n }),\n [className, classNames?.arrow, classNames?.container, classNames?.content, classNames?.root],\n );\n\n const resolvedStyleProps = useMemo(() => {\n if (typeof styleProps === 'function') return undefined;\n return styleProps;\n }, [styleProps]);\n\n const resolvedStyles = useMemo(\n () => ({\n arrow: resolvedStyleProps?.arrow,\n popup: {\n ...resolvedStyleProps?.root,\n ...resolvedStyleProps?.container,\n },\n positioner: {\n zIndex: zIndex ?? 1100,\n },\n viewport: resolvedStyleProps?.content,\n }),\n [resolvedStyleProps, zIndex],\n );\n\n const triggerElement = useMemo(() => {\n const triggerProps = {\n closeDelay: resolvedCloseDelay,\n delay: resolvedOpenDelay,\n disabled,\n };\n\n if (isValidElement(children)) {\n return (\n <BaseTooltip.Trigger\n {...triggerProps}\n render={(props) => {\n // Base UI's trigger props include `type=\"button\"` by default.\n // If we render into a non-<button> element, that prop is invalid and can warn.\n const resolvedProps = (() => {\n if (isNativeButtonTriggerElement) return props as any;\n // eslint-disable-next-line unused-imports/no-unused-vars, @typescript-eslint/no-unused-vars\n const { type, ref: triggerRef, ...restProps } = props as any;\n return restProps;\n })();\n\n const mergedProps = mergeProps((children as any).props, resolvedProps);\n return cloneElement(children as any, {\n ...mergedProps,\n ref: mergeRefs([(children as any).ref, (props as any).ref, refProp]),\n });\n }}\n />\n );\n }\n\n return (\n <BaseTooltip.Trigger {...triggerProps} ref={refProp}>\n {children}\n </BaseTooltip.Trigger>\n );\n }, [\n children,\n disabled,\n isNativeButtonTriggerElement,\n refProp,\n resolvedCloseDelay,\n resolvedOpenDelay,\n ]);\n\n const customContainer = useMemo(() => {\n if (!getPopupContainer || !isClient) return undefined;\n return undefined;\n }, [getPopupContainer, isClient]);\n\n const popup = useMemo(\n () => (\n <BaseTooltip.Positioner\n align={placementConfig.align}\n className={resolvedClassNames.positioner}\n data-placement={placement}\n side={placementConfig.side}\n sideOffset={baseSideOffset}\n style={resolvedStyles.positioner}\n >\n <BaseTooltip.Popup className={resolvedClassNames.popup} style={resolvedStyles.popup}>\n {arrow && (\n <BaseTooltip.Arrow className={resolvedClassNames.arrow} style={resolvedStyles.arrow}>\n {TooltipArrowIcon}\n </BaseTooltip.Arrow>\n )}\n <div className={resolvedClassNames.viewport} style={resolvedStyles.viewport}>\n <TooltipContent hotkey={hotkey} hotkeyProps={hotkeyProps} title={title} />\n </div>\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n ),\n [\n arrow,\n baseSideOffset,\n hotkey,\n hotkeyProps,\n placement,\n placementConfig.align,\n placementConfig.side,\n resolvedClassNames,\n resolvedStyles,\n title,\n ],\n );\n\n // eslint-disable-next-line eqeqeq\n if (title == null && !hotkey) {\n return children;\n }\n\n const resolvedPortalContainer = customContainer ?? portalContainer;\n\n return (\n <BaseTooltip.Root\n defaultOpen={defaultOpen}\n disabled={disabled}\n onOpenChange={handleOpenChange}\n open={resolvedOpen}\n >\n {triggerElement}\n {portalled ? (\n resolvedPortalContainer ? (\n <BaseTooltip.Portal container={resolvedPortalContainer}>{popup}</BaseTooltip.Portal>\n ) : null\n ) : (\n popup\n )}\n </BaseTooltip.Root>\n );\n },\n);\n\nTooltipStandalone.displayName = 'TooltipStandalone';\n"],"mappings":"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"}
@@ -1,9 +1,11 @@
1
+ 'use client';
2
+
1
3
  import { createContext } from "react";
2
4
 
3
5
  //#region src/Tooltip/groupContext.ts
4
- const TooltipGroupApiContext = createContext(null);
6
+ const TooltipGroupHandleContext = createContext(null);
5
7
  const TooltipGroupPropsContext = createContext(null);
6
8
 
7
9
  //#endregion
8
- export { TooltipGroupApiContext, TooltipGroupPropsContext };
10
+ export { TooltipGroupHandleContext, TooltipGroupPropsContext };
9
11
  //# sourceMappingURL=groupContext.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"groupContext.mjs","names":[],"sources":["../../src/Tooltip/groupContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { TooltipProps } from './type';\n\nexport type TooltipGroupItem = Omit<TooltipProps, 'children' | 'open' | 'defaultOpen'>;\n\nexport type TooltipGroupSharedProps = Omit<\n TooltipProps,\n 'children' | 'defaultOpen' | 'open' | 'ref' | 'title'\n> & {\n /**\n * @description Whether to enable layout animation when switching between tooltips\n * @default true\n */\n layoutAnimation?: boolean;\n};\n\nexport type TooltipGroupApi = {\n closeFromTrigger: (triggerEl: HTMLElement, item: TooltipGroupItem) => void;\n closeImmediately: () => void;\n isActiveTrigger: (triggerEl: HTMLElement) => boolean;\n openFromTrigger: (triggerEl: HTMLElement, item: TooltipGroupItem) => void;\n};\n\nexport const TooltipGroupApiContext = createContext<TooltipGroupApi | null>(null);\nexport const TooltipGroupPropsContext = createContext<TooltipGroupSharedProps | null>(null);\n"],"mappings":";;;AAwBA,MAAa,yBAAyB,cAAsC,KAAK;AACjF,MAAa,2BAA2B,cAA8C,KAAK"}
1
+ {"version":3,"file":"groupContext.mjs","names":[],"sources":["../../src/Tooltip/groupContext.ts"],"sourcesContent":["'use client';\n\nimport type { TooltipHandle } from '@base-ui/react/tooltip/store/TooltipHandle';\nimport { createContext } from 'react';\n\nimport type { TooltipProps } from './type';\n\nexport type TooltipGroupItem = Omit<TooltipProps, 'children' | 'open' | 'defaultOpen' | 'ref'>;\n\nexport type TooltipGroupSharedProps = Omit<\n TooltipProps,\n 'children' | 'defaultOpen' | 'open' | 'ref' | 'title'\n> & {\n /**\n * @description Whether to enable content layout animation when switching triggers\n * @default false\n */\n layoutAnimation?: boolean;\n};\n\nexport const TooltipGroupHandleContext = createContext<TooltipHandle<TooltipGroupItem> | null>(\n null,\n);\nexport const TooltipGroupPropsContext = createContext<TooltipGroupSharedProps | null>(null);\n"],"mappings":";;;;;AAoBA,MAAa,4BAA4B,cACvC,KACD;AACD,MAAa,2BAA2B,cAA8C,KAAK"}
@@ -1,3 +1,3 @@
1
- import { TooltipPlacement, TooltipProps } from "./type.mjs";
1
+ import { TooltipGroupProps, TooltipPlacement, TooltipProps } from "./type.mjs";
2
2
  import { Tooltip } from "./Tooltip.mjs";
3
3
  import { TooltipGroup } from "./TooltipGroup.mjs";
@@ -1,42 +1,213 @@
1
1
  import { createStaticStyles } from "antd-style";
2
2
 
3
3
  //#region src/Tooltip/style.ts
4
- const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => {
5
- return {
6
- arrow: css$1`
4
+ const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => ({
5
+ arrow: css$1`
6
+ --lobe-tooltip-arrow-offset-block: 4px;
7
+ --lobe-tooltip-arrow-offset-inline: 6px;
8
+
9
+ pointer-events: none;
10
+
11
+ position: absolute;
12
+ transform-origin: center;
13
+
14
+ display: flex;
15
+
16
+ width: 8px;
17
+ height: 4px;
18
+
19
+ & > svg {
20
+ display: block;
21
+ width: 100%;
22
+ height: 100%;
7
23
  fill: ${cssVar$1.colorText};
8
- `,
9
- content: css$1`
10
- position: relative;
24
+ }
25
+
26
+ & [data-role='stroke'] {
27
+ stroke: none;
28
+ }
29
+
30
+ &[data-side='top'] {
31
+ inset-block-end: calc(var(--lobe-tooltip-arrow-offset-block) * -1);
32
+ transform: rotate(180deg);
33
+ }
34
+
35
+ &[data-side='left'] {
36
+ inset-inline-end: calc(var(--lobe-tooltip-arrow-offset-inline) * -1);
37
+ transform: rotate(90deg);
38
+ }
39
+
40
+ &[data-side='right'] {
41
+ inset-inline-start: calc(var(--lobe-tooltip-arrow-offset-inline) * -1);
42
+ transform: rotate(-90deg);
43
+ }
44
+
45
+ &[data-side='bottom'] {
46
+ inset-block-start: calc(var(--lobe-tooltip-arrow-offset-block) * -1);
47
+ }
48
+ `,
49
+ popup: css$1`
50
+ user-select: none;
51
+
52
+ position: relative;
53
+ transform-origin: var(--transform-origin);
54
+
55
+ max-width: min(320px, var(--available-width));
56
+ border-radius: ${cssVar$1.borderRadiusSM};
57
+
58
+ font-size: 12px;
59
+ line-height: 1.2;
60
+ color: ${cssVar$1.colorBgLayout};
61
+
62
+ background: ${cssVar$1.colorText};
63
+
64
+ transition-timing-function: var(--lobe-tooltip-animation-ease-out);
65
+ transition-duration: var(--lobe-tooltip-animation-duration);
66
+ transition-property: opacity, transform;
67
+
68
+ &[data-starting-style],
69
+ &[data-ending-style] {
70
+ transform: translate3d(var(--lobe-tooltip-translate-x), var(--lobe-tooltip-translate-y), 0)
71
+ scale(var(--lobe-tooltip-animation-scale));
72
+ opacity: 0;
73
+ }
74
+
75
+ &[data-ending-style] {
76
+ transition-timing-function: var(--lobe-tooltip-animation-ease-in);
77
+ transition-duration: var(--lobe-tooltip-animation-duration-exit);
78
+ }
79
+
80
+ &[data-instant] {
81
+ transition: none;
82
+ }
83
+ `,
84
+ positioner: css$1`
85
+ --lobe-tooltip-animation-duration: 120ms;
86
+ --lobe-tooltip-animation-duration-exit: 80ms;
87
+ --lobe-tooltip-animation-translate: 4px;
88
+ --lobe-tooltip-animation-scale: 0.96;
89
+ --lobe-tooltip-animation-ease-in: ease-in;
90
+ --lobe-tooltip-animation-ease-out: ${cssVar$1.motionEaseOut};
91
+ --lobe-tooltip-translate-x: 0;
92
+ --lobe-tooltip-translate-y: calc(var(--lobe-tooltip-animation-translate) * -1);
93
+
94
+ z-index: 1100;
95
+
96
+ width: var(--positioner-width);
97
+ max-width: var(--available-width);
98
+ height: var(--positioner-height);
99
+
100
+ transition-timing-function: var(--lobe-tooltip-animation-ease-out);
101
+ transition-duration: var(--lobe-tooltip-animation-duration);
102
+ transition-property:
103
+ inset-block-start, inset-inline-start, inset-inline-end, inset-block-end, transform;
104
+
105
+ &[data-instant] {
106
+ transition: none;
107
+ }
108
+
109
+ &[data-placement='top'],
110
+ &[data-placement='topLeft'],
111
+ &[data-placement='topRight'] {
112
+ --lobe-tooltip-translate-x: 0;
113
+ --lobe-tooltip-translate-y: var(--lobe-tooltip-animation-translate);
114
+ }
115
+
116
+ &[data-placement='bottom'],
117
+ &[data-placement='bottomLeft'],
118
+ &[data-placement='bottomRight'] {
119
+ --lobe-tooltip-translate-x: 0;
120
+ --lobe-tooltip-translate-y: calc(var(--lobe-tooltip-animation-translate) * -1);
121
+ }
122
+
123
+ &[data-placement='left'],
124
+ &[data-placement='leftTop'],
125
+ &[data-placement='leftBottom'] {
126
+ --lobe-tooltip-translate-x: var(--lobe-tooltip-animation-translate);
127
+ --lobe-tooltip-translate-y: 0;
128
+ }
129
+
130
+ &[data-placement='right'],
131
+ &[data-placement='rightTop'],
132
+ &[data-placement='rightBottom'] {
133
+ --lobe-tooltip-translate-x: calc(var(--lobe-tooltip-animation-translate) * -1);
134
+ --lobe-tooltip-translate-y: 0;
135
+ }
136
+ `,
137
+ viewport: css$1`
138
+ --lobe-tooltip-viewport-inline-padding: 8px;
139
+
140
+ position: relative;
141
+
142
+ overflow: clip;
143
+ display: flex;
144
+ gap: 6px;
145
+ align-items: center;
146
+
147
+ max-width: min(320px, var(--available-width));
148
+ padding-block: 4px;
149
+ padding-inline: var(--lobe-tooltip-viewport-inline-padding);
150
+
151
+ word-break: break-word;
152
+ white-space: normal;
153
+
154
+ [data-previous],
155
+ [data-current] {
156
+ transform: translateX(0);
11
157
 
12
- overflow: hidden;
13
158
  display: flex;
159
+ gap: 6px;
14
160
  align-items: center;
15
- justify-content: center;
16
-
17
- min-height: unset;
18
- padding-block: 6px;
19
- padding-inline: 10px;
20
- border-radius: ${cssVar$1.borderRadiusSM};
21
-
22
- color: ${cssVar$1.colorBgLayout};
23
- word-break: normal;
24
-
25
- background-color: ${cssVar$1.colorTextBase};
26
- `,
27
- tooltip: css$1`
28
- user-select: none;
29
-
30
- /* Keep the class name for backwards compatibility and user overrides */
31
- position: relative;
32
- z-index: 114514;
33
- filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 12%));
34
- `,
35
- tooltipLayout: css$1`
36
- transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);
37
- `
38
- };
39
- });
161
+
162
+ opacity: 1;
163
+
164
+ transition:
165
+ transform var(--lobe-tooltip-animation-duration) var(--lobe-tooltip-animation-ease-out),
166
+ opacity calc(var(--lobe-tooltip-animation-duration) / 2)
167
+ var(--lobe-tooltip-animation-ease-out);
168
+ }
169
+
170
+ &[data-activation-direction~='right'] [data-previous][data-ending-style] {
171
+ transform: translateX(-50%);
172
+ opacity: 0;
173
+ }
174
+
175
+ &[data-activation-direction~='right'] [data-current][data-starting-style] {
176
+ transform: translateX(50%);
177
+ opacity: 0;
178
+ }
179
+
180
+ &[data-activation-direction~='left'] [data-previous][data-ending-style] {
181
+ transform: translateX(50%);
182
+ opacity: 0;
183
+ }
184
+
185
+ &[data-activation-direction~='left'] [data-current][data-starting-style] {
186
+ transform: translateX(-50%);
187
+ opacity: 0;
188
+ }
189
+
190
+ &[data-activation-direction~='down'] [data-previous][data-ending-style] {
191
+ transform: translateY(-50%);
192
+ opacity: 0;
193
+ }
194
+
195
+ &[data-activation-direction~='down'] [data-current][data-starting-style] {
196
+ transform: translateY(50%);
197
+ opacity: 0;
198
+ }
199
+
200
+ &[data-activation-direction~='up'] [data-previous][data-ending-style] {
201
+ transform: translateY(50%);
202
+ opacity: 0;
203
+ }
204
+
205
+ &[data-activation-direction~='up'] [data-current][data-starting-style] {
206
+ transform: translateY(-50%);
207
+ opacity: 0;
208
+ }
209
+ `
210
+ }));
40
211
 
41
212
  //#endregion
42
213
  export { styles };
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":["cssVar"],"sources":["../../src/Tooltip/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => {\n return {\n arrow: css`\n fill: ${cssVar.colorText};\n `,\n content: css`\n position: relative;\n\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n\n min-height: unset;\n padding-block: 6px;\n padding-inline: 10px;\n border-radius: ${cssVar.borderRadiusSM};\n\n color: ${cssVar.colorBgLayout};\n word-break: normal;\n\n background-color: ${cssVar.colorTextBase};\n `,\n\n tooltip: css`\n user-select: 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 `,\n tooltipLayout: css`\n transition: transform 0.28s cubic-bezier(0.22, 1, 0.36, 1);\n `,\n };\n});\n"],"mappings":";;;AAEA,MAAa,SAAS,oBAAoB,EAAE,YAAK,uBAAa;AAC5D,QAAO;EACL,OAAO,KAAG;cACAA,SAAO,UAAU;;EAE3B,SAAS,KAAG;;;;;;;;;;;uBAWOA,SAAO,eAAe;;eAE9BA,SAAO,cAAc;;;0BAGVA,SAAO,cAAc;;EAG3C,SAAS,KAAG;;;;;;;;EAQZ,eAAe,KAAG;;;EAGnB;EACD"}
1
+ {"version":3,"file":"style.mjs","names":["cssVar"],"sources":["../../src/Tooltip/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n arrow: css`\n --lobe-tooltip-arrow-offset-block: 4px;\n --lobe-tooltip-arrow-offset-inline: 6px;\n\n pointer-events: none;\n\n position: absolute;\n transform-origin: center;\n\n display: flex;\n\n width: 8px;\n height: 4px;\n\n & > svg {\n display: block;\n width: 100%;\n height: 100%;\n fill: ${cssVar.colorText};\n }\n\n & [data-role='stroke'] {\n stroke: none;\n }\n\n &[data-side='top'] {\n inset-block-end: calc(var(--lobe-tooltip-arrow-offset-block) * -1);\n transform: rotate(180deg);\n }\n\n &[data-side='left'] {\n inset-inline-end: calc(var(--lobe-tooltip-arrow-offset-inline) * -1);\n transform: rotate(90deg);\n }\n\n &[data-side='right'] {\n inset-inline-start: calc(var(--lobe-tooltip-arrow-offset-inline) * -1);\n transform: rotate(-90deg);\n }\n\n &[data-side='bottom'] {\n inset-block-start: calc(var(--lobe-tooltip-arrow-offset-block) * -1);\n }\n `,\n\n popup: css`\n user-select: none;\n\n position: relative;\n transform-origin: var(--transform-origin);\n\n max-width: min(320px, var(--available-width));\n border-radius: ${cssVar.borderRadiusSM};\n\n font-size: 12px;\n line-height: 1.2;\n color: ${cssVar.colorBgLayout};\n\n background: ${cssVar.colorText};\n\n transition-timing-function: var(--lobe-tooltip-animation-ease-out);\n transition-duration: var(--lobe-tooltip-animation-duration);\n transition-property: opacity, transform;\n\n &[data-starting-style],\n &[data-ending-style] {\n transform: translate3d(var(--lobe-tooltip-translate-x), var(--lobe-tooltip-translate-y), 0)\n scale(var(--lobe-tooltip-animation-scale));\n opacity: 0;\n }\n\n &[data-ending-style] {\n transition-timing-function: var(--lobe-tooltip-animation-ease-in);\n transition-duration: var(--lobe-tooltip-animation-duration-exit);\n }\n\n &[data-instant] {\n transition: none;\n }\n `,\n\n positioner: css`\n --lobe-tooltip-animation-duration: 120ms;\n --lobe-tooltip-animation-duration-exit: 80ms;\n --lobe-tooltip-animation-translate: 4px;\n --lobe-tooltip-animation-scale: 0.96;\n --lobe-tooltip-animation-ease-in: ease-in;\n --lobe-tooltip-animation-ease-out: ${cssVar.motionEaseOut};\n --lobe-tooltip-translate-x: 0;\n --lobe-tooltip-translate-y: calc(var(--lobe-tooltip-animation-translate) * -1);\n\n z-index: 1100;\n\n width: var(--positioner-width);\n max-width: var(--available-width);\n height: var(--positioner-height);\n\n transition-timing-function: var(--lobe-tooltip-animation-ease-out);\n transition-duration: var(--lobe-tooltip-animation-duration);\n transition-property:\n inset-block-start, inset-inline-start, inset-inline-end, inset-block-end, transform;\n\n &[data-instant] {\n transition: none;\n }\n\n &[data-placement='top'],\n &[data-placement='topLeft'],\n &[data-placement='topRight'] {\n --lobe-tooltip-translate-x: 0;\n --lobe-tooltip-translate-y: var(--lobe-tooltip-animation-translate);\n }\n\n &[data-placement='bottom'],\n &[data-placement='bottomLeft'],\n &[data-placement='bottomRight'] {\n --lobe-tooltip-translate-x: 0;\n --lobe-tooltip-translate-y: calc(var(--lobe-tooltip-animation-translate) * -1);\n }\n\n &[data-placement='left'],\n &[data-placement='leftTop'],\n &[data-placement='leftBottom'] {\n --lobe-tooltip-translate-x: var(--lobe-tooltip-animation-translate);\n --lobe-tooltip-translate-y: 0;\n }\n\n &[data-placement='right'],\n &[data-placement='rightTop'],\n &[data-placement='rightBottom'] {\n --lobe-tooltip-translate-x: calc(var(--lobe-tooltip-animation-translate) * -1);\n --lobe-tooltip-translate-y: 0;\n }\n `,\n\n viewport: css`\n --lobe-tooltip-viewport-inline-padding: 8px;\n\n position: relative;\n\n overflow: clip;\n display: flex;\n gap: 6px;\n align-items: center;\n\n max-width: min(320px, var(--available-width));\n padding-block: 4px;\n padding-inline: var(--lobe-tooltip-viewport-inline-padding);\n\n word-break: break-word;\n white-space: normal;\n\n [data-previous],\n [data-current] {\n transform: translateX(0);\n\n display: flex;\n gap: 6px;\n align-items: center;\n\n opacity: 1;\n\n transition:\n transform var(--lobe-tooltip-animation-duration) var(--lobe-tooltip-animation-ease-out),\n opacity calc(var(--lobe-tooltip-animation-duration) / 2)\n var(--lobe-tooltip-animation-ease-out);\n }\n\n &[data-activation-direction~='right'] [data-previous][data-ending-style] {\n transform: translateX(-50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='right'] [data-current][data-starting-style] {\n transform: translateX(50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='left'] [data-previous][data-ending-style] {\n transform: translateX(50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='left'] [data-current][data-starting-style] {\n transform: translateX(-50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='down'] [data-previous][data-ending-style] {\n transform: translateY(-50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='down'] [data-current][data-starting-style] {\n transform: translateY(50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='up'] [data-previous][data-ending-style] {\n transform: translateY(50%);\n opacity: 0;\n }\n\n &[data-activation-direction~='up'] [data-current][data-starting-style] {\n transform: translateY(-50%);\n opacity: 0;\n }\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,OAAO,KAAG;;;;;;;;;;;;;;;;;;cAkBEA,SAAO,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B7B,OAAO,KAAG;;;;;;;qBAOSA,SAAO,eAAe;;;;aAI9BA,SAAO,cAAc;;kBAEhBA,SAAO,UAAU;;;;;;;;;;;;;;;;;;;;;;CAuBjC,YAAY,KAAG;;;;;;yCAMwBA,SAAO,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgD5D,UAAU,KAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEd,EAAE"}