<template> <div class="field"> <span class="field-title" v-if="title">{{ title }}</span> <vue-select :options="options" :model-value="value" @update:modelValue="setSelected" label-by="label" :value-by="getValue" :placeholder="placeholder" :close-on-select="closeOnSelect" /> </div> </template> <script lang="ts"> import { defineComponent } from "vue"; export default defineComponent({ name: "Select", props: { title: String, options: Array, // https://vue-select.org/guide/options.html#options-prop value: [String, Object], default: [String, Object], placeholder: String, closeOnSelect: Boolean }, emits: ["change"], methods: { setSelected(value: any) { value = value || this.default; this.$emit("change", value); }, getValue(item?: { value: any }) { return item?.value; } } }); </script> <style> .vue-select { width: 50%; border-radius: var(--border-radius); } .field-buttons .vue-select { width: unset; } .vue-select, .vue-dropdown { border-color: var(--outline); } .vue-dropdown { background: var(--raised-background); } .vue-dropdown-item { color: var(--feature-foreground); } .vue-dropdown-item, .vue-dropdown-item * { transition-duration: 0s; } .vue-dropdown-item.highlighted { background-color: var(--highlighted); } .vue-dropdown-item.selected, .vue-dropdown-item.highlighted.selected { background-color: var(--bought); } .vue-input input::placeholder { color: var(--link); } </style>