UNPKG

fumadocs-twoslash

Version:

Typescript Twoslash Integration for Fumadocs

119 lines (113 loc) 3.16 kB
"use client"; import { __objRest, __spreadValues } from "../chunk-ORMEWXMH.js"; // src/ui/popup.tsx import { forwardRef as forwardRef2, useState, useRef, useContext, createContext, useMemo } from "react"; // src/ui/popover.tsx import * as PopoverPrimitive from "@radix-ui/react-popover"; import * as React from "react"; // src/ui/cn.ts import { twMerge } from "tailwind-merge"; // src/ui/popover.tsx import { jsx } from "react/jsx-runtime"; var Popover = PopoverPrimitive.Root; var PopoverTrigger = PopoverPrimitive.Trigger; var PopoverContent = React.forwardRef((_a, ref) => { var _b = _a, { className, align = "center", sideOffset = 4 } = _b, props = __objRest(_b, ["className", "align", "sideOffset"]); return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx( PopoverPrimitive.Content, __spreadValues({ ref, align, sideOffset, side: "bottom", className: twMerge("fd-twoslash-popover", className) }, props) ) }); }); PopoverContent.displayName = PopoverPrimitive.Content.displayName; // src/ui/popup.tsx import { jsx as jsx2 } from "react/jsx-runtime"; var PopupContext = createContext(void 0); function Popup({ delay = 300, children }) { const [open, setOpen] = useState(false); const openTimeoutRef = useRef(void 0); const closeTimeoutRef = useRef(void 0); return /* @__PURE__ */ jsx2(Popover, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsx2( PopupContext.Provider, { value: useMemo( () => ({ open, setOpen, handleOpen(e) { if (e.pointerType === "touch") return; if (closeTimeoutRef.current) clearTimeout(closeTimeoutRef.current); openTimeoutRef.current = window.setTimeout(() => { setOpen(true); }, delay); }, handleClose(e) { if (e.pointerType === "touch") return; if (openTimeoutRef.current) clearTimeout(openTimeoutRef.current); closeTimeoutRef.current = window.setTimeout(() => { setOpen(false); }, delay); } }), [delay, open] ), children } ) }); } var PopupTrigger = forwardRef2((props, ref) => { const ctx = useContext(PopupContext); if (!ctx) throw new Error("Missing Popup Context"); return /* @__PURE__ */ jsx2( PopoverTrigger, __spreadValues({ ref, onPointerEnter: ctx.handleOpen, onPointerLeave: ctx.handleClose }, props) ); }); PopupTrigger.displayName = "PopupTrigger"; var PopupContent = forwardRef2((props, ref) => { const ctx = useContext(PopupContext); if (!ctx) throw new Error("Missing Popup Context"); return /* @__PURE__ */ jsx2( PopoverContent, __spreadValues({ ref, onPointerEnter: ctx.handleOpen, onPointerLeave: ctx.handleClose, onOpenAutoFocus: (e) => { e.preventDefault(); }, onCloseAutoFocus: (e) => { e.preventDefault(); } }, props) ); }); PopupContent.displayName = "PopupContent"; export { Popup, PopupContent, PopupTrigger };