// 补充 vue3-print-nb 模块声明
declare module 'vue3-print-nb' {
  import {
    App,
    DirectiveBinding,
  } from 'vue'


  type PrintStandard = 'strict' | 'loose' | 'html5';

  interface PrintOptions {
    /**
     * 需打印元素的ID（不带#）
     */
    id?: string;

    /**
     * 打印预览标题
     * @default '打印预览'
     */
    previewTitle?: string;

    /**
     * 预览页面打印按钮文本
     * @default '打印'
     */
    previewPrintBtnLabel?: string;

    /**
     * 打印窗口标题
     */
    popTitle?: string;

    /**
     * 是否启用预览模式
     * @default false
     */
    preview?: boolean;

    /**
     * 打印标准
     * @default 'html5'
     */
    standard?: PrintStandard;

    /**
     * 额外的头部内容
     */
    extraHead?: string;

    /**
     * 额外的CSS链接
     */
    extraCss?: string;

    /**
     * 预览窗口z-index值
     * @default 20002
     */
    zIndex?: number;

    /**
     * 异步URL，用于加载打印内容
     */
    url?: string;

    /**
     * 异步加载打印内容的回调函数
     */
    asyncUrl?: (callback: (content: string) => void, vueInstance: any) => void;

    /**
     * 预览窗口打开前的回调
     * @param vm - Vue实例
     */
    previewBeforeOpenCallback?: (vm: any) => void;

    /**
     * 预览窗口打开后的回调
     * @param vm - Vue实例
     */
    previewOpenCallback?: (vm: any) => void;

    /**
     * 打印窗口打开后的回调
     * @param vm - Vue实例
     */
    openCallback?: (vm: any) => void;

    /**
     * 打印窗口关闭后的回调
     * @param vm - Vue实例
     */
    closeCallback?: (vm: any) => void;

    /**
     * 打印窗口打开前的回调
     * @param vm - Vue实例
     */
    beforeOpenCallback?: (vm: any) => void;
  }

  type PrintDirective = {
    (el: HTMLElement, binding: DirectiveBinding<string | PrintOptions>): void;
  };

  const PrintPlugin: {
    directiveName: string;
    mounted: (el: HTMLElement, binding: DirectiveBinding<string | PrintOptions>, vnode: any) => void;
    install: (app: App) => void;
  }

  export type PrintDirective = PrintDirective
  export default PrintPlugin
}
