import { defineComponent } from 'vue';

export default defineComponent({
    emits: ['update:modelValue'],
	props: {
		/** @model */
		modelValue: [String, Number, Boolean, Array],
		/**
		 * Same as native value
		 */
		nativeValue: [String, Number, Boolean, Array],
		/**
		 * Color of the control, optional
		 * @values primary, info, success, warning, danger, and any other custom color
		 */
		variant: String,
		/**
		 * Same as native disabled
		 */
		disabled: Boolean,
		required: Boolean,
		/**
		 * Same as native name
		 */
		name: String,
		/**
		 * Size of the control, optional
		 * @values small, medium, large
		 */
		size: String
	},
	data() {
		return {
            newValue: this.modelValue
		}
	},
	computed: {
		computedValue: {
			get() {
				return this.newValue
			},
			set(value) {
                this.newValue = value
				this.$emit('update:modelValue', this.newValue)
			}
		}
	},
	watch: {
		/**
		 * When v-model change, set internal value.
		 */
		modelValue(value) {
            this.newValue = value
		}
	},
	methods: {
		focus() {
			// MacOS FireFox and Safari do not focus when clicked
			this.$refs.input.focus()
		}
	}
})
