import { useIsTabOpen, useTabSet } from '@curvenote/ui-providers'; import classNames from 'classnames'; import type { GenericNode } from 'mystjs'; import { useEffect } from 'react'; import { selectAll } from 'unist-util-select'; import type { NodeRenderer } from './types'; interface TabItem extends GenericNode { key: string; title: string; sync?: string; } export const TabSetRenderer: NodeRenderer = (node, children) => { const items = selectAll('tabItem', node) as TabItem[]; const keys = items.map((item) => item.sync || item.key); const { onClick, active } = useTabSet(keys); useEffect(() => { onClick(items[0]?.sync || items[0]?.key); }, []); return (
{items.map((item) => { const key = item.sync || item.key; return (
onClick(key)} > {item.title}
); })}
{children}
); }; export const TabItemRenderer: NodeRenderer = (node, children) => { const open = useIsTabOpen(node.sync || node.key); return
{children}
; }; const TAB_RENDERERS: Record = { tabSet: TabSetRenderer, tabItem: TabItemRenderer, }; export default TAB_RENDERERS;