///
import type { ContextMenuItem } from '@slidev/types'
import type { ComputedRef } from 'vue'
import { computed } from 'vue'
import setups from '#slidev/setups/context-menu'
import { useDrawings } from '../composables/useDrawings'
import { useNav } from '../composables/useNav'
import { fullscreen, showEditor, toggleOverview } from '../state'
// @unocss-include
let items: ComputedRef | undefined
export default () => {
if (items)
return items
const {
next,
nextSlide,
prev,
prevSlide,
hasNext,
hasPrev,
currentPage,
total,
isPresenter,
enterPresenter,
exitPresenter,
isEmbedded,
isPresenterAvailable,
} = useNav()
const { drawingEnabled } = useDrawings()
const {
isFullscreen,
toggle: toggleFullscreen,
} = fullscreen
return items = setups.reduce(
(items, fn) => fn(items),
computed(() => [
{
small: true,
icon: 'i-carbon:arrow-left',
label: 'Previous Click',
action: prev,
disabled: !hasPrev.value,
},
{
small: true,
icon: 'i-carbon:arrow-right',
label: 'Next Click',
action: next,
disabled: !hasNext.value,
},
{
small: true,
icon: 'i-carbon:arrow-up',
label: 'Previous Slide',
action: prevSlide,
disabled: currentPage.value <= 1,
},
{
small: true,
icon: 'i-carbon:arrow-down',
label: 'Next Slide',
action: nextSlide,
disabled: currentPage.value >= total.value,
},
'separator',
{
icon: 'i-carbon:text-annotation-toggle', // IconTextNotationToggle,
label: showEditor.value ? 'Hide editor' : 'Show editor',
action: () => (showEditor.value = !showEditor.value),
show: __DEV__,
},
{
icon: 'i-carbon:pen',
label: drawingEnabled.value ? 'Hide drawing toolbar' : 'Show drawing toolbar',
action: () => (drawingEnabled.value = !drawingEnabled.value),
},
{
icon: 'i-carbon:apps',
label: 'Show slide overview',
action: toggleOverview,
},
isPresenter.value && {
icon: 'i-carbon:presentation-file',
label: 'Exit Presenter Mode',
action: exitPresenter,
},
__SLIDEV_FEATURE_PRESENTER__ && isPresenterAvailable.value && {
icon: 'i-carbon:user-speaker',
label: 'Enter Presenter Mode',
action: enterPresenter,
},
!isEmbedded.value && {
icon: isFullscreen.value ? 'i-carbon:minimize' : 'i-carbon:maximize',
label: isFullscreen.value ? 'Close fullscreen' : 'Enter fullscreen',
action: toggleFullscreen,
},
].filter(Boolean) as ContextMenuItem[]),
)
}