import { Ref } from "vue"; import { classNames } from "@v-c/util"; //#region src/_util/tools.d.ts declare function getSlotPropFn(slots: any, props: any, key: string): any; declare function getSlotPropsFnRun(slots: any, props: any, key: string, isNull?: boolean, params?: any): any; declare function toPropsRefs, K extends keyof T>(obj: T, ...args: K[]): { [key in K]-?: Ref }; /** * 返回一个「稳定引用」的事件转发器,调用时实时读取组件当前 vnode 上的监听器。 * * 用途:解决「把 emit 事件回调按值捕获进子组件、之后才触发」导致的陈旧闭包问题。 * 当组件实例被复用且本次更新里只有事件回调发生了变化时(典型场景:无 `rowKey` 的 * 表格翻页后按位置复用行),Vue 的 `shouldUpdateComponent` 会把它当作「仅 emit 监听器 * 变化」而跳过该组件的重新渲染,于是渲染期捕获的回调会停留在旧值。 * * 这里通过 `instance.vnode.props` 实时取值,而该字段在跳过更新时仍会被 `updateComponent` * 同步为最新 vnode,因此永远拿到最新回调;同时保留处理函数的返回值(`emit` 会丢弃返回值, * 故无法直接用 `emit` 替代——`ActionButton` 依赖 confirm 的返回值驱动异步 loading)。 */ declare function useLiveListener(name: string): (...args: Args) => R | undefined; declare const clsx: typeof classNames; //#endregion export { clsx, getSlotPropFn, getSlotPropsFnRun, toPropsRefs, useLiveListener };