import { VueNode as VueNode$1 } from "../_util/type.js";
import { SemanticClassNamesType, SemanticStylesType } from "../_util/hooks/useMergeSemantic.js";
import "../_util/hooks/index.js";
import { TooltipProps } from "../tooltip/index.js";
import { ComponentBaseProps, DirectionType } from "../config-provider/context.js";
import { CSSProperties } from "vue";
import { TextAreaProps } from "@v-c/textarea";

//#region src/typography/interface.d.ts
type BaseType = 'secondary' | 'success' | 'warning' | 'danger';
interface CopyConfig {
  text?: string | (() => string | Promise<string>);
  onCopy?: (event?: MouseEvent) => void;
  icon?: VueNode$1 | VueNode$1[];
  tooltips?: VueNode$1 | VueNode$1[] | false;
  format?: 'text/plain' | 'text/html';
  tabIndex?: number;
}
interface EditConfig {
  text?: string;
  editing?: boolean;
  icon?: VueNode$1;
  tooltip?: VueNode$1;
  onStart?: () => void;
  onChange?: (value: string) => void;
  onCancel?: () => void;
  onEnd?: () => void;
  maxLength?: number;
  autoSize?: boolean | TextAreaProps['autoSize'];
  triggerType?: ('icon' | 'text')[];
  enterIcon?: VueNode$1;
  tabIndex?: number;
}
interface EllipsisConfig {
  rows?: number;
  expandable?: boolean | 'collapsible';
  suffix?: string;
  symbol?: VueNode$1 | ((expanded: boolean) => VueNode$1);
  defaultExpanded?: boolean;
  expanded?: boolean;
  onExpand?: (e: MouseEvent, info: {
    expanded: boolean;
  }) => void;
  onEllipsis?: (ellipsis: boolean) => void;
  tooltip?: VueNode$1 | TooltipProps;
}
/**
 * @since 1.3.0 (mirrors ant-design 6.4 ActionsConfig)
 */
interface ActionsConfig {
  placement?: 'start' | 'end';
}
interface TypographySemanticClassNames {
  root?: string;
  actions?: string;
  action?: string;
  textarea?: string;
}
interface TypographySemanticStyles {
  root?: CSSProperties;
  actions?: CSSProperties;
  action?: CSSProperties;
  textarea?: CSSProperties;
}
type TypographyClassNamesType = SemanticClassNamesType<BlockProps, TypographySemanticClassNames>;
type TypographyStylesType = SemanticStylesType<BlockProps, TypographySemanticStyles>;
interface BlockProps extends ComponentBaseProps {
  title?: string;
  editable?: boolean | EditConfig;
  copyable?: boolean | CopyConfig;
  type?: BaseType;
  disabled?: boolean;
  ellipsis?: boolean | EllipsisConfig;
  /**
   * @since 1.3.0
   */
  actions?: ActionsConfig;
  code?: boolean;
  mark?: boolean;
  underline?: boolean;
  delete?: boolean;
  strong?: boolean;
  keyboard?: boolean;
  italic?: boolean;
  component?: keyof HTMLElementTagNameMap | string;
  direction?: DirectionType;
  classes?: TypographyClassNamesType;
  styles?: TypographyStylesType;
  id?: string;
  [key: `data-${string}`]: string | number | undefined;
}
interface TypographySlots {
  default?: () => any;
}
interface TypographyBaseEmits {
  'click': (e: MouseEvent) => void;
  'expand': (expanded: boolean, e: MouseEvent) => void;
  'copy': (e?: MouseEvent) => void;
  'edit:start': () => void;
  'edit:change': (value: string) => void;
  'edit:cancel': () => void;
  'edit:end': () => void;
  'update:expanded': (expanded: boolean) => void;
  'update:editing': (editing: boolean) => void;
}
interface TypographyBaseProps extends ComponentBaseProps {
  prefixCls?: string;
  rootClass?: string;
  component?: keyof HTMLElementTagNameMap | string;
  direction?: DirectionType;
  title?: string;
}
//#endregion
export { ActionsConfig, BaseType, BlockProps, CopyConfig, EditConfig, EllipsisConfig, TypographyBaseEmits, TypographyBaseProps, TypographyClassNamesType, TypographySemanticClassNames, TypographySemanticStyles, TypographySlots, TypographyStylesType };