iceshrimp-legacy/packages/client/src/components/MkEmojiPickerDialog.vue

86 lines
1.7 KiB
Vue
Raw Normal View History

<template>
2023-04-08 02:01:42 +02:00
<MkModal
ref="modal"
v-slot="{ type, maxHeight }"
:z-priority="'middle'"
:prefer-type="
asReactionPicker &&
defaultStore.state.reactionPickerUseDrawerForMobile === false
? 'popup'
: 'auto'
"
:transparent-bg="true"
:manual-showing="manualShowing"
:src="src"
@click="modal?.close()"
@opening="opening"
@close="emit('close')"
@closed="emit('closed')"
>
<MkEmojiPicker
ref="picker"
class="ryghynhb _popup _shadow"
:class="{ drawer: type === 'drawer' }"
:show-pinned="showPinned"
:as-reaction-picker="asReactionPicker"
:as-drawer="type === 'drawer'"
:max-height="maxHeight"
@chosen="chosen"
/>
</MkModal>
</template>
<script lang="ts" setup>
2023-04-08 02:01:42 +02:00
import { ref } from "vue";
import MkModal from "@/components/MkModal.vue";
import MkEmojiPicker from "@/components/MkEmojiPicker.vue";
import { defaultStore } from "@/store";
2023-04-08 02:01:42 +02:00
withDefaults(
defineProps<{
manualShowing?: boolean | null;
src?: HTMLElement;
showPinned?: boolean;
asReactionPicker?: boolean;
}>(),
{
manualShowing: null,
showPinned: true,
asReactionPicker: false,
2023-07-06 03:28:27 +02:00
},
2023-04-08 02:01:42 +02:00
);
const emit = defineEmits<{
2023-04-08 02:01:42 +02:00
(ev: "done", v: any): void;
(ev: "close"): void;
(ev: "closed"): void;
}>();
const modal = ref<InstanceType<typeof MkModal>>();
const picker = ref<InstanceType<typeof MkEmojiPicker>>();
function chosen(emoji: any) {
2023-04-08 02:01:42 +02:00
emit("done", emoji);
modal.value?.close();
}
function opening() {
try {
picker.value?.reset();
2023-07-02 05:46:33 +02:00
} catch (e) {
console.error(`Something's wrong with restting the emoji picker: ${e}`);
}
picker.value?.focus();
}
</script>
<style lang="scss" scoped>
2021-08-09 11:01:12 +02:00
.ryghynhb {
&.drawer {
border-radius: 24px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
}
</style>