Rename and organize widget components to conform to design terminology (#132)

This commit is contained in:
Keavon Chambers
2021-05-21 13:10:32 -07:00
committed by GitHub
parent c8eea1e4b1
commit c97cb9905c
17 changed files with 251 additions and 220 deletions
@@ -0,0 +1,67 @@
<template>
<button class="icon-button" :class="[`size-${String(size)}`, gapAfter && 'gap-after']">
<slot></slot>
</button>
</template>
<style lang="scss">
.icon-button {
display: inline-block;
flex: 0 0 auto;
padding: 0;
outline: none;
border: none;
border-radius: 2px;
background: none;
vertical-align: top;
fill: #ddd;
width: 16px;
height: 16px;
// The `where` pseduo-class does not contribtue to specificity
& + :where(.icon-button) {
margin-left: 0;
}
&.gap-after + .icon-button {
margin-left: 8px;
}
&:hover {
background: #666;
color: white;
fill: white;
}
&.size-10 {
width: 10px;
height: 10px;
}
&.size-12 {
width: 12px;
height: 12px;
}
&.size-16 {
width: 16px;
height: 16px;
}
&.size-24 {
width: 24px;
height: 24px;
}
}
</style>
<script lang="ts">
import { defineComponent } from "vue";
export default defineComponent({
props: {
size: { type: Number, required: true },
gapAfter: { type: Boolean, default: false },
},
});
</script>
@@ -0,0 +1,75 @@
<template>
<div class="popover-button">
<button @click="clickButton">
<component :is="icon" />
</button>
<Popover :direction="PopoverDirection.Bottom" ref="popover">
<slot></slot>
</Popover>
</div>
</template>
<style lang="scss">
.popover-button {
display: inline-block;
position: relative;
width: 16px;
height: 24px;
margin: 2px 4px;
.popover {
left: 50%;
}
button {
width: 100%;
height: 100%;
padding: 0;
outline: none;
border: none;
border-radius: 2px;
vertical-align: top;
background: #111;
fill: #ddd;
&:hover {
background: #666;
fill: #fff;
}
}
}
</style>
<script lang="ts">
import { defineComponent } from "vue";
import DropdownArrow from "../../../../assets/svg/16x24-bounds-8x16-icon/dropdown-arrow.svg";
import VerticalEllipsis from "../../../../assets/svg/16x24-bounds-8x16-icon/vertical-ellipsis.svg";
import Popover, { PopoverDirection } from "../overlays/Popover.vue";
export enum PopoverButtonIcon {
"DropdownArrow" = "DropdownArrow",
"VerticalEllipsis" = "VerticalEllipsis",
}
export default defineComponent({
components: {
VerticalEllipsis,
DropdownArrow,
Popover,
PopoverDirection,
},
props: {
icon: { type: String, default: PopoverButtonIcon.DropdownArrow },
},
methods: {
clickButton() {
(this.$refs.popover as typeof Popover).setOpen();
},
},
data() {
return {
PopoverDirection,
};
},
});
</script>