UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 5.41 kB
{"version":3,"file":"forwardRefs.mjs","names":["Refs","Symbol","forwardRefs","target","refs","Proxy","get","key","Reflect","has","ref","value","val","bind","getOwnPropertyDescriptor","descriptor","startsWith","_","setupState","obj","Object","getPrototypeOf","childRefs","queue","slice","length","shift","push","undefined"],"sources":["../../src/composables/forwardRefs.ts"],"sourcesContent":["import type { ComponentPublicInstance, Ref, UnwrapRef } from 'vue'\nimport type { UnionToIntersection } from '@/util'\n\nconst Refs = Symbol('Forwarded refs')\n\n/** Omit properties starting with P */\ntype OmitPrefix<T, P extends string> = [Extract<keyof T, `${P}${any}`>] extends [never] ? T : Omit<T, `${P}${any}`>\n\ntype OmitProps<T> = T extends { $props: any } ? Omit<T, keyof T['$props']> : never\n\nexport function forwardRefs<T extends {}, U extends Ref<HTMLElement | Omit<ComponentPublicInstance, '$emit'> | undefined>[]> (\n target: T,\n ...refs: U\n): T & UnionToIntersection<{ [K in keyof U]: OmitPrefix<OmitProps<NonNullable<UnwrapRef<U[K]>>>, '$'> }[number]> {\n (target as any)[Refs] = refs\n\n return new Proxy(target, {\n get (target, key) {\n if (Reflect.has(target, key)) {\n return Reflect.get(target, key)\n }\n for (const ref of refs) {\n if (ref.value && Reflect.has(ref.value, key)) {\n const val = Reflect.get(ref.value, key)\n return typeof val === 'function'\n ? val.bind(ref.value)\n : val\n }\n }\n },\n getOwnPropertyDescriptor (target, key) {\n const descriptor = Reflect.getOwnPropertyDescriptor(target, key)\n if (descriptor) return descriptor\n\n // Skip internal properties\n if (typeof key === 'symbol' || key.startsWith('__')) return\n\n // Check each ref's own properties\n for (const ref of refs) {\n if (!ref.value) continue\n const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key)\n if (descriptor) return descriptor\n if ('_' in ref.value && 'setupState' in ref.value._) {\n const descriptor = Reflect.getOwnPropertyDescriptor(ref.value._.setupState, key)\n if (descriptor) return descriptor\n }\n }\n // Recursive search up each ref's prototype\n for (const ref of refs) {\n let obj = ref.value && Object.getPrototypeOf(ref.value)\n while (obj) {\n const descriptor = Reflect.getOwnPropertyDescriptor(obj, key)\n if (descriptor) return descriptor\n obj = Object.getPrototypeOf(obj)\n }\n }\n // Call forwarded refs' proxies\n for (const ref of refs) {\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (!childRefs) continue\n const queue = childRefs.slice()\n while (queue.length) {\n const ref = queue.shift()\n const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key)\n if (descriptor) return descriptor\n const childRefs = ref.value && (ref.value as any)[Refs]\n if (childRefs) queue.push(...childRefs)\n }\n }\n return undefined\n },\n }) as any\n}\n"],"mappings":"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"}