mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-30 11:47:55 +01:00
chore(docs): add ContextMenu component page (#128)
This commit is contained in:
committed by
GitHub
parent
7970aefcb0
commit
63e27f8b4b
@@ -84,7 +84,7 @@ const sections = [
|
|||||||
{ label: 'Forms', links: [{ label: 'Checkbox', to: '/components/Checkbox' }, { label: 'Input', to: '/components/Input' }, { label: 'FormGroup', to: '/components/FormGroup' }, { label: 'Radio', to: '/components/Radio' }, { label: 'Select', to: '/components/Select' }, { label: 'SelectCustom', to: '/components/SelectCustom' }, { label: 'Textarea', to: '/components/Textarea' }, { label: 'Toggle', to: '/components/Toggle' }] },
|
{ label: 'Forms', links: [{ label: 'Checkbox', to: '/components/Checkbox' }, { label: 'Input', to: '/components/Input' }, { label: 'FormGroup', to: '/components/FormGroup' }, { label: 'Radio', to: '/components/Radio' }, { label: 'Select', to: '/components/Select' }, { label: 'SelectCustom', to: '/components/SelectCustom' }, { label: 'Textarea', to: '/components/Textarea' }, { label: 'Toggle', to: '/components/Toggle' }] },
|
||||||
{ label: 'Layout', links: [{ label: 'Card', to: '/components/Card' }, { label: 'Container', to: '/components/Container' }] },
|
{ label: 'Layout', links: [{ label: 'Card', to: '/components/Card' }, { label: 'Container', to: '/components/Container' }] },
|
||||||
{ label: 'Navigation', links: [{ label: 'Pills', to: '/components/Pills' }, { label: 'Tabs', to: '/components/Tabs' }, { label: 'VerticalNavigation', to: '/components/VerticalNavigation' }, { label: 'CommandPalette', to: '/components/CommandPalette' }] },
|
{ label: 'Navigation', links: [{ label: 'Pills', to: '/components/Pills' }, { label: 'Tabs', to: '/components/Tabs' }, { label: 'VerticalNavigation', to: '/components/VerticalNavigation' }, { label: 'CommandPalette', to: '/components/CommandPalette' }] },
|
||||||
{ label: 'Overlays', links: [{ label: 'Modal', to: '/components/Modal' }, { label: 'Notification', to: '/components/Notification' }, { label: 'Popover', to: '/components/Popover' }, { label: 'Slideover', to: '/components/Slideover' }, { label: 'Tooltip', to: '/components/Tooltip' }] }
|
{ label: 'Overlays', links: [{ label: 'ContextMenu', to: '/components/ContextMenu' }, { label: 'Modal', to: '/components/Modal' }, { label: 'Notification', to: '/components/Notification' }, { label: 'Popover', to: '/components/Popover' }, { label: 'Slideover', to: '/components/Slideover' }, { label: 'Tooltip', to: '/components/Tooltip' }] }
|
||||||
]
|
]
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,13 @@ import nuxtUI from '../src/module'
|
|||||||
|
|
||||||
// https://v3.nuxtjs.org/docs/directory-structure/nuxt.config
|
// https://v3.nuxtjs.org/docs/directory-structure/nuxt.config
|
||||||
export default defineNuxtConfig({
|
export default defineNuxtConfig({
|
||||||
|
app: {
|
||||||
|
head: {
|
||||||
|
htmlAttrs: {
|
||||||
|
lang: 'en'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
modules: [
|
modules: [
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
nuxtUI
|
nuxtUI
|
||||||
|
|||||||
@@ -56,7 +56,6 @@
|
|||||||
v-if="prop.type === 'Boolean'"
|
v-if="prop.type === 'Boolean'"
|
||||||
v-model="prop.value"
|
v-model="prop.value"
|
||||||
:name="prop.key"
|
:name="prop.key"
|
||||||
:label="prop.key"
|
|
||||||
/>
|
/>
|
||||||
<USelect
|
<USelect
|
||||||
v-else-if="prop.values"
|
v-else-if="prop.values"
|
||||||
@@ -121,6 +120,31 @@ const toggle = ref(false)
|
|||||||
const modal = ref(false)
|
const modal = ref(false)
|
||||||
const slideover = ref(false)
|
const slideover = ref(false)
|
||||||
|
|
||||||
|
const x = ref(0)
|
||||||
|
const y = ref(0)
|
||||||
|
const isContextMenuOpen = ref(false)
|
||||||
|
const virtualElement = ref({ getBoundingClientRect: () => ({}) })
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
document.addEventListener('mousemove', ({ clientX, clientY }) => {
|
||||||
|
x.value = clientX
|
||||||
|
y.value = clientY
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
function openContextMenu () {
|
||||||
|
const top = unref(y)
|
||||||
|
const left = unref(x)
|
||||||
|
|
||||||
|
virtualElement.value.getBoundingClientRect = () => ({
|
||||||
|
width: 0,
|
||||||
|
height: 0,
|
||||||
|
top,
|
||||||
|
left
|
||||||
|
})
|
||||||
|
isContextMenuOpen.value = true
|
||||||
|
}
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
Button: {
|
Button: {
|
||||||
label: 'Button text'
|
label: 'Button text'
|
||||||
@@ -261,6 +285,31 @@ const defaultProps = {
|
|||||||
title: 'Notification title',
|
title: 'Notification title',
|
||||||
callback: 'console.log(\'Timer expired\')'
|
callback: 'console.log(\'Timer expired\')'
|
||||||
},
|
},
|
||||||
|
ContextMenu: {
|
||||||
|
modelValue: isContextMenuOpen,
|
||||||
|
'onUpdate:modelValue': (v) => { isContextMenuOpen.value = v },
|
||||||
|
virtualElement,
|
||||||
|
component: {
|
||||||
|
name: 'Card',
|
||||||
|
props: {
|
||||||
|
variant: 'secondary',
|
||||||
|
label: 'Open context menu',
|
||||||
|
onClick: () => { isContextMenuOpen.value = false },
|
||||||
|
onContextmenu: (e) => {
|
||||||
|
e?.preventDefault()
|
||||||
|
openContextMenu()
|
||||||
|
},
|
||||||
|
class: 'relative w-[300px] h-[100px]'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slots: {
|
||||||
|
default: {
|
||||||
|
tag: 'div',
|
||||||
|
html: 'Context menu content',
|
||||||
|
class: 'rounded border u-border-gray-200 p-2'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
Modal: {
|
Modal: {
|
||||||
modelValue: modal,
|
modelValue: modal,
|
||||||
'onUpdate:modelValue': (v) => { modal.value = v },
|
'onUpdate:modelValue': (v) => { modal.value = v },
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
Context menu:
|
Context menu:
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<UCard ref="contextMenuRef" class="relative" body-class="h-64" @click="isContextMenuOpen = false" @contextmenu.prevent="openContextMenu">
|
<UCard class="relative" body-class="h-64" @click="isContextMenuOpen = false" @contextmenu.prevent="openContextMenu">
|
||||||
<UContextMenu v-model="isContextMenuOpen" :virtual-element="virtualElement" width-class="w-48">
|
<UContextMenu v-model="isContextMenuOpen" :virtual-element="virtualElement" width-class="w-48">
|
||||||
<UCard @click.stop>
|
<UCard @click.stop>
|
||||||
Menu
|
Menu
|
||||||
@@ -256,7 +256,7 @@ const { $toast } = useNuxtApp()
|
|||||||
const x = ref(0)
|
const x = ref(0)
|
||||||
const y = ref(0)
|
const y = ref(0)
|
||||||
const isContextMenuOpen = ref(false)
|
const isContextMenuOpen = ref(false)
|
||||||
const contextMenuRef = ref(null)
|
const virtualElement = ref({ getBoundingClientRect: () => ({}) })
|
||||||
|
|
||||||
const commandPaletteGroups = computed(() => ([{
|
const commandPaletteGroups = computed(() => ([{
|
||||||
key: 'people',
|
key: 'people',
|
||||||
@@ -277,8 +277,6 @@ onMounted(() => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
const virtualElement = ref({ getBoundingClientRect: () => ({}) })
|
|
||||||
|
|
||||||
function openContextMenu () {
|
function openContextMenu () {
|
||||||
const top = unref(y)
|
const top = unref(y)
|
||||||
const left = unref(x)
|
const left = unref(x)
|
||||||
|
|||||||
Reference in New Issue
Block a user