0144408500
* wip * Update maps.ts * wip * wip * wip * wip * Update base.vue * wip * wip * wip * wip * Update link.vue * wip * wip * wip * wip * wip * wip * wip * wip * wip * Update privacy.vue * wip * wip * wip * wip * Update range.vue * wip * wip * wip * wip * Update profile.vue * wip * Update a.vue * Update index.vue * wip * Update sidebar.vue * wip * wip * Update account-info.vue * Update a.vue * wip * wip * Update sounds.vue * wip * wip * wip * wip * wip * wip * wip * wip * Update account-info.vue * Update account-info.vue * wip * wip * wip * Update d-persimmon.json5 * wip
148 lines
2.4 KiB
Vue
148 lines
2.4 KiB
Vue
<template>
|
|
<div class="yrtfrpux _formItem" :class="{ disabled, inline }">
|
|
<div class="_formLabel"><slot name="label"></slot></div>
|
|
<div class="icon" ref="icon"><slot name="icon"></slot></div>
|
|
<div class="input _formPanel _formClickable" @click="focus">
|
|
<div class="prefix" ref="prefix"><slot name="prefix"></slot></div>
|
|
<select ref="input"
|
|
v-model="v"
|
|
:required="required"
|
|
:disabled="disabled"
|
|
@focus="focused = true"
|
|
@blur="focused = false"
|
|
>
|
|
<slot></slot>
|
|
</select>
|
|
<div class="suffix">
|
|
<Fa :icon="faChevronDown"/>
|
|
</div>
|
|
</div>
|
|
<div class="_formCaption"><slot name="caption"></slot></div>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { defineComponent } from 'vue';
|
|
import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
|
|
import './form.scss';
|
|
|
|
export default defineComponent({
|
|
props: {
|
|
value: {
|
|
required: false
|
|
},
|
|
required: {
|
|
type: Boolean,
|
|
required: false
|
|
},
|
|
disabled: {
|
|
type: Boolean,
|
|
required: false
|
|
},
|
|
inline: {
|
|
type: Boolean,
|
|
required: false,
|
|
default: false
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
faChevronDown,
|
|
};
|
|
},
|
|
computed: {
|
|
v: {
|
|
get() {
|
|
return this.value;
|
|
},
|
|
set(v) {
|
|
this.$emit('update:value', v);
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
focus() {
|
|
this.$refs.input.focus();
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.yrtfrpux {
|
|
position: relative;
|
|
|
|
> .icon {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 24px;
|
|
text-align: center;
|
|
line-height: 32px;
|
|
|
|
&:not(:empty) + .input {
|
|
margin-left: 28px;
|
|
}
|
|
}
|
|
|
|
> .input {
|
|
display: flex;
|
|
position: relative;
|
|
|
|
> select {
|
|
display: block;
|
|
flex: 1;
|
|
width: 100%;
|
|
padding: 0 16px;
|
|
font: inherit;
|
|
font-weight: normal;
|
|
font-size: 1em;
|
|
height: 52px;
|
|
background: none;
|
|
border: none;
|
|
border-radius: 0;
|
|
outline: none;
|
|
box-shadow: none;
|
|
appearance: none;
|
|
-webkit-appearance: none;
|
|
color: var(--fg);
|
|
|
|
option,
|
|
optgroup {
|
|
color: var(--fg);
|
|
background: var(--bg);
|
|
}
|
|
}
|
|
|
|
> .prefix,
|
|
> .suffix {
|
|
display: block;
|
|
align-self: center;
|
|
justify-self: center;
|
|
font-size: 1em;
|
|
line-height: 32px;
|
|
color: var(--inputLabel);
|
|
pointer-events: none;
|
|
|
|
&:empty {
|
|
display: none;
|
|
}
|
|
|
|
> * {
|
|
display: block;
|
|
min-width: 16px;
|
|
}
|
|
}
|
|
|
|
> .prefix {
|
|
padding-right: 4px;
|
|
}
|
|
|
|
> .suffix {
|
|
padding: 0 16px 0 0;
|
|
opacity: 0.7;
|
|
}
|
|
}
|
|
}
|
|
</style>
|