* @internal
*/
export { initFeatureFlags } from './featureFlags'
+/**
+ * @internal
+ */
+export { setRef } from './rendererTemplateRef'
+/**
+ * @internal
+ */
+export { type VNodeNormalizedRef, normalizeRef } from './vnode'
+ /**
+ * @internal
+ */
+ export { createInternalObject } from './internalObject'
isString,
remove,
} from '@vue/shared'
- import { isFragment } from './block'
-import { DynamicFragment } from './block'
++import { DynamicFragment, isFragment } from './block'
-export type NodeRef = string | Ref | ((ref: Element) => void)
+export type NodeRef =
+ | string
+ | Ref
+ | ((ref: Element | VaporComponentInstance, refs: Record<string, any>) => void)
export type RefEl = Element | VaporComponentInstance
export type setRefFn = (
): NodeRef | undefined {
if (!instance || instance.isUnmounted) return
+ // vdom interop
+ if (isFragment(el) && el.setRef) {
+ el.setRef(instance, ref, refFor, refKey)
+ return
+ }
+
const setupState: any = __DEV__ ? instance.setupState || {} : null
- const refValue = isVaporComponent(el) ? getExposed(el) || el : el
+ const refValue = getRefValue(el)
const refs =
instance.refs === EMPTY_OBJ ? (instance.refs = {}) : instance.refs