import Vue, { PropType } from 'vue'; import deepMerge from 'deepmerge'; import type { Customizable, Options } from './types'; /** * Mixin that merge default options with options passed as props * @example * Usage in your component: * mixins: [ customizable({ btn: { color: 'primary' } }) ] * * * * Final API * */ export function customizable(defaultOptions: Options): Customizable { return Vue.extend({ props: { vuetifyOptions: { type: Object as PropType, default: undefined } }, computed: { options(): Options { if (this.vuetifyOptions) { return deepMerge(defaultOptions, this.vuetifyOptions); } return defaultOptions; } } }); } export type { Options };