@inf-monkeys-tech/monkeys-design 0.4.49 → 0.4.51
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 -17
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/index.mjs +87 -18
- 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 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -18
- 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,7 +1,8 @@
|
|
|
1
|
-
import { forwardRef, useRef, useState, useEffect, useId, useMemo, createContext, useContext } from 'react';
|
|
1
|
+
import { forwardRef, useRef, useState, useEffect, useId, useMemo, createContext, useContext, useLayoutEffect } from 'react';
|
|
2
2
|
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
|
|
3
3
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import '@radix-ui/react-context-menu';
|
|
5
|
+
import { createPortal } from 'react-dom';
|
|
5
6
|
|
|
6
7
|
// src/components/layout/index.tsx
|
|
7
8
|
|
|
@@ -2889,6 +2890,45 @@ function getTooltipPlacementClassName(placement) {
|
|
|
2889
2890
|
return "bottom-[calc(100%+0.5rem)] left-1/2 -translate-x-1/2";
|
|
2890
2891
|
}
|
|
2891
2892
|
}
|
|
2893
|
+
function getPortalTooltipStyle(placement, rect, themeStyle) {
|
|
2894
|
+
if (!rect) return themeStyle;
|
|
2895
|
+
const offset = 8;
|
|
2896
|
+
const baseStyle = {
|
|
2897
|
+
...themeStyle,
|
|
2898
|
+
position: "fixed"
|
|
2899
|
+
};
|
|
2900
|
+
switch (placement) {
|
|
2901
|
+
case "bottom":
|
|
2902
|
+
return {
|
|
2903
|
+
...baseStyle,
|
|
2904
|
+
left: rect.left + rect.width / 2,
|
|
2905
|
+
top: rect.bottom + offset,
|
|
2906
|
+
transform: "translateX(-50%)"
|
|
2907
|
+
};
|
|
2908
|
+
case "left":
|
|
2909
|
+
return {
|
|
2910
|
+
...baseStyle,
|
|
2911
|
+
right: window.innerWidth - rect.left + offset,
|
|
2912
|
+
top: rect.top + rect.height / 2,
|
|
2913
|
+
transform: "translateY(-50%)"
|
|
2914
|
+
};
|
|
2915
|
+
case "right":
|
|
2916
|
+
return {
|
|
2917
|
+
...baseStyle,
|
|
2918
|
+
left: rect.right + offset,
|
|
2919
|
+
top: rect.top + rect.height / 2,
|
|
2920
|
+
transform: "translateY(-50%)"
|
|
2921
|
+
};
|
|
2922
|
+
case "top":
|
|
2923
|
+
default:
|
|
2924
|
+
return {
|
|
2925
|
+
...baseStyle,
|
|
2926
|
+
bottom: window.innerHeight - rect.top + offset,
|
|
2927
|
+
left: rect.left + rect.width / 2,
|
|
2928
|
+
transform: "translateX(-50%)"
|
|
2929
|
+
};
|
|
2930
|
+
}
|
|
2931
|
+
}
|
|
2892
2932
|
function BaseTooltip({
|
|
2893
2933
|
content,
|
|
2894
2934
|
children,
|
|
@@ -2896,6 +2936,7 @@ function BaseTooltip({
|
|
|
2896
2936
|
defaultOpen = false,
|
|
2897
2937
|
placement = "top",
|
|
2898
2938
|
disabled = false,
|
|
2939
|
+
portal = false,
|
|
2899
2940
|
appearance,
|
|
2900
2941
|
className,
|
|
2901
2942
|
classNames,
|
|
@@ -2904,21 +2945,58 @@ function BaseTooltip({
|
|
|
2904
2945
|
...tooltipProps
|
|
2905
2946
|
}) {
|
|
2906
2947
|
const theme = resolveBaseAppearance(appearance);
|
|
2948
|
+
const rootRef = useRef(null);
|
|
2949
|
+
const [triggerRect, setTriggerRect] = useState(null);
|
|
2907
2950
|
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
|
2908
2951
|
const isControlled = open !== void 0;
|
|
2909
2952
|
const isOpen = isControlled ? open : uncontrolledOpen;
|
|
2910
2953
|
const canShow = !disabled && hasRenderableNode(content);
|
|
2954
|
+
const shouldPortal = portal && typeof document !== "undefined";
|
|
2955
|
+
const tooltipStyle = useMemo(
|
|
2956
|
+
() => shouldPortal ? getPortalTooltipStyle(placement, triggerRect, theme.styles.tooltip) : theme.styles.tooltip,
|
|
2957
|
+
[placement, shouldPortal, theme.styles.tooltip, triggerRect]
|
|
2958
|
+
);
|
|
2911
2959
|
const setOpen = (nextOpen) => {
|
|
2912
2960
|
if (!canShow && nextOpen) return;
|
|
2961
|
+
if (shouldPortal) {
|
|
2962
|
+
setTriggerRect(nextOpen ? rootRef.current?.getBoundingClientRect() ?? null : null);
|
|
2963
|
+
}
|
|
2913
2964
|
if (!isControlled) {
|
|
2914
2965
|
setUncontrolledOpen(nextOpen);
|
|
2915
2966
|
}
|
|
2916
2967
|
onOpenChange?.(nextOpen);
|
|
2917
2968
|
};
|
|
2969
|
+
useLayoutEffect(() => {
|
|
2970
|
+
if (!shouldPortal || !canShow || !isOpen) return;
|
|
2971
|
+
const updateTriggerRect = () => {
|
|
2972
|
+
setTriggerRect(rootRef.current?.getBoundingClientRect() ?? null);
|
|
2973
|
+
};
|
|
2974
|
+
updateTriggerRect();
|
|
2975
|
+
window.addEventListener("resize", updateTriggerRect);
|
|
2976
|
+
window.addEventListener("scroll", updateTriggerRect, true);
|
|
2977
|
+
return () => {
|
|
2978
|
+
window.removeEventListener("resize", updateTriggerRect);
|
|
2979
|
+
window.removeEventListener("scroll", updateTriggerRect, true);
|
|
2980
|
+
};
|
|
2981
|
+
}, [canShow, isOpen, shouldPortal]);
|
|
2982
|
+
const tooltipContent = canShow && isOpen && (!shouldPortal || triggerRect) ? /* @__PURE__ */ jsx(
|
|
2983
|
+
"span",
|
|
2984
|
+
{
|
|
2985
|
+
role: "tooltip",
|
|
2986
|
+
className: cn(
|
|
2987
|
+
theme.slots.tooltipContent,
|
|
2988
|
+
shouldPortal ? void 0 : getTooltipPlacementClassName(placement),
|
|
2989
|
+
classNames?.content
|
|
2990
|
+
),
|
|
2991
|
+
style: tooltipStyle,
|
|
2992
|
+
children: content
|
|
2993
|
+
}
|
|
2994
|
+
) : null;
|
|
2918
2995
|
return /* @__PURE__ */ jsxs(
|
|
2919
2996
|
"span",
|
|
2920
2997
|
{
|
|
2921
2998
|
...tooltipProps,
|
|
2999
|
+
ref: rootRef,
|
|
2922
3000
|
className: cn(theme.slots.tooltipRoot, classNames?.root, className),
|
|
2923
3001
|
style,
|
|
2924
3002
|
onMouseEnter: () => setOpen(true),
|
|
@@ -2927,19 +3005,7 @@ function BaseTooltip({
|
|
|
2927
3005
|
onBlur: () => setOpen(false),
|
|
2928
3006
|
children: [
|
|
2929
3007
|
/* @__PURE__ */ jsx("span", { className: cn(theme.slots.tooltipTrigger, classNames?.trigger), children }),
|
|
2930
|
-
|
|
2931
|
-
"span",
|
|
2932
|
-
{
|
|
2933
|
-
role: "tooltip",
|
|
2934
|
-
className: cn(
|
|
2935
|
-
theme.slots.tooltipContent,
|
|
2936
|
-
getTooltipPlacementClassName(placement),
|
|
2937
|
-
classNames?.content
|
|
2938
|
-
),
|
|
2939
|
-
style: theme.styles.tooltip,
|
|
2940
|
-
children: content
|
|
2941
|
-
}
|
|
2942
|
-
) : null
|
|
3008
|
+
shouldPortal && tooltipContent ? createPortal(tooltipContent, document.body) : tooltipContent
|
|
2943
3009
|
]
|
|
2944
3010
|
}
|
|
2945
3011
|
);
|
|
@@ -3593,6 +3659,7 @@ function NavigationLayoutActionButtons({
|
|
|
3593
3659
|
appearance: NAVIGATION_LAYOUT_DEFAULT_APPEARANCE,
|
|
3594
3660
|
content: action.label,
|
|
3595
3661
|
placement: "right",
|
|
3662
|
+
portal: true,
|
|
3596
3663
|
children: /* @__PURE__ */ jsx(
|
|
3597
3664
|
BaseButton,
|
|
3598
3665
|
{
|
|
@@ -3742,6 +3809,7 @@ function SidebarBrand({
|
|
|
3742
3809
|
appearance: NAVIGATION_LAYOUT_DEFAULT_APPEARANCE,
|
|
3743
3810
|
content: brandTitle,
|
|
3744
3811
|
placement: "right",
|
|
3812
|
+
portal: true,
|
|
3745
3813
|
children: /* @__PURE__ */ jsx(
|
|
3746
3814
|
BaseButton,
|
|
3747
3815
|
{
|
|
@@ -3806,6 +3874,7 @@ function Sidebar({
|
|
|
3806
3874
|
appearance: NAVIGATION_LAYOUT_DEFAULT_APPEARANCE,
|
|
3807
3875
|
content: item.label,
|
|
3808
3876
|
placement: "right",
|
|
3877
|
+
portal: true,
|
|
3809
3878
|
children: /* @__PURE__ */ jsx(
|
|
3810
3879
|
BaseButton,
|
|
3811
3880
|
{
|
|
@@ -3918,9 +3987,9 @@ function HeadbarNavMenuItem({
|
|
|
3918
3987
|
onMouseEnter: openMenu,
|
|
3919
3988
|
onMouseLeave: scheduleCloseMenu,
|
|
3920
3989
|
className: cn2(
|
|
3921
|
-
"h-9 max-w-[12rem] border-transparent
|
|
3990
|
+
"h-9 max-w-[12rem] border-transparent px-3 text-sm font-medium shadow-none",
|
|
3922
3991
|
menuButtonRadiusClass,
|
|
3923
|
-
isActive || open ? "!bg-[hsl(var(--muted))] text-[hsl(var(--foreground))]" : "text-[hsl(var(--muted-foreground))] hover:!bg-[hsl(var(--muted))]/60 hover:text-[hsl(var(--foreground))]"
|
|
3992
|
+
isActive || open ? "!bg-[hsl(var(--muted))] text-[hsl(var(--foreground))]" : "!bg-transparent text-[hsl(var(--muted-foreground))] hover:!bg-[hsl(var(--muted))]/60 hover:text-[hsl(var(--foreground))]"
|
|
3924
3993
|
)
|
|
3925
3994
|
}
|
|
3926
3995
|
) }),
|
|
@@ -3998,9 +4067,9 @@ function HeadbarNav({
|
|
|
3998
4067
|
label: /* @__PURE__ */ jsx("span", { className: "truncate whitespace-nowrap", children: label }),
|
|
3999
4068
|
onClick: () => onNavigate?.(item.id),
|
|
4000
4069
|
className: cn2(
|
|
4001
|
-
"h-9 max-w-[12rem] border-transparent
|
|
4070
|
+
"h-9 max-w-[12rem] border-transparent px-3 text-sm font-medium shadow-none",
|
|
4002
4071
|
menuButtonRadiusClass,
|
|
4003
|
-
isActive ? "!bg-[hsl(var(--muted))] text-[hsl(var(--foreground))]" : "text-[hsl(var(--muted-foreground))] hover:!bg-[hsl(var(--muted))]/60 hover:text-[hsl(var(--foreground))]"
|
|
4072
|
+
isActive ? "!bg-[hsl(var(--muted))] text-[hsl(var(--foreground))]" : "!bg-transparent text-[hsl(var(--muted-foreground))] hover:!bg-[hsl(var(--muted))]/60 hover:text-[hsl(var(--foreground))]"
|
|
4004
4073
|
)
|
|
4005
4074
|
},
|
|
4006
4075
|
item.id
|