koval-ui
Version:
React components collection with minimalistic design. Supports theming, layout, and input validation.
91 lines (90 loc) • 2.59 kB
JavaScript
"use client";
import { jsxs as d, jsx as t } from "react/jsx-runtime";
import { forwardRef as O, useState as j, useEffect as u, useRef as E, useCallback as L, Fragment as S } from "react";
import l from "classnames";
import { useFloating as k, offset as A, flip as C, arrow as M, autoUpdate as U } from "@floating-ui/react-dom";
import { useLocalTheme as q, useRootTheme as z } from "css-vars-hook";
import { Portal as B } from "../../internal/Portal/Portal.js";
import { useDismiss as G } from "../../internal/hooks/useDismiss.js";
import { useFocusTrap as H } from "../../internal/hooks/useFocusTrap.js";
import { Arrow as I } from "./Arrow.js";
import o from "./Tooltip.module.css.js";
const J = O(
({
children: h,
className: w,
isOpen: a = !1,
content: N,
referenceClassName: R,
onToggle: m = () => {
},
interactive: i = !0,
placement: g = "bottom",
...x
}, y) => {
var n, p;
const [e, r] = j(a);
u(() => {
r(a);
}, [a, r]), u(() => {
m(e);
}, [e, m]);
const f = E(null), { refs: s, floatingStyles: T, middlewareData: c, placement: F } = k({
strategy: "fixed",
placement: g,
whileElementsMounted: U,
middleware: [
A(18),
C(),
M({
element: f
})
]
}), { LocalRoot: b } = q(), { getTheme: v } = z(), D = L(() => {
r(!1);
}, [r]);
return G(D, s.reference, e), H(s.floating.current, e, i), /* @__PURE__ */ d(S, { children: [
/* @__PURE__ */ t(
"div",
{
ref: s.setReference,
className: l(o.reference, R),
children: h
}
),
e && /* @__PURE__ */ t(B, { children: /* @__PURE__ */ t(
"div",
{
ref: s.setFloating,
style: T,
className: l({ [o.unfocusable]: !i }),
children: /* @__PURE__ */ t(b, { className: o.provider, theme: v(), children: /* @__PURE__ */ d(
"div",
{
...x,
ref: y,
className: l(o.tooltip, w),
children: [
/* @__PURE__ */ t(
I,
{
ref: f,
placement: F,
left: (n = c.arrow) == null ? void 0 : n.x,
top: (p = c.arrow) == null ? void 0 : p.y
}
),
N
]
}
) })
}
) })
] });
}
);
J.displayName = "Tooltip";
export {
J as Tooltip
};
//# sourceMappingURL=Tooltip.js.map