9
9
type TooltipProps ,
10
10
} from ' naive-ui' ;
11
11
12
- import { type Component , h , type PropType , ref } from ' vue' ;
12
+ import { type Component , computed , h , type PropType , ref , toRefs } from ' vue' ;
13
13
14
14
import type {
15
15
EpisodeProgress ,
@@ -21,7 +21,7 @@ import type {
21
21
import ProgressTooltip from ' ~/components/common/tooltip/ProgressTooltip.vue' ;
22
22
import { useI18n } from ' ~/utils' ;
23
23
24
- defineProps ({
24
+ const props = defineProps ({
25
25
select: {
26
26
type: Object as PropType <PopselectProps >,
27
27
required: true ,
@@ -58,6 +58,13 @@ defineProps({
58
58
},
59
59
});
60
60
61
+ const { percentage } = toRefs (props );
62
+
63
+ const progressBackground = computed (() => {
64
+ if (percentage ?.value === undefined ) return false ;
65
+ return percentage .value > 0 && percentage .value < 100 ;
66
+ });
67
+
61
68
const renderLabel = (option : SelectOption & { icon: Component }) => [
62
69
h (NIcon , {
63
70
style: {
@@ -72,6 +79,7 @@ const renderLabel = (option: SelectOption & { icon: Component }) => [
72
79
const i18n = useI18n (' panel' , ' buttons' );
73
80
74
81
const root = ref ();
82
+ const trigger = ref ();
75
83
</script >
76
84
77
85
<template >
@@ -80,7 +88,7 @@ const root = ref();
80
88
class =" button-progress-container"
81
89
:data-progress =" percentage"
82
90
:style =" {
83
- '--progress': `${ percentage }%`,
91
+ '--progress': `${percentage}%`,
84
92
'--progress-color': `var(--${type}-color-dark)`,
85
93
}"
86
94
>
@@ -95,17 +103,20 @@ const root = ref();
95
103
>
96
104
<NPopselect
97
105
:style =" {
98
- '--custom-bg-color': `var(--bg-color-${ type }-80)`,
106
+ '--custom-bg-color': `var(--bg-color-${type}-80)`,
99
107
'--custom-bg-color-hover': `var(--bg-color-${type})`,
100
108
}"
101
109
:to =" root"
102
110
:render-label =" renderLabel"
103
111
trigger =" focus"
104
112
:disabled =" disabled"
105
113
v-bind =" select"
114
+ :on-update:show =" _show => !_show && trigger?.$el?.blur()"
106
115
>
107
116
<NButton
108
- :class =" { filled, progress }"
117
+ ref =" trigger"
118
+ class =" button"
119
+ :class =" { filled, progress: progressBackground }"
109
120
round
110
121
:secondary =" !filled"
111
122
:disabled =" disabled"
@@ -127,24 +138,30 @@ const root = ref();
127
138
margin-left : calc (0% - var (--n-icon-margin ));
128
139
}
129
140
130
- .progress :not (.filled ) {
131
- background : linear-gradient (
132
- to right ,
133
- var (--progress-color ) 0% ,
134
- var (--progress-color ) var (--progress , 0% ),
135
- var (--n-color ) var (--progress , 0% ),
136
- var (--n-color ) 100%
137
- );
141
+ .button {
142
+ background : linear-gradient (to right , var (--n-color ) 0% , var (--n-color ) 100% );
138
143
transition :
139
144
color 0.3s var (--n-bezier ),
145
+ background 0.3s var (--n-bezier ),
140
146
background-color 0.3s var (--n-bezier ),
141
147
opacity 0.3s var (--n-bezier ),
142
148
border-color 0.3s var (--n-bezier ),
143
149
filter 0.3s var (--n-bezier );
150
+ will-change : color , background , background-color , opacity , border-color , filter ;
144
151
145
152
& :hover {
146
153
filter : brightness (1.2 );
147
154
}
148
155
}
156
+
157
+ .progress :not (.filled ) {
158
+ background : linear-gradient (
159
+ to right ,
160
+ var (--progress-color ) 0% ,
161
+ var (--progress-color ) var (--progress , 0% ),
162
+ var (--n-color ) var (--progress , 0% ),
163
+ var (--n-color ) 100%
164
+ );
165
+ }
149
166
}
150
167
</style >
0 commit comments