@inf-monkeys-tech/monkeys-design 0.4.48 → 0.4.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/base/index.d.mts +2 -2
- package/dist/components/base/index.d.ts +2 -2
- package/dist/components/base/index.js +79 -13
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/base/index.mjs +80 -14
- package/dist/components/base/index.mjs.map +1 -1
- package/dist/components/layout/index.d.mts +1 -1
- package/dist/components/layout/index.d.ts +1 -1
- package/dist/components/layout/index.js +86 -14
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/index.mjs +87 -15
- package/dist/components/layout/index.mjs.map +1 -1
- package/dist/components/workbench/index.d.mts +1 -1
- package/dist/components/workbench/index.d.ts +1 -1
- package/dist/components/workbench/index.js +1 -0
- package/dist/components/workbench/index.js.map +1 -1
- package/dist/components/workbench/index.mjs +1 -0
- package/dist/components/workbench/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +86 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -15
- package/dist/index.mjs.map +1 -1
- package/dist/{theme-Clm5dVb0.d.mts → theme-CSDlBl7e.d.ts} +2 -2
- package/dist/{theme-sIoU5-YC.d.ts → theme-K9M_pIiz.d.mts} +2 -2
- package/dist/theme-system/index.d.mts +1 -1
- package/dist/theme-system/index.d.ts +1 -1
- package/dist/theme-system/index.js +1 -1
- package/dist/theme-system/index.mjs +1 -1
- package/dist/{types-Bn6PEDsX.d.mts → types-5cYLLXs8.d.mts} +1 -0
- package/dist/{types-Bn6PEDsX.d.ts → types-5cYLLXs8.d.ts} +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { forwardRef, useRef, useState, useEffect, useId, useMemo, createContext, useContext, useCallback } from 'react';
|
|
1
|
+
import { forwardRef, useRef, useState, useEffect, useId, useMemo, createContext, useContext, useCallback, useLayoutEffect } from 'react';
|
|
2
2
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
3
3
|
import * as ContextMenu from '@radix-ui/react-context-menu';
|
|
4
|
+
import { createPortal } from 'react-dom';
|
|
4
5
|
|
|
5
6
|
// src/components/base/BaseAccordion.tsx
|
|
6
7
|
|
|
@@ -5736,6 +5737,45 @@ function getTooltipPlacementClassName(placement) {
|
|
|
5736
5737
|
return "bottom-[calc(100%+0.5rem)] left-1/2 -translate-x-1/2";
|
|
5737
5738
|
}
|
|
5738
5739
|
}
|
|
5740
|
+
function getPortalTooltipStyle(placement, rect, themeStyle) {
|
|
5741
|
+
if (!rect) return themeStyle;
|
|
5742
|
+
const offset = 8;
|
|
5743
|
+
const baseStyle = {
|
|
5744
|
+
...themeStyle,
|
|
5745
|
+
position: "fixed"
|
|
5746
|
+
};
|
|
5747
|
+
switch (placement) {
|
|
5748
|
+
case "bottom":
|
|
5749
|
+
return {
|
|
5750
|
+
...baseStyle,
|
|
5751
|
+
left: rect.left + rect.width / 2,
|
|
5752
|
+
top: rect.bottom + offset,
|
|
5753
|
+
transform: "translateX(-50%)"
|
|
5754
|
+
};
|
|
5755
|
+
case "left":
|
|
5756
|
+
return {
|
|
5757
|
+
...baseStyle,
|
|
5758
|
+
right: window.innerWidth - rect.left + offset,
|
|
5759
|
+
top: rect.top + rect.height / 2,
|
|
5760
|
+
transform: "translateY(-50%)"
|
|
5761
|
+
};
|
|
5762
|
+
case "right":
|
|
5763
|
+
return {
|
|
5764
|
+
...baseStyle,
|
|
5765
|
+
left: rect.right + offset,
|
|
5766
|
+
top: rect.top + rect.height / 2,
|
|
5767
|
+
transform: "translateY(-50%)"
|
|
5768
|
+
};
|
|
5769
|
+
case "top":
|
|
5770
|
+
default:
|
|
5771
|
+
return {
|
|
5772
|
+
...baseStyle,
|
|
5773
|
+
bottom: window.innerHeight - rect.top + offset,
|
|
5774
|
+
left: rect.left + rect.width / 2,
|
|
5775
|
+
transform: "translateX(-50%)"
|
|
5776
|
+
};
|
|
5777
|
+
}
|
|
5778
|
+
}
|
|
5739
5779
|
function BaseTooltip({
|
|
5740
5780
|
content,
|
|
5741
5781
|
children,
|
|
@@ -5743,6 +5783,7 @@ function BaseTooltip({
|
|
|
5743
5783
|
defaultOpen = false,
|
|
5744
5784
|
placement = "top",
|
|
5745
5785
|
disabled = false,
|
|
5786
|
+
portal = false,
|
|
5746
5787
|
appearance,
|
|
5747
5788
|
className,
|
|
5748
5789
|
classNames,
|
|
@@ -5751,21 +5792,58 @@ function BaseTooltip({
|
|
|
5751
5792
|
...tooltipProps
|
|
5752
5793
|
}) {
|
|
5753
5794
|
const theme = resolveBaseAppearance(appearance);
|
|
5795
|
+
const rootRef = useRef(null);
|
|
5796
|
+
const [triggerRect, setTriggerRect] = useState(null);
|
|
5754
5797
|
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
|
5755
5798
|
const isControlled = open !== void 0;
|
|
5756
5799
|
const isOpen = isControlled ? open : uncontrolledOpen;
|
|
5757
5800
|
const canShow = !disabled && hasRenderableNode(content);
|
|
5801
|
+
const shouldPortal = portal && typeof document !== "undefined";
|
|
5802
|
+
const tooltipStyle = useMemo(
|
|
5803
|
+
() => shouldPortal ? getPortalTooltipStyle(placement, triggerRect, theme.styles.tooltip) : theme.styles.tooltip,
|
|
5804
|
+
[placement, shouldPortal, theme.styles.tooltip, triggerRect]
|
|
5805
|
+
);
|
|
5758
5806
|
const setOpen = (nextOpen) => {
|
|
5759
5807
|
if (!canShow && nextOpen) return;
|
|
5808
|
+
if (shouldPortal) {
|
|
5809
|
+
setTriggerRect(nextOpen ? rootRef.current?.getBoundingClientRect() ?? null : null);
|
|
5810
|
+
}
|
|
5760
5811
|
if (!isControlled) {
|
|
5761
5812
|
setUncontrolledOpen(nextOpen);
|
|
5762
5813
|
}
|
|
5763
5814
|
onOpenChange?.(nextOpen);
|
|
5764
5815
|
};
|
|
5816
|
+
useLayoutEffect(() => {
|
|
5817
|
+
if (!shouldPortal || !canShow || !isOpen) return;
|
|
5818
|
+
const updateTriggerRect = () => {
|
|
5819
|
+
setTriggerRect(rootRef.current?.getBoundingClientRect() ?? null);
|
|
5820
|
+
};
|
|
5821
|
+
updateTriggerRect();
|
|
5822
|
+
window.addEventListener("resize", updateTriggerRect);
|
|
5823
|
+
window.addEventListener("scroll", updateTriggerRect, true);
|
|
5824
|
+
return () => {
|
|
5825
|
+
window.removeEventListener("resize", updateTriggerRect);
|
|
5826
|
+
window.removeEventListener("scroll", updateTriggerRect, true);
|
|
5827
|
+
};
|
|
5828
|
+
}, [canShow, isOpen, shouldPortal]);
|
|
5829
|
+
const tooltipContent = canShow && isOpen && (!shouldPortal || triggerRect) ? /* @__PURE__ */ jsx(
|
|
5830
|
+
"span",
|
|
5831
|
+
{
|
|
5832
|
+
role: "tooltip",
|
|
5833
|
+
className: cn(
|
|
5834
|
+
theme.slots.tooltipContent,
|
|
5835
|
+
shouldPortal ? void 0 : getTooltipPlacementClassName(placement),
|
|
5836
|
+
classNames?.content
|
|
5837
|
+
),
|
|
5838
|
+
style: tooltipStyle,
|
|
5839
|
+
children: content
|
|
5840
|
+
}
|
|
5841
|
+
) : null;
|
|
5765
5842
|
return /* @__PURE__ */ jsxs(
|
|
5766
5843
|
"span",
|
|
5767
5844
|
{
|
|
5768
5845
|
...tooltipProps,
|
|
5846
|
+
ref: rootRef,
|
|
5769
5847
|
className: cn(theme.slots.tooltipRoot, classNames?.root, className),
|
|
5770
5848
|
style,
|
|
5771
5849
|
onMouseEnter: () => setOpen(true),
|
|
@@ -5774,19 +5852,7 @@ function BaseTooltip({
|
|
|
5774
5852
|
onBlur: () => setOpen(false),
|
|
5775
5853
|
children: [
|
|
5776
5854
|
/* @__PURE__ */ jsx("span", { className: cn(theme.slots.tooltipTrigger, classNames?.trigger), children }),
|
|
5777
|
-
|
|
5778
|
-
"span",
|
|
5779
|
-
{
|
|
5780
|
-
role: "tooltip",
|
|
5781
|
-
className: cn(
|
|
5782
|
-
theme.slots.tooltipContent,
|
|
5783
|
-
getTooltipPlacementClassName(placement),
|
|
5784
|
-
classNames?.content
|
|
5785
|
-
),
|
|
5786
|
-
style: theme.styles.tooltip,
|
|
5787
|
-
children: content
|
|
5788
|
-
}
|
|
5789
|
-
) : null
|
|
5855
|
+
shouldPortal && tooltipContent ? createPortal(tooltipContent, document.body) : tooltipContent
|
|
5790
5856
|
]
|
|
5791
5857
|
}
|
|
5792
5858
|
);
|