import type { Ref, VNode } from 'vue'; import type { ExtractPublicPropTypes } from '../../../_utils'; import type { collapseProps } from '../props/collapse.props'; import type { collapseItemProps } from '../props/collapseItem.props'; export type CollapseTriggerArea = 'main' | 'extra' | 'arrow'; export type CollapseExpandedName = string | number; export type CollapseExpandedNames = CollapseExpandedName | CollapseExpandedName[] | null; export type OnUpdateExpandedNames = & (string | number | null) & (string | null) & (number | null)>(value: T) => void; export type OnUpdateExpandedNamesImpl = | (string | number | null) | (string | null) | (number | null)>(value: T) => void; export type OnItemHeaderClick = (info: HeaderClickInfo) => void; export type OnItemHeaderClickImpl = (info: HeaderClickInfo) => void; export interface HeaderClickInfo { name: T; expanded: boolean; event: MouseEvent; } export type ArrowPlacement = 'left' | 'right' | 'right-edge'; export interface CollapseArrowSlotProps { collapsed: boolean; } export interface CollapseItemHeaderSlotProps { collapsed: boolean; } export interface CollapseItemHeaderExtraSlotProps { collapsed: boolean; } export interface CollapseItemArrowSlotProps { collapsed: boolean; } export interface CollapseSlots { default?: () => VNode[]; arrow?: (props: CollapseArrowSlotProps) => VNode[]; header?: (props: CollapseItemHeaderSlotProps) => VNode[]; 'header-extra'?: (props: CollapseItemHeaderExtraSlotProps) => VNode[]; } export interface CollapseItemSlots { default?: () => VNode[]; header?: (props: CollapseItemHeaderSlotProps) => VNode[]; 'header-extra'?: (props: CollapseItemHeaderExtraSlotProps) => VNode[]; arrow?: (props: CollapseItemArrowSlotProps) => VNode[]; } export interface UCollapseInjectionProps { triggerAreas: CollapseTriggerArea[]; displayDirective: 'if' | 'show'; arrowPlacement: ArrowPlacement; } export interface UCollapseInjection { props: UCollapseInjectionProps; expandedNamesRef: Ref; mergedClsPrefixRef: Ref; slots: CollapseSlots; toggleItem: (collapse: boolean, name: CollapseExpandedName, event: MouseEvent) => void; } export type CollapseProps = ExtractPublicPropTypes; export type CollapseItemProps = ExtractPublicPropTypes;