22 <div class =" cl-select" >
33 <span
44 class =" cl-btn"
5- :class =" { disabled: disabled }"
5+ :class =" { disabled: disabled, active: menu }"
66 @click ="
77 () => {
88 if (!disabled) toggleMenu()
99 }
1010 "
1111 ref =" btn"
1212 >
13- {{ selection ?? selectedStr }}
14-
15- <span v-if =" clearable && !isEmpty" class =" cl-btn-clear" @click =" clear" >✕ ; </span >
13+ <span class =" cl-btn-selection" >{{ selection ?? selectedStr }}</span >
14+ <span :class =" { clearable: clearable && !isEmpty }" class =" cl-btn-suffix" @click =" clear" >
15+ <CloseCircleFilled v-if =" clearable && !isEmpty" />
16+ <DownOutlined v-else />
17+ </span >
1618 </span >
1719
1820 <div :style =" floatingStyles" ref =" floating" >
3739</template >
3840
3941<script lang="ts">
42+ import CloseCircleFilled from ' @/icons/CloseOutlined.vue'
43+ import DownOutlined from ' @/icons/DownOutlined.vue'
4044import { autoUpdate , flip , offset , shift , useFloating } from ' @floating-ui/vue'
4145import { selectProps , setupSelect } from ' @vue-js-cron/core'
4246import { defineComponent , ref } from ' vue'
4347
4448export default defineComponent ({
4549 name: ' CustomSelect' ,
50+ components: {
51+ CloseCircleFilled ,
52+ DownOutlined ,
53+ },
4654 props: {
4755 ... selectProps (),
4856 },
@@ -105,6 +113,7 @@ export default defineComponent({
105113 padding : 0.1em 0.5em ;
106114 user-select : none ;
107115 min-height : 1.2em ;
116+ position : relative ;
108117}
109118
110119.cl-btn.disabled {
@@ -113,14 +122,34 @@ export default defineComponent({
113122}
114123
115124.cl-btn :not (.disabled ):hover {
116- /* border: 1px solid #ccc; */
125+ border : var ( --cl-btn-hover-border , 1px solid #ddd );
117126 background-color : var (--cl-hover-bg-color , #d6d6d6 );
118127}
119128
120- .cl-btn-clear {
121- font-size : 1.2em ;
122- margin-left : 3px ;
129+ .cl-btn.active {
130+ border : var (--cl-btn-hover-border , 1px solid #ddd );
131+ background-color : var (--cl-hover-bg-color , #d6d6d6 );
132+ }
133+
134+ .cl-btn-suffix {
135+ margin-left : 0.4em ;
136+ }
137+
138+ .cl-btn-suffix svg {
139+ display : inline-block ;
140+ width : 0.8em ;
141+ height : 0.8em ;
123142 line-height : 1 ;
143+ opacity : 0.6 ;
144+ }
145+
146+ .cl-btn-suffix.clearable svg :hover {
147+ opacity : 0.9 ;
148+ }
149+
150+ .legacy .cl-btn-suffix :not (.clearable ) {
151+ margin-left : 0 ;
152+ display : none ;
124153}
125154
126155.cl-menu {
0 commit comments