import type { VNodeChild } from "vue"; import type { XySemanticClassNames, XySemanticStyles } from "../core"; import type { XyIconName } from "../icon/types"; export type XyTabsType = "card" | "editable-card" | "line"; export type XyTabsPosition = "bottom" | "left" | "right" | "top"; export type XyTabsSize = "lg" | "md" | "sm"; export type XyTabsEditAction = "add" | "remove"; export type XyTabContent = VNodeChild | (() => VNodeChild); export interface XyTabItem { closable?: boolean; content?: XyTabContent; disabled?: boolean; icon?: XyIconName; key: string; label: string; } export interface XyTabsTabSlotProps { active: boolean; index: number; item: XyTabItem; } export interface XyTabsPanelSlotProps extends XyTabsTabSlotProps { } export type XyTabsSemanticDom = "addButton" | "closeButton" | "extra" | "list" | "measure" | "nav" | "overflow" | "overflowButton" | "overflowItem" | "overflowMenu" | "panel" | "panels" | "root" | "tab" | "tabLabel"; export interface XyTabsSemanticProps { activeKey: string; centered: boolean; hasHiddenTabs: boolean; itemCount: number; position: XyTabsPosition; size: XyTabsSize; type: XyTabsType; } export type XyTabsClassNames = XySemanticClassNames; export type XyTabsStyles = XySemanticStyles; export type XyTabsSlots = { addIcon?: () => VNodeChild; closeIcon?: (props: { item: XyTabItem; }) => VNodeChild; extra?: () => VNodeChild; panel?: (props: XyTabsPanelSlotProps) => VNodeChild; tab?: (props: XyTabsTabSlotProps) => VNodeChild; } & Partial VNodeChild>> & Partial VNodeChild>> & Record;