11<template >
22 <div class =" vac-emoji-wrapper" >
3- <emoji-picker :search =" search" @emoji =" append" >
4- <template #emoji-invoker =" { events: { click: clickEvent } } " >
3+ <div
4+ class =" vac-svg-button"
5+ :class =" { 'vac-emoji-reaction': emojiReaction }"
6+ @click =" openEmoji"
7+ >
8+ <slot name =" emoji-picker-icon" >
9+ <svg-icon name =" emoji" :param =" emojiReaction ? 'reaction' : ''" />
10+ </slot >
11+ </div >
12+
13+ <template v-if =" emojiOpened " >
14+ <transition name =" vac-slide-up" appear >
515 <div
6- class =" vac-svg-button"
7- :class =" { 'vac-emoji-reaction': emojiReaction }"
8- @click.stop =" clickEvent"
9- @click =" openEmoji"
16+ class =" vac-emoji-picker"
17+ :class =" { 'vac-picker-reaction': emojiReaction }"
18+ :style =" {
19+ height: `${emojiPickerHeight}px`,
20+ top: positionTop ? emojiPickerHeight : `${emojiPickerTop}px`,
21+ right: emojiPickerRight,
22+ display: emojiPickerTop || !emojiReaction ? 'initial' : 'none'
23+ }"
1024 >
11- <slot name =" emoji-picker-icon" >
12- <svg-icon name =" emoji" :param =" emojiReaction ? 'reaction' : ''" />
13- </slot >
25+ <emoji-picker v-if =" emojiOpened" ref =" emojiPicker" />
1426 </div >
15- </template >
16- <template v-if =" emojiOpened " #emoji-picker =" { emojis , insert } " >
17- <transition name =" vac-slide-up" appear >
18- <div
19- class =" vac-emoji-picker"
20- :class =" { 'vac-picker-reaction': emojiReaction }"
21- :style =" {
22- height: `${emojiPickerHeight}px`,
23- top: positionTop ? emojiPickerHeight : `${emojiPickerTop}px`,
24- right: emojiPickerRight,
25- display: emojiPickerTop || !emojiReaction ? 'initial' : 'none'
26- }"
27- >
28- <div class =" vac-emoji-picker__search" >
29- <input v-model =" search" type =" text" />
30- </div >
31- <div >
32- <div v-for =" (emojiGroup, category) in emojis" :key =" category" >
33- <h5 v-if =" category !== 'Frequently used'" >
34- {{ category }}
35- </h5 >
36- <div v-if =" category !== 'Frequently used'" class =" vac-emojis" >
37- <span
38- v-for =" (emoji, emojiName) in emojiGroup"
39- :key =" emojiName"
40- :title =" emojiName"
41- @click =" insert({ emoji, emojiName })"
42- >
43- {{ emoji }}
44- </span >
45- </div >
46- </div >
47- </div >
48- </div >
49- </transition >
50- </template >
51- </emoji-picker >
27+ </transition >
28+ </template >
5229 </div >
5330</template >
5431
5532<script >
56- import EmojiPicker from ' vue- emoji-picker'
33+ import { EmojiPicker } from ' emoji-picker-element '
5734
5835import SvgIcon from ' ../SvgIcon/SvgIcon'
5936
@@ -75,19 +52,63 @@ export default {
7552
7653 data () {
7754 return {
78- search: ' ' ,
7955 emojiPickerHeight: 320 ,
8056 emojiPickerTop: 0 ,
8157 emojiPickerRight: ' '
8258 }
8359 },
8460
61+ watch: {
62+ emojiOpened (val ) {
63+ if (val) {
64+ setTimeout (() => {
65+ this .addCustomStyling ()
66+
67+ document
68+ .querySelector (' emoji-picker' )
69+ .addEventListener (' emoji-click' , ({ detail }) => {
70+ this .$emit (' add-emoji' , {
71+ icon: detail .unicode ,
72+ name: detail .annotation
73+ })
74+ })
75+ }, 0 )
76+ }
77+ }
78+ },
79+
8580 methods: {
86- append ({ emoji, emojiName }) {
87- this .$emit (' add-emoji' , { icon: emoji, name: emojiName })
81+ addCustomStyling () {
82+ const picker = ` .picker {
83+ border: none;
84+ }`
85+
86+ const nav = ` .nav {
87+ overflow-x: auto;
88+ }`
89+
90+ const searchBox = ` .search-wrapper {
91+ padding-right: 2px;
92+ padding-left: 2px;
93+ }`
94+
95+ const search = ` input.search {
96+ height: 32px;
97+ font-size: 14px;
98+ border-radius: 10rem;
99+ border: var(--chat-border-style);
100+ padding: 5px 10px;
101+ outline: none;
102+ background: var(--chat-bg-color-input);
103+ color: var(--chat-color);
104+ }`
105+
106+ const style = document .createElement (' style' )
107+ style .textContent = picker + nav + searchBox + search
108+ this .$refs .emojiPicker .shadowRoot .appendChild (style)
88109 },
89110 openEmoji (ev ) {
90- this .$emit (' open-emoji' , true )
111+ this .$emit (' open-emoji' , ! this . emojiOpened )
91112 this .setEmojiPickerPosition (
92113 ev .clientY ,
93114 ev .view .innerWidth ,
@@ -99,12 +120,12 @@ export default {
99120 const mobileSize = innerWidth < 500 || innerHeight < 700
100121
101122 if (! this .roomFooterRef ) {
102- if (mobileSize) this .emojiPickerRight = ' 0px '
123+ if (mobileSize) this .emojiPickerRight = ' -50px '
103124 return
104125 }
105126
106127 if (mobileSize) {
107- this .emojiPickerRight = innerWidth / 2 - 120 + ' px'
128+ this .emojiPickerRight = innerWidth / 2 - 150 + ' px'
108129 this .emojiPickerTop = 100
109130 this .emojiPickerHeight = innerHeight - 200
110131 } else {
0 commit comments