import { EMPTY_OBJ, type LooseRequired, type Prettify, type UnionToIntersection, camelize, extend, hasChanged, isArray, isFunction, isPromise, } from '@vue/shared' import { type SetupContext, createSetupContext, getCurrentInstance, setCurrentInstance, unsetCurrentInstance, } from './component' import type { EmitFn, EmitsOptions, ObjectEmitsOptions } from './componentEmits' import type { ComponentOptionsMixin, ComponentOptionsWithoutProps, ComputedOptions, MethodOptions, } from './componentOptions' import type { ComponentObjectPropsOptions, ComponentPropsOptions, ExtractPropTypes, NormalizedProps, PropOptions, } from './componentProps' import { warn } from './warning' import type { SlotsType, StrictUnwrapSlotsType } from './componentSlots' import { type Ref, customRef, ref } from '@vue/reactivity' import { watchSyncEffect } from '.' // dev only const warnRuntimeUsage = (method: string) => warn( `${method}() is a compiler-hint helper that is only usable inside ` + `