{children}
+ ), + ul: ({ children }: { children: React.ReactNode }) => ( +{children}
+ ),
+ a: ({ children, href }: { children: React.ReactNode; href?: string }) => (
+
+ {children}
+
+ ),
+};
+
+interface DiagramHoverModalProps {
+ ContentComponent: React.ComponentType;
+ children: React.ReactNode;
+}
+
+export function DiagramHoverModal({ ContentComponent, children }: DiagramHoverModalProps) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const { refs, floatingStyles, context } = useFloating({
+ open: isOpen,
+ onOpenChange: setIsOpen,
+ middleware: [offset(10), flip({ fallbackAxisSideDirection: 'start' }), shift({ padding: 5 })],
+ whileElementsMounted: autoUpdate,
+ });
+
+ const hover = useHover(context, {
+ move: false,
+ delay: { open: 150, close: 150 },
+ });
+ const focus = useFocus(context);
+ const dismiss = useDismiss(context);
+ const role = useRole(context, { role: 'dialog' });
+
+ const { getReferenceProps, getFloatingProps } = useInteractions([hover, focus, dismiss, role]);
+
+ const ref = useMergeRefs([refs.setReference]);
+
+ return (
+ <>
+
+ {children}
+
+
+ {isOpen && (
+ {children}
, + ul: ({ children }) =>{children},
+ a: ({ children, href }) => (
+
+ {children}
+
+ ),
+};
+
+interface DiagramHoverModalProps {
+ ContentComponent: React.ComponentType;
+ children: React.ReactNode;
+}
+
+export function DiagramHoverModal({ ContentComponent, children }: DiagramHoverModalProps) {
+ const [isOpen, setIsOpen] = useState(false);
+
+ const { refs, floatingStyles, context } = useFloating({
+ open: isOpen,
+ onOpenChange: setIsOpen,
+ middleware: [offset(10), flip({ fallbackAxisSideDirection: 'start' }), shift({ padding: 5 })],
+ whileElementsMounted: autoUpdate,
+ });
+
+ const hover = useHover(context, {
+ move: false,
+ delay: { open: 150, close: 150 },
+ });
+ const focus = useFocus(context);
+ const dismiss = useDismiss(context);
+ const role = useRole(context, { role: 'dialog' });
+
+ const { getReferenceProps, getFloatingProps } = useInteractions([hover, focus, dismiss, role]);
+
+ const ref = useMergeRefs([refs.setReference]);
+
+ return (
+ <>
+
+ {children}
+
+
+ {isOpen && (
+