fix settings select
This commit is contained in:
@@ -31,11 +31,10 @@ const normalizedOptions = computed(() => {
|
|||||||
|
|
||||||
const selectedLabel = computed(() => {
|
const selectedLabel = computed(() => {
|
||||||
const found = normalizedOptions.value.find(o => o.value === props.modelValue);
|
const found = normalizedOptions.value.find(o => o.value === props.modelValue);
|
||||||
return found ? (found.label || found.value) : props.placeholder || '';
|
return found ? (found.label || found.value) : (props.modelValue || props.placeholder || '');
|
||||||
});
|
});
|
||||||
|
|
||||||
const toggle = () => {
|
const toggle = () => { isOpen.value = !isOpen.value;
|
||||||
isOpen.value = !isOpen.value;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const select = (value: string) => {
|
const select = (value: string) => {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useSettingsStore } from '../stores/settingsStore';
|
import { useSettingsStore } from '../stores/settingsStore';
|
||||||
|
import CustomSelect from './CustomSelect.vue';
|
||||||
import { X } from 'lucide-vue-next';
|
import { X } from 'lucide-vue-next';
|
||||||
|
import { computed } from 'vue';
|
||||||
|
|
||||||
const emit = defineEmits(['close']);
|
const emit = defineEmits(['close']);
|
||||||
const settings = useSettingsStore();
|
const settings = useSettingsStore();
|
||||||
@@ -12,13 +14,20 @@ const fontOptions = [
|
|||||||
"Monaco, Menlo, 'Ubuntu Mono', monospace",
|
"Monaco, Menlo, 'Ubuntu Mono', monospace",
|
||||||
"Arial, sans-serif"
|
"Arial, sans-serif"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const displayFontOptions = computed(() => {
|
||||||
|
return fontOptions.map(font => ({
|
||||||
|
value: font,
|
||||||
|
label: font.split(',')[0].replace(/['"]/g, '')
|
||||||
|
}));
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm" @click.self="emit('close')">
|
<div class="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm" @click.self="emit('close')">
|
||||||
<div class="bg-slate-900 border border-slate-700 rounded-xl shadow-2xl w-full max-w-md overflow-hidden animate-in fade-in zoom-in-95 duration-200">
|
<div class="bg-slate-900 border border-slate-700 rounded-xl shadow-2xl w-full max-w-md animate-in fade-in zoom-in-95 duration-200">
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="flex items-center justify-between px-6 py-4 border-b border-slate-800 bg-slate-950/50">
|
<div class="flex items-center justify-between px-6 py-4 border-b border-slate-800 bg-slate-950/50 rounded-t-xl">
|
||||||
<h2 class="text-lg font-semibold text-slate-100">Editor Settings</h2>
|
<h2 class="text-lg font-semibold text-slate-100">Editor Settings</h2>
|
||||||
<button
|
<button
|
||||||
@click="emit('close')"
|
@click="emit('close')"
|
||||||
@@ -52,18 +61,14 @@ const fontOptions = [
|
|||||||
<div class="space-y-3">
|
<div class="space-y-3">
|
||||||
<label class="text-sm font-medium text-slate-300">Font Family</label>
|
<label class="text-sm font-medium text-slate-300">Font Family</label>
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<select
|
<CustomSelect
|
||||||
v-model="settings.editorFontFamily"
|
v-model="settings.editorFontFamily"
|
||||||
class="w-full bg-slate-950 border border-slate-700 text-slate-300 text-sm rounded-lg focus:ring-indigo-500 focus:border-indigo-500 block p-2.5"
|
:options="displayFontOptions"
|
||||||
>
|
:full-width="true"
|
||||||
<option v-for="font in fontOptions" :key="font" :value="font">
|
placeholder="Select or enter font family"
|
||||||
{{ font.split(',')[0].replace(/['"]/g, '') }}
|
/>
|
||||||
</option>
|
|
||||||
<option value="custom">Custom...</option>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<input
|
<input
|
||||||
v-if="settings.editorFontFamily === 'custom' || !fontOptions.includes(settings.editorFontFamily)"
|
v-if="!fontOptions.includes(settings.editorFontFamily)"
|
||||||
type="text"
|
type="text"
|
||||||
v-model="settings.editorFontFamily"
|
v-model="settings.editorFontFamily"
|
||||||
placeholder="e.g. 'JetBrains Mono', monospace"
|
placeholder="e.g. 'JetBrains Mono', monospace"
|
||||||
@@ -74,7 +79,7 @@ const fontOptions = [
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
<div class="px-6 py-4 bg-slate-950/50 border-t border-slate-800 flex justify-end">
|
<div class="px-6 py-4 bg-slate-950/50 border-t border-slate-800 flex justify-end rounded-b-xl">
|
||||||
<button
|
<button
|
||||||
@click="emit('close')"
|
@click="emit('close')"
|
||||||
class="px-4 py-2 bg-slate-800 hover:bg-slate-700 text-slate-200 text-sm font-medium rounded-lg transition-colors border border-slate-700"
|
class="px-4 py-2 bg-slate-800 hover:bg-slate-700 text-slate-200 text-sm font-medium rounded-lg transition-colors border border-slate-700"
|
||||||
|
|||||||
Reference in New Issue
Block a user