import Vue from 'vue' import { filterObjectOnKeys } from '../util/helpers' import { OptionsVue, VueConstructor } from 'vue/types/vue' const availableProps = { absolute: Boolean, bottom: Boolean, fixed: Boolean, left: Boolean, right: Boolean, top: Boolean } type props = Record export type Positionable = VueConstructor export function factory (selected?: S[]): Positionable export function factory (selected: undefined): OptionsVue export function factory (selected: any[] = []): any { return Vue.extend({ name: 'positionable', props: selected.length ? filterObjectOnKeys(availableProps, selected) : availableProps }) } export default factory() // Add a `*` before the second `/` /* Tests / let single = factory(['top']).extend({ created () { this.top this.bottom this.absolute } }) let some = factory(['top', 'bottom']).extend({ created () { this.top this.bottom this.absolute } }) let all = factory().extend({ created () { this.top this.bottom this.absolute this.foobar } }) /**/