Skip to content

Commit 300a9a0

Browse files
committed
feat(select): add rotate transition on dropdown indicator when menu is open
1 parent dda0c89 commit 300a9a0

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

docs/styling.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ For a complete list of CSS variables, we recommend to take a look at the source-
8484
--vs-indicator-icon-size: 20px;
8585
--vs-indicator-icon-color: var(--vs-text-color);
8686
--vs-indicator-icon-cursor: pointer;
87+
--vs-indicator-dropdown-icon-transition: transform 0.2s ease-out;
8788

8889
--vs-spinner-color: var(--vs-text-color);
8990
--vs-spinner-size: 16px;

src/Indicators.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Spinner from "./Spinner.vue";
77
88
defineProps<{
99
hasSelectedOption: boolean;
10+
isMenuOpen: boolean;
1011
isClearable: boolean;
1112
isLoading: boolean;
1213
isDisabled: boolean;
@@ -45,6 +46,7 @@ defineExpose({ containerRef, clearButtonRef, dropdownButtonRef });
4546
ref="dropdownButton"
4647
type="button"
4748
class="dropdown-icon"
49+
:class="{ active: isMenuOpen }"
4850
tabindex="-1"
4951
:disabled="isDisabled"
5052
@click.stop="emit('toggle')"
@@ -60,7 +62,7 @@ defineExpose({ containerRef, clearButtonRef, dropdownButtonRef });
6062
</div>
6163
</template>
6264

63-
<style lang="scss" scoped>
65+
<style lang="css" scoped>
6466
.indicators-container {
6567
display: flex;
6668
align-items: center;
@@ -92,9 +94,14 @@ defineExpose({ containerRef, clearButtonRef, dropdownButtonRef });
9294
border: 0;
9395
width: var(--vs-indicator-icon-size);
9496
height: var(--vs-indicator-icon-size);
95-
color: var(vs-indicator-icon-colo);
97+
color: var(--vs-indicator-icon-color);
9698
background: none;
9799
outline: none;
98100
cursor: var(--vs-indicator-icon-cursor);
101+
transition: var(--vs-indicator-dropdown-icon-transition);
102+
}
103+
104+
.dropdown-icon.active {
105+
transform: rotate(180deg);
99106
}
100107
</style>

src/Select.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ onBeforeUnmount(() => {
416416
<Indicators
417417
ref="indicators"
418418
:has-selected-option="selectedOptions.length > 0"
419+
:is-menu-open="menuOpen"
419420
:is-clearable="isClearable"
420421
:is-loading="isLoading"
421422
:is-disabled="isDisabled"
@@ -566,6 +567,7 @@ onBeforeUnmount(() => {
566567
--vs-indicator-icon-size: 20px;
567568
--vs-indicator-icon-color: var(--vs-text-color);
568569
--vs-indicator-icon-cursor: pointer;
570+
--vs-indicator-dropdown-icon-transition: transform 0.2s ease-out;
569571
570572
--vs-spinner-color: var(--vs-text-color);
571573
--vs-spinner-size: 16px;

0 commit comments

Comments
 (0)