@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.
Files changed (33) hide show
  1. package/dist/components/base/index.d.mts +2 -2
  2. package/dist/components/base/index.d.ts +2 -2
  3. package/dist/components/base/index.js +79 -13
  4. package/dist/components/base/index.js.map +1 -1
  5. package/dist/components/base/index.mjs +80 -14
  6. package/dist/components/base/index.mjs.map +1 -1
  7. package/dist/components/layout/index.d.mts +1 -1
  8. package/dist/components/layout/index.d.ts +1 -1
  9. package/dist/components/layout/index.js +86 -14
  10. package/dist/components/layout/index.js.map +1 -1
  11. package/dist/components/layout/index.mjs +87 -15
  12. package/dist/components/layout/index.mjs.map +1 -1
  13. package/dist/components/workbench/index.d.mts +1 -1
  14. package/dist/components/workbench/index.d.ts +1 -1
  15. package/dist/components/workbench/index.js +1 -0
  16. package/dist/components/workbench/index.js.map +1 -1
  17. package/dist/components/workbench/index.mjs +1 -0
  18. package/dist/components/workbench/index.mjs.map +1 -1
  19. package/dist/index.d.mts +2 -2
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +86 -15
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +86 -15
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/{theme-Clm5dVb0.d.mts → theme-CSDlBl7e.d.ts} +2 -2
  26. package/dist/{theme-sIoU5-YC.d.ts → theme-K9M_pIiz.d.mts} +2 -2
  27. package/dist/theme-system/index.d.mts +1 -1
  28. package/dist/theme-system/index.d.ts +1 -1
  29. package/dist/theme-system/index.js +1 -1
  30. package/dist/theme-system/index.mjs +1 -1
  31. package/dist/{types-Bn6PEDsX.d.mts → types-5cYLLXs8.d.mts} +1 -0
  32. package/dist/{types-Bn6PEDsX.d.ts → types-5cYLLXs8.d.ts} +1 -0
  33. 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
- canShow && isOpen ? /* @__PURE__ */ jsx(
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
  {
@@ -4153,7 +4222,10 @@ function NavigationLayout({
4153
4222
  const sidebar = isHeadbarMode ? null : /* @__PURE__ */ jsx(
4154
4223
  "div",
4155
4224
  {
4156
- className: "relative h-full min-h-0 shrink-0 overflow-hidden transition-[width] duration-260",
4225
+ className: cn2(
4226
+ "relative h-full min-h-0 shrink-0 transition-[width] duration-260",
4227
+ sidebarCollapsed ? "z-20 overflow-visible" : "z-10 overflow-hidden"
4228
+ ),
4157
4229
  style: { width: sidebarWidth, transitionTimingFunction: NAVIGATION_LAYOUT_TRANSITION_TIMING },
4158
4230
  children: /* @__PURE__ */ jsx(
4159
4231
  Sidebar,