2022-11-23 06:48:01 +03:00
|
|
|
|
<script setup lang="ts">
|
2023-01-08 09:21:09 +03:00
|
|
|
|
import type { mastodon } from 'masto'
|
2023-01-07 11:55:01 +03:00
|
|
|
|
import type { ConfirmDialogChoice } from '~/types'
|
2022-11-27 04:52:46 +03:00
|
|
|
|
import {
|
2022-12-10 00:18:21 +03:00
|
|
|
|
isCommandPanelOpen,
|
2023-01-07 11:55:01 +03:00
|
|
|
|
isConfirmDialogOpen,
|
2022-11-27 04:52:46 +03:00
|
|
|
|
isEditHistoryDialogOpen,
|
2023-02-05 15:10:19 +03:00
|
|
|
|
isErrorDialogOpen,
|
2023-01-08 23:08:45 +03:00
|
|
|
|
isFavouritedBoostedByDialogOpen,
|
2023-03-07 22:32:21 +03:00
|
|
|
|
isKeyboardShortcutsDialogOpen,
|
2022-11-30 06:27:19 +03:00
|
|
|
|
isMediaPreviewOpen,
|
2022-11-27 04:52:46 +03:00
|
|
|
|
isPreviewHelpOpen,
|
|
|
|
|
isPublishDialogOpen,
|
|
|
|
|
isSigninDialogOpen,
|
|
|
|
|
} from '~/composables/dialog'
|
2022-12-10 00:18:21 +03:00
|
|
|
|
|
|
|
|
|
const isMac = useIsMac()
|
|
|
|
|
|
|
|
|
|
// TODO: temporary, await for keybind system
|
2022-12-13 21:29:42 +03:00
|
|
|
|
// open search panel
|
|
|
|
|
// listen to ctrl+k on windows/linux or cmd+k on mac
|
|
|
|
|
// open command panel
|
2022-12-10 00:18:21 +03:00
|
|
|
|
// listen to ctrl+/ on windows/linux or cmd+/ on mac
|
2022-12-13 21:29:42 +03:00
|
|
|
|
// or shift+ctrl+k on windows/linux or shift+cmd+k on mac
|
2022-12-10 00:18:21 +03:00
|
|
|
|
useEventListener('keydown', (e: KeyboardEvent) => {
|
2023-01-08 22:35:48 +03:00
|
|
|
|
if ((e.key === 'k' || e.key === 'л') && (isMac.value ? e.metaKey : e.ctrlKey)) {
|
2022-12-13 21:29:42 +03:00
|
|
|
|
e.preventDefault()
|
|
|
|
|
openCommandPanel(e.shiftKey)
|
|
|
|
|
}
|
2023-01-08 22:35:48 +03:00
|
|
|
|
if ((e.key === '/' || e.key === ',') && (isMac.value ? e.metaKey : e.ctrlKey)) {
|
2022-12-10 00:18:21 +03:00
|
|
|
|
e.preventDefault()
|
|
|
|
|
openCommandPanel(true)
|
|
|
|
|
}
|
|
|
|
|
})
|
2023-01-01 18:57:49 +03:00
|
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
|
const handlePublished = (status: mastodon.v1.Status) => {
|
2023-01-01 18:57:49 +03:00
|
|
|
|
lastPublishDialogStatus.value = status
|
|
|
|
|
isPublishDialogOpen.value = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handlePublishClose = () => {
|
|
|
|
|
lastPublishDialogStatus.value = null
|
|
|
|
|
}
|
2023-01-07 11:55:01 +03:00
|
|
|
|
|
|
|
|
|
const handleConfirmChoice = (choice: ConfirmDialogChoice) => {
|
|
|
|
|
confirmDialogChoice.value = choice
|
|
|
|
|
isConfirmDialogOpen.value = false
|
|
|
|
|
}
|
2023-01-08 23:08:45 +03:00
|
|
|
|
|
|
|
|
|
const handleFavouritedBoostedByClose = () => {
|
|
|
|
|
isFavouritedBoostedByDialogOpen.value = false
|
|
|
|
|
}
|
2022-11-23 06:48:01 +03:00
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
2023-01-15 11:38:02 +03:00
|
|
|
|
<template v-if="isHydrated">
|
2022-12-17 19:55:29 +03:00
|
|
|
|
<ModalDialog v-model="isSigninDialogOpen" py-4 px-8 max-w-125>
|
|
|
|
|
<UserSignIn />
|
|
|
|
|
</ModalDialog>
|
2023-01-03 14:15:33 +03:00
|
|
|
|
<ModalDialog v-model="isPreviewHelpOpen" keep-alive max-w-125>
|
2022-12-17 19:55:29 +03:00
|
|
|
|
<HelpPreview @close="closePreviewHelp()" />
|
|
|
|
|
</ModalDialog>
|
2023-01-01 18:57:49 +03:00
|
|
|
|
<ModalDialog
|
|
|
|
|
v-model="isPublishDialogOpen"
|
|
|
|
|
max-w-180 flex
|
|
|
|
|
@close="handlePublishClose"
|
|
|
|
|
>
|
2022-12-17 19:55:29 +03:00
|
|
|
|
<!-- This `w-0` style is used to avoid overflow problems in flex layouts,so don't remove it unless you know what you're doing -->
|
2023-01-01 18:57:49 +03:00
|
|
|
|
<PublishWidget
|
2023-01-05 19:48:20 +03:00
|
|
|
|
v-if="dialogDraftKey"
|
2023-01-01 18:57:49 +03:00
|
|
|
|
:draft-key="dialogDraftKey" expanded flex-1 w-0
|
|
|
|
|
@published="handlePublished"
|
|
|
|
|
/>
|
2022-12-17 19:55:29 +03:00
|
|
|
|
</ModalDialog>
|
|
|
|
|
<ModalDialog
|
2023-01-10 22:57:12 +03:00
|
|
|
|
:model-value="isMediaPreviewOpen"
|
2022-12-17 19:55:29 +03:00
|
|
|
|
w-full max-w-full h-full max-h-full
|
|
|
|
|
bg-transparent border-0 shadow-none
|
2023-01-10 22:57:12 +03:00
|
|
|
|
@update:model-value="closeMediaPreview"
|
2022-12-17 19:55:29 +03:00
|
|
|
|
>
|
|
|
|
|
<ModalMediaPreview v-if="isMediaPreviewOpen" @close="closeMediaPreview()" />
|
|
|
|
|
</ModalDialog>
|
|
|
|
|
<ModalDialog v-model="isEditHistoryDialogOpen" max-w-125>
|
2023-01-05 19:48:20 +03:00
|
|
|
|
<StatusEditPreview v-if="statusEdit" :edit="statusEdit" />
|
2022-12-17 19:55:29 +03:00
|
|
|
|
</ModalDialog>
|
|
|
|
|
<ModalDialog v-model="isCommandPanelOpen" max-w-fit flex>
|
|
|
|
|
<CommandPanel @close="closeCommandPanel()" />
|
|
|
|
|
</ModalDialog>
|
2023-01-07 11:55:01 +03:00
|
|
|
|
<ModalDialog v-model="isConfirmDialogOpen" py-4 px-8 max-w-125>
|
|
|
|
|
<ModalConfirm v-if="confirmDialogLabel" v-bind="confirmDialogLabel" @choice="handleConfirmChoice" />
|
|
|
|
|
</ModalDialog>
|
2023-02-05 15:10:19 +03:00
|
|
|
|
<ModalDialog v-model="isErrorDialogOpen" py-4 px-8 max-w-125>
|
|
|
|
|
<ModalError v-if="errorDialogData" v-bind="errorDialogData" />
|
|
|
|
|
</ModalDialog>
|
2023-01-08 23:08:45 +03:00
|
|
|
|
<ModalDialog
|
|
|
|
|
v-model="isFavouritedBoostedByDialogOpen"
|
|
|
|
|
max-w-180
|
|
|
|
|
@close="handleFavouritedBoostedByClose"
|
|
|
|
|
>
|
|
|
|
|
<StatusFavouritedBoostedBy />
|
|
|
|
|
</ModalDialog>
|
2023-03-07 22:32:21 +03:00
|
|
|
|
<ModalDialog v-model="isKeyboardShortcutsDialogOpen" max-w-full sm:max-w-140 md:max-w-170 lg:max-w-220 md:min-w-160>
|
|
|
|
|
<MagickeysKeyboardShortcuts @close="closeKeyboardShortcuts()" />
|
|
|
|
|
</ModalDialog>
|
2022-12-17 19:55:29 +03:00
|
|
|
|
</template>
|
2022-11-23 06:48:01 +03:00
|
|
|
|
</template>
|