@inf-monkeys-tech/monkeys-design 0.4.49 → 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 +82 -13
  10. package/dist/components/layout/index.js.map +1 -1
  11. package/dist/components/layout/index.mjs +83 -14
  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 +82 -14
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +82 -14
  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,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
- canShow && isOpen ? /* @__PURE__ */ jsx(
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
  );