import { Ref, ref, computed, SetupContext, ComputedRef, WritableComputedRef } from "vue"; export const contextForDetachedVModel = < T extends Record, K extends keyof T >( props: T, ctx: SetupContext ) => { function detachedVModel( /** the v-model property in props */ vmodel: K ): WritableComputedRef { const _sidecar: Ref = ref(props[vmodel]); return computed({ get: () => (props[vmodel as K] !== undefined ? props[vmodel as K] : _sidecar.value), set: (v) => { if (props[vmodel as K] !== undefined) { ctx.emit(`update:${vmodel}`, v); } else { _sidecar.value = v; } }, }); } return detachedVModel; };