forked from kaverti/website
153 lines
4.1 KiB
Vue
153 lines
4.1 KiB
Vue
<template>
|
|
<div class='emoji_selector'>
|
|
<div
|
|
class='emoji_selector__overlay'
|
|
:class='{ "emoji_selector__overlay--show" : value }'
|
|
@click='$emit("input", false)'
|
|
></div>
|
|
|
|
<div class='emoji_selector__context'>
|
|
<div
|
|
class='emoji_selector__tooltip'
|
|
:class='{
|
|
"emoji_selector__tooltip--show" : value,
|
|
"emoji_selector__tooltip--right" : rightAlign
|
|
}'
|
|
>
|
|
<div v-for='(row, $index) in emojis' :key="'emoji-row-' + $index">
|
|
<div class='emoji_selector__title'>
|
|
{{row.title}}
|
|
</div>
|
|
<div class='emoji_selector__row' ref='emoji_row'>
|
|
<span
|
|
class='emoji_selector__emoji'
|
|
v-for='emoji in row.emojis'
|
|
:key='emoji'
|
|
@click='emitEmoji(emoji)'
|
|
>{{emoji}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
name: 'EmojiSelector',
|
|
props: ['value', 'right-align'],
|
|
data () {
|
|
return {
|
|
stickyIndex: 0,
|
|
emojis: [
|
|
{ title: 'smileys', emojis: [
|
|
'😀' , '😃' , '😄' , '😁' , '😆' , '😅' , '😂' , '🤣' , '😊' , '😇' , '🙂' , '🙃' , '😉' , '😌' , '😍' , '😘' , '😗' , '😙' , '😚' , '😋' , '😜' , '😝' , '😛' , '🤑' , '🤗' , '🤓' , '😎' , '🤡' , '🤠' , '😏' , '😒' , '😞' , '😔' , '😟' , '😕' , '🙁' , '😣' , '😖' , '😫' , '😩' , '😤' , '😠' , '😡' , '😶' , '😐' , '😑' , '😯' , '😦' , '😧' , '😮' , '😲' , '😵' , '😳' , '😱' , '😨' , '😰' , '😢' , '😥' , '🤤' , '😭' , '😓' , '😪' , '😴' , '🙄' , '🤔' , '🤥' , '😬' , '🤐'
|
|
]},
|
|
{ title: 'people', emojis: [
|
|
'👶' , '👦' , '👧' , '👨' , '👩' , '👱♀️' , '👱' , '👴' , '👵' , '👲' , '👳♀️' , '👳' , '👮♀️' , '👮', '💁', '💁♂️', '🙅', '🙅♂️', '🙆', '🙆♂️', '🙋', '🙋♂️', '💃', '🕺', '👯', '👯♂️', '🚶♀️', '🚶', '🏃♀️'
|
|
]},
|
|
{ title: 'animals', emojis: [
|
|
'🐶' , '🐱' , '🐭' , '🐹' , '🐰' , '🦊' , '🐻' , '🐼' , '🐨' , '🐯' , '🦁' , '🐮' , '🐷' , '🐽' , '🐸' , '🐵' , '🙊' , '🙉', '🐒' , '🐔' , '🐧' , '🐦' , '🐤' , '🐣' , '🐥' , '🦆' , '🦅' , '🦉' , '🦇' , '🐺' , '🐗' , '🐴' , '🦄' , '🐝' , '🐛' , '🦋' , '🐌' , '🐞' , '🐜' , '🕷' , '🐢' , '🐍'
|
|
]},
|
|
]
|
|
}
|
|
},
|
|
methods: {
|
|
emitEmoji (emoji) {
|
|
this.$emit('input', false)
|
|
this.$emit('emoji', emoji)
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang='scss' scoped>
|
|
@import '../assets/scss/variables.scss';
|
|
|
|
.emoji_selector {
|
|
display: inline-block;
|
|
position: absolute;
|
|
|
|
@at-root #{&}__context {
|
|
transform: translateZ(0);
|
|
position: relative;
|
|
z-index: 4;
|
|
}
|
|
|
|
@at-root #{&}__overlay {
|
|
pointer-events: none;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 3;
|
|
|
|
@at-root #{&}--show {
|
|
pointer-events: all;
|
|
}
|
|
}
|
|
|
|
@at-root #{&}__tooltip {
|
|
pointer-events: none;
|
|
opacity: 0;
|
|
bottom: calc(100% + 3rem);
|
|
transition: all 0.2s;
|
|
|
|
position: absolute;
|
|
width: 14rem;
|
|
height: 7rem;
|
|
border-radius: 0.25rem;
|
|
border: 0.125rem solid $color__gray--primary;
|
|
background-color: #fff;
|
|
|
|
left: 0.25rem;
|
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.22);
|
|
cursor: default;
|
|
overflow-y: auto;
|
|
padding: 0 0.375rem;
|
|
z-index: 4;
|
|
|
|
@at-root #{&}--show {
|
|
pointer-events: all;
|
|
opacity: 1;
|
|
bottom: calc(100% + 2rem);
|
|
}
|
|
@at-root #{&}--right {
|
|
left: 22.5rem;
|
|
}
|
|
}
|
|
@at-root #{&}__row {
|
|
display: block;
|
|
text-align: left;
|
|
line-height: 1.6rem;
|
|
}
|
|
@at-root #{&}__title {
|
|
font-weight: bold;
|
|
font-variant: small-caps;
|
|
font-size: 0.9rem;
|
|
text-align: left;
|
|
color: $color__text--primary;
|
|
padding-left: 0.375rem;
|
|
}
|
|
@at-root #{&}__emoji {
|
|
padding: 0.25rem;
|
|
border-radius: 0.25rem;
|
|
transition: all 0.2s;
|
|
|
|
&:hover {
|
|
background-color: $color__gray--primary;
|
|
}
|
|
&:active {
|
|
background-color: $color__gray--darker;
|
|
}
|
|
}
|
|
}
|
|
|
|
@media (max-width: 420px) {
|
|
.emoji_selector {
|
|
display: none;
|
|
}
|
|
}
|
|
</style>
|