import {
Children,
isValidElement,
type ReactElement,
type ReactNode,
} from 'react'
import { Box } from '@mui/material'
import { useLegendRow } from '../contexts'
import { styles } from './styles'
export interface LegendActionsProps {
children?: ReactNode
}
/**
* Header actions slot for `Legend.Row` / `Legend.Group` (widgets-v2 `Actions`
* parity): the wrapper partitions its children by component identity and
* renders this slot inside the header, wrapped in the hover-fade group
* (`PsLegend-rowFade` in rows, `PsLegend-groupFade` in group headers —
* resolved from the nearest context). Compose the visibility toggle last so
* it sits rightmost, per design.
*
* @experimental This API is new and may change in a future release.
*/
export function LegendActions({ children }: LegendActionsProps) {
const inRow = useLegendRow() !== null
return (
{children}
)
}
/**
* Splits a wrapper's children by component identity: ``
* elements belong in the header, everything else in the collapsible body.
* Identity comparison works because consumers import the slot from the same
* module (same pattern as widgets-v2 `Wrapper`).
*/
export function partitionLegendChildren(children: ReactNode): {
actions: ReactNode[]
body: ReactNode[]
} {
const actions: ReactNode[] = []
const body: ReactNode[] = []
for (const child of Children.toArray(children)) {
if (isSlot(child, LegendActions)) actions.push(child)
else body.push(child)
}
return { actions, body }
}
function isSlot(node: ReactNode, type: unknown): node is ReactElement {
return isValidElement(node) && node.type === type
}