import Vue, { VueConstructor } from 'vue' export type Toggleable = VueConstructor> export function factory (prop?: T, event?: string): Toggleable export function factory (prop = 'value', event = 'input') { return Vue.extend({ name: 'toggleable', model: { prop, event }, props: { [prop]: { required: false }, }, data () { return { isActive: !!this[prop], } }, watch: { [prop] (val) { this.isActive = !!val }, isActive (val) { !!val !== this[prop] && this.$emit(event, val) }, }, }) } /* eslint-disable-next-line @typescript-eslint/no-redeclare */ const Toggleable = factory() export default Toggleable